From 5ee4349fa9c34e711ca6a0a6b21defb62dfa2c62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arsen=20Arsenovi=C4=87?= Date: Tue, 14 Nov 2023 01:02:22 +0100 Subject: [PATCH 001/169] libcpp: Regenerate config.in The previous commit did not include regenerating files maintained by autoheader. libcpp/ChangeLog: * config.in: Regenerate. --- libcpp/config.in | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/libcpp/config.in b/libcpp/config.in index 32397b821667..df4fd44c9ef6 100644 --- a/libcpp/config.in +++ b/libcpp/config.in @@ -38,9 +38,21 @@ */ #undef HAVE_ALLOCA_H +/* Define to 1 if you have the Mac OS X function + CFLocaleCopyPreferredLanguages in the CoreFoundation framework. */ +#undef HAVE_CFLOCALECOPYPREFERREDLANGUAGES + +/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +#undef HAVE_CFPREFERENCESCOPYAPPVALUE + /* Define to 1 if you have the `clearerr_unlocked' function. */ #undef HAVE_CLEARERR_UNLOCKED +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +#undef HAVE_DCGETTEXT + /* Define to 1 if you have the declaration of `abort', and to 0 if you don't. */ #undef HAVE_DECL_ABORT @@ -171,7 +183,10 @@ /* Define to 1 if you have the `getc_unlocked' function. */ #undef HAVE_GETC_UNLOCKED -/* Define if you have the iconv() function. */ +/* Define if the GNU gettext() function is already present or preinstalled. */ +#undef HAVE_GETTEXT + +/* Define if you have the iconv() function and it works. */ #undef HAVE_ICONV /* Define to 1 if you have the header file. */ From 3239a80555556578da8e0be1b1dc3db9fcf4e882 Mon Sep 17 00:00:00 2001 From: Sam James Date: Thu, 2 Nov 2023 08:39:07 +0000 Subject: [PATCH 002/169] maintainer-scripts/gcc_release: use HTTPS for links maintainer-scripts/ * gcc_release: Use HTTPS for links. Signed-off-by: Sam James --- maintainer-scripts/gcc_release | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/maintainer-scripts/gcc_release b/maintainer-scripts/gcc_release index 962b8efe99a7..9d8aa3babd6d 100755 --- a/maintainer-scripts/gcc_release +++ b/maintainer-scripts/gcc_release @@ -25,7 +25,7 @@ # # You should have received a copy of the GNU General Public License # along with GCC; see the file COPYING3. If not see -# . +# . # ######################################################################## @@ -451,7 +451,7 @@ announce_snapshot() { echo \ "Snapshot gcc-"${RELEASE}" is now available on https://gcc.gnu.org/pub/gcc/snapshots/"${RELEASE}"/ -and on various mirrors, see http://gcc.gnu.org/mirrors.html for details. +and on various mirrors, see https://gcc.gnu.org/mirrors.html for details. This snapshot has been generated from the GCC "${BRANCH}" git branch with the following options: "git://gcc.gnu.org/git/gcc.git branch ${GITBRANCH} revision ${GITREV}" @@ -469,7 +469,7 @@ You'll find:

GCC "${RELEASE}" Snapshot

-

The GCC Project makes +

The GCC Project makes periodic snapshots of the GCC source tree available to the public for testing purposes.

From d22b87864e5d476535b75098e20f8d8fdaab4f8f Mon Sep 17 00:00:00 2001 From: Sam James Date: Thu, 2 Nov 2023 08:39:08 +0000 Subject: [PATCH 003/169] maintainer-scripts/gcc_release: cleanup whitespace maintainer-scripts/ * gcc_release: Cleanup whitespace. Signed-off-by: Sam James --- maintainer-scripts/gcc_release | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/maintainer-scripts/gcc_release b/maintainer-scripts/gcc_release index 9d8aa3babd6d..42bb7f68f171 100755 --- a/maintainer-scripts/gcc_release +++ b/maintainer-scripts/gcc_release @@ -153,7 +153,7 @@ build_sources() { # Update this ChangeLog file only if it does not yet contain the # entry we are going to add. (This is a safety net for repeated # runs of this script for the same release.) - if ! grep "GCC ${RELEASE} released." ${SOURCE_DIRECTORY}/${x} > /dev/null ; then + if ! grep "GCC ${RELEASE} released." ${SOURCE_DIRECTORY}/${x} > /dev/null ; then cat - ${SOURCE_DIRECTORY}/${x} > ${SOURCE_DIRECTORY}/${x}.new <The GCC Project makes periodic snapshots of the GCC source tree available to the public for testing purposes.

- +

If you are planning to download and use one of our snapshots, then we highly recommend you join the GCC developers list. Details for how to sign up can be found on the GCC project home page.

@@ -481,7 +481,7 @@ how to sign up can be found on the GCC project home page.

with the following options: "git://gcc.gnu.org/git/gcc.git branch ${GITBRANCH} revision ${GITREV}"

" > ${SNAPSHOT_INDEX} - + snapshot_print gcc-${RELEASE}.tar.xz "Complete GCC" echo \ @@ -548,7 +548,7 @@ FTP_PATH=/var/ftp/pub/gcc # The directory in which snapshots will be placed. SNAPSHOTS_DIR=${FTP_PATH}/snapshots -# The major number for the release. For release `3.0.2' this would be +# The major number for the release. For release `3.0.2' this would be # `3' RELEASE_MAJOR="" # The minor number for the release. For release `3.0.2' this would be @@ -560,7 +560,7 @@ RELEASE_REVISION="" # The complete name of the release. RELEASE="" -# The name of the branch from which the release should be made, in a +# The name of the branch from which the release should be made, in a # user-friendly form. BRANCH="" From fd1596f9962569afff6c9298a7c79686c6950bef Mon Sep 17 00:00:00 2001 From: liuhongt Date: Mon, 30 Oct 2023 15:43:48 +0800 Subject: [PATCH 004/169] Handle bitop with INTEGER_CST in analyze_and_compute_bitop_with_inv_effect. analyze_and_compute_bitop_with_inv_effect assumes the first operand is loop invariant which is not the case when it's INTEGER_CST. gcc/ChangeLog: PR tree-optimization/105735 PR tree-optimization/111972 * tree-scalar-evolution.cc (analyze_and_compute_bitop_with_inv_effect): Handle bitop with INTEGER_CST. gcc/testsuite/ChangeLog: * gcc.target/i386/pr105735-3.c: New test. --- gcc/testsuite/gcc.target/i386/pr105735-3.c | 87 ++++++++++++++++++++++ gcc/tree-scalar-evolution.cc | 3 + 2 files changed, 90 insertions(+) create mode 100644 gcc/testsuite/gcc.target/i386/pr105735-3.c diff --git a/gcc/testsuite/gcc.target/i386/pr105735-3.c b/gcc/testsuite/gcc.target/i386/pr105735-3.c new file mode 100644 index 000000000000..9e268a1a997e --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr105735-3.c @@ -0,0 +1,87 @@ +/* { dg-do compile } */ +/* { dg-options "-O1 -fdump-tree-sccp-details" } */ +/* { dg-final { scan-tree-dump-times {final value replacement} 8 "sccp" } } */ + +unsigned int +__attribute__((noipa)) +foo (unsigned int tmp) +{ + for (int bit = 0; bit < 64; bit++) + tmp &= 11304; + return tmp; +} + +unsigned int +__attribute__((noipa)) +foo1 (unsigned int tmp) +{ + for (int bit = 63; bit >= 0; bit -=3) + tmp &= 11304; + return tmp; +} + +unsigned int +__attribute__((noipa)) +foo2 (unsigned int tmp) +{ + for (int bit = 0; bit < 64; bit++) + tmp |= 11304; + return tmp; +} + +unsigned int +__attribute__((noipa)) +foo3 (unsigned int tmp) +{ + for (int bit = 63; bit >= 0; bit -=3) + tmp |= 11304; + return tmp; +} + +unsigned int +__attribute__((noipa)) +foo4 (unsigned int tmp) +{ + for (int bit = 0; bit < 64; bit++) + tmp ^= 11304; + return tmp; +} + +unsigned int +__attribute__((noipa)) +foo5 (unsigned int tmp) +{ + for (int bit = 0; bit < 63; bit++) + tmp ^= 11304; + return tmp; +} + +unsigned int +__attribute__((noipa)) +f (unsigned int tmp, int bit) +{ + unsigned int res = tmp; + for (int i = 0; i < bit; i++) + res &= 11304; + return res; +} + +unsigned int +__attribute__((noipa)) +f1 (unsigned int tmp, int bit) +{ + unsigned int res = tmp; + for (int i = 0; i < bit; i++) + res |= 11304; + return res; +} + +unsigned int +__attribute__((noipa)) +f2 (unsigned int tmp, int bit) +{ + unsigned int res = tmp; + for (int i = 0; i < bit; i++) + res ^= 11304; + return res; +} diff --git a/gcc/tree-scalar-evolution.cc b/gcc/tree-scalar-evolution.cc index 70b17c5bca16..f61277c32df3 100644 --- a/gcc/tree-scalar-evolution.cc +++ b/gcc/tree-scalar-evolution.cc @@ -3689,6 +3689,9 @@ analyze_and_compute_bitop_with_inv_effect (class loop* loop, tree phidef, match_op[0] = gimple_assign_rhs1 (def); match_op[1] = gimple_assign_rhs2 (def); + if (expr_invariant_in_loop_p (loop, match_op[1])) + std::swap (match_op[0], match_op[1]); + if (TREE_CODE (match_op[1]) != SSA_NAME || !expr_invariant_in_loop_p (loop, match_op[0]) || !(header_phi = dyn_cast (SSA_NAME_DEF_STMT (match_op[1]))) From bfcb6e518371bb943b77e0ef784e1de72a99aec6 Mon Sep 17 00:00:00 2001 From: Juzhe-Zhong Date: Tue, 14 Nov 2023 11:21:16 +0800 Subject: [PATCH 005/169] RISC-V: Fix init-2.c assembly check Notice the assembly check of init-2.c is wrong. Committed. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/vls/init-2.c: Fix vid.v check. --- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-2.c index f27c395441b2..ae31e227ad1d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-2.c @@ -45,4 +45,4 @@ DEF_INIT (v128uhi, uint16_t, 128, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127) -/* { dg-final { scan-assembler-times {vid\.vx} 494 } } */ +/* { dg-final { scan-assembler-times {vid\.v} 14 } } */ From 6043bfbd89b335dd10f093a653ee58c5b1e08ed3 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 14 Nov 2023 08:11:44 +0100 Subject: [PATCH 006/169] i386: Don't optimize vshuf{i,f}{32x4,64x2} and vperm{i,f}128 to vblendps for %ymm16+ [PR112435] The vblendps instruction is only VEX encoded, not EVEX, so can't be used if there are %ymm16+ or EGPR registers involved. 2023-11-14 Jakub Jelinek Hu, Lin1 PR target/112435 * config/i386/sse.md (avx512vl_shuf_32x4_1, avx512dq_shuf_64x2_1): Add alternative with just x instead of v constraints and xjm instead of vm and use vblendps as optimization only with that alternative. * gcc.target/i386/avx512vl-pr112435-1.c: New test. * gcc.target/i386/avx512vl-pr112435-2.c: New test. * gcc.target/i386/avx512vl-pr112435-3.c: New test. --- gcc/config/i386/sse.md | 16 ++-- .../gcc.target/i386/avx512vl-pr112435-1.c | 13 ++++ .../gcc.target/i386/avx512vl-pr112435-2.c | 63 +++++++++++++++ .../gcc.target/i386/avx512vl-pr112435-3.c | 78 +++++++++++++++++++ 4 files changed, 162 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/avx512vl-pr112435-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx512vl-pr112435-2.c create mode 100644 gcc/testsuite/gcc.target/i386/avx512vl-pr112435-3.c diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index c502582102e0..af482f24df4d 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -19235,11 +19235,11 @@ }) (define_insn "avx512dq_shuf_64x2_1" - [(set (match_operand:VI8F_256 0 "register_operand" "=v") + [(set (match_operand:VI8F_256 0 "register_operand" "=x,v") (vec_select:VI8F_256 (vec_concat: - (match_operand:VI8F_256 1 "register_operand" "v") - (match_operand:VI8F_256 2 "nonimmediate_operand" "vm")) + (match_operand:VI8F_256 1 "register_operand" "x,v") + (match_operand:VI8F_256 2 "nonimmediate_operand" "xjm,vm")) (parallel [(match_operand 3 "const_0_to_3_operand") (match_operand 4 "const_0_to_3_operand") (match_operand 5 "const_4_to_7_operand") @@ -19254,7 +19254,7 @@ mask = INTVAL (operands[3]) / 2; mask |= (INTVAL (operands[5]) - 4) / 2 << 1; operands[3] = GEN_INT (mask); - if (INTVAL (operands[3]) == 2 && !) + if (INTVAL (operands[3]) == 2 && ! && which_alternative == 0) return "vblendps\t{$240, %2, %1, %0|%0, %1, %2, 240}"; return "vshuf64x2\t{%3, %2, %1, %0|%0, %1, %2, %3}"; } @@ -19386,11 +19386,11 @@ }) (define_insn "avx512vl_shuf_32x4_1" - [(set (match_operand:VI4F_256 0 "register_operand" "=v") + [(set (match_operand:VI4F_256 0 "register_operand" "=x,v") (vec_select:VI4F_256 (vec_concat: - (match_operand:VI4F_256 1 "register_operand" "v") - (match_operand:VI4F_256 2 "nonimmediate_operand" "vm")) + (match_operand:VI4F_256 1 "register_operand" "x,v") + (match_operand:VI4F_256 2 "nonimmediate_operand" "xjm,vm")) (parallel [(match_operand 3 "const_0_to_7_operand") (match_operand 4 "const_0_to_7_operand") (match_operand 5 "const_0_to_7_operand") @@ -19414,7 +19414,7 @@ mask |= (INTVAL (operands[7]) - 8) / 4 << 1; operands[3] = GEN_INT (mask); - if (INTVAL (operands[3]) == 2 && !) + if (INTVAL (operands[3]) == 2 && ! && which_alternative == 0) return "vblendps\t{$240, %2, %1, %0|%0, %1, %2, 240}"; return "vshuf32x4\t{%3, %2, %1, %0|%0, %1, %2, %3}"; diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-pr112435-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-pr112435-1.c new file mode 100644 index 000000000000..46aae282303b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx512vl-pr112435-1.c @@ -0,0 +1,13 @@ +/* PR target/112435 */ +/* { dg-do assemble { target { avx512vl && { ! ia32 } } } } */ +/* { dg-options "-mavx512vl -O2" } */ + +#include + +__m256i +foo (__m256i a, __m256i b) +{ + register __m256i c __asm__("ymm16") = a; + asm ("" : "+v" (c)); + return _mm256_shuffle_i32x4 (c, b, 2); +} diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-pr112435-2.c b/gcc/testsuite/gcc.target/i386/avx512vl-pr112435-2.c new file mode 100644 index 000000000000..a856fb5887a7 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx512vl-pr112435-2.c @@ -0,0 +1,63 @@ +/* PR target/112435 */ +/* { dg-do assemble { target { avx512vl && { ! ia32 } } } } */ +/* { dg-options "-mavx512vl -O2" } */ + +#include + +/* vpermi128/vpermf128 */ +__m256i +perm0 (__m256i a, __m256i b) +{ + register __m256i c __asm__("ymm17") = a; + asm ("":"+v" (c)); + return _mm256_permute2x128_si256 (c, b, 50); +} + +__m256i +perm1 (__m256i a, __m256i b) +{ + register __m256i c __asm__("ymm17") = a; + asm ("":"+v" (c)); + return _mm256_permute2x128_si256 (c, b, 18); +} + +__m256i +perm2 (__m256i a, __m256i b) +{ + register __m256i c __asm__("ymm17") = a; + asm ("":"+v" (c)); + return _mm256_permute2x128_si256 (c, b, 48); +} + +/* vshuf{i,f}{32x4,64x2} ymm .*/ +__m256i +shuff0 (__m256i a, __m256i b) +{ + register __m256i c __asm__("ymm17") = a; + asm ("":"+v" (c)); + return _mm256_shuffle_i32x4 (c, b, 2); +} + +__m256 +shuff1 (__m256 a, __m256 b) +{ + register __m256 c __asm__("ymm17") = a; + asm ("":"+v" (c)); + return _mm256_shuffle_f32x4 (c, b, 2); +} + +__m256i +shuff2 (__m256i a, __m256i b) +{ + register __m256i c __asm__("ymm17") = a; + asm ("":"+v" (c)); + return _mm256_shuffle_i64x2 (c, b, 2); +} + +__m256d +shuff3 (__m256d a, __m256d b) +{ + register __m256d c __asm__("ymm17") = a; + asm ("":"+v" (c)); + return _mm256_shuffle_f64x2 (c, b, 2); +} diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-pr112435-3.c b/gcc/testsuite/gcc.target/i386/avx512vl-pr112435-3.c new file mode 100644 index 000000000000..f7538ffbbcfb --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx512vl-pr112435-3.c @@ -0,0 +1,78 @@ +/* PR target/112435 */ +/* { dg-do assemble { target { avx512vl && { ! ia32 } } } } */ +/* { dg-options "-mavx512vl -O2" } */ + +#include + +/* vpermf128 */ +__m256 +perm0 (__m256 a, __m256 b) +{ + register __m256 c __asm__("ymm17") =a; + asm ("":"+v" (c)); + return _mm256_permute2f128_ps (c, b, 50); +} + +__m256 +perm1 (__m256 a, __m256 b) +{ + register __m256 c __asm__("ymm17") =a; + asm ("":"+v" (c)); + return _mm256_permute2f128_ps (c, b, 18); +} + +__m256 +perm2 (__m256 a, __m256 b) +{ + register __m256 c __asm__("ymm17") =a; + asm ("":"+v" (c)); + return _mm256_permute2f128_ps (c, b, 48); +} + +__m256i +perm3 (__m256i a, __m256i b) +{ + register __m256i c __asm__("ymm17") =a; + asm ("":"+v" (c)); + return _mm256_permute2f128_si256 (c, b, 50); +} + +__m256i +perm4 (__m256i a, __m256i b) +{ + register __m256i c __asm__("ymm17") =a; + asm ("":"+v" (c)); + return _mm256_permute2f128_si256 (c, b, 18); +} + +__m256i +perm5 (__m256i a, __m256i b) +{ + register __m256i c __asm__("ymm17") =a; + asm ("":"+v" (c)); + return _mm256_permute2f128_si256 (c, b, 48); +} + +__m256d +perm6 (__m256d a, __m256d b) +{ + register __m256d c __asm__("ymm17") =a; + asm ("":"+v" (c)); + return _mm256_permute2f128_pd (c, b, 50); +} + +__m256d +perm7 (__m256d a, __m256d b) +{ + register __m256d c __asm__("ymm17") =a; + asm ("":"+v" (c)); + return _mm256_permute2f128_pd (c, b, 18); +} + +__m256d +perm8 (__m256d a, __m256d b) +{ + register __m256d c __asm__("ymm17") =a; + asm ("":"+v" (c)); + return _mm256_permute2f128_pd (c, b, 48); +} From 6e5f318fc6480412569273c1a71c638c3d677607 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 14 Nov 2023 09:24:34 +0100 Subject: [PATCH 007/169] tree: Handle BITINT_TYPE in type_contains_placeholder_1 [PR112511] The following testcase ICEs because BITINT_TYPE isn't handled in type_contains_placeholder_1. Given that Ada doesn't emit it, it doesn't matter that much where exactly we handle it as right now it should never contain a placeholder; I've picked the same spot as INTEGER_TYPE, but if you prefer e.g. the one with OFFSET_TYPE above, I can move it there too. 2023-11-14 Jakub Jelinek PR middle-end/112511 * tree.cc (type_contains_placeholder_1): Handle BITINT_TYPE like INTEGER_TYPE. * gcc.dg/pr112511.c: New test. --- gcc/testsuite/gcc.dg/pr112511.c | 17 +++++++++++++++++ gcc/tree.cc | 1 + 2 files changed, 18 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/pr112511.c diff --git a/gcc/testsuite/gcc.dg/pr112511.c b/gcc/testsuite/gcc.dg/pr112511.c new file mode 100644 index 000000000000..7d0b73f4776f --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr112511.c @@ -0,0 +1,17 @@ +/* PR middle-end/112511 */ +/* { dg-do compile { target bitint } } */ +/* { dg-options "-O2" } */ + +struct T { _BitInt(22) a; }; + +void +bar (struct T t) +{ +} + +void +foo (void) +{ + struct T t; + bar (t); +} diff --git a/gcc/tree.cc b/gcc/tree.cc index 33ea1d2e2d07..a3d907a4ac0f 100644 --- a/gcc/tree.cc +++ b/gcc/tree.cc @@ -4210,6 +4210,7 @@ type_contains_placeholder_1 (const_tree type) return false; case INTEGER_TYPE: + case BITINT_TYPE: case REAL_TYPE: case FIXED_POINT_TYPE: /* Here we just check the bounds. */ From 4a70bfbf686c2b6a1ecd83fe851de826c612c3e0 Mon Sep 17 00:00:00 2001 From: Xi Ruoyao Date: Tue, 14 Nov 2023 05:32:38 +0800 Subject: [PATCH 008/169] LoongArch: Use finer-grained DBAR hints LA664 defines DBAR hints 0x1 - 0x1f (except 0xf and 0x1f) as follows [1-2]: - Bit 4: kind of constraint (0: completion, 1: ordering) - Bit 3: barrier for previous read (0: true, 1: false) - Bit 2: barrier for previous write (0: true, 1: false) - Bit 1: barrier for succeeding read (0: true, 1: false) - Bit 0: barrier for succeeding write (0: true, 1: false) LLVM has already utilized them for different memory orders [3]: - Bit 4 is always set to one because it's only intended to be zero for things like MMIO devices, which are out of the scope of memory orders. - An acquire barrier is used to implement acquire loads like ld.d $a1, $t0, 0 dbar acquire_hint where the load operation (ld.d) should not be reordered with any load or store operation after the acquire load. To accomplish this constraint, we need to prevent the load operation from being reordered after the barrier, and also prevent any following load/store operation from being reordered before the barrier. Thus bits 0, 1, and 3 must be zero, and bit 2 can be one, so acquire_hint should be 0b10100. - An release barrier is used to implement release stores like dbar release_hint st.d $a1, $t0, 0 where the store operation (st.d) should not be reordered with any load or store operation before the release store. So we need to prevent the store operation from being reordered before the barrier, and also prevent any preceding load/store operation from being reordered after the barrier. So bits 0, 2, 3 must be zero, and bit 1 can be one. So release_hint should be 0b10010. A similar mapping has been utilized for RISC-V GCC [4], LoongArch Linux kernel [1], and LoongArch LLVM [3]. So the mapping should be correct. And I've also bootstrapped & regtested GCC on a LA664 with this patch. The LoongArch CPUs should treat "unknown" hints as dbar 0, so we can unconditionally emit the new hints without a compiler switch. [1]: https://git.kernel.org/torvalds/c/e031a5f3f1ed [2]: https://github.com/loongson-community/docs/pull/12 [3]: https://github.com/llvm/llvm-project/pull/68787 [4]: https://gcc.gnu.org/r14-406 gcc/ChangeLog: * config/loongarch/sync.md (mem_thread_fence): Remove redundant check. (mem_thread_fence_1): Emit finer-grained DBAR hints for different memory models, instead of 0. --- gcc/config/loongarch/sync.md | 51 +++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 9 deletions(-) diff --git a/gcc/config/loongarch/sync.md b/gcc/config/loongarch/sync.md index 9924d522bcdf..1ad0c63e0d9b 100644 --- a/gcc/config/loongarch/sync.md +++ b/gcc/config/loongarch/sync.md @@ -50,23 +50,56 @@ [(match_operand:SI 0 "const_int_operand" "")] ;; model "" { - if (INTVAL (operands[0]) != MEMMODEL_RELAXED) - { - rtx mem = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode)); - MEM_VOLATILE_P (mem) = 1; - emit_insn (gen_mem_thread_fence_1 (mem, operands[0])); - } + rtx mem = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode)); + MEM_VOLATILE_P (mem) = 1; + emit_insn (gen_mem_thread_fence_1 (mem, operands[0])); + DONE; }) -;; Until the LoongArch memory model (hence its mapping from C++) is finalized, -;; conservatively emit a full FENCE. +;; DBAR hint encoding for LA664 and later micro-architectures, paraphrased from +;; the Linux patch revealing it [1]: +;; +;; - Bit 4: kind of constraint (0: completion, 1: ordering) +;; - Bit 3: barrier for previous read (0: true, 1: false) +;; - Bit 2: barrier for previous write (0: true, 1: false) +;; - Bit 1: barrier for succeeding read (0: true, 1: false) +;; - Bit 0: barrier for succeeding write (0: true, 1: false) +;; +;; [1]: https://git.kernel.org/torvalds/c/e031a5f3f1ed +;; +;; Implementations without support for the finer-granularity hints simply treat +;; all as the full barrier (DBAR 0), so we can unconditionally start emiting the +;; more precise hints right away. (define_insn "mem_thread_fence_1" [(set (match_operand:BLK 0 "" "") (unspec:BLK [(match_dup 0)] UNSPEC_MEMORY_BARRIER)) (match_operand:SI 1 "const_int_operand" "")] ;; model "" - "dbar\t0") + { + enum memmodel model = memmodel_base (INTVAL (operands[1])); + + switch (model) + { + case MEMMODEL_ACQUIRE: + return "dbar\t0b10100"; + case MEMMODEL_RELEASE: + return "dbar\t0b10010"; + case MEMMODEL_ACQ_REL: + case MEMMODEL_SEQ_CST: + return "dbar\t0b10000"; + default: + /* GCC internal: "For the '__ATOMIC_RELAXED' model no instructions + need to be issued and this expansion is not invoked." + + __atomic builtins doc: "Consume is implemented using the + stronger acquire memory order because of a deficiency in C++11's + semantics." See PR 59448 and get_memmodel in builtins.cc. + + Other values should not be returned by memmodel_base. */ + gcc_unreachable (); + } + }) ;; Atomic memory operations. From f28306b4fd309b579c8a4a5bf2f1b24fa40f8f7f Mon Sep 17 00:00:00 2001 From: liuhongt Date: Mon, 13 Nov 2023 17:56:49 +0800 Subject: [PATCH 009/169] Fix ICE in vectorizable_nonlinear_induction with bitfield. if (TREE_CODE (init_expr) == INTEGER_CST) init_expr = fold_convert (TREE_TYPE (vectype), init_expr); else gcc_assert (tree_nop_conversion_p (TREE_TYPE (vectype), TREE_TYPE (init_expr))); and init_expr is a 24 bit integer type while vectype has 32bit components. The "fix" is to bail out instead of asserting. gcc/ChangeLog: PR tree-optimization/112496 * tree-vect-loop.cc (vectorizable_nonlinear_induction): Return false when !tree_nop_conversion_p (TREE_TYPE (vectype), TREE_TYPE (init_expr)). gcc/testsuite/ChangeLog: * gcc.target/i386/pr112496.c: New test. --- gcc/testsuite/gcc.target/i386/pr112496.c | 7 +++++++ gcc/tree-vect-loop.cc | 13 ++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr112496.c diff --git a/gcc/testsuite/gcc.target/i386/pr112496.c b/gcc/testsuite/gcc.target/i386/pr112496.c new file mode 100644 index 000000000000..c478fda9cceb --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr112496.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +struct T { int x : 24; } v; +void f1(int x) { + while (v.x - ((v.x <<= 1) - v.x)) ; +} diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index 7d00cc9689c7..fb8d999ee6bf 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -9569,9 +9569,16 @@ vectorizable_nonlinear_induction (loop_vec_info loop_vinfo, if (TREE_CODE (init_expr) == INTEGER_CST) init_expr = fold_convert (TREE_TYPE (vectype), init_expr); - else - gcc_assert (tree_nop_conversion_p (TREE_TYPE (vectype), - TREE_TYPE (init_expr))); + else if (!tree_nop_conversion_p (TREE_TYPE (vectype), TREE_TYPE (init_expr))) + { + /* INIT_EXPR could be a bit_field, bail out for such case. */ + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, + "nonlinear induction vectorization failed:" + " component type of vectype is not a nop conversion" + " from type of init_expr.\n"); + return false; + } switch (induction_type) { From fe23a2ff1f5072559552be0e41ab55bf72f5c79f Mon Sep 17 00:00:00 2001 From: Xi Ruoyao Date: Fri, 3 Nov 2023 21:19:59 +0800 Subject: [PATCH 010/169] LoongArch: Disable relaxation if the assembler don't support conditional branch relaxation [PR112330] As the commit message of r14-4674 has indicated, if the assembler does not support conditional branch relaxation, a relocation overflow may happen on conditional branches when relaxation is enabled because the number of NOP instructions inserted by the assembler will be more than the number estimated by GCC. To work around this issue, disable relaxation by default if the assembler is detected incapable to perform conditional branch relaxation at GCC build time. We also need to pass -mno-relax to the assembler to really disable relaxation. But, if the assembler does not support -mrelax option at all, we should not pass -mno-relax to the assembler or it will immediately error out. Also handle this with the build time assembler capability probing, and add a pair of options -m[no-]pass-mrelax-to-as to allow using a different assembler from the build-time one. With this change, if GCC is built with GAS 2.41, relaxation will be disabled by default. So the default value of -mexplicit-relocs= is also changed to 'always' if -mno-relax is specified or implied by the build-time default, because using assembler macros for symbol addresses produces no benefit when relaxation is disabled. gcc/ChangeLog: PR target/112330 * config/loongarch/genopts/loongarch.opt.in: Add -m[no]-pass-relax-to-as. Change the default of -m[no]-relax to account conditional branch relaxation support status. * config/loongarch/loongarch.opt: Regenerate. * configure.ac (gcc_cv_as_loongarch_cond_branch_relax): Check if the assembler supports conditional branch relaxation. * configure: Regenerate. * config.in: Regenerate. Note that there are some unrelated changes introduced by r14-5424 (which does not contain a config.in regeneration). * config/loongarch/loongarch-opts.h (HAVE_AS_COND_BRANCH_RELAXATION): Define to 0 if not defined. * config/loongarch/loongarch-driver.h (ASM_MRELAX_DEFAULT): Define. (ASM_MRELAX_SPEC): Define. (ASM_SPEC): Use ASM_MRELAX_SPEC instead of "%{mno-relax}". * config/loongarch/loongarch.cc: Take the setting of -m[no-]relax into account when determining the default of -mexplicit-relocs=. * doc/invoke.texi: Document -m[no-]relax and -m[no-]pass-mrelax-to-as for LoongArch. Update the default value of -mexplicit-relocs=. --- gcc/config.in | 35 +++++++++++++++++- gcc/config/loongarch/genopts/loongarch.opt.in | 6 +++- gcc/config/loongarch/loongarch-driver.h | 16 ++++++++- gcc/config/loongarch/loongarch-opts.h | 4 +++ gcc/config/loongarch/loongarch.cc | 2 +- gcc/config/loongarch/loongarch.opt | 6 +++- gcc/configure | 35 ++++++++++++++++++ gcc/configure.ac | 10 ++++++ gcc/doc/invoke.texi | 36 ++++++++++++++----- 9 files changed, 137 insertions(+), 13 deletions(-) diff --git a/gcc/config.in b/gcc/config.in index 0509ba7e6a79..866f9fff1018 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -386,6 +386,12 @@ #endif +/* Define if your assembler supports conditional branch relaxation. */ +#ifndef USED_FOR_TARGET +#undef HAVE_AS_COND_BRANCH_RELAXATION +#endif + + /* Define if your assembler supports the --debug-prefix-map option. */ #ifndef USED_FOR_TARGET #undef HAVE_AS_DEBUG_PREFIX_MAP @@ -820,6 +826,20 @@ #endif +/* Define to 1 if you have the Mac OS X function + CFLocaleCopyPreferredLanguages in the CoreFoundation framework. */ +#ifndef USED_FOR_TARGET +#undef HAVE_CFLOCALECOPYPREFERREDLANGUAGES +#endif + + +/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +#ifndef USED_FOR_TARGET +#undef HAVE_CFPREFERENCESCOPYAPPVALUE +#endif + + /* Define to 1 if you have the `clearerr_unlocked' function. */ #ifndef USED_FOR_TARGET #undef HAVE_CLEARERR_UNLOCKED @@ -844,6 +864,13 @@ #endif +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +#ifndef USED_FOR_TARGET +#undef HAVE_DCGETTEXT +#endif + + /* Define to 1 if we found a declaration for 'abort', otherwise define to 0. */ #ifndef USED_FOR_TARGET @@ -1516,6 +1543,12 @@ #endif +/* Define if the GNU gettext() function is already present or preinstalled. */ +#ifndef USED_FOR_TARGET +#undef HAVE_GETTEXT +#endif + + /* Define to 1 if you have the `gettimeofday' function. */ #ifndef USED_FOR_TARGET #undef HAVE_GETTIMEOFDAY @@ -1547,7 +1580,7 @@ #endif -/* Define if you have the iconv() function. */ +/* Define if you have the iconv() function and it works. */ #ifndef USED_FOR_TARGET #undef HAVE_ICONV #endif diff --git a/gcc/config/loongarch/genopts/loongarch.opt.in b/gcc/config/loongarch/genopts/loongarch.opt.in index e1fe0c7086ea..158701d327a7 100644 --- a/gcc/config/loongarch/genopts/loongarch.opt.in +++ b/gcc/config/loongarch/genopts/loongarch.opt.in @@ -223,10 +223,14 @@ Target Var(TARGET_DIRECT_EXTERN_ACCESS) Init(0) Avoid using the GOT to access external symbols. mrelax -Target Var(loongarch_mrelax) Init(HAVE_AS_MRELAX_OPTION) +Target Var(loongarch_mrelax) Init(HAVE_AS_MRELAX_OPTION && HAVE_AS_COND_BRANCH_RELAXATION) Take advantage of linker relaxations to reduce the number of instructions required to materialize symbol addresses. +mpass-mrelax-to-as +Target Var(loongarch_pass_mrelax_to_as) Init(HAVE_AS_MRELAX_OPTION) +Pass -mrelax or -mno-relax option to the assembler. + -param=loongarch-vect-unroll-limit= Target Joined UInteger Var(loongarch_vect_unroll_limit) Init(6) IntegerRange(1, 64) Param Used to limit unroll factor which indicates how much the autovectorizer may diff --git a/gcc/config/loongarch/loongarch-driver.h b/gcc/config/loongarch/loongarch-driver.h index d859afcc9fee..20d233cc938b 100644 --- a/gcc/config/loongarch/loongarch-driver.h +++ b/gcc/config/loongarch/loongarch-driver.h @@ -51,9 +51,23 @@ along with GCC; see the file COPYING3. If not see "%{G*} %{,ada:-gnatea %{mabi=*} -gnatez} " \ "%(subtarget_cc1_spec)" +#if HAVE_AS_MRELAX_OPTION && HAVE_AS_COND_BRANCH_RELAXATION +#define ASM_MRELAX_DEFAULT "%{!mrelax:%{!mno-relax:-mrelax}}" +#else +#define ASM_MRELAX_DEFAULT "%{!mrelax:%{!mno-relax:-mno-relax}}" +#endif + +#if HAVE_AS_MRELAX_OPTION +#define ASM_MRELAX_SPEC \ + "%{!mno-pass-mrelax-to-as:%{mrelax} %{mno-relax} " ASM_MRELAX_DEFAULT "}" +#else +#define ASM_MRELAX_SPEC \ + "%{mpass-mrelax-to-as:%{mrelax} %{mno-relax} " ASM_MRELAX_DEFAULT "}" +#endif + #undef ASM_SPEC #define ASM_SPEC \ - "%{mabi=*} %{mno-relax} %(subtarget_asm_spec)" + "%{mabi=*} " ASM_MRELAX_SPEC " %(subtarget_asm_spec)" extern const char* diff --git a/gcc/config/loongarch/loongarch-opts.h b/gcc/config/loongarch/loongarch-opts.h index f204828015e1..8de41bbc4f78 100644 --- a/gcc/config/loongarch/loongarch-opts.h +++ b/gcc/config/loongarch/loongarch-opts.h @@ -101,6 +101,10 @@ loongarch_update_gcc_opt_status (struct loongarch_target *target, #define HAVE_AS_MRELAX_OPTION 0 #endif +#ifndef HAVE_AS_COND_BRANCH_RELAXATION +#define HAVE_AS_COND_BRANCH_RELAXATION 0 +#endif + #ifndef HAVE_AS_TLS #define HAVE_AS_TLS 0 #endif diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index 0a2db8452a3f..2998bf740d4b 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -7432,7 +7432,7 @@ loongarch_option_override_internal (struct gcc_options *opts, if (la_opt_explicit_relocs == M_OPT_UNSET) la_opt_explicit_relocs = (HAVE_AS_EXPLICIT_RELOCS - ? (HAVE_AS_MRELAX_OPTION + ? (loongarch_mrelax ? EXPLICIT_RELOCS_AUTO : EXPLICIT_RELOCS_ALWAYS) : EXPLICIT_RELOCS_NONE); diff --git a/gcc/config/loongarch/loongarch.opt b/gcc/config/loongarch/loongarch.opt index 029466083274..a5988411fbb2 100644 --- a/gcc/config/loongarch/loongarch.opt +++ b/gcc/config/loongarch/loongarch.opt @@ -230,10 +230,14 @@ Target Var(TARGET_DIRECT_EXTERN_ACCESS) Init(0) Avoid using the GOT to access external symbols. mrelax -Target Var(loongarch_mrelax) Init(HAVE_AS_MRELAX_OPTION) +Target Var(loongarch_mrelax) Init(HAVE_AS_MRELAX_OPTION && HAVE_AS_COND_BRANCH_RELAXATION) Take advantage of linker relaxations to reduce the number of instructions required to materialize symbol addresses. +mpass-mrelax-to-as +Target Var(loongarch_pass_mrelax_to_as) Init(HAVE_AS_MRELAX_OPTION) +Pass -mrelax or -mno-relax option to the assembler. + -param=loongarch-vect-unroll-limit= Target Joined UInteger Var(loongarch_vect_unroll_limit) Init(6) IntegerRange(1, 64) Param Used to limit unroll factor which indicates how much the autovectorizer may diff --git a/gcc/configure b/gcc/configure index c37cae7331a2..ee97934ac4f6 100755 --- a/gcc/configure +++ b/gcc/configure @@ -31016,6 +31016,41 @@ if test $gcc_cv_as_loongarch_relax = yes; then $as_echo "#define HAVE_AS_MRELAX_OPTION 1" >>confdefs.h +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for conditional branch relaxation support" >&5 +$as_echo_n "checking assembler for conditional branch relaxation support... " >&6; } +if ${gcc_cv_as_loongarch_cond_branch_relax+:} false; then : + $as_echo_n "(cached) " >&6 +else + gcc_cv_as_loongarch_cond_branch_relax=no + if test x$gcc_cv_as != x; then + $as_echo 'a: + .rept 32769 + nop + .endr + beq $a0,$a1,a' > conftest.s + if { ac_try='$gcc_cv_as $gcc_cv_as_flags -o conftest.o conftest.s >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } + then + gcc_cv_as_loongarch_cond_branch_relax=yes + else + echo "configure: failed program was" >&5 + cat conftest.s >&5 + fi + rm -f conftest.o conftest.s + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_loongarch_cond_branch_relax" >&5 +$as_echo "$gcc_cv_as_loongarch_cond_branch_relax" >&6; } +if test $gcc_cv_as_loongarch_cond_branch_relax = yes; then + +$as_echo "#define HAVE_AS_COND_BRANCH_RELAXATION 1" >>confdefs.h + fi ;; diff --git a/gcc/configure.ac b/gcc/configure.ac index 764a33f0b044..d0caf820648e 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -5453,6 +5453,16 @@ x: [-mrelax], [.text],, [AC_DEFINE(HAVE_AS_MRELAX_OPTION, 1, [Define if your assembler supports -mrelax option.])]) + gcc_GAS_CHECK_FEATURE([conditional branch relaxation support], + gcc_cv_as_loongarch_cond_branch_relax, + [], + [a: + .rept 32769 + nop + .endr + beq $a0,$a1,a],, + [AC_DEFINE(HAVE_AS_COND_BRANCH_RELAXATION, 1, + [Define if your assembler supports conditional branch relaxation.])]) ;; s390*-*-*) gcc_GAS_CHECK_FEATURE([.gnu_attribute support], diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index f1a5722675fa..2d30a5d47672 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -1045,7 +1045,7 @@ Objective-C and Objective-C++ Dialects}. -mmax-inline-memcpy-size=@var{n} -mexplicit-relocs=@var{style} -mexplicit-relocs -mno-explicit-relocs -mdirect-extern-access -mno-direct-extern-access --mcmodel=@var{code-model}} +-mcmodel=@var{code-model} -mrelax -mpass-mrelax-to-as} @emph{M32R/D Options} @gccoptlist{-m32r2 -m32rx -m32r @@ -26356,16 +26356,14 @@ with @option{-mexplicit-relocs=always} the assembler relocation operators are always used, with @option{-mexplicit-relocs=auto} the compiler will use the relocation operators where the linker relaxation is impossible to improve the code quality, and macros elsewhere. The default -value for the option is determined during GCC build-time by detecting -corresponding assembler support: +value for the option is determined with the assembler capability detected +during GCC build-time and the setting of @option{-mrelax}: @option{-mexplicit-relocs=none} if the assembler does not support relocation operators at all, @option{-mexplicit-relocs=always} if the assembler supports relocation -operators but does not support relaxation, -@option{-mexplicit-relocs=auto} if the assembler supports both relocation -operators and relaxation. This option is mostly useful for -debugging, or interoperation with assemblers different from the build-time -one. +operators but @option{-mrelax} is not enabled, +@option{-mexplicit-relocs=auto} if the assembler supports relocation +operators and @option{-mrelax} is enabled. @opindex mexplicit-relocs @item -mexplicit-relocs @@ -26389,6 +26387,28 @@ kernels, executables linked with @option{-static} or @option{-static-pie}. @option{-mdirect-extern-access} is not compatible with @option{-fPIC} or @option{-fpic}. +@item -mrelax +@itemx -mno-relax +Take (do not take) advantage of linker relaxations. If +@option{-mpass-mrelax-to-as} is enabled, this option is also passed to +the assembler. The default is determined during GCC build-time by +detecting corresponding assembler support: +@option{-mrelax} if the assembler supports both the @option{-mrelax} +option and the conditional branch relaxation (it's required or the +@code{.align} directives and conditional branch instructions in the +assembly code outputted by GCC may be rejected by the assembler because +of a relocation overflow), @option{-mno-relax} otherwise. + +@item -mpass-mrelax-to-as +@itemx -mno-pass-mrelax-to-as +Pass (do not pass) the @option{-mrelax} or @option{-mno-relax} option +to the assembler. The default is determined during GCC build-time by +detecting corresponding assembler support: +@option{-mpass-mrelax-to-as} if the assembler supports the +@option{-mrelax} option, @option{-mno-pass-mrelax-to-as} otherwise. +This option is mostly useful for debugging, or interoperation with +assemblers different from the build-time one. + @item loongarch-vect-unroll-limit The vectorizer will use available tuning information to determine whether it would be beneficial to unroll the main vectorized loop and by how much. This From 7383cb56e1170789929201b0dadc156888928fdd Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 14 Nov 2023 10:38:56 +0100 Subject: [PATCH 011/169] Add type-generic clz/ctz/clrsb/ffs/parity/popcount builtins [PR111309] The following patch adds 6 new type-generic builtins, __builtin_clzg __builtin_ctzg __builtin_clrsbg __builtin_ffsg __builtin_parityg __builtin_popcountg The g at the end stands for generic because the unsuffixed variant of the builtins already have unsigned int or int arguments. The main reason to add these is to support arbitrary unsigned (for clrsb/ffs signed) bit-precise integer types and also __int128 which wasn't supported by the existing builtins, so that e.g. type-generic functions could then support not just bit-precise unsigned integer type whose width matches a standard or extended integer type, but others too. None of these new builtins promote their first argument, so the argument can be e.g. unsigned char or unsigned short or unsigned __int20 etc. The first 2 support either 1 or 2 arguments, if only 1 argument is supplied, the behavior is undefined for argument 0 like for other __builtin_c[lt]z* builtins, if 2 arguments are supplied, the second argument should be int that will be returned if the argument is 0. All other builtins have just one argument. For __builtin_clrsbg and __builtin_ffsg the argument shall be any signed standard/extended or bit-precise integer, for the others any unsigned standard/extended or bit-precise integer (bool not allowed). One possibility would be to also allow signed integer types for the clz/ctz/parity/popcount ones (and just cast the argument to unsigned_type_for during folding) and similarly unsigned integer types for the clrsb/ffs ones, dunno what is better; for stdbit.h the current version is sufficient and diagnoses use of the inappropriate sign, though on the other side I wonder if users won't be confused by __builtin_clzg (1) being an error and having to write __builtin_clzg (1U). The new builtins are lowered to corresponding builtins with other suffixes or internal calls (plus casts and adjustments where needed) during FE folding or during gimplification at latest, the non-suffixed builtins handling precisions up to precision of int, l up to precision of long, ll up to precision of long long, up to __int128 precision lowered to double-word expansion early and the rest (which must be _BitInt) lowered to internal fn calls - those are then lowered during bitint lowering pass. The patch also changes representation of IFN_CLZ and IFN_CTZ calls, previously they were in the IL only if they are directly supported optab and depending on C[LT]Z_DEFINED_VALUE_AT_ZERO (...) == 2 they had or didn't have defined behavior at 0, now they are in the IL either if directly supported optab, or for the large/huge BITINT_TYPEs and they have either 1 or 2 arguments. If one, the behavior is undefined at zero, if 2, the second argument is an int constant that should be returned for 0. As there is no extra support during expansion, for directly supported optab the second argument if present should still match the C[LT]Z_DEFINED_VALUE_AT_ZERO (...) == 2 value, but for BITINT_TYPE arguments it can be arbitrary int INTEGER_CST. The indended uses in stdbit.h are e.g. #ifdef __has_builtin #if __has_builtin(__builtin_clzg) && __has_builtin(__builtin_ctzg) && __has_builtin(__builtin_popcountg) #define stdc_leading_zeros(value) \ ((unsigned int) __builtin_clzg (value, __builtin_popcountg ((__typeof (value)) ~(__typeof (value)) 0))) #define stdc_leading_ones(value) \ ((unsigned int) __builtin_clzg ((__typeof (value)) ~(value), __builtin_popcountg ((__typeof (value)) ~(__typeof (value)) 0))) #define stdc_first_trailing_one(value) \ ((unsigned int) (__builtin_ctzg (value, -1) + 1)) #define stdc_trailing_zeros(value) \ ((unsigned int) __builtin_ctzg (value, __builtin_popcountg ((__typeof (value)) ~(__typeof (value)) 0))) #endif #endif where __builtin_popcountg ((__typeof (x)) -1) computes the bit precision of x's type (kind of _Bitwidthof (x) alternative). They also allow casting of arbitrary unsigned _BitInt other than unsigned _BitInt(1) to corresponding signed _BitInt by using signed _BitInt(__builtin_popcountg ((__typeof (a)) -1)) and of arbitrary signed _BitInt to corresponding unsigned _BitInt using unsigned _BitInt(__builtin_clrsbg ((__typeof (a)) -1) + 1). 2023-11-14 Jakub Jelinek PR c/111309 gcc/ * builtins.def (BUILT_IN_CLZG, BUILT_IN_CTZG, BUILT_IN_CLRSBG, BUILT_IN_FFSG, BUILT_IN_PARITYG, BUILT_IN_POPCOUNTG): New builtins. * builtins.cc (fold_builtin_bit_query): New function. (fold_builtin_1): Use it for BUILT_IN_{CLZ,CTZ,CLRSB,FFS,PARITY,POPCOUNT}G. (fold_builtin_2): Use it for BUILT_IN_{CLZ,CTZ}G. * fold-const-call.cc: Fix comment typo on tm.h inclusion. (fold_const_call_ss): Handle CFN_BUILT_IN_{CLZ,CTZ,CLRSB,FFS,PARITY,POPCOUNT}G. (fold_const_call_sss): New function. (fold_const_call_1): Call it for 2 argument functions returning scalar when passed 2 INTEGER_CSTs. * genmatch.cc (cmp_operand): For function calls also compare number of arguments. (fns_cmp): New function. (dt_node::gen_kids): Sort fns and generic_fns. (dt_node::gen_kids_1): Handle fns with the same id but different number of arguments. * match.pd (CLZ simplifications): Drop checks for defined behavior at zero. Add variant of simplifications for IFN_CLZ with 2 arguments. (CTZ simplifications): Drop checks for defined behavior at zero, don't optimize precisions above MAX_FIXED_MODE_SIZE. Add variant of simplifications for IFN_CTZ with 2 arguments. (a != 0 ? CLZ(a) : CST -> .CLZ(a)): Use TREE_TYPE (@3) instead of type, add BITINT_TYPE handling, create 2 argument IFN_CLZ rather than one argument. Add variant for matching CLZ with 2 arguments. (a != 0 ? CTZ(a) : CST -> .CTZ(a)): Similarly. * gimple-lower-bitint.cc (bitint_large_huge::lower_bit_query): New method. (bitint_large_huge::lower_call): Use it for IFN_{CLZ,CTZ,CLRSB,FFS} and IFN_{PARITY,POPCOUNT} calls. * gimple-range-op.cc (cfn_clz::fold_range): Don't check CLZ_DEFINED_VALUE_AT_ZERO for m_gimple_call_internal_p, instead assume defined value at zero if the call has 2 arguments and use second argument value for that case. (cfn_ctz::fold_range): Similarly. (gimple_range_op_handler::maybe_builtin_call): Use op_cfn_clz_internal or op_cfn_ctz_internal only if internal fn call has 2 arguments and set m_op2 in that case. * tree-vect-patterns.cc (vect_recog_ctz_ffs_pattern, vect_recog_popcount_clz_ctz_ffs_pattern): For value defined at zero use second argument of calls if present, otherwise assume UB at zero, create 2 argument .CLZ/.CTZ calls if needed. * tree-vect-stmts.cc (vectorizable_call): Handle 2 argument .CLZ/.CTZ calls. * tree-ssa-loop-niter.cc (build_cltz_expr): Create 2 argument .CLZ/.CTZ calls if needed. * tree-ssa-forwprop.cc (simplify_count_trailing_zeroes): Create 2 argument .CTZ calls if needed. * tree-ssa-phiopt.cc (cond_removal_in_builtin_zero_pattern): Handle 2 argument .CLZ/.CTZ calls, handle BITINT_TYPE, create 2 argument .CLZ/.CTZ calls. * doc/extend.texi (__builtin_clzg, __builtin_ctzg, __builtin_clrsbg, __builtin_ffsg, __builtin_parityg, __builtin_popcountg): Document. gcc/c-family/ * c-common.cc (check_builtin_function_arguments): Handle BUILT_IN_{CLZ,CTZ,CLRSB,FFS,PARITY,POPCOUNT}G. * c-gimplify.cc (c_gimplify_expr): If __builtin_c[lt]zg second argument hasn't been folded into constant yet, transform it to one argument call inside of a COND_EXPR which for first argument 0 returns the second argument. gcc/c/ * c-typeck.cc (convert_arguments): Don't promote first argument of BUILT_IN_{CLZ,CTZ,CLRSB,FFS,PARITY,POPCOUNT}G. gcc/cp/ * call.cc (magic_varargs_p): Return 4 for BUILT_IN_{CLZ,CTZ,CLRSB,FFS,PARITY,POPCOUNT}G. (build_over_call): Don't promote first argument of BUILT_IN_{CLZ,CTZ,CLRSB,FFS,PARITY,POPCOUNT}G. * cp-gimplify.cc (cp_gimplify_expr): For BUILT_IN_C{L,T}ZG use c_gimplify_expr. gcc/testsuite/ * c-c++-common/pr111309-1.c: New test. * c-c++-common/pr111309-2.c: New test. * gcc.dg/torture/bitint-43.c: New test. * gcc.dg/torture/bitint-44.c: New test. --- gcc/builtins.cc | 277 ++++++++++++ gcc/builtins.def | 6 + gcc/c-family/c-common.cc | 74 +++- gcc/c-family/c-gimplify.cc | 22 + gcc/c/c-typeck.cc | 18 +- gcc/cp/call.cc | 14 +- gcc/cp/cp-gimplify.cc | 4 + gcc/doc/extend.texi | 42 ++ gcc/fold-const-call.cc | 68 ++- gcc/genmatch.cc | 66 ++- gcc/gimple-lower-bitint.cc | 527 +++++++++++++++++++++++ gcc/gimple-range-op.cc | 67 ++- gcc/match.pd | 202 ++++++--- gcc/testsuite/c-c++-common/pr111309-1.c | 470 ++++++++++++++++++++ gcc/testsuite/c-c++-common/pr111309-2.c | 85 ++++ gcc/testsuite/gcc.dg/torture/bitint-43.c | 306 +++++++++++++ gcc/testsuite/gcc.dg/torture/bitint-44.c | 306 +++++++++++++ gcc/tree-ssa-forwprop.cc | 8 +- gcc/tree-ssa-loop-niter.cc | 10 +- gcc/tree-ssa-phiopt.cc | 66 ++- gcc/tree-vect-patterns.cc | 65 +-- gcc/tree-vect-stmts.cc | 16 + 22 files changed, 2576 insertions(+), 143 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/pr111309-1.c create mode 100644 gcc/testsuite/c-c++-common/pr111309-2.c create mode 100644 gcc/testsuite/gcc.dg/torture/bitint-43.c create mode 100644 gcc/testsuite/gcc.dg/torture/bitint-44.c diff --git a/gcc/builtins.cc b/gcc/builtins.cc index cb90bd03b3ea..5ece0d23eb9a 100644 --- a/gcc/builtins.cc +++ b/gcc/builtins.cc @@ -9573,6 +9573,271 @@ fold_builtin_arith_overflow (location_t loc, enum built_in_function fcode, return build2_loc (loc, COMPOUND_EXPR, boolean_type_node, store, ovfres); } +/* Fold __builtin_{clz,ctz,clrsb,ffs,parity,popcount}g into corresponding + internal function. */ + +static tree +fold_builtin_bit_query (location_t loc, enum built_in_function fcode, + tree arg0, tree arg1) +{ + enum internal_fn ifn; + enum built_in_function fcodei, fcodel, fcodell; + tree arg0_type = TREE_TYPE (arg0); + tree cast_type = NULL_TREE; + int addend = 0; + + switch (fcode) + { + case BUILT_IN_CLZG: + if (arg1 && TREE_CODE (arg1) != INTEGER_CST) + return NULL_TREE; + ifn = IFN_CLZ; + fcodei = BUILT_IN_CLZ; + fcodel = BUILT_IN_CLZL; + fcodell = BUILT_IN_CLZLL; + break; + case BUILT_IN_CTZG: + if (arg1 && TREE_CODE (arg1) != INTEGER_CST) + return NULL_TREE; + ifn = IFN_CTZ; + fcodei = BUILT_IN_CTZ; + fcodel = BUILT_IN_CTZL; + fcodell = BUILT_IN_CTZLL; + break; + case BUILT_IN_CLRSBG: + ifn = IFN_CLRSB; + fcodei = BUILT_IN_CLRSB; + fcodel = BUILT_IN_CLRSBL; + fcodell = BUILT_IN_CLRSBLL; + break; + case BUILT_IN_FFSG: + ifn = IFN_FFS; + fcodei = BUILT_IN_FFS; + fcodel = BUILT_IN_FFSL; + fcodell = BUILT_IN_FFSLL; + break; + case BUILT_IN_PARITYG: + ifn = IFN_PARITY; + fcodei = BUILT_IN_PARITY; + fcodel = BUILT_IN_PARITYL; + fcodell = BUILT_IN_PARITYLL; + break; + case BUILT_IN_POPCOUNTG: + ifn = IFN_POPCOUNT; + fcodei = BUILT_IN_POPCOUNT; + fcodel = BUILT_IN_POPCOUNTL; + fcodell = BUILT_IN_POPCOUNTLL; + break; + default: + gcc_unreachable (); + } + + if (TYPE_PRECISION (arg0_type) + <= TYPE_PRECISION (long_long_unsigned_type_node)) + { + if (TYPE_PRECISION (arg0_type) <= TYPE_PRECISION (unsigned_type_node)) + + cast_type = (TYPE_UNSIGNED (arg0_type) + ? unsigned_type_node : integer_type_node); + else if (TYPE_PRECISION (arg0_type) + <= TYPE_PRECISION (long_unsigned_type_node)) + { + cast_type = (TYPE_UNSIGNED (arg0_type) + ? long_unsigned_type_node : long_integer_type_node); + fcodei = fcodel; + } + else + { + cast_type = (TYPE_UNSIGNED (arg0_type) + ? long_long_unsigned_type_node + : long_long_integer_type_node); + fcodei = fcodell; + } + } + else if (TYPE_PRECISION (arg0_type) <= MAX_FIXED_MODE_SIZE) + { + cast_type + = build_nonstandard_integer_type (MAX_FIXED_MODE_SIZE, + TYPE_UNSIGNED (arg0_type)); + gcc_assert (TYPE_PRECISION (cast_type) + == 2 * TYPE_PRECISION (long_long_unsigned_type_node)); + fcodei = END_BUILTINS; + } + else + fcodei = END_BUILTINS; + if (cast_type) + { + switch (fcode) + { + case BUILT_IN_CLZG: + case BUILT_IN_CLRSBG: + addend = TYPE_PRECISION (arg0_type) - TYPE_PRECISION (cast_type); + break; + default: + break; + } + arg0 = fold_convert (cast_type, arg0); + arg0_type = cast_type; + } + + if (arg1) + arg1 = fold_convert (integer_type_node, arg1); + + tree arg2 = arg1; + if (fcode == BUILT_IN_CLZG && addend) + { + if (arg1) + arg0 = save_expr (arg0); + arg2 = NULL_TREE; + } + tree call = NULL_TREE, tem; + if (TYPE_PRECISION (arg0_type) == MAX_FIXED_MODE_SIZE + && (TYPE_PRECISION (arg0_type) + == 2 * TYPE_PRECISION (long_long_unsigned_type_node))) + { + /* __int128 expansions using up to 2 long long builtins. */ + arg0 = save_expr (arg0); + tree type = (TYPE_UNSIGNED (arg0_type) + ? long_long_unsigned_type_node + : long_long_integer_type_node); + tree hi = fold_build2 (RSHIFT_EXPR, arg0_type, arg0, + build_int_cst (integer_type_node, + MAX_FIXED_MODE_SIZE / 2)); + hi = fold_convert (type, hi); + tree lo = fold_convert (type, arg0); + switch (fcode) + { + case BUILT_IN_CLZG: + call = fold_builtin_bit_query (loc, fcode, lo, NULL_TREE); + call = fold_build2 (PLUS_EXPR, integer_type_node, call, + build_int_cst (integer_type_node, + MAX_FIXED_MODE_SIZE / 2)); + if (arg2) + call = fold_build3 (COND_EXPR, integer_type_node, + fold_build2 (NE_EXPR, boolean_type_node, + lo, build_zero_cst (type)), + call, arg2); + call = fold_build3 (COND_EXPR, integer_type_node, + fold_build2 (NE_EXPR, boolean_type_node, + hi, build_zero_cst (type)), + fold_builtin_bit_query (loc, fcode, hi, + NULL_TREE), + call); + break; + case BUILT_IN_CTZG: + call = fold_builtin_bit_query (loc, fcode, hi, NULL_TREE); + call = fold_build2 (PLUS_EXPR, integer_type_node, call, + build_int_cst (integer_type_node, + MAX_FIXED_MODE_SIZE / 2)); + if (arg2) + call = fold_build3 (COND_EXPR, integer_type_node, + fold_build2 (NE_EXPR, boolean_type_node, + hi, build_zero_cst (type)), + call, arg2); + call = fold_build3 (COND_EXPR, integer_type_node, + fold_build2 (NE_EXPR, boolean_type_node, + lo, build_zero_cst (type)), + fold_builtin_bit_query (loc, fcode, lo, + NULL_TREE), + call); + break; + case BUILT_IN_CLRSBG: + tem = fold_builtin_bit_query (loc, fcode, lo, NULL_TREE); + tem = fold_build2 (PLUS_EXPR, integer_type_node, tem, + build_int_cst (integer_type_node, + MAX_FIXED_MODE_SIZE / 2)); + tem = fold_build3 (COND_EXPR, integer_type_node, + fold_build2 (LT_EXPR, boolean_type_node, + fold_build2 (BIT_XOR_EXPR, type, + lo, hi), + build_zero_cst (type)), + build_int_cst (integer_type_node, + MAX_FIXED_MODE_SIZE / 2 - 1), + tem); + call = fold_builtin_bit_query (loc, fcode, hi, NULL_TREE); + call = save_expr (call); + call = fold_build3 (COND_EXPR, integer_type_node, + fold_build2 (NE_EXPR, boolean_type_node, + call, + build_int_cst (integer_type_node, + MAX_FIXED_MODE_SIZE + / 2 - 1)), + call, tem); + break; + case BUILT_IN_FFSG: + call = fold_builtin_bit_query (loc, fcode, hi, NULL_TREE); + call = fold_build2 (PLUS_EXPR, integer_type_node, call, + build_int_cst (integer_type_node, + MAX_FIXED_MODE_SIZE / 2)); + call = fold_build3 (COND_EXPR, integer_type_node, + fold_build2 (NE_EXPR, boolean_type_node, + hi, build_zero_cst (type)), + call, integer_zero_node); + call = fold_build3 (COND_EXPR, integer_type_node, + fold_build2 (NE_EXPR, boolean_type_node, + lo, build_zero_cst (type)), + fold_builtin_bit_query (loc, fcode, lo, + NULL_TREE), + call); + break; + case BUILT_IN_PARITYG: + call = fold_builtin_bit_query (loc, fcode, + fold_build2 (BIT_XOR_EXPR, type, + lo, hi), NULL_TREE); + break; + case BUILT_IN_POPCOUNTG: + call = fold_build2 (PLUS_EXPR, integer_type_node, + fold_builtin_bit_query (loc, fcode, hi, + NULL_TREE), + fold_builtin_bit_query (loc, fcode, lo, + NULL_TREE)); + break; + default: + gcc_unreachable (); + } + } + else + { + /* Only keep second argument to IFN_CLZ/IFN_CTZ if it is the + value defined at zero during GIMPLE, or for large/huge _BitInt + (which are then lowered during bitint lowering). */ + if (arg2 && TREE_CODE (TREE_TYPE (arg0)) != BITINT_TYPE) + { + int val; + if (fcode == BUILT_IN_CLZG) + { + if (CLZ_DEFINED_VALUE_AT_ZERO (SCALAR_TYPE_MODE (arg0_type), + val) != 2 + || wi::to_widest (arg2) != val) + arg2 = NULL_TREE; + } + else if (CTZ_DEFINED_VALUE_AT_ZERO (SCALAR_TYPE_MODE (arg0_type), + val) != 2 + || wi::to_widest (arg2) != val) + arg2 = NULL_TREE; + if (!direct_internal_fn_supported_p (ifn, arg0_type, + OPTIMIZE_FOR_BOTH)) + arg2 = NULL_TREE; + } + if (fcodei == END_BUILTINS || arg2) + call = build_call_expr_internal_loc (loc, ifn, integer_type_node, + arg2 ? 2 : 1, arg0, arg2); + else + call = build_call_expr_loc (loc, builtin_decl_explicit (fcodei), 1, + arg0); + } + if (addend) + call = fold_build2 (PLUS_EXPR, integer_type_node, call, + build_int_cst (integer_type_node, addend)); + if (arg1 && arg2 == NULL_TREE) + call = fold_build3 (COND_EXPR, integer_type_node, + fold_build2 (NE_EXPR, boolean_type_node, + arg0, build_zero_cst (arg0_type)), + call, arg1); + + return call; +} + /* Fold __builtin_{add,sub}c{,l,ll} into pair of internal functions that return both result of arithmetics and overflowed boolean flag in a complex integer result. */ @@ -9824,6 +10089,14 @@ fold_builtin_1 (location_t loc, tree expr, tree fndecl, tree arg0) return build_empty_stmt (loc); break; + case BUILT_IN_CLZG: + case BUILT_IN_CTZG: + case BUILT_IN_CLRSBG: + case BUILT_IN_FFSG: + case BUILT_IN_PARITYG: + case BUILT_IN_POPCOUNTG: + return fold_builtin_bit_query (loc, fcode, arg0, NULL_TREE); + default: break; } @@ -9913,6 +10186,10 @@ fold_builtin_2 (location_t loc, tree expr, tree fndecl, tree arg0, tree arg1) case BUILT_IN_ATOMIC_IS_LOCK_FREE: return fold_builtin_atomic_is_lock_free (arg0, arg1); + case BUILT_IN_CLZG: + case BUILT_IN_CTZG: + return fold_builtin_bit_query (loc, fcode, arg0, arg1); + default: break; } diff --git a/gcc/builtins.def b/gcc/builtins.def index a6fdb2262714..33e6cad8ce14 100644 --- a/gcc/builtins.def +++ b/gcc/builtins.def @@ -962,15 +962,18 @@ DEF_GCC_BUILTIN (BUILT_IN_CLZ, "clz", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_ DEF_GCC_BUILTIN (BUILT_IN_CLZIMAX, "clzimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LEAF_LIST) DEF_GCC_BUILTIN (BUILT_IN_CLZL, "clzl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST) DEF_GCC_BUILTIN (BUILT_IN_CLZLL, "clzll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST) +DEF_GCC_BUILTIN (BUILT_IN_CLZG, "clzg", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF) DEF_GCC_BUILTIN (BUILT_IN_CONSTANT_P, "constant_p", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_LEAF_LIST) DEF_GCC_BUILTIN (BUILT_IN_CTZ, "ctz", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST) DEF_GCC_BUILTIN (BUILT_IN_CTZIMAX, "ctzimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LEAF_LIST) DEF_GCC_BUILTIN (BUILT_IN_CTZL, "ctzl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST) DEF_GCC_BUILTIN (BUILT_IN_CTZLL, "ctzll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST) +DEF_GCC_BUILTIN (BUILT_IN_CTZG, "ctzg", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF) DEF_GCC_BUILTIN (BUILT_IN_CLRSB, "clrsb", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST) DEF_GCC_BUILTIN (BUILT_IN_CLRSBIMAX, "clrsbimax", BT_FN_INT_INTMAX, ATTR_CONST_NOTHROW_LEAF_LIST) DEF_GCC_BUILTIN (BUILT_IN_CLRSBL, "clrsbl", BT_FN_INT_LONG, ATTR_CONST_NOTHROW_LEAF_LIST) DEF_GCC_BUILTIN (BUILT_IN_CLRSBLL, "clrsbll", BT_FN_INT_LONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST) +DEF_GCC_BUILTIN (BUILT_IN_CLRSBG, "clrsbg", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF) DEF_EXT_LIB_BUILTIN (BUILT_IN_DCGETTEXT, "dcgettext", BT_FN_STRING_CONST_STRING_CONST_STRING_INT, ATTR_FORMAT_ARG_2) DEF_EXT_LIB_BUILTIN (BUILT_IN_DGETTEXT, "dgettext", BT_FN_STRING_CONST_STRING_CONST_STRING, ATTR_FORMAT_ARG_2) DEF_GCC_BUILTIN (BUILT_IN_DWARF_CFA, "dwarf_cfa", BT_FN_PTR, ATTR_NULL) @@ -993,6 +996,7 @@ DEF_EXT_LIB_BUILTIN (BUILT_IN_FFS, "ffs", BT_FN_INT_INT, ATTR_CONST_NOTHROW_L DEF_EXT_LIB_BUILTIN (BUILT_IN_FFSIMAX, "ffsimax", BT_FN_INT_INTMAX, ATTR_CONST_NOTHROW_LEAF_LIST) DEF_EXT_LIB_BUILTIN (BUILT_IN_FFSL, "ffsl", BT_FN_INT_LONG, ATTR_CONST_NOTHROW_LEAF_LIST) DEF_EXT_LIB_BUILTIN (BUILT_IN_FFSLL, "ffsll", BT_FN_INT_LONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST) +DEF_GCC_BUILTIN (BUILT_IN_FFSG, "ffsg", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF) DEF_EXT_LIB_BUILTIN (BUILT_IN_FORK, "fork", BT_FN_PID, ATTR_NOTHROW_LIST) DEF_GCC_BUILTIN (BUILT_IN_FRAME_ADDRESS, "frame_address", BT_FN_PTR_UINT, ATTR_NULL) /* [trans-mem]: Adjust BUILT_IN_TM_FREE if BUILT_IN_FREE is changed. */ @@ -1041,10 +1045,12 @@ DEF_GCC_BUILTIN (BUILT_IN_PARITY, "parity", BT_FN_INT_UINT, ATTR_CONST_NO DEF_GCC_BUILTIN (BUILT_IN_PARITYIMAX, "parityimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LEAF_LIST) DEF_GCC_BUILTIN (BUILT_IN_PARITYL, "parityl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST) DEF_GCC_BUILTIN (BUILT_IN_PARITYLL, "parityll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST) +DEF_GCC_BUILTIN (BUILT_IN_PARITYG, "parityg", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF) DEF_GCC_BUILTIN (BUILT_IN_POPCOUNT, "popcount", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST) DEF_GCC_BUILTIN (BUILT_IN_POPCOUNTIMAX, "popcountimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LEAF_LIST) DEF_GCC_BUILTIN (BUILT_IN_POPCOUNTL, "popcountl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST) DEF_GCC_BUILTIN (BUILT_IN_POPCOUNTLL, "popcountll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST) +DEF_GCC_BUILTIN (BUILT_IN_POPCOUNTG, "popcountg", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF) DEF_EXT_LIB_BUILTIN (BUILT_IN_POSIX_MEMALIGN, "posix_memalign", BT_FN_INT_PTRPTR_SIZE_SIZE, ATTR_NOTHROW_NONNULL_LEAF) DEF_GCC_BUILTIN (BUILT_IN_PREFETCH, "prefetch", BT_FN_VOID_CONST_PTR_VAR, ATTR_NOVOPS_LEAF_LIST) DEF_LIB_BUILTIN (BUILT_IN_REALLOC, "realloc", BT_FN_PTR_PTR_SIZE, ATTR_ALLOC_WARN_UNUSED_RESULT_SIZE_2_NOTHROW_LEAF_LIST) diff --git a/gcc/c-family/c-common.cc b/gcc/c-family/c-common.cc index 77faf179cca8..a619429f694f 100644 --- a/gcc/c-family/c-common.cc +++ b/gcc/c-family/c-common.cc @@ -6475,14 +6475,14 @@ check_builtin_function_arguments (location_t loc, vec arg_loc, } if (TREE_CODE (TREE_TYPE (args[2])) == ENUMERAL_TYPE) { - error_at (ARG_LOCATION (2), "argument 3 in call to function " - "%qE has enumerated type", fndecl); + error_at (ARG_LOCATION (2), "argument %u in call to function " + "%qE has enumerated type", 3, fndecl); return false; } else if (TREE_CODE (TREE_TYPE (args[2])) == BOOLEAN_TYPE) { - error_at (ARG_LOCATION (2), "argument 3 in call to function " - "%qE has boolean type", fndecl); + error_at (ARG_LOCATION (2), "argument %u in call to function " + "%qE has boolean type", 3, fndecl); return false; } return true; @@ -6522,6 +6522,72 @@ check_builtin_function_arguments (location_t loc, vec arg_loc, } return false; + case BUILT_IN_CLZG: + case BUILT_IN_CTZG: + case BUILT_IN_CLRSBG: + case BUILT_IN_FFSG: + case BUILT_IN_PARITYG: + case BUILT_IN_POPCOUNTG: + if (nargs == 2 + && (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CLZG + || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CTZG)) + { + if (!INTEGRAL_TYPE_P (TREE_TYPE (args[1]))) + { + error_at (ARG_LOCATION (1), "argument %u in call to function " + "%qE does not have integral type", 2, fndecl); + return false; + } + if ((TYPE_PRECISION (TREE_TYPE (args[1])) + > TYPE_PRECISION (integer_type_node)) + || (TYPE_PRECISION (TREE_TYPE (args[1])) + == TYPE_PRECISION (integer_type_node) + && TYPE_UNSIGNED (TREE_TYPE (args[1])))) + { + error_at (ARG_LOCATION (1), "argument %u in call to function " + "%qE does not have % type", 2, fndecl); + return false; + } + } + else if (!builtin_function_validate_nargs (loc, fndecl, nargs, 1)) + return false; + + if (!INTEGRAL_TYPE_P (TREE_TYPE (args[0]))) + { + error_at (ARG_LOCATION (0), "argument %u in call to function " + "%qE does not have integral type", 1, fndecl); + return false; + } + if (TREE_CODE (TREE_TYPE (args[0])) == ENUMERAL_TYPE) + { + error_at (ARG_LOCATION (0), "argument %u in call to function " + "%qE has enumerated type", 1, fndecl); + return false; + } + if (TREE_CODE (TREE_TYPE (args[0])) == BOOLEAN_TYPE) + { + error_at (ARG_LOCATION (0), "argument %u in call to function " + "%qE has boolean type", 1, fndecl); + return false; + } + if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_FFSG + || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CLRSBG) + { + if (TYPE_UNSIGNED (TREE_TYPE (args[0]))) + { + error_at (ARG_LOCATION (0), "argument 1 in call to function " + "%qE has unsigned type", fndecl); + return false; + } + } + else if (!TYPE_UNSIGNED (TREE_TYPE (args[0]))) + { + error_at (ARG_LOCATION (0), "argument 1 in call to function " + "%qE has signed type", fndecl); + return false; + } + return true; + default: return true; } diff --git a/gcc/c-family/c-gimplify.cc b/gcc/c-family/c-gimplify.cc index 17b0610a89f9..2f44e125f925 100644 --- a/gcc/c-family/c-gimplify.cc +++ b/gcc/c-family/c-gimplify.cc @@ -818,6 +818,28 @@ c_gimplify_expr (tree *expr_p, gimple_seq *pre_p ATTRIBUTE_UNUSED, break; } + case CALL_EXPR: + { + tree fndecl = get_callee_fndecl (*expr_p); + if (fndecl + && fndecl_built_in_p (fndecl, BUILT_IN_CLZG, BUILT_IN_CTZG) + && call_expr_nargs (*expr_p) == 2 + && TREE_CODE (CALL_EXPR_ARG (*expr_p, 1)) != INTEGER_CST) + { + tree a = save_expr (CALL_EXPR_ARG (*expr_p, 0)); + tree c = build_call_expr_loc (EXPR_LOCATION (*expr_p), + fndecl, 1, a); + *expr_p = build3_loc (EXPR_LOCATION (*expr_p), COND_EXPR, + integer_type_node, + build2_loc (EXPR_LOCATION (*expr_p), + NE_EXPR, boolean_type_node, a, + build_zero_cst (TREE_TYPE (a))), + c, CALL_EXPR_ARG (*expr_p, 1)); + return GS_OK; + } + break; + } + default:; } diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc index 366ca88c6331..1dbb4471a88a 100644 --- a/gcc/c/c-typeck.cc +++ b/gcc/c/c-typeck.cc @@ -3416,6 +3416,7 @@ convert_arguments (location_t loc, vec arg_loc, tree typelist, && lookup_attribute ("type generic", TYPE_ATTRIBUTES (TREE_TYPE (fundecl))); bool type_generic_remove_excess_precision = false; bool type_generic_overflow_p = false; + bool type_generic_bit_query = false; tree selector; /* Change pointer to function to the function itself for @@ -3471,6 +3472,17 @@ convert_arguments (location_t loc, vec arg_loc, tree typelist, type_generic_overflow_p = true; break; + case BUILT_IN_CLZG: + case BUILT_IN_CTZG: + case BUILT_IN_CLRSBG: + case BUILT_IN_FFSG: + case BUILT_IN_PARITYG: + case BUILT_IN_POPCOUNTG: + /* The first argument of these type-generic builtins + should not be promoted. */ + type_generic_bit_query = true; + break; + default: break; } @@ -3606,11 +3618,13 @@ convert_arguments (location_t loc, vec arg_loc, tree typelist, } } else if ((excess_precision && !type_generic) - || (type_generic_overflow_p && parmnum == 2)) + || (type_generic_overflow_p && parmnum == 2) + || (type_generic_bit_query && parmnum == 0)) /* A "double" argument with excess precision being passed without a prototype or in variable arguments. The last argument of __builtin_*_overflow_p should not be - promoted. */ + promoted, similarly the first argument of + __builtin_{clz,ctz,clrsb,ffs,parity,popcount}g. */ parmval = convert (valtype, val); else if ((invalid_func_diag = targetm.calls.invalid_arg_for_unprototyped_fn (typelist, fundecl, val))) diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc index 4516677bcabf..709fd74f55e3 100644 --- a/gcc/cp/call.cc +++ b/gcc/cp/call.cc @@ -9290,7 +9290,9 @@ convert_for_arg_passing (tree type, tree val, tsubst_flags_t complain) This is true for some builtins which don't act like normal functions. Return 2 if just decay_conversion and removal of excess precision should be done, 1 if just decay_conversion. Return 3 for special treatment of - the 3rd argument for __builtin_*_overflow_p. */ + the 3rd argument for __builtin_*_overflow_p. Return 4 for special + treatment of the 1st argument for + __builtin_{clz,ctz,clrsb,ffs,parity,popcount}g. */ int magic_varargs_p (tree fn) @@ -9317,6 +9319,14 @@ magic_varargs_p (tree fn) case BUILT_IN_FPCLASSIFY: return 2; + case BUILT_IN_CLZG: + case BUILT_IN_CTZG: + case BUILT_IN_CLRSBG: + case BUILT_IN_FFSG: + case BUILT_IN_PARITYG: + case BUILT_IN_POPCOUNTG: + return 4; + default: return lookup_attribute ("type generic", TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0; @@ -10122,7 +10132,7 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) for (; arg_index < vec_safe_length (args); ++arg_index) { tree a = (*args)[arg_index]; - if (magic == 3 && arg_index == 2) + if ((magic == 3 && arg_index == 2) || (magic == 4 && arg_index == 0)) { /* Do no conversions for certain magic varargs. */ a = mark_type_use (a); diff --git a/gcc/cp/cp-gimplify.cc b/gcc/cp/cp-gimplify.cc index 9375a116f06c..795c811471d9 100644 --- a/gcc/cp/cp-gimplify.cc +++ b/gcc/cp/cp-gimplify.cc @@ -771,6 +771,10 @@ cp_gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) default: break; } + else if (decl + && fndecl_built_in_p (decl, BUILT_IN_CLZG, BUILT_IN_CTZG)) + ret = (enum gimplify_status) c_gimplify_expr (expr_p, pre_p, + post_p); } break; diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 7cdfdf8c83b2..406ccc9bc751 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -14960,6 +14960,48 @@ Similar to @code{__builtin_parity}, except the argument type is @code{unsigned long long}. @enddefbuiltin +@defbuiltin{int __builtin_ffsg (...)} +Similar to @code{__builtin_ffs}, except the argument is type-generic +signed integer (standard, extended or bit-precise). No integral argument +promotions are performed on the argument. +@enddefbuiltin + +@defbuiltin{int __builtin_clzg (...)} +Similar to @code{__builtin_clz}, except the argument is type-generic +unsigned integer (standard, extended or bit-precise) and there is +optional second argument with int type. No integral argument promotions +are performed on the first argument. If two arguments are specified, +and first argument is 0, the result is the second argument. If only +one argument is specified and it is 0, the result is undefined. +@enddefbuiltin + +@defbuiltin{int __builtin_ctzg (...)} +Similar to @code{__builtin_ctz}, except the argument is type-generic +unsigned integer (standard, extended or bit-precise) and there is +optional second argument with int type. No integral argument promotions +are performed on the first argument. If two arguments are specified, +and first argument is 0, the result is the second argument. If only +one argument is specified and it is 0, the result is undefined. +@enddefbuiltin + +@defbuiltin{int __builtin_clrsbg (...)} +Similar to @code{__builtin_clrsb}, except the argument is type-generic +signed integer (standard, extended or bit-precise). No integral argument +promotions are performed on the argument. +@enddefbuiltin + +@defbuiltin{int __builtin_popcountg (...)} +Similar to @code{__builtin_popcount}, except the argument is type-generic +unsigned integer (standard, extended or bit-precise). No integral argument +promotions are performed on the argument. +@enddefbuiltin + +@defbuiltin{int __builtin_parityg (...)} +Similar to @code{__builtin_parity}, except the argument is type-generic +unsigned integer (standard, extended or bit-precise). No integral argument +promotions are performed on the argument. +@enddefbuiltin + @defbuiltin{double __builtin_powi (double, int)} @defbuiltinx{float __builtin_powif (float, int)} @defbuiltinx{{long double} __builtin_powil (long double, int)} diff --git a/gcc/fold-const-call.cc b/gcc/fold-const-call.cc index 04be3d2b3362..36f4eccb812a 100644 --- a/gcc/fold-const-call.cc +++ b/gcc/fold-const-call.cc @@ -27,7 +27,7 @@ along with GCC; see the file COPYING3. If not see #include "fold-const.h" #include "fold-const-call.h" #include "case-cfn-macros.h" -#include "tm.h" /* For C[LT]Z_DEFINED_AT_ZERO. */ +#include "tm.h" /* For C[LT]Z_DEFINED_VALUE_AT_ZERO. */ #include "builtins.h" #include "gimple-expr.h" #include "tree-vector-builder.h" @@ -1017,14 +1017,18 @@ fold_const_call_ss (wide_int *result, combined_fn fn, const wide_int_ref &arg, switch (fn) { CASE_CFN_FFS: + case CFN_BUILT_IN_FFSG: *result = wi::shwi (wi::ffs (arg), precision); return true; CASE_CFN_CLZ: + case CFN_BUILT_IN_CLZG: { int tmp; if (wi::ne_p (arg, 0)) tmp = wi::clz (arg); + else if (TREE_CODE (arg_type) == BITINT_TYPE) + tmp = TYPE_PRECISION (arg_type); else if (!CLZ_DEFINED_VALUE_AT_ZERO (SCALAR_INT_TYPE_MODE (arg_type), tmp)) tmp = TYPE_PRECISION (arg_type); @@ -1033,10 +1037,13 @@ fold_const_call_ss (wide_int *result, combined_fn fn, const wide_int_ref &arg, } CASE_CFN_CTZ: + case CFN_BUILT_IN_CTZG: { int tmp; if (wi::ne_p (arg, 0)) tmp = wi::ctz (arg); + else if (TREE_CODE (arg_type) == BITINT_TYPE) + tmp = TYPE_PRECISION (arg_type); else if (!CTZ_DEFINED_VALUE_AT_ZERO (SCALAR_INT_TYPE_MODE (arg_type), tmp)) tmp = TYPE_PRECISION (arg_type); @@ -1045,14 +1052,17 @@ fold_const_call_ss (wide_int *result, combined_fn fn, const wide_int_ref &arg, } CASE_CFN_CLRSB: + case CFN_BUILT_IN_CLRSBG: *result = wi::shwi (wi::clrsb (arg), precision); return true; CASE_CFN_POPCOUNT: + case CFN_BUILT_IN_POPCOUNTG: *result = wi::shwi (wi::popcount (arg), precision); return true; CASE_CFN_PARITY: + case CFN_BUILT_IN_PARITYG: *result = wi::shwi (wi::parity (arg), precision); return true; @@ -1529,6 +1539,49 @@ fold_const_call_sss (real_value *result, combined_fn fn, } } +/* Try to evaluate: + + *RESULT = FN (ARG0, ARG1) + + where ARG_TYPE is the type of ARG0 and PRECISION is the number of bits in + the result. Return true on success. */ + +static bool +fold_const_call_sss (wide_int *result, combined_fn fn, + const wide_int_ref &arg0, const wide_int_ref &arg1, + unsigned int precision, tree arg_type ATTRIBUTE_UNUSED) +{ + switch (fn) + { + case CFN_CLZ: + case CFN_BUILT_IN_CLZG: + { + int tmp; + if (wi::ne_p (arg0, 0)) + tmp = wi::clz (arg0); + else + tmp = arg1.to_shwi (); + *result = wi::shwi (tmp, precision); + return true; + } + + case CFN_CTZ: + case CFN_BUILT_IN_CTZG: + { + int tmp; + if (wi::ne_p (arg0, 0)) + tmp = wi::ctz (arg0); + else + tmp = arg1.to_shwi (); + *result = wi::shwi (tmp, precision); + return true; + } + + default: + return false; + } +} + /* Try to evaluate: RESULT = fn (ARG0, ARG1) @@ -1565,6 +1618,19 @@ fold_const_call_1 (combined_fn fn, tree type, tree arg0, tree arg1) machine_mode arg0_mode = TYPE_MODE (TREE_TYPE (arg0)); machine_mode arg1_mode = TYPE_MODE (TREE_TYPE (arg1)); + if (integer_cst_p (arg0) && integer_cst_p (arg1)) + { + if (SCALAR_INT_MODE_P (mode)) + { + wide_int result; + if (fold_const_call_sss (&result, fn, wi::to_wide (arg0), + wi::to_wide (arg1), TYPE_PRECISION (type), + TREE_TYPE (arg0))) + return wide_int_to_tree (type, result); + } + return NULL_TREE; + } + if (mode == arg0_mode && real_cst_p (arg0) && real_cst_p (arg1)) diff --git a/gcc/genmatch.cc b/gcc/genmatch.cc index 45723425f7ab..3488764ec640 100644 --- a/gcc/genmatch.cc +++ b/gcc/genmatch.cc @@ -1896,8 +1896,14 @@ cmp_operand (operand *o1, operand *o2) { expr *e1 = static_cast(o1); expr *e2 = static_cast(o2); - return (e1->operation == e2->operation - && e1->is_generic == e2->is_generic); + if (e1->operation != e2->operation + || e1->is_generic != e2->is_generic) + return false; + if (e1->operation->kind == id_base::FN + /* For function calls also compare number of arguments. */ + && e1->ops.length () != e2->ops.length ()) + return false; + return true; } else return false; @@ -3071,6 +3077,26 @@ dt_operand::gen_generic_expr (FILE *f, int indent, const char *opname) return 0; } +/* Compare 2 fns or generic_fns vector entries for vector sorting. + Same operation entries with different number of arguments should + be adjacent. */ + +static int +fns_cmp (const void *p1, const void *p2) +{ + dt_operand *op1 = *(dt_operand *const *) p1; + dt_operand *op2 = *(dt_operand *const *) p2; + expr *e1 = as_a (op1->op); + expr *e2 = as_a (op2->op); + id_base *b1 = e1->operation; + id_base *b2 = e2->operation; + if (b1->hashval < b2->hashval) + return -1; + if (b1->hashval > b2->hashval) + return 1; + return strcmp (b1->id, b2->id); +} + /* Generate matching code for the children of the decision tree node. */ void @@ -3144,6 +3170,8 @@ dt_node::gen_kids (FILE *f, int indent, bool gimple, int depth) Like DT_TRUE, DT_MATCH serves as a barrier as it can cause dependent matches to get out-of-order. Generate code now for what we have collected sofar. */ + fns.qsort (fns_cmp); + generic_fns.qsort (fns_cmp); gen_kids_1 (f, indent, gimple, depth, gimple_exprs, generic_exprs, fns, generic_fns, preds, others); /* And output the true operand itself. */ @@ -3160,6 +3188,8 @@ dt_node::gen_kids (FILE *f, int indent, bool gimple, int depth) } /* Generate code for the remains. */ + fns.qsort (fns_cmp); + generic_fns.qsort (fns_cmp); gen_kids_1 (f, indent, gimple, depth, gimple_exprs, generic_exprs, fns, generic_fns, preds, others); } @@ -3257,14 +3287,21 @@ dt_node::gen_kids_1 (FILE *f, int indent, bool gimple, int depth, indent += 4; fprintf_indent (f, indent, "{\n"); + id_base *last_op = NULL; for (unsigned i = 0; i < fns_len; ++i) { expr *e = as_a (fns[i]->op); - if (user_id *u = dyn_cast (e->operation)) - for (auto id : u->substitutes) - fprintf_indent (f, indent, "case %s:\n", id->id); - else - fprintf_indent (f, indent, "case %s:\n", e->operation->id); + if (e->operation != last_op) + { + if (i) + fprintf_indent (f, indent, " break;\n"); + if (user_id *u = dyn_cast (e->operation)) + for (auto id : u->substitutes) + fprintf_indent (f, indent, "case %s:\n", id->id); + else + fprintf_indent (f, indent, "case %s:\n", e->operation->id); + } + last_op = e->operation; /* We need to be defensive against bogus prototypes allowing calls with not enough arguments. */ fprintf_indent (f, indent, @@ -3273,9 +3310,9 @@ dt_node::gen_kids_1 (FILE *f, int indent, bool gimple, int depth, fprintf_indent (f, indent, " {\n"); fns[i]->gen (f, indent + 6, true, depth); fprintf_indent (f, indent, " }\n"); - fprintf_indent (f, indent, " break;\n"); } + fprintf_indent (f, indent, " break;\n"); fprintf_indent (f, indent, "default:;\n"); fprintf_indent (f, indent, "}\n"); indent -= 4; @@ -3335,18 +3372,25 @@ dt_node::gen_kids_1 (FILE *f, int indent, bool gimple, int depth, " {\n"); indent += 4; + id_base *last_op = NULL; for (unsigned j = 0; j < generic_fns.length (); ++j) { expr *e = as_a (generic_fns[j]->op); gcc_assert (e->operation->kind == id_base::FN); - fprintf_indent (f, indent, "case %s:\n", e->operation->id); + if (e->operation != last_op) + { + if (j) + fprintf_indent (f, indent, " break;\n"); + fprintf_indent (f, indent, "case %s:\n", e->operation->id); + } + last_op = e->operation; fprintf_indent (f, indent, " if (call_expr_nargs (%s) == %d)\n" " {\n", kid_opname, e->ops.length ()); generic_fns[j]->gen (f, indent + 6, false, depth); - fprintf_indent (f, indent, " }\n" - " break;\n"); + fprintf_indent (f, indent, " }\n"); } + fprintf_indent (f, indent, " break;\n"); fprintf_indent (f, indent, "default:;\n"); indent -= 4; diff --git a/gcc/gimple-lower-bitint.cc b/gcc/gimple-lower-bitint.cc index 66558594b51b..c429cb245d37 100644 --- a/gcc/gimple-lower-bitint.cc +++ b/gcc/gimple-lower-bitint.cc @@ -427,6 +427,7 @@ struct bitint_large_huge void lower_mul_overflow (tree, gimple *); void lower_cplxpart_stmt (tree, gimple *); void lower_complexexpr_stmt (gimple *); + void lower_bit_query (gimple *); void lower_call (tree, gimple *); void lower_asm (gimple *); void lower_stmt (gimple *); @@ -4455,6 +4456,524 @@ bitint_large_huge::lower_complexexpr_stmt (gimple *stmt) insert_before (g); } +/* Lower a .{CLZ,CTZ,CLRSB,FFS,PARITY,POPCOUNT} call with one large/huge _BitInt + argument. */ + +void +bitint_large_huge::lower_bit_query (gimple *stmt) +{ + tree arg0 = gimple_call_arg (stmt, 0); + tree arg1 = (gimple_call_num_args (stmt) == 2 + ? gimple_call_arg (stmt, 1) : NULL_TREE); + tree lhs = gimple_call_lhs (stmt); + gimple *g; + + if (!lhs) + { + gimple_stmt_iterator gsi = gsi_for_stmt (stmt); + gsi_remove (&gsi, true); + return; + } + tree type = TREE_TYPE (arg0); + gcc_assert (TREE_CODE (type) == BITINT_TYPE); + bitint_prec_kind kind = bitint_precision_kind (type); + gcc_assert (kind >= bitint_prec_large); + enum internal_fn ifn = gimple_call_internal_fn (stmt); + enum built_in_function fcode = END_BUILTINS; + gcc_assert (TYPE_PRECISION (unsigned_type_node) == limb_prec + || TYPE_PRECISION (long_unsigned_type_node) == limb_prec + || TYPE_PRECISION (long_long_unsigned_type_node) == limb_prec); + switch (ifn) + { + case IFN_CLZ: + if (TYPE_PRECISION (unsigned_type_node) == limb_prec) + fcode = BUILT_IN_CLZ; + else if (TYPE_PRECISION (long_unsigned_type_node) == limb_prec) + fcode = BUILT_IN_CLZL; + else + fcode = BUILT_IN_CLZLL; + break; + case IFN_FFS: + /* .FFS (X) is .CTZ (X, -1) + 1, though under the hood + we don't add the addend at the end. */ + arg1 = integer_zero_node; + /* FALLTHRU */ + case IFN_CTZ: + if (TYPE_PRECISION (unsigned_type_node) == limb_prec) + fcode = BUILT_IN_CTZ; + else if (TYPE_PRECISION (long_unsigned_type_node) == limb_prec) + fcode = BUILT_IN_CTZL; + else + fcode = BUILT_IN_CTZLL; + m_upwards = true; + break; + case IFN_CLRSB: + if (TYPE_PRECISION (unsigned_type_node) == limb_prec) + fcode = BUILT_IN_CLRSB; + else if (TYPE_PRECISION (long_unsigned_type_node) == limb_prec) + fcode = BUILT_IN_CLRSBL; + else + fcode = BUILT_IN_CLRSBLL; + break; + case IFN_PARITY: + if (TYPE_PRECISION (unsigned_type_node) == limb_prec) + fcode = BUILT_IN_PARITY; + else if (TYPE_PRECISION (long_unsigned_type_node) == limb_prec) + fcode = BUILT_IN_PARITYL; + else + fcode = BUILT_IN_PARITYLL; + m_upwards = true; + break; + case IFN_POPCOUNT: + if (TYPE_PRECISION (unsigned_type_node) == limb_prec) + fcode = BUILT_IN_POPCOUNT; + else if (TYPE_PRECISION (long_unsigned_type_node) == limb_prec) + fcode = BUILT_IN_POPCOUNTL; + else + fcode = BUILT_IN_POPCOUNTLL; + m_upwards = true; + break; + default: + gcc_unreachable (); + } + tree fndecl = builtin_decl_explicit (fcode), res = NULL_TREE; + unsigned cnt = 0, rem = 0, end = 0, prec = TYPE_PRECISION (type); + struct bq_details { edge e; tree val, addend; } *bqp = NULL; + basic_block edge_bb = NULL; + if (m_upwards) + { + tree idx = NULL_TREE, idx_first = NULL_TREE, idx_next = NULL_TREE; + if (kind == bitint_prec_large) + cnt = CEIL (prec, limb_prec); + else + { + rem = (prec % (2 * limb_prec)); + end = (prec - rem) / limb_prec; + cnt = 2 + CEIL (rem, limb_prec); + idx = idx_first = create_loop (size_zero_node, &idx_next); + } + + if (ifn == IFN_CTZ || ifn == IFN_FFS) + { + gimple_stmt_iterator gsi = gsi_for_stmt (stmt); + gsi_prev (&gsi); + edge e = split_block (gsi_bb (gsi), gsi_stmt (gsi)); + edge_bb = e->src; + if (kind == bitint_prec_large) + { + m_gsi = gsi_last_bb (edge_bb); + if (!gsi_end_p (m_gsi)) + gsi_next (&m_gsi); + } + bqp = XALLOCAVEC (struct bq_details, cnt); + } + else + m_after_stmt = stmt; + if (kind != bitint_prec_large) + m_upwards_2limb = end; + + for (unsigned i = 0; i < cnt; i++) + { + m_data_cnt = 0; + if (kind == bitint_prec_large) + idx = size_int (i); + else if (i >= 2) + idx = size_int (end + (i > 2)); + + tree rhs1 = handle_operand (arg0, idx); + if (!useless_type_conversion_p (m_limb_type, TREE_TYPE (rhs1))) + { + if (!TYPE_UNSIGNED (TREE_TYPE (rhs1))) + rhs1 = add_cast (unsigned_type_for (TREE_TYPE (rhs1)), rhs1); + rhs1 = add_cast (m_limb_type, rhs1); + } + + tree in, out, tem; + if (ifn == IFN_PARITY) + in = prepare_data_in_out (build_zero_cst (m_limb_type), idx, &out); + else if (ifn == IFN_FFS) + in = prepare_data_in_out (integer_one_node, idx, &out); + else + in = prepare_data_in_out (integer_zero_node, idx, &out); + + switch (ifn) + { + case IFN_CTZ: + case IFN_FFS: + g = gimple_build_cond (NE_EXPR, rhs1, + build_zero_cst (m_limb_type), + NULL_TREE, NULL_TREE); + insert_before (g); + edge e1, e2; + e1 = split_block (gsi_bb (m_gsi), g); + e1->flags = EDGE_FALSE_VALUE; + e2 = make_edge (e1->src, gimple_bb (stmt), EDGE_TRUE_VALUE); + e1->probability = profile_probability::unlikely (); + e2->probability = e1->probability.invert (); + if (i == 0) + set_immediate_dominator (CDI_DOMINATORS, e2->dest, e2->src); + m_gsi = gsi_after_labels (e1->dest); + bqp[i].e = e2; + bqp[i].val = rhs1; + if (tree_fits_uhwi_p (idx)) + bqp[i].addend + = build_int_cst (integer_type_node, + tree_to_uhwi (idx) * limb_prec + + (ifn == IFN_FFS)); + else + { + bqp[i].addend = in; + if (i == 1) + res = out; + else + res = make_ssa_name (integer_type_node); + g = gimple_build_assign (res, PLUS_EXPR, in, + build_int_cst (integer_type_node, + limb_prec)); + insert_before (g); + m_data[m_data_cnt] = res; + } + break; + case IFN_PARITY: + if (!integer_zerop (in)) + { + if (kind == bitint_prec_huge && i == 1) + res = out; + else + res = make_ssa_name (m_limb_type); + g = gimple_build_assign (res, BIT_XOR_EXPR, in, rhs1); + insert_before (g); + } + else + res = rhs1; + m_data[m_data_cnt] = res; + break; + case IFN_POPCOUNT: + g = gimple_build_call (fndecl, 1, rhs1); + tem = make_ssa_name (integer_type_node); + gimple_call_set_lhs (g, tem); + insert_before (g); + if (!integer_zerop (in)) + { + if (kind == bitint_prec_huge && i == 1) + res = out; + else + res = make_ssa_name (integer_type_node); + g = gimple_build_assign (res, PLUS_EXPR, in, tem); + insert_before (g); + } + else + res = tem; + m_data[m_data_cnt] = res; + break; + default: + gcc_unreachable (); + } + + m_first = false; + if (kind == bitint_prec_huge && i <= 1) + { + if (i == 0) + { + idx = make_ssa_name (sizetype); + g = gimple_build_assign (idx, PLUS_EXPR, idx_first, + size_one_node); + insert_before (g); + } + else + { + g = gimple_build_assign (idx_next, PLUS_EXPR, idx_first, + size_int (2)); + insert_before (g); + g = gimple_build_cond (NE_EXPR, idx_next, size_int (end), + NULL_TREE, NULL_TREE); + insert_before (g); + if (ifn == IFN_CTZ || ifn == IFN_FFS) + m_gsi = gsi_after_labels (edge_bb); + else + m_gsi = gsi_for_stmt (stmt); + } + } + } + } + else + { + tree idx = NULL_TREE, idx_next = NULL_TREE, first = NULL_TREE; + int sub_one = 0; + if (kind == bitint_prec_large) + cnt = CEIL (prec, limb_prec); + else + { + rem = prec % limb_prec; + if (rem == 0 && (!TYPE_UNSIGNED (type) || ifn == IFN_CLRSB)) + rem = limb_prec; + end = (prec - rem) / limb_prec; + cnt = 1 + (rem != 0); + if (ifn == IFN_CLRSB) + sub_one = 1; + } + + gimple_stmt_iterator gsi = gsi_for_stmt (stmt); + gsi_prev (&gsi); + edge e = split_block (gsi_bb (gsi), gsi_stmt (gsi)); + edge_bb = e->src; + m_gsi = gsi_last_bb (edge_bb); + if (!gsi_end_p (m_gsi)) + gsi_next (&m_gsi); + + if (ifn == IFN_CLZ) + bqp = XALLOCAVEC (struct bq_details, cnt); + else + { + gsi = gsi_for_stmt (stmt); + gsi_prev (&gsi); + e = split_block (gsi_bb (gsi), gsi_stmt (gsi)); + edge_bb = e->src; + bqp = XALLOCAVEC (struct bq_details, 2 * cnt); + } + + for (unsigned i = 0; i < cnt; i++) + { + m_data_cnt = 0; + if (kind == bitint_prec_large) + idx = size_int (cnt - i - 1); + else if (i == cnt - 1) + idx = create_loop (size_int (end - 1), &idx_next); + else + idx = size_int (end); + + tree rhs1 = handle_operand (arg0, idx); + if (!useless_type_conversion_p (m_limb_type, TREE_TYPE (rhs1))) + { + if (ifn == IFN_CLZ && !TYPE_UNSIGNED (TREE_TYPE (rhs1))) + rhs1 = add_cast (unsigned_type_for (TREE_TYPE (rhs1)), rhs1); + else if (ifn == IFN_CLRSB && TYPE_UNSIGNED (TREE_TYPE (rhs1))) + rhs1 = add_cast (signed_type_for (TREE_TYPE (rhs1)), rhs1); + rhs1 = add_cast (m_limb_type, rhs1); + } + + if (ifn == IFN_CLZ) + { + g = gimple_build_cond (NE_EXPR, rhs1, + build_zero_cst (m_limb_type), + NULL_TREE, NULL_TREE); + insert_before (g); + edge e1 = split_block (gsi_bb (m_gsi), g); + e1->flags = EDGE_FALSE_VALUE; + edge e2 = make_edge (e1->src, gimple_bb (stmt), EDGE_TRUE_VALUE); + e1->probability = profile_probability::unlikely (); + e2->probability = e1->probability.invert (); + if (i == 0) + set_immediate_dominator (CDI_DOMINATORS, e2->dest, e2->src); + m_gsi = gsi_after_labels (e1->dest); + bqp[i].e = e2; + bqp[i].val = rhs1; + } + else + { + if (i == 0) + { + first = rhs1; + g = gimple_build_assign (make_ssa_name (m_limb_type), + PLUS_EXPR, rhs1, + build_int_cst (m_limb_type, 1)); + insert_before (g); + g = gimple_build_cond (GT_EXPR, gimple_assign_lhs (g), + build_int_cst (m_limb_type, 1), + NULL_TREE, NULL_TREE); + insert_before (g); + } + else + { + g = gimple_build_assign (make_ssa_name (m_limb_type), + BIT_XOR_EXPR, rhs1, first); + insert_before (g); + tree stype = signed_type_for (m_limb_type); + g = gimple_build_cond (LT_EXPR, + add_cast (stype, + gimple_assign_lhs (g)), + build_zero_cst (stype), + NULL_TREE, NULL_TREE); + insert_before (g); + edge e1 = split_block (gsi_bb (m_gsi), g); + e1->flags = EDGE_FALSE_VALUE; + edge e2 = make_edge (e1->src, gimple_bb (stmt), + EDGE_TRUE_VALUE); + e1->probability = profile_probability::unlikely (); + e2->probability = e1->probability.invert (); + if (i == 1) + set_immediate_dominator (CDI_DOMINATORS, e2->dest, + e2->src); + m_gsi = gsi_after_labels (e1->dest); + bqp[2 * i].e = e2; + g = gimple_build_cond (NE_EXPR, rhs1, first, + NULL_TREE, NULL_TREE); + insert_before (g); + } + edge e1 = split_block (gsi_bb (m_gsi), g); + e1->flags = EDGE_FALSE_VALUE; + edge e2 = make_edge (e1->src, edge_bb, EDGE_TRUE_VALUE); + e1->probability = profile_probability::unlikely (); + e2->probability = e1->probability.invert (); + if (i == 0) + set_immediate_dominator (CDI_DOMINATORS, e2->dest, e2->src); + m_gsi = gsi_after_labels (e1->dest); + bqp[2 * i + 1].e = e2; + bqp[i].val = rhs1; + } + if (tree_fits_uhwi_p (idx)) + bqp[i].addend + = build_int_cst (integer_type_node, + (int) prec + - (((int) tree_to_uhwi (idx) + 1) + * limb_prec) - sub_one); + else + { + tree in, out; + in = build_int_cst (integer_type_node, rem - sub_one); + m_first = true; + in = prepare_data_in_out (in, idx, &out); + out = m_data[m_data_cnt + 1]; + bqp[i].addend = in; + g = gimple_build_assign (out, PLUS_EXPR, in, + build_int_cst (integer_type_node, + limb_prec)); + insert_before (g); + m_data[m_data_cnt] = out; + } + + m_first = false; + if (kind == bitint_prec_huge && i == cnt - 1) + { + g = gimple_build_assign (idx_next, PLUS_EXPR, idx, + size_int (-1)); + insert_before (g); + g = gimple_build_cond (NE_EXPR, idx, size_zero_node, + NULL_TREE, NULL_TREE); + insert_before (g); + edge true_edge, false_edge; + extract_true_false_edges_from_block (gsi_bb (m_gsi), + &true_edge, &false_edge); + m_gsi = gsi_after_labels (false_edge->dest); + } + } + } + switch (ifn) + { + case IFN_CLZ: + case IFN_CTZ: + case IFN_FFS: + gphi *phi1, *phi2, *phi3; + basic_block bb; + bb = gsi_bb (m_gsi); + remove_edge (find_edge (bb, gimple_bb (stmt))); + phi1 = create_phi_node (make_ssa_name (m_limb_type), + gimple_bb (stmt)); + phi2 = create_phi_node (make_ssa_name (integer_type_node), + gimple_bb (stmt)); + for (unsigned i = 0; i < cnt; i++) + { + add_phi_arg (phi1, bqp[i].val, bqp[i].e, UNKNOWN_LOCATION); + add_phi_arg (phi2, bqp[i].addend, bqp[i].e, UNKNOWN_LOCATION); + } + if (arg1 == NULL_TREE) + { + g = gimple_build_builtin_unreachable (m_loc); + insert_before (g); + } + m_gsi = gsi_for_stmt (stmt); + g = gimple_build_call (fndecl, 1, gimple_phi_result (phi1)); + gimple_call_set_lhs (g, make_ssa_name (integer_type_node)); + insert_before (g); + if (arg1 == NULL_TREE) + g = gimple_build_assign (lhs, PLUS_EXPR, + gimple_phi_result (phi2), + gimple_call_lhs (g)); + else + { + g = gimple_build_assign (make_ssa_name (integer_type_node), + PLUS_EXPR, gimple_phi_result (phi2), + gimple_call_lhs (g)); + insert_before (g); + edge e1 = split_block (gimple_bb (stmt), g); + edge e2 = make_edge (bb, e1->dest, EDGE_FALLTHRU); + e2->probability = profile_probability::always (); + set_immediate_dominator (CDI_DOMINATORS, e1->dest, + get_immediate_dominator (CDI_DOMINATORS, + e1->src)); + phi3 = create_phi_node (make_ssa_name (integer_type_node), e1->dest); + add_phi_arg (phi3, gimple_assign_lhs (g), e1, UNKNOWN_LOCATION); + add_phi_arg (phi3, arg1, e2, UNKNOWN_LOCATION); + m_gsi = gsi_for_stmt (stmt); + g = gimple_build_assign (lhs, gimple_phi_result (phi3)); + } + gsi_replace (&m_gsi, g, true); + break; + case IFN_CLRSB: + bb = gsi_bb (m_gsi); + remove_edge (find_edge (bb, edge_bb)); + edge e; + e = make_edge (bb, gimple_bb (stmt), EDGE_FALLTHRU); + e->probability = profile_probability::always (); + set_immediate_dominator (CDI_DOMINATORS, gimple_bb (stmt), + get_immediate_dominator (CDI_DOMINATORS, + edge_bb)); + phi1 = create_phi_node (make_ssa_name (m_limb_type), + edge_bb); + phi2 = create_phi_node (make_ssa_name (integer_type_node), + edge_bb); + phi3 = create_phi_node (make_ssa_name (integer_type_node), + gimple_bb (stmt)); + for (unsigned i = 0; i < cnt; i++) + { + add_phi_arg (phi1, bqp[i].val, bqp[2 * i + 1].e, UNKNOWN_LOCATION); + add_phi_arg (phi2, bqp[i].addend, bqp[2 * i + 1].e, + UNKNOWN_LOCATION); + tree a = bqp[i].addend; + if (i && kind == bitint_prec_large) + a = int_const_binop (PLUS_EXPR, a, integer_minus_one_node); + if (i) + add_phi_arg (phi3, a, bqp[2 * i].e, UNKNOWN_LOCATION); + } + add_phi_arg (phi3, build_int_cst (integer_type_node, prec - 1), e, + UNKNOWN_LOCATION); + m_gsi = gsi_after_labels (edge_bb); + g = gimple_build_call (fndecl, 1, + add_cast (signed_type_for (m_limb_type), + gimple_phi_result (phi1))); + gimple_call_set_lhs (g, make_ssa_name (integer_type_node)); + insert_before (g); + g = gimple_build_assign (make_ssa_name (integer_type_node), + PLUS_EXPR, gimple_call_lhs (g), + gimple_phi_result (phi2)); + insert_before (g); + if (kind != bitint_prec_large) + { + g = gimple_build_assign (make_ssa_name (integer_type_node), + PLUS_EXPR, gimple_assign_lhs (g), + integer_one_node); + insert_before (g); + } + add_phi_arg (phi3, gimple_assign_lhs (g), + find_edge (edge_bb, gimple_bb (stmt)), UNKNOWN_LOCATION); + m_gsi = gsi_for_stmt (stmt); + g = gimple_build_assign (lhs, gimple_phi_result (phi3)); + gsi_replace (&m_gsi, g, true); + break; + case IFN_PARITY: + g = gimple_build_call (fndecl, 1, res); + gimple_call_set_lhs (g, lhs); + gsi_replace (&m_gsi, g, true); + break; + case IFN_POPCOUNT: + g = gimple_build_assign (lhs, res); + gsi_replace (&m_gsi, g, true); + break; + default: + gcc_unreachable (); + } +} + /* Lower a call statement with one or more large/huge _BitInt arguments or large/huge _BitInt return value. */ @@ -4476,6 +4995,14 @@ bitint_large_huge::lower_call (tree obj, gimple *stmt) case IFN_UBSAN_CHECK_MUL: lower_mul_overflow (obj, stmt); return; + case IFN_CLZ: + case IFN_CTZ: + case IFN_CLRSB: + case IFN_FFS: + case IFN_PARITY: + case IFN_POPCOUNT: + lower_bit_query (stmt); + return; default: break; } diff --git a/gcc/gimple-range-op.cc b/gcc/gimple-range-op.cc index 67b3c3d015ef..26c42da07562 100644 --- a/gcc/gimple-range-op.cc +++ b/gcc/gimple-range-op.cc @@ -908,39 +908,34 @@ public: cfn_clz (bool internal) { m_gimple_call_internal_p = internal; } using range_operator::fold_range; virtual bool fold_range (irange &r, tree type, const irange &lh, - const irange &, relation_trio) const; + const irange &rh, relation_trio) const; private: bool m_gimple_call_internal_p; } op_cfn_clz (false), op_cfn_clz_internal (true); bool cfn_clz::fold_range (irange &r, tree type, const irange &lh, - const irange &, relation_trio) const + const irange &rh, relation_trio) const { // __builtin_c[lt]z* return [0, prec-1], except when the // argument is 0, but that is undefined behavior. // // For __builtin_c[lt]z* consider argument of 0 always undefined - // behavior, for internal fns depending on C?Z_DEFINED_VALUE_AT_ZERO. + // behavior, for internal fns likewise, unless it has 2 arguments, + // then the second argument is the value at zero. if (lh.undefined_p ()) return false; int prec = TYPE_PRECISION (lh.type ()); int mini = 0; int maxi = prec - 1; - int zerov = 0; - scalar_int_mode mode = SCALAR_INT_TYPE_MODE (lh.type ()); if (m_gimple_call_internal_p) { - if (optab_handler (clz_optab, mode) != CODE_FOR_nothing - && CLZ_DEFINED_VALUE_AT_ZERO (mode, zerov) == 2) - { - // Only handle the single common value. - if (zerov == prec) - maxi = prec; - else - // Magic value to give up, unless we can prove arg is non-zero. - mini = -2; - } + // Only handle the single common value. + if (rh.lower_bound () == prec) + maxi = prec; + else + // Magic value to give up, unless we can prove arg is non-zero. + mini = -2; } // From clz of minimum we can compute result maximum. @@ -985,37 +980,31 @@ public: cfn_ctz (bool internal) { m_gimple_call_internal_p = internal; } using range_operator::fold_range; virtual bool fold_range (irange &r, tree type, const irange &lh, - const irange &, relation_trio) const; + const irange &rh, relation_trio) const; private: bool m_gimple_call_internal_p; } op_cfn_ctz (false), op_cfn_ctz_internal (true); bool cfn_ctz::fold_range (irange &r, tree type, const irange &lh, - const irange &, relation_trio) const + const irange &rh, relation_trio) const { if (lh.undefined_p ()) return false; int prec = TYPE_PRECISION (lh.type ()); int mini = 0; int maxi = prec - 1; - int zerov = 0; - scalar_int_mode mode = SCALAR_INT_TYPE_MODE (lh.type ()); if (m_gimple_call_internal_p) { - if (optab_handler (ctz_optab, mode) != CODE_FOR_nothing - && CTZ_DEFINED_VALUE_AT_ZERO (mode, zerov) == 2) - { - // Handle only the two common values. - if (zerov == -1) - mini = -1; - else if (zerov == prec) - maxi = prec; - else - // Magic value to give up, unless we can prove arg is non-zero. - mini = -2; - } + // Handle only the two common values. + if (rh.lower_bound () == -1) + mini = -1; + else if (rh.lower_bound () == prec) + maxi = prec; + else + // Magic value to give up, unless we can prove arg is non-zero. + mini = -2; } // If arg is non-zero, then use [0, prec - 1]. if (!range_includes_zero_p (&lh)) @@ -1288,16 +1277,24 @@ gimple_range_op_handler::maybe_builtin_call () CASE_CFN_CLZ: m_op1 = gimple_call_arg (call, 0); - if (gimple_call_internal_p (call)) - m_operator = &op_cfn_clz_internal; + if (gimple_call_internal_p (call) + && gimple_call_num_args (call) == 2) + { + m_op2 = gimple_call_arg (call, 1); + m_operator = &op_cfn_clz_internal; + } else m_operator = &op_cfn_clz; break; CASE_CFN_CTZ: m_op1 = gimple_call_arg (call, 0); - if (gimple_call_internal_p (call)) - m_operator = &op_cfn_ctz_internal; + if (gimple_call_internal_p (call) + && gimple_call_num_args (call) == 2) + { + m_op2 = gimple_call_arg (call, 1); + m_operator = &op_cfn_ctz_internal; + } else m_operator = &op_cfn_ctz; break; diff --git a/gcc/match.pd b/gcc/match.pd index 281c6c087e6a..59791f448512 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -8536,31 +8536,34 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (op (clz:s@2 @0) INTEGER_CST@1) (if (integer_zerop (@1) && single_use (@2)) /* clz(X) == 0 is (int)X < 0 and clz(X) != 0 is (int)X >= 0. */ - (with { tree type0 = TREE_TYPE (@0); - tree stype = signed_type_for (type0); - HOST_WIDE_INT val = 0; - /* Punt on hypothetical weird targets. */ - if (clz == CFN_CLZ - && CLZ_DEFINED_VALUE_AT_ZERO (SCALAR_TYPE_MODE (type0), - val) == 2 - && val == 0) - stype = NULL_TREE; - } - (if (stype) - (cmp (convert:stype @0) { build_zero_cst (stype); }))) + (with { tree stype = signed_type_for (TREE_TYPE (@0)); } + (cmp (convert:stype @0) { build_zero_cst (stype); })) /* clz(X) == (prec-1) is X == 1 and clz(X) != (prec-1) is X != 1. */ - (with { bool ok = true; - HOST_WIDE_INT val = 0; - tree type0 = TREE_TYPE (@0); - /* Punt on hypothetical weird targets. */ - if (clz == CFN_CLZ - && CLZ_DEFINED_VALUE_AT_ZERO (SCALAR_TYPE_MODE (type0), - val) == 2 - && val == TYPE_PRECISION (type0) - 1) - ok = false; - } - (if (ok && wi::to_wide (@1) == (TYPE_PRECISION (type0) - 1)) - (op @0 { build_one_cst (type0); }))))))) + (if (wi::to_wide (@1) == TYPE_PRECISION (TREE_TYPE (@0)) - 1) + (op @0 { build_one_cst (TREE_TYPE (@0)); })))))) +(for op (eq ne) + cmp (lt ge) + (simplify + (op (IFN_CLZ:s@2 @0 @3) INTEGER_CST@1) + (if (integer_zerop (@1) && single_use (@2)) + /* clz(X) == 0 is (int)X < 0 and clz(X) != 0 is (int)X >= 0. */ + (with { tree type0 = TREE_TYPE (@0); + tree stype = signed_type_for (TREE_TYPE (@0)); + /* Punt if clz(0) == 0. */ + if (integer_zerop (@3)) + stype = NULL_TREE; + } + (if (stype) + (cmp (convert:stype @0) { build_zero_cst (stype); }))) + /* clz(X) == (prec-1) is X == 1 and clz(X) != (prec-1) is X != 1. */ + (with { bool ok = true; + tree type0 = TREE_TYPE (@0); + /* Punt if clz(0) == prec - 1. */ + if (wi::to_widest (@3) == TYPE_PRECISION (type0) - 1) + ok = false; + } + (if (ok && wi::to_wide (@1) == (TYPE_PRECISION (type0) - 1)) + (op @0 { build_one_cst (type0); })))))) /* CTZ simplifications. */ (for ctz (CTZ) @@ -8585,22 +8588,14 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) val++; } } - bool zero_res = false; - HOST_WIDE_INT zero_val = 0; tree type0 = TREE_TYPE (@0); int prec = TYPE_PRECISION (type0); - if (ctz == CFN_CTZ - && CTZ_DEFINED_VALUE_AT_ZERO (SCALAR_TYPE_MODE (type0), - zero_val) == 2) - zero_res = true; } - (if (val <= 0) - (if (ok && (!zero_res || zero_val >= val)) - { constant_boolean_node (cmp == EQ_EXPR ? true : false, type); }) - (if (val >= prec) - (if (ok && (!zero_res || zero_val < val)) - { constant_boolean_node (cmp == EQ_EXPR ? false : true, type); }) - (if (ok && (!zero_res || zero_val < 0 || zero_val >= prec)) + (if (ok && prec <= MAX_FIXED_MODE_SIZE) + (if (val <= 0) + { constant_boolean_node (cmp == EQ_EXPR ? true : false, type); } + (if (val >= prec) + { constant_boolean_node (cmp == EQ_EXPR ? false : true, type); } (cmp (bit_and @0 { wide_int_to_tree (type0, wi::mask (val, false, prec)); }) { build_zero_cst (type0); }))))))) @@ -8608,19 +8603,68 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (simplify /* __builtin_ctz (x) == C -> (x & ((1 << (C + 1)) - 1)) == (1 << C). */ (op (ctz:s @0) INTEGER_CST@1) - (with { bool zero_res = false; - HOST_WIDE_INT zero_val = 0; - tree type0 = TREE_TYPE (@0); + (with { tree type0 = TREE_TYPE (@0); int prec = TYPE_PRECISION (type0); - if (ctz == CFN_CTZ - && CTZ_DEFINED_VALUE_AT_ZERO (SCALAR_TYPE_MODE (type0), - zero_val) == 2) - zero_res = true; } + (if (prec <= MAX_FIXED_MODE_SIZE) + (if (tree_int_cst_sgn (@1) < 0 || wi::to_widest (@1) >= prec) + { constant_boolean_node (op == EQ_EXPR ? false : true, type); } + (op (bit_and @0 { wide_int_to_tree (type0, + wi::mask (tree_to_uhwi (@1) + 1, + false, prec)); }) + { wide_int_to_tree (type0, + wi::shifted_mask (tree_to_uhwi (@1), 1, + false, prec)); }))))))) +(for op (ge gt le lt) + cmp (eq eq ne ne) + (simplify + /* __builtin_ctz (x) >= C -> (x & ((1 << C) - 1)) == 0. */ + (op (IFN_CTZ:s @0 @2) INTEGER_CST@1) + (with { bool ok = true; + HOST_WIDE_INT val = 0; + if (!tree_fits_shwi_p (@1)) + ok = false; + else + { + val = tree_to_shwi (@1); + /* Canonicalize to >= or <. */ + if (op == GT_EXPR || op == LE_EXPR) + { + if (val == HOST_WIDE_INT_MAX) + ok = false; + else + val++; + } + } + HOST_WIDE_INT zero_val = tree_to_shwi (@2); + tree type0 = TREE_TYPE (@0); + int prec = TYPE_PRECISION (type0); + if (prec > MAX_FIXED_MODE_SIZE) + ok = false; + } + (if (val <= 0) + (if (ok && zero_val >= val) + { constant_boolean_node (cmp == EQ_EXPR ? true : false, type); }) + (if (val >= prec) + (if (ok && zero_val < val) + { constant_boolean_node (cmp == EQ_EXPR ? false : true, type); }) + (if (ok && (zero_val < 0 || zero_val >= prec)) + (cmp (bit_and @0 { wide_int_to_tree (type0, + wi::mask (val, false, prec)); }) + { build_zero_cst (type0); }))))))) +(for op (eq ne) + (simplify + /* __builtin_ctz (x) == C -> (x & ((1 << (C + 1)) - 1)) == (1 << C). */ + (op (IFN_CTZ:s @0 @2) INTEGER_CST@1) + (with { HOST_WIDE_INT zero_val = tree_to_shwi (@2); + tree type0 = TREE_TYPE (@0); + int prec = TYPE_PRECISION (type0); + } + (if (prec <= MAX_FIXED_MODE_SIZE) (if (tree_int_cst_sgn (@1) < 0 || wi::to_widest (@1) >= prec) - (if (!zero_res || zero_val != wi::to_widest (@1)) + (if (zero_val != wi::to_widest (@1)) { constant_boolean_node (op == EQ_EXPR ? false : true, type); }) - (if (!zero_res || zero_val < 0 || zero_val >= prec) + (if (zero_val < 0 || zero_val >= prec) (op (bit_and @0 { wide_int_to_tree (type0, wi::mask (tree_to_uhwi (@1) + 1, false, prec)); }) @@ -8757,13 +8801,38 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (cond (ne @0 integer_zerop@1) (func (convert?@3 @0)) INTEGER_CST@2) (with { int val; internal_fn ifn = IFN_LAST; - if (direct_internal_fn_supported_p (IFN_CLZ, type, OPTIMIZE_FOR_BOTH) - && CLZ_DEFINED_VALUE_AT_ZERO (SCALAR_INT_TYPE_MODE (type), - val) == 2) + if (TREE_CODE (TREE_TYPE (@3)) == BITINT_TYPE) + { + if (tree_fits_shwi_p (@2)) + { + HOST_WIDE_INT valw = tree_to_shwi (@2); + if ((int) valw == valw) + { + val = valw; + ifn = IFN_CLZ; + } + } + } + else if (direct_internal_fn_supported_p (IFN_CLZ, TREE_TYPE (@3), + OPTIMIZE_FOR_BOTH) + && CLZ_DEFINED_VALUE_AT_ZERO + (SCALAR_INT_TYPE_MODE (TREE_TYPE (@3)), val) == 2) ifn = IFN_CLZ; } (if (ifn == IFN_CLZ && wi::to_widest (@2) == val) - (IFN_CLZ @3))))) + (IFN_CLZ @3 @2))))) +(simplify + (cond (ne @0 integer_zerop@1) (IFN_CLZ (convert?@3 @0) INTEGER_CST@2) @2) + (with { int val; + internal_fn ifn = IFN_LAST; + if (TREE_CODE (TREE_TYPE (@3)) == BITINT_TYPE) + ifn = IFN_CLZ; + else if (direct_internal_fn_supported_p (IFN_CLZ, TREE_TYPE (@3), + OPTIMIZE_FOR_BOTH)) + ifn = IFN_CLZ; + } + (if (ifn == IFN_CLZ) + (IFN_CLZ @3 @2)))) /* a != 0 ? CTZ(a) : CST -> .CTZ(a) where CST is the result of the internal function for 0. */ (for func (CTZ) @@ -8771,13 +8840,38 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (cond (ne @0 integer_zerop@1) (func (convert?@3 @0)) INTEGER_CST@2) (with { int val; internal_fn ifn = IFN_LAST; - if (direct_internal_fn_supported_p (IFN_CTZ, type, OPTIMIZE_FOR_BOTH) - && CTZ_DEFINED_VALUE_AT_ZERO (SCALAR_INT_TYPE_MODE (type), - val) == 2) + if (TREE_CODE (TREE_TYPE (@3)) == BITINT_TYPE) + { + if (tree_fits_shwi_p (@2)) + { + HOST_WIDE_INT valw = tree_to_shwi (@2); + if ((int) valw == valw) + { + val = valw; + ifn = IFN_CTZ; + } + } + } + else if (direct_internal_fn_supported_p (IFN_CTZ, TREE_TYPE (@3), + OPTIMIZE_FOR_BOTH) + && CTZ_DEFINED_VALUE_AT_ZERO + (SCALAR_INT_TYPE_MODE (TREE_TYPE (@3)), val) == 2) ifn = IFN_CTZ; } (if (ifn == IFN_CTZ && wi::to_widest (@2) == val) - (IFN_CTZ @3))))) + (IFN_CTZ @3 @2))))) +(simplify + (cond (ne @0 integer_zerop@1) (IFN_CTZ (convert?@3 @0) INTEGER_CST@2) @2) + (with { int val; + internal_fn ifn = IFN_LAST; + if (TREE_CODE (TREE_TYPE (@3)) == BITINT_TYPE) + ifn = IFN_CTZ; + else if (direct_internal_fn_supported_p (IFN_CTZ, TREE_TYPE (@3), + OPTIMIZE_FOR_BOTH)) + ifn = IFN_CTZ; + } + (if (ifn == IFN_CTZ) + (IFN_CTZ @3 @2)))) #endif /* Common POPCOUNT/PARITY simplifications. */ diff --git a/gcc/testsuite/c-c++-common/pr111309-1.c b/gcc/testsuite/c-c++-common/pr111309-1.c new file mode 100644 index 000000000000..fdf3bf11c336 --- /dev/null +++ b/gcc/testsuite/c-c++-common/pr111309-1.c @@ -0,0 +1,470 @@ +/* PR c/111309 */ +/* { dg-do run } */ +/* { dg-options "-O2" } */ + +__attribute__((noipa)) int +clzc (unsigned char x) +{ + return __builtin_clzg (x); +} + +__attribute__((noipa)) int +clzc2 (unsigned char x, int y) +{ + return __builtin_clzg (x, y); +} + +__attribute__((noipa)) int +clzs (unsigned short x) +{ + return __builtin_clzg (x); +} + +__attribute__((noipa)) int +clzs2 (unsigned short x) +{ + return __builtin_clzg (x, -2); +} + +__attribute__((noipa)) int +clzi (unsigned int x) +{ + return __builtin_clzg (x); +} + +__attribute__((noipa)) int +clzi2 (unsigned int x, int y) +{ + return __builtin_clzg (x, y); +} + +__attribute__((noipa)) int +clzl (unsigned long x) +{ + return __builtin_clzg (x); +} + +__attribute__((noipa)) int +clzl2 (unsigned long x) +{ + return __builtin_clzg (x, -1); +} + +__attribute__((noipa)) int +clzL (unsigned long long x) +{ + return __builtin_clzg (x); +} + +__attribute__((noipa)) int +clzL2 (unsigned long long x, int y) +{ + return __builtin_clzg (x, y); +} + +#ifdef __SIZEOF_INT128__ +__attribute__((noipa)) int +clzI (unsigned __int128 x) +{ + return __builtin_clzg (x); +} + +__attribute__((noipa)) int +clzI2 (unsigned __int128 x, int y) +{ + return __builtin_clzg (x, y); +} +#endif + +__attribute__((noipa)) int +ctzc (unsigned char x) +{ + return __builtin_ctzg (x); +} + +__attribute__((noipa)) int +ctzc2 (unsigned char x, int y) +{ + return __builtin_ctzg (x, y); +} + +__attribute__((noipa)) int +ctzs (unsigned short x) +{ + return __builtin_ctzg (x); +} + +__attribute__((noipa)) int +ctzs2 (unsigned short x, int y) +{ + return __builtin_ctzg (x, y); +} + +__attribute__((noipa)) int +ctzi (unsigned int x) +{ + return __builtin_ctzg (x); +} + +__attribute__((noipa)) int +ctzi2 (unsigned int x, int y) +{ + return __builtin_ctzg (x, y); +} + +__attribute__((noipa)) int +ctzl (unsigned long x) +{ + return __builtin_ctzg (x); +} + +__attribute__((noipa)) int +ctzl2 (unsigned long x, int y) +{ + return __builtin_ctzg (x, y); +} + +__attribute__((noipa)) int +ctzL (unsigned long long x) +{ + return __builtin_ctzg (x); +} + +__attribute__((noipa)) int +ctzL2 (unsigned long long x, int y) +{ + return __builtin_ctzg (x, y); +} + +#ifdef __SIZEOF_INT128__ +__attribute__((noipa)) int +ctzI (unsigned __int128 x) +{ + return __builtin_ctzg (x); +} + +__attribute__((noipa)) int +ctzI2 (unsigned __int128 x) +{ + return __builtin_ctzg (x, __SIZEOF_INT128__ * __CHAR_BIT__); +} +#endif + +__attribute__((noipa)) int +clrsbc (signed char x) +{ + return __builtin_clrsbg (x); +} + +__attribute__((noipa)) int +clrsbs (signed short x) +{ + return __builtin_clrsbg (x); +} + +__attribute__((noipa)) int +clrsbi (signed int x) +{ + return __builtin_clrsbg (x); +} + +__attribute__((noipa)) int +clrsbl (signed long x) +{ + return __builtin_clrsbg (x); +} + +__attribute__((noipa)) int +clrsbL (signed long long x) +{ + return __builtin_clrsbg (x); +} + +#ifdef __SIZEOF_INT128__ +__attribute__((noipa)) int +clrsbI (signed __int128 x) +{ + return __builtin_clrsbg (x); +} +#endif + +__attribute__((noipa)) int +ffsc (signed char x) +{ + return __builtin_ffsg (x); +} + +__attribute__((noipa)) int +ffss (signed short x) +{ + return __builtin_ffsg (x); +} + +__attribute__((noipa)) int +ffsi (signed int x) +{ + return __builtin_ffsg (x); +} + +__attribute__((noipa)) int +ffsl (signed long x) +{ + return __builtin_ffsg (x); +} + +__attribute__((noipa)) int +ffsL (signed long long x) +{ + return __builtin_ffsg (x); +} + +#ifdef __SIZEOF_INT128__ +__attribute__((noipa)) int +ffsI (signed __int128 x) +{ + return __builtin_ffsg (x); +} +#endif + +__attribute__((noipa)) int +parityc (unsigned char x) +{ + return __builtin_parityg (x); +} + +__attribute__((noipa)) int +paritys (unsigned short x) +{ + return __builtin_parityg (x); +} + +__attribute__((noipa)) int +parityi (unsigned int x) +{ + return __builtin_parityg (x); +} + +__attribute__((noipa)) int +parityl (unsigned long x) +{ + return __builtin_parityg (x); +} + +__attribute__((noipa)) int +parityL (unsigned long long x) +{ + return __builtin_parityg (x); +} + +#ifdef __SIZEOF_INT128__ +__attribute__((noipa)) int +parityI (unsigned __int128 x) +{ + return __builtin_parityg (x); +} +#endif + +__attribute__((noipa)) int +popcountc (unsigned char x) +{ + return __builtin_popcountg (x); +} + +__attribute__((noipa)) int +popcounts (unsigned short x) +{ + return __builtin_popcountg (x); +} + +__attribute__((noipa)) int +popcounti (unsigned int x) +{ + return __builtin_popcountg (x); +} + +__attribute__((noipa)) int +popcountl (unsigned long x) +{ + return __builtin_popcountg (x); +} + +__attribute__((noipa)) int +popcountL (unsigned long long x) +{ + return __builtin_popcountg (x); +} + +#ifdef __SIZEOF_INT128__ +__attribute__((noipa)) int +popcountI (unsigned __int128 x) +{ + return __builtin_popcountg (x); +} +#endif + +int +main () +{ + if (__builtin_clzg ((unsigned char) 1) != __CHAR_BIT__ - 1 + || __builtin_clzg ((unsigned short) 2, -2) != __SIZEOF_SHORT__ * __CHAR_BIT__ - 2 + || __builtin_clzg (0U, 42) != 42 + || __builtin_clzg (0U, -1) != -1 + || __builtin_clzg (1U) != __SIZEOF_INT__ * __CHAR_BIT__ - 1 + || __builtin_clzg (2UL, -1) != __SIZEOF_LONG__ * __CHAR_BIT__ - 2 + || __builtin_clzg (5ULL) != __SIZEOF_LONG_LONG__ * __CHAR_BIT__ - 3 +#ifdef __SIZEOF_INT128__ + || __builtin_clzg ((unsigned __int128) 9) != __SIZEOF_INT128__ * __CHAR_BIT__ - 4 +#endif + || __builtin_clzg (~0U, -5) != 0 + || __builtin_clzg (~0ULL >> 2) != 2 + || __builtin_ctzg ((unsigned char) 1) != 0 + || __builtin_ctzg ((unsigned short) 28) != 2 + || __builtin_ctzg (0U, 32) != 32 + || __builtin_ctzg (0U, -42) != -42 + || __builtin_ctzg (1U) != 0 + || __builtin_ctzg (16UL, -1) != 4 + || __builtin_ctzg (5ULL << 52, 0) != 52 +#ifdef __SIZEOF_INT128__ + || __builtin_ctzg (((unsigned __int128) 9) << 72) != 72 +#endif + || __builtin_clrsbg ((signed char) 0) != __CHAR_BIT__ - 1 + || __builtin_clrsbg ((signed short) -1) != __SIZEOF_SHORT__ * __CHAR_BIT__ - 1 + || __builtin_clrsbg (0) != __SIZEOF_INT__ * __CHAR_BIT__ - 1 + || __builtin_clrsbg (-1L) != __SIZEOF_LONG__ * __CHAR_BIT__ - 1 + || __builtin_clrsbg (0LL) != __SIZEOF_LONG_LONG__ * __CHAR_BIT__ - 1 +#ifdef __SIZEOF_INT128__ + || __builtin_clrsbg ((__int128) -1) != __SIZEOF_INT128__ * __CHAR_BIT__ - 1 +#endif + || __builtin_clrsbg (0x1afb) != __SIZEOF_INT__ * __CHAR_BIT__ - 14 + || __builtin_clrsbg (-2) != __SIZEOF_INT__ * __CHAR_BIT__ - 2 + || __builtin_clrsbg (1L) != __SIZEOF_LONG__ * __CHAR_BIT__ - 2 + || __builtin_clrsbg (-4LL) != __SIZEOF_LONG_LONG__ * __CHAR_BIT__ - 3 + || __builtin_ffsg ((signed char) 0) != 0 + || __builtin_ffsg ((signed short) 0) != 0 + || __builtin_ffsg (0) != 0 + || __builtin_ffsg (0L) != 0 + || __builtin_ffsg (0LL) != 0 +#ifdef __SIZEOF_INT128__ + || __builtin_ffsg ((__int128) 0) != 0 +#endif + || __builtin_ffsg ((signed char) 4) != 3 + || __builtin_ffsg ((signed short) 8) != 4 + || __builtin_ffsg (1) != 1 + || __builtin_ffsg (2L) != 2 + || __builtin_ffsg (28LL) != 3 + || __builtin_parityg ((unsigned char) 1) != 1 + || __builtin_parityg ((unsigned short) 2) != 1 + || __builtin_parityg (0U) != 0 + || __builtin_parityg (3U) != 0 + || __builtin_parityg (0UL) != 0 + || __builtin_parityg (7UL) != 1 + || __builtin_parityg (0ULL) != 0 +#ifdef __SIZEOF_INT128__ + || __builtin_parityg ((unsigned __int128) 0) != 0 +#endif + || __builtin_parityg ((unsigned char) ~0U) != 0 + || __builtin_parityg ((unsigned short) ~0U) != 0 + || __builtin_parityg (~0U) != 0 + || __builtin_parityg (~0UL) != 0 + || __builtin_parityg (~0ULL) != 0 +#ifdef __SIZEOF_INT128__ + || __builtin_parityg (~(unsigned __int128) 0) != 0 +#endif + || __builtin_popcountg (0U) != 0 + || __builtin_popcountg (0UL) != 0 + || __builtin_popcountg (0ULL) != 0 +#ifdef __SIZEOF_INT128__ + || __builtin_popcountg ((unsigned __int128) 0) != 0 +#endif + || __builtin_popcountg ((unsigned char) ~0U) != __CHAR_BIT__ + || __builtin_popcountg ((unsigned short) ~0U) != __SIZEOF_SHORT__ * __CHAR_BIT__ + || __builtin_popcountg (~0U) != __SIZEOF_INT__ * __CHAR_BIT__ + || __builtin_popcountg (~0UL) != __SIZEOF_LONG__ * __CHAR_BIT__ + || __builtin_popcountg (~0ULL) != __SIZEOF_LONG_LONG__ * __CHAR_BIT__ +#ifdef __SIZEOF_INT128__ + || __builtin_popcountg (~(unsigned __int128) 0) != __SIZEOF_INT128__ * __CHAR_BIT__ +#endif + || 0) + __builtin_abort (); + if (clzc (1) != __CHAR_BIT__ - 1 + || clzs2 (2) != __SIZEOF_SHORT__ * __CHAR_BIT__ - 2 + || clzi2 (0U, 42) != 42 + || clzi2 (0U, -1) != -1 + || clzi (1U) != __SIZEOF_INT__ * __CHAR_BIT__ - 1 + || clzl2 (2UL) != __SIZEOF_LONG__ * __CHAR_BIT__ - 2 + || clzL (5ULL) != __SIZEOF_LONG_LONG__ * __CHAR_BIT__ - 3 +#ifdef __SIZEOF_INT128__ + || clzI ((unsigned __int128) 9) != __SIZEOF_INT128__ * __CHAR_BIT__ - 4 +#endif + || clzi2 (~0U, -5) != 0 + || clzL (~0ULL >> 2) != 2 + || ctzc (1) != 0 + || ctzs (28) != 2 + || ctzi2 (0U, 32) != 32 + || ctzi2 (0U, -42) != -42 + || ctzi (1U) != 0 + || ctzl2 (16UL, -1) != 4 + || ctzL2 (5ULL << 52, 0) != 52 +#ifdef __SIZEOF_INT128__ + || ctzI (((unsigned __int128) 9) << 72) != 72 +#endif + || clrsbc (0) != __CHAR_BIT__ - 1 + || clrsbs (-1) != __SIZEOF_SHORT__ * __CHAR_BIT__ - 1 + || clrsbi (0) != __SIZEOF_INT__ * __CHAR_BIT__ - 1 + || clrsbl (-1L) != __SIZEOF_LONG__ * __CHAR_BIT__ - 1 + || clrsbL (0LL) != __SIZEOF_LONG_LONG__ * __CHAR_BIT__ - 1 +#ifdef __SIZEOF_INT128__ + || clrsbI (-1) != __SIZEOF_INT128__ * __CHAR_BIT__ - 1 +#endif + || clrsbi (0x1afb) != __SIZEOF_INT__ * __CHAR_BIT__ - 14 + || clrsbi (-2) != __SIZEOF_INT__ * __CHAR_BIT__ - 2 + || clrsbl (1L) != __SIZEOF_LONG__ * __CHAR_BIT__ - 2 + || clrsbL (-4LL) != __SIZEOF_LONG_LONG__ * __CHAR_BIT__ - 3 + || ffsc (0) != 0 + || ffss (0) != 0 + || ffsi (0) != 0 + || ffsl (0L) != 0 + || ffsL (0LL) != 0 +#ifdef __SIZEOF_INT128__ + || ffsI (0) != 0 +#endif + || ffsc (4) != 3 + || ffss (8) != 4 + || ffsi (1) != 1 + || ffsl (2L) != 2 + || ffsL (28LL) != 3 + || parityc (1) != 1 + || paritys (2) != 1 + || parityi (0U) != 0 + || parityi (3U) != 0 + || parityl (0UL) != 0 + || parityl (7UL) != 1 + || parityL (0ULL) != 0 +#ifdef __SIZEOF_INT128__ + || parityI (0) != 0 +#endif + || parityc ((unsigned char) ~0U) != 0 + || paritys ((unsigned short) ~0U) != 0 + || parityi (~0U) != 0 + || parityl (~0UL) != 0 + || parityL (~0ULL) != 0 +#ifdef __SIZEOF_INT128__ + || parityI (~(unsigned __int128) 0) != 0 +#endif + || popcounti (0U) != 0 + || popcountl (0UL) != 0 + || popcountL (0ULL) != 0 +#ifdef __SIZEOF_INT128__ + || popcountI (0) != 0 +#endif + || popcountc ((unsigned char) ~0U) != __CHAR_BIT__ + || popcounts ((unsigned short) ~0U) != __SIZEOF_SHORT__ * __CHAR_BIT__ + || popcounti (~0U) != __SIZEOF_INT__ * __CHAR_BIT__ + || popcountl (~0UL) != __SIZEOF_LONG__ * __CHAR_BIT__ + || popcountL (~0ULL) != __SIZEOF_LONG_LONG__ * __CHAR_BIT__ +#ifdef __SIZEOF_INT128__ + || popcountI (~(unsigned __int128) 0) != __SIZEOF_INT128__ * __CHAR_BIT__ +#endif + || 0) + __builtin_abort (); +} diff --git a/gcc/testsuite/c-c++-common/pr111309-2.c b/gcc/testsuite/c-c++-common/pr111309-2.c new file mode 100644 index 000000000000..535208b1cd3b --- /dev/null +++ b/gcc/testsuite/c-c++-common/pr111309-2.c @@ -0,0 +1,85 @@ +/* PR c/111309 */ +/* { dg-do compile } */ +/* { dg-additional-options "-std=c99" { target c } } */ + +#ifndef __cplusplus +#define bool _Bool +#define true ((_Bool) 1) +#define false ((_Bool) 0) +#endif + +void +foo (void) +{ + enum E { E0 = 0 }; + struct S { int s; } s; + __builtin_clzg (); /* { dg-error "too few arguments" } */ + __builtin_clzg (0U, 1, 2); /* { dg-error "too many arguments" } */ + __builtin_clzg (0); /* { dg-error "has signed type" } */ + __builtin_clzg (0.0); /* { dg-error "does not have integral type" } */ + __builtin_clzg (s); /* { dg-error "does not have integral type" } */ + __builtin_clzg (true); /* { dg-error "has boolean type" } */ + __builtin_clzg (E0); /* { dg-error "has signed type" "" { target c } } */ + /* { dg-error "has enumerated type" "" { target c++ } .-1 } */ + __builtin_clzg (0, 0); /* { dg-error "has signed type" } */ + __builtin_clzg (0.0, 0); /* { dg-error "does not have integral type" } */ + __builtin_clzg (s, 0); /* { dg-error "does not have integral type" } */ + __builtin_clzg (true, 0); /* { dg-error "has boolean type" } */ + __builtin_clzg (E0, 0); /* { dg-error "has signed type" "" { target c } } */ + /* { dg-error "has enumerated type" "" { target c++ } .-1 } */ + __builtin_clzg (0U, 2.0); /* { dg-error "does not have integral type" } */ + __builtin_clzg (0U, s); /* { dg-error "does not have integral type" } */ + __builtin_clzg (0U, 2LL); /* { dg-error "does not have 'int' type" } */ + __builtin_clzg (0U, 2U); /* { dg-error "does not have 'int' type" } */ + __builtin_clzg (0U, true); + __builtin_clzg (0U, E0); /* { dg-error "does not have 'int' type" "" { target c++ } } */ + __builtin_ctzg (); /* { dg-error "too few arguments" } */ + __builtin_ctzg (0U, 1, 2); /* { dg-error "too many arguments" } */ + __builtin_ctzg (0); /* { dg-error "has signed type" } */ + __builtin_ctzg (0.0); /* { dg-error "does not have integral type" } */ + __builtin_ctzg (s); /* { dg-error "does not have integral type" } */ + __builtin_ctzg (true); /* { dg-error "has boolean type" } */ + __builtin_ctzg (E0); /* { dg-error "has signed type" "" { target c } } */ + /* { dg-error "has enumerated type" "" { target c++ } .-1 } */ + __builtin_ctzg (0, 0); /* { dg-error "has signed type" } */ + __builtin_ctzg (0.0, 0); /* { dg-error "does not have integral type" } */ + __builtin_ctzg (s, 0); /* { dg-error "does not have integral type" } */ + __builtin_ctzg (true, 0); /* { dg-error "has boolean type" } */ + __builtin_ctzg (E0, 0); /* { dg-error "has signed type" "" { target c } } */ + /* { dg-error "has enumerated type" "" { target c++ } .-1 } */ + __builtin_ctzg (0U, 2.0); /* { dg-error "does not have integral type" } */ + __builtin_ctzg (0U, 2LL); /* { dg-error "does not have 'int' type" } */ + __builtin_ctzg (0U, 2U); /* { dg-error "does not have 'int' type" } */ + __builtin_ctzg (0U, true); + __builtin_ctzg (0U, E0); /* { dg-error "does not have 'int' type" "" { target c++ } } */ + __builtin_clrsbg (); /* { dg-error "too few arguments" } */ + __builtin_clrsbg (0, 1); /* { dg-error "too many arguments" } */ + __builtin_clrsbg (0U); /* { dg-error "has unsigned type" } */ + __builtin_clrsbg (0.0); /* { dg-error "does not have integral type" } */ + __builtin_clrsbg (s); /* { dg-error "does not have integral type" } */ + __builtin_clrsbg (true); /* { dg-error "has boolean type" } */ + __builtin_clrsbg (E0); /* { dg-error "has enumerated type" "" { target c++ } } */ + __builtin_ffsg (); /* { dg-error "too few arguments" } */ + __builtin_ffsg (0, 1); /* { dg-error "too many arguments" } */ + __builtin_ffsg (0U); /* { dg-error "has unsigned type" } */ + __builtin_ffsg (0.0); /* { dg-error "does not have integral type" } */ + __builtin_ffsg (s); /* { dg-error "does not have integral type" } */ + __builtin_ffsg (true); /* { dg-error "has boolean type" } */ + __builtin_ffsg (E0); /* { dg-error "has enumerated type" "" { target c++ } } */ + __builtin_parityg (); /* { dg-error "too few arguments" } */ + __builtin_parityg (0U, 1); /* { dg-error "too many arguments" } */ + __builtin_parityg (0); /* { dg-error "has signed type" } */ + __builtin_parityg (0.0); /* { dg-error "does not have integral type" } */ + __builtin_parityg (s); /* { dg-error "does not have integral type" } */ + __builtin_parityg (true); /* { dg-error "has boolean type" } */ + __builtin_parityg (E0); /* { dg-error "has signed type" "" { target c } } */ + /* { dg-error "has enumerated type" "" { target c++ } .-1 } */ + __builtin_popcountg (); /* { dg-error "too few arguments" } */ + __builtin_popcountg (0U, 1); /* { dg-error "too many arguments" } */ + __builtin_popcountg (0); /* { dg-error "has signed type" } */ + __builtin_popcountg (0.0); /* { dg-error "does not have integral type" } */ + __builtin_popcountg (s); /* { dg-error "does not have integral type" } */ + __builtin_popcountg (true); /* { dg-error "has boolean type" } */ + __builtin_popcountg (E0); /* { dg-error "has signed type" "" { target c } } */ + /* { dg-error "has enumerated type" "" { target c++ } .-1 } */ +} diff --git a/gcc/testsuite/gcc.dg/torture/bitint-43.c b/gcc/testsuite/gcc.dg/torture/bitint-43.c new file mode 100644 index 000000000000..4265bffef706 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/bitint-43.c @@ -0,0 +1,306 @@ +/* PR c/111309 */ +/* { dg-do run { target bitint } } */ +/* { dg-options "-std=c2x -pedantic-errors" } */ +/* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } } */ +/* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */ + +#if __BITINT_MAXWIDTH__ >= 156 +__attribute__((noipa)) int +clz156 (unsigned _BitInt(156) x) +{ + return __builtin_clzg (x); +} + +__attribute__((noipa)) int +clzd156 (unsigned _BitInt(156) x) +{ + return __builtin_clzg (x, __builtin_popcountg ((typeof (x)) ~(typeof (x)) 0)); +} + +__attribute__((noipa)) int +clzD156 (unsigned _BitInt(156) x, int y) +{ + return __builtin_clzg (x, y); +} + +__attribute__((noipa)) int +ctz156 (unsigned _BitInt(156) x) +{ + return __builtin_ctzg (x); +} + +__attribute__((noipa)) int +ctzd156 (unsigned _BitInt(156) x) +{ + return __builtin_ctzg (x, __builtin_popcountg ((typeof (x)) ~(typeof (x)) 0)); +} + +__attribute__((noipa)) int +ctzD156 (unsigned _BitInt(156) x, int y) +{ + return __builtin_ctzg (x, y); +} + +__attribute__((noipa)) int +clrsb156 (_BitInt(156) x) +{ + return __builtin_clrsbg (x); +} + +__attribute__((noipa)) int +ffs156 (_BitInt(156) x) +{ + return __builtin_ffsg (x); +} + +__attribute__((noipa)) int +parity156 (unsigned _BitInt(156) x) +{ + return __builtin_parityg (x); +} + +__attribute__((noipa)) int +popcount156 (unsigned _BitInt(156) x) +{ + return __builtin_popcountg (x); +} +#endif + +#if __BITINT_MAXWIDTH__ >= 192 +__attribute__((noipa)) int +clz192 (unsigned _BitInt(192) x) +{ + return __builtin_clzg (x); +} + +__attribute__((noipa)) int +clzd192 (unsigned _BitInt(192) x) +{ + return __builtin_clzg (x, __builtin_popcountg ((typeof (x)) ~(typeof (x)) 0)); +} + +__attribute__((noipa)) int +clzD192 (unsigned _BitInt(192) x, int y) +{ + return __builtin_clzg (x, y); +} + +__attribute__((noipa)) int +ctz192 (unsigned _BitInt(192) x) +{ + return __builtin_ctzg (x); +} + +__attribute__((noipa)) int +ctzd192 (unsigned _BitInt(192) x) +{ + return __builtin_ctzg (x, __builtin_popcountg ((typeof (x)) ~(typeof (x)) 0)); +} + +__attribute__((noipa)) int +ctzD192 (unsigned _BitInt(192) x, int y) +{ + return __builtin_ctzg (x, y); +} + +__attribute__((noipa)) int +clrsb192 (_BitInt(192) x) +{ + return __builtin_clrsbg (x); +} + +__attribute__((noipa)) int +ffs192 (_BitInt(192) x) +{ + return __builtin_ffsg (x); +} + +__attribute__((noipa)) int +parity192 (unsigned _BitInt(192) x) +{ + return __builtin_parityg (x); +} + +__attribute__((noipa)) int +popcount192 (unsigned _BitInt(192) x) +{ + return __builtin_popcountg (x); +} +#endif + +int +main () +{ +#if __BITINT_MAXWIDTH__ >= 156 + if (clzd156 (0) != 156 + || clzD156 (0, -1) != -1 + || ctzd156 (0) != 156 + || ctzD156 (0, 42) != 42 + || clrsb156 (0) != 156 - 1 + || ffs156 (0) != 0 + || parity156 (0) != 0 + || popcount156 (0) != 0 + || __builtin_clzg ((unsigned _BitInt(156)) 0, 156 + 32) != 156 + 32 + || __builtin_ctzg ((unsigned _BitInt(156)) 0, 156) != 156 + || __builtin_clrsbg ((_BitInt(156)) 0) != 156 - 1 + || __builtin_ffsg ((_BitInt(156)) 0) != 0 + || __builtin_parityg ((unsigned _BitInt(156)) 0) != 0 + || __builtin_popcountg ((unsigned _BitInt(156)) 0) != 0) + __builtin_abort (); + if (clz156 (-1) != 0 + || clzd156 (-1) != 0 + || clzD156 (-1, 0) != 0 + || ctz156 (-1) != 0 + || ctzd156 (-1) != 0 + || ctzD156 (-1, 17) != 0 + || clrsb156 (-1) != 156 - 1 + || ffs156 (-1) != 1 + || parity156 (-1) != 0 + || popcount156 (-1) != 156 + || __builtin_clzg ((unsigned _BitInt(156)) -1) != 0 + || __builtin_clzg ((unsigned _BitInt(156)) -1, 156 + 32) != 0 + || __builtin_ctzg ((unsigned _BitInt(156)) -1) != 0 + || __builtin_ctzg ((unsigned _BitInt(156)) -1, 156) != 0 + || __builtin_clrsbg ((_BitInt(156)) -1) != 156 - 1 + || __builtin_ffsg ((_BitInt(156)) -1) != 1 + || __builtin_parityg ((unsigned _BitInt(156)) -1) != 0 + || __builtin_popcountg ((unsigned _BitInt(156)) -1) != 156) + __builtin_abort (); + if (clz156 (((unsigned _BitInt(156)) -1) >> 24) != 24 + || clz156 (((unsigned _BitInt(156)) -1) >> 79) != 79 + || clz156 (1) != 156 - 1 + || clzd156 (((unsigned _BitInt(156)) -1) >> 139) != 139 + || clzd156 (2) != 156 - 2 + || ctz156 (((unsigned _BitInt(156)) -1) << 42) != 42 + || ctz156 (((unsigned _BitInt(156)) -1) << 57) != 57 + || ctz156 (0x4000000000000000000000uwb) != 86 + || ctzd156 (((unsigned _BitInt(156)) -1) << 149) != 149 + || ctzd156 (2) != 1 + || clrsb156 ((unsigned _BitInt(156 - 4)) -1) != 3 + || clrsb156 ((unsigned _BitInt(156 - 28)) -1) != 27 + || clrsb156 ((unsigned _BitInt(156 - 29)) -1) != 28 + || clrsb156 (~(unsigned _BitInt(156)) (unsigned _BitInt(156 - 68)) -1) != 67 + || clrsb156 (~(unsigned _BitInt(156)) (unsigned _BitInt(156 - 92)) -1) != 91 + || clrsb156 (~(unsigned _BitInt(156)) (unsigned _BitInt(156 - 93)) -1) != 92 + || ffs156 (((unsigned _BitInt(156)) -1) << 42) != 43 + || ffs156 (((unsigned _BitInt(156)) -1) << 57) != 58 + || ffs156 (0x4000000000000000000000uwb) != 87 + || ffs156 (((unsigned _BitInt(156)) -1) << 149) != 150 + || ffs156 (2) != 2 + || __builtin_clzg (((unsigned _BitInt(156)) -1) >> 24) != 24 + || __builtin_clzg (((unsigned _BitInt(156)) -1) >> 79) != 79 + || __builtin_clzg ((unsigned _BitInt(156)) 1) != 156 - 1 + || __builtin_clzg (((unsigned _BitInt(156)) -1) >> 139, 156) != 139 + || __builtin_clzg ((unsigned _BitInt(156)) 2, 156) != 156 - 2 + || __builtin_ctzg (((unsigned _BitInt(156)) -1) << 42) != 42 + || __builtin_ctzg (((unsigned _BitInt(156)) -1) << 57) != 57 + || __builtin_ctzg ((unsigned _BitInt(156)) 0x4000000000000000000000uwb) != 86 + || __builtin_ctzg (((unsigned _BitInt(156)) -1) << 149, 156) != 149 + || __builtin_ctzg ((unsigned _BitInt(156)) 2, 156) != 1 + || __builtin_clrsbg ((_BitInt(156)) (unsigned _BitInt(156 - 4)) -1) != 3 + || __builtin_clrsbg ((_BitInt(156)) (unsigned _BitInt(156 - 28)) -1) != 27 + || __builtin_clrsbg ((_BitInt(156)) (unsigned _BitInt(156 - 29)) -1) != 28 + || __builtin_clrsbg ((_BitInt(156)) ~(unsigned _BitInt(156)) (unsigned _BitInt(156 - 68)) -1) != 67 + || __builtin_clrsbg ((_BitInt(156)) ~(unsigned _BitInt(156)) (unsigned _BitInt(156 - 92)) -1) != 91 + || __builtin_clrsbg ((_BitInt(156)) ~(unsigned _BitInt(156)) (unsigned _BitInt(156 - 93)) -1) != 92 + || __builtin_ffsg ((_BitInt(156)) (((unsigned _BitInt(156)) -1) << 42)) != 43 + || __builtin_ffsg ((_BitInt(156)) (((unsigned _BitInt(156)) -1) << 57)) != 58 + || __builtin_ffsg ((_BitInt(156)) 0x4000000000000000000000uwb) != 87 + || __builtin_ffsg ((_BitInt(156)) (((unsigned _BitInt(156)) -1) << 149)) != 150 + || __builtin_ffsg ((_BitInt(156)) 2) != 2) + __builtin_abort (); + if (parity156 (23008250258685373142923325827291949461178444434uwb) != __builtin_parityg (23008250258685373142923325827291949461178444434uwb) + || parity156 (41771568792516301628132437740665810252917251244uwb) != __builtin_parityg (41771568792516301628132437740665810252917251244uwb) + || parity156 (5107402473866766219120283991834936835726115452uwb) != __builtin_parityg (5107402473866766219120283991834936835726115452uwb) + || popcount156 (50353291748276374580944955711958129678996395562uwb) != __builtin_popcountg (50353291748276374580944955711958129678996395562uwb) + || popcount156 (29091263616891212550063067166307725491211684496uwb) != __builtin_popcountg (29091263616891212550063067166307725491211684496uwb) + || popcount156 (64973284306583205619384799873110935608793072026uwb) != __builtin_popcountg (64973284306583205619384799873110935608793072026uwb)) + __builtin_abort (); +#endif +#if __BITINT_MAXWIDTH__ >= 192 + if (clzd192 (0) != 192 + || clzD192 (0, 42) != 42 + || ctzd192 (0) != 192 + || ctzD192 (0, -1) != -1 + || clrsb192 (0) != 192 - 1 + || ffs192 (0) != 0 + || parity192 (0) != 0 + || popcount192 (0) != 0 + || __builtin_clzg ((unsigned _BitInt(192)) 0, 192 + 32) != 192 + 32 + || __builtin_ctzg ((unsigned _BitInt(192)) 0, 192) != 192 + || __builtin_clrsbg ((_BitInt(192)) 0) != 192 - 1 + || __builtin_ffsg ((_BitInt(192)) 0) != 0 + || __builtin_parityg ((unsigned _BitInt(192)) 0) != 0 + || __builtin_popcountg ((unsigned _BitInt(192)) 0) != 0) + __builtin_abort (); + if (clz192 (-1) != 0 + || clzd192 (-1) != 0 + || clzD192 (-1, 15) != 0 + || ctz192 (-1) != 0 + || ctzd192 (-1) != 0 + || ctzD192 (-1, -57) != 0 + || clrsb192 (-1) != 192 - 1 + || ffs192 (-1) != 1 + || parity192 (-1) != 0 + || popcount192 (-1) != 192 + || __builtin_clzg ((unsigned _BitInt(192)) -1) != 0 + || __builtin_clzg ((unsigned _BitInt(192)) -1, 192 + 32) != 0 + || __builtin_ctzg ((unsigned _BitInt(192)) -1) != 0 + || __builtin_ctzg ((unsigned _BitInt(192)) -1, 192) != 0 + || __builtin_clrsbg ((_BitInt(192)) -1) != 192 - 1 + || __builtin_ffsg ((_BitInt(192)) -1) != 1 + || __builtin_parityg ((unsigned _BitInt(192)) -1) != 0 + || __builtin_popcountg ((unsigned _BitInt(192)) -1) != 192) + __builtin_abort (); + if (clz192 (((unsigned _BitInt(192)) -1) >> 24) != 24 + || clz192 (((unsigned _BitInt(192)) -1) >> 79) != 79 + || clz192 (1) != 192 - 1 + || clzd192 (((unsigned _BitInt(192)) -1) >> 139) != 139 + || clzd192 (2) != 192 - 2 + || ctz192 (((unsigned _BitInt(192)) -1) << 42) != 42 + || ctz192 (((unsigned _BitInt(192)) -1) << 57) != 57 + || ctz192 (0x4000000000000000000000uwb) != 86 + || ctzd192 (((unsigned _BitInt(192)) -1) << 149) != 149 + || ctzd192 (2) != 1 + || clrsb192 ((unsigned _BitInt(192 - 4)) -1) != 3 + || clrsb192 ((unsigned _BitInt(192 - 28)) -1) != 27 + || clrsb192 ((unsigned _BitInt(192 - 29)) -1) != 28 + || clrsb192 (~(unsigned _BitInt(192)) (unsigned _BitInt(192 - 68)) -1) != 67 + || clrsb192 (~(unsigned _BitInt(192)) (unsigned _BitInt(192 - 92)) -1) != 91 + || clrsb192 (~(unsigned _BitInt(192)) (unsigned _BitInt(192 - 93)) -1) != 92 + || ffs192 (((unsigned _BitInt(192)) -1) << 42) != 43 + || ffs192 (((unsigned _BitInt(192)) -1) << 57) != 58 + || ffs192 (0x4000000000000000000000uwb) != 87 + || ffs192 (((unsigned _BitInt(192)) -1) << 149) != 150 + || ffs192 (2) != 2 + || __builtin_clzg (((unsigned _BitInt(192)) -1) >> 24) != 24 + || __builtin_clzg (((unsigned _BitInt(192)) -1) >> 79) != 79 + || __builtin_clzg ((unsigned _BitInt(192)) 1) != 192 - 1 + || __builtin_clzg (((unsigned _BitInt(192)) -1) >> 139, 192) != 139 + || __builtin_clzg ((unsigned _BitInt(192)) 2, 192) != 192 - 2 + || __builtin_ctzg (((unsigned _BitInt(192)) -1) << 42) != 42 + || __builtin_ctzg (((unsigned _BitInt(192)) -1) << 57) != 57 + || __builtin_ctzg ((unsigned _BitInt(192)) 0x4000000000000000000000uwb) != 86 + || __builtin_ctzg (((unsigned _BitInt(192)) -1) << 149, 192) != 149 + || __builtin_ctzg ((unsigned _BitInt(192)) 2, 192) != 1 + || __builtin_clrsbg ((_BitInt(192)) (unsigned _BitInt(192 - 4)) -1) != 3 + || __builtin_clrsbg ((_BitInt(192)) (unsigned _BitInt(192 - 28)) -1) != 27 + || __builtin_clrsbg ((_BitInt(192)) (unsigned _BitInt(192 - 29)) -1) != 28 + || __builtin_clrsbg ((_BitInt(192)) ~(unsigned _BitInt(192)) (unsigned _BitInt(192 - 68)) -1) != 67 + || __builtin_clrsbg ((_BitInt(192)) ~(unsigned _BitInt(192)) (unsigned _BitInt(192 - 92)) -1) != 91 + || __builtin_clrsbg ((_BitInt(192)) ~(unsigned _BitInt(192)) (unsigned _BitInt(192 - 93)) -1) != 92 + || __builtin_ffsg ((_BitInt(192)) (((unsigned _BitInt(192)) -1) << 42)) != 43 + || __builtin_ffsg ((_BitInt(192)) (((unsigned _BitInt(192)) -1) << 57)) != 58 + || __builtin_ffsg ((_BitInt(192)) 0x4000000000000000000000uwb) != 87 + || __builtin_ffsg ((_BitInt(192)) (((unsigned _BitInt(192)) -1) << 149)) != 150 + || __builtin_ffsg ((_BitInt(192)) 2) != 2) + __builtin_abort (); + if (parity192 (4692147078159863499615754634965484598760535154638668598762uwb) != __builtin_parityg (4692147078159863499615754634965484598760535154638668598762uwb) + || parity192 (1669461228546917627909935444501097256112222796898845183538uwb) != __builtin_parityg (1669461228546917627909935444501097256112222796898845183538uwb) + || parity192 (5107402473866766219120283991834936835726115452uwb) != __builtin_parityg (5107402473866766219120283991834936835726115452uwb) + || popcount192 (4033871057575185619108386380181511734118888391160164588976uwb) != __builtin_popcountg (4033871057575185619108386380181511734118888391160164588976uwb) + || popcount192 (58124766715713711628758119849579188845074973856704521119uwb) != __builtin_popcountg (58124766715713711628758119849579188845074973856704521119uwb) + || popcount192 (289948065236269174335700831610076764076947650072787325852uwb) != __builtin_popcountg (289948065236269174335700831610076764076947650072787325852uwb)) + __builtin_abort (); +#endif +} diff --git a/gcc/testsuite/gcc.dg/torture/bitint-44.c b/gcc/testsuite/gcc.dg/torture/bitint-44.c new file mode 100644 index 000000000000..938c0e917f34 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/bitint-44.c @@ -0,0 +1,306 @@ +/* PR c/111309 */ +/* { dg-do run { target bitint } } */ +/* { dg-options "-std=c2x -pedantic-errors" } */ +/* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } } */ +/* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */ + +#if __BITINT_MAXWIDTH__ >= 512 +__attribute__((noipa)) int +clz512 (unsigned _BitInt(512) x) +{ + return __builtin_clzg (x); +} + +__attribute__((noipa)) int +clzd512 (unsigned _BitInt(512) x) +{ + return __builtin_clzg (x, __builtin_popcountg ((typeof (x)) ~(typeof (x)) 0)); +} + +__attribute__((noipa)) int +clzD512 (unsigned _BitInt(512) x, int y) +{ + return __builtin_clzg (x, y); +} + +__attribute__((noipa)) int +ctz512 (unsigned _BitInt(512) x) +{ + return __builtin_ctzg (x); +} + +__attribute__((noipa)) int +ctzd512 (unsigned _BitInt(512) x) +{ + return __builtin_ctzg (x, __builtin_popcountg ((typeof (x)) ~(typeof (x)) 0)); +} + +__attribute__((noipa)) int +ctzD512 (unsigned _BitInt(512) x, int y) +{ + return __builtin_ctzg (x, y); +} + +__attribute__((noipa)) int +clrsb512 (_BitInt(512) x) +{ + return __builtin_clrsbg (x); +} + +__attribute__((noipa)) int +ffs512 (_BitInt(512) x) +{ + return __builtin_ffsg (x); +} + +__attribute__((noipa)) int +parity512 (unsigned _BitInt(512) x) +{ + return __builtin_parityg (x); +} + +__attribute__((noipa)) int +popcount512 (unsigned _BitInt(512) x) +{ + return __builtin_popcountg (x); +} +#endif + +#if __BITINT_MAXWIDTH__ >= 523 +__attribute__((noipa)) int +clz523 (unsigned _BitInt(523) x) +{ + return __builtin_clzg (x); +} + +__attribute__((noipa)) int +clzd523 (unsigned _BitInt(523) x) +{ + return __builtin_clzg (x, __builtin_popcountg ((typeof (x)) ~(typeof (x)) 0)); +} + +__attribute__((noipa)) int +clzD523 (unsigned _BitInt(523) x, int y) +{ + return __builtin_clzg (x, y); +} + +__attribute__((noipa)) int +ctz523 (unsigned _BitInt(523) x) +{ + return __builtin_ctzg (x); +} + +__attribute__((noipa)) int +ctzd523 (unsigned _BitInt(523) x) +{ + return __builtin_ctzg (x, __builtin_popcountg ((typeof (x)) ~(typeof (x)) 0)); +} + +__attribute__((noipa)) int +ctzD523 (unsigned _BitInt(523) x, int y) +{ + return __builtin_ctzg (x, y); +} + +__attribute__((noipa)) int +clrsb523 (_BitInt(523) x) +{ + return __builtin_clrsbg (x); +} + +__attribute__((noipa)) int +ffs523 (_BitInt(523) x) +{ + return __builtin_ffsg (x); +} + +__attribute__((noipa)) int +parity523 (unsigned _BitInt(523) x) +{ + return __builtin_parityg (x); +} + +__attribute__((noipa)) int +popcount523 (unsigned _BitInt(523) x) +{ + return __builtin_popcountg (x); +} +#endif + +int +main () +{ +#if __BITINT_MAXWIDTH__ >= 512 + if (clzd512 (0) != 512 + || clzD512 (0, -1) != -1 + || ctzd512 (0) != 512 + || ctzD512 (0, 42) != 42 + || clrsb512 (0) != 512 - 1 + || ffs512 (0) != 0 + || parity512 (0) != 0 + || popcount512 (0) != 0 + || __builtin_clzg ((unsigned _BitInt(512)) 0, 512 + 32) != 512 + 32 + || __builtin_ctzg ((unsigned _BitInt(512)) 0, 512) != 512 + || __builtin_clrsbg ((_BitInt(512)) 0) != 512 - 1 + || __builtin_ffsg ((_BitInt(512)) 0) != 0 + || __builtin_parityg ((unsigned _BitInt(512)) 0) != 0 + || __builtin_popcountg ((unsigned _BitInt(512)) 0) != 0) + __builtin_abort (); + if (clz512 (-1) != 0 + || clzd512 (-1) != 0 + || clzD512 (-1, 0) != 0 + || ctz512 (-1) != 0 + || ctzd512 (-1) != 0 + || ctzD512 (-1, 17) != 0 + || clrsb512 (-1) != 512 - 1 + || ffs512 (-1) != 1 + || parity512 (-1) != 0 + || popcount512 (-1) != 512 + || __builtin_clzg ((unsigned _BitInt(512)) -1) != 0 + || __builtin_clzg ((unsigned _BitInt(512)) -1, 512 + 32) != 0 + || __builtin_ctzg ((unsigned _BitInt(512)) -1) != 0 + || __builtin_ctzg ((unsigned _BitInt(512)) -1, 512) != 0 + || __builtin_clrsbg ((_BitInt(512)) -1) != 512 - 1 + || __builtin_ffsg ((_BitInt(512)) -1) != 1 + || __builtin_parityg ((unsigned _BitInt(512)) -1) != 0 + || __builtin_popcountg ((unsigned _BitInt(512)) -1) != 512) + __builtin_abort (); + if (clz512 (((unsigned _BitInt(512)) -1) >> 24) != 24 + || clz512 (((unsigned _BitInt(512)) -1) >> 79) != 79 + || clz512 (1) != 512 - 1 + || clzd512 (((unsigned _BitInt(512)) -1) >> 139) != 139 + || clzd512 (2) != 512 - 2 + || ctz512 (((unsigned _BitInt(512)) -1) << 42) != 42 + || ctz512 (((unsigned _BitInt(512)) -1) << 57) != 57 + || ctz512 (0x4000000000000000000000uwb) != 86 + || ctzd512 (((unsigned _BitInt(512)) -1) << 149) != 149 + || ctzd512 (2) != 1 + || clrsb512 ((unsigned _BitInt(512 - 4)) -1) != 3 + || clrsb512 ((unsigned _BitInt(512 - 28)) -1) != 27 + || clrsb512 ((unsigned _BitInt(512 - 29)) -1) != 28 + || clrsb512 (~(unsigned _BitInt(512)) (unsigned _BitInt(512 - 68)) -1) != 67 + || clrsb512 (~(unsigned _BitInt(512)) (unsigned _BitInt(512 - 92)) -1) != 91 + || clrsb512 (~(unsigned _BitInt(512)) (unsigned _BitInt(512 - 93)) -1) != 92 + || ffs512 (((unsigned _BitInt(512)) -1) << 42) != 43 + || ffs512 (((unsigned _BitInt(512)) -1) << 57) != 58 + || ffs512 (0x4000000000000000000000uwb) != 87 + || ffs512 (((unsigned _BitInt(512)) -1) << 149) != 150 + || ffs512 (2) != 2 + || __builtin_clzg (((unsigned _BitInt(512)) -1) >> 24) != 24 + || __builtin_clzg (((unsigned _BitInt(512)) -1) >> 79) != 79 + || __builtin_clzg ((unsigned _BitInt(512)) 1) != 512 - 1 + || __builtin_clzg (((unsigned _BitInt(512)) -1) >> 139, 512) != 139 + || __builtin_clzg ((unsigned _BitInt(512)) 2, 512) != 512 - 2 + || __builtin_ctzg (((unsigned _BitInt(512)) -1) << 42) != 42 + || __builtin_ctzg (((unsigned _BitInt(512)) -1) << 57) != 57 + || __builtin_ctzg ((unsigned _BitInt(512)) 0x4000000000000000000000uwb) != 86 + || __builtin_ctzg (((unsigned _BitInt(512)) -1) << 149, 512) != 149 + || __builtin_ctzg ((unsigned _BitInt(512)) 2, 512) != 1 + || __builtin_clrsbg ((_BitInt(512)) (unsigned _BitInt(512 - 4)) -1) != 3 + || __builtin_clrsbg ((_BitInt(512)) (unsigned _BitInt(512 - 28)) -1) != 27 + || __builtin_clrsbg ((_BitInt(512)) (unsigned _BitInt(512 - 29)) -1) != 28 + || __builtin_clrsbg ((_BitInt(512)) ~(unsigned _BitInt(512)) (unsigned _BitInt(512 - 68)) -1) != 67 + || __builtin_clrsbg ((_BitInt(512)) ~(unsigned _BitInt(512)) (unsigned _BitInt(512 - 92)) -1) != 91 + || __builtin_clrsbg ((_BitInt(512)) ~(unsigned _BitInt(512)) (unsigned _BitInt(512 - 93)) -1) != 92 + || __builtin_ffsg ((_BitInt(512)) (((unsigned _BitInt(512)) -1) << 42)) != 43 + || __builtin_ffsg ((_BitInt(512)) (((unsigned _BitInt(512)) -1) << 57)) != 58 + || __builtin_ffsg ((_BitInt(512)) 0x4000000000000000000000uwb) != 87 + || __builtin_ffsg ((_BitInt(512)) (((unsigned _BitInt(512)) -1) << 149)) != 150 + || __builtin_ffsg ((_BitInt(512)) 2) != 2) + __builtin_abort (); + if (parity512 (8278593062772967967574644592392030907507244457324713380127157444008480135136016412791369421272159911061801023217823646324038055629840240503699995274750141uwb) != __builtin_parityg (8278593062772967967574644592392030907507244457324713380127157444008480135136016412791369421272159911061801023217823646324038055629840240503699995274750141uwb) + || parity512 (663951521760319802637316646127146913163123967584512032007606686578544864655291546789196279408181546344880831465704154822174055168766759305688225967189384uwb) != __builtin_parityg (663951521760319802637316646127146913163123967584512032007606686578544864655291546789196279408181546344880831465704154822174055168766759305688225967189384uwb) + || parity512 (8114152627481936575035564712656624361256533214211179387274127464949371919139038942819974113641465089580051998523156404968195970853124179018281296621919217uwb) != __builtin_parityg (8114152627481936575035564712656624361256533214211179387274127464949371919139038942819974113641465089580051998523156404968195970853124179018281296621919217uwb) + || popcount512 (697171368046392901434470580443928282938585745214587494987284546386421344865289735592202298494880955572094546861862007016154025065165834164941207378563932uwb) != __builtin_popcountg (697171368046392901434470580443928282938585745214587494987284546386421344865289735592202298494880955572094546861862007016154025065165834164941207378563932uwb) + || popcount512 (12625357869391866487124235043239209385173615631331705015179232007319637649427586947822360147798041278948617160703315666047585702906648747835331939389354450uwb) != __builtin_popcountg (12625357869391866487124235043239209385173615631331705015179232007319637649427586947822360147798041278948617160703315666047585702906648747835331939389354450uwb) + || popcount512 (12989863959706456104163426941303698078341934896544520782734564901708926112239778316241786242633862403309192697330635825122310265805838908726925342761646021uwb) != __builtin_popcountg (12989863959706456104163426941303698078341934896544520782734564901708926112239778316241786242633862403309192697330635825122310265805838908726925342761646021uwb)) + __builtin_abort (); +#endif +#if __BITINT_MAXWIDTH__ >= 523 + if (clzd523 (0) != 523 + || clzD523 (0, 42) != 42 + || ctzd523 (0) != 523 + || ctzD523 (0, -1) != -1 + || clrsb523 (0) != 523 - 1 + || ffs523 (0) != 0 + || parity523 (0) != 0 + || popcount523 (0) != 0 + || __builtin_clzg ((unsigned _BitInt(523)) 0, 523 + 32) != 523 + 32 + || __builtin_ctzg ((unsigned _BitInt(523)) 0, 523) != 523 + || __builtin_clrsbg ((_BitInt(523)) 0) != 523 - 1 + || __builtin_ffsg ((_BitInt(523)) 0) != 0 + || __builtin_parityg ((unsigned _BitInt(523)) 0) != 0 + || __builtin_popcountg ((unsigned _BitInt(523)) 0) != 0) + __builtin_abort (); + if (clz523 (-1) != 0 + || clzd523 (-1) != 0 + || clzD523 (-1, 15) != 0 + || ctz523 (-1) != 0 + || ctzd523 (-1) != 0 + || ctzD523 (-1, -57) != 0 + || clrsb523 (-1) != 523 - 1 + || ffs523 (-1) != 1 + || parity523 (-1) != 1 + || popcount523 (-1) != 523 + || __builtin_clzg ((unsigned _BitInt(523)) -1) != 0 + || __builtin_clzg ((unsigned _BitInt(523)) -1, 523 + 32) != 0 + || __builtin_ctzg ((unsigned _BitInt(523)) -1) != 0 + || __builtin_ctzg ((unsigned _BitInt(523)) -1, 523) != 0 + || __builtin_clrsbg ((_BitInt(523)) -1) != 523 - 1 + || __builtin_ffsg ((_BitInt(523)) -1) != 1 + || __builtin_parityg ((unsigned _BitInt(523)) -1) != 1 + || __builtin_popcountg ((unsigned _BitInt(523)) -1) != 523) + __builtin_abort (); + if (clz523 (((unsigned _BitInt(523)) -1) >> 24) != 24 + || clz523 (((unsigned _BitInt(523)) -1) >> 79) != 79 + || clz523 (1) != 523 - 1 + || clzd523 (((unsigned _BitInt(523)) -1) >> 139) != 139 + || clzd523 (2) != 523 - 2 + || ctz523 (((unsigned _BitInt(523)) -1) << 42) != 42 + || ctz523 (((unsigned _BitInt(523)) -1) << 57) != 57 + || ctz523 (0x4000000000000000000000uwb) != 86 + || ctzd523 (((unsigned _BitInt(523)) -1) << 149) != 149 + || ctzd523 (2) != 1 + || clrsb523 ((unsigned _BitInt(523 - 4)) -1) != 3 + || clrsb523 ((unsigned _BitInt(523 - 28)) -1) != 27 + || clrsb523 ((unsigned _BitInt(523 - 29)) -1) != 28 + || clrsb523 (~(unsigned _BitInt(523)) (unsigned _BitInt(523 - 68)) -1) != 67 + || clrsb523 (~(unsigned _BitInt(523)) (unsigned _BitInt(523 - 92)) -1) != 91 + || clrsb523 (~(unsigned _BitInt(523)) (unsigned _BitInt(523 - 93)) -1) != 92 + || ffs523 (((unsigned _BitInt(523)) -1) << 42) != 43 + || ffs523 (((unsigned _BitInt(523)) -1) << 57) != 58 + || ffs523 (0x4000000000000000000000uwb) != 87 + || ffs523 (((unsigned _BitInt(523)) -1) << 149) != 150 + || ffs523 (2) != 2 + || __builtin_clzg (((unsigned _BitInt(523)) -1) >> 24) != 24 + || __builtin_clzg (((unsigned _BitInt(523)) -1) >> 79) != 79 + || __builtin_clzg ((unsigned _BitInt(523)) 1) != 523 - 1 + || __builtin_clzg (((unsigned _BitInt(523)) -1) >> 139, 523) != 139 + || __builtin_clzg ((unsigned _BitInt(523)) 2, 523) != 523 - 2 + || __builtin_ctzg (((unsigned _BitInt(523)) -1) << 42) != 42 + || __builtin_ctzg (((unsigned _BitInt(523)) -1) << 57) != 57 + || __builtin_ctzg ((unsigned _BitInt(523)) 0x4000000000000000000000uwb) != 86 + || __builtin_ctzg (((unsigned _BitInt(523)) -1) << 149, 523) != 149 + || __builtin_ctzg ((unsigned _BitInt(523)) 2, 523) != 1 + || __builtin_clrsbg ((_BitInt(523)) (unsigned _BitInt(523 - 4)) -1) != 3 + || __builtin_clrsbg ((_BitInt(523)) (unsigned _BitInt(523 - 28)) -1) != 27 + || __builtin_clrsbg ((_BitInt(523)) (unsigned _BitInt(523 - 29)) -1) != 28 + || __builtin_clrsbg ((_BitInt(523)) ~(unsigned _BitInt(523)) (unsigned _BitInt(523 - 68)) -1) != 67 + || __builtin_clrsbg ((_BitInt(523)) ~(unsigned _BitInt(523)) (unsigned _BitInt(523 - 92)) -1) != 91 + || __builtin_clrsbg ((_BitInt(523)) ~(unsigned _BitInt(523)) (unsigned _BitInt(523 - 93)) -1) != 92 + || __builtin_ffsg ((_BitInt(523)) (((unsigned _BitInt(523)) -1) << 42)) != 43 + || __builtin_ffsg ((_BitInt(523)) (((unsigned _BitInt(523)) -1) << 57)) != 58 + || __builtin_ffsg ((_BitInt(523)) 0x4000000000000000000000uwb) != 87 + || __builtin_ffsg ((_BitInt(523)) (((unsigned _BitInt(523)) -1) << 149)) != 150 + || __builtin_ffsg ((_BitInt(523)) 2) != 2) + __builtin_abort (); + if (parity523 (14226628251091586975416900831427560438504550751597528218770815297642064445318137709184907300499591292677456563377096100346699421879373024906380724757049700104uwb) != __builtin_parityg (14226628251091586975416900831427560438504550751597528218770815297642064445318137709184907300499591292677456563377096100346699421879373024906380724757049700104uwb) + || parity523 (20688958227123188226117538663818621034852702121556301239818743230005799574164516085541310491875153692467123662601853835357822935286851364843928714141587045255uwb) != __builtin_parityg (20688958227123188226117538663818621034852702121556301239818743230005799574164516085541310491875153692467123662601853835357822935286851364843928714141587045255uwb) + || parity523 (8927708174664018648856542263215989788443763271738485875573765922613438023117960552135374015673598803453205044464280019640319125968982118836809392169156450404uwb) != __builtin_parityg (8927708174664018648856542263215989788443763271738485875573765922613438023117960552135374015673598803453205044464280019640319125968982118836809392169156450404uwb) + || popcount523 (27178327344587654457581274852432957423537947348354896748701960885269035920194935311522194372418922852798513401240689173265979378157685169921449935364246334672uwb) != __builtin_popcountg (27178327344587654457581274852432957423537947348354896748701960885269035920194935311522194372418922852798513401240689173265979378157685169921449935364246334672uwb) + || popcount523 (5307736750284212829931201546806718535860789684371772688568780952567669490917265125893664418036905110148872995350655890585853451175740907670080602411287166989uwb) != __builtin_popcountg (5307736750284212829931201546806718535860789684371772688568780952567669490917265125893664418036905110148872995350655890585853451175740907670080602411287166989uwb) + || popcount523 (21261096432069432668470452941790780841888331284195411465624030283325239673941548816191698556934198698768393659379577567450765073013688585051560340496749593370uwb) != __builtin_popcountg (21261096432069432668470452941790780841888331284195411465624030283325239673941548816191698556934198698768393659379577567450765073013688585051560340496749593370uwb)) + __builtin_abort (); +#endif +} diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc index d4e9202a2d46..d39dfc1065f2 100644 --- a/gcc/tree-ssa-forwprop.cc +++ b/gcc/tree-ssa-forwprop.cc @@ -2381,6 +2381,7 @@ simplify_count_trailing_zeroes (gimple_stmt_iterator *gsi) HOST_WIDE_INT type_size = tree_to_shwi (TYPE_SIZE (type)); bool zero_ok = CTZ_DEFINED_VALUE_AT_ZERO (SCALAR_INT_TYPE_MODE (type), ctz_val) == 2; + int nargs = 2; /* If the input value can't be zero, don't special case ctz (0). */ if (tree_expr_nonzero_p (res_ops[0])) @@ -2388,6 +2389,7 @@ simplify_count_trailing_zeroes (gimple_stmt_iterator *gsi) zero_ok = true; zero_val = 0; ctz_val = 0; + nargs = 1; } /* Skip if there is no value defined at zero, or if we can't easily @@ -2399,7 +2401,11 @@ simplify_count_trailing_zeroes (gimple_stmt_iterator *gsi) gimple_seq seq = NULL; gimple *g; - gcall *call = gimple_build_call_internal (IFN_CTZ, 1, res_ops[0]); + gcall *call + = gimple_build_call_internal (IFN_CTZ, nargs, res_ops[0], + nargs == 1 ? NULL_TREE + : build_int_cst (integer_type_node, + ctz_val)); gimple_set_location (call, gimple_location (stmt)); gimple_set_lhs (call, make_ssa_name (integer_type_node)); gimple_seq_add_stmt (&seq, call); diff --git a/gcc/tree-ssa-loop-niter.cc b/gcc/tree-ssa-loop-niter.cc index 718582a7790d..2098bef9a970 100644 --- a/gcc/tree-ssa-loop-niter.cc +++ b/gcc/tree-ssa-loop-niter.cc @@ -2235,14 +2235,18 @@ build_cltz_expr (tree src, bool leading, bool define_at_zero) tree call; if (use_ifn) { - call = build_call_expr_internal_loc (UNKNOWN_LOCATION, ifn, - integer_type_node, 1, src); int val; int optab_defined_at_zero = (leading ? CLZ_DEFINED_VALUE_AT_ZERO (SCALAR_INT_TYPE_MODE (utype), val) : CTZ_DEFINED_VALUE_AT_ZERO (SCALAR_INT_TYPE_MODE (utype), val)); - if (define_at_zero && !(optab_defined_at_zero == 2 && val == prec)) + tree arg2 = NULL_TREE; + if (define_at_zero && optab_defined_at_zero == 2 && val == prec) + arg2 = build_int_cst (integer_type_node, val); + call = build_call_expr_internal_loc (UNKNOWN_LOCATION, ifn, + integer_type_node, arg2 ? 2 : 1, + src, arg2); + if (define_at_zero && arg2 == NULL_TREE) { tree is_zero = fold_build2 (NE_EXPR, boolean_type_node, src, build_zero_cst (TREE_TYPE (src))); diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc index bb55a4fba339..ac805173453d 100644 --- a/gcc/tree-ssa-phiopt.cc +++ b/gcc/tree-ssa-phiopt.cc @@ -2863,18 +2863,26 @@ cond_removal_in_builtin_zero_pattern (basic_block cond_bb, } /* Check that we have a popcount/clz/ctz builtin. */ - if (!is_gimple_call (call) || gimple_call_num_args (call) != 1) + if (!is_gimple_call (call)) return false; - arg = gimple_call_arg (call, 0); lhs = gimple_get_lhs (call); if (lhs == NULL_TREE) return false; combined_fn cfn = gimple_call_combined_fn (call); + if (gimple_call_num_args (call) != 1 + && (gimple_call_num_args (call) != 2 + || cfn == CFN_CLZ + || cfn == CFN_CTZ)) + return false; + + arg = gimple_call_arg (call, 0); + internal_fn ifn = IFN_LAST; int val = 0; + bool any_val = false; switch (cfn) { case CFN_BUILT_IN_BSWAP16: @@ -2889,6 +2897,23 @@ cond_removal_in_builtin_zero_pattern (basic_block cond_bb, if (INTEGRAL_TYPE_P (TREE_TYPE (arg))) { tree type = TREE_TYPE (arg); + if (TREE_CODE (type) == BITINT_TYPE) + { + if (gimple_call_num_args (call) == 1) + { + any_val = true; + ifn = IFN_CLZ; + break; + } + if (!tree_fits_shwi_p (gimple_call_arg (call, 1))) + return false; + HOST_WIDE_INT at_zero = tree_to_shwi (gimple_call_arg (call, 1)); + if ((int) at_zero != at_zero) + return false; + ifn = IFN_CLZ; + val = at_zero; + break; + } if (direct_internal_fn_supported_p (IFN_CLZ, type, OPTIMIZE_FOR_BOTH) && CLZ_DEFINED_VALUE_AT_ZERO (SCALAR_INT_TYPE_MODE (type), val) == 2) @@ -2902,6 +2927,23 @@ cond_removal_in_builtin_zero_pattern (basic_block cond_bb, if (INTEGRAL_TYPE_P (TREE_TYPE (arg))) { tree type = TREE_TYPE (arg); + if (TREE_CODE (type) == BITINT_TYPE) + { + if (gimple_call_num_args (call) == 1) + { + any_val = true; + ifn = IFN_CTZ; + break; + } + if (!tree_fits_shwi_p (gimple_call_arg (call, 1))) + return false; + HOST_WIDE_INT at_zero = tree_to_shwi (gimple_call_arg (call, 1)); + if ((int) at_zero != at_zero) + return false; + ifn = IFN_CTZ; + val = at_zero; + break; + } if (direct_internal_fn_supported_p (IFN_CTZ, type, OPTIMIZE_FOR_BOTH) && CTZ_DEFINED_VALUE_AT_ZERO (SCALAR_INT_TYPE_MODE (type), val) == 2) @@ -2960,8 +3002,18 @@ cond_removal_in_builtin_zero_pattern (basic_block cond_bb, /* Check PHI arguments. */ if (lhs != arg0 - || TREE_CODE (arg1) != INTEGER_CST - || wi::to_wide (arg1) != val) + || TREE_CODE (arg1) != INTEGER_CST) + return false; + if (any_val) + { + if (!tree_fits_shwi_p (arg1)) + return false; + HOST_WIDE_INT at_zero = tree_to_shwi (arg1); + if ((int) at_zero != at_zero) + return false; + val = at_zero; + } + else if (wi::to_wide (arg1) != val) return false; /* And insert the popcount/clz/ctz builtin and cast stmt before the @@ -2974,13 +3026,15 @@ cond_removal_in_builtin_zero_pattern (basic_block cond_bb, reset_flow_sensitive_info (gimple_get_lhs (cast)); } gsi_from = gsi_for_stmt (call); - if (ifn == IFN_LAST || gimple_call_internal_p (call)) + if (ifn == IFN_LAST + || (gimple_call_internal_p (call) && gimple_call_num_args (call) == 2)) gsi_move_before (&gsi_from, &gsi); else { /* For __builtin_c[lt]z* force .C[LT]Z ifn, because only the latter is well defined at zero. */ - call = gimple_build_call_internal (ifn, 1, gimple_call_arg (call, 0)); + call = gimple_build_call_internal (ifn, 2, gimple_call_arg (call, 0), + build_int_cst (integer_type_node, val)); gimple_call_set_lhs (call, lhs); gsi_insert_before (&gsi, call, GSI_SAME_STMT); gsi_remove (&gsi_from, true); diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc index 6b6b41252bbe..7debe7f07316 100644 --- a/gcc/tree-vect-patterns.cc +++ b/gcc/tree-vect-patterns.cc @@ -1818,7 +1818,7 @@ vect_recog_ctz_ffs_pattern (vec_info *vinfo, stmt_vec_info stmt_vinfo, tree new_var; internal_fn ifn = IFN_LAST, ifnnew = IFN_LAST; bool defined_at_zero = true, defined_at_zero_new = false; - int val = 0, val_new = 0; + int val = 0, val_new = 0, val_cmp = 0; int prec; int sub = 0, add = 0; location_t loc; @@ -1826,7 +1826,8 @@ vect_recog_ctz_ffs_pattern (vec_info *vinfo, stmt_vec_info stmt_vinfo, if (!is_gimple_call (call_stmt)) return NULL; - if (gimple_call_num_args (call_stmt) != 1) + if (gimple_call_num_args (call_stmt) != 1 + && gimple_call_num_args (call_stmt) != 2) return NULL; rhs_oprnd = gimple_call_arg (call_stmt, 0); @@ -1846,9 +1847,10 @@ vect_recog_ctz_ffs_pattern (vec_info *vinfo, stmt_vec_info stmt_vinfo, CASE_CFN_CTZ: ifn = IFN_CTZ; if (!gimple_call_internal_p (call_stmt) - || CTZ_DEFINED_VALUE_AT_ZERO (SCALAR_INT_TYPE_MODE (rhs_type), - val) != 2) + || gimple_call_num_args (call_stmt) != 2) defined_at_zero = false; + else + val = tree_to_shwi (gimple_call_arg (call_stmt, 1)); break; CASE_CFN_FFS: ifn = IFN_FFS; @@ -1907,6 +1909,7 @@ vect_recog_ctz_ffs_pattern (vec_info *vinfo, stmt_vec_info stmt_vinfo, vect_pattern_detected ("vec_recog_ctz_ffs_pattern", call_stmt); + val_cmp = val_new; if ((ifnnew == IFN_CLZ && defined_at_zero && defined_at_zero_new @@ -1918,7 +1921,7 @@ vect_recog_ctz_ffs_pattern (vec_info *vinfo, stmt_vec_info stmt_vinfo, .CTZ (X) = .POPCOUNT ((X - 1) & ~X). */ if (ifnnew == IFN_CLZ) sub = prec; - val_new = prec; + val_cmp = prec; if (!TYPE_UNSIGNED (rhs_type)) { @@ -1955,7 +1958,7 @@ vect_recog_ctz_ffs_pattern (vec_info *vinfo, stmt_vec_info stmt_vinfo, /* .CTZ (X) = (PREC - 1) - .CLZ (X & -X) .FFS (X) = PREC - .CLZ (X & -X). */ sub = prec - (ifn == IFN_CTZ); - val_new = sub - val_new; + val_cmp = sub - val_new; tree neg = vect_recog_temp_ssa_var (rhs_type, NULL); pattern_stmt = gimple_build_assign (neg, NEGATE_EXPR, rhs_oprnd); @@ -1974,7 +1977,7 @@ vect_recog_ctz_ffs_pattern (vec_info *vinfo, stmt_vec_info stmt_vinfo, /* .CTZ (X) = PREC - .POPCOUNT (X | -X) .FFS (X) = (PREC + 1) - .POPCOUNT (X | -X). */ sub = prec + (ifn == IFN_FFS); - val_new = sub; + val_cmp = sub; tree neg = vect_recog_temp_ssa_var (rhs_type, NULL); pattern_stmt = gimple_build_assign (neg, NEGATE_EXPR, rhs_oprnd); @@ -1992,12 +1995,18 @@ vect_recog_ctz_ffs_pattern (vec_info *vinfo, stmt_vec_info stmt_vinfo, { /* .FFS (X) = .CTZ (X) + 1. */ add = 1; - val_new++; + val_cmp++; } /* Create B = .IFNNEW (A). */ new_var = vect_recog_temp_ssa_var (lhs_type, NULL); - pattern_stmt = gimple_build_call_internal (ifnnew, 1, rhs_oprnd); + if ((ifnnew == IFN_CLZ || ifnnew == IFN_CTZ) && defined_at_zero_new) + pattern_stmt + = gimple_build_call_internal (ifnnew, 2, rhs_oprnd, + build_int_cst (integer_type_node, + val_new)); + else + pattern_stmt = gimple_build_call_internal (ifnnew, 1, rhs_oprnd); gimple_call_set_lhs (pattern_stmt, new_var); gimple_set_location (pattern_stmt, loc); *type_out = vec_type; @@ -2023,7 +2032,7 @@ vect_recog_ctz_ffs_pattern (vec_info *vinfo, stmt_vec_info stmt_vinfo, } if (defined_at_zero - && (!defined_at_zero_new || val != val_new)) + && (!defined_at_zero_new || val != val_cmp)) { append_pattern_def_seq (vinfo, stmt_vinfo, pattern_stmt, vec_type); tree ret_var = vect_recog_temp_ssa_var (lhs_type, NULL); @@ -2143,7 +2152,8 @@ vect_recog_popcount_clz_ctz_ffs_pattern (vec_info *vinfo, return NULL; } - if (gimple_call_num_args (call_stmt) != 1) + if (gimple_call_num_args (call_stmt) != 1 + && gimple_call_num_args (call_stmt) != 2) return NULL; rhs_oprnd = gimple_call_arg (call_stmt, 0); @@ -2181,17 +2191,14 @@ vect_recog_popcount_clz_ctz_ffs_pattern (vec_info *vinfo, return NULL; addend = (TYPE_PRECISION (TREE_TYPE (rhs_oprnd)) - TYPE_PRECISION (lhs_type)); - if (gimple_call_internal_p (call_stmt)) + if (gimple_call_internal_p (call_stmt) + && gimple_call_num_args (call_stmt) == 2) { int val1, val2; - int d1 - = CLZ_DEFINED_VALUE_AT_ZERO - (SCALAR_INT_TYPE_MODE (TREE_TYPE (rhs_oprnd)), val1); + val1 = tree_to_shwi (gimple_call_arg (call_stmt, 1)); int d2 = CLZ_DEFINED_VALUE_AT_ZERO (SCALAR_INT_TYPE_MODE (lhs_type), val2); - if (d1 != 2) - break; if (d2 != 2 || val1 != val2 + addend) return NULL; } @@ -2200,17 +2207,14 @@ vect_recog_popcount_clz_ctz_ffs_pattern (vec_info *vinfo, /* ctzll (x) == ctz (x) for unsigned or signed x != 0, so ok if it is undefined at zero or if it matches also for the defined value there. */ - if (gimple_call_internal_p (call_stmt)) + if (gimple_call_internal_p (call_stmt) + && gimple_call_num_args (call_stmt) == 2) { int val1, val2; - int d1 - = CTZ_DEFINED_VALUE_AT_ZERO - (SCALAR_INT_TYPE_MODE (TREE_TYPE (rhs_oprnd)), val1); + val1 = tree_to_shwi (gimple_call_arg (call_stmt, 1)); int d2 = CTZ_DEFINED_VALUE_AT_ZERO (SCALAR_INT_TYPE_MODE (lhs_type), val2); - if (d1 != 2) - break; if (d2 != 2 || val1 != val2) return NULL; } @@ -2260,7 +2264,20 @@ vect_recog_popcount_clz_ctz_ffs_pattern (vec_info *vinfo, /* Create B = .POPCOUNT (A). */ new_var = vect_recog_temp_ssa_var (lhs_type, NULL); - pattern_stmt = gimple_build_call_internal (ifn, 1, unprom_diff.op); + tree arg2 = NULL_TREE; + int val; + if (ifn == IFN_CLZ + && CLZ_DEFINED_VALUE_AT_ZERO (SCALAR_INT_TYPE_MODE (lhs_type), + val) == 2) + arg2 = build_int_cst (integer_type_node, val); + else if (ifn == IFN_CTZ + && CTZ_DEFINED_VALUE_AT_ZERO (SCALAR_INT_TYPE_MODE (lhs_type), + val) == 2) + arg2 = build_int_cst (integer_type_node, val); + if (arg2) + pattern_stmt = gimple_build_call_internal (ifn, 2, unprom_diff.op, arg2); + else + pattern_stmt = gimple_build_call_internal (ifn, 1, unprom_diff.op); gimple_call_set_lhs (pattern_stmt, new_var); gimple_set_location (pattern_stmt, gimple_location (last_stmt)); *type_out = vec_type; diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index ee89f47c468b..96e4a6cffade 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -3115,6 +3115,7 @@ vectorizable_call (vec_info *vinfo, enum { NARROW, NONE, WIDEN } modifier; size_t i, nargs; tree lhs; + tree clz_ctz_arg1 = NULL_TREE; if (!STMT_VINFO_RELEVANT_P (stmt_info) && !bb_vinfo) return false; @@ -3160,6 +3161,14 @@ vectorizable_call (vec_info *vinfo, nargs = 0; rhs_type = unsigned_type_node; } + /* Similarly pretend IFN_CLZ and IFN_CTZ only has one argument, the second + argument just says whether it is well-defined at zero or not and what + value should be returned for it. */ + if ((cfn == CFN_CLZ || cfn == CFN_CTZ) && nargs == 2) + { + nargs = 1; + clz_ctz_arg1 = gimple_call_arg (stmt, 1); + } int mask_opno = -1; if (internal_fn_p (cfn)) @@ -3425,6 +3434,8 @@ vectorizable_call (vec_info *vinfo, ifn = cond_fn; vect_nargs += 2; } + if (clz_ctz_arg1) + ++vect_nargs; if (modifier == NONE || ifn != IFN_LAST) { @@ -3462,6 +3473,9 @@ vectorizable_call (vec_info *vinfo, } if (masked_loop_p && reduc_idx >= 0) vargs[varg++] = vargs[reduc_idx + 1]; + if (clz_ctz_arg1) + vargs[varg++] = clz_ctz_arg1; + gimple *new_stmt; if (modifier == NARROW) { @@ -3548,6 +3562,8 @@ vectorizable_call (vec_info *vinfo, } if (masked_loop_p && reduc_idx >= 0) vargs[varg++] = vargs[reduc_idx + 1]; + if (clz_ctz_arg1) + vargs[varg++] = clz_ctz_arg1; if (len_opno >= 0 && len_loop_p) { From 69d69865a792a93cce2905617c53913769d0f260 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Mon, 13 Nov 2023 12:03:31 +0000 Subject: [PATCH 012/169] c++: Link extended FP conversion pedwarns to -Wnarrowing [PR111842] Several users have been confused by the status of these warnings, which can be misunderstood as "this might not be what you want", rather than diagnostics required by the C++ standard. Add the text "ISO C++ does not allow" to make this clear. Also link them to -Wnarrowing so that they can be disabled or promoted to errors independently of other pedwarns. PR c++/111842 PR c++/112498 gcc/cp/ChangeLog: * call.cc (convert_like_internal): Use OPT_Wnarrowing for pedwarns about illformed conversions involving extended floating-point types. Clarify that ISO C++ requires these diagnostics. gcc/testsuite/ChangeLog: * g++.dg/cpp23/ext-floating16.C: New test. * g++.dg/cpp23/ext-floating17.C: New test. --- gcc/cp/call.cc | 10 +++-- gcc/testsuite/g++.dg/cpp23/ext-floating16.C | 40 ++++++++++++++++++++ gcc/testsuite/g++.dg/cpp23/ext-floating17.C | 42 +++++++++++++++++++++ 3 files changed, 88 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp23/ext-floating16.C create mode 100644 gcc/testsuite/g++.dg/cpp23/ext-floating17.C diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc index 709fd74f55e3..86feff55dd1e 100644 --- a/gcc/cp/call.cc +++ b/gcc/cp/call.cc @@ -8303,15 +8303,17 @@ convert_like_internal (conversion *convs, tree expr, tree fn, int argnum, totype)) { case 2: - if (pedwarn (loc, 0, "converting to %qH from %qI with greater " - "conversion rank", totype, TREE_TYPE (expr))) + if (pedwarn (loc, OPT_Wnarrowing, "ISO C++ does not allow " + "converting to %qH from %qI with greater " + "conversion rank", totype, TREE_TYPE (expr))) complained = 1; else if (!complained) complained = -1; break; case 3: - if (pedwarn (loc, 0, "converting to %qH from %qI with unordered " - "conversion ranks", totype, TREE_TYPE (expr))) + if (pedwarn (loc, OPT_Wnarrowing, "ISO C++ does not allow " + "converting to %qH from %qI with unordered " + "conversion rank", totype, TREE_TYPE (expr))) complained = 1; else if (!complained) complained = -1; diff --git a/gcc/testsuite/g++.dg/cpp23/ext-floating16.C b/gcc/testsuite/g++.dg/cpp23/ext-floating16.C new file mode 100644 index 000000000000..d6a562d5cb06 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp23/ext-floating16.C @@ -0,0 +1,40 @@ +// P1467R9 - Extended floating-point types and standard names. +// { dg-do compile { target c++23 } } +// { dg-options "-pedantic-errors -Wno-narrowing" } +// { dg-add-options float16 } +// { dg-add-options float32 } +// { dg-add-options float64 } +// { dg-add-options float128 } + +#include "ext-floating.h" + +#ifdef __STRICT_ANSI__ +#undef __SIZEOF_FLOAT128__ +#endif + +using namespace std; + +#ifdef __STDCPP_FLOAT16_T__ +#ifdef __STDCPP_FLOAT32_T__ +float16_t f16c = 1.0F32; // { dg-bogus "converting to 'std::float16_t' \\\{aka '_Float16'\\\} from '_Float32' with greater conversion rank" "" { target { float16 && float32 } } } +#endif +#ifdef __STDCPP_FLOAT64_T__ +float16_t f16e = 1.0F64; // { dg-bogus "converting to 'std::float16_t' \\\{aka '_Float16'\\\} from '_Float64' with greater conversion rank" "" { target { float16 && float64 } } } +#endif +#ifdef __STDCPP_FLOAT128_T__ +float16_t f16g = 1.0F128; // { dg-bogus "converting to 'std::float16_t' \\\{aka '_Float16'\\\} from '_Float128' with greater conversion rank" "" { target { float16 && float128 } } } +#endif +#endif +#ifdef __STDCPP_FLOAT32_T__ +#ifdef __STDCPP_FLOAT64_T__ +float32_t f32e = 1.0F64; // { dg-bogus "converting to 'std::float32_t' \\\{aka '_Float32'\\\} from '_Float64' with greater conversion rank" "" { target { float32 && float64 } } } +#endif +#ifdef __STDCPP_FLOAT128_T__ +float32_t f32g = 1.0F128; // { dg-bogus "converting to 'std::float32_t' \\\{aka '_Float32'\\\} from '_Float128' with greater conversion rank" "" { target { float32 && float128 } } } +#endif +#endif +#ifdef __STDCPP_FLOAT64_T__ +#ifdef __STDCPP_FLOAT128_T__ +float64_t f64g = 1.0F128; // { dg-bogus "converting to 'std::float64_t' \\\{aka '_Float64'\\\} from '_Float128' with greater conversion rank" "" { target { float64 && float128 } } } +#endif +#endif diff --git a/gcc/testsuite/g++.dg/cpp23/ext-floating17.C b/gcc/testsuite/g++.dg/cpp23/ext-floating17.C new file mode 100644 index 000000000000..796e045537a6 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp23/ext-floating17.C @@ -0,0 +1,42 @@ +// P1467R9 - Extended floating-point types and standard names. +// { dg-do compile { target c++23 } } +// { dg-options "-Werror=narrowing" } +// { dg-add-options float16 } +// { dg-add-options float32 } +// { dg-add-options float64 } +// { dg-add-options float128 } +// { dg-prune-output "some warnings being treated as errors" } + +#include "ext-floating.h" + +#ifdef __STRICT_ANSI__ +#undef __SIZEOF_FLOAT128__ +#endif + +using namespace std; + +#ifdef __STDCPP_FLOAT16_T__ +#ifdef __STDCPP_FLOAT32_T__ +float16_t f16c = 1.0F32; // { dg-error "converting to 'std::float16_t' \\\{aka '_Float16'\\\} from '_Float32' with greater conversion rank" "" { target { float16 && float32 } } } +#endif +#ifdef __STDCPP_FLOAT64_T__ +float16_t f16e = 1.0F64; // { dg-error "converting to 'std::float16_t' \\\{aka '_Float16'\\\} from '_Float64' with greater conversion rank" "" { target { float16 && float64 } } } +#endif +#ifdef __STDCPP_FLOAT128_T__ +float16_t f16g = 1.0F128; // { dg-error "converting to 'std::float16_t' \\\{aka '_Float16'\\\} from '_Float128' with greater conversion rank" "" { target { float16 && float128 } } } +#endif +#endif +#ifdef __STDCPP_FLOAT32_T__ +#ifdef __STDCPP_FLOAT64_T__ +float32_t f32e = 1.0F64; // { dg-error "converting to 'std::float32_t' \\\{aka '_Float32'\\\} from '_Float64' with greater conversion rank" "" { target { float32 && float64 } } } +#endif +#ifdef __STDCPP_FLOAT128_T__ +float32_t f32g = 1.0F128; // { dg-error "converting to 'std::float32_t' \\\{aka '_Float32'\\\} from '_Float128' with greater conversion rank" "" { target { float32 && float128 } } } +#endif +#endif +#ifdef __STDCPP_FLOAT64_T__ +#ifdef __STDCPP_FLOAT128_T__ +float64_t f64g = 1.0F128; // { dg-error "converting to 'std::float64_t' \\\{aka '_Float64'\\\} from '_Float128' with greater conversion rank" "" { target { float64 && float128 } } } +#endif +#endif + From a745d2064f3e8a368995c67e80146e563d6a8fec Mon Sep 17 00:00:00 2001 From: Andreas Krebbel Date: Tue, 14 Nov 2023 11:33:44 +0100 Subject: [PATCH 013/169] IBM Z: Fix ICE with overloading and checking enabled s390_resolve_overloaded_builtin, when called on NON_DEPENDENT_EXPR, ICEs when using the type from it which ends up as error_mark_node. This particular instance of the problem does not occur anymore since NON_DEPENDENT_EXPR has been removed. Nevertheless that case needs to be handled here. gcc/ChangeLog: * config/s390/s390-c.cc (s390_fn_types_compatible): Add a check for error_mark_node. gcc/testsuite/ChangeLog: * g++.target/s390/zvec-templ-1.C: New test. --- gcc/config/s390/s390-c.cc | 3 +++ gcc/testsuite/g++.target/s390/zvec-templ-1.C | 24 ++++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 gcc/testsuite/g++.target/s390/zvec-templ-1.C diff --git a/gcc/config/s390/s390-c.cc b/gcc/config/s390/s390-c.cc index 269f4f8e978d..fce569342f30 100644 --- a/gcc/config/s390/s390-c.cc +++ b/gcc/config/s390/s390-c.cc @@ -781,6 +781,9 @@ s390_fn_types_compatible (enum s390_builtin_ov_type_index typeindex, tree in_arg = (*arglist)[i]; tree in_type = TREE_TYPE (in_arg); + if (in_type == error_mark_node) + goto mismatch; + if (VECTOR_TYPE_P (b_arg_type)) { /* Vector types have to match precisely. */ diff --git a/gcc/testsuite/g++.target/s390/zvec-templ-1.C b/gcc/testsuite/g++.target/s390/zvec-templ-1.C new file mode 100644 index 000000000000..07bb65f199b4 --- /dev/null +++ b/gcc/testsuite/g++.target/s390/zvec-templ-1.C @@ -0,0 +1,24 @@ +// { dg-do compile } +// { dg-options "-O0 -mzvector -march=arch14 -mzarch" } +// { dg-bogus "internal compiler error" "ICE" { target s390*-*-* } 23 } +// { dg-excess-errors "" } + +/* This used to ICE with checking enabled because + s390_resolve_overloaded_builtin gets called on NON_DEPENDENT_EXPR + arguments. We then try to determine the type of it, get an error + node and ICEd consequently when using this. + + This particular instance of the problem disappeared when + NON_DEPENDENT_EXPRs got removed with: + + commit dad311874ac3b3cf4eca1c04f67cae80c953f7b8 + Author: Patrick Palka + Date: Fri Oct 20 10:45:00 2023 -0400 + + c++: remove NON_DEPENDENT_EXPR, part 1 + + Nevertheless we should check for error mark nodes in that code. */ + +template void foo() { + __builtin_s390_vec_perm( , , ); +} From 426e92643285a081d2e32221268b2052d740aa35 Mon Sep 17 00:00:00 2001 From: Andreas Krebbel Date: Tue, 14 Nov 2023 11:33:45 +0100 Subject: [PATCH 014/169] IBM Z: Add GTY marker to builtin data structures This adds GTY markers to s390_builtin_types, s390_builtin_fn_types, and s390_builtin_decls. These were missing causing problems in particular when using builtins after including a precompiled header. Unfortunately the declaration of these data structures use enum values from s390-builtins.h. This file however is not included everywhere and is rather large. In order to include it only for the purpose of gtype-desc.cc we place a preprocessed copy of it in the build directory and include only this. This is going to be backported to GCC 12 and 13. gcc/ChangeLog: * config.gcc: Add s390-gen-builtins.h to target_gtfiles. * config/s390/s390-builtins.h (s390_builtin_types) (s390_builtin_fn_types, s390_builtin_decls): Add GTY marker. * config/s390/t-s390 (EXTRA_GTYPE_DEPS): Add s390-gen-builtins.h. Add build rule for s390-gen-builtins.h. --- gcc/config.gcc | 1 + gcc/config/s390/s390-builtins.h | 10 +++++----- gcc/config/s390/t-s390 | 4 ++++ 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index ba6d63e33ac6..c1460ca354e8 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -571,6 +571,7 @@ s390*-*-*) d_target_objs="s390-d.o" extra_options="${extra_options} fused-madd.opt" extra_headers="s390intrin.h htmintrin.h htmxlintrin.h vecintrin.h" + target_gtfiles="./s390-gen-builtins.h" ;; # Note the 'l'; we need to be able to match e.g. "shle" or "shl". sh[123456789lbe]*-*-* | sh-*-*) diff --git a/gcc/config/s390/s390-builtins.h b/gcc/config/s390/s390-builtins.h index 45bba876828b..84676fe5b3f2 100644 --- a/gcc/config/s390/s390-builtins.h +++ b/gcc/config/s390/s390-builtins.h @@ -88,8 +88,8 @@ enum s390_builtin_ov_type_index #define MAX_OV_OPERANDS 6 -extern tree s390_builtin_types[BT_MAX]; -extern tree s390_builtin_fn_types[BT_FN_MAX]; +extern GTY(()) tree s390_builtin_types[BT_MAX]; +extern GTY(()) tree s390_builtin_fn_types[BT_FN_MAX]; /* Builtins. */ @@ -172,6 +172,6 @@ opflags_for_builtin (int fcode) return opflags_builtin[fcode]; } -extern tree s390_builtin_decls[S390_BUILTIN_MAX + - S390_OVERLOADED_BUILTIN_MAX + - S390_OVERLOADED_BUILTIN_VAR_MAX]; +extern GTY(()) tree s390_builtin_decls[S390_BUILTIN_MAX + + S390_OVERLOADED_BUILTIN_MAX + + S390_OVERLOADED_BUILTIN_VAR_MAX]; diff --git a/gcc/config/s390/t-s390 b/gcc/config/s390/t-s390 index 828818bed2d4..4ab9718f6e27 100644 --- a/gcc/config/s390/t-s390 +++ b/gcc/config/s390/t-s390 @@ -19,6 +19,7 @@ TM_H += $(srcdir)/config/s390/s390-builtins.def TM_H += $(srcdir)/config/s390/s390-builtin-types.def PASSES_EXTRA += $(srcdir)/config/s390/s390-passes.def +EXTRA_GTYPE_DEPS += ./s390-gen-builtins.h s390-c.o: $(srcdir)/config/s390/s390-c.cc \ $(srcdir)/config/s390/s390-protos.h $(CONFIG_H) $(SYSTEM_H) coretypes.h \ @@ -30,3 +31,6 @@ s390-c.o: $(srcdir)/config/s390/s390-c.cc \ s390-d.o: $(srcdir)/config/s390/s390-d.cc $(COMPILE) $< $(POSTCOMPILE) + +s390-gen-builtins.h: $(srcdir)/config/s390/s390-builtins.h + $(COMPILER) -E $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< > $@ From e47e836f3138f89350e2fcd42ee1ec6741008bcb Mon Sep 17 00:00:00 2001 From: Lehua Ding Date: Tue, 14 Nov 2023 16:42:19 +0800 Subject: [PATCH 015/169] x86: Make testcase apx-spill_to_egprs-1.c more robust Hi, This little patch adjust the assert in apx-spill_to_egprs-1.c testcase. The -mapxf compilation option allows more registers to be used, which in turn eliminates the need for local variables to be stored in stack memory. Therefore, the assertion is changed to detects no memory loaded through the %rsp register. gcc/testsuite/ChangeLog: * gcc.target/i386/apx-spill_to_egprs-1.c: Make sure that no local variables are stored on the stack. --- .../gcc.target/i386/apx-spill_to_egprs-1.c | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/gcc/testsuite/gcc.target/i386/apx-spill_to_egprs-1.c b/gcc/testsuite/gcc.target/i386/apx-spill_to_egprs-1.c index 290863d63a78..d7952b4c5505 100644 --- a/gcc/testsuite/gcc.target/i386/apx-spill_to_egprs-1.c +++ b/gcc/testsuite/gcc.target/i386/apx-spill_to_egprs-1.c @@ -3,22 +3,9 @@ #include "spill_to_mask-1.c" -/* { dg-final { scan-assembler "movl\[ \t]+\[^\\n\\r\]*, %r16d" } } */ -/* { dg-final { scan-assembler "movl\[ \t]+\[^\\n\\r\]*, %r17d" } } */ -/* { dg-final { scan-assembler "movl\[ \t]+\[^\\n\\r\]*, %r18d" } } */ -/* { dg-final { scan-assembler "movq\[ \t]+\[^\\n\\r\]*, %r19" } } */ -/* { dg-final { scan-assembler "movl\[ \t]+\[^\\n\\r\]*, %r20d" } } */ -/* { dg-final { scan-assembler "movl\[ \t]+\[^\\n\\r\]*, %r21d" } } */ -/* { dg-final { scan-assembler "movl\[ \t]+\[^\\n\\r\]*, %r22d" } } */ -/* { dg-final { scan-assembler "movl\[ \t]+\[^\\n\\r\]*, %r23d" } } */ -/* { dg-final { scan-assembler "movl\[ \t]+\[^\\n\\r\]*, %r24d" } } */ -/* { dg-final { scan-assembler "addl\[ \t]+\[^\\n\\r\]*, %r25d" } } */ -/* { dg-final { scan-assembler "movl\[ \t]+\[^\\n\\r\]*, %r26d" } } */ -/* { dg-final { scan-assembler "movl\[ \t]+\[^\\n\\r\]*, %r27d" } } */ -/* { dg-final { scan-assembler "movbel\[ \t]+\[^\\n\\r\]*, %r28d" } } */ -/* { dg-final { scan-assembler "movbel\[ \t]+\[^\\n\\r\]*, %r29d" } } */ -/* { dg-final { scan-assembler "movbel\[ \t]+\[^\\n\\r\]*, %r30d" } } */ -/* { dg-final { scan-assembler "movbel\[ \t]+\[^\\n\\r\]*, %r31d" } } */ +/* Make sure that no local variables are stored on the stack. */ +/* { dg-final { scan-assembler-not "\\(%rsp\\)" } } */ + /* { dg-final { scan-assembler-not "knot" } } */ /* { dg-final { scan-assembler-not "kxor" } } */ /* { dg-final { scan-assembler-not "kor" } } */ From 3232e73c446a3a70fd2fcce4eabc0564b08312a7 Mon Sep 17 00:00:00 2001 From: Georg-Johann Lay Date: Tue, 14 Nov 2023 12:05:19 +0100 Subject: [PATCH 016/169] LibF7: sinh: Fix loss of precision due to cancellation for small values. libgcc/config/avr/libf7/ * libf7-const.def [F7MOD_sinh_]: Add MiniMax polynomial. * libf7.c (f7_sinh): Use it instead of (exp(x) - exp(-x)) / 2 when |x| < 0.5 to avoid loss of precision due to cancellation. --- libgcc/config/avr/libf7/libf7-const.def | 10 ++++++++++ libgcc/config/avr/libf7/libf7.c | 17 +++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/libgcc/config/avr/libf7/libf7-const.def b/libgcc/config/avr/libf7/libf7-const.def index 0e4c4d8701eb..f772adb1262b 100644 --- a/libgcc/config/avr/libf7/libf7-const.def +++ b/libgcc/config/avr/libf7/libf7-const.def @@ -194,5 +194,15 @@ F7_CONST_DEF (X, 1, 0xc7,0xb5,0x6a,0xf8,0x0e,0x32,0x07, -37) F7_CONST_DEF (pi_low,0, 0xd3,0x13,0x19,0x8a,0x2e,0x03,0x70, 1 - F7_MANT_BITS-2) #endif +#elif defined (F7MOD_sinh_) +// MiniMax for sinh(q)/q, q = sqrt(x) for q in [0, 0.2505]. Quality pQ10 > 70. +// 0.99999999999999998094379 + 0.16666666666667217765428 x + 0.0083333333330755574996361 x^2 + 1.9841270281701916844502e-4 x^3 + 2.7556979384534689658282e-6 x^4 + 2.5172859336028750964929e-8 x^5 +F7_CONST_DEF (X, 0, 0xff,0xff,0xff,0xff,0xff,0xff,0xff, -1) +F7_CONST_DEF (X, 0, 0xaa,0xaa,0xaa,0xaa,0xaa,0xb0,0xdf, -3) +F7_CONST_DEF (X, 0, 0x88,0x88,0x88,0x88,0x76,0x64,0xdb, -7) +F7_CONST_DEF (X, 0, 0xd0,0x0d,0x01,0x1d,0x88,0x4c,0xed, -13) +F7_CONST_DEF (X, 0, 0xb8,0xee,0x87,0xb4,0x30,0xf0,0xa1, -19) +F7_CONST_DEF (X, 0, 0xd8,0x3b,0xb3,0xfd,0x9e,0x6c,0xcf, -26) + #endif #endif /* ! IN_LIBF7_H && ! F7MOD_const_ */ diff --git a/libgcc/config/avr/libf7/libf7.c b/libgcc/config/avr/libf7/libf7.c index da2a4b61b746..bf1cd140bd4a 100644 --- a/libgcc/config/avr/libf7/libf7.c +++ b/libgcc/config/avr/libf7/libf7.c @@ -2022,9 +2022,26 @@ void f7_sinhcosh (f7_t *cc, const f7_t *aa, bool do_sinh) #ifdef F7MOD_sinh_ + +#define ARRAY_NAME coeff_sinh +#include "libf7-array.def" +#undef ARRAY_NAME + F7_WEAK void f7_sinh (f7_t *cc, const f7_t *aa) { + if (aa->expo <= -2) + { + // For small values, exp(A) - exp(-A) suffers from cancellation, hence + // use a MiniMax polynomial for |A| < 0.5. + f7_t xx7, *xx = &xx7; + f7_t hh7, *hh = &hh7; + f7_square (xx, aa); + f7_horner (hh, xx, n_coeff_sinh, coeff_sinh, NULL); + f7_mul (cc, aa, hh); + return; + } + f7_sinhcosh (cc, aa, true); } #endif // F7MOD_sinh_ From 0a1dd8b551e5b34b16394ff92e83c66275a85b9a Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 14 Nov 2023 13:09:43 +0100 Subject: [PATCH 017/169] contrib: Ignore the r14-5312-g040e5b0edbca861196d9e2ea2af5e805769c8d5d bogus commit The r14-5312-g040e5b0edbca861196d9e2ea2af5e805769c8d5d commit log contains a line from git revert with correct hash, but unfortunately hand ammended with explanation, so it got through the pre-commit hook but failed during update_version_git generation. Please don't do this. 2023-11-14 Jakub Jelinek contrib/ChangeLog: * gcc-changelog/git_update_version.py: Add 040e5b0edbca861196d9e2ea2af5e805769c8d5d to ignored commits. --- contrib/gcc-changelog/git_update_version.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib/gcc-changelog/git_update_version.py b/contrib/gcc-changelog/git_update_version.py index 3c438bba8920..84767b07f0d1 100755 --- a/contrib/gcc-changelog/git_update_version.py +++ b/contrib/gcc-changelog/git_update_version.py @@ -37,7 +37,8 @@ IGNORED_COMMITS = ( '3ab5c8cd03d92bf4ec41e351820349d92fbc40c4', '86d8e0c0652ef5236a460b75c25e4f7093cc0651', 'e4cba49413ca429dc82f6aa2e88129ecb3fdd943', - '1957bedf29a1b2cc231972aba680fe80199d5498') + '1957bedf29a1b2cc231972aba680fe80199d5498', + '040e5b0edbca861196d9e2ea2af5e805769c8d5d') FORMAT = '%(asctime)s:%(levelname)s:%(name)s:%(message)s' logging.basicConfig(level=logging.INFO, format=FORMAT, From aad65285a1c681feb9fc5b041c86d841b24c3d2a Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 14 Nov 2023 13:19:48 +0100 Subject: [PATCH 018/169] i386: Fix up 3_doubleword_lowpart [PR112523] On Sun, Nov 12, 2023 at 09:03:42PM -0000, Roger Sayle wrote: > This patch improves register pressure during reload, inspired by PR 97756. > Normally, a double-word right-shift by a constant produces a double-word > result, the highpart of which is dead when followed by a truncation. > The dead code calculating the high part gets cleaned up post-reload, so > the issue isn't normally visible, except for the increased register > pressure during reload, sometimes leading to odd register assignments. > Providing a post-reload splitter, which clobbers a single wordmode > result register instead of a doubleword result register, helps (a bit). Unfortunately this broke bootstrap on i686-linux, broke all ACATS tests on x86_64-linux as well as miscompiled e.g. __floattisf in libgcc there as well. The bug is that shrd{l,q} instruction expects the low part of the input to be the same register as the output, rather than the high part as the patch implemented. split_double_mode (mode, &operands[1], 1, &operands[1], &operands[3]); sets operands[1] to the lo_half and operands[3] to the hi_half, so if operands[0] is not the same register as operands[1] (rather than [3]) after RA, we should during splitting move operands[1] into operands[0]. Your testcase: > #define MASK60 ((1ul << 60) - 1) > unsigned long foo (__uint128_t n) > { > unsigned long a = n & MASK60; > unsigned long b = (n >> 60); > b = b & MASK60; > unsigned long c = (n >> 120); > return a+b+c; > } still has the same number of instructions. Bootstrapped/regtested on x86_64-linux (where it e.g. turns === acats Summary === -# of unexpected failures 2328 +# of expected passes 2328 +# of unexpected failures 0 and fixes gcc.dg/torture/fp-int-convert-*timode.c FAILs as well) and i686-linux (where it previously didn't bootstrap, but compared to Friday evening's bootstrap the testresults are ok). 2023-11-14 Jakub Jelinek PR target/112523 PR ada/112514 * config/i386/i386.md (3_doubleword_lowpart): Move operands[1] aka low part of input rather than operands[3] aka high part of input to output if not the same register. --- gcc/config/i386/i386.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 29289f48e9c0..84cc50c7bb21 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -14825,8 +14825,8 @@ { split_double_mode (mode, &operands[1], 1, &operands[1], &operands[3]); operands[4] = GEN_INT (( * BITS_PER_UNIT) - INTVAL (operands[2])); - if (!rtx_equal_p (operands[0], operands[3])) - emit_move_insn (operands[0], operands[3]); + if (!rtx_equal_p (operands[0], operands[1])) + emit_move_insn (operands[0], operands[1]); }) (define_insn "x86_64_shrd" From b9fd8399ec027ce42fd35a070ce38de8d69521b2 Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Tue, 14 Nov 2023 12:23:39 +0000 Subject: [PATCH 019/169] Daily bump. --- ChangeLog | 29 + config/ChangeLog | 8 + contrib/ChangeLog | 11 + gcc/ChangeLog | 903 +++++++++++ gcc/DATESTAMP | 2 +- gcc/ada/ChangeLog | 15 + gcc/c-family/ChangeLog | 21 + gcc/c/ChangeLog | 18 + gcc/cp/ChangeLog | 34 + gcc/jit/ChangeLog | 4 + gcc/testsuite/ChangeLog | 2502 +++++++++++++++++++++++++++++ libatomic/ChangeLog | 5 + libcpp/ChangeLog | 26 + libgcc/ChangeLog | 30 + libgcc/config/avr/libf7/ChangeLog | 12 + libgm2/ChangeLog | 16 + libgomp/ChangeLog | 5 + libiberty/ChangeLog | 8 + libstdc++-v3/ChangeLog | 184 +++ maintainer-scripts/ChangeLog | 8 + 20 files changed, 3840 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 56cf1ff10d55..3fd01d64af62 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,32 @@ +2023-11-13 Arsen Arsenović + + PR bootstrap/12596 + * .gitignore: Add '/gettext*'. + * configure.ac (host_libs): Replace intl with gettext. + (hbaseargs, bbaseargs, baseargs): Split baseargs into + {h,b}baseargs. + (skip_barg): New flag. Skips appending current flag to + bbaseargs. + : Exempt --with-libintl-{type,prefix} from + target and build machine argument passing. + * configure: Regenerate. + * Makefile.def (host_modules): Replace intl module with gettext + module. + (configure-ld): Depend on configure-gettext. + * Makefile.in: Regenerate. + +2023-11-13 Arsen Arsenović + + * intl/*: Remove. + +2023-11-09 Jivan Hakobyan + + * MAINTAINERS: Add myself. + +2023-11-09 YunQiang Su + + * MAINTAINERS: Update my email address. + 2023-11-06 Carl Love * MAINTAINERS: Update my email address. diff --git a/config/ChangeLog b/config/ChangeLog index 1c5e8b66a252..0c19f5d89368 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,11 @@ +2023-11-13 Arsen Arsenović + + * intlmacosx.m4: Import from gettext-0.22 (serial 8). + * gettext.m4: Sync with gettext-0.22 (serial 77). + * gettext-sister.m4 (ZW_GNU_GETTEXT_SISTER_DIR): Load gettext's + uninstalled-config.sh, or call AM_GNU_GETTEXT if missing. + * iconv.m4: Sync with gettext-0.22 (serial 26). + 2023-09-15 Yang Yujie * mt-loongarch-mlib: New file. Pass -fmultiflags when building diff --git a/contrib/ChangeLog b/contrib/ChangeLog index 4e068d57b4d7..6e338cdf0e5c 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,14 @@ +2023-11-14 Jakub Jelinek + + * gcc-changelog/git_update_version.py: Add + 040e5b0edbca861196d9e2ea2af5e805769c8d5d to ignored commits. + +2023-11-13 Arsen Arsenović + + * prerequisites.sha512: Add gettext. + * prerequisites.md5: Add gettext. + * download_prerequisites: Add gettext. + 2023-10-05 Andrea Corallo * mdcompact/mdcompact-testsuite.el: New file. diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6e70999e3d60..a90a43daec49 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,906 @@ +2023-11-14 Jakub Jelinek + + PR target/112523 + PR ada/112514 + * config/i386/i386.md (3_doubleword_lowpart): Move + operands[1] aka low part of input rather than operands[3] aka high + part of input to output if not the same register. + +2023-11-14 Andreas Krebbel + + * config.gcc: Add s390-gen-builtins.h to target_gtfiles. + * config/s390/s390-builtins.h (s390_builtin_types) + (s390_builtin_fn_types, s390_builtin_decls): Add GTY marker. + * config/s390/t-s390 (EXTRA_GTYPE_DEPS): Add s390-gen-builtins.h. + Add build rule for s390-gen-builtins.h. + +2023-11-14 Andreas Krebbel + + * config/s390/s390-c.cc (s390_fn_types_compatible): Add a check + for error_mark_node. + +2023-11-14 Jakub Jelinek + + PR c/111309 + * builtins.def (BUILT_IN_CLZG, BUILT_IN_CTZG, BUILT_IN_CLRSBG, + BUILT_IN_FFSG, BUILT_IN_PARITYG, BUILT_IN_POPCOUNTG): New + builtins. + * builtins.cc (fold_builtin_bit_query): New function. + (fold_builtin_1): Use it for + BUILT_IN_{CLZ,CTZ,CLRSB,FFS,PARITY,POPCOUNT}G. + (fold_builtin_2): Use it for BUILT_IN_{CLZ,CTZ}G. + * fold-const-call.cc: Fix comment typo on tm.h inclusion. + (fold_const_call_ss): Handle + CFN_BUILT_IN_{CLZ,CTZ,CLRSB,FFS,PARITY,POPCOUNT}G. + (fold_const_call_sss): New function. + (fold_const_call_1): Call it for 2 argument functions returning + scalar when passed 2 INTEGER_CSTs. + * genmatch.cc (cmp_operand): For function calls also compare + number of arguments. + (fns_cmp): New function. + (dt_node::gen_kids): Sort fns and generic_fns. + (dt_node::gen_kids_1): Handle fns with the same id but different + number of arguments. + * match.pd (CLZ simplifications): Drop checks for defined behavior + at zero. Add variant of simplifications for IFN_CLZ with 2 arguments. + (CTZ simplifications): Drop checks for defined behavior at zero, + don't optimize precisions above MAX_FIXED_MODE_SIZE. Add variant of + simplifications for IFN_CTZ with 2 arguments. + (a != 0 ? CLZ(a) : CST -> .CLZ(a)): Use TREE_TYPE (@3) instead of + type, add BITINT_TYPE handling, create 2 argument IFN_CLZ rather than + one argument. Add variant for matching CLZ with 2 arguments. + (a != 0 ? CTZ(a) : CST -> .CTZ(a)): Similarly. + * gimple-lower-bitint.cc (bitint_large_huge::lower_bit_query): New + method. + (bitint_large_huge::lower_call): Use it for IFN_{CLZ,CTZ,CLRSB,FFS} + and IFN_{PARITY,POPCOUNT} calls. + * gimple-range-op.cc (cfn_clz::fold_range): Don't check + CLZ_DEFINED_VALUE_AT_ZERO for m_gimple_call_internal_p, instead + assume defined value at zero if the call has 2 arguments and use + second argument value for that case. + (cfn_ctz::fold_range): Similarly. + (gimple_range_op_handler::maybe_builtin_call): Use op_cfn_clz_internal + or op_cfn_ctz_internal only if internal fn call has 2 arguments and + set m_op2 in that case. + * tree-vect-patterns.cc (vect_recog_ctz_ffs_pattern, + vect_recog_popcount_clz_ctz_ffs_pattern): For value defined at zero + use second argument of calls if present, otherwise assume UB at zero, + create 2 argument .CLZ/.CTZ calls if needed. + * tree-vect-stmts.cc (vectorizable_call): Handle 2 argument .CLZ/.CTZ + calls. + * tree-ssa-loop-niter.cc (build_cltz_expr): Create 2 argument + .CLZ/.CTZ calls if needed. + * tree-ssa-forwprop.cc (simplify_count_trailing_zeroes): Create 2 + argument .CTZ calls if needed. + * tree-ssa-phiopt.cc (cond_removal_in_builtin_zero_pattern): Handle + 2 argument .CLZ/.CTZ calls, handle BITINT_TYPE, create 2 argument + .CLZ/.CTZ calls. + * doc/extend.texi (__builtin_clzg, __builtin_ctzg, __builtin_clrsbg, + __builtin_ffsg, __builtin_parityg, __builtin_popcountg): Document. + +2023-11-14 Xi Ruoyao + + PR target/112330 + * config/loongarch/genopts/loongarch.opt.in: Add + -m[no]-pass-relax-to-as. Change the default of -m[no]-relax to + account conditional branch relaxation support status. + * config/loongarch/loongarch.opt: Regenerate. + * configure.ac (gcc_cv_as_loongarch_cond_branch_relax): Check if + the assembler supports conditional branch relaxation. + * configure: Regenerate. + * config.in: Regenerate. Note that there are some unrelated + changes introduced by r14-5424 (which does not contain a + config.in regeneration). + * config/loongarch/loongarch-opts.h + (HAVE_AS_COND_BRANCH_RELAXATION): Define to 0 if not defined. + * config/loongarch/loongarch-driver.h (ASM_MRELAX_DEFAULT): + Define. + (ASM_MRELAX_SPEC): Define. + (ASM_SPEC): Use ASM_MRELAX_SPEC instead of "%{mno-relax}". + * config/loongarch/loongarch.cc: Take the setting of + -m[no-]relax into account when determining the default of + -mexplicit-relocs=. + * doc/invoke.texi: Document -m[no-]relax and + -m[no-]pass-mrelax-to-as for LoongArch. Update the default + value of -mexplicit-relocs=. + +2023-11-14 liuhongt + + PR tree-optimization/112496 + * tree-vect-loop.cc (vectorizable_nonlinear_induction): Return + false when !tree_nop_conversion_p (TREE_TYPE (vectype), + TREE_TYPE (init_expr)). + +2023-11-14 Xi Ruoyao + + * config/loongarch/sync.md (mem_thread_fence): Remove redundant + check. + (mem_thread_fence_1): Emit finer-grained DBAR hints for + different memory models, instead of 0. + +2023-11-14 Jakub Jelinek + + PR middle-end/112511 + * tree.cc (type_contains_placeholder_1): Handle BITINT_TYPE like + INTEGER_TYPE. + +2023-11-14 Jakub Jelinek + Hu, Lin1 + + PR target/112435 + * config/i386/sse.md (avx512vl_shuf_32x4_1, + avx512dq_shuf_64x2_1): Add + alternative with just x instead of v constraints and xjm instead of + vm and use vblendps as optimization only with that alternative. + +2023-11-14 liuhongt + + PR tree-optimization/105735 + PR tree-optimization/111972 + * tree-scalar-evolution.cc + (analyze_and_compute_bitop_with_inv_effect): Handle bitop with + INTEGER_CST. + +2023-11-13 Arsen Arsenović + + * configure: Regenerate. + * aclocal.m4: Regenerate. + * Makefile.in (LIBDEPS): Remove (potential) ./ prefix from + LIBINTL_DEP. + * doc/install.texi: Document new (notable) flags added by the + optional gettext tree and by AM_GNU_GETTEXT. Document libintl/libc + with gettext dependency. + +2023-11-13 Uros Bizjak + + * config/i386/i386-expand.h (gen_pushfl): New prototype. + (gen_popfl): Ditto. + * config/i386/i386-expand.cc (ix86_expand_builtin) + [case IX86_BUILTIN_READ_FLAGS]: Use gen_pushfl. + [case IX86_BUILTIN_WRITE_FLAGS]: Use gen_popfl. + * config/i386/i386.cc (gen_pushfl): New function. + (gen_popfl): Ditto. + * config/i386/i386.md (unspec): Add UNSPEC_PUSHFL and UNSPEC_POPFL. + (@pushfl2): Rename from *pushfl2. + Rewrite as unspec using UNSPEC_PUSHFL. + (@popfl1): Rename from *popfl1. + Rewrite as unspec using UNSPEC_POPFL. + +2023-11-13 Uros Bizjak + + PR target/112494 + * config/i386/i386.cc (ix86_cc_mode) [default]: Return CCmode. + +2023-11-13 Robin Dapp + + * config/riscv/riscv-vsetvl.cc (source_equal_p): Use pointer + equality for REG_EQUAL. + +2023-11-13 Richard Biener + + PR tree-optimization/112495 + * tree-data-ref.cc (runtime_alias_check_p): Reject checks + between different address spaces. + +2023-11-13 Richard Biener + + PR middle-end/112487 + * tree-inline.cc (setup_one_parameter): When the parameter + is unused only insert a debug bind when there's not a gross + mismatch in value and declared parameter type. Do not assert + there effectively isn't. + +2023-11-13 Juzhe-Zhong + + * config/riscv/riscv-v.cc + (rvv_builder::combine_sequence_use_merge_profitable_p): New function. + (expand_vector_init_merge_combine_sequence): Ditto. + (expand_vec_init): Adapt for new optimization. + +2023-11-13 liuhongt + + * config/i386/i386-expand.cc + (ix86_expand_vector_init_duplicate): Handle V4HF/V4BF and + V2HF/V2BF. + (ix86_expand_vector_init_one_nonzero): Ditto. + (ix86_expand_vector_init_one_var): Ditto. + (ix86_expand_vector_init_general): Ditto. + (ix86_expand_vector_set_var): Ditto. + (ix86_expand_vector_set): Ditto. + (ix86_expand_vector_extract): Ditto. + * config/i386/mmx.md + (mmxdoublevecmode): Extend to V4HF/V4BF/V2HF/V2BF. + (*mmx_pinsrw): Extend to V4FI_64, add a new alternative (&x, + x, x), add a new define_split after the pattern. + (*mmx_pextrw): New define_insn. + (mmx_pshufw_1): Rename to .. + (mmx_pshufw_1): .. this, extend to V4FI_64. + (*mmx_pblendw64): Extend to V4FI_64. + (*vec_dup): New define_insn. + (vec_setv4hi): Rename to .. + (vec_set): .. this, and extend to V4FI_64 + (vec_extractv4hihi): Rename to .. + (vec_extract): .. this, and extend + to V4FI_64. + (vec_init): New define_insn. + (*pinsrw): Extend to V2FI_32, add a new alternative (&x, + x, x), and add a new define_split after it. + (*pextrw): New define_insn. + (vec_setv2hi): Rename to .. + (vec_set): .. this, extend to V2FI_32. + (vec_extractv2hihi): Rename to .. + (vec_extract): .. this, extend to + V2FI_32. + (*punpckwd): Extend to V2FI_32. + (*pshufw_1): Rename to .. + (*pshufw_1): .. this, extend to V2FI_32. + (vec_initv2hihi): Rename to .. + (vec_init): .. this, and extend to + V2FI_32. + (*vec_dup): New define_insn. + * config/i386/sse.md (*vec_extract): Refine constraint + from v to Yw. + +2023-11-13 Roger Sayle + + * config/arc/arc.md (UNSPEC_ARC_CC_NEZ): New UNSPEC that + represents the carry flag being set if the operand is non-zero. + (adc_f): New define_insn representing adc with updated flags. + (ashrdi3): New define_expand that only handles shifts by 1. + (ashrdi3_cnt1): New pre-reload define_insn_and_split. + (lshrdi3): New define_expand that only handles shifts by 1. + (lshrdi3_cnt1): New pre-reload define_insn_and_split. + (rrcsi2): New define_insn for rrc (SImode rotate right through carry). + (rrcsi2_carry): Likewise for rrc.f, as above but updating flags. + (rotldi3): New define_expand that only handles rotates by 1. + (rotldi3_cnt1): New pre-reload define_insn_and_split. + (rotrdi3): New define_expand that only handles rotates by 1. + (rotrdi3_cnt1): New pre-reload define_insn_and_split. + (lshrsi3_cnt1_carry): New define_insn for lsr.f. + (ashrsi3_cnt1_carry): New define_insn for asr.f. + (btst_0_carry): New define_insn for asr.f without result. + +2023-11-13 Roger Sayle + + * config/arc/arc.cc (TARGET_FOLD_BUILTIN): Define to + arc_fold_builtin. + (arc_fold_builtin): New function. Convert ARC_BUILTIN_SWAP + into a rotate. Evaluate ARC_BUILTIN_NORM and + ARC_BUILTIN_NORMW of constant arguments. + * config/arc/arc.md (UNSPEC_ARC_SWAP): Delete. + (normw): Make output template/assembler whitespace consistent. + (swap): Remove define_insn, only use of SWAP UNSPEC. + * config/arc/builtins.def: Tweak indentation. + (SWAP): Expand using rotlsi2_cnt16 instead of using swap. + +2023-11-13 Roger Sayle + + * config/i386/i386.md (3_doubleword_lowpart): New + define_insn_and_split to optimize register usage of doubleword + right shifts followed by truncation. + +2023-11-13 Jakub Jelinek + + * config/i386/constraints.md: Remove j constraint letter from list of + unused letters. + +2023-11-13 Xi Ruoyao + + PR rtl-optimization/112483 + * simplify-rtx.cc (simplify_binary_operation_1) : + Fix the simplification of (fcopysign x, NEGATIVE_CONST). + +2023-11-13 Jakub Jelinek + + PR tree-optimization/111967 + * gimple-range-cache.cc (block_range_cache::set_bb_range): Grow + m_ssa_ranges to num_ssa_names rather than num_ssa_names + 1. + (block_range_cache::dump): Iterate from 1 rather than 0. Don't use + ssa_name (x) unless m_ssa_ranges[x] is non-NULL. Iterate to + m_ssa_ranges.length () rather than num_ssa_names. + +2023-11-13 Xi Ruoyao + + * config/loongarch/loongarch.md (LD_AT_LEAST_32_BIT): New mode + iterator. + (ST_ANY): New mode iterator. + (define_peephole2): Use LD_AT_LEAST_32_BIT instead of GPR and + ST_ANY instead of QHWD for applicable patterns. + +2023-11-13 Xi Ruoyao + + PR target/112476 + * config/loongarch/loongarch.cc + (loongarch_expand_vec_cond_mask_expr): Call simplify_gen_subreg + instead of gen_rtx_SUBREG. + +2023-11-13 Pan Li + + * config/riscv/autovec.md: Add bridge mode to lrint and lround + pattern. + * config/riscv/riscv-protos.h (expand_vec_lrint): Add new arg + bridge machine mode. + (expand_vec_lround): Ditto. + * config/riscv/riscv-v.cc (emit_vec_widden_cvt_f_f): New helper + func impl to emit vfwcvt.f.f. + (emit_vec_rounding_to_integer): Handle the HF to DI rounding + with the bridge mode. + (expand_vec_lrint): Reorder the args. + (expand_vec_lround): Ditto. + (expand_vec_lceil): Ditto. + (expand_vec_lfloor): Ditto. + * config/riscv/vector-iterators.md: Add vector HFmode and bridge + mode for converting to DI. + +2023-11-12 Jeff Law + + Revert: + 2023-11-11 Jin Ma + + * haifa-sched.cc (use_or_clobber_starts_range_p): New. + (prune_ready_list): USE or CLOBBER should delay execution + if it starts a new live range. + +2023-11-12 Uros Bizjak + + * config/i386/i386.md (*stack_protect_set_4s__di): + Remove alternative 0. + +2023-11-11 Eric Botcazou + + * ipa-cp.cc (print_ipcp_constant_value): Move to... + (values_equal_for_ipcp_p): Deal with VAR_DECLs from the + constant pool. + * ipa-prop.cc (ipa_print_constant_value): ...here. Likewise. + (ipa_print_node_jump_functions_for_edge): Call the function + ipa_print_constant_value to print IPA_JF_CONST elements. + +2023-11-11 Jin Ma + + * haifa-sched.cc (use_or_clobber_starts_range_p): New. + (prune_ready_list): USE or CLOBBER should delay execution + if it starts a new live range. + +2023-11-11 Jakub Jelinek + + PR middle-end/112430 + * tree-ssa-math-opts.cc (match_uaddc_usubc): Remove temp_stmts in the + order they were pushed rather than in reverse order. Call + release_defs after gsi_remove. + +2023-11-11 Richard Sandiford + + * target.def (mode_switching.backprop): New hook. + * doc/tm.texi.in (TARGET_MODE_BACKPROP): New @hook. + * doc/tm.texi: Regenerate. + * mode-switching.cc (struct bb_info): Add single_succ. + (confluence_info): Add transp field. + (single_succ_confluence_n, single_succ_transfer): New functions. + (backprop_confluence_n, backprop_transfer): Likewise. + (optimize_mode_switching): Use them. Push mode transitions onto + a block's incoming edges, if the backprop hook requires it. + +2023-11-11 Richard Sandiford + + * target.def (mode_switching.confluence): New hook. + * doc/tm.texi (TARGET_MODE_CONFLUENCE): New @hook. + * doc/tm.texi.in: Regenerate. + * mode-switching.cc (confluence_info): New variable. + (mode_confluence, forward_confluence_n, forward_transfer): New + functions. + (optimize_mode_switching): Use them to calculate mode_in when + TARGET_MODE_CONFLUENCE is defined. + +2023-11-11 Richard Sandiford + + * mode-switching.cc (commit_mode_sets): Use 1-based edge aux values. + +2023-11-11 Richard Sandiford + + * target.def (mode_switching.after): Add a regs_live parameter. + * doc/tm.texi: Regenerate. + * config/epiphany/epiphany-protos.h (epiphany_mode_after): Update + accordingly. + * config/epiphany/epiphany.cc (epiphany_mode_needed): Likewise. + (epiphany_mode_after): Likewise. + * config/i386/i386.cc (ix86_mode_after): Likewise. + * config/riscv/riscv.cc (riscv_mode_after): Likewise. + * config/sh/sh.cc (sh_mode_after): Likewise. + * mode-switching.cc (optimize_mode_switching): Likewise. + +2023-11-11 Richard Sandiford + + * target.def (mode_switching.needed): Add a regs_live parameter. + * doc/tm.texi: Regenerate. + * config/epiphany/epiphany-protos.h (epiphany_mode_needed): Update + accordingly. + * config/epiphany/epiphany.cc (epiphany_mode_needed): Likewise. + * config/epiphany/mode-switch-use.cc (insert_uses): Likewise. + * config/i386/i386.cc (ix86_mode_needed): Likewise. + * config/riscv/riscv.cc (riscv_mode_needed): Likewise. + * config/sh/sh.cc (sh_mode_needed): Likewise. + * mode-switching.cc (optimize_mode_switching): Likewise. + (create_pre_exit): Likewise, using the DF simulate functions + to calculate the required information. + +2023-11-11 Richard Sandiford + + * target.def (mode_switching.eh_handler): New hook. + * doc/tm.texi.in (TARGET_MODE_EH_HANDLER): New @hook. + * doc/tm.texi: Regenerate. + * mode-switching.cc (optimize_mode_switching): Use eh_handler + to get the mode on entry to an exception handler. + +2023-11-11 Richard Sandiford + + * mode-switching.cc (optimize_mode_switching): Mark the exit + block as nontransparent if it requires a specific mode. + Handle the entry and exit mode as sibling rather than nested + concepts. Remove outdated comment. + +2023-11-11 Richard Sandiford + + * mode-switching.cc (optimize_mode_switching): Initially + compute transparency in a bit-per-block bitmap. + +2023-11-11 Richard Sandiford + + * mode-switching.cc (seginfo): Add a prev_mode field. + (new_seginfo): Take and initialize the prev_mode. + (optimize_mode_switching): Update calls accordingly. + Use the recorded modes during the emit phase, rather than + computing one on the fly. + +2023-11-11 Richard Sandiford + + * mode-switching.cc (add_seginfo): Replace head pointer with + a pointer to the tail pointer. + (optimize_mode_switching): Update calls accordingly. + +2023-11-11 Richard Sandiford + + * mode-switching.cc (optimize_mode_switching): Call + df_note_add_problem. + +2023-11-11 Richard Sandiford + + * target.def: Tweak documentation of mode-switching hooks. + * doc/tm.texi.in (OPTIMIZE_MODE_SWITCHING): Tweak documentation. + (NUM_MODES_FOR_MODE_SWITCHING): Likewise. + * doc/tm.texi: Regenerate. + +2023-11-11 Martin Uecker + + PR c/110815 + PR c/112428 + * gimple-ssa-warn-access.cc (pass_waccess::maybe_check_access_sizes): + remove warning for parameters declared with `static`. + +2023-11-11 Joern Rennecke + + * doc/sourcebuild.texi (Scan the assembly output): Document change. + +2023-11-10 Mao + + PR middle-end/110983 + * doc/invoke.texi (Option Summary): Add -fpatchable-function-entry. + +2023-11-10 Maciej W. Rozycki + + * config/riscv/riscv.md (length): Fix indentation for branch and + jump length calculation expressions. + +2023-11-10 Eric Botcazou + + * fold-const.cc (operand_compare::operand_equal_p) : + Deal with nonempty constant CONSTRUCTORs. + (operand_compare::hash_operand) : Hash DECL_FIELD_OFFSET + and DECL_FIELD_BIT_OFFSET for FIELD_DECLs. + +2023-11-10 Vladimir N. Makarov + + PR target/112337 + * ira-costs.cc: (validate_autoinc_and_mem_addr_p): New function. + (equiv_can_be_consumed_p): Use it. + +2023-11-10 Richard Sandiford + + * read-rtl.cc (md_reader::read_mapping): Allow iterators to + include other iterators. + * doc/md.texi: Document the change. + * config/aarch64/iterators.md (DREG2, VQ2, TX2, DX2, SX2): Include + the iterator that is being duplicated, rather than reproducing it. + (VSTRUCT_D): Redefine using VSTRUCT_[234]D. + (VSTRUCT_Q): Likewise VSTRUCT_[234]Q. + (VSTRUCT_2QD, VSTRUCT_3QD, VSTRUCT_4QD, VSTRUCT_QD): Redefine using + the individual D and Q iterators. + +2023-11-10 Uros Bizjak + + * config/i386/i386.md (stack_protect_set_1 peephole2): + Explicitly check operand 2 for word_mode. + (stack_protect_set_1 peephole2 #2): Ditto. + (stack_protect_set_2 peephole2): Ditto. + (stack_protect_set_3 peephole2): Ditto. + (*stack_protect_set_4z__di): New insn patter. + (*stack_protect_set_4s__di): Ditto. + (stack_protect_set_4 peephole2): New peephole2 pattern to + substitute stack protector scratch register clear with unrelated + register initialization involving zero/sign-extend instruction. + +2023-11-10 Uros Bizjak + + * config/i386/i386.md (shift): Use SAL insted of SLL + for ashift insn mnemonic. + +2023-11-10 Juzhe-Zhong + + PR tree-optimization/112438 + * tree-vect-loop.cc (vectorizable_induction): Bugfix when + LOOP_VINFO_USING_SELECT_VL_P. + +2023-11-10 Juzhe-Zhong + + * config/riscv/riscv-protos.h (enum insn_type): New enum. + * config/riscv/riscv-v.cc + (rvv_builder::combine_sequence_use_slideup_profitable_p): New function. + (expand_vector_init_slideup_combine_sequence): Ditto. + (expand_vec_init): Add slideup combine optimization. + +2023-11-10 Robin Dapp + + PR tree-optimization/112464 + * tree-vect-loop.cc (vectorize_fold_left_reduction): Use + vect_orig_stmt on scalar_dest_def_info. + +2023-11-10 Jin Ma + + * config/riscv/riscv.cc (riscv_for_each_saved_reg): Place the interrupt + operation before the XTheadMemPair. + +2023-11-10 Richard Biener + + PR tree-optimization/110221 + * tree-vect-slp.cc (vect_schedule_slp_node): When loop + masking / len is applied make sure to not schedule + intenal defs outside of the loop. + +2023-11-10 Andrew Stubbs + + * expr.cc (store_constructor): Add "and" operation to uniform mask + generation. + +2023-11-10 Andrew Stubbs + + PR target/112308 + * config/gcn/gcn-valu.md (add3): Fix B constraint + and switch to the new format. + (add3_dup): Likewise. + (add3_vcc): Likewise. + (add3_vcc_dup): Likewise. + (add3_vcc_zext_dup): Likewise. + (add3_vcc_zext_dup_exec): Likewise. + (add3_vcc_zext_dup2): Likewise. + (add3_vcc_zext_dup2_exec): Likewise. + +2023-11-10 Richard Biener + + PR middle-end/112469 + * match.pd (cond ? op a : b -> .COND_op (cond, a, b)): Add + missing view_converts. + +2023-11-10 Andrew Stubbs + + * config/gcn/gcn.cc (gcn_expand_reduc_scalar): Add clobber to DImode + min/max instructions. + +2023-11-10 Chenghui Pan + + * config/loongarch/lsx.md: Fix instruction name typo in + lsx_vreplgr2vr_ template. + +2023-11-10 Juzhe-Zhong + + * config/riscv/autovec.md (vec_init): Split patterns. + +2023-11-10 Pan Li + + * config/riscv/riscv-v.cc (expand_vector_init_trailing_same_elem): + New fun impl to expand the insn when trailing same elements. + (expand_vec_init): Try trailing same elements when vec_init. + +2023-11-10 Juzhe-Zhong + + * config/riscv/autovec-opt.md (*cond_copysign): Remove. + * config/riscv/autovec.md (cond_copysign): New pattern. + +2023-11-10 Pan Li + + PR target/112432 + * internal-fn.def (LRINT): Add FLOATN support. + (LROUND): Ditto. + (LLRINT): Ditto. + (LLROUND): Ditto. + +2023-11-10 Jeff Law + + * config/h8300/combiner.md (single bit sign_extract): Avoid recently + added patterns for H8/SX. + (single bit zero_extract): New patterns. + +2023-11-10 liuhongt + + PR target/112443 + * config/i386/sse.md (*avx2_pcmp3_4): Fix swap condition + from LT to GT since there's not in the pattern. + (*avx2_pcmp3_5): Ditto. + +2023-11-10 Jose E. Marchesi + + * config/bpf/bpf.cc (bpf_print_register): Accept modifier code 'W' + to force emitting register names using the wN form. + * config/bpf/bpf.md (*mulsidi3_zeroextend): Force operands to + always use wN written form in pseudo-C assembly syntax. + +2023-11-09 David Malcolm + + * diagnostic-show-locus.cc (layout::m_line_table): New field. + (compatible_locations_p): Convert to... + (layout::compatible_locations_p): ...this, replacing uses of + line_table global with m_line_table. + (layout::layout): Convert "richloc" param from a pointer to a + const reference. Initialize m_line_table member. + (layout::maybe_add_location_range): Replace uses of line_table + global with m_line_table. Pass the latter to + linemap_client_expand_location_to_spelling_point. + (layout::print_leading_fixits): Pass m_line_table to + affects_line_p. + (layout::print_trailing_fixits): Likewise. + (gcc_rich_location::add_location_if_nearby): Update for change + to layout ctor params. + (diagnostic_show_locus): Convert to... + (diagnostic_context::maybe_show_locus): ...this, converting + richloc param from a pointer to a const reference. Make "loc" + const. Split out printing part of function to... + (diagnostic_context::show_locus): ...this. + (selftest::test_offset_impl): Update for change to layout ctor + params. + (selftest::test_layout_x_offset_display_utf8): Likewise. + (selftest::test_layout_x_offset_display_tab): Likewise. + (selftest::test_tab_expansion): Likewise. + * diagnostic.h (diagnostic_context::maybe_show_locus): New decl. + (diagnostic_context::show_locus): New decl. + (diagnostic_show_locus): Convert from a decl to an inline function. + * gdbinit.in (break-on-diagnostic): Update from a breakpoint + on diagnostic_show_locus to one on + diagnostic_context::maybe_show_locus. + * genmatch.cc (linemap_client_expand_location_to_spelling_point): + Add "set" param and use it in place of line_table global. + * input.cc (expand_location_1): Likewise. + (expand_location): Update for new param of expand_location_1. + (expand_location_to_spelling_point): Likewise. + (linemap_client_expand_location_to_spelling_point): Add "set" + param and use it in place of line_table global. + * tree-diagnostic-path.cc (event_range::print): Pass line_table + for new param of linemap_client_expand_location_to_spelling_point. + +2023-11-09 Uros Bizjak + + * config/i386/i386.md (@stack_protect_set_1__): + Use W mode iterator instead of SWI48. Output MOV instead of XOR + for TARGET_USE_MOV0. + (stack_protect_set_1 peephole2): Use integer modes with + mode size <= word mode size for operand 3. + (stack_protect_set_1 peephole2 #2): New peephole2 pattern to + substitute stack protector scratch register clear with unrelated + register initialization, originally in front of stack + protector sequence. + (*stack_protect_set_3__): New insn pattern. + (stack_protect_set_1 peephole2): New peephole2 pattern to + substitute stack protector scratch register clear with unrelated + register initialization involving LEA instruction. + +2023-11-09 Vladimir N. Makarov + + PR rtl-optimization/110215 + * ira-lives.cc: (add_conflict_from_region_landing_pads): New + function. + (process_bb_node_lives): Use it. + +2023-11-09 Alexandre Oliva + + * config/i386/i386.cc (symbolic_base_address_p, + base_address_p): New, factored out from... + (extract_base_offset_in_addr): ... here and extended to + recognize REG+GOTOFF, as in gcc.target/i386/sse2-load-multi.c + and sse2-store-multi.c with PIE enabled by default. + +2023-11-09 Tamar Christina + + PR tree-optimization/109154 + * config/aarch64/aarch64-sve.md (cond_copysign): New. + +2023-11-09 Tamar Christina + + PR tree-optimization/109154 + * config/aarch64/aarch64.md (copysign3): Handle + copysign (x, -1). + * config/aarch64/aarch64-simd.md (copysign3): Likewise. + * config/aarch64/aarch64-sve.md (copysign3): Likewise. + +2023-11-09 Tamar Christina + + PR tree-optimization/109154 + * config/aarch64/aarch64.md (3): Add SVE split case. + * config/aarch64/aarch64-simd.md (ior3): Likewise. + * config/aarch64/predicates.md(aarch64_orr_imm_sve_advsimd): New. + +2023-11-09 Tamar Christina + + PR tree-optimization/109154 + * config/aarch64/aarch64.md (*mov_aarch64, *movsi_aarch64, + *movdi_aarch64): Add new w -> Z case. + * config/aarch64/iterators.md (Vbtype): Add QI and HI. + +2023-11-09 Tamar Christina + + PR tree-optimization/109154 + * config/aarch64/aarch64-protos.h (aarch64_simd_special_constant_p, + aarch64_maybe_generate_simd_constant): New. + * config/aarch64/aarch64-simd.md (*aarch64_simd_mov, + *aarch64_simd_mov): Add new coden for special constants. + * config/aarch64/aarch64.cc (aarch64_extract_vec_duplicate_wide_int): + Take optional mode. + (aarch64_simd_special_constant_p, + aarch64_maybe_generate_simd_constant): New. + * config/aarch64/aarch64.md (*movdi_aarch64): Add new codegen for + special constants. + * config/aarch64/constraints.md (Dx): new. + +2023-11-09 Tamar Christina + + PR tree-optimization/109154 + * internal-fn.def (COPYSIGN): New. + * match.pd (UNCOND_BINARY, COND_BINARY): Map IFN_COPYSIGN to + IFN_COND_COPYSIGN. + * optabs.def (cond_copysign_optab, cond_len_copysign_optab): New. + +2023-11-09 Tamar Christina + + PR tree-optimization/109154 + * match.pd: Add new neg+abs rule, remove inverse copysign rule. + +2023-11-09 Tamar Christina + + PR tree-optimization/109154 + * match.pd: expand existing copysign optimizations. + +2023-11-09 Tatsuyuki Ishi + + PR driver/111605 + * collect2.cc (main): Do not prepend target triple to + -fuse-ld=lld,mold. + +2023-11-09 Richard Biener + + PR tree-optimization/111133 + * tree-vect-stmts.cc (vect_build_scatter_store_calls): + Remove and refactor to ... + (vect_build_one_scatter_store_call): ... this new function. + (vectorizable_store): Use vect_check_scalar_mask to record + the SLP node for the mask operand. Code generate scatters + with builtin decls from the main scatter vectorization + path and prepare that for SLP. + * tree-vect-slp.cc (vect_get_operand_map): Do not look + at the VDEF to decide between scatter or gather since that + doesn't work for patterns. Use the LHS being an SSA_NAME + or not instead. + +2023-11-09 Pan Li + + * config/riscv/riscv.cc (riscv_frm_emit_after_bb_end): Only + perform once emit when at least one succ edge is abnormal. + +2023-11-09 Richard Biener + + * tree-vect-loop.cc (vect_verify_full_masking_avx512): + Check we have integer mode masks as required by + vect_get_loop_mask. + +2023-11-09 Richard Biener + + PR tree-optimization/112444 + * tree-ssa-sccvn.cc (visit_phi): Avoid using not visited + defs as undefined vals. + +2023-11-09 YunQiang Su + + * config/mips/mips.cc(mips_option_override): Set mips_abs to + 2008, if mips_abs is default and mips_nan is 2008. + +2023-11-09 Florian Weimer + + * doc/invoke.texi (Warning Options): Document + -Wreturn-mismatch. Update -Wreturn-type documentation. + +2023-11-09 Stefan Schulze Frielinghaus + + * config/s390/s390.md: Remove UNSPEC_VEC_ELTSWAP. + * config/s390/vector.md (eltswapv16qi): New expander. + (*eltswapv16qi): New insn and splitter. + (eltswapv8hi): New insn and splitter. + (eltswap): New insn and splitter for modes V_HW_4 as well + as V_HW_2. + * config/s390/vx-builtins.md (eltswap): Remove. + (*eltswapv16qi): Remove. + (*eltswap): Remove. + (*eltswap_emu): Remove. + +2023-11-09 Stefan Schulze Frielinghaus + + * config/s390/s390.cc (expand_perm_with_rot): Remove. + (expand_perm_reverse_elements): New. + (expand_perm_with_vster): Remove. + (expand_perm_with_vstbrq): Remove. + (vectorize_vec_perm_const_1): Replace removed functions with new + one. + +2023-11-09 Stefan Schulze Frielinghaus + + * config/s390/s390.cc (expand_perm_with_merge): Deal with cases + where vmr{l,h} are still applicable if the operands are swapped. + (expand_perm_with_vpdi): Likewise for vpdi. + +2023-11-09 Stefan Schulze Frielinghaus + + * config/s390/s390.md (VX_CONV_INT): Remove iterator. + (gf): Add float mappings. + (TOINT, toint): New attribute. + (*fixuns_trunc2_z13): + Remove. + (*fixuns_trunc2_z13): Add. + (*fix_trunc2_bfp_z13): + Remove. + (*fix_trunc2_bfp_z13): Add. + (*floatuns2_z13): Remove. + (*floatuns2_z13): Add. + * config/s390/vector.md (VX_VEC_CONV_INT): Remove iterator. + (float2): Remove. + (float2): Add. + (floatuns2): Remove. + (floatuns2): Add. + (fix_trunc2): + Remove. + (fix_trunc2): Add. + (fixuns_trunc2): + Remove. + (fixuns_trunc2): Add. + +2023-11-09 Jakub Jelinek + + PR c/112339 + * attribs.cc (attribute_ignored_p): Only return true for + attr_namespace_ignored_p if as is NULL. + (decl_attributes): Never add ignored attributes. + +2023-11-09 Jin Ma + + * config/riscv/bitmanip.md: Avoid the conflict between + zbb and xtheadmemidx in patterns. + +2023-11-09 Richard Biener + + * tree-vect-stmts.cc (vectorizable_simd_clone_call): Record + to the correct simd_clone_info. + +2023-11-09 Juzhe-Zhong + + * config/riscv/riscv-vector-costs.cc (costs::preferred_new_lmul_p): Fix ICE. + +2023-11-09 Alexandre Oliva + + * tree-cfg.cc (assign_discriminators): Handle debug stmts. + 2023-11-08 Uros Bizjak PR target/82524 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index aa6461fc3bfd..d08907ad1a72 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20231109 +20231114 diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 968f6f7f44fd..c011deb2b24d 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,18 @@ +2023-11-10 Andris Pavēnis + + * expect.c (__gnat_waitpid): fix syntax errors + +2023-11-09 Simon Wright + + PR ada/111813 + * libgnat/a-calfor.adb (Value (2)): Allow values of + parameter Elapsed_Time greater than or equal to 24 hours, by doing + the hour calculations in Natural rather than Hour_Number (0 .. + 23). Calculate the result directly rather than by using Seconds_Of + (whose Hour parameter is of type Hour_Number). + If an exception occurs of type Constraint_Error, re-raise it + rather than raising a new CE. + 2023-11-07 Joseph Myers * gcc-interface/utils.cc (flag_isoc2x): Rename to flag_isoc23. diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index cbbfa93291ee..9a9f54a0eee9 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,24 @@ +2023-11-14 Jakub Jelinek + + PR c/111309 + * c-common.cc (check_builtin_function_arguments): Handle + BUILT_IN_{CLZ,CTZ,CLRSB,FFS,PARITY,POPCOUNT}G. + * c-gimplify.cc (c_gimplify_expr): If __builtin_c[lt]zg second + argument hasn't been folded into constant yet, transform it to one + argument call inside of a COND_EXPR which for first argument 0 + returns the second argument. + +2023-11-11 Martin Uecker + + PR c/110815 + PR c/112428 + * c-attribs.cc (build_attr_access_from_parms): Synthesize + nonnull attribute for parameters declared with `static`. + +2023-11-09 Florian Weimer + + * c.opt (Wreturn-mismatch): New. + 2023-11-08 Florian Weimer * c.opt (fpermissive): Enable for C and ObjC. diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 7730d1d24f91..64fd99395463 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,21 @@ +2023-11-14 Jakub Jelinek + + PR c/111309 + * c-typeck.cc (convert_arguments): Don't promote first argument + of BUILT_IN_{CLZ,CTZ,CLRSB,FFS,PARITY,POPCOUNT}G. + +2023-11-10 Martin Uecker + + * c-typeck.cc (struct comptypes_data): Add anon_field flag. + (comptypes, comptypes_check_unum_int, + comptypes_check_different_types): Remove old cache. + (tagged_tu_types_compatible_p): Rewrite. + +2023-11-09 Florian Weimer + + * c-typeck.cc (c_finish_return): Use pedwarn with + OPT_Wreturn_mismatch for missing/extra return expressions. + 2023-11-07 Kwok Cheung Yeung * c-decl.cc (c_decl_attributes): Add attribute for indirect diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6361ac6f259a..35810e410035 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,37 @@ +2023-11-14 Jonathan Wakely + + PR c++/111842 + PR c++/112498 + * call.cc (convert_like_internal): Use OPT_Wnarrowing for + pedwarns about illformed conversions involving extended + floating-point types. Clarify that ISO C++ requires these + diagnostics. + +2023-11-14 Jakub Jelinek + + PR c/111309 + * call.cc (magic_varargs_p): Return 4 for + BUILT_IN_{CLZ,CTZ,CLRSB,FFS,PARITY,POPCOUNT}G. + (build_over_call): Don't promote first argument of + BUILT_IN_{CLZ,CTZ,CLRSB,FFS,PARITY,POPCOUNT}G. + * cp-gimplify.cc (cp_gimplify_expr): For BUILT_IN_C{L,T}ZG use + c_gimplify_expr. + +2023-11-10 Patrick Palka + + PR c++/79620 + * cp-tree.h (STRIP_REFERENCE_REF): Define. + * semantics.cc (outer_var_p): Assert REFERENCE_REF_P is false. + (finish_decltype_type): Look through implicit INDIRECT_REF when + deciding whether to call capture_decltype. + +2023-11-10 Patrick Palka + + PR c++/79378 + PR c++/96917 + * semantics.cc (finish_decltype_type): Handle an id-expression + naming a capture proxy specially. + 2023-11-07 Kwok Cheung Yeung * cp-tree.h (cp_omp_declare_target_attr): Add indirect field. diff --git a/gcc/jit/ChangeLog b/gcc/jit/ChangeLog index f8f332fdad17..443519512e10 100644 --- a/gcc/jit/ChangeLog +++ b/gcc/jit/ChangeLog @@ -1,3 +1,7 @@ +2023-11-09 Guillaume Gomez + + * libgccjit++.h: + 2023-11-04 David Malcolm * jit-playback.cc: Update for changes to diagnostic_context. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 520b1f08f11e..1cc65b0eb9a1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,2505 @@ +2023-11-14 Lehua Ding + + * gcc.target/i386/apx-spill_to_egprs-1.c: Make sure that no local + variables are stored on the stack. + +2023-11-14 Andreas Krebbel + + * g++.target/s390/zvec-templ-1.C: New test. + +2023-11-14 Jonathan Wakely + + PR c++/111842 + PR c++/112498 + * g++.dg/cpp23/ext-floating16.C: New test. + * g++.dg/cpp23/ext-floating17.C: New test. + +2023-11-14 Jakub Jelinek + + PR c/111309 + * c-c++-common/pr111309-1.c: New test. + * c-c++-common/pr111309-2.c: New test. + * gcc.dg/torture/bitint-43.c: New test. + * gcc.dg/torture/bitint-44.c: New test. + +2023-11-14 liuhongt + + * gcc.target/i386/pr112496.c: New test. + +2023-11-14 Jakub Jelinek + + PR middle-end/112511 + * gcc.dg/pr112511.c: New test. + +2023-11-14 Jakub Jelinek + Hu, Lin1 + + PR target/112435 + * gcc.target/i386/avx512vl-pr112435-1.c: New test. + * gcc.target/i386/avx512vl-pr112435-2.c: New test. + * gcc.target/i386/avx512vl-pr112435-3.c: New test. + +2023-11-14 Juzhe-Zhong + + * gcc.target/riscv/rvv/autovec/vls/init-2.c: Fix vid.v check. + +2023-11-14 liuhongt + + * gcc.target/i386/pr105735-3.c: New test. + +2023-11-13 Uros Bizjak + + PR target/112494 + * gcc.target/i386/pr112494.c: New test. + +2023-11-13 Brendan Shanks + + * g++.dg/modules/bad-mapper-1.C: Also accept posix_spawn. + +2023-11-13 Robin Dapp + + * gcc.target/riscv/rvv/autovec/partial/multiple_rgroup_zbb.c: New test. + +2023-11-13 Richard Earnshaw + + * lib/target-supports.exp (v7a_neon): New feature-test target. + * gcc.dg/debug/pr57351.c: Use it. + +2023-11-13 Richard Earnshaw + + * lib/target-supports.exp (check_effective_target_arm_arch_FUNC_ok): + Add test for v7a_arm. + * gcc.target/arm/pr60650-2.c: Use require-effective-target and + add-options. + * gcc.target/arm/pr60657.c: Likewise. + * gcc.target/arm/pr60663.c: Likewise. + * gcc.target/arm/pr81863.c: Likewise. + * gcc.target/arm/pr97969.c: Likewise. + * gcc.target/arm/pr98931.c: Likewise. + * gcc.target/arm/tail-long-call.c: Likewise. + +2023-11-13 Richard Earnshaw + + * lib/target-supports.exp (check_effective_target_arm_arch_FUNC_ok): + For instruction-set specific tests, check that __thumb__ is, or + isn't defined as appropriate. + +2023-11-13 Richard Earnshaw + + * gcc.target/arm/pr59575.c: Use dg-require-effective-target and + dg-add-options. + +2023-11-13 Richard Earnshaw + + * gcc.target/arm/pr19599.c: Add +fp to the architecture. + +2023-11-13 Richard Earnshaw + + * gcc.target/arm/optional_thumb-1.c: Force a soft-float ABI. + * gcc.target/arm/optional_thumb-3.c: Check for armv7e-m compatibility, + then set the architecture explicitly. + +2023-11-13 Richard Earnshaw + + * gcc.target/arm/macro_defs0.c: Use dg-effective-target and + dg-add-options. + * gcc.target/arm/macro_defs1.c: Likewise. + * gcc.target/arm/macro_defs2.c: Likewise. + +2023-11-13 Richard Earnshaw + + * lib/target-supports.exp (check_effective_target_arm_arch_FUNC_ok): + Use soft-float ABI for armv7m. + * gcc.target/arm/ftest-armv7m-thumb.c: Use dg-require-effective-target + to check flag compatibility. + +2023-11-13 Richard Earnshaw + + * gcc.target/arm/scd42-2.c: Use modern dg- flags. + +2023-11-13 Richard Earnshaw + + * gcc.target/arm/pragma_arch_switch_2.c: Use testsuite infrastructure + to set the architecture flags. Add +fp to the pragma that changes the + architecture. + +2023-11-13 Richard Earnshaw + + * gcc.target/arm/pragma_arch_attribute.c: Add +simd to pragmas that + set an explicit architecture. + * gcc.target/arm/pragma_arch_attribute_2.c: Likewise. + * gcc.target/arm/pragma_arch_attribute_3.c: Likewise. + +2023-11-13 Richard Earnshaw + + * gcc.target/arm/pr88648-asm-syntax-unified.c: It isn't necessary + to try to override the architecture flags specified by arm_arch_v7a. + +2023-11-13 Richard Earnshaw + + * gcc.target/arm/pr78353-1.c: Use dg-add-options to manage target + flags. + * gcc.target/arm/pr78353-2.c: Likewise. + +2023-11-13 Richard Earnshaw + + * gcc.target/arm/pr65647-2.c: Use dg-add-options to manage target + flags. + +2023-11-13 Richard Earnshaw + + * gcc.target/arm/lto/pr96939_1.c: Add +simd to the architecture + specification. + +2023-11-13 Richard Earnshaw + + * lib/target-supports.exp (check_effective_target_arm_arch_FUNC_ok): + Add entry to check for xscale. + * gcc.target/arm/g2.c: Use it. + +2023-11-13 Richard Earnshaw + + * gcc.target/arm/attr_thumb-static2.c: Add +fp to the -march + specification. + +2023-11-13 Richard Earnshaw + + * gcc.target/arm/attr-crypto.c: Add +simd to the -march + specification. + +2023-11-13 Richard Earnshaw + + * gcc.target/arm/acle/pacbti-m-predef-11.c: Add +fp to the -march + specification. + +2023-11-13 Richard Earnshaw + + * lib/target-supports.exp (check_effective_target_arm_arch_FUNC_ok): + Add base FPU specifications to all architectures that can support + one. + +2023-11-13 Richard Earnshaw + + * lib/target-supports.exp (check_effective_target_hard_float): Add + arm-specific test. + +2023-11-13 Richard Earnshaw + + * lib/target-supports.exp (check_effective_target_arm_arch_v6t2_hw_ok): + New function. + * gcc.target/arm/acle/data-intrinsics-armv6.c: Use it. + * gcc.target/arm/acle/data-intrinsics-rbit.c: Likewise. + +2023-11-13 Richard Biener + + PR tree-optimization/112495 + * gcc.target/i386/pr112495.c: New testcase. + +2023-11-13 Richard Biener + + PR middle-end/112487 + * gcc.dg/torture/pr112487.c: New testcase. + +2023-11-13 Richard Biener + + PR tree-optimization/111792 + PR tree-optimization/111000 + * gcc.dg/torture/pr111792.c: New testcase. + +2023-11-13 Juzhe-Zhong + + * gcc.target/riscv/rvv/autovec/vls/def.h: Fix init test. + * gcc.target/riscv/rvv/autovec/vls/init-1.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls/init-2.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls/init-3.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls/init-4.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls/init-5.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls/init-6.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls/init-7.c: Ditto. + +2023-11-13 Juzhe-Zhong + + * gcc.target/riscv/rvv/autovec/vls-vlmax/combine-merge-1.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/combine-merge-2.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/combine-merge_run-1.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/combine-merge_run-2.c: New test. + * gcc.target/riscv/rvv/autovec/vls/combine-merge-1.c: New test. + * gcc.target/riscv/rvv/autovec/vls/combine-merge-10.c: New test. + * gcc.target/riscv/rvv/autovec/vls/combine-merge-11.c: New test. + * gcc.target/riscv/rvv/autovec/vls/combine-merge-12.c: New test. + * gcc.target/riscv/rvv/autovec/vls/combine-merge-13.c: New test. + * gcc.target/riscv/rvv/autovec/vls/combine-merge-14.c: New test. + * gcc.target/riscv/rvv/autovec/vls/combine-merge-2.c: New test. + * gcc.target/riscv/rvv/autovec/vls/combine-merge-3.c: New test. + * gcc.target/riscv/rvv/autovec/vls/combine-merge-4.c: New test. + * gcc.target/riscv/rvv/autovec/vls/combine-merge-5.c: New test. + * gcc.target/riscv/rvv/autovec/vls/combine-merge-6.c: New test. + * gcc.target/riscv/rvv/autovec/vls/combine-merge-7.c: New test. + * gcc.target/riscv/rvv/autovec/vls/combine-merge-8.c: New test. + * gcc.target/riscv/rvv/autovec/vls/combine-merge-9.c: New test. + +2023-11-13 liuhongt + + * gcc.target/i386/part-vect-vec_elem-1.c: New test. + * gcc.target/i386/part-vect-vec_elem-2.c: New test. + +2023-11-13 Roger Sayle + + * gcc.target/arc/ashrdi3-1.c: New test case. + * gcc.target/arc/lshrdi3-1.c: Likewise. + * gcc.target/arc/rotldi3-1.c: Likewise. + * gcc.target/arc/rotrdi3-1.c: Likewise. + +2023-11-13 Roger Sayle + + * gcc.target/arc/builtin_norm-1.c: New test case. + * gcc.target/arc/builtin_norm-2.c: Likewise. + * gcc.target/arc/builtin_normw-1.c: Likewise. + * gcc.target/arc/builtin_normw-2.c: Likewise. + * gcc.target/arc/builtin_swap-1.c: Likewise. + * gcc.target/arc/builtin_swap-2.c: Likewise. + * gcc.target/arc/builtin_swap-3.c: Likewise. + +2023-11-13 Florian Weimer + + * gcc.c-torture/execute/20000112-1.c (main): Add missing + int and void types. + * gcc.c-torture/execute/20000113-1.c (foobar): Add missing + void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/20000314-2.c (main): Likewise. + * gcc.c-torture/execute/20000402-1.c (main): Likewise. + * gcc.c-torture/execute/20000403-1.c (main): Likewise. + * gcc.c-torture/execute/20000503-1.c (main): Likewise. + * gcc.c-torture/execute/20000605-2.c (main): Likewise. + * gcc.c-torture/execute/20000717-1.c (main): Likewise. + * gcc.c-torture/execute/20000717-5.c (main): Likewise. + * gcc.c-torture/execute/20000726-1.c (main): Likewise. + * gcc.c-torture/execute/20000914-1.c(blah): Add missing + void types. + (main): Add missing int and void types. + * gcc.c-torture/execute/20001009-1.c (main): Likewise. + * gcc.c-torture/execute/20001013-1.c (main): Likewise. + * gcc.c-torture/execute/20001031-1.c (main): Likewise. + * gcc.c-torture/execute/20010221-1.c (main): Likewise. + * gcc.c-torture/execute/20010723-1.c (main): Likewise. + * gcc.c-torture/execute/20010915-1.c (s): Call + __builtin_strcmp instead of strcmp. + * gcc.c-torture/execute/20010924-1.c (main): Add missing + int and void types. + * gcc.c-torture/execute/20011128-1.c (main): Likewise. + * gcc.c-torture/execute/20020226-1.c (main): Likewise. + * gcc.c-torture/execute/20020328-1.c (foo): Add missing + void types. + * gcc.c-torture/execute/20020406-1.c (DUPFFexgcd): Call + __builtin_printf instead of printf. + (main): Likewise. + * gcc.c-torture/execute/20020508-1.c (main): Add missing + int and void types. + * gcc.c-torture/execute/20020508-2.c (main): Likewise. + * gcc.c-torture/execute/20020508-3.c (main): Likewise. + * gcc.c-torture/execute/20020611-1.c (main): Likewise. + * gcc.c-torture/execute/20021010-2.c (main): Likewise. + * gcc.c-torture/execute/20021113-1.c (foo): Add missing + void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/20021120-3.c (foo): Call + __builtin_sprintf instead of sprintf. + * gcc.c-torture/execute/20030125-1.c (main): Add missing + int and void types. + * gcc.c-torture/execute/20030216-1.c (main): Likewise. + * gcc.c-torture/execute/20030404-1.c (main): Likewise. + * gcc.c-torture/execute/20030606-1.c (main): Likewise. + Call __builtin_memset instead of memset. + * gcc.c-torture/execute/20030828-1.c (main): Add missing int + and void types. + * gcc.c-torture/execute/20030828-2.c (main): Likewise. + * gcc.c-torture/execute/20031012-1.c: Call __builtin_strlen + instead of strlen. + * gcc.c-torture/execute/20031211-1.c (main): Add missing int + and void types. + * gcc.c-torture/execute/20040319-1.c (main): Likewise. + * gcc.c-torture/execute/20040411-1.c (sub1): Call + __builtin_memcpy instead of memcpy. + * gcc.c-torture/execute/20040423-1.c (sub1): Likewise. + * gcc.c-torture/execute/20040917-1.c (main): Add missing int + and void types. + * gcc.c-torture/execute/20050131-1.c (main): Likewise. + * gcc.c-torture/execute/20051113-1.c (main): Likewise. + * gcc.c-torture/execute/20121108-1.c (main): Call + __builtin_printf instead of printf. + * gcc.c-torture/execute/20170401-2.c (main): Add missing int + and void types. + * gcc.c-torture/execute/900409-1.c (main): Likewise. + * gcc.c-torture/execute/920202-1.c (f): Add int return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/920302-1.c (execute): Add void return + type. + (main): Add missing int and void types. + * gcc.c-torture/execute/920410-1.c (main): Likewise. + * gcc.c-torture/execute/920501-2.c (main): Likewise. + * gcc.c-torture/execute/920501-3.c (execute): Add void return + type. + (main): Add missing int and void types. + * gcc.c-torture/execute/920501-5.c (x): Add int return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/920501-6.c (main): Add int return + type. + * gcc.c-torture/execute/920501-8.c (main): Add missing + int and void types. Call __builtin_strcmp instead of strcmp. + * gcc.c-torture/execute/920506-1.c (main): Add missing + int and void types. + * gcc.c-torture/execute/920612-2.c (main): Likewise. + * gcc.c-torture/execute/920618-1.c (main): Likewise. + * gcc.c-torture/execute/920625-1.c (main): Likewise. + * gcc.c-torture/execute/920710-1.c (main): Likewise. + * gcc.c-torture/execute/920721-1.c (main): Likewise. + * gcc.c-torture/execute/920721-4.c (main): Likewise. + * gcc.c-torture/execute/920726-1.c (first, second): Call + __builtin_strlen instead of strlen. + (main): Add missing int and void types. Call __builtin_strcmp + instead of strcmp. + * gcc.c-torture/execute/920810-1.c (main): Add missing + int and void types. + * gcc.c-torture/execute/920829-1.c (main): Likewise. + * gcc.c-torture/execute/920908-1.c (main): Likewise. + * gcc.c-torture/execute/920922-1.c (main): Likewise. + * gcc.c-torture/execute/920929-1.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/921006-1.c (main): Likewise. Call + __builtin_strcmp instead of strcmp. + * gcc.c-torture/execute/921007-1.c (main): Add missing + int and void types. + * gcc.c-torture/execute/921016-1.c (main): Likewise. + * gcc.c-torture/execute/921019-1.c (main): Likewise. + * gcc.c-torture/execute/921019-2.c (main): Likewise. + * gcc.c-torture/execute/921029-1.c (main): Likewise. + * gcc.c-torture/execute/921104-1.c (main): Likewise. + * gcc.c-torture/execute/921112-1.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/921113-1.c (w, f1, f2, gitter): Add + void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/921117-1.c (check): Call + __builtin_strcmp instead of strcmp. + (main): Add missing int and void types. Call __builtin_strcpy + instead of strcpy. + * gcc.c-torture/execute/921123-2.c (main): Add missing + int and void types. + * gcc.c-torture/execute/921202-2.c (main): Likewise. + * gcc.c-torture/execute/921204-1.c (main): Likewise. + * gcc.c-torture/execute/921208-1.c (main): Likewise. + * gcc.c-torture/execute/930123-1.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/930126-1.c (main): Likewise. + * gcc.c-torture/execute/930406-1.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/930408-1.c (p, f): Add missing void + types. + (main): Add missing int and void types. + * gcc.c-torture/execute/930429-1.c (main): Likewise. + * gcc.c-torture/execute/930603-2.c (f): Add missing void + types. + (main): Add missing int and void types. + * gcc.c-torture/execute/930608-1.c (main): Likewise. + * gcc.c-torture/execute/930614-1.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/930614-2.c (main): Likewise. + * gcc.c-torture/execute/930622-2.c (main): Likewise. + * gcc.c-torture/execute/930628-1.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/930725-1.c (main): Likewise. Call + __builtin_strcmp instead of strcmp. + * gcc.c-torture/execute/930930-2.c (main): Add missing + int and void types. + * gcc.c-torture/execute/931002-1.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/931004-1.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/931004-10.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/931004-11.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/931004-12.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/931004-13.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/931004-14.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/931004-2.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/931004-3.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/931004-4.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/931004-5.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/931004-6.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/931004-7.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/931004-8.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/931004-9.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/931005-1.c (main): Likewise. + * gcc.c-torture/execute/931110-1.c (main): Likewise. + * gcc.c-torture/execute/931110-2.c (main): Likewise. + * gcc.c-torture/execute/941014-1.c (main): Likewise. + * gcc.c-torture/execute/941014-2.c (main): Likewise. + * gcc.c-torture/execute/941015-1.c (main): Likewise. + * gcc.c-torture/execute/941021-1.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/941025-1.c (main): Likewise. + * gcc.c-torture/execute/941031-1.c (main): Likewise. + * gcc.c-torture/execute/950221-1.c (g2): Add int return type. + (f): Add missing void types. Call __builtin_strcpy instead + of strcpy. + (main): Add missing int and void types. + * gcc.c-torture/execute/950426-2.c (main): Likewise. + * gcc.c-torture/execute/950503-1.c (main): Likewise. + * gcc.c-torture/execute/950511-1.c (main): Likewise. + * gcc.c-torture/execute/950607-1.c (main): Likewise. + * gcc.c-torture/execute/950607-2.c (main): Likewise. + * gcc.c-torture/execute/950612-1.c (main): Likewise. + * gcc.c-torture/execute/950628-1.c (main): Likewise. + * gcc.c-torture/execute/950704-1.c (main): Likewise. + * gcc.c-torture/execute/950706-1.c (main): Likewise. + * gcc.c-torture/execute/950710-1.c (main): Likewise. + * gcc.c-torture/execute/950714-1.c (main): Likewise. + * gcc.c-torture/execute/950809-1.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/950906-1.c (g, f): Add void return + type. + (main): Add missing int and void types. + * gcc.c-torture/execute/950915-1.c (main): Likewise. + * gcc.c-torture/execute/950929-1.c (main): Likewise. + * gcc.c-torture/execute/951003-1.c (f): Add missing int + parameter type. + (main): Add missing int and void types. + * gcc.c-torture/execute/951115-1.c (g, f): Add void return + type. + (main): Add missing int and void types. + * gcc.c-torture/execute/951204-1.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/960116-1.c (p): Add int return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/960117-1.c (main): Likewise. + * gcc.c-torture/execute/960209-1.c (main): Likewise. + * gcc.c-torture/execute/960215-1.c (main): Likewise. + * gcc.c-torture/execute/960219-1.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/960301-1.c (main): Likewise. + * gcc.c-torture/execute/960302-1.c (foo, main): Add missing + int and void types. + * gcc.c-torture/execute/960311-1.c (main): Likewise. + * gcc.c-torture/execute/960311-2.c (main): Likewise. + * gcc.c-torture/execute/960311-3.c (main): Likewise. + * gcc.c-torture/execute/960312-1.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/960317-1.c (main): Likewise. + * gcc.c-torture/execute/960321-1.c (main): Likewise. + * gcc.c-torture/execute/960326-1.c (main): Likewise. + * gcc.c-torture/execute/960327-1.c (g, main): Add missing + int and void types. + (f): Add missing void types. + * gcc.c-torture/execute/960405-1.c (main): Add missing + int and void types. + * gcc.c-torture/execute/960416-1.c (main): Likewise. + * gcc.c-torture/execute/960419-1.c (main): Likewise. + * gcc.c-torture/execute/960419-2.c (main): Likewise. + * gcc.c-torture/execute/960512-1.c (main): Likewise. + * gcc.c-torture/execute/960513-1.c (main): Likewise. + * gcc.c-torture/execute/960521-1.c (f): Add missing void + types. + (main): Add missing int and void types. + * gcc.c-torture/execute/960608-1.c (f): Add int return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/960801-1.c (main): Likewise. + * gcc.c-torture/execute/960802-1.c (main): Likewise. + * gcc.c-torture/execute/960909-1.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/961004-1.c (main): Likewise. + * gcc.c-torture/execute/961017-1.c (main): Likewise. + * gcc.c-torture/execute/961017-2.c (main): Likewise. + * gcc.c-torture/execute/961026-1.c (main): Likewise. + * gcc.c-torture/execute/961122-1.c (addhi, subhi): Add void + return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/961122-2.c (main): Likewise. + * gcc.c-torture/execute/961125-1.c (main): Likewise. + * gcc.c-torture/execute/961206-1.c (main): Likewise. + * gcc.c-torture/execute/961213-1.c (main): Likewise. + * gcc.c-torture/execute/970214-1.c (main): Likewise. + * gcc.c-torture/execute/970214-2.c (main): Likewise. + * gcc.c-torture/execute/970217-1.c (sub): Add int return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/970923-1.c (main): Likewise. + * gcc.c-torture/execute/980223.c (main): Likewise. + * gcc.c-torture/execute/980506-1.c (main): Likewise. + * gcc.c-torture/execute/980506-2.c (main): Likewise. + * gcc.c-torture/execute/980506-3.c (build_lookup): Call + __builtin_strlen instead of strlen and __builtin_memset + instead of memset. + * gcc.c-torture/execute/980526-3.c (main): Likewise. + * gcc.c-torture/execute/980602-1.c (main): Likewise. + * gcc.c-torture/execute/980604-1.c (main): Likewise. + * gcc.c-torture/execute/980605-1.c (dummy): Add missing int + parameter type. + (main): Add missing int and void types. + * gcc.c-torture/execute/980701-1.c (ns_name_skip): Add missing + int return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/980709-1.c (main): Likewise. + * gcc.c-torture/execute/990117-1.c (main): Likewise. + * gcc.c-torture/execute/990127-1.c (main): Likewise. + * gcc.c-torture/execute/990128-1.c (main): Likewise. + * gcc.c-torture/execute/990130-1.c (main): Likewise. + * gcc.c-torture/execute/990324-1.c (main): Likewise. + * gcc.c-torture/execute/990524-1.c (main): Likewise. + * gcc.c-torture/execute/990531-1.c (main): Likewise. + * gcc.c-torture/execute/990628-1.c (fetch, load_data): Call + __builtin_memset instead of memset. + (main): Add missing int and void types. + * gcc.c-torture/execute/991019-1.c (main): Likewise. + * gcc.c-torture/execute/991023-1.c (foo, main): Likewise. + * gcc.c-torture/execute/991112-1.c (isprint): Declare. + * gcc.c-torture/execute/991118-1.c (main): Add missing + int and void types. + * gcc.c-torture/execute/alias-1.c (ptr2): Add cast to float * + in initializer. + (typepun): Add missing void types. + (main): Add missing int and void types. + * gcc.c-torture/execute/alias-2.c (main): Likewise. + * gcc.c-torture/execute/alias-3.c (inc): Add missing + void types. + * gcc.c-torture/execute/alias-4.c (main): Add missing int + return type. + * gcc.c-torture/execute/arith-1.c (main): Add missing + int and void types. + * gcc.c-torture/execute/arith-rand-ll.c (main): Likewise. + * gcc.c-torture/execute/arith-rand.c (main): Likewise. + * gcc.c-torture/execute/bf-layout-1.c (main): Likewise. + * gcc.c-torture/execute/bf-pack-1.c (foo): Add missing + void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/bf-sign-1.c (main): Likewise. + * gcc.c-torture/execute/bf-sign-2.c (main): Likewise. + * gcc.c-torture/execute/bf64-1.c (main): Likewise. + * gcc.c-torture/execute/builtin-prefetch-2.c (stat_int_arr): + Add missing int array element type. + * gcc.c-torture/execute/builtin-prefetch-3.c (stat_int_arr): + Likewise. + * gcc.c-torture/execute/cbrt.c (main): Add missing int and + void types. + * gcc.c-torture/execute/complex-1.c (main): Likewise. + * gcc.c-torture/execute/complex-2.c (main): Likewise. + * gcc.c-torture/execute/complex-3.c (main): Likewise. + * gcc.c-torture/execute/complex-4.c (main): Likewise. + * gcc.c-torture/execute/complex-5.c (main): Likewise. + * gcc.c-torture/execute/compndlit-1.c (main): Likewise. + * gcc.c-torture/execute/conversion.c (test_integer_to_float) + (test_longlong_integer_to_float, test_float_to_integer) + (test_float_to_longlong_integer): Add missing void return + type. + (main): Add missing int and void types. + * gcc.c-torture/execute/cvt-1.c (main): Likewise. + * gcc.c-torture/execute/divconst-1.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/divconst-2.c (main): Likewise. + * gcc.c-torture/execute/divconst-3.c (main): Likewise. + * gcc.c-torture/execute/enum-1.c (main): Likewise. + * gcc.c-torture/execute/func-ptr-1.c (main): Likewise. + * gcc.c-torture/execute/ieee/20011123-1.c (main): Likewise. + * gcc.c-torture/execute/ieee/920518-1.c (main): Likewise. + * gcc.c-torture/execute/ieee/920810-1.c (main): Likewise. + Call __builtin_strcmp instead of strcmp. + * gcc.c-torture/execute/ieee/930529-1.c (main): Add missing + int and void types. + * gcc.c-torture/execute/ieee/fp-cmp-1.c (main): Likewise. + * gcc.c-torture/execute/ieee/fp-cmp-2.c (main): Likewise. + * gcc.c-torture/execute/ieee/fp-cmp-3.c (main): Likewise. + * gcc.c-torture/execute/ieee/fp-cmp-6.c (main): Likewise. + * gcc.c-torture/execute/ieee/fp-cmp-9.c (main): Likewise. + * gcc.c-torture/execute/ieee/minuszero.c (main): Likewise. + * gcc.c-torture/execute/ieee/mzero2.c (expect): Call + __builtin_memcmp instead of memcmp. + (main): Add missing int and void types. + * gcc.c-torture/execute/ieee/mzero3.c (main): Likewise. + (expectd, expectf): Call __builtin_memcmp instead of memcmp. + * gcc.c-torture/execute/ieee/mzero5.c (negzero_check): + Likewise. + * gcc.c-torture/execute/ieee/rbug.c (main): Add missing + int and void types. + * gcc.c-torture/execute/index-1.c (main): Likewise. + * gcc.c-torture/execute/loop-1.c (main): Likewise. + * gcc.c-torture/execute/loop-2b.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/loop-6.c (main): Likewise. + * gcc.c-torture/execute/loop-7.c (main): Likewise. + * gcc.c-torture/execute/lto-tbaa-1.c (use_a, set_b, use_c): + Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/memcpy-1.c (main): Likewise. + * gcc.c-torture/execute/memcpy-2.c (main): Likewise. + * gcc.c-torture/execute/memcpy-bi.c (main): Likewise. + * gcc.c-torture/execute/memset-1.c (main): Likewise. + * gcc.c-torture/execute/memset-2.c: Include . + * gcc.c-torture/execute/memset-3.c: Likewise. + * gcc.c-torture/execute/nest-stdar-1.c (main): Add missing + int and void types. + * gcc.c-torture/execute/nestfunc-1.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/packed-1.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/pr15262-1.c (main): Likewise. Call + __builtin_malloc instead of malloc. + * gcc.c-torture/execute/pr15262-2.c (foo): Add int return + type. + (main): Add missing int and void types. + * gcc.c-torture/execute/pr15262.c (main): Likewise. + * gcc.c-torture/execute/pr17252.c (main): Likewise. + * gcc.c-torture/execute/pr21331.c (main): Likewise. + * gcc.c-torture/execute/pr34176.c (foo): Add missing int + type to definition of foo. + * gcc.c-torture/execute/pr42231.c (max): Add missing int type + to definition. + * gcc.c-torture/execute/pr42614.c (expect_func): Call + __builtin_abs instead of abs. + * gcc.c-torture/execute/pr54937.c (t): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/ptr-arith-1.c (main): Likewise. + * gcc.c-torture/execute/regstack-1.c (main): Likewise. + * gcc.c-torture/execute/scope-1.c (f): Add missing void types. + (main): Add missing int and void types. + * gcc.c-torture/execute/simd-5.c (main): Call __builtin_memcmp + instead of memcmp. + * gcc.c-torture/execute/strcmp-1.c (main): Add missing + int and void types. + * gcc.c-torture/execute/strcpy-1.c (main): Likewise. + * gcc.c-torture/execute/strct-pack-1.c (main): Likewise. + * gcc.c-torture/execute/strct-pack-2.c (main): Likewise. + * gcc.c-torture/execute/strct-pack-4.c (main): Likewise. + * gcc.c-torture/execute/strct-stdarg-1.c (f): Add void return + type. + (main): Add missing int and void types. + * gcc.c-torture/execute/strct-varg-1.c (f): Add void return + type. + (main): Add missing int and void types. + * gcc.c-torture/execute/strlen-1.c (main): Likewise. + * gcc.c-torture/execute/strncmp-1.c (main): Likewise. + * gcc.c-torture/execute/struct-ini-1.c (main): Likewise. + * gcc.c-torture/execute/struct-ini-2.c (main): Likewise. + * gcc.c-torture/execute/struct-ini-3.c (main): Likewise. + * gcc.c-torture/execute/struct-ini-4.c (main): Likewise. + * gcc.c-torture/execute/struct-ret-1.c (main): Likewise. + * gcc.c-torture/execute/struct-ret-2.c (main): Likewise. + * gcc.c-torture/execute/va-arg-1.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/va-arg-10.c (main): Likewise. + * gcc.c-torture/execute/va-arg-2.c (main): Likewise. + * gcc.c-torture/execute/va-arg-4.c (main): Likewise. + * gcc.c-torture/execute/va-arg-5.c (va_double) + (va_long_double): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/va-arg-6.c (f): Add void return type. + (main): Add missing int and void types. + * gcc.c-torture/execute/va-arg-9.c (main): Likewise. + * gcc.c-torture/execute/widechar-1.c (main): Likewise. + +2023-11-13 Florian Weimer + + * gcc.c-torture/execute/20000112-1.c: Declare exit and abort + as appropriate. + * gcc.c-torture/execute/20000113-1.c: Likewise. + * gcc.c-torture/execute/20000205-1.c: Likewise. + * gcc.c-torture/execute/20000217-1.c: Likewise. + * gcc.c-torture/execute/20000223-1.c: Likewise. + * gcc.c-torture/execute/20000224-1.c: Likewise. + * gcc.c-torture/execute/20000225-1.c: Likewise. + * gcc.c-torture/execute/20000227-1.c: Likewise. + * gcc.c-torture/execute/20000313-1.c: Likewise. + * gcc.c-torture/execute/20000314-1.c: Likewise. + * gcc.c-torture/execute/20000314-2.c: Likewise. + * gcc.c-torture/execute/20000314-3.c: Likewise. + * gcc.c-torture/execute/20000402-1.c: Likewise. + * gcc.c-torture/execute/20000403-1.c: Likewise. + * gcc.c-torture/execute/20000412-1.c: Likewise. + * gcc.c-torture/execute/20000412-2.c: Likewise. + * gcc.c-torture/execute/20000412-4.c: Likewise. + * gcc.c-torture/execute/20000412-5.c: Likewise. + * gcc.c-torture/execute/20000412-6.c: Likewise. + * gcc.c-torture/execute/20000419-1.c: Likewise. + * gcc.c-torture/execute/20000422-1.c: Likewise. + * gcc.c-torture/execute/20000503-1.c: Likewise. + * gcc.c-torture/execute/20000511-1.c: Likewise. + * gcc.c-torture/execute/20000519-1.c: Likewise. + * gcc.c-torture/execute/20000519-2.c: Likewise. + * gcc.c-torture/execute/20000523-1.c: Likewise. + * gcc.c-torture/execute/20000528-1.c: Likewise. + * gcc.c-torture/execute/20000603-1.c: Likewise. + * gcc.c-torture/execute/20000605-1.c: Likewise. + * gcc.c-torture/execute/20000605-2.c: Likewise. + * gcc.c-torture/execute/20000605-3.c: Likewise. + * gcc.c-torture/execute/20000622-1.c: Likewise. + * gcc.c-torture/execute/20000717-1.c: Likewise. + * gcc.c-torture/execute/20000717-2.c: Likewise. + * gcc.c-torture/execute/20000717-5.c: Likewise. + * gcc.c-torture/execute/20000722-1.c: Likewise. + * gcc.c-torture/execute/20000726-1.c: Likewise. + * gcc.c-torture/execute/20000731-1.c: Likewise. + * gcc.c-torture/execute/20000731-2.c: Likewise. + * gcc.c-torture/execute/20000801-3.c: Likewise. + * gcc.c-torture/execute/20000801-4.c: Likewise. + * gcc.c-torture/execute/20000808-1.c: Likewise. + * gcc.c-torture/execute/20000815-1.c: Likewise. + * gcc.c-torture/execute/20000818-1.c: Likewise. + * gcc.c-torture/execute/20000819-1.c: Likewise. + * gcc.c-torture/execute/20000822-1.c: Likewise. + * gcc.c-torture/execute/20000914-1.c: Likewise. + * gcc.c-torture/execute/20000917-1.c: Likewise. + * gcc.c-torture/execute/20001009-1.c: Likewise. + * gcc.c-torture/execute/20001009-2.c: Likewise. + * gcc.c-torture/execute/20001013-1.c: Likewise. + * gcc.c-torture/execute/20001017-1.c: Likewise. + * gcc.c-torture/execute/20001017-2.c: Likewise. + * gcc.c-torture/execute/20001024-1.c: Likewise. + * gcc.c-torture/execute/20001027-1.c: Likewise. + * gcc.c-torture/execute/20001101.c: Likewise. + * gcc.c-torture/execute/20001108-1.c: Likewise. + * gcc.c-torture/execute/20001112-1.c: Likewise. + * gcc.c-torture/execute/20001124-1.c: Likewise. + * gcc.c-torture/execute/20001130-1.c: Likewise. + * gcc.c-torture/execute/20001130-2.c: Likewise. + * gcc.c-torture/execute/20001203-2.c: Likewise. + * gcc.c-torture/execute/20001221-1.c: Likewise. + * gcc.c-torture/execute/20001228-1.c: Likewise. + * gcc.c-torture/execute/20001229-1.c: Likewise. + * gcc.c-torture/execute/20010106-1.c: Likewise. + * gcc.c-torture/execute/20010118-1.c: Likewise. + * gcc.c-torture/execute/20010119-1.c: Likewise. + * gcc.c-torture/execute/20010206-1.c: Likewise. + * gcc.c-torture/execute/20010209-1.c: Likewise. + * gcc.c-torture/execute/20010221-1.c: Likewise. + * gcc.c-torture/execute/20010222-1.c: Likewise. + * gcc.c-torture/execute/20010329-1.c: Likewise. + * gcc.c-torture/execute/20010403-1.c: Likewise. + * gcc.c-torture/execute/20010409-1.c: Likewise. + * gcc.c-torture/execute/20010422-1.c: Likewise. + * gcc.c-torture/execute/20010518-1.c: Likewise. + * gcc.c-torture/execute/20010518-2.c: Likewise. + * gcc.c-torture/execute/20010520-1.c: Likewise. + * gcc.c-torture/execute/20010604-1.c: Likewise. + * gcc.c-torture/execute/20010711-1.c: Likewise. + * gcc.c-torture/execute/20010723-1.c: Likewise. + * gcc.c-torture/execute/20010904-1.c: Likewise. + * gcc.c-torture/execute/20010904-2.c: Likewise. + * gcc.c-torture/execute/20010915-1.c: Likewise. + * gcc.c-torture/execute/20010924-1.c: Likewise. + * gcc.c-torture/execute/20011024-1.c: Likewise. + * gcc.c-torture/execute/20011109-1.c: Likewise. + * gcc.c-torture/execute/20011109-2.c: Likewise. + * gcc.c-torture/execute/20011114-1.c: Likewise. + * gcc.c-torture/execute/20011121-1.c: Likewise. + * gcc.c-torture/execute/20011126-1.c: Likewise. + * gcc.c-torture/execute/20011128-1.c: Likewise. + * gcc.c-torture/execute/20011217-1.c: Likewise. + * gcc.c-torture/execute/20020213-1.c: Likewise. + * gcc.c-torture/execute/20020215-1.c: Likewise. + * gcc.c-torture/execute/20020225-2.c: Likewise. + * gcc.c-torture/execute/20020226-1.c: Likewise. + * gcc.c-torture/execute/20020227-1.c: Likewise. + * gcc.c-torture/execute/20020307-1.c: Likewise. + * gcc.c-torture/execute/20020328-1.c: Likewise. + * gcc.c-torture/execute/20020404-1.c: Likewise. + * gcc.c-torture/execute/20020406-1.c: Likewise. + * gcc.c-torture/execute/20020413-1.c: Likewise. + * gcc.c-torture/execute/20020418-1.c: Likewise. + * gcc.c-torture/execute/20020508-1.c: Likewise. + * gcc.c-torture/execute/20020508-2.c: Likewise. + * gcc.c-torture/execute/20020508-3.c: Likewise. + * gcc.c-torture/execute/20020529-1.c: Likewise. + * gcc.c-torture/execute/20020611-1.c: Likewise. + * gcc.c-torture/execute/20020615-1.c: Likewise. + * gcc.c-torture/execute/20020619-1.c: Likewise. + * gcc.c-torture/execute/20020904-1.c: Likewise. + * gcc.c-torture/execute/20020916-1.c: Likewise. + * gcc.c-torture/execute/20021010-1.c: Likewise. + * gcc.c-torture/execute/20021113-1.c: Likewise. + * gcc.c-torture/execute/20021118-1.c: Likewise. + * gcc.c-torture/execute/20021118-2.c: Likewise. + * gcc.c-torture/execute/20021120-1.c: Likewise. + * gcc.c-torture/execute/20021120-2.c: Likewise. + * gcc.c-torture/execute/20021120-3.c: Likewise. + * gcc.c-torture/execute/20030105-1.c: Likewise. + * gcc.c-torture/execute/20030109-1.c: Likewise. + * gcc.c-torture/execute/20030117-1.c: Likewise. + * gcc.c-torture/execute/20030120-1.c: Likewise. + * gcc.c-torture/execute/20030125-1.c: Likewise. + * gcc.c-torture/execute/20030128-1.c: Likewise. + * gcc.c-torture/execute/20030209-1.c: Likewise. + * gcc.c-torture/execute/20030222-1.c: Likewise. + * gcc.c-torture/execute/20030316-1.c: Likewise. + * gcc.c-torture/execute/20030403-1.c: Likewise. + * gcc.c-torture/execute/20030404-1.c: Likewise. + * gcc.c-torture/execute/20030501-1.c: Likewise. + * gcc.c-torture/execute/20030606-1.c: Likewise. + * gcc.c-torture/execute/20030828-1.c: Likewise. + * gcc.c-torture/execute/20030828-2.c: Likewise. + * gcc.c-torture/execute/20030903-1.c: Likewise. + * gcc.c-torture/execute/20030910-1.c: Likewise. + * gcc.c-torture/execute/20030913-1.c: Likewise. + * gcc.c-torture/execute/20030914-1.c: Likewise. + * gcc.c-torture/execute/20030914-2.c: Likewise. + * gcc.c-torture/execute/20030916-1.c: Likewise. + * gcc.c-torture/execute/20030928-1.c: Likewise. + * gcc.c-torture/execute/20031010-1.c: Likewise. + * gcc.c-torture/execute/20031201-1.c: Likewise. + * gcc.c-torture/execute/20031204-1.c: Likewise. + * gcc.c-torture/execute/20031211-1.c: Likewise. + * gcc.c-torture/execute/20040208-1.c: Likewise. + * gcc.c-torture/execute/20040218-1.c: Likewise. + * gcc.c-torture/execute/20040307-1.c: Likewise. + * gcc.c-torture/execute/20040319-1.c: Likewise. + * gcc.c-torture/execute/20040411-1.c: Likewise. + * gcc.c-torture/execute/20040423-1.c: Likewise. + * gcc.c-torture/execute/20040625-1.c: Likewise. + * gcc.c-torture/execute/20040703-1.c: Likewise. + * gcc.c-torture/execute/20040706-1.c: Likewise. + * gcc.c-torture/execute/20040707-1.c: Likewise. + * gcc.c-torture/execute/20040805-1.c: Likewise. + * gcc.c-torture/execute/20040917-1.c: Likewise. + * gcc.c-torture/execute/20041011-1.c: Likewise. + * gcc.c-torture/execute/20041113-1.c: Likewise. + * gcc.c-torture/execute/20041124-1.c: Likewise. + * gcc.c-torture/execute/20041210-1.c: Likewise. + * gcc.c-torture/execute/20041212-1.c: Likewise. + * gcc.c-torture/execute/20050410-1.c: Likewise. + * gcc.c-torture/execute/20051113-1.c: Likewise. + * gcc.c-torture/execute/20070623-1.c: Likewise. + * gcc.c-torture/execute/20091229-1.c: Likewise. + * gcc.c-torture/execute/20101025-1.c: Likewise. + * gcc.c-torture/execute/20120817-1.c: Likewise. + * gcc.c-torture/execute/20170401-2.c: Likewise. + * gcc.c-torture/execute/900409-1.c: Likewise. + * gcc.c-torture/execute/920202-1.c: Likewise. + * gcc.c-torture/execute/920302-1.c: Likewise. + * gcc.c-torture/execute/920410-1.c: Likewise. + * gcc.c-torture/execute/920501-2.c: Likewise. + * gcc.c-torture/execute/920501-3.c: Likewise. + * gcc.c-torture/execute/920501-4.c: Likewise. + * gcc.c-torture/execute/920501-5.c: Likewise. + * gcc.c-torture/execute/920501-6.c: Likewise. + * gcc.c-torture/execute/920501-8.c: Likewise. + * gcc.c-torture/execute/920506-1.c: Likewise. + * gcc.c-torture/execute/920604-1.c: Likewise. + * gcc.c-torture/execute/920612-2.c: Likewise. + * gcc.c-torture/execute/920618-1.c: Likewise. + * gcc.c-torture/execute/920625-1.c: Likewise. + * gcc.c-torture/execute/920710-1.c: Likewise. + * gcc.c-torture/execute/920721-1.c: Likewise. + * gcc.c-torture/execute/920721-4.c: Likewise. + * gcc.c-torture/execute/920726-1.c: Likewise. + * gcc.c-torture/execute/920829-1.c: Likewise. + * gcc.c-torture/execute/920908-1.c: Likewise. + * gcc.c-torture/execute/920922-1.c: Likewise. + * gcc.c-torture/execute/920929-1.c: Likewise. + * gcc.c-torture/execute/921006-1.c: Likewise. + * gcc.c-torture/execute/921007-1.c: Likewise. + * gcc.c-torture/execute/921016-1.c: Likewise. + * gcc.c-torture/execute/921019-1.c: Likewise. + * gcc.c-torture/execute/921019-2.c: Likewise. + * gcc.c-torture/execute/921029-1.c: Likewise. + * gcc.c-torture/execute/921104-1.c: Likewise. + * gcc.c-torture/execute/921112-1.c: Likewise. + * gcc.c-torture/execute/921113-1.c: Likewise. + * gcc.c-torture/execute/921117-1.c: Likewise. + * gcc.c-torture/execute/921123-2.c: Likewise. + * gcc.c-torture/execute/921202-2.c: Likewise. + * gcc.c-torture/execute/921204-1.c: Likewise. + * gcc.c-torture/execute/921208-1.c: Likewise. + * gcc.c-torture/execute/930123-1.c: Likewise. + * gcc.c-torture/execute/930126-1.c: Likewise. + * gcc.c-torture/execute/930406-1.c: Likewise. + * gcc.c-torture/execute/930408-1.c: Likewise. + * gcc.c-torture/execute/930429-1.c: Likewise. + * gcc.c-torture/execute/930603-2.c: Likewise. + * gcc.c-torture/execute/930608-1.c: Likewise. + * gcc.c-torture/execute/930614-1.c: Likewise. + * gcc.c-torture/execute/930614-2.c: Likewise. + * gcc.c-torture/execute/930622-2.c: Likewise. + * gcc.c-torture/execute/930628-1.c: Likewise. + * gcc.c-torture/execute/930725-1.c: Likewise. + * gcc.c-torture/execute/930930-2.c: Likewise. + * gcc.c-torture/execute/931002-1.c: Likewise. + * gcc.c-torture/execute/931004-1.c: Likewise. + * gcc.c-torture/execute/931004-10.c: Likewise. + * gcc.c-torture/execute/931004-11.c: Likewise. + * gcc.c-torture/execute/931004-12.c: Likewise. + * gcc.c-torture/execute/931004-13.c: Likewise. + * gcc.c-torture/execute/931004-14.c: Likewise. + * gcc.c-torture/execute/931004-2.c: Likewise. + * gcc.c-torture/execute/931004-3.c: Likewise. + * gcc.c-torture/execute/931004-4.c: Likewise. + * gcc.c-torture/execute/931004-5.c: Likewise. + * gcc.c-torture/execute/931004-6.c: Likewise. + * gcc.c-torture/execute/931004-7.c: Likewise. + * gcc.c-torture/execute/931004-8.c: Likewise. + * gcc.c-torture/execute/931004-9.c: Likewise. + * gcc.c-torture/execute/931005-1.c: Likewise. + * gcc.c-torture/execute/931110-1.c: Likewise. + * gcc.c-torture/execute/931110-2.c: Likewise. + * gcc.c-torture/execute/941014-1.c: Likewise. + * gcc.c-torture/execute/941015-1.c: Likewise. + * gcc.c-torture/execute/941021-1.c: Likewise. + * gcc.c-torture/execute/941025-1.c: Likewise. + * gcc.c-torture/execute/941031-1.c: Likewise. + * gcc.c-torture/execute/950221-1.c: Likewise. + * gcc.c-torture/execute/950426-2.c: Likewise. + * gcc.c-torture/execute/950503-1.c: Likewise. + * gcc.c-torture/execute/950511-1.c: Likewise. + * gcc.c-torture/execute/950607-1.c: Likewise. + * gcc.c-torture/execute/950607-2.c: Likewise. + * gcc.c-torture/execute/950612-1.c: Likewise. + * gcc.c-torture/execute/950628-1.c: Likewise. + * gcc.c-torture/execute/950704-1.c: Likewise. + * gcc.c-torture/execute/950706-1.c: Likewise. + * gcc.c-torture/execute/950710-1.c: Likewise. + * gcc.c-torture/execute/950714-1.c: Likewise. + * gcc.c-torture/execute/950809-1.c: Likewise. + * gcc.c-torture/execute/950906-1.c: Likewise. + * gcc.c-torture/execute/950915-1.c: Likewise. + * gcc.c-torture/execute/950929-1.c: Likewise. + * gcc.c-torture/execute/951003-1.c: Likewise. + * gcc.c-torture/execute/951115-1.c: Likewise. + * gcc.c-torture/execute/951204-1.c: Likewise. + * gcc.c-torture/execute/960116-1.c: Likewise. + * gcc.c-torture/execute/960117-1.c: Likewise. + * gcc.c-torture/execute/960209-1.c: Likewise. + * gcc.c-torture/execute/960215-1.c: Likewise. + * gcc.c-torture/execute/960219-1.c: Likewise. + * gcc.c-torture/execute/960301-1.c: Likewise. + * gcc.c-torture/execute/960302-1.c: Likewise. + * gcc.c-torture/execute/960311-1.c: Likewise. + * gcc.c-torture/execute/960311-2.c: Likewise. + * gcc.c-torture/execute/960311-3.c: Likewise. + * gcc.c-torture/execute/960312-1.c: Likewise. + * gcc.c-torture/execute/960317-1.c: Likewise. + * gcc.c-torture/execute/960321-1.c: Likewise. + * gcc.c-torture/execute/960326-1.c: Likewise. + * gcc.c-torture/execute/960327-1.c: Likewise. + * gcc.c-torture/execute/960405-1.c: Likewise. + * gcc.c-torture/execute/960416-1.c: Likewise. + * gcc.c-torture/execute/960419-1.c: Likewise. + * gcc.c-torture/execute/960419-2.c: Likewise. + * gcc.c-torture/execute/960512-1.c: Likewise. + * gcc.c-torture/execute/960513-1.c: Likewise. + * gcc.c-torture/execute/960608-1.c: Likewise. + * gcc.c-torture/execute/960801-1.c: Likewise. + * gcc.c-torture/execute/960802-1.c: Likewise. + * gcc.c-torture/execute/960909-1.c: Likewise. + * gcc.c-torture/execute/961004-1.c: Likewise. + * gcc.c-torture/execute/961017-1.c: Likewise. + * gcc.c-torture/execute/961017-2.c: Likewise. + * gcc.c-torture/execute/961026-1.c: Likewise. + * gcc.c-torture/execute/961122-1.c: Likewise. + * gcc.c-torture/execute/961122-2.c: Likewise. + * gcc.c-torture/execute/961125-1.c: Likewise. + * gcc.c-torture/execute/961206-1.c: Likewise. + * gcc.c-torture/execute/961213-1.c: Likewise. + * gcc.c-torture/execute/970214-1.c: Likewise. + * gcc.c-torture/execute/970214-2.c: Likewise. + * gcc.c-torture/execute/970217-1.c: Likewise. + * gcc.c-torture/execute/970923-1.c: Likewise. + * gcc.c-torture/execute/980205.c: Likewise. + * gcc.c-torture/execute/980223.c: Likewise. + * gcc.c-torture/execute/980424-1.c: Likewise. + * gcc.c-torture/execute/980505-1.c: Likewise. + * gcc.c-torture/execute/980505-2.c: Likewise. + * gcc.c-torture/execute/980506-1.c: Likewise. + * gcc.c-torture/execute/980506-2.c: Likewise. + * gcc.c-torture/execute/980506-3.c: Likewise. + * gcc.c-torture/execute/980526-1.c: Likewise. + * gcc.c-torture/execute/980526-2.c: Likewise. + * gcc.c-torture/execute/980526-3.c: Likewise. + * gcc.c-torture/execute/980602-1.c: Likewise. + * gcc.c-torture/execute/980602-2.c: Likewise. + * gcc.c-torture/execute/980604-1.c: Likewise. + * gcc.c-torture/execute/980605-1.c: Likewise. + * gcc.c-torture/execute/980612-1.c: Likewise. + * gcc.c-torture/execute/980617-1.c: Likewise. + * gcc.c-torture/execute/980618-1.c: Likewise. + * gcc.c-torture/execute/980701-1.c: Likewise. + * gcc.c-torture/execute/980709-1.c: Likewise. + * gcc.c-torture/execute/980716-1.c: Likewise. + * gcc.c-torture/execute/980929-1.c: Likewise. + * gcc.c-torture/execute/981001-1.c: Likewise. + * gcc.c-torture/execute/981019-1.c: Likewise. + * gcc.c-torture/execute/981130-1.c: Likewise. + * gcc.c-torture/execute/981206-1.c: Likewise. + * gcc.c-torture/execute/990106-2.c: Likewise. + * gcc.c-torture/execute/990117-1.c: Likewise. + * gcc.c-torture/execute/990128-1.c: Likewise. + * gcc.c-torture/execute/990130-1.c: Likewise. + * gcc.c-torture/execute/990208-1.c: Likewise. + * gcc.c-torture/execute/990222-1.c: Likewise. + * gcc.c-torture/execute/990324-1.c: Likewise. + * gcc.c-torture/execute/990326-1.c: Likewise. + * gcc.c-torture/execute/990404-1.c: Likewise. + * gcc.c-torture/execute/990513-1.c: Likewise. + * gcc.c-torture/execute/990524-1.c: Likewise. + * gcc.c-torture/execute/990525-1.c: Likewise. + * gcc.c-torture/execute/990525-2.c: Likewise. + * gcc.c-torture/execute/990527-1.c: Likewise. + * gcc.c-torture/execute/990531-1.c: Likewise. + * gcc.c-torture/execute/990604-1.c: Likewise. + * gcc.c-torture/execute/990804-1.c: Likewise. + * gcc.c-torture/execute/990811-1.c: Likewise. + * gcc.c-torture/execute/990826-0.c: Likewise. + * gcc.c-torture/execute/990827-1.c: Likewise. + * gcc.c-torture/execute/990829-1.c: Likewise. + * gcc.c-torture/execute/990923-1.c: Likewise. + * gcc.c-torture/execute/991014-1.c: Likewise. + * gcc.c-torture/execute/991016-1.c: Likewise. + * gcc.c-torture/execute/991019-1.c: Likewise. + * gcc.c-torture/execute/991023-1.c: Likewise. + * gcc.c-torture/execute/991030-1.c: Likewise. + * gcc.c-torture/execute/991112-1.c: Likewise. + * gcc.c-torture/execute/991118-1.c: Likewise. + * gcc.c-torture/execute/991201-1.c: Likewise. + * gcc.c-torture/execute/991202-1.c: Likewise. + * gcc.c-torture/execute/991202-2.c: Likewise. + * gcc.c-torture/execute/991202-3.c: Likewise. + * gcc.c-torture/execute/991216-1.c: Likewise. + * gcc.c-torture/execute/991216-2.c: Likewise. + * gcc.c-torture/execute/991216-4.c: Likewise. + * gcc.c-torture/execute/991221-1.c: Likewise. + * gcc.c-torture/execute/991227-1.c: Likewise. + * gcc.c-torture/execute/991228-1.c: Likewise. + * gcc.c-torture/execute/align-1.c: Likewise. + * gcc.c-torture/execute/align-2.c: Likewise. + * gcc.c-torture/execute/align-3.c: Likewise. + * gcc.c-torture/execute/alloca-1.c: Likewise. + * gcc.c-torture/execute/anon-1.c: Likewise. + * gcc.c-torture/execute/arith-1.c: Likewise. + * gcc.c-torture/execute/arith-rand-ll.c: Likewise. + * gcc.c-torture/execute/arith-rand.c: Likewise. + * gcc.c-torture/execute/bf-layout-1.c: Likewise. + * gcc.c-torture/execute/bf-pack-1.c: Likewise. + * gcc.c-torture/execute/bf-sign-1.c: Likewise. + * gcc.c-torture/execute/bf-sign-2.c: Likewise. + * gcc.c-torture/execute/bf64-1.c: Likewise. + * gcc.c-torture/execute/builtin-constant.c: Likewise. + * gcc.c-torture/execute/builtin-prefetch-1.c: Likewise. + * gcc.c-torture/execute/builtin-prefetch-2.c: Likewise. + * gcc.c-torture/execute/builtin-prefetch-3.c: Likewise. + * gcc.c-torture/execute/builtin-prefetch-4.c: Likewise. + * gcc.c-torture/execute/builtin-prefetch-5.c: Likewise. + * gcc.c-torture/execute/builtin-prefetch-6.c: Likewise. + * gcc.c-torture/execute/builtin-types-compatible-p.c: Likewise. + * gcc.c-torture/execute/cbrt.c: Likewise. + * gcc.c-torture/execute/complex-1.c: Likewise. + * gcc.c-torture/execute/complex-2.c: Likewise. + * gcc.c-torture/execute/complex-3.c: Likewise. + * gcc.c-torture/execute/complex-4.c: Likewise. + * gcc.c-torture/execute/complex-5.c: Likewise. + * gcc.c-torture/execute/compndlit-1.c: Likewise. + * gcc.c-torture/execute/conversion.c: Likewise. + * gcc.c-torture/execute/cvt-1.c: Likewise. + * gcc.c-torture/execute/divconst-1.c: Likewise. + * gcc.c-torture/execute/divconst-2.c: Likewise. + * gcc.c-torture/execute/divconst-3.c: Likewise. + * gcc.c-torture/execute/enum-1.c: Likewise. + * gcc.c-torture/execute/enum-2.c: Likewise. + * gcc.c-torture/execute/extzvsi.c: Likewise. + * gcc.c-torture/execute/frame-address.c: Likewise. + * gcc.c-torture/execute/func-ptr-1.c: Likewise. + * gcc.c-torture/execute/gofast.c: Likewise. + * gcc.c-torture/execute/ieee/20000320-1.c: Likewise. + * gcc.c-torture/execute/ieee/20001122-1.c: Likewise. + * gcc.c-torture/execute/ieee/20010226-1.c: Likewise. + * gcc.c-torture/execute/ieee/20011123-1.c: Likewise. + * gcc.c-torture/execute/ieee/920518-1.c: Likewise. + * gcc.c-torture/execute/ieee/920810-1.c: Likewise. + * gcc.c-torture/execute/ieee/930529-1.c: Likewise. + * gcc.c-torture/execute/ieee/980619-1.c: Likewise. + * gcc.c-torture/execute/ieee/acc1.c: Likewise. + * gcc.c-torture/execute/ieee/acc2.c: Likewise. + * gcc.c-torture/execute/ieee/fp-cmp-1.c: Likewise. + * gcc.c-torture/execute/ieee/fp-cmp-2.c: Likewise. + * gcc.c-torture/execute/ieee/fp-cmp-3.c: Likewise. + * gcc.c-torture/execute/ieee/fp-cmp-4.c: Likewise. + * gcc.c-torture/execute/ieee/fp-cmp-5.c: Likewise. + * gcc.c-torture/execute/ieee/fp-cmp-6.c: Likewise. + * gcc.c-torture/execute/ieee/fp-cmp-8.c: Likewise. + * gcc.c-torture/execute/ieee/fp-cmp-9.c: Likewise. + * gcc.c-torture/execute/ieee/hugeval.c: Likewise. + * gcc.c-torture/execute/ieee/minuszero.c: Likewise. + * gcc.c-torture/execute/ieee/mul-subnormal-single-1.c: Likewise. + * gcc.c-torture/execute/ieee/mzero2.c: Likewise. + * gcc.c-torture/execute/ieee/mzero3.c: Likewise. + * gcc.c-torture/execute/ieee/mzero5.c: Likewise. + * gcc.c-torture/execute/ieee/mzero6.c: Likewise. + * gcc.c-torture/execute/ieee/pr28634.c: Likewise. + * gcc.c-torture/execute/ieee/rbug.c: Likewise. + * gcc.c-torture/execute/index-1.c: Likewise. + * gcc.c-torture/execute/longlong.c: Likewise. + * gcc.c-torture/execute/loop-1.c: Likewise. + * gcc.c-torture/execute/loop-10.c: Likewise. + * gcc.c-torture/execute/loop-11.c: Likewise. + * gcc.c-torture/execute/loop-13.c: Likewise. + * gcc.c-torture/execute/loop-14.c: Likewise. + * gcc.c-torture/execute/loop-15.c: Likewise. + * gcc.c-torture/execute/loop-2b.c: Likewise. + * gcc.c-torture/execute/loop-2e.c: Likewise. + * gcc.c-torture/execute/loop-4.c: Likewise. + * gcc.c-torture/execute/loop-4b.c: Likewise. + * gcc.c-torture/execute/loop-5.c: Likewise. + * gcc.c-torture/execute/loop-6.c: Likewise. + * gcc.c-torture/execute/loop-7.c: Likewise. + * gcc.c-torture/execute/loop-8.c: Likewise. + * gcc.c-torture/execute/memcpy-1.c: Likewise. + * gcc.c-torture/execute/memcpy-2.c: Likewise. + * gcc.c-torture/execute/memcpy-bi.c: Likewise. + * gcc.c-torture/execute/memset-1.c: Likewise. + * gcc.c-torture/execute/memset-2.c: Likewise. + * gcc.c-torture/execute/memset-3.c: Likewise. + * gcc.c-torture/execute/multdi-1.c: Likewise. + * gcc.c-torture/execute/multi-ix.c: Likewise. + * gcc.c-torture/execute/nest-stdar-1.c: Likewise. + * gcc.c-torture/execute/nestfunc-1.c: Likewise. + * gcc.c-torture/execute/nestfunc-2.c: Likewise. + * gcc.c-torture/execute/nestfunc-3.c: Likewise. + * gcc.c-torture/execute/nestfunc-4.c: Likewise. + * gcc.c-torture/execute/packed-1.c: Likewise. + * gcc.c-torture/execute/pending-4.c: Likewise. + * gcc.c-torture/execute/pr15262-1.c: Likewise. + * gcc.c-torture/execute/pr15262-2.c: Likewise. + * gcc.c-torture/execute/pr15262.c: Likewise. + * gcc.c-torture/execute/pr15296.c: Likewise. + * gcc.c-torture/execute/pr17252.c: Likewise. + * gcc.c-torture/execute/pr17377.c: Likewise. + * gcc.c-torture/execute/pr19606.c: Likewise. + * gcc.c-torture/execute/pr21964-1.c: Likewise. + * gcc.c-torture/execute/pr22061-2.c: Likewise. + * gcc.c-torture/execute/pr22061-3.c: Likewise. + * gcc.c-torture/execute/pr22061-4.c: Likewise. + * gcc.c-torture/execute/pr23467.c: Likewise. + * gcc.c-torture/execute/pr27073.c: Likewise. + * gcc.c-torture/execute/pr27364.c: Likewise. + * gcc.c-torture/execute/pr28403.c: Likewise. + * gcc.c-torture/execute/pr31605.c: Likewise. + * gcc.c-torture/execute/pr38969.c: Likewise. + * gcc.c-torture/execute/pr40657.c: Likewise. + * gcc.c-torture/execute/pr44575.c: Likewise. + * gcc.c-torture/execute/pr56799.c: Likewise. + * gcc.c-torture/execute/pr58640.c: Likewise. + * gcc.c-torture/execute/pr71335.c: Likewise. + * gcc.c-torture/execute/ptr-arith-1.c: Likewise. + * gcc.c-torture/execute/regstack-1.c: Likewise. + * gcc.c-torture/execute/scope-1.c: Likewise. + * gcc.c-torture/execute/simd-1.c: Likewise. + * gcc.c-torture/execute/simd-2.c: Likewise. + * gcc.c-torture/execute/simd-4.c: Likewise. + * gcc.c-torture/execute/simd-5.c: Likewise. + * gcc.c-torture/execute/strcmp-1.c: Likewise. + * gcc.c-torture/execute/strcpy-1.c: Likewise. + * gcc.c-torture/execute/strct-pack-1.c: Likewise. + * gcc.c-torture/execute/strct-pack-2.c: Likewise. + * gcc.c-torture/execute/strct-pack-4.c: Likewise. + * gcc.c-torture/execute/strct-stdarg-1.c: Likewise. + * gcc.c-torture/execute/strct-varg-1.c: Likewise. + * gcc.c-torture/execute/strlen-1.c: Likewise. + * gcc.c-torture/execute/strncmp-1.c: Likewise. + * gcc.c-torture/execute/struct-ini-1.c: Likewise. + * gcc.c-torture/execute/struct-ini-2.c: Likewise. + * gcc.c-torture/execute/struct-ini-3.c: Likewise. + * gcc.c-torture/execute/struct-ini-4.c: Likewise. + * gcc.c-torture/execute/struct-ret-1.c: Likewise. + * gcc.c-torture/execute/struct-ret-2.c: Likewise. + * gcc.c-torture/execute/usmul.c: Likewise. + * gcc.c-torture/execute/va-arg-1.c: Likewise. + * gcc.c-torture/execute/va-arg-10.c: Likewise. + * gcc.c-torture/execute/va-arg-11.c: Likewise. + * gcc.c-torture/execute/va-arg-12.c: Likewise. + * gcc.c-torture/execute/va-arg-13.c: Likewise. + * gcc.c-torture/execute/va-arg-14.c: Likewise. + * gcc.c-torture/execute/va-arg-15.c: Likewise. + * gcc.c-torture/execute/va-arg-16.c: Likewise. + * gcc.c-torture/execute/va-arg-17.c: Likewise. + * gcc.c-torture/execute/va-arg-18.c: Likewise. + * gcc.c-torture/execute/va-arg-19.c: Likewise. + * gcc.c-torture/execute/va-arg-2.c: Likewise. + * gcc.c-torture/execute/va-arg-20.c: Likewise. + * gcc.c-torture/execute/va-arg-23.c: Likewise. + * gcc.c-torture/execute/va-arg-26.c: Likewise. + * gcc.c-torture/execute/va-arg-4.c: Likewise. + * gcc.c-torture/execute/va-arg-5.c: Likewise. + * gcc.c-torture/execute/va-arg-6.c: Likewise. + * gcc.c-torture/execute/va-arg-9.c: Likewise. + * gcc.c-torture/execute/widechar-1.c: Likewise. + * gcc.c-torture/execute/widechar-2.c: Likewise. + +2023-11-13 Florian Weimer + + * gcc.c-torture/compile/386.c: Compile with -std=gnu89. + * gcc.c-torture/compile/BUG1.c: Likewise. + * gcc.c-torture/compile/BUG11.c: Likewise. + * gcc.c-torture/compile/BUG16.c: Likewise. + * gcc.c-torture/compile/BUG2.c: Likewise. + * gcc.c-torture/compile/BUG24.c: Likewise. + * gcc.c-torture/compile/BUG25.c: Likewise. + * gcc.c-torture/compile/BUG3.c: Likewise. + * gcc.c-torture/compile/DFcmp.c: Likewise. + * gcc.c-torture/compile/HIcmp.c: Likewise. + * gcc.c-torture/compile/HIset.c: Likewise. + * gcc.c-torture/compile/QIcmp.c: Likewise. + * gcc.c-torture/compile/QIset.c: Likewise. + * gcc.c-torture/compile/SFset.c: Likewise. + * gcc.c-torture/compile/SIcmp.c: Likewise. + * gcc.c-torture/compile/SIset.c: Likewise. + * gcc.c-torture/compile/UHIcmp.c: Likewise. + * gcc.c-torture/compile/UQIcmp.c: Likewise. + * gcc.c-torture/compile/USIcmp.c: Likewise. + * gcc.c-torture/compile/a.c: Likewise. + * gcc.c-torture/compile/a1.c: Likewise. + * gcc.c-torture/compile/a3.c: Likewise. + * gcc.c-torture/compile/aa.c: Likewise. + * gcc.c-torture/compile/aaa.c: Likewise. + * gcc.c-torture/compile/abs.c: Likewise. + * gcc.c-torture/compile/ac.c: Likewise. + * gcc.c-torture/compile/acc.c: Likewise. + * gcc.c-torture/compile/add.c: Likewise. + * gcc.c-torture/compile/add386.c: Likewise. + * gcc.c-torture/compile/addcc.c: Likewise. + * gcc.c-torture/compile/andm.c: Likewise. + * gcc.c-torture/compile/andmem.c: Likewise. + * gcc.c-torture/compile/andn.c: Likewise. + * gcc.c-torture/compile/andok.c: Likewise. + * gcc.c-torture/compile/andsi.c: Likewise. + * gcc.c-torture/compile/andsparc.c: Likewise. + * gcc.c-torture/compile/aos.c: Likewise. + * gcc.c-torture/compile/arr.c: Likewise. + * gcc.c-torture/compile/as.c: Likewise. + * gcc.c-torture/compile/ase.c: Likewise. + * gcc.c-torture/compile/band.c: Likewise. + * gcc.c-torture/compile/bb0.c: Likewise. + * gcc.c-torture/compile/bb1.c: Likewise. + * gcc.c-torture/compile/bc.c: Likewise. + * gcc.c-torture/compile/bcopy.c: Likewise. + * gcc.c-torture/compile/bfx.c: Likewise. + * gcc.c-torture/compile/bge.c: Likewise. + * gcc.c-torture/compile/bit.c: Likewise. + * gcc.c-torture/compile/bitf.c: Likewise. + * gcc.c-torture/compile/bitw.c: Likewise. + * gcc.c-torture/compile/blk.c: Likewise. + * gcc.c-torture/compile/bt386.c: Likewise. + * gcc.c-torture/compile/bug.c: Likewise. + * gcc.c-torture/compile/buns.c: Likewise. + * gcc.c-torture/compile/c.c: Likewise. + * gcc.c-torture/compile/c2.c: Likewise. + * gcc.c-torture/compile/call.c: Likewise. + * gcc.c-torture/compile/callind.c: Likewise. + * gcc.c-torture/compile/calls-void.c: Likewise. + * gcc.c-torture/compile/calls.c: Likewise. + * gcc.c-torture/compile/cc.c: Likewise. + * gcc.c-torture/compile/cmb.c: Likewise. + * gcc.c-torture/compile/cmpsi386.c: Likewise. + * gcc.c-torture/compile/cmul.c: Likewise. + * gcc.c-torture/compile/comb.c: Likewise. + * gcc.c-torture/compile/consec.c: Likewise. + * gcc.c-torture/compile/const.c: Likewise. + * gcc.c-torture/compile/conv_tst.c: Likewise. + * gcc.c-torture/compile/cvt.c: Likewise. + * gcc.c-torture/compile/dbl_parm.c: Likewise. + * gcc.c-torture/compile/dblbug.c: Likewise. + * gcc.c-torture/compile/dead.c: Likewise. + * gcc.c-torture/compile/delay.c: Likewise. + * gcc.c-torture/compile/di.c: Likewise. + * gcc.c-torture/compile/div.c: Likewise. + * gcc.c-torture/compile/dm.c: Likewise. + * gcc.c-torture/compile/dshift.c: Likewise. + * gcc.c-torture/compile/e.c: Likewise. + * gcc.c-torture/compile/ex.c: Likewise. + * gcc.c-torture/compile/ext.c: Likewise. + * gcc.c-torture/compile/flo.c: Likewise. + * gcc.c-torture/compile/forgetcc.c: Likewise. + * gcc.c-torture/compile/g.c: Likewise. + * gcc.c-torture/compile/gen_tst.c: Likewise. + * gcc.c-torture/compile/gronk.c: Likewise. + * gcc.c-torture/compile/hi.c: Likewise. + * gcc.c-torture/compile/i.c: Likewise. + * gcc.c-torture/compile/icmp.c: Likewise. + * gcc.c-torture/compile/ifreg.c: Likewise. + * gcc.c-torture/compile/jumptab.c: Likewise. + * gcc.c-torture/compile/l.c: Likewise. + * gcc.c-torture/compile/layout.c: Likewise. + * gcc.c-torture/compile/lll.c: Likewise. + * gcc.c-torture/compile/load8.c: Likewise. + * gcc.c-torture/compile/loadhicc.c: Likewise. + * gcc.c-torture/compile/log2.c: Likewise. + * gcc.c-torture/compile/logic.c: Likewise. + * gcc.c-torture/compile/loop-1.c: Likewise. + * gcc.c-torture/compile/loop386.c: Likewise. + * gcc.c-torture/compile/lop.c: Likewise. + * gcc.c-torture/compile/m1.c: Likewise. + * gcc.c-torture/compile/m5.c: Likewise. + * gcc.c-torture/compile/m68.c: Likewise. + * gcc.c-torture/compile/mbyte.c: Likewise. + * gcc.c-torture/compile/mcmp.c: Likewise. + * gcc.c-torture/compile/mm.c: Likewise. + * gcc.c-torture/compile/mod.c: Likewise. + * gcc.c-torture/compile/modcc.c: Likewise. + * gcc.c-torture/compile/move.c: Likewise. + * gcc.c-torture/compile/move_qhi.c: Likewise. + * gcc.c-torture/compile/mregtst.c: Likewise. + * gcc.c-torture/compile/mu.c: Likewise. + * gcc.c-torture/compile/mword.c: Likewise. + * gcc.c-torture/compile/n.c: Likewise. + * gcc.c-torture/compile/n1.c: Likewise. + * gcc.c-torture/compile/nand.c: Likewise. + * gcc.c-torture/compile/neg.c: Likewise. + * gcc.c-torture/compile/o.c: Likewise. + * gcc.c-torture/compile/omit.c: Likewise. + * gcc.c-torture/compile/opout.c: Likewise. + * gcc.c-torture/compile/opt.c: Likewise. + * gcc.c-torture/compile/or.c: Likewise. + * gcc.c-torture/compile/or386.c: Likewise. + * gcc.c-torture/compile/p.c: Likewise. + * gcc.c-torture/compile/parms.c: Likewise. + * gcc.c-torture/compile/pass.c: Likewise. + * gcc.c-torture/compile/pp.c: Likewise. + * gcc.c-torture/compile/pret-arg.c: Likewise. + * gcc.c-torture/compile/pyr.c: Likewise. + * gcc.c-torture/compile/pyr2.c: Likewise. + * gcc.c-torture/compile/r.c: Likewise. + * gcc.c-torture/compile/r1.c: Likewise. + * gcc.c-torture/compile/rmsc.c: Likewise. + * gcc.c-torture/compile/round.c: Likewise. + * gcc.c-torture/compile/sc.c: Likewise. + * gcc.c-torture/compile/scal.c: Likewise. + * gcc.c-torture/compile/scc.c: Likewise. + * gcc.c-torture/compile/scond.c: Likewise. + * gcc.c-torture/compile/seq.c: Likewise. + * gcc.c-torture/compile/set386.c: Likewise. + * gcc.c-torture/compile/set88.c: Likewise. + * gcc.c-torture/compile/sh.c: Likewise. + * gcc.c-torture/compile/shand.c: Likewise. + * gcc.c-torture/compile/shft.c: Likewise. + * gcc.c-torture/compile/shift.c: Likewise. + * gcc.c-torture/compile/signext.c: Likewise. + * gcc.c-torture/compile/signext2.c: Likewise. + * gcc.c-torture/compile/simple.c: Likewise. + * gcc.c-torture/compile/sparcbug.c: Likewise. + * gcc.c-torture/compile/stor.c: Likewise. + * gcc.c-torture/compile/str.c: Likewise. + * gcc.c-torture/compile/structret.c: Likewise. + * gcc.c-torture/compile/sub32.c: Likewise. + * gcc.c-torture/compile/subcc.c: Likewise. + * gcc.c-torture/compile/subcse.c: Likewise. + * gcc.c-torture/compile/sym.c: Likewise. + * gcc.c-torture/compile/symconst.c: Likewise. + * gcc.c-torture/compile/t.c: Likewise. + * gcc.c-torture/compile/test-flow.c: Likewise. + * gcc.c-torture/compile/test-loop.c: Likewise. + * gcc.c-torture/compile/test.c: Likewise. + * gcc.c-torture/compile/tmp.c: Likewise. + * gcc.c-torture/compile/trivial.c: Likewise. + * gcc.c-torture/compile/trunc.c: Likewise. + * gcc.c-torture/compile/u.c: Likewise. + * gcc.c-torture/compile/uns.c: Likewise. + * gcc.c-torture/compile/uns_tst.c: Likewise. + * gcc.c-torture/compile/uuarg.c: Likewise. + * gcc.c-torture/compile/volatile-1.c: Likewise. + * gcc.c-torture/compile/ww.c: Likewise. + * gcc.c-torture/compile/x.c: Likewise. + * gcc.c-torture/compile/xb.c: Likewise. + * gcc.c-torture/compile/xc.c: Likewise. + * gcc.c-torture/compile/xdi.c: Likewise. + * gcc.c-torture/compile/xfoo.c: Likewise. + * gcc.c-torture/compile/xi.c: Likewise. + * gcc.c-torture/compile/xlop.c: Likewise. + * gcc.c-torture/compile/xneg.c: Likewise. + * gcc.c-torture/compile/xopt.c: Likewise. + * gcc.c-torture/compile/xor.c: Likewise. + * gcc.c-torture/compile/xorn.c: Likewise. + * gcc.c-torture/compile/xp.c: Likewise. + * gcc.c-torture/compile/xpp.c: Likewise. + * gcc.c-torture/compile/xs.c: Likewise. + * gcc.c-torture/compile/xsh.c: Likewise. + * gcc.c-torture/compile/xzz.c: Likewise. + * gcc.c-torture/compile/zero-strct-1.c: Likewise. + * gcc.c-torture/execute/20000717-3.c: Likewise. + * gcc.c-torture/execute/920409-1.c: Likewise. + * gcc.c-torture/execute/920411-1.c: Likewise. + * gcc.c-torture/execute/920415-1.c: Likewise. + * gcc.c-torture/execute/920428-1.c: Likewise. + * gcc.c-torture/execute/920428-2.c: Likewise. + * gcc.c-torture/execute/920429-1.c: Likewise. + * gcc.c-torture/execute/920501-1.c: Likewise. + * gcc.c-torture/execute/920501-7.c: Likewise. + * gcc.c-torture/execute/920501-9.c: Likewise. + * gcc.c-torture/execute/920520-1.c: Likewise. + * gcc.c-torture/execute/920603-1.c: Likewise. + * gcc.c-torture/execute/920721-2.c: Likewise. + * gcc.c-torture/execute/920721-3.c: Likewise. + * gcc.c-torture/execute/920728-1.c: Likewise. + * gcc.c-torture/execute/920730-1.c: Likewise. + * gcc.c-torture/execute/920731-1.c: Likewise. + * gcc.c-torture/execute/920812-1.c: Likewise. + * gcc.c-torture/execute/920909-1.c: Likewise. + * gcc.c-torture/execute/921013-1.c: Likewise. + * gcc.c-torture/execute/921017-1.c: Likewise. + * gcc.c-torture/execute/921123-1.c: Likewise. + * gcc.c-torture/execute/921124-1.c: Likewise. + * gcc.c-torture/execute/921202-1.c: Likewise. + * gcc.c-torture/execute/921207-1.c: Likewise. + * gcc.c-torture/execute/921208-2.c: Likewise. + * gcc.c-torture/execute/921215-1.c: Likewise. + * gcc.c-torture/execute/921218-1.c: Likewise. + * gcc.c-torture/execute/921218-2.c: Likewise. + * gcc.c-torture/execute/930106-1.c: Likewise. + * gcc.c-torture/execute/930429-2.c: Likewise. + * gcc.c-torture/execute/930513-1.c: Likewise. + * gcc.c-torture/execute/930513-2.c: Likewise. + * gcc.c-torture/execute/930518-1.c: Likewise. + * gcc.c-torture/execute/930527-1.c: Likewise. + * gcc.c-torture/execute/930603-1.c: Likewise. + * gcc.c-torture/execute/930603-3.c: Likewise. + * gcc.c-torture/execute/930621-1.c: Likewise. + * gcc.c-torture/execute/930622-1.c: Likewise. + * gcc.c-torture/execute/930630-1.c: Likewise. + * gcc.c-torture/execute/930713-1.c: Likewise. + * gcc.c-torture/execute/930718-1.c: Likewise. + * gcc.c-torture/execute/930719-1.c: Likewise. + * gcc.c-torture/execute/930916-1.c: Likewise. + * gcc.c-torture/execute/930921-1.c: Likewise. + * gcc.c-torture/execute/930929-1.c: Likewise. + * gcc.c-torture/execute/930930-1.c: Likewise. + * gcc.c-torture/execute/931009-1.c: Likewise. + * gcc.c-torture/execute/931012-1.c: Likewise. + * gcc.c-torture/execute/931031-1.c: Likewise. + * gcc.c-torture/execute/931102-1.c: Likewise. + * gcc.c-torture/execute/931102-2.c: Likewise. + * gcc.c-torture/execute/931228-1.c: Likewise. + * gcc.c-torture/execute/940115-1.c: Likewise. + * gcc.c-torture/execute/940122-1.c: Likewise. + * gcc.c-torture/execute/941202-1.c: Likewise. + * gcc.c-torture/execute/950605-1.c: Likewise. + * gcc.c-torture/execute/960830-1.c: Likewise. + * gcc.c-torture/execute/961112-1.c: Likewise. + * gcc.c-torture/execute/990106-1.c: Likewise. + * gcc.c-torture/execute/cmpdi-1.c: Likewise. + * gcc.c-torture/execute/comp-goto-2.c: Likewise. + * gcc.c-torture/execute/dbra-1.c: Likewise. + * gcc.c-torture/execute/inst-check.c: Likewise. + * gcc.c-torture/execute/int-compare.c: Likewise. + * gcc.c-torture/execute/loop-2.c: Likewise. + * gcc.c-torture/execute/loop-2d.c: Likewise. + * gcc.c-torture/execute/loop-3.c: Likewise. + * gcc.c-torture/execute/loop-3b.c: Likewise. + * gcc.c-torture/execute/loop-3c.c: Likewise. + * gcc.c-torture/execute/mod-1.c: Likewise. + * gcc.c-torture/execute/strct-pack-3.c: Likewise. + * gcc.c-torture/execute/tstdi-1.c: Likewise. + +2023-11-13 Florian Weimer + + * gcc.c-torture/compile/BUG17.c (main): Add missing int + return type and missing void type. + * gcc.c-torture/compile/BUG18.c (main): Likewise. Call + __builtin_printf instead of printf. + * gcc.c-torture/compile/BUG21.c (Nase): Add missing void + types. + * gcc.c-torture/compile/BUG23.c (main): Add missing int + return type and missing void type. + * gcc.c-torture/compile/BUG5.c (bar): Call + __builtin_printf instead of printf. + * gcc.c-torture/compile/BUG6.c (main): Likewise. Add missing + int return type and missing void type. + * gcc.c-torture/compile/b.c (main): Add missing int + return type and missing void type. + * gcc.c-torture/compile/b1.c (main): Likewise. Call + __builtin_printf instead of printf. + * gcc.c-torture/compile/b88.c (main): Add missing int + return type and missing void type. + * gcc.c-torture/compile/bbb.c (flset): Add missing void + return type and switch to prototype style. + * gcc.c-torture/compile/bf.c (clr, atoi): Declare. + (main): Add missing int return type. Call + __builtin_printf instead of printf. + * gcc.c-torture/compile/bt.c (main): Add missing int + return type and missing void type. + * gcc.c-torture/compile/charmtst.c (foo, bar): Declare. + (c_move_tst): Add missing int return type. + * gcc.c-torture/compile/cmpdi-1.c (f, g): Add missing int + return type. + * gcc.c-torture/compile/cmphi.c (foo): Likewise. + * gcc.c-torture/compile/conv.c (main): Likewise. Add missing + void type. Call __builtin_printf instead of printf. + * gcc.c-torture/compile/ddd.c (main): Add missing int + return type and missing void type. + * gcc.c-torture/compile/dilayout.c (str, ll): Add missing + void return type. + * gcc.c-torture/compile/dimove.c (foo): Likewise. + * gcc.c-torture/compile/f2.c (foo): Likewise. + * gcc.c-torture/compile/flatten.c (main): Add missing int + return type and missing void type. + * gcc.c-torture/compile/fnul.c (main): Likewise. + Call __builtin_printf instead of printf. + * gcc.c-torture/compile/fq.c (expand_to_ascii): Add missing + void return type. + * gcc.c-torture/compile/funcptr-1.c (g): Call __builtin_printf + instead of printf. + (f): Likewise. Add missing void types. + * gcc.c-torture/compile/glob.c (foo): Add missing void types. + * gcc.c-torture/compile/goto-1.c (f): Likewise. + * gcc.c-torture/compile/i++.c (main): Call __builtin_printf + instead of printf. + * gcc.c-torture/compile/ic.c (foo): Add missing int return + type. + * gcc.c-torture/compile/iftrap-1.c (bar, baz): Declare. + (f4, f6): Call __builtin_abort instead of abort. + * gcc.c-torture/compile/iftrap-2.c (bar): Declare. + * gcc.c-torture/compile/jmp.c (foo): Add missing int types. + * gcc.c-torture/compile/labels-1.c (f): Add missing int + return type and missing void type. Call __builtin_abort + instead of abort. + * gcc.c-torture/compile/labels-2.c (f): Likewise. + * gcc.c-torture/compile/lbug.c (main): Add missing int + return type and missing void type. + * gcc.c-torture/compile/memtst.c (memtst): Add missing void + return type. + (main): Add missing int return type and missing void type. + Call __builtin_bzero instead of bzero. + * gcc.c-torture/compile/miscomp.c (main): Add missing int + return type and missing void type. Call __builtin_printf + instead of printf. + * gcc.c-torture/compile/msp.c (bar): Declare. + (foo): Add missing void types. + * gcc.c-torture/compile/mtst.c (foo): Add missing int return + type. + * gcc.c-torture/compile/packed-1.c (f): Add missing void + types. + * gcc.c-torture/compile/pr17119.c (func1, func2): Declare. + * gcc.c-torture/compile/pr18712.c (foo, foo1): Declare. + * gcc.c-torture/compile/pr20412.c (bar1, bar2, bar3): Declare. + * gcc.c-torture/compile/pr21532.c (foo): Declare. + * gcc.c-torture/compile/pr22398.c (main): Call __builtin_exit + instead of exit. + * gcc.c-torture/compile/pr24883.c (orec_str_list): Add missing + void return type. + * gcc.c-torture/compile/pr25311.c (use): Declare. + * gcc.c-torture/compile/pr25514.c (foo): Declare. + * gcc.c-torture/compile/pr26425.c (key_put): Declare. + * gcc.c-torture/compile/pr27087.c (g): Declare. + * gcc.c-torture/compile/pr27282.c (colrow_equal): Add missing + int return type. + * gcc.c-torture/compile/pr27907.c (fann_run): Add missing + void return type. + * gcc.c-torture/compile/pr28489.c (c_compile): Likewise. + * gcc.c-torture/compile/pr28776-1.c + (tree_contains_struct_check_failed): Declare. + * gcc.c-torture/compile/pr29128.c (process_main): Add missing + void return type. + * gcc.c-torture/compile/pr29945.c (unget_char): Declare. + (main) Add missing void return type. + * gcc.c-torture/compile/pr33382.c (show_configuration): Add + missing int types. + * gcc.c-torture/compile/pr36141.c (ffi_prep_closure_loc): Add + missing return type. + * gcc.c-torture/compile/pr36988.c (__writel): Declare. + * gcc.c-torture/compile/pr37026.c (foo): Declare. + * gcc.c-torture/compile/pr37285.c (_bfd_abort): Declare. + (_bfd_xcoff_canonicalize_dynamic_reloc): Add missing void + return type. + * gcc.c-torture/compile/pr38554.c (applyFunction): Add missing + void return type. + * gcc.c-torture/compile/pr42164.c (swp_offset, __BUG_ON): + Declare. + * gcc.c-torture/compile/pr44788.c (foo): Declare. + * gcc.c-torture/compile/pr47364-1.c (arc4_init): Add missing + void return type. + * gcc.c-torture/compile/pr48596.c (_nrrdCenter): Declare. + * gcc.c-torture/compile/rel.c (foo): Add missing int return + type. + * gcc.c-torture/compile/run.c (main): Likewise. Add missing + void type. + * gcc.c-torture/compile/sar.c (main): Likewise. + * gcc.c-torture/compile/selfrec.c (foo): Add missing int + parameter type. + * gcc.c-torture/compile/shloop.c (main): Add missing int + return type and missing void type. + * gcc.c-torture/compile/shm.c (foo): Add missing int return + type. + * gcc.c-torture/compile/sim.c (main): Likewise. Add missing + void type. + * gcc.c-torture/compile/simd-5.c (main): Add missing int + return type and missing void type. Call __builtin_printf + instead of printf. + * gcc.c-torture/compile/sne.c (foo): Add missing int return + type. + * gcc.c-torture/compile/sound.c (write): Declare. + (main): Add missing int return type and missing void type. + * gcc.c-torture/compile/speed.c (main): Likewise. + * gcc.c-torture/compile/store0.c (foo): Add missing void + return type. + * gcc.c-torture/compile/storecc.c (foo): Add missing int + return type. + * gcc.c-torture/compile/strcpy-1.c (rezero): Add missing + void types. + * gcc.c-torture/compile/stru.c (foo): Add missing void return + type. + * gcc.c-torture/compile/stuct.c (main): Add missing int return + type and missing void type. + * gcc.c-torture/compile/time.c (main): Likewise. + * gcc.c-torture/compile/unalign-1.c (f): Declare. + * gcc.c-torture/compile/v.c (main): Add missing int return + type. + * gcc.c-torture/compile/xcsebug.c (foo): Add missing void + types. + * gcc.c-torture/compile/xmtst.c (p2, p3, p4): Add missing + int return type. + * gcc.c-torture/compile/xz.c (foo): Add missing void return + type. + * gcc.c-torture/execute/loop-2f.c (f): Add missing void + return type. + (main): Return instead of calling exit. Call __builtin_abort + instead of abort. + * gcc.c-torture/execute/loop-2g.c (f): Add missing void + return type. + (main): Return instead of calling exit. Call __builtin_abort + instead of abort. + * gcc.dg/20020206-1.c: Build without -w. + (main): Call __builtin_abort instead of abort and + __builtin_exit instead of exit. + * gcc.dg/ipa/20040703-wpa.c (main): Call __builtin_abort + instead of abort and __builtin_exit instead of exit. + * gcc.dg/torture/pr84528.c (main): Add missing int and void + types. Call __builtin_abort instead of abort, and + __builtin_exit instead of exit. + * gcc.dg/tree-ssa/pr68619-2.c (vector_type_mode, real_inf): + Declare. + * gcc.dg/tree-ssa/pr68619-3.c (iterative_hash): Declare. + (e_hash): Call __builtin_abort instead of abort. + * gcc.dg/tree-ssa/pr68619-4.c (rhs_regno, foop, arf): Declare. + * gcc.dg/tree-ssa/pr68619-5.c (invert_tree_comparison) + (vector_type_mode): Declare. + * gcc.dg/tree-ssa/pr69270-2.c (arf, gimple_debug_bind_p) + (gimple_bb, gimple_assign_rhs_to_tree) + (is_gimple_min_invariant, unshare_expr): Declare. + * gcc.dg/tree-ssa/pr69270-3.c: (end_imm_use_stmt_p) + (next_imm_use_stmt, arf, boo, update_stmt): Declare. + * gcc.dg/tree-ssa/ranger-threader-2.c (gimple_call_arg): + Declare. + (gimple_op): Call __builtin_abort instead of abort. + * gcc.dg/tree-ssa/ranger-threader-3.c (expand_binop): Declare. + * gcc.dg/tree-ssa/ssa-dom-branch-1.c (arf, foo): Declare. + (try_combine): Add casts to rtx. + * gcc.dg/tree-ssa/split-path-3.c (vec_heap_o_reserve) + (VEC_int_base_length, bmp_iter_and_compl_init) + (bmp_iter_and_compl, bmp_iter_next, VEC_int_heap_free): + Declare. + * gcc.dg/tree-ssa/split-path-7.c (linit): Call + __builtin_strcmp instead of strcmp. + * gcc.dg/tree-ssa/ssa-dom-thread-12.c (gimple_call_arg): + Declare. + (gimple_op): Call __builtin_abort instead of abort. + * gcc.dg/tree-ssa/ssa-dom-thread-13.c (arf, error): Declare. + (convert): Call __builtin_abort instead of abort. + * gcc.dg/tree-ssa/ssa-dom-thread-14.c (exand_binop): Declare. + * gcc.dg/tree-ssa/ssa-dom-thread-15.c + (ix86_target_stack_probe, pro_epilogue_adjust_stack) + (gen_rtx_CONST_INT, fancy_abort): Declare. + * gcc.dg/tree-ssa/ssa-dse-25.c (foo): Call __builtin_memset + instead of memset. + * gcc.target/aarch64/aapcs64/va_arg-17.c + (init_data): Call __builtin_memset instead of memset. + * gcc.target/i386/pr69030.c (fn1): Call __builtin_printf instead + of printf. + +2023-11-13 Florian Weimer + + * gcc.c-torture/compile/20080613-1.c (hop_sendmsg): Call + __builtin_memcpy instead of memcpy. + * gcc.c-torture/compile/complex-6.c (bar): Declare. + * gcc.c-torture/compile/pr23445.c (__brelse): Declare. + * gcc.c-torture/compile/pr23946.c (long2str): Declare. + (avi_parse_comments): Call __builtin_memset instead of + memset. __builtin_malloc instead of malloc. Call + __builtin_memcpy instead of memcpy. Call + __builtin_free instead of free. + * gcc.c-torture/compile/pr31953.c (toggle_hexedit_mode): + Add missing void return type. + * gcc.c-torture/compile/pr32372.c (MPV_encode_init): Add + missing void return type. + * gcc.c-torture/compile/pr32355.c (sigemptyset): Declare. + (doSignalsSetup): Add missing void return type. + * gcc.c-torture/compile/pr32453.c (__assert_fail): Declare. + * gcc.c-torture/compile/pr32571.c (mthca_is_memfree) + (mthca_arbel_fmr_unmap, mthca_tavor_fmr_unmap) + (mthca_unmap_fmr): Declare. + * gcc.c-torture/compile/pr32584.c (sortpin): Add missing + void types. + * gcc.c-torture/compile/pr32919.c (read_int, _itoa_word) + (__strnlen): Declare. + * gcc.c-torture/compile/pr33173.c (test_dir_format): Add + missing void return type. Add missing int types. + * gcc.c-torture/compile/pr33855.c (cabsl): Declare. + * gcc.c-torture/compile/pr34334.c (__strsep_1c) + (__strsep_2c): Add missing void return type. + * gcc.c-torture/compile/pr35006.c (grub_putchar) + (cl_set_pos, cl_print, grub_memmove, cl_delete): Declare. + (grub_cmdline_get): Add missing void return type. + * gcc.c-torture/compile/pr35595.c (__kernel_sinf): + Declare. + * gcc.c-torture/compile/pr35869.c (f): Add missing void + return type. + * gcc.c-torture/compile/pr36172.c (FcCharSetFreeze): Add + missing return value. + * gcc.c-torture/compile/pr36238.c (lshift_s_s): Declare. + * gcc.c-torture/compile/pr37207.c (func_81, func_98): + Declare. + * gcc.c-torture/compile/pr37258.c (mod_rhs, lshift_s_s) + (func_112, func_23): Declare. + * gcc.c-torture/compile/pr37305.c (safe_mod_u_u): Declare. + * gcc.c-torture/compile/pr37327.c (func_93, func_59) + (func_124, func_117, safe_add_uint64_t_u_u) + (safe_mul_int32_t_s_s): Declare. + * gcc.c-torture/compile/pr37387.c (FuncMakeConsequencesPres): + Call __builtin_abort instead of ErrorQuit. + * gcc.c-torture/compile/pr37432.c (print_wkb_bytes): Declare. + * gcc.c-torture/compile/pr37713.c (sdp_seq_alloc): Declare. + * gcc.c-torture/compile/pr39886.c (func): Declare. + * gcc.c-torture/compile/pr39941.c (stop): Declare. + * gcc.c-torture/compile/pr41016.c (CompareRNAStructures): + Call __builtin_abort instead of Die. + * gcc.c-torture/compile/pr42632.c (___pskb_trim): Add + forward declaration. + * gcc.c-torture/compile/pr49710.c (baz): Add forward + declaration and missing void types. + (bar): Add missing void type. + * gcc.c-torture/compile/pr52437.c (fn2): Declare. + * gcc.c-torture/compile/pr57441.c (func_1): Add missing void + return type. + * gcc.c-torture/compile/pr87110.c (struct d): Add missing + semicolon. + (g, h): Define as int. + (i): Add missing void types. + * gcc.c-torture/compile/pr87468.c (a): Define as int. + (e, f): Declare. + (b): Add missing void types. + * gcc.c-torture/execute/pr79043.c (ptr2): Use cast in + initializer. + (typepun): Add missing void return type. + (main): Add missing int return type and missing void type. + * gcc.dg/pr100349.c (b): Add missing void return type. + * gcc.dg/pr106189.c (T): Declare. + * gcc.dg/pr110777.c (_setjmp): Declare + * gcc.dg/pr45506.c (dynvec, relative_relocp, atexit): Declare. + (fini_array): Cast result of relative_relocp from int to int *. + * gcc.dg/pr97359.c: Compile with -Wno-pointer-to-int-cast. + (b): Cast point to int to avoid int-conversion warning. + * gcc.dg/uninit-pr78548.c: Call __builtin_printf instead + of printf. + * gcc.dg/torture/pr39829.c (f): Declare. + * gcc.dg/torture/pr44977.c (int329): Cast bar from pointer + to short. + * gcc.dg/torture/pr53703.c (ifa_sa_len): Declare. + (usagi_getifaddrs): Call __builtin_memset instead of memset + and __builtin_memcmp instead of memcmp. + * gcc.dg/torture/pr68625.c (z9): Explicitly cast + pointers to int. + * gcc.dg/torture/pr55964.c (f): Cast q to the expected type. + * gcc.dg/torture/pr70623.c (h9): Fix pointer cast in assignment + of av. + * gcc.dg/torture/pr81118.c (c): Return zero instead of + nothing. + * gcc.dg/torture/pr81510.c (e): Add cast from int to pointer. + * gcc.dg/torture/pr99694.c (d): Add missing casts between + pointers and integers. + * gcc.dg/tree-ssa/pr102563.c: Define as void (*) (void). + (_bdf_parse_glyphs_p): Define with prototype. + * gcc.dg/tree-ssa/pr92085-1.c (di): Add cast to initialization + of fq. + * gcc.dg/tree-ssa/pr92085-2.c (c1): Add casts to + initializations of th, lq. + * gcc.dg/tree-ssa/reassoc-43.c + (c_parser_next_token_is_keyword, chainon) + (c_parser_attributes): Declare. + * gcc.dg/tree-ssa/split-path-4.c (powi_lookup_cost): Declare. + (powi_cost): Add missing void return type. + * gcc.dg/tree-ssa/split-path-6.c (strtosichar) + (ichartosstr, treeinsert, stop, __srget_r): Declare + (givehelp, oof, lookharder): Convert to prototypes. + * gcc.target/i386/pr71621-1.c (y8): Cast to expected + pointer type in assignment of t6. + * gcc.target/i386/pr79571.c (g): Add missing int type. + (j): Add missing void types and pointer cast. + * gcc.target/i386/pr87246.c (s2): Add cast from integer + to pointer type. + * gcc.target/i386/pr87759.c (rc): Cast to the expected + pointer time in initialization of ar. + * gcc.target/i386/pr99454.c (tg3_start_xmit): Add + missing cast from int to int *. + +2023-11-13 Florian Weimer + + * c-c++-common/Wduplicated-branches-11.c: Compile with + -fpermissive. + * c-c++-common/Wduplicated-branches-12.c: Likewise. + * c-c++-common/builtins.c: Likewise. + * c-c++-common/pointer-to-fn1.c: Likewise. + * gcc.c-torture/compile/20010320-1.c: Likewise. + * gcc.c-torture/compile/20050105-1.c: Likewise. + * gcc.c-torture/compile/20080704-1.c: Likewise. + * gcc.c-torture/compile/20080910-1.c: Likewise. + * gcc.c-torture/compile/20090917-1.c: Likewise. + * gcc.c-torture/compile/20100915-1.c: Likewise. + * gcc.c-torture/compile/20101216-1.c: Likewise. + * gcc.c-torture/compile/20121027-1.c: Likewise. + * gcc.c-torture/compile/20180605-1.c: Likewise. + * gcc.c-torture/compile/950816-2.c: Likewise. + * gcc.c-torture/compile/dse.c: Likewise. + * gcc.c-torture/compile/pr100576.c: Likewise. + * gcc.c-torture/compile/pr17408.c: Likewise. + * gcc.c-torture/compile/pr19121.c: Likewise. + * gcc.c-torture/compile/pr26213.c: Likewise. + * gcc.c-torture/compile/pr27341-2.c: Likewise. + * gcc.c-torture/compile/pr28776-2.c: Likewise. + * gcc.c-torture/compile/pr33133.c: Likewise. + * gcc.c-torture/compile/pr34091.c: Likewise. + * gcc.c-torture/compile/pr36154.c: Likewise. + * gcc.c-torture/compile/pr37381.c: Likewise. + * gcc.c-torture/compile/pr38360.c: Likewise. + * gcc.c-torture/compile/pr40291.c: Likewise. + * gcc.c-torture/compile/pr41182-1.c: Likewise. + * gcc.c-torture/compile/pr43635.c: Likewise. + * gcc.c-torture/compile/pr44043.c: Likewise. + * gcc.c-torture/compile/pr44063.c: Likewise. + * gcc.c-torture/compile/pr44246.c: Likewise. + * gcc.c-torture/compile/pr45535.c: Likewise. + * gcc.c-torture/compile/pr46934.c: Likewise. + * gcc.c-torture/compile/pr47428.c: Likewise. + * gcc.c-torture/compile/pr49145.c: Likewise. + * gcc.c-torture/compile/pr49206.c: Likewise. + * gcc.c-torture/compile/pr51694.c: Likewise. + * gcc.c-torture/compile/pr53886.c: Likewise. + * gcc.c-torture/compile/pr65241.c: Likewise. + * gcc.c-torture/compile/pr72802.c: Likewise. + * gcc.c-torture/compile/pr81360.c: Likewise. + * gcc.c-torture/compile/pr82052.c: Likewise. + * gcc.c-torture/compile/pr90275-2.c: Likewise. + * gcc.c-torture/compile/pr90275.c: Likewise. + * gcc.c-torture/compile/pr96796.c: Likewise. + * gcc.c-torture/compile/regs-arg-size.c: Likewise. + * gcc.c-torture/compile/udivmod4.c: Likewise. + * gcc.c-torture/compile/widechar-1.c: Likewise. + * gcc.c-torture/execute/20000412-3.c: Likewise. + * gcc.c-torture/execute/20010605-2.c: Likewise. + * gcc.c-torture/execute/20020314-1.c: Likewise. + * gcc.c-torture/execute/20020819-1.c: Likewise. + * gcc.c-torture/execute/20031211-2.c: Likewise. + * gcc.c-torture/execute/20040223-1.c: Likewise. + * gcc.c-torture/execute/20041019-1.c: Likewise. + * gcc.c-torture/execute/20120427-1.c: Likewise. + * gcc.c-torture/execute/20120427-2.c: Likewise. + * gcc.c-torture/execute/920908-2.c: Likewise. + * gcc.c-torture/execute/921110-1.c: Likewise. + * gcc.c-torture/execute/930111-1.c: Likewise. + * gcc.c-torture/execute/930208-1.c: Likewise. + * gcc.c-torture/execute/930702-1.c: Likewise. + * gcc.c-torture/execute/930818-1.c: Likewise. + * gcc.c-torture/execute/931017-1.c: Likewise. + * gcc.c-torture/execute/931018-1.c: Likewise. + * gcc.c-torture/execute/931208-1.c: Likewise. + * gcc.c-torture/execute/941101-1.c: Likewise. + * gcc.c-torture/execute/941110-1.c: Likewise. + * gcc.c-torture/execute/950322-1.c: Likewise. + * gcc.c-torture/execute/950426-1.c: Likewise. + * gcc.c-torture/execute/950512-1.c: Likewise. + * gcc.c-torture/execute/950621-1.c: Likewise. + * gcc.c-torture/execute/960218-1.c: Likewise. + * gcc.c-torture/execute/960402-1.c: Likewise. + * gcc.c-torture/execute/cmpsf-1.c: Likewise. + * gcc.c-torture/execute/cmpsi-1.c: Likewise. + * gcc.c-torture/execute/cmpsi-2.c: Likewise. + * gcc.c-torture/execute/divmod-1.c: Likewise. + * gcc.c-torture/execute/pr22061-1.c: Likewise. + * gcc.c-torture/execute/pr55875.c: Likewise. + * gcc.dg/20050629-1.c: Likewise. + * gcc.dg/20080615-1.c: Likewise. + * gcc.dg/Walloca-14.c: Likewise. + * gcc.dg/Wbuiltin-declaration-mismatch-3.c: Likewise. + * gcc.dg/Wbuiltin-declaration-mismatch-9.c: Likewise. + * gcc.dg/Wdouble-promotion.c: Likewise. + * gcc.dg/Wrestrict-5.c: Likewise. + * gcc.dg/Wstringop-overflow-13.c: Likewise. + * gcc.dg/analyzer/fd-bind-pr107783.c: Likewise. + * gcc.dg/array-5.c: Likewise. + * gcc.dg/asan/pr56417.c: Likewise. + * gcc.dg/attr-access-read-only.c: Likewise. + * gcc.dg/attr-access-read-write.c: Likewise. + * gcc.dg/attr-access-write-only.c: Likewise. + * gcc.dg/bitint-36.c: Likewise. + * gcc.dg/builtin-bswap-10.c: Likewise. + * gcc.dg/cleanup-1.c: Likewise. + * gcc.dg/cpp/pr60014-1.c: Likewise. + * gcc.dg/cpp/pr60014-2.c: Likewise. + * gcc.dg/cpp/pr60014-3.c: Likewise. + * gcc.dg/ipa/ipa-bit-cp-1.c: Likewise. + * gcc.dg/ipa/ipa-bit-cp-2.c: Likewise. + * gcc.dg/ipa/ipa-bit-cp.c: Likewise. + * gcc.dg/ipa/pr105639.c: Likewise. + * gcc.dg/ipa/pr71981.c: Likewise. + * gcc.dg/lto/20081109_0.c: Likewise. + * gcc.dg/lto/pr54702_1.c: Likewise. + * gcc.dg/lto/pr55525_0.c: Likewise. + * gcc.dg/noncompile/20020213-1.c:: Likewise. + * gcc.dg/noncompile/pr71426.c: Likewise. + * gcc.dg/noncompile/undeclared-1.c: Likewise. + * gcc.dg/overflow-warn-2.c: Likewise. + * gcc.dg/pr100142.c: Likewise. + * gcc.dg/pr100790.c: Likewise. + * gcc.dg/pr100791.c: Likewise. + * gcc.dg/pr103093.c: Likewise. + * gcc.dg/pr105140.c: Likewise. + * gcc.dg/pr105250.c: Likewise. + * gcc.dg/pr105853.c: Likewise. + * gcc.dg/pr105856.c: Likewise. + * gcc.dg/pr26865.c: Likewise. + * gcc.dg/pr40989.c: Likewise. + * gcc.dg/pr42715.c: Likewise. + * gcc.dg/pr44971.c: Likewise. + * gcc.dg/pr46571.c: Likewise. + * gcc.dg/pr54363.c: Likewise. + * gcc.dg/pr56724-2.c: Likewise. + * gcc.dg/pr59630.c: Likewise. + * gcc.dg/pr67043.c: Likewise. + * gcc.dg/pr67730-1.c: Likewise. + * gcc.dg/pr67730-2.c: Likewise. + * gcc.dg/pr68320.c: Likewise. + * gcc.dg/pr69156.c: Likewise. + * gcc.dg/pr69824.c: Likewise. + * gcc.dg/pr70174.c: Likewise. + * gcc.dg/pr70281.c: Likewise. + * gcc.dg/pr77862.c: Likewise. + * gcc.dg/pr82765.c: Likewise. + * gcc.dg/pr83852.c: Likewise. + * gcc.dg/pr84206.c: Likewise. + * gcc.dg/pr85164-1.c: Likewise. + * gcc.dg/pr85955.c: Likewise. + * gcc.dg/pr86271.c: Likewise. + * gcc.dg/pr86928.c: Likewise. + * gcc.dg/pr99122-1.c: Likewise. + * gcc.dg/pr99136.c: Likewise. + * gcc.dg/redecl-19.c: Likewise. + * gcc.dg/redecl-24.c: Likewise. + * gcc.dg/torture/pr39204.c: Likewise. + * gcc.dg/torture/pr57676.c: Likewise. + * gcc.dg/torture/pr67222.c: Likewise. + * gcc.dg/torture/pr77677-2.c: Likewise. + * gcc.dg/torture/pr79125.c: Likewise. + * gcc.dg/torture/pr94479.c: Likewise. + * gcc.dg/tree-ssa/20070815.c: Likewise. + * gcc.dg/tree-ssa/builtin-sprintf-29.c: Likewise. + * gcc.dg/tree-ssa/builtins-folding-gimple-ub.c: Likewise. + * gcc.dg/tree-ssa/pr22051-2.c: Likewise. + * gcc.dg/tree-ssa/ssa-dse-10.c: Likewise. + * gcc.target/aarch64/pr60697.c: Likewise. + * gcc.target/aarch64/pr87305.c: Likewise. + * gcc.target/aarch64/sve/pr96357.c: Likewise. + * gcc.target/i386/attr-nocf-check-1a.c: Likewise. + * gcc.target/i386/attr-nocf-check-3a.c: Likewise. + * gcc.target/i386/avx512bf16-pr108881.c: Likewise. + * gcc.target/i386/cet-notrack-2a.c: Likewise. + * gcc.target/i386/cet-notrack-2b.c: Likewise. + * gcc.target/i386/cet-notrack-5b.c: Likewise. + * gcc.target/i386/cet-notrack-6a.c: Likewise. + * gcc.target/i386/cet-notrack-6b.c: Likewise. + * gcc.target/i386/pr70325.c: Likewise. + * gcc.target/i386/pr70858.c: Likewise. + * gcc.target/i386/pr83488.c: Likewise. + * gcc.target/i386/pr85511.c: Likewise. + * gcc.target/i386/pr87572.c: Likewise. + * gcc.target/i386/pr88195.c: Likewise. + +2023-11-13 Jakub Jelinek + + PR tree-optimization/111967 + * gcc.dg/tree-ssa/pr111967.c: New test. + +2023-11-13 Xi Ruoyao + + PR target/112476 + * gcc.target/loongarch/pr112476-1.c: New test. + * gcc.target/loongarch/pr112476-2.c: New test. + +2023-11-13 Pan Li + + * gcc.target/riscv/rvv/base/float-point-dynamic-frm-54.c: Adjust + the asm checker. + * gcc.target/riscv/rvv/base/float-point-dynamic-frm-57.c: Ditto. + * gcc.target/riscv/rvv/base/float-point-dynamic-frm-58.c: Ditto. + +2023-11-13 Pan Li + + * gcc.target/riscv/rvv/autovec/unop/math-llrintf16-0.c: New test. + * gcc.target/riscv/rvv/autovec/unop/math-llroundf16-0.c: New test. + * gcc.target/riscv/rvv/autovec/unop/math-lrintf16-rv32-0.c: New test. + * gcc.target/riscv/rvv/autovec/unop/math-lrintf16-rv64-0.c: New test. + * gcc.target/riscv/rvv/autovec/unop/math-lroundf16-rv32-0.c: New test. + * gcc.target/riscv/rvv/autovec/unop/math-lroundf16-rv64-0.c: New test. + * gcc.target/riscv/rvv/autovec/vls/math-llrintf16-0.c: New test. + * gcc.target/riscv/rvv/autovec/vls/math-llroundf16-0.c: New test. + * gcc.target/riscv/rvv/autovec/vls/math-lrintf16-rv32-0.c: New test. + * gcc.target/riscv/rvv/autovec/vls/math-lrintf16-rv64-0.c: New test. + * gcc.target/riscv/rvv/autovec/vls/math-lroundf16-rv32-0.c: New test. + * gcc.target/riscv/rvv/autovec/vls/math-lroundf16-rv64-0.c: New test. + +2023-11-11 Jakub Jelinek + + PR middle-end/112430 + * gcc.dg/pr112430.c: New test. + +2023-11-11 Martin Uecker + + PR c/110815 + PR c/112428 + * gcc.dg/Wnonnull-8.c: Adapt test. + * gcc.dg/Wnonnull-9.c: New test. + +2023-11-11 Joern Rennecke + + * lib/scanasm.exp (scan-assembler-times): Disregard LTO sections. + (scan-assembler-dem, scan-assembler-dem-not): Likewise. + (dg-scan): Likewise, if name starts with scan-assembler. + (scan-raw-assembler): New proc. + * gcc.dg/pr61868.c: Use scan-raw-assembler. + * gcc.dg/scantest-lto.c: New test. + +2023-11-11 Juzhe-Zhong + + PR target/112469 + * gcc.target/riscv/rvv/autovec/pr112469.c: New test. + +2023-11-11 Marek Polacek + + * g++.dg/cpp0x/lambda/lambda-decltype3.C: Check __cpp_init_captures. + +2023-11-10 Patrick O'Neill + + * g++.dg/vect/pr102788.cc: Remove dg-do run directive. + +2023-11-10 Eric Botcazou + + * gnat.dg/opt103.ads, gnat.dg/opt103.adb: New test. + +2023-11-10 Vladimir N. Makarov + + PR target/112337 + * gcc.target/arm/pr112337.c: New. + +2023-11-10 Patrick Palka + + PR c++/79620 + * g++.dg/cpp0x/lambda/lambda-decltype3.C: New test. + +2023-11-10 Patrick Palka + + PR c++/79378 + PR c++/96917 + * g++.dg/cpp1y/decltype-auto7.C: New test. + * g++.dg/cpp1y/lambda-init20.C: New test. + +2023-11-10 Juzhe-Zhong + + PR tree-optimization/112438 + * gcc.target/riscv/rvv/autovec/pr112438.c: New test. + +2023-11-10 Juzhe-Zhong + + * gcc.target/riscv/rvv/autovec/vls/def.h: Add combine test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/combine-1.c: New test. + * gcc.target/riscv/rvv/autovec/vls/combine-1.c: New test. + * gcc.target/riscv/rvv/autovec/vls/combine-2.c: New test. + * gcc.target/riscv/rvv/autovec/vls/combine-3.c: New test. + * gcc.target/riscv/rvv/autovec/vls/combine-4.c: New test. + * gcc.target/riscv/rvv/autovec/vls/combine-5.c: New test. + * gcc.target/riscv/rvv/autovec/vls/combine-6.c: New test. + * gcc.target/riscv/rvv/autovec/vls/combine-7.c: New test. + +2023-11-10 Robin Dapp + + * gcc.target/riscv/rvv/autovec/binop/vmul-zvfh-run.c: Adjust. + * gcc.target/riscv/rvv/autovec/binop/vsub-zvfh-run.c: Ditto. + * gcc.target/riscv/rvv/autovec/cond/cond_narrow_shift_run-3.c: + Ditto. + * gcc.target/riscv/rvv/autovec/cond/pr111401.c: Ditto. + * gcc.target/riscv/rvv/autovec/conversions/vfcvt-itof-zvfh-run.c: + Ditto. + * gcc.target/riscv/rvv/autovec/conversions/vfcvt_rtz-zvfh-run.c: + Ditto. + * gcc.target/riscv/rvv/autovec/conversions/vfncvt-ftoi-zvfh-run.c: + Ditto. + * gcc.target/riscv/rvv/autovec/conversions/vfncvt-itof-template.h: + Ditto. + * gcc.target/riscv/rvv/autovec/conversions/vfncvt-itof-zvfh-run.c: + Ditto. + * gcc.target/riscv/rvv/autovec/conversions/vfncvt-zvfh-run.c: + Ditto. + * gcc.target/riscv/rvv/autovec/conversions/vfwcvt-ftoi-zvfh-run.c: + Ditto. + * gcc.target/riscv/rvv/autovec/conversions/vfwcvt-itof-zvfh-run.c: + Ditto. + * gcc.target/riscv/rvv/autovec/conversions/vfwcvt-zvfh-run.c: + Ditto. + * gcc.target/riscv/rvv/autovec/slp-mask-run-1.c: Ditto. + * gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-1.c: + Ditto. + * gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-10.c: + Ditto. + * gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-11.c: + Ditto. + * gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-12.c: + Ditto. + * gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-2.c: + Ditto. + * gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-3.c: + Ditto. + * gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-4.c: + Ditto. + * gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-5.c: + Ditto. + * gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-6.c: + Ditto. + * gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-7.c: + Ditto. + * gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-8.c: + Ditto. + * gcc.target/riscv/rvv/autovec/ternop/ternop_run_zvfh-9.c: + Ditto. + * gcc.target/riscv/rvv/autovec/unop/vfsqrt-run.c: Ditto. + * gcc.target/riscv/rvv/autovec/unop/vfsqrt-rv32gcv.c: Ditto. + * gcc.target/riscv/rvv/autovec/unop/vfsqrt-rv64gcv.c: Ditto. + * gcc.target/riscv/rvv/autovec/unop/vfsqrt-template.h: Ditto. + * gcc.target/riscv/rvv/autovec/unop/vfsqrt-zvfh-run.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-zvfh-run.c: + Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-zvfh-run.c: + Ditto. + +2023-11-10 Robin Dapp + + * gcc.target/i386/pr112464.c: New test. + +2023-11-10 Jin Ma + + * gcc.target/riscv/xtheadmempair-interrupt-fcsr.c: New file. + +2023-11-10 Richard Biener + + PR tree-optimization/110221 + * gfortran.dg/pr110221.f: New testcase. + +2023-11-10 Richard Biener + + PR middle-end/112469 + * gcc.dg/torture/pr112469.c: New testcase. + +2023-11-10 Pan Li + + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-1.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-2.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-3.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-4.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-5.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-run-1.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-run-2.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-run-3.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-same-tail-1.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-same-tail-2.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-same-tail-3.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-same-tail-4.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-same-tail-5.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-same-tail-6.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-same-tail-7.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-same-tail-8.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-same-tail-9.c: New test. + +2023-11-10 Juzhe-Zhong + + * gcc.dg/vect/pr97428.c: Add additional compile option for riscv. + +2023-11-10 liuhongt + + * g++.target/i386/pr112443.C: New test. + +2023-11-10 Jose E. Marchesi + + * gcc.target/bpf/mulsidi3-zeroextend-pseudoc.c: New test. + +2023-11-09 Jose E. Marchesi + + * gcc.target/bpf/ldxdw.c: Fix regexp with expected result. + +2023-11-09 Robin Dapp + + * gcc.target/riscv/rvv/autovec/binop/fmax_zvfh-1.c: Adjust. + * gcc.target/riscv/rvv/autovec/binop/fmax_zvfh_run-1.c: Ditto. + * gcc.target/riscv/rvv/autovec/binop/fmin_zvfh-1.c: Ditto. + * gcc.target/riscv/rvv/autovec/binop/fmin_zvfh_run-1.c: Ditto. + * gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-1.h: + Ditto. + * gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-2.h: + Ditto. + * gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-rv32-1.c: + Ditto. + * gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-rv32-2.c: + Ditto. + * gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-rv64-1.c: + Ditto. + * gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-rv64-2.c: + Ditto. + * gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_run-1.c: + Ditto. + * gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_run-2.c: + Ditto. + * gcc.target/riscv/rvv/autovec/cond/cond_convert_int2float_run-1.c: + Ditto. + * gcc.target/riscv/rvv/autovec/cond/cond_convert_int2float_run-2.c: + Ditto. + * gcc.target/riscv/rvv/autovec/cond/cond_fmax_zvfh_run-1.c: + Ditto. + * gcc.target/riscv/rvv/autovec/cond/cond_fmax_zvfh_run-2.c: + Ditto. + * gcc.target/riscv/rvv/autovec/cond/cond_fmax_zvfh_run-3.c: + Ditto. + * gcc.target/riscv/rvv/autovec/cond/cond_fmax_zvfh_run-4.c: + Ditto. + * gcc.target/riscv/rvv/autovec/cond/cond_fmin_zvfh_run-1.c: + Ditto. + * gcc.target/riscv/rvv/autovec/cond/cond_fmin_zvfh_run-2.c: + Ditto. + * gcc.target/riscv/rvv/autovec/cond/cond_fmin_zvfh_run-3.c: + Ditto. + * gcc.target/riscv/rvv/autovec/cond/cond_fmin_zvfh_run-4.c: + Ditto. + * gcc.target/riscv/rvv/autovec/cond/cond_sqrt_run-zvfh-1.c: + Ditto. + * gcc.target/riscv/rvv/autovec/cond/cond_sqrt_run-zvfh-2.c: + Ditto. + * gcc.target/riscv/rvv/autovec/reduc/reduc_zvfh-10.c: Ditto. + * gcc.target/riscv/rvv/autovec/reduc/reduc_zvfh_run-10.c: Ditto. + * gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-1.h: New test. + * gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-2.h: New test. + * gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-rv32-1.c: New test. + * gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-rv32-2.c: New test. + * gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-rv64-1.c: New test. + * gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-rv64-2.c: New test. + * gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh_run-1.c: New test. + * gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh_run-2.c: New test. + +2023-11-09 Alexandre Oliva + + * gcc.dg/tree-ssa/scev-3.c: xfail on ia32. + * gcc.dg/tree-ssa/scev-5.c: Likewise. + +2023-11-09 Tamar Christina + + PR tree-optimization/109154 + * gcc.target/aarch64/sve/fneg-abs_5.c: New test. + +2023-11-09 Tamar Christina + + PR tree-optimization/109154 + * gcc.target/aarch64/sve/fneg-abs_1.c: Updated. + * gcc.target/aarch64/sve/fneg-abs_2.c: Updated. + * gcc.target/aarch64/sve/fneg-abs_4.c: Updated. + +2023-11-09 Tamar Christina + + PR tree-optimization/109154 + * gcc.target/aarch64/fneg-abs_2.c: Updated. + * gcc.target/aarch64/fneg-abs_4.c: Updated. + * gcc.target/aarch64/dbl_mov_immediate_1.c: Updated. + +2023-11-09 Tamar Christina + + PR tree-optimization/109154 + * gcc.target/aarch64/fneg-abs_1.c: Updated. + * gcc.target/aarch64/fneg-abs_2.c: Updated. + * gcc.target/aarch64/fneg-abs_4.c: Updated. + * gcc.target/aarch64/dbl_mov_immediate_1.c: Updated. + +2023-11-09 Tamar Christina + + PR tree-optimization/109154 + * gcc.dg/fold-copysign-1.c: Updated. + * gcc.dg/pr55152-2.c: Updated. + * gcc.dg/tree-ssa/abs-4.c: Updated. + * gcc.dg/tree-ssa/backprop-6.c: Updated. + * gcc.dg/tree-ssa/copy-sign-2.c: Updated. + * gcc.dg/tree-ssa/mult-abs-2.c: Updated. + * gcc.target/aarch64/fneg-abs_1.c: New test. + * gcc.target/aarch64/fneg-abs_2.c: New test. + * gcc.target/aarch64/fneg-abs_3.c: New test. + * gcc.target/aarch64/fneg-abs_4.c: New test. + * gcc.target/aarch64/sve/fneg-abs_1.c: New test. + * gcc.target/aarch64/sve/fneg-abs_2.c: New test. + * gcc.target/aarch64/sve/fneg-abs_3.c: New test. + * gcc.target/aarch64/sve/fneg-abs_4.c: New test. + +2023-11-09 Simon Wright + + PR ada/111813 + * gnat.dg/calendar_format_value.adb: New test. + +2023-11-09 Juzhe-Zhong + + PR target/112450 + * gcc.target/riscv/rvv/autovec/pr112450.c: New test. + +2023-11-09 Richard Biener + + PR tree-optimization/112444 + * gcc.dg/torture/pr112444.c: New testcase. + +2023-11-09 YunQiang Su + + * gcc.target/mips/fabs-nan2008.c: New test. + * gcc.target/mips/fabsf-nan2008.c: New test. + +2023-11-09 Florian Weimer + + * gcc.target/x86_64/abi/avx/avx-check.h (main): Call + __builtin_printf instead of printf. + * gcc.target/x86_64/abi/avx/test_passing_m256.c + (fun_check_passing_m256_8_values): Add missing void return + type. + * gcc.target/x86_64/abi/avx512f/avx512f-check.h (main): Call + __builtin_printf instead of printf. + * gcc.target/x86_64/abi/avx512f/test_passing_m512.c + (fun_check_passing_m512_8_values): Add missing void return + type. + * gcc.target/x86_64/abi/bf16/bf16-check.h (main): Call + __builtin_printf instead of printf. + * gcc.target/x86_64/abi/bf16/m256bf16/bf16-ymm-check.h (main): + Likewise. + * gcc.target/x86_64/abi/bf16/m256bf16/test_passing_m256.c + (fun_check_passing_m256bf16_8_values): Add missing void + return type. + * gcc.target/x86_64/abi/bf16/m512bf16/bf16-zmm-check.h (main): + Call __builtin_printf instead of printf. + * gcc.target/x86_64/abi/bf16/m512bf16/test_passing_m512.c + (fun_check_passing_m512bf16_8_values): Add missign void + return type. + +2023-11-09 Florian Weimer + + * gcc.dg/Wreturn-mismatch-1.c: New. + * gcc.dg/Wreturn-mismatch-2.c: New. + * gcc.dg/Wreturn-mismatch-3.c: New. + * gcc.dg/Wreturn-mismatch-4.c: New. + * gcc.dg/Wreturn-mismatch-5.c: New. + * gcc.dg/Wreturn-mismatch-6.c: New. + * gcc.dg/noncompile/pr55976-1.c: Change -Werror=return-type + to -Werror=return-mismatch. + * gcc.dg/noncompile/pr55976-2.c: Change -Wreturn-type + to -Wreturn-mismatch. + +2023-11-09 Florian Weimer + + * gcc.dg/Wmissing-parameter-type.c: Build with -std=gnu89 + to trigger the -Wmissing-parameter-type warning + and not the default -Wimplicit warning. Also match + against -Wmissing-parameter-type. + * gcc.dg/Wmissing-parameter-type-Wextra.c: Likewise. + +2023-11-09 Stefan Schulze Frielinghaus + + * gcc.target/s390/zvector/vec-reve-load-halfword-z14.c: Remove + vperm and substitude by vpdi et al. + * gcc.target/s390/zvector/vec-reve-load-halfword.c: Likewise. + * gcc.target/s390/vector/reverse-elements-1.c: New test. + * gcc.target/s390/vector/reverse-elements-2.c: New test. + * gcc.target/s390/vector/reverse-elements-3.c: New test. + * gcc.target/s390/vector/reverse-elements-4.c: New test. + * gcc.target/s390/vector/reverse-elements-5.c: New test. + * gcc.target/s390/vector/reverse-elements-6.c: New test. + * gcc.target/s390/vector/reverse-elements-7.c: New test. + +2023-11-09 Jakub Jelinek + + PR libgcc/65833 + * gcc.dg/dfp/int128-1.c: New test. + * gcc.dg/dfp/int128-2.c: New test. + * gcc.dg/dfp/int128-3.c: New test. + * gcc.dg/dfp/int128-4.c: New test. + +2023-11-09 Jakub Jelinek + + PR c/112339 + * c-c++-common/ubsan/Wno-attributes-1.c: New test. + +2023-11-09 Jin Ma + + * gcc.target/riscv/xtheadfmemidx-uindex-zbb.c: New test. + +2023-11-09 Juzhe-Zhong + + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-1.c: New test. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-2.c: New test. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-3.c: New test. + +2023-11-09 Alexandre Oliva + + * g++.dg/gomp/declare-target-3.C: Adjust for 32-bit targets. + +2023-11-09 Alexandre Oliva + + * g++.dg/pr58245-1.C: Disable PIC/PIE. + +2023-11-09 Juzhe-Zhong + + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-mixed-1.c: Adapt test. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-1.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-2.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-3.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-4.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-5.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-6.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-7.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-1.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-2.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-3.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-4.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-5.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-6.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-7.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-1.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-2.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-3.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-4.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-5.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-6.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-7.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-8.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-9.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-1.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-10.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-2.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-3.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-4.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-5.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-6.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-7.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-8.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-9.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/no-dynamic-lmul-1.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/pr111848.c: Ditto. + * gcc.dg/vect/costmodel/riscv/rvv/rvv-costmodel-vect.exp: Run all tests. + 2023-11-08 Uros Bizjak PR target/82524 diff --git a/libatomic/ChangeLog b/libatomic/ChangeLog index cf10792c9169..9776a558dcef 100644 --- a/libatomic/ChangeLog +++ b/libatomic/ChangeLog @@ -1,3 +1,8 @@ +2023-11-10 Wilco Dijkstra + + * config/linux/aarch64/host-config.h (ifunc1): Use CPUID in ifunc + selection. + 2023-10-26 Thomas Schwinge PR testsuite/109951 diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 5ca3b518df72..4c1a3d7245a2 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,29 @@ +2023-11-14 Arsen Arsenović + + * config.in: Regenerate. + +2023-11-13 Arsen Arsenović + + * configure: Regenerate. + * aclocal.m4: Regenerate. + +2023-11-09 David Malcolm + + * include/line-map.h (rich_location::get_expanded_location): Make + const. + (rich_location::get_line_table): New accessor. + (rich_location::m_line_table): Make the pointer be const. + (rich_location::m_have_expanded_location): Make mutable. + (rich_location::m_expanded_location): Likewise. + (fixit_hint::affects_line_p): Add const line_maps * param. + (linemap_client_expand_location_to_spelling_point): Likewise. + * line-map.cc (rich_location::get_expanded_location): Make const. + Pass m_line_table to + linemap_client_expand_location_to_spelling_point. + (rich_location::maybe_add_fixit): Likewise. + (fixit_hint::affects_line_p): Add set param and pass to + linemap_client_expand_location_to_spelling_point. + 2023-11-07 Joseph Myers * directives.cc: Refer to C23 instead of C2X in diagnostics and diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 7ec3301909df..cdee852eec3e 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,33 @@ +2023-11-10 Keith Packard + + * config/m68k/lb1sf68.S (__adddf3): Properly check for non-zero denorm. + (__divdf3): Restore sign bit properly. + (__addsf3): Correct exponent check. + * config/m68k/fpgnulib.c (EXPMASK): Define. + (__extendsfdf2): Handle Inf and NaN properly. + (__truncdfsf2): Handle underflow and overflow correctly. + (__extenddfxf2): Handle underflow, denorms, Inf and NaN correctly. + (__truncxfdf2): Handle underflow and denorms correctly. + (__fixxfsi): Reimplement. + +2023-11-09 Jakub Jelinek + + PR libgcc/65833 + * config/t-softfp (softfp_bid_list): Add + {U,}TItype <-> _Decimal{32,64,128} conversions. + * soft-fp/floattisd.c: New file. + * soft-fp/floattidd.c: New file. + * soft-fp/floattitd.c: New file. + * soft-fp/floatuntisd.c: New file. + * soft-fp/floatuntidd.c: New file. + * soft-fp/floatuntitd.c: New file. + * soft-fp/fixsdti.c: New file. + * soft-fp/fixddti.c: New file. + * soft-fp/fixtdti.c: New file. + * soft-fp/fixunssdti.c: New file. + * soft-fp/fixunsddti.c: New file. + * soft-fp/fixunstdti.c: New file. + 2023-11-07 Kwok Cheung Yeung * offloadstuff.c (OFFLOAD_IND_FUNC_TABLE_SECTION_NAME): New. diff --git a/libgcc/config/avr/libf7/ChangeLog b/libgcc/config/avr/libf7/ChangeLog index dac2d62beac1..d161a10e5a3d 100644 --- a/libgcc/config/avr/libf7/ChangeLog +++ b/libgcc/config/avr/libf7/ChangeLog @@ -1,3 +1,15 @@ +2023-11-14 Georg-Johann Lay + + * libf7-const.def [F7MOD_sinh_]: Add MiniMax polynomial. + * libf7.c (f7_sinh): Use it instead of (exp(x) - exp(-x)) / 2 + when |x| < 0.5 to avoid loss of precision due to cancellation. + +2023-11-12 Georg-Johann Lay + + * libf7-asm.sx (sqrt_approx): Rewrite. + * libf7.c (f7_sqrt): Use it instead of sqrt_worker. + (sqrt_worker): Remove. + 2023-11-08 Georg-Johann Lay * libf7-asm.sx (mul_mant) [AVR_HAVE_MUL]: Tweak code. diff --git a/libgm2/ChangeLog b/libgm2/ChangeLog index 7fda5997edf7..c79542b48789 100644 --- a/libgm2/ChangeLog +++ b/libgm2/ChangeLog @@ -1,3 +1,19 @@ +2023-11-13 Gaius Mulley + + PR modula2/110779 + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * config.h.in: Regenerate. + * configure: Regenerate. + * configure.ac: Remove newline. + * libm2cor/Makefile.in: Regenerate. + * libm2iso/Makefile.in: Regenerate. + * libm2log/Makefile.in: Regenerate. + * libm2min/Makefile.in: Regenerate. + * libm2pim/Makefile.in: Regenerate. + * acinclude.m4: New file. + * configure.host: New file. + 2023-10-27 Gaius Mulley PR modula2/112110 diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index bcd5fa325878..ec3bb886006c 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,8 @@ +2023-11-10 Tobias Burnus + + * libgomp.texi (OpenMP Impl. Status): Update for OpenMP TR12; + renamed section from TR11. + 2023-11-07 Kwok Cheung Yeung * config/linux/target-indirect.c: Move to... diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 71b6dec118ab..c9d4d81e8563 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,11 @@ +2023-11-10 Brendan Shanks + + * configure.ac (AC_CHECK_HEADERS): Add spawn.h. + (checkfuncs): Add posix_spawn, posix_spawnp. + (AC_CHECK_FUNCS): Add posix_spawn, posix_spawnp. + * aclocal.m4, configure, config.in: Rebuild. + * pex-unix.c [HAVE_POSIX_SPAWN] (pex_unix_exec_child): New function. + 2023-08-22 Jason Merrill PR c++/109751 diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 9b9a48c833ad..b5fd35d81f66 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,187 @@ +2023-11-13 Arsen Arsenović + + * configure: Regenerate. + +2023-11-13 Jonathan Wakely + + * testsuite/std/time/clock/file/io.cc: Double timeout using + dg-timeout-factor. + * testsuite/std/time/clock/gps/io.cc: Likewise. + * testsuite/std/time/clock/local/io.cc: Likewise. + * testsuite/std/time/clock/system/io.cc: Likewise. + * testsuite/std/time/clock/tai/io.cc: Likewise. + * testsuite/std/time/clock/utc/io.cc: Likewise. + +2023-11-13 Jonathan Wakely + + PR libstdc++/112480 + * include/std/optional (_Optional_payload_base::_M_reset): Set + _M_engaged to false unconditionally. + +2023-11-11 Jonathan Wakely + + PR libstdc++/112467 + * include/bits/stl_bvector.h (_M_assume_normalized): Do not use + statement form of assume attribute for Clang. + +2023-11-11 Jonathan Wakely + + * include/std/string_view (operator==, operator<=>): Remove + redundant overloads (LWG 3950). + +2023-11-11 Jonathan Wakely + + * testsuite/26_numerics/headers/complex.h/std_c++11.h: Moved to... + * testsuite/26_numerics/headers/complex.h/std_c++11.cc: ...here. + * testsuite/26_numerics/headers/complex.h/std_c++98.h: Moved to... + * testsuite/26_numerics/headers/complex.h/std_c++98.cc: ...here. + Check macro first and then #undef. + * testsuite/26_numerics/headers/complex.h/std_gnu++11.h: Moved to... + * testsuite/26_numerics/headers/complex.h/std_gnu++11.cc: ...here. + +2023-11-11 Jonathan Wakely + + PR libstdc++/112473 + * include/bits/utility.h (integer_sequence): Add static_assert. + * testsuite/20_util/integer_sequence/112473.cc: New test. + +2023-11-11 Jonathan Wakely + + * testsuite/20_util/pair/dangling_ref.cc: Add hosted effective + target for specifiers using c++17_down. + +2023-11-11 Jonathan Wakely + + * include/bits/shared_ptr_atomic.h (atomic_is_lock_free) + (atomic_load_explicit, atomic_load, atomic_store_explicit) + (atomic_store, atomic_exchange_explicit, atomic_exchange) + (atomic_compare_exchange_strong, atomic_compare_exchange_weak) + (atomic_compare_exchange_strong_explicit) + (atomic_compare_exchange_weak_explicit): Add deprecated + attribute for C++20 and later. + * testsuite/20_util/shared_ptr/atomic/1.cc: Suppress deprecated + warnings. + * testsuite/20_util/shared_ptr/atomic/2.cc: Likewise. + * testsuite/20_util/shared_ptr/atomic/3.cc: Likewise. + * testsuite/29_atomics/atomic/lwg3220.cc: Likewise. + +2023-11-11 Jonathan Wakely + + * include/bits/std_mutex.h (lock_guard): Add [[nodiscard]] + attribute to constructors. + * include/bits/unique_lock.h (unique_lock): Likewise. + * include/std/mutex (scoped_lock, scoped_lock): Likewise. + * testsuite/30_threads/lock_guard/cons/nodiscard.cc: New test. + * testsuite/30_threads/scoped_lock/cons/nodiscard.cc: New test. + * testsuite/30_threads/unique_lock/cons/nodiscard.cc: New test. + +2023-11-11 Jonathan Wakely + + * include/std/span (span, as_bytes, as_writable_bytes): Add + [[nodiscard]] attribute on all non-void functions. + * testsuite/23_containers/span/back_assert_neg.cc: Suppress + nodiscard warning. + * testsuite/23_containers/span/back_neg.cc: Likewise. + * testsuite/23_containers/span/first_2_assert_neg.cc: Likewise. + * testsuite/23_containers/span/first_assert_neg.cc: Likewise. + * testsuite/23_containers/span/first_neg.cc: Likewise. + * testsuite/23_containers/span/front_assert_neg.cc: Likewise. + * testsuite/23_containers/span/front_neg.cc: Likewise. + * testsuite/23_containers/span/index_op_assert_neg.cc: Likewise. + * testsuite/23_containers/span/index_op_neg.cc: Likewise. + * testsuite/23_containers/span/last_2_assert_neg.cc: Likewise. + * testsuite/23_containers/span/last_assert_neg.cc: Likewise. + * testsuite/23_containers/span/last_neg.cc: Likewise. + * testsuite/23_containers/span/subspan_2_assert_neg.cc: + Likewise. + * testsuite/23_containers/span/subspan_3_assert_neg.cc: + Likewise. + * testsuite/23_containers/span/subspan_4_assert_neg.cc: + Likewise. + * testsuite/23_containers/span/subspan_5_assert_neg.cc: + Likewise. + * testsuite/23_containers/span/subspan_6_assert_neg.cc: + Likewise. + * testsuite/23_containers/span/subspan_assert_neg.cc: Likewise. + * testsuite/23_containers/span/subspan_neg.cc: Likewise. + * testsuite/23_containers/span/nodiscard.cc: New test. + +2023-11-11 Jonathan Wakely + + PR libstdc++/111638 + * config.h.in: Regenerate. + * configure: Regenerate. + * linkage.m4 (GLIBCXX_MAYBE_UNDERSCORED_FUNCS): Remove. + (GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1): Do not check for _foo. + (GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1): Likewise. + (GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2): Likewise. + (GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3): Likewise. + (GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2): Do not use + GLIBCXX_MAYBE_UNDERSCORED_FUNCS. + +2023-11-11 Nathaniel Shead + + PR libstdc++/79700 + * include/c_global/cmath (acosf, acosl, asinf, asinl, atanf) + (atanl, atan2f, atan2l, ceilf, ceill, cosf, cosl, coshf, coshl) + (expf, expl, fabsf, fabsl, floorf, floorl, fmodf, fmodl, frexpf) + (frexpl, ldexpf, ldexpl, logf, logl, log10f, log10l, modff) + (modfl, powf, powl, sinf, sinl, sinhf, sinhl, sqrtf, sqrtl, tanf) + (tanl, tanhf, tanhl): Add using-declarations in namespace std. + * testsuite/26_numerics/headers/cmath/equivalent_functions.cc: + New test. + * testsuite/26_numerics/headers/cmath/functions_std_c++17.cc: + Add checks for existence of above names. + +2023-11-09 Arsen Arsenović + + * testsuite/20_util/scoped_allocator/noexcept.cc: Mark as + requiring hosted. + +2023-11-09 Arsen Arsenović + + * include/bits/memoryfwd.h: Remove HOSTED check around allocator + and its specializations. + +2023-11-09 Patrick Palka + + PR libstdc++/112453 + * include/std/ranges (__detail::__box<_Tp>::operator*): Define + && overloads as well. + (__detail::__take_of_repeat_view): Forward __r when accessing + its _M_value member. + (__detail::__drop_of_repeat_view): Likewise. + * testsuite/std/ranges/repeat/1.cc (test07): New test. + +2023-11-09 François Dumont + + * include/bits/hashtable_policy.h (_RehashStateGuard): New. + (_Insert_base<>::_M_insert_range(_IIt, _IIt, const _NodeGet&, false_type)): + Adapt. + * include/bits/hashtable.h (__rehash_guard_t): New. + (__rehash_state): Remove. + (_M_rehash): Remove. + (_M_rehash_aux): Rename into _M_rehash. + (_M_assign_elements, _M_insert_unique_node, _M_insert_multi_node): Adapt. + (rehash): Adapt. + +2023-11-09 François Dumont + + * include/bits/hashtable_policy.h + (struct _NodePtrGuard<_HashtableAlloc, _NodePtr>): New. + (_ReuseAllocNode::operator()(_Args&&...)): Use latter to guard allocated node + pointer while constructing in place the value_type instance. + +2023-11-09 Alexandre Oliva + + PR libstdc++/110807 + * include/bits/stl_bvector.h (_Bit_iterator_base): Add + _M_assume_normalized member function. Call it in _M_bump_up, + _M_bump_down, _M_incr, operator==, operator<=>, operator<, and + operator-. + (_Bit_iterator): Also call it in operator*. + (_Bit_const_iterator): Likewise. + 2023-11-07 François Dumont * include/bits/hashtable_policy.h diff --git a/maintainer-scripts/ChangeLog b/maintainer-scripts/ChangeLog index 9c692290f4f9..5608e52f4593 100644 --- a/maintainer-scripts/ChangeLog +++ b/maintainer-scripts/ChangeLog @@ -1,3 +1,11 @@ +2023-11-14 Sam James + + * gcc_release: Cleanup whitespace. + +2023-11-14 Sam James + + * gcc_release: Use HTTPS for links. + 2023-07-07 Richard Biener * crontab: Remove entry for GCC 10. From 5ea2965b499f9e491e45db19fedbccfccb75076a Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Tue, 14 Nov 2023 11:37:13 +0100 Subject: [PATCH 020/169] tree-optimization/112281 - loop distribution and zero dependence distances We currently distribute for (c = 2; c; c--) for (e = 0; e < 2; e++) { d[c] = b = d[c + 1]; d[c + 1].a = 0; } in a wrong way where the inner loop zero dependence distance should make us preserve stmt execution order. We fail to do so since we only look for a fully zero distance vector rather than looking at the innermost loop distance. This is somewhat similar to PR87022 where we instead looked at the outermost loop distance and changed this to what we do now. The following switches us to look at the innermost loop distance. PR tree-optimization/112281 * tree-loop-distribution.cc (pg_add_dependence_edges): Preserve stmt order when the innermost loop has exact overlap. * gcc.dg/torture/pr112281.c: New testcase. --- gcc/testsuite/gcc.dg/torture/pr112281.c | 19 +++++++++++++++++++ gcc/tree-loop-distribution.cc | 7 ++++--- 2 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr112281.c diff --git a/gcc/testsuite/gcc.dg/torture/pr112281.c b/gcc/testsuite/gcc.dg/torture/pr112281.c new file mode 100644 index 000000000000..3f0a61a93766 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr112281.c @@ -0,0 +1,19 @@ +/* { dg-do run } */ +/* { dg-additional-options "-ftree-loop-distribution" } */ + +struct { + int : 8; + int a; +} b, d[4] = {{0}, {0}, {0}, {5}}; +int c, e; +int main() +{ + for (c = 2; c; c--) + for (e = 0; e < 2; e++) { + d[c] = b = d[c + 1]; + d[c + 1].a = 0; + } + if (b.a != 0) + __builtin_abort(); + return 0; +} diff --git a/gcc/tree-loop-distribution.cc b/gcc/tree-loop-distribution.cc index 8abfa9920701..8e92af61c57f 100644 --- a/gcc/tree-loop-distribution.cc +++ b/gcc/tree-loop-distribution.cc @@ -2163,9 +2163,10 @@ loop_distribution::pg_add_dependence_edges (struct graph *rdg, int dir, gcc.dg/tree-ssa/pr94969.c. */ if (DDR_NUM_DIST_VECTS (ddr) != 1) this_dir = 2; - /* If the overlap is exact preserve stmt order. */ - else if (lambda_vector_zerop (DDR_DIST_VECT (ddr, 0), - DDR_NB_LOOPS (ddr))) + /* If the dependence distance is zero in the innermost + loop preserve stmt order. */ + else if (DDR_DIST_VECT (ddr, 0) + [DDR_LOOP_NEST (ddr).length () - 1] == 0) ; /* Else as the distance vector is lexicographic positive swap the dependence direction. */ From bc390ae72ff974d6985639b5b392f6e9192c2ee7 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Tue, 14 Nov 2023 12:53:18 +0100 Subject: [PATCH 021/169] Loop distribution fix for SCC detection The following adjusts data_dep_in_cycle_p to properly consider the whole loop nest when looking for data dep cycles and exempting zero-distance DDRs instead of just the outermost loop. * tree-loop-distribution.cc (loop_distribution::data_dep_in_cycle_p): Consider all loops in the nest when looking for lambda_vector_zerop. --- gcc/tree-loop-distribution.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/tree-loop-distribution.cc b/gcc/tree-loop-distribution.cc index 8e92af61c57f..5ededd97c3d6 100644 --- a/gcc/tree-loop-distribution.cc +++ b/gcc/tree-loop-distribution.cc @@ -1440,7 +1440,7 @@ loop_distribution::data_dep_in_cycle_p (struct graph *rdg, else if (DDR_NUM_DIST_VECTS (ddr) > 1) return true; else if (DDR_REVERSED_P (ddr) - || lambda_vector_zerop (DDR_DIST_VECT (ddr, 0), 1)) + || lambda_vector_zerop (DDR_DIST_VECT (ddr, 0), DDR_NB_LOOPS (ddr))) return false; return true; From 2066c29bf8dea87c9810eb261e342d941a6b2059 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Tue, 14 Nov 2023 14:26:17 +0100 Subject: [PATCH 022/169] tree-optimization/111233 - loop splitting miscompile The change in r14-2852-gf5fb9ff2396fd4 failed to update patch_loop_exit to compensate for rewriting of a NE/EQ_EXPR to a new code. Fixed with the following. PR tree-optimization/111233 PR tree-optimization/111652 PR tree-optimization/111727 PR tree-optimization/111838 PR tree-optimization/112113 * tree-ssa-loop-split.cc (patch_loop_exit): Get the new guard code instead of the old guard stmt. (split_loop): Adjust. * gcc.dg/torture/pr111233.c: New testcase. * gcc.dg/torture/pr111652.c: Likewise. * gcc.dg/torture/pr111727.c: Likewise. * gcc.dg/torture/pr111838.c: Likewise. * gcc.dg/torture/pr112113.c: Likewise. --- gcc/testsuite/gcc.dg/torture/pr111233.c | 19 +++++++++++++++++++ gcc/testsuite/gcc.dg/torture/pr111652.c | 15 +++++++++++++++ gcc/testsuite/gcc.dg/torture/pr111727.c | 14 ++++++++++++++ gcc/testsuite/gcc.dg/torture/pr111838.c | 17 +++++++++++++++++ gcc/testsuite/gcc.dg/torture/pr112113.c | 16 ++++++++++++++++ gcc/tree-ssa-loop-split.cc | 9 ++++----- 6 files changed, 85 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr111233.c create mode 100644 gcc/testsuite/gcc.dg/torture/pr111652.c create mode 100644 gcc/testsuite/gcc.dg/torture/pr111727.c create mode 100644 gcc/testsuite/gcc.dg/torture/pr111838.c create mode 100644 gcc/testsuite/gcc.dg/torture/pr112113.c diff --git a/gcc/testsuite/gcc.dg/torture/pr111233.c b/gcc/testsuite/gcc.dg/torture/pr111233.c new file mode 100644 index 000000000000..30934033ae0d --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr111233.c @@ -0,0 +1,19 @@ +/* { dg-do run } */ +/* { dg-additional-options "-fsplit-loops" } */ + +int a, c, f; +char b, g; +int *d = &c; +long e; +int main() +{ + for (; e != 25; e++) { + f = -17; + for (; f <= 0; f = f + 7) { + g = f ? 0 : b; + a = *d; + } + } + if (a != 0) + __builtin_abort (); +} diff --git a/gcc/testsuite/gcc.dg/torture/pr111652.c b/gcc/testsuite/gcc.dg/torture/pr111652.c new file mode 100644 index 000000000000..ebca9c798165 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr111652.c @@ -0,0 +1,15 @@ +/* { dg-do run } */ +/* { dg-additional-options "-fsplit-loops" } */ + +volatile int a; +int b; +int main() { + for (; b < 5; b += 3) { + b && a; + if (b < 4) + a--; + } + if (b != 6) + __builtin_abort(); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr111727.c b/gcc/testsuite/gcc.dg/torture/pr111727.c new file mode 100644 index 000000000000..fb68e197e2bb --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr111727.c @@ -0,0 +1,14 @@ +/* { dg-do run } */ +/* { dg-additional-options "-fsplit-loops" } */ + +int a, b; +int main() +{ + for (; a < 4; a += 2) + if (a > 2) + while (b++); + ; + if (a != 4) + __builtin_abort(); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr111838.c b/gcc/testsuite/gcc.dg/torture/pr111838.c new file mode 100644 index 000000000000..67007d9742d5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr111838.c @@ -0,0 +1,17 @@ +/* { dg-do run } */ +/* { dg-additional-options "-fsplit-loops" } */ + +int a, b, c; +volatile char d; +int main() +{ + for (; b < 1; b++) + for (char e = -17; e < 1; e += 5) + { + if (e ? a % e : 0) + d; + for (c = 0; c < 1; c++) + ; + } + return 0; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr112113.c b/gcc/testsuite/gcc.dg/torture/pr112113.c new file mode 100644 index 000000000000..96cd75f1be29 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr112113.c @@ -0,0 +1,16 @@ +/* { dg-do run } */ +/* The -Waggressive-loop-optimizations diagnostic is spurious, missed + constant propagation after final value replacement. */ +/* { dg-additional-options "-Wno-aggressive-loop-optimizations -fsplit-loops" } */ + +volatile int a; +int main() +{ + for (int b = 0; b < 33; b += 3) { + if (b > 31) + a++; + } + if (a != 0) + __builtin_abort(); + return 0; +} diff --git a/gcc/tree-ssa-loop-split.cc b/gcc/tree-ssa-loop-split.cc index 64464802c1e5..2e2adb67260a 100644 --- a/gcc/tree-ssa-loop-split.cc +++ b/gcc/tree-ssa-loop-split.cc @@ -194,13 +194,12 @@ split_at_bb_p (class loop *loop, basic_block bb, tree *border, affine_iv *iv, also be true/false in the next iteration. */ static void -patch_loop_exit (class loop *loop, gcond *guard, tree nextval, tree newbound, - bool initial_true) +patch_loop_exit (class loop *loop, tree_code guard_code, tree nextval, + tree newbound, bool initial_true) { edge exit = single_exit (loop); gcond *stmt = as_a (*gsi_last_bb (exit->src)); - gimple_cond_set_condition (stmt, gimple_cond_code (guard), - nextval, newbound); + gimple_cond_set_condition (stmt, guard_code, nextval, newbound); update_stmt (stmt); edge stay = EDGE_SUCC (exit->src, EDGE_SUCC (exit->src, 0) == exit); @@ -745,7 +744,7 @@ split_loop (class loop *loop1) gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop1), stmts); tree guard_next = PHI_ARG_DEF_FROM_EDGE (phi, loop_latch_edge (loop1)); - patch_loop_exit (loop1, guard_stmt, guard_next, newend, initial_true); + patch_loop_exit (loop1, guard_code, guard_next, newend, initial_true); /* Finally patch out the two copies of the condition to be always true/false (or opposite). */ From ddb479e796bee3964ddb6a2daa8f79598e47cede Mon Sep 17 00:00:00 2001 From: Saurabh Jha Date: Tue, 14 Nov 2023 14:48:40 +0000 Subject: [PATCH 023/169] Add a REG_P check for inc and dec for Arm MVE This patch tightens mve_vector_mem_operand to reject non-register operands inside {PRE,POST}_{INC,DEC} addresses by introducing a REG_P check. This patch fixes this ICE:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112337 gcc/ChangeLog: PR target/112337 * config/arm/arm.cc (mve_vector_mem_operand): Add a REG_P check for INC and DEC operations. gcc/testsuite/ChangeLog: PR target/112337 * gcc.target/arm/mve/pr112337.c: Test for REG_P check for INC and DEC operations. --- gcc/config/arm/arm.cc | 7 +++++-- gcc/testsuite/gcc.target/arm/mve/pr112337.c | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.target/arm/mve/pr112337.c diff --git a/gcc/config/arm/arm.cc b/gcc/config/arm/arm.cc index 620ef7bfb2f3..25a1ad736ad9 100644 --- a/gcc/config/arm/arm.cc +++ b/gcc/config/arm/arm.cc @@ -13695,8 +13695,11 @@ mve_vector_mem_operand (machine_mode mode, rtx op, bool strict) } code = GET_CODE (op); - if (code == POST_INC || code == PRE_DEC - || code == PRE_INC || code == POST_DEC) + if ((code == POST_INC + || code == PRE_DEC + || code == PRE_INC + || code == POST_DEC) + && REG_P (XEXP (op, 0))) { reg_no = arm_effective_regno (XEXP (op, 0), strict); return (((mode == E_V8QImode || mode == E_V4QImode || mode == E_V4HImode) diff --git a/gcc/testsuite/gcc.target/arm/mve/pr112337.c b/gcc/testsuite/gcc.target/arm/mve/pr112337.c new file mode 100644 index 000000000000..8f4919900884 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/mve/pr112337.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-require-effective-target arm_v8_1m_mve_ok } */ +/* { dg-add-options arm_v8_1m_mve } */ +#include + +void g(int32x4_t); +void f(int, int, int, short, int *p) { + int *bias = p; + for (;;) { + int32x4_t d = vldrwq_s32 (p); + bias += 4; + g(d); + } +} From 2c2fcd6d2a315069f9bef0117f8d7bebe7cb4957 Mon Sep 17 00:00:00 2001 From: Stefan Schulze Frielinghaus Date: Tue, 14 Nov 2023 16:15:51 +0100 Subject: [PATCH 024/169] s390: Fix vec_scatter_element for vectors of floats The offset for vec_scatter_element of floats should be a vector of type UV4SI instead of V4SF. Note, this is an incompatibility change. gcc/ChangeLog: * config/s390/s390-builtin-types.def: Add/remove types. * config/s390/s390-builtins.def (s390_vec_scatter_element_flt): The type for the offset should be UV4SI instead of V4SF. --- gcc/config/s390/s390-builtin-types.def | 2 +- gcc/config/s390/s390-builtins.def | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/config/s390/s390-builtin-types.def b/gcc/config/s390/s390-builtin-types.def index 3d8b30cdcc85..22ee348dbbb6 100644 --- a/gcc/config/s390/s390-builtin-types.def +++ b/gcc/config/s390/s390-builtin-types.def @@ -856,7 +856,7 @@ DEF_OV_TYPE (BT_OV_VOID_V2DI_LONG_LONGLONGPTR, BT_VOID, BT_V2DI, BT_LONG, BT_LON DEF_OV_TYPE (BT_OV_VOID_V2DI_UV2DI_LONGLONGPTR_ULONGLONG, BT_VOID, BT_V2DI, BT_UV2DI, BT_LONGLONGPTR, BT_ULONGLONG) DEF_OV_TYPE (BT_OV_VOID_V4SF_FLTPTR_UINT, BT_VOID, BT_V4SF, BT_FLTPTR, BT_UINT) DEF_OV_TYPE (BT_OV_VOID_V4SF_LONG_FLTPTR, BT_VOID, BT_V4SF, BT_LONG, BT_FLTPTR) -DEF_OV_TYPE (BT_OV_VOID_V4SF_V4SF_FLTPTR_ULONGLONG, BT_VOID, BT_V4SF, BT_V4SF, BT_FLTPTR, BT_ULONGLONG) +DEF_OV_TYPE (BT_OV_VOID_V4SF_UV4SI_FLTPTR_ULONGLONG, BT_VOID, BT_V4SF, BT_UV4SI, BT_FLTPTR, BT_ULONGLONG) DEF_OV_TYPE (BT_OV_VOID_V4SI_INTPTR_UINT, BT_VOID, BT_V4SI, BT_INTPTR, BT_UINT) DEF_OV_TYPE (BT_OV_VOID_V4SI_LONG_INTPTR, BT_VOID, BT_V4SI, BT_LONG, BT_INTPTR) DEF_OV_TYPE (BT_OV_VOID_V4SI_UV4SI_INTPTR_ULONGLONG, BT_VOID, BT_V4SI, BT_UV4SI, BT_INTPTR, BT_ULONGLONG) diff --git a/gcc/config/s390/s390-builtins.def b/gcc/config/s390/s390-builtins.def index 964d86c74a05..b59fa09fe07f 100644 --- a/gcc/config/s390/s390-builtins.def +++ b/gcc/config/s390/s390-builtins.def @@ -708,7 +708,7 @@ OB_DEF_VAR (s390_vec_scatter_element_u32,s390_vscef, 0, OB_DEF_VAR (s390_vec_scatter_element_s64,s390_vsceg, 0, O4_U1, BT_OV_VOID_V2DI_UV2DI_LONGLONGPTR_ULONGLONG) OB_DEF_VAR (s390_vec_scatter_element_b64,s390_vsceg, 0, O4_U1, BT_OV_VOID_BV2DI_UV2DI_ULONGLONGPTR_ULONGLONG) OB_DEF_VAR (s390_vec_scatter_element_u64,s390_vsceg, 0, O4_U1, BT_OV_VOID_UV2DI_UV2DI_ULONGLONGPTR_ULONGLONG) -OB_DEF_VAR (s390_vec_scatter_element_flt,s390_vscef, B_VXE, O4_U2, BT_OV_VOID_V4SF_V4SF_FLTPTR_ULONGLONG) +OB_DEF_VAR (s390_vec_scatter_element_flt,s390_vscef, B_VXE, O4_U2, BT_OV_VOID_V4SF_UV4SI_FLTPTR_ULONGLONG) OB_DEF_VAR (s390_vec_scatter_element_dbl,s390_vsceg, 0, O4_U1, BT_OV_VOID_V2DF_UV2DI_DBLPTR_ULONGLONG) B_DEF (s390_vscef, vec_scatter_elementv4si,0, B_VX, O4_U2, BT_FN_VOID_UV4SI_UV4SI_UINTPTR_ULONGLONG) From 8f331be42991aa4d58ac770faf993accfcce882b Mon Sep 17 00:00:00 2001 From: Andrew MacLeod Date: Mon, 13 Nov 2023 09:58:10 -0500 Subject: [PATCH 025/169] Use case label type to create case range. Create a range from the label type, and cast it to the required type. PR tree-optimization/112509 gcc/ * tree-vrp.cc (find_case_label_range): Create range from case labels. gcc/testsuite/ * gcc.dg/pr112509.c: New. --- gcc/testsuite/gcc.dg/pr112509.c | 22 ++++++++++++++++++++++ gcc/tree-vrp.cc | 6 +----- 2 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr112509.c diff --git a/gcc/testsuite/gcc.dg/pr112509.c b/gcc/testsuite/gcc.dg/pr112509.c new file mode 100644 index 000000000000..b733780bdc74 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr112509.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-tree-vrp -fno-tree-fre -fno-tree-forwprop" } */ + +struct S { + unsigned j : 3; +}; +int k, l, m_1 = {0}; +void f(int l, struct S x) { + unsigned int k_1; + while (m_1 % 8) switch (x.j) { + case 1: + case 3: + case 4: + case 6: + case 2: + case 5: l = m_1; + case 7: + case 0: k_1 = 0; + default: break; + } +} +void foo(struct S x) { f(l, x); } diff --git a/gcc/tree-vrp.cc b/gcc/tree-vrp.cc index 19d8f995d702..917fa873714f 100644 --- a/gcc/tree-vrp.cc +++ b/gcc/tree-vrp.cc @@ -886,8 +886,6 @@ find_case_label_range (gswitch *switch_stmt, const irange *range_of_op) size_t i, j; tree op = gimple_switch_index (switch_stmt); tree type = TREE_TYPE (op); - unsigned prec = TYPE_PRECISION (type); - signop sign = TYPE_SIGN (type); tree tmin = wide_int_to_tree (type, range_of_op->lower_bound ()); tree tmax = wide_int_to_tree (type, range_of_op->upper_bound ()); find_case_label_range (switch_stmt, tmin, tmax, &i, &j); @@ -900,9 +898,7 @@ find_case_label_range (gswitch *switch_stmt, const irange *range_of_op) = CASE_HIGH (label) ? CASE_HIGH (label) : CASE_LOW (label); wide_int wlow = wi::to_wide (CASE_LOW (label)); wide_int whigh = wi::to_wide (case_high); - int_range_max label_range (type, - wide_int::from (wlow, prec, sign), - wide_int::from (whigh, prec, sign)); + int_range_max label_range (TREE_TYPE (case_high), wlow, whigh); if (!types_compatible_p (label_range.type (), range_of_op->type ())) range_cast (label_range, range_of_op->type ()); label_range.intersect (*range_of_op); From 4db820928065eccbeb725406450d826186582b9f Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 14 Nov 2023 15:08:13 +0000 Subject: [PATCH 026/169] libstdc++: Fix std::deque::size() Xmethod [PR112491] The Xmethod for std::deque::size() assumed that the first element would be at the start of the first node. That's only true if elements are only added at the back. If an element is inserted at the front, or removed from the front (or anywhere before the middle) then the first node will not be completely populated, and the Xmethod will give the wrong result. libstdc++-v3/ChangeLog: PR libstdc++/112491 * python/libstdcxx/v6/xmethods.py (DequeWorkerBase.size): Fix calculation to use _M_start._M_cur. * testsuite/libstdc++-xmethods/deque.cc: Check failing cases. --- libstdc++-v3/python/libstdcxx/v6/xmethods.py | 13 +++++++----- .../testsuite/libstdc++-xmethods/deque.cc | 20 +++++++++++++++++++ 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/libstdc++-v3/python/libstdcxx/v6/xmethods.py b/libstdc++-v3/python/libstdcxx/v6/xmethods.py index 42e60eb57b1f..dcef285180a8 100644 --- a/libstdc++-v3/python/libstdcxx/v6/xmethods.py +++ b/libstdc++-v3/python/libstdcxx/v6/xmethods.py @@ -193,11 +193,14 @@ class DequeWorkerBase(gdb.xmethod.XMethodWorker): self._bufsize = 512 // val_type.sizeof or 1 def size(self, obj): - first_node = obj['_M_impl']['_M_start']['_M_node'] - last_node = obj['_M_impl']['_M_finish']['_M_node'] - cur = obj['_M_impl']['_M_finish']['_M_cur'] - first = obj['_M_impl']['_M_finish']['_M_first'] - return (last_node - first_node) * self._bufsize + (cur - first) + start = obj['_M_impl']['_M_start'] + finish = obj['_M_impl']['_M_finish'] + if not start['_M_node']: + return 0 + return (self._bufsize + * (finish['_M_node'] - start['_M_node'] - 1) + + (finish['_M_cur'] - finish['_M_first']) + + (start['_M_last'] - start['_M_cur'])) def index(self, obj, idx): first_node = obj['_M_impl']['_M_start']['_M_node'] diff --git a/libstdc++-v3/testsuite/libstdc++-xmethods/deque.cc b/libstdc++-v3/testsuite/libstdc++-xmethods/deque.cc index 2d7e846334fc..e4077c14ff5a 100644 --- a/libstdc++-v3/testsuite/libstdc++-xmethods/deque.cc +++ b/libstdc++-v3/testsuite/libstdc++-xmethods/deque.cc @@ -67,6 +67,26 @@ main () // { dg-final { whatis-test q1.back() int } } // { dg-final { whatis-test q3\[0\] int } } + // PR libstdc++/112491 + std::deque q5; + q5.push_front(0); +// { dg-final { note-test q5.size() 1 } } + std::deque q6 = q1; + q6.pop_front(); +// { dg-final { note-test {q6.size() == (q1_size-1)} true } } + std::deque q7 = q2; + q7.pop_front(); + q7.pop_front(); +// { dg-final { note-test {q7.size() == (q2_size-2)} true } } + std::deque q8 = q3; + q8.pop_front(); + q8.pop_front(); + q8.pop_front(); +// { dg-final { note-test {q8.size() == (q3_size-3)} true } } + std::deque q9 = q8; + q9.clear(); +// { dg-final { note-test q9.size() 0 } } + return 0; // Mark SPOT } From 070944fdd6394c992885f33f5bde8a231d37fa7f Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Tue, 14 Nov 2023 11:01:39 -0500 Subject: [PATCH 027/169] json: reduce use of naked new in json-building code No functional change intended. gcc/ChangeLog: * diagnostic-format-json.cc: Use type-specific "set_*" functions of json::object to avoid naked new of json value subclasses. * diagnostic-format-sarif.cc: Likewise. * gcov.cc: Likewise. * json.cc (object::set_string): New. (object::set_integer): New. (object::set_float): New. (object::set_bool): New. (selftest::test_writing_objects): Use object::set_string. * json.h (object::set_string): New decl. (object::set_integer): New decl. (object::set_float): New decl. (object::set_bool): New decl. * optinfo-emit-json.cc: Use type-specific "set_*" functions of json::object to avoid naked new of json value subclasses. * timevar.cc: Likewise. * tree-diagnostic-path.cc: Likewise. Signed-off-by: David Malcolm --- gcc/diagnostic-format-json.cc | 27 ++++----- gcc/diagnostic-format-sarif.cc | 106 ++++++++++++++++----------------- gcc/gcov.cc | 65 ++++++++------------ gcc/json.cc | 40 ++++++++++++- gcc/json.h | 7 +++ gcc/optinfo-emit-json.cc | 45 +++++++------- gcc/timevar.cc | 20 +++---- gcc/tree-diagnostic-path.cc | 7 +-- 8 files changed, 167 insertions(+), 150 deletions(-) diff --git a/gcc/diagnostic-format-json.cc b/gcc/diagnostic-format-json.cc index 8321c488d280..7c5a126786e6 100644 --- a/gcc/diagnostic-format-json.cc +++ b/gcc/diagnostic-format-json.cc @@ -94,8 +94,8 @@ json_from_expanded_location (diagnostic_context *context, location_t loc) expanded_location exploc = expand_location (loc); json::object *result = new json::object (); if (exploc.file) - result->set ("file", new json::string (exploc.file)); - result->set ("line", new json::integer_number (exploc.line)); + result->set_string ("file", exploc.file); + result->set_integer ("line", exploc.line); const enum diagnostics_column_unit orig_unit = context->m_column_unit; struct @@ -111,12 +111,12 @@ json_from_expanded_location (diagnostic_context *context, location_t loc) { context->m_column_unit = column_fields[i].unit; const int col = context->converted_column (exploc); - result->set (column_fields[i].name, new json::integer_number (col)); + result->set_integer (column_fields[i].name, col); if (column_fields[i].unit == orig_unit) the_column = col; } gcc_assert (the_column != INT_MIN); - result->set ("column", new json::integer_number (the_column)); + result->set_integer ("column", the_column); context->m_column_unit = orig_unit; return result; } @@ -148,7 +148,7 @@ json_from_location_range (diagnostic_context *context, { label_text text (loc_range->m_label->get_text (range_idx)); if (text.get ()) - result->set ("label", new json::string (text.get ())); + result->set_string ("label", text.get ()); } return result; @@ -165,7 +165,7 @@ json_from_fixit_hint (diagnostic_context *context, const fixit_hint *hint) fixit_obj->set ("start", json_from_expanded_location (context, start_loc)); location_t next_loc = hint->get_next_loc (); fixit_obj->set ("next", json_from_expanded_location (context, next_loc)); - fixit_obj->set ("string", new json::string (hint->get_string ())); + fixit_obj->set_string ("string", hint->get_string ()); return fixit_obj; } @@ -178,8 +178,7 @@ json_from_metadata (const diagnostic_metadata *metadata) json::object *metadata_obj = new json::object (); if (metadata->get_cwe ()) - metadata_obj->set ("cwe", - new json::integer_number (metadata->get_cwe ())); + metadata_obj->set_integer ("cwe", metadata->get_cwe ()); return metadata_obj; } @@ -210,13 +209,12 @@ json_output_format::on_end_diagnostic (diagnostic_info *diagnostic, gcc_assert (kind_text[len - 1] == ' '); char *rstrip = xstrdup (kind_text); rstrip[len - 2] = '\0'; - diag_obj->set ("kind", new json::string (rstrip)); + diag_obj->set_string ("kind", rstrip); free (rstrip); } // FIXME: encoding of the message (json::string requires UTF-8) - diag_obj->set ("message", - new json::string (pp_formatted_text (m_context.printer))); + diag_obj->set_string ("message", pp_formatted_text (m_context.printer)); pp_clear_output_area (m_context.printer); char *option_text; @@ -224,7 +222,7 @@ json_output_format::on_end_diagnostic (diagnostic_info *diagnostic, orig_diag_kind, diagnostic->kind); if (option_text) { - diag_obj->set ("option", new json::string (option_text)); + diag_obj->set_string ("option", option_text); free (option_text); } @@ -234,7 +232,7 @@ json_output_format::on_end_diagnostic (diagnostic_info *diagnostic, diagnostic->option_index); if (option_url) { - diag_obj->set ("option_url", new json::string (option_url)); + diag_obj->set_string ("option_url", option_url); free (option_url); } } @@ -254,8 +252,7 @@ json_output_format::on_end_diagnostic (diagnostic_info *diagnostic, m_cur_group = diag_obj; m_cur_children_array = new json::array (); diag_obj->set ("children", m_cur_children_array); - diag_obj->set ("column-origin", - new json::integer_number (m_context.m_column_origin)); + diag_obj->set_integer ("column-origin", m_context.m_column_origin); } const rich_location *richloc = diagnostic->richloc; diff --git a/gcc/diagnostic-format-sarif.cc b/gcc/diagnostic-format-sarif.cc index 25f623927240..fa3ca2e9ae9a 100644 --- a/gcc/diagnostic-format-sarif.cc +++ b/gcc/diagnostic-format-sarif.cc @@ -289,7 +289,7 @@ void sarif_invocation::prepare_to_flush (diagnostic_context *context) { /* "executionSuccessful" property (SARIF v2.1.0 section 3.20.14). */ - set ("executionSuccessful", new json::literal (m_success)); + set_bool ("executionSuccessful", m_success); /* "toolExecutionNotifications" property (SARIF v2.1.0 section 3.20.21). */ set ("toolExecutionNotifications", m_notifications_arr); @@ -380,7 +380,7 @@ sarif_ice_notification::sarif_ice_notification (diagnostic_context *context, set ("message", message_obj); /* "level" property (SARIF v2.1.0 section 3.58.6). */ - set ("level", new json::string ("error")); + set_string ("level", "error"); } /* class sarif_thread_flow : public sarif_object. */ @@ -389,7 +389,7 @@ sarif_thread_flow::sarif_thread_flow (const diagnostic_thread &thread) { /* "id" property (SARIF v2.1.0 section 3.37.2). */ label_text name (thread.get_name (false)); - set ("id", new json::string (name.get ())); + set_string ("id", name.get ()); /* "locations" property (SARIF v2.1.0 section 3.37.6). */ m_locations_arr = new json::array (); @@ -541,7 +541,7 @@ sarif_builder::make_result_object (diagnostic_context *context, { /* Lazily create reportingDescriptor objects for and add to m_rules_arr. Set ruleId referencing them. */ - result_obj->set ("ruleId", new json::string (option_text)); + result_obj->set_string ("ruleId", option_text); if (m_rule_id_set.contains (option_text)) free (option_text); else @@ -565,7 +565,7 @@ sarif_builder::make_result_object (diagnostic_context *context, has a ruleId. We don't bother creating reportingDescriptor objects for these. */ char *rule_id = make_rule_id_for_diagnostic_kind (orig_diag_kind); - result_obj->set ("ruleId", new json::string (rule_id)); + result_obj->set_string ("ruleId", rule_id); free (rule_id); } @@ -582,7 +582,7 @@ sarif_builder::make_result_object (diagnostic_context *context, /* "level" property (SARIF v2.1.0 section 3.27.10). */ if (const char *sarif_level = maybe_get_sarif_level (diagnostic->kind)) - result_obj->set ("level", new json::string (sarif_level)); + result_obj->set_string ("level", sarif_level); /* "message" property (SARIF v2.1.0 section 3.27.11). */ json::object *message_obj @@ -633,7 +633,7 @@ make_reporting_descriptor_object_for_warning (diagnostic_context *context, json::object *reporting_desc = new json::object (); /* "id" property (SARIF v2.1.0 section 3.49.3). */ - reporting_desc->set ("id", new json::string (option_text)); + reporting_desc->set_string ("id", option_text); /* We don't implement "name" property (SARIF v2.1.0 section 3.49.7), since it seems redundant compared to "id". */ @@ -645,7 +645,7 @@ make_reporting_descriptor_object_for_warning (diagnostic_context *context, = context->m_get_option_url (context, diagnostic->option_index); if (option_url) { - reporting_desc->set ("helpUri", new json::string (option_url)); + reporting_desc->set_string ("helpUri", option_url); free (option_url); } } @@ -665,13 +665,13 @@ sarif_builder::make_reporting_descriptor_object_for_cwe_id (int cwe_id) const { pretty_printer pp; pp_printf (&pp, "%i", cwe_id); - reporting_desc->set ("id", new json::string (pp_formatted_text (&pp))); + reporting_desc->set_string ("id", pp_formatted_text (&pp)); } /* "helpUri" property (SARIF v2.1.0 section 3.49.12). */ { char *url = get_cwe_url (cwe_id); - reporting_desc->set ("helpUri", new json::string (url)); + reporting_desc->set_string ("helpUri", url); free (url); } @@ -692,7 +692,7 @@ make_reporting_descriptor_reference_object_for_cwe_id (int cwe_id) { pretty_printer pp; pp_printf (&pp, "%i", cwe_id); - desc_ref_obj->set ("id", new json::string (pp_formatted_text (&pp))); + desc_ref_obj->set_string ("id", pp_formatted_text (&pp)); } /* "toolComponent" property (SARIF v2.1.0 section 3.52.7). */ @@ -716,7 +716,7 @@ make_tool_component_reference_object_for_cwe () const json::object *comp_ref_obj = new json::object (); /* "name" property (SARIF v2.1.0 section 3.54.3). */ - comp_ref_obj->set ("name", new json::string ("cwe")); + comp_ref_obj->set_string ("name", "cwe"); return comp_ref_obj; } @@ -858,13 +858,13 @@ sarif_builder::make_artifact_location_object (const char *filename) json::object *artifact_loc_obj = new json::object (); /* "uri" property (SARIF v2.1.0 section 3.4.3). */ - artifact_loc_obj->set ("uri", new json::string (filename)); + artifact_loc_obj->set_string ("uri", filename); if (filename[0] != '/') { /* If we have a relative path, set the "uriBaseId" property (SARIF v2.1.0 section 3.4.4). */ - artifact_loc_obj->set ("uriBaseId", new json::string (PWD_PROPERTY_NAME)); + artifact_loc_obj->set_string ("uriBaseId", PWD_PROPERTY_NAME); m_seen_any_relative_paths = true; } @@ -908,7 +908,7 @@ sarif_builder::make_artifact_location_object_for_pwd () const { gcc_assert (strlen (pwd) > 0); gcc_assert (pwd[strlen (pwd) - 1] == '/'); - artifact_loc_obj->set ("uri", new json::string (pwd)); + artifact_loc_obj->set_string ("uri", pwd); free (pwd); } @@ -950,21 +950,20 @@ sarif_builder::maybe_make_region_object (location_t loc) const json::object *region_obj = new json::object (); /* "startLine" property (SARIF v2.1.0 section 3.30.5) */ - region_obj->set ("startLine", new json::integer_number (exploc_start.line)); + region_obj->set_integer ("startLine", exploc_start.line); /* "startColumn" property (SARIF v2.1.0 section 3.30.6) */ - region_obj->set ("startColumn", - new json::integer_number (get_sarif_column (exploc_start))); + region_obj->set_integer ("startColumn", get_sarif_column (exploc_start)); /* "endLine" property (SARIF v2.1.0 section 3.30.7) */ if (exploc_finish.line != exploc_start.line) - region_obj->set ("endLine", new json::integer_number (exploc_finish.line)); + region_obj->set_integer ("endLine", exploc_finish.line); /* "endColumn" property (SARIF v2.1.0 section 3.30.8). This expresses the column immediately beyond the range. */ { int next_column = sarif_builder::get_sarif_column (exploc_finish) + 1; - region_obj->set ("endColumn", new json::integer_number (next_column)); + region_obj->set_integer ("endColumn", next_column); } return region_obj; @@ -1001,11 +1000,11 @@ sarif_builder::maybe_make_region_object_for_context (location_t loc) const json::object *region_obj = new json::object (); /* "startLine" property (SARIF v2.1.0 section 3.30.5) */ - region_obj->set ("startLine", new json::integer_number (exploc_start.line)); + region_obj->set_integer ("startLine", exploc_start.line); /* "endLine" property (SARIF v2.1.0 section 3.30.7) */ if (exploc_finish.line != exploc_start.line) - region_obj->set ("endLine", new json::integer_number (exploc_finish.line)); + region_obj->set_integer ("endLine", exploc_finish.line); /* "snippet" property (SARIF v2.1.0 section 3.30.13). */ if (json::object *artifact_content_obj @@ -1032,21 +1031,20 @@ sarif_builder::make_region_object_for_hint (const fixit_hint &hint) const json::object *region_obj = new json::object (); /* "startLine" property (SARIF v2.1.0 section 3.30.5) */ - region_obj->set ("startLine", new json::integer_number (exploc_start.line)); + region_obj->set_integer ("startLine", exploc_start.line); /* "startColumn" property (SARIF v2.1.0 section 3.30.6) */ int start_col = get_sarif_column (exploc_start); - region_obj->set ("startColumn", - new json::integer_number (start_col)); + region_obj->set_integer ("startColumn", start_col); /* "endLine" property (SARIF v2.1.0 section 3.30.7) */ if (exploc_next.line != exploc_start.line) - region_obj->set ("endLine", new json::integer_number (exploc_next.line)); + region_obj->set_integer ("endLine", exploc_next.line); /* "endColumn" property (SARIF v2.1.0 section 3.30.8). This expresses the column immediately beyond the range. */ int next_col = get_sarif_column (exploc_next); - region_obj->set ("endColumn", new json::integer_number (next_col)); + region_obj->set_integer ("endColumn", next_col); return region_obj; } @@ -1095,21 +1093,20 @@ make_logical_location_object (const logical_location &logical_loc) const /* "name" property (SARIF v2.1.0 section 3.33.4). */ if (const char *short_name = logical_loc.get_short_name ()) - logical_loc_obj->set ("name", new json::string (short_name)); + logical_loc_obj->set_string ("name", short_name); /* "fullyQualifiedName" property (SARIF v2.1.0 section 3.33.5). */ if (const char *name_with_scope = logical_loc.get_name_with_scope ()) - logical_loc_obj->set ("fullyQualifiedName", - new json::string (name_with_scope)); + logical_loc_obj->set_string ("fullyQualifiedName", name_with_scope); /* "decoratedName" property (SARIF v2.1.0 section 3.33.6). */ if (const char *internal_name = logical_loc.get_internal_name ()) - logical_loc_obj->set ("decoratedName", new json::string (internal_name)); + logical_loc_obj->set_string ("decoratedName", internal_name); /* "kind" property (SARIF v2.1.0 section 3.33.7). */ enum logical_location_kind kind = logical_loc.get_kind (); if (const char *sarif_kind_str = maybe_get_sarif_kind (kind)) - logical_loc_obj->set ("kind", new json::string (sarif_kind_str)); + logical_loc_obj->set_string ("kind", sarif_kind_str); return logical_loc_obj; } @@ -1172,13 +1169,11 @@ sarif_builder::make_thread_flow_location_object (const diagnostic_event &ev, thread_flow_loc_obj->set ("kinds", kinds_arr); /* "nestingLevel" property (SARIF v2.1.0 section 3.38.10). */ - thread_flow_loc_obj->set ("nestingLevel", - new json::integer_number (ev.get_stack_depth ())); + thread_flow_loc_obj->set_integer ("nestingLevel", ev.get_stack_depth ()); /* "executionOrder" property (SARIF v2.1.0 3.38.11). Offset by 1 to match the human-readable values emitted by %@. */ - thread_flow_loc_obj->set ("executionOrder", - new json::integer_number (path_event_idx + 1)); + thread_flow_loc_obj->set_integer ("executionOrder", path_event_idx + 1); /* It might be nice to eventually implement the following for -fanalyzer: - the "stack" property (SARIF v2.1.0 section 3.38.5) @@ -1222,7 +1217,7 @@ sarif_builder::make_message_object (const char *msg) const json::object *message_obj = new json::object (); /* "text" property (SARIF v2.1.0 section 3.11.8). */ - message_obj->set ("text", new json::string (msg)); + message_obj->set_string ("text", msg); return message_obj; } @@ -1238,7 +1233,7 @@ sarif_builder::make_message_object_for_diagram (diagnostic_context *context, json::object *message_obj = new json::object (); /* "text" property (SARIF v2.1.0 section 3.11.8). */ - message_obj->set ("text", new json::string (diagram.get_alt_text ())); + message_obj->set_string ("text", diagram.get_alt_text ()); char *saved_prefix = pp_take_prefix (context->printer); pp_set_prefix (context->printer, NULL); @@ -1250,8 +1245,7 @@ sarif_builder::make_message_object_for_diagram (diagnostic_context *context, pp_set_prefix (context->printer, saved_prefix); /* "markdown" property (SARIF v2.1.0 section 3.11.9). */ - message_obj->set ("markdown", - new json::string (pp_formatted_text (context->printer))); + message_obj->set_string ("markdown", pp_formatted_text (context->printer)); pp_clear_output_area (context->printer); @@ -1267,7 +1261,7 @@ sarif_builder::make_multiformat_message_string (const char *msg) const json::object *message_obj = new json::object (); /* "text" property (SARIF v2.1.0 section 3.12.3). */ - message_obj->set ("text", new json::string (msg)); + message_obj->set_string ("text", msg); return message_obj; } @@ -1285,10 +1279,10 @@ sarif_builder::make_top_level_object (sarif_invocation *invocation_obj, json::object *log_obj = new json::object (); /* "$schema" property (SARIF v2.1.0 section 3.13.3) . */ - log_obj->set ("$schema", new json::string (SARIF_SCHEMA)); + log_obj->set_string ("$schema", SARIF_SCHEMA); /* "version" property (SARIF v2.1.0 section 3.13.2). */ - log_obj->set ("version", new json::string (SARIF_VERSION)); + log_obj->set_string ("version", SARIF_VERSION); /* "runs" property (SARIF v2.1.0 section 3.13.4). */ json::array *run_arr = new json::array (); @@ -1376,15 +1370,15 @@ sarif_builder::make_tool_object () const /* "name" property (SARIF v2.1.0 section 3.19.8). */ if (const char *short_name = p.get_short_name ()) - plugin_obj->set ("name", new json::string (short_name)); + plugin_obj->set_string ("name", short_name); /* "fullName" property (SARIF v2.1.0 section 3.19.9). */ if (const char *full_name = p.get_full_name ()) - plugin_obj->set ("fullName", new json::string (full_name)); + plugin_obj->set_string ("fullName", full_name); /* "version" property (SARIF v2.1.0 section 3.19.13). */ if (const char *version = p.get_version ()) - plugin_obj->set ("version", new json::string (version)); + plugin_obj->set_string ("version", version); } auto_vec m_plugin_objs; }; @@ -1419,23 +1413,23 @@ sarif_builder::make_driver_tool_component_object () const { /* "name" property (SARIF v2.1.0 section 3.19.8). */ if (const char *name = vinfo->get_tool_name ()) - driver_obj->set ("name", new json::string (name)); + driver_obj->set_string ("name", name); /* "fullName" property (SARIF v2.1.0 section 3.19.9). */ if (char *full_name = vinfo->maybe_make_full_name ()) { - driver_obj->set ("fullName", new json::string (full_name)); + driver_obj->set_string ("fullName", full_name); free (full_name); } /* "version" property (SARIF v2.1.0 section 3.19.13). */ if (const char *version = vinfo->get_version_string ()) - driver_obj->set ("version", new json::string (version)); + driver_obj->set_string ("version", version); /* "informationUri" property (SARIF v2.1.0 section 3.19.17). */ if (char *version_url = vinfo->maybe_make_version_url ()) { - driver_obj->set ("informationUri", new json::string (version_url)); + driver_obj->set_string ("informationUri", version_url); free (version_url); } } @@ -1480,13 +1474,13 @@ sarif_builder::maybe_make_cwe_taxonomy_object () const json::object *taxonomy_obj = new json::object (); /* "name" property (SARIF v2.1.0 section 3.19.8). */ - taxonomy_obj->set ("name", new json::string ("CWE")); + taxonomy_obj->set_string ("name", "CWE"); /* "version" property (SARIF v2.1.0 section 3.19.13). */ - taxonomy_obj->set ("version", new json::string ("4.7")); + taxonomy_obj->set_string ("version", "4.7"); /* "organization" property (SARIF v2.1.0 section 3.19.18). */ - taxonomy_obj->set ("organization", new json::string ("MITRE")); + taxonomy_obj->set_string ("organization", "MITRE"); /* "shortDescription" property (SARIF v2.1.0 section 3.19.19). */ json::object *short_desc @@ -1527,7 +1521,7 @@ sarif_builder::make_artifact_object (const char *filename) if (auto client_data_hooks = m_context->get_client_data_hooks ()) if (const char *source_lang = client_data_hooks->maybe_get_sarif_source_language (filename)) - artifact_obj->set ("sourceLanguage", new json::string (source_lang)); + artifact_obj->set_string ("sourceLanguage", source_lang); return artifact_obj; } @@ -1602,7 +1596,7 @@ sarif_builder::maybe_make_artifact_content_object (const char *filename, } json::object *artifact_content_obj = new json::object (); - artifact_content_obj->set ("text", new json::string (text_utf8)); + artifact_content_obj->set_string ("text", text_utf8); free (text_utf8); return artifact_content_obj; @@ -1676,7 +1670,7 @@ sarif_builder::make_artifact_content_object (const char *text) const json::object *content_obj = new json::object (); /* "text" property (SARIF v2.1.0 section 3.3.2). */ - content_obj->set ("text", new json::string (text)); + content_obj->set_string ("text", text); return content_obj; } diff --git a/gcc/gcov.cc b/gcc/gcov.cc index 2fad6aa7edec..8b4748d3a1a8 100644 --- a/gcc/gcov.cc +++ b/gcc/gcov.cc @@ -1109,12 +1109,11 @@ output_intermediate_json_line (json::array *object, return; json::object *lineo = new json::object (); - lineo->set ("line_number", new json::integer_number (line_num)); + lineo->set_integer ("line_number", line_num); if (function_name != NULL) - lineo->set ("function_name", new json::string (function_name)); - lineo->set ("count", new json::integer_number (line->count)); - lineo->set ("unexecuted_block", - new json::literal (line->has_unexecuted_block)); + lineo->set_string ("function_name", function_name); + lineo->set_integer ("count", line->count); + lineo->set_bool ("unexecuted_block", line->has_unexecuted_block); json::array *bb_ids = new json::array (); for (const block_info *block : line->blocks) @@ -1135,25 +1134,20 @@ output_intermediate_json_line (json::array *object, if (!(*it)->is_unconditional && !(*it)->is_call_non_return) { json::object *branch = new json::object (); - branch->set ("count", new json::integer_number ((*it)->count)); - branch->set ("throw", new json::literal ((*it)->is_throw)); - branch->set ("fallthrough", - new json::literal ((*it)->fall_through)); - branch->set ("source_block_id", - new json::integer_number ((*it)->src->id)); - branch->set ("destination_block_id", - new json::integer_number ((*it)->dst->id)); + branch->set_integer ("count", (*it)->count); + branch->set_bool ("throw", (*it)->is_throw); + branch->set_bool ("fallthrough", (*it)->fall_through); + branch->set_integer ("source_block_id", (*it)->src->id); + branch->set_integer ("destination_block_id", (*it)->dst->id); branches->append (branch); } else if ((*it)->is_call_non_return) { json::object *call = new json::object (); gcov_type returns = (*it)->src->count - (*it)->count; - call->set ("source_block_id", - new json::integer_number ((*it)->src->id)); - call->set ("destination_block_id", - new json::integer_number ((*it)->dst->id)); - call->set ("returned", new json::integer_number (returns)); + call->set_integer ("source_block_id", (*it)->src->id); + call->set_integer ("destination_block_id", (*it)->dst->id); + call->set_integer ("returned", returns); calls->append (call); } } @@ -1236,7 +1230,7 @@ output_json_intermediate_file (json::array *json_files, source_info *src) json::object *root = new json::object (); json_files->append (root); - root->set ("file", new json::string (src->name)); + root->set_string ("file", src->name); json::array *functions = new json::array (); root->set ("functions", functions); @@ -1247,22 +1241,15 @@ output_json_intermediate_file (json::array *json_files, source_info *src) it != src->functions.end (); it++) { json::object *function = new json::object (); - function->set ("name", new json::string ((*it)->m_name)); - function->set ("demangled_name", - new json::string ((*it)->get_demangled_name ())); - function->set ("start_line", - new json::integer_number ((*it)->start_line)); - function->set ("start_column", - new json::integer_number ((*it)->start_column)); - function->set ("end_line", new json::integer_number ((*it)->end_line)); - function->set ("end_column", - new json::integer_number ((*it)->end_column)); - function->set ("blocks", - new json::integer_number ((*it)->get_block_count ())); - function->set ("blocks_executed", - new json::integer_number ((*it)->blocks_executed)); - function->set ("execution_count", - new json::integer_number ((*it)->blocks[0].count)); + function->set_string ("name", (*it)->m_name); + function->set_string ("demangled_name", (*it)->get_demangled_name ()); + function->set_integer ("start_line", (*it)->start_line); + function->set_integer ("start_column", (*it)->start_column); + function->set_integer ("end_line", (*it)->end_line); + function->set_integer ("end_column", (*it)->end_column); + function->set_integer ("blocks", (*it)->get_block_count ()); + function->set_integer ("blocks_executed", (*it)->blocks_executed); + function->set_integer ("execution_count", (*it)->blocks[0].count); functions->append (function); } @@ -1549,12 +1536,12 @@ generate_results (const char *file_name) gcov_intermediate_filename = get_gcov_intermediate_filename (file_name); json::object *root = new json::object (); - root->set ("format_version", new json::string (GCOV_JSON_FORMAT_VERSION)); - root->set ("gcc_version", new json::string (version_string)); + root->set_string ("format_version", GCOV_JSON_FORMAT_VERSION); + root->set_string ("gcc_version", version_string); if (bbg_cwd != NULL) - root->set ("current_working_directory", new json::string (bbg_cwd)); - root->set ("data_file", new json::string (file_name)); + root->set_string ("current_working_directory", bbg_cwd); + root->set_string ("data_file", file_name); json::array *json_files = new json::array (); root->set ("files", json_files); diff --git a/gcc/json.cc b/gcc/json.cc index 741e97b20e5e..f5398ece066a 100644 --- a/gcc/json.cc +++ b/gcc/json.cc @@ -128,6 +128,42 @@ object::get (const char *key) const return NULL; } +/* Set value of KEY within this object to a JSON + string value based on UTF8_VALUE. */ + +void +object::set_string (const char *key, const char *utf8_value) +{ + set (key, new json::string (utf8_value)); +} + +/* Set value of KEY within this object to a JSON + integer value based on V. */ + +void +object::set_integer (const char *key, long v) +{ + set (key, new json::integer_number (v)); +} + +/* Set value of KEY within this object to a JSON + floating point value based on V. */ + +void +object::set_float (const char *key, double v) +{ + set (key, new json::float_number (v)); +} + +/* Set value of KEY within this object to the JSON + literal true or false, based on V. */ + +void +object::set_bool (const char *key, bool v) +{ + set (key, new json::literal (v)); +} + /* class json::array, a subclass of json::value, representing an ordered collection of values. */ @@ -311,8 +347,8 @@ static void test_writing_objects () { object obj; - obj.set ("foo", new json::string ("bar")); - obj.set ("baz", new json::string ("quux")); + obj.set_string ("foo", "bar"); + obj.set_string ("baz", "quux"); /* This test relies on json::object writing out key/value pairs in key-insertion order. */ assert_print_eq (obj, "{\"foo\": \"bar\", \"baz\": \"quux\"}"); diff --git a/gcc/json.h b/gcc/json.h index 6cc58c8ae0c2..6fadd119ba57 100644 --- a/gcc/json.h +++ b/gcc/json.h @@ -102,6 +102,13 @@ class object : public value void set (const char *key, value *v); value *get (const char *key) const; + void set_string (const char *key, const char *utf8_value); + void set_integer (const char *key, long v); + void set_float (const char *key, double v); + + /* Set to literal true/false. */ + void set_bool (const char *key, bool v); + private: typedef hash_map > map_t; diff --git a/gcc/optinfo-emit-json.cc b/gcc/optinfo-emit-json.cc index a4e8faa83732..11cad42a4330 100644 --- a/gcc/optinfo-emit-json.cc +++ b/gcc/optinfo-emit-json.cc @@ -58,14 +58,14 @@ optrecord_json_writer::optrecord_json_writer () /* Populate with metadata; compare with toplev.cc: print_version. */ json::object *metadata = new json::object (); m_root_tuple->append (metadata); - metadata->set ("format", new json::string ("1")); + metadata->set_string ("format", "1"); json::object *generator = new json::object (); metadata->set ("generator", generator); - generator->set ("name", new json::string (lang_hooks.name)); - generator->set ("pkgversion", new json::string (pkgversion_string)); - generator->set ("version", new json::string (version_string)); + generator->set_string ("name", lang_hooks.name); + generator->set_string ("pkgversion", pkgversion_string); + generator->set_string ("version", version_string); /* TARGET_NAME is passed in by the Makefile. */ - generator->set ("target", new json::string (TARGET_NAME)); + generator->set_string ("target", TARGET_NAME); /* TODO: capture command-line? see gen_producer_string in dwarf2out.cc (currently static). */ @@ -180,10 +180,10 @@ json::object * optrecord_json_writer::impl_location_to_json (dump_impl_location_t loc) { json::object *obj = new json::object (); - obj->set ("file", new json::string (loc.m_file)); - obj->set ("line", new json::integer_number (loc.m_line)); + obj->set_string ("file", loc.m_file); + obj->set_integer ("line", loc.m_line); if (loc.m_function) - obj->set ("function", new json::string (loc.m_function)); + obj->set_string ("function", loc.m_function); return obj; } @@ -195,9 +195,9 @@ optrecord_json_writer::location_to_json (location_t loc) gcc_assert (LOCATION_LOCUS (loc) != UNKNOWN_LOCATION); expanded_location exploc = expand_location (loc); json::object *obj = new json::object (); - obj->set ("file", new json::string (exploc.file)); - obj->set ("line", new json::integer_number (exploc.line)); - obj->set ("column", new json::integer_number (exploc.column)); + obj->set_string ("file", exploc.file); + obj->set_integer ("line", exploc.line); + obj->set_integer ("column", exploc.column); return obj; } @@ -207,9 +207,8 @@ json::object * optrecord_json_writer::profile_count_to_json (profile_count count) { json::object *obj = new json::object (); - obj->set ("value", new json::integer_number (count.to_gcov_type ())); - obj->set ("quality", - new json::string (profile_quality_as_string (count.quality ()))); + obj->set_integer ("value", count.to_gcov_type ()); + obj->set_string ("quality", profile_quality_as_string (count.quality ())); return obj; } @@ -250,8 +249,8 @@ optrecord_json_writer::pass_to_json (opt_pass *pass) break; } obj->set ("id", get_id_value_for_pass (pass)); - obj->set ("type", new json::string (type)); - obj->set ("name", new json::string (pass->name)); + obj->set_string ("type", type); + obj->set_string ("name", pass->name); /* Represent the optgroup flags as an array. */ { json::array *optgroups = new json::array (); @@ -262,7 +261,7 @@ optrecord_json_writer::pass_to_json (opt_pass *pass) && (pass->optinfo_flags & optgroup->value)) optgroups->append (new json::string (optgroup->name)); } - obj->set ("num", new json::integer_number (pass->static_pass_number)); + obj->set_integer ("num", pass->static_pass_number); return obj; } @@ -315,7 +314,7 @@ optrecord_json_writer::inlining_chain_to_json (location_t loc) json::object *obj = new json::object (); const char *printable_name = lang_hooks.decl_printable_name (fndecl, 2); - obj->set ("fndecl", new json::string (printable_name)); + obj->set_string ("fndecl", printable_name); if (LOCATION_LOCUS (*locus) != UNKNOWN_LOCATION) obj->set ("site", location_to_json (*locus)); array->append (obj); @@ -336,7 +335,7 @@ optrecord_json_writer::optinfo_to_json (const optinfo *optinfo) impl_location_to_json (optinfo->get_impl_location ())); const char *kind_str = optinfo_kind_to_string (optinfo->get_kind ()); - obj->set ("kind", new json::string (kind_str)); + obj->set_string ("kind", kind_str); json::array *message = new json::array (); obj->set ("message", message); for (unsigned i = 0; i < optinfo->num_items (); i++) @@ -354,7 +353,7 @@ optrecord_json_writer::optinfo_to_json (const optinfo *optinfo) case OPTINFO_ITEM_KIND_TREE: { json::object *json_item = new json::object (); - json_item->set ("expr", new json::string (item->get_text ())); + json_item->set_string ("expr", item->get_text ()); /* Capture any location for the node. */ if (LOCATION_LOCUS (item->get_location ()) != UNKNOWN_LOCATION) @@ -367,7 +366,7 @@ optrecord_json_writer::optinfo_to_json (const optinfo *optinfo) case OPTINFO_ITEM_KIND_GIMPLE: { json::object *json_item = new json::object (); - json_item->set ("stmt", new json::string (item->get_text ())); + json_item->set_string ("stmt", item->get_text ()); /* Capture any location for the stmt. */ if (LOCATION_LOCUS (item->get_location ()) != UNKNOWN_LOCATION) @@ -380,7 +379,7 @@ optrecord_json_writer::optinfo_to_json (const optinfo *optinfo) case OPTINFO_ITEM_KIND_SYMTAB_NODE: { json::object *json_item = new json::object (); - json_item->set ("symtab_node", new json::string (item->get_text ())); + json_item->set_string ("symtab_node", item->get_text ()); /* Capture any location for the node. */ if (LOCATION_LOCUS (item->get_location ()) != UNKNOWN_LOCATION) @@ -413,7 +412,7 @@ optrecord_json_writer::optinfo_to_json (const optinfo *optinfo) { const char *fnname = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (current_function_decl)); - obj->set ("function", new json::string (fnname)); + obj->set_string ("function", fnname); } if (loc != UNKNOWN_LOCATION) diff --git a/gcc/timevar.cc b/gcc/timevar.cc index a63e5c6334e6..f89e61055e00 100644 --- a/gcc/timevar.cc +++ b/gcc/timevar.cc @@ -841,12 +841,10 @@ json::object * make_json_for_timevar_time_def (const timevar_time_def &ttd) { json::object *obj = new json::object (); - obj->set ("user", - new json::float_number (nanosec_to_floating_sec (ttd.user))); - obj->set ("sys", new json::float_number (nanosec_to_floating_sec (ttd.sys))); - obj->set ("wall", - new json::float_number (nanosec_to_floating_sec (ttd.wall))); - obj->set ("ggc_mem", new json::integer_number (ttd.ggc_mem)); + obj->set_float ("user", nanosec_to_floating_sec (ttd.user)); + obj->set_float ("sys", nanosec_to_floating_sec (ttd.sys)); + obj->set_float ("wall", nanosec_to_floating_sec (ttd.wall)); + obj->set_integer ("ggc_mem", ttd.ggc_mem); return obj; } #undef nanosec_to_floating_sec @@ -859,7 +857,7 @@ json::value * timer::timevar_def::make_json () const { json::object *timevar_obj = new json::object (); - timevar_obj->set ("name", new json::string (name)); + timevar_obj->set_string ("name", name); timevar_obj->set ("elapsed", make_json_for_timevar_time_def (elapsed)); if (children) @@ -883,7 +881,7 @@ timer::timevar_def::make_json () const continue; json::object *child_obj = new json::object; children_arr->append (child_obj); - child_obj->set ("name", new json::string (i.first->name)); + child_obj->set_string ("name", i.first->name); child_obj->set ("elapsed", make_json_for_timevar_time_def (i.second)); } @@ -947,15 +945,15 @@ timer::make_json () const json::object *total_obj = new json::object(); json_arr->append (total_obj); - total_obj->set ("name", new json::string ("TOTAL")); + total_obj->set_string ("name", "TOTAL"); total_obj->set ("elapsed", make_json_for_timevar_time_def (total_elapsed)); } if (m_jit_client_items) report_obj->set ("client_items", m_jit_client_items->make_json ()); - report_obj->set ("CHECKING_P", new json::literal ((bool)CHECKING_P)); - report_obj->set ("flag_checking", new json::literal ((bool)flag_checking)); + report_obj->set_bool ("CHECKING_P", CHECKING_P); + report_obj->set_bool ("flag_checking", flag_checking); return report_obj; diff --git a/gcc/tree-diagnostic-path.cc b/gcc/tree-diagnostic-path.cc index ee957cce2cf5..d2345c8dae74 100644 --- a/gcc/tree-diagnostic-path.cc +++ b/gcc/tree-diagnostic-path.cc @@ -673,15 +673,14 @@ default_tree_make_json_for_path (diagnostic_context *context, json_from_expanded_location (context, event.get_location ())); label_text event_text (event.get_desc (false)); - event_obj->set ("description", new json::string (event_text.get ())); + event_obj->set_string ("description", event_text.get ()); if (tree fndecl = event.get_fndecl ()) { const char *function = identifier_to_locale (lang_hooks.decl_printable_name (fndecl, 2)); - event_obj->set ("function", new json::string (function)); + event_obj->set_string ("function", function); } - event_obj->set ("depth", - new json::integer_number (event.get_stack_depth ())); + event_obj->set_integer ("depth", event.get_stack_depth ()); path_array->append (event_obj); } return path_array; From 1bdd665a025a74f4f1b641600a8c0bbca3355aa7 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Tue, 14 Nov 2023 11:01:40 -0500 Subject: [PATCH 028/169] input.h: eliminate implicit users of global_dc's file_cache This patch eliminates the following functions that implicitly used global_dc's file cache: extern char_span location_get_source_line (const char *file_path, int line); extern char_span get_source_file_content (const char *file_path); extern bool location_missing_trailing_newline (const char *file_path); in favor of explicitly using a specific file_cache throughout, and only using global_dc's file_cache in gcc-specific code. Rather than creating global_dc's file_cache the first time its needed, this patch simply creates one when a diagnostic_context is initialized, and eliminates diagnostic_file_cache_init. No functional change intended. gcc/c-family/ChangeLog: * c-common.cc (c_get_substring_location): Use global_dc's file_cache. * c-format.cc (get_corrected_substring): Likewise. * c-indentation.cc (get_visual_column): Add file_cache param. (get_first_nws_vis_column): Likewise. (detect_intervening_unindent): Likewise. (should_warn_for_misleading_indentation): Use global_dc's file_cache. (assert_get_visual_column_succeeds): Add file_cache param. (ASSERT_GET_VISUAL_COLUMN_SUCCEEDS): Likewise. (assert_get_visual_column_fails): Likewise. (define ASSERT_GET_VISUAL_COLUMN_FAILS): Likewise. (selftest::test_get_visual_column): Create and use a temporary file_cache. gcc/cp/ChangeLog: * contracts.cc (build_comment): Use global_dc's file_cache. gcc/ChangeLog: * diagnostic-format-sarif.cc (sarif_builder::get_sarif_column): Use m_context's file_cache. (sarif_builder::maybe_make_artifact_content_object): Likewise. (sarif_builder::get_source_lines): Likewise. * diagnostic-show-locus.cc (exploc_with_display_col::exploc_with_display_col): Add file_cache param. (layout::m_file_cache): New field. (make_range): Add file_cache param. (selftest::test_layout_range_for_single_point): Create and use a temporary file_cache. (selftest::test_layout_range_for_single_line): Likewise. (selftest::test_layout_range_for_multiple_lines): Likewise. (layout::layout): Initialize m_file_cache from the context and use it. (layout::maybe_add_location_range): Use m_file_cache. (layout::calculate_x_offset_display): Likewise. (get_affected_range): Add file_cache param. (get_printed_columns): Likewise. (line_corrections::line_corrections): Likewwise. (line_corrections::m_file_cache): New field. (source_line::source_line): Add file_cache param. (line_corrections::add_hint): Use m_file_cache. (layout::print_trailing_fixits): Likewise. (layout::print_line): Likewise. (selftest::test_layout_x_offset_display_utf8): Create and use a temporary file_cache. (selftest::test_layout_x_offset_display_tab): Likewise. (selftest::test_diagnostic_show_locus_one_liner_utf8): Likewise. (selftest::test_add_location_if_nearby): Pass global_dc's file_cache to temp_source_file ctor. (selftest::test_overlapped_fixit_printing): Create and use a temporary file_cache. (selftest::test_overlapped_fixit_printing_utf8): Likewise. (selftest::test_overlapped_fixit_printing_2): Use dc's file_cache. * diagnostic.cc (diagnostic_context::initialize): Always create a file_cache. (diagnostic_context::initialize_input_context): Assume m_file_cache has already been created. (diagnostic_context::create_edit_context): Pass m_file_cache to edit_context. (convert_column_unit): Add file_cache param. (diagnostic_context::converted_column): Use context's file_cache. (print_parseable_fixits): Add file_cache param. (diagnostic_context::report_diagnostic): Use context's file_cache. (selftest::test_print_parseable_fixits_none): Create and use a temporary file_cache. (selftest::test_print_parseable_fixits_insert): Likewise. (selftest::test_print_parseable_fixits_remove): Likewise. (selftest::test_print_parseable_fixits_replace): Likewise. (selftest::test_print_parseable_fixits_bytes_vs_display_columns): Likewise. * diagnostic.h (diagnostic_context::file_cache_init): Delete. (diagnostic_context::get_file_cache): Convert return type from pointer to reference. * edit-context.cc (edited_file::get_file_cache): New. (edited_file::m_edit_context): New. (edit_context::edit_context): Add file_cache param. (edit_context::get_or_insert_file): Pass this to edited_file's ctor. (edited_file::edited_file): Add edit_context param. (edited_file::print_content): Use get_file_cache. (edited_file::print_diff_hunk): Likewise. (edited_file::print_run_of_changed_lines): Likewise. (edited_file::get_or_insert_line): Likewise. (edited_file::get_num_lines): Likewise. (edited_line::edited_line): Pass in file_cache and use it. (selftest::test_get_content): Create and use a temporary file_cache. (selftest::test_applying_fixits_insert_before): Likewise. (selftest::test_applying_fixits_insert_after): Likewise. (selftest::test_applying_fixits_insert_after_at_line_end): Likewise. (selftest::test_applying_fixits_insert_after_failure): Likewise. (selftest::test_applying_fixits_insert_containing_newline): Likewise. (selftest::test_applying_fixits_growing_replace): Likewise. (selftest::test_applying_fixits_shrinking_replace): Likewise. (selftest::test_applying_fixits_replace_containing_newline): Likewise. (selftest::test_applying_fixits_remove): Likewise. (selftest::test_applying_fixits_multiple): Likewise. (selftest::test_applying_fixits_multiple_lines): Likewise. (selftest::test_applying_fixits_modernize_named_init): Likewise. (selftest::test_applying_fixits_modernize_named_init): Likewise. (selftest::test_applying_fixits_unreadable_file): Likewise. (selftest::test_applying_fixits_line_out_of_range): Likewise. (selftest::test_applying_fixits_column_validation): Likewise. (selftest::test_applying_fixits_column_validation): Likewise. (selftest::test_applying_fixits_column_validation): Likewise. (selftest::test_applying_fixits_column_validation): Likewise. * edit-context.h (edit_context::edit_context): Add file_cache param. (edit_context::get_file_cache): New. (edit_context::m_file_cache): New. * final.cc: Include "diagnostic.h". (asm_show_source): Use global_dc's file_cache. * gcc-rich-location.cc (blank_line_before_p): Add file_cache param. (use_new_line): Likewise. (gcc_rich_location::add_fixit_insert_formatted): Use global dc's file_cache. * input.cc (diagnostic_file_cache_init): Delete. (diagnostic_context::file_cache_init): Delete. (diagnostics_file_cache_forcibly_evict_file): Delete. (file_cache::missing_trailing_newline_p): New. (file_cache::evicted_cache_tab_entry): Don't call diagnostic_file_cache_init. (location_get_source_line): Delete. (get_source_text_between): Add file_cache param. (get_source_file_content): Delete. (location_missing_trailing_newline): Delete. (location_compute_display_column): Add file_cache param. (dump_location_info): Create and use temporary file_cache. (get_substring_ranges_for_loc): Add file_cache param. (get_location_within_string): Likewise. (get_source_range_for_char): Likewise. (get_num_source_ranges_for_substring): Likewise. (selftest::test_reading_source_line): Create and use temporary file_cache. (selftest::lexer_test::m_file_cache): New field. (selftest::assert_char_at_range): Use test.m_file_cache. (selftest::assert_num_substring_ranges): Likewise. (selftest::assert_has_no_substring_ranges): Likewise. (selftest::test_lexer_string_locations_concatenation_2): Likewise. * input.h (class file_cache): New forward decl. (location_compute_display_column): Add file_cache param. (location_get_source_line): Delete. (get_source_text_between): Add file_cache param. (get_source_file_content): Delete. (location_missing_trailing_newline): Delete. (file_cache::missing_trailing_newline_p): New decl. (diagnostics_file_cache_forcibly_evict_file): Delete. * selftest.cc (named_temp_file::named_temp_file): Add file_cache param. (named_temp_file::~named_temp_file): Optionally evict the file from the given file_cache. (temp_source_file::temp_source_file): Add file_cache param. * selftest.h (class file_cache): New forward decl. (named_temp_file::named_temp_file): Add file_cache param. (named_temp_file::m_file_cache): New field. (temp_source_file::temp_source_file): Add file_cache param. * substring-locations.h (get_location_within_string): Add file_cache param. gcc/testsuite/ChangeLog: * gcc.dg/plugin/diagnostic_plugin_test_show_locus.c: Use global_dc's file cache. * gcc.dg/plugin/expensive_selftests_plugin.c: Likewise. Signed-off-by: David Malcolm --- gcc/c-family/c-common.cc | 4 +- gcc/c-family/c-format.cc | 3 +- gcc/c-family/c-indentation.cc | 73 +++++--- gcc/cp/contracts.cc | 3 +- gcc/diagnostic-format-sarif.cc | 7 +- gcc/diagnostic-show-locus.cc | 166 +++++++++++------- gcc/diagnostic.cc | 47 +++-- gcc/diagnostic.h | 7 +- gcc/edit-context.cc | 108 ++++++++---- gcc/edit-context.h | 5 +- gcc/final.cc | 4 +- gcc/gcc-rich-location.cc | 13 +- gcc/input.cc | 125 +++++-------- gcc/input.h | 15 +- gcc/selftest.cc | 12 +- gcc/selftest.h | 11 +- gcc/substring-locations.h | 1 + .../diagnostic_plugin_test_show_locus.c | 3 +- .../plugin/expensive_selftests_plugin.c | 2 +- 19 files changed, 346 insertions(+), 263 deletions(-) diff --git a/gcc/c-family/c-common.cc b/gcc/c-family/c-common.cc index a619429f694f..0ea0c4f4bef5 100644 --- a/gcc/c-family/c-common.cc +++ b/gcc/c-family/c-common.cc @@ -894,7 +894,9 @@ c_get_substring_location (const substring_loc &substr_loc, if (tok_type == CPP_OTHER) return "unrecognized string type"; - return get_location_within_string (parse_in, g_string_concat_db, + return get_location_within_string (parse_in, + global_dc->get_file_cache (), + g_string_concat_db, substr_loc.get_fmt_string_loc (), tok_type, substr_loc.get_caret_idx (), diff --git a/gcc/c-family/c-format.cc b/gcc/c-family/c-format.cc index 1a25141071f3..a6497c662dca 100644 --- a/gcc/c-family/c-format.cc +++ b/gcc/c-family/c-format.cc @@ -4570,7 +4570,8 @@ get_corrected_substring (const substring_loc &fmt_loc, if (caret.column > finish.column) return NULL; - char_span line = location_get_source_line (start.file, start.line); + char_span line + = global_dc->get_file_cache ().get_source_line (start.file, start.line); if (!line) return NULL; diff --git a/gcc/c-family/c-indentation.cc b/gcc/c-family/c-indentation.cc index 5b4614f5fd53..a81dffdcbd0c 100644 --- a/gcc/c-family/c-indentation.cc +++ b/gcc/c-family/c-indentation.cc @@ -45,12 +45,13 @@ next_tab_stop (unsigned int vis_column, unsigned int tab_width) on the line (up to or before EXPLOC). */ static bool -get_visual_column (expanded_location exploc, +get_visual_column (file_cache &fc, + expanded_location exploc, unsigned int *out, unsigned int *first_nws, unsigned int tab_width) { - char_span line = location_get_source_line (exploc.file, exploc.line); + char_span line = fc.get_source_line (exploc.file, exploc.line); if (!line) return false; if ((size_t)exploc.column > line.length ()) @@ -87,13 +88,14 @@ get_visual_column (expanded_location exploc, Otherwise, return false, leaving *FIRST_NWS untouched. */ static bool -get_first_nws_vis_column (const char *file, int line_num, +get_first_nws_vis_column (file_cache &fc, + const char *file, int line_num, unsigned int *first_nws, unsigned int tab_width) { gcc_assert (first_nws); - char_span line = location_get_source_line (file, line_num); + char_span line = fc.get_source_line (file, line_num); if (!line) return false; unsigned int vis_column = 0; @@ -158,7 +160,8 @@ get_first_nws_vis_column (const char *file, int line_num, Return true if such an unindent/outdent is detected. */ static bool -detect_intervening_unindent (const char *file, +detect_intervening_unindent (file_cache &fc, + const char *file, int body_line, int next_stmt_line, unsigned int vis_column, @@ -170,7 +173,7 @@ detect_intervening_unindent (const char *file, for (int line = body_line + 1; line < next_stmt_line; line++) { unsigned int line_vis_column; - if (get_first_nws_vis_column (file, line, &line_vis_column, tab_width)) + if (get_first_nws_vis_column (fc, file, line, &line_vis_column, tab_width)) if (line_vis_column < vis_column) return true; } @@ -337,6 +340,8 @@ should_warn_for_misleading_indentation (const token_indent_info &guard_tinfo, if (next_stmt_exploc.file != body_exploc.file) return false; + file_cache &fc = global_dc->get_file_cache (); + /* If NEXT_STMT_LOC and BODY_LOC are on the same line, consider the location of the guard. @@ -376,7 +381,8 @@ should_warn_for_misleading_indentation (const token_indent_info &guard_tinfo, gcc_assert (guard_exploc.line == next_stmt_exploc.line); unsigned int guard_vis_column; unsigned int guard_line_first_nws; - if (!get_visual_column (guard_exploc, + if (!get_visual_column (fc, + guard_exploc, &guard_vis_column, &guard_line_first_nws, tab_width)) return false; @@ -436,15 +442,18 @@ should_warn_for_misleading_indentation (const token_indent_info &guard_tinfo, the case for input files containing #line directives, and these are often for autogenerated sources (e.g. from .md files), where it's not clear that it's meaningful to look at indentation. */ - if (!get_visual_column (next_stmt_exploc, + if (!get_visual_column (fc, + next_stmt_exploc, &next_stmt_vis_column, &next_stmt_line_first_nws, tab_width)) return false; - if (!get_visual_column (body_exploc, + if (!get_visual_column (fc, + body_exploc, &body_vis_column, &body_line_first_nws, tab_width)) return false; - if (!get_visual_column (guard_exploc, + if (!get_visual_column (fc, + guard_exploc, &guard_vis_column, &guard_line_first_nws, tab_width)) return false; @@ -528,7 +537,8 @@ should_warn_for_misleading_indentation (const token_indent_info &guard_tinfo, /* Don't warn if there is an unindent between the two statements. */ int vis_column = MIN (next_stmt_vis_column, body_vis_column); - if (detect_intervening_unindent (body_exploc.file, body_exploc.line, + if (detect_intervening_unindent (fc, + body_exploc.file, body_exploc.line, next_stmt_exploc.line, vis_column, tab_width)) return false; @@ -686,6 +696,7 @@ test_next_tab_stop () static void assert_get_visual_column_succeeds (const location &loc, + file_cache &fc, const char *file, int line, int column, const unsigned int tab_width, unsigned int expected_visual_column, @@ -699,7 +710,8 @@ assert_get_visual_column_succeeds (const location &loc, exploc.sysp = false; unsigned int actual_visual_column; unsigned int actual_first_nws; - bool result = get_visual_column (exploc, + bool result = get_visual_column (fc, + exploc, &actual_visual_column, &actual_first_nws, tab_width); ASSERT_TRUE_AT (loc, result); @@ -710,12 +722,14 @@ assert_get_visual_column_succeeds (const location &loc, /* Verify that the given call to get_visual_column succeeds, with the given results. */ -#define ASSERT_GET_VISUAL_COLUMN_SUCCEEDS(FILENAME, LINE, COLUMN, \ +#define ASSERT_GET_VISUAL_COLUMN_SUCCEEDS(FILE_CACHE, \ + FILENAME, LINE, COLUMN, \ TAB_WIDTH, \ EXPECTED_VISUAL_COLUMN, \ EXPECTED_FIRST_NWS) \ SELFTEST_BEGIN_STMT \ assert_get_visual_column_succeeds (SELFTEST_LOCATION, \ + FILE_CACHE, \ FILENAME, LINE, COLUMN, \ TAB_WIDTH, \ EXPECTED_VISUAL_COLUMN, \ @@ -726,6 +740,7 @@ assert_get_visual_column_succeeds (const location &loc, static void assert_get_visual_column_fails (const location &loc, + file_cache &fc, const char *file, int line, int column, const unsigned int tab_width) { @@ -737,7 +752,8 @@ assert_get_visual_column_fails (const location &loc, exploc.sysp = false; unsigned int actual_visual_column; unsigned int actual_first_nws; - bool result = get_visual_column (exploc, + bool result = get_visual_column (fc, + exploc, &actual_visual_column, &actual_first_nws, tab_width); ASSERT_FALSE_AT (loc, result); @@ -745,10 +761,12 @@ assert_get_visual_column_fails (const location &loc, /* Verify that the given call to get_visual_column fails gracefully. */ -#define ASSERT_GET_VISUAL_COLUMN_FAILS(FILENAME, LINE, COLUMN, \ +#define ASSERT_GET_VISUAL_COLUMN_FAILS(FILE_CACHE, \ + FILENAME, LINE, COLUMN, \ TAB_WIDTH) \ SELFTEST_BEGIN_STMT \ assert_get_visual_column_fails (SELFTEST_LOCATION, \ + FILE_CACHE, \ FILENAME, LINE, COLUMN, \ TAB_WIDTH); \ SELFTEST_END_STMT @@ -770,6 +788,7 @@ test_get_visual_column () "\t line 2\n"); line_table_test ltt; temp_source_file tmp (SELFTEST_LOCATION, ".txt", content); + file_cache fc; const unsigned int tab_width = 8; const char *file = tmp.get_filename (); @@ -777,27 +796,27 @@ test_get_visual_column () /* Line 1 (space-based indentation). */ { const int line = 1; - ASSERT_GET_VISUAL_COLUMN_SUCCEEDS (file, line, 1, tab_width, 0, 0); - ASSERT_GET_VISUAL_COLUMN_SUCCEEDS (file, line, 2, tab_width, 1, 1); - ASSERT_GET_VISUAL_COLUMN_SUCCEEDS (file, line, 3, tab_width, 2, 2); + ASSERT_GET_VISUAL_COLUMN_SUCCEEDS (fc, file, line, 1, tab_width, 0, 0); + ASSERT_GET_VISUAL_COLUMN_SUCCEEDS (fc, file, line, 2, tab_width, 1, 1); + ASSERT_GET_VISUAL_COLUMN_SUCCEEDS (fc, file, line, 3, tab_width, 2, 2); /* first_nws should have stopped increasing. */ - ASSERT_GET_VISUAL_COLUMN_SUCCEEDS (file, line, 4, tab_width, 3, 2); + ASSERT_GET_VISUAL_COLUMN_SUCCEEDS (fc, file, line, 4, tab_width, 3, 2); /* Verify the end-of-line boundary. */ - ASSERT_GET_VISUAL_COLUMN_SUCCEEDS (file, line, 8, tab_width, 7, 2); - ASSERT_GET_VISUAL_COLUMN_FAILS (file, line, 9, tab_width); + ASSERT_GET_VISUAL_COLUMN_SUCCEEDS (fc, file, line, 8, tab_width, 7, 2); + ASSERT_GET_VISUAL_COLUMN_FAILS (fc, file, line, 9, tab_width); } /* Line 2 (tab-based indentation). */ { const int line = 2; - ASSERT_GET_VISUAL_COLUMN_SUCCEEDS (file, line, 1, tab_width, 0, 0); - ASSERT_GET_VISUAL_COLUMN_SUCCEEDS (file, line, 2, tab_width, 8, 8); - ASSERT_GET_VISUAL_COLUMN_SUCCEEDS (file, line, 3, tab_width, 9, 9); + ASSERT_GET_VISUAL_COLUMN_SUCCEEDS (fc, file, line, 1, tab_width, 0, 0); + ASSERT_GET_VISUAL_COLUMN_SUCCEEDS (fc, file, line, 2, tab_width, 8, 8); + ASSERT_GET_VISUAL_COLUMN_SUCCEEDS (fc, file, line, 3, tab_width, 9, 9); /* first_nws should have stopped increasing. */ - ASSERT_GET_VISUAL_COLUMN_SUCCEEDS (file, line, 4, tab_width, 10, 9); + ASSERT_GET_VISUAL_COLUMN_SUCCEEDS (fc, file, line, 4, tab_width, 10, 9); /* Verify the end-of-line boundary. */ - ASSERT_GET_VISUAL_COLUMN_SUCCEEDS (file, line, 8, tab_width, 14, 9); - ASSERT_GET_VISUAL_COLUMN_FAILS (file, line, 9, tab_width); + ASSERT_GET_VISUAL_COLUMN_SUCCEEDS (fc, file, line, 8, tab_width, 14, 9); + ASSERT_GET_VISUAL_COLUMN_FAILS (fc, file, line, 9, tab_width); } } diff --git a/gcc/cp/contracts.cc b/gcc/cp/contracts.cc index 9d1cb558f4f7..66d2298a9bfa 100644 --- a/gcc/cp/contracts.cc +++ b/gcc/cp/contracts.cc @@ -722,7 +722,8 @@ build_comment (cp_expr condition) { /* Try to get the actual source text for the condition; if that fails pretty print the resulting tree. */ - char *str = get_source_text_between (condition.get_start (), + char *str = get_source_text_between (global_dc->get_file_cache (), + condition.get_start (), condition.get_finish ()); if (!str) { diff --git a/gcc/diagnostic-format-sarif.cc b/gcc/diagnostic-format-sarif.cc index fa3ca2e9ae9a..9510f4add80f 100644 --- a/gcc/diagnostic-format-sarif.cc +++ b/gcc/diagnostic-format-sarif.cc @@ -921,7 +921,8 @@ int sarif_builder::get_sarif_column (expanded_location exploc) const { cpp_char_column_policy policy (m_tabstop, cpp_wcwidth); - return location_compute_display_column (exploc, policy); + return location_compute_display_column (m_context->get_file_cache (), + exploc, policy); } /* Make a region object (SARIF v2.1.0 section 3.30) for LOC, @@ -1534,7 +1535,7 @@ sarif_builder::maybe_make_artifact_content_object (const char *filename) const { /* Let input.cc handle any charset conversion. */ char_span utf8_content - = m_context->get_file_cache ()->get_source_file_content (filename); + = m_context->get_file_cache ().get_source_file_content (filename); if (!utf8_content) return NULL; @@ -1562,7 +1563,7 @@ sarif_builder::get_source_lines (const char *filename, for (int line = start_line; line <= end_line; line++) { char_span line_content - = m_context->get_file_cache ()->get_source_line (filename, line); + = m_context->get_file_cache ().get_source_line (filename, line); if (!line_content.get_buffer ()) return NULL; result.reserve (line_content.length () + 1); diff --git a/gcc/diagnostic-show-locus.cc b/gcc/diagnostic-show-locus.cc index 5edc319c3130..169f59cb0573 100644 --- a/gcc/diagnostic-show-locus.cc +++ b/gcc/diagnostic-show-locus.cc @@ -175,11 +175,12 @@ enum column_unit { class exploc_with_display_col : public expanded_location { public: - exploc_with_display_col (const expanded_location &exploc, + exploc_with_display_col (file_cache &fc, + const expanded_location &exploc, const cpp_char_column_policy &policy, enum location_aspect aspect) : expanded_location (exploc), - m_display_col (location_compute_display_column (exploc, policy)) + m_display_col (location_compute_display_column (fc, exploc, policy)) { if (exploc.column > 0) { @@ -190,7 +191,7 @@ class exploc_with_display_col : public expanded_location expanded_location prev_exploc (exploc); prev_exploc.column--; int prev_display_col - = (location_compute_display_column (prev_exploc, policy)); + = (location_compute_display_column (fc, prev_exploc, policy)); m_display_col = prev_display_col + 1; } } @@ -432,6 +433,7 @@ class layout const diagnostic_source_printing_options &m_options; const line_maps *m_line_table; + file_cache &m_file_cache; pretty_printer *m_pp; char_display_policy m_policy; location_t m_primary_loc; @@ -707,18 +709,22 @@ static cpp_char_column_policy def_policy () e.g. in test_diagnostic_show_locus_one_liner_utf8(). */ static layout_range -make_range (int start_line, int start_col, int end_line, int end_col) +make_range (file_cache &fc, + int start_line, int start_col, int end_line, int end_col) { const expanded_location start_exploc = {"", start_line, start_col, NULL, false}; const expanded_location finish_exploc = {"", end_line, end_col, NULL, false}; - return layout_range (exploc_with_display_col (start_exploc, def_policy (), + return layout_range (exploc_with_display_col (fc, + start_exploc, def_policy (), LOCATION_ASPECT_START), - exploc_with_display_col (finish_exploc, def_policy (), + exploc_with_display_col (fc, + finish_exploc, def_policy (), LOCATION_ASPECT_FINISH), SHOW_RANGE_WITHOUT_CARET, - exploc_with_display_col (start_exploc, def_policy (), + exploc_with_display_col (fc, + start_exploc, def_policy (), LOCATION_ASPECT_CARET), 0, NULL); } @@ -732,7 +738,8 @@ make_range (int start_line, int start_col, int end_line, int end_col) static void test_layout_range_for_single_point () { - layout_range point = make_range (7, 10, 7, 10); + file_cache fc; + layout_range point = make_range (fc, 7, 10, 7, 10); /* Tests for layout_range::contains_point. */ @@ -768,7 +775,8 @@ test_layout_range_for_single_point () static void test_layout_range_for_single_line () { - layout_range example_a = make_range (2, 22, 2, 38); + file_cache fc; + layout_range example_a = make_range (fc, 2, 22, 2, 38); /* Tests for layout_range::contains_point. */ @@ -810,7 +818,8 @@ test_layout_range_for_single_line () static void test_layout_range_for_multiple_lines () { - layout_range example_b = make_range (3, 14, 5, 8); + file_cache fc; + layout_range example_b = make_range (fc, 3, 14, 5, 8); /* Tests for layout_range::contains_point. */ @@ -1188,10 +1197,12 @@ layout::layout (const diagnostic_context &context, pretty_printer *pp) : m_options (context.m_source_printing), m_line_table (richloc.get_line_table ()), + m_file_cache (context.get_file_cache ()), m_pp (pp ? pp : context.printer), m_policy (make_policy (context, richloc)), m_primary_loc (richloc.get_range (0)->m_loc), - m_exploc (richloc.get_expanded_location (0), m_policy, + m_exploc (m_file_cache, + richloc.get_expanded_location (0), m_policy, LOCATION_ASPECT_CARET), m_colorizer (m_pp, diagnostic_kind), m_diagnostic_path_p (diagnostic_kind == DK_DIAGNOSTIC_PATH), @@ -1286,12 +1297,15 @@ layout::maybe_add_location_range (const location_range *loc_range, /* Everything is now known to be in the correct source file, but it may require further sanitization. */ - layout_range ri (exploc_with_display_col (start, m_policy, + layout_range ri (exploc_with_display_col (m_file_cache, + start, m_policy, LOCATION_ASPECT_START), - exploc_with_display_col (finish, m_policy, + exploc_with_display_col (m_file_cache, + finish, m_policy, LOCATION_ASPECT_FINISH), loc_range->m_range_display_kind, - exploc_with_display_col (caret, m_policy, + exploc_with_display_col (m_file_cache, + caret, m_policy, LOCATION_ASPECT_CARET), original_idx, loc_range->m_label); @@ -1614,8 +1628,8 @@ layout::calculate_x_offset_display () return; } - const char_span line = location_get_source_line (m_exploc.file, - m_exploc.line); + const char_span line = m_file_cache.get_source_line (m_exploc.file, + m_exploc.line); if (!line) { /* Nothing to do, we couldn't find the source line. */ @@ -2252,7 +2266,8 @@ public: /* Get the range of bytes or display columns that HINT would affect. */ static column_range -get_affected_range (const cpp_char_column_policy &policy, +get_affected_range (file_cache &fc, + const cpp_char_column_policy &policy, const fixit_hint *hint, enum column_unit col_unit) { expanded_location exploc_start = expand_location (hint->get_start_loc ()); @@ -2263,11 +2278,12 @@ get_affected_range (const cpp_char_column_policy &policy, int finish_column; if (col_unit == CU_DISPLAY_COLS) { - start_column = location_compute_display_column (exploc_start, policy); + start_column = location_compute_display_column (fc, exploc_start, policy); if (hint->insertion_p ()) finish_column = start_column - 1; else - finish_column = location_compute_display_column (exploc_finish, policy); + finish_column + = location_compute_display_column (fc, exploc_finish, policy); } else { @@ -2280,11 +2296,12 @@ get_affected_range (const cpp_char_column_policy &policy, /* Get the range of display columns that would be printed for HINT. */ static column_range -get_printed_columns (const cpp_char_column_policy &policy, +get_printed_columns (file_cache &fc, + const cpp_char_column_policy &policy, const fixit_hint *hint) { expanded_location exploc = expand_location (hint->get_start_loc ()); - int start_column = location_compute_display_column (exploc, policy); + int start_column = location_compute_display_column (fc, exploc, policy); int hint_width = cpp_display_width (hint->get_string (), hint->get_length (), policy); int final_hint_column = start_column + hint_width - 1; @@ -2296,7 +2313,7 @@ get_printed_columns (const cpp_char_column_policy &policy, { exploc = expand_location (hint->get_next_loc ()); --exploc.column; - int finish_column = location_compute_display_column (exploc, policy); + int finish_column = location_compute_display_column (fc, exploc, policy); return column_range (start_column, MAX (finish_column, final_hint_column)); } @@ -2402,15 +2419,18 @@ correction::ensure_terminated () class line_corrections { public: - line_corrections (const char_display_policy &policy, + line_corrections (file_cache &fc, + const char_display_policy &policy, const char *filename, linenum_type row) - : m_policy (policy), m_filename (filename), m_row (row) + : m_file_cache (fc), + m_policy (policy), m_filename (filename), m_row (row) {} ~line_corrections (); void add_hint (const fixit_hint *hint); + file_cache &m_file_cache; const char_display_policy &m_policy; const char *m_filename; linenum_type m_row; @@ -2433,7 +2453,7 @@ line_corrections::~line_corrections () class source_line { public: - source_line (const char *filename, int line); + source_line (file_cache &fc, const char *filename, int line); char_span as_span () { return char_span (chars, width); } @@ -2443,9 +2463,9 @@ public: /* source_line's ctor. */ -source_line::source_line (const char *filename, int line) +source_line::source_line (file_cache &fc, const char *filename, int line) { - char_span span = location_get_source_line (filename, line); + char_span span = fc.get_source_line (filename, line); chars = span.get_buffer (); width = span.length (); } @@ -2457,10 +2477,12 @@ source_line::source_line (const char *filename, int line) void line_corrections::add_hint (const fixit_hint *hint) { - column_range affected_bytes = get_affected_range (m_policy, hint, CU_BYTES); - column_range affected_columns = get_affected_range (m_policy, hint, - CU_DISPLAY_COLS); - column_range printed_columns = get_printed_columns (m_policy, hint); + column_range affected_bytes + = get_affected_range (m_file_cache, m_policy, hint, CU_BYTES); + column_range affected_columns + = get_affected_range (m_file_cache, m_policy, hint, CU_DISPLAY_COLS); + column_range printed_columns + = get_printed_columns (m_file_cache, m_policy, hint); /* Potentially consolidate. */ if (!m_corrections.is_empty ()) @@ -2489,7 +2511,7 @@ line_corrections::add_hint (const fixit_hint *hint) affected_bytes.start - 1); /* Try to read the source. */ - source_line line (m_filename, m_row); + source_line line (m_file_cache, m_filename, m_row); if (line.chars && between.finish < line.width) { /* Consolidate into the last correction: @@ -2545,7 +2567,7 @@ layout::print_trailing_fixits (linenum_type row) { /* Build a list of correction instances for the line, potentially consolidating hints (for the sake of readability). */ - line_corrections corrections (m_policy, m_exploc.file, row); + line_corrections corrections (m_file_cache, m_policy, m_exploc.file, row); for (unsigned int i = 0; i < m_fixit_hints.length (); i++) { const fixit_hint *hint = m_fixit_hints[i]; @@ -2783,7 +2805,7 @@ layout::show_ruler (int max_column) const void layout::print_line (linenum_type row) { - char_span line = location_get_source_line (m_exploc.file, row); + char_span line = m_file_cache.get_source_line (m_exploc.file, row); if (!line) return; @@ -3005,6 +3027,7 @@ test_layout_x_offset_display_utf8 (const line_table_case &case_) const int emoji_col = 102; temp_source_file tmp (SELFTEST_LOCATION, ".c", content); + file_cache fc; line_table_test ltt (case_); linemap_add (line_table, LC_ENTER, false, tmp.get_filename (), 1); @@ -3019,12 +3042,13 @@ test_layout_x_offset_display_utf8 (const line_table_case &case_) ASSERT_EQ (1, LOCATION_LINE (line_end)); ASSERT_EQ (line_bytes, LOCATION_COLUMN (line_end)); - char_span lspan = location_get_source_line (tmp.get_filename (), 1); + char_span lspan = fc.get_source_line (tmp.get_filename (), 1); ASSERT_EQ (line_display_cols, cpp_display_width (lspan.get_buffer (), lspan.length (), def_policy ())); ASSERT_EQ (line_display_cols, - location_compute_display_column (expand_location (line_end), + location_compute_display_column (fc, + expand_location (line_end), def_policy ())); ASSERT_EQ (0, memcmp (lspan.get_buffer () + (emoji_col - 1), "\xf0\x9f\x98\x82\xf0\x9f\x98\x82", 8)); @@ -3160,6 +3184,7 @@ test_layout_x_offset_display_tab (const line_table_case &case_) ASSERT_EQ (7, extra_width[10]); temp_source_file tmp (SELFTEST_LOCATION, ".c", content); + file_cache fc; line_table_test ltt (case_); linemap_add (line_table, LC_ENTER, false, tmp.get_filename (), 1); @@ -3171,7 +3196,7 @@ test_layout_x_offset_display_tab (const line_table_case &case_) return; /* Check that cpp_display_width handles the tabs as expected. */ - char_span lspan = location_get_source_line (tmp.get_filename (), 1); + char_span lspan = fc.get_source_line (tmp.get_filename (), 1); ASSERT_EQ ('\t', *(lspan.get_buffer () + (tab_col - 1))); for (int tabstop = 1; tabstop != num_tabstops; ++tabstop) { @@ -3180,7 +3205,8 @@ test_layout_x_offset_display_tab (const line_table_case &case_) cpp_display_width (lspan.get_buffer (), lspan.length (), policy)); ASSERT_EQ (line_bytes + extra_width[tabstop], - location_compute_display_column (expand_location (line_end), + location_compute_display_column (fc, + expand_location (line_end), policy)); } @@ -4389,6 +4415,7 @@ test_diagnostic_show_locus_one_liner_utf8 (const line_table_case &case_) 1111222233334444567890122223333456789999000011112222345678999900001 Byte columns. */ temp_source_file tmp (SELFTEST_LOCATION, ".c", content); + file_cache fc; line_table_test ltt (case_); linemap_add (line_table, LC_ENTER, false, tmp.get_filename (), 1); @@ -4403,10 +4430,11 @@ test_diagnostic_show_locus_one_liner_utf8 (const line_table_case &case_) ASSERT_EQ (1, LOCATION_LINE (line_end)); ASSERT_EQ (31, LOCATION_COLUMN (line_end)); - char_span lspan = location_get_source_line (tmp.get_filename (), 1); + char_span lspan = fc.get_source_line (tmp.get_filename (), 1); ASSERT_EQ (25, cpp_display_width (lspan.get_buffer (), lspan.length (), def_policy ())); - ASSERT_EQ (25, location_compute_display_column (expand_location (line_end), + ASSERT_EQ (25, location_compute_display_column (fc, + expand_location (line_end), def_policy ())); test_one_liner_simple_caret_utf8 (); @@ -4440,7 +4468,12 @@ test_add_location_if_nearby (const line_table_case &case_) " double x;\n" /* line 4. */ " double y;\n" /* line 5. */ ";\n"); /* line 6. */ - temp_source_file tmp (SELFTEST_LOCATION, ".c", content); + temp_source_file tmp (SELFTEST_LOCATION, ".c", content, + + /* gcc_rich_location::add_location_if_nearby implicitly + uses global_dc's file_cache, so we need to evict + tmp when we're done. */ + &global_dc->get_file_cache ()); line_table_test ltt (case_); const line_map_ordinary *ord_map @@ -4748,6 +4781,7 @@ test_overlapped_fixit_printing (const line_table_case &case_) const char *content = (" foo *f = (foo *)ptr->field;\n"); temp_source_file tmp (SELFTEST_LOCATION, ".C", content); + file_cache fc; line_table_test ltt (case_); const line_map_ordinary *ord_map @@ -4797,27 +4831,27 @@ test_overlapped_fixit_printing (const line_table_case &case_) ASSERT_EQ (3, richloc.get_num_fixit_hints ()); const fixit_hint *hint_0 = richloc.get_fixit_hint (0); ASSERT_EQ (column_range (12, 12), - get_affected_range (policy, hint_0, CU_BYTES)); + get_affected_range (fc, policy, hint_0, CU_BYTES)); ASSERT_EQ (column_range (12, 12), - get_affected_range (policy, hint_0, CU_DISPLAY_COLS)); - ASSERT_EQ (column_range (12, 22), get_printed_columns (policy, hint_0)); + get_affected_range (fc, policy, hint_0, CU_DISPLAY_COLS)); + ASSERT_EQ (column_range (12, 22), get_printed_columns (fc, policy, hint_0)); const fixit_hint *hint_1 = richloc.get_fixit_hint (1); ASSERT_EQ (column_range (18, 18), - get_affected_range (policy, hint_1, CU_BYTES)); + get_affected_range (fc, policy, hint_1, CU_BYTES)); ASSERT_EQ (column_range (18, 18), - get_affected_range (policy, hint_1, CU_DISPLAY_COLS)); - ASSERT_EQ (column_range (18, 20), get_printed_columns (policy, hint_1)); + get_affected_range (fc, policy, hint_1, CU_DISPLAY_COLS)); + ASSERT_EQ (column_range (18, 20), get_printed_columns (fc, policy, hint_1)); const fixit_hint *hint_2 = richloc.get_fixit_hint (2); ASSERT_EQ (column_range (29, 28), - get_affected_range (policy, hint_2, CU_BYTES)); + get_affected_range (fc, policy, hint_2, CU_BYTES)); ASSERT_EQ (column_range (29, 28), - get_affected_range (policy, hint_2, CU_DISPLAY_COLS)); - ASSERT_EQ (column_range (29, 29), get_printed_columns (policy, hint_2)); + get_affected_range (fc, policy, hint_2, CU_DISPLAY_COLS)); + ASSERT_EQ (column_range (29, 29), get_printed_columns (fc, policy, hint_2)); /* Add each hint in turn to a line_corrections instance, and verify that they are consolidated into one correction instance as expected. */ - line_corrections lc (policy, tmp.get_filename (), 1); + line_corrections lc (fc, policy, tmp.get_filename (), 1); /* The first replace hint by itself. */ lc.add_hint (hint_0); @@ -4991,6 +5025,7 @@ test_overlapped_fixit_printing_utf8 (const line_table_case &case_) /* Example where 3 fix-it hints are printed as one. */ { test_diagnostic_context dc; + file_cache &fc = dc.get_file_cache (); rich_location richloc (line_table, expr); richloc.add_fixit_replace (open_paren, "const_cast<"); richloc.add_fixit_replace (close_paren, "> ("); @@ -5013,27 +5048,27 @@ test_overlapped_fixit_printing_utf8 (const line_table_case &case_) ASSERT_EQ (3, richloc.get_num_fixit_hints ()); const fixit_hint *hint_0 = richloc.get_fixit_hint (0); ASSERT_EQ (column_range (14, 14), - get_affected_range (policy, hint_0, CU_BYTES)); + get_affected_range (fc, policy, hint_0, CU_BYTES)); ASSERT_EQ (column_range (12, 12), - get_affected_range (policy, hint_0, CU_DISPLAY_COLS)); - ASSERT_EQ (column_range (12, 22), get_printed_columns (policy, hint_0)); + get_affected_range (fc, policy, hint_0, CU_DISPLAY_COLS)); + ASSERT_EQ (column_range (12, 22), get_printed_columns (fc, policy, hint_0)); const fixit_hint *hint_1 = richloc.get_fixit_hint (1); ASSERT_EQ (column_range (22, 22), - get_affected_range (policy, hint_1, CU_BYTES)); + get_affected_range (fc, policy, hint_1, CU_BYTES)); ASSERT_EQ (column_range (18, 18), - get_affected_range (policy, hint_1, CU_DISPLAY_COLS)); - ASSERT_EQ (column_range (18, 20), get_printed_columns (policy, hint_1)); + get_affected_range (fc, policy, hint_1, CU_DISPLAY_COLS)); + ASSERT_EQ (column_range (18, 20), get_printed_columns (fc, policy, hint_1)); const fixit_hint *hint_2 = richloc.get_fixit_hint (2); ASSERT_EQ (column_range (35, 34), - get_affected_range (policy, hint_2, CU_BYTES)); + get_affected_range (fc, policy, hint_2, CU_BYTES)); ASSERT_EQ (column_range (30, 29), - get_affected_range (policy, hint_2, CU_DISPLAY_COLS)); - ASSERT_EQ (column_range (30, 30), get_printed_columns (policy, hint_2)); + get_affected_range (fc, policy, hint_2, CU_DISPLAY_COLS)); + ASSERT_EQ (column_range (30, 30), get_printed_columns (fc, policy, hint_2)); /* Add each hint in turn to a line_corrections instance, and verify that they are consolidated into one correction instance as expected. */ - line_corrections lc (policy, tmp.get_filename (), 1); + line_corrections lc (fc, policy, tmp.get_filename (), 1); /* The first replace hint by itself. */ lc.add_hint (hint_0); @@ -5221,6 +5256,7 @@ test_overlapped_fixit_printing_2 (const line_table_case &case_) /* Two insertions, in the wrong order. */ { test_diagnostic_context dc; + file_cache &fc = dc.get_file_cache (); rich_location richloc (line_table, col_20); richloc.add_fixit_insert_before (col_23, "{"); @@ -5231,12 +5267,12 @@ test_overlapped_fixit_printing_2 (const line_table_case &case_) ASSERT_EQ (2, richloc.get_num_fixit_hints ()); const fixit_hint *hint_0 = richloc.get_fixit_hint (0); ASSERT_EQ (column_range (23, 22), - get_affected_range (policy, hint_0, CU_BYTES)); - ASSERT_EQ (column_range (23, 23), get_printed_columns (policy, hint_0)); + get_affected_range (fc, policy, hint_0, CU_BYTES)); + ASSERT_EQ (column_range (23, 23), get_printed_columns (fc, policy, hint_0)); const fixit_hint *hint_1 = richloc.get_fixit_hint (1); ASSERT_EQ (column_range (21, 20), - get_affected_range (policy, hint_1, CU_BYTES)); - ASSERT_EQ (column_range (21, 21), get_printed_columns (policy, hint_1)); + get_affected_range (fc, policy, hint_1, CU_BYTES)); + ASSERT_EQ (column_range (21, 21), get_printed_columns (fc, policy, hint_1)); /* Verify that they're printed correctly. */ diagnostic_show_locus (&dc, &richloc, DK_ERROR); diff --git a/gcc/diagnostic.cc b/gcc/diagnostic.cc index addd6606eaa0..24212b9668eb 100644 --- a/gcc/diagnostic.cc +++ b/gcc/diagnostic.cc @@ -211,7 +211,7 @@ diagnostic_context::initialize (int n_opts) this->printer = XNEW (pretty_printer); new (this->printer) pretty_printer (); - m_file_cache = nullptr; + m_file_cache = new file_cache (); memset (m_diagnostic_count, 0, sizeof m_diagnostic_count); m_warning_as_error_requested = false; m_n_opts = n_opts; @@ -352,8 +352,6 @@ diagnostic_context:: initialize_input_context (diagnostic_input_charset_callback ccb, bool should_skip_bom) { - if (!m_file_cache) - m_file_cache = new file_cache; m_file_cache->initialize_input_context (ccb, should_skip_bom); } @@ -432,7 +430,8 @@ void diagnostic_context::create_edit_context () { delete m_edit_context_ptr; - m_edit_context_ptr = new edit_context (); + gcc_assert (m_file_cache); + m_edit_context_ptr = new edit_context (*m_file_cache); } /* Initialize DIAGNOSTIC, where the message MSG has already been @@ -485,7 +484,8 @@ diagnostic_get_color_for_kind (diagnostic_t kind) Return -1 if the column is invalid (<= 0). */ static int -convert_column_unit (enum diagnostics_column_unit column_unit, +convert_column_unit (file_cache &fc, + enum diagnostics_column_unit column_unit, int tabstop, expanded_location s) { @@ -500,7 +500,7 @@ convert_column_unit (enum diagnostics_column_unit column_unit, case DIAGNOSTICS_COLUMN_UNIT_DISPLAY: { cpp_char_column_policy policy (tabstop, cpp_wcwidth); - return location_compute_display_column (s, policy); + return location_compute_display_column (fc, s, policy); } case DIAGNOSTICS_COLUMN_UNIT_BYTE: @@ -514,7 +514,8 @@ convert_column_unit (enum diagnostics_column_unit column_unit, int diagnostic_context::converted_column (expanded_location s) const { - int one_based_col = convert_column_unit (m_column_unit, m_tabstop, s); + int one_based_col = convert_column_unit (get_file_cache (), + m_column_unit, m_tabstop, s); if (one_based_col <= 0) return -1; return one_based_col + (m_column_origin - 1); @@ -1205,7 +1206,8 @@ print_escaped_string (pretty_printer *pp, const char *text) Use TABSTOP when handling DIAGNOSTICS_COLUMN_UNIT_DISPLAY. */ static void -print_parseable_fixits (pretty_printer *pp, rich_location *richloc, +print_parseable_fixits (file_cache &fc, + pretty_printer *pp, rich_location *richloc, enum diagnostics_column_unit column_unit, int tabstop) { @@ -1226,9 +1228,9 @@ print_parseable_fixits (pretty_printer *pp, rich_location *richloc, location_t next_loc = hint->get_next_loc (); expanded_location next_exploc = expand_location (next_loc); int start_col - = convert_column_unit (column_unit, tabstop, start_exploc); + = convert_column_unit (fc, column_unit, tabstop, start_exploc); int next_col - = convert_column_unit (column_unit, tabstop, next_exploc); + = convert_column_unit (fc, column_unit, tabstop, next_exploc); pp_printf (pp, ":{%i:%i-%i:%i}:", start_exploc.line, start_col, next_exploc.line, next_col); @@ -1613,13 +1615,15 @@ diagnostic_context::report_diagnostic (diagnostic_info *diagnostic) default: break; case EXTRA_DIAGNOSTIC_OUTPUT_fixits_v1: - print_parseable_fixits (this->printer, diagnostic->richloc, + print_parseable_fixits (get_file_cache (), + this->printer, diagnostic->richloc, DIAGNOSTICS_COLUMN_UNIT_BYTE, m_tabstop); pp_flush (this->printer); break; case EXTRA_DIAGNOSTIC_OUTPUT_fixits_v2: - print_parseable_fixits (this->printer, diagnostic->richloc, + print_parseable_fixits (get_file_cache (), + this->printer, diagnostic->richloc, DIAGNOSTICS_COLUMN_UNIT_DISPLAY, m_tabstop); pp_flush (this->printer); @@ -2687,9 +2691,10 @@ static void test_print_parseable_fixits_none () { pretty_printer pp; + file_cache fc; rich_location richloc (line_table, UNKNOWN_LOCATION); - print_parseable_fixits (&pp, &richloc, DIAGNOSTICS_COLUMN_UNIT_BYTE, 8); + print_parseable_fixits (fc, &pp, &richloc, DIAGNOSTICS_COLUMN_UNIT_BYTE, 8); ASSERT_STREQ ("", pp_formatted_text (&pp)); } @@ -2700,6 +2705,7 @@ static void test_print_parseable_fixits_insert () { pretty_printer pp; + file_cache fc; rich_location richloc (line_table, UNKNOWN_LOCATION); linemap_add (line_table, LC_ENTER, false, "test.c", 0); @@ -2708,7 +2714,7 @@ test_print_parseable_fixits_insert () location_t where = linemap_position_for_column (line_table, 10); richloc.add_fixit_insert_before (where, "added content"); - print_parseable_fixits (&pp, &richloc, DIAGNOSTICS_COLUMN_UNIT_BYTE, 8); + print_parseable_fixits (fc, &pp, &richloc, DIAGNOSTICS_COLUMN_UNIT_BYTE, 8); ASSERT_STREQ ("fix-it:\"test.c\":{5:10-5:10}:\"added content\"\n", pp_formatted_text (&pp)); } @@ -2720,6 +2726,7 @@ static void test_print_parseable_fixits_remove () { pretty_printer pp; + file_cache fc; rich_location richloc (line_table, UNKNOWN_LOCATION); linemap_add (line_table, LC_ENTER, false, "test.c", 0); @@ -2730,7 +2737,7 @@ test_print_parseable_fixits_remove () where.m_finish = linemap_position_for_column (line_table, 20); richloc.add_fixit_remove (where); - print_parseable_fixits (&pp, &richloc, DIAGNOSTICS_COLUMN_UNIT_BYTE, 8); + print_parseable_fixits (fc, &pp, &richloc, DIAGNOSTICS_COLUMN_UNIT_BYTE, 8); ASSERT_STREQ ("fix-it:\"test.c\":{5:10-5:21}:\"\"\n", pp_formatted_text (&pp)); } @@ -2742,6 +2749,7 @@ static void test_print_parseable_fixits_replace () { pretty_printer pp; + file_cache fc; rich_location richloc (line_table, UNKNOWN_LOCATION); linemap_add (line_table, LC_ENTER, false, "test.c", 0); @@ -2752,7 +2760,7 @@ test_print_parseable_fixits_replace () where.m_finish = linemap_position_for_column (line_table, 20); richloc.add_fixit_replace (where, "replacement"); - print_parseable_fixits (&pp, &richloc, DIAGNOSTICS_COLUMN_UNIT_BYTE, 8); + print_parseable_fixits (fc, &pp, &richloc, DIAGNOSTICS_COLUMN_UNIT_BYTE, 8); ASSERT_STREQ ("fix-it:\"test.c\":{5:10-5:21}:\"replacement\"\n", pp_formatted_text (&pp)); } @@ -2772,6 +2780,7 @@ test_print_parseable_fixits_bytes_vs_display_columns () const int tabstop = 8; temp_source_file tmp (SELFTEST_LOCATION, ".c", content); + file_cache fc; const char *const fname = tmp.get_filename (); linemap_add (line_table, LC_ENTER, false, fname, 0); @@ -2792,7 +2801,8 @@ test_print_parseable_fixits_bytes_vs_display_columns () { pretty_printer pp; - print_parseable_fixits (&pp, &richloc, DIAGNOSTICS_COLUMN_UNIT_BYTE, + print_parseable_fixits (fc, &pp, &richloc, + DIAGNOSTICS_COLUMN_UNIT_BYTE, tabstop); snprintf (expected, buf_len, "fix-it:%s:{1:12-1:18}:\"color\"\n", escaped_fname); @@ -2800,7 +2810,8 @@ test_print_parseable_fixits_bytes_vs_display_columns () } { pretty_printer pp; - print_parseable_fixits (&pp, &richloc, DIAGNOSTICS_COLUMN_UNIT_DISPLAY, + print_parseable_fixits (fc, &pp, &richloc, + DIAGNOSTICS_COLUMN_UNIT_DISPLAY, tabstop); snprintf (expected, buf_len, "fix-it:%s:{1:10-1:16}:\"color\"\n", escaped_fname); diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h index 6a3228247b8a..7ae7cebf02ed 100644 --- a/gcc/diagnostic.h +++ b/gcc/diagnostic.h @@ -360,8 +360,6 @@ public: void color_init (int value); void urls_init (int value); - void file_cache_init (); - void finish (); void set_set_locations_callback (set_locations_callback_t cb) @@ -461,10 +459,11 @@ public: return m_escape_format; } - file_cache * + file_cache & get_file_cache () const { - return m_file_cache; + gcc_assert (m_file_cache); + return *m_file_cache; } edit_context *get_edit_context () const diff --git a/gcc/edit-context.cc b/gcc/edit-context.cc index 09b000c74c42..ee28bf60bebc 100644 --- a/gcc/edit-context.cc +++ b/gcc/edit-context.cc @@ -64,7 +64,7 @@ public: class edited_file { public: - edited_file (const char *filename); + edited_file (edit_context &ec, const char *filename); static void delete_cb (edited_file *file); const char *get_filename () const { return m_filename; } @@ -84,6 +84,11 @@ class edited_file return 0; } + file_cache &get_file_cache () const + { + return m_edit_context.get_file_cache (); + } + private: bool print_content (pretty_printer *pp); void print_diff (pretty_printer *pp, bool show_filenames); @@ -100,6 +105,7 @@ class edited_file int start_of_run, int end_of_run); + edit_context &m_edit_context; const char *m_filename; typed_splay_tree m_edited_lines; int m_num_lines; @@ -163,7 +169,7 @@ class line_event class edited_line { public: - edited_line (const char *filename, int line_num); + edited_line (file_cache &fc, const char *filename, int line_num); ~edited_line (); static void delete_cb (edited_line *el); @@ -208,8 +214,9 @@ print_diff_line (pretty_printer *pp, char prefix_char, /* edit_context's ctor. */ -edit_context::edit_context () -: m_valid (true), +edit_context::edit_context (file_cache &fc) +: m_file_cache (fc), + m_valid (true), m_files (strcmp, NULL, edited_file::delete_cb) {} @@ -334,7 +341,7 @@ edit_context::get_or_insert_file (const char *filename) return *file; /* Not found. */ - file = new edited_file (filename); + file = new edited_file (*this, filename); m_files.insert (filename, file); return *file; } @@ -350,8 +357,9 @@ static int line_comparator (int a, int b) /* edited_file's constructor. */ -edited_file::edited_file (const char *filename) -: m_filename (filename), +edited_file::edited_file (edit_context &ec, const char *filename) +: m_edit_context (ec), + m_filename (filename), m_edited_lines (line_comparator, NULL, edited_line::delete_cb), m_num_lines (-1) { @@ -422,7 +430,8 @@ edited_file::print_content (pretty_printer *pp) el->print_content (pp); else { - char_span line = location_get_source_line (m_filename, line_num); + char_span line + = get_file_cache ().get_source_line (m_filename, line_num); if (!line) return false; for (size_t i = 0; i < line.length (); i++) @@ -547,7 +556,8 @@ edited_file::print_diff_hunk (pretty_printer *pp, int old_start_of_hunk, else { /* Unchanged line. */ - char_span old_line = location_get_source_line (m_filename, line_num); + char_span old_line + = get_file_cache ().get_source_line (m_filename, line_num); print_diff_line (pp, ' ', old_line.get_buffer (), old_line.length ()); line_num++; } @@ -576,7 +586,8 @@ edited_file::print_run_of_changed_lines (pretty_printer *pp, gcc_assert (el_in_run); if (el_in_run->actually_edited_p ()) { - char_span old_line = location_get_source_line (m_filename, line_num); + char_span old_line + = get_file_cache ().get_source_line (m_filename, line_num); print_diff_line (pp, '-', old_line.get_buffer (), old_line.length ()); } @@ -649,7 +660,7 @@ edited_file::get_or_insert_line (int line) edited_line *el = get_line (line); if (el) return el; - el = new edited_line (m_filename, line); + el = new edited_line (get_file_cache (), m_filename, line); if (el->get_content () == NULL) { delete el; @@ -673,14 +684,15 @@ edited_file::get_num_lines (bool *missing_trailing_newline) while (true) { char_span line - = location_get_source_line (m_filename, m_num_lines + 1); + = get_file_cache ().get_source_line (m_filename, m_num_lines + 1); if (line) m_num_lines++; else break; } } - *missing_trailing_newline = location_missing_trailing_newline (m_filename); + *missing_trailing_newline + = get_file_cache ().missing_trailing_newline_p (m_filename); return m_num_lines; } @@ -688,13 +700,13 @@ edited_file::get_num_lines (bool *missing_trailing_newline) /* edited_line's ctor. */ -edited_line::edited_line (const char *filename, int line_num) +edited_line::edited_line (file_cache &fc, const char *filename, int line_num) : m_line_num (line_num), m_content (NULL), m_len (0), m_alloc_sz (0), m_line_events (), m_predecessors () { - char_span line = location_get_source_line (filename, line_num); + char_span line = fc.get_source_line (filename, line_num); if (!line) return; m_len = line.length (); @@ -913,7 +925,8 @@ test_get_content () { const char *content = (""); temp_source_file tmp (SELFTEST_LOCATION, ".c", content); - edit_context edit; + file_cache fc; + edit_context edit (fc); auto_free result = edit.get_content (tmp.get_filename ()); ASSERT_STREQ ("", result); } @@ -924,7 +937,8 @@ test_get_content () "foo = bar.field;\n" "/* after */\n"); temp_source_file tmp (SELFTEST_LOCATION, ".c", content); - edit_context edit; + file_cache fc; + edit_context edit (fc); auto_free result = edit.get_content (tmp.get_filename ()); ASSERT_STREQ ("/* before */\n" "foo = bar.field;\n" @@ -937,7 +951,8 @@ test_get_content () "foo = bar.field;\n" "/* after */"); temp_source_file tmp (SELFTEST_LOCATION, ".c", content); - edit_context edit; + file_cache fc; + edit_context edit (fc); auto_free result = edit.get_content (tmp.get_filename ()); /* We should respect the omitted trailing newline. */ ASSERT_STREQ ("/* before */\n" @@ -970,7 +985,8 @@ test_applying_fixits_insert_before (const line_table_case &case_) if (start > LINE_MAP_MAX_LOCATION_WITH_COLS) return; - edit_context edit; + file_cache fc; + edit_context edit (fc); edit.add_fixits (&richloc); auto_free new_content = edit.get_content (filename); if (start <= LINE_MAP_MAX_LOCATION_WITH_COLS) @@ -1028,7 +1044,8 @@ test_applying_fixits_insert_after (const line_table_case &case_) return; /* Verify that the text was inserted after the end of "field". */ - edit_context edit; + file_cache fc; + edit_context edit (fc); edit.add_fixits (&richloc); auto_free new_content = edit.get_content (filename); ASSERT_STREQ ("/* before */\n" @@ -1070,7 +1087,8 @@ test_applying_fixits_insert_after_at_line_end (const line_table_case &case_) if (loc > LINE_MAP_MAX_LOCATION_WITH_COLS) return; - edit_context edit; + file_cache fc; + edit_context edit (fc); edit.add_fixits (&richloc); auto_free new_content = edit.get_content (filename); ASSERT_STREQ ("/* before */\n" @@ -1128,7 +1146,8 @@ test_applying_fixits_insert_after_failure (const line_table_case &case_) richloc.add_fixit_insert_after ("/* inserted */"); ASSERT_TRUE (richloc.seen_impossible_fixit_p ()); - edit_context edit; + file_cache fc; + edit_context edit (fc); edit.add_fixits (&richloc); ASSERT_FALSE (edit.valid_p ()); ASSERT_EQ (NULL, edit.get_content (filename)); @@ -1165,7 +1184,8 @@ test_applying_fixits_insert_containing_newline (const line_table_case &case_) if (case_finish > LINE_MAP_MAX_LOCATION_WITH_COLS) return; - edit_context edit; + file_cache fc; + edit_context edit (fc); edit.add_fixits (&richloc); auto_free new_content = edit.get_content (filename); ASSERT_STREQ ((" case 'a':\n" @@ -1209,7 +1229,8 @@ test_applying_fixits_growing_replace (const line_table_case &case_) rich_location richloc (line_table, field); richloc.add_fixit_replace ("m_field"); - edit_context edit; + file_cache fc; + edit_context edit (fc); edit.add_fixits (&richloc); auto_free new_content = edit.get_content (filename); if (finish <= LINE_MAP_MAX_LOCATION_WITH_COLS) @@ -1254,7 +1275,8 @@ test_applying_fixits_shrinking_replace (const line_table_case &case_) rich_location richloc (line_table, m_field); richloc.add_fixit_replace ("field"); - edit_context edit; + file_cache fc; + edit_context edit (fc); edit.add_fixits (&richloc); auto_free new_content = edit.get_content (filename); if (finish <= LINE_MAP_MAX_LOCATION_WITH_COLS) @@ -1308,7 +1330,8 @@ test_applying_fixits_replace_containing_newline (const line_table_case &case_) if (finish > LINE_MAP_MAX_LOCATION_WITH_COLS) return; - edit_context edit; + file_cache fc; + edit_context edit (fc); edit.add_fixits (&richloc); auto_free new_content = edit.get_content (filename); //ASSERT_STREQ ("foo\n = bar ();\n", new_content); @@ -1339,7 +1362,8 @@ test_applying_fixits_remove (const line_table_case &case_) range.m_finish = finish; richloc.add_fixit_remove (range); - edit_context edit; + file_cache fc; + edit_context edit (fc); edit.add_fixits (&richloc); auto_free new_content = edit.get_content (filename); if (finish <= LINE_MAP_MAX_LOCATION_WITH_COLS) @@ -1404,7 +1428,8 @@ test_applying_fixits_multiple (const line_table_case &case_) replace_b.add_fixit_replace (source_range::from_locations (c11, c15), "meadow"); - edit_context edit; + file_cache fc; + edit_context edit (fc); edit.add_fixits (&insert_a); ASSERT_EQ (100, edit.get_effective_column (filename, 1, 100)); ASSERT_EQ (1, edit.get_effective_column (filename, 2, 1)); @@ -1506,7 +1531,8 @@ test_applying_fixits_multiple_lines (const line_table_case &case_) linemap_add (line_table, LC_ENTER, false, filename, 1); linemap_position_for_column (line_table, 127); - edit_context edit; + file_cache fc; + edit_context edit (fc); /* A run of consecutive lines. */ change_line (edit, 2); @@ -1594,7 +1620,8 @@ test_applying_fixits_modernize_named_init (const line_table_case &case_) /* The order should not matter. Do r1 then r2. */ { - edit_context edit; + file_cache fc; + edit_context edit (fc); edit.add_fixits (&r1); /* Verify state after first replacement. */ @@ -1627,7 +1654,8 @@ test_applying_fixits_modernize_named_init (const line_table_case &case_) /* Try again, doing r2 then r1; the new_content should be the same. */ { - edit_context edit; + file_cache fc; + edit_context edit (fc); edit.add_fixits (&r2); edit.add_fixits (&r1); auto_free new_content = edit.get_content (tmp.get_filename ()); @@ -1655,7 +1683,8 @@ test_applying_fixits_unreadable_file () insert.add_fixit_insert_before ("change 1"); insert.add_fixit_insert_before ("change 2"); - edit_context edit; + file_cache fc; + edit_context edit (fc); /* Attempting to add the fixits affecting the unreadable file should transition the edit from valid to invalid. */ ASSERT_TRUE (edit.valid_p ()); @@ -1688,7 +1717,8 @@ test_applying_fixits_line_out_of_range () /* Verify that attempting the insertion puts an edit_context into an invalid state. */ - edit_context edit; + file_cache fc; + edit_context edit (fc); ASSERT_TRUE (edit.valid_p ()); edit.add_fixits (&insert); ASSERT_FALSE (edit.valid_p ()); @@ -1725,7 +1755,8 @@ test_applying_fixits_column_validation (const line_table_case &case_) /* Col 15 is at the end of the line, so the insertion should succeed. */ - edit_context edit; + file_cache fc; + edit_context edit (fc); edit.add_fixits (&richloc); auto_free new_content = edit.get_content (tmp.get_filename ()); if (c15 <= LINE_MAP_MAX_LOCATION_WITH_COLS) @@ -1741,7 +1772,8 @@ test_applying_fixits_column_validation (const line_table_case &case_) /* Col 16 is beyond the end of the line, so the insertion should fail gracefully. */ - edit_context edit; + file_cache fc; + edit_context edit (fc); ASSERT_TRUE (edit.valid_p ()); edit.add_fixits (&richloc); ASSERT_FALSE (edit.valid_p ()); @@ -1759,7 +1791,8 @@ test_applying_fixits_column_validation (const line_table_case &case_) /* Col 14 is at the end of the line, so the replacement should succeed. */ - edit_context edit; + file_cache fc; + edit_context edit (fc); edit.add_fixits (&richloc); auto_free new_content = edit.get_content (tmp.get_filename ()); if (c14 <= LINE_MAP_MAX_LOCATION_WITH_COLS) @@ -1776,7 +1809,8 @@ test_applying_fixits_column_validation (const line_table_case &case_) /* Col 15 is after the end of the line, so the replacement should fail; verify that the attempt fails gracefully. */ - edit_context edit; + file_cache fc; + edit_context edit (fc); ASSERT_TRUE (edit.valid_p ()); edit.add_fixits (&richloc); ASSERT_FALSE (edit.valid_p ()); diff --git a/gcc/edit-context.h b/gcc/edit-context.h index f2e69a664d6d..3ae9ba103ca7 100644 --- a/gcc/edit-context.h +++ b/gcc/edit-context.h @@ -42,7 +42,7 @@ class edited_file; class edit_context { public: - edit_context (); + edit_context (file_cache &); bool valid_p () const { return m_valid; } @@ -55,11 +55,14 @@ class edit_context char *generate_diff (bool show_filenames); void print_diff (pretty_printer *pp, bool show_filenames); + file_cache &get_file_cache () const { return m_file_cache; } + private: bool apply_fixit (const fixit_hint *hint); edited_file *get_file (const char *filename); edited_file &get_or_insert_file (const char *filename); + file_cache &m_file_cache; bool m_valid; typed_splay_tree m_files; }; diff --git a/gcc/final.cc b/gcc/final.cc index dd3e22547acf..e6f1b1e166b1 100644 --- a/gcc/final.cc +++ b/gcc/final.cc @@ -82,6 +82,7 @@ along with GCC; see the file COPYING3. If not see #include "print-rtl.h" #include "function-abi.h" #include "common/common-target.h" +#include "diagnostic.h" #include "dwarf2out.h" @@ -2103,7 +2104,8 @@ asm_show_source (const char *filename, int linenum) if (!filename) return; - char_span line = location_get_source_line (filename, linenum); + char_span line + = global_dc->get_file_cache ().get_source_line (filename, linenum); if (!line) return; diff --git a/gcc/gcc-rich-location.cc b/gcc/gcc-rich-location.cc index edecf07f81e7..068df1c51a8c 100644 --- a/gcc/gcc-rich-location.cc +++ b/gcc/gcc-rich-location.cc @@ -75,10 +75,11 @@ gcc_rich_location::add_fixit_misspelled_id (location_t misspelled_token_loc, /* Return true if there is nothing on LOC's line before LOC. */ static bool -blank_line_before_p (location_t loc) +blank_line_before_p (file_cache &fc, + location_t loc) { expanded_location exploc = expand_location (loc); - char_span line = location_get_source_line (exploc.file, exploc.line); + char_span line = fc.get_source_line (exploc.file, exploc.line); if (!line) return false; if (line.length () < (size_t)exploc.column) @@ -96,7 +97,8 @@ blank_line_before_p (location_t loc) If true is returned then *OUT_START_OF_LINE is written to. */ static bool -use_new_line (location_t insertion_point, location_t indent, +use_new_line (file_cache &fc, + location_t insertion_point, location_t indent, location_t *out_start_of_line) { if (indent == UNKNOWN_LOCATION) @@ -105,7 +107,7 @@ use_new_line (location_t insertion_point, location_t indent, if (linemap_macro_expansion_map_p (indent_map)) return false; - if (!blank_line_before_p (insertion_point)) + if (!blank_line_before_p (fc, insertion_point)) return false; /* Locate the start of the line containing INSERTION_POINT. */ @@ -162,7 +164,8 @@ gcc_rich_location::add_fixit_insert_formatted (const char *content, location_t indent) { location_t start_of_line; - if (use_new_line (insertion_point, indent, &start_of_line)) + if (use_new_line (global_dc->get_file_cache (), + insertion_point, indent, &start_of_line)) { /* Add CONTENT on its own line, using the indentation of INDENT. */ diff --git a/gcc/input.cc b/gcc/input.cc index 1b229227d895..b520264f4a80 100644 --- a/gcc/input.cc +++ b/gcc/input.cc @@ -288,23 +288,6 @@ expand_location_1 (const line_maps *set, return xloc; } -/* Initialize the set of cache used for files accessed by caret - diagnostic. */ - -static void -diagnostic_file_cache_init (void) -{ - gcc_assert (global_dc); - global_dc->file_cache_init (); -} - -void -diagnostic_context::file_cache_init () -{ - if (m_file_cache == nullptr) - m_file_cache = new file_cache (); -} - /* Return the total lines number that have been read so far by the line map (in the preprocessor) so far. For languages like C++ that entirely preprocess the input file before starting to parse, this @@ -355,17 +338,6 @@ file_cache::lookup_file (const char *file_path) printing source code. For use in selftests when working with tempfiles. */ -void -diagnostics_file_cache_forcibly_evict_file (const char *file_path) -{ - gcc_assert (file_path); - - auto file_cache = global_dc->get_file_cache (); - if (!file_cache) - return; - file_cache->forcibly_evict_file (file_path); -} - void file_cache::forcibly_evict_file (const char *file_path) { @@ -379,6 +351,19 @@ file_cache::forcibly_evict_file (const char *file_path) r->evict (); } +/* Determine if FILE_PATH missing a trailing newline on its final line. + Only valid to call once all of the file has been loaded, by + requesting a line number beyond the end of the file. */ + +bool +file_cache::missing_trailing_newline_p (const char *file_path) +{ + gcc_assert (file_path); + + file_cache_slot *r = lookup_or_add_file (file_path); + return r->missing_trailing_newline_p (); +} + void file_cache_slot::evict () { @@ -403,8 +388,6 @@ file_cache_slot::evict () file_cache_slot* file_cache::evicted_cache_tab_entry (unsigned *highest_use_count) { - diagnostic_file_cache_init (); - file_cache_slot *to_evict = &m_file_slots[0]; unsigned huc = to_evict->get_use_count (); for (unsigned i = 1; i < num_file_slots; ++i) @@ -968,19 +951,12 @@ file_cache::get_source_line (const char *file_path, int line) return char_span (buffer, len); } -char_span -location_get_source_line (const char *file_path, int line) -{ - diagnostic_file_cache_init (); - return global_dc->get_file_cache ()->get_source_line (file_path, line); -} - /* Return a NUL-terminated copy of the source text between two locations, or NULL if the arguments are invalid. The caller is responsible for freeing the return value. */ char * -get_source_text_between (location_t start, location_t end) +get_source_text_between (file_cache &fc, location_t start, location_t end) { expanded_location expstart = expand_location_to_spelling_point (start, LOCATION_ASPECT_START); @@ -1005,7 +981,7 @@ get_source_text_between (location_t start, location_t end) /* For a single line we need to trim both edges. */ if (expstart.line == expend.line) { - char_span line = location_get_source_line (expstart.file, expstart.line); + char_span line = fc.get_source_line (expstart.file, expstart.line); if (line.length () < 1) return NULL; int s = expstart.column - 1; @@ -1022,7 +998,7 @@ get_source_text_between (location_t start, location_t end) parts of the start and end lines off depending on column values. */ for (int lnum = expstart.line; lnum <= expend.line; ++lnum) { - char_span line = location_get_source_line (expstart.file, lnum); + char_span line = fc.get_source_line (expstart.file, lnum); if (line.length () < 1 && (lnum != expstart.line && lnum != expend.line)) continue; @@ -1077,33 +1053,6 @@ file_cache::get_source_file_content (const char *file_path) return c->get_full_file_content (); } - -/* Get a borrowed char_span to the full content of FILE_PATH - as decoded according to the input charset, encoded as UTF-8. */ - -char_span -get_source_file_content (const char *file_path) -{ - diagnostic_file_cache_init (); - return global_dc->get_file_cache ()->get_source_file_content (file_path); -} - -/* Determine if FILE_PATH missing a trailing newline on its final line. - Only valid to call once all of the file has been loaded, by - requesting a line number beyond the end of the file. */ - -bool -location_missing_trailing_newline (const char *file_path) -{ - diagnostic_file_cache_init (); - - file_cache_slot *c = global_dc->get_file_cache ()->lookup_or_add_file (file_path); - if (c == NULL) - return false; - - return c->missing_trailing_newline_p (); -} - /* Test if the location originates from the spelling location of a builtin-tokens. That is, return TRUE if LOC is a (possibly virtual) location of a built-in token that appears in the expansion @@ -1236,12 +1185,13 @@ make_location (location_t caret, source_range src_range) source line in order to calculate the display width. If that cannot be done for any reason, then returns the byte column as a fallback. */ int -location_compute_display_column (expanded_location exploc, +location_compute_display_column (file_cache &fc, + expanded_location exploc, const cpp_char_column_policy &policy) { if (!(exploc.file && *exploc.file && exploc.line && exploc.column)) return exploc.column; - char_span line = location_get_source_line (exploc.file, exploc.line); + char_span line = fc.get_source_line (exploc.file, exploc.line); /* If line is NULL, this function returns exploc.column which is the desired fallback. */ return cpp_byte_column_to_display_column (line.get_buffer (), line.length (), @@ -1386,6 +1336,8 @@ dump_labelled_location_range (FILE *stream, void dump_location_info (FILE *stream) { + file_cache fc; + /* Visualize the reserved locations. */ dump_labelled_location_range (stream, "RESERVED LOCATIONS", 0, RESERVED_LOCATION_COUNT); @@ -1456,8 +1408,8 @@ dump_location_info (FILE *stream) { /* Beginning of a new source line: draw the line. */ - char_span line_text = location_get_source_line (exploc.file, - exploc.line); + char_span line_text = fc.get_source_line (exploc.file, + exploc.line); if (!line_text) break; fprintf (stream, @@ -1705,6 +1657,7 @@ class auto_cpp_string_vec : public auto_vec static const char * get_substring_ranges_for_loc (cpp_reader *pfile, + file_cache &fc, string_concat_db *concats, location_t strloc, enum cpp_ttype type, @@ -1784,7 +1737,7 @@ get_substring_ranges_for_loc (cpp_reader *pfile, if (start.column > finish.column) return "range endpoints are reversed"; - char_span line = location_get_source_line (start.file, start.line); + char_span line = fc.get_source_line (start.file, start.line); if (!line) return "unable to read source line"; @@ -1872,6 +1825,7 @@ get_substring_ranges_for_loc (cpp_reader *pfile, const char * get_location_within_string (cpp_reader *pfile, + file_cache &fc, string_concat_db *concats, location_t strloc, enum cpp_ttype type, @@ -1885,7 +1839,7 @@ get_location_within_string (cpp_reader *pfile, cpp_substring_ranges ranges; const char *err - = get_substring_ranges_for_loc (pfile, concats, strloc, type, ranges); + = get_substring_ranges_for_loc (pfile, fc, concats, strloc, type, ranges); if (err) return err; @@ -1954,6 +1908,7 @@ namespace selftest { static const char * get_source_range_for_char (cpp_reader *pfile, + file_cache &fc, string_concat_db *concats, location_t strloc, enum cpp_ttype type, @@ -1965,7 +1920,7 @@ get_source_range_for_char (cpp_reader *pfile, cpp_substring_ranges ranges; const char *err - = get_substring_ranges_for_loc (pfile, concats, strloc, type, ranges); + = get_substring_ranges_for_loc (pfile, fc, concats, strloc, type, ranges); if (err) return err; @@ -1981,6 +1936,7 @@ get_source_range_for_char (cpp_reader *pfile, static const char * get_num_source_ranges_for_substring (cpp_reader *pfile, + file_cache &fc, string_concat_db *concats, location_t strloc, enum cpp_ttype type, @@ -1990,7 +1946,7 @@ get_num_source_ranges_for_substring (cpp_reader *pfile, cpp_substring_ranges ranges; const char *err - = get_substring_ranges_for_loc (pfile, concats, strloc, type, ranges); + = get_substring_ranges_for_loc (pfile, fc, concats, strloc, type, ranges); if (err) return err; @@ -2313,23 +2269,24 @@ test_reading_source_line () "01234567890123456789\n" "This is the test text\n" "This is the 3rd line"); + file_cache fc; /* Read back a specific line from the tempfile. */ - char_span source_line = location_get_source_line (tmp.get_filename (), 3); + char_span source_line = fc.get_source_line (tmp.get_filename (), 3); ASSERT_TRUE (source_line); ASSERT_TRUE (source_line.get_buffer () != NULL); ASSERT_EQ (20, source_line.length ()); ASSERT_TRUE (!strncmp ("This is the 3rd line", source_line.get_buffer (), source_line.length ())); - source_line = location_get_source_line (tmp.get_filename (), 2); + source_line = fc.get_source_line (tmp.get_filename (), 2); ASSERT_TRUE (source_line); ASSERT_TRUE (source_line.get_buffer () != NULL); ASSERT_EQ (21, source_line.length ()); ASSERT_TRUE (!strncmp ("This is the test text", source_line.get_buffer (), source_line.length ())); - source_line = location_get_source_line (tmp.get_filename (), 4); + source_line = fc.get_source_line (tmp.get_filename (), 4); ASSERT_FALSE (source_line); ASSERT_TRUE (source_line.get_buffer () == NULL); } @@ -2490,6 +2447,7 @@ public: line_table_test m_ltt; cpp_reader_ptr m_parser; temp_source_file m_tempfile; + file_cache m_file_cache; string_concat_db m_concats; bool m_implicitly_expect_EOF; }; @@ -2681,7 +2639,8 @@ assert_char_at_range (const location &loc, source_range actual_range = source_range(); const char *err - = get_source_range_for_char (pfile, concats, strloc, type, idx, + = get_source_range_for_char (pfile, test.m_file_cache, + concats, strloc, type, idx, &actual_range); if (should_have_column_data_p (strloc)) ASSERT_EQ_AT (loc, NULL, err); @@ -2736,7 +2695,8 @@ assert_num_substring_ranges (const location &loc, int actual_num_ranges = -1; const char *err - = get_num_source_ranges_for_substring (pfile, concats, strloc, type, + = get_num_source_ranges_for_substring (pfile, test.m_file_cache, + concats, strloc, type, &actual_num_ranges); if (should_have_column_data_p (strloc)) ASSERT_EQ_AT (loc, NULL, err); @@ -2773,7 +2733,7 @@ assert_has_no_substring_ranges (const location &loc, string_concat_db *concats = &test.m_concats; cpp_substring_ranges ranges; const char *actual_err - = get_substring_ranges_for_loc (pfile, concats, strloc, + = get_substring_ranges_for_loc (pfile, test.m_file_cache, concats, strloc, type, ranges); if (should_have_column_data_p (strloc)) ASSERT_STREQ_AT (loc, expected_err, actual_err); @@ -3542,7 +3502,8 @@ test_lexer_string_locations_concatenation_2 (const line_table_case &case_) this case. */ source_range actual_range; const char *err - = get_source_range_for_char (test.m_parser, &test.m_concats, + = get_source_range_for_char (test.m_parser, test.m_file_cache, + &test.m_concats, initial_loc, type, 0, &actual_range); ASSERT_STREQ ("range starts after LINE_MAP_MAX_LOCATION_WITH_COLS", err); return; diff --git a/gcc/input.h b/gcc/input.h index 5eac1dc40a67..9cc9d58d0b29 100644 --- a/gcc/input.h +++ b/gcc/input.h @@ -23,6 +23,8 @@ along with GCC; see the file COPYING3. If not see #include "line-map.h" +class file_cache; + extern GTY(()) class line_maps *line_table; extern GTY(()) class line_maps *saved_line_table; @@ -67,7 +69,8 @@ extern expanded_location expand_location (location_t); class cpp_char_column_policy; extern int -location_compute_display_column (expanded_location exploc, +location_compute_display_column (file_cache &fc, + expanded_location exploc, const cpp_char_column_policy &policy); /* A class capturing the bounds of a buffer, to allow for run-time @@ -113,11 +116,8 @@ class char_span size_t m_n_elts; }; -extern char_span location_get_source_line (const char *file_path, int line); -extern char *get_source_text_between (location_t, location_t); -extern char_span get_source_file_content (const char *file_path); - -extern bool location_missing_trailing_newline (const char *file_path); +extern char * +get_source_text_between (file_cache &, location_t, location_t); /* Forward decl of slot within file_cache, so that the definition doesn't need to be in this header. */ @@ -152,6 +152,7 @@ class file_cache char_span get_source_file_content (const char *file_path); char_span get_source_line (const char *file_path, int line); + bool missing_trailing_newline_p (const char *file_path); private: file_cache_slot *evicted_cache_tab_entry (unsigned *highest_use_count); @@ -254,8 +255,6 @@ void dump_line_table_statistics (void); void dump_location_info (FILE *stream); -void diagnostics_file_cache_forcibly_evict_file (const char *file_path); - class GTY(()) string_concat { public: diff --git a/gcc/selftest.cc b/gcc/selftest.cc index 20c10bbd0558..2d0181b77fd9 100644 --- a/gcc/selftest.cc +++ b/gcc/selftest.cc @@ -161,10 +161,12 @@ assert_str_startswith (const location &loc, /* Constructor. Generate a name for the file. */ -named_temp_file::named_temp_file (const char *suffix) +named_temp_file::named_temp_file (const char *suffix, + file_cache *fc) { m_filename = make_temp_file (suffix); ASSERT_NE (m_filename, NULL); + m_file_cache = fc; } /* Destructor. Delete the tempfile. */ @@ -172,7 +174,8 @@ named_temp_file::named_temp_file (const char *suffix) named_temp_file::~named_temp_file () { unlink (m_filename); - diagnostics_file_cache_forcibly_evict_file (m_filename); + if (m_file_cache) + m_file_cache->forcibly_evict_file (m_filename); free (m_filename); } @@ -182,8 +185,9 @@ named_temp_file::~named_temp_file () temp_source_file::temp_source_file (const location &loc, const char *suffix, - const char *content) -: named_temp_file (suffix) + const char *content, + file_cache *fc) +: named_temp_file (suffix, fc) { FILE *out = fopen (get_filename (), "w"); if (!out) diff --git a/gcc/selftest.h b/gcc/selftest.h index b0a4142fe34f..3bb4885014b5 100644 --- a/gcc/selftest.h +++ b/gcc/selftest.h @@ -25,6 +25,8 @@ along with GCC; see the file COPYING3. If not see #if CHECKING_P +class file_cache; + namespace selftest { /* A struct describing the source-location of a selftest, to make it @@ -91,17 +93,20 @@ extern void assert_str_startswith (const location &loc, /* A named temporary file for use in selftests. Usable for writing out files, and as the base class for temp_source_file. - The file is unlinked in the destructor. */ + The file is unlinked in the destructor. + If the file_cache is non-null, the filename is evicted from + the file_cache when the named_temp_file is destroyed. */ class named_temp_file { public: - named_temp_file (const char *suffix); + named_temp_file (const char *suffix, file_cache *fc = nullptr); ~named_temp_file (); const char *get_filename () const { return m_filename; } private: char *m_filename; + file_cache *m_file_cache; }; /* A class for writing out a temporary sourcefile for use in selftests @@ -111,7 +116,7 @@ class temp_source_file : public named_temp_file { public: temp_source_file (const location &loc, const char *suffix, - const char *content); + const char *content, file_cache *fc = nullptr); temp_source_file (const location &loc, const char *suffix, const char *content, size_t sz); }; diff --git a/gcc/substring-locations.h b/gcc/substring-locations.h index ce9995709e87..ec49215da4c7 100644 --- a/gcc/substring-locations.h +++ b/gcc/substring-locations.h @@ -116,6 +116,7 @@ class format_string_diagnostic_t LANG_HOOKS_GET_SUBSTRING_LOCATION. */ extern const char *get_location_within_string (cpp_reader *pfile, + file_cache &fc, string_concat_db *concats, location_t strloc, enum cpp_ttype type, diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c index 2b8cbc952ebc..6cc661b026d6 100644 --- a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c +++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c @@ -438,7 +438,8 @@ test_show_locus (function *fun) rich_location richloc (line_table, loc); for (int line = start_line; line <= finish_line; line++) { - char_span content = location_get_source_line (file, line); + file_cache &fc = global_dc->get_file_cache (); + char_span content = fc.get_source_line (file, line); gcc_assert (content); /* Split line up into words. */ for (int idx = 0; idx < content.length (); idx++) diff --git a/gcc/testsuite/gcc.dg/plugin/expensive_selftests_plugin.c b/gcc/testsuite/gcc.dg/plugin/expensive_selftests_plugin.c index a7c67284d3c0..3c534005a419 100644 --- a/gcc/testsuite/gcc.dg/plugin/expensive_selftests_plugin.c +++ b/gcc/testsuite/gcc.dg/plugin/expensive_selftests_plugin.c @@ -51,7 +51,7 @@ test_richloc (rich_location *richloc) diagnostic_show_locus (&dc, richloc, DK_ERROR); /* Generate a diff. */ - edit_context ec; + edit_context ec (global_dc->get_file_cache ()); ec.add_fixits (richloc); char *diff = ec.generate_diff (true); free (diff); From 948b8b6e0e50958ecf56d4d9fb7ac16f245d9cc3 Mon Sep 17 00:00:00 2001 From: Andrew Stubbs Date: Tue, 14 Nov 2023 16:07:37 +0000 Subject: [PATCH 029/169] Fix ICE generating uniform vector masks Most targets have an "and" instructions for their vector mask size, but RISC-V only has DImode "and". Fixed by allowing wider instruction modes. gcc/ChangeLog: PR target/112481 * expr.cc (store_constructor): Use OPTAB_WIDEN for mask adjustment. --- gcc/expr.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/expr.cc b/gcc/expr.cc index 3e2a678710d6..556bcf7ef59b 100644 --- a/gcc/expr.cc +++ b/gcc/expr.cc @@ -7489,7 +7489,7 @@ store_constructor (tree exp, rtx target, int cleared, poly_int64 size, if (maybe_ne (GET_MODE_PRECISION (mode), nunits)) tmp = expand_binop (mode, and_optab, tmp, GEN_INT ((1 << nunits) - 1), target, - true, OPTAB_DIRECT); + true, OPTAB_WIDEN); if (tmp != target) emit_move_insn (target, tmp); break; From 194825f20619a1c4b51eaea84f20432fefc0db03 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 14 Nov 2023 18:28:34 +0100 Subject: [PATCH 030/169] c++: Implement C++26 P1854R4 - Making non-encodable string literals ill-formed [PR110341] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This paper voted in as DR makes some multi-character literals ill-formed. 'abcd' stays valid, but e.g. 'á' is newly invalid in UTF-8 exec charset while valid e.g. in ISO-8859-1, because it is a single character which needs 2 bytes to be encoded. The following patch does that by checking (only pedantically, especially because it is a DR) if we'd emit a -Wmultichar warning because character constant has more than one byte in it whether the number of source characters is equal to the number of bytes in the multichar string. If it is, it is normal multi-character literal constant and is diagnosed normally with -Wmultichar, otherwise at least one of the c-chars in the sequence was encoded as 2+ bytes. 2023-11-14 Jakub Jelinek PR c++/110341 libcpp/ * charset.cc: Implement C++26 P1854R4 - Making non-encodable string literals ill-formed. (one_count_chars, convert_count_chars, count_source_chars): New functions. (narrow_str_to_charconst): Change last arg type from cpp_ttype to const cpp_token *. For C++ if pedantic and i > 1 in CPP_CHAR interpret token also as CPP_STRING32 and if number of characters in the CPP_STRING32 is larger than number of bytes in CPP_CHAR, pedwarn on it. Make the diagnostics more detailed. (wide_str_to_charconst): Change last arg type from cpp_ttype to const cpp_token *. Make the diagnostics more detailed. (cpp_interpret_charconst): Adjust narrow_str_to_charconst and wide_str_to_charconst callers. gcc/testsuite/ * g++.dg/cpp26/literals1.C: New test. * g++.dg/cpp26/literals2.C: New test. * g++.dg/cpp23/wchar-multi1.C: Adjust expected diagnostic wordings. * g++.dg/cpp23/wchar-multi2.C: Likewise. * gcc.dg/c23-utf8char-3.c: Likewise. * gcc.dg/cpp/charconst-4.c: Likewise. * gcc.dg/cpp/charconst.c: Likewise. * gcc.dg/cpp/if-2.c: Likewise. * gcc.dg/utf16-4.c: Likewise. * gcc.dg/utf32-4.c: Likewise. * g++.dg/cpp1z/utf8-neg.C: Likewise. * g++.dg/cpp2a/ucn2.C: Likewise. * g++.dg/ext/utf16-4.C: Likewise. * g++.dg/ext/utf32-4.C: Likewise. --- gcc/testsuite/g++.dg/cpp1z/utf8-neg.C | 6 +- gcc/testsuite/g++.dg/cpp23/wchar-multi1.C | 37 +++-- gcc/testsuite/g++.dg/cpp23/wchar-multi2.C | 30 ++-- gcc/testsuite/g++.dg/cpp26/literals1.C | 66 ++++++++ gcc/testsuite/g++.dg/cpp26/literals2.C | 68 ++++++++ gcc/testsuite/g++.dg/cpp2a/ucn2.C | 12 +- gcc/testsuite/g++.dg/ext/utf16-4.C | 7 +- gcc/testsuite/g++.dg/ext/utf32-4.C | 7 +- gcc/testsuite/gcc.dg/c23-utf8char-3.c | 4 +- gcc/testsuite/gcc.dg/cpp/charconst-4.c | 4 +- gcc/testsuite/gcc.dg/cpp/charconst.c | 10 +- gcc/testsuite/gcc.dg/cpp/if-2.c | 2 +- gcc/testsuite/gcc.dg/utf16-4.c | 6 +- gcc/testsuite/gcc.dg/utf32-4.c | 6 +- libcpp/charset.cc | 194 ++++++++++++++++++++-- 15 files changed, 378 insertions(+), 81 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp26/literals1.C create mode 100644 gcc/testsuite/g++.dg/cpp26/literals2.C diff --git a/gcc/testsuite/g++.dg/cpp1z/utf8-neg.C b/gcc/testsuite/g++.dg/cpp1z/utf8-neg.C index 7bca12489555..d9e982f5c011 100644 --- a/gcc/testsuite/g++.dg/cpp1z/utf8-neg.C +++ b/gcc/testsuite/g++.dg/cpp1z/utf8-neg.C @@ -1,6 +1,6 @@ /* { dg-do compile { target c++17 } } */ const static char c0 = u8''; // { dg-error "empty character" } -const static char c1 = u8'ab'; // { dg-error "character constant too long for its type" } -const static char c2 = u8'\u0124'; // { dg-error "character constant too long for its type" } -const static char c3 = u8'\U00064321'; // { dg-error "character constant too long for its type" } +const static char c1 = u8'ab'; // { dg-error "multi-character literal cannot have an encoding prefix" } +const static char c2 = u8'\u0124'; // { dg-error "character not encodable in a single code unit" } +const static char c3 = u8'\U00064321'; // { dg-error "character not encodable in a single code unit" } diff --git a/gcc/testsuite/g++.dg/cpp23/wchar-multi1.C b/gcc/testsuite/g++.dg/cpp23/wchar-multi1.C index 77fa3a606dc5..d86dfc917906 100644 --- a/gcc/testsuite/g++.dg/cpp23/wchar-multi1.C +++ b/gcc/testsuite/g++.dg/cpp23/wchar-multi1.C @@ -4,18 +4,19 @@ char a = 'a'; int b = 'ab'; // { dg-warning "multi-character character constant" } -int c = '\u05D9'; // { dg-warning "multi-character character constant" } +int c = '\u05D9'; // { dg-error "character not encodable in a single execution character code unit" } #if __SIZEOF_INT__ > 2 -int d = '\U0001F525'; // { dg-warning "multi-character character constant" "" { target int32 } } +int d = '\U0001F525'; // { dg-error "character not encodable in a single execution character code unit" "" { target int32 } } #endif -int e = 'abcd'; // { dg-warning "multi-character character constant" } +int e = 'abcd'; // { dg-warning "multi-character character constant" "" { target int32plus } } + // { dg-warning "multi-character literal with \[0-9]+ characters exceeds 'int' size of \[0-9]+ bytes" "" { target { ! int32plus } } .-1 } wchar_t f = L'f'; -wchar_t g = L'gh'; // { dg-error "character constant too long for its type" "" { target c++23 } } - // { dg-warning "character constant too long for its type" "" { target c++20_down } .-1 } -wchar_t h = L'ijkl'; // { dg-error "character constant too long for its type" "" { target c++23 } } - // { dg-warning "character constant too long for its type" "" { target c++20_down } .-1 } -wchar_t i = L'\U0001F525'; // { dg-error "character constant too long for its type" "" { target { c++23 && { ! 4byte_wchar_t } } } } - // { dg-warning "character constant too long for its type" "" { target { c++20_down && { ! 4byte_wchar_t } } } .-1 } +wchar_t g = L'gh'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++23 } } + // { dg-warning "multi-character literal cannot have an encoding prefix" "" { target c++20_down } .-1 } +wchar_t h = L'ijkl'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++23 } } + // { dg-warning "multi-character literal cannot have an encoding prefix" "" { target c++20_down } .-1 } +wchar_t i = L'\U0001F525'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target { c++23 && { ! 4byte_wchar_t } } } } + // { dg-warning "multi-character literal cannot have an encoding prefix" "" { target { c++20_down && { ! 4byte_wchar_t } } } .-1 } #ifdef __cpp_char8_t typedef char8_t u8; #else @@ -23,20 +24,20 @@ typedef char u8; #endif #if __cpp_unicode_characters >= 201411 u8 j = u8'j'; -u8 k = u8'kl'; // { dg-error "character constant too long for its type" "" { target c++17 } } -u8 l = u8'\U0001F525'; // { dg-error "character constant too long for its type" "" { target c++17 } } +u8 k = u8'kl'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++17 } } +u8 l = u8'\U0001F525'; // { dg-error "character not encodable in a single code unit" "" { target c++17 } } #endif #if __cpp_unicode_characters >= 200704 char16_t m = u'm'; -char16_t n = u'no'; // { dg-error "character constant too long for its type" "" { target c++11 } } +char16_t n = u'no'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++11 } } char16_t o = u'\u05D9'; -char16_t p = u'\U0001F525'; // { dg-error "character constant too long for its type" "" { target c++11 } } +char16_t p = u'\U0001F525'; // { dg-error "character not encodable in a single code unit" "" { target c++11 } } char32_t q = U'm'; -char32_t r = U'no'; // { dg-error "character constant too long for its type" "" { target c++11 } } +char32_t r = U'no'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++11 } } char32_t s = U'\u05D9'; char32_t t = U'\U0001F525'; #endif -wchar_t u = L'\u0065\u0301'; // { dg-error "character constant too long for its type" "" { target c++23 } } - // { dg-warning "character constant too long for its type" "" { target c++20_down } .-1 } -wchar_t v = L'é'; // { dg-error "character constant too long for its type" "" { target c++23 } } - // { dg-warning "character constant too long for its type" "" { target c++20_down } .-1 } +wchar_t u = L'\u0065\u0301'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++23 } } + // { dg-warning "multi-character literal cannot have an encoding prefix" "" { target c++20_down } .-1 } +wchar_t v = L'é'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++23 } } + // { dg-warning "multi-character literal cannot have an encoding prefix" "" { target c++20_down } .-1 } diff --git a/gcc/testsuite/g++.dg/cpp23/wchar-multi2.C b/gcc/testsuite/g++.dg/cpp23/wchar-multi2.C index a63e0fffe601..270de65988cb 100644 --- a/gcc/testsuite/g++.dg/cpp23/wchar-multi2.C +++ b/gcc/testsuite/g++.dg/cpp23/wchar-multi2.C @@ -11,12 +11,12 @@ int d = '\U0001F525'; // { dg-warning "multi-character character constant" "" { #endif int e = 'abcd'; // { dg-warning "multi-character character constant" } wchar_t f = L'f'; -wchar_t g = L'gh'; // { dg-error "character constant too long for its type" "" { target c++23 } } - // { dg-warning "character constant too long for its type" "" { target c++20_down } .-1 } -wchar_t h = L'ijkl'; // { dg-error "character constant too long for its type" "" { target c++23 } } - // { dg-warning "character constant too long for its type" "" { target c++20_down } .-1 } -wchar_t i = L'\U0001F525'; // { dg-error "character constant too long for its type" "" { target { c++23 } } } - // { dg-warning "character constant too long for its type" "" { target { c++20_down } } .-1 } +wchar_t g = L'gh'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++23 } } + // { dg-warning "multi-character literal cannot have an encoding prefix" "" { target c++20_down } .-1 } +wchar_t h = L'ijkl'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++23 } } + // { dg-warning "multi-character literal cannot have an encoding prefix" "" { target c++20_down } .-1 } +wchar_t i = L'\U0001F525'; // { dg-error "character not encodable in a single code unit" "" { target { c++23 } } } + // { dg-warning "character not encodable in a single code unit" "" { target { c++20_down } } .-1 } #ifdef __cpp_char8_t typedef char8_t u8; #else @@ -24,20 +24,20 @@ typedef char u8; #endif #if __cpp_unicode_characters >= 201411 u8 j = u8'j'; -u8 k = u8'kl'; // { dg-error "character constant too long for its type" "" { target c++17 } } -u8 l = u8'\U0001F525'; // { dg-error "character constant too long for its type" "" { target c++17 } } +u8 k = u8'kl'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++17 } } +u8 l = u8'\U0001F525'; // { dg-error "character not encodable in a single code unit" "" { target c++17 } } #endif #if __cpp_unicode_characters >= 200704 char16_t m = u'm'; -char16_t n = u'no'; // { dg-error "character constant too long for its type" "" { target c++11 } } +char16_t n = u'no'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++11 } } char16_t o = u'\u05D9'; -char16_t p = u'\U0001F525'; // { dg-error "character constant too long for its type" "" { target c++11 } } +char16_t p = u'\U0001F525'; // { dg-error "character not encodable in a single code unit" "" { target c++11 } } char32_t q = U'm'; -char32_t r = U'no'; // { dg-error "character constant too long for its type" "" { target c++11 } } +char32_t r = U'no'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++11 } } char32_t s = U'\u05D9'; char32_t t = U'\U0001F525'; #endif -wchar_t u = L'\u0065\u0301'; // { dg-error "character constant too long for its type" "" { target c++23 } } - // { dg-warning "character constant too long for its type" "" { target c++20_down } .-1 } -wchar_t v = L'é'; // { dg-error "character constant too long for its type" "" { target c++23 } } - // { dg-warning "character constant too long for its type" "" { target c++20_down } .-1 } +wchar_t u = L'\u0065\u0301'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++23 } } + // { dg-warning "multi-character literal cannot have an encoding prefix" "" { target c++20_down } .-1 } +wchar_t v = L'é'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++23 } } + // { dg-warning "multi-character literal cannot have an encoding prefix" "" { target c++20_down } .-1 } diff --git a/gcc/testsuite/g++.dg/cpp26/literals1.C b/gcc/testsuite/g++.dg/cpp26/literals1.C new file mode 100644 index 000000000000..d51f2f8373f8 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/literals1.C @@ -0,0 +1,66 @@ +// C++26 P1854R4 - Making non-encodable string literals ill-formed +// { dg-do compile { target c++11 } } +// { dg-require-effective-target int32 } +// { dg-options "-pedantic-errors -finput-charset=UTF-8 -fexec-charset=UTF-8" } + +int a = 'abcd'; // { dg-warning "multi-character character constant" } +int b = '\x61\x62\x63\x64'; // { dg-warning "multi-character character constant" } +int c = 'á'; // { dg-error "character not encodable in a single execution character code unit" } +int d = '😁'; // { dg-error "character not encodable in a single execution character code unit" } +int e = '\N{FACE WITH TEARS OF JOY}'; // { dg-error "character not encodable in a single execution character code unit" } + // { dg-error "named universal character escapes are only valid in" "" { target c++20_down } .-1 } +int f = '\U0001F602'; // { dg-error "character not encodable in a single execution character code unit" } +wchar_t g = L'abcd'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++23 } } + // { dg-warning "multi-character literal cannot have an encoding prefix" "" { target c++20_down } .-1 } +wchar_t h = L'\x61\x62\x63\x64'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++23 } } + // { dg-warning "multi-character literal cannot have an encoding prefix" "" { target c++20_down } .-1 } +wchar_t i = L'á'; +char16_t j = u'abcd'; // { dg-error "multi-character literal cannot have an encoding prefix" } +char16_t k = u'\x61\x62\x63\x64'; // { dg-error "multi-character literal cannot have an encoding prefix" } +char16_t l = u'á'; +char16_t m = u'😁'; // { dg-error "character not encodable in a single code unit" } +char16_t n = u'\N{FACE WITH TEARS OF JOY}'; // { dg-error "character not encodable in a single code unit" { target c++23 } } + // { dg-error "named universal character escapes are only valid in" "" { target c++20_down } .-1 } +char16_t o = u'\U0001F602'; // { dg-error "character not encodable in a single code unit" } +char32_t p = U'abcd'; // { dg-error "multi-character literal cannot have an encoding prefix" } +char32_t q = U'\x61\x62\x63\x64'; // { dg-error "multi-character literal cannot have an encoding prefix" } +char32_t r = U'á'; +char32_t s = U'😁'; +char32_t t = U'\N{FACE WITH TEARS OF JOY}'; // { dg-error "named universal character escapes are only valid in" "" { target c++20_down } } +char32_t u = U'\U0001F602'; +#if __cpp_unicode_characters >= 201411L +auto v = u8'abcd'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++17 } } +auto w = u8'\x61\x62\x63\x64'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++17 } } +auto x = u8'á'; // { dg-error "character not encodable in a single code unit" "" { target c++17 } } +auto y = u8'😁'; // { dg-error "character not encodable in a single code unit" "" { target c++17 } } +auto z = u8'\N{FACE WITH TEARS OF JOY}'; // { dg-error "character not encodable in a single code unit" "" { target c++17 } } + // { dg-error "named universal character escapes are only valid in" "" { target { c++17 && c++20_down } } .-1 } +auto aa = u8'\U0001F602'; // { dg-error "character not encodable in a single code unit" "" { target c++17 } } +#endif +const char *ab = "😁"; +const char *ac = "\N{FACE WITH TEARS OF JOY}"; // { dg-error "named universal character escapes are only valid in" "" { target c++20_down } } +const char *ad = "\U0001F602"; +const char16_t *ae = u"😁"; +const char16_t *af = u"\N{FACE WITH TEARS OF JOY}"; // { dg-error "named universal character escapes are only valid in" "" { target c++20_down } } +const char16_t *ag = u"\U0001F602"; +const char32_t *ah = U"😁"; +const char32_t *ai = U"\N{FACE WITH TEARS OF JOY}"; // { dg-error "named universal character escapes are only valid in" "" { target c++20_down } } +const char32_t *aj = U"\U0001F602"; +auto ak = u8"😁"; +auto al = u8"\N{FACE WITH TEARS OF JOY}"; // { dg-error "named universal character escapes are only valid in" "" { target c++20_down } } +auto am = u8"\U0001F602"; +int an = '\x123456789'; // { dg-error "hex escape sequence out of range" } +wchar_t ao = L'\x123456789abcdef0'; // { dg-error "hex escape sequence out of range" } +char16_t ap = u'\x12345678'; // { dg-error "hex escape sequence out of range" } +char32_t aq = U'\x123456789abcdef0'; // { dg-error "hex escape sequence out of range" } +#if __cpp_unicode_characters >= 201411L +auto ar = u8'\x123456789abcdef0'; // { dg-error "hex escape sequence out of range" "" { target c++17 } } +#endif +char as = '\xff'; +#if __SIZEOF_WCHAR_T__ * __CHAR_BIT__ == 32 +wchar_t at = L'\xffffffff'; +#elif __SIZEOF_WCHAR_T__ * __CHAR_BIT__ == 16 +wchar_t at = L'\xffff'; +#endif +int au = '\x1234'; // { dg-error "hex escape sequence out of range" } +int av = 'abcdefghijklmnop'; // { dg-warning "multi-character literal with \[0-9]+ characters exceeds 'int' size of \[0-9]+ bytes" } diff --git a/gcc/testsuite/g++.dg/cpp26/literals2.C b/gcc/testsuite/g++.dg/cpp26/literals2.C new file mode 100644 index 000000000000..11e4406f1114 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/literals2.C @@ -0,0 +1,68 @@ +// C++26 P1854R4 - Making non-encodable string literals ill-formed +// { dg-do compile { target c++11 } } +// { dg-require-effective-target int32 } +// { dg-options "-pedantic-errors -finput-charset=UTF-8 -fexec-charset=ISO-8859-1" } +/* { dg-require-iconv "ISO-8859-1" } */ + +int a = 'abcd'; // { dg-warning "multi-character character constant" } +int b = '\x61\x62\x63\x64'; // { dg-warning "multi-character character constant" } +int c = 'á'; +int d = '😁'; // { dg-error "converting to execution character set" } +int e = '\N{FACE WITH TEARS OF JOY}'; // { dg-error "converting UCN to execution character set" } + // { dg-error "named universal character escapes are only valid in" "" { target c++20_down } .-1 } +int f = '\U0001F602'; // { dg-error "converting UCN to execution character set" } +wchar_t g = L'abcd'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++23 } } + // { dg-warning "multi-character literal cannot have an encoding prefix" "" { target c++20_down } .-1 } +wchar_t h = L'\x61\x62\x63\x64'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++23 } } + // { dg-warning "multi-character literal cannot have an encoding prefix" "" { target c++20_down } .-1 } +wchar_t i = L'á'; +char16_t j = u'abcd'; // { dg-error "multi-character literal cannot have an encoding prefix" } +char16_t k = u'\x61\x62\x63\x64'; // { dg-error "multi-character literal cannot have an encoding prefix" } +char16_t l = u'á'; +char16_t m = u'😁'; // { dg-error "character not encodable in a single code unit" } +char16_t n = u'\N{FACE WITH TEARS OF JOY}'; // { dg-error "character not encodable in a single code unit" { target c++23 } } + // { dg-error "named universal character escapes are only valid in" "" { target c++20_down } .-1 } +char16_t o = u'\U0001F602'; // { dg-error "character not encodable in a single code unit" } +char32_t p = U'abcd'; // { dg-error "multi-character literal cannot have an encoding prefix" } +char32_t q = U'\x61\x62\x63\x64'; // { dg-error "multi-character literal cannot have an encoding prefix" } +char32_t r = U'á'; +char32_t s = U'😁'; +char32_t t = U'\N{FACE WITH TEARS OF JOY}'; // { dg-error "named universal character escapes are only valid in" "" { target c++20_down } } +char32_t u = U'\U0001F602'; +#if __cpp_unicode_characters >= 201411L +auto v = u8'abcd'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++17 } } +auto w = u8'\x61\x62\x63\x64'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++17 } } +auto x = u8'á'; // { dg-error "character not encodable in a single code unit" "" { target c++17 } } +auto y = u8'😁'; // { dg-error "character not encodable in a single code unit" "" { target c++17 } } +auto z = u8'\N{FACE WITH TEARS OF JOY}'; // { dg-error "character not encodable in a single code unit" "" { target c++17 } } + // { dg-error "named universal character escapes are only valid in" "" { target { c++17 && c++20_down } } .-1 } +auto aa = u8'\U0001F602'; // { dg-error "character not encodable in a single code unit" "" { target c++17 } } +#endif +const char *ab = "😁"; // { dg-error "converting to execution character set" } +const char *ac = "\N{FACE WITH TEARS OF JOY}"; // { dg-error "converting UCN to execution character set" } + // { dg-error "named universal character escapes are only valid in" "" { target c++20_down } .-1 } +const char *ad = "\U0001F602"; // { dg-error "converting UCN to execution character set" } +const char16_t *ae = u"😁"; +const char16_t *af = u"\N{FACE WITH TEARS OF JOY}"; // { dg-error "named universal character escapes are only valid in" "" { target c++20_down } } +const char16_t *ag = u"\U0001F602"; +const char32_t *ah = U"😁"; +const char32_t *ai = U"\N{FACE WITH TEARS OF JOY}"; // { dg-error "named universal character escapes are only valid in" "" { target c++20_down } } +const char32_t *aj = U"\U0001F602"; +auto ak = u8"😁"; +auto al = u8"\N{FACE WITH TEARS OF JOY}"; // { dg-error "named universal character escapes are only valid in" "" { target c++20_down } } +auto am = u8"\U0001F602"; +int an = '\x123456789'; // { dg-error "hex escape sequence out of range" } +wchar_t ao = L'\x123456789abcdef0'; // { dg-error "hex escape sequence out of range" } +char16_t ap = u'\x12345678'; // { dg-error "hex escape sequence out of range" } +char32_t aq = U'\x123456789abcdef0'; // { dg-error "hex escape sequence out of range" } +#if __cpp_unicode_characters >= 201411L +auto ar = u8'\x123456789abcdef0'; // { dg-error "hex escape sequence out of range" "" { target c++17 } } +#endif +char as = '\xff'; +#if __SIZEOF_WCHAR_T__ * __CHAR_BIT__ == 32 +wchar_t at = L'\xffffffff'; +#elif __SIZEOF_WCHAR_T__ * __CHAR_BIT__ == 16 +wchar_t at = L'\xffff'; +#endif +int au = '\x1234'; // { dg-error "hex escape sequence out of range" } +int av = 'abcdefghijklmnop'; // { dg-warning "multi-character literal with \[0-9]+ characters exceeds 'int' size of \[0-9]+ bytes" } diff --git a/gcc/testsuite/g++.dg/cpp2a/ucn2.C b/gcc/testsuite/g++.dg/cpp2a/ucn2.C index ee7011b4a3b7..53ee06e89713 100644 --- a/gcc/testsuite/g++.dg/cpp2a/ucn2.C +++ b/gcc/testsuite/g++.dg/cpp2a/ucn2.C @@ -12,18 +12,18 @@ const char32_t *f = U"\uD802"; // { dg-error "is not a valid universal characte const char32_t *g = U"\U0000DFF0"; // { dg-error "is not a valid universal character" } const char32_t *h = U"\U00110001"; // { dg-error "is outside the UCS codespace" "" { target c++20 } } #if __cpp_unicode_characters >= 201411 -const char8_t i = u8'\u00C0'; // { dg-error "character constant too long for its type" "" { target c++17 } } +const char8_t i = u8'\u00C0'; // { dg-error "character not encodable in a single code unit" "" { target c++17 } } #endif -const char16_t j = u'\U0001F914'; // { dg-error "character constant too long for its type" } +const char16_t j = u'\U0001F914'; // { dg-error "character not encodable in a single code unit" } const char32_t k = U'\U0001F914'; #if __cpp_unicode_characters >= 201411 -const char8_t l = u8'ab'; // { dg-error "character constant too long for its type" "" { target c++17 } } +const char8_t l = u8'ab'; // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++17 } } #endif -const char16_t m = u'ab'; // { dg-error "character constant too long for its type" } -const char32_t n = U'ab'; // { dg-error "character constant too long for its type" } +const char16_t m = u'ab'; // { dg-error "multi-character literal cannot have an encoding prefix" } +const char32_t n = U'ab'; // { dg-error "multi-character literal cannot have an encoding prefix" } #if __cpp_unicode_characters >= 201411 const char8_t o = u8'\U00110002'; // { dg-error "is outside the UCS codespace" "" { target c++20 } } - // { dg-error "character constant too long for its type" "" { target c++17 } .-1 } + // { dg-error "character not encodable in a single code unit" "" { target c++17 } .-1 } #endif const char16_t p = u'\U00110003'; // { dg-error "is outside the UCS codespace" "" { target c++20 } } // { dg-error "converting UCN to execution character set" "" { target *-*-* } .-1 } diff --git a/gcc/testsuite/g++.dg/ext/utf16-4.C b/gcc/testsuite/g++.dg/ext/utf16-4.C index 030e085a82e4..feb81667b7b5 100644 --- a/gcc/testsuite/g++.dg/ext/utf16-4.C +++ b/gcc/testsuite/g++.dg/ext/utf16-4.C @@ -4,8 +4,8 @@ const static char16_t c0 = u''; /* { dg-error "empty character" } */ -const static char16_t c1 = u'ab'; /* { dg-error "constant too long" } */ -const static char16_t c2 = u'\U00064321'; /* { dg-error "constant too long" } */ +const static char16_t c1 = u'ab'; /* { dg-error "multi-character literal cannot have an encoding prefix" } */ +const static char16_t c2 = u'\U00064321'; /* { dg-error "character not encodable in a single code unit" } */ const static char16_t c3 = 'a'; const static char16_t c4 = U'a'; @@ -14,5 +14,6 @@ const static char16_t c6 = U'\U00064321'; /* { dg-warning "conversion from .char const static char16_t c7 = L'a'; const static char16_t c8 = L'\u2029'; const static char16_t c9 = L'\U00064321'; /* { dg-warning "conversion from .wchar_t. to .char16_t. changes value from .410401. to .17185." "" { target { 4byte_wchar_t } } } */ - /* { dg-warning "constant too long" "" { target { ! 4byte_wchar_t } } .-1 } */ + /* { dg-warning "character not encodable in a single code unit" "" { target { { ! 4byte_wchar_t } && c++20_down } } .-1 } */ + /* { dg-error "character not encodable in a single code unit" "" { target { { ! 4byte_wchar_t } && c++23 } } .-2 } */ int main () {} diff --git a/gcc/testsuite/g++.dg/ext/utf32-4.C b/gcc/testsuite/g++.dg/ext/utf32-4.C index 96bf0bb2b4a4..8310bf4055c4 100644 --- a/gcc/testsuite/g++.dg/ext/utf32-4.C +++ b/gcc/testsuite/g++.dg/ext/utf32-4.C @@ -3,15 +3,16 @@ /* { dg-do compile { target c++11 } } */ const static char32_t c0 = U''; /* { dg-error "empty character" } */ -const static char32_t c1 = U'ab'; /* { dg-error "constant too long" } */ +const static char32_t c1 = U'ab'; /* { dg-error "multi-character literal cannot have an encoding prefix" } */ const static char32_t c2 = U'\U00064321'; const static char32_t c3 = 'a'; const static char32_t c4 = u'a'; const static char32_t c5 = u'\u2029'; -const static char32_t c6 = u'\U00064321'; /* { dg-error "constant too long" } */ +const static char32_t c6 = u'\U00064321'; /* { dg-error "character not encodable in a single code unit" } */ const static char32_t c7 = L'a'; const static char32_t c8 = L'\u2029'; -const static char32_t c9 = L'\U00064321'; /* { dg-warning "constant too long" "" { target { ! 4byte_wchar_t } } } */ +const static char32_t c9 = L'\U00064321'; /* { dg-warning "character not encodable in a single code unit" "" { target { { ! 4byte_wchar_t } && c++20_down } } } */ + /* { dg-error "character not encodable in a single code unit" "" { target { { ! 4byte_wchar_t } && c++23 } } .-1 } */ int main () {} diff --git a/gcc/testsuite/gcc.dg/c23-utf8char-3.c b/gcc/testsuite/gcc.dg/c23-utf8char-3.c index e152edbed845..0d82af52f051 100644 --- a/gcc/testsuite/gcc.dg/c23-utf8char-3.c +++ b/gcc/testsuite/gcc.dg/c23-utf8char-3.c @@ -3,6 +3,6 @@ /* { dg-options "-std=c23 -pedantic-errors" } */ unsigned char a = u8''; /* { dg-error "empty character constant" } */ -unsigned char b = u8'ab'; /* { dg-error "character constant too long for its type" } */ -unsigned char c = u8'\u00ff'; /* { dg-error "character constant too long for its type" } */ +unsigned char b = u8'ab'; /* { dg-error "multi-character literal cannot have an encoding prefix" } */ +unsigned char c = u8'\u00ff'; /* { dg-error "character not encodable in a single code unit" } */ unsigned char d = u8'\x100'; /* { dg-error "hex escape sequence out of range" } */ diff --git a/gcc/testsuite/gcc.dg/cpp/charconst-4.c b/gcc/testsuite/gcc.dg/cpp/charconst-4.c index 9ea5e8ab8969..03706c5dac2e 100644 --- a/gcc/testsuite/gcc.dg/cpp/charconst-4.c +++ b/gcc/testsuite/gcc.dg/cpp/charconst-4.c @@ -38,7 +38,7 @@ extern void abort (void); # error Charconst incorrectly sign-extended #endif -#if LONG_CHARCONST != SHORT_CHARCONST /* { dg-warning "too long" } */ +#if LONG_CHARCONST != SHORT_CHARCONST /* { dg-warning "multi-character literal with \[0-9]+ characters exceeds 'int' size of \[0-9]+ bytes" } */ # error Overly long charconst truncates wrongly for preprocessor #endif @@ -46,7 +46,7 @@ int main () { if (POS_CHARCONST < 0) abort (); - if (LONG_CHARCONST != SHORT_CHARCONST) /* { dg-warning "too long" } */ + if (LONG_CHARCONST != SHORT_CHARCONST) /* { dg-warning "multi-character literal with \[0-9]+ characters exceeds 'int' size of \[0-9]+ bytes" } */ abort (); return 0; } diff --git a/gcc/testsuite/gcc.dg/cpp/charconst.c b/gcc/testsuite/gcc.dg/cpp/charconst.c index 8934d6a6721d..a2a5717c663b 100644 --- a/gcc/testsuite/gcc.dg/cpp/charconst.c +++ b/gcc/testsuite/gcc.dg/cpp/charconst.c @@ -11,9 +11,9 @@ #endif #if L'' /* { dg-error "empty" "empty wide charconst" } */ #endif -#if 'very long' /* { dg-warning "too long" "long charconst" } */ +#if 'very long' /* { dg-warning "multi-character literal with \[0-9]+ characters exceeds 'int' size of \[0-9]+ bytes" "long charconst" } */ #endif -#if L'very long' /* { dg-warning "too long" "long wide charconst" } */ +#if L'very long' /* { dg-warning "multi-character literal cannot have an encoding prefix" "long wide charconst" } */ #endif /* Don't do this test for L'ab'; it depends upon sizeof (wchar_t). */ #if 'ab' /* { dg-warning "multi-char" "multi-character" } */ @@ -27,10 +27,10 @@ void foo () c = ''; /* { dg-error "empty" "empty charconst" } */ w = L''; /* { dg-error "empty" "empty wide charconst" } */ - c = 'very long'; /* { dg-warning "too long" "long charconst" } */ - w = L'very long'; /* { dg-warning "too long" "long wide charconst" } */ + c = 'very long'; /* { dg-warning "multi-character literal with \[0-9]+ characters exceeds 'int' size of \[0-9]+ bytes" "long charconst" } */ + w = L'very long'; /* { dg-warning "multi-character literal cannot have an encoding prefix" "long wide charconst" } */ c = 'ab'; /* { dg-warning "multi-char" "multi-char" } */ /* Wide charconsts cannot contain more than one wide character. */ - w = L'ab'; /* { dg-warning "too long" "multi-char wide" } */ + w = L'ab'; /* { dg-warning "multi-character literal cannot have an encoding prefix" "multi-char wide" } */ } diff --git a/gcc/testsuite/gcc.dg/cpp/if-2.c b/gcc/testsuite/gcc.dg/cpp/if-2.c index dc136b456344..e969aa0b473b 100644 --- a/gcc/testsuite/gcc.dg/cpp/if-2.c +++ b/gcc/testsuite/gcc.dg/cpp/if-2.c @@ -21,7 +21,7 @@ #if 'abcd' /* { dg-warning "(multi-character character constant)|(character constant (is )?too long)" "multi-character charconst" } */ #endif -#if 'abcdefghi' /* { dg-warning "character constant (is )?too long" "charconst too long" } */ +#if 'abcdefghi' /* { dg-warning "multi-character literal with \[0-9]+ characters exceeds 'int' size of \[0-9]+ bytes" } */ #endif #if '' /* { dg-error "empty character constant" "empty charconst" } */ diff --git a/gcc/testsuite/gcc.dg/utf16-4.c b/gcc/testsuite/gcc.dg/utf16-4.c index 60e00f60ee4d..e108d00afdfd 100644 --- a/gcc/testsuite/gcc.dg/utf16-4.c +++ b/gcc/testsuite/gcc.dg/utf16-4.c @@ -6,8 +6,8 @@ typedef __CHAR16_TYPE__ char16_t; char16_t c0 = u''; /* { dg-error "empty character" } */ -char16_t c1 = u'ab'; /* { dg-warning "constant too long" } */ -char16_t c2 = u'\U00064321'; /* { dg-warning "constant too long" } */ +char16_t c1 = u'ab'; /* { dg-warning "multi-character literal cannot have an encoding prefix" } */ +char16_t c2 = u'\U00064321'; /* { dg-warning "character not encodable in a single code unit" } */ char16_t c3 = 'a'; char16_t c4 = U'a'; @@ -16,6 +16,6 @@ char16_t c6 = U'\U00064321'; /* { dg-warning "conversion from .(long )?unsigned char16_t c7 = L'a'; char16_t c8 = L'\u2029'; char16_t c9 = L'\U00064321'; /* { dg-warning "conversion" "" { target { 4byte_wchar_t } } } */ - /* { dg-warning "constant too long" "" { target { ! 4byte_wchar_t } } .-1 } */ + /* { dg-warning "character not encodable in a single code unit" "" { target { ! 4byte_wchar_t } } .-1 } */ int main () {} diff --git a/gcc/testsuite/gcc.dg/utf32-4.c b/gcc/testsuite/gcc.dg/utf32-4.c index aa7f66a36851..72086bc7c6a1 100644 --- a/gcc/testsuite/gcc.dg/utf32-4.c +++ b/gcc/testsuite/gcc.dg/utf32-4.c @@ -6,15 +6,15 @@ typedef __CHAR32_TYPE__ char32_t; char32_t c0 = U''; /* { dg-error "empty character" } */ -char32_t c1 = U'ab'; /* { dg-warning "constant too long" } */ +char32_t c1 = U'ab'; /* { dg-warning "multi-character literal cannot have an encoding prefix" } */ char32_t c2 = U'\U00064321'; char32_t c3 = 'a'; char32_t c4 = u'a'; char32_t c5 = u'\u2029'; -char32_t c6 = u'\U00064321'; /* { dg-warning "constant too long" } */ +char32_t c6 = u'\U00064321'; /* { dg-warning "character not encodable in a single code unit" } */ char32_t c7 = L'a'; char32_t c8 = L'\u2029'; -char32_t c9 = L'\U00064321'; /* { dg-warning "constant too long" "" { target { ! 4byte_wchar_t } } } */ +char32_t c9 = L'\U00064321'; /* { dg-warning "character not encodable in a single code unit" "" { target { ! 4byte_wchar_t } } } */ int main () {} diff --git a/libcpp/charset.cc b/libcpp/charset.cc index d5a027502cd6..9a944d94360c 100644 --- a/libcpp/charset.cc +++ b/libcpp/charset.cc @@ -446,6 +446,73 @@ one_utf16_to_utf8 (iconv_t bigend, const uchar **inbufp, size_t *inbytesleftp, return 0; } + +/* Special routine which just counts number of characters in the + string, what exactly is stored into the output doesn't matter + as long as it is one uchar per character. */ + +static inline int +one_count_chars (iconv_t, const uchar **inbufp, size_t *inbytesleftp, + uchar **outbufp, size_t *outbytesleftp) +{ + cppchar_t s = 0; + int rval; + + /* Check for space first, since we know exactly how much we need. */ + if (*outbytesleftp < 1) + return E2BIG; + +#if HOST_CHARSET == HOST_CHARSET_ASCII + rval = one_utf8_to_cppchar (inbufp, inbytesleftp, &s); + if (rval) + return rval; +#else + if (*inbytesleftp < 1) + return EINVAL; + static const uchar utf_ebcdic_map[256] = { + /* See table 4 in http://unicode.org/reports/tr16/tr16-7.2.html */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, + 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, + 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, + 9, 9, 9, 9, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 1, 3, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 4, 4, 4, 4, + 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 5, 5, 5, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 6, 6, 7, 7, 0 + }; + rval = utf_ebcdic_map[**inbufp]; + if (rval == 9) + return EILSEQ; + if (rval == 0) + rval = 1; + if (rval >= 2) + { + if (*inbytesleftp < rval) + return EINVAL; + for (int i = 1; i < rval; ++i) + if (utf_ebcdic_map[(*inbufp)[i]] != 9) + return EILSEQ; + } + *inbytesleftp -= rval; + *inbufp += rval; +#endif + + **outbufp = ' '; + + *outbufp += 1; + *outbytesleftp -= 1; + return 0; +} + + /* Helper routine for the next few functions. The 'const' on one_conversion means that we promise not to modify what function is pointed to, which lets the inliner see through it. */ @@ -529,6 +596,15 @@ convert_utf32_utf8 (iconv_t cd, const uchar *from, size_t flen, return conversion_loop (one_utf32_to_utf8, cd, from, flen, to); } +/* Magic conversion which just counts characters from input, so + only to->len is significant. */ +static bool +convert_count_chars (iconv_t cd, const uchar *from, + size_t flen, struct _cpp_strbuf *to) +{ + return conversion_loop (one_count_chars, cd, from, flen, to); +} + /* Identity conversion, used when we have no alternative. */ static bool convert_no_conversion (iconv_t cd ATTRIBUTE_UNUSED, @@ -2574,21 +2650,49 @@ cpp_interpret_string_notranslate (cpp_reader *pfile, const cpp_string *from, } +/* Return number of source characters in STR. */ +static unsigned +count_source_chars (cpp_reader *pfile, cpp_string str, cpp_ttype type) +{ + cpp_string str2 = { 0, 0 }; + bool (*saved_diagnostic_handler) (cpp_reader *, enum cpp_diagnostic_level, + enum cpp_warning_reason, rich_location *, + const char *, va_list *) + ATTRIBUTE_FPTR_PRINTF(5,0); + saved_diagnostic_handler = pfile->cb.diagnostic; + pfile->cb.diagnostic = noop_diagnostic_cb; + convert_f save_func = pfile->narrow_cset_desc.func; + pfile->narrow_cset_desc.func = convert_count_chars; + bool ret = cpp_interpret_string (pfile, &str, 1, &str2, type); + pfile->narrow_cset_desc.func = save_func; + pfile->cb.diagnostic = saved_diagnostic_handler; + if (ret) + { + if (str2.text != str.text) + free ((void *)str2.text); + return str2.len; + } + else + return 0; +} + /* Subroutine of cpp_interpret_charconst which performs the conversion to a number, for narrow strings. STR is the string structure returned by cpp_interpret_string. PCHARS_SEEN and UNSIGNEDP are as for - cpp_interpret_charconst. TYPE is the token type. */ + cpp_interpret_charconst. TOKEN is the token. */ static cppchar_t narrow_str_to_charconst (cpp_reader *pfile, cpp_string str, unsigned int *pchars_seen, int *unsignedp, - enum cpp_ttype type) + const cpp_token *token) { + enum cpp_ttype type = token->type; size_t width = CPP_OPTION (pfile, char_precision); size_t max_chars = CPP_OPTION (pfile, int_precision) / width; size_t mask = width_to_mask (width); size_t i; cppchar_t result, c; bool unsigned_p; + bool diagnosed = false; /* The value of a multi-character character constant, or a single-character character constant whose representation in the @@ -2612,11 +2716,55 @@ narrow_str_to_charconst (cpp_reader *pfile, cpp_string str, if (type == CPP_UTF8CHAR) max_chars = 1; - if (i > max_chars) + else if (i > 1 && CPP_OPTION (pfile, cplusplus) && CPP_PEDANTIC (pfile)) { + /* C++ as a DR since + P1854R4 - Making non-encodable string literals ill-formed + makes multi-character narrow character literals if any of the + characters in the literal isn't encodable in char/unsigned char + ill-formed. We need to count the number of c-chars and compare + that to str.len. */ + unsigned src_chars = count_source_chars (pfile, token->val.str, type); + + if (src_chars) + { + if (str.len > src_chars) + { + if (src_chars <= 2) + diagnosed + = cpp_error (pfile, CPP_DL_PEDWARN, + "character not encodable in a single execution " + "character code unit"); + else + diagnosed + = cpp_error (pfile, CPP_DL_PEDWARN, + "at least one character in a multi-character " + "literal not encodable in a single execution " + "character code unit"); + if (diagnosed && i > max_chars) + i = max_chars; + } + } + } + if (diagnosed) + /* Already diagnosed above. */; + else if (i > max_chars) + { + unsigned src_chars + = count_source_chars (pfile, token->val.str, + type == CPP_UTF8CHAR ? CPP_CHAR : type); + + if (type != CPP_UTF8CHAR) + cpp_error (pfile, CPP_DL_WARNING, + "multi-character literal with %ld characters exceeds " + "'int' size of %ld bytes", (long) i, (long) max_chars); + else if (src_chars > 2) + cpp_error (pfile, CPP_DL_ERROR, + "multi-character literal cannot have an encoding prefix"); + else + cpp_error (pfile, CPP_DL_ERROR, + "character not encodable in a single code unit"); i = max_chars; - cpp_error (pfile, type == CPP_UTF8CHAR ? CPP_DL_ERROR : CPP_DL_WARNING, - "character constant too long for its type"); } else if (i > 1 && CPP_OPTION (pfile, warn_multichar)) cpp_warning (pfile, CPP_W_MULTICHAR, "multi-character character constant"); @@ -2651,12 +2799,13 @@ narrow_str_to_charconst (cpp_reader *pfile, cpp_string str, /* Subroutine of cpp_interpret_charconst which performs the conversion to a number, for wide strings. STR is the string structure returned by cpp_interpret_string. PCHARS_SEEN and UNSIGNEDP are as for - cpp_interpret_charconst. TYPE is the token type. */ + cpp_interpret_charconst. TOKEN is the token. */ static cppchar_t wide_str_to_charconst (cpp_reader *pfile, cpp_string str, unsigned int *pchars_seen, int *unsignedp, - enum cpp_ttype type) + const cpp_token *token) { + enum cpp_ttype type = token->type; bool bigend = CPP_OPTION (pfile, bytes_big_endian); size_t width = converter_for_type (pfile, type).width; size_t cwidth = CPP_OPTION (pfile, char_precision); @@ -2692,14 +2841,25 @@ wide_str_to_charconst (cpp_reader *pfile, cpp_string str, character exactly fills a wchar_t, so a multi-character wide character constant is guaranteed to overflow. */ if (str.len > nbwc * 2) - cpp_error (pfile, (CPP_OPTION (pfile, cplusplus) - && (type == CPP_CHAR16 - || type == CPP_CHAR32 - /* In C++23 this is error even for L'ab'. */ - || (type == CPP_WCHAR - && CPP_OPTION (pfile, size_t_literals)))) - ? CPP_DL_ERROR : CPP_DL_WARNING, - "character constant too long for its type"); + { + cpp_diagnostic_level level = CPP_DL_WARNING; + unsigned src_chars + = count_source_chars (pfile, token->val.str, CPP_CHAR); + + if (CPP_OPTION (pfile, cplusplus) + && (type == CPP_CHAR16 + || type == CPP_CHAR32 + /* In C++23 this is error even for L'ab'. */ + || (type == CPP_WCHAR + && CPP_OPTION (pfile, size_t_literals)))) + level = CPP_DL_ERROR; + if (src_chars > 2) + cpp_error (pfile, level, + "multi-character literal cannot have an encoding prefix"); + else + cpp_error (pfile, level, + "character not encodable in a single code unit"); + } /* Truncate the constant to its natural width, and simultaneously sign- or zero-extend to the full width of cppchar_t. */ @@ -2754,10 +2914,10 @@ cpp_interpret_charconst (cpp_reader *pfile, const cpp_token *token, if (wide) result = wide_str_to_charconst (pfile, str, pchars_seen, unsignedp, - token->type); + token); else result = narrow_str_to_charconst (pfile, str, pchars_seen, unsignedp, - token->type); + token); if (str.text != token->val.str.text) free ((void *)str.text); From d64b7c82dab4f0aadf239c8382735add33e38586 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 14 Nov 2023 18:32:37 +0100 Subject: [PATCH 031/169] libcpp, contrib: Update to Unicode 15.1 The following patch (in plaintext just a pseudo-patch where I've left out the too big parts of either wget downloaded or regenerated files out with ..., full patch attached compressed) updates to Unicode 15.1 from 15.0 we had last year. Apparently Unicode forgot to add a new range to 4-8 Table we are using, but from the other files it is clear what should have been added; I've filed a bugreport against Unicode. 2023-11-14 Jakub Jelinek contrib/ * unicode/README: Adjust glibc git commit hash, number of Unicode data files to be updated and latest Unicode version. * unicode/from_glibc/utf8_gen.py: Update from glibc. * unicode/UnicodeData.txt: Update from Unicode 15.1. * unicode/EastAsianWidth.txt: Likewise. * unicode/DerivedNormalizationProps.txt: Likewise. * unicode/NameAliases.txt: Likewise. * unicode/DerivedCoreProperties.txt: Likewise. * unicode/PropList.txt: Likewise. libcpp/ * makeucnid.cc (write_copyright): Update copyright year. * makeuname2c.cc (write_copyright): Likewise. (struct generated): Update latest Unicode version. (generated_ranges): Add 2ebf0-2ee5d CJK UNIFIED IDEOGRAPH range which was forgotten to be added to 4-8 table, but clearly is expected to be there from the 15.1 additions. * ucnid.h: Regenerated. * uname2c.h: Regenerated. * generated_cpp_wcwidth.h: Regenerated. --- contrib/unicode/DerivedCoreProperties.txt | 277 +- contrib/unicode/DerivedNormalizationProps.txt | 6079 +++- contrib/unicode/EastAsianWidth.txt | 5170 ++-- contrib/unicode/NameAliases.txt | 6 +- contrib/unicode/PropList.txt | 78 +- contrib/unicode/README | 6 +- contrib/unicode/UnicodeData.txt | 7 + contrib/unicode/from_glibc/utf8_gen.py | 2 +- libcpp/generated_cpp_wcwidth.h | 150 +- libcpp/makeucnid.cc | 2 +- libcpp/makeuname2c.cc | 5 +- libcpp/ucnid.h | 12 +- libcpp/uname2c.h | 25481 ++++++++-------- 13 files changed, 21841 insertions(+), 15434 deletions(-) diff --git a/contrib/unicode/DerivedCoreProperties.txt b/contrib/unicode/DerivedCoreProperties.txt index 8b482b5c10ae..220c55685d4b 100644 --- a/contrib/unicode/DerivedCoreProperties.txt +++ b/contrib/unicode/DerivedCoreProperties.txt @@ -1,6 +1,6 @@ -# DerivedCoreProperties-15.0.0.txt -# Date: 2022-08-05, 22:17:05 GMT -# © 2022 Unicode®, Inc. +# DerivedCoreProperties-15.1.0.txt +# Date: 2023-08-07, 15:21:24 GMT +# © 2023 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see https://www.unicode.org/terms_of_use.html # @@ -1397,11 +1397,12 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 2B740..2B81D ; Alphabetic # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; Alphabetic # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 2CEB0..2EBE0 ; Alphabetic # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 +2EBF0..2EE5D ; Alphabetic # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 2F800..2FA1D ; Alphabetic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; Alphabetic # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A 31350..323AF ; Alphabetic # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF -# Total code points: 137765 +# Total code points: 138387 # ================================================ @@ -6853,11 +6854,12 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 2B740..2B81D ; ID_Start # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; ID_Start # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 2CEB0..2EBE0 ; ID_Start # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 +2EBF0..2EE5D ; ID_Start # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 2F800..2FA1D ; ID_Start # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; ID_Start # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A 31350..323AF ; ID_Start # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF -# Total code points: 136345 +# Total code points: 136967 # ================================================ @@ -7438,6 +7440,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 1FE0..1FEC ; ID_Continue # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA 1FF2..1FF4 ; ID_Continue # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI 1FF6..1FFC ; ID_Continue # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +200C..200D ; ID_Continue # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER 203F..2040 ; ID_Continue # Pc [2] UNDERTIE..CHARACTER TIE 2054 ; ID_Continue # Pc INVERTED UNDERTIE 2071 ; ID_Continue # Lm SUPERSCRIPT LATIN SMALL LETTER I @@ -7504,6 +7507,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 309D..309E ; ID_Continue # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK 309F ; ID_Continue # Lo HIRAGANA DIGRAPH YORI 30A1..30FA ; ID_Continue # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO +30FB ; ID_Continue # Po KATAKANA MIDDLE DOT 30FC..30FE ; ID_Continue # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK 30FF ; ID_Continue # Lo KATAKANA DIGRAPH KOTO 3105..312F ; ID_Continue # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN @@ -7683,6 +7687,7 @@ FF10..FF19 ; ID_Continue # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NIN FF21..FF3A ; ID_Continue # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z FF3F ; ID_Continue # Pc FULLWIDTH LOW LINE FF41..FF5A ; ID_Continue # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z +FF65 ; ID_Continue # Po HALFWIDTH KATAKANA MIDDLE DOT FF66..FF6F ; ID_Continue # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU FF70 ; ID_Continue # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK FF71..FF9D ; ID_Continue # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N @@ -8207,12 +8212,13 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 2B740..2B81D ; ID_Continue # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; ID_Continue # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 2CEB0..2EBE0 ; ID_Continue # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 +2EBF0..2EE5D ; ID_Continue # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 2F800..2FA1D ; ID_Continue # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; ID_Continue # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A 31350..323AF ; ID_Continue # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 139482 +# Total code points: 140108 # ================================================ @@ -8962,11 +8968,12 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 2B740..2B81D ; XID_Start # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; XID_Start # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 2CEB0..2EBE0 ; XID_Start # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 +2EBF0..2EE5D ; XID_Start # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 2F800..2FA1D ; XID_Start # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; XID_Start # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A 31350..323AF ; XID_Start # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF -# Total code points: 136322 +# Total code points: 136944 # ================================================ @@ -9543,6 +9550,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 1FE0..1FEC ; XID_Continue # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA 1FF2..1FF4 ; XID_Continue # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI 1FF6..1FFC ; XID_Continue # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +200C..200D ; XID_Continue # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER 203F..2040 ; XID_Continue # Pc [2] UNDERTIE..CHARACTER TIE 2054 ; XID_Continue # Pc INVERTED UNDERTIE 2071 ; XID_Continue # Lm SUPERSCRIPT LATIN SMALL LETTER I @@ -9608,6 +9616,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 309D..309E ; XID_Continue # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK 309F ; XID_Continue # Lo HIRAGANA DIGRAPH YORI 30A1..30FA ; XID_Continue # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO +30FB ; XID_Continue # Po KATAKANA MIDDLE DOT 30FC..30FE ; XID_Continue # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK 30FF ; XID_Continue # Lo KATAKANA DIGRAPH KOTO 3105..312F ; XID_Continue # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN @@ -9793,6 +9802,7 @@ FF10..FF19 ; XID_Continue # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NI FF21..FF3A ; XID_Continue # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z FF3F ; XID_Continue # Pc FULLWIDTH LOW LINE FF41..FF5A ; XID_Continue # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z +FF65 ; XID_Continue # Po HALFWIDTH KATAKANA MIDDLE DOT FF66..FF6F ; XID_Continue # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU FF70 ; XID_Continue # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK FF71..FF9D ; XID_Continue # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N @@ -10317,12 +10327,13 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 2B740..2B81D ; XID_Continue # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; XID_Continue # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 2CEB0..2EBE0 ; XID_Continue # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 +2EBF0..2EE5D ; XID_Continue # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 2F800..2FA1D ; XID_Continue # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; XID_Continue # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A 31350..323AF ; XID_Continue # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF E0100..E01EF ; XID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 139463 +# Total code points: 140089 # ================================================ @@ -10335,6 +10346,15 @@ E0100..E01EF ; XID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTO # - FFF9..FFFB (Interlinear annotation format characters) # - 13430..13440 (Egyptian hieroglyph format characters) # - Prepended_Concatenation_Mark (Exceptional format characters that should be visible) +# +# There are currently no stability guarantees for DICP. However, the +# values of DICP interact with the derivation of XID_Continue +# and NFKC_CF, for which there are stability guarantees. +# Maintainers of this property should note that in the +# unlikely case that the DICP value changes for an existing character +# which is also XID_Continue=Yes, then exceptions must be put +# in place to ensure that the NFKC_CF mapping value for that +# existing character does not change. 00AD ; Default_Ignorable_Code_Point # Cf SOFT HYPHEN 034F ; Default_Ignorable_Code_Point # Mn COMBINING GRAPHEME JOINER @@ -11602,7 +11622,7 @@ E0100..E01EF ; Grapheme_Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELE 2E80..2E99 ; Grapheme_Base # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP 2E9B..2EF3 ; Grapheme_Base # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE 2F00..2FD5 ; Grapheme_Base # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE -2FF0..2FFB ; Grapheme_Base # So [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID +2FF0..2FFF ; Grapheme_Base # So [16] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER ROTATION 3000 ; Grapheme_Base # Zs IDEOGRAPHIC SPACE 3001..3003 ; Grapheme_Base # Po [3] IDEOGRAPHIC COMMA..DITTO MARK 3004 ; Grapheme_Base # So JAPANESE INDUSTRIAL STANDARD SYMBOL @@ -11657,6 +11677,7 @@ E0100..E01EF ; Grapheme_Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELE 3196..319F ; Grapheme_Base # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK 31A0..31BF ; Grapheme_Base # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH 31C0..31E3 ; Grapheme_Base # So [36] CJK STROKE T..CJK STROKE Q +31EF ; Grapheme_Base # So IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION 31F0..31FF ; Grapheme_Base # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO 3200..321E ; Grapheme_Base # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU 3220..3229 ; Grapheme_Base # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN @@ -12497,11 +12518,12 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME 2B740..2B81D ; Grapheme_Base # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; Grapheme_Base # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 2CEB0..2EBE0 ; Grapheme_Base # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 +2EBF0..2EE5D ; Grapheme_Base # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 2F800..2FA1D ; Grapheme_Base # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; Grapheme_Base # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A 31350..323AF ; Grapheme_Base # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF -# Total code points: 146986 +# Total code points: 147613 # ================================================ @@ -12572,4 +12594,239 @@ ABED ; Grapheme_Link # Mn MEETEI MAYEK APUN IYEK # Total code points: 65 +# ================================================ + +# Derived Property: Indic_Conjunct_Break +# Generated from the Grapheme_Cluster_Break, Indic_Syllabic_Category, +# Canonical_Combining_Class, and Script properties as described in UAX #44: +# https://www.unicode.org/reports/tr44/. + +# All code points not explicitly listed for Indic_Conjunct_Break +# have the value None. + +# @missing: 0000..10FFFF; InCB; None + +# ================================================ + +# Indic_Conjunct_Break=Linker + +094D ; InCB; Linker # Mn DEVANAGARI SIGN VIRAMA +09CD ; InCB; Linker # Mn BENGALI SIGN VIRAMA +0ACD ; InCB; Linker # Mn GUJARATI SIGN VIRAMA +0B4D ; InCB; Linker # Mn ORIYA SIGN VIRAMA +0C4D ; InCB; Linker # Mn TELUGU SIGN VIRAMA +0D4D ; InCB; Linker # Mn MALAYALAM SIGN VIRAMA + +# Total code points: 6 + +# ================================================ + +# Indic_Conjunct_Break=Consonant + +0915..0939 ; InCB; Consonant # Lo [37] DEVANAGARI LETTER KA..DEVANAGARI LETTER HA +0958..095F ; InCB; Consonant # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA +0978..097F ; InCB; Consonant # Lo [8] DEVANAGARI LETTER MARWARI DDA..DEVANAGARI LETTER BBA +0995..09A8 ; InCB; Consonant # Lo [20] BENGALI LETTER KA..BENGALI LETTER NA +09AA..09B0 ; InCB; Consonant # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA +09B2 ; InCB; Consonant # Lo BENGALI LETTER LA +09B6..09B9 ; InCB; Consonant # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA +09DC..09DD ; InCB; Consonant # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA +09DF ; InCB; Consonant # Lo BENGALI LETTER YYA +09F0..09F1 ; InCB; Consonant # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL +0A95..0AA8 ; InCB; Consonant # Lo [20] GUJARATI LETTER KA..GUJARATI LETTER NA +0AAA..0AB0 ; InCB; Consonant # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA +0AB2..0AB3 ; InCB; Consonant # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA +0AB5..0AB9 ; InCB; Consonant # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA +0AF9 ; InCB; Consonant # Lo GUJARATI LETTER ZHA +0B15..0B28 ; InCB; Consonant # Lo [20] ORIYA LETTER KA..ORIYA LETTER NA +0B2A..0B30 ; InCB; Consonant # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA +0B32..0B33 ; InCB; Consonant # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA +0B35..0B39 ; InCB; Consonant # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA +0B5C..0B5D ; InCB; Consonant # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA +0B5F ; InCB; Consonant # Lo ORIYA LETTER YYA +0B71 ; InCB; Consonant # Lo ORIYA LETTER WA +0C15..0C28 ; InCB; Consonant # Lo [20] TELUGU LETTER KA..TELUGU LETTER NA +0C2A..0C39 ; InCB; Consonant # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA +0C58..0C5A ; InCB; Consonant # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0D15..0D3A ; InCB; Consonant # Lo [38] MALAYALAM LETTER KA..MALAYALAM LETTER TTTA + +# Total code points: 240 + +# ================================================ + +# Indic_Conjunct_Break=Extend + +0300..034E ; InCB; Extend # Mn [79] COMBINING GRAVE ACCENT..COMBINING UPWARDS ARROW BELOW +0350..036F ; InCB; Extend # Mn [32] COMBINING RIGHT ARROWHEAD ABOVE..COMBINING LATIN SMALL LETTER X +0483..0487 ; InCB; Extend # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE +0591..05BD ; InCB; Extend # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG +05BF ; InCB; Extend # Mn HEBREW POINT RAFE +05C1..05C2 ; InCB; Extend # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT +05C4..05C5 ; InCB; Extend # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT +05C7 ; InCB; Extend # Mn HEBREW POINT QAMATS QATAN +0610..061A ; InCB; Extend # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA +064B..065F ; InCB; Extend # Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW +0670 ; InCB; Extend # Mn ARABIC LETTER SUPERSCRIPT ALEF +06D6..06DC ; InCB; Extend # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN +06DF..06E4 ; InCB; Extend # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA +06E7..06E8 ; InCB; Extend # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON +06EA..06ED ; InCB; Extend # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM +0711 ; InCB; Extend # Mn SYRIAC LETTER SUPERSCRIPT ALAPH +0730..074A ; InCB; Extend # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH +07EB..07F3 ; InCB; Extend # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE +07FD ; InCB; Extend # Mn NKO DANTAYALAN +0816..0819 ; InCB; Extend # Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH +081B..0823 ; InCB; Extend # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A +0825..0827 ; InCB; Extend # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U +0829..082D ; InCB; Extend # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA +0859..085B ; InCB; Extend # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK +0898..089F ; InCB; Extend # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +08CA..08E1 ; InCB; Extend # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA +08E3..08FF ; InCB; Extend # Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA +093C ; InCB; Extend # Mn DEVANAGARI SIGN NUKTA +0951..0954 ; InCB; Extend # Mn [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT +09BC ; InCB; Extend # Mn BENGALI SIGN NUKTA +09FE ; InCB; Extend # Mn BENGALI SANDHI MARK +0A3C ; InCB; Extend # Mn GURMUKHI SIGN NUKTA +0ABC ; InCB; Extend # Mn GUJARATI SIGN NUKTA +0B3C ; InCB; Extend # Mn ORIYA SIGN NUKTA +0C3C ; InCB; Extend # Mn TELUGU SIGN NUKTA +0C55..0C56 ; InCB; Extend # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK +0CBC ; InCB; Extend # Mn KANNADA SIGN NUKTA +0D3B..0D3C ; InCB; Extend # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA +0E38..0E3A ; InCB; Extend # Mn [3] THAI CHARACTER SARA U..THAI CHARACTER PHINTHU +0E48..0E4B ; InCB; Extend # Mn [4] THAI CHARACTER MAI EK..THAI CHARACTER MAI CHATTAWA +0EB8..0EBA ; InCB; Extend # Mn [3] LAO VOWEL SIGN U..LAO SIGN PALI VIRAMA +0EC8..0ECB ; InCB; Extend # Mn [4] LAO TONE MAI EK..LAO TONE MAI CATAWA +0F18..0F19 ; InCB; Extend # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS +0F35 ; InCB; Extend # Mn TIBETAN MARK NGAS BZUNG NYI ZLA +0F37 ; InCB; Extend # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS +0F39 ; InCB; Extend # Mn TIBETAN MARK TSA -PHRU +0F71..0F72 ; InCB; Extend # Mn [2] TIBETAN VOWEL SIGN AA..TIBETAN VOWEL SIGN I +0F74 ; InCB; Extend # Mn TIBETAN VOWEL SIGN U +0F7A..0F7D ; InCB; Extend # Mn [4] TIBETAN VOWEL SIGN E..TIBETAN VOWEL SIGN OO +0F80 ; InCB; Extend # Mn TIBETAN VOWEL SIGN REVERSED I +0F82..0F84 ; InCB; Extend # Mn [3] TIBETAN SIGN NYI ZLA NAA DA..TIBETAN MARK HALANTA +0F86..0F87 ; InCB; Extend # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS +0FC6 ; InCB; Extend # Mn TIBETAN SYMBOL PADMA GDAN +1037 ; InCB; Extend # Mn MYANMAR SIGN DOT BELOW +1039..103A ; InCB; Extend # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT +108D ; InCB; Extend # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE +135D..135F ; InCB; Extend # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK +1714 ; InCB; Extend # Mn TAGALOG SIGN VIRAMA +17D2 ; InCB; Extend # Mn KHMER SIGN COENG +17DD ; InCB; Extend # Mn KHMER SIGN ATTHACAN +18A9 ; InCB; Extend # Mn MONGOLIAN LETTER ALI GALI DAGALGA +1939..193B ; InCB; Extend # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I +1A17..1A18 ; InCB; Extend # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U +1A60 ; InCB; Extend # Mn TAI THAM SIGN SAKOT +1A75..1A7C ; InCB; Extend # Mn [8] TAI THAM SIGN TONE-1..TAI THAM SIGN KHUEN-LUE KARAN +1A7F ; InCB; Extend # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT +1AB0..1ABD ; InCB; Extend # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW +1ABF..1ACE ; InCB; Extend # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T +1B34 ; InCB; Extend # Mn BALINESE SIGN REREKAN +1B6B..1B73 ; InCB; Extend # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG +1BAB ; InCB; Extend # Mn SUNDANESE SIGN VIRAMA +1BE6 ; InCB; Extend # Mn BATAK SIGN TOMPI +1C37 ; InCB; Extend # Mn LEPCHA SIGN NUKTA +1CD0..1CD2 ; InCB; Extend # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA +1CD4..1CE0 ; InCB; Extend # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA +1CE2..1CE8 ; InCB; Extend # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL +1CED ; InCB; Extend # Mn VEDIC SIGN TIRYAK +1CF4 ; InCB; Extend # Mn VEDIC TONE CANDRA ABOVE +1CF8..1CF9 ; InCB; Extend # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE +1DC0..1DFF ; InCB; Extend # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +200D ; InCB; Extend # Cf ZERO WIDTH JOINER +20D0..20DC ; InCB; Extend # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE +20E1 ; InCB; Extend # Mn COMBINING LEFT RIGHT ARROW ABOVE +20E5..20F0 ; InCB; Extend # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE +2CEF..2CF1 ; InCB; Extend # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS +2D7F ; InCB; Extend # Mn TIFINAGH CONSONANT JOINER +2DE0..2DFF ; InCB; Extend # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS +302A..302D ; InCB; Extend # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK +302E..302F ; InCB; Extend # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK +3099..309A ; InCB; Extend # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +A66F ; InCB; Extend # Mn COMBINING CYRILLIC VZMET +A674..A67D ; InCB; Extend # Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK +A69E..A69F ; InCB; Extend # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E +A6F0..A6F1 ; InCB; Extend # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS +A82C ; InCB; Extend # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA +A8E0..A8F1 ; InCB; Extend # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA +A92B..A92D ; InCB; Extend # Mn [3] KAYAH LI TONE PLOPHU..KAYAH LI TONE CALYA PLOPHU +A9B3 ; InCB; Extend # Mn JAVANESE SIGN CECAK TELU +AAB0 ; InCB; Extend # Mn TAI VIET MAI KANG +AAB2..AAB4 ; InCB; Extend # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U +AAB7..AAB8 ; InCB; Extend # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA +AABE..AABF ; InCB; Extend # Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK +AAC1 ; InCB; Extend # Mn TAI VIET TONE MAI THO +AAF6 ; InCB; Extend # Mn MEETEI MAYEK VIRAMA +ABED ; InCB; Extend # Mn MEETEI MAYEK APUN IYEK +FB1E ; InCB; Extend # Mn HEBREW POINT JUDEO-SPANISH VARIKA +FE20..FE2F ; InCB; Extend # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF +101FD ; InCB; Extend # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE +102E0 ; InCB; Extend # Mn COPTIC EPACT THOUSANDS MARK +10376..1037A ; InCB; Extend # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII +10A0D ; InCB; Extend # Mn KHAROSHTHI SIGN DOUBLE RING BELOW +10A0F ; InCB; Extend # Mn KHAROSHTHI SIGN VISARGA +10A38..10A3A ; InCB; Extend # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW +10A3F ; InCB; Extend # Mn KHAROSHTHI VIRAMA +10AE5..10AE6 ; InCB; Extend # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW +10D24..10D27 ; InCB; Extend # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI +10EAB..10EAC ; InCB; Extend # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK +10EFD..10EFF ; InCB; Extend # Mn [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA +10F46..10F50 ; InCB; Extend # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW +10F82..10F85 ; InCB; Extend # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW +11070 ; InCB; Extend # Mn BRAHMI SIGN OLD TAMIL VIRAMA +1107F ; InCB; Extend # Mn BRAHMI NUMBER JOINER +110BA ; InCB; Extend # Mn KAITHI SIGN NUKTA +11100..11102 ; InCB; Extend # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA +11133..11134 ; InCB; Extend # Mn [2] CHAKMA VIRAMA..CHAKMA MAAYYAA +11173 ; InCB; Extend # Mn MAHAJANI SIGN NUKTA +111CA ; InCB; Extend # Mn SHARADA SIGN NUKTA +11236 ; InCB; Extend # Mn KHOJKI SIGN NUKTA +112E9..112EA ; InCB; Extend # Mn [2] KHUDAWADI SIGN NUKTA..KHUDAWADI SIGN VIRAMA +1133B..1133C ; InCB; Extend # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA +11366..1136C ; InCB; Extend # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX +11370..11374 ; InCB; Extend # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA +11446 ; InCB; Extend # Mn NEWA SIGN NUKTA +1145E ; InCB; Extend # Mn NEWA SANDHI MARK +114C3 ; InCB; Extend # Mn TIRHUTA SIGN NUKTA +115C0 ; InCB; Extend # Mn SIDDHAM SIGN NUKTA +116B7 ; InCB; Extend # Mn TAKRI SIGN NUKTA +1172B ; InCB; Extend # Mn AHOM SIGN KILLER +1183A ; InCB; Extend # Mn DOGRA SIGN NUKTA +1193E ; InCB; Extend # Mn DIVES AKURU VIRAMA +11943 ; InCB; Extend # Mn DIVES AKURU SIGN NUKTA +11A34 ; InCB; Extend # Mn ZANABAZAR SQUARE SIGN VIRAMA +11A47 ; InCB; Extend # Mn ZANABAZAR SQUARE SUBJOINER +11A99 ; InCB; Extend # Mn SOYOMBO SUBJOINER +11D42 ; InCB; Extend # Mn MASARAM GONDI SIGN NUKTA +11D44..11D45 ; InCB; Extend # Mn [2] MASARAM GONDI SIGN HALANTA..MASARAM GONDI VIRAMA +11D97 ; InCB; Extend # Mn GUNJALA GONDI VIRAMA +11F42 ; InCB; Extend # Mn KAWI CONJOINER +16AF0..16AF4 ; InCB; Extend # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE +16B30..16B36 ; InCB; Extend # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM +1BC9E ; InCB; Extend # Mn DUPLOYAN DOUBLE MARK +1D165 ; InCB; Extend # Mc MUSICAL SYMBOL COMBINING STEM +1D167..1D169 ; InCB; Extend # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 +1D16E..1D172 ; InCB; Extend # Mc [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5 +1D17B..1D182 ; InCB; Extend # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE +1D185..1D18B ; InCB; Extend # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE +1D1AA..1D1AD ; InCB; Extend # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO +1D242..1D244 ; InCB; Extend # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME +1E000..1E006 ; InCB; Extend # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE +1E008..1E018 ; InCB; Extend # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU +1E01B..1E021 ; InCB; Extend # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI +1E023..1E024 ; InCB; Extend # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS +1E026..1E02A ; InCB; Extend # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA +1E08F ; InCB; Extend # Mn COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +1E130..1E136 ; InCB; Extend # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D +1E2AE ; InCB; Extend # Mn TOTO SIGN RISING TONE +1E2EC..1E2EF ; InCB; Extend # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI +1E4EC..1E4EF ; InCB; Extend # Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH +1E8D0..1E8D6 ; InCB; Extend # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS +1E944..1E94A ; InCB; Extend # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA + +# Total code points: 884 + # EOF diff --git a/contrib/unicode/DerivedNormalizationProps.txt b/contrib/unicode/DerivedNormalizationProps.txt index 5d5ab6160397..7f8edd6e0787 100644 --- a/contrib/unicode/DerivedNormalizationProps.txt +++ b/contrib/unicode/DerivedNormalizationProps.txt @@ -1,6 +1,6 @@ -# DerivedNormalizationProps-15.0.0.txt -# Date: 2022-04-02, 01:29:03 GMT -# © 2022 Unicode®, Inc. +# DerivedNormalizationProps-15.1.0.txt +# Date: 2023-05-02, 13:20:58 GMT +# © 2023 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see https://www.unicode.org/terms_of_use.html # @@ -2907,7 +2907,7 @@ FFE3 ; Expands_On_NFKC # Sk FULLWIDTH MACRON # @missing: 0000..10FFFF; NFKC_CF; # All code points not explicitly listed for NFKC_Casefold -# have the value . +# have the value . 0041 ; NFKC_CF; 0061 # L& LATIN CAPITAL LETTER A 0042 ; NFKC_CF; 0062 # L& LATIN CAPITAL LETTER B @@ -9005,6 +9005,6077 @@ E01F0..E0FFF ; NFKC_CF; # Cn [3600] .. + +# All code points not explicitly listed for NFKC_Simple_Casefold +# have the value . + +0041 ; NFKC_SCF; 0061 # L& LATIN CAPITAL LETTER A +0042 ; NFKC_SCF; 0062 # L& LATIN CAPITAL LETTER B +0043 ; NFKC_SCF; 0063 # L& LATIN CAPITAL LETTER C +0044 ; NFKC_SCF; 0064 # L& LATIN CAPITAL LETTER D +0045 ; NFKC_SCF; 0065 # L& LATIN CAPITAL LETTER E +0046 ; NFKC_SCF; 0066 # L& LATIN CAPITAL LETTER F +0047 ; NFKC_SCF; 0067 # L& LATIN CAPITAL LETTER G +0048 ; NFKC_SCF; 0068 # L& LATIN CAPITAL LETTER H +0049 ; NFKC_SCF; 0069 # L& LATIN CAPITAL LETTER I +004A ; NFKC_SCF; 006A # L& LATIN CAPITAL LETTER J +004B ; NFKC_SCF; 006B # L& LATIN CAPITAL LETTER K +004C ; NFKC_SCF; 006C # L& LATIN CAPITAL LETTER L +004D ; NFKC_SCF; 006D # L& LATIN CAPITAL LETTER M +004E ; NFKC_SCF; 006E # L& LATIN CAPITAL LETTER N +004F ; NFKC_SCF; 006F # L& LATIN CAPITAL LETTER O +0050 ; NFKC_SCF; 0070 # L& LATIN CAPITAL LETTER P +0051 ; NFKC_SCF; 0071 # L& LATIN CAPITAL LETTER Q +0052 ; NFKC_SCF; 0072 # L& LATIN CAPITAL LETTER R +0053 ; NFKC_SCF; 0073 # L& LATIN CAPITAL LETTER S +0054 ; NFKC_SCF; 0074 # L& LATIN CAPITAL LETTER T +0055 ; NFKC_SCF; 0075 # L& LATIN CAPITAL LETTER U +0056 ; NFKC_SCF; 0076 # L& LATIN CAPITAL LETTER V +0057 ; NFKC_SCF; 0077 # L& LATIN CAPITAL LETTER W +0058 ; NFKC_SCF; 0078 # L& LATIN CAPITAL LETTER X +0059 ; NFKC_SCF; 0079 # L& LATIN CAPITAL LETTER Y +005A ; NFKC_SCF; 007A # L& LATIN CAPITAL LETTER Z +00A0 ; NFKC_SCF; 0020 # Zs NO-BREAK SPACE +00A8 ; NFKC_SCF; 0020 0308 # Sk DIAERESIS +00AA ; NFKC_SCF; 0061 # Lo FEMININE ORDINAL INDICATOR +00AD ; NFKC_SCF; # Cf SOFT HYPHEN +00AF ; NFKC_SCF; 0020 0304 # Sk MACRON +00B2 ; NFKC_SCF; 0032 # No SUPERSCRIPT TWO +00B3 ; NFKC_SCF; 0033 # No SUPERSCRIPT THREE +00B4 ; NFKC_SCF; 0020 0301 # Sk ACUTE ACCENT +00B5 ; NFKC_SCF; 03BC # L& MICRO SIGN +00B8 ; NFKC_SCF; 0020 0327 # Sk CEDILLA +00B9 ; NFKC_SCF; 0031 # No SUPERSCRIPT ONE +00BA ; NFKC_SCF; 006F # Lo MASCULINE ORDINAL INDICATOR +00BC ; NFKC_SCF; 0031 2044 0034 # No VULGAR FRACTION ONE QUARTER +00BD ; NFKC_SCF; 0031 2044 0032 # No VULGAR FRACTION ONE HALF +00BE ; NFKC_SCF; 0033 2044 0034 # No VULGAR FRACTION THREE QUARTERS +00C0 ; NFKC_SCF; 00E0 # L& LATIN CAPITAL LETTER A WITH GRAVE +00C1 ; NFKC_SCF; 00E1 # L& LATIN CAPITAL LETTER A WITH ACUTE +00C2 ; NFKC_SCF; 00E2 # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00C3 ; NFKC_SCF; 00E3 # L& LATIN CAPITAL LETTER A WITH TILDE +00C4 ; NFKC_SCF; 00E4 # L& LATIN CAPITAL LETTER A WITH DIAERESIS +00C5 ; NFKC_SCF; 00E5 # L& LATIN CAPITAL LETTER A WITH RING ABOVE +00C6 ; NFKC_SCF; 00E6 # L& LATIN CAPITAL LETTER AE +00C7 ; NFKC_SCF; 00E7 # L& LATIN CAPITAL LETTER C WITH CEDILLA +00C8 ; NFKC_SCF; 00E8 # L& LATIN CAPITAL LETTER E WITH GRAVE +00C9 ; NFKC_SCF; 00E9 # L& LATIN CAPITAL LETTER E WITH ACUTE +00CA ; NFKC_SCF; 00EA # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00CB ; NFKC_SCF; 00EB # L& LATIN CAPITAL LETTER E WITH DIAERESIS +00CC ; NFKC_SCF; 00EC # L& LATIN CAPITAL LETTER I WITH GRAVE +00CD ; NFKC_SCF; 00ED # L& LATIN CAPITAL LETTER I WITH ACUTE +00CE ; NFKC_SCF; 00EE # L& LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00CF ; NFKC_SCF; 00EF # L& LATIN CAPITAL LETTER I WITH DIAERESIS +00D0 ; NFKC_SCF; 00F0 # L& LATIN CAPITAL LETTER ETH +00D1 ; NFKC_SCF; 00F1 # L& LATIN CAPITAL LETTER N WITH TILDE +00D2 ; NFKC_SCF; 00F2 # L& LATIN CAPITAL LETTER O WITH GRAVE +00D3 ; NFKC_SCF; 00F3 # L& LATIN CAPITAL LETTER O WITH ACUTE +00D4 ; NFKC_SCF; 00F4 # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX +00D5 ; NFKC_SCF; 00F5 # L& LATIN CAPITAL LETTER O WITH TILDE +00D6 ; NFKC_SCF; 00F6 # L& LATIN CAPITAL LETTER O WITH DIAERESIS +00D8 ; NFKC_SCF; 00F8 # L& LATIN CAPITAL LETTER O WITH STROKE +00D9 ; NFKC_SCF; 00F9 # L& LATIN CAPITAL LETTER U WITH GRAVE +00DA ; NFKC_SCF; 00FA # L& LATIN CAPITAL LETTER U WITH ACUTE +00DB ; NFKC_SCF; 00FB # L& LATIN CAPITAL LETTER U WITH CIRCUMFLEX +00DC ; NFKC_SCF; 00FC # L& LATIN CAPITAL LETTER U WITH DIAERESIS +00DD ; NFKC_SCF; 00FD # L& LATIN CAPITAL LETTER Y WITH ACUTE +00DE ; NFKC_SCF; 00FE # L& LATIN CAPITAL LETTER THORN +0100 ; NFKC_SCF; 0101 # L& LATIN CAPITAL LETTER A WITH MACRON +0102 ; NFKC_SCF; 0103 # L& LATIN CAPITAL LETTER A WITH BREVE +0104 ; NFKC_SCF; 0105 # L& LATIN CAPITAL LETTER A WITH OGONEK +0106 ; NFKC_SCF; 0107 # L& LATIN CAPITAL LETTER C WITH ACUTE +0108 ; NFKC_SCF; 0109 # L& LATIN CAPITAL LETTER C WITH CIRCUMFLEX +010A ; NFKC_SCF; 010B # L& LATIN CAPITAL LETTER C WITH DOT ABOVE +010C ; NFKC_SCF; 010D # L& LATIN CAPITAL LETTER C WITH CARON +010E ; NFKC_SCF; 010F # L& LATIN CAPITAL LETTER D WITH CARON +0110 ; NFKC_SCF; 0111 # L& LATIN CAPITAL LETTER D WITH STROKE +0112 ; NFKC_SCF; 0113 # L& LATIN CAPITAL LETTER E WITH MACRON +0114 ; NFKC_SCF; 0115 # L& LATIN CAPITAL LETTER E WITH BREVE +0116 ; NFKC_SCF; 0117 # L& LATIN CAPITAL LETTER E WITH DOT ABOVE +0118 ; NFKC_SCF; 0119 # L& LATIN CAPITAL LETTER E WITH OGONEK +011A ; NFKC_SCF; 011B # L& LATIN CAPITAL LETTER E WITH CARON +011C ; NFKC_SCF; 011D # L& LATIN CAPITAL LETTER G WITH CIRCUMFLEX +011E ; NFKC_SCF; 011F # L& LATIN CAPITAL LETTER G WITH BREVE +0120 ; NFKC_SCF; 0121 # L& LATIN CAPITAL LETTER G WITH DOT ABOVE +0122 ; NFKC_SCF; 0123 # L& LATIN CAPITAL LETTER G WITH CEDILLA +0124 ; NFKC_SCF; 0125 # L& LATIN CAPITAL LETTER H WITH CIRCUMFLEX +0126 ; NFKC_SCF; 0127 # L& LATIN CAPITAL LETTER H WITH STROKE +0128 ; NFKC_SCF; 0129 # L& LATIN CAPITAL LETTER I WITH TILDE +012A ; NFKC_SCF; 012B # L& LATIN CAPITAL LETTER I WITH MACRON +012C ; NFKC_SCF; 012D # L& LATIN CAPITAL LETTER I WITH BREVE +012E ; NFKC_SCF; 012F # L& LATIN CAPITAL LETTER I WITH OGONEK +0132..0133 ; NFKC_SCF; 0069 006A # L& [2] LATIN CAPITAL LIGATURE IJ..LATIN SMALL LIGATURE IJ +0134 ; NFKC_SCF; 0135 # L& LATIN CAPITAL LETTER J WITH CIRCUMFLEX +0136 ; NFKC_SCF; 0137 # L& LATIN CAPITAL LETTER K WITH CEDILLA +0139 ; NFKC_SCF; 013A # L& LATIN CAPITAL LETTER L WITH ACUTE +013B ; NFKC_SCF; 013C # L& LATIN CAPITAL LETTER L WITH CEDILLA +013D ; NFKC_SCF; 013E # L& LATIN CAPITAL LETTER L WITH CARON +013F..0140 ; NFKC_SCF; 006C 00B7 # L& [2] LATIN CAPITAL LETTER L WITH MIDDLE DOT..LATIN SMALL LETTER L WITH MIDDLE DOT +0141 ; NFKC_SCF; 0142 # L& LATIN CAPITAL LETTER L WITH STROKE +0143 ; NFKC_SCF; 0144 # L& LATIN CAPITAL LETTER N WITH ACUTE +0145 ; NFKC_SCF; 0146 # L& LATIN CAPITAL LETTER N WITH CEDILLA +0147 ; NFKC_SCF; 0148 # L& LATIN CAPITAL LETTER N WITH CARON +0149 ; NFKC_SCF; 02BC 006E # L& LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +014A ; NFKC_SCF; 014B # L& LATIN CAPITAL LETTER ENG +014C ; NFKC_SCF; 014D # L& LATIN CAPITAL LETTER O WITH MACRON +014E ; NFKC_SCF; 014F # L& LATIN CAPITAL LETTER O WITH BREVE +0150 ; NFKC_SCF; 0151 # L& LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0152 ; NFKC_SCF; 0153 # L& LATIN CAPITAL LIGATURE OE +0154 ; NFKC_SCF; 0155 # L& LATIN CAPITAL LETTER R WITH ACUTE +0156 ; NFKC_SCF; 0157 # L& LATIN CAPITAL LETTER R WITH CEDILLA +0158 ; NFKC_SCF; 0159 # L& LATIN CAPITAL LETTER R WITH CARON +015A ; NFKC_SCF; 015B # L& LATIN CAPITAL LETTER S WITH ACUTE +015C ; NFKC_SCF; 015D # L& LATIN CAPITAL LETTER S WITH CIRCUMFLEX +015E ; NFKC_SCF; 015F # L& LATIN CAPITAL LETTER S WITH CEDILLA +0160 ; NFKC_SCF; 0161 # L& LATIN CAPITAL LETTER S WITH CARON +0162 ; NFKC_SCF; 0163 # L& LATIN CAPITAL LETTER T WITH CEDILLA +0164 ; NFKC_SCF; 0165 # L& LATIN CAPITAL LETTER T WITH CARON +0166 ; NFKC_SCF; 0167 # L& LATIN CAPITAL LETTER T WITH STROKE +0168 ; NFKC_SCF; 0169 # L& LATIN CAPITAL LETTER U WITH TILDE +016A ; NFKC_SCF; 016B # L& LATIN CAPITAL LETTER U WITH MACRON +016C ; NFKC_SCF; 016D # L& LATIN CAPITAL LETTER U WITH BREVE +016E ; NFKC_SCF; 016F # L& LATIN CAPITAL LETTER U WITH RING ABOVE +0170 ; NFKC_SCF; 0171 # L& LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0172 ; NFKC_SCF; 0173 # L& LATIN CAPITAL LETTER U WITH OGONEK +0174 ; NFKC_SCF; 0175 # L& LATIN CAPITAL LETTER W WITH CIRCUMFLEX +0176 ; NFKC_SCF; 0177 # L& LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0178 ; NFKC_SCF; 00FF # L& LATIN CAPITAL LETTER Y WITH DIAERESIS +0179 ; NFKC_SCF; 017A # L& LATIN CAPITAL LETTER Z WITH ACUTE +017B ; NFKC_SCF; 017C # L& LATIN CAPITAL LETTER Z WITH DOT ABOVE +017D ; NFKC_SCF; 017E # L& LATIN CAPITAL LETTER Z WITH CARON +017F ; NFKC_SCF; 0073 # L& LATIN SMALL LETTER LONG S +0181 ; NFKC_SCF; 0253 # L& LATIN CAPITAL LETTER B WITH HOOK +0182 ; NFKC_SCF; 0183 # L& LATIN CAPITAL LETTER B WITH TOPBAR +0184 ; NFKC_SCF; 0185 # L& LATIN CAPITAL LETTER TONE SIX +0186 ; NFKC_SCF; 0254 # L& LATIN CAPITAL LETTER OPEN O +0187 ; NFKC_SCF; 0188 # L& LATIN CAPITAL LETTER C WITH HOOK +0189 ; NFKC_SCF; 0256 # L& LATIN CAPITAL LETTER AFRICAN D +018A ; NFKC_SCF; 0257 # L& LATIN CAPITAL LETTER D WITH HOOK +018B ; NFKC_SCF; 018C # L& LATIN CAPITAL LETTER D WITH TOPBAR +018E ; NFKC_SCF; 01DD # L& LATIN CAPITAL LETTER REVERSED E +018F ; NFKC_SCF; 0259 # L& LATIN CAPITAL LETTER SCHWA +0190 ; NFKC_SCF; 025B # L& LATIN CAPITAL LETTER OPEN E +0191 ; NFKC_SCF; 0192 # L& LATIN CAPITAL LETTER F WITH HOOK +0193 ; NFKC_SCF; 0260 # L& LATIN CAPITAL LETTER G WITH HOOK +0194 ; NFKC_SCF; 0263 # L& LATIN CAPITAL LETTER GAMMA +0196 ; NFKC_SCF; 0269 # L& LATIN CAPITAL LETTER IOTA +0197 ; NFKC_SCF; 0268 # L& LATIN CAPITAL LETTER I WITH STROKE +0198 ; NFKC_SCF; 0199 # L& LATIN CAPITAL LETTER K WITH HOOK +019C ; NFKC_SCF; 026F # L& LATIN CAPITAL LETTER TURNED M +019D ; NFKC_SCF; 0272 # L& LATIN CAPITAL LETTER N WITH LEFT HOOK +019F ; NFKC_SCF; 0275 # L& LATIN CAPITAL LETTER O WITH MIDDLE TILDE +01A0 ; NFKC_SCF; 01A1 # L& LATIN CAPITAL LETTER O WITH HORN +01A2 ; NFKC_SCF; 01A3 # L& LATIN CAPITAL LETTER OI +01A4 ; NFKC_SCF; 01A5 # L& LATIN CAPITAL LETTER P WITH HOOK +01A6 ; NFKC_SCF; 0280 # L& LATIN LETTER YR +01A7 ; NFKC_SCF; 01A8 # L& LATIN CAPITAL LETTER TONE TWO +01A9 ; NFKC_SCF; 0283 # L& LATIN CAPITAL LETTER ESH +01AC ; NFKC_SCF; 01AD # L& LATIN CAPITAL LETTER T WITH HOOK +01AE ; NFKC_SCF; 0288 # L& LATIN CAPITAL LETTER T WITH RETROFLEX HOOK +01AF ; NFKC_SCF; 01B0 # L& LATIN CAPITAL LETTER U WITH HORN +01B1 ; NFKC_SCF; 028A # L& LATIN CAPITAL LETTER UPSILON +01B2 ; NFKC_SCF; 028B # L& LATIN CAPITAL LETTER V WITH HOOK +01B3 ; NFKC_SCF; 01B4 # L& LATIN CAPITAL LETTER Y WITH HOOK +01B5 ; NFKC_SCF; 01B6 # L& LATIN CAPITAL LETTER Z WITH STROKE +01B7 ; NFKC_SCF; 0292 # L& LATIN CAPITAL LETTER EZH +01B8 ; NFKC_SCF; 01B9 # L& LATIN CAPITAL LETTER EZH REVERSED +01BC ; NFKC_SCF; 01BD # L& LATIN CAPITAL LETTER TONE FIVE +01C4..01C6 ; NFKC_SCF; 0064 017E # L& [3] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER DZ WITH CARON +01C7..01C9 ; NFKC_SCF; 006C 006A # L& [3] LATIN CAPITAL LETTER LJ..LATIN SMALL LETTER LJ +01CA..01CC ; NFKC_SCF; 006E 006A # L& [3] LATIN CAPITAL LETTER NJ..LATIN SMALL LETTER NJ +01CD ; NFKC_SCF; 01CE # L& LATIN CAPITAL LETTER A WITH CARON +01CF ; NFKC_SCF; 01D0 # L& LATIN CAPITAL LETTER I WITH CARON +01D1 ; NFKC_SCF; 01D2 # L& LATIN CAPITAL LETTER O WITH CARON +01D3 ; NFKC_SCF; 01D4 # L& LATIN CAPITAL LETTER U WITH CARON +01D5 ; NFKC_SCF; 01D6 # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01D7 ; NFKC_SCF; 01D8 # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D9 ; NFKC_SCF; 01DA # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +01DB ; NFKC_SCF; 01DC # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01DE ; NFKC_SCF; 01DF # L& LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +01E0 ; NFKC_SCF; 01E1 # L& LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON +01E2 ; NFKC_SCF; 01E3 # L& LATIN CAPITAL LETTER AE WITH MACRON +01E4 ; NFKC_SCF; 01E5 # L& LATIN CAPITAL LETTER G WITH STROKE +01E6 ; NFKC_SCF; 01E7 # L& LATIN CAPITAL LETTER G WITH CARON +01E8 ; NFKC_SCF; 01E9 # L& LATIN CAPITAL LETTER K WITH CARON +01EA ; NFKC_SCF; 01EB # L& LATIN CAPITAL LETTER O WITH OGONEK +01EC ; NFKC_SCF; 01ED # L& LATIN CAPITAL LETTER O WITH OGONEK AND MACRON +01EE ; NFKC_SCF; 01EF # L& LATIN CAPITAL LETTER EZH WITH CARON +01F1..01F3 ; NFKC_SCF; 0064 007A # L& [3] LATIN CAPITAL LETTER DZ..LATIN SMALL LETTER DZ +01F4 ; NFKC_SCF; 01F5 # L& LATIN CAPITAL LETTER G WITH ACUTE +01F6 ; NFKC_SCF; 0195 # L& LATIN CAPITAL LETTER HWAIR +01F7 ; NFKC_SCF; 01BF # L& LATIN CAPITAL LETTER WYNN +01F8 ; NFKC_SCF; 01F9 # L& LATIN CAPITAL LETTER N WITH GRAVE +01FA ; NFKC_SCF; 01FB # L& LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +01FC ; NFKC_SCF; 01FD # L& LATIN CAPITAL LETTER AE WITH ACUTE +01FE ; NFKC_SCF; 01FF # L& LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +0200 ; NFKC_SCF; 0201 # L& LATIN CAPITAL LETTER A WITH DOUBLE GRAVE +0202 ; NFKC_SCF; 0203 # L& LATIN CAPITAL LETTER A WITH INVERTED BREVE +0204 ; NFKC_SCF; 0205 # L& LATIN CAPITAL LETTER E WITH DOUBLE GRAVE +0206 ; NFKC_SCF; 0207 # L& LATIN CAPITAL LETTER E WITH INVERTED BREVE +0208 ; NFKC_SCF; 0209 # L& LATIN CAPITAL LETTER I WITH DOUBLE GRAVE +020A ; NFKC_SCF; 020B # L& LATIN CAPITAL LETTER I WITH INVERTED BREVE +020C ; NFKC_SCF; 020D # L& LATIN CAPITAL LETTER O WITH DOUBLE GRAVE +020E ; NFKC_SCF; 020F # L& LATIN CAPITAL LETTER O WITH INVERTED BREVE +0210 ; NFKC_SCF; 0211 # L& LATIN CAPITAL LETTER R WITH DOUBLE GRAVE +0212 ; NFKC_SCF; 0213 # L& LATIN CAPITAL LETTER R WITH INVERTED BREVE +0214 ; NFKC_SCF; 0215 # L& LATIN CAPITAL LETTER U WITH DOUBLE GRAVE +0216 ; NFKC_SCF; 0217 # L& LATIN CAPITAL LETTER U WITH INVERTED BREVE +0218 ; NFKC_SCF; 0219 # L& LATIN CAPITAL LETTER S WITH COMMA BELOW +021A ; NFKC_SCF; 021B # L& LATIN CAPITAL LETTER T WITH COMMA BELOW +021C ; NFKC_SCF; 021D # L& LATIN CAPITAL LETTER YOGH +021E ; NFKC_SCF; 021F # L& LATIN CAPITAL LETTER H WITH CARON +0220 ; NFKC_SCF; 019E # L& LATIN CAPITAL LETTER N WITH LONG RIGHT LEG +0222 ; NFKC_SCF; 0223 # L& LATIN CAPITAL LETTER OU +0224 ; NFKC_SCF; 0225 # L& LATIN CAPITAL LETTER Z WITH HOOK +0226 ; NFKC_SCF; 0227 # L& LATIN CAPITAL LETTER A WITH DOT ABOVE +0228 ; NFKC_SCF; 0229 # L& LATIN CAPITAL LETTER E WITH CEDILLA +022A ; NFKC_SCF; 022B # L& LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +022C ; NFKC_SCF; 022D # L& LATIN CAPITAL LETTER O WITH TILDE AND MACRON +022E ; NFKC_SCF; 022F # L& LATIN CAPITAL LETTER O WITH DOT ABOVE +0230 ; NFKC_SCF; 0231 # L& LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON +0232 ; NFKC_SCF; 0233 # L& LATIN CAPITAL LETTER Y WITH MACRON +023A ; NFKC_SCF; 2C65 # L& LATIN CAPITAL LETTER A WITH STROKE +023B ; NFKC_SCF; 023C # L& LATIN CAPITAL LETTER C WITH STROKE +023D ; NFKC_SCF; 019A # L& LATIN CAPITAL LETTER L WITH BAR +023E ; NFKC_SCF; 2C66 # L& LATIN CAPITAL LETTER T WITH DIAGONAL STROKE +0241 ; NFKC_SCF; 0242 # L& LATIN CAPITAL LETTER GLOTTAL STOP +0243 ; NFKC_SCF; 0180 # L& LATIN CAPITAL LETTER B WITH STROKE +0244 ; NFKC_SCF; 0289 # L& LATIN CAPITAL LETTER U BAR +0245 ; NFKC_SCF; 028C # L& LATIN CAPITAL LETTER TURNED V +0246 ; NFKC_SCF; 0247 # L& LATIN CAPITAL LETTER E WITH STROKE +0248 ; NFKC_SCF; 0249 # L& LATIN CAPITAL LETTER J WITH STROKE +024A ; NFKC_SCF; 024B # L& LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL +024C ; NFKC_SCF; 024D # L& LATIN CAPITAL LETTER R WITH STROKE +024E ; NFKC_SCF; 024F # L& LATIN CAPITAL LETTER Y WITH STROKE +02B0 ; NFKC_SCF; 0068 # Lm MODIFIER LETTER SMALL H +02B1 ; NFKC_SCF; 0266 # Lm MODIFIER LETTER SMALL H WITH HOOK +02B2 ; NFKC_SCF; 006A # Lm MODIFIER LETTER SMALL J +02B3 ; NFKC_SCF; 0072 # Lm MODIFIER LETTER SMALL R +02B4 ; NFKC_SCF; 0279 # Lm MODIFIER LETTER SMALL TURNED R +02B5 ; NFKC_SCF; 027B # Lm MODIFIER LETTER SMALL TURNED R WITH HOOK +02B6 ; NFKC_SCF; 0281 # Lm MODIFIER LETTER SMALL CAPITAL INVERTED R +02B7 ; NFKC_SCF; 0077 # Lm MODIFIER LETTER SMALL W +02B8 ; NFKC_SCF; 0079 # Lm MODIFIER LETTER SMALL Y +02D8 ; NFKC_SCF; 0020 0306 # Sk BREVE +02D9 ; NFKC_SCF; 0020 0307 # Sk DOT ABOVE +02DA ; NFKC_SCF; 0020 030A # Sk RING ABOVE +02DB ; NFKC_SCF; 0020 0328 # Sk OGONEK +02DC ; NFKC_SCF; 0020 0303 # Sk SMALL TILDE +02DD ; NFKC_SCF; 0020 030B # Sk DOUBLE ACUTE ACCENT +02E0 ; NFKC_SCF; 0263 # Lm MODIFIER LETTER SMALL GAMMA +02E1 ; NFKC_SCF; 006C # Lm MODIFIER LETTER SMALL L +02E2 ; NFKC_SCF; 0073 # Lm MODIFIER LETTER SMALL S +02E3 ; NFKC_SCF; 0078 # Lm MODIFIER LETTER SMALL X +02E4 ; NFKC_SCF; 0295 # Lm MODIFIER LETTER SMALL REVERSED GLOTTAL STOP +0340 ; NFKC_SCF; 0300 # Mn COMBINING GRAVE TONE MARK +0341 ; NFKC_SCF; 0301 # Mn COMBINING ACUTE TONE MARK +0343 ; NFKC_SCF; 0313 # Mn COMBINING GREEK KORONIS +0344 ; NFKC_SCF; 0308 0301 # Mn COMBINING GREEK DIALYTIKA TONOS +0345 ; NFKC_SCF; 03B9 # Mn COMBINING GREEK YPOGEGRAMMENI +034F ; NFKC_SCF; # Mn COMBINING GRAPHEME JOINER +0370 ; NFKC_SCF; 0371 # L& GREEK CAPITAL LETTER HETA +0372 ; NFKC_SCF; 0373 # L& GREEK CAPITAL LETTER ARCHAIC SAMPI +0374 ; NFKC_SCF; 02B9 # Lm GREEK NUMERAL SIGN +0376 ; NFKC_SCF; 0377 # L& GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA +037A ; NFKC_SCF; 0020 03B9 # Lm GREEK YPOGEGRAMMENI +037E ; NFKC_SCF; 003B # Po GREEK QUESTION MARK +037F ; NFKC_SCF; 03F3 # L& GREEK CAPITAL LETTER YOT +0384 ; NFKC_SCF; 0020 0301 # Sk GREEK TONOS +0385 ; NFKC_SCF; 0020 0308 0301 # Sk GREEK DIALYTIKA TONOS +0386 ; NFKC_SCF; 03AC # L& GREEK CAPITAL LETTER ALPHA WITH TONOS +0387 ; NFKC_SCF; 00B7 # Po GREEK ANO TELEIA +0388 ; NFKC_SCF; 03AD # L& GREEK CAPITAL LETTER EPSILON WITH TONOS +0389 ; NFKC_SCF; 03AE # L& GREEK CAPITAL LETTER ETA WITH TONOS +038A ; NFKC_SCF; 03AF # L& GREEK CAPITAL LETTER IOTA WITH TONOS +038C ; NFKC_SCF; 03CC # L& GREEK CAPITAL LETTER OMICRON WITH TONOS +038E ; NFKC_SCF; 03CD # L& GREEK CAPITAL LETTER UPSILON WITH TONOS +038F ; NFKC_SCF; 03CE # L& GREEK CAPITAL LETTER OMEGA WITH TONOS +0391 ; NFKC_SCF; 03B1 # L& GREEK CAPITAL LETTER ALPHA +0392 ; NFKC_SCF; 03B2 # L& GREEK CAPITAL LETTER BETA +0393 ; NFKC_SCF; 03B3 # L& GREEK CAPITAL LETTER GAMMA +0394 ; NFKC_SCF; 03B4 # L& GREEK CAPITAL LETTER DELTA +0395 ; NFKC_SCF; 03B5 # L& GREEK CAPITAL LETTER EPSILON +0396 ; NFKC_SCF; 03B6 # L& GREEK CAPITAL LETTER ZETA +0397 ; NFKC_SCF; 03B7 # L& GREEK CAPITAL LETTER ETA +0398 ; NFKC_SCF; 03B8 # L& GREEK CAPITAL LETTER THETA +0399 ; NFKC_SCF; 03B9 # L& GREEK CAPITAL LETTER IOTA +039A ; NFKC_SCF; 03BA # L& GREEK CAPITAL LETTER KAPPA +039B ; NFKC_SCF; 03BB # L& GREEK CAPITAL LETTER LAMDA +039C ; NFKC_SCF; 03BC # L& GREEK CAPITAL LETTER MU +039D ; NFKC_SCF; 03BD # L& GREEK CAPITAL LETTER NU +039E ; NFKC_SCF; 03BE # L& GREEK CAPITAL LETTER XI +039F ; NFKC_SCF; 03BF # L& GREEK CAPITAL LETTER OMICRON +03A0 ; NFKC_SCF; 03C0 # L& GREEK CAPITAL LETTER PI +03A1 ; NFKC_SCF; 03C1 # L& GREEK CAPITAL LETTER RHO +03A3 ; NFKC_SCF; 03C3 # L& GREEK CAPITAL LETTER SIGMA +03A4 ; NFKC_SCF; 03C4 # L& GREEK CAPITAL LETTER TAU +03A5 ; NFKC_SCF; 03C5 # L& GREEK CAPITAL LETTER UPSILON +03A6 ; NFKC_SCF; 03C6 # L& GREEK CAPITAL LETTER PHI +03A7 ; NFKC_SCF; 03C7 # L& GREEK CAPITAL LETTER CHI +03A8 ; NFKC_SCF; 03C8 # L& GREEK CAPITAL LETTER PSI +03A9 ; NFKC_SCF; 03C9 # L& GREEK CAPITAL LETTER OMEGA +03AA ; NFKC_SCF; 03CA # L& GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +03AB ; NFKC_SCF; 03CB # L& GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +03C2 ; NFKC_SCF; 03C3 # L& GREEK SMALL LETTER FINAL SIGMA +03CF ; NFKC_SCF; 03D7 # L& GREEK CAPITAL KAI SYMBOL +03D0 ; NFKC_SCF; 03B2 # L& GREEK BETA SYMBOL +03D1 ; NFKC_SCF; 03B8 # L& GREEK THETA SYMBOL +03D2 ; NFKC_SCF; 03C5 # L& GREEK UPSILON WITH HOOK SYMBOL +03D3 ; NFKC_SCF; 03CD # L& GREEK UPSILON WITH ACUTE AND HOOK SYMBOL +03D4 ; NFKC_SCF; 03CB # L& GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL +03D5 ; NFKC_SCF; 03C6 # L& GREEK PHI SYMBOL +03D6 ; NFKC_SCF; 03C0 # L& GREEK PI SYMBOL +03D8 ; NFKC_SCF; 03D9 # L& GREEK LETTER ARCHAIC KOPPA +03DA ; NFKC_SCF; 03DB # L& GREEK LETTER STIGMA +03DC ; NFKC_SCF; 03DD # L& GREEK LETTER DIGAMMA +03DE ; NFKC_SCF; 03DF # L& GREEK LETTER KOPPA +03E0 ; NFKC_SCF; 03E1 # L& GREEK LETTER SAMPI +03E2 ; NFKC_SCF; 03E3 # L& COPTIC CAPITAL LETTER SHEI +03E4 ; NFKC_SCF; 03E5 # L& COPTIC CAPITAL LETTER FEI +03E6 ; NFKC_SCF; 03E7 # L& COPTIC CAPITAL LETTER KHEI +03E8 ; NFKC_SCF; 03E9 # L& COPTIC CAPITAL LETTER HORI +03EA ; NFKC_SCF; 03EB # L& COPTIC CAPITAL LETTER GANGIA +03EC ; NFKC_SCF; 03ED # L& COPTIC CAPITAL LETTER SHIMA +03EE ; NFKC_SCF; 03EF # L& COPTIC CAPITAL LETTER DEI +03F0 ; NFKC_SCF; 03BA # L& GREEK KAPPA SYMBOL +03F1 ; NFKC_SCF; 03C1 # L& GREEK RHO SYMBOL +03F2 ; NFKC_SCF; 03C3 # L& GREEK LUNATE SIGMA SYMBOL +03F4 ; NFKC_SCF; 03B8 # L& GREEK CAPITAL THETA SYMBOL +03F5 ; NFKC_SCF; 03B5 # L& GREEK LUNATE EPSILON SYMBOL +03F7 ; NFKC_SCF; 03F8 # L& GREEK CAPITAL LETTER SHO +03F9 ; NFKC_SCF; 03C3 # L& GREEK CAPITAL LUNATE SIGMA SYMBOL +03FA ; NFKC_SCF; 03FB # L& GREEK CAPITAL LETTER SAN +03FD ; NFKC_SCF; 037B # L& GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL +03FE ; NFKC_SCF; 037C # L& GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL +03FF ; NFKC_SCF; 037D # L& GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL +0400 ; NFKC_SCF; 0450 # L& CYRILLIC CAPITAL LETTER IE WITH GRAVE +0401 ; NFKC_SCF; 0451 # L& CYRILLIC CAPITAL LETTER IO +0402 ; NFKC_SCF; 0452 # L& CYRILLIC CAPITAL LETTER DJE +0403 ; NFKC_SCF; 0453 # L& CYRILLIC CAPITAL LETTER GJE +0404 ; NFKC_SCF; 0454 # L& CYRILLIC CAPITAL LETTER UKRAINIAN IE +0405 ; NFKC_SCF; 0455 # L& CYRILLIC CAPITAL LETTER DZE +0406 ; NFKC_SCF; 0456 # L& CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +0407 ; NFKC_SCF; 0457 # L& CYRILLIC CAPITAL LETTER YI +0408 ; NFKC_SCF; 0458 # L& CYRILLIC CAPITAL LETTER JE +0409 ; NFKC_SCF; 0459 # L& CYRILLIC CAPITAL LETTER LJE +040A ; NFKC_SCF; 045A # L& CYRILLIC CAPITAL LETTER NJE +040B ; NFKC_SCF; 045B # L& CYRILLIC CAPITAL LETTER TSHE +040C ; NFKC_SCF; 045C # L& CYRILLIC CAPITAL LETTER KJE +040D ; NFKC_SCF; 045D # L& CYRILLIC CAPITAL LETTER I WITH GRAVE +040E ; NFKC_SCF; 045E # L& CYRILLIC CAPITAL LETTER SHORT U +040F ; NFKC_SCF; 045F # L& CYRILLIC CAPITAL LETTER DZHE +0410 ; NFKC_SCF; 0430 # L& CYRILLIC CAPITAL LETTER A +0411 ; NFKC_SCF; 0431 # L& CYRILLIC CAPITAL LETTER BE +0412 ; NFKC_SCF; 0432 # L& CYRILLIC CAPITAL LETTER VE +0413 ; NFKC_SCF; 0433 # L& CYRILLIC CAPITAL LETTER GHE +0414 ; NFKC_SCF; 0434 # L& CYRILLIC CAPITAL LETTER DE +0415 ; NFKC_SCF; 0435 # L& CYRILLIC CAPITAL LETTER IE +0416 ; NFKC_SCF; 0436 # L& CYRILLIC CAPITAL LETTER ZHE +0417 ; NFKC_SCF; 0437 # L& CYRILLIC CAPITAL LETTER ZE +0418 ; NFKC_SCF; 0438 # L& CYRILLIC CAPITAL LETTER I +0419 ; NFKC_SCF; 0439 # L& CYRILLIC CAPITAL LETTER SHORT I +041A ; NFKC_SCF; 043A # L& CYRILLIC CAPITAL LETTER KA +041B ; NFKC_SCF; 043B # L& CYRILLIC CAPITAL LETTER EL +041C ; NFKC_SCF; 043C # L& CYRILLIC CAPITAL LETTER EM +041D ; NFKC_SCF; 043D # L& CYRILLIC CAPITAL LETTER EN +041E ; NFKC_SCF; 043E # L& CYRILLIC CAPITAL LETTER O +041F ; NFKC_SCF; 043F # L& CYRILLIC CAPITAL LETTER PE +0420 ; NFKC_SCF; 0440 # L& CYRILLIC CAPITAL LETTER ER +0421 ; NFKC_SCF; 0441 # L& CYRILLIC CAPITAL LETTER ES +0422 ; NFKC_SCF; 0442 # L& CYRILLIC CAPITAL LETTER TE +0423 ; NFKC_SCF; 0443 # L& CYRILLIC CAPITAL LETTER U +0424 ; NFKC_SCF; 0444 # L& CYRILLIC CAPITAL LETTER EF +0425 ; NFKC_SCF; 0445 # L& CYRILLIC CAPITAL LETTER HA +0426 ; NFKC_SCF; 0446 # L& CYRILLIC CAPITAL LETTER TSE +0427 ; NFKC_SCF; 0447 # L& CYRILLIC CAPITAL LETTER CHE +0428 ; NFKC_SCF; 0448 # L& CYRILLIC CAPITAL LETTER SHA +0429 ; NFKC_SCF; 0449 # L& CYRILLIC CAPITAL LETTER SHCHA +042A ; NFKC_SCF; 044A # L& CYRILLIC CAPITAL LETTER HARD SIGN +042B ; NFKC_SCF; 044B # L& CYRILLIC CAPITAL LETTER YERU +042C ; NFKC_SCF; 044C # L& CYRILLIC CAPITAL LETTER SOFT SIGN +042D ; NFKC_SCF; 044D # L& CYRILLIC CAPITAL LETTER E +042E ; NFKC_SCF; 044E # L& CYRILLIC CAPITAL LETTER YU +042F ; NFKC_SCF; 044F # L& CYRILLIC CAPITAL LETTER YA +0460 ; NFKC_SCF; 0461 # L& CYRILLIC CAPITAL LETTER OMEGA +0462 ; NFKC_SCF; 0463 # L& CYRILLIC CAPITAL LETTER YAT +0464 ; NFKC_SCF; 0465 # L& CYRILLIC CAPITAL LETTER IOTIFIED E +0466 ; NFKC_SCF; 0467 # L& CYRILLIC CAPITAL LETTER LITTLE YUS +0468 ; NFKC_SCF; 0469 # L& CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS +046A ; NFKC_SCF; 046B # L& CYRILLIC CAPITAL LETTER BIG YUS +046C ; NFKC_SCF; 046D # L& CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS +046E ; NFKC_SCF; 046F # L& CYRILLIC CAPITAL LETTER KSI +0470 ; NFKC_SCF; 0471 # L& CYRILLIC CAPITAL LETTER PSI +0472 ; NFKC_SCF; 0473 # L& CYRILLIC CAPITAL LETTER FITA +0474 ; NFKC_SCF; 0475 # L& CYRILLIC CAPITAL LETTER IZHITSA +0476 ; NFKC_SCF; 0477 # L& CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +0478 ; NFKC_SCF; 0479 # L& CYRILLIC CAPITAL LETTER UK +047A ; NFKC_SCF; 047B # L& CYRILLIC CAPITAL LETTER ROUND OMEGA +047C ; NFKC_SCF; 047D # L& CYRILLIC CAPITAL LETTER OMEGA WITH TITLO +047E ; NFKC_SCF; 047F # L& CYRILLIC CAPITAL LETTER OT +0480 ; NFKC_SCF; 0481 # L& CYRILLIC CAPITAL LETTER KOPPA +048A ; NFKC_SCF; 048B # L& CYRILLIC CAPITAL LETTER SHORT I WITH TAIL +048C ; NFKC_SCF; 048D # L& CYRILLIC CAPITAL LETTER SEMISOFT SIGN +048E ; NFKC_SCF; 048F # L& CYRILLIC CAPITAL LETTER ER WITH TICK +0490 ; NFKC_SCF; 0491 # L& CYRILLIC CAPITAL LETTER GHE WITH UPTURN +0492 ; NFKC_SCF; 0493 # L& CYRILLIC CAPITAL LETTER GHE WITH STROKE +0494 ; NFKC_SCF; 0495 # L& CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK +0496 ; NFKC_SCF; 0497 # L& CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER +0498 ; NFKC_SCF; 0499 # L& CYRILLIC CAPITAL LETTER ZE WITH DESCENDER +049A ; NFKC_SCF; 049B # L& CYRILLIC CAPITAL LETTER KA WITH DESCENDER +049C ; NFKC_SCF; 049D # L& CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE +049E ; NFKC_SCF; 049F # L& CYRILLIC CAPITAL LETTER KA WITH STROKE +04A0 ; NFKC_SCF; 04A1 # L& CYRILLIC CAPITAL LETTER BASHKIR KA +04A2 ; NFKC_SCF; 04A3 # L& CYRILLIC CAPITAL LETTER EN WITH DESCENDER +04A4 ; NFKC_SCF; 04A5 # L& CYRILLIC CAPITAL LIGATURE EN GHE +04A6 ; NFKC_SCF; 04A7 # L& CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK +04A8 ; NFKC_SCF; 04A9 # L& CYRILLIC CAPITAL LETTER ABKHASIAN HA +04AA ; NFKC_SCF; 04AB # L& CYRILLIC CAPITAL LETTER ES WITH DESCENDER +04AC ; NFKC_SCF; 04AD # L& CYRILLIC CAPITAL LETTER TE WITH DESCENDER +04AE ; NFKC_SCF; 04AF # L& CYRILLIC CAPITAL LETTER STRAIGHT U +04B0 ; NFKC_SCF; 04B1 # L& CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE +04B2 ; NFKC_SCF; 04B3 # L& CYRILLIC CAPITAL LETTER HA WITH DESCENDER +04B4 ; NFKC_SCF; 04B5 # L& CYRILLIC CAPITAL LIGATURE TE TSE +04B6 ; NFKC_SCF; 04B7 # L& CYRILLIC CAPITAL LETTER CHE WITH DESCENDER +04B8 ; NFKC_SCF; 04B9 # L& CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE +04BA ; NFKC_SCF; 04BB # L& CYRILLIC CAPITAL LETTER SHHA +04BC ; NFKC_SCF; 04BD # L& CYRILLIC CAPITAL LETTER ABKHASIAN CHE +04BE ; NFKC_SCF; 04BF # L& CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER +04C0 ; NFKC_SCF; 04CF # L& CYRILLIC LETTER PALOCHKA +04C1 ; NFKC_SCF; 04C2 # L& CYRILLIC CAPITAL LETTER ZHE WITH BREVE +04C3 ; NFKC_SCF; 04C4 # L& CYRILLIC CAPITAL LETTER KA WITH HOOK +04C5 ; NFKC_SCF; 04C6 # L& CYRILLIC CAPITAL LETTER EL WITH TAIL +04C7 ; NFKC_SCF; 04C8 # L& CYRILLIC CAPITAL LETTER EN WITH HOOK +04C9 ; NFKC_SCF; 04CA # L& CYRILLIC CAPITAL LETTER EN WITH TAIL +04CB ; NFKC_SCF; 04CC # L& CYRILLIC CAPITAL LETTER KHAKASSIAN CHE +04CD ; NFKC_SCF; 04CE # L& CYRILLIC CAPITAL LETTER EM WITH TAIL +04D0 ; NFKC_SCF; 04D1 # L& CYRILLIC CAPITAL LETTER A WITH BREVE +04D2 ; NFKC_SCF; 04D3 # L& CYRILLIC CAPITAL LETTER A WITH DIAERESIS +04D4 ; NFKC_SCF; 04D5 # L& CYRILLIC CAPITAL LIGATURE A IE +04D6 ; NFKC_SCF; 04D7 # L& CYRILLIC CAPITAL LETTER IE WITH BREVE +04D8 ; NFKC_SCF; 04D9 # L& CYRILLIC CAPITAL LETTER SCHWA +04DA ; NFKC_SCF; 04DB # L& CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS +04DC ; NFKC_SCF; 04DD # L& CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS +04DE ; NFKC_SCF; 04DF # L& CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS +04E0 ; NFKC_SCF; 04E1 # L& CYRILLIC CAPITAL LETTER ABKHASIAN DZE +04E2 ; NFKC_SCF; 04E3 # L& CYRILLIC CAPITAL LETTER I WITH MACRON +04E4 ; NFKC_SCF; 04E5 # L& CYRILLIC CAPITAL LETTER I WITH DIAERESIS +04E6 ; NFKC_SCF; 04E7 # L& CYRILLIC CAPITAL LETTER O WITH DIAERESIS +04E8 ; NFKC_SCF; 04E9 # L& CYRILLIC CAPITAL LETTER BARRED O +04EA ; NFKC_SCF; 04EB # L& CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS +04EC ; NFKC_SCF; 04ED # L& CYRILLIC CAPITAL LETTER E WITH DIAERESIS +04EE ; NFKC_SCF; 04EF # L& CYRILLIC CAPITAL LETTER U WITH MACRON +04F0 ; NFKC_SCF; 04F1 # L& CYRILLIC CAPITAL LETTER U WITH DIAERESIS +04F2 ; NFKC_SCF; 04F3 # L& CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE +04F4 ; NFKC_SCF; 04F5 # L& CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS +04F6 ; NFKC_SCF; 04F7 # L& CYRILLIC CAPITAL LETTER GHE WITH DESCENDER +04F8 ; NFKC_SCF; 04F9 # L& CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS +04FA ; NFKC_SCF; 04FB # L& CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK +04FC ; NFKC_SCF; 04FD # L& CYRILLIC CAPITAL LETTER HA WITH HOOK +04FE ; NFKC_SCF; 04FF # L& CYRILLIC CAPITAL LETTER HA WITH STROKE +0500 ; NFKC_SCF; 0501 # L& CYRILLIC CAPITAL LETTER KOMI DE +0502 ; NFKC_SCF; 0503 # L& CYRILLIC CAPITAL LETTER KOMI DJE +0504 ; NFKC_SCF; 0505 # L& CYRILLIC CAPITAL LETTER KOMI ZJE +0506 ; NFKC_SCF; 0507 # L& CYRILLIC CAPITAL LETTER KOMI DZJE +0508 ; NFKC_SCF; 0509 # L& CYRILLIC CAPITAL LETTER KOMI LJE +050A ; NFKC_SCF; 050B # L& CYRILLIC CAPITAL LETTER KOMI NJE +050C ; NFKC_SCF; 050D # L& CYRILLIC CAPITAL LETTER KOMI SJE +050E ; NFKC_SCF; 050F # L& CYRILLIC CAPITAL LETTER KOMI TJE +0510 ; NFKC_SCF; 0511 # L& CYRILLIC CAPITAL LETTER REVERSED ZE +0512 ; NFKC_SCF; 0513 # L& CYRILLIC CAPITAL LETTER EL WITH HOOK +0514 ; NFKC_SCF; 0515 # L& CYRILLIC CAPITAL LETTER LHA +0516 ; NFKC_SCF; 0517 # L& CYRILLIC CAPITAL LETTER RHA +0518 ; NFKC_SCF; 0519 # L& CYRILLIC CAPITAL LETTER YAE +051A ; NFKC_SCF; 051B # L& CYRILLIC CAPITAL LETTER QA +051C ; NFKC_SCF; 051D # L& CYRILLIC CAPITAL LETTER WE +051E ; NFKC_SCF; 051F # L& CYRILLIC CAPITAL LETTER ALEUT KA +0520 ; NFKC_SCF; 0521 # L& CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK +0522 ; NFKC_SCF; 0523 # L& CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK +0524 ; NFKC_SCF; 0525 # L& CYRILLIC CAPITAL LETTER PE WITH DESCENDER +0526 ; NFKC_SCF; 0527 # L& CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER +0528 ; NFKC_SCF; 0529 # L& CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK +052A ; NFKC_SCF; 052B # L& CYRILLIC CAPITAL LETTER DZZHE +052C ; NFKC_SCF; 052D # L& CYRILLIC CAPITAL LETTER DCHE +052E ; NFKC_SCF; 052F # L& CYRILLIC CAPITAL LETTER EL WITH DESCENDER +0531 ; NFKC_SCF; 0561 # L& ARMENIAN CAPITAL LETTER AYB +0532 ; NFKC_SCF; 0562 # L& ARMENIAN CAPITAL LETTER BEN +0533 ; NFKC_SCF; 0563 # L& ARMENIAN CAPITAL LETTER GIM +0534 ; NFKC_SCF; 0564 # L& ARMENIAN CAPITAL LETTER DA +0535 ; NFKC_SCF; 0565 # L& ARMENIAN CAPITAL LETTER ECH +0536 ; NFKC_SCF; 0566 # L& ARMENIAN CAPITAL LETTER ZA +0537 ; NFKC_SCF; 0567 # L& ARMENIAN CAPITAL LETTER EH +0538 ; NFKC_SCF; 0568 # L& ARMENIAN CAPITAL LETTER ET +0539 ; NFKC_SCF; 0569 # L& ARMENIAN CAPITAL LETTER TO +053A ; NFKC_SCF; 056A # L& ARMENIAN CAPITAL LETTER ZHE +053B ; NFKC_SCF; 056B # L& ARMENIAN CAPITAL LETTER INI +053C ; NFKC_SCF; 056C # L& ARMENIAN CAPITAL LETTER LIWN +053D ; NFKC_SCF; 056D # L& ARMENIAN CAPITAL LETTER XEH +053E ; NFKC_SCF; 056E # L& ARMENIAN CAPITAL LETTER CA +053F ; NFKC_SCF; 056F # L& ARMENIAN CAPITAL LETTER KEN +0540 ; NFKC_SCF; 0570 # L& ARMENIAN CAPITAL LETTER HO +0541 ; NFKC_SCF; 0571 # L& ARMENIAN CAPITAL LETTER JA +0542 ; NFKC_SCF; 0572 # L& ARMENIAN CAPITAL LETTER GHAD +0543 ; NFKC_SCF; 0573 # L& ARMENIAN CAPITAL LETTER CHEH +0544 ; NFKC_SCF; 0574 # L& ARMENIAN CAPITAL LETTER MEN +0545 ; NFKC_SCF; 0575 # L& ARMENIAN CAPITAL LETTER YI +0546 ; NFKC_SCF; 0576 # L& ARMENIAN CAPITAL LETTER NOW +0547 ; NFKC_SCF; 0577 # L& ARMENIAN CAPITAL LETTER SHA +0548 ; NFKC_SCF; 0578 # L& ARMENIAN CAPITAL LETTER VO +0549 ; NFKC_SCF; 0579 # L& ARMENIAN CAPITAL LETTER CHA +054A ; NFKC_SCF; 057A # L& ARMENIAN CAPITAL LETTER PEH +054B ; NFKC_SCF; 057B # L& ARMENIAN CAPITAL LETTER JHEH +054C ; NFKC_SCF; 057C # L& ARMENIAN CAPITAL LETTER RA +054D ; NFKC_SCF; 057D # L& ARMENIAN CAPITAL LETTER SEH +054E ; NFKC_SCF; 057E # L& ARMENIAN CAPITAL LETTER VEW +054F ; NFKC_SCF; 057F # L& ARMENIAN CAPITAL LETTER TIWN +0550 ; NFKC_SCF; 0580 # L& ARMENIAN CAPITAL LETTER REH +0551 ; NFKC_SCF; 0581 # L& ARMENIAN CAPITAL LETTER CO +0552 ; NFKC_SCF; 0582 # L& ARMENIAN CAPITAL LETTER YIWN +0553 ; NFKC_SCF; 0583 # L& ARMENIAN CAPITAL LETTER PIWR +0554 ; NFKC_SCF; 0584 # L& ARMENIAN CAPITAL LETTER KEH +0555 ; NFKC_SCF; 0585 # L& ARMENIAN CAPITAL LETTER OH +0556 ; NFKC_SCF; 0586 # L& ARMENIAN CAPITAL LETTER FEH +0587 ; NFKC_SCF; 0565 0582 # L& ARMENIAN SMALL LIGATURE ECH YIWN +061C ; NFKC_SCF; # Cf ARABIC LETTER MARK +0675 ; NFKC_SCF; 0627 0674 # Lo ARABIC LETTER HIGH HAMZA ALEF +0676 ; NFKC_SCF; 0648 0674 # Lo ARABIC LETTER HIGH HAMZA WAW +0677 ; NFKC_SCF; 06C7 0674 # Lo ARABIC LETTER U WITH HAMZA ABOVE +0678 ; NFKC_SCF; 064A 0674 # Lo ARABIC LETTER HIGH HAMZA YEH +0958 ; NFKC_SCF; 0915 093C # Lo DEVANAGARI LETTER QA +0959 ; NFKC_SCF; 0916 093C # Lo DEVANAGARI LETTER KHHA +095A ; NFKC_SCF; 0917 093C # Lo DEVANAGARI LETTER GHHA +095B ; NFKC_SCF; 091C 093C # Lo DEVANAGARI LETTER ZA +095C ; NFKC_SCF; 0921 093C # Lo DEVANAGARI LETTER DDDHA +095D ; NFKC_SCF; 0922 093C # Lo DEVANAGARI LETTER RHA +095E ; NFKC_SCF; 092B 093C # Lo DEVANAGARI LETTER FA +095F ; NFKC_SCF; 092F 093C # Lo DEVANAGARI LETTER YYA +09DC ; NFKC_SCF; 09A1 09BC # Lo BENGALI LETTER RRA +09DD ; NFKC_SCF; 09A2 09BC # Lo BENGALI LETTER RHA +09DF ; NFKC_SCF; 09AF 09BC # Lo BENGALI LETTER YYA +0A33 ; NFKC_SCF; 0A32 0A3C # Lo GURMUKHI LETTER LLA +0A36 ; NFKC_SCF; 0A38 0A3C # Lo GURMUKHI LETTER SHA +0A59 ; NFKC_SCF; 0A16 0A3C # Lo GURMUKHI LETTER KHHA +0A5A ; NFKC_SCF; 0A17 0A3C # Lo GURMUKHI LETTER GHHA +0A5B ; NFKC_SCF; 0A1C 0A3C # Lo GURMUKHI LETTER ZA +0A5E ; NFKC_SCF; 0A2B 0A3C # Lo GURMUKHI LETTER FA +0B5C ; NFKC_SCF; 0B21 0B3C # Lo ORIYA LETTER RRA +0B5D ; NFKC_SCF; 0B22 0B3C # Lo ORIYA LETTER RHA +0E33 ; NFKC_SCF; 0E4D 0E32 # Lo THAI CHARACTER SARA AM +0EB3 ; NFKC_SCF; 0ECD 0EB2 # Lo LAO VOWEL SIGN AM +0EDC ; NFKC_SCF; 0EAB 0E99 # Lo LAO HO NO +0EDD ; NFKC_SCF; 0EAB 0EA1 # Lo LAO HO MO +0F0C ; NFKC_SCF; 0F0B # Po TIBETAN MARK DELIMITER TSHEG BSTAR +0F43 ; NFKC_SCF; 0F42 0FB7 # Lo TIBETAN LETTER GHA +0F4D ; NFKC_SCF; 0F4C 0FB7 # Lo TIBETAN LETTER DDHA +0F52 ; NFKC_SCF; 0F51 0FB7 # Lo TIBETAN LETTER DHA +0F57 ; NFKC_SCF; 0F56 0FB7 # Lo TIBETAN LETTER BHA +0F5C ; NFKC_SCF; 0F5B 0FB7 # Lo TIBETAN LETTER DZHA +0F69 ; NFKC_SCF; 0F40 0FB5 # Lo TIBETAN LETTER KSSA +0F73 ; NFKC_SCF; 0F71 0F72 # Mn TIBETAN VOWEL SIGN II +0F75 ; NFKC_SCF; 0F71 0F74 # Mn TIBETAN VOWEL SIGN UU +0F76 ; NFKC_SCF; 0FB2 0F80 # Mn TIBETAN VOWEL SIGN VOCALIC R +0F77 ; NFKC_SCF; 0FB2 0F71 0F80 # Mn TIBETAN VOWEL SIGN VOCALIC RR +0F78 ; NFKC_SCF; 0FB3 0F80 # Mn TIBETAN VOWEL SIGN VOCALIC L +0F79 ; NFKC_SCF; 0FB3 0F71 0F80 # Mn TIBETAN VOWEL SIGN VOCALIC LL +0F81 ; NFKC_SCF; 0F71 0F80 # Mn TIBETAN VOWEL SIGN REVERSED II +0F93 ; NFKC_SCF; 0F92 0FB7 # Mn TIBETAN SUBJOINED LETTER GHA +0F9D ; NFKC_SCF; 0F9C 0FB7 # Mn TIBETAN SUBJOINED LETTER DDHA +0FA2 ; NFKC_SCF; 0FA1 0FB7 # Mn TIBETAN SUBJOINED LETTER DHA +0FA7 ; NFKC_SCF; 0FA6 0FB7 # Mn TIBETAN SUBJOINED LETTER BHA +0FAC ; NFKC_SCF; 0FAB 0FB7 # Mn TIBETAN SUBJOINED LETTER DZHA +0FB9 ; NFKC_SCF; 0F90 0FB5 # Mn TIBETAN SUBJOINED LETTER KSSA +10A0 ; NFKC_SCF; 2D00 # L& GEORGIAN CAPITAL LETTER AN +10A1 ; NFKC_SCF; 2D01 # L& GEORGIAN CAPITAL LETTER BAN +10A2 ; NFKC_SCF; 2D02 # L& GEORGIAN CAPITAL LETTER GAN +10A3 ; NFKC_SCF; 2D03 # L& GEORGIAN CAPITAL LETTER DON +10A4 ; NFKC_SCF; 2D04 # L& GEORGIAN CAPITAL LETTER EN +10A5 ; NFKC_SCF; 2D05 # L& GEORGIAN CAPITAL LETTER VIN +10A6 ; NFKC_SCF; 2D06 # L& GEORGIAN CAPITAL LETTER ZEN +10A7 ; NFKC_SCF; 2D07 # L& GEORGIAN CAPITAL LETTER TAN +10A8 ; NFKC_SCF; 2D08 # L& GEORGIAN CAPITAL LETTER IN +10A9 ; NFKC_SCF; 2D09 # L& GEORGIAN CAPITAL LETTER KAN +10AA ; NFKC_SCF; 2D0A # L& GEORGIAN CAPITAL LETTER LAS +10AB ; NFKC_SCF; 2D0B # L& GEORGIAN CAPITAL LETTER MAN +10AC ; NFKC_SCF; 2D0C # L& GEORGIAN CAPITAL LETTER NAR +10AD ; NFKC_SCF; 2D0D # L& GEORGIAN CAPITAL LETTER ON +10AE ; NFKC_SCF; 2D0E # L& GEORGIAN CAPITAL LETTER PAR +10AF ; NFKC_SCF; 2D0F # L& GEORGIAN CAPITAL LETTER ZHAR +10B0 ; NFKC_SCF; 2D10 # L& GEORGIAN CAPITAL LETTER RAE +10B1 ; NFKC_SCF; 2D11 # L& GEORGIAN CAPITAL LETTER SAN +10B2 ; NFKC_SCF; 2D12 # L& GEORGIAN CAPITAL LETTER TAR +10B3 ; NFKC_SCF; 2D13 # L& GEORGIAN CAPITAL LETTER UN +10B4 ; NFKC_SCF; 2D14 # L& GEORGIAN CAPITAL LETTER PHAR +10B5 ; NFKC_SCF; 2D15 # L& GEORGIAN CAPITAL LETTER KHAR +10B6 ; NFKC_SCF; 2D16 # L& GEORGIAN CAPITAL LETTER GHAN +10B7 ; NFKC_SCF; 2D17 # L& GEORGIAN CAPITAL LETTER QAR +10B8 ; NFKC_SCF; 2D18 # L& GEORGIAN CAPITAL LETTER SHIN +10B9 ; NFKC_SCF; 2D19 # L& GEORGIAN CAPITAL LETTER CHIN +10BA ; NFKC_SCF; 2D1A # L& GEORGIAN CAPITAL LETTER CAN +10BB ; NFKC_SCF; 2D1B # L& GEORGIAN CAPITAL LETTER JIL +10BC ; NFKC_SCF; 2D1C # L& GEORGIAN CAPITAL LETTER CIL +10BD ; NFKC_SCF; 2D1D # L& GEORGIAN CAPITAL LETTER CHAR +10BE ; NFKC_SCF; 2D1E # L& GEORGIAN CAPITAL LETTER XAN +10BF ; NFKC_SCF; 2D1F # L& GEORGIAN CAPITAL LETTER JHAN +10C0 ; NFKC_SCF; 2D20 # L& GEORGIAN CAPITAL LETTER HAE +10C1 ; NFKC_SCF; 2D21 # L& GEORGIAN CAPITAL LETTER HE +10C2 ; NFKC_SCF; 2D22 # L& GEORGIAN CAPITAL LETTER HIE +10C3 ; NFKC_SCF; 2D23 # L& GEORGIAN CAPITAL LETTER WE +10C4 ; NFKC_SCF; 2D24 # L& GEORGIAN CAPITAL LETTER HAR +10C5 ; NFKC_SCF; 2D25 # L& GEORGIAN CAPITAL LETTER HOE +10C7 ; NFKC_SCF; 2D27 # L& GEORGIAN CAPITAL LETTER YN +10CD ; NFKC_SCF; 2D2D # L& GEORGIAN CAPITAL LETTER AEN +10FC ; NFKC_SCF; 10DC # Lm MODIFIER LETTER GEORGIAN NAR +115F..1160 ; NFKC_SCF; # Lo [2] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG FILLER +13F8 ; NFKC_SCF; 13F0 # L& CHEROKEE SMALL LETTER YE +13F9 ; NFKC_SCF; 13F1 # L& CHEROKEE SMALL LETTER YI +13FA ; NFKC_SCF; 13F2 # L& CHEROKEE SMALL LETTER YO +13FB ; NFKC_SCF; 13F3 # L& CHEROKEE SMALL LETTER YU +13FC ; NFKC_SCF; 13F4 # L& CHEROKEE SMALL LETTER YV +13FD ; NFKC_SCF; 13F5 # L& CHEROKEE SMALL LETTER MV +17B4..17B5 ; NFKC_SCF; # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA +180B..180D ; NFKC_SCF; # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180E ; NFKC_SCF; # Cf MONGOLIAN VOWEL SEPARATOR +180F ; NFKC_SCF; # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR +1C80 ; NFKC_SCF; 0432 # L& CYRILLIC SMALL LETTER ROUNDED VE +1C81 ; NFKC_SCF; 0434 # L& CYRILLIC SMALL LETTER LONG-LEGGED DE +1C82 ; NFKC_SCF; 043E # L& CYRILLIC SMALL LETTER NARROW O +1C83 ; NFKC_SCF; 0441 # L& CYRILLIC SMALL LETTER WIDE ES +1C84..1C85 ; NFKC_SCF; 0442 # L& [2] CYRILLIC SMALL LETTER TALL TE..CYRILLIC SMALL LETTER THREE-LEGGED TE +1C86 ; NFKC_SCF; 044A # L& CYRILLIC SMALL LETTER TALL HARD SIGN +1C87 ; NFKC_SCF; 0463 # L& CYRILLIC SMALL LETTER TALL YAT +1C88 ; NFKC_SCF; A64B # L& CYRILLIC SMALL LETTER UNBLENDED UK +1C90 ; NFKC_SCF; 10D0 # L& GEORGIAN MTAVRULI CAPITAL LETTER AN +1C91 ; NFKC_SCF; 10D1 # L& GEORGIAN MTAVRULI CAPITAL LETTER BAN +1C92 ; NFKC_SCF; 10D2 # L& GEORGIAN MTAVRULI CAPITAL LETTER GAN +1C93 ; NFKC_SCF; 10D3 # L& GEORGIAN MTAVRULI CAPITAL LETTER DON +1C94 ; NFKC_SCF; 10D4 # L& GEORGIAN MTAVRULI CAPITAL LETTER EN +1C95 ; NFKC_SCF; 10D5 # L& GEORGIAN MTAVRULI CAPITAL LETTER VIN +1C96 ; NFKC_SCF; 10D6 # L& GEORGIAN MTAVRULI CAPITAL LETTER ZEN +1C97 ; NFKC_SCF; 10D7 # L& GEORGIAN MTAVRULI CAPITAL LETTER TAN +1C98 ; NFKC_SCF; 10D8 # L& GEORGIAN MTAVRULI CAPITAL LETTER IN +1C99 ; NFKC_SCF; 10D9 # L& GEORGIAN MTAVRULI CAPITAL LETTER KAN +1C9A ; NFKC_SCF; 10DA # L& GEORGIAN MTAVRULI CAPITAL LETTER LAS +1C9B ; NFKC_SCF; 10DB # L& GEORGIAN MTAVRULI CAPITAL LETTER MAN +1C9C ; NFKC_SCF; 10DC # L& GEORGIAN MTAVRULI CAPITAL LETTER NAR +1C9D ; NFKC_SCF; 10DD # L& GEORGIAN MTAVRULI CAPITAL LETTER ON +1C9E ; NFKC_SCF; 10DE # L& GEORGIAN MTAVRULI CAPITAL LETTER PAR +1C9F ; NFKC_SCF; 10DF # L& GEORGIAN MTAVRULI CAPITAL LETTER ZHAR +1CA0 ; NFKC_SCF; 10E0 # L& GEORGIAN MTAVRULI CAPITAL LETTER RAE +1CA1 ; NFKC_SCF; 10E1 # L& GEORGIAN MTAVRULI CAPITAL LETTER SAN +1CA2 ; NFKC_SCF; 10E2 # L& GEORGIAN MTAVRULI CAPITAL LETTER TAR +1CA3 ; NFKC_SCF; 10E3 # L& GEORGIAN MTAVRULI CAPITAL LETTER UN +1CA4 ; NFKC_SCF; 10E4 # L& GEORGIAN MTAVRULI CAPITAL LETTER PHAR +1CA5 ; NFKC_SCF; 10E5 # L& GEORGIAN MTAVRULI CAPITAL LETTER KHAR +1CA6 ; NFKC_SCF; 10E6 # L& GEORGIAN MTAVRULI CAPITAL LETTER GHAN +1CA7 ; NFKC_SCF; 10E7 # L& GEORGIAN MTAVRULI CAPITAL LETTER QAR +1CA8 ; NFKC_SCF; 10E8 # L& GEORGIAN MTAVRULI CAPITAL LETTER SHIN +1CA9 ; NFKC_SCF; 10E9 # L& GEORGIAN MTAVRULI CAPITAL LETTER CHIN +1CAA ; NFKC_SCF; 10EA # L& GEORGIAN MTAVRULI CAPITAL LETTER CAN +1CAB ; NFKC_SCF; 10EB # L& GEORGIAN MTAVRULI CAPITAL LETTER JIL +1CAC ; NFKC_SCF; 10EC # L& GEORGIAN MTAVRULI CAPITAL LETTER CIL +1CAD ; NFKC_SCF; 10ED # L& GEORGIAN MTAVRULI CAPITAL LETTER CHAR +1CAE ; NFKC_SCF; 10EE # L& GEORGIAN MTAVRULI CAPITAL LETTER XAN +1CAF ; NFKC_SCF; 10EF # L& GEORGIAN MTAVRULI CAPITAL LETTER JHAN +1CB0 ; NFKC_SCF; 10F0 # L& GEORGIAN MTAVRULI CAPITAL LETTER HAE +1CB1 ; NFKC_SCF; 10F1 # L& GEORGIAN MTAVRULI CAPITAL LETTER HE +1CB2 ; NFKC_SCF; 10F2 # L& GEORGIAN MTAVRULI CAPITAL LETTER HIE +1CB3 ; NFKC_SCF; 10F3 # L& GEORGIAN MTAVRULI CAPITAL LETTER WE +1CB4 ; NFKC_SCF; 10F4 # L& GEORGIAN MTAVRULI CAPITAL LETTER HAR +1CB5 ; NFKC_SCF; 10F5 # L& GEORGIAN MTAVRULI CAPITAL LETTER HOE +1CB6 ; NFKC_SCF; 10F6 # L& GEORGIAN MTAVRULI CAPITAL LETTER FI +1CB7 ; NFKC_SCF; 10F7 # L& GEORGIAN MTAVRULI CAPITAL LETTER YN +1CB8 ; NFKC_SCF; 10F8 # L& GEORGIAN MTAVRULI CAPITAL LETTER ELIFI +1CB9 ; NFKC_SCF; 10F9 # L& GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN +1CBA ; NFKC_SCF; 10FA # L& GEORGIAN MTAVRULI CAPITAL LETTER AIN +1CBD ; NFKC_SCF; 10FD # L& GEORGIAN MTAVRULI CAPITAL LETTER AEN +1CBE ; NFKC_SCF; 10FE # L& GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN +1CBF ; NFKC_SCF; 10FF # L& GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN +1D2C ; NFKC_SCF; 0061 # Lm MODIFIER LETTER CAPITAL A +1D2D ; NFKC_SCF; 00E6 # Lm MODIFIER LETTER CAPITAL AE +1D2E ; NFKC_SCF; 0062 # Lm MODIFIER LETTER CAPITAL B +1D30 ; NFKC_SCF; 0064 # Lm MODIFIER LETTER CAPITAL D +1D31 ; NFKC_SCF; 0065 # Lm MODIFIER LETTER CAPITAL E +1D32 ; NFKC_SCF; 01DD # Lm MODIFIER LETTER CAPITAL REVERSED E +1D33 ; NFKC_SCF; 0067 # Lm MODIFIER LETTER CAPITAL G +1D34 ; NFKC_SCF; 0068 # Lm MODIFIER LETTER CAPITAL H +1D35 ; NFKC_SCF; 0069 # Lm MODIFIER LETTER CAPITAL I +1D36 ; NFKC_SCF; 006A # Lm MODIFIER LETTER CAPITAL J +1D37 ; NFKC_SCF; 006B # Lm MODIFIER LETTER CAPITAL K +1D38 ; NFKC_SCF; 006C # Lm MODIFIER LETTER CAPITAL L +1D39 ; NFKC_SCF; 006D # Lm MODIFIER LETTER CAPITAL M +1D3A ; NFKC_SCF; 006E # Lm MODIFIER LETTER CAPITAL N +1D3C ; NFKC_SCF; 006F # Lm MODIFIER LETTER CAPITAL O +1D3D ; NFKC_SCF; 0223 # Lm MODIFIER LETTER CAPITAL OU +1D3E ; NFKC_SCF; 0070 # Lm MODIFIER LETTER CAPITAL P +1D3F ; NFKC_SCF; 0072 # Lm MODIFIER LETTER CAPITAL R +1D40 ; NFKC_SCF; 0074 # Lm MODIFIER LETTER CAPITAL T +1D41 ; NFKC_SCF; 0075 # Lm MODIFIER LETTER CAPITAL U +1D42 ; NFKC_SCF; 0077 # Lm MODIFIER LETTER CAPITAL W +1D43 ; NFKC_SCF; 0061 # Lm MODIFIER LETTER SMALL A +1D44 ; NFKC_SCF; 0250 # Lm MODIFIER LETTER SMALL TURNED A +1D45 ; NFKC_SCF; 0251 # Lm MODIFIER LETTER SMALL ALPHA +1D46 ; NFKC_SCF; 1D02 # Lm MODIFIER LETTER SMALL TURNED AE +1D47 ; NFKC_SCF; 0062 # Lm MODIFIER LETTER SMALL B +1D48 ; NFKC_SCF; 0064 # Lm MODIFIER LETTER SMALL D +1D49 ; NFKC_SCF; 0065 # Lm MODIFIER LETTER SMALL E +1D4A ; NFKC_SCF; 0259 # Lm MODIFIER LETTER SMALL SCHWA +1D4B ; NFKC_SCF; 025B # Lm MODIFIER LETTER SMALL OPEN E +1D4C ; NFKC_SCF; 025C # Lm MODIFIER LETTER SMALL TURNED OPEN E +1D4D ; NFKC_SCF; 0067 # Lm MODIFIER LETTER SMALL G +1D4F ; NFKC_SCF; 006B # Lm MODIFIER LETTER SMALL K +1D50 ; NFKC_SCF; 006D # Lm MODIFIER LETTER SMALL M +1D51 ; NFKC_SCF; 014B # Lm MODIFIER LETTER SMALL ENG +1D52 ; NFKC_SCF; 006F # Lm MODIFIER LETTER SMALL O +1D53 ; NFKC_SCF; 0254 # Lm MODIFIER LETTER SMALL OPEN O +1D54 ; NFKC_SCF; 1D16 # Lm MODIFIER LETTER SMALL TOP HALF O +1D55 ; NFKC_SCF; 1D17 # Lm MODIFIER LETTER SMALL BOTTOM HALF O +1D56 ; NFKC_SCF; 0070 # Lm MODIFIER LETTER SMALL P +1D57 ; NFKC_SCF; 0074 # Lm MODIFIER LETTER SMALL T +1D58 ; NFKC_SCF; 0075 # Lm MODIFIER LETTER SMALL U +1D59 ; NFKC_SCF; 1D1D # Lm MODIFIER LETTER SMALL SIDEWAYS U +1D5A ; NFKC_SCF; 026F # Lm MODIFIER LETTER SMALL TURNED M +1D5B ; NFKC_SCF; 0076 # Lm MODIFIER LETTER SMALL V +1D5C ; NFKC_SCF; 1D25 # Lm MODIFIER LETTER SMALL AIN +1D5D ; NFKC_SCF; 03B2 # Lm MODIFIER LETTER SMALL BETA +1D5E ; NFKC_SCF; 03B3 # Lm MODIFIER LETTER SMALL GREEK GAMMA +1D5F ; NFKC_SCF; 03B4 # Lm MODIFIER LETTER SMALL DELTA +1D60 ; NFKC_SCF; 03C6 # Lm MODIFIER LETTER SMALL GREEK PHI +1D61 ; NFKC_SCF; 03C7 # Lm MODIFIER LETTER SMALL CHI +1D62 ; NFKC_SCF; 0069 # Lm LATIN SUBSCRIPT SMALL LETTER I +1D63 ; NFKC_SCF; 0072 # Lm LATIN SUBSCRIPT SMALL LETTER R +1D64 ; NFKC_SCF; 0075 # Lm LATIN SUBSCRIPT SMALL LETTER U +1D65 ; NFKC_SCF; 0076 # Lm LATIN SUBSCRIPT SMALL LETTER V +1D66 ; NFKC_SCF; 03B2 # Lm GREEK SUBSCRIPT SMALL LETTER BETA +1D67 ; NFKC_SCF; 03B3 # Lm GREEK SUBSCRIPT SMALL LETTER GAMMA +1D68 ; NFKC_SCF; 03C1 # Lm GREEK SUBSCRIPT SMALL LETTER RHO +1D69 ; NFKC_SCF; 03C6 # Lm GREEK SUBSCRIPT SMALL LETTER PHI +1D6A ; NFKC_SCF; 03C7 # Lm GREEK SUBSCRIPT SMALL LETTER CHI +1D78 ; NFKC_SCF; 043D # Lm MODIFIER LETTER CYRILLIC EN +1D9B ; NFKC_SCF; 0252 # Lm MODIFIER LETTER SMALL TURNED ALPHA +1D9C ; NFKC_SCF; 0063 # Lm MODIFIER LETTER SMALL C +1D9D ; NFKC_SCF; 0255 # Lm MODIFIER LETTER SMALL C WITH CURL +1D9E ; NFKC_SCF; 00F0 # Lm MODIFIER LETTER SMALL ETH +1D9F ; NFKC_SCF; 025C # Lm MODIFIER LETTER SMALL REVERSED OPEN E +1DA0 ; NFKC_SCF; 0066 # Lm MODIFIER LETTER SMALL F +1DA1 ; NFKC_SCF; 025F # Lm MODIFIER LETTER SMALL DOTLESS J WITH STROKE +1DA2 ; NFKC_SCF; 0261 # Lm MODIFIER LETTER SMALL SCRIPT G +1DA3 ; NFKC_SCF; 0265 # Lm MODIFIER LETTER SMALL TURNED H +1DA4 ; NFKC_SCF; 0268 # Lm MODIFIER LETTER SMALL I WITH STROKE +1DA5 ; NFKC_SCF; 0269 # Lm MODIFIER LETTER SMALL IOTA +1DA6 ; NFKC_SCF; 026A # Lm MODIFIER LETTER SMALL CAPITAL I +1DA7 ; NFKC_SCF; 1D7B # Lm MODIFIER LETTER SMALL CAPITAL I WITH STROKE +1DA8 ; NFKC_SCF; 029D # Lm MODIFIER LETTER SMALL J WITH CROSSED-TAIL +1DA9 ; NFKC_SCF; 026D # Lm MODIFIER LETTER SMALL L WITH RETROFLEX HOOK +1DAA ; NFKC_SCF; 1D85 # Lm MODIFIER LETTER SMALL L WITH PALATAL HOOK +1DAB ; NFKC_SCF; 029F # Lm MODIFIER LETTER SMALL CAPITAL L +1DAC ; NFKC_SCF; 0271 # Lm MODIFIER LETTER SMALL M WITH HOOK +1DAD ; NFKC_SCF; 0270 # Lm MODIFIER LETTER SMALL TURNED M WITH LONG LEG +1DAE ; NFKC_SCF; 0272 # Lm MODIFIER LETTER SMALL N WITH LEFT HOOK +1DAF ; NFKC_SCF; 0273 # Lm MODIFIER LETTER SMALL N WITH RETROFLEX HOOK +1DB0 ; NFKC_SCF; 0274 # Lm MODIFIER LETTER SMALL CAPITAL N +1DB1 ; NFKC_SCF; 0275 # Lm MODIFIER LETTER SMALL BARRED O +1DB2 ; NFKC_SCF; 0278 # Lm MODIFIER LETTER SMALL PHI +1DB3 ; NFKC_SCF; 0282 # Lm MODIFIER LETTER SMALL S WITH HOOK +1DB4 ; NFKC_SCF; 0283 # Lm MODIFIER LETTER SMALL ESH +1DB5 ; NFKC_SCF; 01AB # Lm MODIFIER LETTER SMALL T WITH PALATAL HOOK +1DB6 ; NFKC_SCF; 0289 # Lm MODIFIER LETTER SMALL U BAR +1DB7 ; NFKC_SCF; 028A # Lm MODIFIER LETTER SMALL UPSILON +1DB8 ; NFKC_SCF; 1D1C # Lm MODIFIER LETTER SMALL CAPITAL U +1DB9 ; NFKC_SCF; 028B # Lm MODIFIER LETTER SMALL V WITH HOOK +1DBA ; NFKC_SCF; 028C # Lm MODIFIER LETTER SMALL TURNED V +1DBB ; NFKC_SCF; 007A # Lm MODIFIER LETTER SMALL Z +1DBC ; NFKC_SCF; 0290 # Lm MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK +1DBD ; NFKC_SCF; 0291 # Lm MODIFIER LETTER SMALL Z WITH CURL +1DBE ; NFKC_SCF; 0292 # Lm MODIFIER LETTER SMALL EZH +1DBF ; NFKC_SCF; 03B8 # Lm MODIFIER LETTER SMALL THETA +1E00 ; NFKC_SCF; 1E01 # L& LATIN CAPITAL LETTER A WITH RING BELOW +1E02 ; NFKC_SCF; 1E03 # L& LATIN CAPITAL LETTER B WITH DOT ABOVE +1E04 ; NFKC_SCF; 1E05 # L& LATIN CAPITAL LETTER B WITH DOT BELOW +1E06 ; NFKC_SCF; 1E07 # L& LATIN CAPITAL LETTER B WITH LINE BELOW +1E08 ; NFKC_SCF; 1E09 # L& LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE +1E0A ; NFKC_SCF; 1E0B # L& LATIN CAPITAL LETTER D WITH DOT ABOVE +1E0C ; NFKC_SCF; 1E0D # L& LATIN CAPITAL LETTER D WITH DOT BELOW +1E0E ; NFKC_SCF; 1E0F # L& LATIN CAPITAL LETTER D WITH LINE BELOW +1E10 ; NFKC_SCF; 1E11 # L& LATIN CAPITAL LETTER D WITH CEDILLA +1E12 ; NFKC_SCF; 1E13 # L& LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW +1E14 ; NFKC_SCF; 1E15 # L& LATIN CAPITAL LETTER E WITH MACRON AND GRAVE +1E16 ; NFKC_SCF; 1E17 # L& LATIN CAPITAL LETTER E WITH MACRON AND ACUTE +1E18 ; NFKC_SCF; 1E19 # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW +1E1A ; NFKC_SCF; 1E1B # L& LATIN CAPITAL LETTER E WITH TILDE BELOW +1E1C ; NFKC_SCF; 1E1D # L& LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE +1E1E ; NFKC_SCF; 1E1F # L& LATIN CAPITAL LETTER F WITH DOT ABOVE +1E20 ; NFKC_SCF; 1E21 # L& LATIN CAPITAL LETTER G WITH MACRON +1E22 ; NFKC_SCF; 1E23 # L& LATIN CAPITAL LETTER H WITH DOT ABOVE +1E24 ; NFKC_SCF; 1E25 # L& LATIN CAPITAL LETTER H WITH DOT BELOW +1E26 ; NFKC_SCF; 1E27 # L& LATIN CAPITAL LETTER H WITH DIAERESIS +1E28 ; NFKC_SCF; 1E29 # L& LATIN CAPITAL LETTER H WITH CEDILLA +1E2A ; NFKC_SCF; 1E2B # L& LATIN CAPITAL LETTER H WITH BREVE BELOW +1E2C ; NFKC_SCF; 1E2D # L& LATIN CAPITAL LETTER I WITH TILDE BELOW +1E2E ; NFKC_SCF; 1E2F # L& LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE +1E30 ; NFKC_SCF; 1E31 # L& LATIN CAPITAL LETTER K WITH ACUTE +1E32 ; NFKC_SCF; 1E33 # L& LATIN CAPITAL LETTER K WITH DOT BELOW +1E34 ; NFKC_SCF; 1E35 # L& LATIN CAPITAL LETTER K WITH LINE BELOW +1E36 ; NFKC_SCF; 1E37 # L& LATIN CAPITAL LETTER L WITH DOT BELOW +1E38 ; NFKC_SCF; 1E39 # L& LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON +1E3A ; NFKC_SCF; 1E3B # L& LATIN CAPITAL LETTER L WITH LINE BELOW +1E3C ; NFKC_SCF; 1E3D # L& LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW +1E3E ; NFKC_SCF; 1E3F # L& LATIN CAPITAL LETTER M WITH ACUTE +1E40 ; NFKC_SCF; 1E41 # L& LATIN CAPITAL LETTER M WITH DOT ABOVE +1E42 ; NFKC_SCF; 1E43 # L& LATIN CAPITAL LETTER M WITH DOT BELOW +1E44 ; NFKC_SCF; 1E45 # L& LATIN CAPITAL LETTER N WITH DOT ABOVE +1E46 ; NFKC_SCF; 1E47 # L& LATIN CAPITAL LETTER N WITH DOT BELOW +1E48 ; NFKC_SCF; 1E49 # L& LATIN CAPITAL LETTER N WITH LINE BELOW +1E4A ; NFKC_SCF; 1E4B # L& LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW +1E4C ; NFKC_SCF; 1E4D # L& LATIN CAPITAL LETTER O WITH TILDE AND ACUTE +1E4E ; NFKC_SCF; 1E4F # L& LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS +1E50 ; NFKC_SCF; 1E51 # L& LATIN CAPITAL LETTER O WITH MACRON AND GRAVE +1E52 ; NFKC_SCF; 1E53 # L& LATIN CAPITAL LETTER O WITH MACRON AND ACUTE +1E54 ; NFKC_SCF; 1E55 # L& LATIN CAPITAL LETTER P WITH ACUTE +1E56 ; NFKC_SCF; 1E57 # L& LATIN CAPITAL LETTER P WITH DOT ABOVE +1E58 ; NFKC_SCF; 1E59 # L& LATIN CAPITAL LETTER R WITH DOT ABOVE +1E5A ; NFKC_SCF; 1E5B # L& LATIN CAPITAL LETTER R WITH DOT BELOW +1E5C ; NFKC_SCF; 1E5D # L& LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON +1E5E ; NFKC_SCF; 1E5F # L& LATIN CAPITAL LETTER R WITH LINE BELOW +1E60 ; NFKC_SCF; 1E61 # L& LATIN CAPITAL LETTER S WITH DOT ABOVE +1E62 ; NFKC_SCF; 1E63 # L& LATIN CAPITAL LETTER S WITH DOT BELOW +1E64 ; NFKC_SCF; 1E65 # L& LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE +1E66 ; NFKC_SCF; 1E67 # L& LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE +1E68 ; NFKC_SCF; 1E69 # L& LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE +1E6A ; NFKC_SCF; 1E6B # L& LATIN CAPITAL LETTER T WITH DOT ABOVE +1E6C ; NFKC_SCF; 1E6D # L& LATIN CAPITAL LETTER T WITH DOT BELOW +1E6E ; NFKC_SCF; 1E6F # L& LATIN CAPITAL LETTER T WITH LINE BELOW +1E70 ; NFKC_SCF; 1E71 # L& LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW +1E72 ; NFKC_SCF; 1E73 # L& LATIN CAPITAL LETTER U WITH DIAERESIS BELOW +1E74 ; NFKC_SCF; 1E75 # L& LATIN CAPITAL LETTER U WITH TILDE BELOW +1E76 ; NFKC_SCF; 1E77 # L& LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW +1E78 ; NFKC_SCF; 1E79 # L& LATIN CAPITAL LETTER U WITH TILDE AND ACUTE +1E7A ; NFKC_SCF; 1E7B # L& LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS +1E7C ; NFKC_SCF; 1E7D # L& LATIN CAPITAL LETTER V WITH TILDE +1E7E ; NFKC_SCF; 1E7F # L& LATIN CAPITAL LETTER V WITH DOT BELOW +1E80 ; NFKC_SCF; 1E81 # L& LATIN CAPITAL LETTER W WITH GRAVE +1E82 ; NFKC_SCF; 1E83 # L& LATIN CAPITAL LETTER W WITH ACUTE +1E84 ; NFKC_SCF; 1E85 # L& LATIN CAPITAL LETTER W WITH DIAERESIS +1E86 ; NFKC_SCF; 1E87 # L& LATIN CAPITAL LETTER W WITH DOT ABOVE +1E88 ; NFKC_SCF; 1E89 # L& LATIN CAPITAL LETTER W WITH DOT BELOW +1E8A ; NFKC_SCF; 1E8B # L& LATIN CAPITAL LETTER X WITH DOT ABOVE +1E8C ; NFKC_SCF; 1E8D # L& LATIN CAPITAL LETTER X WITH DIAERESIS +1E8E ; NFKC_SCF; 1E8F # L& LATIN CAPITAL LETTER Y WITH DOT ABOVE +1E90 ; NFKC_SCF; 1E91 # L& LATIN CAPITAL LETTER Z WITH CIRCUMFLEX +1E92 ; NFKC_SCF; 1E93 # L& LATIN CAPITAL LETTER Z WITH DOT BELOW +1E94 ; NFKC_SCF; 1E95 # L& LATIN CAPITAL LETTER Z WITH LINE BELOW +1E9A ; NFKC_SCF; 0061 02BE # L& LATIN SMALL LETTER A WITH RIGHT HALF RING +1E9B ; NFKC_SCF; 1E61 # L& LATIN SMALL LETTER LONG S WITH DOT ABOVE +1E9E ; NFKC_SCF; 00DF # L& LATIN CAPITAL LETTER SHARP S +1EA0 ; NFKC_SCF; 1EA1 # L& LATIN CAPITAL LETTER A WITH DOT BELOW +1EA2 ; NFKC_SCF; 1EA3 # L& LATIN CAPITAL LETTER A WITH HOOK ABOVE +1EA4 ; NFKC_SCF; 1EA5 # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE +1EA6 ; NFKC_SCF; 1EA7 # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE +1EA8 ; NFKC_SCF; 1EA9 # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +1EAA ; NFKC_SCF; 1EAB # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE +1EAC ; NFKC_SCF; 1EAD # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW +1EAE ; NFKC_SCF; 1EAF # L& LATIN CAPITAL LETTER A WITH BREVE AND ACUTE +1EB0 ; NFKC_SCF; 1EB1 # L& LATIN CAPITAL LETTER A WITH BREVE AND GRAVE +1EB2 ; NFKC_SCF; 1EB3 # L& LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE +1EB4 ; NFKC_SCF; 1EB5 # L& LATIN CAPITAL LETTER A WITH BREVE AND TILDE +1EB6 ; NFKC_SCF; 1EB7 # L& LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW +1EB8 ; NFKC_SCF; 1EB9 # L& LATIN CAPITAL LETTER E WITH DOT BELOW +1EBA ; NFKC_SCF; 1EBB # L& LATIN CAPITAL LETTER E WITH HOOK ABOVE +1EBC ; NFKC_SCF; 1EBD # L& LATIN CAPITAL LETTER E WITH TILDE +1EBE ; NFKC_SCF; 1EBF # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +1EC0 ; NFKC_SCF; 1EC1 # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC2 ; NFKC_SCF; 1EC3 # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC4 ; NFKC_SCF; 1EC5 # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +1EC6 ; NFKC_SCF; 1EC7 # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC8 ; NFKC_SCF; 1EC9 # L& LATIN CAPITAL LETTER I WITH HOOK ABOVE +1ECA ; NFKC_SCF; 1ECB # L& LATIN CAPITAL LETTER I WITH DOT BELOW +1ECC ; NFKC_SCF; 1ECD # L& LATIN CAPITAL LETTER O WITH DOT BELOW +1ECE ; NFKC_SCF; 1ECF # L& LATIN CAPITAL LETTER O WITH HOOK ABOVE +1ED0 ; NFKC_SCF; 1ED1 # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED2 ; NFKC_SCF; 1ED3 # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED4 ; NFKC_SCF; 1ED5 # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED6 ; NFKC_SCF; 1ED7 # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE +1ED8 ; NFKC_SCF; 1ED9 # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1EDA ; NFKC_SCF; 1EDB # L& LATIN CAPITAL LETTER O WITH HORN AND ACUTE +1EDC ; NFKC_SCF; 1EDD # L& LATIN CAPITAL LETTER O WITH HORN AND GRAVE +1EDE ; NFKC_SCF; 1EDF # L& LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE +1EE0 ; NFKC_SCF; 1EE1 # L& LATIN CAPITAL LETTER O WITH HORN AND TILDE +1EE2 ; NFKC_SCF; 1EE3 # L& LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW +1EE4 ; NFKC_SCF; 1EE5 # L& LATIN CAPITAL LETTER U WITH DOT BELOW +1EE6 ; NFKC_SCF; 1EE7 # L& LATIN CAPITAL LETTER U WITH HOOK ABOVE +1EE8 ; NFKC_SCF; 1EE9 # L& LATIN CAPITAL LETTER U WITH HORN AND ACUTE +1EEA ; NFKC_SCF; 1EEB # L& LATIN CAPITAL LETTER U WITH HORN AND GRAVE +1EEC ; NFKC_SCF; 1EED # L& LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE +1EEE ; NFKC_SCF; 1EEF # L& LATIN CAPITAL LETTER U WITH HORN AND TILDE +1EF0 ; NFKC_SCF; 1EF1 # L& LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW +1EF2 ; NFKC_SCF; 1EF3 # L& LATIN CAPITAL LETTER Y WITH GRAVE +1EF4 ; NFKC_SCF; 1EF5 # L& LATIN CAPITAL LETTER Y WITH DOT BELOW +1EF6 ; NFKC_SCF; 1EF7 # L& LATIN CAPITAL LETTER Y WITH HOOK ABOVE +1EF8 ; NFKC_SCF; 1EF9 # L& LATIN CAPITAL LETTER Y WITH TILDE +1EFA ; NFKC_SCF; 1EFB # L& LATIN CAPITAL LETTER MIDDLE-WELSH LL +1EFC ; NFKC_SCF; 1EFD # L& LATIN CAPITAL LETTER MIDDLE-WELSH V +1EFE ; NFKC_SCF; 1EFF # L& LATIN CAPITAL LETTER Y WITH LOOP +1F08 ; NFKC_SCF; 1F00 # L& GREEK CAPITAL LETTER ALPHA WITH PSILI +1F09 ; NFKC_SCF; 1F01 # L& GREEK CAPITAL LETTER ALPHA WITH DASIA +1F0A ; NFKC_SCF; 1F02 # L& GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA +1F0B ; NFKC_SCF; 1F03 # L& GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA +1F0C ; NFKC_SCF; 1F04 # L& GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA +1F0D ; NFKC_SCF; 1F05 # L& GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA +1F0E ; NFKC_SCF; 1F06 # L& GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI +1F0F ; NFKC_SCF; 1F07 # L& GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI +1F18 ; NFKC_SCF; 1F10 # L& GREEK CAPITAL LETTER EPSILON WITH PSILI +1F19 ; NFKC_SCF; 1F11 # L& GREEK CAPITAL LETTER EPSILON WITH DASIA +1F1A ; NFKC_SCF; 1F12 # L& GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA +1F1B ; NFKC_SCF; 1F13 # L& GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA +1F1C ; NFKC_SCF; 1F14 # L& GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA +1F1D ; NFKC_SCF; 1F15 # L& GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F28 ; NFKC_SCF; 1F20 # L& GREEK CAPITAL LETTER ETA WITH PSILI +1F29 ; NFKC_SCF; 1F21 # L& GREEK CAPITAL LETTER ETA WITH DASIA +1F2A ; NFKC_SCF; 1F22 # L& GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA +1F2B ; NFKC_SCF; 1F23 # L& GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA +1F2C ; NFKC_SCF; 1F24 # L& GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA +1F2D ; NFKC_SCF; 1F25 # L& GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA +1F2E ; NFKC_SCF; 1F26 # L& GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI +1F2F ; NFKC_SCF; 1F27 # L& GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI +1F38 ; NFKC_SCF; 1F30 # L& GREEK CAPITAL LETTER IOTA WITH PSILI +1F39 ; NFKC_SCF; 1F31 # L& GREEK CAPITAL LETTER IOTA WITH DASIA +1F3A ; NFKC_SCF; 1F32 # L& GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA +1F3B ; NFKC_SCF; 1F33 # L& GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA +1F3C ; NFKC_SCF; 1F34 # L& GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA +1F3D ; NFKC_SCF; 1F35 # L& GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA +1F3E ; NFKC_SCF; 1F36 # L& GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI +1F3F ; NFKC_SCF; 1F37 # L& GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI +1F48 ; NFKC_SCF; 1F40 # L& GREEK CAPITAL LETTER OMICRON WITH PSILI +1F49 ; NFKC_SCF; 1F41 # L& GREEK CAPITAL LETTER OMICRON WITH DASIA +1F4A ; NFKC_SCF; 1F42 # L& GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA +1F4B ; NFKC_SCF; 1F43 # L& GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA +1F4C ; NFKC_SCF; 1F44 # L& GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA +1F4D ; NFKC_SCF; 1F45 # L& GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F59 ; NFKC_SCF; 1F51 # L& GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B ; NFKC_SCF; 1F53 # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D ; NFKC_SCF; 1F55 # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F ; NFKC_SCF; 1F57 # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F68 ; NFKC_SCF; 1F60 # L& GREEK CAPITAL LETTER OMEGA WITH PSILI +1F69 ; NFKC_SCF; 1F61 # L& GREEK CAPITAL LETTER OMEGA WITH DASIA +1F6A ; NFKC_SCF; 1F62 # L& GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA +1F6B ; NFKC_SCF; 1F63 # L& GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA +1F6C ; NFKC_SCF; 1F64 # L& GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA +1F6D ; NFKC_SCF; 1F65 # L& GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA +1F6E ; NFKC_SCF; 1F66 # L& GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI +1F6F ; NFKC_SCF; 1F67 # L& GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI +1F71 ; NFKC_SCF; 03AC # L& GREEK SMALL LETTER ALPHA WITH OXIA +1F73 ; NFKC_SCF; 03AD # L& GREEK SMALL LETTER EPSILON WITH OXIA +1F75 ; NFKC_SCF; 03AE # L& GREEK SMALL LETTER ETA WITH OXIA +1F77 ; NFKC_SCF; 03AF # L& GREEK SMALL LETTER IOTA WITH OXIA +1F79 ; NFKC_SCF; 03CC # L& GREEK SMALL LETTER OMICRON WITH OXIA +1F7B ; NFKC_SCF; 03CD # L& GREEK SMALL LETTER UPSILON WITH OXIA +1F7D ; NFKC_SCF; 03CE # L& GREEK SMALL LETTER OMEGA WITH OXIA +1F88 ; NFKC_SCF; 1F80 # L& GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI +1F89 ; NFKC_SCF; 1F81 # L& GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI +1F8A ; NFKC_SCF; 1F82 # L& GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F8B ; NFKC_SCF; 1F83 # L& GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F8C ; NFKC_SCF; 1F84 # L& GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F8D ; NFKC_SCF; 1F85 # L& GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F8E ; NFKC_SCF; 1F86 # L& GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F8F ; NFKC_SCF; 1F87 # L& GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1F98 ; NFKC_SCF; 1F90 # L& GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI +1F99 ; NFKC_SCF; 1F91 # L& GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI +1F9A ; NFKC_SCF; 1F92 # L& GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F9B ; NFKC_SCF; 1F93 # L& GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F9C ; NFKC_SCF; 1F94 # L& GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F9D ; NFKC_SCF; 1F95 # L& GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F9E ; NFKC_SCF; 1F96 # L& GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F9F ; NFKC_SCF; 1F97 # L& GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FA8 ; NFKC_SCF; 1FA0 # L& GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI +1FA9 ; NFKC_SCF; 1FA1 # L& GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI +1FAA ; NFKC_SCF; 1FA2 # L& GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1FAB ; NFKC_SCF; 1FA3 # L& GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1FAC ; NFKC_SCF; 1FA4 # L& GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1FAD ; NFKC_SCF; 1FA5 # L& GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1FAE ; NFKC_SCF; 1FA6 # L& GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1FAF ; NFKC_SCF; 1FA7 # L& GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FB8 ; NFKC_SCF; 1FB0 # L& GREEK CAPITAL LETTER ALPHA WITH VRACHY +1FB9 ; NFKC_SCF; 1FB1 # L& GREEK CAPITAL LETTER ALPHA WITH MACRON +1FBA ; NFKC_SCF; 1F70 # L& GREEK CAPITAL LETTER ALPHA WITH VARIA +1FBB ; NFKC_SCF; 03AC # L& GREEK CAPITAL LETTER ALPHA WITH OXIA +1FBC ; NFKC_SCF; 1FB3 # L& GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBD ; NFKC_SCF; 0020 0313 # Sk GREEK KORONIS +1FBE ; NFKC_SCF; 03B9 # L& GREEK PROSGEGRAMMENI +1FBF ; NFKC_SCF; 0020 0313 # Sk GREEK PSILI +1FC0 ; NFKC_SCF; 0020 0342 # Sk GREEK PERISPOMENI +1FC1 ; NFKC_SCF; 0020 0308 0342 # Sk GREEK DIALYTIKA AND PERISPOMENI +1FC8 ; NFKC_SCF; 1F72 # L& GREEK CAPITAL LETTER EPSILON WITH VARIA +1FC9 ; NFKC_SCF; 03AD # L& GREEK CAPITAL LETTER EPSILON WITH OXIA +1FCA ; NFKC_SCF; 1F74 # L& GREEK CAPITAL LETTER ETA WITH VARIA +1FCB ; NFKC_SCF; 03AE # L& GREEK CAPITAL LETTER ETA WITH OXIA +1FCC ; NFKC_SCF; 1FC3 # L& GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FCD ; NFKC_SCF; 0020 0313 0300 # Sk GREEK PSILI AND VARIA +1FCE ; NFKC_SCF; 0020 0313 0301 # Sk GREEK PSILI AND OXIA +1FCF ; NFKC_SCF; 0020 0313 0342 # Sk GREEK PSILI AND PERISPOMENI +1FD3 ; NFKC_SCF; 0390 # L& GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD8 ; NFKC_SCF; 1FD0 # L& GREEK CAPITAL LETTER IOTA WITH VRACHY +1FD9 ; NFKC_SCF; 1FD1 # L& GREEK CAPITAL LETTER IOTA WITH MACRON +1FDA ; NFKC_SCF; 1F76 # L& GREEK CAPITAL LETTER IOTA WITH VARIA +1FDB ; NFKC_SCF; 03AF # L& GREEK CAPITAL LETTER IOTA WITH OXIA +1FDD ; NFKC_SCF; 0020 0314 0300 # Sk GREEK DASIA AND VARIA +1FDE ; NFKC_SCF; 0020 0314 0301 # Sk GREEK DASIA AND OXIA +1FDF ; NFKC_SCF; 0020 0314 0342 # Sk GREEK DASIA AND PERISPOMENI +1FE3 ; NFKC_SCF; 03B0 # L& GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA +1FE8 ; NFKC_SCF; 1FE0 # L& GREEK CAPITAL LETTER UPSILON WITH VRACHY +1FE9 ; NFKC_SCF; 1FE1 # L& GREEK CAPITAL LETTER UPSILON WITH MACRON +1FEA ; NFKC_SCF; 1F7A # L& GREEK CAPITAL LETTER UPSILON WITH VARIA +1FEB ; NFKC_SCF; 03CD # L& GREEK CAPITAL LETTER UPSILON WITH OXIA +1FEC ; NFKC_SCF; 1FE5 # L& GREEK CAPITAL LETTER RHO WITH DASIA +1FED ; NFKC_SCF; 0020 0308 0300 # Sk GREEK DIALYTIKA AND VARIA +1FEE ; NFKC_SCF; 0020 0308 0301 # Sk GREEK DIALYTIKA AND OXIA +1FEF ; NFKC_SCF; 0060 # Sk GREEK VARIA +1FF8 ; NFKC_SCF; 1F78 # L& GREEK CAPITAL LETTER OMICRON WITH VARIA +1FF9 ; NFKC_SCF; 03CC # L& GREEK CAPITAL LETTER OMICRON WITH OXIA +1FFA ; NFKC_SCF; 1F7C # L& GREEK CAPITAL LETTER OMEGA WITH VARIA +1FFB ; NFKC_SCF; 03CE # L& GREEK CAPITAL LETTER OMEGA WITH OXIA +1FFC ; NFKC_SCF; 1FF3 # L& GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +1FFD ; NFKC_SCF; 0020 0301 # Sk GREEK OXIA +1FFE ; NFKC_SCF; 0020 0314 # Sk GREEK DASIA +2000..200A ; NFKC_SCF; 0020 # Zs [11] EN QUAD..HAIR SPACE +200B..200F ; NFKC_SCF; # Cf [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK +2011 ; NFKC_SCF; 2010 # Pd NON-BREAKING HYPHEN +2017 ; NFKC_SCF; 0020 0333 # Po DOUBLE LOW LINE +2024 ; NFKC_SCF; 002E # Po ONE DOT LEADER +2025 ; NFKC_SCF; 002E 002E # Po TWO DOT LEADER +2026 ; NFKC_SCF; 002E 002E 002E # Po HORIZONTAL ELLIPSIS +202A..202E ; NFKC_SCF; # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE +202F ; NFKC_SCF; 0020 # Zs NARROW NO-BREAK SPACE +2033 ; NFKC_SCF; 2032 2032 # Po DOUBLE PRIME +2034 ; NFKC_SCF; 2032 2032 2032 # Po TRIPLE PRIME +2036 ; NFKC_SCF; 2035 2035 # Po REVERSED DOUBLE PRIME +2037 ; NFKC_SCF; 2035 2035 2035 # Po REVERSED TRIPLE PRIME +203C ; NFKC_SCF; 0021 0021 # Po DOUBLE EXCLAMATION MARK +203E ; NFKC_SCF; 0020 0305 # Po OVERLINE +2047 ; NFKC_SCF; 003F 003F # Po DOUBLE QUESTION MARK +2048 ; NFKC_SCF; 003F 0021 # Po QUESTION EXCLAMATION MARK +2049 ; NFKC_SCF; 0021 003F # Po EXCLAMATION QUESTION MARK +2057 ; NFKC_SCF; 2032 2032 2032 2032 #Po QUADRUPLE PRIME +205F ; NFKC_SCF; 0020 # Zs MEDIUM MATHEMATICAL SPACE +2060..2064 ; NFKC_SCF; # Cf [5] WORD JOINER..INVISIBLE PLUS +2065 ; NFKC_SCF; # Cn +2066..206F ; NFKC_SCF; # Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES +2070 ; NFKC_SCF; 0030 # No SUPERSCRIPT ZERO +2071 ; NFKC_SCF; 0069 # Lm SUPERSCRIPT LATIN SMALL LETTER I +2074 ; NFKC_SCF; 0034 # No SUPERSCRIPT FOUR +2075 ; NFKC_SCF; 0035 # No SUPERSCRIPT FIVE +2076 ; NFKC_SCF; 0036 # No SUPERSCRIPT SIX +2077 ; NFKC_SCF; 0037 # No SUPERSCRIPT SEVEN +2078 ; NFKC_SCF; 0038 # No SUPERSCRIPT EIGHT +2079 ; NFKC_SCF; 0039 # No SUPERSCRIPT NINE +207A ; NFKC_SCF; 002B # Sm SUPERSCRIPT PLUS SIGN +207B ; NFKC_SCF; 2212 # Sm SUPERSCRIPT MINUS +207C ; NFKC_SCF; 003D # Sm SUPERSCRIPT EQUALS SIGN +207D ; NFKC_SCF; 0028 # Ps SUPERSCRIPT LEFT PARENTHESIS +207E ; NFKC_SCF; 0029 # Pe SUPERSCRIPT RIGHT PARENTHESIS +207F ; NFKC_SCF; 006E # Lm SUPERSCRIPT LATIN SMALL LETTER N +2080 ; NFKC_SCF; 0030 # No SUBSCRIPT ZERO +2081 ; NFKC_SCF; 0031 # No SUBSCRIPT ONE +2082 ; NFKC_SCF; 0032 # No SUBSCRIPT TWO +2083 ; NFKC_SCF; 0033 # No SUBSCRIPT THREE +2084 ; NFKC_SCF; 0034 # No SUBSCRIPT FOUR +2085 ; NFKC_SCF; 0035 # No SUBSCRIPT FIVE +2086 ; NFKC_SCF; 0036 # No SUBSCRIPT SIX +2087 ; NFKC_SCF; 0037 # No SUBSCRIPT SEVEN +2088 ; NFKC_SCF; 0038 # No SUBSCRIPT EIGHT +2089 ; NFKC_SCF; 0039 # No SUBSCRIPT NINE +208A ; NFKC_SCF; 002B # Sm SUBSCRIPT PLUS SIGN +208B ; NFKC_SCF; 2212 # Sm SUBSCRIPT MINUS +208C ; NFKC_SCF; 003D # Sm SUBSCRIPT EQUALS SIGN +208D ; NFKC_SCF; 0028 # Ps SUBSCRIPT LEFT PARENTHESIS +208E ; NFKC_SCF; 0029 # Pe SUBSCRIPT RIGHT PARENTHESIS +2090 ; NFKC_SCF; 0061 # Lm LATIN SUBSCRIPT SMALL LETTER A +2091 ; NFKC_SCF; 0065 # Lm LATIN SUBSCRIPT SMALL LETTER E +2092 ; NFKC_SCF; 006F # Lm LATIN SUBSCRIPT SMALL LETTER O +2093 ; NFKC_SCF; 0078 # Lm LATIN SUBSCRIPT SMALL LETTER X +2094 ; NFKC_SCF; 0259 # Lm LATIN SUBSCRIPT SMALL LETTER SCHWA +2095 ; NFKC_SCF; 0068 # Lm LATIN SUBSCRIPT SMALL LETTER H +2096 ; NFKC_SCF; 006B # Lm LATIN SUBSCRIPT SMALL LETTER K +2097 ; NFKC_SCF; 006C # Lm LATIN SUBSCRIPT SMALL LETTER L +2098 ; NFKC_SCF; 006D # Lm LATIN SUBSCRIPT SMALL LETTER M +2099 ; NFKC_SCF; 006E # Lm LATIN SUBSCRIPT SMALL LETTER N +209A ; NFKC_SCF; 0070 # Lm LATIN SUBSCRIPT SMALL LETTER P +209B ; NFKC_SCF; 0073 # Lm LATIN SUBSCRIPT SMALL LETTER S +209C ; NFKC_SCF; 0074 # Lm LATIN SUBSCRIPT SMALL LETTER T +20A8 ; NFKC_SCF; 0072 0073 # Sc RUPEE SIGN +2100 ; NFKC_SCF; 0061 002F 0063 # So ACCOUNT OF +2101 ; NFKC_SCF; 0061 002F 0073 # So ADDRESSED TO THE SUBJECT +2102 ; NFKC_SCF; 0063 # L& DOUBLE-STRUCK CAPITAL C +2103 ; NFKC_SCF; 00B0 0063 # So DEGREE CELSIUS +2105 ; NFKC_SCF; 0063 002F 006F # So CARE OF +2106 ; NFKC_SCF; 0063 002F 0075 # So CADA UNA +2107 ; NFKC_SCF; 025B # L& EULER CONSTANT +2109 ; NFKC_SCF; 00B0 0066 # So DEGREE FAHRENHEIT +210A ; NFKC_SCF; 0067 # L& SCRIPT SMALL G +210B..210E ; NFKC_SCF; 0068 # L& [4] SCRIPT CAPITAL H..PLANCK CONSTANT +210F ; NFKC_SCF; 0127 # L& PLANCK CONSTANT OVER TWO PI +2110..2111 ; NFKC_SCF; 0069 # L& [2] SCRIPT CAPITAL I..BLACK-LETTER CAPITAL I +2112..2113 ; NFKC_SCF; 006C # L& [2] SCRIPT CAPITAL L..SCRIPT SMALL L +2115 ; NFKC_SCF; 006E # L& DOUBLE-STRUCK CAPITAL N +2116 ; NFKC_SCF; 006E 006F # So NUMERO SIGN +2119 ; NFKC_SCF; 0070 # L& DOUBLE-STRUCK CAPITAL P +211A ; NFKC_SCF; 0071 # L& DOUBLE-STRUCK CAPITAL Q +211B..211D ; NFKC_SCF; 0072 # L& [3] SCRIPT CAPITAL R..DOUBLE-STRUCK CAPITAL R +2120 ; NFKC_SCF; 0073 006D # So SERVICE MARK +2121 ; NFKC_SCF; 0074 0065 006C # So TELEPHONE SIGN +2122 ; NFKC_SCF; 0074 006D # So TRADE MARK SIGN +2124 ; NFKC_SCF; 007A # L& DOUBLE-STRUCK CAPITAL Z +2126 ; NFKC_SCF; 03C9 # L& OHM SIGN +2128 ; NFKC_SCF; 007A # L& BLACK-LETTER CAPITAL Z +212A ; NFKC_SCF; 006B # L& KELVIN SIGN +212B ; NFKC_SCF; 00E5 # L& ANGSTROM SIGN +212C ; NFKC_SCF; 0062 # L& SCRIPT CAPITAL B +212D ; NFKC_SCF; 0063 # L& BLACK-LETTER CAPITAL C +212F..2130 ; NFKC_SCF; 0065 # L& [2] SCRIPT SMALL E..SCRIPT CAPITAL E +2131 ; NFKC_SCF; 0066 # L& SCRIPT CAPITAL F +2132 ; NFKC_SCF; 214E # L& TURNED CAPITAL F +2133 ; NFKC_SCF; 006D # L& SCRIPT CAPITAL M +2134 ; NFKC_SCF; 006F # L& SCRIPT SMALL O +2135 ; NFKC_SCF; 05D0 # Lo ALEF SYMBOL +2136 ; NFKC_SCF; 05D1 # Lo BET SYMBOL +2137 ; NFKC_SCF; 05D2 # Lo GIMEL SYMBOL +2138 ; NFKC_SCF; 05D3 # Lo DALET SYMBOL +2139 ; NFKC_SCF; 0069 # L& INFORMATION SOURCE +213B ; NFKC_SCF; 0066 0061 0078 # So FACSIMILE SIGN +213C ; NFKC_SCF; 03C0 # L& DOUBLE-STRUCK SMALL PI +213D..213E ; NFKC_SCF; 03B3 # L& [2] DOUBLE-STRUCK SMALL GAMMA..DOUBLE-STRUCK CAPITAL GAMMA +213F ; NFKC_SCF; 03C0 # L& DOUBLE-STRUCK CAPITAL PI +2140 ; NFKC_SCF; 2211 # Sm DOUBLE-STRUCK N-ARY SUMMATION +2145..2146 ; NFKC_SCF; 0064 # L& [2] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL D +2147 ; NFKC_SCF; 0065 # L& DOUBLE-STRUCK ITALIC SMALL E +2148 ; NFKC_SCF; 0069 # L& DOUBLE-STRUCK ITALIC SMALL I +2149 ; NFKC_SCF; 006A # L& DOUBLE-STRUCK ITALIC SMALL J +2150 ; NFKC_SCF; 0031 2044 0037 # No VULGAR FRACTION ONE SEVENTH +2151 ; NFKC_SCF; 0031 2044 0039 # No VULGAR FRACTION ONE NINTH +2152 ; NFKC_SCF; 0031 2044 0031 0030 #No VULGAR FRACTION ONE TENTH +2153 ; NFKC_SCF; 0031 2044 0033 # No VULGAR FRACTION ONE THIRD +2154 ; NFKC_SCF; 0032 2044 0033 # No VULGAR FRACTION TWO THIRDS +2155 ; NFKC_SCF; 0031 2044 0035 # No VULGAR FRACTION ONE FIFTH +2156 ; NFKC_SCF; 0032 2044 0035 # No VULGAR FRACTION TWO FIFTHS +2157 ; NFKC_SCF; 0033 2044 0035 # No VULGAR FRACTION THREE FIFTHS +2158 ; NFKC_SCF; 0034 2044 0035 # No VULGAR FRACTION FOUR FIFTHS +2159 ; NFKC_SCF; 0031 2044 0036 # No VULGAR FRACTION ONE SIXTH +215A ; NFKC_SCF; 0035 2044 0036 # No VULGAR FRACTION FIVE SIXTHS +215B ; NFKC_SCF; 0031 2044 0038 # No VULGAR FRACTION ONE EIGHTH +215C ; NFKC_SCF; 0033 2044 0038 # No VULGAR FRACTION THREE EIGHTHS +215D ; NFKC_SCF; 0035 2044 0038 # No VULGAR FRACTION FIVE EIGHTHS +215E ; NFKC_SCF; 0037 2044 0038 # No VULGAR FRACTION SEVEN EIGHTHS +215F ; NFKC_SCF; 0031 2044 # No FRACTION NUMERATOR ONE +2160 ; NFKC_SCF; 0069 # Nl ROMAN NUMERAL ONE +2161 ; NFKC_SCF; 0069 0069 # Nl ROMAN NUMERAL TWO +2162 ; NFKC_SCF; 0069 0069 0069 # Nl ROMAN NUMERAL THREE +2163 ; NFKC_SCF; 0069 0076 # Nl ROMAN NUMERAL FOUR +2164 ; NFKC_SCF; 0076 # Nl ROMAN NUMERAL FIVE +2165 ; NFKC_SCF; 0076 0069 # Nl ROMAN NUMERAL SIX +2166 ; NFKC_SCF; 0076 0069 0069 # Nl ROMAN NUMERAL SEVEN +2167 ; NFKC_SCF; 0076 0069 0069 0069 #Nl ROMAN NUMERAL EIGHT +2168 ; NFKC_SCF; 0069 0078 # Nl ROMAN NUMERAL NINE +2169 ; NFKC_SCF; 0078 # Nl ROMAN NUMERAL TEN +216A ; NFKC_SCF; 0078 0069 # Nl ROMAN NUMERAL ELEVEN +216B ; NFKC_SCF; 0078 0069 0069 # Nl ROMAN NUMERAL TWELVE +216C ; NFKC_SCF; 006C # Nl ROMAN NUMERAL FIFTY +216D ; NFKC_SCF; 0063 # Nl ROMAN NUMERAL ONE HUNDRED +216E ; NFKC_SCF; 0064 # Nl ROMAN NUMERAL FIVE HUNDRED +216F ; NFKC_SCF; 006D # Nl ROMAN NUMERAL ONE THOUSAND +2170 ; NFKC_SCF; 0069 # Nl SMALL ROMAN NUMERAL ONE +2171 ; NFKC_SCF; 0069 0069 # Nl SMALL ROMAN NUMERAL TWO +2172 ; NFKC_SCF; 0069 0069 0069 # Nl SMALL ROMAN NUMERAL THREE +2173 ; NFKC_SCF; 0069 0076 # Nl SMALL ROMAN NUMERAL FOUR +2174 ; NFKC_SCF; 0076 # Nl SMALL ROMAN NUMERAL FIVE +2175 ; NFKC_SCF; 0076 0069 # Nl SMALL ROMAN NUMERAL SIX +2176 ; NFKC_SCF; 0076 0069 0069 # Nl SMALL ROMAN NUMERAL SEVEN +2177 ; NFKC_SCF; 0076 0069 0069 0069 #Nl SMALL ROMAN NUMERAL EIGHT +2178 ; NFKC_SCF; 0069 0078 # Nl SMALL ROMAN NUMERAL NINE +2179 ; NFKC_SCF; 0078 # Nl SMALL ROMAN NUMERAL TEN +217A ; NFKC_SCF; 0078 0069 # Nl SMALL ROMAN NUMERAL ELEVEN +217B ; NFKC_SCF; 0078 0069 0069 # Nl SMALL ROMAN NUMERAL TWELVE +217C ; NFKC_SCF; 006C # Nl SMALL ROMAN NUMERAL FIFTY +217D ; NFKC_SCF; 0063 # Nl SMALL ROMAN NUMERAL ONE HUNDRED +217E ; NFKC_SCF; 0064 # Nl SMALL ROMAN NUMERAL FIVE HUNDRED +217F ; NFKC_SCF; 006D # Nl SMALL ROMAN NUMERAL ONE THOUSAND +2183 ; NFKC_SCF; 2184 # L& ROMAN NUMERAL REVERSED ONE HUNDRED +2189 ; NFKC_SCF; 0030 2044 0033 # No VULGAR FRACTION ZERO THIRDS +222C ; NFKC_SCF; 222B 222B # Sm DOUBLE INTEGRAL +222D ; NFKC_SCF; 222B 222B 222B # Sm TRIPLE INTEGRAL +222F ; NFKC_SCF; 222E 222E # Sm SURFACE INTEGRAL +2230 ; NFKC_SCF; 222E 222E 222E # Sm VOLUME INTEGRAL +2329 ; NFKC_SCF; 3008 # Ps LEFT-POINTING ANGLE BRACKET +232A ; NFKC_SCF; 3009 # Pe RIGHT-POINTING ANGLE BRACKET +2460 ; NFKC_SCF; 0031 # No CIRCLED DIGIT ONE +2461 ; NFKC_SCF; 0032 # No CIRCLED DIGIT TWO +2462 ; NFKC_SCF; 0033 # No CIRCLED DIGIT THREE +2463 ; NFKC_SCF; 0034 # No CIRCLED DIGIT FOUR +2464 ; NFKC_SCF; 0035 # No CIRCLED DIGIT FIVE +2465 ; NFKC_SCF; 0036 # No CIRCLED DIGIT SIX +2466 ; NFKC_SCF; 0037 # No CIRCLED DIGIT SEVEN +2467 ; NFKC_SCF; 0038 # No CIRCLED DIGIT EIGHT +2468 ; NFKC_SCF; 0039 # No CIRCLED DIGIT NINE +2469 ; NFKC_SCF; 0031 0030 # No CIRCLED NUMBER TEN +246A ; NFKC_SCF; 0031 0031 # No CIRCLED NUMBER ELEVEN +246B ; NFKC_SCF; 0031 0032 # No CIRCLED NUMBER TWELVE +246C ; NFKC_SCF; 0031 0033 # No CIRCLED NUMBER THIRTEEN +246D ; NFKC_SCF; 0031 0034 # No CIRCLED NUMBER FOURTEEN +246E ; NFKC_SCF; 0031 0035 # No CIRCLED NUMBER FIFTEEN +246F ; NFKC_SCF; 0031 0036 # No CIRCLED NUMBER SIXTEEN +2470 ; NFKC_SCF; 0031 0037 # No CIRCLED NUMBER SEVENTEEN +2471 ; NFKC_SCF; 0031 0038 # No CIRCLED NUMBER EIGHTEEN +2472 ; NFKC_SCF; 0031 0039 # No CIRCLED NUMBER NINETEEN +2473 ; NFKC_SCF; 0032 0030 # No CIRCLED NUMBER TWENTY +2474 ; NFKC_SCF; 0028 0031 0029 # No PARENTHESIZED DIGIT ONE +2475 ; NFKC_SCF; 0028 0032 0029 # No PARENTHESIZED DIGIT TWO +2476 ; NFKC_SCF; 0028 0033 0029 # No PARENTHESIZED DIGIT THREE +2477 ; NFKC_SCF; 0028 0034 0029 # No PARENTHESIZED DIGIT FOUR +2478 ; NFKC_SCF; 0028 0035 0029 # No PARENTHESIZED DIGIT FIVE +2479 ; NFKC_SCF; 0028 0036 0029 # No PARENTHESIZED DIGIT SIX +247A ; NFKC_SCF; 0028 0037 0029 # No PARENTHESIZED DIGIT SEVEN +247B ; NFKC_SCF; 0028 0038 0029 # No PARENTHESIZED DIGIT EIGHT +247C ; NFKC_SCF; 0028 0039 0029 # No PARENTHESIZED DIGIT NINE +247D ; NFKC_SCF; 0028 0031 0030 0029 #No PARENTHESIZED NUMBER TEN +247E ; NFKC_SCF; 0028 0031 0031 0029 #No PARENTHESIZED NUMBER ELEVEN +247F ; NFKC_SCF; 0028 0031 0032 0029 #No PARENTHESIZED NUMBER TWELVE +2480 ; NFKC_SCF; 0028 0031 0033 0029 #No PARENTHESIZED NUMBER THIRTEEN +2481 ; NFKC_SCF; 0028 0031 0034 0029 #No PARENTHESIZED NUMBER FOURTEEN +2482 ; NFKC_SCF; 0028 0031 0035 0029 #No PARENTHESIZED NUMBER FIFTEEN +2483 ; NFKC_SCF; 0028 0031 0036 0029 #No PARENTHESIZED NUMBER SIXTEEN +2484 ; NFKC_SCF; 0028 0031 0037 0029 #No PARENTHESIZED NUMBER SEVENTEEN +2485 ; NFKC_SCF; 0028 0031 0038 0029 #No PARENTHESIZED NUMBER EIGHTEEN +2486 ; NFKC_SCF; 0028 0031 0039 0029 #No PARENTHESIZED NUMBER NINETEEN +2487 ; NFKC_SCF; 0028 0032 0030 0029 #No PARENTHESIZED NUMBER TWENTY +2488 ; NFKC_SCF; 0031 002E # No DIGIT ONE FULL STOP +2489 ; NFKC_SCF; 0032 002E # No DIGIT TWO FULL STOP +248A ; NFKC_SCF; 0033 002E # No DIGIT THREE FULL STOP +248B ; NFKC_SCF; 0034 002E # No DIGIT FOUR FULL STOP +248C ; NFKC_SCF; 0035 002E # No DIGIT FIVE FULL STOP +248D ; NFKC_SCF; 0036 002E # No DIGIT SIX FULL STOP +248E ; NFKC_SCF; 0037 002E # No DIGIT SEVEN FULL STOP +248F ; NFKC_SCF; 0038 002E # No DIGIT EIGHT FULL STOP +2490 ; NFKC_SCF; 0039 002E # No DIGIT NINE FULL STOP +2491 ; NFKC_SCF; 0031 0030 002E # No NUMBER TEN FULL STOP +2492 ; NFKC_SCF; 0031 0031 002E # No NUMBER ELEVEN FULL STOP +2493 ; NFKC_SCF; 0031 0032 002E # No NUMBER TWELVE FULL STOP +2494 ; NFKC_SCF; 0031 0033 002E # No NUMBER THIRTEEN FULL STOP +2495 ; NFKC_SCF; 0031 0034 002E # No NUMBER FOURTEEN FULL STOP +2496 ; NFKC_SCF; 0031 0035 002E # No NUMBER FIFTEEN FULL STOP +2497 ; NFKC_SCF; 0031 0036 002E # No NUMBER SIXTEEN FULL STOP +2498 ; NFKC_SCF; 0031 0037 002E # No NUMBER SEVENTEEN FULL STOP +2499 ; NFKC_SCF; 0031 0038 002E # No NUMBER EIGHTEEN FULL STOP +249A ; NFKC_SCF; 0031 0039 002E # No NUMBER NINETEEN FULL STOP +249B ; NFKC_SCF; 0032 0030 002E # No NUMBER TWENTY FULL STOP +249C ; NFKC_SCF; 0028 0061 0029 # So PARENTHESIZED LATIN SMALL LETTER A +249D ; NFKC_SCF; 0028 0062 0029 # So PARENTHESIZED LATIN SMALL LETTER B +249E ; NFKC_SCF; 0028 0063 0029 # So PARENTHESIZED LATIN SMALL LETTER C +249F ; NFKC_SCF; 0028 0064 0029 # So PARENTHESIZED LATIN SMALL LETTER D +24A0 ; NFKC_SCF; 0028 0065 0029 # So PARENTHESIZED LATIN SMALL LETTER E +24A1 ; NFKC_SCF; 0028 0066 0029 # So PARENTHESIZED LATIN SMALL LETTER F +24A2 ; NFKC_SCF; 0028 0067 0029 # So PARENTHESIZED LATIN SMALL LETTER G +24A3 ; NFKC_SCF; 0028 0068 0029 # So PARENTHESIZED LATIN SMALL LETTER H +24A4 ; NFKC_SCF; 0028 0069 0029 # So PARENTHESIZED LATIN SMALL LETTER I +24A5 ; NFKC_SCF; 0028 006A 0029 # So PARENTHESIZED LATIN SMALL LETTER J +24A6 ; NFKC_SCF; 0028 006B 0029 # So PARENTHESIZED LATIN SMALL LETTER K +24A7 ; NFKC_SCF; 0028 006C 0029 # So PARENTHESIZED LATIN SMALL LETTER L +24A8 ; NFKC_SCF; 0028 006D 0029 # So PARENTHESIZED LATIN SMALL LETTER M +24A9 ; NFKC_SCF; 0028 006E 0029 # So PARENTHESIZED LATIN SMALL LETTER N +24AA ; NFKC_SCF; 0028 006F 0029 # So PARENTHESIZED LATIN SMALL LETTER O +24AB ; NFKC_SCF; 0028 0070 0029 # So PARENTHESIZED LATIN SMALL LETTER P +24AC ; NFKC_SCF; 0028 0071 0029 # So PARENTHESIZED LATIN SMALL LETTER Q +24AD ; NFKC_SCF; 0028 0072 0029 # So PARENTHESIZED LATIN SMALL LETTER R +24AE ; NFKC_SCF; 0028 0073 0029 # So PARENTHESIZED LATIN SMALL LETTER S +24AF ; NFKC_SCF; 0028 0074 0029 # So PARENTHESIZED LATIN SMALL LETTER T +24B0 ; NFKC_SCF; 0028 0075 0029 # So PARENTHESIZED LATIN SMALL LETTER U +24B1 ; NFKC_SCF; 0028 0076 0029 # So PARENTHESIZED LATIN SMALL LETTER V +24B2 ; NFKC_SCF; 0028 0077 0029 # So PARENTHESIZED LATIN SMALL LETTER W +24B3 ; NFKC_SCF; 0028 0078 0029 # So PARENTHESIZED LATIN SMALL LETTER X +24B4 ; NFKC_SCF; 0028 0079 0029 # So PARENTHESIZED LATIN SMALL LETTER Y +24B5 ; NFKC_SCF; 0028 007A 0029 # So PARENTHESIZED LATIN SMALL LETTER Z +24B6 ; NFKC_SCF; 0061 # So CIRCLED LATIN CAPITAL LETTER A +24B7 ; NFKC_SCF; 0062 # So CIRCLED LATIN CAPITAL LETTER B +24B8 ; NFKC_SCF; 0063 # So CIRCLED LATIN CAPITAL LETTER C +24B9 ; NFKC_SCF; 0064 # So CIRCLED LATIN CAPITAL LETTER D +24BA ; NFKC_SCF; 0065 # So CIRCLED LATIN CAPITAL LETTER E +24BB ; NFKC_SCF; 0066 # So CIRCLED LATIN CAPITAL LETTER F +24BC ; NFKC_SCF; 0067 # So CIRCLED LATIN CAPITAL LETTER G +24BD ; NFKC_SCF; 0068 # So CIRCLED LATIN CAPITAL LETTER H +24BE ; NFKC_SCF; 0069 # So CIRCLED LATIN CAPITAL LETTER I +24BF ; NFKC_SCF; 006A # So CIRCLED LATIN CAPITAL LETTER J +24C0 ; NFKC_SCF; 006B # So CIRCLED LATIN CAPITAL LETTER K +24C1 ; NFKC_SCF; 006C # So CIRCLED LATIN CAPITAL LETTER L +24C2 ; NFKC_SCF; 006D # So CIRCLED LATIN CAPITAL LETTER M +24C3 ; NFKC_SCF; 006E # So CIRCLED LATIN CAPITAL LETTER N +24C4 ; NFKC_SCF; 006F # So CIRCLED LATIN CAPITAL LETTER O +24C5 ; NFKC_SCF; 0070 # So CIRCLED LATIN CAPITAL LETTER P +24C6 ; NFKC_SCF; 0071 # So CIRCLED LATIN CAPITAL LETTER Q +24C7 ; NFKC_SCF; 0072 # So CIRCLED LATIN CAPITAL LETTER R +24C8 ; NFKC_SCF; 0073 # So CIRCLED LATIN CAPITAL LETTER S +24C9 ; NFKC_SCF; 0074 # So CIRCLED LATIN CAPITAL LETTER T +24CA ; NFKC_SCF; 0075 # So CIRCLED LATIN CAPITAL LETTER U +24CB ; NFKC_SCF; 0076 # So CIRCLED LATIN CAPITAL LETTER V +24CC ; NFKC_SCF; 0077 # So CIRCLED LATIN CAPITAL LETTER W +24CD ; NFKC_SCF; 0078 # So CIRCLED LATIN CAPITAL LETTER X +24CE ; NFKC_SCF; 0079 # So CIRCLED LATIN CAPITAL LETTER Y +24CF ; NFKC_SCF; 007A # So CIRCLED LATIN CAPITAL LETTER Z +24D0 ; NFKC_SCF; 0061 # So CIRCLED LATIN SMALL LETTER A +24D1 ; NFKC_SCF; 0062 # So CIRCLED LATIN SMALL LETTER B +24D2 ; NFKC_SCF; 0063 # So CIRCLED LATIN SMALL LETTER C +24D3 ; NFKC_SCF; 0064 # So CIRCLED LATIN SMALL LETTER D +24D4 ; NFKC_SCF; 0065 # So CIRCLED LATIN SMALL LETTER E +24D5 ; NFKC_SCF; 0066 # So CIRCLED LATIN SMALL LETTER F +24D6 ; NFKC_SCF; 0067 # So CIRCLED LATIN SMALL LETTER G +24D7 ; NFKC_SCF; 0068 # So CIRCLED LATIN SMALL LETTER H +24D8 ; NFKC_SCF; 0069 # So CIRCLED LATIN SMALL LETTER I +24D9 ; NFKC_SCF; 006A # So CIRCLED LATIN SMALL LETTER J +24DA ; NFKC_SCF; 006B # So CIRCLED LATIN SMALL LETTER K +24DB ; NFKC_SCF; 006C # So CIRCLED LATIN SMALL LETTER L +24DC ; NFKC_SCF; 006D # So CIRCLED LATIN SMALL LETTER M +24DD ; NFKC_SCF; 006E # So CIRCLED LATIN SMALL LETTER N +24DE ; NFKC_SCF; 006F # So CIRCLED LATIN SMALL LETTER O +24DF ; NFKC_SCF; 0070 # So CIRCLED LATIN SMALL LETTER P +24E0 ; NFKC_SCF; 0071 # So CIRCLED LATIN SMALL LETTER Q +24E1 ; NFKC_SCF; 0072 # So CIRCLED LATIN SMALL LETTER R +24E2 ; NFKC_SCF; 0073 # So CIRCLED LATIN SMALL LETTER S +24E3 ; NFKC_SCF; 0074 # So CIRCLED LATIN SMALL LETTER T +24E4 ; NFKC_SCF; 0075 # So CIRCLED LATIN SMALL LETTER U +24E5 ; NFKC_SCF; 0076 # So CIRCLED LATIN SMALL LETTER V +24E6 ; NFKC_SCF; 0077 # So CIRCLED LATIN SMALL LETTER W +24E7 ; NFKC_SCF; 0078 # So CIRCLED LATIN SMALL LETTER X +24E8 ; NFKC_SCF; 0079 # So CIRCLED LATIN SMALL LETTER Y +24E9 ; NFKC_SCF; 007A # So CIRCLED LATIN SMALL LETTER Z +24EA ; NFKC_SCF; 0030 # No CIRCLED DIGIT ZERO +2A0C ; NFKC_SCF; 222B 222B 222B 222B #Sm QUADRUPLE INTEGRAL OPERATOR +2A74 ; NFKC_SCF; 003A 003A 003D # Sm DOUBLE COLON EQUAL +2A75 ; NFKC_SCF; 003D 003D # Sm TWO CONSECUTIVE EQUALS SIGNS +2A76 ; NFKC_SCF; 003D 003D 003D # Sm THREE CONSECUTIVE EQUALS SIGNS +2ADC ; NFKC_SCF; 2ADD 0338 # Sm FORKING +2C00 ; NFKC_SCF; 2C30 # L& GLAGOLITIC CAPITAL LETTER AZU +2C01 ; NFKC_SCF; 2C31 # L& GLAGOLITIC CAPITAL LETTER BUKY +2C02 ; NFKC_SCF; 2C32 # L& GLAGOLITIC CAPITAL LETTER VEDE +2C03 ; NFKC_SCF; 2C33 # L& GLAGOLITIC CAPITAL LETTER GLAGOLI +2C04 ; NFKC_SCF; 2C34 # L& GLAGOLITIC CAPITAL LETTER DOBRO +2C05 ; NFKC_SCF; 2C35 # L& GLAGOLITIC CAPITAL LETTER YESTU +2C06 ; NFKC_SCF; 2C36 # L& GLAGOLITIC CAPITAL LETTER ZHIVETE +2C07 ; NFKC_SCF; 2C37 # L& GLAGOLITIC CAPITAL LETTER DZELO +2C08 ; NFKC_SCF; 2C38 # L& GLAGOLITIC CAPITAL LETTER ZEMLJA +2C09 ; NFKC_SCF; 2C39 # L& GLAGOLITIC CAPITAL LETTER IZHE +2C0A ; NFKC_SCF; 2C3A # L& GLAGOLITIC CAPITAL LETTER INITIAL IZHE +2C0B ; NFKC_SCF; 2C3B # L& GLAGOLITIC CAPITAL LETTER I +2C0C ; NFKC_SCF; 2C3C # L& GLAGOLITIC CAPITAL LETTER DJERVI +2C0D ; NFKC_SCF; 2C3D # L& GLAGOLITIC CAPITAL LETTER KAKO +2C0E ; NFKC_SCF; 2C3E # L& GLAGOLITIC CAPITAL LETTER LJUDIJE +2C0F ; NFKC_SCF; 2C3F # L& GLAGOLITIC CAPITAL LETTER MYSLITE +2C10 ; NFKC_SCF; 2C40 # L& GLAGOLITIC CAPITAL LETTER NASHI +2C11 ; NFKC_SCF; 2C41 # L& GLAGOLITIC CAPITAL LETTER ONU +2C12 ; NFKC_SCF; 2C42 # L& GLAGOLITIC CAPITAL LETTER POKOJI +2C13 ; NFKC_SCF; 2C43 # L& GLAGOLITIC CAPITAL LETTER RITSI +2C14 ; NFKC_SCF; 2C44 # L& GLAGOLITIC CAPITAL LETTER SLOVO +2C15 ; NFKC_SCF; 2C45 # L& GLAGOLITIC CAPITAL LETTER TVRIDO +2C16 ; NFKC_SCF; 2C46 # L& GLAGOLITIC CAPITAL LETTER UKU +2C17 ; NFKC_SCF; 2C47 # L& GLAGOLITIC CAPITAL LETTER FRITU +2C18 ; NFKC_SCF; 2C48 # L& GLAGOLITIC CAPITAL LETTER HERU +2C19 ; NFKC_SCF; 2C49 # L& GLAGOLITIC CAPITAL LETTER OTU +2C1A ; NFKC_SCF; 2C4A # L& GLAGOLITIC CAPITAL LETTER PE +2C1B ; NFKC_SCF; 2C4B # L& GLAGOLITIC CAPITAL LETTER SHTA +2C1C ; NFKC_SCF; 2C4C # L& GLAGOLITIC CAPITAL LETTER TSI +2C1D ; NFKC_SCF; 2C4D # L& GLAGOLITIC CAPITAL LETTER CHRIVI +2C1E ; NFKC_SCF; 2C4E # L& GLAGOLITIC CAPITAL LETTER SHA +2C1F ; NFKC_SCF; 2C4F # L& GLAGOLITIC CAPITAL LETTER YERU +2C20 ; NFKC_SCF; 2C50 # L& GLAGOLITIC CAPITAL LETTER YERI +2C21 ; NFKC_SCF; 2C51 # L& GLAGOLITIC CAPITAL LETTER YATI +2C22 ; NFKC_SCF; 2C52 # L& GLAGOLITIC CAPITAL LETTER SPIDERY HA +2C23 ; NFKC_SCF; 2C53 # L& GLAGOLITIC CAPITAL LETTER YU +2C24 ; NFKC_SCF; 2C54 # L& GLAGOLITIC CAPITAL LETTER SMALL YUS +2C25 ; NFKC_SCF; 2C55 # L& GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL +2C26 ; NFKC_SCF; 2C56 # L& GLAGOLITIC CAPITAL LETTER YO +2C27 ; NFKC_SCF; 2C57 # L& GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS +2C28 ; NFKC_SCF; 2C58 # L& GLAGOLITIC CAPITAL LETTER BIG YUS +2C29 ; NFKC_SCF; 2C59 # L& GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS +2C2A ; NFKC_SCF; 2C5A # L& GLAGOLITIC CAPITAL LETTER FITA +2C2B ; NFKC_SCF; 2C5B # L& GLAGOLITIC CAPITAL LETTER IZHITSA +2C2C ; NFKC_SCF; 2C5C # L& GLAGOLITIC CAPITAL LETTER SHTAPIC +2C2D ; NFKC_SCF; 2C5D # L& GLAGOLITIC CAPITAL LETTER TROKUTASTI A +2C2E ; NFKC_SCF; 2C5E # L& GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +2C2F ; NFKC_SCF; 2C5F # L& GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI +2C60 ; NFKC_SCF; 2C61 # L& LATIN CAPITAL LETTER L WITH DOUBLE BAR +2C62 ; NFKC_SCF; 026B # L& LATIN CAPITAL LETTER L WITH MIDDLE TILDE +2C63 ; NFKC_SCF; 1D7D # L& LATIN CAPITAL LETTER P WITH STROKE +2C64 ; NFKC_SCF; 027D # L& LATIN CAPITAL LETTER R WITH TAIL +2C67 ; NFKC_SCF; 2C68 # L& LATIN CAPITAL LETTER H WITH DESCENDER +2C69 ; NFKC_SCF; 2C6A # L& LATIN CAPITAL LETTER K WITH DESCENDER +2C6B ; NFKC_SCF; 2C6C # L& LATIN CAPITAL LETTER Z WITH DESCENDER +2C6D ; NFKC_SCF; 0251 # L& LATIN CAPITAL LETTER ALPHA +2C6E ; NFKC_SCF; 0271 # L& LATIN CAPITAL LETTER M WITH HOOK +2C6F ; NFKC_SCF; 0250 # L& LATIN CAPITAL LETTER TURNED A +2C70 ; NFKC_SCF; 0252 # L& LATIN CAPITAL LETTER TURNED ALPHA +2C72 ; NFKC_SCF; 2C73 # L& LATIN CAPITAL LETTER W WITH HOOK +2C75 ; NFKC_SCF; 2C76 # L& LATIN CAPITAL LETTER HALF H +2C7C ; NFKC_SCF; 006A # Lm LATIN SUBSCRIPT SMALL LETTER J +2C7D ; NFKC_SCF; 0076 # Lm MODIFIER LETTER CAPITAL V +2C7E ; NFKC_SCF; 023F # L& LATIN CAPITAL LETTER S WITH SWASH TAIL +2C7F ; NFKC_SCF; 0240 # L& LATIN CAPITAL LETTER Z WITH SWASH TAIL +2C80 ; NFKC_SCF; 2C81 # L& COPTIC CAPITAL LETTER ALFA +2C82 ; NFKC_SCF; 2C83 # L& COPTIC CAPITAL LETTER VIDA +2C84 ; NFKC_SCF; 2C85 # L& COPTIC CAPITAL LETTER GAMMA +2C86 ; NFKC_SCF; 2C87 # L& COPTIC CAPITAL LETTER DALDA +2C88 ; NFKC_SCF; 2C89 # L& COPTIC CAPITAL LETTER EIE +2C8A ; NFKC_SCF; 2C8B # L& COPTIC CAPITAL LETTER SOU +2C8C ; NFKC_SCF; 2C8D # L& COPTIC CAPITAL LETTER ZATA +2C8E ; NFKC_SCF; 2C8F # L& COPTIC CAPITAL LETTER HATE +2C90 ; NFKC_SCF; 2C91 # L& COPTIC CAPITAL LETTER THETHE +2C92 ; NFKC_SCF; 2C93 # L& COPTIC CAPITAL LETTER IAUDA +2C94 ; NFKC_SCF; 2C95 # L& COPTIC CAPITAL LETTER KAPA +2C96 ; NFKC_SCF; 2C97 # L& COPTIC CAPITAL LETTER LAULA +2C98 ; NFKC_SCF; 2C99 # L& COPTIC CAPITAL LETTER MI +2C9A ; NFKC_SCF; 2C9B # L& COPTIC CAPITAL LETTER NI +2C9C ; NFKC_SCF; 2C9D # L& COPTIC CAPITAL LETTER KSI +2C9E ; NFKC_SCF; 2C9F # L& COPTIC CAPITAL LETTER O +2CA0 ; NFKC_SCF; 2CA1 # L& COPTIC CAPITAL LETTER PI +2CA2 ; NFKC_SCF; 2CA3 # L& COPTIC CAPITAL LETTER RO +2CA4 ; NFKC_SCF; 2CA5 # L& COPTIC CAPITAL LETTER SIMA +2CA6 ; NFKC_SCF; 2CA7 # L& COPTIC CAPITAL LETTER TAU +2CA8 ; NFKC_SCF; 2CA9 # L& COPTIC CAPITAL LETTER UA +2CAA ; NFKC_SCF; 2CAB # L& COPTIC CAPITAL LETTER FI +2CAC ; NFKC_SCF; 2CAD # L& COPTIC CAPITAL LETTER KHI +2CAE ; NFKC_SCF; 2CAF # L& COPTIC CAPITAL LETTER PSI +2CB0 ; NFKC_SCF; 2CB1 # L& COPTIC CAPITAL LETTER OOU +2CB2 ; NFKC_SCF; 2CB3 # L& COPTIC CAPITAL LETTER DIALECT-P ALEF +2CB4 ; NFKC_SCF; 2CB5 # L& COPTIC CAPITAL LETTER OLD COPTIC AIN +2CB6 ; NFKC_SCF; 2CB7 # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE +2CB8 ; NFKC_SCF; 2CB9 # L& COPTIC CAPITAL LETTER DIALECT-P KAPA +2CBA ; NFKC_SCF; 2CBB # L& COPTIC CAPITAL LETTER DIALECT-P NI +2CBC ; NFKC_SCF; 2CBD # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI +2CBE ; NFKC_SCF; 2CBF # L& COPTIC CAPITAL LETTER OLD COPTIC OOU +2CC0 ; NFKC_SCF; 2CC1 # L& COPTIC CAPITAL LETTER SAMPI +2CC2 ; NFKC_SCF; 2CC3 # L& COPTIC CAPITAL LETTER CROSSED SHEI +2CC4 ; NFKC_SCF; 2CC5 # L& COPTIC CAPITAL LETTER OLD COPTIC SHEI +2CC6 ; NFKC_SCF; 2CC7 # L& COPTIC CAPITAL LETTER OLD COPTIC ESH +2CC8 ; NFKC_SCF; 2CC9 # L& COPTIC CAPITAL LETTER AKHMIMIC KHEI +2CCA ; NFKC_SCF; 2CCB # L& COPTIC CAPITAL LETTER DIALECT-P HORI +2CCC ; NFKC_SCF; 2CCD # L& COPTIC CAPITAL LETTER OLD COPTIC HORI +2CCE ; NFKC_SCF; 2CCF # L& COPTIC CAPITAL LETTER OLD COPTIC HA +2CD0 ; NFKC_SCF; 2CD1 # L& COPTIC CAPITAL LETTER L-SHAPED HA +2CD2 ; NFKC_SCF; 2CD3 # L& COPTIC CAPITAL LETTER OLD COPTIC HEI +2CD4 ; NFKC_SCF; 2CD5 # L& COPTIC CAPITAL LETTER OLD COPTIC HAT +2CD6 ; NFKC_SCF; 2CD7 # L& COPTIC CAPITAL LETTER OLD COPTIC GANGIA +2CD8 ; NFKC_SCF; 2CD9 # L& COPTIC CAPITAL LETTER OLD COPTIC DJA +2CDA ; NFKC_SCF; 2CDB # L& COPTIC CAPITAL LETTER OLD COPTIC SHIMA +2CDC ; NFKC_SCF; 2CDD # L& COPTIC CAPITAL LETTER OLD NUBIAN SHIMA +2CDE ; NFKC_SCF; 2CDF # L& COPTIC CAPITAL LETTER OLD NUBIAN NGI +2CE0 ; NFKC_SCF; 2CE1 # L& COPTIC CAPITAL LETTER OLD NUBIAN NYI +2CE2 ; NFKC_SCF; 2CE3 # L& COPTIC CAPITAL LETTER OLD NUBIAN WAU +2CEB ; NFKC_SCF; 2CEC # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI +2CED ; NFKC_SCF; 2CEE # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA +2CF2 ; NFKC_SCF; 2CF3 # L& COPTIC CAPITAL LETTER BOHAIRIC KHEI +2D6F ; NFKC_SCF; 2D61 # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK +2E9F ; NFKC_SCF; 6BCD # So CJK RADICAL MOTHER +2EF3 ; NFKC_SCF; 9F9F # So CJK RADICAL C-SIMPLIFIED TURTLE +2F00 ; NFKC_SCF; 4E00 # So KANGXI RADICAL ONE +2F01 ; NFKC_SCF; 4E28 # So KANGXI RADICAL LINE +2F02 ; NFKC_SCF; 4E36 # So KANGXI RADICAL DOT +2F03 ; NFKC_SCF; 4E3F # So KANGXI RADICAL SLASH +2F04 ; NFKC_SCF; 4E59 # So KANGXI RADICAL SECOND +2F05 ; NFKC_SCF; 4E85 # So KANGXI RADICAL HOOK +2F06 ; NFKC_SCF; 4E8C # So KANGXI RADICAL TWO +2F07 ; NFKC_SCF; 4EA0 # So KANGXI RADICAL LID +2F08 ; NFKC_SCF; 4EBA # So KANGXI RADICAL MAN +2F09 ; NFKC_SCF; 513F # So KANGXI RADICAL LEGS +2F0A ; NFKC_SCF; 5165 # So KANGXI RADICAL ENTER +2F0B ; NFKC_SCF; 516B # So KANGXI RADICAL EIGHT +2F0C ; NFKC_SCF; 5182 # So KANGXI RADICAL DOWN BOX +2F0D ; NFKC_SCF; 5196 # So KANGXI RADICAL COVER +2F0E ; NFKC_SCF; 51AB # So KANGXI RADICAL ICE +2F0F ; NFKC_SCF; 51E0 # So KANGXI RADICAL TABLE +2F10 ; NFKC_SCF; 51F5 # So KANGXI RADICAL OPEN BOX +2F11 ; NFKC_SCF; 5200 # So KANGXI RADICAL KNIFE +2F12 ; NFKC_SCF; 529B # So KANGXI RADICAL POWER +2F13 ; NFKC_SCF; 52F9 # So KANGXI RADICAL WRAP +2F14 ; NFKC_SCF; 5315 # So KANGXI RADICAL SPOON +2F15 ; NFKC_SCF; 531A # So KANGXI RADICAL RIGHT OPEN BOX +2F16 ; NFKC_SCF; 5338 # So KANGXI RADICAL HIDING ENCLOSURE +2F17 ; NFKC_SCF; 5341 # So KANGXI RADICAL TEN +2F18 ; NFKC_SCF; 535C # So KANGXI RADICAL DIVINATION +2F19 ; NFKC_SCF; 5369 # So KANGXI RADICAL SEAL +2F1A ; NFKC_SCF; 5382 # So KANGXI RADICAL CLIFF +2F1B ; NFKC_SCF; 53B6 # So KANGXI RADICAL PRIVATE +2F1C ; NFKC_SCF; 53C8 # So KANGXI RADICAL AGAIN +2F1D ; NFKC_SCF; 53E3 # So KANGXI RADICAL MOUTH +2F1E ; NFKC_SCF; 56D7 # So KANGXI RADICAL ENCLOSURE +2F1F ; NFKC_SCF; 571F # So KANGXI RADICAL EARTH +2F20 ; NFKC_SCF; 58EB # So KANGXI RADICAL SCHOLAR +2F21 ; NFKC_SCF; 5902 # So KANGXI RADICAL GO +2F22 ; NFKC_SCF; 590A # So KANGXI RADICAL GO SLOWLY +2F23 ; NFKC_SCF; 5915 # So KANGXI RADICAL EVENING +2F24 ; NFKC_SCF; 5927 # So KANGXI RADICAL BIG +2F25 ; NFKC_SCF; 5973 # So KANGXI RADICAL WOMAN +2F26 ; NFKC_SCF; 5B50 # So KANGXI RADICAL CHILD +2F27 ; NFKC_SCF; 5B80 # So KANGXI RADICAL ROOF +2F28 ; NFKC_SCF; 5BF8 # So KANGXI RADICAL INCH +2F29 ; NFKC_SCF; 5C0F # So KANGXI RADICAL SMALL +2F2A ; NFKC_SCF; 5C22 # So KANGXI RADICAL LAME +2F2B ; NFKC_SCF; 5C38 # So KANGXI RADICAL CORPSE +2F2C ; NFKC_SCF; 5C6E # So KANGXI RADICAL SPROUT +2F2D ; NFKC_SCF; 5C71 # So KANGXI RADICAL MOUNTAIN +2F2E ; NFKC_SCF; 5DDB # So KANGXI RADICAL RIVER +2F2F ; NFKC_SCF; 5DE5 # So KANGXI RADICAL WORK +2F30 ; NFKC_SCF; 5DF1 # So KANGXI RADICAL ONESELF +2F31 ; NFKC_SCF; 5DFE # So KANGXI RADICAL TURBAN +2F32 ; NFKC_SCF; 5E72 # So KANGXI RADICAL DRY +2F33 ; NFKC_SCF; 5E7A # So KANGXI RADICAL SHORT THREAD +2F34 ; NFKC_SCF; 5E7F # So KANGXI RADICAL DOTTED CLIFF +2F35 ; NFKC_SCF; 5EF4 # So KANGXI RADICAL LONG STRIDE +2F36 ; NFKC_SCF; 5EFE # So KANGXI RADICAL TWO HANDS +2F37 ; NFKC_SCF; 5F0B # So KANGXI RADICAL SHOOT +2F38 ; NFKC_SCF; 5F13 # So KANGXI RADICAL BOW +2F39 ; NFKC_SCF; 5F50 # So KANGXI RADICAL SNOUT +2F3A ; NFKC_SCF; 5F61 # So KANGXI RADICAL BRISTLE +2F3B ; NFKC_SCF; 5F73 # So KANGXI RADICAL STEP +2F3C ; NFKC_SCF; 5FC3 # So KANGXI RADICAL HEART +2F3D ; NFKC_SCF; 6208 # So KANGXI RADICAL HALBERD +2F3E ; NFKC_SCF; 6236 # So KANGXI RADICAL DOOR +2F3F ; NFKC_SCF; 624B # So KANGXI RADICAL HAND +2F40 ; NFKC_SCF; 652F # So KANGXI RADICAL BRANCH +2F41 ; NFKC_SCF; 6534 # So KANGXI RADICAL RAP +2F42 ; NFKC_SCF; 6587 # So KANGXI RADICAL SCRIPT +2F43 ; NFKC_SCF; 6597 # So KANGXI RADICAL DIPPER +2F44 ; NFKC_SCF; 65A4 # So KANGXI RADICAL AXE +2F45 ; NFKC_SCF; 65B9 # So KANGXI RADICAL SQUARE +2F46 ; NFKC_SCF; 65E0 # So KANGXI RADICAL NOT +2F47 ; NFKC_SCF; 65E5 # So KANGXI RADICAL SUN +2F48 ; NFKC_SCF; 66F0 # So KANGXI RADICAL SAY +2F49 ; NFKC_SCF; 6708 # So KANGXI RADICAL MOON +2F4A ; NFKC_SCF; 6728 # So KANGXI RADICAL TREE +2F4B ; NFKC_SCF; 6B20 # So KANGXI RADICAL LACK +2F4C ; NFKC_SCF; 6B62 # So KANGXI RADICAL STOP +2F4D ; NFKC_SCF; 6B79 # So KANGXI RADICAL DEATH +2F4E ; NFKC_SCF; 6BB3 # So KANGXI RADICAL WEAPON +2F4F ; NFKC_SCF; 6BCB # So KANGXI RADICAL DO NOT +2F50 ; NFKC_SCF; 6BD4 # So KANGXI RADICAL COMPARE +2F51 ; NFKC_SCF; 6BDB # So KANGXI RADICAL FUR +2F52 ; NFKC_SCF; 6C0F # So KANGXI RADICAL CLAN +2F53 ; NFKC_SCF; 6C14 # So KANGXI RADICAL STEAM +2F54 ; NFKC_SCF; 6C34 # So KANGXI RADICAL WATER +2F55 ; NFKC_SCF; 706B # So KANGXI RADICAL FIRE +2F56 ; NFKC_SCF; 722A # So KANGXI RADICAL CLAW +2F57 ; NFKC_SCF; 7236 # So KANGXI RADICAL FATHER +2F58 ; NFKC_SCF; 723B # So KANGXI RADICAL DOUBLE X +2F59 ; NFKC_SCF; 723F # So KANGXI RADICAL HALF TREE TRUNK +2F5A ; NFKC_SCF; 7247 # So KANGXI RADICAL SLICE +2F5B ; NFKC_SCF; 7259 # So KANGXI RADICAL FANG +2F5C ; NFKC_SCF; 725B # So KANGXI RADICAL COW +2F5D ; NFKC_SCF; 72AC # So KANGXI RADICAL DOG +2F5E ; NFKC_SCF; 7384 # So KANGXI RADICAL PROFOUND +2F5F ; NFKC_SCF; 7389 # So KANGXI RADICAL JADE +2F60 ; NFKC_SCF; 74DC # So KANGXI RADICAL MELON +2F61 ; NFKC_SCF; 74E6 # So KANGXI RADICAL TILE +2F62 ; NFKC_SCF; 7518 # So KANGXI RADICAL SWEET +2F63 ; NFKC_SCF; 751F # So KANGXI RADICAL LIFE +2F64 ; NFKC_SCF; 7528 # So KANGXI RADICAL USE +2F65 ; NFKC_SCF; 7530 # So KANGXI RADICAL FIELD +2F66 ; NFKC_SCF; 758B # So KANGXI RADICAL BOLT OF CLOTH +2F67 ; NFKC_SCF; 7592 # So KANGXI RADICAL SICKNESS +2F68 ; NFKC_SCF; 7676 # So KANGXI RADICAL DOTTED TENT +2F69 ; NFKC_SCF; 767D # So KANGXI RADICAL WHITE +2F6A ; NFKC_SCF; 76AE # So KANGXI RADICAL SKIN +2F6B ; NFKC_SCF; 76BF # So KANGXI RADICAL DISH +2F6C ; NFKC_SCF; 76EE # So KANGXI RADICAL EYE +2F6D ; NFKC_SCF; 77DB # So KANGXI RADICAL SPEAR +2F6E ; NFKC_SCF; 77E2 # So KANGXI RADICAL ARROW +2F6F ; NFKC_SCF; 77F3 # So KANGXI RADICAL STONE +2F70 ; NFKC_SCF; 793A # So KANGXI RADICAL SPIRIT +2F71 ; NFKC_SCF; 79B8 # So KANGXI RADICAL TRACK +2F72 ; NFKC_SCF; 79BE # So KANGXI RADICAL GRAIN +2F73 ; NFKC_SCF; 7A74 # So KANGXI RADICAL CAVE +2F74 ; NFKC_SCF; 7ACB # So KANGXI RADICAL STAND +2F75 ; NFKC_SCF; 7AF9 # So KANGXI RADICAL BAMBOO +2F76 ; NFKC_SCF; 7C73 # So KANGXI RADICAL RICE +2F77 ; NFKC_SCF; 7CF8 # So KANGXI RADICAL SILK +2F78 ; NFKC_SCF; 7F36 # So KANGXI RADICAL JAR +2F79 ; NFKC_SCF; 7F51 # So KANGXI RADICAL NET +2F7A ; NFKC_SCF; 7F8A # So KANGXI RADICAL SHEEP +2F7B ; NFKC_SCF; 7FBD # So KANGXI RADICAL FEATHER +2F7C ; NFKC_SCF; 8001 # So KANGXI RADICAL OLD +2F7D ; NFKC_SCF; 800C # So KANGXI RADICAL AND +2F7E ; NFKC_SCF; 8012 # So KANGXI RADICAL PLOW +2F7F ; NFKC_SCF; 8033 # So KANGXI RADICAL EAR +2F80 ; NFKC_SCF; 807F # So KANGXI RADICAL BRUSH +2F81 ; NFKC_SCF; 8089 # So KANGXI RADICAL MEAT +2F82 ; NFKC_SCF; 81E3 # So KANGXI RADICAL MINISTER +2F83 ; NFKC_SCF; 81EA # So KANGXI RADICAL SELF +2F84 ; NFKC_SCF; 81F3 # So KANGXI RADICAL ARRIVE +2F85 ; NFKC_SCF; 81FC # So KANGXI RADICAL MORTAR +2F86 ; NFKC_SCF; 820C # So KANGXI RADICAL TONGUE +2F87 ; NFKC_SCF; 821B # So KANGXI RADICAL OPPOSE +2F88 ; NFKC_SCF; 821F # So KANGXI RADICAL BOAT +2F89 ; NFKC_SCF; 826E # So KANGXI RADICAL STOPPING +2F8A ; NFKC_SCF; 8272 # So KANGXI RADICAL COLOR +2F8B ; NFKC_SCF; 8278 # So KANGXI RADICAL GRASS +2F8C ; NFKC_SCF; 864D # So KANGXI RADICAL TIGER +2F8D ; NFKC_SCF; 866B # So KANGXI RADICAL INSECT +2F8E ; NFKC_SCF; 8840 # So KANGXI RADICAL BLOOD +2F8F ; NFKC_SCF; 884C # So KANGXI RADICAL WALK ENCLOSURE +2F90 ; NFKC_SCF; 8863 # So KANGXI RADICAL CLOTHES +2F91 ; NFKC_SCF; 897E # So KANGXI RADICAL WEST +2F92 ; NFKC_SCF; 898B # So KANGXI RADICAL SEE +2F93 ; NFKC_SCF; 89D2 # So KANGXI RADICAL HORN +2F94 ; NFKC_SCF; 8A00 # So KANGXI RADICAL SPEECH +2F95 ; NFKC_SCF; 8C37 # So KANGXI RADICAL VALLEY +2F96 ; NFKC_SCF; 8C46 # So KANGXI RADICAL BEAN +2F97 ; NFKC_SCF; 8C55 # So KANGXI RADICAL PIG +2F98 ; NFKC_SCF; 8C78 # So KANGXI RADICAL BADGER +2F99 ; NFKC_SCF; 8C9D # So KANGXI RADICAL SHELL +2F9A ; NFKC_SCF; 8D64 # So KANGXI RADICAL RED +2F9B ; NFKC_SCF; 8D70 # So KANGXI RADICAL RUN +2F9C ; NFKC_SCF; 8DB3 # So KANGXI RADICAL FOOT +2F9D ; NFKC_SCF; 8EAB # So KANGXI RADICAL BODY +2F9E ; NFKC_SCF; 8ECA # So KANGXI RADICAL CART +2F9F ; NFKC_SCF; 8F9B # So KANGXI RADICAL BITTER +2FA0 ; NFKC_SCF; 8FB0 # So KANGXI RADICAL MORNING +2FA1 ; NFKC_SCF; 8FB5 # So KANGXI RADICAL WALK +2FA2 ; NFKC_SCF; 9091 # So KANGXI RADICAL CITY +2FA3 ; NFKC_SCF; 9149 # So KANGXI RADICAL WINE +2FA4 ; NFKC_SCF; 91C6 # So KANGXI RADICAL DISTINGUISH +2FA5 ; NFKC_SCF; 91CC # So KANGXI RADICAL VILLAGE +2FA6 ; NFKC_SCF; 91D1 # So KANGXI RADICAL GOLD +2FA7 ; NFKC_SCF; 9577 # So KANGXI RADICAL LONG +2FA8 ; NFKC_SCF; 9580 # So KANGXI RADICAL GATE +2FA9 ; NFKC_SCF; 961C # So KANGXI RADICAL MOUND +2FAA ; NFKC_SCF; 96B6 # So KANGXI RADICAL SLAVE +2FAB ; NFKC_SCF; 96B9 # So KANGXI RADICAL SHORT TAILED BIRD +2FAC ; NFKC_SCF; 96E8 # So KANGXI RADICAL RAIN +2FAD ; NFKC_SCF; 9751 # So KANGXI RADICAL BLUE +2FAE ; NFKC_SCF; 975E # So KANGXI RADICAL WRONG +2FAF ; NFKC_SCF; 9762 # So KANGXI RADICAL FACE +2FB0 ; NFKC_SCF; 9769 # So KANGXI RADICAL LEATHER +2FB1 ; NFKC_SCF; 97CB # So KANGXI RADICAL TANNED LEATHER +2FB2 ; NFKC_SCF; 97ED # So KANGXI RADICAL LEEK +2FB3 ; NFKC_SCF; 97F3 # So KANGXI RADICAL SOUND +2FB4 ; NFKC_SCF; 9801 # So KANGXI RADICAL LEAF +2FB5 ; NFKC_SCF; 98A8 # So KANGXI RADICAL WIND +2FB6 ; NFKC_SCF; 98DB # So KANGXI RADICAL FLY +2FB7 ; NFKC_SCF; 98DF # So KANGXI RADICAL EAT +2FB8 ; NFKC_SCF; 9996 # So KANGXI RADICAL HEAD +2FB9 ; NFKC_SCF; 9999 # So KANGXI RADICAL FRAGRANT +2FBA ; NFKC_SCF; 99AC # So KANGXI RADICAL HORSE +2FBB ; NFKC_SCF; 9AA8 # So KANGXI RADICAL BONE +2FBC ; NFKC_SCF; 9AD8 # So KANGXI RADICAL TALL +2FBD ; NFKC_SCF; 9ADF # So KANGXI RADICAL HAIR +2FBE ; NFKC_SCF; 9B25 # So KANGXI RADICAL FIGHT +2FBF ; NFKC_SCF; 9B2F # So KANGXI RADICAL SACRIFICIAL WINE +2FC0 ; NFKC_SCF; 9B32 # So KANGXI RADICAL CAULDRON +2FC1 ; NFKC_SCF; 9B3C # So KANGXI RADICAL GHOST +2FC2 ; NFKC_SCF; 9B5A # So KANGXI RADICAL FISH +2FC3 ; NFKC_SCF; 9CE5 # So KANGXI RADICAL BIRD +2FC4 ; NFKC_SCF; 9E75 # So KANGXI RADICAL SALT +2FC5 ; NFKC_SCF; 9E7F # So KANGXI RADICAL DEER +2FC6 ; NFKC_SCF; 9EA5 # So KANGXI RADICAL WHEAT +2FC7 ; NFKC_SCF; 9EBB # So KANGXI RADICAL HEMP +2FC8 ; NFKC_SCF; 9EC3 # So KANGXI RADICAL YELLOW +2FC9 ; NFKC_SCF; 9ECD # So KANGXI RADICAL MILLET +2FCA ; NFKC_SCF; 9ED1 # So KANGXI RADICAL BLACK +2FCB ; NFKC_SCF; 9EF9 # So KANGXI RADICAL EMBROIDERY +2FCC ; NFKC_SCF; 9EFD # So KANGXI RADICAL FROG +2FCD ; NFKC_SCF; 9F0E # So KANGXI RADICAL TRIPOD +2FCE ; NFKC_SCF; 9F13 # So KANGXI RADICAL DRUM +2FCF ; NFKC_SCF; 9F20 # So KANGXI RADICAL RAT +2FD0 ; NFKC_SCF; 9F3B # So KANGXI RADICAL NOSE +2FD1 ; NFKC_SCF; 9F4A # So KANGXI RADICAL EVEN +2FD2 ; NFKC_SCF; 9F52 # So KANGXI RADICAL TOOTH +2FD3 ; NFKC_SCF; 9F8D # So KANGXI RADICAL DRAGON +2FD4 ; NFKC_SCF; 9F9C # So KANGXI RADICAL TURTLE +2FD5 ; NFKC_SCF; 9FA0 # So KANGXI RADICAL FLUTE +3000 ; NFKC_SCF; 0020 # Zs IDEOGRAPHIC SPACE +3036 ; NFKC_SCF; 3012 # So CIRCLED POSTAL MARK +3038 ; NFKC_SCF; 5341 # Nl HANGZHOU NUMERAL TEN +3039 ; NFKC_SCF; 5344 # Nl HANGZHOU NUMERAL TWENTY +303A ; NFKC_SCF; 5345 # Nl HANGZHOU NUMERAL THIRTY +309B ; NFKC_SCF; 0020 3099 # Sk KATAKANA-HIRAGANA VOICED SOUND MARK +309C ; NFKC_SCF; 0020 309A # Sk KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +309F ; NFKC_SCF; 3088 308A # Lo HIRAGANA DIGRAPH YORI +30FF ; NFKC_SCF; 30B3 30C8 # Lo KATAKANA DIGRAPH KOTO +3131 ; NFKC_SCF; 1100 # Lo HANGUL LETTER KIYEOK +3132 ; NFKC_SCF; 1101 # Lo HANGUL LETTER SSANGKIYEOK +3133 ; NFKC_SCF; 11AA # Lo HANGUL LETTER KIYEOK-SIOS +3134 ; NFKC_SCF; 1102 # Lo HANGUL LETTER NIEUN +3135 ; NFKC_SCF; 11AC # Lo HANGUL LETTER NIEUN-CIEUC +3136 ; NFKC_SCF; 11AD # Lo HANGUL LETTER NIEUN-HIEUH +3137 ; NFKC_SCF; 1103 # Lo HANGUL LETTER TIKEUT +3138 ; NFKC_SCF; 1104 # Lo HANGUL LETTER SSANGTIKEUT +3139 ; NFKC_SCF; 1105 # Lo HANGUL LETTER RIEUL +313A ; NFKC_SCF; 11B0 # Lo HANGUL LETTER RIEUL-KIYEOK +313B ; NFKC_SCF; 11B1 # Lo HANGUL LETTER RIEUL-MIEUM +313C ; NFKC_SCF; 11B2 # Lo HANGUL LETTER RIEUL-PIEUP +313D ; NFKC_SCF; 11B3 # Lo HANGUL LETTER RIEUL-SIOS +313E ; NFKC_SCF; 11B4 # Lo HANGUL LETTER RIEUL-THIEUTH +313F ; NFKC_SCF; 11B5 # Lo HANGUL LETTER RIEUL-PHIEUPH +3140 ; NFKC_SCF; 111A # Lo HANGUL LETTER RIEUL-HIEUH +3141 ; NFKC_SCF; 1106 # Lo HANGUL LETTER MIEUM +3142 ; NFKC_SCF; 1107 # Lo HANGUL LETTER PIEUP +3143 ; NFKC_SCF; 1108 # Lo HANGUL LETTER SSANGPIEUP +3144 ; NFKC_SCF; 1121 # Lo HANGUL LETTER PIEUP-SIOS +3145 ; NFKC_SCF; 1109 # Lo HANGUL LETTER SIOS +3146 ; NFKC_SCF; 110A # Lo HANGUL LETTER SSANGSIOS +3147 ; NFKC_SCF; 110B # Lo HANGUL LETTER IEUNG +3148 ; NFKC_SCF; 110C # Lo HANGUL LETTER CIEUC +3149 ; NFKC_SCF; 110D # Lo HANGUL LETTER SSANGCIEUC +314A ; NFKC_SCF; 110E # Lo HANGUL LETTER CHIEUCH +314B ; NFKC_SCF; 110F # Lo HANGUL LETTER KHIEUKH +314C ; NFKC_SCF; 1110 # Lo HANGUL LETTER THIEUTH +314D ; NFKC_SCF; 1111 # Lo HANGUL LETTER PHIEUPH +314E ; NFKC_SCF; 1112 # Lo HANGUL LETTER HIEUH +314F ; NFKC_SCF; 1161 # Lo HANGUL LETTER A +3150 ; NFKC_SCF; 1162 # Lo HANGUL LETTER AE +3151 ; NFKC_SCF; 1163 # Lo HANGUL LETTER YA +3152 ; NFKC_SCF; 1164 # Lo HANGUL LETTER YAE +3153 ; NFKC_SCF; 1165 # Lo HANGUL LETTER EO +3154 ; NFKC_SCF; 1166 # Lo HANGUL LETTER E +3155 ; NFKC_SCF; 1167 # Lo HANGUL LETTER YEO +3156 ; NFKC_SCF; 1168 # Lo HANGUL LETTER YE +3157 ; NFKC_SCF; 1169 # Lo HANGUL LETTER O +3158 ; NFKC_SCF; 116A # Lo HANGUL LETTER WA +3159 ; NFKC_SCF; 116B # Lo HANGUL LETTER WAE +315A ; NFKC_SCF; 116C # Lo HANGUL LETTER OE +315B ; NFKC_SCF; 116D # Lo HANGUL LETTER YO +315C ; NFKC_SCF; 116E # Lo HANGUL LETTER U +315D ; NFKC_SCF; 116F # Lo HANGUL LETTER WEO +315E ; NFKC_SCF; 1170 # Lo HANGUL LETTER WE +315F ; NFKC_SCF; 1171 # Lo HANGUL LETTER WI +3160 ; NFKC_SCF; 1172 # Lo HANGUL LETTER YU +3161 ; NFKC_SCF; 1173 # Lo HANGUL LETTER EU +3162 ; NFKC_SCF; 1174 # Lo HANGUL LETTER YI +3163 ; NFKC_SCF; 1175 # Lo HANGUL LETTER I +3164 ; NFKC_SCF; # Lo HANGUL FILLER +3165 ; NFKC_SCF; 1114 # Lo HANGUL LETTER SSANGNIEUN +3166 ; NFKC_SCF; 1115 # Lo HANGUL LETTER NIEUN-TIKEUT +3167 ; NFKC_SCF; 11C7 # Lo HANGUL LETTER NIEUN-SIOS +3168 ; NFKC_SCF; 11C8 # Lo HANGUL LETTER NIEUN-PANSIOS +3169 ; NFKC_SCF; 11CC # Lo HANGUL LETTER RIEUL-KIYEOK-SIOS +316A ; NFKC_SCF; 11CE # Lo HANGUL LETTER RIEUL-TIKEUT +316B ; NFKC_SCF; 11D3 # Lo HANGUL LETTER RIEUL-PIEUP-SIOS +316C ; NFKC_SCF; 11D7 # Lo HANGUL LETTER RIEUL-PANSIOS +316D ; NFKC_SCF; 11D9 # Lo HANGUL LETTER RIEUL-YEORINHIEUH +316E ; NFKC_SCF; 111C # Lo HANGUL LETTER MIEUM-PIEUP +316F ; NFKC_SCF; 11DD # Lo HANGUL LETTER MIEUM-SIOS +3170 ; NFKC_SCF; 11DF # Lo HANGUL LETTER MIEUM-PANSIOS +3171 ; NFKC_SCF; 111D # Lo HANGUL LETTER KAPYEOUNMIEUM +3172 ; NFKC_SCF; 111E # Lo HANGUL LETTER PIEUP-KIYEOK +3173 ; NFKC_SCF; 1120 # Lo HANGUL LETTER PIEUP-TIKEUT +3174 ; NFKC_SCF; 1122 # Lo HANGUL LETTER PIEUP-SIOS-KIYEOK +3175 ; NFKC_SCF; 1123 # Lo HANGUL LETTER PIEUP-SIOS-TIKEUT +3176 ; NFKC_SCF; 1127 # Lo HANGUL LETTER PIEUP-CIEUC +3177 ; NFKC_SCF; 1129 # Lo HANGUL LETTER PIEUP-THIEUTH +3178 ; NFKC_SCF; 112B # Lo HANGUL LETTER KAPYEOUNPIEUP +3179 ; NFKC_SCF; 112C # Lo HANGUL LETTER KAPYEOUNSSANGPIEUP +317A ; NFKC_SCF; 112D # Lo HANGUL LETTER SIOS-KIYEOK +317B ; NFKC_SCF; 112E # Lo HANGUL LETTER SIOS-NIEUN +317C ; NFKC_SCF; 112F # Lo HANGUL LETTER SIOS-TIKEUT +317D ; NFKC_SCF; 1132 # Lo HANGUL LETTER SIOS-PIEUP +317E ; NFKC_SCF; 1136 # Lo HANGUL LETTER SIOS-CIEUC +317F ; NFKC_SCF; 1140 # Lo HANGUL LETTER PANSIOS +3180 ; NFKC_SCF; 1147 # Lo HANGUL LETTER SSANGIEUNG +3181 ; NFKC_SCF; 114C # Lo HANGUL LETTER YESIEUNG +3182 ; NFKC_SCF; 11F1 # Lo HANGUL LETTER YESIEUNG-SIOS +3183 ; NFKC_SCF; 11F2 # Lo HANGUL LETTER YESIEUNG-PANSIOS +3184 ; NFKC_SCF; 1157 # Lo HANGUL LETTER KAPYEOUNPHIEUPH +3185 ; NFKC_SCF; 1158 # Lo HANGUL LETTER SSANGHIEUH +3186 ; NFKC_SCF; 1159 # Lo HANGUL LETTER YEORINHIEUH +3187 ; NFKC_SCF; 1184 # Lo HANGUL LETTER YO-YA +3188 ; NFKC_SCF; 1185 # Lo HANGUL LETTER YO-YAE +3189 ; NFKC_SCF; 1188 # Lo HANGUL LETTER YO-I +318A ; NFKC_SCF; 1191 # Lo HANGUL LETTER YU-YEO +318B ; NFKC_SCF; 1192 # Lo HANGUL LETTER YU-YE +318C ; NFKC_SCF; 1194 # Lo HANGUL LETTER YU-I +318D ; NFKC_SCF; 119E # Lo HANGUL LETTER ARAEA +318E ; NFKC_SCF; 11A1 # Lo HANGUL LETTER ARAEAE +3192 ; NFKC_SCF; 4E00 # No IDEOGRAPHIC ANNOTATION ONE MARK +3193 ; NFKC_SCF; 4E8C # No IDEOGRAPHIC ANNOTATION TWO MARK +3194 ; NFKC_SCF; 4E09 # No IDEOGRAPHIC ANNOTATION THREE MARK +3195 ; NFKC_SCF; 56DB # No IDEOGRAPHIC ANNOTATION FOUR MARK +3196 ; NFKC_SCF; 4E0A # So IDEOGRAPHIC ANNOTATION TOP MARK +3197 ; NFKC_SCF; 4E2D # So IDEOGRAPHIC ANNOTATION MIDDLE MARK +3198 ; NFKC_SCF; 4E0B # So IDEOGRAPHIC ANNOTATION BOTTOM MARK +3199 ; NFKC_SCF; 7532 # So IDEOGRAPHIC ANNOTATION FIRST MARK +319A ; NFKC_SCF; 4E59 # So IDEOGRAPHIC ANNOTATION SECOND MARK +319B ; NFKC_SCF; 4E19 # So IDEOGRAPHIC ANNOTATION THIRD MARK +319C ; NFKC_SCF; 4E01 # So IDEOGRAPHIC ANNOTATION FOURTH MARK +319D ; NFKC_SCF; 5929 # So IDEOGRAPHIC ANNOTATION HEAVEN MARK +319E ; NFKC_SCF; 5730 # So IDEOGRAPHIC ANNOTATION EARTH MARK +319F ; NFKC_SCF; 4EBA # So IDEOGRAPHIC ANNOTATION MAN MARK +3200 ; NFKC_SCF; 0028 1100 0029 # So PARENTHESIZED HANGUL KIYEOK +3201 ; NFKC_SCF; 0028 1102 0029 # So PARENTHESIZED HANGUL NIEUN +3202 ; NFKC_SCF; 0028 1103 0029 # So PARENTHESIZED HANGUL TIKEUT +3203 ; NFKC_SCF; 0028 1105 0029 # So PARENTHESIZED HANGUL RIEUL +3204 ; NFKC_SCF; 0028 1106 0029 # So PARENTHESIZED HANGUL MIEUM +3205 ; NFKC_SCF; 0028 1107 0029 # So PARENTHESIZED HANGUL PIEUP +3206 ; NFKC_SCF; 0028 1109 0029 # So PARENTHESIZED HANGUL SIOS +3207 ; NFKC_SCF; 0028 110B 0029 # So PARENTHESIZED HANGUL IEUNG +3208 ; NFKC_SCF; 0028 110C 0029 # So PARENTHESIZED HANGUL CIEUC +3209 ; NFKC_SCF; 0028 110E 0029 # So PARENTHESIZED HANGUL CHIEUCH +320A ; NFKC_SCF; 0028 110F 0029 # So PARENTHESIZED HANGUL KHIEUKH +320B ; NFKC_SCF; 0028 1110 0029 # So PARENTHESIZED HANGUL THIEUTH +320C ; NFKC_SCF; 0028 1111 0029 # So PARENTHESIZED HANGUL PHIEUPH +320D ; NFKC_SCF; 0028 1112 0029 # So PARENTHESIZED HANGUL HIEUH +320E ; NFKC_SCF; 0028 AC00 0029 # So PARENTHESIZED HANGUL KIYEOK A +320F ; NFKC_SCF; 0028 B098 0029 # So PARENTHESIZED HANGUL NIEUN A +3210 ; NFKC_SCF; 0028 B2E4 0029 # So PARENTHESIZED HANGUL TIKEUT A +3211 ; NFKC_SCF; 0028 B77C 0029 # So PARENTHESIZED HANGUL RIEUL A +3212 ; NFKC_SCF; 0028 B9C8 0029 # So PARENTHESIZED HANGUL MIEUM A +3213 ; NFKC_SCF; 0028 BC14 0029 # So PARENTHESIZED HANGUL PIEUP A +3214 ; NFKC_SCF; 0028 C0AC 0029 # So PARENTHESIZED HANGUL SIOS A +3215 ; NFKC_SCF; 0028 C544 0029 # So PARENTHESIZED HANGUL IEUNG A +3216 ; NFKC_SCF; 0028 C790 0029 # So PARENTHESIZED HANGUL CIEUC A +3217 ; NFKC_SCF; 0028 CC28 0029 # So PARENTHESIZED HANGUL CHIEUCH A +3218 ; NFKC_SCF; 0028 CE74 0029 # So PARENTHESIZED HANGUL KHIEUKH A +3219 ; NFKC_SCF; 0028 D0C0 0029 # So PARENTHESIZED HANGUL THIEUTH A +321A ; NFKC_SCF; 0028 D30C 0029 # So PARENTHESIZED HANGUL PHIEUPH A +321B ; NFKC_SCF; 0028 D558 0029 # So PARENTHESIZED HANGUL HIEUH A +321C ; NFKC_SCF; 0028 C8FC 0029 # So PARENTHESIZED HANGUL CIEUC U +321D ; NFKC_SCF; 0028 C624 C804 0029 #So PARENTHESIZED KOREAN CHARACTER OJEON +321E ; NFKC_SCF; 0028 C624 D6C4 0029 #So PARENTHESIZED KOREAN CHARACTER O HU +3220 ; NFKC_SCF; 0028 4E00 0029 # No PARENTHESIZED IDEOGRAPH ONE +3221 ; NFKC_SCF; 0028 4E8C 0029 # No PARENTHESIZED IDEOGRAPH TWO +3222 ; NFKC_SCF; 0028 4E09 0029 # No PARENTHESIZED IDEOGRAPH THREE +3223 ; NFKC_SCF; 0028 56DB 0029 # No PARENTHESIZED IDEOGRAPH FOUR +3224 ; NFKC_SCF; 0028 4E94 0029 # No PARENTHESIZED IDEOGRAPH FIVE +3225 ; NFKC_SCF; 0028 516D 0029 # No PARENTHESIZED IDEOGRAPH SIX +3226 ; NFKC_SCF; 0028 4E03 0029 # No PARENTHESIZED IDEOGRAPH SEVEN +3227 ; NFKC_SCF; 0028 516B 0029 # No PARENTHESIZED IDEOGRAPH EIGHT +3228 ; NFKC_SCF; 0028 4E5D 0029 # No PARENTHESIZED IDEOGRAPH NINE +3229 ; NFKC_SCF; 0028 5341 0029 # No PARENTHESIZED IDEOGRAPH TEN +322A ; NFKC_SCF; 0028 6708 0029 # So PARENTHESIZED IDEOGRAPH MOON +322B ; NFKC_SCF; 0028 706B 0029 # So PARENTHESIZED IDEOGRAPH FIRE +322C ; NFKC_SCF; 0028 6C34 0029 # So PARENTHESIZED IDEOGRAPH WATER +322D ; NFKC_SCF; 0028 6728 0029 # So PARENTHESIZED IDEOGRAPH WOOD +322E ; NFKC_SCF; 0028 91D1 0029 # So PARENTHESIZED IDEOGRAPH METAL +322F ; NFKC_SCF; 0028 571F 0029 # So PARENTHESIZED IDEOGRAPH EARTH +3230 ; NFKC_SCF; 0028 65E5 0029 # So PARENTHESIZED IDEOGRAPH SUN +3231 ; NFKC_SCF; 0028 682A 0029 # So PARENTHESIZED IDEOGRAPH STOCK +3232 ; NFKC_SCF; 0028 6709 0029 # So PARENTHESIZED IDEOGRAPH HAVE +3233 ; NFKC_SCF; 0028 793E 0029 # So PARENTHESIZED IDEOGRAPH SOCIETY +3234 ; NFKC_SCF; 0028 540D 0029 # So PARENTHESIZED IDEOGRAPH NAME +3235 ; NFKC_SCF; 0028 7279 0029 # So PARENTHESIZED IDEOGRAPH SPECIAL +3236 ; NFKC_SCF; 0028 8CA1 0029 # So PARENTHESIZED IDEOGRAPH FINANCIAL +3237 ; NFKC_SCF; 0028 795D 0029 # So PARENTHESIZED IDEOGRAPH CONGRATULATION +3238 ; NFKC_SCF; 0028 52B4 0029 # So PARENTHESIZED IDEOGRAPH LABOR +3239 ; NFKC_SCF; 0028 4EE3 0029 # So PARENTHESIZED IDEOGRAPH REPRESENT +323A ; NFKC_SCF; 0028 547C 0029 # So PARENTHESIZED IDEOGRAPH CALL +323B ; NFKC_SCF; 0028 5B66 0029 # So PARENTHESIZED IDEOGRAPH STUDY +323C ; NFKC_SCF; 0028 76E3 0029 # So PARENTHESIZED IDEOGRAPH SUPERVISE +323D ; NFKC_SCF; 0028 4F01 0029 # So PARENTHESIZED IDEOGRAPH ENTERPRISE +323E ; NFKC_SCF; 0028 8CC7 0029 # So PARENTHESIZED IDEOGRAPH RESOURCE +323F ; NFKC_SCF; 0028 5354 0029 # So PARENTHESIZED IDEOGRAPH ALLIANCE +3240 ; NFKC_SCF; 0028 796D 0029 # So PARENTHESIZED IDEOGRAPH FESTIVAL +3241 ; NFKC_SCF; 0028 4F11 0029 # So PARENTHESIZED IDEOGRAPH REST +3242 ; NFKC_SCF; 0028 81EA 0029 # So PARENTHESIZED IDEOGRAPH SELF +3243 ; NFKC_SCF; 0028 81F3 0029 # So PARENTHESIZED IDEOGRAPH REACH +3244 ; NFKC_SCF; 554F # So CIRCLED IDEOGRAPH QUESTION +3245 ; NFKC_SCF; 5E7C # So CIRCLED IDEOGRAPH KINDERGARTEN +3246 ; NFKC_SCF; 6587 # So CIRCLED IDEOGRAPH SCHOOL +3247 ; NFKC_SCF; 7B8F # So CIRCLED IDEOGRAPH KOTO +3250 ; NFKC_SCF; 0070 0074 0065 # So PARTNERSHIP SIGN +3251 ; NFKC_SCF; 0032 0031 # No CIRCLED NUMBER TWENTY ONE +3252 ; NFKC_SCF; 0032 0032 # No CIRCLED NUMBER TWENTY TWO +3253 ; NFKC_SCF; 0032 0033 # No CIRCLED NUMBER TWENTY THREE +3254 ; NFKC_SCF; 0032 0034 # No CIRCLED NUMBER TWENTY FOUR +3255 ; NFKC_SCF; 0032 0035 # No CIRCLED NUMBER TWENTY FIVE +3256 ; NFKC_SCF; 0032 0036 # No CIRCLED NUMBER TWENTY SIX +3257 ; NFKC_SCF; 0032 0037 # No CIRCLED NUMBER TWENTY SEVEN +3258 ; NFKC_SCF; 0032 0038 # No CIRCLED NUMBER TWENTY EIGHT +3259 ; NFKC_SCF; 0032 0039 # No CIRCLED NUMBER TWENTY NINE +325A ; NFKC_SCF; 0033 0030 # No CIRCLED NUMBER THIRTY +325B ; NFKC_SCF; 0033 0031 # No CIRCLED NUMBER THIRTY ONE +325C ; NFKC_SCF; 0033 0032 # No CIRCLED NUMBER THIRTY TWO +325D ; NFKC_SCF; 0033 0033 # No CIRCLED NUMBER THIRTY THREE +325E ; NFKC_SCF; 0033 0034 # No CIRCLED NUMBER THIRTY FOUR +325F ; NFKC_SCF; 0033 0035 # No CIRCLED NUMBER THIRTY FIVE +3260 ; NFKC_SCF; 1100 # So CIRCLED HANGUL KIYEOK +3261 ; NFKC_SCF; 1102 # So CIRCLED HANGUL NIEUN +3262 ; NFKC_SCF; 1103 # So CIRCLED HANGUL TIKEUT +3263 ; NFKC_SCF; 1105 # So CIRCLED HANGUL RIEUL +3264 ; NFKC_SCF; 1106 # So CIRCLED HANGUL MIEUM +3265 ; NFKC_SCF; 1107 # So CIRCLED HANGUL PIEUP +3266 ; NFKC_SCF; 1109 # So CIRCLED HANGUL SIOS +3267 ; NFKC_SCF; 110B # So CIRCLED HANGUL IEUNG +3268 ; NFKC_SCF; 110C # So CIRCLED HANGUL CIEUC +3269 ; NFKC_SCF; 110E # So CIRCLED HANGUL CHIEUCH +326A ; NFKC_SCF; 110F # So CIRCLED HANGUL KHIEUKH +326B ; NFKC_SCF; 1110 # So CIRCLED HANGUL THIEUTH +326C ; NFKC_SCF; 1111 # So CIRCLED HANGUL PHIEUPH +326D ; NFKC_SCF; 1112 # So CIRCLED HANGUL HIEUH +326E ; NFKC_SCF; AC00 # So CIRCLED HANGUL KIYEOK A +326F ; NFKC_SCF; B098 # So CIRCLED HANGUL NIEUN A +3270 ; NFKC_SCF; B2E4 # So CIRCLED HANGUL TIKEUT A +3271 ; NFKC_SCF; B77C # So CIRCLED HANGUL RIEUL A +3272 ; NFKC_SCF; B9C8 # So CIRCLED HANGUL MIEUM A +3273 ; NFKC_SCF; BC14 # So CIRCLED HANGUL PIEUP A +3274 ; NFKC_SCF; C0AC # So CIRCLED HANGUL SIOS A +3275 ; NFKC_SCF; C544 # So CIRCLED HANGUL IEUNG A +3276 ; NFKC_SCF; C790 # So CIRCLED HANGUL CIEUC A +3277 ; NFKC_SCF; CC28 # So CIRCLED HANGUL CHIEUCH A +3278 ; NFKC_SCF; CE74 # So CIRCLED HANGUL KHIEUKH A +3279 ; NFKC_SCF; D0C0 # So CIRCLED HANGUL THIEUTH A +327A ; NFKC_SCF; D30C # So CIRCLED HANGUL PHIEUPH A +327B ; NFKC_SCF; D558 # So CIRCLED HANGUL HIEUH A +327C ; NFKC_SCF; CC38 ACE0 # So CIRCLED KOREAN CHARACTER CHAMKO +327D ; NFKC_SCF; C8FC C758 # So CIRCLED KOREAN CHARACTER JUEUI +327E ; NFKC_SCF; C6B0 # So CIRCLED HANGUL IEUNG U +3280 ; NFKC_SCF; 4E00 # No CIRCLED IDEOGRAPH ONE +3281 ; NFKC_SCF; 4E8C # No CIRCLED IDEOGRAPH TWO +3282 ; NFKC_SCF; 4E09 # No CIRCLED IDEOGRAPH THREE +3283 ; NFKC_SCF; 56DB # No CIRCLED IDEOGRAPH FOUR +3284 ; NFKC_SCF; 4E94 # No CIRCLED IDEOGRAPH FIVE +3285 ; NFKC_SCF; 516D # No CIRCLED IDEOGRAPH SIX +3286 ; NFKC_SCF; 4E03 # No CIRCLED IDEOGRAPH SEVEN +3287 ; NFKC_SCF; 516B # No CIRCLED IDEOGRAPH EIGHT +3288 ; NFKC_SCF; 4E5D # No CIRCLED IDEOGRAPH NINE +3289 ; NFKC_SCF; 5341 # No CIRCLED IDEOGRAPH TEN +328A ; NFKC_SCF; 6708 # So CIRCLED IDEOGRAPH MOON +328B ; NFKC_SCF; 706B # So CIRCLED IDEOGRAPH FIRE +328C ; NFKC_SCF; 6C34 # So CIRCLED IDEOGRAPH WATER +328D ; NFKC_SCF; 6728 # So CIRCLED IDEOGRAPH WOOD +328E ; NFKC_SCF; 91D1 # So CIRCLED IDEOGRAPH METAL +328F ; NFKC_SCF; 571F # So CIRCLED IDEOGRAPH EARTH +3290 ; NFKC_SCF; 65E5 # So CIRCLED IDEOGRAPH SUN +3291 ; NFKC_SCF; 682A # So CIRCLED IDEOGRAPH STOCK +3292 ; NFKC_SCF; 6709 # So CIRCLED IDEOGRAPH HAVE +3293 ; NFKC_SCF; 793E # So CIRCLED IDEOGRAPH SOCIETY +3294 ; NFKC_SCF; 540D # So CIRCLED IDEOGRAPH NAME +3295 ; NFKC_SCF; 7279 # So CIRCLED IDEOGRAPH SPECIAL +3296 ; NFKC_SCF; 8CA1 # So CIRCLED IDEOGRAPH FINANCIAL +3297 ; NFKC_SCF; 795D # So CIRCLED IDEOGRAPH CONGRATULATION +3298 ; NFKC_SCF; 52B4 # So CIRCLED IDEOGRAPH LABOR +3299 ; NFKC_SCF; 79D8 # So CIRCLED IDEOGRAPH SECRET +329A ; NFKC_SCF; 7537 # So CIRCLED IDEOGRAPH MALE +329B ; NFKC_SCF; 5973 # So CIRCLED IDEOGRAPH FEMALE +329C ; NFKC_SCF; 9069 # So CIRCLED IDEOGRAPH SUITABLE +329D ; NFKC_SCF; 512A # So CIRCLED IDEOGRAPH EXCELLENT +329E ; NFKC_SCF; 5370 # So CIRCLED IDEOGRAPH PRINT +329F ; NFKC_SCF; 6CE8 # So CIRCLED IDEOGRAPH ATTENTION +32A0 ; NFKC_SCF; 9805 # So CIRCLED IDEOGRAPH ITEM +32A1 ; NFKC_SCF; 4F11 # So CIRCLED IDEOGRAPH REST +32A2 ; NFKC_SCF; 5199 # So CIRCLED IDEOGRAPH COPY +32A3 ; NFKC_SCF; 6B63 # So CIRCLED IDEOGRAPH CORRECT +32A4 ; NFKC_SCF; 4E0A # So CIRCLED IDEOGRAPH HIGH +32A5 ; NFKC_SCF; 4E2D # So CIRCLED IDEOGRAPH CENTRE +32A6 ; NFKC_SCF; 4E0B # So CIRCLED IDEOGRAPH LOW +32A7 ; NFKC_SCF; 5DE6 # So CIRCLED IDEOGRAPH LEFT +32A8 ; NFKC_SCF; 53F3 # So CIRCLED IDEOGRAPH RIGHT +32A9 ; NFKC_SCF; 533B # So CIRCLED IDEOGRAPH MEDICINE +32AA ; NFKC_SCF; 5B97 # So CIRCLED IDEOGRAPH RELIGION +32AB ; NFKC_SCF; 5B66 # So CIRCLED IDEOGRAPH STUDY +32AC ; NFKC_SCF; 76E3 # So CIRCLED IDEOGRAPH SUPERVISE +32AD ; NFKC_SCF; 4F01 # So CIRCLED IDEOGRAPH ENTERPRISE +32AE ; NFKC_SCF; 8CC7 # So CIRCLED IDEOGRAPH RESOURCE +32AF ; NFKC_SCF; 5354 # So CIRCLED IDEOGRAPH ALLIANCE +32B0 ; NFKC_SCF; 591C # So CIRCLED IDEOGRAPH NIGHT +32B1 ; NFKC_SCF; 0033 0036 # No CIRCLED NUMBER THIRTY SIX +32B2 ; NFKC_SCF; 0033 0037 # No CIRCLED NUMBER THIRTY SEVEN +32B3 ; NFKC_SCF; 0033 0038 # No CIRCLED NUMBER THIRTY EIGHT +32B4 ; NFKC_SCF; 0033 0039 # No CIRCLED NUMBER THIRTY NINE +32B5 ; NFKC_SCF; 0034 0030 # No CIRCLED NUMBER FORTY +32B6 ; NFKC_SCF; 0034 0031 # No CIRCLED NUMBER FORTY ONE +32B7 ; NFKC_SCF; 0034 0032 # No CIRCLED NUMBER FORTY TWO +32B8 ; NFKC_SCF; 0034 0033 # No CIRCLED NUMBER FORTY THREE +32B9 ; NFKC_SCF; 0034 0034 # No CIRCLED NUMBER FORTY FOUR +32BA ; NFKC_SCF; 0034 0035 # No CIRCLED NUMBER FORTY FIVE +32BB ; NFKC_SCF; 0034 0036 # No CIRCLED NUMBER FORTY SIX +32BC ; NFKC_SCF; 0034 0037 # No CIRCLED NUMBER FORTY SEVEN +32BD ; NFKC_SCF; 0034 0038 # No CIRCLED NUMBER FORTY EIGHT +32BE ; NFKC_SCF; 0034 0039 # No CIRCLED NUMBER FORTY NINE +32BF ; NFKC_SCF; 0035 0030 # No CIRCLED NUMBER FIFTY +32C0 ; NFKC_SCF; 0031 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY +32C1 ; NFKC_SCF; 0032 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY +32C2 ; NFKC_SCF; 0033 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH +32C3 ; NFKC_SCF; 0034 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL +32C4 ; NFKC_SCF; 0035 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY +32C5 ; NFKC_SCF; 0036 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE +32C6 ; NFKC_SCF; 0037 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY +32C7 ; NFKC_SCF; 0038 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST +32C8 ; NFKC_SCF; 0039 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER +32C9 ; NFKC_SCF; 0031 0030 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER +32CA ; NFKC_SCF; 0031 0031 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER +32CB ; NFKC_SCF; 0031 0032 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER +32CC ; NFKC_SCF; 0068 0067 # So SQUARE HG +32CD ; NFKC_SCF; 0065 0072 0067 # So SQUARE ERG +32CE ; NFKC_SCF; 0065 0076 # So SQUARE EV +32CF ; NFKC_SCF; 006C 0074 0064 # So LIMITED LIABILITY SIGN +32D0 ; NFKC_SCF; 30A2 # So CIRCLED KATAKANA A +32D1 ; NFKC_SCF; 30A4 # So CIRCLED KATAKANA I +32D2 ; NFKC_SCF; 30A6 # So CIRCLED KATAKANA U +32D3 ; NFKC_SCF; 30A8 # So CIRCLED KATAKANA E +32D4 ; NFKC_SCF; 30AA # So CIRCLED KATAKANA O +32D5 ; NFKC_SCF; 30AB # So CIRCLED KATAKANA KA +32D6 ; NFKC_SCF; 30AD # So CIRCLED KATAKANA KI +32D7 ; NFKC_SCF; 30AF # So CIRCLED KATAKANA KU +32D8 ; NFKC_SCF; 30B1 # So CIRCLED KATAKANA KE +32D9 ; NFKC_SCF; 30B3 # So CIRCLED KATAKANA KO +32DA ; NFKC_SCF; 30B5 # So CIRCLED KATAKANA SA +32DB ; NFKC_SCF; 30B7 # So CIRCLED KATAKANA SI +32DC ; NFKC_SCF; 30B9 # So CIRCLED KATAKANA SU +32DD ; NFKC_SCF; 30BB # So CIRCLED KATAKANA SE +32DE ; NFKC_SCF; 30BD # So CIRCLED KATAKANA SO +32DF ; NFKC_SCF; 30BF # So CIRCLED KATAKANA TA +32E0 ; NFKC_SCF; 30C1 # So CIRCLED KATAKANA TI +32E1 ; NFKC_SCF; 30C4 # So CIRCLED KATAKANA TU +32E2 ; NFKC_SCF; 30C6 # So CIRCLED KATAKANA TE +32E3 ; NFKC_SCF; 30C8 # So CIRCLED KATAKANA TO +32E4 ; NFKC_SCF; 30CA # So CIRCLED KATAKANA NA +32E5 ; NFKC_SCF; 30CB # So CIRCLED KATAKANA NI +32E6 ; NFKC_SCF; 30CC # So CIRCLED KATAKANA NU +32E7 ; NFKC_SCF; 30CD # So CIRCLED KATAKANA NE +32E8 ; NFKC_SCF; 30CE # So CIRCLED KATAKANA NO +32E9 ; NFKC_SCF; 30CF # So CIRCLED KATAKANA HA +32EA ; NFKC_SCF; 30D2 # So CIRCLED KATAKANA HI +32EB ; NFKC_SCF; 30D5 # So CIRCLED KATAKANA HU +32EC ; NFKC_SCF; 30D8 # So CIRCLED KATAKANA HE +32ED ; NFKC_SCF; 30DB # So CIRCLED KATAKANA HO +32EE ; NFKC_SCF; 30DE # So CIRCLED KATAKANA MA +32EF ; NFKC_SCF; 30DF # So CIRCLED KATAKANA MI +32F0 ; NFKC_SCF; 30E0 # So CIRCLED KATAKANA MU +32F1 ; NFKC_SCF; 30E1 # So CIRCLED KATAKANA ME +32F2 ; NFKC_SCF; 30E2 # So CIRCLED KATAKANA MO +32F3 ; NFKC_SCF; 30E4 # So CIRCLED KATAKANA YA +32F4 ; NFKC_SCF; 30E6 # So CIRCLED KATAKANA YU +32F5 ; NFKC_SCF; 30E8 # So CIRCLED KATAKANA YO +32F6 ; NFKC_SCF; 30E9 # So CIRCLED KATAKANA RA +32F7 ; NFKC_SCF; 30EA # So CIRCLED KATAKANA RI +32F8 ; NFKC_SCF; 30EB # So CIRCLED KATAKANA RU +32F9 ; NFKC_SCF; 30EC # So CIRCLED KATAKANA RE +32FA ; NFKC_SCF; 30ED # So CIRCLED KATAKANA RO +32FB ; NFKC_SCF; 30EF # So CIRCLED KATAKANA WA +32FC ; NFKC_SCF; 30F0 # So CIRCLED KATAKANA WI +32FD ; NFKC_SCF; 30F1 # So CIRCLED KATAKANA WE +32FE ; NFKC_SCF; 30F2 # So CIRCLED KATAKANA WO +32FF ; NFKC_SCF; 4EE4 548C # So SQUARE ERA NAME REIWA +3300 ; NFKC_SCF; 30A2 30D1 30FC 30C8 #So SQUARE APAATO +3301 ; NFKC_SCF; 30A2 30EB 30D5 30A1 #So SQUARE ARUHUA +3302 ; NFKC_SCF; 30A2 30F3 30DA 30A2 #So SQUARE ANPEA +3303 ; NFKC_SCF; 30A2 30FC 30EB # So SQUARE AARU +3304 ; NFKC_SCF; 30A4 30CB 30F3 30B0 #So SQUARE ININGU +3305 ; NFKC_SCF; 30A4 30F3 30C1 # So SQUARE INTI +3306 ; NFKC_SCF; 30A6 30A9 30F3 # So SQUARE UON +3307 ; NFKC_SCF; 30A8 30B9 30AF 30FC 30C9 #So SQUARE ESUKUUDO +3308 ; NFKC_SCF; 30A8 30FC 30AB 30FC #So SQUARE EEKAA +3309 ; NFKC_SCF; 30AA 30F3 30B9 # So SQUARE ONSU +330A ; NFKC_SCF; 30AA 30FC 30E0 # So SQUARE OOMU +330B ; NFKC_SCF; 30AB 30A4 30EA # So SQUARE KAIRI +330C ; NFKC_SCF; 30AB 30E9 30C3 30C8 #So SQUARE KARATTO +330D ; NFKC_SCF; 30AB 30ED 30EA 30FC #So SQUARE KARORII +330E ; NFKC_SCF; 30AC 30ED 30F3 # So SQUARE GARON +330F ; NFKC_SCF; 30AC 30F3 30DE # So SQUARE GANMA +3310 ; NFKC_SCF; 30AE 30AC # So SQUARE GIGA +3311 ; NFKC_SCF; 30AE 30CB 30FC # So SQUARE GINII +3312 ; NFKC_SCF; 30AD 30E5 30EA 30FC #So SQUARE KYURII +3313 ; NFKC_SCF; 30AE 30EB 30C0 30FC #So SQUARE GIRUDAA +3314 ; NFKC_SCF; 30AD 30ED # So SQUARE KIRO +3315 ; NFKC_SCF; 30AD 30ED 30B0 30E9 30E0 #So SQUARE KIROGURAMU +3316 ; NFKC_SCF; 30AD 30ED 30E1 30FC 30C8 30EB #So SQUARE KIROMEETORU +3317 ; NFKC_SCF; 30AD 30ED 30EF 30C3 30C8 #So SQUARE KIROWATTO +3318 ; NFKC_SCF; 30B0 30E9 30E0 # So SQUARE GURAMU +3319 ; NFKC_SCF; 30B0 30E9 30E0 30C8 30F3 #So SQUARE GURAMUTON +331A ; NFKC_SCF; 30AF 30EB 30BC 30A4 30ED #So SQUARE KURUZEIRO +331B ; NFKC_SCF; 30AF 30ED 30FC 30CD #So SQUARE KUROONE +331C ; NFKC_SCF; 30B1 30FC 30B9 # So SQUARE KEESU +331D ; NFKC_SCF; 30B3 30EB 30CA # So SQUARE KORUNA +331E ; NFKC_SCF; 30B3 30FC 30DD # So SQUARE KOOPO +331F ; NFKC_SCF; 30B5 30A4 30AF 30EB #So SQUARE SAIKURU +3320 ; NFKC_SCF; 30B5 30F3 30C1 30FC 30E0 #So SQUARE SANTIIMU +3321 ; NFKC_SCF; 30B7 30EA 30F3 30B0 #So SQUARE SIRINGU +3322 ; NFKC_SCF; 30BB 30F3 30C1 # So SQUARE SENTI +3323 ; NFKC_SCF; 30BB 30F3 30C8 # So SQUARE SENTO +3324 ; NFKC_SCF; 30C0 30FC 30B9 # So SQUARE DAASU +3325 ; NFKC_SCF; 30C7 30B7 # So SQUARE DESI +3326 ; NFKC_SCF; 30C9 30EB # So SQUARE DORU +3327 ; NFKC_SCF; 30C8 30F3 # So SQUARE TON +3328 ; NFKC_SCF; 30CA 30CE # So SQUARE NANO +3329 ; NFKC_SCF; 30CE 30C3 30C8 # So SQUARE NOTTO +332A ; NFKC_SCF; 30CF 30A4 30C4 # So SQUARE HAITU +332B ; NFKC_SCF; 30D1 30FC 30BB 30F3 30C8 #So SQUARE PAASENTO +332C ; NFKC_SCF; 30D1 30FC 30C4 # So SQUARE PAATU +332D ; NFKC_SCF; 30D0 30FC 30EC 30EB #So SQUARE BAARERU +332E ; NFKC_SCF; 30D4 30A2 30B9 30C8 30EB #So SQUARE PIASUTORU +332F ; NFKC_SCF; 30D4 30AF 30EB # So SQUARE PIKURU +3330 ; NFKC_SCF; 30D4 30B3 # So SQUARE PIKO +3331 ; NFKC_SCF; 30D3 30EB # So SQUARE BIRU +3332 ; NFKC_SCF; 30D5 30A1 30E9 30C3 30C9 #So SQUARE HUARADDO +3333 ; NFKC_SCF; 30D5 30A3 30FC 30C8 #So SQUARE HUIITO +3334 ; NFKC_SCF; 30D6 30C3 30B7 30A7 30EB #So SQUARE BUSSYERU +3335 ; NFKC_SCF; 30D5 30E9 30F3 # So SQUARE HURAN +3336 ; NFKC_SCF; 30D8 30AF 30BF 30FC 30EB #So SQUARE HEKUTAARU +3337 ; NFKC_SCF; 30DA 30BD # So SQUARE PESO +3338 ; NFKC_SCF; 30DA 30CB 30D2 # So SQUARE PENIHI +3339 ; NFKC_SCF; 30D8 30EB 30C4 # So SQUARE HERUTU +333A ; NFKC_SCF; 30DA 30F3 30B9 # So SQUARE PENSU +333B ; NFKC_SCF; 30DA 30FC 30B8 # So SQUARE PEEZI +333C ; NFKC_SCF; 30D9 30FC 30BF # So SQUARE BEETA +333D ; NFKC_SCF; 30DD 30A4 30F3 30C8 #So SQUARE POINTO +333E ; NFKC_SCF; 30DC 30EB 30C8 # So SQUARE BORUTO +333F ; NFKC_SCF; 30DB 30F3 # So SQUARE HON +3340 ; NFKC_SCF; 30DD 30F3 30C9 # So SQUARE PONDO +3341 ; NFKC_SCF; 30DB 30FC 30EB # So SQUARE HOORU +3342 ; NFKC_SCF; 30DB 30FC 30F3 # So SQUARE HOON +3343 ; NFKC_SCF; 30DE 30A4 30AF 30ED #So SQUARE MAIKURO +3344 ; NFKC_SCF; 30DE 30A4 30EB # So SQUARE MAIRU +3345 ; NFKC_SCF; 30DE 30C3 30CF # So SQUARE MAHHA +3346 ; NFKC_SCF; 30DE 30EB 30AF # So SQUARE MARUKU +3347 ; NFKC_SCF; 30DE 30F3 30B7 30E7 30F3 #So SQUARE MANSYON +3348 ; NFKC_SCF; 30DF 30AF 30ED 30F3 #So SQUARE MIKURON +3349 ; NFKC_SCF; 30DF 30EA # So SQUARE MIRI +334A ; NFKC_SCF; 30DF 30EA 30D0 30FC 30EB #So SQUARE MIRIBAARU +334B ; NFKC_SCF; 30E1 30AC # So SQUARE MEGA +334C ; NFKC_SCF; 30E1 30AC 30C8 30F3 #So SQUARE MEGATON +334D ; NFKC_SCF; 30E1 30FC 30C8 30EB #So SQUARE MEETORU +334E ; NFKC_SCF; 30E4 30FC 30C9 # So SQUARE YAADO +334F ; NFKC_SCF; 30E4 30FC 30EB # So SQUARE YAARU +3350 ; NFKC_SCF; 30E6 30A2 30F3 # So SQUARE YUAN +3351 ; NFKC_SCF; 30EA 30C3 30C8 30EB #So SQUARE RITTORU +3352 ; NFKC_SCF; 30EA 30E9 # So SQUARE RIRA +3353 ; NFKC_SCF; 30EB 30D4 30FC # So SQUARE RUPII +3354 ; NFKC_SCF; 30EB 30FC 30D6 30EB #So SQUARE RUUBURU +3355 ; NFKC_SCF; 30EC 30E0 # So SQUARE REMU +3356 ; NFKC_SCF; 30EC 30F3 30C8 30B2 30F3 #So SQUARE RENTOGEN +3357 ; NFKC_SCF; 30EF 30C3 30C8 # So SQUARE WATTO +3358 ; NFKC_SCF; 0030 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO +3359 ; NFKC_SCF; 0031 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE +335A ; NFKC_SCF; 0032 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO +335B ; NFKC_SCF; 0033 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE +335C ; NFKC_SCF; 0034 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR +335D ; NFKC_SCF; 0035 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE +335E ; NFKC_SCF; 0036 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX +335F ; NFKC_SCF; 0037 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN +3360 ; NFKC_SCF; 0038 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT +3361 ; NFKC_SCF; 0039 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE +3362 ; NFKC_SCF; 0031 0030 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN +3363 ; NFKC_SCF; 0031 0031 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN +3364 ; NFKC_SCF; 0031 0032 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE +3365 ; NFKC_SCF; 0031 0033 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN +3366 ; NFKC_SCF; 0031 0034 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN +3367 ; NFKC_SCF; 0031 0035 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN +3368 ; NFKC_SCF; 0031 0036 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN +3369 ; NFKC_SCF; 0031 0037 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN +336A ; NFKC_SCF; 0031 0038 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN +336B ; NFKC_SCF; 0031 0039 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN +336C ; NFKC_SCF; 0032 0030 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY +336D ; NFKC_SCF; 0032 0031 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE +336E ; NFKC_SCF; 0032 0032 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO +336F ; NFKC_SCF; 0032 0033 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE +3370 ; NFKC_SCF; 0032 0034 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR +3371 ; NFKC_SCF; 0068 0070 0061 # So SQUARE HPA +3372 ; NFKC_SCF; 0064 0061 # So SQUARE DA +3373 ; NFKC_SCF; 0061 0075 # So SQUARE AU +3374 ; NFKC_SCF; 0062 0061 0072 # So SQUARE BAR +3375 ; NFKC_SCF; 006F 0076 # So SQUARE OV +3376 ; NFKC_SCF; 0070 0063 # So SQUARE PC +3377 ; NFKC_SCF; 0064 006D # So SQUARE DM +3378 ; NFKC_SCF; 0064 006D 0032 # So SQUARE DM SQUARED +3379 ; NFKC_SCF; 0064 006D 0033 # So SQUARE DM CUBED +337A ; NFKC_SCF; 0069 0075 # So SQUARE IU +337B ; NFKC_SCF; 5E73 6210 # So SQUARE ERA NAME HEISEI +337C ; NFKC_SCF; 662D 548C # So SQUARE ERA NAME SYOUWA +337D ; NFKC_SCF; 5927 6B63 # So SQUARE ERA NAME TAISYOU +337E ; NFKC_SCF; 660E 6CBB # So SQUARE ERA NAME MEIZI +337F ; NFKC_SCF; 682A 5F0F 4F1A 793E #So SQUARE CORPORATION +3380 ; NFKC_SCF; 0070 0061 # So SQUARE PA AMPS +3381 ; NFKC_SCF; 006E 0061 # So SQUARE NA +3382 ; NFKC_SCF; 03BC 0061 # So SQUARE MU A +3383 ; NFKC_SCF; 006D 0061 # So SQUARE MA +3384 ; NFKC_SCF; 006B 0061 # So SQUARE KA +3385 ; NFKC_SCF; 006B 0062 # So SQUARE KB +3386 ; NFKC_SCF; 006D 0062 # So SQUARE MB +3387 ; NFKC_SCF; 0067 0062 # So SQUARE GB +3388 ; NFKC_SCF; 0063 0061 006C # So SQUARE CAL +3389 ; NFKC_SCF; 006B 0063 0061 006C #So SQUARE KCAL +338A ; NFKC_SCF; 0070 0066 # So SQUARE PF +338B ; NFKC_SCF; 006E 0066 # So SQUARE NF +338C ; NFKC_SCF; 03BC 0066 # So SQUARE MU F +338D ; NFKC_SCF; 03BC 0067 # So SQUARE MU G +338E ; NFKC_SCF; 006D 0067 # So SQUARE MG +338F ; NFKC_SCF; 006B 0067 # So SQUARE KG +3390 ; NFKC_SCF; 0068 007A # So SQUARE HZ +3391 ; NFKC_SCF; 006B 0068 007A # So SQUARE KHZ +3392 ; NFKC_SCF; 006D 0068 007A # So SQUARE MHZ +3393 ; NFKC_SCF; 0067 0068 007A # So SQUARE GHZ +3394 ; NFKC_SCF; 0074 0068 007A # So SQUARE THZ +3395 ; NFKC_SCF; 03BC 006C # So SQUARE MU L +3396 ; NFKC_SCF; 006D 006C # So SQUARE ML +3397 ; NFKC_SCF; 0064 006C # So SQUARE DL +3398 ; NFKC_SCF; 006B 006C # So SQUARE KL +3399 ; NFKC_SCF; 0066 006D # So SQUARE FM +339A ; NFKC_SCF; 006E 006D # So SQUARE NM +339B ; NFKC_SCF; 03BC 006D # So SQUARE MU M +339C ; NFKC_SCF; 006D 006D # So SQUARE MM +339D ; NFKC_SCF; 0063 006D # So SQUARE CM +339E ; NFKC_SCF; 006B 006D # So SQUARE KM +339F ; NFKC_SCF; 006D 006D 0032 # So SQUARE MM SQUARED +33A0 ; NFKC_SCF; 0063 006D 0032 # So SQUARE CM SQUARED +33A1 ; NFKC_SCF; 006D 0032 # So SQUARE M SQUARED +33A2 ; NFKC_SCF; 006B 006D 0032 # So SQUARE KM SQUARED +33A3 ; NFKC_SCF; 006D 006D 0033 # So SQUARE MM CUBED +33A4 ; NFKC_SCF; 0063 006D 0033 # So SQUARE CM CUBED +33A5 ; NFKC_SCF; 006D 0033 # So SQUARE M CUBED +33A6 ; NFKC_SCF; 006B 006D 0033 # So SQUARE KM CUBED +33A7 ; NFKC_SCF; 006D 2215 0073 # So SQUARE M OVER S +33A8 ; NFKC_SCF; 006D 2215 0073 0032 #So SQUARE M OVER S SQUARED +33A9 ; NFKC_SCF; 0070 0061 # So SQUARE PA +33AA ; NFKC_SCF; 006B 0070 0061 # So SQUARE KPA +33AB ; NFKC_SCF; 006D 0070 0061 # So SQUARE MPA +33AC ; NFKC_SCF; 0067 0070 0061 # So SQUARE GPA +33AD ; NFKC_SCF; 0072 0061 0064 # So SQUARE RAD +33AE ; NFKC_SCF; 0072 0061 0064 2215 0073 #So SQUARE RAD OVER S +33AF ; NFKC_SCF; 0072 0061 0064 2215 0073 0032 #So SQUARE RAD OVER S SQUARED +33B0 ; NFKC_SCF; 0070 0073 # So SQUARE PS +33B1 ; NFKC_SCF; 006E 0073 # So SQUARE NS +33B2 ; NFKC_SCF; 03BC 0073 # So SQUARE MU S +33B3 ; NFKC_SCF; 006D 0073 # So SQUARE MS +33B4 ; NFKC_SCF; 0070 0076 # So SQUARE PV +33B5 ; NFKC_SCF; 006E 0076 # So SQUARE NV +33B6 ; NFKC_SCF; 03BC 0076 # So SQUARE MU V +33B7 ; NFKC_SCF; 006D 0076 # So SQUARE MV +33B8 ; NFKC_SCF; 006B 0076 # So SQUARE KV +33B9 ; NFKC_SCF; 006D 0076 # So SQUARE MV MEGA +33BA ; NFKC_SCF; 0070 0077 # So SQUARE PW +33BB ; NFKC_SCF; 006E 0077 # So SQUARE NW +33BC ; NFKC_SCF; 03BC 0077 # So SQUARE MU W +33BD ; NFKC_SCF; 006D 0077 # So SQUARE MW +33BE ; NFKC_SCF; 006B 0077 # So SQUARE KW +33BF ; NFKC_SCF; 006D 0077 # So SQUARE MW MEGA +33C0 ; NFKC_SCF; 006B 03C9 # So SQUARE K OHM +33C1 ; NFKC_SCF; 006D 03C9 # So SQUARE M OHM +33C2 ; NFKC_SCF; 0061 002E 006D 002E #So SQUARE AM +33C3 ; NFKC_SCF; 0062 0071 # So SQUARE BQ +33C4 ; NFKC_SCF; 0063 0063 # So SQUARE CC +33C5 ; NFKC_SCF; 0063 0064 # So SQUARE CD +33C6 ; NFKC_SCF; 0063 2215 006B 0067 #So SQUARE C OVER KG +33C7 ; NFKC_SCF; 0063 006F 002E # So SQUARE CO +33C8 ; NFKC_SCF; 0064 0062 # So SQUARE DB +33C9 ; NFKC_SCF; 0067 0079 # So SQUARE GY +33CA ; NFKC_SCF; 0068 0061 # So SQUARE HA +33CB ; NFKC_SCF; 0068 0070 # So SQUARE HP +33CC ; NFKC_SCF; 0069 006E # So SQUARE IN +33CD ; NFKC_SCF; 006B 006B # So SQUARE KK +33CE ; NFKC_SCF; 006B 006D # So SQUARE KM CAPITAL +33CF ; NFKC_SCF; 006B 0074 # So SQUARE KT +33D0 ; NFKC_SCF; 006C 006D # So SQUARE LM +33D1 ; NFKC_SCF; 006C 006E # So SQUARE LN +33D2 ; NFKC_SCF; 006C 006F 0067 # So SQUARE LOG +33D3 ; NFKC_SCF; 006C 0078 # So SQUARE LX +33D4 ; NFKC_SCF; 006D 0062 # So SQUARE MB SMALL +33D5 ; NFKC_SCF; 006D 0069 006C # So SQUARE MIL +33D6 ; NFKC_SCF; 006D 006F 006C # So SQUARE MOL +33D7 ; NFKC_SCF; 0070 0068 # So SQUARE PH +33D8 ; NFKC_SCF; 0070 002E 006D 002E #So SQUARE PM +33D9 ; NFKC_SCF; 0070 0070 006D # So SQUARE PPM +33DA ; NFKC_SCF; 0070 0072 # So SQUARE PR +33DB ; NFKC_SCF; 0073 0072 # So SQUARE SR +33DC ; NFKC_SCF; 0073 0076 # So SQUARE SV +33DD ; NFKC_SCF; 0077 0062 # So SQUARE WB +33DE ; NFKC_SCF; 0076 2215 006D # So SQUARE V OVER M +33DF ; NFKC_SCF; 0061 2215 006D # So SQUARE A OVER M +33E0 ; NFKC_SCF; 0031 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE +33E1 ; NFKC_SCF; 0032 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO +33E2 ; NFKC_SCF; 0033 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE +33E3 ; NFKC_SCF; 0034 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR +33E4 ; NFKC_SCF; 0035 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE +33E5 ; NFKC_SCF; 0036 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX +33E6 ; NFKC_SCF; 0037 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN +33E7 ; NFKC_SCF; 0038 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT +33E8 ; NFKC_SCF; 0039 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE +33E9 ; NFKC_SCF; 0031 0030 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN +33EA ; NFKC_SCF; 0031 0031 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN +33EB ; NFKC_SCF; 0031 0032 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE +33EC ; NFKC_SCF; 0031 0033 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN +33ED ; NFKC_SCF; 0031 0034 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN +33EE ; NFKC_SCF; 0031 0035 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN +33EF ; NFKC_SCF; 0031 0036 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN +33F0 ; NFKC_SCF; 0031 0037 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN +33F1 ; NFKC_SCF; 0031 0038 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN +33F2 ; NFKC_SCF; 0031 0039 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN +33F3 ; NFKC_SCF; 0032 0030 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY +33F4 ; NFKC_SCF; 0032 0031 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE +33F5 ; NFKC_SCF; 0032 0032 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO +33F6 ; NFKC_SCF; 0032 0033 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE +33F7 ; NFKC_SCF; 0032 0034 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR +33F8 ; NFKC_SCF; 0032 0035 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE +33F9 ; NFKC_SCF; 0032 0036 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX +33FA ; NFKC_SCF; 0032 0037 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN +33FB ; NFKC_SCF; 0032 0038 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT +33FC ; NFKC_SCF; 0032 0039 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE +33FD ; NFKC_SCF; 0033 0030 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY +33FE ; NFKC_SCF; 0033 0031 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE +33FF ; NFKC_SCF; 0067 0061 006C # So SQUARE GAL +A640 ; NFKC_SCF; A641 # L& CYRILLIC CAPITAL LETTER ZEMLYA +A642 ; NFKC_SCF; A643 # L& CYRILLIC CAPITAL LETTER DZELO +A644 ; NFKC_SCF; A645 # L& CYRILLIC CAPITAL LETTER REVERSED DZE +A646 ; NFKC_SCF; A647 # L& CYRILLIC CAPITAL LETTER IOTA +A648 ; NFKC_SCF; A649 # L& CYRILLIC CAPITAL LETTER DJERV +A64A ; NFKC_SCF; A64B # L& CYRILLIC CAPITAL LETTER MONOGRAPH UK +A64C ; NFKC_SCF; A64D # L& CYRILLIC CAPITAL LETTER BROAD OMEGA +A64E ; NFKC_SCF; A64F # L& CYRILLIC CAPITAL LETTER NEUTRAL YER +A650 ; NFKC_SCF; A651 # L& CYRILLIC CAPITAL LETTER YERU WITH BACK YER +A652 ; NFKC_SCF; A653 # L& CYRILLIC CAPITAL LETTER IOTIFIED YAT +A654 ; NFKC_SCF; A655 # L& CYRILLIC CAPITAL LETTER REVERSED YU +A656 ; NFKC_SCF; A657 # L& CYRILLIC CAPITAL LETTER IOTIFIED A +A658 ; NFKC_SCF; A659 # L& CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS +A65A ; NFKC_SCF; A65B # L& CYRILLIC CAPITAL LETTER BLENDED YUS +A65C ; NFKC_SCF; A65D # L& CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS +A65E ; NFKC_SCF; A65F # L& CYRILLIC CAPITAL LETTER YN +A660 ; NFKC_SCF; A661 # L& CYRILLIC CAPITAL LETTER REVERSED TSE +A662 ; NFKC_SCF; A663 # L& CYRILLIC CAPITAL LETTER SOFT DE +A664 ; NFKC_SCF; A665 # L& CYRILLIC CAPITAL LETTER SOFT EL +A666 ; NFKC_SCF; A667 # L& CYRILLIC CAPITAL LETTER SOFT EM +A668 ; NFKC_SCF; A669 # L& CYRILLIC CAPITAL LETTER MONOCULAR O +A66A ; NFKC_SCF; A66B # L& CYRILLIC CAPITAL LETTER BINOCULAR O +A66C ; NFKC_SCF; A66D # L& CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O +A680 ; NFKC_SCF; A681 # L& CYRILLIC CAPITAL LETTER DWE +A682 ; NFKC_SCF; A683 # L& CYRILLIC CAPITAL LETTER DZWE +A684 ; NFKC_SCF; A685 # L& CYRILLIC CAPITAL LETTER ZHWE +A686 ; NFKC_SCF; A687 # L& CYRILLIC CAPITAL LETTER CCHE +A688 ; NFKC_SCF; A689 # L& CYRILLIC CAPITAL LETTER DZZE +A68A ; NFKC_SCF; A68B # L& CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK +A68C ; NFKC_SCF; A68D # L& CYRILLIC CAPITAL LETTER TWE +A68E ; NFKC_SCF; A68F # L& CYRILLIC CAPITAL LETTER TSWE +A690 ; NFKC_SCF; A691 # L& CYRILLIC CAPITAL LETTER TSSE +A692 ; NFKC_SCF; A693 # L& CYRILLIC CAPITAL LETTER TCHE +A694 ; NFKC_SCF; A695 # L& CYRILLIC CAPITAL LETTER HWE +A696 ; NFKC_SCF; A697 # L& CYRILLIC CAPITAL LETTER SHWE +A698 ; NFKC_SCF; A699 # L& CYRILLIC CAPITAL LETTER DOUBLE O +A69A ; NFKC_SCF; A69B # L& CYRILLIC CAPITAL LETTER CROSSED O +A69C ; NFKC_SCF; 044A # Lm MODIFIER LETTER CYRILLIC HARD SIGN +A69D ; NFKC_SCF; 044C # Lm MODIFIER LETTER CYRILLIC SOFT SIGN +A722 ; NFKC_SCF; A723 # L& LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF +A724 ; NFKC_SCF; A725 # L& LATIN CAPITAL LETTER EGYPTOLOGICAL AIN +A726 ; NFKC_SCF; A727 # L& LATIN CAPITAL LETTER HENG +A728 ; NFKC_SCF; A729 # L& LATIN CAPITAL LETTER TZ +A72A ; NFKC_SCF; A72B # L& LATIN CAPITAL LETTER TRESILLO +A72C ; NFKC_SCF; A72D # L& LATIN CAPITAL LETTER CUATRILLO +A72E ; NFKC_SCF; A72F # L& LATIN CAPITAL LETTER CUATRILLO WITH COMMA +A732 ; NFKC_SCF; A733 # L& LATIN CAPITAL LETTER AA +A734 ; NFKC_SCF; A735 # L& LATIN CAPITAL LETTER AO +A736 ; NFKC_SCF; A737 # L& LATIN CAPITAL LETTER AU +A738 ; NFKC_SCF; A739 # L& LATIN CAPITAL LETTER AV +A73A ; NFKC_SCF; A73B # L& LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR +A73C ; NFKC_SCF; A73D # L& LATIN CAPITAL LETTER AY +A73E ; NFKC_SCF; A73F # L& LATIN CAPITAL LETTER REVERSED C WITH DOT +A740 ; NFKC_SCF; A741 # L& LATIN CAPITAL LETTER K WITH STROKE +A742 ; NFKC_SCF; A743 # L& LATIN CAPITAL LETTER K WITH DIAGONAL STROKE +A744 ; NFKC_SCF; A745 # L& LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE +A746 ; NFKC_SCF; A747 # L& LATIN CAPITAL LETTER BROKEN L +A748 ; NFKC_SCF; A749 # L& LATIN CAPITAL LETTER L WITH HIGH STROKE +A74A ; NFKC_SCF; A74B # L& LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY +A74C ; NFKC_SCF; A74D # L& LATIN CAPITAL LETTER O WITH LOOP +A74E ; NFKC_SCF; A74F # L& LATIN CAPITAL LETTER OO +A750 ; NFKC_SCF; A751 # L& LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER +A752 ; NFKC_SCF; A753 # L& LATIN CAPITAL LETTER P WITH FLOURISH +A754 ; NFKC_SCF; A755 # L& LATIN CAPITAL LETTER P WITH SQUIRREL TAIL +A756 ; NFKC_SCF; A757 # L& LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER +A758 ; NFKC_SCF; A759 # L& LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE +A75A ; NFKC_SCF; A75B # L& LATIN CAPITAL LETTER R ROTUNDA +A75C ; NFKC_SCF; A75D # L& LATIN CAPITAL LETTER RUM ROTUNDA +A75E ; NFKC_SCF; A75F # L& LATIN CAPITAL LETTER V WITH DIAGONAL STROKE +A760 ; NFKC_SCF; A761 # L& LATIN CAPITAL LETTER VY +A762 ; NFKC_SCF; A763 # L& LATIN CAPITAL LETTER VISIGOTHIC Z +A764 ; NFKC_SCF; A765 # L& LATIN CAPITAL LETTER THORN WITH STROKE +A766 ; NFKC_SCF; A767 # L& LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER +A768 ; NFKC_SCF; A769 # L& LATIN CAPITAL LETTER VEND +A76A ; NFKC_SCF; A76B # L& LATIN CAPITAL LETTER ET +A76C ; NFKC_SCF; A76D # L& LATIN CAPITAL LETTER IS +A76E ; NFKC_SCF; A76F # L& LATIN CAPITAL LETTER CON +A770 ; NFKC_SCF; A76F # Lm MODIFIER LETTER US +A779 ; NFKC_SCF; A77A # L& LATIN CAPITAL LETTER INSULAR D +A77B ; NFKC_SCF; A77C # L& LATIN CAPITAL LETTER INSULAR F +A77D ; NFKC_SCF; 1D79 # L& LATIN CAPITAL LETTER INSULAR G +A77E ; NFKC_SCF; A77F # L& LATIN CAPITAL LETTER TURNED INSULAR G +A780 ; NFKC_SCF; A781 # L& LATIN CAPITAL LETTER TURNED L +A782 ; NFKC_SCF; A783 # L& LATIN CAPITAL LETTER INSULAR R +A784 ; NFKC_SCF; A785 # L& LATIN CAPITAL LETTER INSULAR S +A786 ; NFKC_SCF; A787 # L& LATIN CAPITAL LETTER INSULAR T +A78B ; NFKC_SCF; A78C # L& LATIN CAPITAL LETTER SALTILLO +A78D ; NFKC_SCF; 0265 # L& LATIN CAPITAL LETTER TURNED H +A790 ; NFKC_SCF; A791 # L& LATIN CAPITAL LETTER N WITH DESCENDER +A792 ; NFKC_SCF; A793 # L& LATIN CAPITAL LETTER C WITH BAR +A796 ; NFKC_SCF; A797 # L& LATIN CAPITAL LETTER B WITH FLOURISH +A798 ; NFKC_SCF; A799 # L& LATIN CAPITAL LETTER F WITH STROKE +A79A ; NFKC_SCF; A79B # L& LATIN CAPITAL LETTER VOLAPUK AE +A79C ; NFKC_SCF; A79D # L& LATIN CAPITAL LETTER VOLAPUK OE +A79E ; NFKC_SCF; A79F # L& LATIN CAPITAL LETTER VOLAPUK UE +A7A0 ; NFKC_SCF; A7A1 # L& LATIN CAPITAL LETTER G WITH OBLIQUE STROKE +A7A2 ; NFKC_SCF; A7A3 # L& LATIN CAPITAL LETTER K WITH OBLIQUE STROKE +A7A4 ; NFKC_SCF; A7A5 # L& LATIN CAPITAL LETTER N WITH OBLIQUE STROKE +A7A6 ; NFKC_SCF; A7A7 # L& LATIN CAPITAL LETTER R WITH OBLIQUE STROKE +A7A8 ; NFKC_SCF; A7A9 # L& LATIN CAPITAL LETTER S WITH OBLIQUE STROKE +A7AA ; NFKC_SCF; 0266 # L& LATIN CAPITAL LETTER H WITH HOOK +A7AB ; NFKC_SCF; 025C # L& LATIN CAPITAL LETTER REVERSED OPEN E +A7AC ; NFKC_SCF; 0261 # L& LATIN CAPITAL LETTER SCRIPT G +A7AD ; NFKC_SCF; 026C # L& LATIN CAPITAL LETTER L WITH BELT +A7AE ; NFKC_SCF; 026A # L& LATIN CAPITAL LETTER SMALL CAPITAL I +A7B0 ; NFKC_SCF; 029E # L& LATIN CAPITAL LETTER TURNED K +A7B1 ; NFKC_SCF; 0287 # L& LATIN CAPITAL LETTER TURNED T +A7B2 ; NFKC_SCF; 029D # L& LATIN CAPITAL LETTER J WITH CROSSED-TAIL +A7B3 ; NFKC_SCF; AB53 # L& LATIN CAPITAL LETTER CHI +A7B4 ; NFKC_SCF; A7B5 # L& LATIN CAPITAL LETTER BETA +A7B6 ; NFKC_SCF; A7B7 # L& LATIN CAPITAL LETTER OMEGA +A7B8 ; NFKC_SCF; A7B9 # L& LATIN CAPITAL LETTER U WITH STROKE +A7BA ; NFKC_SCF; A7BB # L& LATIN CAPITAL LETTER GLOTTAL A +A7BC ; NFKC_SCF; A7BD # L& LATIN CAPITAL LETTER GLOTTAL I +A7BE ; NFKC_SCF; A7BF # L& LATIN CAPITAL LETTER GLOTTAL U +A7C0 ; NFKC_SCF; A7C1 # L& LATIN CAPITAL LETTER OLD POLISH O +A7C2 ; NFKC_SCF; A7C3 # L& LATIN CAPITAL LETTER ANGLICANA W +A7C4 ; NFKC_SCF; A794 # L& LATIN CAPITAL LETTER C WITH PALATAL HOOK +A7C5 ; NFKC_SCF; 0282 # L& LATIN CAPITAL LETTER S WITH HOOK +A7C6 ; NFKC_SCF; 1D8E # L& LATIN CAPITAL LETTER Z WITH PALATAL HOOK +A7C7 ; NFKC_SCF; A7C8 # L& LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY +A7C9 ; NFKC_SCF; A7CA # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY +A7D0 ; NFKC_SCF; A7D1 # L& LATIN CAPITAL LETTER CLOSED INSULAR G +A7D6 ; NFKC_SCF; A7D7 # L& LATIN CAPITAL LETTER MIDDLE SCOTS S +A7D8 ; NFKC_SCF; A7D9 # L& LATIN CAPITAL LETTER SIGMOID S +A7F2 ; NFKC_SCF; 0063 # Lm MODIFIER LETTER CAPITAL C +A7F3 ; NFKC_SCF; 0066 # Lm MODIFIER LETTER CAPITAL F +A7F4 ; NFKC_SCF; 0071 # Lm MODIFIER LETTER CAPITAL Q +A7F5 ; NFKC_SCF; A7F6 # L& LATIN CAPITAL LETTER REVERSED HALF H +A7F8 ; NFKC_SCF; 0127 # Lm MODIFIER LETTER CAPITAL H WITH STROKE +A7F9 ; NFKC_SCF; 0153 # Lm MODIFIER LETTER SMALL LIGATURE OE +AB5C ; NFKC_SCF; A727 # Lm MODIFIER LETTER SMALL HENG +AB5D ; NFKC_SCF; AB37 # Lm MODIFIER LETTER SMALL L WITH INVERTED LAZY S +AB5E ; NFKC_SCF; 026B # Lm MODIFIER LETTER SMALL L WITH MIDDLE TILDE +AB5F ; NFKC_SCF; AB52 # Lm MODIFIER LETTER SMALL U WITH LEFT HOOK +AB69 ; NFKC_SCF; 028D # Lm MODIFIER LETTER SMALL TURNED W +AB70 ; NFKC_SCF; 13A0 # L& CHEROKEE SMALL LETTER A +AB71 ; NFKC_SCF; 13A1 # L& CHEROKEE SMALL LETTER E +AB72 ; NFKC_SCF; 13A2 # L& CHEROKEE SMALL LETTER I +AB73 ; NFKC_SCF; 13A3 # L& CHEROKEE SMALL LETTER O +AB74 ; NFKC_SCF; 13A4 # L& CHEROKEE SMALL LETTER U +AB75 ; NFKC_SCF; 13A5 # L& CHEROKEE SMALL LETTER V +AB76 ; NFKC_SCF; 13A6 # L& CHEROKEE SMALL LETTER GA +AB77 ; NFKC_SCF; 13A7 # L& CHEROKEE SMALL LETTER KA +AB78 ; NFKC_SCF; 13A8 # L& CHEROKEE SMALL LETTER GE +AB79 ; NFKC_SCF; 13A9 # L& CHEROKEE SMALL LETTER GI +AB7A ; NFKC_SCF; 13AA # L& CHEROKEE SMALL LETTER GO +AB7B ; NFKC_SCF; 13AB # L& CHEROKEE SMALL LETTER GU +AB7C ; NFKC_SCF; 13AC # L& CHEROKEE SMALL LETTER GV +AB7D ; NFKC_SCF; 13AD # L& CHEROKEE SMALL LETTER HA +AB7E ; NFKC_SCF; 13AE # L& CHEROKEE SMALL LETTER HE +AB7F ; NFKC_SCF; 13AF # L& CHEROKEE SMALL LETTER HI +AB80 ; NFKC_SCF; 13B0 # L& CHEROKEE SMALL LETTER HO +AB81 ; NFKC_SCF; 13B1 # L& CHEROKEE SMALL LETTER HU +AB82 ; NFKC_SCF; 13B2 # L& CHEROKEE SMALL LETTER HV +AB83 ; NFKC_SCF; 13B3 # L& CHEROKEE SMALL LETTER LA +AB84 ; NFKC_SCF; 13B4 # L& CHEROKEE SMALL LETTER LE +AB85 ; NFKC_SCF; 13B5 # L& CHEROKEE SMALL LETTER LI +AB86 ; NFKC_SCF; 13B6 # L& CHEROKEE SMALL LETTER LO +AB87 ; NFKC_SCF; 13B7 # L& CHEROKEE SMALL LETTER LU +AB88 ; NFKC_SCF; 13B8 # L& CHEROKEE SMALL LETTER LV +AB89 ; NFKC_SCF; 13B9 # L& CHEROKEE SMALL LETTER MA +AB8A ; NFKC_SCF; 13BA # L& CHEROKEE SMALL LETTER ME +AB8B ; NFKC_SCF; 13BB # L& CHEROKEE SMALL LETTER MI +AB8C ; NFKC_SCF; 13BC # L& CHEROKEE SMALL LETTER MO +AB8D ; NFKC_SCF; 13BD # L& CHEROKEE SMALL LETTER MU +AB8E ; NFKC_SCF; 13BE # L& CHEROKEE SMALL LETTER NA +AB8F ; NFKC_SCF; 13BF # L& CHEROKEE SMALL LETTER HNA +AB90 ; NFKC_SCF; 13C0 # L& CHEROKEE SMALL LETTER NAH +AB91 ; NFKC_SCF; 13C1 # L& CHEROKEE SMALL LETTER NE +AB92 ; NFKC_SCF; 13C2 # L& CHEROKEE SMALL LETTER NI +AB93 ; NFKC_SCF; 13C3 # L& CHEROKEE SMALL LETTER NO +AB94 ; NFKC_SCF; 13C4 # L& CHEROKEE SMALL LETTER NU +AB95 ; NFKC_SCF; 13C5 # L& CHEROKEE SMALL LETTER NV +AB96 ; NFKC_SCF; 13C6 # L& CHEROKEE SMALL LETTER QUA +AB97 ; NFKC_SCF; 13C7 # L& CHEROKEE SMALL LETTER QUE +AB98 ; NFKC_SCF; 13C8 # L& CHEROKEE SMALL LETTER QUI +AB99 ; NFKC_SCF; 13C9 # L& CHEROKEE SMALL LETTER QUO +AB9A ; NFKC_SCF; 13CA # L& CHEROKEE SMALL LETTER QUU +AB9B ; NFKC_SCF; 13CB # L& CHEROKEE SMALL LETTER QUV +AB9C ; NFKC_SCF; 13CC # L& CHEROKEE SMALL LETTER SA +AB9D ; NFKC_SCF; 13CD # L& CHEROKEE SMALL LETTER S +AB9E ; NFKC_SCF; 13CE # L& CHEROKEE SMALL LETTER SE +AB9F ; NFKC_SCF; 13CF # L& CHEROKEE SMALL LETTER SI +ABA0 ; NFKC_SCF; 13D0 # L& CHEROKEE SMALL LETTER SO +ABA1 ; NFKC_SCF; 13D1 # L& CHEROKEE SMALL LETTER SU +ABA2 ; NFKC_SCF; 13D2 # L& CHEROKEE SMALL LETTER SV +ABA3 ; NFKC_SCF; 13D3 # L& CHEROKEE SMALL LETTER DA +ABA4 ; NFKC_SCF; 13D4 # L& CHEROKEE SMALL LETTER TA +ABA5 ; NFKC_SCF; 13D5 # L& CHEROKEE SMALL LETTER DE +ABA6 ; NFKC_SCF; 13D6 # L& CHEROKEE SMALL LETTER TE +ABA7 ; NFKC_SCF; 13D7 # L& CHEROKEE SMALL LETTER DI +ABA8 ; NFKC_SCF; 13D8 # L& CHEROKEE SMALL LETTER TI +ABA9 ; NFKC_SCF; 13D9 # L& CHEROKEE SMALL LETTER DO +ABAA ; NFKC_SCF; 13DA # L& CHEROKEE SMALL LETTER DU +ABAB ; NFKC_SCF; 13DB # L& CHEROKEE SMALL LETTER DV +ABAC ; NFKC_SCF; 13DC # L& CHEROKEE SMALL LETTER DLA +ABAD ; NFKC_SCF; 13DD # L& CHEROKEE SMALL LETTER TLA +ABAE ; NFKC_SCF; 13DE # L& CHEROKEE SMALL LETTER TLE +ABAF ; NFKC_SCF; 13DF # L& CHEROKEE SMALL LETTER TLI +ABB0 ; NFKC_SCF; 13E0 # L& CHEROKEE SMALL LETTER TLO +ABB1 ; NFKC_SCF; 13E1 # L& CHEROKEE SMALL LETTER TLU +ABB2 ; NFKC_SCF; 13E2 # L& CHEROKEE SMALL LETTER TLV +ABB3 ; NFKC_SCF; 13E3 # L& CHEROKEE SMALL LETTER TSA +ABB4 ; NFKC_SCF; 13E4 # L& CHEROKEE SMALL LETTER TSE +ABB5 ; NFKC_SCF; 13E5 # L& CHEROKEE SMALL LETTER TSI +ABB6 ; NFKC_SCF; 13E6 # L& CHEROKEE SMALL LETTER TSO +ABB7 ; NFKC_SCF; 13E7 # L& CHEROKEE SMALL LETTER TSU +ABB8 ; NFKC_SCF; 13E8 # L& CHEROKEE SMALL LETTER TSV +ABB9 ; NFKC_SCF; 13E9 # L& CHEROKEE SMALL LETTER WA +ABBA ; NFKC_SCF; 13EA # L& CHEROKEE SMALL LETTER WE +ABBB ; NFKC_SCF; 13EB # L& CHEROKEE SMALL LETTER WI +ABBC ; NFKC_SCF; 13EC # L& CHEROKEE SMALL LETTER WO +ABBD ; NFKC_SCF; 13ED # L& CHEROKEE SMALL LETTER WU +ABBE ; NFKC_SCF; 13EE # L& CHEROKEE SMALL LETTER WV +ABBF ; NFKC_SCF; 13EF # L& CHEROKEE SMALL LETTER YA +F900 ; NFKC_SCF; 8C48 # Lo CJK COMPATIBILITY IDEOGRAPH-F900 +F901 ; NFKC_SCF; 66F4 # Lo CJK COMPATIBILITY IDEOGRAPH-F901 +F902 ; NFKC_SCF; 8ECA # Lo CJK COMPATIBILITY IDEOGRAPH-F902 +F903 ; NFKC_SCF; 8CC8 # Lo CJK COMPATIBILITY IDEOGRAPH-F903 +F904 ; NFKC_SCF; 6ED1 # Lo CJK COMPATIBILITY IDEOGRAPH-F904 +F905 ; NFKC_SCF; 4E32 # Lo CJK COMPATIBILITY IDEOGRAPH-F905 +F906 ; NFKC_SCF; 53E5 # Lo CJK COMPATIBILITY IDEOGRAPH-F906 +F907..F908 ; NFKC_SCF; 9F9C # Lo [2] CJK COMPATIBILITY IDEOGRAPH-F907..CJK COMPATIBILITY IDEOGRAPH-F908 +F909 ; NFKC_SCF; 5951 # Lo CJK COMPATIBILITY IDEOGRAPH-F909 +F90A ; NFKC_SCF; 91D1 # Lo CJK COMPATIBILITY IDEOGRAPH-F90A +F90B ; NFKC_SCF; 5587 # Lo CJK COMPATIBILITY IDEOGRAPH-F90B +F90C ; NFKC_SCF; 5948 # Lo CJK COMPATIBILITY IDEOGRAPH-F90C +F90D ; NFKC_SCF; 61F6 # Lo CJK COMPATIBILITY IDEOGRAPH-F90D +F90E ; NFKC_SCF; 7669 # Lo CJK COMPATIBILITY IDEOGRAPH-F90E +F90F ; NFKC_SCF; 7F85 # Lo CJK COMPATIBILITY IDEOGRAPH-F90F +F910 ; NFKC_SCF; 863F # Lo CJK COMPATIBILITY IDEOGRAPH-F910 +F911 ; NFKC_SCF; 87BA # Lo CJK COMPATIBILITY IDEOGRAPH-F911 +F912 ; NFKC_SCF; 88F8 # Lo CJK COMPATIBILITY IDEOGRAPH-F912 +F913 ; NFKC_SCF; 908F # Lo CJK COMPATIBILITY IDEOGRAPH-F913 +F914 ; NFKC_SCF; 6A02 # Lo CJK COMPATIBILITY IDEOGRAPH-F914 +F915 ; NFKC_SCF; 6D1B # Lo CJK COMPATIBILITY IDEOGRAPH-F915 +F916 ; NFKC_SCF; 70D9 # Lo CJK COMPATIBILITY IDEOGRAPH-F916 +F917 ; NFKC_SCF; 73DE # Lo CJK COMPATIBILITY IDEOGRAPH-F917 +F918 ; NFKC_SCF; 843D # Lo CJK COMPATIBILITY IDEOGRAPH-F918 +F919 ; NFKC_SCF; 916A # Lo CJK COMPATIBILITY IDEOGRAPH-F919 +F91A ; NFKC_SCF; 99F1 # Lo CJK COMPATIBILITY IDEOGRAPH-F91A +F91B ; NFKC_SCF; 4E82 # Lo CJK COMPATIBILITY IDEOGRAPH-F91B +F91C ; NFKC_SCF; 5375 # Lo CJK COMPATIBILITY IDEOGRAPH-F91C +F91D ; NFKC_SCF; 6B04 # Lo CJK COMPATIBILITY IDEOGRAPH-F91D +F91E ; NFKC_SCF; 721B # Lo CJK COMPATIBILITY IDEOGRAPH-F91E +F91F ; NFKC_SCF; 862D # Lo CJK COMPATIBILITY IDEOGRAPH-F91F +F920 ; NFKC_SCF; 9E1E # Lo CJK COMPATIBILITY IDEOGRAPH-F920 +F921 ; NFKC_SCF; 5D50 # Lo CJK COMPATIBILITY IDEOGRAPH-F921 +F922 ; NFKC_SCF; 6FEB # Lo CJK COMPATIBILITY IDEOGRAPH-F922 +F923 ; NFKC_SCF; 85CD # Lo CJK COMPATIBILITY IDEOGRAPH-F923 +F924 ; NFKC_SCF; 8964 # Lo CJK COMPATIBILITY IDEOGRAPH-F924 +F925 ; NFKC_SCF; 62C9 # Lo CJK COMPATIBILITY IDEOGRAPH-F925 +F926 ; NFKC_SCF; 81D8 # Lo CJK COMPATIBILITY IDEOGRAPH-F926 +F927 ; NFKC_SCF; 881F # Lo CJK COMPATIBILITY IDEOGRAPH-F927 +F928 ; NFKC_SCF; 5ECA # Lo CJK COMPATIBILITY IDEOGRAPH-F928 +F929 ; NFKC_SCF; 6717 # Lo CJK COMPATIBILITY IDEOGRAPH-F929 +F92A ; NFKC_SCF; 6D6A # Lo CJK COMPATIBILITY IDEOGRAPH-F92A +F92B ; NFKC_SCF; 72FC # Lo CJK COMPATIBILITY IDEOGRAPH-F92B +F92C ; NFKC_SCF; 90CE # Lo CJK COMPATIBILITY IDEOGRAPH-F92C +F92D ; NFKC_SCF; 4F86 # Lo CJK COMPATIBILITY IDEOGRAPH-F92D +F92E ; NFKC_SCF; 51B7 # Lo CJK COMPATIBILITY IDEOGRAPH-F92E +F92F ; NFKC_SCF; 52DE # Lo CJK COMPATIBILITY IDEOGRAPH-F92F +F930 ; NFKC_SCF; 64C4 # Lo CJK COMPATIBILITY IDEOGRAPH-F930 +F931 ; NFKC_SCF; 6AD3 # Lo CJK COMPATIBILITY IDEOGRAPH-F931 +F932 ; NFKC_SCF; 7210 # Lo CJK COMPATIBILITY IDEOGRAPH-F932 +F933 ; NFKC_SCF; 76E7 # Lo CJK COMPATIBILITY IDEOGRAPH-F933 +F934 ; NFKC_SCF; 8001 # Lo CJK COMPATIBILITY IDEOGRAPH-F934 +F935 ; NFKC_SCF; 8606 # Lo CJK COMPATIBILITY IDEOGRAPH-F935 +F936 ; NFKC_SCF; 865C # Lo CJK COMPATIBILITY IDEOGRAPH-F936 +F937 ; NFKC_SCF; 8DEF # Lo CJK COMPATIBILITY IDEOGRAPH-F937 +F938 ; NFKC_SCF; 9732 # Lo CJK COMPATIBILITY IDEOGRAPH-F938 +F939 ; NFKC_SCF; 9B6F # Lo CJK COMPATIBILITY IDEOGRAPH-F939 +F93A ; NFKC_SCF; 9DFA # Lo CJK COMPATIBILITY IDEOGRAPH-F93A +F93B ; NFKC_SCF; 788C # Lo CJK COMPATIBILITY IDEOGRAPH-F93B +F93C ; NFKC_SCF; 797F # Lo CJK COMPATIBILITY IDEOGRAPH-F93C +F93D ; NFKC_SCF; 7DA0 # Lo CJK COMPATIBILITY IDEOGRAPH-F93D +F93E ; NFKC_SCF; 83C9 # Lo CJK COMPATIBILITY IDEOGRAPH-F93E +F93F ; NFKC_SCF; 9304 # Lo CJK COMPATIBILITY IDEOGRAPH-F93F +F940 ; NFKC_SCF; 9E7F # Lo CJK COMPATIBILITY IDEOGRAPH-F940 +F941 ; NFKC_SCF; 8AD6 # Lo CJK COMPATIBILITY IDEOGRAPH-F941 +F942 ; NFKC_SCF; 58DF # Lo CJK COMPATIBILITY IDEOGRAPH-F942 +F943 ; NFKC_SCF; 5F04 # Lo CJK COMPATIBILITY IDEOGRAPH-F943 +F944 ; NFKC_SCF; 7C60 # Lo CJK COMPATIBILITY IDEOGRAPH-F944 +F945 ; NFKC_SCF; 807E # Lo CJK COMPATIBILITY IDEOGRAPH-F945 +F946 ; NFKC_SCF; 7262 # Lo CJK COMPATIBILITY IDEOGRAPH-F946 +F947 ; NFKC_SCF; 78CA # Lo CJK COMPATIBILITY IDEOGRAPH-F947 +F948 ; NFKC_SCF; 8CC2 # Lo CJK COMPATIBILITY IDEOGRAPH-F948 +F949 ; NFKC_SCF; 96F7 # Lo CJK COMPATIBILITY IDEOGRAPH-F949 +F94A ; NFKC_SCF; 58D8 # Lo CJK COMPATIBILITY IDEOGRAPH-F94A +F94B ; NFKC_SCF; 5C62 # Lo CJK COMPATIBILITY IDEOGRAPH-F94B +F94C ; NFKC_SCF; 6A13 # Lo CJK COMPATIBILITY IDEOGRAPH-F94C +F94D ; NFKC_SCF; 6DDA # Lo CJK COMPATIBILITY IDEOGRAPH-F94D +F94E ; NFKC_SCF; 6F0F # Lo CJK COMPATIBILITY IDEOGRAPH-F94E +F94F ; NFKC_SCF; 7D2F # Lo CJK COMPATIBILITY IDEOGRAPH-F94F +F950 ; NFKC_SCF; 7E37 # Lo CJK COMPATIBILITY IDEOGRAPH-F950 +F951 ; NFKC_SCF; 964B # Lo CJK COMPATIBILITY IDEOGRAPH-F951 +F952 ; NFKC_SCF; 52D2 # Lo CJK COMPATIBILITY IDEOGRAPH-F952 +F953 ; NFKC_SCF; 808B # Lo CJK COMPATIBILITY IDEOGRAPH-F953 +F954 ; NFKC_SCF; 51DC # Lo CJK COMPATIBILITY IDEOGRAPH-F954 +F955 ; NFKC_SCF; 51CC # Lo CJK COMPATIBILITY IDEOGRAPH-F955 +F956 ; NFKC_SCF; 7A1C # Lo CJK COMPATIBILITY IDEOGRAPH-F956 +F957 ; NFKC_SCF; 7DBE # Lo CJK COMPATIBILITY IDEOGRAPH-F957 +F958 ; NFKC_SCF; 83F1 # Lo CJK COMPATIBILITY IDEOGRAPH-F958 +F959 ; NFKC_SCF; 9675 # Lo CJK COMPATIBILITY IDEOGRAPH-F959 +F95A ; NFKC_SCF; 8B80 # Lo CJK COMPATIBILITY IDEOGRAPH-F95A +F95B ; NFKC_SCF; 62CF # Lo CJK COMPATIBILITY IDEOGRAPH-F95B +F95C ; NFKC_SCF; 6A02 # Lo CJK COMPATIBILITY IDEOGRAPH-F95C +F95D ; NFKC_SCF; 8AFE # Lo CJK COMPATIBILITY IDEOGRAPH-F95D +F95E ; NFKC_SCF; 4E39 # Lo CJK COMPATIBILITY IDEOGRAPH-F95E +F95F ; NFKC_SCF; 5BE7 # Lo CJK COMPATIBILITY IDEOGRAPH-F95F +F960 ; NFKC_SCF; 6012 # Lo CJK COMPATIBILITY IDEOGRAPH-F960 +F961 ; NFKC_SCF; 7387 # Lo CJK COMPATIBILITY IDEOGRAPH-F961 +F962 ; NFKC_SCF; 7570 # Lo CJK COMPATIBILITY IDEOGRAPH-F962 +F963 ; NFKC_SCF; 5317 # Lo CJK COMPATIBILITY IDEOGRAPH-F963 +F964 ; NFKC_SCF; 78FB # Lo CJK COMPATIBILITY IDEOGRAPH-F964 +F965 ; NFKC_SCF; 4FBF # Lo CJK COMPATIBILITY IDEOGRAPH-F965 +F966 ; NFKC_SCF; 5FA9 # Lo CJK COMPATIBILITY IDEOGRAPH-F966 +F967 ; NFKC_SCF; 4E0D # Lo CJK COMPATIBILITY IDEOGRAPH-F967 +F968 ; NFKC_SCF; 6CCC # Lo CJK COMPATIBILITY IDEOGRAPH-F968 +F969 ; NFKC_SCF; 6578 # Lo CJK COMPATIBILITY IDEOGRAPH-F969 +F96A ; NFKC_SCF; 7D22 # Lo CJK COMPATIBILITY IDEOGRAPH-F96A +F96B ; NFKC_SCF; 53C3 # Lo CJK COMPATIBILITY IDEOGRAPH-F96B +F96C ; NFKC_SCF; 585E # Lo CJK COMPATIBILITY IDEOGRAPH-F96C +F96D ; NFKC_SCF; 7701 # Lo CJK COMPATIBILITY IDEOGRAPH-F96D +F96E ; NFKC_SCF; 8449 # Lo CJK COMPATIBILITY IDEOGRAPH-F96E +F96F ; NFKC_SCF; 8AAA # Lo CJK COMPATIBILITY IDEOGRAPH-F96F +F970 ; NFKC_SCF; 6BBA # Lo CJK COMPATIBILITY IDEOGRAPH-F970 +F971 ; NFKC_SCF; 8FB0 # Lo CJK COMPATIBILITY IDEOGRAPH-F971 +F972 ; NFKC_SCF; 6C88 # Lo CJK COMPATIBILITY IDEOGRAPH-F972 +F973 ; NFKC_SCF; 62FE # Lo CJK COMPATIBILITY IDEOGRAPH-F973 +F974 ; NFKC_SCF; 82E5 # Lo CJK COMPATIBILITY IDEOGRAPH-F974 +F975 ; NFKC_SCF; 63A0 # Lo CJK COMPATIBILITY IDEOGRAPH-F975 +F976 ; NFKC_SCF; 7565 # Lo CJK COMPATIBILITY IDEOGRAPH-F976 +F977 ; NFKC_SCF; 4EAE # Lo CJK COMPATIBILITY IDEOGRAPH-F977 +F978 ; NFKC_SCF; 5169 # Lo CJK COMPATIBILITY IDEOGRAPH-F978 +F979 ; NFKC_SCF; 51C9 # Lo CJK COMPATIBILITY IDEOGRAPH-F979 +F97A ; NFKC_SCF; 6881 # Lo CJK COMPATIBILITY IDEOGRAPH-F97A +F97B ; NFKC_SCF; 7CE7 # Lo CJK COMPATIBILITY IDEOGRAPH-F97B +F97C ; NFKC_SCF; 826F # Lo CJK COMPATIBILITY IDEOGRAPH-F97C +F97D ; NFKC_SCF; 8AD2 # Lo CJK COMPATIBILITY IDEOGRAPH-F97D +F97E ; NFKC_SCF; 91CF # Lo CJK COMPATIBILITY IDEOGRAPH-F97E +F97F ; NFKC_SCF; 52F5 # Lo CJK COMPATIBILITY IDEOGRAPH-F97F +F980 ; NFKC_SCF; 5442 # Lo CJK COMPATIBILITY IDEOGRAPH-F980 +F981 ; NFKC_SCF; 5973 # Lo CJK COMPATIBILITY IDEOGRAPH-F981 +F982 ; NFKC_SCF; 5EEC # Lo CJK COMPATIBILITY IDEOGRAPH-F982 +F983 ; NFKC_SCF; 65C5 # Lo CJK COMPATIBILITY IDEOGRAPH-F983 +F984 ; NFKC_SCF; 6FFE # Lo CJK COMPATIBILITY IDEOGRAPH-F984 +F985 ; NFKC_SCF; 792A # Lo CJK COMPATIBILITY IDEOGRAPH-F985 +F986 ; NFKC_SCF; 95AD # Lo CJK COMPATIBILITY IDEOGRAPH-F986 +F987 ; NFKC_SCF; 9A6A # Lo CJK COMPATIBILITY IDEOGRAPH-F987 +F988 ; NFKC_SCF; 9E97 # Lo CJK COMPATIBILITY IDEOGRAPH-F988 +F989 ; NFKC_SCF; 9ECE # Lo CJK COMPATIBILITY IDEOGRAPH-F989 +F98A ; NFKC_SCF; 529B # Lo CJK COMPATIBILITY IDEOGRAPH-F98A +F98B ; NFKC_SCF; 66C6 # Lo CJK COMPATIBILITY IDEOGRAPH-F98B +F98C ; NFKC_SCF; 6B77 # Lo CJK COMPATIBILITY IDEOGRAPH-F98C +F98D ; NFKC_SCF; 8F62 # Lo CJK COMPATIBILITY IDEOGRAPH-F98D +F98E ; NFKC_SCF; 5E74 # Lo CJK COMPATIBILITY IDEOGRAPH-F98E +F98F ; NFKC_SCF; 6190 # Lo CJK COMPATIBILITY IDEOGRAPH-F98F +F990 ; NFKC_SCF; 6200 # Lo CJK COMPATIBILITY IDEOGRAPH-F990 +F991 ; NFKC_SCF; 649A # Lo CJK COMPATIBILITY IDEOGRAPH-F991 +F992 ; NFKC_SCF; 6F23 # Lo CJK COMPATIBILITY IDEOGRAPH-F992 +F993 ; NFKC_SCF; 7149 # Lo CJK COMPATIBILITY IDEOGRAPH-F993 +F994 ; NFKC_SCF; 7489 # Lo CJK COMPATIBILITY IDEOGRAPH-F994 +F995 ; NFKC_SCF; 79CA # Lo CJK COMPATIBILITY IDEOGRAPH-F995 +F996 ; NFKC_SCF; 7DF4 # Lo CJK COMPATIBILITY IDEOGRAPH-F996 +F997 ; NFKC_SCF; 806F # Lo CJK COMPATIBILITY IDEOGRAPH-F997 +F998 ; NFKC_SCF; 8F26 # Lo CJK COMPATIBILITY IDEOGRAPH-F998 +F999 ; NFKC_SCF; 84EE # Lo CJK COMPATIBILITY IDEOGRAPH-F999 +F99A ; NFKC_SCF; 9023 # Lo CJK COMPATIBILITY IDEOGRAPH-F99A +F99B ; NFKC_SCF; 934A # Lo CJK COMPATIBILITY IDEOGRAPH-F99B +F99C ; NFKC_SCF; 5217 # Lo CJK COMPATIBILITY IDEOGRAPH-F99C +F99D ; NFKC_SCF; 52A3 # Lo CJK COMPATIBILITY IDEOGRAPH-F99D +F99E ; NFKC_SCF; 54BD # Lo CJK COMPATIBILITY IDEOGRAPH-F99E +F99F ; NFKC_SCF; 70C8 # Lo CJK COMPATIBILITY IDEOGRAPH-F99F +F9A0 ; NFKC_SCF; 88C2 # Lo CJK COMPATIBILITY IDEOGRAPH-F9A0 +F9A1 ; NFKC_SCF; 8AAA # Lo CJK COMPATIBILITY IDEOGRAPH-F9A1 +F9A2 ; NFKC_SCF; 5EC9 # Lo CJK COMPATIBILITY IDEOGRAPH-F9A2 +F9A3 ; NFKC_SCF; 5FF5 # Lo CJK COMPATIBILITY IDEOGRAPH-F9A3 +F9A4 ; NFKC_SCF; 637B # Lo CJK COMPATIBILITY IDEOGRAPH-F9A4 +F9A5 ; NFKC_SCF; 6BAE # Lo CJK COMPATIBILITY IDEOGRAPH-F9A5 +F9A6 ; NFKC_SCF; 7C3E # Lo CJK COMPATIBILITY IDEOGRAPH-F9A6 +F9A7 ; NFKC_SCF; 7375 # Lo CJK COMPATIBILITY IDEOGRAPH-F9A7 +F9A8 ; NFKC_SCF; 4EE4 # Lo CJK COMPATIBILITY IDEOGRAPH-F9A8 +F9A9 ; NFKC_SCF; 56F9 # Lo CJK COMPATIBILITY IDEOGRAPH-F9A9 +F9AA ; NFKC_SCF; 5BE7 # Lo CJK COMPATIBILITY IDEOGRAPH-F9AA +F9AB ; NFKC_SCF; 5DBA # Lo CJK COMPATIBILITY IDEOGRAPH-F9AB +F9AC ; NFKC_SCF; 601C # Lo CJK COMPATIBILITY IDEOGRAPH-F9AC +F9AD ; NFKC_SCF; 73B2 # Lo CJK COMPATIBILITY IDEOGRAPH-F9AD +F9AE ; NFKC_SCF; 7469 # Lo CJK COMPATIBILITY IDEOGRAPH-F9AE +F9AF ; NFKC_SCF; 7F9A # Lo CJK COMPATIBILITY IDEOGRAPH-F9AF +F9B0 ; NFKC_SCF; 8046 # Lo CJK COMPATIBILITY IDEOGRAPH-F9B0 +F9B1 ; NFKC_SCF; 9234 # Lo CJK COMPATIBILITY IDEOGRAPH-F9B1 +F9B2 ; NFKC_SCF; 96F6 # Lo CJK COMPATIBILITY IDEOGRAPH-F9B2 +F9B3 ; NFKC_SCF; 9748 # Lo CJK COMPATIBILITY IDEOGRAPH-F9B3 +F9B4 ; NFKC_SCF; 9818 # Lo CJK COMPATIBILITY IDEOGRAPH-F9B4 +F9B5 ; NFKC_SCF; 4F8B # Lo CJK COMPATIBILITY IDEOGRAPH-F9B5 +F9B6 ; NFKC_SCF; 79AE # Lo CJK COMPATIBILITY IDEOGRAPH-F9B6 +F9B7 ; NFKC_SCF; 91B4 # Lo CJK COMPATIBILITY IDEOGRAPH-F9B7 +F9B8 ; NFKC_SCF; 96B8 # Lo CJK COMPATIBILITY IDEOGRAPH-F9B8 +F9B9 ; NFKC_SCF; 60E1 # Lo CJK COMPATIBILITY IDEOGRAPH-F9B9 +F9BA ; NFKC_SCF; 4E86 # Lo CJK COMPATIBILITY IDEOGRAPH-F9BA +F9BB ; NFKC_SCF; 50DA # Lo CJK COMPATIBILITY IDEOGRAPH-F9BB +F9BC ; NFKC_SCF; 5BEE # Lo CJK COMPATIBILITY IDEOGRAPH-F9BC +F9BD ; NFKC_SCF; 5C3F # Lo CJK COMPATIBILITY IDEOGRAPH-F9BD +F9BE ; NFKC_SCF; 6599 # Lo CJK COMPATIBILITY IDEOGRAPH-F9BE +F9BF ; NFKC_SCF; 6A02 # Lo CJK COMPATIBILITY IDEOGRAPH-F9BF +F9C0 ; NFKC_SCF; 71CE # Lo CJK COMPATIBILITY IDEOGRAPH-F9C0 +F9C1 ; NFKC_SCF; 7642 # Lo CJK COMPATIBILITY IDEOGRAPH-F9C1 +F9C2 ; NFKC_SCF; 84FC # Lo CJK COMPATIBILITY IDEOGRAPH-F9C2 +F9C3 ; NFKC_SCF; 907C # Lo CJK COMPATIBILITY IDEOGRAPH-F9C3 +F9C4 ; NFKC_SCF; 9F8D # Lo CJK COMPATIBILITY IDEOGRAPH-F9C4 +F9C5 ; NFKC_SCF; 6688 # Lo CJK COMPATIBILITY IDEOGRAPH-F9C5 +F9C6 ; NFKC_SCF; 962E # Lo CJK COMPATIBILITY IDEOGRAPH-F9C6 +F9C7 ; NFKC_SCF; 5289 # Lo CJK COMPATIBILITY IDEOGRAPH-F9C7 +F9C8 ; NFKC_SCF; 677B # Lo CJK COMPATIBILITY IDEOGRAPH-F9C8 +F9C9 ; NFKC_SCF; 67F3 # Lo CJK COMPATIBILITY IDEOGRAPH-F9C9 +F9CA ; NFKC_SCF; 6D41 # Lo CJK COMPATIBILITY IDEOGRAPH-F9CA +F9CB ; NFKC_SCF; 6E9C # Lo CJK COMPATIBILITY IDEOGRAPH-F9CB +F9CC ; NFKC_SCF; 7409 # Lo CJK COMPATIBILITY IDEOGRAPH-F9CC +F9CD ; NFKC_SCF; 7559 # Lo CJK COMPATIBILITY IDEOGRAPH-F9CD +F9CE ; NFKC_SCF; 786B # Lo CJK COMPATIBILITY IDEOGRAPH-F9CE +F9CF ; NFKC_SCF; 7D10 # Lo CJK COMPATIBILITY IDEOGRAPH-F9CF +F9D0 ; NFKC_SCF; 985E # Lo CJK COMPATIBILITY IDEOGRAPH-F9D0 +F9D1 ; NFKC_SCF; 516D # Lo CJK COMPATIBILITY IDEOGRAPH-F9D1 +F9D2 ; NFKC_SCF; 622E # Lo CJK COMPATIBILITY IDEOGRAPH-F9D2 +F9D3 ; NFKC_SCF; 9678 # Lo CJK COMPATIBILITY IDEOGRAPH-F9D3 +F9D4 ; NFKC_SCF; 502B # Lo CJK COMPATIBILITY IDEOGRAPH-F9D4 +F9D5 ; NFKC_SCF; 5D19 # Lo CJK COMPATIBILITY IDEOGRAPH-F9D5 +F9D6 ; NFKC_SCF; 6DEA # Lo CJK COMPATIBILITY IDEOGRAPH-F9D6 +F9D7 ; NFKC_SCF; 8F2A # Lo CJK COMPATIBILITY IDEOGRAPH-F9D7 +F9D8 ; NFKC_SCF; 5F8B # Lo CJK COMPATIBILITY IDEOGRAPH-F9D8 +F9D9 ; NFKC_SCF; 6144 # Lo CJK COMPATIBILITY IDEOGRAPH-F9D9 +F9DA ; NFKC_SCF; 6817 # Lo CJK COMPATIBILITY IDEOGRAPH-F9DA +F9DB ; NFKC_SCF; 7387 # Lo CJK COMPATIBILITY IDEOGRAPH-F9DB +F9DC ; NFKC_SCF; 9686 # Lo CJK COMPATIBILITY IDEOGRAPH-F9DC +F9DD ; NFKC_SCF; 5229 # Lo CJK COMPATIBILITY IDEOGRAPH-F9DD +F9DE ; NFKC_SCF; 540F # Lo CJK COMPATIBILITY IDEOGRAPH-F9DE +F9DF ; NFKC_SCF; 5C65 # Lo CJK COMPATIBILITY IDEOGRAPH-F9DF +F9E0 ; NFKC_SCF; 6613 # Lo CJK COMPATIBILITY IDEOGRAPH-F9E0 +F9E1 ; NFKC_SCF; 674E # Lo CJK COMPATIBILITY IDEOGRAPH-F9E1 +F9E2 ; NFKC_SCF; 68A8 # Lo CJK COMPATIBILITY IDEOGRAPH-F9E2 +F9E3 ; NFKC_SCF; 6CE5 # Lo CJK COMPATIBILITY IDEOGRAPH-F9E3 +F9E4 ; NFKC_SCF; 7406 # Lo CJK COMPATIBILITY IDEOGRAPH-F9E4 +F9E5 ; NFKC_SCF; 75E2 # Lo CJK COMPATIBILITY IDEOGRAPH-F9E5 +F9E6 ; NFKC_SCF; 7F79 # Lo CJK COMPATIBILITY IDEOGRAPH-F9E6 +F9E7 ; NFKC_SCF; 88CF # Lo CJK COMPATIBILITY IDEOGRAPH-F9E7 +F9E8 ; NFKC_SCF; 88E1 # Lo CJK COMPATIBILITY IDEOGRAPH-F9E8 +F9E9 ; NFKC_SCF; 91CC # Lo CJK COMPATIBILITY IDEOGRAPH-F9E9 +F9EA ; NFKC_SCF; 96E2 # Lo CJK COMPATIBILITY IDEOGRAPH-F9EA +F9EB ; NFKC_SCF; 533F # Lo CJK COMPATIBILITY IDEOGRAPH-F9EB +F9EC ; NFKC_SCF; 6EBA # Lo CJK COMPATIBILITY IDEOGRAPH-F9EC +F9ED ; NFKC_SCF; 541D # Lo CJK COMPATIBILITY IDEOGRAPH-F9ED +F9EE ; NFKC_SCF; 71D0 # Lo CJK COMPATIBILITY IDEOGRAPH-F9EE +F9EF ; NFKC_SCF; 7498 # Lo CJK COMPATIBILITY IDEOGRAPH-F9EF +F9F0 ; NFKC_SCF; 85FA # Lo CJK COMPATIBILITY IDEOGRAPH-F9F0 +F9F1 ; NFKC_SCF; 96A3 # Lo CJK COMPATIBILITY IDEOGRAPH-F9F1 +F9F2 ; NFKC_SCF; 9C57 # Lo CJK COMPATIBILITY IDEOGRAPH-F9F2 +F9F3 ; NFKC_SCF; 9E9F # Lo CJK COMPATIBILITY IDEOGRAPH-F9F3 +F9F4 ; NFKC_SCF; 6797 # Lo CJK COMPATIBILITY IDEOGRAPH-F9F4 +F9F5 ; NFKC_SCF; 6DCB # Lo CJK COMPATIBILITY IDEOGRAPH-F9F5 +F9F6 ; NFKC_SCF; 81E8 # Lo CJK COMPATIBILITY IDEOGRAPH-F9F6 +F9F7 ; NFKC_SCF; 7ACB # Lo CJK COMPATIBILITY IDEOGRAPH-F9F7 +F9F8 ; NFKC_SCF; 7B20 # Lo CJK COMPATIBILITY IDEOGRAPH-F9F8 +F9F9 ; NFKC_SCF; 7C92 # Lo CJK COMPATIBILITY IDEOGRAPH-F9F9 +F9FA ; NFKC_SCF; 72C0 # Lo CJK COMPATIBILITY IDEOGRAPH-F9FA +F9FB ; NFKC_SCF; 7099 # Lo CJK COMPATIBILITY IDEOGRAPH-F9FB +F9FC ; NFKC_SCF; 8B58 # Lo CJK COMPATIBILITY IDEOGRAPH-F9FC +F9FD ; NFKC_SCF; 4EC0 # Lo CJK COMPATIBILITY IDEOGRAPH-F9FD +F9FE ; NFKC_SCF; 8336 # Lo CJK COMPATIBILITY IDEOGRAPH-F9FE +F9FF ; NFKC_SCF; 523A # Lo CJK COMPATIBILITY IDEOGRAPH-F9FF +FA00 ; NFKC_SCF; 5207 # Lo CJK COMPATIBILITY IDEOGRAPH-FA00 +FA01 ; NFKC_SCF; 5EA6 # Lo CJK COMPATIBILITY IDEOGRAPH-FA01 +FA02 ; NFKC_SCF; 62D3 # Lo CJK COMPATIBILITY IDEOGRAPH-FA02 +FA03 ; NFKC_SCF; 7CD6 # Lo CJK COMPATIBILITY IDEOGRAPH-FA03 +FA04 ; NFKC_SCF; 5B85 # Lo CJK COMPATIBILITY IDEOGRAPH-FA04 +FA05 ; NFKC_SCF; 6D1E # Lo CJK COMPATIBILITY IDEOGRAPH-FA05 +FA06 ; NFKC_SCF; 66B4 # Lo CJK COMPATIBILITY IDEOGRAPH-FA06 +FA07 ; NFKC_SCF; 8F3B # Lo CJK COMPATIBILITY IDEOGRAPH-FA07 +FA08 ; NFKC_SCF; 884C # Lo CJK COMPATIBILITY IDEOGRAPH-FA08 +FA09 ; NFKC_SCF; 964D # Lo CJK COMPATIBILITY IDEOGRAPH-FA09 +FA0A ; NFKC_SCF; 898B # Lo CJK COMPATIBILITY IDEOGRAPH-FA0A +FA0B ; NFKC_SCF; 5ED3 # Lo CJK COMPATIBILITY IDEOGRAPH-FA0B +FA0C ; NFKC_SCF; 5140 # Lo CJK COMPATIBILITY IDEOGRAPH-FA0C +FA0D ; NFKC_SCF; 55C0 # Lo CJK COMPATIBILITY IDEOGRAPH-FA0D +FA10 ; NFKC_SCF; 585A # Lo CJK COMPATIBILITY IDEOGRAPH-FA10 +FA12 ; NFKC_SCF; 6674 # Lo CJK COMPATIBILITY IDEOGRAPH-FA12 +FA15 ; NFKC_SCF; 51DE # Lo CJK COMPATIBILITY IDEOGRAPH-FA15 +FA16 ; NFKC_SCF; 732A # Lo CJK COMPATIBILITY IDEOGRAPH-FA16 +FA17 ; NFKC_SCF; 76CA # Lo CJK COMPATIBILITY IDEOGRAPH-FA17 +FA18 ; NFKC_SCF; 793C # Lo CJK COMPATIBILITY IDEOGRAPH-FA18 +FA19 ; NFKC_SCF; 795E # Lo CJK COMPATIBILITY IDEOGRAPH-FA19 +FA1A ; NFKC_SCF; 7965 # Lo CJK COMPATIBILITY IDEOGRAPH-FA1A +FA1B ; NFKC_SCF; 798F # Lo CJK COMPATIBILITY IDEOGRAPH-FA1B +FA1C ; NFKC_SCF; 9756 # Lo CJK COMPATIBILITY IDEOGRAPH-FA1C +FA1D ; NFKC_SCF; 7CBE # Lo CJK COMPATIBILITY IDEOGRAPH-FA1D +FA1E ; NFKC_SCF; 7FBD # Lo CJK COMPATIBILITY IDEOGRAPH-FA1E +FA20 ; NFKC_SCF; 8612 # Lo CJK COMPATIBILITY IDEOGRAPH-FA20 +FA22 ; NFKC_SCF; 8AF8 # Lo CJK COMPATIBILITY IDEOGRAPH-FA22 +FA25 ; NFKC_SCF; 9038 # Lo CJK COMPATIBILITY IDEOGRAPH-FA25 +FA26 ; NFKC_SCF; 90FD # Lo CJK COMPATIBILITY IDEOGRAPH-FA26 +FA2A ; NFKC_SCF; 98EF # Lo CJK COMPATIBILITY IDEOGRAPH-FA2A +FA2B ; NFKC_SCF; 98FC # Lo CJK COMPATIBILITY IDEOGRAPH-FA2B +FA2C ; NFKC_SCF; 9928 # Lo CJK COMPATIBILITY IDEOGRAPH-FA2C +FA2D ; NFKC_SCF; 9DB4 # Lo CJK COMPATIBILITY IDEOGRAPH-FA2D +FA2E ; NFKC_SCF; 90DE # Lo CJK COMPATIBILITY IDEOGRAPH-FA2E +FA2F ; NFKC_SCF; 96B7 # Lo CJK COMPATIBILITY IDEOGRAPH-FA2F +FA30 ; NFKC_SCF; 4FAE # Lo CJK COMPATIBILITY IDEOGRAPH-FA30 +FA31 ; NFKC_SCF; 50E7 # Lo CJK COMPATIBILITY IDEOGRAPH-FA31 +FA32 ; NFKC_SCF; 514D # Lo CJK COMPATIBILITY IDEOGRAPH-FA32 +FA33 ; NFKC_SCF; 52C9 # Lo CJK COMPATIBILITY IDEOGRAPH-FA33 +FA34 ; NFKC_SCF; 52E4 # Lo CJK COMPATIBILITY IDEOGRAPH-FA34 +FA35 ; NFKC_SCF; 5351 # Lo CJK COMPATIBILITY IDEOGRAPH-FA35 +FA36 ; NFKC_SCF; 559D # Lo CJK COMPATIBILITY IDEOGRAPH-FA36 +FA37 ; NFKC_SCF; 5606 # Lo CJK COMPATIBILITY IDEOGRAPH-FA37 +FA38 ; NFKC_SCF; 5668 # Lo CJK COMPATIBILITY IDEOGRAPH-FA38 +FA39 ; NFKC_SCF; 5840 # Lo CJK COMPATIBILITY IDEOGRAPH-FA39 +FA3A ; NFKC_SCF; 58A8 # Lo CJK COMPATIBILITY IDEOGRAPH-FA3A +FA3B ; NFKC_SCF; 5C64 # Lo CJK COMPATIBILITY IDEOGRAPH-FA3B +FA3C ; NFKC_SCF; 5C6E # Lo CJK COMPATIBILITY IDEOGRAPH-FA3C +FA3D ; NFKC_SCF; 6094 # Lo CJK COMPATIBILITY IDEOGRAPH-FA3D +FA3E ; NFKC_SCF; 6168 # Lo CJK COMPATIBILITY IDEOGRAPH-FA3E +FA3F ; NFKC_SCF; 618E # Lo CJK COMPATIBILITY IDEOGRAPH-FA3F +FA40 ; NFKC_SCF; 61F2 # Lo CJK COMPATIBILITY IDEOGRAPH-FA40 +FA41 ; NFKC_SCF; 654F # Lo CJK COMPATIBILITY IDEOGRAPH-FA41 +FA42 ; NFKC_SCF; 65E2 # Lo CJK COMPATIBILITY IDEOGRAPH-FA42 +FA43 ; NFKC_SCF; 6691 # Lo CJK COMPATIBILITY IDEOGRAPH-FA43 +FA44 ; NFKC_SCF; 6885 # Lo CJK COMPATIBILITY IDEOGRAPH-FA44 +FA45 ; NFKC_SCF; 6D77 # Lo CJK COMPATIBILITY IDEOGRAPH-FA45 +FA46 ; NFKC_SCF; 6E1A # Lo CJK COMPATIBILITY IDEOGRAPH-FA46 +FA47 ; NFKC_SCF; 6F22 # Lo CJK COMPATIBILITY IDEOGRAPH-FA47 +FA48 ; NFKC_SCF; 716E # Lo CJK COMPATIBILITY IDEOGRAPH-FA48 +FA49 ; NFKC_SCF; 722B # Lo CJK COMPATIBILITY IDEOGRAPH-FA49 +FA4A ; NFKC_SCF; 7422 # Lo CJK COMPATIBILITY IDEOGRAPH-FA4A +FA4B ; NFKC_SCF; 7891 # Lo CJK COMPATIBILITY IDEOGRAPH-FA4B +FA4C ; NFKC_SCF; 793E # Lo CJK COMPATIBILITY IDEOGRAPH-FA4C +FA4D ; NFKC_SCF; 7949 # Lo CJK COMPATIBILITY IDEOGRAPH-FA4D +FA4E ; NFKC_SCF; 7948 # Lo CJK COMPATIBILITY IDEOGRAPH-FA4E +FA4F ; NFKC_SCF; 7950 # Lo CJK COMPATIBILITY IDEOGRAPH-FA4F +FA50 ; NFKC_SCF; 7956 # Lo CJK COMPATIBILITY IDEOGRAPH-FA50 +FA51 ; NFKC_SCF; 795D # Lo CJK COMPATIBILITY IDEOGRAPH-FA51 +FA52 ; NFKC_SCF; 798D # Lo CJK COMPATIBILITY IDEOGRAPH-FA52 +FA53 ; NFKC_SCF; 798E # Lo CJK COMPATIBILITY IDEOGRAPH-FA53 +FA54 ; NFKC_SCF; 7A40 # Lo CJK COMPATIBILITY IDEOGRAPH-FA54 +FA55 ; NFKC_SCF; 7A81 # Lo CJK COMPATIBILITY IDEOGRAPH-FA55 +FA56 ; NFKC_SCF; 7BC0 # Lo CJK COMPATIBILITY IDEOGRAPH-FA56 +FA57 ; NFKC_SCF; 7DF4 # Lo CJK COMPATIBILITY IDEOGRAPH-FA57 +FA58 ; NFKC_SCF; 7E09 # Lo CJK COMPATIBILITY IDEOGRAPH-FA58 +FA59 ; NFKC_SCF; 7E41 # Lo CJK COMPATIBILITY IDEOGRAPH-FA59 +FA5A ; NFKC_SCF; 7F72 # Lo CJK COMPATIBILITY IDEOGRAPH-FA5A +FA5B ; NFKC_SCF; 8005 # Lo CJK COMPATIBILITY IDEOGRAPH-FA5B +FA5C ; NFKC_SCF; 81ED # Lo CJK COMPATIBILITY IDEOGRAPH-FA5C +FA5D..FA5E ; NFKC_SCF; 8279 # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA5D..CJK COMPATIBILITY IDEOGRAPH-FA5E +FA5F ; NFKC_SCF; 8457 # Lo CJK COMPATIBILITY IDEOGRAPH-FA5F +FA60 ; NFKC_SCF; 8910 # Lo CJK COMPATIBILITY IDEOGRAPH-FA60 +FA61 ; NFKC_SCF; 8996 # Lo CJK COMPATIBILITY IDEOGRAPH-FA61 +FA62 ; NFKC_SCF; 8B01 # Lo CJK COMPATIBILITY IDEOGRAPH-FA62 +FA63 ; NFKC_SCF; 8B39 # Lo CJK COMPATIBILITY IDEOGRAPH-FA63 +FA64 ; NFKC_SCF; 8CD3 # Lo CJK COMPATIBILITY IDEOGRAPH-FA64 +FA65 ; NFKC_SCF; 8D08 # Lo CJK COMPATIBILITY IDEOGRAPH-FA65 +FA66 ; NFKC_SCF; 8FB6 # Lo CJK COMPATIBILITY IDEOGRAPH-FA66 +FA67 ; NFKC_SCF; 9038 # Lo CJK COMPATIBILITY IDEOGRAPH-FA67 +FA68 ; NFKC_SCF; 96E3 # Lo CJK COMPATIBILITY IDEOGRAPH-FA68 +FA69 ; NFKC_SCF; 97FF # Lo CJK COMPATIBILITY IDEOGRAPH-FA69 +FA6A ; NFKC_SCF; 983B # Lo CJK COMPATIBILITY IDEOGRAPH-FA6A +FA6B ; NFKC_SCF; 6075 # Lo CJK COMPATIBILITY IDEOGRAPH-FA6B +FA6C ; NFKC_SCF; 242EE # Lo CJK COMPATIBILITY IDEOGRAPH-FA6C +FA6D ; NFKC_SCF; 8218 # Lo CJK COMPATIBILITY IDEOGRAPH-FA6D +FA70 ; NFKC_SCF; 4E26 # Lo CJK COMPATIBILITY IDEOGRAPH-FA70 +FA71 ; NFKC_SCF; 51B5 # Lo CJK COMPATIBILITY IDEOGRAPH-FA71 +FA72 ; NFKC_SCF; 5168 # Lo CJK COMPATIBILITY IDEOGRAPH-FA72 +FA73 ; NFKC_SCF; 4F80 # Lo CJK COMPATIBILITY IDEOGRAPH-FA73 +FA74 ; NFKC_SCF; 5145 # Lo CJK COMPATIBILITY IDEOGRAPH-FA74 +FA75 ; NFKC_SCF; 5180 # Lo CJK COMPATIBILITY IDEOGRAPH-FA75 +FA76 ; NFKC_SCF; 52C7 # Lo CJK COMPATIBILITY IDEOGRAPH-FA76 +FA77 ; NFKC_SCF; 52FA # Lo CJK COMPATIBILITY IDEOGRAPH-FA77 +FA78 ; NFKC_SCF; 559D # Lo CJK COMPATIBILITY IDEOGRAPH-FA78 +FA79 ; NFKC_SCF; 5555 # Lo CJK COMPATIBILITY IDEOGRAPH-FA79 +FA7A ; NFKC_SCF; 5599 # Lo CJK COMPATIBILITY IDEOGRAPH-FA7A +FA7B ; NFKC_SCF; 55E2 # Lo CJK COMPATIBILITY IDEOGRAPH-FA7B +FA7C ; NFKC_SCF; 585A # Lo CJK COMPATIBILITY IDEOGRAPH-FA7C +FA7D ; NFKC_SCF; 58B3 # Lo CJK COMPATIBILITY IDEOGRAPH-FA7D +FA7E ; NFKC_SCF; 5944 # Lo CJK COMPATIBILITY IDEOGRAPH-FA7E +FA7F ; NFKC_SCF; 5954 # Lo CJK COMPATIBILITY IDEOGRAPH-FA7F +FA80 ; NFKC_SCF; 5A62 # Lo CJK COMPATIBILITY IDEOGRAPH-FA80 +FA81 ; NFKC_SCF; 5B28 # Lo CJK COMPATIBILITY IDEOGRAPH-FA81 +FA82 ; NFKC_SCF; 5ED2 # Lo CJK COMPATIBILITY IDEOGRAPH-FA82 +FA83 ; NFKC_SCF; 5ED9 # Lo CJK COMPATIBILITY IDEOGRAPH-FA83 +FA84 ; NFKC_SCF; 5F69 # Lo CJK COMPATIBILITY IDEOGRAPH-FA84 +FA85 ; NFKC_SCF; 5FAD # Lo CJK COMPATIBILITY IDEOGRAPH-FA85 +FA86 ; NFKC_SCF; 60D8 # Lo CJK COMPATIBILITY IDEOGRAPH-FA86 +FA87 ; NFKC_SCF; 614E # Lo CJK COMPATIBILITY IDEOGRAPH-FA87 +FA88 ; NFKC_SCF; 6108 # Lo CJK COMPATIBILITY IDEOGRAPH-FA88 +FA89 ; NFKC_SCF; 618E # Lo CJK COMPATIBILITY IDEOGRAPH-FA89 +FA8A ; NFKC_SCF; 6160 # Lo CJK COMPATIBILITY IDEOGRAPH-FA8A +FA8B ; NFKC_SCF; 61F2 # Lo CJK COMPATIBILITY IDEOGRAPH-FA8B +FA8C ; NFKC_SCF; 6234 # Lo CJK COMPATIBILITY IDEOGRAPH-FA8C +FA8D ; NFKC_SCF; 63C4 # Lo CJK COMPATIBILITY IDEOGRAPH-FA8D +FA8E ; NFKC_SCF; 641C # Lo CJK COMPATIBILITY IDEOGRAPH-FA8E +FA8F ; NFKC_SCF; 6452 # Lo CJK COMPATIBILITY IDEOGRAPH-FA8F +FA90 ; NFKC_SCF; 6556 # Lo CJK COMPATIBILITY IDEOGRAPH-FA90 +FA91 ; NFKC_SCF; 6674 # Lo CJK COMPATIBILITY IDEOGRAPH-FA91 +FA92 ; NFKC_SCF; 6717 # Lo CJK COMPATIBILITY IDEOGRAPH-FA92 +FA93 ; NFKC_SCF; 671B # Lo CJK COMPATIBILITY IDEOGRAPH-FA93 +FA94 ; NFKC_SCF; 6756 # Lo CJK COMPATIBILITY IDEOGRAPH-FA94 +FA95 ; NFKC_SCF; 6B79 # Lo CJK COMPATIBILITY IDEOGRAPH-FA95 +FA96 ; NFKC_SCF; 6BBA # Lo CJK COMPATIBILITY IDEOGRAPH-FA96 +FA97 ; NFKC_SCF; 6D41 # Lo CJK COMPATIBILITY IDEOGRAPH-FA97 +FA98 ; NFKC_SCF; 6EDB # Lo CJK COMPATIBILITY IDEOGRAPH-FA98 +FA99 ; NFKC_SCF; 6ECB # Lo CJK COMPATIBILITY IDEOGRAPH-FA99 +FA9A ; NFKC_SCF; 6F22 # Lo CJK COMPATIBILITY IDEOGRAPH-FA9A +FA9B ; NFKC_SCF; 701E # Lo CJK COMPATIBILITY IDEOGRAPH-FA9B +FA9C ; NFKC_SCF; 716E # Lo CJK COMPATIBILITY IDEOGRAPH-FA9C +FA9D ; NFKC_SCF; 77A7 # Lo CJK COMPATIBILITY IDEOGRAPH-FA9D +FA9E ; NFKC_SCF; 7235 # Lo CJK COMPATIBILITY IDEOGRAPH-FA9E +FA9F ; NFKC_SCF; 72AF # Lo CJK COMPATIBILITY IDEOGRAPH-FA9F +FAA0 ; NFKC_SCF; 732A # Lo CJK COMPATIBILITY IDEOGRAPH-FAA0 +FAA1 ; NFKC_SCF; 7471 # Lo CJK COMPATIBILITY IDEOGRAPH-FAA1 +FAA2 ; NFKC_SCF; 7506 # Lo CJK COMPATIBILITY IDEOGRAPH-FAA2 +FAA3 ; NFKC_SCF; 753B # Lo CJK COMPATIBILITY IDEOGRAPH-FAA3 +FAA4 ; NFKC_SCF; 761D # Lo CJK COMPATIBILITY IDEOGRAPH-FAA4 +FAA5 ; NFKC_SCF; 761F # Lo CJK COMPATIBILITY IDEOGRAPH-FAA5 +FAA6 ; NFKC_SCF; 76CA # Lo CJK COMPATIBILITY IDEOGRAPH-FAA6 +FAA7 ; NFKC_SCF; 76DB # Lo CJK COMPATIBILITY IDEOGRAPH-FAA7 +FAA8 ; NFKC_SCF; 76F4 # Lo CJK COMPATIBILITY IDEOGRAPH-FAA8 +FAA9 ; NFKC_SCF; 774A # Lo CJK COMPATIBILITY IDEOGRAPH-FAA9 +FAAA ; NFKC_SCF; 7740 # Lo CJK COMPATIBILITY IDEOGRAPH-FAAA +FAAB ; NFKC_SCF; 78CC # Lo CJK COMPATIBILITY IDEOGRAPH-FAAB +FAAC ; NFKC_SCF; 7AB1 # Lo CJK COMPATIBILITY IDEOGRAPH-FAAC +FAAD ; NFKC_SCF; 7BC0 # Lo CJK COMPATIBILITY IDEOGRAPH-FAAD +FAAE ; NFKC_SCF; 7C7B # Lo CJK COMPATIBILITY IDEOGRAPH-FAAE +FAAF ; NFKC_SCF; 7D5B # Lo CJK COMPATIBILITY IDEOGRAPH-FAAF +FAB0 ; NFKC_SCF; 7DF4 # Lo CJK COMPATIBILITY IDEOGRAPH-FAB0 +FAB1 ; NFKC_SCF; 7F3E # Lo CJK COMPATIBILITY IDEOGRAPH-FAB1 +FAB2 ; NFKC_SCF; 8005 # Lo CJK COMPATIBILITY IDEOGRAPH-FAB2 +FAB3 ; NFKC_SCF; 8352 # Lo CJK COMPATIBILITY IDEOGRAPH-FAB3 +FAB4 ; NFKC_SCF; 83EF # Lo CJK COMPATIBILITY IDEOGRAPH-FAB4 +FAB5 ; NFKC_SCF; 8779 # Lo CJK COMPATIBILITY IDEOGRAPH-FAB5 +FAB6 ; NFKC_SCF; 8941 # Lo CJK COMPATIBILITY IDEOGRAPH-FAB6 +FAB7 ; NFKC_SCF; 8986 # Lo CJK COMPATIBILITY IDEOGRAPH-FAB7 +FAB8 ; NFKC_SCF; 8996 # Lo CJK COMPATIBILITY IDEOGRAPH-FAB8 +FAB9 ; NFKC_SCF; 8ABF # Lo CJK COMPATIBILITY IDEOGRAPH-FAB9 +FABA ; NFKC_SCF; 8AF8 # Lo CJK COMPATIBILITY IDEOGRAPH-FABA +FABB ; NFKC_SCF; 8ACB # Lo CJK COMPATIBILITY IDEOGRAPH-FABB +FABC ; NFKC_SCF; 8B01 # Lo CJK COMPATIBILITY IDEOGRAPH-FABC +FABD ; NFKC_SCF; 8AFE # Lo CJK COMPATIBILITY IDEOGRAPH-FABD +FABE ; NFKC_SCF; 8AED # Lo CJK COMPATIBILITY IDEOGRAPH-FABE +FABF ; NFKC_SCF; 8B39 # Lo CJK COMPATIBILITY IDEOGRAPH-FABF +FAC0 ; NFKC_SCF; 8B8A # Lo CJK COMPATIBILITY IDEOGRAPH-FAC0 +FAC1 ; NFKC_SCF; 8D08 # Lo CJK COMPATIBILITY IDEOGRAPH-FAC1 +FAC2 ; NFKC_SCF; 8F38 # Lo CJK COMPATIBILITY IDEOGRAPH-FAC2 +FAC3 ; NFKC_SCF; 9072 # Lo CJK COMPATIBILITY IDEOGRAPH-FAC3 +FAC4 ; NFKC_SCF; 9199 # Lo CJK COMPATIBILITY IDEOGRAPH-FAC4 +FAC5 ; NFKC_SCF; 9276 # Lo CJK COMPATIBILITY IDEOGRAPH-FAC5 +FAC6 ; NFKC_SCF; 967C # Lo CJK COMPATIBILITY IDEOGRAPH-FAC6 +FAC7 ; NFKC_SCF; 96E3 # Lo CJK COMPATIBILITY IDEOGRAPH-FAC7 +FAC8 ; NFKC_SCF; 9756 # Lo CJK COMPATIBILITY IDEOGRAPH-FAC8 +FAC9 ; NFKC_SCF; 97DB # Lo CJK COMPATIBILITY IDEOGRAPH-FAC9 +FACA ; NFKC_SCF; 97FF # Lo CJK COMPATIBILITY IDEOGRAPH-FACA +FACB ; NFKC_SCF; 980B # Lo CJK COMPATIBILITY IDEOGRAPH-FACB +FACC ; NFKC_SCF; 983B # Lo CJK COMPATIBILITY IDEOGRAPH-FACC +FACD ; NFKC_SCF; 9B12 # Lo CJK COMPATIBILITY IDEOGRAPH-FACD +FACE ; NFKC_SCF; 9F9C # Lo CJK COMPATIBILITY IDEOGRAPH-FACE +FACF ; NFKC_SCF; 2284A # Lo CJK COMPATIBILITY IDEOGRAPH-FACF +FAD0 ; NFKC_SCF; 22844 # Lo CJK COMPATIBILITY IDEOGRAPH-FAD0 +FAD1 ; NFKC_SCF; 233D5 # Lo CJK COMPATIBILITY IDEOGRAPH-FAD1 +FAD2 ; NFKC_SCF; 3B9D # Lo CJK COMPATIBILITY IDEOGRAPH-FAD2 +FAD3 ; NFKC_SCF; 4018 # Lo CJK COMPATIBILITY IDEOGRAPH-FAD3 +FAD4 ; NFKC_SCF; 4039 # Lo CJK COMPATIBILITY IDEOGRAPH-FAD4 +FAD5 ; NFKC_SCF; 25249 # Lo CJK COMPATIBILITY IDEOGRAPH-FAD5 +FAD6 ; NFKC_SCF; 25CD0 # Lo CJK COMPATIBILITY IDEOGRAPH-FAD6 +FAD7 ; NFKC_SCF; 27ED3 # Lo CJK COMPATIBILITY IDEOGRAPH-FAD7 +FAD8 ; NFKC_SCF; 9F43 # Lo CJK COMPATIBILITY IDEOGRAPH-FAD8 +FAD9 ; NFKC_SCF; 9F8E # Lo CJK COMPATIBILITY IDEOGRAPH-FAD9 +FB00 ; NFKC_SCF; 0066 0066 # L& LATIN SMALL LIGATURE FF +FB01 ; NFKC_SCF; 0066 0069 # L& LATIN SMALL LIGATURE FI +FB02 ; NFKC_SCF; 0066 006C # L& LATIN SMALL LIGATURE FL +FB03 ; NFKC_SCF; 0066 0066 0069 # L& LATIN SMALL LIGATURE FFI +FB04 ; NFKC_SCF; 0066 0066 006C # L& LATIN SMALL LIGATURE FFL +FB05..FB06 ; NFKC_SCF; 0073 0074 # L& [2] LATIN SMALL LIGATURE LONG S T..LATIN SMALL LIGATURE ST +FB13 ; NFKC_SCF; 0574 0576 # L& ARMENIAN SMALL LIGATURE MEN NOW +FB14 ; NFKC_SCF; 0574 0565 # L& ARMENIAN SMALL LIGATURE MEN ECH +FB15 ; NFKC_SCF; 0574 056B # L& ARMENIAN SMALL LIGATURE MEN INI +FB16 ; NFKC_SCF; 057E 0576 # L& ARMENIAN SMALL LIGATURE VEW NOW +FB17 ; NFKC_SCF; 0574 056D # L& ARMENIAN SMALL LIGATURE MEN XEH +FB1D ; NFKC_SCF; 05D9 05B4 # Lo HEBREW LETTER YOD WITH HIRIQ +FB1F ; NFKC_SCF; 05F2 05B7 # Lo HEBREW LIGATURE YIDDISH YOD YOD PATAH +FB20 ; NFKC_SCF; 05E2 # Lo HEBREW LETTER ALTERNATIVE AYIN +FB21 ; NFKC_SCF; 05D0 # Lo HEBREW LETTER WIDE ALEF +FB22 ; NFKC_SCF; 05D3 # Lo HEBREW LETTER WIDE DALET +FB23 ; NFKC_SCF; 05D4 # Lo HEBREW LETTER WIDE HE +FB24 ; NFKC_SCF; 05DB # Lo HEBREW LETTER WIDE KAF +FB25 ; NFKC_SCF; 05DC # Lo HEBREW LETTER WIDE LAMED +FB26 ; NFKC_SCF; 05DD # Lo HEBREW LETTER WIDE FINAL MEM +FB27 ; NFKC_SCF; 05E8 # Lo HEBREW LETTER WIDE RESH +FB28 ; NFKC_SCF; 05EA # Lo HEBREW LETTER WIDE TAV +FB29 ; NFKC_SCF; 002B # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN +FB2A ; NFKC_SCF; 05E9 05C1 # Lo HEBREW LETTER SHIN WITH SHIN DOT +FB2B ; NFKC_SCF; 05E9 05C2 # Lo HEBREW LETTER SHIN WITH SIN DOT +FB2C ; NFKC_SCF; 05E9 05BC 05C1 # Lo HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT +FB2D ; NFKC_SCF; 05E9 05BC 05C2 # Lo HEBREW LETTER SHIN WITH DAGESH AND SIN DOT +FB2E ; NFKC_SCF; 05D0 05B7 # Lo HEBREW LETTER ALEF WITH PATAH +FB2F ; NFKC_SCF; 05D0 05B8 # Lo HEBREW LETTER ALEF WITH QAMATS +FB30 ; NFKC_SCF; 05D0 05BC # Lo HEBREW LETTER ALEF WITH MAPIQ +FB31 ; NFKC_SCF; 05D1 05BC # Lo HEBREW LETTER BET WITH DAGESH +FB32 ; NFKC_SCF; 05D2 05BC # Lo HEBREW LETTER GIMEL WITH DAGESH +FB33 ; NFKC_SCF; 05D3 05BC # Lo HEBREW LETTER DALET WITH DAGESH +FB34 ; NFKC_SCF; 05D4 05BC # Lo HEBREW LETTER HE WITH MAPIQ +FB35 ; NFKC_SCF; 05D5 05BC # Lo HEBREW LETTER VAV WITH DAGESH +FB36 ; NFKC_SCF; 05D6 05BC # Lo HEBREW LETTER ZAYIN WITH DAGESH +FB38 ; NFKC_SCF; 05D8 05BC # Lo HEBREW LETTER TET WITH DAGESH +FB39 ; NFKC_SCF; 05D9 05BC # Lo HEBREW LETTER YOD WITH DAGESH +FB3A ; NFKC_SCF; 05DA 05BC # Lo HEBREW LETTER FINAL KAF WITH DAGESH +FB3B ; NFKC_SCF; 05DB 05BC # Lo HEBREW LETTER KAF WITH DAGESH +FB3C ; NFKC_SCF; 05DC 05BC # Lo HEBREW LETTER LAMED WITH DAGESH +FB3E ; NFKC_SCF; 05DE 05BC # Lo HEBREW LETTER MEM WITH DAGESH +FB40 ; NFKC_SCF; 05E0 05BC # Lo HEBREW LETTER NUN WITH DAGESH +FB41 ; NFKC_SCF; 05E1 05BC # Lo HEBREW LETTER SAMEKH WITH DAGESH +FB43 ; NFKC_SCF; 05E3 05BC # Lo HEBREW LETTER FINAL PE WITH DAGESH +FB44 ; NFKC_SCF; 05E4 05BC # Lo HEBREW LETTER PE WITH DAGESH +FB46 ; NFKC_SCF; 05E6 05BC # Lo HEBREW LETTER TSADI WITH DAGESH +FB47 ; NFKC_SCF; 05E7 05BC # Lo HEBREW LETTER QOF WITH DAGESH +FB48 ; NFKC_SCF; 05E8 05BC # Lo HEBREW LETTER RESH WITH DAGESH +FB49 ; NFKC_SCF; 05E9 05BC # Lo HEBREW LETTER SHIN WITH DAGESH +FB4A ; NFKC_SCF; 05EA 05BC # Lo HEBREW LETTER TAV WITH DAGESH +FB4B ; NFKC_SCF; 05D5 05B9 # Lo HEBREW LETTER VAV WITH HOLAM +FB4C ; NFKC_SCF; 05D1 05BF # Lo HEBREW LETTER BET WITH RAFE +FB4D ; NFKC_SCF; 05DB 05BF # Lo HEBREW LETTER KAF WITH RAFE +FB4E ; NFKC_SCF; 05E4 05BF # Lo HEBREW LETTER PE WITH RAFE +FB4F ; NFKC_SCF; 05D0 05DC # Lo HEBREW LIGATURE ALEF LAMED +FB50..FB51 ; NFKC_SCF; 0671 # Lo [2] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER ALEF WASLA FINAL FORM +FB52..FB55 ; NFKC_SCF; 067B # Lo [4] ARABIC LETTER BEEH ISOLATED FORM..ARABIC LETTER BEEH MEDIAL FORM +FB56..FB59 ; NFKC_SCF; 067E # Lo [4] ARABIC LETTER PEH ISOLATED FORM..ARABIC LETTER PEH MEDIAL FORM +FB5A..FB5D ; NFKC_SCF; 0680 # Lo [4] ARABIC LETTER BEHEH ISOLATED FORM..ARABIC LETTER BEHEH MEDIAL FORM +FB5E..FB61 ; NFKC_SCF; 067A # Lo [4] ARABIC LETTER TTEHEH ISOLATED FORM..ARABIC LETTER TTEHEH MEDIAL FORM +FB62..FB65 ; NFKC_SCF; 067F # Lo [4] ARABIC LETTER TEHEH ISOLATED FORM..ARABIC LETTER TEHEH MEDIAL FORM +FB66..FB69 ; NFKC_SCF; 0679 # Lo [4] ARABIC LETTER TTEH ISOLATED FORM..ARABIC LETTER TTEH MEDIAL FORM +FB6A..FB6D ; NFKC_SCF; 06A4 # Lo [4] ARABIC LETTER VEH ISOLATED FORM..ARABIC LETTER VEH MEDIAL FORM +FB6E..FB71 ; NFKC_SCF; 06A6 # Lo [4] ARABIC LETTER PEHEH ISOLATED FORM..ARABIC LETTER PEHEH MEDIAL FORM +FB72..FB75 ; NFKC_SCF; 0684 # Lo [4] ARABIC LETTER DYEH ISOLATED FORM..ARABIC LETTER DYEH MEDIAL FORM +FB76..FB79 ; NFKC_SCF; 0683 # Lo [4] ARABIC LETTER NYEH ISOLATED FORM..ARABIC LETTER NYEH MEDIAL FORM +FB7A..FB7D ; NFKC_SCF; 0686 # Lo [4] ARABIC LETTER TCHEH ISOLATED FORM..ARABIC LETTER TCHEH MEDIAL FORM +FB7E..FB81 ; NFKC_SCF; 0687 # Lo [4] ARABIC LETTER TCHEHEH ISOLATED FORM..ARABIC LETTER TCHEHEH MEDIAL FORM +FB82..FB83 ; NFKC_SCF; 068D # Lo [2] ARABIC LETTER DDAHAL ISOLATED FORM..ARABIC LETTER DDAHAL FINAL FORM +FB84..FB85 ; NFKC_SCF; 068C # Lo [2] ARABIC LETTER DAHAL ISOLATED FORM..ARABIC LETTER DAHAL FINAL FORM +FB86..FB87 ; NFKC_SCF; 068E # Lo [2] ARABIC LETTER DUL ISOLATED FORM..ARABIC LETTER DUL FINAL FORM +FB88..FB89 ; NFKC_SCF; 0688 # Lo [2] ARABIC LETTER DDAL ISOLATED FORM..ARABIC LETTER DDAL FINAL FORM +FB8A..FB8B ; NFKC_SCF; 0698 # Lo [2] ARABIC LETTER JEH ISOLATED FORM..ARABIC LETTER JEH FINAL FORM +FB8C..FB8D ; NFKC_SCF; 0691 # Lo [2] ARABIC LETTER RREH ISOLATED FORM..ARABIC LETTER RREH FINAL FORM +FB8E..FB91 ; NFKC_SCF; 06A9 # Lo [4] ARABIC LETTER KEHEH ISOLATED FORM..ARABIC LETTER KEHEH MEDIAL FORM +FB92..FB95 ; NFKC_SCF; 06AF # Lo [4] ARABIC LETTER GAF ISOLATED FORM..ARABIC LETTER GAF MEDIAL FORM +FB96..FB99 ; NFKC_SCF; 06B3 # Lo [4] ARABIC LETTER GUEH ISOLATED FORM..ARABIC LETTER GUEH MEDIAL FORM +FB9A..FB9D ; NFKC_SCF; 06B1 # Lo [4] ARABIC LETTER NGOEH ISOLATED FORM..ARABIC LETTER NGOEH MEDIAL FORM +FB9E..FB9F ; NFKC_SCF; 06BA # Lo [2] ARABIC LETTER NOON GHUNNA ISOLATED FORM..ARABIC LETTER NOON GHUNNA FINAL FORM +FBA0..FBA3 ; NFKC_SCF; 06BB # Lo [4] ARABIC LETTER RNOON ISOLATED FORM..ARABIC LETTER RNOON MEDIAL FORM +FBA4..FBA5 ; NFKC_SCF; 06C0 # Lo [2] ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM..ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM +FBA6..FBA9 ; NFKC_SCF; 06C1 # Lo [4] ARABIC LETTER HEH GOAL ISOLATED FORM..ARABIC LETTER HEH GOAL MEDIAL FORM +FBAA..FBAD ; NFKC_SCF; 06BE # Lo [4] ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM..ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM +FBAE..FBAF ; NFKC_SCF; 06D2 # Lo [2] ARABIC LETTER YEH BARREE ISOLATED FORM..ARABIC LETTER YEH BARREE FINAL FORM +FBB0..FBB1 ; NFKC_SCF; 06D3 # Lo [2] ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM +FBD3..FBD6 ; NFKC_SCF; 06AD # Lo [4] ARABIC LETTER NG ISOLATED FORM..ARABIC LETTER NG MEDIAL FORM +FBD7..FBD8 ; NFKC_SCF; 06C7 # Lo [2] ARABIC LETTER U ISOLATED FORM..ARABIC LETTER U FINAL FORM +FBD9..FBDA ; NFKC_SCF; 06C6 # Lo [2] ARABIC LETTER OE ISOLATED FORM..ARABIC LETTER OE FINAL FORM +FBDB..FBDC ; NFKC_SCF; 06C8 # Lo [2] ARABIC LETTER YU ISOLATED FORM..ARABIC LETTER YU FINAL FORM +FBDD ; NFKC_SCF; 06C7 0674 # Lo ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM +FBDE..FBDF ; NFKC_SCF; 06CB # Lo [2] ARABIC LETTER VE ISOLATED FORM..ARABIC LETTER VE FINAL FORM +FBE0..FBE1 ; NFKC_SCF; 06C5 # Lo [2] ARABIC LETTER KIRGHIZ OE ISOLATED FORM..ARABIC LETTER KIRGHIZ OE FINAL FORM +FBE2..FBE3 ; NFKC_SCF; 06C9 # Lo [2] ARABIC LETTER KIRGHIZ YU ISOLATED FORM..ARABIC LETTER KIRGHIZ YU FINAL FORM +FBE4..FBE7 ; NFKC_SCF; 06D0 # Lo [4] ARABIC LETTER E ISOLATED FORM..ARABIC LETTER E MEDIAL FORM +FBE8..FBE9 ; NFKC_SCF; 0649 # Lo [2] ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM..ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM +FBEA..FBEB ; NFKC_SCF; 0626 0627 # Lo [2] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM..ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM +FBEC..FBED ; NFKC_SCF; 0626 06D5 # Lo [2] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM..ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM +FBEE..FBEF ; NFKC_SCF; 0626 0648 # Lo [2] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM..ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM +FBF0..FBF1 ; NFKC_SCF; 0626 06C7 # Lo [2] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM..ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM +FBF2..FBF3 ; NFKC_SCF; 0626 06C6 # Lo [2] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM..ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM +FBF4..FBF5 ; NFKC_SCF; 0626 06C8 # Lo [2] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM..ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM +FBF6..FBF8 ; NFKC_SCF; 0626 06D0 # Lo [3] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM..ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM +FBF9..FBFB ; NFKC_SCF; 0626 0649 # Lo [3] ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM..ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM +FBFC..FBFF ; NFKC_SCF; 06CC # Lo [4] ARABIC LETTER FARSI YEH ISOLATED FORM..ARABIC LETTER FARSI YEH MEDIAL FORM +FC00 ; NFKC_SCF; 0626 062C # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM +FC01 ; NFKC_SCF; 0626 062D # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM +FC02 ; NFKC_SCF; 0626 0645 # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM +FC03 ; NFKC_SCF; 0626 0649 # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM +FC04 ; NFKC_SCF; 0626 064A # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM +FC05 ; NFKC_SCF; 0628 062C # Lo ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM +FC06 ; NFKC_SCF; 0628 062D # Lo ARABIC LIGATURE BEH WITH HAH ISOLATED FORM +FC07 ; NFKC_SCF; 0628 062E # Lo ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM +FC08 ; NFKC_SCF; 0628 0645 # Lo ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM +FC09 ; NFKC_SCF; 0628 0649 # Lo ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM +FC0A ; NFKC_SCF; 0628 064A # Lo ARABIC LIGATURE BEH WITH YEH ISOLATED FORM +FC0B ; NFKC_SCF; 062A 062C # Lo ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM +FC0C ; NFKC_SCF; 062A 062D # Lo ARABIC LIGATURE TEH WITH HAH ISOLATED FORM +FC0D ; NFKC_SCF; 062A 062E # Lo ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM +FC0E ; NFKC_SCF; 062A 0645 # Lo ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM +FC0F ; NFKC_SCF; 062A 0649 # Lo ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM +FC10 ; NFKC_SCF; 062A 064A # Lo ARABIC LIGATURE TEH WITH YEH ISOLATED FORM +FC11 ; NFKC_SCF; 062B 062C # Lo ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM +FC12 ; NFKC_SCF; 062B 0645 # Lo ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM +FC13 ; NFKC_SCF; 062B 0649 # Lo ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM +FC14 ; NFKC_SCF; 062B 064A # Lo ARABIC LIGATURE THEH WITH YEH ISOLATED FORM +FC15 ; NFKC_SCF; 062C 062D # Lo ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM +FC16 ; NFKC_SCF; 062C 0645 # Lo ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM +FC17 ; NFKC_SCF; 062D 062C # Lo ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM +FC18 ; NFKC_SCF; 062D 0645 # Lo ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM +FC19 ; NFKC_SCF; 062E 062C # Lo ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM +FC1A ; NFKC_SCF; 062E 062D # Lo ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM +FC1B ; NFKC_SCF; 062E 0645 # Lo ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM +FC1C ; NFKC_SCF; 0633 062C # Lo ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM +FC1D ; NFKC_SCF; 0633 062D # Lo ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM +FC1E ; NFKC_SCF; 0633 062E # Lo ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM +FC1F ; NFKC_SCF; 0633 0645 # Lo ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM +FC20 ; NFKC_SCF; 0635 062D # Lo ARABIC LIGATURE SAD WITH HAH ISOLATED FORM +FC21 ; NFKC_SCF; 0635 0645 # Lo ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM +FC22 ; NFKC_SCF; 0636 062C # Lo ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM +FC23 ; NFKC_SCF; 0636 062D # Lo ARABIC LIGATURE DAD WITH HAH ISOLATED FORM +FC24 ; NFKC_SCF; 0636 062E # Lo ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM +FC25 ; NFKC_SCF; 0636 0645 # Lo ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM +FC26 ; NFKC_SCF; 0637 062D # Lo ARABIC LIGATURE TAH WITH HAH ISOLATED FORM +FC27 ; NFKC_SCF; 0637 0645 # Lo ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM +FC28 ; NFKC_SCF; 0638 0645 # Lo ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM +FC29 ; NFKC_SCF; 0639 062C # Lo ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM +FC2A ; NFKC_SCF; 0639 0645 # Lo ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM +FC2B ; NFKC_SCF; 063A 062C # Lo ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM +FC2C ; NFKC_SCF; 063A 0645 # Lo ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM +FC2D ; NFKC_SCF; 0641 062C # Lo ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM +FC2E ; NFKC_SCF; 0641 062D # Lo ARABIC LIGATURE FEH WITH HAH ISOLATED FORM +FC2F ; NFKC_SCF; 0641 062E # Lo ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM +FC30 ; NFKC_SCF; 0641 0645 # Lo ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM +FC31 ; NFKC_SCF; 0641 0649 # Lo ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM +FC32 ; NFKC_SCF; 0641 064A # Lo ARABIC LIGATURE FEH WITH YEH ISOLATED FORM +FC33 ; NFKC_SCF; 0642 062D # Lo ARABIC LIGATURE QAF WITH HAH ISOLATED FORM +FC34 ; NFKC_SCF; 0642 0645 # Lo ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM +FC35 ; NFKC_SCF; 0642 0649 # Lo ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM +FC36 ; NFKC_SCF; 0642 064A # Lo ARABIC LIGATURE QAF WITH YEH ISOLATED FORM +FC37 ; NFKC_SCF; 0643 0627 # Lo ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM +FC38 ; NFKC_SCF; 0643 062C # Lo ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM +FC39 ; NFKC_SCF; 0643 062D # Lo ARABIC LIGATURE KAF WITH HAH ISOLATED FORM +FC3A ; NFKC_SCF; 0643 062E # Lo ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM +FC3B ; NFKC_SCF; 0643 0644 # Lo ARABIC LIGATURE KAF WITH LAM ISOLATED FORM +FC3C ; NFKC_SCF; 0643 0645 # Lo ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM +FC3D ; NFKC_SCF; 0643 0649 # Lo ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM +FC3E ; NFKC_SCF; 0643 064A # Lo ARABIC LIGATURE KAF WITH YEH ISOLATED FORM +FC3F ; NFKC_SCF; 0644 062C # Lo ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM +FC40 ; NFKC_SCF; 0644 062D # Lo ARABIC LIGATURE LAM WITH HAH ISOLATED FORM +FC41 ; NFKC_SCF; 0644 062E # Lo ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM +FC42 ; NFKC_SCF; 0644 0645 # Lo ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM +FC43 ; NFKC_SCF; 0644 0649 # Lo ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM +FC44 ; NFKC_SCF; 0644 064A # Lo ARABIC LIGATURE LAM WITH YEH ISOLATED FORM +FC45 ; NFKC_SCF; 0645 062C # Lo ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM +FC46 ; NFKC_SCF; 0645 062D # Lo ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM +FC47 ; NFKC_SCF; 0645 062E # Lo ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM +FC48 ; NFKC_SCF; 0645 0645 # Lo ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM +FC49 ; NFKC_SCF; 0645 0649 # Lo ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM +FC4A ; NFKC_SCF; 0645 064A # Lo ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM +FC4B ; NFKC_SCF; 0646 062C # Lo ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM +FC4C ; NFKC_SCF; 0646 062D # Lo ARABIC LIGATURE NOON WITH HAH ISOLATED FORM +FC4D ; NFKC_SCF; 0646 062E # Lo ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM +FC4E ; NFKC_SCF; 0646 0645 # Lo ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM +FC4F ; NFKC_SCF; 0646 0649 # Lo ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM +FC50 ; NFKC_SCF; 0646 064A # Lo ARABIC LIGATURE NOON WITH YEH ISOLATED FORM +FC51 ; NFKC_SCF; 0647 062C # Lo ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM +FC52 ; NFKC_SCF; 0647 0645 # Lo ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM +FC53 ; NFKC_SCF; 0647 0649 # Lo ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM +FC54 ; NFKC_SCF; 0647 064A # Lo ARABIC LIGATURE HEH WITH YEH ISOLATED FORM +FC55 ; NFKC_SCF; 064A 062C # Lo ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM +FC56 ; NFKC_SCF; 064A 062D # Lo ARABIC LIGATURE YEH WITH HAH ISOLATED FORM +FC57 ; NFKC_SCF; 064A 062E # Lo ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM +FC58 ; NFKC_SCF; 064A 0645 # Lo ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM +FC59 ; NFKC_SCF; 064A 0649 # Lo ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM +FC5A ; NFKC_SCF; 064A 064A # Lo ARABIC LIGATURE YEH WITH YEH ISOLATED FORM +FC5B ; NFKC_SCF; 0630 0670 # Lo ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM +FC5C ; NFKC_SCF; 0631 0670 # Lo ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM +FC5D ; NFKC_SCF; 0649 0670 # Lo ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM +FC5E ; NFKC_SCF; 0020 064C 0651 # Lo ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM +FC5F ; NFKC_SCF; 0020 064D 0651 # Lo ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM +FC60 ; NFKC_SCF; 0020 064E 0651 # Lo ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM +FC61 ; NFKC_SCF; 0020 064F 0651 # Lo ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM +FC62 ; NFKC_SCF; 0020 0650 0651 # Lo ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM +FC63 ; NFKC_SCF; 0020 0651 0670 # Lo ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM +FC64 ; NFKC_SCF; 0626 0631 # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM +FC65 ; NFKC_SCF; 0626 0632 # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM +FC66 ; NFKC_SCF; 0626 0645 # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM +FC67 ; NFKC_SCF; 0626 0646 # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM +FC68 ; NFKC_SCF; 0626 0649 # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM +FC69 ; NFKC_SCF; 0626 064A # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM +FC6A ; NFKC_SCF; 0628 0631 # Lo ARABIC LIGATURE BEH WITH REH FINAL FORM +FC6B ; NFKC_SCF; 0628 0632 # Lo ARABIC LIGATURE BEH WITH ZAIN FINAL FORM +FC6C ; NFKC_SCF; 0628 0645 # Lo ARABIC LIGATURE BEH WITH MEEM FINAL FORM +FC6D ; NFKC_SCF; 0628 0646 # Lo ARABIC LIGATURE BEH WITH NOON FINAL FORM +FC6E ; NFKC_SCF; 0628 0649 # Lo ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM +FC6F ; NFKC_SCF; 0628 064A # Lo ARABIC LIGATURE BEH WITH YEH FINAL FORM +FC70 ; NFKC_SCF; 062A 0631 # Lo ARABIC LIGATURE TEH WITH REH FINAL FORM +FC71 ; NFKC_SCF; 062A 0632 # Lo ARABIC LIGATURE TEH WITH ZAIN FINAL FORM +FC72 ; NFKC_SCF; 062A 0645 # Lo ARABIC LIGATURE TEH WITH MEEM FINAL FORM +FC73 ; NFKC_SCF; 062A 0646 # Lo ARABIC LIGATURE TEH WITH NOON FINAL FORM +FC74 ; NFKC_SCF; 062A 0649 # Lo ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM +FC75 ; NFKC_SCF; 062A 064A # Lo ARABIC LIGATURE TEH WITH YEH FINAL FORM +FC76 ; NFKC_SCF; 062B 0631 # Lo ARABIC LIGATURE THEH WITH REH FINAL FORM +FC77 ; NFKC_SCF; 062B 0632 # Lo ARABIC LIGATURE THEH WITH ZAIN FINAL FORM +FC78 ; NFKC_SCF; 062B 0645 # Lo ARABIC LIGATURE THEH WITH MEEM FINAL FORM +FC79 ; NFKC_SCF; 062B 0646 # Lo ARABIC LIGATURE THEH WITH NOON FINAL FORM +FC7A ; NFKC_SCF; 062B 0649 # Lo ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM +FC7B ; NFKC_SCF; 062B 064A # Lo ARABIC LIGATURE THEH WITH YEH FINAL FORM +FC7C ; NFKC_SCF; 0641 0649 # Lo ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM +FC7D ; NFKC_SCF; 0641 064A # Lo ARABIC LIGATURE FEH WITH YEH FINAL FORM +FC7E ; NFKC_SCF; 0642 0649 # Lo ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM +FC7F ; NFKC_SCF; 0642 064A # Lo ARABIC LIGATURE QAF WITH YEH FINAL FORM +FC80 ; NFKC_SCF; 0643 0627 # Lo ARABIC LIGATURE KAF WITH ALEF FINAL FORM +FC81 ; NFKC_SCF; 0643 0644 # Lo ARABIC LIGATURE KAF WITH LAM FINAL FORM +FC82 ; NFKC_SCF; 0643 0645 # Lo ARABIC LIGATURE KAF WITH MEEM FINAL FORM +FC83 ; NFKC_SCF; 0643 0649 # Lo ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM +FC84 ; NFKC_SCF; 0643 064A # Lo ARABIC LIGATURE KAF WITH YEH FINAL FORM +FC85 ; NFKC_SCF; 0644 0645 # Lo ARABIC LIGATURE LAM WITH MEEM FINAL FORM +FC86 ; NFKC_SCF; 0644 0649 # Lo ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM +FC87 ; NFKC_SCF; 0644 064A # Lo ARABIC LIGATURE LAM WITH YEH FINAL FORM +FC88 ; NFKC_SCF; 0645 0627 # Lo ARABIC LIGATURE MEEM WITH ALEF FINAL FORM +FC89 ; NFKC_SCF; 0645 0645 # Lo ARABIC LIGATURE MEEM WITH MEEM FINAL FORM +FC8A ; NFKC_SCF; 0646 0631 # Lo ARABIC LIGATURE NOON WITH REH FINAL FORM +FC8B ; NFKC_SCF; 0646 0632 # Lo ARABIC LIGATURE NOON WITH ZAIN FINAL FORM +FC8C ; NFKC_SCF; 0646 0645 # Lo ARABIC LIGATURE NOON WITH MEEM FINAL FORM +FC8D ; NFKC_SCF; 0646 0646 # Lo ARABIC LIGATURE NOON WITH NOON FINAL FORM +FC8E ; NFKC_SCF; 0646 0649 # Lo ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM +FC8F ; NFKC_SCF; 0646 064A # Lo ARABIC LIGATURE NOON WITH YEH FINAL FORM +FC90 ; NFKC_SCF; 0649 0670 # Lo ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM +FC91 ; NFKC_SCF; 064A 0631 # Lo ARABIC LIGATURE YEH WITH REH FINAL FORM +FC92 ; NFKC_SCF; 064A 0632 # Lo ARABIC LIGATURE YEH WITH ZAIN FINAL FORM +FC93 ; NFKC_SCF; 064A 0645 # Lo ARABIC LIGATURE YEH WITH MEEM FINAL FORM +FC94 ; NFKC_SCF; 064A 0646 # Lo ARABIC LIGATURE YEH WITH NOON FINAL FORM +FC95 ; NFKC_SCF; 064A 0649 # Lo ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM +FC96 ; NFKC_SCF; 064A 064A # Lo ARABIC LIGATURE YEH WITH YEH FINAL FORM +FC97 ; NFKC_SCF; 0626 062C # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM +FC98 ; NFKC_SCF; 0626 062D # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM +FC99 ; NFKC_SCF; 0626 062E # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM +FC9A ; NFKC_SCF; 0626 0645 # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM +FC9B ; NFKC_SCF; 0626 0647 # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM +FC9C ; NFKC_SCF; 0628 062C # Lo ARABIC LIGATURE BEH WITH JEEM INITIAL FORM +FC9D ; NFKC_SCF; 0628 062D # Lo ARABIC LIGATURE BEH WITH HAH INITIAL FORM +FC9E ; NFKC_SCF; 0628 062E # Lo ARABIC LIGATURE BEH WITH KHAH INITIAL FORM +FC9F ; NFKC_SCF; 0628 0645 # Lo ARABIC LIGATURE BEH WITH MEEM INITIAL FORM +FCA0 ; NFKC_SCF; 0628 0647 # Lo ARABIC LIGATURE BEH WITH HEH INITIAL FORM +FCA1 ; NFKC_SCF; 062A 062C # Lo ARABIC LIGATURE TEH WITH JEEM INITIAL FORM +FCA2 ; NFKC_SCF; 062A 062D # Lo ARABIC LIGATURE TEH WITH HAH INITIAL FORM +FCA3 ; NFKC_SCF; 062A 062E # Lo ARABIC LIGATURE TEH WITH KHAH INITIAL FORM +FCA4 ; NFKC_SCF; 062A 0645 # Lo ARABIC LIGATURE TEH WITH MEEM INITIAL FORM +FCA5 ; NFKC_SCF; 062A 0647 # Lo ARABIC LIGATURE TEH WITH HEH INITIAL FORM +FCA6 ; NFKC_SCF; 062B 0645 # Lo ARABIC LIGATURE THEH WITH MEEM INITIAL FORM +FCA7 ; NFKC_SCF; 062C 062D # Lo ARABIC LIGATURE JEEM WITH HAH INITIAL FORM +FCA8 ; NFKC_SCF; 062C 0645 # Lo ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM +FCA9 ; NFKC_SCF; 062D 062C # Lo ARABIC LIGATURE HAH WITH JEEM INITIAL FORM +FCAA ; NFKC_SCF; 062D 0645 # Lo ARABIC LIGATURE HAH WITH MEEM INITIAL FORM +FCAB ; NFKC_SCF; 062E 062C # Lo ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM +FCAC ; NFKC_SCF; 062E 0645 # Lo ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM +FCAD ; NFKC_SCF; 0633 062C # Lo ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM +FCAE ; NFKC_SCF; 0633 062D # Lo ARABIC LIGATURE SEEN WITH HAH INITIAL FORM +FCAF ; NFKC_SCF; 0633 062E # Lo ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM +FCB0 ; NFKC_SCF; 0633 0645 # Lo ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM +FCB1 ; NFKC_SCF; 0635 062D # Lo ARABIC LIGATURE SAD WITH HAH INITIAL FORM +FCB2 ; NFKC_SCF; 0635 062E # Lo ARABIC LIGATURE SAD WITH KHAH INITIAL FORM +FCB3 ; NFKC_SCF; 0635 0645 # Lo ARABIC LIGATURE SAD WITH MEEM INITIAL FORM +FCB4 ; NFKC_SCF; 0636 062C # Lo ARABIC LIGATURE DAD WITH JEEM INITIAL FORM +FCB5 ; NFKC_SCF; 0636 062D # Lo ARABIC LIGATURE DAD WITH HAH INITIAL FORM +FCB6 ; NFKC_SCF; 0636 062E # Lo ARABIC LIGATURE DAD WITH KHAH INITIAL FORM +FCB7 ; NFKC_SCF; 0636 0645 # Lo ARABIC LIGATURE DAD WITH MEEM INITIAL FORM +FCB8 ; NFKC_SCF; 0637 062D # Lo ARABIC LIGATURE TAH WITH HAH INITIAL FORM +FCB9 ; NFKC_SCF; 0638 0645 # Lo ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM +FCBA ; NFKC_SCF; 0639 062C # Lo ARABIC LIGATURE AIN WITH JEEM INITIAL FORM +FCBB ; NFKC_SCF; 0639 0645 # Lo ARABIC LIGATURE AIN WITH MEEM INITIAL FORM +FCBC ; NFKC_SCF; 063A 062C # Lo ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM +FCBD ; NFKC_SCF; 063A 0645 # Lo ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM +FCBE ; NFKC_SCF; 0641 062C # Lo ARABIC LIGATURE FEH WITH JEEM INITIAL FORM +FCBF ; NFKC_SCF; 0641 062D # Lo ARABIC LIGATURE FEH WITH HAH INITIAL FORM +FCC0 ; NFKC_SCF; 0641 062E # Lo ARABIC LIGATURE FEH WITH KHAH INITIAL FORM +FCC1 ; NFKC_SCF; 0641 0645 # Lo ARABIC LIGATURE FEH WITH MEEM INITIAL FORM +FCC2 ; NFKC_SCF; 0642 062D # Lo ARABIC LIGATURE QAF WITH HAH INITIAL FORM +FCC3 ; NFKC_SCF; 0642 0645 # Lo ARABIC LIGATURE QAF WITH MEEM INITIAL FORM +FCC4 ; NFKC_SCF; 0643 062C # Lo ARABIC LIGATURE KAF WITH JEEM INITIAL FORM +FCC5 ; NFKC_SCF; 0643 062D # Lo ARABIC LIGATURE KAF WITH HAH INITIAL FORM +FCC6 ; NFKC_SCF; 0643 062E # Lo ARABIC LIGATURE KAF WITH KHAH INITIAL FORM +FCC7 ; NFKC_SCF; 0643 0644 # Lo ARABIC LIGATURE KAF WITH LAM INITIAL FORM +FCC8 ; NFKC_SCF; 0643 0645 # Lo ARABIC LIGATURE KAF WITH MEEM INITIAL FORM +FCC9 ; NFKC_SCF; 0644 062C # Lo ARABIC LIGATURE LAM WITH JEEM INITIAL FORM +FCCA ; NFKC_SCF; 0644 062D # Lo ARABIC LIGATURE LAM WITH HAH INITIAL FORM +FCCB ; NFKC_SCF; 0644 062E # Lo ARABIC LIGATURE LAM WITH KHAH INITIAL FORM +FCCC ; NFKC_SCF; 0644 0645 # Lo ARABIC LIGATURE LAM WITH MEEM INITIAL FORM +FCCD ; NFKC_SCF; 0644 0647 # Lo ARABIC LIGATURE LAM WITH HEH INITIAL FORM +FCCE ; NFKC_SCF; 0645 062C # Lo ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM +FCCF ; NFKC_SCF; 0645 062D # Lo ARABIC LIGATURE MEEM WITH HAH INITIAL FORM +FCD0 ; NFKC_SCF; 0645 062E # Lo ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM +FCD1 ; NFKC_SCF; 0645 0645 # Lo ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM +FCD2 ; NFKC_SCF; 0646 062C # Lo ARABIC LIGATURE NOON WITH JEEM INITIAL FORM +FCD3 ; NFKC_SCF; 0646 062D # Lo ARABIC LIGATURE NOON WITH HAH INITIAL FORM +FCD4 ; NFKC_SCF; 0646 062E # Lo ARABIC LIGATURE NOON WITH KHAH INITIAL FORM +FCD5 ; NFKC_SCF; 0646 0645 # Lo ARABIC LIGATURE NOON WITH MEEM INITIAL FORM +FCD6 ; NFKC_SCF; 0646 0647 # Lo ARABIC LIGATURE NOON WITH HEH INITIAL FORM +FCD7 ; NFKC_SCF; 0647 062C # Lo ARABIC LIGATURE HEH WITH JEEM INITIAL FORM +FCD8 ; NFKC_SCF; 0647 0645 # Lo ARABIC LIGATURE HEH WITH MEEM INITIAL FORM +FCD9 ; NFKC_SCF; 0647 0670 # Lo ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM +FCDA ; NFKC_SCF; 064A 062C # Lo ARABIC LIGATURE YEH WITH JEEM INITIAL FORM +FCDB ; NFKC_SCF; 064A 062D # Lo ARABIC LIGATURE YEH WITH HAH INITIAL FORM +FCDC ; NFKC_SCF; 064A 062E # Lo ARABIC LIGATURE YEH WITH KHAH INITIAL FORM +FCDD ; NFKC_SCF; 064A 0645 # Lo ARABIC LIGATURE YEH WITH MEEM INITIAL FORM +FCDE ; NFKC_SCF; 064A 0647 # Lo ARABIC LIGATURE YEH WITH HEH INITIAL FORM +FCDF ; NFKC_SCF; 0626 0645 # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM +FCE0 ; NFKC_SCF; 0626 0647 # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM +FCE1 ; NFKC_SCF; 0628 0645 # Lo ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM +FCE2 ; NFKC_SCF; 0628 0647 # Lo ARABIC LIGATURE BEH WITH HEH MEDIAL FORM +FCE3 ; NFKC_SCF; 062A 0645 # Lo ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM +FCE4 ; NFKC_SCF; 062A 0647 # Lo ARABIC LIGATURE TEH WITH HEH MEDIAL FORM +FCE5 ; NFKC_SCF; 062B 0645 # Lo ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM +FCE6 ; NFKC_SCF; 062B 0647 # Lo ARABIC LIGATURE THEH WITH HEH MEDIAL FORM +FCE7 ; NFKC_SCF; 0633 0645 # Lo ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM +FCE8 ; NFKC_SCF; 0633 0647 # Lo ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM +FCE9 ; NFKC_SCF; 0634 0645 # Lo ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM +FCEA ; NFKC_SCF; 0634 0647 # Lo ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM +FCEB ; NFKC_SCF; 0643 0644 # Lo ARABIC LIGATURE KAF WITH LAM MEDIAL FORM +FCEC ; NFKC_SCF; 0643 0645 # Lo ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM +FCED ; NFKC_SCF; 0644 0645 # Lo ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM +FCEE ; NFKC_SCF; 0646 0645 # Lo ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM +FCEF ; NFKC_SCF; 0646 0647 # Lo ARABIC LIGATURE NOON WITH HEH MEDIAL FORM +FCF0 ; NFKC_SCF; 064A 0645 # Lo ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM +FCF1 ; NFKC_SCF; 064A 0647 # Lo ARABIC LIGATURE YEH WITH HEH MEDIAL FORM +FCF2 ; NFKC_SCF; 0640 064E 0651 # Lo ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM +FCF3 ; NFKC_SCF; 0640 064F 0651 # Lo ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM +FCF4 ; NFKC_SCF; 0640 0650 0651 # Lo ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM +FCF5 ; NFKC_SCF; 0637 0649 # Lo ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM +FCF6 ; NFKC_SCF; 0637 064A # Lo ARABIC LIGATURE TAH WITH YEH ISOLATED FORM +FCF7 ; NFKC_SCF; 0639 0649 # Lo ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM +FCF8 ; NFKC_SCF; 0639 064A # Lo ARABIC LIGATURE AIN WITH YEH ISOLATED FORM +FCF9 ; NFKC_SCF; 063A 0649 # Lo ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM +FCFA ; NFKC_SCF; 063A 064A # Lo ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM +FCFB ; NFKC_SCF; 0633 0649 # Lo ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM +FCFC ; NFKC_SCF; 0633 064A # Lo ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM +FCFD ; NFKC_SCF; 0634 0649 # Lo ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM +FCFE ; NFKC_SCF; 0634 064A # Lo ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM +FCFF ; NFKC_SCF; 062D 0649 # Lo ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM +FD00 ; NFKC_SCF; 062D 064A # Lo ARABIC LIGATURE HAH WITH YEH ISOLATED FORM +FD01 ; NFKC_SCF; 062C 0649 # Lo ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM +FD02 ; NFKC_SCF; 062C 064A # Lo ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM +FD03 ; NFKC_SCF; 062E 0649 # Lo ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM +FD04 ; NFKC_SCF; 062E 064A # Lo ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM +FD05 ; NFKC_SCF; 0635 0649 # Lo ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM +FD06 ; NFKC_SCF; 0635 064A # Lo ARABIC LIGATURE SAD WITH YEH ISOLATED FORM +FD07 ; NFKC_SCF; 0636 0649 # Lo ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM +FD08 ; NFKC_SCF; 0636 064A # Lo ARABIC LIGATURE DAD WITH YEH ISOLATED FORM +FD09 ; NFKC_SCF; 0634 062C # Lo ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM +FD0A ; NFKC_SCF; 0634 062D # Lo ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM +FD0B ; NFKC_SCF; 0634 062E # Lo ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM +FD0C ; NFKC_SCF; 0634 0645 # Lo ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM +FD0D ; NFKC_SCF; 0634 0631 # Lo ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM +FD0E ; NFKC_SCF; 0633 0631 # Lo ARABIC LIGATURE SEEN WITH REH ISOLATED FORM +FD0F ; NFKC_SCF; 0635 0631 # Lo ARABIC LIGATURE SAD WITH REH ISOLATED FORM +FD10 ; NFKC_SCF; 0636 0631 # Lo ARABIC LIGATURE DAD WITH REH ISOLATED FORM +FD11 ; NFKC_SCF; 0637 0649 # Lo ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM +FD12 ; NFKC_SCF; 0637 064A # Lo ARABIC LIGATURE TAH WITH YEH FINAL FORM +FD13 ; NFKC_SCF; 0639 0649 # Lo ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM +FD14 ; NFKC_SCF; 0639 064A # Lo ARABIC LIGATURE AIN WITH YEH FINAL FORM +FD15 ; NFKC_SCF; 063A 0649 # Lo ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM +FD16 ; NFKC_SCF; 063A 064A # Lo ARABIC LIGATURE GHAIN WITH YEH FINAL FORM +FD17 ; NFKC_SCF; 0633 0649 # Lo ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM +FD18 ; NFKC_SCF; 0633 064A # Lo ARABIC LIGATURE SEEN WITH YEH FINAL FORM +FD19 ; NFKC_SCF; 0634 0649 # Lo ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM +FD1A ; NFKC_SCF; 0634 064A # Lo ARABIC LIGATURE SHEEN WITH YEH FINAL FORM +FD1B ; NFKC_SCF; 062D 0649 # Lo ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM +FD1C ; NFKC_SCF; 062D 064A # Lo ARABIC LIGATURE HAH WITH YEH FINAL FORM +FD1D ; NFKC_SCF; 062C 0649 # Lo ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM +FD1E ; NFKC_SCF; 062C 064A # Lo ARABIC LIGATURE JEEM WITH YEH FINAL FORM +FD1F ; NFKC_SCF; 062E 0649 # Lo ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM +FD20 ; NFKC_SCF; 062E 064A # Lo ARABIC LIGATURE KHAH WITH YEH FINAL FORM +FD21 ; NFKC_SCF; 0635 0649 # Lo ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM +FD22 ; NFKC_SCF; 0635 064A # Lo ARABIC LIGATURE SAD WITH YEH FINAL FORM +FD23 ; NFKC_SCF; 0636 0649 # Lo ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM +FD24 ; NFKC_SCF; 0636 064A # Lo ARABIC LIGATURE DAD WITH YEH FINAL FORM +FD25 ; NFKC_SCF; 0634 062C # Lo ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM +FD26 ; NFKC_SCF; 0634 062D # Lo ARABIC LIGATURE SHEEN WITH HAH FINAL FORM +FD27 ; NFKC_SCF; 0634 062E # Lo ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM +FD28 ; NFKC_SCF; 0634 0645 # Lo ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM +FD29 ; NFKC_SCF; 0634 0631 # Lo ARABIC LIGATURE SHEEN WITH REH FINAL FORM +FD2A ; NFKC_SCF; 0633 0631 # Lo ARABIC LIGATURE SEEN WITH REH FINAL FORM +FD2B ; NFKC_SCF; 0635 0631 # Lo ARABIC LIGATURE SAD WITH REH FINAL FORM +FD2C ; NFKC_SCF; 0636 0631 # Lo ARABIC LIGATURE DAD WITH REH FINAL FORM +FD2D ; NFKC_SCF; 0634 062C # Lo ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM +FD2E ; NFKC_SCF; 0634 062D # Lo ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM +FD2F ; NFKC_SCF; 0634 062E # Lo ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM +FD30 ; NFKC_SCF; 0634 0645 # Lo ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM +FD31 ; NFKC_SCF; 0633 0647 # Lo ARABIC LIGATURE SEEN WITH HEH INITIAL FORM +FD32 ; NFKC_SCF; 0634 0647 # Lo ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM +FD33 ; NFKC_SCF; 0637 0645 # Lo ARABIC LIGATURE TAH WITH MEEM INITIAL FORM +FD34 ; NFKC_SCF; 0633 062C # Lo ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM +FD35 ; NFKC_SCF; 0633 062D # Lo ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM +FD36 ; NFKC_SCF; 0633 062E # Lo ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM +FD37 ; NFKC_SCF; 0634 062C # Lo ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM +FD38 ; NFKC_SCF; 0634 062D # Lo ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM +FD39 ; NFKC_SCF; 0634 062E # Lo ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM +FD3A ; NFKC_SCF; 0637 0645 # Lo ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM +FD3B ; NFKC_SCF; 0638 0645 # Lo ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM +FD3C..FD3D ; NFKC_SCF; 0627 064B # Lo [2] ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM +FD50 ; NFKC_SCF; 062A 062C 0645 # Lo ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM +FD51..FD52 ; NFKC_SCF; 062A 062D 062C # Lo [2] ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM..ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM +FD53 ; NFKC_SCF; 062A 062D 0645 # Lo ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM +FD54 ; NFKC_SCF; 062A 062E 0645 # Lo ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM +FD55 ; NFKC_SCF; 062A 0645 062C # Lo ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM +FD56 ; NFKC_SCF; 062A 0645 062D # Lo ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM +FD57 ; NFKC_SCF; 062A 0645 062E # Lo ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM +FD58..FD59 ; NFKC_SCF; 062C 0645 062D # Lo [2] ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM..ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM +FD5A ; NFKC_SCF; 062D 0645 064A # Lo ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM +FD5B ; NFKC_SCF; 062D 0645 0649 # Lo ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM +FD5C ; NFKC_SCF; 0633 062D 062C # Lo ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM +FD5D ; NFKC_SCF; 0633 062C 062D # Lo ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM +FD5E ; NFKC_SCF; 0633 062C 0649 # Lo ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM +FD5F..FD60 ; NFKC_SCF; 0633 0645 062D # Lo [2] ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM..ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM +FD61 ; NFKC_SCF; 0633 0645 062C # Lo ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM +FD62..FD63 ; NFKC_SCF; 0633 0645 0645 # Lo [2] ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM..ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM +FD64..FD65 ; NFKC_SCF; 0635 062D 062D # Lo [2] ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM..ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM +FD66 ; NFKC_SCF; 0635 0645 0645 # Lo ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM +FD67..FD68 ; NFKC_SCF; 0634 062D 0645 # Lo [2] ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM..ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM +FD69 ; NFKC_SCF; 0634 062C 064A # Lo ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM +FD6A..FD6B ; NFKC_SCF; 0634 0645 062E # Lo [2] ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM..ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM +FD6C..FD6D ; NFKC_SCF; 0634 0645 0645 # Lo [2] ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM..ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM +FD6E ; NFKC_SCF; 0636 062D 0649 # Lo ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM +FD6F..FD70 ; NFKC_SCF; 0636 062E 0645 # Lo [2] ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM..ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM +FD71..FD72 ; NFKC_SCF; 0637 0645 062D # Lo [2] ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM..ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM +FD73 ; NFKC_SCF; 0637 0645 0645 # Lo ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM +FD74 ; NFKC_SCF; 0637 0645 064A # Lo ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM +FD75 ; NFKC_SCF; 0639 062C 0645 # Lo ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM +FD76..FD77 ; NFKC_SCF; 0639 0645 0645 # Lo [2] ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM..ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM +FD78 ; NFKC_SCF; 0639 0645 0649 # Lo ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM +FD79 ; NFKC_SCF; 063A 0645 0645 # Lo ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM +FD7A ; NFKC_SCF; 063A 0645 064A # Lo ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM +FD7B ; NFKC_SCF; 063A 0645 0649 # Lo ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM +FD7C..FD7D ; NFKC_SCF; 0641 062E 0645 # Lo [2] ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM..ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM +FD7E ; NFKC_SCF; 0642 0645 062D # Lo ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM +FD7F ; NFKC_SCF; 0642 0645 0645 # Lo ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM +FD80 ; NFKC_SCF; 0644 062D 0645 # Lo ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM +FD81 ; NFKC_SCF; 0644 062D 064A # Lo ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM +FD82 ; NFKC_SCF; 0644 062D 0649 # Lo ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM +FD83..FD84 ; NFKC_SCF; 0644 062C 062C # Lo [2] ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM..ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM +FD85..FD86 ; NFKC_SCF; 0644 062E 0645 # Lo [2] ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM..ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM +FD87..FD88 ; NFKC_SCF; 0644 0645 062D # Lo [2] ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM..ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM +FD89 ; NFKC_SCF; 0645 062D 062C # Lo ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM +FD8A ; NFKC_SCF; 0645 062D 0645 # Lo ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM +FD8B ; NFKC_SCF; 0645 062D 064A # Lo ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM +FD8C ; NFKC_SCF; 0645 062C 062D # Lo ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM +FD8D ; NFKC_SCF; 0645 062C 0645 # Lo ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM +FD8E ; NFKC_SCF; 0645 062E 062C # Lo ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM +FD8F ; NFKC_SCF; 0645 062E 0645 # Lo ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM +FD92 ; NFKC_SCF; 0645 062C 062E # Lo ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM +FD93 ; NFKC_SCF; 0647 0645 062C # Lo ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM +FD94 ; NFKC_SCF; 0647 0645 0645 # Lo ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM +FD95 ; NFKC_SCF; 0646 062D 0645 # Lo ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM +FD96 ; NFKC_SCF; 0646 062D 0649 # Lo ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM +FD97..FD98 ; NFKC_SCF; 0646 062C 0645 # Lo [2] ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM +FD99 ; NFKC_SCF; 0646 062C 0649 # Lo ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM +FD9A ; NFKC_SCF; 0646 0645 064A # Lo ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM +FD9B ; NFKC_SCF; 0646 0645 0649 # Lo ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM +FD9C..FD9D ; NFKC_SCF; 064A 0645 0645 # Lo [2] ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM..ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM +FD9E ; NFKC_SCF; 0628 062E 064A # Lo ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM +FD9F ; NFKC_SCF; 062A 062C 064A # Lo ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM +FDA0 ; NFKC_SCF; 062A 062C 0649 # Lo ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM +FDA1 ; NFKC_SCF; 062A 062E 064A # Lo ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM +FDA2 ; NFKC_SCF; 062A 062E 0649 # Lo ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM +FDA3 ; NFKC_SCF; 062A 0645 064A # Lo ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM +FDA4 ; NFKC_SCF; 062A 0645 0649 # Lo ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM +FDA5 ; NFKC_SCF; 062C 0645 064A # Lo ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM +FDA6 ; NFKC_SCF; 062C 062D 0649 # Lo ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM +FDA7 ; NFKC_SCF; 062C 0645 0649 # Lo ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM +FDA8 ; NFKC_SCF; 0633 062E 0649 # Lo ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM +FDA9 ; NFKC_SCF; 0635 062D 064A # Lo ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM +FDAA ; NFKC_SCF; 0634 062D 064A # Lo ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM +FDAB ; NFKC_SCF; 0636 062D 064A # Lo ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM +FDAC ; NFKC_SCF; 0644 062C 064A # Lo ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM +FDAD ; NFKC_SCF; 0644 0645 064A # Lo ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM +FDAE ; NFKC_SCF; 064A 062D 064A # Lo ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM +FDAF ; NFKC_SCF; 064A 062C 064A # Lo ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM +FDB0 ; NFKC_SCF; 064A 0645 064A # Lo ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM +FDB1 ; NFKC_SCF; 0645 0645 064A # Lo ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM +FDB2 ; NFKC_SCF; 0642 0645 064A # Lo ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM +FDB3 ; NFKC_SCF; 0646 062D 064A # Lo ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM +FDB4 ; NFKC_SCF; 0642 0645 062D # Lo ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM +FDB5 ; NFKC_SCF; 0644 062D 0645 # Lo ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM +FDB6 ; NFKC_SCF; 0639 0645 064A # Lo ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM +FDB7 ; NFKC_SCF; 0643 0645 064A # Lo ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM +FDB8 ; NFKC_SCF; 0646 062C 062D # Lo ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM +FDB9 ; NFKC_SCF; 0645 062E 064A # Lo ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM +FDBA ; NFKC_SCF; 0644 062C 0645 # Lo ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM +FDBB ; NFKC_SCF; 0643 0645 0645 # Lo ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM +FDBC ; NFKC_SCF; 0644 062C 0645 # Lo ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM +FDBD ; NFKC_SCF; 0646 062C 062D # Lo ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM +FDBE ; NFKC_SCF; 062C 062D 064A # Lo ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM +FDBF ; NFKC_SCF; 062D 062C 064A # Lo ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM +FDC0 ; NFKC_SCF; 0645 062C 064A # Lo ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM +FDC1 ; NFKC_SCF; 0641 0645 064A # Lo ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM +FDC2 ; NFKC_SCF; 0628 062D 064A # Lo ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM +FDC3 ; NFKC_SCF; 0643 0645 0645 # Lo ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM +FDC4 ; NFKC_SCF; 0639 062C 0645 # Lo ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM +FDC5 ; NFKC_SCF; 0635 0645 0645 # Lo ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM +FDC6 ; NFKC_SCF; 0633 062E 064A # Lo ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM +FDC7 ; NFKC_SCF; 0646 062C 064A # Lo ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FDF0 ; NFKC_SCF; 0635 0644 06D2 # Lo ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM +FDF1 ; NFKC_SCF; 0642 0644 06D2 # Lo ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM +FDF2 ; NFKC_SCF; 0627 0644 0644 0647 #Lo ARABIC LIGATURE ALLAH ISOLATED FORM +FDF3 ; NFKC_SCF; 0627 0643 0628 0631 #Lo ARABIC LIGATURE AKBAR ISOLATED FORM +FDF4 ; NFKC_SCF; 0645 062D 0645 062F #Lo ARABIC LIGATURE MOHAMMAD ISOLATED FORM +FDF5 ; NFKC_SCF; 0635 0644 0639 0645 #Lo ARABIC LIGATURE SALAM ISOLATED FORM +FDF6 ; NFKC_SCF; 0631 0633 0648 0644 #Lo ARABIC LIGATURE RASOUL ISOLATED FORM +FDF7 ; NFKC_SCF; 0639 0644 064A 0647 #Lo ARABIC LIGATURE ALAYHE ISOLATED FORM +FDF8 ; NFKC_SCF; 0648 0633 0644 0645 #Lo ARABIC LIGATURE WASALLAM ISOLATED FORM +FDF9 ; NFKC_SCF; 0635 0644 0649 # Lo ARABIC LIGATURE SALLA ISOLATED FORM +FDFA ; NFKC_SCF; 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645 #Lo ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM +FDFB ; NFKC_SCF; 062C 0644 0020 062C 0644 0627 0644 0647 #Lo ARABIC LIGATURE JALLAJALALOUHOU +FDFC ; NFKC_SCF; 0631 06CC 0627 0644 #Sc RIAL SIGN +FE00..FE0F ; NFKC_SCF; # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 +FE10 ; NFKC_SCF; 002C # Po PRESENTATION FORM FOR VERTICAL COMMA +FE11 ; NFKC_SCF; 3001 # Po PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA +FE12 ; NFKC_SCF; 3002 # Po PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP +FE13 ; NFKC_SCF; 003A # Po PRESENTATION FORM FOR VERTICAL COLON +FE14 ; NFKC_SCF; 003B # Po PRESENTATION FORM FOR VERTICAL SEMICOLON +FE15 ; NFKC_SCF; 0021 # Po PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK +FE16 ; NFKC_SCF; 003F # Po PRESENTATION FORM FOR VERTICAL QUESTION MARK +FE17 ; NFKC_SCF; 3016 # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET +FE18 ; NFKC_SCF; 3017 # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET +FE19 ; NFKC_SCF; 002E 002E 002E # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS +FE30 ; NFKC_SCF; 002E 002E # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER +FE31 ; NFKC_SCF; 2014 # Pd PRESENTATION FORM FOR VERTICAL EM DASH +FE32 ; NFKC_SCF; 2013 # Pd PRESENTATION FORM FOR VERTICAL EN DASH +FE33..FE34 ; NFKC_SCF; 005F # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE +FE35 ; NFKC_SCF; 0028 # Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS +FE36 ; NFKC_SCF; 0029 # Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS +FE37 ; NFKC_SCF; 007B # Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET +FE38 ; NFKC_SCF; 007D # Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET +FE39 ; NFKC_SCF; 3014 # Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET +FE3A ; NFKC_SCF; 3015 # Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET +FE3B ; NFKC_SCF; 3010 # Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET +FE3C ; NFKC_SCF; 3011 # Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET +FE3D ; NFKC_SCF; 300A # Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET +FE3E ; NFKC_SCF; 300B # Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET +FE3F ; NFKC_SCF; 3008 # Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET +FE40 ; NFKC_SCF; 3009 # Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET +FE41 ; NFKC_SCF; 300C # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET +FE42 ; NFKC_SCF; 300D # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET +FE43 ; NFKC_SCF; 300E # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET +FE44 ; NFKC_SCF; 300F # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET +FE47 ; NFKC_SCF; 005B # Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET +FE48 ; NFKC_SCF; 005D # Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET +FE49..FE4C ; NFKC_SCF; 0020 0305 # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE +FE4D..FE4F ; NFKC_SCF; 005F # Pc [3] DASHED LOW LINE..WAVY LOW LINE +FE50 ; NFKC_SCF; 002C # Po SMALL COMMA +FE51 ; NFKC_SCF; 3001 # Po SMALL IDEOGRAPHIC COMMA +FE52 ; NFKC_SCF; 002E # Po SMALL FULL STOP +FE54 ; NFKC_SCF; 003B # Po SMALL SEMICOLON +FE55 ; NFKC_SCF; 003A # Po SMALL COLON +FE56 ; NFKC_SCF; 003F # Po SMALL QUESTION MARK +FE57 ; NFKC_SCF; 0021 # Po SMALL EXCLAMATION MARK +FE58 ; NFKC_SCF; 2014 # Pd SMALL EM DASH +FE59 ; NFKC_SCF; 0028 # Ps SMALL LEFT PARENTHESIS +FE5A ; NFKC_SCF; 0029 # Pe SMALL RIGHT PARENTHESIS +FE5B ; NFKC_SCF; 007B # Ps SMALL LEFT CURLY BRACKET +FE5C ; NFKC_SCF; 007D # Pe SMALL RIGHT CURLY BRACKET +FE5D ; NFKC_SCF; 3014 # Ps SMALL LEFT TORTOISE SHELL BRACKET +FE5E ; NFKC_SCF; 3015 # Pe SMALL RIGHT TORTOISE SHELL BRACKET +FE5F ; NFKC_SCF; 0023 # Po SMALL NUMBER SIGN +FE60 ; NFKC_SCF; 0026 # Po SMALL AMPERSAND +FE61 ; NFKC_SCF; 002A # Po SMALL ASTERISK +FE62 ; NFKC_SCF; 002B # Sm SMALL PLUS SIGN +FE63 ; NFKC_SCF; 002D # Pd SMALL HYPHEN-MINUS +FE64 ; NFKC_SCF; 003C # Sm SMALL LESS-THAN SIGN +FE65 ; NFKC_SCF; 003E # Sm SMALL GREATER-THAN SIGN +FE66 ; NFKC_SCF; 003D # Sm SMALL EQUALS SIGN +FE68 ; NFKC_SCF; 005C # Po SMALL REVERSE SOLIDUS +FE69 ; NFKC_SCF; 0024 # Sc SMALL DOLLAR SIGN +FE6A ; NFKC_SCF; 0025 # Po SMALL PERCENT SIGN +FE6B ; NFKC_SCF; 0040 # Po SMALL COMMERCIAL AT +FE70 ; NFKC_SCF; 0020 064B # Lo ARABIC FATHATAN ISOLATED FORM +FE71 ; NFKC_SCF; 0640 064B # Lo ARABIC TATWEEL WITH FATHATAN ABOVE +FE72 ; NFKC_SCF; 0020 064C # Lo ARABIC DAMMATAN ISOLATED FORM +FE74 ; NFKC_SCF; 0020 064D # Lo ARABIC KASRATAN ISOLATED FORM +FE76 ; NFKC_SCF; 0020 064E # Lo ARABIC FATHA ISOLATED FORM +FE77 ; NFKC_SCF; 0640 064E # Lo ARABIC FATHA MEDIAL FORM +FE78 ; NFKC_SCF; 0020 064F # Lo ARABIC DAMMA ISOLATED FORM +FE79 ; NFKC_SCF; 0640 064F # Lo ARABIC DAMMA MEDIAL FORM +FE7A ; NFKC_SCF; 0020 0650 # Lo ARABIC KASRA ISOLATED FORM +FE7B ; NFKC_SCF; 0640 0650 # Lo ARABIC KASRA MEDIAL FORM +FE7C ; NFKC_SCF; 0020 0651 # Lo ARABIC SHADDA ISOLATED FORM +FE7D ; NFKC_SCF; 0640 0651 # Lo ARABIC SHADDA MEDIAL FORM +FE7E ; NFKC_SCF; 0020 0652 # Lo ARABIC SUKUN ISOLATED FORM +FE7F ; NFKC_SCF; 0640 0652 # Lo ARABIC SUKUN MEDIAL FORM +FE80 ; NFKC_SCF; 0621 # Lo ARABIC LETTER HAMZA ISOLATED FORM +FE81..FE82 ; NFKC_SCF; 0622 # Lo [2] ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM..ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM +FE83..FE84 ; NFKC_SCF; 0623 # Lo [2] ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM..ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM +FE85..FE86 ; NFKC_SCF; 0624 # Lo [2] ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM..ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM +FE87..FE88 ; NFKC_SCF; 0625 # Lo [2] ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM..ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM +FE89..FE8C ; NFKC_SCF; 0626 # Lo [4] ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM..ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM +FE8D..FE8E ; NFKC_SCF; 0627 # Lo [2] ARABIC LETTER ALEF ISOLATED FORM..ARABIC LETTER ALEF FINAL FORM +FE8F..FE92 ; NFKC_SCF; 0628 # Lo [4] ARABIC LETTER BEH ISOLATED FORM..ARABIC LETTER BEH MEDIAL FORM +FE93..FE94 ; NFKC_SCF; 0629 # Lo [2] ARABIC LETTER TEH MARBUTA ISOLATED FORM..ARABIC LETTER TEH MARBUTA FINAL FORM +FE95..FE98 ; NFKC_SCF; 062A # Lo [4] ARABIC LETTER TEH ISOLATED FORM..ARABIC LETTER TEH MEDIAL FORM +FE99..FE9C ; NFKC_SCF; 062B # Lo [4] ARABIC LETTER THEH ISOLATED FORM..ARABIC LETTER THEH MEDIAL FORM +FE9D..FEA0 ; NFKC_SCF; 062C # Lo [4] ARABIC LETTER JEEM ISOLATED FORM..ARABIC LETTER JEEM MEDIAL FORM +FEA1..FEA4 ; NFKC_SCF; 062D # Lo [4] ARABIC LETTER HAH ISOLATED FORM..ARABIC LETTER HAH MEDIAL FORM +FEA5..FEA8 ; NFKC_SCF; 062E # Lo [4] ARABIC LETTER KHAH ISOLATED FORM..ARABIC LETTER KHAH MEDIAL FORM +FEA9..FEAA ; NFKC_SCF; 062F # Lo [2] ARABIC LETTER DAL ISOLATED FORM..ARABIC LETTER DAL FINAL FORM +FEAB..FEAC ; NFKC_SCF; 0630 # Lo [2] ARABIC LETTER THAL ISOLATED FORM..ARABIC LETTER THAL FINAL FORM +FEAD..FEAE ; NFKC_SCF; 0631 # Lo [2] ARABIC LETTER REH ISOLATED FORM..ARABIC LETTER REH FINAL FORM +FEAF..FEB0 ; NFKC_SCF; 0632 # Lo [2] ARABIC LETTER ZAIN ISOLATED FORM..ARABIC LETTER ZAIN FINAL FORM +FEB1..FEB4 ; NFKC_SCF; 0633 # Lo [4] ARABIC LETTER SEEN ISOLATED FORM..ARABIC LETTER SEEN MEDIAL FORM +FEB5..FEB8 ; NFKC_SCF; 0634 # Lo [4] ARABIC LETTER SHEEN ISOLATED FORM..ARABIC LETTER SHEEN MEDIAL FORM +FEB9..FEBC ; NFKC_SCF; 0635 # Lo [4] ARABIC LETTER SAD ISOLATED FORM..ARABIC LETTER SAD MEDIAL FORM +FEBD..FEC0 ; NFKC_SCF; 0636 # Lo [4] ARABIC LETTER DAD ISOLATED FORM..ARABIC LETTER DAD MEDIAL FORM +FEC1..FEC4 ; NFKC_SCF; 0637 # Lo [4] ARABIC LETTER TAH ISOLATED FORM..ARABIC LETTER TAH MEDIAL FORM +FEC5..FEC8 ; NFKC_SCF; 0638 # Lo [4] ARABIC LETTER ZAH ISOLATED FORM..ARABIC LETTER ZAH MEDIAL FORM +FEC9..FECC ; NFKC_SCF; 0639 # Lo [4] ARABIC LETTER AIN ISOLATED FORM..ARABIC LETTER AIN MEDIAL FORM +FECD..FED0 ; NFKC_SCF; 063A # Lo [4] ARABIC LETTER GHAIN ISOLATED FORM..ARABIC LETTER GHAIN MEDIAL FORM +FED1..FED4 ; NFKC_SCF; 0641 # Lo [4] ARABIC LETTER FEH ISOLATED FORM..ARABIC LETTER FEH MEDIAL FORM +FED5..FED8 ; NFKC_SCF; 0642 # Lo [4] ARABIC LETTER QAF ISOLATED FORM..ARABIC LETTER QAF MEDIAL FORM +FED9..FEDC ; NFKC_SCF; 0643 # Lo [4] ARABIC LETTER KAF ISOLATED FORM..ARABIC LETTER KAF MEDIAL FORM +FEDD..FEE0 ; NFKC_SCF; 0644 # Lo [4] ARABIC LETTER LAM ISOLATED FORM..ARABIC LETTER LAM MEDIAL FORM +FEE1..FEE4 ; NFKC_SCF; 0645 # Lo [4] ARABIC LETTER MEEM ISOLATED FORM..ARABIC LETTER MEEM MEDIAL FORM +FEE5..FEE8 ; NFKC_SCF; 0646 # Lo [4] ARABIC LETTER NOON ISOLATED FORM..ARABIC LETTER NOON MEDIAL FORM +FEE9..FEEC ; NFKC_SCF; 0647 # Lo [4] ARABIC LETTER HEH ISOLATED FORM..ARABIC LETTER HEH MEDIAL FORM +FEED..FEEE ; NFKC_SCF; 0648 # Lo [2] ARABIC LETTER WAW ISOLATED FORM..ARABIC LETTER WAW FINAL FORM +FEEF..FEF0 ; NFKC_SCF; 0649 # Lo [2] ARABIC LETTER ALEF MAKSURA ISOLATED FORM..ARABIC LETTER ALEF MAKSURA FINAL FORM +FEF1..FEF4 ; NFKC_SCF; 064A # Lo [4] ARABIC LETTER YEH ISOLATED FORM..ARABIC LETTER YEH MEDIAL FORM +FEF5..FEF6 ; NFKC_SCF; 0644 0622 # Lo [2] ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM +FEF7..FEF8 ; NFKC_SCF; 0644 0623 # Lo [2] ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM +FEF9..FEFA ; NFKC_SCF; 0644 0625 # Lo [2] ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM +FEFB..FEFC ; NFKC_SCF; 0644 0627 # Lo [2] ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM +FEFF ; NFKC_SCF; # Cf ZERO WIDTH NO-BREAK SPACE +FF01 ; NFKC_SCF; 0021 # Po FULLWIDTH EXCLAMATION MARK +FF02 ; NFKC_SCF; 0022 # Po FULLWIDTH QUOTATION MARK +FF03 ; NFKC_SCF; 0023 # Po FULLWIDTH NUMBER SIGN +FF04 ; NFKC_SCF; 0024 # Sc FULLWIDTH DOLLAR SIGN +FF05 ; NFKC_SCF; 0025 # Po FULLWIDTH PERCENT SIGN +FF06 ; NFKC_SCF; 0026 # Po FULLWIDTH AMPERSAND +FF07 ; NFKC_SCF; 0027 # Po FULLWIDTH APOSTROPHE +FF08 ; NFKC_SCF; 0028 # Ps FULLWIDTH LEFT PARENTHESIS +FF09 ; NFKC_SCF; 0029 # Pe FULLWIDTH RIGHT PARENTHESIS +FF0A ; NFKC_SCF; 002A # Po FULLWIDTH ASTERISK +FF0B ; NFKC_SCF; 002B # Sm FULLWIDTH PLUS SIGN +FF0C ; NFKC_SCF; 002C # Po FULLWIDTH COMMA +FF0D ; NFKC_SCF; 002D # Pd FULLWIDTH HYPHEN-MINUS +FF0E ; NFKC_SCF; 002E # Po FULLWIDTH FULL STOP +FF0F ; NFKC_SCF; 002F # Po FULLWIDTH SOLIDUS +FF10 ; NFKC_SCF; 0030 # Nd FULLWIDTH DIGIT ZERO +FF11 ; NFKC_SCF; 0031 # Nd FULLWIDTH DIGIT ONE +FF12 ; NFKC_SCF; 0032 # Nd FULLWIDTH DIGIT TWO +FF13 ; NFKC_SCF; 0033 # Nd FULLWIDTH DIGIT THREE +FF14 ; NFKC_SCF; 0034 # Nd FULLWIDTH DIGIT FOUR +FF15 ; NFKC_SCF; 0035 # Nd FULLWIDTH DIGIT FIVE +FF16 ; NFKC_SCF; 0036 # Nd FULLWIDTH DIGIT SIX +FF17 ; NFKC_SCF; 0037 # Nd FULLWIDTH DIGIT SEVEN +FF18 ; NFKC_SCF; 0038 # Nd FULLWIDTH DIGIT EIGHT +FF19 ; NFKC_SCF; 0039 # Nd FULLWIDTH DIGIT NINE +FF1A ; NFKC_SCF; 003A # Po FULLWIDTH COLON +FF1B ; NFKC_SCF; 003B # Po FULLWIDTH SEMICOLON +FF1C ; NFKC_SCF; 003C # Sm FULLWIDTH LESS-THAN SIGN +FF1D ; NFKC_SCF; 003D # Sm FULLWIDTH EQUALS SIGN +FF1E ; NFKC_SCF; 003E # Sm FULLWIDTH GREATER-THAN SIGN +FF1F ; NFKC_SCF; 003F # Po FULLWIDTH QUESTION MARK +FF20 ; NFKC_SCF; 0040 # Po FULLWIDTH COMMERCIAL AT +FF21 ; NFKC_SCF; 0061 # L& FULLWIDTH LATIN CAPITAL LETTER A +FF22 ; NFKC_SCF; 0062 # L& FULLWIDTH LATIN CAPITAL LETTER B +FF23 ; NFKC_SCF; 0063 # L& FULLWIDTH LATIN CAPITAL LETTER C +FF24 ; NFKC_SCF; 0064 # L& FULLWIDTH LATIN CAPITAL LETTER D +FF25 ; NFKC_SCF; 0065 # L& FULLWIDTH LATIN CAPITAL LETTER E +FF26 ; NFKC_SCF; 0066 # L& FULLWIDTH LATIN CAPITAL LETTER F +FF27 ; NFKC_SCF; 0067 # L& FULLWIDTH LATIN CAPITAL LETTER G +FF28 ; NFKC_SCF; 0068 # L& FULLWIDTH LATIN CAPITAL LETTER H +FF29 ; NFKC_SCF; 0069 # L& FULLWIDTH LATIN CAPITAL LETTER I +FF2A ; NFKC_SCF; 006A # L& FULLWIDTH LATIN CAPITAL LETTER J +FF2B ; NFKC_SCF; 006B # L& FULLWIDTH LATIN CAPITAL LETTER K +FF2C ; NFKC_SCF; 006C # L& FULLWIDTH LATIN CAPITAL LETTER L +FF2D ; NFKC_SCF; 006D # L& FULLWIDTH LATIN CAPITAL LETTER M +FF2E ; NFKC_SCF; 006E # L& FULLWIDTH LATIN CAPITAL LETTER N +FF2F ; NFKC_SCF; 006F # L& FULLWIDTH LATIN CAPITAL LETTER O +FF30 ; NFKC_SCF; 0070 # L& FULLWIDTH LATIN CAPITAL LETTER P +FF31 ; NFKC_SCF; 0071 # L& FULLWIDTH LATIN CAPITAL LETTER Q +FF32 ; NFKC_SCF; 0072 # L& FULLWIDTH LATIN CAPITAL LETTER R +FF33 ; NFKC_SCF; 0073 # L& FULLWIDTH LATIN CAPITAL LETTER S +FF34 ; NFKC_SCF; 0074 # L& FULLWIDTH LATIN CAPITAL LETTER T +FF35 ; NFKC_SCF; 0075 # L& FULLWIDTH LATIN CAPITAL LETTER U +FF36 ; NFKC_SCF; 0076 # L& FULLWIDTH LATIN CAPITAL LETTER V +FF37 ; NFKC_SCF; 0077 # L& FULLWIDTH LATIN CAPITAL LETTER W +FF38 ; NFKC_SCF; 0078 # L& FULLWIDTH LATIN CAPITAL LETTER X +FF39 ; NFKC_SCF; 0079 # L& FULLWIDTH LATIN CAPITAL LETTER Y +FF3A ; NFKC_SCF; 007A # L& FULLWIDTH LATIN CAPITAL LETTER Z +FF3B ; NFKC_SCF; 005B # Ps FULLWIDTH LEFT SQUARE BRACKET +FF3C ; NFKC_SCF; 005C # Po FULLWIDTH REVERSE SOLIDUS +FF3D ; NFKC_SCF; 005D # Pe FULLWIDTH RIGHT SQUARE BRACKET +FF3E ; NFKC_SCF; 005E # Sk FULLWIDTH CIRCUMFLEX ACCENT +FF3F ; NFKC_SCF; 005F # Pc FULLWIDTH LOW LINE +FF40 ; NFKC_SCF; 0060 # Sk FULLWIDTH GRAVE ACCENT +FF41 ; NFKC_SCF; 0061 # L& FULLWIDTH LATIN SMALL LETTER A +FF42 ; NFKC_SCF; 0062 # L& FULLWIDTH LATIN SMALL LETTER B +FF43 ; NFKC_SCF; 0063 # L& FULLWIDTH LATIN SMALL LETTER C +FF44 ; NFKC_SCF; 0064 # L& FULLWIDTH LATIN SMALL LETTER D +FF45 ; NFKC_SCF; 0065 # L& FULLWIDTH LATIN SMALL LETTER E +FF46 ; NFKC_SCF; 0066 # L& FULLWIDTH LATIN SMALL LETTER F +FF47 ; NFKC_SCF; 0067 # L& FULLWIDTH LATIN SMALL LETTER G +FF48 ; NFKC_SCF; 0068 # L& FULLWIDTH LATIN SMALL LETTER H +FF49 ; NFKC_SCF; 0069 # L& FULLWIDTH LATIN SMALL LETTER I +FF4A ; NFKC_SCF; 006A # L& FULLWIDTH LATIN SMALL LETTER J +FF4B ; NFKC_SCF; 006B # L& FULLWIDTH LATIN SMALL LETTER K +FF4C ; NFKC_SCF; 006C # L& FULLWIDTH LATIN SMALL LETTER L +FF4D ; NFKC_SCF; 006D # L& FULLWIDTH LATIN SMALL LETTER M +FF4E ; NFKC_SCF; 006E # L& FULLWIDTH LATIN SMALL LETTER N +FF4F ; NFKC_SCF; 006F # L& FULLWIDTH LATIN SMALL LETTER O +FF50 ; NFKC_SCF; 0070 # L& FULLWIDTH LATIN SMALL LETTER P +FF51 ; NFKC_SCF; 0071 # L& FULLWIDTH LATIN SMALL LETTER Q +FF52 ; NFKC_SCF; 0072 # L& FULLWIDTH LATIN SMALL LETTER R +FF53 ; NFKC_SCF; 0073 # L& FULLWIDTH LATIN SMALL LETTER S +FF54 ; NFKC_SCF; 0074 # L& FULLWIDTH LATIN SMALL LETTER T +FF55 ; NFKC_SCF; 0075 # L& FULLWIDTH LATIN SMALL LETTER U +FF56 ; NFKC_SCF; 0076 # L& FULLWIDTH LATIN SMALL LETTER V +FF57 ; NFKC_SCF; 0077 # L& FULLWIDTH LATIN SMALL LETTER W +FF58 ; NFKC_SCF; 0078 # L& FULLWIDTH LATIN SMALL LETTER X +FF59 ; NFKC_SCF; 0079 # L& FULLWIDTH LATIN SMALL LETTER Y +FF5A ; NFKC_SCF; 007A # L& FULLWIDTH LATIN SMALL LETTER Z +FF5B ; NFKC_SCF; 007B # Ps FULLWIDTH LEFT CURLY BRACKET +FF5C ; NFKC_SCF; 007C # Sm FULLWIDTH VERTICAL LINE +FF5D ; NFKC_SCF; 007D # Pe FULLWIDTH RIGHT CURLY BRACKET +FF5E ; NFKC_SCF; 007E # Sm FULLWIDTH TILDE +FF5F ; NFKC_SCF; 2985 # Ps FULLWIDTH LEFT WHITE PARENTHESIS +FF60 ; NFKC_SCF; 2986 # Pe FULLWIDTH RIGHT WHITE PARENTHESIS +FF61 ; NFKC_SCF; 3002 # Po HALFWIDTH IDEOGRAPHIC FULL STOP +FF62 ; NFKC_SCF; 300C # Ps HALFWIDTH LEFT CORNER BRACKET +FF63 ; NFKC_SCF; 300D # Pe HALFWIDTH RIGHT CORNER BRACKET +FF64 ; NFKC_SCF; 3001 # Po HALFWIDTH IDEOGRAPHIC COMMA +FF65 ; NFKC_SCF; 30FB # Po HALFWIDTH KATAKANA MIDDLE DOT +FF66 ; NFKC_SCF; 30F2 # Lo HALFWIDTH KATAKANA LETTER WO +FF67 ; NFKC_SCF; 30A1 # Lo HALFWIDTH KATAKANA LETTER SMALL A +FF68 ; NFKC_SCF; 30A3 # Lo HALFWIDTH KATAKANA LETTER SMALL I +FF69 ; NFKC_SCF; 30A5 # Lo HALFWIDTH KATAKANA LETTER SMALL U +FF6A ; NFKC_SCF; 30A7 # Lo HALFWIDTH KATAKANA LETTER SMALL E +FF6B ; NFKC_SCF; 30A9 # Lo HALFWIDTH KATAKANA LETTER SMALL O +FF6C ; NFKC_SCF; 30E3 # Lo HALFWIDTH KATAKANA LETTER SMALL YA +FF6D ; NFKC_SCF; 30E5 # Lo HALFWIDTH KATAKANA LETTER SMALL YU +FF6E ; NFKC_SCF; 30E7 # Lo HALFWIDTH KATAKANA LETTER SMALL YO +FF6F ; NFKC_SCF; 30C3 # Lo HALFWIDTH KATAKANA LETTER SMALL TU +FF70 ; NFKC_SCF; 30FC # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +FF71 ; NFKC_SCF; 30A2 # Lo HALFWIDTH KATAKANA LETTER A +FF72 ; NFKC_SCF; 30A4 # Lo HALFWIDTH KATAKANA LETTER I +FF73 ; NFKC_SCF; 30A6 # Lo HALFWIDTH KATAKANA LETTER U +FF74 ; NFKC_SCF; 30A8 # Lo HALFWIDTH KATAKANA LETTER E +FF75 ; NFKC_SCF; 30AA # Lo HALFWIDTH KATAKANA LETTER O +FF76 ; NFKC_SCF; 30AB # Lo HALFWIDTH KATAKANA LETTER KA +FF77 ; NFKC_SCF; 30AD # Lo HALFWIDTH KATAKANA LETTER KI +FF78 ; NFKC_SCF; 30AF # Lo HALFWIDTH KATAKANA LETTER KU +FF79 ; NFKC_SCF; 30B1 # Lo HALFWIDTH KATAKANA LETTER KE +FF7A ; NFKC_SCF; 30B3 # Lo HALFWIDTH KATAKANA LETTER KO +FF7B ; NFKC_SCF; 30B5 # Lo HALFWIDTH KATAKANA LETTER SA +FF7C ; NFKC_SCF; 30B7 # Lo HALFWIDTH KATAKANA LETTER SI +FF7D ; NFKC_SCF; 30B9 # Lo HALFWIDTH KATAKANA LETTER SU +FF7E ; NFKC_SCF; 30BB # Lo HALFWIDTH KATAKANA LETTER SE +FF7F ; NFKC_SCF; 30BD # Lo HALFWIDTH KATAKANA LETTER SO +FF80 ; NFKC_SCF; 30BF # Lo HALFWIDTH KATAKANA LETTER TA +FF81 ; NFKC_SCF; 30C1 # Lo HALFWIDTH KATAKANA LETTER TI +FF82 ; NFKC_SCF; 30C4 # Lo HALFWIDTH KATAKANA LETTER TU +FF83 ; NFKC_SCF; 30C6 # Lo HALFWIDTH KATAKANA LETTER TE +FF84 ; NFKC_SCF; 30C8 # Lo HALFWIDTH KATAKANA LETTER TO +FF85 ; NFKC_SCF; 30CA # Lo HALFWIDTH KATAKANA LETTER NA +FF86 ; NFKC_SCF; 30CB # Lo HALFWIDTH KATAKANA LETTER NI +FF87 ; NFKC_SCF; 30CC # Lo HALFWIDTH KATAKANA LETTER NU +FF88 ; NFKC_SCF; 30CD # Lo HALFWIDTH KATAKANA LETTER NE +FF89 ; NFKC_SCF; 30CE # Lo HALFWIDTH KATAKANA LETTER NO +FF8A ; NFKC_SCF; 30CF # Lo HALFWIDTH KATAKANA LETTER HA +FF8B ; NFKC_SCF; 30D2 # Lo HALFWIDTH KATAKANA LETTER HI +FF8C ; NFKC_SCF; 30D5 # Lo HALFWIDTH KATAKANA LETTER HU +FF8D ; NFKC_SCF; 30D8 # Lo HALFWIDTH KATAKANA LETTER HE +FF8E ; NFKC_SCF; 30DB # Lo HALFWIDTH KATAKANA LETTER HO +FF8F ; NFKC_SCF; 30DE # Lo HALFWIDTH KATAKANA LETTER MA +FF90 ; NFKC_SCF; 30DF # Lo HALFWIDTH KATAKANA LETTER MI +FF91 ; NFKC_SCF; 30E0 # Lo HALFWIDTH KATAKANA LETTER MU +FF92 ; NFKC_SCF; 30E1 # Lo HALFWIDTH KATAKANA LETTER ME +FF93 ; NFKC_SCF; 30E2 # Lo HALFWIDTH KATAKANA LETTER MO +FF94 ; NFKC_SCF; 30E4 # Lo HALFWIDTH KATAKANA LETTER YA +FF95 ; NFKC_SCF; 30E6 # Lo HALFWIDTH KATAKANA LETTER YU +FF96 ; NFKC_SCF; 30E8 # Lo HALFWIDTH KATAKANA LETTER YO +FF97 ; NFKC_SCF; 30E9 # Lo HALFWIDTH KATAKANA LETTER RA +FF98 ; NFKC_SCF; 30EA # Lo HALFWIDTH KATAKANA LETTER RI +FF99 ; NFKC_SCF; 30EB # Lo HALFWIDTH KATAKANA LETTER RU +FF9A ; NFKC_SCF; 30EC # Lo HALFWIDTH KATAKANA LETTER RE +FF9B ; NFKC_SCF; 30ED # Lo HALFWIDTH KATAKANA LETTER RO +FF9C ; NFKC_SCF; 30EF # Lo HALFWIDTH KATAKANA LETTER WA +FF9D ; NFKC_SCF; 30F3 # Lo HALFWIDTH KATAKANA LETTER N +FF9E ; NFKC_SCF; 3099 # Lm HALFWIDTH KATAKANA VOICED SOUND MARK +FF9F ; NFKC_SCF; 309A # Lm HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +FFA0 ; NFKC_SCF; # Lo HALFWIDTH HANGUL FILLER +FFA1 ; NFKC_SCF; 1100 # Lo HALFWIDTH HANGUL LETTER KIYEOK +FFA2 ; NFKC_SCF; 1101 # Lo HALFWIDTH HANGUL LETTER SSANGKIYEOK +FFA3 ; NFKC_SCF; 11AA # Lo HALFWIDTH HANGUL LETTER KIYEOK-SIOS +FFA4 ; NFKC_SCF; 1102 # Lo HALFWIDTH HANGUL LETTER NIEUN +FFA5 ; NFKC_SCF; 11AC # Lo HALFWIDTH HANGUL LETTER NIEUN-CIEUC +FFA6 ; NFKC_SCF; 11AD # Lo HALFWIDTH HANGUL LETTER NIEUN-HIEUH +FFA7 ; NFKC_SCF; 1103 # Lo HALFWIDTH HANGUL LETTER TIKEUT +FFA8 ; NFKC_SCF; 1104 # Lo HALFWIDTH HANGUL LETTER SSANGTIKEUT +FFA9 ; NFKC_SCF; 1105 # Lo HALFWIDTH HANGUL LETTER RIEUL +FFAA ; NFKC_SCF; 11B0 # Lo HALFWIDTH HANGUL LETTER RIEUL-KIYEOK +FFAB ; NFKC_SCF; 11B1 # Lo HALFWIDTH HANGUL LETTER RIEUL-MIEUM +FFAC ; NFKC_SCF; 11B2 # Lo HALFWIDTH HANGUL LETTER RIEUL-PIEUP +FFAD ; NFKC_SCF; 11B3 # Lo HALFWIDTH HANGUL LETTER RIEUL-SIOS +FFAE ; NFKC_SCF; 11B4 # Lo HALFWIDTH HANGUL LETTER RIEUL-THIEUTH +FFAF ; NFKC_SCF; 11B5 # Lo HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH +FFB0 ; NFKC_SCF; 111A # Lo HALFWIDTH HANGUL LETTER RIEUL-HIEUH +FFB1 ; NFKC_SCF; 1106 # Lo HALFWIDTH HANGUL LETTER MIEUM +FFB2 ; NFKC_SCF; 1107 # Lo HALFWIDTH HANGUL LETTER PIEUP +FFB3 ; NFKC_SCF; 1108 # Lo HALFWIDTH HANGUL LETTER SSANGPIEUP +FFB4 ; NFKC_SCF; 1121 # Lo HALFWIDTH HANGUL LETTER PIEUP-SIOS +FFB5 ; NFKC_SCF; 1109 # Lo HALFWIDTH HANGUL LETTER SIOS +FFB6 ; NFKC_SCF; 110A # Lo HALFWIDTH HANGUL LETTER SSANGSIOS +FFB7 ; NFKC_SCF; 110B # Lo HALFWIDTH HANGUL LETTER IEUNG +FFB8 ; NFKC_SCF; 110C # Lo HALFWIDTH HANGUL LETTER CIEUC +FFB9 ; NFKC_SCF; 110D # Lo HALFWIDTH HANGUL LETTER SSANGCIEUC +FFBA ; NFKC_SCF; 110E # Lo HALFWIDTH HANGUL LETTER CHIEUCH +FFBB ; NFKC_SCF; 110F # Lo HALFWIDTH HANGUL LETTER KHIEUKH +FFBC ; NFKC_SCF; 1110 # Lo HALFWIDTH HANGUL LETTER THIEUTH +FFBD ; NFKC_SCF; 1111 # Lo HALFWIDTH HANGUL LETTER PHIEUPH +FFBE ; NFKC_SCF; 1112 # Lo HALFWIDTH HANGUL LETTER HIEUH +FFC2 ; NFKC_SCF; 1161 # Lo HALFWIDTH HANGUL LETTER A +FFC3 ; NFKC_SCF; 1162 # Lo HALFWIDTH HANGUL LETTER AE +FFC4 ; NFKC_SCF; 1163 # Lo HALFWIDTH HANGUL LETTER YA +FFC5 ; NFKC_SCF; 1164 # Lo HALFWIDTH HANGUL LETTER YAE +FFC6 ; NFKC_SCF; 1165 # Lo HALFWIDTH HANGUL LETTER EO +FFC7 ; NFKC_SCF; 1166 # Lo HALFWIDTH HANGUL LETTER E +FFCA ; NFKC_SCF; 1167 # Lo HALFWIDTH HANGUL LETTER YEO +FFCB ; NFKC_SCF; 1168 # Lo HALFWIDTH HANGUL LETTER YE +FFCC ; NFKC_SCF; 1169 # Lo HALFWIDTH HANGUL LETTER O +FFCD ; NFKC_SCF; 116A # Lo HALFWIDTH HANGUL LETTER WA +FFCE ; NFKC_SCF; 116B # Lo HALFWIDTH HANGUL LETTER WAE +FFCF ; NFKC_SCF; 116C # Lo HALFWIDTH HANGUL LETTER OE +FFD2 ; NFKC_SCF; 116D # Lo HALFWIDTH HANGUL LETTER YO +FFD3 ; NFKC_SCF; 116E # Lo HALFWIDTH HANGUL LETTER U +FFD4 ; NFKC_SCF; 116F # Lo HALFWIDTH HANGUL LETTER WEO +FFD5 ; NFKC_SCF; 1170 # Lo HALFWIDTH HANGUL LETTER WE +FFD6 ; NFKC_SCF; 1171 # Lo HALFWIDTH HANGUL LETTER WI +FFD7 ; NFKC_SCF; 1172 # Lo HALFWIDTH HANGUL LETTER YU +FFDA ; NFKC_SCF; 1173 # Lo HALFWIDTH HANGUL LETTER EU +FFDB ; NFKC_SCF; 1174 # Lo HALFWIDTH HANGUL LETTER YI +FFDC ; NFKC_SCF; 1175 # Lo HALFWIDTH HANGUL LETTER I +FFE0 ; NFKC_SCF; 00A2 # Sc FULLWIDTH CENT SIGN +FFE1 ; NFKC_SCF; 00A3 # Sc FULLWIDTH POUND SIGN +FFE2 ; NFKC_SCF; 00AC # Sm FULLWIDTH NOT SIGN +FFE3 ; NFKC_SCF; 0020 0304 # Sk FULLWIDTH MACRON +FFE4 ; NFKC_SCF; 00A6 # So FULLWIDTH BROKEN BAR +FFE5 ; NFKC_SCF; 00A5 # Sc FULLWIDTH YEN SIGN +FFE6 ; NFKC_SCF; 20A9 # Sc FULLWIDTH WON SIGN +FFE8 ; NFKC_SCF; 2502 # So HALFWIDTH FORMS LIGHT VERTICAL +FFE9 ; NFKC_SCF; 2190 # Sm HALFWIDTH LEFTWARDS ARROW +FFEA ; NFKC_SCF; 2191 # Sm HALFWIDTH UPWARDS ARROW +FFEB ; NFKC_SCF; 2192 # Sm HALFWIDTH RIGHTWARDS ARROW +FFEC ; NFKC_SCF; 2193 # Sm HALFWIDTH DOWNWARDS ARROW +FFED ; NFKC_SCF; 25A0 # So HALFWIDTH BLACK SQUARE +FFEE ; NFKC_SCF; 25CB # So HALFWIDTH WHITE CIRCLE +FFF0..FFF8 ; NFKC_SCF; # Cn [9] .. +10400 ; NFKC_SCF; 10428 # L& DESERET CAPITAL LETTER LONG I +10401 ; NFKC_SCF; 10429 # L& DESERET CAPITAL LETTER LONG E +10402 ; NFKC_SCF; 1042A # L& DESERET CAPITAL LETTER LONG A +10403 ; NFKC_SCF; 1042B # L& DESERET CAPITAL LETTER LONG AH +10404 ; NFKC_SCF; 1042C # L& DESERET CAPITAL LETTER LONG O +10405 ; NFKC_SCF; 1042D # L& DESERET CAPITAL LETTER LONG OO +10406 ; NFKC_SCF; 1042E # L& DESERET CAPITAL LETTER SHORT I +10407 ; NFKC_SCF; 1042F # L& DESERET CAPITAL LETTER SHORT E +10408 ; NFKC_SCF; 10430 # L& DESERET CAPITAL LETTER SHORT A +10409 ; NFKC_SCF; 10431 # L& DESERET CAPITAL LETTER SHORT AH +1040A ; NFKC_SCF; 10432 # L& DESERET CAPITAL LETTER SHORT O +1040B ; NFKC_SCF; 10433 # L& DESERET CAPITAL LETTER SHORT OO +1040C ; NFKC_SCF; 10434 # L& DESERET CAPITAL LETTER AY +1040D ; NFKC_SCF; 10435 # L& DESERET CAPITAL LETTER OW +1040E ; NFKC_SCF; 10436 # L& DESERET CAPITAL LETTER WU +1040F ; NFKC_SCF; 10437 # L& DESERET CAPITAL LETTER YEE +10410 ; NFKC_SCF; 10438 # L& DESERET CAPITAL LETTER H +10411 ; NFKC_SCF; 10439 # L& DESERET CAPITAL LETTER PEE +10412 ; NFKC_SCF; 1043A # L& DESERET CAPITAL LETTER BEE +10413 ; NFKC_SCF; 1043B # L& DESERET CAPITAL LETTER TEE +10414 ; NFKC_SCF; 1043C # L& DESERET CAPITAL LETTER DEE +10415 ; NFKC_SCF; 1043D # L& DESERET CAPITAL LETTER CHEE +10416 ; NFKC_SCF; 1043E # L& DESERET CAPITAL LETTER JEE +10417 ; NFKC_SCF; 1043F # L& DESERET CAPITAL LETTER KAY +10418 ; NFKC_SCF; 10440 # L& DESERET CAPITAL LETTER GAY +10419 ; NFKC_SCF; 10441 # L& DESERET CAPITAL LETTER EF +1041A ; NFKC_SCF; 10442 # L& DESERET CAPITAL LETTER VEE +1041B ; NFKC_SCF; 10443 # L& DESERET CAPITAL LETTER ETH +1041C ; NFKC_SCF; 10444 # L& DESERET CAPITAL LETTER THEE +1041D ; NFKC_SCF; 10445 # L& DESERET CAPITAL LETTER ES +1041E ; NFKC_SCF; 10446 # L& DESERET CAPITAL LETTER ZEE +1041F ; NFKC_SCF; 10447 # L& DESERET CAPITAL LETTER ESH +10420 ; NFKC_SCF; 10448 # L& DESERET CAPITAL LETTER ZHEE +10421 ; NFKC_SCF; 10449 # L& DESERET CAPITAL LETTER ER +10422 ; NFKC_SCF; 1044A # L& DESERET CAPITAL LETTER EL +10423 ; NFKC_SCF; 1044B # L& DESERET CAPITAL LETTER EM +10424 ; NFKC_SCF; 1044C # L& DESERET CAPITAL LETTER EN +10425 ; NFKC_SCF; 1044D # L& DESERET CAPITAL LETTER ENG +10426 ; NFKC_SCF; 1044E # L& DESERET CAPITAL LETTER OI +10427 ; NFKC_SCF; 1044F # L& DESERET CAPITAL LETTER EW +104B0 ; NFKC_SCF; 104D8 # L& OSAGE CAPITAL LETTER A +104B1 ; NFKC_SCF; 104D9 # L& OSAGE CAPITAL LETTER AI +104B2 ; NFKC_SCF; 104DA # L& OSAGE CAPITAL LETTER AIN +104B3 ; NFKC_SCF; 104DB # L& OSAGE CAPITAL LETTER AH +104B4 ; NFKC_SCF; 104DC # L& OSAGE CAPITAL LETTER BRA +104B5 ; NFKC_SCF; 104DD # L& OSAGE CAPITAL LETTER CHA +104B6 ; NFKC_SCF; 104DE # L& OSAGE CAPITAL LETTER EHCHA +104B7 ; NFKC_SCF; 104DF # L& OSAGE CAPITAL LETTER E +104B8 ; NFKC_SCF; 104E0 # L& OSAGE CAPITAL LETTER EIN +104B9 ; NFKC_SCF; 104E1 # L& OSAGE CAPITAL LETTER HA +104BA ; NFKC_SCF; 104E2 # L& OSAGE CAPITAL LETTER HYA +104BB ; NFKC_SCF; 104E3 # L& OSAGE CAPITAL LETTER I +104BC ; NFKC_SCF; 104E4 # L& OSAGE CAPITAL LETTER KA +104BD ; NFKC_SCF; 104E5 # L& OSAGE CAPITAL LETTER EHKA +104BE ; NFKC_SCF; 104E6 # L& OSAGE CAPITAL LETTER KYA +104BF ; NFKC_SCF; 104E7 # L& OSAGE CAPITAL LETTER LA +104C0 ; NFKC_SCF; 104E8 # L& OSAGE CAPITAL LETTER MA +104C1 ; NFKC_SCF; 104E9 # L& OSAGE CAPITAL LETTER NA +104C2 ; NFKC_SCF; 104EA # L& OSAGE CAPITAL LETTER O +104C3 ; NFKC_SCF; 104EB # L& OSAGE CAPITAL LETTER OIN +104C4 ; NFKC_SCF; 104EC # L& OSAGE CAPITAL LETTER PA +104C5 ; NFKC_SCF; 104ED # L& OSAGE CAPITAL LETTER EHPA +104C6 ; NFKC_SCF; 104EE # L& OSAGE CAPITAL LETTER SA +104C7 ; NFKC_SCF; 104EF # L& OSAGE CAPITAL LETTER SHA +104C8 ; NFKC_SCF; 104F0 # L& OSAGE CAPITAL LETTER TA +104C9 ; NFKC_SCF; 104F1 # L& OSAGE CAPITAL LETTER EHTA +104CA ; NFKC_SCF; 104F2 # L& OSAGE CAPITAL LETTER TSA +104CB ; NFKC_SCF; 104F3 # L& OSAGE CAPITAL LETTER EHTSA +104CC ; NFKC_SCF; 104F4 # L& OSAGE CAPITAL LETTER TSHA +104CD ; NFKC_SCF; 104F5 # L& OSAGE CAPITAL LETTER DHA +104CE ; NFKC_SCF; 104F6 # L& OSAGE CAPITAL LETTER U +104CF ; NFKC_SCF; 104F7 # L& OSAGE CAPITAL LETTER WA +104D0 ; NFKC_SCF; 104F8 # L& OSAGE CAPITAL LETTER KHA +104D1 ; NFKC_SCF; 104F9 # L& OSAGE CAPITAL LETTER GHA +104D2 ; NFKC_SCF; 104FA # L& OSAGE CAPITAL LETTER ZA +104D3 ; NFKC_SCF; 104FB # L& OSAGE CAPITAL LETTER ZHA +10570 ; NFKC_SCF; 10597 # L& VITHKUQI CAPITAL LETTER A +10571 ; NFKC_SCF; 10598 # L& VITHKUQI CAPITAL LETTER BBE +10572 ; NFKC_SCF; 10599 # L& VITHKUQI CAPITAL LETTER BE +10573 ; NFKC_SCF; 1059A # L& VITHKUQI CAPITAL LETTER CE +10574 ; NFKC_SCF; 1059B # L& VITHKUQI CAPITAL LETTER CHE +10575 ; NFKC_SCF; 1059C # L& VITHKUQI CAPITAL LETTER DE +10576 ; NFKC_SCF; 1059D # L& VITHKUQI CAPITAL LETTER DHE +10577 ; NFKC_SCF; 1059E # L& VITHKUQI CAPITAL LETTER EI +10578 ; NFKC_SCF; 1059F # L& VITHKUQI CAPITAL LETTER E +10579 ; NFKC_SCF; 105A0 # L& VITHKUQI CAPITAL LETTER FE +1057A ; NFKC_SCF; 105A1 # L& VITHKUQI CAPITAL LETTER GA +1057C ; NFKC_SCF; 105A3 # L& VITHKUQI CAPITAL LETTER HA +1057D ; NFKC_SCF; 105A4 # L& VITHKUQI CAPITAL LETTER HHA +1057E ; NFKC_SCF; 105A5 # L& VITHKUQI CAPITAL LETTER I +1057F ; NFKC_SCF; 105A6 # L& VITHKUQI CAPITAL LETTER IJE +10580 ; NFKC_SCF; 105A7 # L& VITHKUQI CAPITAL LETTER JE +10581 ; NFKC_SCF; 105A8 # L& VITHKUQI CAPITAL LETTER KA +10582 ; NFKC_SCF; 105A9 # L& VITHKUQI CAPITAL LETTER LA +10583 ; NFKC_SCF; 105AA # L& VITHKUQI CAPITAL LETTER LLA +10584 ; NFKC_SCF; 105AB # L& VITHKUQI CAPITAL LETTER ME +10585 ; NFKC_SCF; 105AC # L& VITHKUQI CAPITAL LETTER NE +10586 ; NFKC_SCF; 105AD # L& VITHKUQI CAPITAL LETTER NJE +10587 ; NFKC_SCF; 105AE # L& VITHKUQI CAPITAL LETTER O +10588 ; NFKC_SCF; 105AF # L& VITHKUQI CAPITAL LETTER PE +10589 ; NFKC_SCF; 105B0 # L& VITHKUQI CAPITAL LETTER QA +1058A ; NFKC_SCF; 105B1 # L& VITHKUQI CAPITAL LETTER RE +1058C ; NFKC_SCF; 105B3 # L& VITHKUQI CAPITAL LETTER SE +1058D ; NFKC_SCF; 105B4 # L& VITHKUQI CAPITAL LETTER SHE +1058E ; NFKC_SCF; 105B5 # L& VITHKUQI CAPITAL LETTER TE +1058F ; NFKC_SCF; 105B6 # L& VITHKUQI CAPITAL LETTER THE +10590 ; NFKC_SCF; 105B7 # L& VITHKUQI CAPITAL LETTER U +10591 ; NFKC_SCF; 105B8 # L& VITHKUQI CAPITAL LETTER VE +10592 ; NFKC_SCF; 105B9 # L& VITHKUQI CAPITAL LETTER XE +10594 ; NFKC_SCF; 105BB # L& VITHKUQI CAPITAL LETTER Y +10595 ; NFKC_SCF; 105BC # L& VITHKUQI CAPITAL LETTER ZE +10781 ; NFKC_SCF; 02D0 # Lm MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON +10782 ; NFKC_SCF; 02D1 # Lm MODIFIER LETTER SUPERSCRIPT HALF TRIANGULAR COLON +10783 ; NFKC_SCF; 00E6 # Lm MODIFIER LETTER SMALL AE +10784 ; NFKC_SCF; 0299 # Lm MODIFIER LETTER SMALL CAPITAL B +10785 ; NFKC_SCF; 0253 # Lm MODIFIER LETTER SMALL B WITH HOOK +10787 ; NFKC_SCF; 02A3 # Lm MODIFIER LETTER SMALL DZ DIGRAPH +10788 ; NFKC_SCF; AB66 # Lm MODIFIER LETTER SMALL DZ DIGRAPH WITH RETROFLEX HOOK +10789 ; NFKC_SCF; 02A5 # Lm MODIFIER LETTER SMALL DZ DIGRAPH WITH CURL +1078A ; NFKC_SCF; 02A4 # Lm MODIFIER LETTER SMALL DEZH DIGRAPH +1078B ; NFKC_SCF; 0256 # Lm MODIFIER LETTER SMALL D WITH TAIL +1078C ; NFKC_SCF; 0257 # Lm MODIFIER LETTER SMALL D WITH HOOK +1078D ; NFKC_SCF; 1D91 # Lm MODIFIER LETTER SMALL D WITH HOOK AND TAIL +1078E ; NFKC_SCF; 0258 # Lm MODIFIER LETTER SMALL REVERSED E +1078F ; NFKC_SCF; 025E # Lm MODIFIER LETTER SMALL CLOSED REVERSED OPEN E +10790 ; NFKC_SCF; 02A9 # Lm MODIFIER LETTER SMALL FENG DIGRAPH +10791 ; NFKC_SCF; 0264 # Lm MODIFIER LETTER SMALL RAMS HORN +10792 ; NFKC_SCF; 0262 # Lm MODIFIER LETTER SMALL CAPITAL G +10793 ; NFKC_SCF; 0260 # Lm MODIFIER LETTER SMALL G WITH HOOK +10794 ; NFKC_SCF; 029B # Lm MODIFIER LETTER SMALL CAPITAL G WITH HOOK +10795 ; NFKC_SCF; 0127 # Lm MODIFIER LETTER SMALL H WITH STROKE +10796 ; NFKC_SCF; 029C # Lm MODIFIER LETTER SMALL CAPITAL H +10797 ; NFKC_SCF; 0267 # Lm MODIFIER LETTER SMALL HENG WITH HOOK +10798 ; NFKC_SCF; 0284 # Lm MODIFIER LETTER SMALL DOTLESS J WITH STROKE AND HOOK +10799 ; NFKC_SCF; 02AA # Lm MODIFIER LETTER SMALL LS DIGRAPH +1079A ; NFKC_SCF; 02AB # Lm MODIFIER LETTER SMALL LZ DIGRAPH +1079B ; NFKC_SCF; 026C # Lm MODIFIER LETTER SMALL L WITH BELT +1079C ; NFKC_SCF; 1DF04 # Lm MODIFIER LETTER SMALL CAPITAL L WITH BELT +1079D ; NFKC_SCF; A78E # Lm MODIFIER LETTER SMALL L WITH RETROFLEX HOOK AND BELT +1079E ; NFKC_SCF; 026E # Lm MODIFIER LETTER SMALL LEZH +1079F ; NFKC_SCF; 1DF05 # Lm MODIFIER LETTER SMALL LEZH WITH RETROFLEX HOOK +107A0 ; NFKC_SCF; 028E # Lm MODIFIER LETTER SMALL TURNED Y +107A1 ; NFKC_SCF; 1DF06 # Lm MODIFIER LETTER SMALL TURNED Y WITH BELT +107A2 ; NFKC_SCF; 00F8 # Lm MODIFIER LETTER SMALL O WITH STROKE +107A3 ; NFKC_SCF; 0276 # Lm MODIFIER LETTER SMALL CAPITAL OE +107A4 ; NFKC_SCF; 0277 # Lm MODIFIER LETTER SMALL CLOSED OMEGA +107A5 ; NFKC_SCF; 0071 # Lm MODIFIER LETTER SMALL Q +107A6 ; NFKC_SCF; 027A # Lm MODIFIER LETTER SMALL TURNED R WITH LONG LEG +107A7 ; NFKC_SCF; 1DF08 # Lm MODIFIER LETTER SMALL TURNED R WITH LONG LEG AND RETROFLEX HOOK +107A8 ; NFKC_SCF; 027D # Lm MODIFIER LETTER SMALL R WITH TAIL +107A9 ; NFKC_SCF; 027E # Lm MODIFIER LETTER SMALL R WITH FISHHOOK +107AA ; NFKC_SCF; 0280 # Lm MODIFIER LETTER SMALL CAPITAL R +107AB ; NFKC_SCF; 02A8 # Lm MODIFIER LETTER SMALL TC DIGRAPH WITH CURL +107AC ; NFKC_SCF; 02A6 # Lm MODIFIER LETTER SMALL TS DIGRAPH +107AD ; NFKC_SCF; AB67 # Lm MODIFIER LETTER SMALL TS DIGRAPH WITH RETROFLEX HOOK +107AE ; NFKC_SCF; 02A7 # Lm MODIFIER LETTER SMALL TESH DIGRAPH +107AF ; NFKC_SCF; 0288 # Lm MODIFIER LETTER SMALL T WITH RETROFLEX HOOK +107B0 ; NFKC_SCF; 2C71 # Lm MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2 ; NFKC_SCF; 028F # Lm MODIFIER LETTER SMALL CAPITAL Y +107B3 ; NFKC_SCF; 02A1 # Lm MODIFIER LETTER GLOTTAL STOP WITH STROKE +107B4 ; NFKC_SCF; 02A2 # Lm MODIFIER LETTER REVERSED GLOTTAL STOP WITH STROKE +107B5 ; NFKC_SCF; 0298 # Lm MODIFIER LETTER BILABIAL CLICK +107B6 ; NFKC_SCF; 01C0 # Lm MODIFIER LETTER DENTAL CLICK +107B7 ; NFKC_SCF; 01C1 # Lm MODIFIER LETTER LATERAL CLICK +107B8 ; NFKC_SCF; 01C2 # Lm MODIFIER LETTER ALVEOLAR CLICK +107B9 ; NFKC_SCF; 1DF0A # Lm MODIFIER LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +107BA ; NFKC_SCF; 1DF1E # Lm MODIFIER LETTER SMALL S WITH CURL +10C80 ; NFKC_SCF; 10CC0 # L& OLD HUNGARIAN CAPITAL LETTER A +10C81 ; NFKC_SCF; 10CC1 # L& OLD HUNGARIAN CAPITAL LETTER AA +10C82 ; NFKC_SCF; 10CC2 # L& OLD HUNGARIAN CAPITAL LETTER EB +10C83 ; NFKC_SCF; 10CC3 # L& OLD HUNGARIAN CAPITAL LETTER AMB +10C84 ; NFKC_SCF; 10CC4 # L& OLD HUNGARIAN CAPITAL LETTER EC +10C85 ; NFKC_SCF; 10CC5 # L& OLD HUNGARIAN CAPITAL LETTER ENC +10C86 ; NFKC_SCF; 10CC6 # L& OLD HUNGARIAN CAPITAL LETTER ECS +10C87 ; NFKC_SCF; 10CC7 # L& OLD HUNGARIAN CAPITAL LETTER ED +10C88 ; NFKC_SCF; 10CC8 # L& OLD HUNGARIAN CAPITAL LETTER AND +10C89 ; NFKC_SCF; 10CC9 # L& OLD HUNGARIAN CAPITAL LETTER E +10C8A ; NFKC_SCF; 10CCA # L& OLD HUNGARIAN CAPITAL LETTER CLOSE E +10C8B ; NFKC_SCF; 10CCB # L& OLD HUNGARIAN CAPITAL LETTER EE +10C8C ; NFKC_SCF; 10CCC # L& OLD HUNGARIAN CAPITAL LETTER EF +10C8D ; NFKC_SCF; 10CCD # L& OLD HUNGARIAN CAPITAL LETTER EG +10C8E ; NFKC_SCF; 10CCE # L& OLD HUNGARIAN CAPITAL LETTER EGY +10C8F ; NFKC_SCF; 10CCF # L& OLD HUNGARIAN CAPITAL LETTER EH +10C90 ; NFKC_SCF; 10CD0 # L& OLD HUNGARIAN CAPITAL LETTER I +10C91 ; NFKC_SCF; 10CD1 # L& OLD HUNGARIAN CAPITAL LETTER II +10C92 ; NFKC_SCF; 10CD2 # L& OLD HUNGARIAN CAPITAL LETTER EJ +10C93 ; NFKC_SCF; 10CD3 # L& OLD HUNGARIAN CAPITAL LETTER EK +10C94 ; NFKC_SCF; 10CD4 # L& OLD HUNGARIAN CAPITAL LETTER AK +10C95 ; NFKC_SCF; 10CD5 # L& OLD HUNGARIAN CAPITAL LETTER UNK +10C96 ; NFKC_SCF; 10CD6 # L& OLD HUNGARIAN CAPITAL LETTER EL +10C97 ; NFKC_SCF; 10CD7 # L& OLD HUNGARIAN CAPITAL LETTER ELY +10C98 ; NFKC_SCF; 10CD8 # L& OLD HUNGARIAN CAPITAL LETTER EM +10C99 ; NFKC_SCF; 10CD9 # L& OLD HUNGARIAN CAPITAL LETTER EN +10C9A ; NFKC_SCF; 10CDA # L& OLD HUNGARIAN CAPITAL LETTER ENY +10C9B ; NFKC_SCF; 10CDB # L& OLD HUNGARIAN CAPITAL LETTER O +10C9C ; NFKC_SCF; 10CDC # L& OLD HUNGARIAN CAPITAL LETTER OO +10C9D ; NFKC_SCF; 10CDD # L& OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE +10C9E ; NFKC_SCF; 10CDE # L& OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE +10C9F ; NFKC_SCF; 10CDF # L& OLD HUNGARIAN CAPITAL LETTER OEE +10CA0 ; NFKC_SCF; 10CE0 # L& OLD HUNGARIAN CAPITAL LETTER EP +10CA1 ; NFKC_SCF; 10CE1 # L& OLD HUNGARIAN CAPITAL LETTER EMP +10CA2 ; NFKC_SCF; 10CE2 # L& OLD HUNGARIAN CAPITAL LETTER ER +10CA3 ; NFKC_SCF; 10CE3 # L& OLD HUNGARIAN CAPITAL LETTER SHORT ER +10CA4 ; NFKC_SCF; 10CE4 # L& OLD HUNGARIAN CAPITAL LETTER ES +10CA5 ; NFKC_SCF; 10CE5 # L& OLD HUNGARIAN CAPITAL LETTER ESZ +10CA6 ; NFKC_SCF; 10CE6 # L& OLD HUNGARIAN CAPITAL LETTER ET +10CA7 ; NFKC_SCF; 10CE7 # L& OLD HUNGARIAN CAPITAL LETTER ENT +10CA8 ; NFKC_SCF; 10CE8 # L& OLD HUNGARIAN CAPITAL LETTER ETY +10CA9 ; NFKC_SCF; 10CE9 # L& OLD HUNGARIAN CAPITAL LETTER ECH +10CAA ; NFKC_SCF; 10CEA # L& OLD HUNGARIAN CAPITAL LETTER U +10CAB ; NFKC_SCF; 10CEB # L& OLD HUNGARIAN CAPITAL LETTER UU +10CAC ; NFKC_SCF; 10CEC # L& OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE +10CAD ; NFKC_SCF; 10CED # L& OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE +10CAE ; NFKC_SCF; 10CEE # L& OLD HUNGARIAN CAPITAL LETTER EV +10CAF ; NFKC_SCF; 10CEF # L& OLD HUNGARIAN CAPITAL LETTER EZ +10CB0 ; NFKC_SCF; 10CF0 # L& OLD HUNGARIAN CAPITAL LETTER EZS +10CB1 ; NFKC_SCF; 10CF1 # L& OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN +10CB2 ; NFKC_SCF; 10CF2 # L& OLD HUNGARIAN CAPITAL LETTER US +118A0 ; NFKC_SCF; 118C0 # L& WARANG CITI CAPITAL LETTER NGAA +118A1 ; NFKC_SCF; 118C1 # L& WARANG CITI CAPITAL LETTER A +118A2 ; NFKC_SCF; 118C2 # L& WARANG CITI CAPITAL LETTER WI +118A3 ; NFKC_SCF; 118C3 # L& WARANG CITI CAPITAL LETTER YU +118A4 ; NFKC_SCF; 118C4 # L& WARANG CITI CAPITAL LETTER YA +118A5 ; NFKC_SCF; 118C5 # L& WARANG CITI CAPITAL LETTER YO +118A6 ; NFKC_SCF; 118C6 # L& WARANG CITI CAPITAL LETTER II +118A7 ; NFKC_SCF; 118C7 # L& WARANG CITI CAPITAL LETTER UU +118A8 ; NFKC_SCF; 118C8 # L& WARANG CITI CAPITAL LETTER E +118A9 ; NFKC_SCF; 118C9 # L& WARANG CITI CAPITAL LETTER O +118AA ; NFKC_SCF; 118CA # L& WARANG CITI CAPITAL LETTER ANG +118AB ; NFKC_SCF; 118CB # L& WARANG CITI CAPITAL LETTER GA +118AC ; NFKC_SCF; 118CC # L& WARANG CITI CAPITAL LETTER KO +118AD ; NFKC_SCF; 118CD # L& WARANG CITI CAPITAL LETTER ENY +118AE ; NFKC_SCF; 118CE # L& WARANG CITI CAPITAL LETTER YUJ +118AF ; NFKC_SCF; 118CF # L& WARANG CITI CAPITAL LETTER UC +118B0 ; NFKC_SCF; 118D0 # L& WARANG CITI CAPITAL LETTER ENN +118B1 ; NFKC_SCF; 118D1 # L& WARANG CITI CAPITAL LETTER ODD +118B2 ; NFKC_SCF; 118D2 # L& WARANG CITI CAPITAL LETTER TTE +118B3 ; NFKC_SCF; 118D3 # L& WARANG CITI CAPITAL LETTER NUNG +118B4 ; NFKC_SCF; 118D4 # L& WARANG CITI CAPITAL LETTER DA +118B5 ; NFKC_SCF; 118D5 # L& WARANG CITI CAPITAL LETTER AT +118B6 ; NFKC_SCF; 118D6 # L& WARANG CITI CAPITAL LETTER AM +118B7 ; NFKC_SCF; 118D7 # L& WARANG CITI CAPITAL LETTER BU +118B8 ; NFKC_SCF; 118D8 # L& WARANG CITI CAPITAL LETTER PU +118B9 ; NFKC_SCF; 118D9 # L& WARANG CITI CAPITAL LETTER HIYO +118BA ; NFKC_SCF; 118DA # L& WARANG CITI CAPITAL LETTER HOLO +118BB ; NFKC_SCF; 118DB # L& WARANG CITI CAPITAL LETTER HORR +118BC ; NFKC_SCF; 118DC # L& WARANG CITI CAPITAL LETTER HAR +118BD ; NFKC_SCF; 118DD # L& WARANG CITI CAPITAL LETTER SSUU +118BE ; NFKC_SCF; 118DE # L& WARANG CITI CAPITAL LETTER SII +118BF ; NFKC_SCF; 118DF # L& WARANG CITI CAPITAL LETTER VIYO +16E40 ; NFKC_SCF; 16E60 # L& MEDEFAIDRIN CAPITAL LETTER M +16E41 ; NFKC_SCF; 16E61 # L& MEDEFAIDRIN CAPITAL LETTER S +16E42 ; NFKC_SCF; 16E62 # L& MEDEFAIDRIN CAPITAL LETTER V +16E43 ; NFKC_SCF; 16E63 # L& MEDEFAIDRIN CAPITAL LETTER W +16E44 ; NFKC_SCF; 16E64 # L& MEDEFAIDRIN CAPITAL LETTER ATIU +16E45 ; NFKC_SCF; 16E65 # L& MEDEFAIDRIN CAPITAL LETTER Z +16E46 ; NFKC_SCF; 16E66 # L& MEDEFAIDRIN CAPITAL LETTER KP +16E47 ; NFKC_SCF; 16E67 # L& MEDEFAIDRIN CAPITAL LETTER P +16E48 ; NFKC_SCF; 16E68 # L& MEDEFAIDRIN CAPITAL LETTER T +16E49 ; NFKC_SCF; 16E69 # L& MEDEFAIDRIN CAPITAL LETTER G +16E4A ; NFKC_SCF; 16E6A # L& MEDEFAIDRIN CAPITAL LETTER F +16E4B ; NFKC_SCF; 16E6B # L& MEDEFAIDRIN CAPITAL LETTER I +16E4C ; NFKC_SCF; 16E6C # L& MEDEFAIDRIN CAPITAL LETTER K +16E4D ; NFKC_SCF; 16E6D # L& MEDEFAIDRIN CAPITAL LETTER A +16E4E ; NFKC_SCF; 16E6E # L& MEDEFAIDRIN CAPITAL LETTER J +16E4F ; NFKC_SCF; 16E6F # L& MEDEFAIDRIN CAPITAL LETTER E +16E50 ; NFKC_SCF; 16E70 # L& MEDEFAIDRIN CAPITAL LETTER B +16E51 ; NFKC_SCF; 16E71 # L& MEDEFAIDRIN CAPITAL LETTER C +16E52 ; NFKC_SCF; 16E72 # L& MEDEFAIDRIN CAPITAL LETTER U +16E53 ; NFKC_SCF; 16E73 # L& MEDEFAIDRIN CAPITAL LETTER YU +16E54 ; NFKC_SCF; 16E74 # L& MEDEFAIDRIN CAPITAL LETTER L +16E55 ; NFKC_SCF; 16E75 # L& MEDEFAIDRIN CAPITAL LETTER Q +16E56 ; NFKC_SCF; 16E76 # L& MEDEFAIDRIN CAPITAL LETTER HP +16E57 ; NFKC_SCF; 16E77 # L& MEDEFAIDRIN CAPITAL LETTER NY +16E58 ; NFKC_SCF; 16E78 # L& MEDEFAIDRIN CAPITAL LETTER X +16E59 ; NFKC_SCF; 16E79 # L& MEDEFAIDRIN CAPITAL LETTER D +16E5A ; NFKC_SCF; 16E7A # L& MEDEFAIDRIN CAPITAL LETTER OE +16E5B ; NFKC_SCF; 16E7B # L& MEDEFAIDRIN CAPITAL LETTER N +16E5C ; NFKC_SCF; 16E7C # L& MEDEFAIDRIN CAPITAL LETTER R +16E5D ; NFKC_SCF; 16E7D # L& MEDEFAIDRIN CAPITAL LETTER O +16E5E ; NFKC_SCF; 16E7E # L& MEDEFAIDRIN CAPITAL LETTER AI +16E5F ; NFKC_SCF; 16E7F # L& MEDEFAIDRIN CAPITAL LETTER Y +1BCA0..1BCA3 ; NFKC_SCF; # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP +1D15E ; NFKC_SCF; 1D157 1D165 # So MUSICAL SYMBOL HALF NOTE +1D15F ; NFKC_SCF; 1D158 1D165 # So MUSICAL SYMBOL QUARTER NOTE +1D160 ; NFKC_SCF; 1D158 1D165 1D16E #So MUSICAL SYMBOL EIGHTH NOTE +1D161 ; NFKC_SCF; 1D158 1D165 1D16F #So MUSICAL SYMBOL SIXTEENTH NOTE +1D162 ; NFKC_SCF; 1D158 1D165 1D170 #So MUSICAL SYMBOL THIRTY-SECOND NOTE +1D163 ; NFKC_SCF; 1D158 1D165 1D171 #So MUSICAL SYMBOL SIXTY-FOURTH NOTE +1D164 ; NFKC_SCF; 1D158 1D165 1D172 #So MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE +1D173..1D17A ; NFKC_SCF; # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE +1D1BB ; NFKC_SCF; 1D1B9 1D165 # So MUSICAL SYMBOL MINIMA +1D1BC ; NFKC_SCF; 1D1BA 1D165 # So MUSICAL SYMBOL MINIMA BLACK +1D1BD ; NFKC_SCF; 1D1B9 1D165 1D16E #So MUSICAL SYMBOL SEMIMINIMA WHITE +1D1BE ; NFKC_SCF; 1D1BA 1D165 1D16E #So MUSICAL SYMBOL SEMIMINIMA BLACK +1D1BF ; NFKC_SCF; 1D1B9 1D165 1D16F #So MUSICAL SYMBOL FUSA WHITE +1D1C0 ; NFKC_SCF; 1D1BA 1D165 1D16F #So MUSICAL SYMBOL FUSA BLACK +1D400 ; NFKC_SCF; 0061 # L& MATHEMATICAL BOLD CAPITAL A +1D401 ; NFKC_SCF; 0062 # L& MATHEMATICAL BOLD CAPITAL B +1D402 ; NFKC_SCF; 0063 # L& MATHEMATICAL BOLD CAPITAL C +1D403 ; NFKC_SCF; 0064 # L& MATHEMATICAL BOLD CAPITAL D +1D404 ; NFKC_SCF; 0065 # L& MATHEMATICAL BOLD CAPITAL E +1D405 ; NFKC_SCF; 0066 # L& MATHEMATICAL BOLD CAPITAL F +1D406 ; NFKC_SCF; 0067 # L& MATHEMATICAL BOLD CAPITAL G +1D407 ; NFKC_SCF; 0068 # L& MATHEMATICAL BOLD CAPITAL H +1D408 ; NFKC_SCF; 0069 # L& MATHEMATICAL BOLD CAPITAL I +1D409 ; NFKC_SCF; 006A # L& MATHEMATICAL BOLD CAPITAL J +1D40A ; NFKC_SCF; 006B # L& MATHEMATICAL BOLD CAPITAL K +1D40B ; NFKC_SCF; 006C # L& MATHEMATICAL BOLD CAPITAL L +1D40C ; NFKC_SCF; 006D # L& MATHEMATICAL BOLD CAPITAL M +1D40D ; NFKC_SCF; 006E # L& MATHEMATICAL BOLD CAPITAL N +1D40E ; NFKC_SCF; 006F # L& MATHEMATICAL BOLD CAPITAL O +1D40F ; NFKC_SCF; 0070 # L& MATHEMATICAL BOLD CAPITAL P +1D410 ; NFKC_SCF; 0071 # L& MATHEMATICAL BOLD CAPITAL Q +1D411 ; NFKC_SCF; 0072 # L& MATHEMATICAL BOLD CAPITAL R +1D412 ; NFKC_SCF; 0073 # L& MATHEMATICAL BOLD CAPITAL S +1D413 ; NFKC_SCF; 0074 # L& MATHEMATICAL BOLD CAPITAL T +1D414 ; NFKC_SCF; 0075 # L& MATHEMATICAL BOLD CAPITAL U +1D415 ; NFKC_SCF; 0076 # L& MATHEMATICAL BOLD CAPITAL V +1D416 ; NFKC_SCF; 0077 # L& MATHEMATICAL BOLD CAPITAL W +1D417 ; NFKC_SCF; 0078 # L& MATHEMATICAL BOLD CAPITAL X +1D418 ; NFKC_SCF; 0079 # L& MATHEMATICAL BOLD CAPITAL Y +1D419 ; NFKC_SCF; 007A # L& MATHEMATICAL BOLD CAPITAL Z +1D41A ; NFKC_SCF; 0061 # L& MATHEMATICAL BOLD SMALL A +1D41B ; NFKC_SCF; 0062 # L& MATHEMATICAL BOLD SMALL B +1D41C ; NFKC_SCF; 0063 # L& MATHEMATICAL BOLD SMALL C +1D41D ; NFKC_SCF; 0064 # L& MATHEMATICAL BOLD SMALL D +1D41E ; NFKC_SCF; 0065 # L& MATHEMATICAL BOLD SMALL E +1D41F ; NFKC_SCF; 0066 # L& MATHEMATICAL BOLD SMALL F +1D420 ; NFKC_SCF; 0067 # L& MATHEMATICAL BOLD SMALL G +1D421 ; NFKC_SCF; 0068 # L& MATHEMATICAL BOLD SMALL H +1D422 ; NFKC_SCF; 0069 # L& MATHEMATICAL BOLD SMALL I +1D423 ; NFKC_SCF; 006A # L& MATHEMATICAL BOLD SMALL J +1D424 ; NFKC_SCF; 006B # L& MATHEMATICAL BOLD SMALL K +1D425 ; NFKC_SCF; 006C # L& MATHEMATICAL BOLD SMALL L +1D426 ; NFKC_SCF; 006D # L& MATHEMATICAL BOLD SMALL M +1D427 ; NFKC_SCF; 006E # L& MATHEMATICAL BOLD SMALL N +1D428 ; NFKC_SCF; 006F # L& MATHEMATICAL BOLD SMALL O +1D429 ; NFKC_SCF; 0070 # L& MATHEMATICAL BOLD SMALL P +1D42A ; NFKC_SCF; 0071 # L& MATHEMATICAL BOLD SMALL Q +1D42B ; NFKC_SCF; 0072 # L& MATHEMATICAL BOLD SMALL R +1D42C ; NFKC_SCF; 0073 # L& MATHEMATICAL BOLD SMALL S +1D42D ; NFKC_SCF; 0074 # L& MATHEMATICAL BOLD SMALL T +1D42E ; NFKC_SCF; 0075 # L& MATHEMATICAL BOLD SMALL U +1D42F ; NFKC_SCF; 0076 # L& MATHEMATICAL BOLD SMALL V +1D430 ; NFKC_SCF; 0077 # L& MATHEMATICAL BOLD SMALL W +1D431 ; NFKC_SCF; 0078 # L& MATHEMATICAL BOLD SMALL X +1D432 ; NFKC_SCF; 0079 # L& MATHEMATICAL BOLD SMALL Y +1D433 ; NFKC_SCF; 007A # L& MATHEMATICAL BOLD SMALL Z +1D434 ; NFKC_SCF; 0061 # L& MATHEMATICAL ITALIC CAPITAL A +1D435 ; NFKC_SCF; 0062 # L& MATHEMATICAL ITALIC CAPITAL B +1D436 ; NFKC_SCF; 0063 # L& MATHEMATICAL ITALIC CAPITAL C +1D437 ; NFKC_SCF; 0064 # L& MATHEMATICAL ITALIC CAPITAL D +1D438 ; NFKC_SCF; 0065 # L& MATHEMATICAL ITALIC CAPITAL E +1D439 ; NFKC_SCF; 0066 # L& MATHEMATICAL ITALIC CAPITAL F +1D43A ; NFKC_SCF; 0067 # L& MATHEMATICAL ITALIC CAPITAL G +1D43B ; NFKC_SCF; 0068 # L& MATHEMATICAL ITALIC CAPITAL H +1D43C ; NFKC_SCF; 0069 # L& MATHEMATICAL ITALIC CAPITAL I +1D43D ; NFKC_SCF; 006A # L& MATHEMATICAL ITALIC CAPITAL J +1D43E ; NFKC_SCF; 006B # L& MATHEMATICAL ITALIC CAPITAL K +1D43F ; NFKC_SCF; 006C # L& MATHEMATICAL ITALIC CAPITAL L +1D440 ; NFKC_SCF; 006D # L& MATHEMATICAL ITALIC CAPITAL M +1D441 ; NFKC_SCF; 006E # L& MATHEMATICAL ITALIC CAPITAL N +1D442 ; NFKC_SCF; 006F # L& MATHEMATICAL ITALIC CAPITAL O +1D443 ; NFKC_SCF; 0070 # L& MATHEMATICAL ITALIC CAPITAL P +1D444 ; NFKC_SCF; 0071 # L& MATHEMATICAL ITALIC CAPITAL Q +1D445 ; NFKC_SCF; 0072 # L& MATHEMATICAL ITALIC CAPITAL R +1D446 ; NFKC_SCF; 0073 # L& MATHEMATICAL ITALIC CAPITAL S +1D447 ; NFKC_SCF; 0074 # L& MATHEMATICAL ITALIC CAPITAL T +1D448 ; NFKC_SCF; 0075 # L& MATHEMATICAL ITALIC CAPITAL U +1D449 ; NFKC_SCF; 0076 # L& MATHEMATICAL ITALIC CAPITAL V +1D44A ; NFKC_SCF; 0077 # L& MATHEMATICAL ITALIC CAPITAL W +1D44B ; NFKC_SCF; 0078 # L& MATHEMATICAL ITALIC CAPITAL X +1D44C ; NFKC_SCF; 0079 # L& MATHEMATICAL ITALIC CAPITAL Y +1D44D ; NFKC_SCF; 007A # L& MATHEMATICAL ITALIC CAPITAL Z +1D44E ; NFKC_SCF; 0061 # L& MATHEMATICAL ITALIC SMALL A +1D44F ; NFKC_SCF; 0062 # L& MATHEMATICAL ITALIC SMALL B +1D450 ; NFKC_SCF; 0063 # L& MATHEMATICAL ITALIC SMALL C +1D451 ; NFKC_SCF; 0064 # L& MATHEMATICAL ITALIC SMALL D +1D452 ; NFKC_SCF; 0065 # L& MATHEMATICAL ITALIC SMALL E +1D453 ; NFKC_SCF; 0066 # L& MATHEMATICAL ITALIC SMALL F +1D454 ; NFKC_SCF; 0067 # L& MATHEMATICAL ITALIC SMALL G +1D456 ; NFKC_SCF; 0069 # L& MATHEMATICAL ITALIC SMALL I +1D457 ; NFKC_SCF; 006A # L& MATHEMATICAL ITALIC SMALL J +1D458 ; NFKC_SCF; 006B # L& MATHEMATICAL ITALIC SMALL K +1D459 ; NFKC_SCF; 006C # L& MATHEMATICAL ITALIC SMALL L +1D45A ; NFKC_SCF; 006D # L& MATHEMATICAL ITALIC SMALL M +1D45B ; NFKC_SCF; 006E # L& MATHEMATICAL ITALIC SMALL N +1D45C ; NFKC_SCF; 006F # L& MATHEMATICAL ITALIC SMALL O +1D45D ; NFKC_SCF; 0070 # L& MATHEMATICAL ITALIC SMALL P +1D45E ; NFKC_SCF; 0071 # L& MATHEMATICAL ITALIC SMALL Q +1D45F ; NFKC_SCF; 0072 # L& MATHEMATICAL ITALIC SMALL R +1D460 ; NFKC_SCF; 0073 # L& MATHEMATICAL ITALIC SMALL S +1D461 ; NFKC_SCF; 0074 # L& MATHEMATICAL ITALIC SMALL T +1D462 ; NFKC_SCF; 0075 # L& MATHEMATICAL ITALIC SMALL U +1D463 ; NFKC_SCF; 0076 # L& MATHEMATICAL ITALIC SMALL V +1D464 ; NFKC_SCF; 0077 # L& MATHEMATICAL ITALIC SMALL W +1D465 ; NFKC_SCF; 0078 # L& MATHEMATICAL ITALIC SMALL X +1D466 ; NFKC_SCF; 0079 # L& MATHEMATICAL ITALIC SMALL Y +1D467 ; NFKC_SCF; 007A # L& MATHEMATICAL ITALIC SMALL Z +1D468 ; NFKC_SCF; 0061 # L& MATHEMATICAL BOLD ITALIC CAPITAL A +1D469 ; NFKC_SCF; 0062 # L& MATHEMATICAL BOLD ITALIC CAPITAL B +1D46A ; NFKC_SCF; 0063 # L& MATHEMATICAL BOLD ITALIC CAPITAL C +1D46B ; NFKC_SCF; 0064 # L& MATHEMATICAL BOLD ITALIC CAPITAL D +1D46C ; NFKC_SCF; 0065 # L& MATHEMATICAL BOLD ITALIC CAPITAL E +1D46D ; NFKC_SCF; 0066 # L& MATHEMATICAL BOLD ITALIC CAPITAL F +1D46E ; NFKC_SCF; 0067 # L& MATHEMATICAL BOLD ITALIC CAPITAL G +1D46F ; NFKC_SCF; 0068 # L& MATHEMATICAL BOLD ITALIC CAPITAL H +1D470 ; NFKC_SCF; 0069 # L& MATHEMATICAL BOLD ITALIC CAPITAL I +1D471 ; NFKC_SCF; 006A # L& MATHEMATICAL BOLD ITALIC CAPITAL J +1D472 ; NFKC_SCF; 006B # L& MATHEMATICAL BOLD ITALIC CAPITAL K +1D473 ; NFKC_SCF; 006C # L& MATHEMATICAL BOLD ITALIC CAPITAL L +1D474 ; NFKC_SCF; 006D # L& MATHEMATICAL BOLD ITALIC CAPITAL M +1D475 ; NFKC_SCF; 006E # L& MATHEMATICAL BOLD ITALIC CAPITAL N +1D476 ; NFKC_SCF; 006F # L& MATHEMATICAL BOLD ITALIC CAPITAL O +1D477 ; NFKC_SCF; 0070 # L& MATHEMATICAL BOLD ITALIC CAPITAL P +1D478 ; NFKC_SCF; 0071 # L& MATHEMATICAL BOLD ITALIC CAPITAL Q +1D479 ; NFKC_SCF; 0072 # L& MATHEMATICAL BOLD ITALIC CAPITAL R +1D47A ; NFKC_SCF; 0073 # L& MATHEMATICAL BOLD ITALIC CAPITAL S +1D47B ; NFKC_SCF; 0074 # L& MATHEMATICAL BOLD ITALIC CAPITAL T +1D47C ; NFKC_SCF; 0075 # L& MATHEMATICAL BOLD ITALIC CAPITAL U +1D47D ; NFKC_SCF; 0076 # L& MATHEMATICAL BOLD ITALIC CAPITAL V +1D47E ; NFKC_SCF; 0077 # L& MATHEMATICAL BOLD ITALIC CAPITAL W +1D47F ; NFKC_SCF; 0078 # L& MATHEMATICAL BOLD ITALIC CAPITAL X +1D480 ; NFKC_SCF; 0079 # L& MATHEMATICAL BOLD ITALIC CAPITAL Y +1D481 ; NFKC_SCF; 007A # L& MATHEMATICAL BOLD ITALIC CAPITAL Z +1D482 ; NFKC_SCF; 0061 # L& MATHEMATICAL BOLD ITALIC SMALL A +1D483 ; NFKC_SCF; 0062 # L& MATHEMATICAL BOLD ITALIC SMALL B +1D484 ; NFKC_SCF; 0063 # L& MATHEMATICAL BOLD ITALIC SMALL C +1D485 ; NFKC_SCF; 0064 # L& MATHEMATICAL BOLD ITALIC SMALL D +1D486 ; NFKC_SCF; 0065 # L& MATHEMATICAL BOLD ITALIC SMALL E +1D487 ; NFKC_SCF; 0066 # L& MATHEMATICAL BOLD ITALIC SMALL F +1D488 ; NFKC_SCF; 0067 # L& MATHEMATICAL BOLD ITALIC SMALL G +1D489 ; NFKC_SCF; 0068 # L& MATHEMATICAL BOLD ITALIC SMALL H +1D48A ; NFKC_SCF; 0069 # L& MATHEMATICAL BOLD ITALIC SMALL I +1D48B ; NFKC_SCF; 006A # L& MATHEMATICAL BOLD ITALIC SMALL J +1D48C ; NFKC_SCF; 006B # L& MATHEMATICAL BOLD ITALIC SMALL K +1D48D ; NFKC_SCF; 006C # L& MATHEMATICAL BOLD ITALIC SMALL L +1D48E ; NFKC_SCF; 006D # L& MATHEMATICAL BOLD ITALIC SMALL M +1D48F ; NFKC_SCF; 006E # L& MATHEMATICAL BOLD ITALIC SMALL N +1D490 ; NFKC_SCF; 006F # L& MATHEMATICAL BOLD ITALIC SMALL O +1D491 ; NFKC_SCF; 0070 # L& MATHEMATICAL BOLD ITALIC SMALL P +1D492 ; NFKC_SCF; 0071 # L& MATHEMATICAL BOLD ITALIC SMALL Q +1D493 ; NFKC_SCF; 0072 # L& MATHEMATICAL BOLD ITALIC SMALL R +1D494 ; NFKC_SCF; 0073 # L& MATHEMATICAL BOLD ITALIC SMALL S +1D495 ; NFKC_SCF; 0074 # L& MATHEMATICAL BOLD ITALIC SMALL T +1D496 ; NFKC_SCF; 0075 # L& MATHEMATICAL BOLD ITALIC SMALL U +1D497 ; NFKC_SCF; 0076 # L& MATHEMATICAL BOLD ITALIC SMALL V +1D498 ; NFKC_SCF; 0077 # L& MATHEMATICAL BOLD ITALIC SMALL W +1D499 ; NFKC_SCF; 0078 # L& MATHEMATICAL BOLD ITALIC SMALL X +1D49A ; NFKC_SCF; 0079 # L& MATHEMATICAL BOLD ITALIC SMALL Y +1D49B ; NFKC_SCF; 007A # L& MATHEMATICAL BOLD ITALIC SMALL Z +1D49C ; NFKC_SCF; 0061 # L& MATHEMATICAL SCRIPT CAPITAL A +1D49E ; NFKC_SCF; 0063 # L& MATHEMATICAL SCRIPT CAPITAL C +1D49F ; NFKC_SCF; 0064 # L& MATHEMATICAL SCRIPT CAPITAL D +1D4A2 ; NFKC_SCF; 0067 # L& MATHEMATICAL SCRIPT CAPITAL G +1D4A5 ; NFKC_SCF; 006A # L& MATHEMATICAL SCRIPT CAPITAL J +1D4A6 ; NFKC_SCF; 006B # L& MATHEMATICAL SCRIPT CAPITAL K +1D4A9 ; NFKC_SCF; 006E # L& MATHEMATICAL SCRIPT CAPITAL N +1D4AA ; NFKC_SCF; 006F # L& MATHEMATICAL SCRIPT CAPITAL O +1D4AB ; NFKC_SCF; 0070 # L& MATHEMATICAL SCRIPT CAPITAL P +1D4AC ; NFKC_SCF; 0071 # L& MATHEMATICAL SCRIPT CAPITAL Q +1D4AE ; NFKC_SCF; 0073 # L& MATHEMATICAL SCRIPT CAPITAL S +1D4AF ; NFKC_SCF; 0074 # L& MATHEMATICAL SCRIPT CAPITAL T +1D4B0 ; NFKC_SCF; 0075 # L& MATHEMATICAL SCRIPT CAPITAL U +1D4B1 ; NFKC_SCF; 0076 # L& MATHEMATICAL SCRIPT CAPITAL V +1D4B2 ; NFKC_SCF; 0077 # L& MATHEMATICAL SCRIPT CAPITAL W +1D4B3 ; NFKC_SCF; 0078 # L& MATHEMATICAL SCRIPT CAPITAL X +1D4B4 ; NFKC_SCF; 0079 # L& MATHEMATICAL SCRIPT CAPITAL Y +1D4B5 ; NFKC_SCF; 007A # L& MATHEMATICAL SCRIPT CAPITAL Z +1D4B6 ; NFKC_SCF; 0061 # L& MATHEMATICAL SCRIPT SMALL A +1D4B7 ; NFKC_SCF; 0062 # L& MATHEMATICAL SCRIPT SMALL B +1D4B8 ; NFKC_SCF; 0063 # L& MATHEMATICAL SCRIPT SMALL C +1D4B9 ; NFKC_SCF; 0064 # L& MATHEMATICAL SCRIPT SMALL D +1D4BB ; NFKC_SCF; 0066 # L& MATHEMATICAL SCRIPT SMALL F +1D4BD ; NFKC_SCF; 0068 # L& MATHEMATICAL SCRIPT SMALL H +1D4BE ; NFKC_SCF; 0069 # L& MATHEMATICAL SCRIPT SMALL I +1D4BF ; NFKC_SCF; 006A # L& MATHEMATICAL SCRIPT SMALL J +1D4C0 ; NFKC_SCF; 006B # L& MATHEMATICAL SCRIPT SMALL K +1D4C1 ; NFKC_SCF; 006C # L& MATHEMATICAL SCRIPT SMALL L +1D4C2 ; NFKC_SCF; 006D # L& MATHEMATICAL SCRIPT SMALL M +1D4C3 ; NFKC_SCF; 006E # L& MATHEMATICAL SCRIPT SMALL N +1D4C5 ; NFKC_SCF; 0070 # L& MATHEMATICAL SCRIPT SMALL P +1D4C6 ; NFKC_SCF; 0071 # L& MATHEMATICAL SCRIPT SMALL Q +1D4C7 ; NFKC_SCF; 0072 # L& MATHEMATICAL SCRIPT SMALL R +1D4C8 ; NFKC_SCF; 0073 # L& MATHEMATICAL SCRIPT SMALL S +1D4C9 ; NFKC_SCF; 0074 # L& MATHEMATICAL SCRIPT SMALL T +1D4CA ; NFKC_SCF; 0075 # L& MATHEMATICAL SCRIPT SMALL U +1D4CB ; NFKC_SCF; 0076 # L& MATHEMATICAL SCRIPT SMALL V +1D4CC ; NFKC_SCF; 0077 # L& MATHEMATICAL SCRIPT SMALL W +1D4CD ; NFKC_SCF; 0078 # L& MATHEMATICAL SCRIPT SMALL X +1D4CE ; NFKC_SCF; 0079 # L& MATHEMATICAL SCRIPT SMALL Y +1D4CF ; NFKC_SCF; 007A # L& MATHEMATICAL SCRIPT SMALL Z +1D4D0 ; NFKC_SCF; 0061 # L& MATHEMATICAL BOLD SCRIPT CAPITAL A +1D4D1 ; NFKC_SCF; 0062 # L& MATHEMATICAL BOLD SCRIPT CAPITAL B +1D4D2 ; NFKC_SCF; 0063 # L& MATHEMATICAL BOLD SCRIPT CAPITAL C +1D4D3 ; NFKC_SCF; 0064 # L& MATHEMATICAL BOLD SCRIPT CAPITAL D +1D4D4 ; NFKC_SCF; 0065 # L& MATHEMATICAL BOLD SCRIPT CAPITAL E +1D4D5 ; NFKC_SCF; 0066 # L& MATHEMATICAL BOLD SCRIPT CAPITAL F +1D4D6 ; NFKC_SCF; 0067 # L& MATHEMATICAL BOLD SCRIPT CAPITAL G +1D4D7 ; NFKC_SCF; 0068 # L& MATHEMATICAL BOLD SCRIPT CAPITAL H +1D4D8 ; NFKC_SCF; 0069 # L& MATHEMATICAL BOLD SCRIPT CAPITAL I +1D4D9 ; NFKC_SCF; 006A # L& MATHEMATICAL BOLD SCRIPT CAPITAL J +1D4DA ; NFKC_SCF; 006B # L& MATHEMATICAL BOLD SCRIPT CAPITAL K +1D4DB ; NFKC_SCF; 006C # L& MATHEMATICAL BOLD SCRIPT CAPITAL L +1D4DC ; NFKC_SCF; 006D # L& MATHEMATICAL BOLD SCRIPT CAPITAL M +1D4DD ; NFKC_SCF; 006E # L& MATHEMATICAL BOLD SCRIPT CAPITAL N +1D4DE ; NFKC_SCF; 006F # L& MATHEMATICAL BOLD SCRIPT CAPITAL O +1D4DF ; NFKC_SCF; 0070 # L& MATHEMATICAL BOLD SCRIPT CAPITAL P +1D4E0 ; NFKC_SCF; 0071 # L& MATHEMATICAL BOLD SCRIPT CAPITAL Q +1D4E1 ; NFKC_SCF; 0072 # L& MATHEMATICAL BOLD SCRIPT CAPITAL R +1D4E2 ; NFKC_SCF; 0073 # L& MATHEMATICAL BOLD SCRIPT CAPITAL S +1D4E3 ; NFKC_SCF; 0074 # L& MATHEMATICAL BOLD SCRIPT CAPITAL T +1D4E4 ; NFKC_SCF; 0075 # L& MATHEMATICAL BOLD SCRIPT CAPITAL U +1D4E5 ; NFKC_SCF; 0076 # L& MATHEMATICAL BOLD SCRIPT CAPITAL V +1D4E6 ; NFKC_SCF; 0077 # L& MATHEMATICAL BOLD SCRIPT CAPITAL W +1D4E7 ; NFKC_SCF; 0078 # L& MATHEMATICAL BOLD SCRIPT CAPITAL X +1D4E8 ; NFKC_SCF; 0079 # L& MATHEMATICAL BOLD SCRIPT CAPITAL Y +1D4E9 ; NFKC_SCF; 007A # L& MATHEMATICAL BOLD SCRIPT CAPITAL Z +1D4EA ; NFKC_SCF; 0061 # L& MATHEMATICAL BOLD SCRIPT SMALL A +1D4EB ; NFKC_SCF; 0062 # L& MATHEMATICAL BOLD SCRIPT SMALL B +1D4EC ; NFKC_SCF; 0063 # L& MATHEMATICAL BOLD SCRIPT SMALL C +1D4ED ; NFKC_SCF; 0064 # L& MATHEMATICAL BOLD SCRIPT SMALL D +1D4EE ; NFKC_SCF; 0065 # L& MATHEMATICAL BOLD SCRIPT SMALL E +1D4EF ; NFKC_SCF; 0066 # L& MATHEMATICAL BOLD SCRIPT SMALL F +1D4F0 ; NFKC_SCF; 0067 # L& MATHEMATICAL BOLD SCRIPT SMALL G +1D4F1 ; NFKC_SCF; 0068 # L& MATHEMATICAL BOLD SCRIPT SMALL H +1D4F2 ; NFKC_SCF; 0069 # L& MATHEMATICAL BOLD SCRIPT SMALL I +1D4F3 ; NFKC_SCF; 006A # L& MATHEMATICAL BOLD SCRIPT SMALL J +1D4F4 ; NFKC_SCF; 006B # L& MATHEMATICAL BOLD SCRIPT SMALL K +1D4F5 ; NFKC_SCF; 006C # L& MATHEMATICAL BOLD SCRIPT SMALL L +1D4F6 ; NFKC_SCF; 006D # L& MATHEMATICAL BOLD SCRIPT SMALL M +1D4F7 ; NFKC_SCF; 006E # L& MATHEMATICAL BOLD SCRIPT SMALL N +1D4F8 ; NFKC_SCF; 006F # L& MATHEMATICAL BOLD SCRIPT SMALL O +1D4F9 ; NFKC_SCF; 0070 # L& MATHEMATICAL BOLD SCRIPT SMALL P +1D4FA ; NFKC_SCF; 0071 # L& MATHEMATICAL BOLD SCRIPT SMALL Q +1D4FB ; NFKC_SCF; 0072 # L& MATHEMATICAL BOLD SCRIPT SMALL R +1D4FC ; NFKC_SCF; 0073 # L& MATHEMATICAL BOLD SCRIPT SMALL S +1D4FD ; NFKC_SCF; 0074 # L& MATHEMATICAL BOLD SCRIPT SMALL T +1D4FE ; NFKC_SCF; 0075 # L& MATHEMATICAL BOLD SCRIPT SMALL U +1D4FF ; NFKC_SCF; 0076 # L& MATHEMATICAL BOLD SCRIPT SMALL V +1D500 ; NFKC_SCF; 0077 # L& MATHEMATICAL BOLD SCRIPT SMALL W +1D501 ; NFKC_SCF; 0078 # L& MATHEMATICAL BOLD SCRIPT SMALL X +1D502 ; NFKC_SCF; 0079 # L& MATHEMATICAL BOLD SCRIPT SMALL Y +1D503 ; NFKC_SCF; 007A # L& MATHEMATICAL BOLD SCRIPT SMALL Z +1D504 ; NFKC_SCF; 0061 # L& MATHEMATICAL FRAKTUR CAPITAL A +1D505 ; NFKC_SCF; 0062 # L& MATHEMATICAL FRAKTUR CAPITAL B +1D507 ; NFKC_SCF; 0064 # L& MATHEMATICAL FRAKTUR CAPITAL D +1D508 ; NFKC_SCF; 0065 # L& MATHEMATICAL FRAKTUR CAPITAL E +1D509 ; NFKC_SCF; 0066 # L& MATHEMATICAL FRAKTUR CAPITAL F +1D50A ; NFKC_SCF; 0067 # L& MATHEMATICAL FRAKTUR CAPITAL G +1D50D ; NFKC_SCF; 006A # L& MATHEMATICAL FRAKTUR CAPITAL J +1D50E ; NFKC_SCF; 006B # L& MATHEMATICAL FRAKTUR CAPITAL K +1D50F ; NFKC_SCF; 006C # L& MATHEMATICAL FRAKTUR CAPITAL L +1D510 ; NFKC_SCF; 006D # L& MATHEMATICAL FRAKTUR CAPITAL M +1D511 ; NFKC_SCF; 006E # L& MATHEMATICAL FRAKTUR CAPITAL N +1D512 ; NFKC_SCF; 006F # L& MATHEMATICAL FRAKTUR CAPITAL O +1D513 ; NFKC_SCF; 0070 # L& MATHEMATICAL FRAKTUR CAPITAL P +1D514 ; NFKC_SCF; 0071 # L& MATHEMATICAL FRAKTUR CAPITAL Q +1D516 ; NFKC_SCF; 0073 # L& MATHEMATICAL FRAKTUR CAPITAL S +1D517 ; NFKC_SCF; 0074 # L& MATHEMATICAL FRAKTUR CAPITAL T +1D518 ; NFKC_SCF; 0075 # L& MATHEMATICAL FRAKTUR CAPITAL U +1D519 ; NFKC_SCF; 0076 # L& MATHEMATICAL FRAKTUR CAPITAL V +1D51A ; NFKC_SCF; 0077 # L& MATHEMATICAL FRAKTUR CAPITAL W +1D51B ; NFKC_SCF; 0078 # L& MATHEMATICAL FRAKTUR CAPITAL X +1D51C ; NFKC_SCF; 0079 # L& MATHEMATICAL FRAKTUR CAPITAL Y +1D51E ; NFKC_SCF; 0061 # L& MATHEMATICAL FRAKTUR SMALL A +1D51F ; NFKC_SCF; 0062 # L& MATHEMATICAL FRAKTUR SMALL B +1D520 ; NFKC_SCF; 0063 # L& MATHEMATICAL FRAKTUR SMALL C +1D521 ; NFKC_SCF; 0064 # L& MATHEMATICAL FRAKTUR SMALL D +1D522 ; NFKC_SCF; 0065 # L& MATHEMATICAL FRAKTUR SMALL E +1D523 ; NFKC_SCF; 0066 # L& MATHEMATICAL FRAKTUR SMALL F +1D524 ; NFKC_SCF; 0067 # L& MATHEMATICAL FRAKTUR SMALL G +1D525 ; NFKC_SCF; 0068 # L& MATHEMATICAL FRAKTUR SMALL H +1D526 ; NFKC_SCF; 0069 # L& MATHEMATICAL FRAKTUR SMALL I +1D527 ; NFKC_SCF; 006A # L& MATHEMATICAL FRAKTUR SMALL J +1D528 ; NFKC_SCF; 006B # L& MATHEMATICAL FRAKTUR SMALL K +1D529 ; NFKC_SCF; 006C # L& MATHEMATICAL FRAKTUR SMALL L +1D52A ; NFKC_SCF; 006D # L& MATHEMATICAL FRAKTUR SMALL M +1D52B ; NFKC_SCF; 006E # L& MATHEMATICAL FRAKTUR SMALL N +1D52C ; NFKC_SCF; 006F # L& MATHEMATICAL FRAKTUR SMALL O +1D52D ; NFKC_SCF; 0070 # L& MATHEMATICAL FRAKTUR SMALL P +1D52E ; NFKC_SCF; 0071 # L& MATHEMATICAL FRAKTUR SMALL Q +1D52F ; NFKC_SCF; 0072 # L& MATHEMATICAL FRAKTUR SMALL R +1D530 ; NFKC_SCF; 0073 # L& MATHEMATICAL FRAKTUR SMALL S +1D531 ; NFKC_SCF; 0074 # L& MATHEMATICAL FRAKTUR SMALL T +1D532 ; NFKC_SCF; 0075 # L& MATHEMATICAL FRAKTUR SMALL U +1D533 ; NFKC_SCF; 0076 # L& MATHEMATICAL FRAKTUR SMALL V +1D534 ; NFKC_SCF; 0077 # L& MATHEMATICAL FRAKTUR SMALL W +1D535 ; NFKC_SCF; 0078 # L& MATHEMATICAL FRAKTUR SMALL X +1D536 ; NFKC_SCF; 0079 # L& MATHEMATICAL FRAKTUR SMALL Y +1D537 ; NFKC_SCF; 007A # L& MATHEMATICAL FRAKTUR SMALL Z +1D538 ; NFKC_SCF; 0061 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL A +1D539 ; NFKC_SCF; 0062 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL B +1D53B ; NFKC_SCF; 0064 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL D +1D53C ; NFKC_SCF; 0065 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL E +1D53D ; NFKC_SCF; 0066 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL F +1D53E ; NFKC_SCF; 0067 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL G +1D540 ; NFKC_SCF; 0069 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL I +1D541 ; NFKC_SCF; 006A # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL J +1D542 ; NFKC_SCF; 006B # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL K +1D543 ; NFKC_SCF; 006C # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL L +1D544 ; NFKC_SCF; 006D # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL M +1D546 ; NFKC_SCF; 006F # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O +1D54A ; NFKC_SCF; 0073 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL S +1D54B ; NFKC_SCF; 0074 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL T +1D54C ; NFKC_SCF; 0075 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL U +1D54D ; NFKC_SCF; 0076 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL V +1D54E ; NFKC_SCF; 0077 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL W +1D54F ; NFKC_SCF; 0078 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL X +1D550 ; NFKC_SCF; 0079 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL Y +1D552 ; NFKC_SCF; 0061 # L& MATHEMATICAL DOUBLE-STRUCK SMALL A +1D553 ; NFKC_SCF; 0062 # L& MATHEMATICAL DOUBLE-STRUCK SMALL B +1D554 ; NFKC_SCF; 0063 # L& MATHEMATICAL DOUBLE-STRUCK SMALL C +1D555 ; NFKC_SCF; 0064 # L& MATHEMATICAL DOUBLE-STRUCK SMALL D +1D556 ; NFKC_SCF; 0065 # L& MATHEMATICAL DOUBLE-STRUCK SMALL E +1D557 ; NFKC_SCF; 0066 # L& MATHEMATICAL DOUBLE-STRUCK SMALL F +1D558 ; NFKC_SCF; 0067 # L& MATHEMATICAL DOUBLE-STRUCK SMALL G +1D559 ; NFKC_SCF; 0068 # L& MATHEMATICAL DOUBLE-STRUCK SMALL H +1D55A ; NFKC_SCF; 0069 # L& MATHEMATICAL DOUBLE-STRUCK SMALL I +1D55B ; NFKC_SCF; 006A # L& MATHEMATICAL DOUBLE-STRUCK SMALL J +1D55C ; NFKC_SCF; 006B # L& MATHEMATICAL DOUBLE-STRUCK SMALL K +1D55D ; NFKC_SCF; 006C # L& MATHEMATICAL DOUBLE-STRUCK SMALL L +1D55E ; NFKC_SCF; 006D # L& MATHEMATICAL DOUBLE-STRUCK SMALL M +1D55F ; NFKC_SCF; 006E # L& MATHEMATICAL DOUBLE-STRUCK SMALL N +1D560 ; NFKC_SCF; 006F # L& MATHEMATICAL DOUBLE-STRUCK SMALL O +1D561 ; NFKC_SCF; 0070 # L& MATHEMATICAL DOUBLE-STRUCK SMALL P +1D562 ; NFKC_SCF; 0071 # L& MATHEMATICAL DOUBLE-STRUCK SMALL Q +1D563 ; NFKC_SCF; 0072 # L& MATHEMATICAL DOUBLE-STRUCK SMALL R +1D564 ; NFKC_SCF; 0073 # L& MATHEMATICAL DOUBLE-STRUCK SMALL S +1D565 ; NFKC_SCF; 0074 # L& MATHEMATICAL DOUBLE-STRUCK SMALL T +1D566 ; NFKC_SCF; 0075 # L& MATHEMATICAL DOUBLE-STRUCK SMALL U +1D567 ; NFKC_SCF; 0076 # L& MATHEMATICAL DOUBLE-STRUCK SMALL V +1D568 ; NFKC_SCF; 0077 # L& MATHEMATICAL DOUBLE-STRUCK SMALL W +1D569 ; NFKC_SCF; 0078 # L& MATHEMATICAL DOUBLE-STRUCK SMALL X +1D56A ; NFKC_SCF; 0079 # L& MATHEMATICAL DOUBLE-STRUCK SMALL Y +1D56B ; NFKC_SCF; 007A # L& MATHEMATICAL DOUBLE-STRUCK SMALL Z +1D56C ; NFKC_SCF; 0061 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL A +1D56D ; NFKC_SCF; 0062 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL B +1D56E ; NFKC_SCF; 0063 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL C +1D56F ; NFKC_SCF; 0064 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL D +1D570 ; NFKC_SCF; 0065 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL E +1D571 ; NFKC_SCF; 0066 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL F +1D572 ; NFKC_SCF; 0067 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL G +1D573 ; NFKC_SCF; 0068 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL H +1D574 ; NFKC_SCF; 0069 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL I +1D575 ; NFKC_SCF; 006A # L& MATHEMATICAL BOLD FRAKTUR CAPITAL J +1D576 ; NFKC_SCF; 006B # L& MATHEMATICAL BOLD FRAKTUR CAPITAL K +1D577 ; NFKC_SCF; 006C # L& MATHEMATICAL BOLD FRAKTUR CAPITAL L +1D578 ; NFKC_SCF; 006D # L& MATHEMATICAL BOLD FRAKTUR CAPITAL M +1D579 ; NFKC_SCF; 006E # L& MATHEMATICAL BOLD FRAKTUR CAPITAL N +1D57A ; NFKC_SCF; 006F # L& MATHEMATICAL BOLD FRAKTUR CAPITAL O +1D57B ; NFKC_SCF; 0070 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL P +1D57C ; NFKC_SCF; 0071 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL Q +1D57D ; NFKC_SCF; 0072 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL R +1D57E ; NFKC_SCF; 0073 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL S +1D57F ; NFKC_SCF; 0074 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL T +1D580 ; NFKC_SCF; 0075 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL U +1D581 ; NFKC_SCF; 0076 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL V +1D582 ; NFKC_SCF; 0077 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL W +1D583 ; NFKC_SCF; 0078 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL X +1D584 ; NFKC_SCF; 0079 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL Y +1D585 ; NFKC_SCF; 007A # L& MATHEMATICAL BOLD FRAKTUR CAPITAL Z +1D586 ; NFKC_SCF; 0061 # L& MATHEMATICAL BOLD FRAKTUR SMALL A +1D587 ; NFKC_SCF; 0062 # L& MATHEMATICAL BOLD FRAKTUR SMALL B +1D588 ; NFKC_SCF; 0063 # L& MATHEMATICAL BOLD FRAKTUR SMALL C +1D589 ; NFKC_SCF; 0064 # L& MATHEMATICAL BOLD FRAKTUR SMALL D +1D58A ; NFKC_SCF; 0065 # L& MATHEMATICAL BOLD FRAKTUR SMALL E +1D58B ; NFKC_SCF; 0066 # L& MATHEMATICAL BOLD FRAKTUR SMALL F +1D58C ; NFKC_SCF; 0067 # L& MATHEMATICAL BOLD FRAKTUR SMALL G +1D58D ; NFKC_SCF; 0068 # L& MATHEMATICAL BOLD FRAKTUR SMALL H +1D58E ; NFKC_SCF; 0069 # L& MATHEMATICAL BOLD FRAKTUR SMALL I +1D58F ; NFKC_SCF; 006A # L& MATHEMATICAL BOLD FRAKTUR SMALL J +1D590 ; NFKC_SCF; 006B # L& MATHEMATICAL BOLD FRAKTUR SMALL K +1D591 ; NFKC_SCF; 006C # L& MATHEMATICAL BOLD FRAKTUR SMALL L +1D592 ; NFKC_SCF; 006D # L& MATHEMATICAL BOLD FRAKTUR SMALL M +1D593 ; NFKC_SCF; 006E # L& MATHEMATICAL BOLD FRAKTUR SMALL N +1D594 ; NFKC_SCF; 006F # L& MATHEMATICAL BOLD FRAKTUR SMALL O +1D595 ; NFKC_SCF; 0070 # L& MATHEMATICAL BOLD FRAKTUR SMALL P +1D596 ; NFKC_SCF; 0071 # L& MATHEMATICAL BOLD FRAKTUR SMALL Q +1D597 ; NFKC_SCF; 0072 # L& MATHEMATICAL BOLD FRAKTUR SMALL R +1D598 ; NFKC_SCF; 0073 # L& MATHEMATICAL BOLD FRAKTUR SMALL S +1D599 ; NFKC_SCF; 0074 # L& MATHEMATICAL BOLD FRAKTUR SMALL T +1D59A ; NFKC_SCF; 0075 # L& MATHEMATICAL BOLD FRAKTUR SMALL U +1D59B ; NFKC_SCF; 0076 # L& MATHEMATICAL BOLD FRAKTUR SMALL V +1D59C ; NFKC_SCF; 0077 # L& MATHEMATICAL BOLD FRAKTUR SMALL W +1D59D ; NFKC_SCF; 0078 # L& MATHEMATICAL BOLD FRAKTUR SMALL X +1D59E ; NFKC_SCF; 0079 # L& MATHEMATICAL BOLD FRAKTUR SMALL Y +1D59F ; NFKC_SCF; 007A # L& MATHEMATICAL BOLD FRAKTUR SMALL Z +1D5A0 ; NFKC_SCF; 0061 # L& MATHEMATICAL SANS-SERIF CAPITAL A +1D5A1 ; NFKC_SCF; 0062 # L& MATHEMATICAL SANS-SERIF CAPITAL B +1D5A2 ; NFKC_SCF; 0063 # L& MATHEMATICAL SANS-SERIF CAPITAL C +1D5A3 ; NFKC_SCF; 0064 # L& MATHEMATICAL SANS-SERIF CAPITAL D +1D5A4 ; NFKC_SCF; 0065 # L& MATHEMATICAL SANS-SERIF CAPITAL E +1D5A5 ; NFKC_SCF; 0066 # L& MATHEMATICAL SANS-SERIF CAPITAL F +1D5A6 ; NFKC_SCF; 0067 # L& MATHEMATICAL SANS-SERIF CAPITAL G +1D5A7 ; NFKC_SCF; 0068 # L& MATHEMATICAL SANS-SERIF CAPITAL H +1D5A8 ; NFKC_SCF; 0069 # L& MATHEMATICAL SANS-SERIF CAPITAL I +1D5A9 ; NFKC_SCF; 006A # L& MATHEMATICAL SANS-SERIF CAPITAL J +1D5AA ; NFKC_SCF; 006B # L& MATHEMATICAL SANS-SERIF CAPITAL K +1D5AB ; NFKC_SCF; 006C # L& MATHEMATICAL SANS-SERIF CAPITAL L +1D5AC ; NFKC_SCF; 006D # L& MATHEMATICAL SANS-SERIF CAPITAL M +1D5AD ; NFKC_SCF; 006E # L& MATHEMATICAL SANS-SERIF CAPITAL N +1D5AE ; NFKC_SCF; 006F # L& MATHEMATICAL SANS-SERIF CAPITAL O +1D5AF ; NFKC_SCF; 0070 # L& MATHEMATICAL SANS-SERIF CAPITAL P +1D5B0 ; NFKC_SCF; 0071 # L& MATHEMATICAL SANS-SERIF CAPITAL Q +1D5B1 ; NFKC_SCF; 0072 # L& MATHEMATICAL SANS-SERIF CAPITAL R +1D5B2 ; NFKC_SCF; 0073 # L& MATHEMATICAL SANS-SERIF CAPITAL S +1D5B3 ; NFKC_SCF; 0074 # L& MATHEMATICAL SANS-SERIF CAPITAL T +1D5B4 ; NFKC_SCF; 0075 # L& MATHEMATICAL SANS-SERIF CAPITAL U +1D5B5 ; NFKC_SCF; 0076 # L& MATHEMATICAL SANS-SERIF CAPITAL V +1D5B6 ; NFKC_SCF; 0077 # L& MATHEMATICAL SANS-SERIF CAPITAL W +1D5B7 ; NFKC_SCF; 0078 # L& MATHEMATICAL SANS-SERIF CAPITAL X +1D5B8 ; NFKC_SCF; 0079 # L& MATHEMATICAL SANS-SERIF CAPITAL Y +1D5B9 ; NFKC_SCF; 007A # L& MATHEMATICAL SANS-SERIF CAPITAL Z +1D5BA ; NFKC_SCF; 0061 # L& MATHEMATICAL SANS-SERIF SMALL A +1D5BB ; NFKC_SCF; 0062 # L& MATHEMATICAL SANS-SERIF SMALL B +1D5BC ; NFKC_SCF; 0063 # L& MATHEMATICAL SANS-SERIF SMALL C +1D5BD ; NFKC_SCF; 0064 # L& MATHEMATICAL SANS-SERIF SMALL D +1D5BE ; NFKC_SCF; 0065 # L& MATHEMATICAL SANS-SERIF SMALL E +1D5BF ; NFKC_SCF; 0066 # L& MATHEMATICAL SANS-SERIF SMALL F +1D5C0 ; NFKC_SCF; 0067 # L& MATHEMATICAL SANS-SERIF SMALL G +1D5C1 ; NFKC_SCF; 0068 # L& MATHEMATICAL SANS-SERIF SMALL H +1D5C2 ; NFKC_SCF; 0069 # L& MATHEMATICAL SANS-SERIF SMALL I +1D5C3 ; NFKC_SCF; 006A # L& MATHEMATICAL SANS-SERIF SMALL J +1D5C4 ; NFKC_SCF; 006B # L& MATHEMATICAL SANS-SERIF SMALL K +1D5C5 ; NFKC_SCF; 006C # L& MATHEMATICAL SANS-SERIF SMALL L +1D5C6 ; NFKC_SCF; 006D # L& MATHEMATICAL SANS-SERIF SMALL M +1D5C7 ; NFKC_SCF; 006E # L& MATHEMATICAL SANS-SERIF SMALL N +1D5C8 ; NFKC_SCF; 006F # L& MATHEMATICAL SANS-SERIF SMALL O +1D5C9 ; NFKC_SCF; 0070 # L& MATHEMATICAL SANS-SERIF SMALL P +1D5CA ; NFKC_SCF; 0071 # L& MATHEMATICAL SANS-SERIF SMALL Q +1D5CB ; NFKC_SCF; 0072 # L& MATHEMATICAL SANS-SERIF SMALL R +1D5CC ; NFKC_SCF; 0073 # L& MATHEMATICAL SANS-SERIF SMALL S +1D5CD ; NFKC_SCF; 0074 # L& MATHEMATICAL SANS-SERIF SMALL T +1D5CE ; NFKC_SCF; 0075 # L& MATHEMATICAL SANS-SERIF SMALL U +1D5CF ; NFKC_SCF; 0076 # L& MATHEMATICAL SANS-SERIF SMALL V +1D5D0 ; NFKC_SCF; 0077 # L& MATHEMATICAL SANS-SERIF SMALL W +1D5D1 ; NFKC_SCF; 0078 # L& MATHEMATICAL SANS-SERIF SMALL X +1D5D2 ; NFKC_SCF; 0079 # L& MATHEMATICAL SANS-SERIF SMALL Y +1D5D3 ; NFKC_SCF; 007A # L& MATHEMATICAL SANS-SERIF SMALL Z +1D5D4 ; NFKC_SCF; 0061 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL A +1D5D5 ; NFKC_SCF; 0062 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL B +1D5D6 ; NFKC_SCF; 0063 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL C +1D5D7 ; NFKC_SCF; 0064 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL D +1D5D8 ; NFKC_SCF; 0065 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL E +1D5D9 ; NFKC_SCF; 0066 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL F +1D5DA ; NFKC_SCF; 0067 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL G +1D5DB ; NFKC_SCF; 0068 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL H +1D5DC ; NFKC_SCF; 0069 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL I +1D5DD ; NFKC_SCF; 006A # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL J +1D5DE ; NFKC_SCF; 006B # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL K +1D5DF ; NFKC_SCF; 006C # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL L +1D5E0 ; NFKC_SCF; 006D # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL M +1D5E1 ; NFKC_SCF; 006E # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL N +1D5E2 ; NFKC_SCF; 006F # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL O +1D5E3 ; NFKC_SCF; 0070 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL P +1D5E4 ; NFKC_SCF; 0071 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL Q +1D5E5 ; NFKC_SCF; 0072 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL R +1D5E6 ; NFKC_SCF; 0073 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL S +1D5E7 ; NFKC_SCF; 0074 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL T +1D5E8 ; NFKC_SCF; 0075 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL U +1D5E9 ; NFKC_SCF; 0076 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL V +1D5EA ; NFKC_SCF; 0077 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL W +1D5EB ; NFKC_SCF; 0078 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL X +1D5EC ; NFKC_SCF; 0079 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL Y +1D5ED ; NFKC_SCF; 007A # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL Z +1D5EE ; NFKC_SCF; 0061 # L& MATHEMATICAL SANS-SERIF BOLD SMALL A +1D5EF ; NFKC_SCF; 0062 # L& MATHEMATICAL SANS-SERIF BOLD SMALL B +1D5F0 ; NFKC_SCF; 0063 # L& MATHEMATICAL SANS-SERIF BOLD SMALL C +1D5F1 ; NFKC_SCF; 0064 # L& MATHEMATICAL SANS-SERIF BOLD SMALL D +1D5F2 ; NFKC_SCF; 0065 # L& MATHEMATICAL SANS-SERIF BOLD SMALL E +1D5F3 ; NFKC_SCF; 0066 # L& MATHEMATICAL SANS-SERIF BOLD SMALL F +1D5F4 ; NFKC_SCF; 0067 # L& MATHEMATICAL SANS-SERIF BOLD SMALL G +1D5F5 ; NFKC_SCF; 0068 # L& MATHEMATICAL SANS-SERIF BOLD SMALL H +1D5F6 ; NFKC_SCF; 0069 # L& MATHEMATICAL SANS-SERIF BOLD SMALL I +1D5F7 ; NFKC_SCF; 006A # L& MATHEMATICAL SANS-SERIF BOLD SMALL J +1D5F8 ; NFKC_SCF; 006B # L& MATHEMATICAL SANS-SERIF BOLD SMALL K +1D5F9 ; NFKC_SCF; 006C # L& MATHEMATICAL SANS-SERIF BOLD SMALL L +1D5FA ; NFKC_SCF; 006D # L& MATHEMATICAL SANS-SERIF BOLD SMALL M +1D5FB ; NFKC_SCF; 006E # L& MATHEMATICAL SANS-SERIF BOLD SMALL N +1D5FC ; NFKC_SCF; 006F # L& MATHEMATICAL SANS-SERIF BOLD SMALL O +1D5FD ; NFKC_SCF; 0070 # L& MATHEMATICAL SANS-SERIF BOLD SMALL P +1D5FE ; NFKC_SCF; 0071 # L& MATHEMATICAL SANS-SERIF BOLD SMALL Q +1D5FF ; NFKC_SCF; 0072 # L& MATHEMATICAL SANS-SERIF BOLD SMALL R +1D600 ; NFKC_SCF; 0073 # L& MATHEMATICAL SANS-SERIF BOLD SMALL S +1D601 ; NFKC_SCF; 0074 # L& MATHEMATICAL SANS-SERIF BOLD SMALL T +1D602 ; NFKC_SCF; 0075 # L& MATHEMATICAL SANS-SERIF BOLD SMALL U +1D603 ; NFKC_SCF; 0076 # L& MATHEMATICAL SANS-SERIF BOLD SMALL V +1D604 ; NFKC_SCF; 0077 # L& MATHEMATICAL SANS-SERIF BOLD SMALL W +1D605 ; NFKC_SCF; 0078 # L& MATHEMATICAL SANS-SERIF BOLD SMALL X +1D606 ; NFKC_SCF; 0079 # L& MATHEMATICAL SANS-SERIF BOLD SMALL Y +1D607 ; NFKC_SCF; 007A # L& MATHEMATICAL SANS-SERIF BOLD SMALL Z +1D608 ; NFKC_SCF; 0061 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL A +1D609 ; NFKC_SCF; 0062 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL B +1D60A ; NFKC_SCF; 0063 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL C +1D60B ; NFKC_SCF; 0064 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL D +1D60C ; NFKC_SCF; 0065 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL E +1D60D ; NFKC_SCF; 0066 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL F +1D60E ; NFKC_SCF; 0067 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL G +1D60F ; NFKC_SCF; 0068 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL H +1D610 ; NFKC_SCF; 0069 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL I +1D611 ; NFKC_SCF; 006A # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL J +1D612 ; NFKC_SCF; 006B # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL K +1D613 ; NFKC_SCF; 006C # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL L +1D614 ; NFKC_SCF; 006D # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL M +1D615 ; NFKC_SCF; 006E # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL N +1D616 ; NFKC_SCF; 006F # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL O +1D617 ; NFKC_SCF; 0070 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL P +1D618 ; NFKC_SCF; 0071 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q +1D619 ; NFKC_SCF; 0072 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL R +1D61A ; NFKC_SCF; 0073 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL S +1D61B ; NFKC_SCF; 0074 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL T +1D61C ; NFKC_SCF; 0075 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL U +1D61D ; NFKC_SCF; 0076 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL V +1D61E ; NFKC_SCF; 0077 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL W +1D61F ; NFKC_SCF; 0078 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL X +1D620 ; NFKC_SCF; 0079 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y +1D621 ; NFKC_SCF; 007A # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z +1D622 ; NFKC_SCF; 0061 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL A +1D623 ; NFKC_SCF; 0062 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL B +1D624 ; NFKC_SCF; 0063 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL C +1D625 ; NFKC_SCF; 0064 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL D +1D626 ; NFKC_SCF; 0065 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL E +1D627 ; NFKC_SCF; 0066 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL F +1D628 ; NFKC_SCF; 0067 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL G +1D629 ; NFKC_SCF; 0068 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL H +1D62A ; NFKC_SCF; 0069 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL I +1D62B ; NFKC_SCF; 006A # L& MATHEMATICAL SANS-SERIF ITALIC SMALL J +1D62C ; NFKC_SCF; 006B # L& MATHEMATICAL SANS-SERIF ITALIC SMALL K +1D62D ; NFKC_SCF; 006C # L& MATHEMATICAL SANS-SERIF ITALIC SMALL L +1D62E ; NFKC_SCF; 006D # L& MATHEMATICAL SANS-SERIF ITALIC SMALL M +1D62F ; NFKC_SCF; 006E # L& MATHEMATICAL SANS-SERIF ITALIC SMALL N +1D630 ; NFKC_SCF; 006F # L& MATHEMATICAL SANS-SERIF ITALIC SMALL O +1D631 ; NFKC_SCF; 0070 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL P +1D632 ; NFKC_SCF; 0071 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL Q +1D633 ; NFKC_SCF; 0072 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL R +1D634 ; NFKC_SCF; 0073 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL S +1D635 ; NFKC_SCF; 0074 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL T +1D636 ; NFKC_SCF; 0075 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL U +1D637 ; NFKC_SCF; 0076 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL V +1D638 ; NFKC_SCF; 0077 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL W +1D639 ; NFKC_SCF; 0078 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL X +1D63A ; NFKC_SCF; 0079 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL Y +1D63B ; NFKC_SCF; 007A # L& MATHEMATICAL SANS-SERIF ITALIC SMALL Z +1D63C ; NFKC_SCF; 0061 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A +1D63D ; NFKC_SCF; 0062 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B +1D63E ; NFKC_SCF; 0063 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C +1D63F ; NFKC_SCF; 0064 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D +1D640 ; NFKC_SCF; 0065 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E +1D641 ; NFKC_SCF; 0066 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F +1D642 ; NFKC_SCF; 0067 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G +1D643 ; NFKC_SCF; 0068 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H +1D644 ; NFKC_SCF; 0069 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I +1D645 ; NFKC_SCF; 006A # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J +1D646 ; NFKC_SCF; 006B # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K +1D647 ; NFKC_SCF; 006C # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L +1D648 ; NFKC_SCF; 006D # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M +1D649 ; NFKC_SCF; 006E # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N +1D64A ; NFKC_SCF; 006F # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O +1D64B ; NFKC_SCF; 0070 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P +1D64C ; NFKC_SCF; 0071 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q +1D64D ; NFKC_SCF; 0072 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R +1D64E ; NFKC_SCF; 0073 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S +1D64F ; NFKC_SCF; 0074 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T +1D650 ; NFKC_SCF; 0075 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U +1D651 ; NFKC_SCF; 0076 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V +1D652 ; NFKC_SCF; 0077 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W +1D653 ; NFKC_SCF; 0078 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X +1D654 ; NFKC_SCF; 0079 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y +1D655 ; NFKC_SCF; 007A # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z +1D656 ; NFKC_SCF; 0061 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A +1D657 ; NFKC_SCF; 0062 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B +1D658 ; NFKC_SCF; 0063 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C +1D659 ; NFKC_SCF; 0064 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D +1D65A ; NFKC_SCF; 0065 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E +1D65B ; NFKC_SCF; 0066 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F +1D65C ; NFKC_SCF; 0067 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G +1D65D ; NFKC_SCF; 0068 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H +1D65E ; NFKC_SCF; 0069 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I +1D65F ; NFKC_SCF; 006A # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J +1D660 ; NFKC_SCF; 006B # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K +1D661 ; NFKC_SCF; 006C # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L +1D662 ; NFKC_SCF; 006D # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M +1D663 ; NFKC_SCF; 006E # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N +1D664 ; NFKC_SCF; 006F # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O +1D665 ; NFKC_SCF; 0070 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P +1D666 ; NFKC_SCF; 0071 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q +1D667 ; NFKC_SCF; 0072 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R +1D668 ; NFKC_SCF; 0073 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S +1D669 ; NFKC_SCF; 0074 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T +1D66A ; NFKC_SCF; 0075 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U +1D66B ; NFKC_SCF; 0076 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V +1D66C ; NFKC_SCF; 0077 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W +1D66D ; NFKC_SCF; 0078 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X +1D66E ; NFKC_SCF; 0079 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y +1D66F ; NFKC_SCF; 007A # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z +1D670 ; NFKC_SCF; 0061 # L& MATHEMATICAL MONOSPACE CAPITAL A +1D671 ; NFKC_SCF; 0062 # L& MATHEMATICAL MONOSPACE CAPITAL B +1D672 ; NFKC_SCF; 0063 # L& MATHEMATICAL MONOSPACE CAPITAL C +1D673 ; NFKC_SCF; 0064 # L& MATHEMATICAL MONOSPACE CAPITAL D +1D674 ; NFKC_SCF; 0065 # L& MATHEMATICAL MONOSPACE CAPITAL E +1D675 ; NFKC_SCF; 0066 # L& MATHEMATICAL MONOSPACE CAPITAL F +1D676 ; NFKC_SCF; 0067 # L& MATHEMATICAL MONOSPACE CAPITAL G +1D677 ; NFKC_SCF; 0068 # L& MATHEMATICAL MONOSPACE CAPITAL H +1D678 ; NFKC_SCF; 0069 # L& MATHEMATICAL MONOSPACE CAPITAL I +1D679 ; NFKC_SCF; 006A # L& MATHEMATICAL MONOSPACE CAPITAL J +1D67A ; NFKC_SCF; 006B # L& MATHEMATICAL MONOSPACE CAPITAL K +1D67B ; NFKC_SCF; 006C # L& MATHEMATICAL MONOSPACE CAPITAL L +1D67C ; NFKC_SCF; 006D # L& MATHEMATICAL MONOSPACE CAPITAL M +1D67D ; NFKC_SCF; 006E # L& MATHEMATICAL MONOSPACE CAPITAL N +1D67E ; NFKC_SCF; 006F # L& MATHEMATICAL MONOSPACE CAPITAL O +1D67F ; NFKC_SCF; 0070 # L& MATHEMATICAL MONOSPACE CAPITAL P +1D680 ; NFKC_SCF; 0071 # L& MATHEMATICAL MONOSPACE CAPITAL Q +1D681 ; NFKC_SCF; 0072 # L& MATHEMATICAL MONOSPACE CAPITAL R +1D682 ; NFKC_SCF; 0073 # L& MATHEMATICAL MONOSPACE CAPITAL S +1D683 ; NFKC_SCF; 0074 # L& MATHEMATICAL MONOSPACE CAPITAL T +1D684 ; NFKC_SCF; 0075 # L& MATHEMATICAL MONOSPACE CAPITAL U +1D685 ; NFKC_SCF; 0076 # L& MATHEMATICAL MONOSPACE CAPITAL V +1D686 ; NFKC_SCF; 0077 # L& MATHEMATICAL MONOSPACE CAPITAL W +1D687 ; NFKC_SCF; 0078 # L& MATHEMATICAL MONOSPACE CAPITAL X +1D688 ; NFKC_SCF; 0079 # L& MATHEMATICAL MONOSPACE CAPITAL Y +1D689 ; NFKC_SCF; 007A # L& MATHEMATICAL MONOSPACE CAPITAL Z +1D68A ; NFKC_SCF; 0061 # L& MATHEMATICAL MONOSPACE SMALL A +1D68B ; NFKC_SCF; 0062 # L& MATHEMATICAL MONOSPACE SMALL B +1D68C ; NFKC_SCF; 0063 # L& MATHEMATICAL MONOSPACE SMALL C +1D68D ; NFKC_SCF; 0064 # L& MATHEMATICAL MONOSPACE SMALL D +1D68E ; NFKC_SCF; 0065 # L& MATHEMATICAL MONOSPACE SMALL E +1D68F ; NFKC_SCF; 0066 # L& MATHEMATICAL MONOSPACE SMALL F +1D690 ; NFKC_SCF; 0067 # L& MATHEMATICAL MONOSPACE SMALL G +1D691 ; NFKC_SCF; 0068 # L& MATHEMATICAL MONOSPACE SMALL H +1D692 ; NFKC_SCF; 0069 # L& MATHEMATICAL MONOSPACE SMALL I +1D693 ; NFKC_SCF; 006A # L& MATHEMATICAL MONOSPACE SMALL J +1D694 ; NFKC_SCF; 006B # L& MATHEMATICAL MONOSPACE SMALL K +1D695 ; NFKC_SCF; 006C # L& MATHEMATICAL MONOSPACE SMALL L +1D696 ; NFKC_SCF; 006D # L& MATHEMATICAL MONOSPACE SMALL M +1D697 ; NFKC_SCF; 006E # L& MATHEMATICAL MONOSPACE SMALL N +1D698 ; NFKC_SCF; 006F # L& MATHEMATICAL MONOSPACE SMALL O +1D699 ; NFKC_SCF; 0070 # L& MATHEMATICAL MONOSPACE SMALL P +1D69A ; NFKC_SCF; 0071 # L& MATHEMATICAL MONOSPACE SMALL Q +1D69B ; NFKC_SCF; 0072 # L& MATHEMATICAL MONOSPACE SMALL R +1D69C ; NFKC_SCF; 0073 # L& MATHEMATICAL MONOSPACE SMALL S +1D69D ; NFKC_SCF; 0074 # L& MATHEMATICAL MONOSPACE SMALL T +1D69E ; NFKC_SCF; 0075 # L& MATHEMATICAL MONOSPACE SMALL U +1D69F ; NFKC_SCF; 0076 # L& MATHEMATICAL MONOSPACE SMALL V +1D6A0 ; NFKC_SCF; 0077 # L& MATHEMATICAL MONOSPACE SMALL W +1D6A1 ; NFKC_SCF; 0078 # L& MATHEMATICAL MONOSPACE SMALL X +1D6A2 ; NFKC_SCF; 0079 # L& MATHEMATICAL MONOSPACE SMALL Y +1D6A3 ; NFKC_SCF; 007A # L& MATHEMATICAL MONOSPACE SMALL Z +1D6A4 ; NFKC_SCF; 0131 # L& MATHEMATICAL ITALIC SMALL DOTLESS I +1D6A5 ; NFKC_SCF; 0237 # L& MATHEMATICAL ITALIC SMALL DOTLESS J +1D6A8 ; NFKC_SCF; 03B1 # L& MATHEMATICAL BOLD CAPITAL ALPHA +1D6A9 ; NFKC_SCF; 03B2 # L& MATHEMATICAL BOLD CAPITAL BETA +1D6AA ; NFKC_SCF; 03B3 # L& MATHEMATICAL BOLD CAPITAL GAMMA +1D6AB ; NFKC_SCF; 03B4 # L& MATHEMATICAL BOLD CAPITAL DELTA +1D6AC ; NFKC_SCF; 03B5 # L& MATHEMATICAL BOLD CAPITAL EPSILON +1D6AD ; NFKC_SCF; 03B6 # L& MATHEMATICAL BOLD CAPITAL ZETA +1D6AE ; NFKC_SCF; 03B7 # L& MATHEMATICAL BOLD CAPITAL ETA +1D6AF ; NFKC_SCF; 03B8 # L& MATHEMATICAL BOLD CAPITAL THETA +1D6B0 ; NFKC_SCF; 03B9 # L& MATHEMATICAL BOLD CAPITAL IOTA +1D6B1 ; NFKC_SCF; 03BA # L& MATHEMATICAL BOLD CAPITAL KAPPA +1D6B2 ; NFKC_SCF; 03BB # L& MATHEMATICAL BOLD CAPITAL LAMDA +1D6B3 ; NFKC_SCF; 03BC # L& MATHEMATICAL BOLD CAPITAL MU +1D6B4 ; NFKC_SCF; 03BD # L& MATHEMATICAL BOLD CAPITAL NU +1D6B5 ; NFKC_SCF; 03BE # L& MATHEMATICAL BOLD CAPITAL XI +1D6B6 ; NFKC_SCF; 03BF # L& MATHEMATICAL BOLD CAPITAL OMICRON +1D6B7 ; NFKC_SCF; 03C0 # L& MATHEMATICAL BOLD CAPITAL PI +1D6B8 ; NFKC_SCF; 03C1 # L& MATHEMATICAL BOLD CAPITAL RHO +1D6B9 ; NFKC_SCF; 03B8 # L& MATHEMATICAL BOLD CAPITAL THETA SYMBOL +1D6BA ; NFKC_SCF; 03C3 # L& MATHEMATICAL BOLD CAPITAL SIGMA +1D6BB ; NFKC_SCF; 03C4 # L& MATHEMATICAL BOLD CAPITAL TAU +1D6BC ; NFKC_SCF; 03C5 # L& MATHEMATICAL BOLD CAPITAL UPSILON +1D6BD ; NFKC_SCF; 03C6 # L& MATHEMATICAL BOLD CAPITAL PHI +1D6BE ; NFKC_SCF; 03C7 # L& MATHEMATICAL BOLD CAPITAL CHI +1D6BF ; NFKC_SCF; 03C8 # L& MATHEMATICAL BOLD CAPITAL PSI +1D6C0 ; NFKC_SCF; 03C9 # L& MATHEMATICAL BOLD CAPITAL OMEGA +1D6C1 ; NFKC_SCF; 2207 # Sm MATHEMATICAL BOLD NABLA +1D6C2 ; NFKC_SCF; 03B1 # L& MATHEMATICAL BOLD SMALL ALPHA +1D6C3 ; NFKC_SCF; 03B2 # L& MATHEMATICAL BOLD SMALL BETA +1D6C4 ; NFKC_SCF; 03B3 # L& MATHEMATICAL BOLD SMALL GAMMA +1D6C5 ; NFKC_SCF; 03B4 # L& MATHEMATICAL BOLD SMALL DELTA +1D6C6 ; NFKC_SCF; 03B5 # L& MATHEMATICAL BOLD SMALL EPSILON +1D6C7 ; NFKC_SCF; 03B6 # L& MATHEMATICAL BOLD SMALL ZETA +1D6C8 ; NFKC_SCF; 03B7 # L& MATHEMATICAL BOLD SMALL ETA +1D6C9 ; NFKC_SCF; 03B8 # L& MATHEMATICAL BOLD SMALL THETA +1D6CA ; NFKC_SCF; 03B9 # L& MATHEMATICAL BOLD SMALL IOTA +1D6CB ; NFKC_SCF; 03BA # L& MATHEMATICAL BOLD SMALL KAPPA +1D6CC ; NFKC_SCF; 03BB # L& MATHEMATICAL BOLD SMALL LAMDA +1D6CD ; NFKC_SCF; 03BC # L& MATHEMATICAL BOLD SMALL MU +1D6CE ; NFKC_SCF; 03BD # L& MATHEMATICAL BOLD SMALL NU +1D6CF ; NFKC_SCF; 03BE # L& MATHEMATICAL BOLD SMALL XI +1D6D0 ; NFKC_SCF; 03BF # L& MATHEMATICAL BOLD SMALL OMICRON +1D6D1 ; NFKC_SCF; 03C0 # L& MATHEMATICAL BOLD SMALL PI +1D6D2 ; NFKC_SCF; 03C1 # L& MATHEMATICAL BOLD SMALL RHO +1D6D3..1D6D4 ; NFKC_SCF; 03C3 # L& [2] MATHEMATICAL BOLD SMALL FINAL SIGMA..MATHEMATICAL BOLD SMALL SIGMA +1D6D5 ; NFKC_SCF; 03C4 # L& MATHEMATICAL BOLD SMALL TAU +1D6D6 ; NFKC_SCF; 03C5 # L& MATHEMATICAL BOLD SMALL UPSILON +1D6D7 ; NFKC_SCF; 03C6 # L& MATHEMATICAL BOLD SMALL PHI +1D6D8 ; NFKC_SCF; 03C7 # L& MATHEMATICAL BOLD SMALL CHI +1D6D9 ; NFKC_SCF; 03C8 # L& MATHEMATICAL BOLD SMALL PSI +1D6DA ; NFKC_SCF; 03C9 # L& MATHEMATICAL BOLD SMALL OMEGA +1D6DB ; NFKC_SCF; 2202 # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL +1D6DC ; NFKC_SCF; 03B5 # L& MATHEMATICAL BOLD EPSILON SYMBOL +1D6DD ; NFKC_SCF; 03B8 # L& MATHEMATICAL BOLD THETA SYMBOL +1D6DE ; NFKC_SCF; 03BA # L& MATHEMATICAL BOLD KAPPA SYMBOL +1D6DF ; NFKC_SCF; 03C6 # L& MATHEMATICAL BOLD PHI SYMBOL +1D6E0 ; NFKC_SCF; 03C1 # L& MATHEMATICAL BOLD RHO SYMBOL +1D6E1 ; NFKC_SCF; 03C0 # L& MATHEMATICAL BOLD PI SYMBOL +1D6E2 ; NFKC_SCF; 03B1 # L& MATHEMATICAL ITALIC CAPITAL ALPHA +1D6E3 ; NFKC_SCF; 03B2 # L& MATHEMATICAL ITALIC CAPITAL BETA +1D6E4 ; NFKC_SCF; 03B3 # L& MATHEMATICAL ITALIC CAPITAL GAMMA +1D6E5 ; NFKC_SCF; 03B4 # L& MATHEMATICAL ITALIC CAPITAL DELTA +1D6E6 ; NFKC_SCF; 03B5 # L& MATHEMATICAL ITALIC CAPITAL EPSILON +1D6E7 ; NFKC_SCF; 03B6 # L& MATHEMATICAL ITALIC CAPITAL ZETA +1D6E8 ; NFKC_SCF; 03B7 # L& MATHEMATICAL ITALIC CAPITAL ETA +1D6E9 ; NFKC_SCF; 03B8 # L& MATHEMATICAL ITALIC CAPITAL THETA +1D6EA ; NFKC_SCF; 03B9 # L& MATHEMATICAL ITALIC CAPITAL IOTA +1D6EB ; NFKC_SCF; 03BA # L& MATHEMATICAL ITALIC CAPITAL KAPPA +1D6EC ; NFKC_SCF; 03BB # L& MATHEMATICAL ITALIC CAPITAL LAMDA +1D6ED ; NFKC_SCF; 03BC # L& MATHEMATICAL ITALIC CAPITAL MU +1D6EE ; NFKC_SCF; 03BD # L& MATHEMATICAL ITALIC CAPITAL NU +1D6EF ; NFKC_SCF; 03BE # L& MATHEMATICAL ITALIC CAPITAL XI +1D6F0 ; NFKC_SCF; 03BF # L& MATHEMATICAL ITALIC CAPITAL OMICRON +1D6F1 ; NFKC_SCF; 03C0 # L& MATHEMATICAL ITALIC CAPITAL PI +1D6F2 ; NFKC_SCF; 03C1 # L& MATHEMATICAL ITALIC CAPITAL RHO +1D6F3 ; NFKC_SCF; 03B8 # L& MATHEMATICAL ITALIC CAPITAL THETA SYMBOL +1D6F4 ; NFKC_SCF; 03C3 # L& MATHEMATICAL ITALIC CAPITAL SIGMA +1D6F5 ; NFKC_SCF; 03C4 # L& MATHEMATICAL ITALIC CAPITAL TAU +1D6F6 ; NFKC_SCF; 03C5 # L& MATHEMATICAL ITALIC CAPITAL UPSILON +1D6F7 ; NFKC_SCF; 03C6 # L& MATHEMATICAL ITALIC CAPITAL PHI +1D6F8 ; NFKC_SCF; 03C7 # L& MATHEMATICAL ITALIC CAPITAL CHI +1D6F9 ; NFKC_SCF; 03C8 # L& MATHEMATICAL ITALIC CAPITAL PSI +1D6FA ; NFKC_SCF; 03C9 # L& MATHEMATICAL ITALIC CAPITAL OMEGA +1D6FB ; NFKC_SCF; 2207 # Sm MATHEMATICAL ITALIC NABLA +1D6FC ; NFKC_SCF; 03B1 # L& MATHEMATICAL ITALIC SMALL ALPHA +1D6FD ; NFKC_SCF; 03B2 # L& MATHEMATICAL ITALIC SMALL BETA +1D6FE ; NFKC_SCF; 03B3 # L& MATHEMATICAL ITALIC SMALL GAMMA +1D6FF ; NFKC_SCF; 03B4 # L& MATHEMATICAL ITALIC SMALL DELTA +1D700 ; NFKC_SCF; 03B5 # L& MATHEMATICAL ITALIC SMALL EPSILON +1D701 ; NFKC_SCF; 03B6 # L& MATHEMATICAL ITALIC SMALL ZETA +1D702 ; NFKC_SCF; 03B7 # L& MATHEMATICAL ITALIC SMALL ETA +1D703 ; NFKC_SCF; 03B8 # L& MATHEMATICAL ITALIC SMALL THETA +1D704 ; NFKC_SCF; 03B9 # L& MATHEMATICAL ITALIC SMALL IOTA +1D705 ; NFKC_SCF; 03BA # L& MATHEMATICAL ITALIC SMALL KAPPA +1D706 ; NFKC_SCF; 03BB # L& MATHEMATICAL ITALIC SMALL LAMDA +1D707 ; NFKC_SCF; 03BC # L& MATHEMATICAL ITALIC SMALL MU +1D708 ; NFKC_SCF; 03BD # L& MATHEMATICAL ITALIC SMALL NU +1D709 ; NFKC_SCF; 03BE # L& MATHEMATICAL ITALIC SMALL XI +1D70A ; NFKC_SCF; 03BF # L& MATHEMATICAL ITALIC SMALL OMICRON +1D70B ; NFKC_SCF; 03C0 # L& MATHEMATICAL ITALIC SMALL PI +1D70C ; NFKC_SCF; 03C1 # L& MATHEMATICAL ITALIC SMALL RHO +1D70D..1D70E ; NFKC_SCF; 03C3 # L& [2] MATHEMATICAL ITALIC SMALL FINAL SIGMA..MATHEMATICAL ITALIC SMALL SIGMA +1D70F ; NFKC_SCF; 03C4 # L& MATHEMATICAL ITALIC SMALL TAU +1D710 ; NFKC_SCF; 03C5 # L& MATHEMATICAL ITALIC SMALL UPSILON +1D711 ; NFKC_SCF; 03C6 # L& MATHEMATICAL ITALIC SMALL PHI +1D712 ; NFKC_SCF; 03C7 # L& MATHEMATICAL ITALIC SMALL CHI +1D713 ; NFKC_SCF; 03C8 # L& MATHEMATICAL ITALIC SMALL PSI +1D714 ; NFKC_SCF; 03C9 # L& MATHEMATICAL ITALIC SMALL OMEGA +1D715 ; NFKC_SCF; 2202 # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL +1D716 ; NFKC_SCF; 03B5 # L& MATHEMATICAL ITALIC EPSILON SYMBOL +1D717 ; NFKC_SCF; 03B8 # L& MATHEMATICAL ITALIC THETA SYMBOL +1D718 ; NFKC_SCF; 03BA # L& MATHEMATICAL ITALIC KAPPA SYMBOL +1D719 ; NFKC_SCF; 03C6 # L& MATHEMATICAL ITALIC PHI SYMBOL +1D71A ; NFKC_SCF; 03C1 # L& MATHEMATICAL ITALIC RHO SYMBOL +1D71B ; NFKC_SCF; 03C0 # L& MATHEMATICAL ITALIC PI SYMBOL +1D71C ; NFKC_SCF; 03B1 # L& MATHEMATICAL BOLD ITALIC CAPITAL ALPHA +1D71D ; NFKC_SCF; 03B2 # L& MATHEMATICAL BOLD ITALIC CAPITAL BETA +1D71E ; NFKC_SCF; 03B3 # L& MATHEMATICAL BOLD ITALIC CAPITAL GAMMA +1D71F ; NFKC_SCF; 03B4 # L& MATHEMATICAL BOLD ITALIC CAPITAL DELTA +1D720 ; NFKC_SCF; 03B5 # L& MATHEMATICAL BOLD ITALIC CAPITAL EPSILON +1D721 ; NFKC_SCF; 03B6 # L& MATHEMATICAL BOLD ITALIC CAPITAL ZETA +1D722 ; NFKC_SCF; 03B7 # L& MATHEMATICAL BOLD ITALIC CAPITAL ETA +1D723 ; NFKC_SCF; 03B8 # L& MATHEMATICAL BOLD ITALIC CAPITAL THETA +1D724 ; NFKC_SCF; 03B9 # L& MATHEMATICAL BOLD ITALIC CAPITAL IOTA +1D725 ; NFKC_SCF; 03BA # L& MATHEMATICAL BOLD ITALIC CAPITAL KAPPA +1D726 ; NFKC_SCF; 03BB # L& MATHEMATICAL BOLD ITALIC CAPITAL LAMDA +1D727 ; NFKC_SCF; 03BC # L& MATHEMATICAL BOLD ITALIC CAPITAL MU +1D728 ; NFKC_SCF; 03BD # L& MATHEMATICAL BOLD ITALIC CAPITAL NU +1D729 ; NFKC_SCF; 03BE # L& MATHEMATICAL BOLD ITALIC CAPITAL XI +1D72A ; NFKC_SCF; 03BF # L& MATHEMATICAL BOLD ITALIC CAPITAL OMICRON +1D72B ; NFKC_SCF; 03C0 # L& MATHEMATICAL BOLD ITALIC CAPITAL PI +1D72C ; NFKC_SCF; 03C1 # L& MATHEMATICAL BOLD ITALIC CAPITAL RHO +1D72D ; NFKC_SCF; 03B8 # L& MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL +1D72E ; NFKC_SCF; 03C3 # L& MATHEMATICAL BOLD ITALIC CAPITAL SIGMA +1D72F ; NFKC_SCF; 03C4 # L& MATHEMATICAL BOLD ITALIC CAPITAL TAU +1D730 ; NFKC_SCF; 03C5 # L& MATHEMATICAL BOLD ITALIC CAPITAL UPSILON +1D731 ; NFKC_SCF; 03C6 # L& MATHEMATICAL BOLD ITALIC CAPITAL PHI +1D732 ; NFKC_SCF; 03C7 # L& MATHEMATICAL BOLD ITALIC CAPITAL CHI +1D733 ; NFKC_SCF; 03C8 # L& MATHEMATICAL BOLD ITALIC CAPITAL PSI +1D734 ; NFKC_SCF; 03C9 # L& MATHEMATICAL BOLD ITALIC CAPITAL OMEGA +1D735 ; NFKC_SCF; 2207 # Sm MATHEMATICAL BOLD ITALIC NABLA +1D736 ; NFKC_SCF; 03B1 # L& MATHEMATICAL BOLD ITALIC SMALL ALPHA +1D737 ; NFKC_SCF; 03B2 # L& MATHEMATICAL BOLD ITALIC SMALL BETA +1D738 ; NFKC_SCF; 03B3 # L& MATHEMATICAL BOLD ITALIC SMALL GAMMA +1D739 ; NFKC_SCF; 03B4 # L& MATHEMATICAL BOLD ITALIC SMALL DELTA +1D73A ; NFKC_SCF; 03B5 # L& MATHEMATICAL BOLD ITALIC SMALL EPSILON +1D73B ; NFKC_SCF; 03B6 # L& MATHEMATICAL BOLD ITALIC SMALL ZETA +1D73C ; NFKC_SCF; 03B7 # L& MATHEMATICAL BOLD ITALIC SMALL ETA +1D73D ; NFKC_SCF; 03B8 # L& MATHEMATICAL BOLD ITALIC SMALL THETA +1D73E ; NFKC_SCF; 03B9 # L& MATHEMATICAL BOLD ITALIC SMALL IOTA +1D73F ; NFKC_SCF; 03BA # L& MATHEMATICAL BOLD ITALIC SMALL KAPPA +1D740 ; NFKC_SCF; 03BB # L& MATHEMATICAL BOLD ITALIC SMALL LAMDA +1D741 ; NFKC_SCF; 03BC # L& MATHEMATICAL BOLD ITALIC SMALL MU +1D742 ; NFKC_SCF; 03BD # L& MATHEMATICAL BOLD ITALIC SMALL NU +1D743 ; NFKC_SCF; 03BE # L& MATHEMATICAL BOLD ITALIC SMALL XI +1D744 ; NFKC_SCF; 03BF # L& MATHEMATICAL BOLD ITALIC SMALL OMICRON +1D745 ; NFKC_SCF; 03C0 # L& MATHEMATICAL BOLD ITALIC SMALL PI +1D746 ; NFKC_SCF; 03C1 # L& MATHEMATICAL BOLD ITALIC SMALL RHO +1D747..1D748 ; NFKC_SCF; 03C3 # L& [2] MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA..MATHEMATICAL BOLD ITALIC SMALL SIGMA +1D749 ; NFKC_SCF; 03C4 # L& MATHEMATICAL BOLD ITALIC SMALL TAU +1D74A ; NFKC_SCF; 03C5 # L& MATHEMATICAL BOLD ITALIC SMALL UPSILON +1D74B ; NFKC_SCF; 03C6 # L& MATHEMATICAL BOLD ITALIC SMALL PHI +1D74C ; NFKC_SCF; 03C7 # L& MATHEMATICAL BOLD ITALIC SMALL CHI +1D74D ; NFKC_SCF; 03C8 # L& MATHEMATICAL BOLD ITALIC SMALL PSI +1D74E ; NFKC_SCF; 03C9 # L& MATHEMATICAL BOLD ITALIC SMALL OMEGA +1D74F ; NFKC_SCF; 2202 # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL +1D750 ; NFKC_SCF; 03B5 # L& MATHEMATICAL BOLD ITALIC EPSILON SYMBOL +1D751 ; NFKC_SCF; 03B8 # L& MATHEMATICAL BOLD ITALIC THETA SYMBOL +1D752 ; NFKC_SCF; 03BA # L& MATHEMATICAL BOLD ITALIC KAPPA SYMBOL +1D753 ; NFKC_SCF; 03C6 # L& MATHEMATICAL BOLD ITALIC PHI SYMBOL +1D754 ; NFKC_SCF; 03C1 # L& MATHEMATICAL BOLD ITALIC RHO SYMBOL +1D755 ; NFKC_SCF; 03C0 # L& MATHEMATICAL BOLD ITALIC PI SYMBOL +1D756 ; NFKC_SCF; 03B1 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA +1D757 ; NFKC_SCF; 03B2 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA +1D758 ; NFKC_SCF; 03B3 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA +1D759 ; NFKC_SCF; 03B4 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA +1D75A ; NFKC_SCF; 03B5 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON +1D75B ; NFKC_SCF; 03B6 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA +1D75C ; NFKC_SCF; 03B7 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA +1D75D ; NFKC_SCF; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA +1D75E ; NFKC_SCF; 03B9 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA +1D75F ; NFKC_SCF; 03BA # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA +1D760 ; NFKC_SCF; 03BB # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA +1D761 ; NFKC_SCF; 03BC # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL MU +1D762 ; NFKC_SCF; 03BD # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL NU +1D763 ; NFKC_SCF; 03BE # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL XI +1D764 ; NFKC_SCF; 03BF # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON +1D765 ; NFKC_SCF; 03C0 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL PI +1D766 ; NFKC_SCF; 03C1 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO +1D767 ; NFKC_SCF; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL +1D768 ; NFKC_SCF; 03C3 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA +1D769 ; NFKC_SCF; 03C4 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU +1D76A ; NFKC_SCF; 03C5 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON +1D76B ; NFKC_SCF; 03C6 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI +1D76C ; NFKC_SCF; 03C7 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI +1D76D ; NFKC_SCF; 03C8 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI +1D76E ; NFKC_SCF; 03C9 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA +1D76F ; NFKC_SCF; 2207 # Sm MATHEMATICAL SANS-SERIF BOLD NABLA +1D770 ; NFKC_SCF; 03B1 # L& MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA +1D771 ; NFKC_SCF; 03B2 # L& MATHEMATICAL SANS-SERIF BOLD SMALL BETA +1D772 ; NFKC_SCF; 03B3 # L& MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA +1D773 ; NFKC_SCF; 03B4 # L& MATHEMATICAL SANS-SERIF BOLD SMALL DELTA +1D774 ; NFKC_SCF; 03B5 # L& MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON +1D775 ; NFKC_SCF; 03B6 # L& MATHEMATICAL SANS-SERIF BOLD SMALL ZETA +1D776 ; NFKC_SCF; 03B7 # L& MATHEMATICAL SANS-SERIF BOLD SMALL ETA +1D777 ; NFKC_SCF; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD SMALL THETA +1D778 ; NFKC_SCF; 03B9 # L& MATHEMATICAL SANS-SERIF BOLD SMALL IOTA +1D779 ; NFKC_SCF; 03BA # L& MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA +1D77A ; NFKC_SCF; 03BB # L& MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA +1D77B ; NFKC_SCF; 03BC # L& MATHEMATICAL SANS-SERIF BOLD SMALL MU +1D77C ; NFKC_SCF; 03BD # L& MATHEMATICAL SANS-SERIF BOLD SMALL NU +1D77D ; NFKC_SCF; 03BE # L& MATHEMATICAL SANS-SERIF BOLD SMALL XI +1D77E ; NFKC_SCF; 03BF # L& MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON +1D77F ; NFKC_SCF; 03C0 # L& MATHEMATICAL SANS-SERIF BOLD SMALL PI +1D780 ; NFKC_SCF; 03C1 # L& MATHEMATICAL SANS-SERIF BOLD SMALL RHO +1D781..1D782 ; NFKC_SCF; 03C3 # L& [2] MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA..MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA +1D783 ; NFKC_SCF; 03C4 # L& MATHEMATICAL SANS-SERIF BOLD SMALL TAU +1D784 ; NFKC_SCF; 03C5 # L& MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON +1D785 ; NFKC_SCF; 03C6 # L& MATHEMATICAL SANS-SERIF BOLD SMALL PHI +1D786 ; NFKC_SCF; 03C7 # L& MATHEMATICAL SANS-SERIF BOLD SMALL CHI +1D787 ; NFKC_SCF; 03C8 # L& MATHEMATICAL SANS-SERIF BOLD SMALL PSI +1D788 ; NFKC_SCF; 03C9 # L& MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA +1D789 ; NFKC_SCF; 2202 # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL +1D78A ; NFKC_SCF; 03B5 # L& MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL +1D78B ; NFKC_SCF; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL +1D78C ; NFKC_SCF; 03BA # L& MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL +1D78D ; NFKC_SCF; 03C6 # L& MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL +1D78E ; NFKC_SCF; 03C1 # L& MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL +1D78F ; NFKC_SCF; 03C0 # L& MATHEMATICAL SANS-SERIF BOLD PI SYMBOL +1D790 ; NFKC_SCF; 03B1 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA +1D791 ; NFKC_SCF; 03B2 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA +1D792 ; NFKC_SCF; 03B3 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA +1D793 ; NFKC_SCF; 03B4 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA +1D794 ; NFKC_SCF; 03B5 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON +1D795 ; NFKC_SCF; 03B6 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA +1D796 ; NFKC_SCF; 03B7 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA +1D797 ; NFKC_SCF; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA +1D798 ; NFKC_SCF; 03B9 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA +1D799 ; NFKC_SCF; 03BA # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA +1D79A ; NFKC_SCF; 03BB # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA +1D79B ; NFKC_SCF; 03BC # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU +1D79C ; NFKC_SCF; 03BD # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU +1D79D ; NFKC_SCF; 03BE # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI +1D79E ; NFKC_SCF; 03BF # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON +1D79F ; NFKC_SCF; 03C0 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI +1D7A0 ; NFKC_SCF; 03C1 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO +1D7A1 ; NFKC_SCF; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL +1D7A2 ; NFKC_SCF; 03C3 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA +1D7A3 ; NFKC_SCF; 03C4 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU +1D7A4 ; NFKC_SCF; 03C5 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON +1D7A5 ; NFKC_SCF; 03C6 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI +1D7A6 ; NFKC_SCF; 03C7 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI +1D7A7 ; NFKC_SCF; 03C8 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI +1D7A8 ; NFKC_SCF; 03C9 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA +1D7A9 ; NFKC_SCF; 2207 # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA +1D7AA ; NFKC_SCF; 03B1 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA +1D7AB ; NFKC_SCF; 03B2 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA +1D7AC ; NFKC_SCF; 03B3 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA +1D7AD ; NFKC_SCF; 03B4 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA +1D7AE ; NFKC_SCF; 03B5 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON +1D7AF ; NFKC_SCF; 03B6 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA +1D7B0 ; NFKC_SCF; 03B7 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA +1D7B1 ; NFKC_SCF; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA +1D7B2 ; NFKC_SCF; 03B9 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA +1D7B3 ; NFKC_SCF; 03BA # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA +1D7B4 ; NFKC_SCF; 03BB # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA +1D7B5 ; NFKC_SCF; 03BC # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU +1D7B6 ; NFKC_SCF; 03BD # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU +1D7B7 ; NFKC_SCF; 03BE # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI +1D7B8 ; NFKC_SCF; 03BF # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON +1D7B9 ; NFKC_SCF; 03C0 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI +1D7BA ; NFKC_SCF; 03C1 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO +1D7BB..1D7BC ; NFKC_SCF; 03C3 # L& [2] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA +1D7BD ; NFKC_SCF; 03C4 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU +1D7BE ; NFKC_SCF; 03C5 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON +1D7BF ; NFKC_SCF; 03C6 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI +1D7C0 ; NFKC_SCF; 03C7 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI +1D7C1 ; NFKC_SCF; 03C8 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI +1D7C2 ; NFKC_SCF; 03C9 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA +1D7C3 ; NFKC_SCF; 2202 # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL +1D7C4 ; NFKC_SCF; 03B5 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL +1D7C5 ; NFKC_SCF; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL +1D7C6 ; NFKC_SCF; 03BA # L& MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL +1D7C7 ; NFKC_SCF; 03C6 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL +1D7C8 ; NFKC_SCF; 03C1 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL +1D7C9 ; NFKC_SCF; 03C0 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL +1D7CA..1D7CB ; NFKC_SCF; 03DD # L& [2] MATHEMATICAL BOLD CAPITAL DIGAMMA..MATHEMATICAL BOLD SMALL DIGAMMA +1D7CE ; NFKC_SCF; 0030 # Nd MATHEMATICAL BOLD DIGIT ZERO +1D7CF ; NFKC_SCF; 0031 # Nd MATHEMATICAL BOLD DIGIT ONE +1D7D0 ; NFKC_SCF; 0032 # Nd MATHEMATICAL BOLD DIGIT TWO +1D7D1 ; NFKC_SCF; 0033 # Nd MATHEMATICAL BOLD DIGIT THREE +1D7D2 ; NFKC_SCF; 0034 # Nd MATHEMATICAL BOLD DIGIT FOUR +1D7D3 ; NFKC_SCF; 0035 # Nd MATHEMATICAL BOLD DIGIT FIVE +1D7D4 ; NFKC_SCF; 0036 # Nd MATHEMATICAL BOLD DIGIT SIX +1D7D5 ; NFKC_SCF; 0037 # Nd MATHEMATICAL BOLD DIGIT SEVEN +1D7D6 ; NFKC_SCF; 0038 # Nd MATHEMATICAL BOLD DIGIT EIGHT +1D7D7 ; NFKC_SCF; 0039 # Nd MATHEMATICAL BOLD DIGIT NINE +1D7D8 ; NFKC_SCF; 0030 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO +1D7D9 ; NFKC_SCF; 0031 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT ONE +1D7DA ; NFKC_SCF; 0032 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT TWO +1D7DB ; NFKC_SCF; 0033 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT THREE +1D7DC ; NFKC_SCF; 0034 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR +1D7DD ; NFKC_SCF; 0035 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE +1D7DE ; NFKC_SCF; 0036 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT SIX +1D7DF ; NFKC_SCF; 0037 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN +1D7E0 ; NFKC_SCF; 0038 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT +1D7E1 ; NFKC_SCF; 0039 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT NINE +1D7E2 ; NFKC_SCF; 0030 # Nd MATHEMATICAL SANS-SERIF DIGIT ZERO +1D7E3 ; NFKC_SCF; 0031 # Nd MATHEMATICAL SANS-SERIF DIGIT ONE +1D7E4 ; NFKC_SCF; 0032 # Nd MATHEMATICAL SANS-SERIF DIGIT TWO +1D7E5 ; NFKC_SCF; 0033 # Nd MATHEMATICAL SANS-SERIF DIGIT THREE +1D7E6 ; NFKC_SCF; 0034 # Nd MATHEMATICAL SANS-SERIF DIGIT FOUR +1D7E7 ; NFKC_SCF; 0035 # Nd MATHEMATICAL SANS-SERIF DIGIT FIVE +1D7E8 ; NFKC_SCF; 0036 # Nd MATHEMATICAL SANS-SERIF DIGIT SIX +1D7E9 ; NFKC_SCF; 0037 # Nd MATHEMATICAL SANS-SERIF DIGIT SEVEN +1D7EA ; NFKC_SCF; 0038 # Nd MATHEMATICAL SANS-SERIF DIGIT EIGHT +1D7EB ; NFKC_SCF; 0039 # Nd MATHEMATICAL SANS-SERIF DIGIT NINE +1D7EC ; NFKC_SCF; 0030 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO +1D7ED ; NFKC_SCF; 0031 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT ONE +1D7EE ; NFKC_SCF; 0032 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT TWO +1D7EF ; NFKC_SCF; 0033 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT THREE +1D7F0 ; NFKC_SCF; 0034 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR +1D7F1 ; NFKC_SCF; 0035 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE +1D7F2 ; NFKC_SCF; 0036 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT SIX +1D7F3 ; NFKC_SCF; 0037 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN +1D7F4 ; NFKC_SCF; 0038 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT +1D7F5 ; NFKC_SCF; 0039 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT NINE +1D7F6 ; NFKC_SCF; 0030 # Nd MATHEMATICAL MONOSPACE DIGIT ZERO +1D7F7 ; NFKC_SCF; 0031 # Nd MATHEMATICAL MONOSPACE DIGIT ONE +1D7F8 ; NFKC_SCF; 0032 # Nd MATHEMATICAL MONOSPACE DIGIT TWO +1D7F9 ; NFKC_SCF; 0033 # Nd MATHEMATICAL MONOSPACE DIGIT THREE +1D7FA ; NFKC_SCF; 0034 # Nd MATHEMATICAL MONOSPACE DIGIT FOUR +1D7FB ; NFKC_SCF; 0035 # Nd MATHEMATICAL MONOSPACE DIGIT FIVE +1D7FC ; NFKC_SCF; 0036 # Nd MATHEMATICAL MONOSPACE DIGIT SIX +1D7FD ; NFKC_SCF; 0037 # Nd MATHEMATICAL MONOSPACE DIGIT SEVEN +1D7FE ; NFKC_SCF; 0038 # Nd MATHEMATICAL MONOSPACE DIGIT EIGHT +1D7FF ; NFKC_SCF; 0039 # Nd MATHEMATICAL MONOSPACE DIGIT NINE +1E030 ; NFKC_SCF; 0430 # Lm MODIFIER LETTER CYRILLIC SMALL A +1E031 ; NFKC_SCF; 0431 # Lm MODIFIER LETTER CYRILLIC SMALL BE +1E032 ; NFKC_SCF; 0432 # Lm MODIFIER LETTER CYRILLIC SMALL VE +1E033 ; NFKC_SCF; 0433 # Lm MODIFIER LETTER CYRILLIC SMALL GHE +1E034 ; NFKC_SCF; 0434 # Lm MODIFIER LETTER CYRILLIC SMALL DE +1E035 ; NFKC_SCF; 0435 # Lm MODIFIER LETTER CYRILLIC SMALL IE +1E036 ; NFKC_SCF; 0436 # Lm MODIFIER LETTER CYRILLIC SMALL ZHE +1E037 ; NFKC_SCF; 0437 # Lm MODIFIER LETTER CYRILLIC SMALL ZE +1E038 ; NFKC_SCF; 0438 # Lm MODIFIER LETTER CYRILLIC SMALL I +1E039 ; NFKC_SCF; 043A # Lm MODIFIER LETTER CYRILLIC SMALL KA +1E03A ; NFKC_SCF; 043B # Lm MODIFIER LETTER CYRILLIC SMALL EL +1E03B ; NFKC_SCF; 043C # Lm MODIFIER LETTER CYRILLIC SMALL EM +1E03C ; NFKC_SCF; 043E # Lm MODIFIER LETTER CYRILLIC SMALL O +1E03D ; NFKC_SCF; 043F # Lm MODIFIER LETTER CYRILLIC SMALL PE +1E03E ; NFKC_SCF; 0440 # Lm MODIFIER LETTER CYRILLIC SMALL ER +1E03F ; NFKC_SCF; 0441 # Lm MODIFIER LETTER CYRILLIC SMALL ES +1E040 ; NFKC_SCF; 0442 # Lm MODIFIER LETTER CYRILLIC SMALL TE +1E041 ; NFKC_SCF; 0443 # Lm MODIFIER LETTER CYRILLIC SMALL U +1E042 ; NFKC_SCF; 0444 # Lm MODIFIER LETTER CYRILLIC SMALL EF +1E043 ; NFKC_SCF; 0445 # Lm MODIFIER LETTER CYRILLIC SMALL HA +1E044 ; NFKC_SCF; 0446 # Lm MODIFIER LETTER CYRILLIC SMALL TSE +1E045 ; NFKC_SCF; 0447 # Lm MODIFIER LETTER CYRILLIC SMALL CHE +1E046 ; NFKC_SCF; 0448 # Lm MODIFIER LETTER CYRILLIC SMALL SHA +1E047 ; NFKC_SCF; 044B # Lm MODIFIER LETTER CYRILLIC SMALL YERU +1E048 ; NFKC_SCF; 044D # Lm MODIFIER LETTER CYRILLIC SMALL E +1E049 ; NFKC_SCF; 044E # Lm MODIFIER LETTER CYRILLIC SMALL YU +1E04A ; NFKC_SCF; A689 # Lm MODIFIER LETTER CYRILLIC SMALL DZZE +1E04B ; NFKC_SCF; 04D9 # Lm MODIFIER LETTER CYRILLIC SMALL SCHWA +1E04C ; NFKC_SCF; 0456 # Lm MODIFIER LETTER CYRILLIC SMALL BYELORUSSIAN-UKRAINIAN I +1E04D ; NFKC_SCF; 0458 # Lm MODIFIER LETTER CYRILLIC SMALL JE +1E04E ; NFKC_SCF; 04E9 # Lm MODIFIER LETTER CYRILLIC SMALL BARRED O +1E04F ; NFKC_SCF; 04AF # Lm MODIFIER LETTER CYRILLIC SMALL STRAIGHT U +1E050 ; NFKC_SCF; 04CF # Lm MODIFIER LETTER CYRILLIC SMALL PALOCHKA +1E051 ; NFKC_SCF; 0430 # Lm CYRILLIC SUBSCRIPT SMALL LETTER A +1E052 ; NFKC_SCF; 0431 # Lm CYRILLIC SUBSCRIPT SMALL LETTER BE +1E053 ; NFKC_SCF; 0432 # Lm CYRILLIC SUBSCRIPT SMALL LETTER VE +1E054 ; NFKC_SCF; 0433 # Lm CYRILLIC SUBSCRIPT SMALL LETTER GHE +1E055 ; NFKC_SCF; 0434 # Lm CYRILLIC SUBSCRIPT SMALL LETTER DE +1E056 ; NFKC_SCF; 0435 # Lm CYRILLIC SUBSCRIPT SMALL LETTER IE +1E057 ; NFKC_SCF; 0436 # Lm CYRILLIC SUBSCRIPT SMALL LETTER ZHE +1E058 ; NFKC_SCF; 0437 # Lm CYRILLIC SUBSCRIPT SMALL LETTER ZE +1E059 ; NFKC_SCF; 0438 # Lm CYRILLIC SUBSCRIPT SMALL LETTER I +1E05A ; NFKC_SCF; 043A # Lm CYRILLIC SUBSCRIPT SMALL LETTER KA +1E05B ; NFKC_SCF; 043B # Lm CYRILLIC SUBSCRIPT SMALL LETTER EL +1E05C ; NFKC_SCF; 043E # Lm CYRILLIC SUBSCRIPT SMALL LETTER O +1E05D ; NFKC_SCF; 043F # Lm CYRILLIC SUBSCRIPT SMALL LETTER PE +1E05E ; NFKC_SCF; 0441 # Lm CYRILLIC SUBSCRIPT SMALL LETTER ES +1E05F ; NFKC_SCF; 0443 # Lm CYRILLIC SUBSCRIPT SMALL LETTER U +1E060 ; NFKC_SCF; 0444 # Lm CYRILLIC SUBSCRIPT SMALL LETTER EF +1E061 ; NFKC_SCF; 0445 # Lm CYRILLIC SUBSCRIPT SMALL LETTER HA +1E062 ; NFKC_SCF; 0446 # Lm CYRILLIC SUBSCRIPT SMALL LETTER TSE +1E063 ; NFKC_SCF; 0447 # Lm CYRILLIC SUBSCRIPT SMALL LETTER CHE +1E064 ; NFKC_SCF; 0448 # Lm CYRILLIC SUBSCRIPT SMALL LETTER SHA +1E065 ; NFKC_SCF; 044A # Lm CYRILLIC SUBSCRIPT SMALL LETTER HARD SIGN +1E066 ; NFKC_SCF; 044B # Lm CYRILLIC SUBSCRIPT SMALL LETTER YERU +1E067 ; NFKC_SCF; 0491 # Lm CYRILLIC SUBSCRIPT SMALL LETTER GHE WITH UPTURN +1E068 ; NFKC_SCF; 0456 # Lm CYRILLIC SUBSCRIPT SMALL LETTER BYELORUSSIAN-UKRAINIAN I +1E069 ; NFKC_SCF; 0455 # Lm CYRILLIC SUBSCRIPT SMALL LETTER DZE +1E06A ; NFKC_SCF; 045F # Lm CYRILLIC SUBSCRIPT SMALL LETTER DZHE +1E06B ; NFKC_SCF; 04AB # Lm MODIFIER LETTER CYRILLIC SMALL ES WITH DESCENDER +1E06C ; NFKC_SCF; A651 # Lm MODIFIER LETTER CYRILLIC SMALL YERU WITH BACK YER +1E06D ; NFKC_SCF; 04B1 # Lm MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE +1E900 ; NFKC_SCF; 1E922 # L& ADLAM CAPITAL LETTER ALIF +1E901 ; NFKC_SCF; 1E923 # L& ADLAM CAPITAL LETTER DAALI +1E902 ; NFKC_SCF; 1E924 # L& ADLAM CAPITAL LETTER LAAM +1E903 ; NFKC_SCF; 1E925 # L& ADLAM CAPITAL LETTER MIIM +1E904 ; NFKC_SCF; 1E926 # L& ADLAM CAPITAL LETTER BA +1E905 ; NFKC_SCF; 1E927 # L& ADLAM CAPITAL LETTER SINNYIIYHE +1E906 ; NFKC_SCF; 1E928 # L& ADLAM CAPITAL LETTER PE +1E907 ; NFKC_SCF; 1E929 # L& ADLAM CAPITAL LETTER BHE +1E908 ; NFKC_SCF; 1E92A # L& ADLAM CAPITAL LETTER RA +1E909 ; NFKC_SCF; 1E92B # L& ADLAM CAPITAL LETTER E +1E90A ; NFKC_SCF; 1E92C # L& ADLAM CAPITAL LETTER FA +1E90B ; NFKC_SCF; 1E92D # L& ADLAM CAPITAL LETTER I +1E90C ; NFKC_SCF; 1E92E # L& ADLAM CAPITAL LETTER O +1E90D ; NFKC_SCF; 1E92F # L& ADLAM CAPITAL LETTER DHA +1E90E ; NFKC_SCF; 1E930 # L& ADLAM CAPITAL LETTER YHE +1E90F ; NFKC_SCF; 1E931 # L& ADLAM CAPITAL LETTER WAW +1E910 ; NFKC_SCF; 1E932 # L& ADLAM CAPITAL LETTER NUN +1E911 ; NFKC_SCF; 1E933 # L& ADLAM CAPITAL LETTER KAF +1E912 ; NFKC_SCF; 1E934 # L& ADLAM CAPITAL LETTER YA +1E913 ; NFKC_SCF; 1E935 # L& ADLAM CAPITAL LETTER U +1E914 ; NFKC_SCF; 1E936 # L& ADLAM CAPITAL LETTER JIIM +1E915 ; NFKC_SCF; 1E937 # L& ADLAM CAPITAL LETTER CHI +1E916 ; NFKC_SCF; 1E938 # L& ADLAM CAPITAL LETTER HA +1E917 ; NFKC_SCF; 1E939 # L& ADLAM CAPITAL LETTER QAAF +1E918 ; NFKC_SCF; 1E93A # L& ADLAM CAPITAL LETTER GA +1E919 ; NFKC_SCF; 1E93B # L& ADLAM CAPITAL LETTER NYA +1E91A ; NFKC_SCF; 1E93C # L& ADLAM CAPITAL LETTER TU +1E91B ; NFKC_SCF; 1E93D # L& ADLAM CAPITAL LETTER NHA +1E91C ; NFKC_SCF; 1E93E # L& ADLAM CAPITAL LETTER VA +1E91D ; NFKC_SCF; 1E93F # L& ADLAM CAPITAL LETTER KHA +1E91E ; NFKC_SCF; 1E940 # L& ADLAM CAPITAL LETTER GBE +1E91F ; NFKC_SCF; 1E941 # L& ADLAM CAPITAL LETTER ZAL +1E920 ; NFKC_SCF; 1E942 # L& ADLAM CAPITAL LETTER KPO +1E921 ; NFKC_SCF; 1E943 # L& ADLAM CAPITAL LETTER SHA +1EE00 ; NFKC_SCF; 0627 # Lo ARABIC MATHEMATICAL ALEF +1EE01 ; NFKC_SCF; 0628 # Lo ARABIC MATHEMATICAL BEH +1EE02 ; NFKC_SCF; 062C # Lo ARABIC MATHEMATICAL JEEM +1EE03 ; NFKC_SCF; 062F # Lo ARABIC MATHEMATICAL DAL +1EE05 ; NFKC_SCF; 0648 # Lo ARABIC MATHEMATICAL WAW +1EE06 ; NFKC_SCF; 0632 # Lo ARABIC MATHEMATICAL ZAIN +1EE07 ; NFKC_SCF; 062D # Lo ARABIC MATHEMATICAL HAH +1EE08 ; NFKC_SCF; 0637 # Lo ARABIC MATHEMATICAL TAH +1EE09 ; NFKC_SCF; 064A # Lo ARABIC MATHEMATICAL YEH +1EE0A ; NFKC_SCF; 0643 # Lo ARABIC MATHEMATICAL KAF +1EE0B ; NFKC_SCF; 0644 # Lo ARABIC MATHEMATICAL LAM +1EE0C ; NFKC_SCF; 0645 # Lo ARABIC MATHEMATICAL MEEM +1EE0D ; NFKC_SCF; 0646 # Lo ARABIC MATHEMATICAL NOON +1EE0E ; NFKC_SCF; 0633 # Lo ARABIC MATHEMATICAL SEEN +1EE0F ; NFKC_SCF; 0639 # Lo ARABIC MATHEMATICAL AIN +1EE10 ; NFKC_SCF; 0641 # Lo ARABIC MATHEMATICAL FEH +1EE11 ; NFKC_SCF; 0635 # Lo ARABIC MATHEMATICAL SAD +1EE12 ; NFKC_SCF; 0642 # Lo ARABIC MATHEMATICAL QAF +1EE13 ; NFKC_SCF; 0631 # Lo ARABIC MATHEMATICAL REH +1EE14 ; NFKC_SCF; 0634 # Lo ARABIC MATHEMATICAL SHEEN +1EE15 ; NFKC_SCF; 062A # Lo ARABIC MATHEMATICAL TEH +1EE16 ; NFKC_SCF; 062B # Lo ARABIC MATHEMATICAL THEH +1EE17 ; NFKC_SCF; 062E # Lo ARABIC MATHEMATICAL KHAH +1EE18 ; NFKC_SCF; 0630 # Lo ARABIC MATHEMATICAL THAL +1EE19 ; NFKC_SCF; 0636 # Lo ARABIC MATHEMATICAL DAD +1EE1A ; NFKC_SCF; 0638 # Lo ARABIC MATHEMATICAL ZAH +1EE1B ; NFKC_SCF; 063A # Lo ARABIC MATHEMATICAL GHAIN +1EE1C ; NFKC_SCF; 066E # Lo ARABIC MATHEMATICAL DOTLESS BEH +1EE1D ; NFKC_SCF; 06BA # Lo ARABIC MATHEMATICAL DOTLESS NOON +1EE1E ; NFKC_SCF; 06A1 # Lo ARABIC MATHEMATICAL DOTLESS FEH +1EE1F ; NFKC_SCF; 066F # Lo ARABIC MATHEMATICAL DOTLESS QAF +1EE21 ; NFKC_SCF; 0628 # Lo ARABIC MATHEMATICAL INITIAL BEH +1EE22 ; NFKC_SCF; 062C # Lo ARABIC MATHEMATICAL INITIAL JEEM +1EE24 ; NFKC_SCF; 0647 # Lo ARABIC MATHEMATICAL INITIAL HEH +1EE27 ; NFKC_SCF; 062D # Lo ARABIC MATHEMATICAL INITIAL HAH +1EE29 ; NFKC_SCF; 064A # Lo ARABIC MATHEMATICAL INITIAL YEH +1EE2A ; NFKC_SCF; 0643 # Lo ARABIC MATHEMATICAL INITIAL KAF +1EE2B ; NFKC_SCF; 0644 # Lo ARABIC MATHEMATICAL INITIAL LAM +1EE2C ; NFKC_SCF; 0645 # Lo ARABIC MATHEMATICAL INITIAL MEEM +1EE2D ; NFKC_SCF; 0646 # Lo ARABIC MATHEMATICAL INITIAL NOON +1EE2E ; NFKC_SCF; 0633 # Lo ARABIC MATHEMATICAL INITIAL SEEN +1EE2F ; NFKC_SCF; 0639 # Lo ARABIC MATHEMATICAL INITIAL AIN +1EE30 ; NFKC_SCF; 0641 # Lo ARABIC MATHEMATICAL INITIAL FEH +1EE31 ; NFKC_SCF; 0635 # Lo ARABIC MATHEMATICAL INITIAL SAD +1EE32 ; NFKC_SCF; 0642 # Lo ARABIC MATHEMATICAL INITIAL QAF +1EE34 ; NFKC_SCF; 0634 # Lo ARABIC MATHEMATICAL INITIAL SHEEN +1EE35 ; NFKC_SCF; 062A # Lo ARABIC MATHEMATICAL INITIAL TEH +1EE36 ; NFKC_SCF; 062B # Lo ARABIC MATHEMATICAL INITIAL THEH +1EE37 ; NFKC_SCF; 062E # Lo ARABIC MATHEMATICAL INITIAL KHAH +1EE39 ; NFKC_SCF; 0636 # Lo ARABIC MATHEMATICAL INITIAL DAD +1EE3B ; NFKC_SCF; 063A # Lo ARABIC MATHEMATICAL INITIAL GHAIN +1EE42 ; NFKC_SCF; 062C # Lo ARABIC MATHEMATICAL TAILED JEEM +1EE47 ; NFKC_SCF; 062D # Lo ARABIC MATHEMATICAL TAILED HAH +1EE49 ; NFKC_SCF; 064A # Lo ARABIC MATHEMATICAL TAILED YEH +1EE4B ; NFKC_SCF; 0644 # Lo ARABIC MATHEMATICAL TAILED LAM +1EE4D ; NFKC_SCF; 0646 # Lo ARABIC MATHEMATICAL TAILED NOON +1EE4E ; NFKC_SCF; 0633 # Lo ARABIC MATHEMATICAL TAILED SEEN +1EE4F ; NFKC_SCF; 0639 # Lo ARABIC MATHEMATICAL TAILED AIN +1EE51 ; NFKC_SCF; 0635 # Lo ARABIC MATHEMATICAL TAILED SAD +1EE52 ; NFKC_SCF; 0642 # Lo ARABIC MATHEMATICAL TAILED QAF +1EE54 ; NFKC_SCF; 0634 # Lo ARABIC MATHEMATICAL TAILED SHEEN +1EE57 ; NFKC_SCF; 062E # Lo ARABIC MATHEMATICAL TAILED KHAH +1EE59 ; NFKC_SCF; 0636 # Lo ARABIC MATHEMATICAL TAILED DAD +1EE5B ; NFKC_SCF; 063A # Lo ARABIC MATHEMATICAL TAILED GHAIN +1EE5D ; NFKC_SCF; 06BA # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON +1EE5F ; NFKC_SCF; 066F # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF +1EE61 ; NFKC_SCF; 0628 # Lo ARABIC MATHEMATICAL STRETCHED BEH +1EE62 ; NFKC_SCF; 062C # Lo ARABIC MATHEMATICAL STRETCHED JEEM +1EE64 ; NFKC_SCF; 0647 # Lo ARABIC MATHEMATICAL STRETCHED HEH +1EE67 ; NFKC_SCF; 062D # Lo ARABIC MATHEMATICAL STRETCHED HAH +1EE68 ; NFKC_SCF; 0637 # Lo ARABIC MATHEMATICAL STRETCHED TAH +1EE69 ; NFKC_SCF; 064A # Lo ARABIC MATHEMATICAL STRETCHED YEH +1EE6A ; NFKC_SCF; 0643 # Lo ARABIC MATHEMATICAL STRETCHED KAF +1EE6C ; NFKC_SCF; 0645 # Lo ARABIC MATHEMATICAL STRETCHED MEEM +1EE6D ; NFKC_SCF; 0646 # Lo ARABIC MATHEMATICAL STRETCHED NOON +1EE6E ; NFKC_SCF; 0633 # Lo ARABIC MATHEMATICAL STRETCHED SEEN +1EE6F ; NFKC_SCF; 0639 # Lo ARABIC MATHEMATICAL STRETCHED AIN +1EE70 ; NFKC_SCF; 0641 # Lo ARABIC MATHEMATICAL STRETCHED FEH +1EE71 ; NFKC_SCF; 0635 # Lo ARABIC MATHEMATICAL STRETCHED SAD +1EE72 ; NFKC_SCF; 0642 # Lo ARABIC MATHEMATICAL STRETCHED QAF +1EE74 ; NFKC_SCF; 0634 # Lo ARABIC MATHEMATICAL STRETCHED SHEEN +1EE75 ; NFKC_SCF; 062A # Lo ARABIC MATHEMATICAL STRETCHED TEH +1EE76 ; NFKC_SCF; 062B # Lo ARABIC MATHEMATICAL STRETCHED THEH +1EE77 ; NFKC_SCF; 062E # Lo ARABIC MATHEMATICAL STRETCHED KHAH +1EE79 ; NFKC_SCF; 0636 # Lo ARABIC MATHEMATICAL STRETCHED DAD +1EE7A ; NFKC_SCF; 0638 # Lo ARABIC MATHEMATICAL STRETCHED ZAH +1EE7B ; NFKC_SCF; 063A # Lo ARABIC MATHEMATICAL STRETCHED GHAIN +1EE7C ; NFKC_SCF; 066E # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS BEH +1EE7E ; NFKC_SCF; 06A1 # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH +1EE80 ; NFKC_SCF; 0627 # Lo ARABIC MATHEMATICAL LOOPED ALEF +1EE81 ; NFKC_SCF; 0628 # Lo ARABIC MATHEMATICAL LOOPED BEH +1EE82 ; NFKC_SCF; 062C # Lo ARABIC MATHEMATICAL LOOPED JEEM +1EE83 ; NFKC_SCF; 062F # Lo ARABIC MATHEMATICAL LOOPED DAL +1EE84 ; NFKC_SCF; 0647 # Lo ARABIC MATHEMATICAL LOOPED HEH +1EE85 ; NFKC_SCF; 0648 # Lo ARABIC MATHEMATICAL LOOPED WAW +1EE86 ; NFKC_SCF; 0632 # Lo ARABIC MATHEMATICAL LOOPED ZAIN +1EE87 ; NFKC_SCF; 062D # Lo ARABIC MATHEMATICAL LOOPED HAH +1EE88 ; NFKC_SCF; 0637 # Lo ARABIC MATHEMATICAL LOOPED TAH +1EE89 ; NFKC_SCF; 064A # Lo ARABIC MATHEMATICAL LOOPED YEH +1EE8B ; NFKC_SCF; 0644 # Lo ARABIC MATHEMATICAL LOOPED LAM +1EE8C ; NFKC_SCF; 0645 # Lo ARABIC MATHEMATICAL LOOPED MEEM +1EE8D ; NFKC_SCF; 0646 # Lo ARABIC MATHEMATICAL LOOPED NOON +1EE8E ; NFKC_SCF; 0633 # Lo ARABIC MATHEMATICAL LOOPED SEEN +1EE8F ; NFKC_SCF; 0639 # Lo ARABIC MATHEMATICAL LOOPED AIN +1EE90 ; NFKC_SCF; 0641 # Lo ARABIC MATHEMATICAL LOOPED FEH +1EE91 ; NFKC_SCF; 0635 # Lo ARABIC MATHEMATICAL LOOPED SAD +1EE92 ; NFKC_SCF; 0642 # Lo ARABIC MATHEMATICAL LOOPED QAF +1EE93 ; NFKC_SCF; 0631 # Lo ARABIC MATHEMATICAL LOOPED REH +1EE94 ; NFKC_SCF; 0634 # Lo ARABIC MATHEMATICAL LOOPED SHEEN +1EE95 ; NFKC_SCF; 062A # Lo ARABIC MATHEMATICAL LOOPED TEH +1EE96 ; NFKC_SCF; 062B # Lo ARABIC MATHEMATICAL LOOPED THEH +1EE97 ; NFKC_SCF; 062E # Lo ARABIC MATHEMATICAL LOOPED KHAH +1EE98 ; NFKC_SCF; 0630 # Lo ARABIC MATHEMATICAL LOOPED THAL +1EE99 ; NFKC_SCF; 0636 # Lo ARABIC MATHEMATICAL LOOPED DAD +1EE9A ; NFKC_SCF; 0638 # Lo ARABIC MATHEMATICAL LOOPED ZAH +1EE9B ; NFKC_SCF; 063A # Lo ARABIC MATHEMATICAL LOOPED GHAIN +1EEA1 ; NFKC_SCF; 0628 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK BEH +1EEA2 ; NFKC_SCF; 062C # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK JEEM +1EEA3 ; NFKC_SCF; 062F # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK DAL +1EEA5 ; NFKC_SCF; 0648 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK WAW +1EEA6 ; NFKC_SCF; 0632 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK ZAIN +1EEA7 ; NFKC_SCF; 062D # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK HAH +1EEA8 ; NFKC_SCF; 0637 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK TAH +1EEA9 ; NFKC_SCF; 064A # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK YEH +1EEAB ; NFKC_SCF; 0644 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK LAM +1EEAC ; NFKC_SCF; 0645 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK MEEM +1EEAD ; NFKC_SCF; 0646 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK NOON +1EEAE ; NFKC_SCF; 0633 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK SEEN +1EEAF ; NFKC_SCF; 0639 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK AIN +1EEB0 ; NFKC_SCF; 0641 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK FEH +1EEB1 ; NFKC_SCF; 0635 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK SAD +1EEB2 ; NFKC_SCF; 0642 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK QAF +1EEB3 ; NFKC_SCF; 0631 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK REH +1EEB4 ; NFKC_SCF; 0634 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK SHEEN +1EEB5 ; NFKC_SCF; 062A # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK TEH +1EEB6 ; NFKC_SCF; 062B # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK THEH +1EEB7 ; NFKC_SCF; 062E # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK KHAH +1EEB8 ; NFKC_SCF; 0630 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK THAL +1EEB9 ; NFKC_SCF; 0636 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK DAD +1EEBA ; NFKC_SCF; 0638 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK ZAH +1EEBB ; NFKC_SCF; 063A # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN +1F100 ; NFKC_SCF; 0030 002E # No DIGIT ZERO FULL STOP +1F101 ; NFKC_SCF; 0030 002C # No DIGIT ZERO COMMA +1F102 ; NFKC_SCF; 0031 002C # No DIGIT ONE COMMA +1F103 ; NFKC_SCF; 0032 002C # No DIGIT TWO COMMA +1F104 ; NFKC_SCF; 0033 002C # No DIGIT THREE COMMA +1F105 ; NFKC_SCF; 0034 002C # No DIGIT FOUR COMMA +1F106 ; NFKC_SCF; 0035 002C # No DIGIT FIVE COMMA +1F107 ; NFKC_SCF; 0036 002C # No DIGIT SIX COMMA +1F108 ; NFKC_SCF; 0037 002C # No DIGIT SEVEN COMMA +1F109 ; NFKC_SCF; 0038 002C # No DIGIT EIGHT COMMA +1F10A ; NFKC_SCF; 0039 002C # No DIGIT NINE COMMA +1F110 ; NFKC_SCF; 0028 0061 0029 # So PARENTHESIZED LATIN CAPITAL LETTER A +1F111 ; NFKC_SCF; 0028 0062 0029 # So PARENTHESIZED LATIN CAPITAL LETTER B +1F112 ; NFKC_SCF; 0028 0063 0029 # So PARENTHESIZED LATIN CAPITAL LETTER C +1F113 ; NFKC_SCF; 0028 0064 0029 # So PARENTHESIZED LATIN CAPITAL LETTER D +1F114 ; NFKC_SCF; 0028 0065 0029 # So PARENTHESIZED LATIN CAPITAL LETTER E +1F115 ; NFKC_SCF; 0028 0066 0029 # So PARENTHESIZED LATIN CAPITAL LETTER F +1F116 ; NFKC_SCF; 0028 0067 0029 # So PARENTHESIZED LATIN CAPITAL LETTER G +1F117 ; NFKC_SCF; 0028 0068 0029 # So PARENTHESIZED LATIN CAPITAL LETTER H +1F118 ; NFKC_SCF; 0028 0069 0029 # So PARENTHESIZED LATIN CAPITAL LETTER I +1F119 ; NFKC_SCF; 0028 006A 0029 # So PARENTHESIZED LATIN CAPITAL LETTER J +1F11A ; NFKC_SCF; 0028 006B 0029 # So PARENTHESIZED LATIN CAPITAL LETTER K +1F11B ; NFKC_SCF; 0028 006C 0029 # So PARENTHESIZED LATIN CAPITAL LETTER L +1F11C ; NFKC_SCF; 0028 006D 0029 # So PARENTHESIZED LATIN CAPITAL LETTER M +1F11D ; NFKC_SCF; 0028 006E 0029 # So PARENTHESIZED LATIN CAPITAL LETTER N +1F11E ; NFKC_SCF; 0028 006F 0029 # So PARENTHESIZED LATIN CAPITAL LETTER O +1F11F ; NFKC_SCF; 0028 0070 0029 # So PARENTHESIZED LATIN CAPITAL LETTER P +1F120 ; NFKC_SCF; 0028 0071 0029 # So PARENTHESIZED LATIN CAPITAL LETTER Q +1F121 ; NFKC_SCF; 0028 0072 0029 # So PARENTHESIZED LATIN CAPITAL LETTER R +1F122 ; NFKC_SCF; 0028 0073 0029 # So PARENTHESIZED LATIN CAPITAL LETTER S +1F123 ; NFKC_SCF; 0028 0074 0029 # So PARENTHESIZED LATIN CAPITAL LETTER T +1F124 ; NFKC_SCF; 0028 0075 0029 # So PARENTHESIZED LATIN CAPITAL LETTER U +1F125 ; NFKC_SCF; 0028 0076 0029 # So PARENTHESIZED LATIN CAPITAL LETTER V +1F126 ; NFKC_SCF; 0028 0077 0029 # So PARENTHESIZED LATIN CAPITAL LETTER W +1F127 ; NFKC_SCF; 0028 0078 0029 # So PARENTHESIZED LATIN CAPITAL LETTER X +1F128 ; NFKC_SCF; 0028 0079 0029 # So PARENTHESIZED LATIN CAPITAL LETTER Y +1F129 ; NFKC_SCF; 0028 007A 0029 # So PARENTHESIZED LATIN CAPITAL LETTER Z +1F12A ; NFKC_SCF; 3014 0073 3015 # So TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S +1F12B ; NFKC_SCF; 0063 # So CIRCLED ITALIC LATIN CAPITAL LETTER C +1F12C ; NFKC_SCF; 0072 # So CIRCLED ITALIC LATIN CAPITAL LETTER R +1F12D ; NFKC_SCF; 0063 0064 # So CIRCLED CD +1F12E ; NFKC_SCF; 0077 007A # So CIRCLED WZ +1F130 ; NFKC_SCF; 0061 # So SQUARED LATIN CAPITAL LETTER A +1F131 ; NFKC_SCF; 0062 # So SQUARED LATIN CAPITAL LETTER B +1F132 ; NFKC_SCF; 0063 # So SQUARED LATIN CAPITAL LETTER C +1F133 ; NFKC_SCF; 0064 # So SQUARED LATIN CAPITAL LETTER D +1F134 ; NFKC_SCF; 0065 # So SQUARED LATIN CAPITAL LETTER E +1F135 ; NFKC_SCF; 0066 # So SQUARED LATIN CAPITAL LETTER F +1F136 ; NFKC_SCF; 0067 # So SQUARED LATIN CAPITAL LETTER G +1F137 ; NFKC_SCF; 0068 # So SQUARED LATIN CAPITAL LETTER H +1F138 ; NFKC_SCF; 0069 # So SQUARED LATIN CAPITAL LETTER I +1F139 ; NFKC_SCF; 006A # So SQUARED LATIN CAPITAL LETTER J +1F13A ; NFKC_SCF; 006B # So SQUARED LATIN CAPITAL LETTER K +1F13B ; NFKC_SCF; 006C # So SQUARED LATIN CAPITAL LETTER L +1F13C ; NFKC_SCF; 006D # So SQUARED LATIN CAPITAL LETTER M +1F13D ; NFKC_SCF; 006E # So SQUARED LATIN CAPITAL LETTER N +1F13E ; NFKC_SCF; 006F # So SQUARED LATIN CAPITAL LETTER O +1F13F ; NFKC_SCF; 0070 # So SQUARED LATIN CAPITAL LETTER P +1F140 ; NFKC_SCF; 0071 # So SQUARED LATIN CAPITAL LETTER Q +1F141 ; NFKC_SCF; 0072 # So SQUARED LATIN CAPITAL LETTER R +1F142 ; NFKC_SCF; 0073 # So SQUARED LATIN CAPITAL LETTER S +1F143 ; NFKC_SCF; 0074 # So SQUARED LATIN CAPITAL LETTER T +1F144 ; NFKC_SCF; 0075 # So SQUARED LATIN CAPITAL LETTER U +1F145 ; NFKC_SCF; 0076 # So SQUARED LATIN CAPITAL LETTER V +1F146 ; NFKC_SCF; 0077 # So SQUARED LATIN CAPITAL LETTER W +1F147 ; NFKC_SCF; 0078 # So SQUARED LATIN CAPITAL LETTER X +1F148 ; NFKC_SCF; 0079 # So SQUARED LATIN CAPITAL LETTER Y +1F149 ; NFKC_SCF; 007A # So SQUARED LATIN CAPITAL LETTER Z +1F14A ; NFKC_SCF; 0068 0076 # So SQUARED HV +1F14B ; NFKC_SCF; 006D 0076 # So SQUARED MV +1F14C ; NFKC_SCF; 0073 0064 # So SQUARED SD +1F14D ; NFKC_SCF; 0073 0073 # So SQUARED SS +1F14E ; NFKC_SCF; 0070 0070 0076 # So SQUARED PPV +1F14F ; NFKC_SCF; 0077 0063 # So SQUARED WC +1F16A ; NFKC_SCF; 006D 0063 # So RAISED MC SIGN +1F16B ; NFKC_SCF; 006D 0064 # So RAISED MD SIGN +1F16C ; NFKC_SCF; 006D 0072 # So RAISED MR SIGN +1F190 ; NFKC_SCF; 0064 006A # So SQUARE DJ +1F200 ; NFKC_SCF; 307B 304B # So SQUARE HIRAGANA HOKA +1F201 ; NFKC_SCF; 30B3 30B3 # So SQUARED KATAKANA KOKO +1F202 ; NFKC_SCF; 30B5 # So SQUARED KATAKANA SA +1F210 ; NFKC_SCF; 624B # So SQUARED CJK UNIFIED IDEOGRAPH-624B +1F211 ; NFKC_SCF; 5B57 # So SQUARED CJK UNIFIED IDEOGRAPH-5B57 +1F212 ; NFKC_SCF; 53CC # So SQUARED CJK UNIFIED IDEOGRAPH-53CC +1F213 ; NFKC_SCF; 30C7 # So SQUARED KATAKANA DE +1F214 ; NFKC_SCF; 4E8C # So SQUARED CJK UNIFIED IDEOGRAPH-4E8C +1F215 ; NFKC_SCF; 591A # So SQUARED CJK UNIFIED IDEOGRAPH-591A +1F216 ; NFKC_SCF; 89E3 # So SQUARED CJK UNIFIED IDEOGRAPH-89E3 +1F217 ; NFKC_SCF; 5929 # So SQUARED CJK UNIFIED IDEOGRAPH-5929 +1F218 ; NFKC_SCF; 4EA4 # So SQUARED CJK UNIFIED IDEOGRAPH-4EA4 +1F219 ; NFKC_SCF; 6620 # So SQUARED CJK UNIFIED IDEOGRAPH-6620 +1F21A ; NFKC_SCF; 7121 # So SQUARED CJK UNIFIED IDEOGRAPH-7121 +1F21B ; NFKC_SCF; 6599 # So SQUARED CJK UNIFIED IDEOGRAPH-6599 +1F21C ; NFKC_SCF; 524D # So SQUARED CJK UNIFIED IDEOGRAPH-524D +1F21D ; NFKC_SCF; 5F8C # So SQUARED CJK UNIFIED IDEOGRAPH-5F8C +1F21E ; NFKC_SCF; 518D # So SQUARED CJK UNIFIED IDEOGRAPH-518D +1F21F ; NFKC_SCF; 65B0 # So SQUARED CJK UNIFIED IDEOGRAPH-65B0 +1F220 ; NFKC_SCF; 521D # So SQUARED CJK UNIFIED IDEOGRAPH-521D +1F221 ; NFKC_SCF; 7D42 # So SQUARED CJK UNIFIED IDEOGRAPH-7D42 +1F222 ; NFKC_SCF; 751F # So SQUARED CJK UNIFIED IDEOGRAPH-751F +1F223 ; NFKC_SCF; 8CA9 # So SQUARED CJK UNIFIED IDEOGRAPH-8CA9 +1F224 ; NFKC_SCF; 58F0 # So SQUARED CJK UNIFIED IDEOGRAPH-58F0 +1F225 ; NFKC_SCF; 5439 # So SQUARED CJK UNIFIED IDEOGRAPH-5439 +1F226 ; NFKC_SCF; 6F14 # So SQUARED CJK UNIFIED IDEOGRAPH-6F14 +1F227 ; NFKC_SCF; 6295 # So SQUARED CJK UNIFIED IDEOGRAPH-6295 +1F228 ; NFKC_SCF; 6355 # So SQUARED CJK UNIFIED IDEOGRAPH-6355 +1F229 ; NFKC_SCF; 4E00 # So SQUARED CJK UNIFIED IDEOGRAPH-4E00 +1F22A ; NFKC_SCF; 4E09 # So SQUARED CJK UNIFIED IDEOGRAPH-4E09 +1F22B ; NFKC_SCF; 904A # So SQUARED CJK UNIFIED IDEOGRAPH-904A +1F22C ; NFKC_SCF; 5DE6 # So SQUARED CJK UNIFIED IDEOGRAPH-5DE6 +1F22D ; NFKC_SCF; 4E2D # So SQUARED CJK UNIFIED IDEOGRAPH-4E2D +1F22E ; NFKC_SCF; 53F3 # So SQUARED CJK UNIFIED IDEOGRAPH-53F3 +1F22F ; NFKC_SCF; 6307 # So SQUARED CJK UNIFIED IDEOGRAPH-6307 +1F230 ; NFKC_SCF; 8D70 # So SQUARED CJK UNIFIED IDEOGRAPH-8D70 +1F231 ; NFKC_SCF; 6253 # So SQUARED CJK UNIFIED IDEOGRAPH-6253 +1F232 ; NFKC_SCF; 7981 # So SQUARED CJK UNIFIED IDEOGRAPH-7981 +1F233 ; NFKC_SCF; 7A7A # So SQUARED CJK UNIFIED IDEOGRAPH-7A7A +1F234 ; NFKC_SCF; 5408 # So SQUARED CJK UNIFIED IDEOGRAPH-5408 +1F235 ; NFKC_SCF; 6E80 # So SQUARED CJK UNIFIED IDEOGRAPH-6E80 +1F236 ; NFKC_SCF; 6709 # So SQUARED CJK UNIFIED IDEOGRAPH-6709 +1F237 ; NFKC_SCF; 6708 # So SQUARED CJK UNIFIED IDEOGRAPH-6708 +1F238 ; NFKC_SCF; 7533 # So SQUARED CJK UNIFIED IDEOGRAPH-7533 +1F239 ; NFKC_SCF; 5272 # So SQUARED CJK UNIFIED IDEOGRAPH-5272 +1F23A ; NFKC_SCF; 55B6 # So SQUARED CJK UNIFIED IDEOGRAPH-55B6 +1F23B ; NFKC_SCF; 914D # So SQUARED CJK UNIFIED IDEOGRAPH-914D +1F240 ; NFKC_SCF; 3014 672C 3015 # So TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C +1F241 ; NFKC_SCF; 3014 4E09 3015 # So TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09 +1F242 ; NFKC_SCF; 3014 4E8C 3015 # So TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C +1F243 ; NFKC_SCF; 3014 5B89 3015 # So TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89 +1F244 ; NFKC_SCF; 3014 70B9 3015 # So TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9 +1F245 ; NFKC_SCF; 3014 6253 3015 # So TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253 +1F246 ; NFKC_SCF; 3014 76D7 3015 # So TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7 +1F247 ; NFKC_SCF; 3014 52DD 3015 # So TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD +1F248 ; NFKC_SCF; 3014 6557 3015 # So TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 +1F250 ; NFKC_SCF; 5F97 # So CIRCLED IDEOGRAPH ADVANTAGE +1F251 ; NFKC_SCF; 53EF # So CIRCLED IDEOGRAPH ACCEPT +1FBF0 ; NFKC_SCF; 0030 # Nd SEGMENTED DIGIT ZERO +1FBF1 ; NFKC_SCF; 0031 # Nd SEGMENTED DIGIT ONE +1FBF2 ; NFKC_SCF; 0032 # Nd SEGMENTED DIGIT TWO +1FBF3 ; NFKC_SCF; 0033 # Nd SEGMENTED DIGIT THREE +1FBF4 ; NFKC_SCF; 0034 # Nd SEGMENTED DIGIT FOUR +1FBF5 ; NFKC_SCF; 0035 # Nd SEGMENTED DIGIT FIVE +1FBF6 ; NFKC_SCF; 0036 # Nd SEGMENTED DIGIT SIX +1FBF7 ; NFKC_SCF; 0037 # Nd SEGMENTED DIGIT SEVEN +1FBF8 ; NFKC_SCF; 0038 # Nd SEGMENTED DIGIT EIGHT +1FBF9 ; NFKC_SCF; 0039 # Nd SEGMENTED DIGIT NINE +2F800 ; NFKC_SCF; 4E3D # Lo CJK COMPATIBILITY IDEOGRAPH-2F800 +2F801 ; NFKC_SCF; 4E38 # Lo CJK COMPATIBILITY IDEOGRAPH-2F801 +2F802 ; NFKC_SCF; 4E41 # Lo CJK COMPATIBILITY IDEOGRAPH-2F802 +2F803 ; NFKC_SCF; 20122 # Lo CJK COMPATIBILITY IDEOGRAPH-2F803 +2F804 ; NFKC_SCF; 4F60 # Lo CJK COMPATIBILITY IDEOGRAPH-2F804 +2F805 ; NFKC_SCF; 4FAE # Lo CJK COMPATIBILITY IDEOGRAPH-2F805 +2F806 ; NFKC_SCF; 4FBB # Lo CJK COMPATIBILITY IDEOGRAPH-2F806 +2F807 ; NFKC_SCF; 5002 # Lo CJK COMPATIBILITY IDEOGRAPH-2F807 +2F808 ; NFKC_SCF; 507A # Lo CJK COMPATIBILITY IDEOGRAPH-2F808 +2F809 ; NFKC_SCF; 5099 # Lo CJK COMPATIBILITY IDEOGRAPH-2F809 +2F80A ; NFKC_SCF; 50E7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F80A +2F80B ; NFKC_SCF; 50CF # Lo CJK COMPATIBILITY IDEOGRAPH-2F80B +2F80C ; NFKC_SCF; 349E # Lo CJK COMPATIBILITY IDEOGRAPH-2F80C +2F80D ; NFKC_SCF; 2063A # Lo CJK COMPATIBILITY IDEOGRAPH-2F80D +2F80E ; NFKC_SCF; 514D # Lo CJK COMPATIBILITY IDEOGRAPH-2F80E +2F80F ; NFKC_SCF; 5154 # Lo CJK COMPATIBILITY IDEOGRAPH-2F80F +2F810 ; NFKC_SCF; 5164 # Lo CJK COMPATIBILITY IDEOGRAPH-2F810 +2F811 ; NFKC_SCF; 5177 # Lo CJK COMPATIBILITY IDEOGRAPH-2F811 +2F812 ; NFKC_SCF; 2051C # Lo CJK COMPATIBILITY IDEOGRAPH-2F812 +2F813 ; NFKC_SCF; 34B9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F813 +2F814 ; NFKC_SCF; 5167 # Lo CJK COMPATIBILITY IDEOGRAPH-2F814 +2F815 ; NFKC_SCF; 518D # Lo CJK COMPATIBILITY IDEOGRAPH-2F815 +2F816 ; NFKC_SCF; 2054B # Lo CJK COMPATIBILITY IDEOGRAPH-2F816 +2F817 ; NFKC_SCF; 5197 # Lo CJK COMPATIBILITY IDEOGRAPH-2F817 +2F818 ; NFKC_SCF; 51A4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F818 +2F819 ; NFKC_SCF; 4ECC # Lo CJK COMPATIBILITY IDEOGRAPH-2F819 +2F81A ; NFKC_SCF; 51AC # Lo CJK COMPATIBILITY IDEOGRAPH-2F81A +2F81B ; NFKC_SCF; 51B5 # Lo CJK COMPATIBILITY IDEOGRAPH-2F81B +2F81C ; NFKC_SCF; 291DF # Lo CJK COMPATIBILITY IDEOGRAPH-2F81C +2F81D ; NFKC_SCF; 51F5 # Lo CJK COMPATIBILITY IDEOGRAPH-2F81D +2F81E ; NFKC_SCF; 5203 # Lo CJK COMPATIBILITY IDEOGRAPH-2F81E +2F81F ; NFKC_SCF; 34DF # Lo CJK COMPATIBILITY IDEOGRAPH-2F81F +2F820 ; NFKC_SCF; 523B # Lo CJK COMPATIBILITY IDEOGRAPH-2F820 +2F821 ; NFKC_SCF; 5246 # Lo CJK COMPATIBILITY IDEOGRAPH-2F821 +2F822 ; NFKC_SCF; 5272 # Lo CJK COMPATIBILITY IDEOGRAPH-2F822 +2F823 ; NFKC_SCF; 5277 # Lo CJK COMPATIBILITY IDEOGRAPH-2F823 +2F824 ; NFKC_SCF; 3515 # Lo CJK COMPATIBILITY IDEOGRAPH-2F824 +2F825 ; NFKC_SCF; 52C7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F825 +2F826 ; NFKC_SCF; 52C9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F826 +2F827 ; NFKC_SCF; 52E4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F827 +2F828 ; NFKC_SCF; 52FA # Lo CJK COMPATIBILITY IDEOGRAPH-2F828 +2F829 ; NFKC_SCF; 5305 # Lo CJK COMPATIBILITY IDEOGRAPH-2F829 +2F82A ; NFKC_SCF; 5306 # Lo CJK COMPATIBILITY IDEOGRAPH-2F82A +2F82B ; NFKC_SCF; 5317 # Lo CJK COMPATIBILITY IDEOGRAPH-2F82B +2F82C ; NFKC_SCF; 5349 # Lo CJK COMPATIBILITY IDEOGRAPH-2F82C +2F82D ; NFKC_SCF; 5351 # Lo CJK COMPATIBILITY IDEOGRAPH-2F82D +2F82E ; NFKC_SCF; 535A # Lo CJK COMPATIBILITY IDEOGRAPH-2F82E +2F82F ; NFKC_SCF; 5373 # Lo CJK COMPATIBILITY IDEOGRAPH-2F82F +2F830 ; NFKC_SCF; 537D # Lo CJK COMPATIBILITY IDEOGRAPH-2F830 +2F831..2F833 ; NFKC_SCF; 537F # Lo [3] CJK COMPATIBILITY IDEOGRAPH-2F831..CJK COMPATIBILITY IDEOGRAPH-2F833 +2F834 ; NFKC_SCF; 20A2C # Lo CJK COMPATIBILITY IDEOGRAPH-2F834 +2F835 ; NFKC_SCF; 7070 # Lo CJK COMPATIBILITY IDEOGRAPH-2F835 +2F836 ; NFKC_SCF; 53CA # Lo CJK COMPATIBILITY IDEOGRAPH-2F836 +2F837 ; NFKC_SCF; 53DF # Lo CJK COMPATIBILITY IDEOGRAPH-2F837 +2F838 ; NFKC_SCF; 20B63 # Lo CJK COMPATIBILITY IDEOGRAPH-2F838 +2F839 ; NFKC_SCF; 53EB # Lo CJK COMPATIBILITY IDEOGRAPH-2F839 +2F83A ; NFKC_SCF; 53F1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F83A +2F83B ; NFKC_SCF; 5406 # Lo CJK COMPATIBILITY IDEOGRAPH-2F83B +2F83C ; NFKC_SCF; 549E # Lo CJK COMPATIBILITY IDEOGRAPH-2F83C +2F83D ; NFKC_SCF; 5438 # Lo CJK COMPATIBILITY IDEOGRAPH-2F83D +2F83E ; NFKC_SCF; 5448 # Lo CJK COMPATIBILITY IDEOGRAPH-2F83E +2F83F ; NFKC_SCF; 5468 # Lo CJK COMPATIBILITY IDEOGRAPH-2F83F +2F840 ; NFKC_SCF; 54A2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F840 +2F841 ; NFKC_SCF; 54F6 # Lo CJK COMPATIBILITY IDEOGRAPH-2F841 +2F842 ; NFKC_SCF; 5510 # Lo CJK COMPATIBILITY IDEOGRAPH-2F842 +2F843 ; NFKC_SCF; 5553 # Lo CJK COMPATIBILITY IDEOGRAPH-2F843 +2F844 ; NFKC_SCF; 5563 # Lo CJK COMPATIBILITY IDEOGRAPH-2F844 +2F845..2F846 ; NFKC_SCF; 5584 # Lo [2] CJK COMPATIBILITY IDEOGRAPH-2F845..CJK COMPATIBILITY IDEOGRAPH-2F846 +2F847 ; NFKC_SCF; 5599 # Lo CJK COMPATIBILITY IDEOGRAPH-2F847 +2F848 ; NFKC_SCF; 55AB # Lo CJK COMPATIBILITY IDEOGRAPH-2F848 +2F849 ; NFKC_SCF; 55B3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F849 +2F84A ; NFKC_SCF; 55C2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F84A +2F84B ; NFKC_SCF; 5716 # Lo CJK COMPATIBILITY IDEOGRAPH-2F84B +2F84C ; NFKC_SCF; 5606 # Lo CJK COMPATIBILITY IDEOGRAPH-2F84C +2F84D ; NFKC_SCF; 5717 # Lo CJK COMPATIBILITY IDEOGRAPH-2F84D +2F84E ; NFKC_SCF; 5651 # Lo CJK COMPATIBILITY IDEOGRAPH-2F84E +2F84F ; NFKC_SCF; 5674 # Lo CJK COMPATIBILITY IDEOGRAPH-2F84F +2F850 ; NFKC_SCF; 5207 # Lo CJK COMPATIBILITY IDEOGRAPH-2F850 +2F851 ; NFKC_SCF; 58EE # Lo CJK COMPATIBILITY IDEOGRAPH-2F851 +2F852 ; NFKC_SCF; 57CE # Lo CJK COMPATIBILITY IDEOGRAPH-2F852 +2F853 ; NFKC_SCF; 57F4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F853 +2F854 ; NFKC_SCF; 580D # Lo CJK COMPATIBILITY IDEOGRAPH-2F854 +2F855 ; NFKC_SCF; 578B # Lo CJK COMPATIBILITY IDEOGRAPH-2F855 +2F856 ; NFKC_SCF; 5832 # Lo CJK COMPATIBILITY IDEOGRAPH-2F856 +2F857 ; NFKC_SCF; 5831 # Lo CJK COMPATIBILITY IDEOGRAPH-2F857 +2F858 ; NFKC_SCF; 58AC # Lo CJK COMPATIBILITY IDEOGRAPH-2F858 +2F859 ; NFKC_SCF; 214E4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F859 +2F85A ; NFKC_SCF; 58F2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F85A +2F85B ; NFKC_SCF; 58F7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F85B +2F85C ; NFKC_SCF; 5906 # Lo CJK COMPATIBILITY IDEOGRAPH-2F85C +2F85D ; NFKC_SCF; 591A # Lo CJK COMPATIBILITY IDEOGRAPH-2F85D +2F85E ; NFKC_SCF; 5922 # Lo CJK COMPATIBILITY IDEOGRAPH-2F85E +2F85F ; NFKC_SCF; 5962 # Lo CJK COMPATIBILITY IDEOGRAPH-2F85F +2F860 ; NFKC_SCF; 216A8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F860 +2F861 ; NFKC_SCF; 216EA # Lo CJK COMPATIBILITY IDEOGRAPH-2F861 +2F862 ; NFKC_SCF; 59EC # Lo CJK COMPATIBILITY IDEOGRAPH-2F862 +2F863 ; NFKC_SCF; 5A1B # Lo CJK COMPATIBILITY IDEOGRAPH-2F863 +2F864 ; NFKC_SCF; 5A27 # Lo CJK COMPATIBILITY IDEOGRAPH-2F864 +2F865 ; NFKC_SCF; 59D8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F865 +2F866 ; NFKC_SCF; 5A66 # Lo CJK COMPATIBILITY IDEOGRAPH-2F866 +2F867 ; NFKC_SCF; 36EE # Lo CJK COMPATIBILITY IDEOGRAPH-2F867 +2F868 ; NFKC_SCF; 36FC # Lo CJK COMPATIBILITY IDEOGRAPH-2F868 +2F869 ; NFKC_SCF; 5B08 # Lo CJK COMPATIBILITY IDEOGRAPH-2F869 +2F86A..2F86B ; NFKC_SCF; 5B3E # Lo [2] CJK COMPATIBILITY IDEOGRAPH-2F86A..CJK COMPATIBILITY IDEOGRAPH-2F86B +2F86C ; NFKC_SCF; 219C8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F86C +2F86D ; NFKC_SCF; 5BC3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F86D +2F86E ; NFKC_SCF; 5BD8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F86E +2F86F ; NFKC_SCF; 5BE7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F86F +2F870 ; NFKC_SCF; 5BF3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F870 +2F871 ; NFKC_SCF; 21B18 # Lo CJK COMPATIBILITY IDEOGRAPH-2F871 +2F872 ; NFKC_SCF; 5BFF # Lo CJK COMPATIBILITY IDEOGRAPH-2F872 +2F873 ; NFKC_SCF; 5C06 # Lo CJK COMPATIBILITY IDEOGRAPH-2F873 +2F874 ; NFKC_SCF; 5F53 # Lo CJK COMPATIBILITY IDEOGRAPH-2F874 +2F875 ; NFKC_SCF; 5C22 # Lo CJK COMPATIBILITY IDEOGRAPH-2F875 +2F876 ; NFKC_SCF; 3781 # Lo CJK COMPATIBILITY IDEOGRAPH-2F876 +2F877 ; NFKC_SCF; 5C60 # Lo CJK COMPATIBILITY IDEOGRAPH-2F877 +2F878 ; NFKC_SCF; 5C6E # Lo CJK COMPATIBILITY IDEOGRAPH-2F878 +2F879 ; NFKC_SCF; 5CC0 # Lo CJK COMPATIBILITY IDEOGRAPH-2F879 +2F87A ; NFKC_SCF; 5C8D # Lo CJK COMPATIBILITY IDEOGRAPH-2F87A +2F87B ; NFKC_SCF; 21DE4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F87B +2F87C ; NFKC_SCF; 5D43 # Lo CJK COMPATIBILITY IDEOGRAPH-2F87C +2F87D ; NFKC_SCF; 21DE6 # Lo CJK COMPATIBILITY IDEOGRAPH-2F87D +2F87E ; NFKC_SCF; 5D6E # Lo CJK COMPATIBILITY IDEOGRAPH-2F87E +2F87F ; NFKC_SCF; 5D6B # Lo CJK COMPATIBILITY IDEOGRAPH-2F87F +2F880 ; NFKC_SCF; 5D7C # Lo CJK COMPATIBILITY IDEOGRAPH-2F880 +2F881 ; NFKC_SCF; 5DE1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F881 +2F882 ; NFKC_SCF; 5DE2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F882 +2F883 ; NFKC_SCF; 382F # Lo CJK COMPATIBILITY IDEOGRAPH-2F883 +2F884 ; NFKC_SCF; 5DFD # Lo CJK COMPATIBILITY IDEOGRAPH-2F884 +2F885 ; NFKC_SCF; 5E28 # Lo CJK COMPATIBILITY IDEOGRAPH-2F885 +2F886 ; NFKC_SCF; 5E3D # Lo CJK COMPATIBILITY IDEOGRAPH-2F886 +2F887 ; NFKC_SCF; 5E69 # Lo CJK COMPATIBILITY IDEOGRAPH-2F887 +2F888 ; NFKC_SCF; 3862 # Lo CJK COMPATIBILITY IDEOGRAPH-2F888 +2F889 ; NFKC_SCF; 22183 # Lo CJK COMPATIBILITY IDEOGRAPH-2F889 +2F88A ; NFKC_SCF; 387C # Lo CJK COMPATIBILITY IDEOGRAPH-2F88A +2F88B ; NFKC_SCF; 5EB0 # Lo CJK COMPATIBILITY IDEOGRAPH-2F88B +2F88C ; NFKC_SCF; 5EB3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F88C +2F88D ; NFKC_SCF; 5EB6 # Lo CJK COMPATIBILITY IDEOGRAPH-2F88D +2F88E ; NFKC_SCF; 5ECA # Lo CJK COMPATIBILITY IDEOGRAPH-2F88E +2F88F ; NFKC_SCF; 2A392 # Lo CJK COMPATIBILITY IDEOGRAPH-2F88F +2F890 ; NFKC_SCF; 5EFE # Lo CJK COMPATIBILITY IDEOGRAPH-2F890 +2F891..2F892 ; NFKC_SCF; 22331 # Lo [2] CJK COMPATIBILITY IDEOGRAPH-2F891..CJK COMPATIBILITY IDEOGRAPH-2F892 +2F893 ; NFKC_SCF; 8201 # Lo CJK COMPATIBILITY IDEOGRAPH-2F893 +2F894..2F895 ; NFKC_SCF; 5F22 # Lo [2] CJK COMPATIBILITY IDEOGRAPH-2F894..CJK COMPATIBILITY IDEOGRAPH-2F895 +2F896 ; NFKC_SCF; 38C7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F896 +2F897 ; NFKC_SCF; 232B8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F897 +2F898 ; NFKC_SCF; 261DA # Lo CJK COMPATIBILITY IDEOGRAPH-2F898 +2F899 ; NFKC_SCF; 5F62 # Lo CJK COMPATIBILITY IDEOGRAPH-2F899 +2F89A ; NFKC_SCF; 5F6B # Lo CJK COMPATIBILITY IDEOGRAPH-2F89A +2F89B ; NFKC_SCF; 38E3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F89B +2F89C ; NFKC_SCF; 5F9A # Lo CJK COMPATIBILITY IDEOGRAPH-2F89C +2F89D ; NFKC_SCF; 5FCD # Lo CJK COMPATIBILITY IDEOGRAPH-2F89D +2F89E ; NFKC_SCF; 5FD7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F89E +2F89F ; NFKC_SCF; 5FF9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F89F +2F8A0 ; NFKC_SCF; 6081 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8A0 +2F8A1 ; NFKC_SCF; 393A # Lo CJK COMPATIBILITY IDEOGRAPH-2F8A1 +2F8A2 ; NFKC_SCF; 391C # Lo CJK COMPATIBILITY IDEOGRAPH-2F8A2 +2F8A3 ; NFKC_SCF; 6094 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8A3 +2F8A4 ; NFKC_SCF; 226D4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8A4 +2F8A5 ; NFKC_SCF; 60C7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8A5 +2F8A6 ; NFKC_SCF; 6148 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8A6 +2F8A7 ; NFKC_SCF; 614C # Lo CJK COMPATIBILITY IDEOGRAPH-2F8A7 +2F8A8 ; NFKC_SCF; 614E # Lo CJK COMPATIBILITY IDEOGRAPH-2F8A8 +2F8A9 ; NFKC_SCF; 614C # Lo CJK COMPATIBILITY IDEOGRAPH-2F8A9 +2F8AA ; NFKC_SCF; 617A # Lo CJK COMPATIBILITY IDEOGRAPH-2F8AA +2F8AB ; NFKC_SCF; 618E # Lo CJK COMPATIBILITY IDEOGRAPH-2F8AB +2F8AC ; NFKC_SCF; 61B2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8AC +2F8AD ; NFKC_SCF; 61A4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8AD +2F8AE ; NFKC_SCF; 61AF # Lo CJK COMPATIBILITY IDEOGRAPH-2F8AE +2F8AF ; NFKC_SCF; 61DE # Lo CJK COMPATIBILITY IDEOGRAPH-2F8AF +2F8B0 ; NFKC_SCF; 61F2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8B0 +2F8B1 ; NFKC_SCF; 61F6 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8B1 +2F8B2 ; NFKC_SCF; 6210 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8B2 +2F8B3 ; NFKC_SCF; 621B # Lo CJK COMPATIBILITY IDEOGRAPH-2F8B3 +2F8B4 ; NFKC_SCF; 625D # Lo CJK COMPATIBILITY IDEOGRAPH-2F8B4 +2F8B5 ; NFKC_SCF; 62B1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8B5 +2F8B6 ; NFKC_SCF; 62D4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8B6 +2F8B7 ; NFKC_SCF; 6350 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8B7 +2F8B8 ; NFKC_SCF; 22B0C # Lo CJK COMPATIBILITY IDEOGRAPH-2F8B8 +2F8B9 ; NFKC_SCF; 633D # Lo CJK COMPATIBILITY IDEOGRAPH-2F8B9 +2F8BA ; NFKC_SCF; 62FC # Lo CJK COMPATIBILITY IDEOGRAPH-2F8BA +2F8BB ; NFKC_SCF; 6368 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8BB +2F8BC ; NFKC_SCF; 6383 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8BC +2F8BD ; NFKC_SCF; 63E4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8BD +2F8BE ; NFKC_SCF; 22BF1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8BE +2F8BF ; NFKC_SCF; 6422 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8BF +2F8C0 ; NFKC_SCF; 63C5 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8C0 +2F8C1 ; NFKC_SCF; 63A9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8C1 +2F8C2 ; NFKC_SCF; 3A2E # Lo CJK COMPATIBILITY IDEOGRAPH-2F8C2 +2F8C3 ; NFKC_SCF; 6469 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8C3 +2F8C4 ; NFKC_SCF; 647E # Lo CJK COMPATIBILITY IDEOGRAPH-2F8C4 +2F8C5 ; NFKC_SCF; 649D # Lo CJK COMPATIBILITY IDEOGRAPH-2F8C5 +2F8C6 ; NFKC_SCF; 6477 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8C6 +2F8C7 ; NFKC_SCF; 3A6C # Lo CJK COMPATIBILITY IDEOGRAPH-2F8C7 +2F8C8 ; NFKC_SCF; 654F # Lo CJK COMPATIBILITY IDEOGRAPH-2F8C8 +2F8C9 ; NFKC_SCF; 656C # Lo CJK COMPATIBILITY IDEOGRAPH-2F8C9 +2F8CA ; NFKC_SCF; 2300A # Lo CJK COMPATIBILITY IDEOGRAPH-2F8CA +2F8CB ; NFKC_SCF; 65E3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8CB +2F8CC ; NFKC_SCF; 66F8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8CC +2F8CD ; NFKC_SCF; 6649 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8CD +2F8CE ; NFKC_SCF; 3B19 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8CE +2F8CF ; NFKC_SCF; 6691 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8CF +2F8D0 ; NFKC_SCF; 3B08 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8D0 +2F8D1 ; NFKC_SCF; 3AE4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8D1 +2F8D2 ; NFKC_SCF; 5192 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8D2 +2F8D3 ; NFKC_SCF; 5195 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8D3 +2F8D4 ; NFKC_SCF; 6700 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8D4 +2F8D5 ; NFKC_SCF; 669C # Lo CJK COMPATIBILITY IDEOGRAPH-2F8D5 +2F8D6 ; NFKC_SCF; 80AD # Lo CJK COMPATIBILITY IDEOGRAPH-2F8D6 +2F8D7 ; NFKC_SCF; 43D9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8D7 +2F8D8 ; NFKC_SCF; 6717 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8D8 +2F8D9 ; NFKC_SCF; 671B # Lo CJK COMPATIBILITY IDEOGRAPH-2F8D9 +2F8DA ; NFKC_SCF; 6721 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8DA +2F8DB ; NFKC_SCF; 675E # Lo CJK COMPATIBILITY IDEOGRAPH-2F8DB +2F8DC ; NFKC_SCF; 6753 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8DC +2F8DD ; NFKC_SCF; 233C3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8DD +2F8DE ; NFKC_SCF; 3B49 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8DE +2F8DF ; NFKC_SCF; 67FA # Lo CJK COMPATIBILITY IDEOGRAPH-2F8DF +2F8E0 ; NFKC_SCF; 6785 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8E0 +2F8E1 ; NFKC_SCF; 6852 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8E1 +2F8E2 ; NFKC_SCF; 6885 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8E2 +2F8E3 ; NFKC_SCF; 2346D # Lo CJK COMPATIBILITY IDEOGRAPH-2F8E3 +2F8E4 ; NFKC_SCF; 688E # Lo CJK COMPATIBILITY IDEOGRAPH-2F8E4 +2F8E5 ; NFKC_SCF; 681F # Lo CJK COMPATIBILITY IDEOGRAPH-2F8E5 +2F8E6 ; NFKC_SCF; 6914 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8E6 +2F8E7 ; NFKC_SCF; 3B9D # Lo CJK COMPATIBILITY IDEOGRAPH-2F8E7 +2F8E8 ; NFKC_SCF; 6942 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8E8 +2F8E9 ; NFKC_SCF; 69A3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8E9 +2F8EA ; NFKC_SCF; 69EA # Lo CJK COMPATIBILITY IDEOGRAPH-2F8EA +2F8EB ; NFKC_SCF; 6AA8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8EB +2F8EC ; NFKC_SCF; 236A3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8EC +2F8ED ; NFKC_SCF; 6ADB # Lo CJK COMPATIBILITY IDEOGRAPH-2F8ED +2F8EE ; NFKC_SCF; 3C18 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8EE +2F8EF ; NFKC_SCF; 6B21 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8EF +2F8F0 ; NFKC_SCF; 238A7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8F0 +2F8F1 ; NFKC_SCF; 6B54 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8F1 +2F8F2 ; NFKC_SCF; 3C4E # Lo CJK COMPATIBILITY IDEOGRAPH-2F8F2 +2F8F3 ; NFKC_SCF; 6B72 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8F3 +2F8F4 ; NFKC_SCF; 6B9F # Lo CJK COMPATIBILITY IDEOGRAPH-2F8F4 +2F8F5 ; NFKC_SCF; 6BBA # Lo CJK COMPATIBILITY IDEOGRAPH-2F8F5 +2F8F6 ; NFKC_SCF; 6BBB # Lo CJK COMPATIBILITY IDEOGRAPH-2F8F6 +2F8F7 ; NFKC_SCF; 23A8D # Lo CJK COMPATIBILITY IDEOGRAPH-2F8F7 +2F8F8 ; NFKC_SCF; 21D0B # Lo CJK COMPATIBILITY IDEOGRAPH-2F8F8 +2F8F9 ; NFKC_SCF; 23AFA # Lo CJK COMPATIBILITY IDEOGRAPH-2F8F9 +2F8FA ; NFKC_SCF; 6C4E # Lo CJK COMPATIBILITY IDEOGRAPH-2F8FA +2F8FB ; NFKC_SCF; 23CBC # Lo CJK COMPATIBILITY IDEOGRAPH-2F8FB +2F8FC ; NFKC_SCF; 6CBF # Lo CJK COMPATIBILITY IDEOGRAPH-2F8FC +2F8FD ; NFKC_SCF; 6CCD # Lo CJK COMPATIBILITY IDEOGRAPH-2F8FD +2F8FE ; NFKC_SCF; 6C67 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8FE +2F8FF ; NFKC_SCF; 6D16 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8FF +2F900 ; NFKC_SCF; 6D3E # Lo CJK COMPATIBILITY IDEOGRAPH-2F900 +2F901 ; NFKC_SCF; 6D77 # Lo CJK COMPATIBILITY IDEOGRAPH-2F901 +2F902 ; NFKC_SCF; 6D41 # Lo CJK COMPATIBILITY IDEOGRAPH-2F902 +2F903 ; NFKC_SCF; 6D69 # Lo CJK COMPATIBILITY IDEOGRAPH-2F903 +2F904 ; NFKC_SCF; 6D78 # Lo CJK COMPATIBILITY IDEOGRAPH-2F904 +2F905 ; NFKC_SCF; 6D85 # Lo CJK COMPATIBILITY IDEOGRAPH-2F905 +2F906 ; NFKC_SCF; 23D1E # Lo CJK COMPATIBILITY IDEOGRAPH-2F906 +2F907 ; NFKC_SCF; 6D34 # Lo CJK COMPATIBILITY IDEOGRAPH-2F907 +2F908 ; NFKC_SCF; 6E2F # Lo CJK COMPATIBILITY IDEOGRAPH-2F908 +2F909 ; NFKC_SCF; 6E6E # Lo CJK COMPATIBILITY IDEOGRAPH-2F909 +2F90A ; NFKC_SCF; 3D33 # Lo CJK COMPATIBILITY IDEOGRAPH-2F90A +2F90B ; NFKC_SCF; 6ECB # Lo CJK COMPATIBILITY IDEOGRAPH-2F90B +2F90C ; NFKC_SCF; 6EC7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F90C +2F90D ; NFKC_SCF; 23ED1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F90D +2F90E ; NFKC_SCF; 6DF9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F90E +2F90F ; NFKC_SCF; 6F6E # Lo CJK COMPATIBILITY IDEOGRAPH-2F90F +2F910 ; NFKC_SCF; 23F5E # Lo CJK COMPATIBILITY IDEOGRAPH-2F910 +2F911 ; NFKC_SCF; 23F8E # Lo CJK COMPATIBILITY IDEOGRAPH-2F911 +2F912 ; NFKC_SCF; 6FC6 # Lo CJK COMPATIBILITY IDEOGRAPH-2F912 +2F913 ; NFKC_SCF; 7039 # Lo CJK COMPATIBILITY IDEOGRAPH-2F913 +2F914 ; NFKC_SCF; 701E # Lo CJK COMPATIBILITY IDEOGRAPH-2F914 +2F915 ; NFKC_SCF; 701B # Lo CJK COMPATIBILITY IDEOGRAPH-2F915 +2F916 ; NFKC_SCF; 3D96 # Lo CJK COMPATIBILITY IDEOGRAPH-2F916 +2F917 ; NFKC_SCF; 704A # Lo CJK COMPATIBILITY IDEOGRAPH-2F917 +2F918 ; NFKC_SCF; 707D # Lo CJK COMPATIBILITY IDEOGRAPH-2F918 +2F919 ; NFKC_SCF; 7077 # Lo CJK COMPATIBILITY IDEOGRAPH-2F919 +2F91A ; NFKC_SCF; 70AD # Lo CJK COMPATIBILITY IDEOGRAPH-2F91A +2F91B ; NFKC_SCF; 20525 # Lo CJK COMPATIBILITY IDEOGRAPH-2F91B +2F91C ; NFKC_SCF; 7145 # Lo CJK COMPATIBILITY IDEOGRAPH-2F91C +2F91D ; NFKC_SCF; 24263 # Lo CJK COMPATIBILITY IDEOGRAPH-2F91D +2F91E ; NFKC_SCF; 719C # Lo CJK COMPATIBILITY IDEOGRAPH-2F91E +2F91F ; NFKC_SCF; 243AB # Lo CJK COMPATIBILITY IDEOGRAPH-2F91F +2F920 ; NFKC_SCF; 7228 # Lo CJK COMPATIBILITY IDEOGRAPH-2F920 +2F921 ; NFKC_SCF; 7235 # Lo CJK COMPATIBILITY IDEOGRAPH-2F921 +2F922 ; NFKC_SCF; 7250 # Lo CJK COMPATIBILITY IDEOGRAPH-2F922 +2F923 ; NFKC_SCF; 24608 # Lo CJK COMPATIBILITY IDEOGRAPH-2F923 +2F924 ; NFKC_SCF; 7280 # Lo CJK COMPATIBILITY IDEOGRAPH-2F924 +2F925 ; NFKC_SCF; 7295 # Lo CJK COMPATIBILITY IDEOGRAPH-2F925 +2F926 ; NFKC_SCF; 24735 # Lo CJK COMPATIBILITY IDEOGRAPH-2F926 +2F927 ; NFKC_SCF; 24814 # Lo CJK COMPATIBILITY IDEOGRAPH-2F927 +2F928 ; NFKC_SCF; 737A # Lo CJK COMPATIBILITY IDEOGRAPH-2F928 +2F929 ; NFKC_SCF; 738B # Lo CJK COMPATIBILITY IDEOGRAPH-2F929 +2F92A ; NFKC_SCF; 3EAC # Lo CJK COMPATIBILITY IDEOGRAPH-2F92A +2F92B ; NFKC_SCF; 73A5 # Lo CJK COMPATIBILITY IDEOGRAPH-2F92B +2F92C..2F92D ; NFKC_SCF; 3EB8 # Lo [2] CJK COMPATIBILITY IDEOGRAPH-2F92C..CJK COMPATIBILITY IDEOGRAPH-2F92D +2F92E ; NFKC_SCF; 7447 # Lo CJK COMPATIBILITY IDEOGRAPH-2F92E +2F92F ; NFKC_SCF; 745C # Lo CJK COMPATIBILITY IDEOGRAPH-2F92F +2F930 ; NFKC_SCF; 7471 # Lo CJK COMPATIBILITY IDEOGRAPH-2F930 +2F931 ; NFKC_SCF; 7485 # Lo CJK COMPATIBILITY IDEOGRAPH-2F931 +2F932 ; NFKC_SCF; 74CA # Lo CJK COMPATIBILITY IDEOGRAPH-2F932 +2F933 ; NFKC_SCF; 3F1B # Lo CJK COMPATIBILITY IDEOGRAPH-2F933 +2F934 ; NFKC_SCF; 7524 # Lo CJK COMPATIBILITY IDEOGRAPH-2F934 +2F935 ; NFKC_SCF; 24C36 # Lo CJK COMPATIBILITY IDEOGRAPH-2F935 +2F936 ; NFKC_SCF; 753E # Lo CJK COMPATIBILITY IDEOGRAPH-2F936 +2F937 ; NFKC_SCF; 24C92 # Lo CJK COMPATIBILITY IDEOGRAPH-2F937 +2F938 ; NFKC_SCF; 7570 # Lo CJK COMPATIBILITY IDEOGRAPH-2F938 +2F939 ; NFKC_SCF; 2219F # Lo CJK COMPATIBILITY IDEOGRAPH-2F939 +2F93A ; NFKC_SCF; 7610 # Lo CJK COMPATIBILITY IDEOGRAPH-2F93A +2F93B ; NFKC_SCF; 24FA1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F93B +2F93C ; NFKC_SCF; 24FB8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F93C +2F93D ; NFKC_SCF; 25044 # Lo CJK COMPATIBILITY IDEOGRAPH-2F93D +2F93E ; NFKC_SCF; 3FFC # Lo CJK COMPATIBILITY IDEOGRAPH-2F93E +2F93F ; NFKC_SCF; 4008 # Lo CJK COMPATIBILITY IDEOGRAPH-2F93F +2F940 ; NFKC_SCF; 76F4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F940 +2F941 ; NFKC_SCF; 250F3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F941 +2F942 ; NFKC_SCF; 250F2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F942 +2F943 ; NFKC_SCF; 25119 # Lo CJK COMPATIBILITY IDEOGRAPH-2F943 +2F944 ; NFKC_SCF; 25133 # Lo CJK COMPATIBILITY IDEOGRAPH-2F944 +2F945 ; NFKC_SCF; 771E # Lo CJK COMPATIBILITY IDEOGRAPH-2F945 +2F946..2F947 ; NFKC_SCF; 771F # Lo [2] CJK COMPATIBILITY IDEOGRAPH-2F946..CJK COMPATIBILITY IDEOGRAPH-2F947 +2F948 ; NFKC_SCF; 774A # Lo CJK COMPATIBILITY IDEOGRAPH-2F948 +2F949 ; NFKC_SCF; 4039 # Lo CJK COMPATIBILITY IDEOGRAPH-2F949 +2F94A ; NFKC_SCF; 778B # Lo CJK COMPATIBILITY IDEOGRAPH-2F94A +2F94B ; NFKC_SCF; 4046 # Lo CJK COMPATIBILITY IDEOGRAPH-2F94B +2F94C ; NFKC_SCF; 4096 # Lo CJK COMPATIBILITY IDEOGRAPH-2F94C +2F94D ; NFKC_SCF; 2541D # Lo CJK COMPATIBILITY IDEOGRAPH-2F94D +2F94E ; NFKC_SCF; 784E # Lo CJK COMPATIBILITY IDEOGRAPH-2F94E +2F94F ; NFKC_SCF; 788C # Lo CJK COMPATIBILITY IDEOGRAPH-2F94F +2F950 ; NFKC_SCF; 78CC # Lo CJK COMPATIBILITY IDEOGRAPH-2F950 +2F951 ; NFKC_SCF; 40E3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F951 +2F952 ; NFKC_SCF; 25626 # Lo CJK COMPATIBILITY IDEOGRAPH-2F952 +2F953 ; NFKC_SCF; 7956 # Lo CJK COMPATIBILITY IDEOGRAPH-2F953 +2F954 ; NFKC_SCF; 2569A # Lo CJK COMPATIBILITY IDEOGRAPH-2F954 +2F955 ; NFKC_SCF; 256C5 # Lo CJK COMPATIBILITY IDEOGRAPH-2F955 +2F956 ; NFKC_SCF; 798F # Lo CJK COMPATIBILITY IDEOGRAPH-2F956 +2F957 ; NFKC_SCF; 79EB # Lo CJK COMPATIBILITY IDEOGRAPH-2F957 +2F958 ; NFKC_SCF; 412F # Lo CJK COMPATIBILITY IDEOGRAPH-2F958 +2F959 ; NFKC_SCF; 7A40 # Lo CJK COMPATIBILITY IDEOGRAPH-2F959 +2F95A ; NFKC_SCF; 7A4A # Lo CJK COMPATIBILITY IDEOGRAPH-2F95A +2F95B ; NFKC_SCF; 7A4F # Lo CJK COMPATIBILITY IDEOGRAPH-2F95B +2F95C ; NFKC_SCF; 2597C # Lo CJK COMPATIBILITY IDEOGRAPH-2F95C +2F95D..2F95E ; NFKC_SCF; 25AA7 # Lo [2] CJK COMPATIBILITY IDEOGRAPH-2F95D..CJK COMPATIBILITY IDEOGRAPH-2F95E +2F95F ; NFKC_SCF; 7AEE # Lo CJK COMPATIBILITY IDEOGRAPH-2F95F +2F960 ; NFKC_SCF; 4202 # Lo CJK COMPATIBILITY IDEOGRAPH-2F960 +2F961 ; NFKC_SCF; 25BAB # Lo CJK COMPATIBILITY IDEOGRAPH-2F961 +2F962 ; NFKC_SCF; 7BC6 # Lo CJK COMPATIBILITY IDEOGRAPH-2F962 +2F963 ; NFKC_SCF; 7BC9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F963 +2F964 ; NFKC_SCF; 4227 # Lo CJK COMPATIBILITY IDEOGRAPH-2F964 +2F965 ; NFKC_SCF; 25C80 # Lo CJK COMPATIBILITY IDEOGRAPH-2F965 +2F966 ; NFKC_SCF; 7CD2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F966 +2F967 ; NFKC_SCF; 42A0 # Lo CJK COMPATIBILITY IDEOGRAPH-2F967 +2F968 ; NFKC_SCF; 7CE8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F968 +2F969 ; NFKC_SCF; 7CE3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F969 +2F96A ; NFKC_SCF; 7D00 # Lo CJK COMPATIBILITY IDEOGRAPH-2F96A +2F96B ; NFKC_SCF; 25F86 # Lo CJK COMPATIBILITY IDEOGRAPH-2F96B +2F96C ; NFKC_SCF; 7D63 # Lo CJK COMPATIBILITY IDEOGRAPH-2F96C +2F96D ; NFKC_SCF; 4301 # Lo CJK COMPATIBILITY IDEOGRAPH-2F96D +2F96E ; NFKC_SCF; 7DC7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F96E +2F96F ; NFKC_SCF; 7E02 # Lo CJK COMPATIBILITY IDEOGRAPH-2F96F +2F970 ; NFKC_SCF; 7E45 # Lo CJK COMPATIBILITY IDEOGRAPH-2F970 +2F971 ; NFKC_SCF; 4334 # Lo CJK COMPATIBILITY IDEOGRAPH-2F971 +2F972 ; NFKC_SCF; 26228 # Lo CJK COMPATIBILITY IDEOGRAPH-2F972 +2F973 ; NFKC_SCF; 26247 # Lo CJK COMPATIBILITY IDEOGRAPH-2F973 +2F974 ; NFKC_SCF; 4359 # Lo CJK COMPATIBILITY IDEOGRAPH-2F974 +2F975 ; NFKC_SCF; 262D9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F975 +2F976 ; NFKC_SCF; 7F7A # Lo CJK COMPATIBILITY IDEOGRAPH-2F976 +2F977 ; NFKC_SCF; 2633E # Lo CJK COMPATIBILITY IDEOGRAPH-2F977 +2F978 ; NFKC_SCF; 7F95 # Lo CJK COMPATIBILITY IDEOGRAPH-2F978 +2F979 ; NFKC_SCF; 7FFA # Lo CJK COMPATIBILITY IDEOGRAPH-2F979 +2F97A ; NFKC_SCF; 8005 # Lo CJK COMPATIBILITY IDEOGRAPH-2F97A +2F97B ; NFKC_SCF; 264DA # Lo CJK COMPATIBILITY IDEOGRAPH-2F97B +2F97C ; NFKC_SCF; 26523 # Lo CJK COMPATIBILITY IDEOGRAPH-2F97C +2F97D ; NFKC_SCF; 8060 # Lo CJK COMPATIBILITY IDEOGRAPH-2F97D +2F97E ; NFKC_SCF; 265A8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F97E +2F97F ; NFKC_SCF; 8070 # Lo CJK COMPATIBILITY IDEOGRAPH-2F97F +2F980 ; NFKC_SCF; 2335F # Lo CJK COMPATIBILITY IDEOGRAPH-2F980 +2F981 ; NFKC_SCF; 43D5 # Lo CJK COMPATIBILITY IDEOGRAPH-2F981 +2F982 ; NFKC_SCF; 80B2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F982 +2F983 ; NFKC_SCF; 8103 # Lo CJK COMPATIBILITY IDEOGRAPH-2F983 +2F984 ; NFKC_SCF; 440B # Lo CJK COMPATIBILITY IDEOGRAPH-2F984 +2F985 ; NFKC_SCF; 813E # Lo CJK COMPATIBILITY IDEOGRAPH-2F985 +2F986 ; NFKC_SCF; 5AB5 # Lo CJK COMPATIBILITY IDEOGRAPH-2F986 +2F987 ; NFKC_SCF; 267A7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F987 +2F988 ; NFKC_SCF; 267B5 # Lo CJK COMPATIBILITY IDEOGRAPH-2F988 +2F989 ; NFKC_SCF; 23393 # Lo CJK COMPATIBILITY IDEOGRAPH-2F989 +2F98A ; NFKC_SCF; 2339C # Lo CJK COMPATIBILITY IDEOGRAPH-2F98A +2F98B ; NFKC_SCF; 8201 # Lo CJK COMPATIBILITY IDEOGRAPH-2F98B +2F98C ; NFKC_SCF; 8204 # Lo CJK COMPATIBILITY IDEOGRAPH-2F98C +2F98D ; NFKC_SCF; 8F9E # Lo CJK COMPATIBILITY IDEOGRAPH-2F98D +2F98E ; NFKC_SCF; 446B # Lo CJK COMPATIBILITY IDEOGRAPH-2F98E +2F98F ; NFKC_SCF; 8291 # Lo CJK COMPATIBILITY IDEOGRAPH-2F98F +2F990 ; NFKC_SCF; 828B # Lo CJK COMPATIBILITY IDEOGRAPH-2F990 +2F991 ; NFKC_SCF; 829D # Lo CJK COMPATIBILITY IDEOGRAPH-2F991 +2F992 ; NFKC_SCF; 52B3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F992 +2F993 ; NFKC_SCF; 82B1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F993 +2F994 ; NFKC_SCF; 82B3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F994 +2F995 ; NFKC_SCF; 82BD # Lo CJK COMPATIBILITY IDEOGRAPH-2F995 +2F996 ; NFKC_SCF; 82E6 # Lo CJK COMPATIBILITY IDEOGRAPH-2F996 +2F997 ; NFKC_SCF; 26B3C # Lo CJK COMPATIBILITY IDEOGRAPH-2F997 +2F998 ; NFKC_SCF; 82E5 # Lo CJK COMPATIBILITY IDEOGRAPH-2F998 +2F999 ; NFKC_SCF; 831D # Lo CJK COMPATIBILITY IDEOGRAPH-2F999 +2F99A ; NFKC_SCF; 8363 # Lo CJK COMPATIBILITY IDEOGRAPH-2F99A +2F99B ; NFKC_SCF; 83AD # Lo CJK COMPATIBILITY IDEOGRAPH-2F99B +2F99C ; NFKC_SCF; 8323 # Lo CJK COMPATIBILITY IDEOGRAPH-2F99C +2F99D ; NFKC_SCF; 83BD # Lo CJK COMPATIBILITY IDEOGRAPH-2F99D +2F99E ; NFKC_SCF; 83E7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F99E +2F99F ; NFKC_SCF; 8457 # Lo CJK COMPATIBILITY IDEOGRAPH-2F99F +2F9A0 ; NFKC_SCF; 8353 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9A0 +2F9A1 ; NFKC_SCF; 83CA # Lo CJK COMPATIBILITY IDEOGRAPH-2F9A1 +2F9A2 ; NFKC_SCF; 83CC # Lo CJK COMPATIBILITY IDEOGRAPH-2F9A2 +2F9A3 ; NFKC_SCF; 83DC # Lo CJK COMPATIBILITY IDEOGRAPH-2F9A3 +2F9A4 ; NFKC_SCF; 26C36 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9A4 +2F9A5 ; NFKC_SCF; 26D6B # Lo CJK COMPATIBILITY IDEOGRAPH-2F9A5 +2F9A6 ; NFKC_SCF; 26CD5 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9A6 +2F9A7 ; NFKC_SCF; 452B # Lo CJK COMPATIBILITY IDEOGRAPH-2F9A7 +2F9A8 ; NFKC_SCF; 84F1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9A8 +2F9A9 ; NFKC_SCF; 84F3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9A9 +2F9AA ; NFKC_SCF; 8516 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9AA +2F9AB ; NFKC_SCF; 273CA # Lo CJK COMPATIBILITY IDEOGRAPH-2F9AB +2F9AC ; NFKC_SCF; 8564 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9AC +2F9AD ; NFKC_SCF; 26F2C # Lo CJK COMPATIBILITY IDEOGRAPH-2F9AD +2F9AE ; NFKC_SCF; 455D # Lo CJK COMPATIBILITY IDEOGRAPH-2F9AE +2F9AF ; NFKC_SCF; 4561 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9AF +2F9B0 ; NFKC_SCF; 26FB1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9B0 +2F9B1 ; NFKC_SCF; 270D2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9B1 +2F9B2 ; NFKC_SCF; 456B # Lo CJK COMPATIBILITY IDEOGRAPH-2F9B2 +2F9B3 ; NFKC_SCF; 8650 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9B3 +2F9B4 ; NFKC_SCF; 865C # Lo CJK COMPATIBILITY IDEOGRAPH-2F9B4 +2F9B5 ; NFKC_SCF; 8667 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9B5 +2F9B6 ; NFKC_SCF; 8669 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9B6 +2F9B7 ; NFKC_SCF; 86A9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9B7 +2F9B8 ; NFKC_SCF; 8688 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9B8 +2F9B9 ; NFKC_SCF; 870E # Lo CJK COMPATIBILITY IDEOGRAPH-2F9B9 +2F9BA ; NFKC_SCF; 86E2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9BA +2F9BB ; NFKC_SCF; 8779 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9BB +2F9BC ; NFKC_SCF; 8728 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9BC +2F9BD ; NFKC_SCF; 876B # Lo CJK COMPATIBILITY IDEOGRAPH-2F9BD +2F9BE ; NFKC_SCF; 8786 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9BE +2F9BF ; NFKC_SCF; 45D7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9BF +2F9C0 ; NFKC_SCF; 87E1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9C0 +2F9C1 ; NFKC_SCF; 8801 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9C1 +2F9C2 ; NFKC_SCF; 45F9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9C2 +2F9C3 ; NFKC_SCF; 8860 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9C3 +2F9C4 ; NFKC_SCF; 8863 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9C4 +2F9C5 ; NFKC_SCF; 27667 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9C5 +2F9C6 ; NFKC_SCF; 88D7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9C6 +2F9C7 ; NFKC_SCF; 88DE # Lo CJK COMPATIBILITY IDEOGRAPH-2F9C7 +2F9C8 ; NFKC_SCF; 4635 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9C8 +2F9C9 ; NFKC_SCF; 88FA # Lo CJK COMPATIBILITY IDEOGRAPH-2F9C9 +2F9CA ; NFKC_SCF; 34BB # Lo CJK COMPATIBILITY IDEOGRAPH-2F9CA +2F9CB ; NFKC_SCF; 278AE # Lo CJK COMPATIBILITY IDEOGRAPH-2F9CB +2F9CC ; NFKC_SCF; 27966 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9CC +2F9CD ; NFKC_SCF; 46BE # Lo CJK COMPATIBILITY IDEOGRAPH-2F9CD +2F9CE ; NFKC_SCF; 46C7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9CE +2F9CF ; NFKC_SCF; 8AA0 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9CF +2F9D0 ; NFKC_SCF; 8AED # Lo CJK COMPATIBILITY IDEOGRAPH-2F9D0 +2F9D1 ; NFKC_SCF; 8B8A # Lo CJK COMPATIBILITY IDEOGRAPH-2F9D1 +2F9D2 ; NFKC_SCF; 8C55 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9D2 +2F9D3 ; NFKC_SCF; 27CA8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9D3 +2F9D4 ; NFKC_SCF; 8CAB # Lo CJK COMPATIBILITY IDEOGRAPH-2F9D4 +2F9D5 ; NFKC_SCF; 8CC1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9D5 +2F9D6 ; NFKC_SCF; 8D1B # Lo CJK COMPATIBILITY IDEOGRAPH-2F9D6 +2F9D7 ; NFKC_SCF; 8D77 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9D7 +2F9D8 ; NFKC_SCF; 27F2F # Lo CJK COMPATIBILITY IDEOGRAPH-2F9D8 +2F9D9 ; NFKC_SCF; 20804 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9D9 +2F9DA ; NFKC_SCF; 8DCB # Lo CJK COMPATIBILITY IDEOGRAPH-2F9DA +2F9DB ; NFKC_SCF; 8DBC # Lo CJK COMPATIBILITY IDEOGRAPH-2F9DB +2F9DC ; NFKC_SCF; 8DF0 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9DC +2F9DD ; NFKC_SCF; 208DE # Lo CJK COMPATIBILITY IDEOGRAPH-2F9DD +2F9DE ; NFKC_SCF; 8ED4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9DE +2F9DF ; NFKC_SCF; 8F38 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9DF +2F9E0 ; NFKC_SCF; 285D2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9E0 +2F9E1 ; NFKC_SCF; 285ED # Lo CJK COMPATIBILITY IDEOGRAPH-2F9E1 +2F9E2 ; NFKC_SCF; 9094 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9E2 +2F9E3 ; NFKC_SCF; 90F1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9E3 +2F9E4 ; NFKC_SCF; 9111 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9E4 +2F9E5 ; NFKC_SCF; 2872E # Lo CJK COMPATIBILITY IDEOGRAPH-2F9E5 +2F9E6 ; NFKC_SCF; 911B # Lo CJK COMPATIBILITY IDEOGRAPH-2F9E6 +2F9E7 ; NFKC_SCF; 9238 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9E7 +2F9E8 ; NFKC_SCF; 92D7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9E8 +2F9E9 ; NFKC_SCF; 92D8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9E9 +2F9EA ; NFKC_SCF; 927C # Lo CJK COMPATIBILITY IDEOGRAPH-2F9EA +2F9EB ; NFKC_SCF; 93F9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9EB +2F9EC ; NFKC_SCF; 9415 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9EC +2F9ED ; NFKC_SCF; 28BFA # Lo CJK COMPATIBILITY IDEOGRAPH-2F9ED +2F9EE ; NFKC_SCF; 958B # Lo CJK COMPATIBILITY IDEOGRAPH-2F9EE +2F9EF ; NFKC_SCF; 4995 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9EF +2F9F0 ; NFKC_SCF; 95B7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9F0 +2F9F1 ; NFKC_SCF; 28D77 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9F1 +2F9F2 ; NFKC_SCF; 49E6 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9F2 +2F9F3 ; NFKC_SCF; 96C3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9F3 +2F9F4 ; NFKC_SCF; 5DB2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9F4 +2F9F5 ; NFKC_SCF; 9723 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9F5 +2F9F6 ; NFKC_SCF; 29145 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9F6 +2F9F7 ; NFKC_SCF; 2921A # Lo CJK COMPATIBILITY IDEOGRAPH-2F9F7 +2F9F8 ; NFKC_SCF; 4A6E # Lo CJK COMPATIBILITY IDEOGRAPH-2F9F8 +2F9F9 ; NFKC_SCF; 4A76 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9F9 +2F9FA ; NFKC_SCF; 97E0 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9FA +2F9FB ; NFKC_SCF; 2940A # Lo CJK COMPATIBILITY IDEOGRAPH-2F9FB +2F9FC ; NFKC_SCF; 4AB2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9FC +2F9FD ; NFKC_SCF; 29496 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9FD +2F9FE..2F9FF ; NFKC_SCF; 980B # Lo [2] CJK COMPATIBILITY IDEOGRAPH-2F9FE..CJK COMPATIBILITY IDEOGRAPH-2F9FF +2FA00 ; NFKC_SCF; 9829 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA00 +2FA01 ; NFKC_SCF; 295B6 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA01 +2FA02 ; NFKC_SCF; 98E2 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA02 +2FA03 ; NFKC_SCF; 4B33 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA03 +2FA04 ; NFKC_SCF; 9929 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA04 +2FA05 ; NFKC_SCF; 99A7 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA05 +2FA06 ; NFKC_SCF; 99C2 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA06 +2FA07 ; NFKC_SCF; 99FE # Lo CJK COMPATIBILITY IDEOGRAPH-2FA07 +2FA08 ; NFKC_SCF; 4BCE # Lo CJK COMPATIBILITY IDEOGRAPH-2FA08 +2FA09 ; NFKC_SCF; 29B30 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA09 +2FA0A ; NFKC_SCF; 9B12 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA0A +2FA0B ; NFKC_SCF; 9C40 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA0B +2FA0C ; NFKC_SCF; 9CFD # Lo CJK COMPATIBILITY IDEOGRAPH-2FA0C +2FA0D ; NFKC_SCF; 4CCE # Lo CJK COMPATIBILITY IDEOGRAPH-2FA0D +2FA0E ; NFKC_SCF; 4CED # Lo CJK COMPATIBILITY IDEOGRAPH-2FA0E +2FA0F ; NFKC_SCF; 9D67 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA0F +2FA10 ; NFKC_SCF; 2A0CE # Lo CJK COMPATIBILITY IDEOGRAPH-2FA10 +2FA11 ; NFKC_SCF; 4CF8 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA11 +2FA12 ; NFKC_SCF; 2A105 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA12 +2FA13 ; NFKC_SCF; 2A20E # Lo CJK COMPATIBILITY IDEOGRAPH-2FA13 +2FA14 ; NFKC_SCF; 2A291 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA14 +2FA15 ; NFKC_SCF; 9EBB # Lo CJK COMPATIBILITY IDEOGRAPH-2FA15 +2FA16 ; NFKC_SCF; 4D56 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA16 +2FA17 ; NFKC_SCF; 9EF9 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA17 +2FA18 ; NFKC_SCF; 9EFE # Lo CJK COMPATIBILITY IDEOGRAPH-2FA18 +2FA19 ; NFKC_SCF; 9F05 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA19 +2FA1A ; NFKC_SCF; 9F0F # Lo CJK COMPATIBILITY IDEOGRAPH-2FA1A +2FA1B ; NFKC_SCF; 9F16 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA1B +2FA1C ; NFKC_SCF; 9F3B # Lo CJK COMPATIBILITY IDEOGRAPH-2FA1C +2FA1D ; NFKC_SCF; 2A600 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA1D +E0000 ; NFKC_SCF; # Cn +E0001 ; NFKC_SCF; # Cf LANGUAGE TAG +E0002..E001F ; NFKC_SCF; # Cn [30] .. +E0020..E007F ; NFKC_SCF; # Cf [96] TAG SPACE..CANCEL TAG +E0080..E00FF ; NFKC_SCF; # Cn [128] .. +E0100..E01EF ; NFKC_SCF; # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 +E01F0..E0FFF ; NFKC_SCF; # Cn [3600] .. + +# Total code points: 10453 + +# ================================================ + # Derived Property: Changes_When_NFKC_Casefolded (CWKCF) # Characters that are not stable under an NFKC_Casefold mapping. # As defined by cp != NFKC_Casefold(cp) diff --git a/contrib/unicode/EastAsianWidth.txt b/contrib/unicode/EastAsianWidth.txt index 38b7076c02f7..02df4df475cb 100644 --- a/contrib/unicode/EastAsianWidth.txt +++ b/contrib/unicode/EastAsianWidth.txt @@ -1,11 +1,11 @@ -# EastAsianWidth-15.0.0.txt -# Date: 2022-05-24, 17:40:20 GMT [KW, LI] -# © 2022 Unicode®, Inc. +# EastAsianWidth-15.1.0.txt +# Date: 2023-07-28, 23:34:08 GMT +# © 2023 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see https://www.unicode.org/terms_of_use.html # # Unicode Character Database -# For documentation, see https://www.unicode.org/reports/tr44/ +# For documentation, see https://www.unicode.org/reports/tr44/ # # East_Asian_Width Property # @@ -30,2590 +30,2592 @@ # Character ranges are specified as for other property files in the # Unicode Character Database. # -# For legacy reasons, there are no spaces before or after the semicolon -# which separates the two fields. The comments following the number sign -# "#" list the General_Category property value or the L& alias of the -# derived value LC, the Unicode character name or names, and, in lines -# with ranges of code points, the code point count in square brackets. +# The comments following the number sign "#" list the General_Category +# property value or the L& alias of the derived value LC, the Unicode +# character name or names, and, in lines with ranges of code points, +# the code point count in square brackets. # # For more information, see UAX #11: East Asian Width, # at https://www.unicode.org/reports/tr11/ # # @missing: 0000..10FFFF; N -0000..001F;N # Cc [32] .. -0020;Na # Zs SPACE -0021..0023;Na # Po [3] EXCLAMATION MARK..NUMBER SIGN -0024;Na # Sc DOLLAR SIGN -0025..0027;Na # Po [3] PERCENT SIGN..APOSTROPHE -0028;Na # Ps LEFT PARENTHESIS -0029;Na # Pe RIGHT PARENTHESIS -002A;Na # Po ASTERISK -002B;Na # Sm PLUS SIGN -002C;Na # Po COMMA -002D;Na # Pd HYPHEN-MINUS -002E..002F;Na # Po [2] FULL STOP..SOLIDUS -0030..0039;Na # Nd [10] DIGIT ZERO..DIGIT NINE -003A..003B;Na # Po [2] COLON..SEMICOLON -003C..003E;Na # Sm [3] LESS-THAN SIGN..GREATER-THAN SIGN -003F..0040;Na # Po [2] QUESTION MARK..COMMERCIAL AT -0041..005A;Na # Lu [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z -005B;Na # Ps LEFT SQUARE BRACKET -005C;Na # Po REVERSE SOLIDUS -005D;Na # Pe RIGHT SQUARE BRACKET -005E;Na # Sk CIRCUMFLEX ACCENT -005F;Na # Pc LOW LINE -0060;Na # Sk GRAVE ACCENT -0061..007A;Na # Ll [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z -007B;Na # Ps LEFT CURLY BRACKET -007C;Na # Sm VERTICAL LINE -007D;Na # Pe RIGHT CURLY BRACKET -007E;Na # Sm TILDE -007F;N # Cc -0080..009F;N # Cc [32] .. -00A0;N # Zs NO-BREAK SPACE -00A1;A # Po INVERTED EXCLAMATION MARK -00A2..00A3;Na # Sc [2] CENT SIGN..POUND SIGN -00A4;A # Sc CURRENCY SIGN -00A5;Na # Sc YEN SIGN -00A6;Na # So BROKEN BAR -00A7;A # Po SECTION SIGN -00A8;A # Sk DIAERESIS -00A9;N # So COPYRIGHT SIGN -00AA;A # Lo FEMININE ORDINAL INDICATOR -00AB;N # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -00AC;Na # Sm NOT SIGN -00AD;A # Cf SOFT HYPHEN -00AE;A # So REGISTERED SIGN -00AF;Na # Sk MACRON -00B0;A # So DEGREE SIGN -00B1;A # Sm PLUS-MINUS SIGN -00B2..00B3;A # No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE -00B4;A # Sk ACUTE ACCENT -00B5;N # Ll MICRO SIGN -00B6..00B7;A # Po [2] PILCROW SIGN..MIDDLE DOT -00B8;A # Sk CEDILLA -00B9;A # No SUPERSCRIPT ONE -00BA;A # Lo MASCULINE ORDINAL INDICATOR -00BB;N # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -00BC..00BE;A # No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS -00BF;A # Po INVERTED QUESTION MARK -00C0..00C5;N # Lu [6] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER A WITH RING ABOVE -00C6;A # Lu LATIN CAPITAL LETTER AE -00C7..00CF;N # Lu [9] LATIN CAPITAL LETTER C WITH CEDILLA..LATIN CAPITAL LETTER I WITH DIAERESIS -00D0;A # Lu LATIN CAPITAL LETTER ETH -00D1..00D6;N # Lu [6] LATIN CAPITAL LETTER N WITH TILDE..LATIN CAPITAL LETTER O WITH DIAERESIS -00D7;A # Sm MULTIPLICATION SIGN -00D8;A # Lu LATIN CAPITAL LETTER O WITH STROKE -00D9..00DD;N # Lu [5] LATIN CAPITAL LETTER U WITH GRAVE..LATIN CAPITAL LETTER Y WITH ACUTE -00DE..00E1;A # L& [4] LATIN CAPITAL LETTER THORN..LATIN SMALL LETTER A WITH ACUTE -00E2..00E5;N # Ll [4] LATIN SMALL LETTER A WITH CIRCUMFLEX..LATIN SMALL LETTER A WITH RING ABOVE -00E6;A # Ll LATIN SMALL LETTER AE -00E7;N # Ll LATIN SMALL LETTER C WITH CEDILLA -00E8..00EA;A # Ll [3] LATIN SMALL LETTER E WITH GRAVE..LATIN SMALL LETTER E WITH CIRCUMFLEX -00EB;N # Ll LATIN SMALL LETTER E WITH DIAERESIS -00EC..00ED;A # Ll [2] LATIN SMALL LETTER I WITH GRAVE..LATIN SMALL LETTER I WITH ACUTE -00EE..00EF;N # Ll [2] LATIN SMALL LETTER I WITH CIRCUMFLEX..LATIN SMALL LETTER I WITH DIAERESIS -00F0;A # Ll LATIN SMALL LETTER ETH -00F1;N # Ll LATIN SMALL LETTER N WITH TILDE -00F2..00F3;A # Ll [2] LATIN SMALL LETTER O WITH GRAVE..LATIN SMALL LETTER O WITH ACUTE -00F4..00F6;N # Ll [3] LATIN SMALL LETTER O WITH CIRCUMFLEX..LATIN SMALL LETTER O WITH DIAERESIS -00F7;A # Sm DIVISION SIGN -00F8..00FA;A # Ll [3] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER U WITH ACUTE -00FB;N # Ll LATIN SMALL LETTER U WITH CIRCUMFLEX -00FC;A # Ll LATIN SMALL LETTER U WITH DIAERESIS -00FD;N # Ll LATIN SMALL LETTER Y WITH ACUTE -00FE;A # Ll LATIN SMALL LETTER THORN -00FF;N # Ll LATIN SMALL LETTER Y WITH DIAERESIS -0100;N # Lu LATIN CAPITAL LETTER A WITH MACRON -0101;A # Ll LATIN SMALL LETTER A WITH MACRON -0102..0110;N # L& [15] LATIN CAPITAL LETTER A WITH BREVE..LATIN CAPITAL LETTER D WITH STROKE -0111;A # Ll LATIN SMALL LETTER D WITH STROKE -0112;N # Lu LATIN CAPITAL LETTER E WITH MACRON -0113;A # Ll LATIN SMALL LETTER E WITH MACRON -0114..011A;N # L& [7] LATIN CAPITAL LETTER E WITH BREVE..LATIN CAPITAL LETTER E WITH CARON -011B;A # Ll LATIN SMALL LETTER E WITH CARON -011C..0125;N # L& [10] LATIN CAPITAL LETTER G WITH CIRCUMFLEX..LATIN SMALL LETTER H WITH CIRCUMFLEX -0126..0127;A # L& [2] LATIN CAPITAL LETTER H WITH STROKE..LATIN SMALL LETTER H WITH STROKE -0128..012A;N # L& [3] LATIN CAPITAL LETTER I WITH TILDE..LATIN CAPITAL LETTER I WITH MACRON -012B;A # Ll LATIN SMALL LETTER I WITH MACRON -012C..0130;N # L& [5] LATIN CAPITAL LETTER I WITH BREVE..LATIN CAPITAL LETTER I WITH DOT ABOVE -0131..0133;A # L& [3] LATIN SMALL LETTER DOTLESS I..LATIN SMALL LIGATURE IJ -0134..0137;N # L& [4] LATIN CAPITAL LETTER J WITH CIRCUMFLEX..LATIN SMALL LETTER K WITH CEDILLA -0138;A # Ll LATIN SMALL LETTER KRA -0139..013E;N # L& [6] LATIN CAPITAL LETTER L WITH ACUTE..LATIN SMALL LETTER L WITH CARON -013F..0142;A # L& [4] LATIN CAPITAL LETTER L WITH MIDDLE DOT..LATIN SMALL LETTER L WITH STROKE -0143;N # Lu LATIN CAPITAL LETTER N WITH ACUTE -0144;A # Ll LATIN SMALL LETTER N WITH ACUTE -0145..0147;N # L& [3] LATIN CAPITAL LETTER N WITH CEDILLA..LATIN CAPITAL LETTER N WITH CARON -0148..014B;A # L& [4] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER ENG -014C;N # Lu LATIN CAPITAL LETTER O WITH MACRON -014D;A # Ll LATIN SMALL LETTER O WITH MACRON -014E..0151;N # L& [4] LATIN CAPITAL LETTER O WITH BREVE..LATIN SMALL LETTER O WITH DOUBLE ACUTE -0152..0153;A # L& [2] LATIN CAPITAL LIGATURE OE..LATIN SMALL LIGATURE OE -0154..0165;N # L& [18] LATIN CAPITAL LETTER R WITH ACUTE..LATIN SMALL LETTER T WITH CARON -0166..0167;A # L& [2] LATIN CAPITAL LETTER T WITH STROKE..LATIN SMALL LETTER T WITH STROKE -0168..016A;N # L& [3] LATIN CAPITAL LETTER U WITH TILDE..LATIN CAPITAL LETTER U WITH MACRON -016B;A # Ll LATIN SMALL LETTER U WITH MACRON -016C..017F;N # L& [20] LATIN CAPITAL LETTER U WITH BREVE..LATIN SMALL LETTER LONG S -0180..01BA;N # L& [59] LATIN SMALL LETTER B WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL -01BB;N # Lo LATIN LETTER TWO WITH STROKE -01BC..01BF;N # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN -01C0..01C3;N # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK -01C4..01CD;N # L& [10] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER A WITH CARON -01CE;A # Ll LATIN SMALL LETTER A WITH CARON -01CF;N # Lu LATIN CAPITAL LETTER I WITH CARON -01D0;A # Ll LATIN SMALL LETTER I WITH CARON -01D1;N # Lu LATIN CAPITAL LETTER O WITH CARON -01D2;A # Ll LATIN SMALL LETTER O WITH CARON -01D3;N # Lu LATIN CAPITAL LETTER U WITH CARON -01D4;A # Ll LATIN SMALL LETTER U WITH CARON -01D5;N # Lu LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -01D6;A # Ll LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D7;N # Lu LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -01D8;A # Ll LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D9;N # Lu LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -01DA;A # Ll LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01DB;N # Lu LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -01DC;A # Ll LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DD..024F;N # L& [115] LATIN SMALL LETTER TURNED E..LATIN SMALL LETTER Y WITH STROKE -0250;N # Ll LATIN SMALL LETTER TURNED A -0251;A # Ll LATIN SMALL LETTER ALPHA -0252..0260;N # Ll [15] LATIN SMALL LETTER TURNED ALPHA..LATIN SMALL LETTER G WITH HOOK -0261;A # Ll LATIN SMALL LETTER SCRIPT G -0262..0293;N # Ll [50] LATIN LETTER SMALL CAPITAL G..LATIN SMALL LETTER EZH WITH CURL -0294;N # Lo LATIN LETTER GLOTTAL STOP -0295..02AF;N # Ll [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL -02B0..02C1;N # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP -02C2..02C3;N # Sk [2] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER RIGHT ARROWHEAD -02C4;A # Sk MODIFIER LETTER UP ARROWHEAD -02C5;N # Sk MODIFIER LETTER DOWN ARROWHEAD -02C6;N # Lm MODIFIER LETTER CIRCUMFLEX ACCENT -02C7;A # Lm CARON -02C8;N # Lm MODIFIER LETTER VERTICAL LINE -02C9..02CB;A # Lm [3] MODIFIER LETTER MACRON..MODIFIER LETTER GRAVE ACCENT -02CC;N # Lm MODIFIER LETTER LOW VERTICAL LINE -02CD;A # Lm MODIFIER LETTER LOW MACRON -02CE..02CF;N # Lm [2] MODIFIER LETTER LOW GRAVE ACCENT..MODIFIER LETTER LOW ACUTE ACCENT -02D0;A # Lm MODIFIER LETTER TRIANGULAR COLON -02D1;N # Lm MODIFIER LETTER HALF TRIANGULAR COLON -02D2..02D7;N # Sk [6] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER MINUS SIGN -02D8..02DB;A # Sk [4] BREVE..OGONEK -02DC;N # Sk SMALL TILDE -02DD;A # Sk DOUBLE ACUTE ACCENT -02DE;N # Sk MODIFIER LETTER RHOTIC HOOK -02DF;A # Sk MODIFIER LETTER CROSS ACCENT -02E0..02E4;N # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP -02E5..02EB;N # Sk [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK -02EC;N # Lm MODIFIER LETTER VOICING -02ED;N # Sk MODIFIER LETTER UNASPIRATED -02EE;N # Lm MODIFIER LETTER DOUBLE APOSTROPHE -02EF..02FF;N # Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW -0300..036F;A # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X -0370..0373;N # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI -0374;N # Lm GREEK NUMERAL SIGN -0375;N # Sk GREEK LOWER NUMERAL SIGN -0376..0377;N # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA -037A;N # Lm GREEK YPOGEGRAMMENI -037B..037D;N # Ll [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL -037E;N # Po GREEK QUESTION MARK -037F;N # Lu GREEK CAPITAL LETTER YOT -0384..0385;N # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS -0386;N # Lu GREEK CAPITAL LETTER ALPHA WITH TONOS -0387;N # Po GREEK ANO TELEIA -0388..038A;N # Lu [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS -038C;N # Lu GREEK CAPITAL LETTER OMICRON WITH TONOS -038E..0390;N # L& [3] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -0391..03A1;A # Lu [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO -03A3..03A9;A # Lu [7] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER OMEGA -03AA..03B0;N # L& [7] GREEK CAPITAL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -03B1..03C1;A # Ll [17] GREEK SMALL LETTER ALPHA..GREEK SMALL LETTER RHO -03C2;N # Ll GREEK SMALL LETTER FINAL SIGMA -03C3..03C9;A # Ll [7] GREEK SMALL LETTER SIGMA..GREEK SMALL LETTER OMEGA -03CA..03F5;N # L& [44] GREEK SMALL LETTER IOTA WITH DIALYTIKA..GREEK LUNATE EPSILON SYMBOL -03F6;N # Sm GREEK REVERSED LUNATE EPSILON SYMBOL -03F7..03FF;N # L& [9] GREEK CAPITAL LETTER SHO..GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL -0400;N # Lu CYRILLIC CAPITAL LETTER IE WITH GRAVE -0401;A # Lu CYRILLIC CAPITAL LETTER IO -0402..040F;N # Lu [14] CYRILLIC CAPITAL LETTER DJE..CYRILLIC CAPITAL LETTER DZHE -0410..044F;A # L& [64] CYRILLIC CAPITAL LETTER A..CYRILLIC SMALL LETTER YA -0450;N # Ll CYRILLIC SMALL LETTER IE WITH GRAVE -0451;A # Ll CYRILLIC SMALL LETTER IO -0452..0481;N # L& [48] CYRILLIC SMALL LETTER DJE..CYRILLIC SMALL LETTER KOPPA -0482;N # So CYRILLIC THOUSANDS SIGN -0483..0487;N # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE -0488..0489;N # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN -048A..04FF;N # L& [118] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER HA WITH STROKE -0500..052F;N # L& [48] CYRILLIC CAPITAL LETTER KOMI DE..CYRILLIC SMALL LETTER EL WITH DESCENDER -0531..0556;N # Lu [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH -0559;N # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING -055A..055F;N # Po [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK -0560..0588;N # Ll [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE -0589;N # Po ARMENIAN FULL STOP -058A;N # Pd ARMENIAN HYPHEN -058D..058E;N # So [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN -058F;N # Sc ARMENIAN DRAM SIGN -0591..05BD;N # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG -05BE;N # Pd HEBREW PUNCTUATION MAQAF -05BF;N # Mn HEBREW POINT RAFE -05C0;N # Po HEBREW PUNCTUATION PASEQ -05C1..05C2;N # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT -05C3;N # Po HEBREW PUNCTUATION SOF PASUQ -05C4..05C5;N # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT -05C6;N # Po HEBREW PUNCTUATION NUN HAFUKHA -05C7;N # Mn HEBREW POINT QAMATS QATAN -05D0..05EA;N # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV -05EF..05F2;N # Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD -05F3..05F4;N # Po [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM -0600..0605;N # Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE -0606..0608;N # Sm [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY -0609..060A;N # Po [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN -060B;N # Sc AFGHANI SIGN -060C..060D;N # Po [2] ARABIC COMMA..ARABIC DATE SEPARATOR -060E..060F;N # So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA -0610..061A;N # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA -061B;N # Po ARABIC SEMICOLON -061C;N # Cf ARABIC LETTER MARK -061D..061F;N # Po [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK -0620..063F;N # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE -0640;N # Lm ARABIC TATWEEL -0641..064A;N # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH -064B..065F;N # Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW -0660..0669;N # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE -066A..066D;N # Po [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR -066E..066F;N # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF -0670;N # Mn ARABIC LETTER SUPERSCRIPT ALEF -0671..06D3;N # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE -06D4;N # Po ARABIC FULL STOP -06D5;N # Lo ARABIC LETTER AE -06D6..06DC;N # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN -06DD;N # Cf ARABIC END OF AYAH -06DE;N # So ARABIC START OF RUB EL HIZB -06DF..06E4;N # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA -06E5..06E6;N # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH -06E7..06E8;N # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON -06E9;N # So ARABIC PLACE OF SAJDAH -06EA..06ED;N # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM -06EE..06EF;N # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V -06F0..06F9;N # Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE -06FA..06FC;N # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW -06FD..06FE;N # So [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN -06FF;N # Lo ARABIC LETTER HEH WITH INVERTED V -0700..070D;N # Po [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS -070F;N # Cf SYRIAC ABBREVIATION MARK -0710;N # Lo SYRIAC LETTER ALAPH -0711;N # Mn SYRIAC LETTER SUPERSCRIPT ALAPH -0712..072F;N # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH -0730..074A;N # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH -074D..074F;N # Lo [3] SYRIAC LETTER SOGDIAN ZHAIN..SYRIAC LETTER SOGDIAN FE -0750..077F;N # Lo [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE -0780..07A5;N # Lo [38] THAANA LETTER HAA..THAANA LETTER WAAVU -07A6..07B0;N # Mn [11] THAANA ABAFILI..THAANA SUKUN -07B1;N # Lo THAANA LETTER NAA -07C0..07C9;N # Nd [10] NKO DIGIT ZERO..NKO DIGIT NINE -07CA..07EA;N # Lo [33] NKO LETTER A..NKO LETTER JONA RA -07EB..07F3;N # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE -07F4..07F5;N # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE -07F6;N # So NKO SYMBOL OO DENNEN -07F7..07F9;N # Po [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK -07FA;N # Lm NKO LAJANYALAN -07FD;N # Mn NKO DANTAYALAN -07FE..07FF;N # Sc [2] NKO DOROME SIGN..NKO TAMAN SIGN -0800..0815;N # Lo [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF -0816..0819;N # Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH -081A;N # Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT -081B..0823;N # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A -0824;N # Lm SAMARITAN MODIFIER LETTER SHORT A -0825..0827;N # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U -0828;N # Lm SAMARITAN MODIFIER LETTER I -0829..082D;N # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA -0830..083E;N # Po [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU -0840..0858;N # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN -0859..085B;N # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK -085E;N # Po MANDAIC PUNCTUATION -0860..086A;N # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA -0870..0887;N # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT -0888;N # Sk ARABIC RAISED ROUND DOT -0889..088E;N # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL -0890..0891;N # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE -0898..089F;N # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA -08A0..08C8;N # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF -08C9;N # Lm ARABIC SMALL FARSI YEH -08CA..08E1;N # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA -08E2;N # Cf ARABIC DISPUTED END OF AYAH -08E3..08FF;N # Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA -0900..0902;N # Mn [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA -0903;N # Mc DEVANAGARI SIGN VISARGA -0904..0939;N # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA -093A;N # Mn DEVANAGARI VOWEL SIGN OE -093B;N # Mc DEVANAGARI VOWEL SIGN OOE -093C;N # Mn DEVANAGARI SIGN NUKTA -093D;N # Lo DEVANAGARI SIGN AVAGRAHA -093E..0940;N # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II -0941..0948;N # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI -0949..094C;N # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU -094D;N # Mn DEVANAGARI SIGN VIRAMA -094E..094F;N # Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW -0950;N # Lo DEVANAGARI OM -0951..0957;N # Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE -0958..0961;N # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL -0962..0963;N # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL -0964..0965;N # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA -0966..096F;N # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE -0970;N # Po DEVANAGARI ABBREVIATION SIGN -0971;N # Lm DEVANAGARI SIGN HIGH SPACING DOT -0972..097F;N # Lo [14] DEVANAGARI LETTER CANDRA A..DEVANAGARI LETTER BBA -0980;N # Lo BENGALI ANJI -0981;N # Mn BENGALI SIGN CANDRABINDU -0982..0983;N # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA -0985..098C;N # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L -098F..0990;N # Lo [2] BENGALI LETTER E..BENGALI LETTER AI -0993..09A8;N # Lo [22] BENGALI LETTER O..BENGALI LETTER NA -09AA..09B0;N # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA -09B2;N # Lo BENGALI LETTER LA -09B6..09B9;N # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA -09BC;N # Mn BENGALI SIGN NUKTA -09BD;N # Lo BENGALI SIGN AVAGRAHA -09BE..09C0;N # Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II -09C1..09C4;N # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR -09C7..09C8;N # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI -09CB..09CC;N # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU -09CD;N # Mn BENGALI SIGN VIRAMA -09CE;N # Lo BENGALI LETTER KHANDA TA -09D7;N # Mc BENGALI AU LENGTH MARK -09DC..09DD;N # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA -09DF..09E1;N # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL -09E2..09E3;N # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL -09E6..09EF;N # Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE -09F0..09F1;N # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL -09F2..09F3;N # Sc [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN -09F4..09F9;N # No [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN -09FA;N # So BENGALI ISSHAR -09FB;N # Sc BENGALI GANDA MARK -09FC;N # Lo BENGALI LETTER VEDIC ANUSVARA -09FD;N # Po BENGALI ABBREVIATION SIGN -09FE;N # Mn BENGALI SANDHI MARK -0A01..0A02;N # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI -0A03;N # Mc GURMUKHI SIGN VISARGA -0A05..0A0A;N # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU -0A0F..0A10;N # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI -0A13..0A28;N # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA -0A2A..0A30;N # Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA -0A32..0A33;N # Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA -0A35..0A36;N # Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA -0A38..0A39;N # Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA -0A3C;N # Mn GURMUKHI SIGN NUKTA -0A3E..0A40;N # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II -0A41..0A42;N # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU -0A47..0A48;N # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI -0A4B..0A4D;N # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA -0A51;N # Mn GURMUKHI SIGN UDAAT -0A59..0A5C;N # Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA -0A5E;N # Lo GURMUKHI LETTER FA -0A66..0A6F;N # Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE -0A70..0A71;N # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK -0A72..0A74;N # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR -0A75;N # Mn GURMUKHI SIGN YAKASH -0A76;N # Po GURMUKHI ABBREVIATION SIGN -0A81..0A82;N # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA -0A83;N # Mc GUJARATI SIGN VISARGA -0A85..0A8D;N # Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E -0A8F..0A91;N # Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O -0A93..0AA8;N # Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA -0AAA..0AB0;N # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA -0AB2..0AB3;N # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA -0AB5..0AB9;N # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA -0ABC;N # Mn GUJARATI SIGN NUKTA -0ABD;N # Lo GUJARATI SIGN AVAGRAHA -0ABE..0AC0;N # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II -0AC1..0AC5;N # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E -0AC7..0AC8;N # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI -0AC9;N # Mc GUJARATI VOWEL SIGN CANDRA O -0ACB..0ACC;N # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU -0ACD;N # Mn GUJARATI SIGN VIRAMA -0AD0;N # Lo GUJARATI OM -0AE0..0AE1;N # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL -0AE2..0AE3;N # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL -0AE6..0AEF;N # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE -0AF0;N # Po GUJARATI ABBREVIATION SIGN -0AF1;N # Sc GUJARATI RUPEE SIGN -0AF9;N # Lo GUJARATI LETTER ZHA -0AFA..0AFF;N # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE -0B01;N # Mn ORIYA SIGN CANDRABINDU -0B02..0B03;N # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA -0B05..0B0C;N # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L -0B0F..0B10;N # Lo [2] ORIYA LETTER E..ORIYA LETTER AI -0B13..0B28;N # Lo [22] ORIYA LETTER O..ORIYA LETTER NA -0B2A..0B30;N # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA -0B32..0B33;N # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA -0B35..0B39;N # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA -0B3C;N # Mn ORIYA SIGN NUKTA -0B3D;N # Lo ORIYA SIGN AVAGRAHA -0B3E;N # Mc ORIYA VOWEL SIGN AA -0B3F;N # Mn ORIYA VOWEL SIGN I -0B40;N # Mc ORIYA VOWEL SIGN II -0B41..0B44;N # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR -0B47..0B48;N # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI -0B4B..0B4C;N # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU -0B4D;N # Mn ORIYA SIGN VIRAMA -0B55..0B56;N # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK -0B57;N # Mc ORIYA AU LENGTH MARK -0B5C..0B5D;N # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA -0B5F..0B61;N # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL -0B62..0B63;N # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL -0B66..0B6F;N # Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE -0B70;N # So ORIYA ISSHAR -0B71;N # Lo ORIYA LETTER WA -0B72..0B77;N # No [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS -0B82;N # Mn TAMIL SIGN ANUSVARA -0B83;N # Lo TAMIL SIGN VISARGA -0B85..0B8A;N # Lo [6] TAMIL LETTER A..TAMIL LETTER UU -0B8E..0B90;N # Lo [3] TAMIL LETTER E..TAMIL LETTER AI -0B92..0B95;N # Lo [4] TAMIL LETTER O..TAMIL LETTER KA -0B99..0B9A;N # Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA -0B9C;N # Lo TAMIL LETTER JA -0B9E..0B9F;N # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA -0BA3..0BA4;N # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA -0BA8..0BAA;N # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA -0BAE..0BB9;N # Lo [12] TAMIL LETTER MA..TAMIL LETTER HA -0BBE..0BBF;N # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I -0BC0;N # Mn TAMIL VOWEL SIGN II -0BC1..0BC2;N # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU -0BC6..0BC8;N # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI -0BCA..0BCC;N # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU -0BCD;N # Mn TAMIL SIGN VIRAMA -0BD0;N # Lo TAMIL OM -0BD7;N # Mc TAMIL AU LENGTH MARK -0BE6..0BEF;N # Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE -0BF0..0BF2;N # No [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND -0BF3..0BF8;N # So [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN -0BF9;N # Sc TAMIL RUPEE SIGN -0BFA;N # So TAMIL NUMBER SIGN -0C00;N # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE -0C01..0C03;N # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA -0C04;N # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE -0C05..0C0C;N # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L -0C0E..0C10;N # Lo [3] TELUGU LETTER E..TELUGU LETTER AI -0C12..0C28;N # Lo [23] TELUGU LETTER O..TELUGU LETTER NA -0C2A..0C39;N # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA -0C3C;N # Mn TELUGU SIGN NUKTA -0C3D;N # Lo TELUGU SIGN AVAGRAHA -0C3E..0C40;N # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II -0C41..0C44;N # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR -0C46..0C48;N # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI -0C4A..0C4D;N # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA -0C55..0C56;N # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK -0C58..0C5A;N # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA -0C5D;N # Lo TELUGU LETTER NAKAARA POLLU -0C60..0C61;N # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL -0C62..0C63;N # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL -0C66..0C6F;N # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE -0C77;N # Po TELUGU SIGN SIDDHAM -0C78..0C7E;N # No [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR -0C7F;N # So TELUGU SIGN TUUMU -0C80;N # Lo KANNADA SIGN SPACING CANDRABINDU -0C81;N # Mn KANNADA SIGN CANDRABINDU -0C82..0C83;N # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA -0C84;N # Po KANNADA SIGN SIDDHAM -0C85..0C8C;N # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L -0C8E..0C90;N # Lo [3] KANNADA LETTER E..KANNADA LETTER AI -0C92..0CA8;N # Lo [23] KANNADA LETTER O..KANNADA LETTER NA -0CAA..0CB3;N # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA -0CB5..0CB9;N # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA -0CBC;N # Mn KANNADA SIGN NUKTA -0CBD;N # Lo KANNADA SIGN AVAGRAHA -0CBE;N # Mc KANNADA VOWEL SIGN AA -0CBF;N # Mn KANNADA VOWEL SIGN I -0CC0..0CC4;N # Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR -0CC6;N # Mn KANNADA VOWEL SIGN E -0CC7..0CC8;N # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI -0CCA..0CCB;N # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO -0CCC..0CCD;N # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA -0CD5..0CD6;N # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CDD..0CDE;N # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA -0CE0..0CE1;N # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL -0CE2..0CE3;N # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL -0CE6..0CEF;N # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE -0CF1..0CF2;N # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA -0CF3;N # Mc KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT -0D00..0D01;N # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU -0D02..0D03;N # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA -0D04..0D0C;N # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L -0D0E..0D10;N # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI -0D12..0D3A;N # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA -0D3B..0D3C;N # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA -0D3D;N # Lo MALAYALAM SIGN AVAGRAHA -0D3E..0D40;N # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II -0D41..0D44;N # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR -0D46..0D48;N # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI -0D4A..0D4C;N # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU -0D4D;N # Mn MALAYALAM SIGN VIRAMA -0D4E;N # Lo MALAYALAM LETTER DOT REPH -0D4F;N # So MALAYALAM SIGN PARA -0D54..0D56;N # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL -0D57;N # Mc MALAYALAM AU LENGTH MARK -0D58..0D5E;N # No [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH -0D5F..0D61;N # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL -0D62..0D63;N # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL -0D66..0D6F;N # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE -0D70..0D78;N # No [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS -0D79;N # So MALAYALAM DATE MARK -0D7A..0D7F;N # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K -0D81;N # Mn SINHALA SIGN CANDRABINDU -0D82..0D83;N # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA -0D85..0D96;N # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA -0D9A..0DB1;N # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA -0DB3..0DBB;N # Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA -0DBD;N # Lo SINHALA LETTER DANTAJA LAYANNA -0DC0..0DC6;N # Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA -0DCA;N # Mn SINHALA SIGN AL-LAKUNA -0DCF..0DD1;N # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA -0DD2..0DD4;N # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA -0DD6;N # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA -0DD8..0DDF;N # Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA -0DE6..0DEF;N # Nd [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE -0DF2..0DF3;N # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA -0DF4;N # Po SINHALA PUNCTUATION KUNDDALIYA -0E01..0E30;N # Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A -0E31;N # Mn THAI CHARACTER MAI HAN-AKAT -0E32..0E33;N # Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM -0E34..0E3A;N # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU -0E3F;N # Sc THAI CURRENCY SYMBOL BAHT -0E40..0E45;N # Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO -0E46;N # Lm THAI CHARACTER MAIYAMOK -0E47..0E4E;N # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN -0E4F;N # Po THAI CHARACTER FONGMAN -0E50..0E59;N # Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE -0E5A..0E5B;N # Po [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT -0E81..0E82;N # Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG -0E84;N # Lo LAO LETTER KHO TAM -0E86..0E8A;N # Lo [5] LAO LETTER PALI GHA..LAO LETTER SO TAM -0E8C..0EA3;N # Lo [24] LAO LETTER PALI JHA..LAO LETTER LO LING -0EA5;N # Lo LAO LETTER LO LOOT -0EA7..0EB0;N # Lo [10] LAO LETTER WO..LAO VOWEL SIGN A -0EB1;N # Mn LAO VOWEL SIGN MAI KAN -0EB2..0EB3;N # Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM -0EB4..0EBC;N # Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO -0EBD;N # Lo LAO SEMIVOWEL SIGN NYO -0EC0..0EC4;N # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI -0EC6;N # Lm LAO KO LA -0EC8..0ECE;N # Mn [7] LAO TONE MAI EK..LAO YAMAKKAN -0ED0..0ED9;N # Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE -0EDC..0EDF;N # Lo [4] LAO HO NO..LAO LETTER KHMU NYO -0F00;N # Lo TIBETAN SYLLABLE OM -0F01..0F03;N # So [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA -0F04..0F12;N # Po [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD -0F13;N # So TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN -0F14;N # Po TIBETAN MARK GTER TSHEG -0F15..0F17;N # So [3] TIBETAN LOGOTYPE SIGN CHAD RTAGS..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS -0F18..0F19;N # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS -0F1A..0F1F;N # So [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG -0F20..0F29;N # Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE -0F2A..0F33;N # No [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO -0F34;N # So TIBETAN MARK BSDUS RTAGS -0F35;N # Mn TIBETAN MARK NGAS BZUNG NYI ZLA -0F36;N # So TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN -0F37;N # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS -0F38;N # So TIBETAN MARK CHE MGO -0F39;N # Mn TIBETAN MARK TSA -PHRU -0F3A;N # Ps TIBETAN MARK GUG RTAGS GYON -0F3B;N # Pe TIBETAN MARK GUG RTAGS GYAS -0F3C;N # Ps TIBETAN MARK ANG KHANG GYON -0F3D;N # Pe TIBETAN MARK ANG KHANG GYAS -0F3E..0F3F;N # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES -0F40..0F47;N # Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA -0F49..0F6C;N # Lo [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA -0F71..0F7E;N # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO -0F7F;N # Mc TIBETAN SIGN RNAM BCAD -0F80..0F84;N # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA -0F85;N # Po TIBETAN MARK PALUTA -0F86..0F87;N # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS -0F88..0F8C;N # Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN -0F8D..0F97;N # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA -0F99..0FBC;N # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA -0FBE..0FC5;N # So [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE -0FC6;N # Mn TIBETAN SYMBOL PADMA GDAN -0FC7..0FCC;N # So [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL -0FCE..0FCF;N # So [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM -0FD0..0FD4;N # Po [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA -0FD5..0FD8;N # So [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS -0FD9..0FDA;N # Po [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS -1000..102A;N # Lo [43] MYANMAR LETTER KA..MYANMAR LETTER AU -102B..102C;N # Mc [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA -102D..1030;N # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU -1031;N # Mc MYANMAR VOWEL SIGN E -1032..1037;N # Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW -1038;N # Mc MYANMAR SIGN VISARGA -1039..103A;N # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT -103B..103C;N # Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA -103D..103E;N # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA -103F;N # Lo MYANMAR LETTER GREAT SA -1040..1049;N # Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE -104A..104F;N # Po [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE -1050..1055;N # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL -1056..1057;N # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR -1058..1059;N # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL -105A..105D;N # Lo [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE -105E..1060;N # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA -1061;N # Lo MYANMAR LETTER SGAW KAREN SHA -1062..1064;N # Mc [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO -1065..1066;N # Lo [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA -1067..106D;N # Mc [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5 -106E..1070;N # Lo [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA -1071..1074;N # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE -1075..1081;N # Lo [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA -1082;N # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA -1083..1084;N # Mc [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E -1085..1086;N # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y -1087..108C;N # Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3 -108D;N # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE -108E;N # Lo MYANMAR LETTER RUMAI PALAUNG FA -108F;N # Mc MYANMAR SIGN RUMAI PALAUNG TONE-5 -1090..1099;N # Nd [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE -109A..109C;N # Mc [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A -109D;N # Mn MYANMAR VOWEL SIGN AITON AI -109E..109F;N # So [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION -10A0..10C5;N # Lu [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE -10C7;N # Lu GEORGIAN CAPITAL LETTER YN -10CD;N # Lu GEORGIAN CAPITAL LETTER AEN -10D0..10FA;N # Ll [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN -10FB;N # Po GEORGIAN PARAGRAPH SEPARATOR -10FC;N # Lm MODIFIER LETTER GEORGIAN NAR -10FD..10FF;N # Ll [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN -1100..115F;W # Lo [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER -1160..11FF;N # Lo [160] HANGUL JUNGSEONG FILLER..HANGUL JONGSEONG SSANGNIEUN -1200..1248;N # Lo [73] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE QWA -124A..124D;N # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE -1250..1256;N # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO -1258;N # Lo ETHIOPIC SYLLABLE QHWA -125A..125D;N # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE -1260..1288;N # Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA -128A..128D;N # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE -1290..12B0;N # Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA -12B2..12B5;N # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE -12B8..12BE;N # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO -12C0;N # Lo ETHIOPIC SYLLABLE KXWA -12C2..12C5;N # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE -12C8..12D6;N # Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O -12D8..1310;N # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA -1312..1315;N # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE -1318..135A;N # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA -135D..135F;N # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK -1360..1368;N # Po [9] ETHIOPIC SECTION MARK..ETHIOPIC PARAGRAPH SEPARATOR -1369..137C;N # No [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND -1380..138F;N # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE -1390..1399;N # So [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT -13A0..13F5;N # Lu [86] CHEROKEE LETTER A..CHEROKEE LETTER MV -13F8..13FD;N # Ll [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV -1400;N # Pd CANADIAN SYLLABICS HYPHEN -1401..166C;N # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA -166D;N # So CANADIAN SYLLABICS CHI SIGN -166E;N # Po CANADIAN SYLLABICS FULL STOP -166F..167F;N # Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W -1680;N # Zs OGHAM SPACE MARK -1681..169A;N # Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH -169B;N # Ps OGHAM FEATHER MARK -169C;N # Pe OGHAM REVERSED FEATHER MARK -16A0..16EA;N # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X -16EB..16ED;N # Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION -16EE..16F0;N # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL -16F1..16F8;N # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC -1700..1711;N # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA -1712..1714;N # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA -1715;N # Mc TAGALOG SIGN PAMUDPOD -171F;N # Lo TAGALOG LETTER ARCHAIC RA -1720..1731;N # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA -1732..1733;N # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U -1734;N # Mc HANUNOO SIGN PAMUDPOD -1735..1736;N # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION -1740..1751;N # Lo [18] BUHID LETTER A..BUHID LETTER HA -1752..1753;N # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U -1760..176C;N # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA -176E..1770;N # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA -1772..1773;N # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U -1780..17B3;N # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU -17B4..17B5;N # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA -17B6;N # Mc KHMER VOWEL SIGN AA -17B7..17BD;N # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA -17BE..17C5;N # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU -17C6;N # Mn KHMER SIGN NIKAHIT -17C7..17C8;N # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU -17C9..17D3;N # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT -17D4..17D6;N # Po [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH -17D7;N # Lm KHMER SIGN LEK TOO -17D8..17DA;N # Po [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT -17DB;N # Sc KHMER CURRENCY SYMBOL RIEL -17DC;N # Lo KHMER SIGN AVAKRAHASANYA -17DD;N # Mn KHMER SIGN ATTHACAN -17E0..17E9;N # Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE -17F0..17F9;N # No [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON -1800..1805;N # Po [6] MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS -1806;N # Pd MONGOLIAN TODO SOFT HYPHEN -1807..180A;N # Po [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU -180B..180D;N # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE -180E;N # Cf MONGOLIAN VOWEL SEPARATOR -180F;N # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR -1810..1819;N # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE -1820..1842;N # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI -1843;N # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN -1844..1878;N # Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS -1880..1884;N # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA -1885..1886;N # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA -1887..18A8;N # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA -18A9;N # Mn MONGOLIAN LETTER ALI GALI DAGALGA -18AA;N # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA -18B0..18F5;N # Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S -1900..191E;N # Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA -1920..1922;N # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U -1923..1926;N # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU -1927..1928;N # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O -1929..192B;N # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA -1930..1931;N # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA -1932;N # Mn LIMBU SMALL LETTER ANUSVARA -1933..1938;N # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA -1939..193B;N # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I -1940;N # So LIMBU SIGN LOO -1944..1945;N # Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK -1946..194F;N # Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE -1950..196D;N # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI -1970..1974;N # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6 -1980..19AB;N # Lo [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA -19B0..19C9;N # Lo [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2 -19D0..19D9;N # Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE -19DA;N # No NEW TAI LUE THAM DIGIT ONE -19DE..19DF;N # So [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV -19E0..19FF;N # So [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC -1A00..1A16;N # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA -1A17..1A18;N # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U -1A19..1A1A;N # Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O -1A1B;N # Mn BUGINESE VOWEL SIGN AE -1A1E..1A1F;N # Po [2] BUGINESE PALLAWA..BUGINESE END OF SECTION -1A20..1A54;N # Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA -1A55;N # Mc TAI THAM CONSONANT SIGN MEDIAL RA -1A56;N # Mn TAI THAM CONSONANT SIGN MEDIAL LA -1A57;N # Mc TAI THAM CONSONANT SIGN LA TANG LAI -1A58..1A5E;N # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA -1A60;N # Mn TAI THAM SIGN SAKOT -1A61;N # Mc TAI THAM VOWEL SIGN A -1A62;N # Mn TAI THAM VOWEL SIGN MAI SAT -1A63..1A64;N # Mc [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA -1A65..1A6C;N # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW -1A6D..1A72;N # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI -1A73..1A7C;N # Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN -1A7F;N # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT -1A80..1A89;N # Nd [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE -1A90..1A99;N # Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE -1AA0..1AA6;N # Po [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA -1AA7;N # Lm TAI THAM SIGN MAI YAMOK -1AA8..1AAD;N # Po [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG -1AB0..1ABD;N # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW -1ABE;N # Me COMBINING PARENTHESES OVERLAY -1ABF..1ACE;N # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T -1B00..1B03;N # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG -1B04;N # Mc BALINESE SIGN BISAH -1B05..1B33;N # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA -1B34;N # Mn BALINESE SIGN REREKAN -1B35;N # Mc BALINESE VOWEL SIGN TEDUNG -1B36..1B3A;N # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA -1B3B;N # Mc BALINESE VOWEL SIGN RA REPA TEDUNG -1B3C;N # Mn BALINESE VOWEL SIGN LA LENGA -1B3D..1B41;N # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG -1B42;N # Mn BALINESE VOWEL SIGN PEPET -1B43..1B44;N # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG -1B45..1B4C;N # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA -1B50..1B59;N # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE -1B5A..1B60;N # Po [7] BALINESE PANTI..BALINESE PAMENENG -1B61..1B6A;N # So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE -1B6B..1B73;N # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG -1B74..1B7C;N # So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING -1B7D..1B7E;N # Po [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG -1B80..1B81;N # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR -1B82;N # Mc SUNDANESE SIGN PANGWISAD -1B83..1BA0;N # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA -1BA1;N # Mc SUNDANESE CONSONANT SIGN PAMINGKAL -1BA2..1BA5;N # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU -1BA6..1BA7;N # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG -1BA8..1BA9;N # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG -1BAA;N # Mc SUNDANESE SIGN PAMAAEH -1BAB..1BAD;N # Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA -1BAE..1BAF;N # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA -1BB0..1BB9;N # Nd [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE -1BBA..1BBF;N # Lo [6] SUNDANESE AVAGRAHA..SUNDANESE LETTER FINAL M -1BC0..1BE5;N # Lo [38] BATAK LETTER A..BATAK LETTER U -1BE6;N # Mn BATAK SIGN TOMPI -1BE7;N # Mc BATAK VOWEL SIGN E -1BE8..1BE9;N # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE -1BEA..1BEC;N # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O -1BED;N # Mn BATAK VOWEL SIGN KARO O -1BEE;N # Mc BATAK VOWEL SIGN U -1BEF..1BF1;N # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H -1BF2..1BF3;N # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN -1BFC..1BFF;N # Po [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT -1C00..1C23;N # Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A -1C24..1C2B;N # Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU -1C2C..1C33;N # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T -1C34..1C35;N # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG -1C36..1C37;N # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA -1C3B..1C3F;N # Po [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK -1C40..1C49;N # Nd [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE -1C4D..1C4F;N # Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA -1C50..1C59;N # Nd [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE -1C5A..1C77;N # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH -1C78..1C7D;N # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD -1C7E..1C7F;N # Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD -1C80..1C88;N # Ll [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK -1C90..1CBA;N # Lu [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN -1CBD..1CBF;N # Lu [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN -1CC0..1CC7;N # Po [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA -1CD0..1CD2;N # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA -1CD3;N # Po VEDIC SIGN NIHSHVASA -1CD4..1CE0;N # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA -1CE1;N # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA -1CE2..1CE8;N # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL -1CE9..1CEC;N # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL -1CED;N # Mn VEDIC SIGN TIRYAK -1CEE..1CF3;N # Lo [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA -1CF4;N # Mn VEDIC TONE CANDRA ABOVE -1CF5..1CF6;N # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA -1CF7;N # Mc VEDIC SIGN ATIKRAMA -1CF8..1CF9;N # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE -1CFA;N # Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA -1D00..1D2B;N # Ll [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL -1D2C..1D6A;N # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI -1D6B..1D77;N # Ll [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G -1D78;N # Lm MODIFIER LETTER CYRILLIC EN -1D79..1D7F;N # Ll [7] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER UPSILON WITH STROKE -1D80..1D9A;N # Ll [27] LATIN SMALL LETTER B WITH PALATAL HOOK..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK -1D9B..1DBF;N # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA -1DC0..1DFF;N # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW -1E00..1EFF;N # L& [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP -1F00..1F15;N # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA -1F18..1F1D;N # Lu [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA -1F20..1F45;N # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA -1F48..1F4D;N # Lu [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA -1F50..1F57;N # Ll [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI -1F59;N # Lu GREEK CAPITAL LETTER UPSILON WITH DASIA -1F5B;N # Lu GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA -1F5D;N # Lu GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA -1F5F..1F7D;N # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA -1F80..1FB4;N # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI -1FB6..1FBC;N # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI -1FBD;N # Sk GREEK KORONIS -1FBE;N # Ll GREEK PROSGEGRAMMENI -1FBF..1FC1;N # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI -1FC2..1FC4;N # Ll [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI -1FC6..1FCC;N # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI -1FCD..1FCF;N # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI -1FD0..1FD3;N # Ll [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA -1FD6..1FDB;N # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA -1FDD..1FDF;N # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI -1FE0..1FEC;N # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA -1FED..1FEF;N # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA -1FF2..1FF4;N # Ll [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI -1FF6..1FFC;N # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI -1FFD..1FFE;N # Sk [2] GREEK OXIA..GREEK DASIA -2000..200A;N # Zs [11] EN QUAD..HAIR SPACE -200B..200F;N # Cf [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK -2010;A # Pd HYPHEN -2011..2012;N # Pd [2] NON-BREAKING HYPHEN..FIGURE DASH -2013..2015;A # Pd [3] EN DASH..HORIZONTAL BAR -2016;A # Po DOUBLE VERTICAL LINE -2017;N # Po DOUBLE LOW LINE -2018;A # Pi LEFT SINGLE QUOTATION MARK -2019;A # Pf RIGHT SINGLE QUOTATION MARK -201A;N # Ps SINGLE LOW-9 QUOTATION MARK -201B;N # Pi SINGLE HIGH-REVERSED-9 QUOTATION MARK -201C;A # Pi LEFT DOUBLE QUOTATION MARK -201D;A # Pf RIGHT DOUBLE QUOTATION MARK -201E;N # Ps DOUBLE LOW-9 QUOTATION MARK -201F;N # Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK -2020..2022;A # Po [3] DAGGER..BULLET -2023;N # Po TRIANGULAR BULLET -2024..2027;A # Po [4] ONE DOT LEADER..HYPHENATION POINT -2028;N # Zl LINE SEPARATOR -2029;N # Zp PARAGRAPH SEPARATOR -202A..202E;N # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE -202F;N # Zs NARROW NO-BREAK SPACE -2030;A # Po PER MILLE SIGN -2031;N # Po PER TEN THOUSAND SIGN -2032..2033;A # Po [2] PRIME..DOUBLE PRIME -2034;N # Po TRIPLE PRIME -2035;A # Po REVERSED PRIME -2036..2038;N # Po [3] REVERSED DOUBLE PRIME..CARET -2039;N # Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK -203A;N # Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -203B;A # Po REFERENCE MARK -203C..203D;N # Po [2] DOUBLE EXCLAMATION MARK..INTERROBANG -203E;A # Po OVERLINE -203F..2040;N # Pc [2] UNDERTIE..CHARACTER TIE -2041..2043;N # Po [3] CARET INSERTION POINT..HYPHEN BULLET -2044;N # Sm FRACTION SLASH -2045;N # Ps LEFT SQUARE BRACKET WITH QUILL -2046;N # Pe RIGHT SQUARE BRACKET WITH QUILL -2047..2051;N # Po [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY -2052;N # Sm COMMERCIAL MINUS SIGN -2053;N # Po SWUNG DASH -2054;N # Pc INVERTED UNDERTIE -2055..205E;N # Po [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS -205F;N # Zs MEDIUM MATHEMATICAL SPACE -2060..2064;N # Cf [5] WORD JOINER..INVISIBLE PLUS -2066..206F;N # Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES -2070;N # No SUPERSCRIPT ZERO -2071;N # Lm SUPERSCRIPT LATIN SMALL LETTER I -2074;A # No SUPERSCRIPT FOUR -2075..2079;N # No [5] SUPERSCRIPT FIVE..SUPERSCRIPT NINE -207A..207C;N # Sm [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN -207D;N # Ps SUPERSCRIPT LEFT PARENTHESIS -207E;N # Pe SUPERSCRIPT RIGHT PARENTHESIS -207F;A # Lm SUPERSCRIPT LATIN SMALL LETTER N -2080;N # No SUBSCRIPT ZERO -2081..2084;A # No [4] SUBSCRIPT ONE..SUBSCRIPT FOUR -2085..2089;N # No [5] SUBSCRIPT FIVE..SUBSCRIPT NINE -208A..208C;N # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN -208D;N # Ps SUBSCRIPT LEFT PARENTHESIS -208E;N # Pe SUBSCRIPT RIGHT PARENTHESIS -2090..209C;N # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T -20A0..20A8;N # Sc [9] EURO-CURRENCY SIGN..RUPEE SIGN -20A9;H # Sc WON SIGN -20AA..20AB;N # Sc [2] NEW SHEQEL SIGN..DONG SIGN -20AC;A # Sc EURO SIGN -20AD..20C0;N # Sc [20] KIP SIGN..SOM SIGN -20D0..20DC;N # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE -20DD..20E0;N # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH -20E1;N # Mn COMBINING LEFT RIGHT ARROW ABOVE -20E2..20E4;N # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE -20E5..20F0;N # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE -2100..2101;N # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT -2102;N # Lu DOUBLE-STRUCK CAPITAL C -2103;A # So DEGREE CELSIUS -2104;N # So CENTRE LINE SYMBOL -2105;A # So CARE OF -2106;N # So CADA UNA -2107;N # Lu EULER CONSTANT -2108;N # So SCRUPLE -2109;A # So DEGREE FAHRENHEIT -210A..2112;N # L& [9] SCRIPT SMALL G..SCRIPT CAPITAL L -2113;A # Ll SCRIPT SMALL L -2114;N # So L B BAR SYMBOL -2115;N # Lu DOUBLE-STRUCK CAPITAL N -2116;A # So NUMERO SIGN -2117;N # So SOUND RECORDING COPYRIGHT -2118;N # Sm SCRIPT CAPITAL P -2119..211D;N # Lu [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R -211E..2120;N # So [3] PRESCRIPTION TAKE..SERVICE MARK -2121..2122;A # So [2] TELEPHONE SIGN..TRADE MARK SIGN -2123;N # So VERSICLE -2124;N # Lu DOUBLE-STRUCK CAPITAL Z -2125;N # So OUNCE SIGN -2126;A # Lu OHM SIGN -2127;N # So INVERTED OHM SIGN -2128;N # Lu BLACK-LETTER CAPITAL Z -2129;N # So TURNED GREEK SMALL LETTER IOTA -212A;N # Lu KELVIN SIGN -212B;A # Lu ANGSTROM SIGN -212C..212D;N # Lu [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C -212E;N # So ESTIMATED SYMBOL -212F..2134;N # L& [6] SCRIPT SMALL E..SCRIPT SMALL O -2135..2138;N # Lo [4] ALEF SYMBOL..DALET SYMBOL -2139;N # Ll INFORMATION SOURCE -213A..213B;N # So [2] ROTATED CAPITAL Q..FACSIMILE SIGN -213C..213F;N # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI -2140..2144;N # Sm [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y -2145..2149;N # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J -214A;N # So PROPERTY LINE -214B;N # Sm TURNED AMPERSAND -214C..214D;N # So [2] PER SIGN..AKTIESELSKAB -214E;N # Ll TURNED SMALL F -214F;N # So SYMBOL FOR SAMARITAN SOURCE -2150..2152;N # No [3] VULGAR FRACTION ONE SEVENTH..VULGAR FRACTION ONE TENTH -2153..2154;A # No [2] VULGAR FRACTION ONE THIRD..VULGAR FRACTION TWO THIRDS -2155..215A;N # No [6] VULGAR FRACTION ONE FIFTH..VULGAR FRACTION FIVE SIXTHS -215B..215E;A # No [4] VULGAR FRACTION ONE EIGHTH..VULGAR FRACTION SEVEN EIGHTHS -215F;N # No FRACTION NUMERATOR ONE -2160..216B;A # Nl [12] ROMAN NUMERAL ONE..ROMAN NUMERAL TWELVE -216C..216F;N # Nl [4] ROMAN NUMERAL FIFTY..ROMAN NUMERAL ONE THOUSAND -2170..2179;A # Nl [10] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL TEN -217A..2182;N # Nl [9] SMALL ROMAN NUMERAL ELEVEN..ROMAN NUMERAL TEN THOUSAND -2183..2184;N # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C -2185..2188;N # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND -2189;A # No VULGAR FRACTION ZERO THIRDS -218A..218B;N # So [2] TURNED DIGIT TWO..TURNED DIGIT THREE -2190..2194;A # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW -2195..2199;A # So [5] UP DOWN ARROW..SOUTH WEST ARROW -219A..219B;N # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE -219C..219F;N # So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW -21A0;N # Sm RIGHTWARDS TWO HEADED ARROW -21A1..21A2;N # So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL -21A3;N # Sm RIGHTWARDS ARROW WITH TAIL -21A4..21A5;N # So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR -21A6;N # Sm RIGHTWARDS ARROW FROM BAR -21A7..21AD;N # So [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW -21AE;N # Sm LEFT RIGHT ARROW WITH STROKE -21AF..21B7;N # So [9] DOWNWARDS ZIGZAG ARROW..CLOCKWISE TOP SEMICIRCLE ARROW -21B8..21B9;A # So [2] NORTH WEST ARROW TO LONG BAR..LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR -21BA..21CD;N # So [20] ANTICLOCKWISE OPEN CIRCLE ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE -21CE..21CF;N # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE -21D0..21D1;N # So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW -21D2;A # Sm RIGHTWARDS DOUBLE ARROW -21D3;N # So DOWNWARDS DOUBLE ARROW -21D4;A # Sm LEFT RIGHT DOUBLE ARROW -21D5..21E6;N # So [18] UP DOWN DOUBLE ARROW..LEFTWARDS WHITE ARROW -21E7;A # So UPWARDS WHITE ARROW -21E8..21F3;N # So [12] RIGHTWARDS WHITE ARROW..UP DOWN WHITE ARROW -21F4..21FF;N # Sm [12] RIGHT ARROW WITH SMALL CIRCLE..LEFT RIGHT OPEN-HEADED ARROW -2200;A # Sm FOR ALL -2201;N # Sm COMPLEMENT -2202..2203;A # Sm [2] PARTIAL DIFFERENTIAL..THERE EXISTS -2204..2206;N # Sm [3] THERE DOES NOT EXIST..INCREMENT -2207..2208;A # Sm [2] NABLA..ELEMENT OF -2209..220A;N # Sm [2] NOT AN ELEMENT OF..SMALL ELEMENT OF -220B;A # Sm CONTAINS AS MEMBER -220C..220E;N # Sm [3] DOES NOT CONTAIN AS MEMBER..END OF PROOF -220F;A # Sm N-ARY PRODUCT -2210;N # Sm N-ARY COPRODUCT -2211;A # Sm N-ARY SUMMATION -2212..2214;N # Sm [3] MINUS SIGN..DOT PLUS -2215;A # Sm DIVISION SLASH -2216..2219;N # Sm [4] SET MINUS..BULLET OPERATOR -221A;A # Sm SQUARE ROOT -221B..221C;N # Sm [2] CUBE ROOT..FOURTH ROOT -221D..2220;A # Sm [4] PROPORTIONAL TO..ANGLE -2221..2222;N # Sm [2] MEASURED ANGLE..SPHERICAL ANGLE -2223;A # Sm DIVIDES -2224;N # Sm DOES NOT DIVIDE -2225;A # Sm PARALLEL TO -2226;N # Sm NOT PARALLEL TO -2227..222C;A # Sm [6] LOGICAL AND..DOUBLE INTEGRAL -222D;N # Sm TRIPLE INTEGRAL -222E;A # Sm CONTOUR INTEGRAL -222F..2233;N # Sm [5] SURFACE INTEGRAL..ANTICLOCKWISE CONTOUR INTEGRAL -2234..2237;A # Sm [4] THEREFORE..PROPORTION -2238..223B;N # Sm [4] DOT MINUS..HOMOTHETIC -223C..223D;A # Sm [2] TILDE OPERATOR..REVERSED TILDE -223E..2247;N # Sm [10] INVERTED LAZY S..NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO -2248;A # Sm ALMOST EQUAL TO -2249..224B;N # Sm [3] NOT ALMOST EQUAL TO..TRIPLE TILDE -224C;A # Sm ALL EQUAL TO -224D..2251;N # Sm [5] EQUIVALENT TO..GEOMETRICALLY EQUAL TO -2252;A # Sm APPROXIMATELY EQUAL TO OR THE IMAGE OF -2253..225F;N # Sm [13] IMAGE OF OR APPROXIMATELY EQUAL TO..QUESTIONED EQUAL TO -2260..2261;A # Sm [2] NOT EQUAL TO..IDENTICAL TO -2262..2263;N # Sm [2] NOT IDENTICAL TO..STRICTLY EQUIVALENT TO -2264..2267;A # Sm [4] LESS-THAN OR EQUAL TO..GREATER-THAN OVER EQUAL TO -2268..2269;N # Sm [2] LESS-THAN BUT NOT EQUAL TO..GREATER-THAN BUT NOT EQUAL TO -226A..226B;A # Sm [2] MUCH LESS-THAN..MUCH GREATER-THAN -226C..226D;N # Sm [2] BETWEEN..NOT EQUIVALENT TO -226E..226F;A # Sm [2] NOT LESS-THAN..NOT GREATER-THAN -2270..2281;N # Sm [18] NEITHER LESS-THAN NOR EQUAL TO..DOES NOT SUCCEED -2282..2283;A # Sm [2] SUBSET OF..SUPERSET OF -2284..2285;N # Sm [2] NOT A SUBSET OF..NOT A SUPERSET OF -2286..2287;A # Sm [2] SUBSET OF OR EQUAL TO..SUPERSET OF OR EQUAL TO -2288..2294;N # Sm [13] NEITHER A SUBSET OF NOR EQUAL TO..SQUARE CUP -2295;A # Sm CIRCLED PLUS -2296..2298;N # Sm [3] CIRCLED MINUS..CIRCLED DIVISION SLASH -2299;A # Sm CIRCLED DOT OPERATOR -229A..22A4;N # Sm [11] CIRCLED RING OPERATOR..DOWN TACK -22A5;A # Sm UP TACK -22A6..22BE;N # Sm [25] ASSERTION..RIGHT ANGLE WITH ARC -22BF;A # Sm RIGHT TRIANGLE -22C0..22FF;N # Sm [64] N-ARY LOGICAL AND..Z NOTATION BAG MEMBERSHIP -2300..2307;N # So [8] DIAMETER SIGN..WAVY LINE -2308;N # Ps LEFT CEILING -2309;N # Pe RIGHT CEILING -230A;N # Ps LEFT FLOOR -230B;N # Pe RIGHT FLOOR -230C..2311;N # So [6] BOTTOM RIGHT CROP..SQUARE LOZENGE -2312;A # So ARC -2313..2319;N # So [7] SEGMENT..TURNED NOT SIGN -231A..231B;W # So [2] WATCH..HOURGLASS -231C..231F;N # So [4] TOP LEFT CORNER..BOTTOM RIGHT CORNER -2320..2321;N # Sm [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL -2322..2328;N # So [7] FROWN..KEYBOARD -2329;W # Ps LEFT-POINTING ANGLE BRACKET -232A;W # Pe RIGHT-POINTING ANGLE BRACKET -232B..237B;N # So [81] ERASE TO THE LEFT..NOT CHECK MARK -237C;N # Sm RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW -237D..239A;N # So [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL -239B..23B3;N # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM -23B4..23DB;N # So [40] TOP SQUARE BRACKET..FUSE -23DC..23E1;N # Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET -23E2..23E8;N # So [7] WHITE TRAPEZIUM..DECIMAL EXPONENT SYMBOL -23E9..23EC;W # So [4] BLACK RIGHT-POINTING DOUBLE TRIANGLE..BLACK DOWN-POINTING DOUBLE TRIANGLE -23ED..23EF;N # So [3] BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR..BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR -23F0;W # So ALARM CLOCK -23F1..23F2;N # So [2] STOPWATCH..TIMER CLOCK -23F3;W # So HOURGLASS WITH FLOWING SAND -23F4..23FF;N # So [12] BLACK MEDIUM LEFT-POINTING TRIANGLE..OBSERVER EYE SYMBOL -2400..2426;N # So [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO -2440..244A;N # So [11] OCR HOOK..OCR DOUBLE BACKSLASH -2460..249B;A # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP -249C..24E9;A # So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z -24EA;N # No CIRCLED DIGIT ZERO -24EB..24FF;A # No [21] NEGATIVE CIRCLED NUMBER ELEVEN..NEGATIVE CIRCLED DIGIT ZERO -2500..254B;A # So [76] BOX DRAWINGS LIGHT HORIZONTAL..BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL -254C..254F;N # So [4] BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL..BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL -2550..2573;A # So [36] BOX DRAWINGS DOUBLE HORIZONTAL..BOX DRAWINGS LIGHT DIAGONAL CROSS -2574..257F;N # So [12] BOX DRAWINGS LIGHT LEFT..BOX DRAWINGS HEAVY UP AND LIGHT DOWN -2580..258F;A # So [16] UPPER HALF BLOCK..LEFT ONE EIGHTH BLOCK -2590..2591;N # So [2] RIGHT HALF BLOCK..LIGHT SHADE -2592..2595;A # So [4] MEDIUM SHADE..RIGHT ONE EIGHTH BLOCK -2596..259F;N # So [10] QUADRANT LOWER LEFT..QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT -25A0..25A1;A # So [2] BLACK SQUARE..WHITE SQUARE -25A2;N # So WHITE SQUARE WITH ROUNDED CORNERS -25A3..25A9;A # So [7] WHITE SQUARE CONTAINING BLACK SMALL SQUARE..SQUARE WITH DIAGONAL CROSSHATCH FILL -25AA..25B1;N # So [8] BLACK SMALL SQUARE..WHITE PARALLELOGRAM -25B2..25B3;A # So [2] BLACK UP-POINTING TRIANGLE..WHITE UP-POINTING TRIANGLE -25B4..25B5;N # So [2] BLACK UP-POINTING SMALL TRIANGLE..WHITE UP-POINTING SMALL TRIANGLE -25B6;A # So BLACK RIGHT-POINTING TRIANGLE -25B7;A # Sm WHITE RIGHT-POINTING TRIANGLE -25B8..25BB;N # So [4] BLACK RIGHT-POINTING SMALL TRIANGLE..WHITE RIGHT-POINTING POINTER -25BC..25BD;A # So [2] BLACK DOWN-POINTING TRIANGLE..WHITE DOWN-POINTING TRIANGLE -25BE..25BF;N # So [2] BLACK DOWN-POINTING SMALL TRIANGLE..WHITE DOWN-POINTING SMALL TRIANGLE -25C0;A # So BLACK LEFT-POINTING TRIANGLE -25C1;A # Sm WHITE LEFT-POINTING TRIANGLE -25C2..25C5;N # So [4] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE LEFT-POINTING POINTER -25C6..25C8;A # So [3] BLACK DIAMOND..WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND -25C9..25CA;N # So [2] FISHEYE..LOZENGE -25CB;A # So WHITE CIRCLE -25CC..25CD;N # So [2] DOTTED CIRCLE..CIRCLE WITH VERTICAL FILL -25CE..25D1;A # So [4] BULLSEYE..CIRCLE WITH RIGHT HALF BLACK -25D2..25E1;N # So [16] CIRCLE WITH LOWER HALF BLACK..LOWER HALF CIRCLE -25E2..25E5;A # So [4] BLACK LOWER RIGHT TRIANGLE..BLACK UPPER RIGHT TRIANGLE -25E6..25EE;N # So [9] WHITE BULLET..UP-POINTING TRIANGLE WITH RIGHT HALF BLACK -25EF;A # So LARGE CIRCLE -25F0..25F7;N # So [8] WHITE SQUARE WITH UPPER LEFT QUADRANT..WHITE CIRCLE WITH UPPER RIGHT QUADRANT -25F8..25FC;N # Sm [5] UPPER LEFT TRIANGLE..BLACK MEDIUM SQUARE -25FD..25FE;W # Sm [2] WHITE MEDIUM SMALL SQUARE..BLACK MEDIUM SMALL SQUARE -25FF;N # Sm LOWER RIGHT TRIANGLE -2600..2604;N # So [5] BLACK SUN WITH RAYS..COMET -2605..2606;A # So [2] BLACK STAR..WHITE STAR -2607..2608;N # So [2] LIGHTNING..THUNDERSTORM -2609;A # So SUN -260A..260D;N # So [4] ASCENDING NODE..OPPOSITION -260E..260F;A # So [2] BLACK TELEPHONE..WHITE TELEPHONE -2610..2613;N # So [4] BALLOT BOX..SALTIRE -2614..2615;W # So [2] UMBRELLA WITH RAIN DROPS..HOT BEVERAGE -2616..261B;N # So [6] WHITE SHOGI PIECE..BLACK RIGHT POINTING INDEX -261C;A # So WHITE LEFT POINTING INDEX -261D;N # So WHITE UP POINTING INDEX -261E;A # So WHITE RIGHT POINTING INDEX -261F..263F;N # So [33] WHITE DOWN POINTING INDEX..MERCURY -2640;A # So FEMALE SIGN -2641;N # So EARTH -2642;A # So MALE SIGN -2643..2647;N # So [5] JUPITER..PLUTO -2648..2653;W # So [12] ARIES..PISCES -2654..265F;N # So [12] WHITE CHESS KING..BLACK CHESS PAWN -2660..2661;A # So [2] BLACK SPADE SUIT..WHITE HEART SUIT -2662;N # So WHITE DIAMOND SUIT -2663..2665;A # So [3] BLACK CLUB SUIT..BLACK HEART SUIT -2666;N # So BLACK DIAMOND SUIT -2667..266A;A # So [4] WHITE CLUB SUIT..EIGHTH NOTE -266B;N # So BEAMED EIGHTH NOTES -266C..266D;A # So [2] BEAMED SIXTEENTH NOTES..MUSIC FLAT SIGN -266E;N # So MUSIC NATURAL SIGN -266F;A # Sm MUSIC SHARP SIGN -2670..267E;N # So [15] WEST SYRIAC CROSS..PERMANENT PAPER SIGN -267F;W # So WHEELCHAIR SYMBOL -2680..2692;N # So [19] DIE FACE-1..HAMMER AND PICK -2693;W # So ANCHOR -2694..269D;N # So [10] CROSSED SWORDS..OUTLINED WHITE STAR -269E..269F;A # So [2] THREE LINES CONVERGING RIGHT..THREE LINES CONVERGING LEFT -26A0;N # So WARNING SIGN -26A1;W # So HIGH VOLTAGE SIGN -26A2..26A9;N # So [8] DOUBLED FEMALE SIGN..HORIZONTAL MALE WITH STROKE SIGN -26AA..26AB;W # So [2] MEDIUM WHITE CIRCLE..MEDIUM BLACK CIRCLE -26AC..26BC;N # So [17] MEDIUM SMALL WHITE CIRCLE..SESQUIQUADRATE -26BD..26BE;W # So [2] SOCCER BALL..BASEBALL -26BF;A # So SQUARED KEY -26C0..26C3;N # So [4] WHITE DRAUGHTS MAN..BLACK DRAUGHTS KING -26C4..26C5;W # So [2] SNOWMAN WITHOUT SNOW..SUN BEHIND CLOUD -26C6..26CD;A # So [8] RAIN..DISABLED CAR -26CE;W # So OPHIUCHUS -26CF..26D3;A # So [5] PICK..CHAINS -26D4;W # So NO ENTRY -26D5..26E1;A # So [13] ALTERNATE ONE-WAY LEFT WAY TRAFFIC..RESTRICTED LEFT ENTRY-2 -26E2;N # So ASTRONOMICAL SYMBOL FOR URANUS -26E3;A # So HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE -26E4..26E7;N # So [4] PENTAGRAM..INVERTED PENTAGRAM -26E8..26E9;A # So [2] BLACK CROSS ON SHIELD..SHINTO SHRINE -26EA;W # So CHURCH -26EB..26F1;A # So [7] CASTLE..UMBRELLA ON GROUND -26F2..26F3;W # So [2] FOUNTAIN..FLAG IN HOLE -26F4;A # So FERRY -26F5;W # So SAILBOAT -26F6..26F9;A # So [4] SQUARE FOUR CORNERS..PERSON WITH BALL -26FA;W # So TENT -26FB..26FC;A # So [2] JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL -26FD;W # So FUEL PUMP -26FE..26FF;A # So [2] CUP ON BLACK SQUARE..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE -2700..2704;N # So [5] BLACK SAFETY SCISSORS..WHITE SCISSORS -2705;W # So WHITE HEAVY CHECK MARK -2706..2709;N # So [4] TELEPHONE LOCATION SIGN..ENVELOPE -270A..270B;W # So [2] RAISED FIST..RAISED HAND -270C..2727;N # So [28] VICTORY HAND..WHITE FOUR POINTED STAR -2728;W # So SPARKLES -2729..273C;N # So [20] STRESS OUTLINED WHITE STAR..OPEN CENTRE TEARDROP-SPOKED ASTERISK -273D;A # So HEAVY TEARDROP-SPOKED ASTERISK -273E..274B;N # So [14] SIX PETALLED BLACK AND WHITE FLORETTE..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK -274C;W # So CROSS MARK -274D;N # So SHADOWED WHITE CIRCLE -274E;W # So NEGATIVE SQUARED CROSS MARK -274F..2752;N # So [4] LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE -2753..2755;W # So [3] BLACK QUESTION MARK ORNAMENT..WHITE EXCLAMATION MARK ORNAMENT -2756;N # So BLACK DIAMOND MINUS WHITE X -2757;W # So HEAVY EXCLAMATION MARK SYMBOL -2758..2767;N # So [16] LIGHT VERTICAL BAR..ROTATED FLORAL HEART BULLET -2768;N # Ps MEDIUM LEFT PARENTHESIS ORNAMENT -2769;N # Pe MEDIUM RIGHT PARENTHESIS ORNAMENT -276A;N # Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT -276B;N # Pe MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT -276C;N # Ps MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT -276D;N # Pe MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT -276E;N # Ps HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT -276F;N # Pe HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT -2770;N # Ps HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT -2771;N # Pe HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT -2772;N # Ps LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT -2773;N # Pe LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT -2774;N # Ps MEDIUM LEFT CURLY BRACKET ORNAMENT -2775;N # Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT -2776..277F;A # No [10] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED NUMBER TEN -2780..2793;N # No [20] DINGBAT CIRCLED SANS-SERIF DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN -2794;N # So HEAVY WIDE-HEADED RIGHTWARDS ARROW -2795..2797;W # So [3] HEAVY PLUS SIGN..HEAVY DIVISION SIGN -2798..27AF;N # So [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW -27B0;W # So CURLY LOOP -27B1..27BE;N # So [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW -27BF;W # So DOUBLE CURLY LOOP -27C0..27C4;N # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET -27C5;N # Ps LEFT S-SHAPED BAG DELIMITER -27C6;N # Pe RIGHT S-SHAPED BAG DELIMITER -27C7..27E5;N # Sm [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK -27E6;Na # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET -27E7;Na # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET -27E8;Na # Ps MATHEMATICAL LEFT ANGLE BRACKET -27E9;Na # Pe MATHEMATICAL RIGHT ANGLE BRACKET -27EA;Na # Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET -27EB;Na # Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET -27EC;Na # Ps MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET -27ED;Na # Pe MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET -27EE;N # Ps MATHEMATICAL LEFT FLATTENED PARENTHESIS -27EF;N # Pe MATHEMATICAL RIGHT FLATTENED PARENTHESIS -27F0..27FF;N # Sm [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW -2800..28FF;N # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678 -2900..297F;N # Sm [128] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..DOWN FISH TAIL -2980..2982;N # Sm [3] TRIPLE VERTICAL BAR DELIMITER..Z NOTATION TYPE COLON -2983;N # Ps LEFT WHITE CURLY BRACKET -2984;N # Pe RIGHT WHITE CURLY BRACKET -2985;Na # Ps LEFT WHITE PARENTHESIS -2986;Na # Pe RIGHT WHITE PARENTHESIS -2987;N # Ps Z NOTATION LEFT IMAGE BRACKET -2988;N # Pe Z NOTATION RIGHT IMAGE BRACKET -2989;N # Ps Z NOTATION LEFT BINDING BRACKET -298A;N # Pe Z NOTATION RIGHT BINDING BRACKET -298B;N # Ps LEFT SQUARE BRACKET WITH UNDERBAR -298C;N # Pe RIGHT SQUARE BRACKET WITH UNDERBAR -298D;N # Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER -298E;N # Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER -298F;N # Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER -2990;N # Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER -2991;N # Ps LEFT ANGLE BRACKET WITH DOT -2992;N # Pe RIGHT ANGLE BRACKET WITH DOT -2993;N # Ps LEFT ARC LESS-THAN BRACKET -2994;N # Pe RIGHT ARC GREATER-THAN BRACKET -2995;N # Ps DOUBLE LEFT ARC GREATER-THAN BRACKET -2996;N # Pe DOUBLE RIGHT ARC LESS-THAN BRACKET -2997;N # Ps LEFT BLACK TORTOISE SHELL BRACKET -2998;N # Pe RIGHT BLACK TORTOISE SHELL BRACKET -2999..29D7;N # Sm [63] DOTTED FENCE..BLACK HOURGLASS -29D8;N # Ps LEFT WIGGLY FENCE -29D9;N # Pe RIGHT WIGGLY FENCE -29DA;N # Ps LEFT DOUBLE WIGGLY FENCE -29DB;N # Pe RIGHT DOUBLE WIGGLY FENCE -29DC..29FB;N # Sm [32] INCOMPLETE INFINITY..TRIPLE PLUS -29FC;N # Ps LEFT-POINTING CURVED ANGLE BRACKET -29FD;N # Pe RIGHT-POINTING CURVED ANGLE BRACKET -29FE..29FF;N # Sm [2] TINY..MINY -2A00..2AFF;N # Sm [256] N-ARY CIRCLED DOT OPERATOR..N-ARY WHITE VERTICAL BAR -2B00..2B1A;N # So [27] NORTH EAST WHITE ARROW..DOTTED SQUARE -2B1B..2B1C;W # So [2] BLACK LARGE SQUARE..WHITE LARGE SQUARE -2B1D..2B2F;N # So [19] BLACK VERY SMALL SQUARE..WHITE VERTICAL ELLIPSE -2B30..2B44;N # Sm [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET -2B45..2B46;N # So [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW -2B47..2B4C;N # Sm [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR -2B4D..2B4F;N # So [3] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..SHORT BACKSLANTED SOUTH ARROW -2B50;W # So WHITE MEDIUM STAR -2B51..2B54;N # So [4] BLACK SMALL STAR..WHITE RIGHT-POINTING PENTAGON -2B55;W # So HEAVY LARGE CIRCLE -2B56..2B59;A # So [4] HEAVY OVAL WITH OVAL INSIDE..HEAVY CIRCLED SALTIRE -2B5A..2B73;N # So [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR -2B76..2B95;N # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW -2B97..2BFF;N # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL -2C00..2C5F;N # L& [96] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI -2C60..2C7B;N # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E -2C7C..2C7D;N # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V -2C7E..2C7F;N # Lu [2] LATIN CAPITAL LETTER S WITH SWASH TAIL..LATIN CAPITAL LETTER Z WITH SWASH TAIL -2C80..2CE4;N # L& [101] COPTIC CAPITAL LETTER ALFA..COPTIC SYMBOL KAI -2CE5..2CEA;N # So [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA -2CEB..2CEE;N # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA -2CEF..2CF1;N # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS -2CF2..2CF3;N # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI -2CF9..2CFC;N # Po [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER -2CFD;N # No COPTIC FRACTION ONE HALF -2CFE..2CFF;N # Po [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER -2D00..2D25;N # Ll [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE -2D27;N # Ll GEORGIAN SMALL LETTER YN -2D2D;N # Ll GEORGIAN SMALL LETTER AEN -2D30..2D67;N # Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO -2D6F;N # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK -2D70;N # Po TIFINAGH SEPARATOR MARK -2D7F;N # Mn TIFINAGH CONSONANT JOINER -2D80..2D96;N # Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE -2DA0..2DA6;N # Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO -2DA8..2DAE;N # Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO -2DB0..2DB6;N # Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO -2DB8..2DBE;N # Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO -2DC0..2DC6;N # Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO -2DC8..2DCE;N # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO -2DD0..2DD6;N # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO -2DD8..2DDE;N # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO -2DE0..2DFF;N # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS -2E00..2E01;N # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER -2E02;N # Pi LEFT SUBSTITUTION BRACKET -2E03;N # Pf RIGHT SUBSTITUTION BRACKET -2E04;N # Pi LEFT DOTTED SUBSTITUTION BRACKET -2E05;N # Pf RIGHT DOTTED SUBSTITUTION BRACKET -2E06..2E08;N # Po [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER -2E09;N # Pi LEFT TRANSPOSITION BRACKET -2E0A;N # Pf RIGHT TRANSPOSITION BRACKET -2E0B;N # Po RAISED SQUARE -2E0C;N # Pi LEFT RAISED OMISSION BRACKET -2E0D;N # Pf RIGHT RAISED OMISSION BRACKET -2E0E..2E16;N # Po [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE -2E17;N # Pd DOUBLE OBLIQUE HYPHEN -2E18..2E19;N # Po [2] INVERTED INTERROBANG..PALM BRANCH -2E1A;N # Pd HYPHEN WITH DIAERESIS -2E1B;N # Po TILDE WITH RING ABOVE -2E1C;N # Pi LEFT LOW PARAPHRASE BRACKET -2E1D;N # Pf RIGHT LOW PARAPHRASE BRACKET -2E1E..2E1F;N # Po [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW -2E20;N # Pi LEFT VERTICAL BAR WITH QUILL -2E21;N # Pf RIGHT VERTICAL BAR WITH QUILL -2E22;N # Ps TOP LEFT HALF BRACKET -2E23;N # Pe TOP RIGHT HALF BRACKET -2E24;N # Ps BOTTOM LEFT HALF BRACKET -2E25;N # Pe BOTTOM RIGHT HALF BRACKET -2E26;N # Ps LEFT SIDEWAYS U BRACKET -2E27;N # Pe RIGHT SIDEWAYS U BRACKET -2E28;N # Ps LEFT DOUBLE PARENTHESIS -2E29;N # Pe RIGHT DOUBLE PARENTHESIS -2E2A..2E2E;N # Po [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK -2E2F;N # Lm VERTICAL TILDE -2E30..2E39;N # Po [10] RING POINT..TOP HALF SECTION SIGN -2E3A..2E3B;N # Pd [2] TWO-EM DASH..THREE-EM DASH -2E3C..2E3F;N # Po [4] STENOGRAPHIC FULL STOP..CAPITULUM -2E40;N # Pd DOUBLE HYPHEN -2E41;N # Po REVERSED COMMA -2E42;N # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK -2E43..2E4F;N # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER -2E50..2E51;N # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR -2E52..2E54;N # Po [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK -2E55;N # Ps LEFT SQUARE BRACKET WITH STROKE -2E56;N # Pe RIGHT SQUARE BRACKET WITH STROKE -2E57;N # Ps LEFT SQUARE BRACKET WITH DOUBLE STROKE -2E58;N # Pe RIGHT SQUARE BRACKET WITH DOUBLE STROKE -2E59;N # Ps TOP HALF LEFT PARENTHESIS -2E5A;N # Pe TOP HALF RIGHT PARENTHESIS -2E5B;N # Ps BOTTOM HALF LEFT PARENTHESIS -2E5C;N # Pe BOTTOM HALF RIGHT PARENTHESIS -2E5D;N # Pd OBLIQUE HYPHEN -2E80..2E99;W # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP -2E9B..2EF3;W # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE -2F00..2FD5;W # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE -2FF0..2FFB;W # So [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID -3000;F # Zs IDEOGRAPHIC SPACE -3001..3003;W # Po [3] IDEOGRAPHIC COMMA..DITTO MARK -3004;W # So JAPANESE INDUSTRIAL STANDARD SYMBOL -3005;W # Lm IDEOGRAPHIC ITERATION MARK -3006;W # Lo IDEOGRAPHIC CLOSING MARK -3007;W # Nl IDEOGRAPHIC NUMBER ZERO -3008;W # Ps LEFT ANGLE BRACKET -3009;W # Pe RIGHT ANGLE BRACKET -300A;W # Ps LEFT DOUBLE ANGLE BRACKET -300B;W # Pe RIGHT DOUBLE ANGLE BRACKET -300C;W # Ps LEFT CORNER BRACKET -300D;W # Pe RIGHT CORNER BRACKET -300E;W # Ps LEFT WHITE CORNER BRACKET -300F;W # Pe RIGHT WHITE CORNER BRACKET -3010;W # Ps LEFT BLACK LENTICULAR BRACKET -3011;W # Pe RIGHT BLACK LENTICULAR BRACKET -3012..3013;W # So [2] POSTAL MARK..GETA MARK -3014;W # Ps LEFT TORTOISE SHELL BRACKET -3015;W # Pe RIGHT TORTOISE SHELL BRACKET -3016;W # Ps LEFT WHITE LENTICULAR BRACKET -3017;W # Pe RIGHT WHITE LENTICULAR BRACKET -3018;W # Ps LEFT WHITE TORTOISE SHELL BRACKET -3019;W # Pe RIGHT WHITE TORTOISE SHELL BRACKET -301A;W # Ps LEFT WHITE SQUARE BRACKET -301B;W # Pe RIGHT WHITE SQUARE BRACKET -301C;W # Pd WAVE DASH -301D;W # Ps REVERSED DOUBLE PRIME QUOTATION MARK -301E..301F;W # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK -3020;W # So POSTAL MARK FACE -3021..3029;W # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE -302A..302D;W # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK -302E..302F;W # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK -3030;W # Pd WAVY DASH -3031..3035;W # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF -3036..3037;W # So [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL -3038..303A;W # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY -303B;W # Lm VERTICAL IDEOGRAPHIC ITERATION MARK -303C;W # Lo MASU MARK -303D;W # Po PART ALTERNATION MARK -303E;W # So IDEOGRAPHIC VARIATION INDICATOR -303F;N # So IDEOGRAPHIC HALF FILL SPACE -3041..3096;W # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE -3099..309A;W # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK -309B..309C;W # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK -309D..309E;W # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK -309F;W # Lo HIRAGANA DIGRAPH YORI -30A0;W # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN -30A1..30FA;W # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO -30FB;W # Po KATAKANA MIDDLE DOT -30FC..30FE;W # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK -30FF;W # Lo KATAKANA DIGRAPH KOTO -3105..312F;W # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN -3131..318E;W # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE -3190..3191;W # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK -3192..3195;W # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK -3196..319F;W # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK -31A0..31BF;W # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH -31C0..31E3;W # So [36] CJK STROKE T..CJK STROKE Q -31F0..31FF;W # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO -3200..321E;W # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU -3220..3229;W # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN -322A..3247;W # So [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO -3248..324F;A # No [8] CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE -3250;W # So PARTNERSHIP SIGN -3251..325F;W # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE -3260..327F;W # So [32] CIRCLED HANGUL KIYEOK..KOREAN STANDARD SYMBOL -3280..3289;W # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN -328A..32B0;W # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT -32B1..32BF;W # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY -32C0..32FF;W # So [64] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE ERA NAME REIWA -3300..33FF;W # So [256] SQUARE APAATO..SQUARE GAL -3400..4DBF;W # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF -4DC0..4DFF;N # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION -4E00..9FFF;W # Lo [20992] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFF -A000..A014;W # Lo [21] YI SYLLABLE IT..YI SYLLABLE E -A015;W # Lm YI SYLLABLE WU -A016..A48C;W # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR -A490..A4C6;W # So [55] YI RADICAL QOT..YI RADICAL KE -A4D0..A4F7;N # Lo [40] LISU LETTER BA..LISU LETTER OE -A4F8..A4FD;N # Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU -A4FE..A4FF;N # Po [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP -A500..A60B;N # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG -A60C;N # Lm VAI SYLLABLE LENGTHENER -A60D..A60F;N # Po [3] VAI COMMA..VAI QUESTION MARK -A610..A61F;N # Lo [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG -A620..A629;N # Nd [10] VAI DIGIT ZERO..VAI DIGIT NINE -A62A..A62B;N # Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO -A640..A66D;N # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O -A66E;N # Lo CYRILLIC LETTER MULTIOCULAR O -A66F;N # Mn COMBINING CYRILLIC VZMET -A670..A672;N # Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN -A673;N # Po SLAVONIC ASTERISK -A674..A67D;N # Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK -A67E;N # Po CYRILLIC KAVYKA -A67F;N # Lm CYRILLIC PAYEROK -A680..A69B;N # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O -A69C..A69D;N # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN -A69E..A69F;N # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E -A6A0..A6E5;N # Lo [70] BAMUM LETTER A..BAMUM LETTER KI -A6E6..A6EF;N # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM -A6F0..A6F1;N # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS -A6F2..A6F7;N # Po [6] BAMUM NJAEMLI..BAMUM QUESTION MARK -A700..A716;N # Sk [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR -A717..A71F;N # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK -A720..A721;N # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE -A722..A76F;N # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON -A770;N # Lm MODIFIER LETTER US -A771..A787;N # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T -A788;N # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT -A789..A78A;N # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN -A78B..A78E;N # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT -A78F;N # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7CA;N # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY -A7D0..A7D1;N # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G -A7D3;N # Ll LATIN SMALL LETTER DOUBLE THORN -A7D5..A7D9;N # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S -A7F2..A7F4;N # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q -A7F5..A7F6;N # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H -A7F7;N # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I -A7F8..A7F9;N # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE -A7FA;N # Ll LATIN LETTER SMALL CAPITAL TURNED M -A7FB..A7FF;N # Lo [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M -A800..A801;N # Lo [2] SYLOTI NAGRI LETTER A..SYLOTI NAGRI LETTER I -A802;N # Mn SYLOTI NAGRI SIGN DVISVARA -A803..A805;N # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O -A806;N # Mn SYLOTI NAGRI SIGN HASANTA -A807..A80A;N # Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO -A80B;N # Mn SYLOTI NAGRI SIGN ANUSVARA -A80C..A822;N # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO -A823..A824;N # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I -A825..A826;N # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E -A827;N # Mc SYLOTI NAGRI VOWEL SIGN OO -A828..A82B;N # So [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4 -A82C;N # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA -A830..A835;N # No [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS -A836..A837;N # So [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK -A838;N # Sc NORTH INDIC RUPEE MARK -A839;N # So NORTH INDIC QUANTITY MARK -A840..A873;N # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU -A874..A877;N # Po [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD -A880..A881;N # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA -A882..A8B3;N # Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA -A8B4..A8C3;N # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU -A8C4..A8C5;N # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU -A8CE..A8CF;N # Po [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA -A8D0..A8D9;N # Nd [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE -A8E0..A8F1;N # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA -A8F2..A8F7;N # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA -A8F8..A8FA;N # Po [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET -A8FB;N # Lo DEVANAGARI HEADSTROKE -A8FC;N # Po DEVANAGARI SIGN SIDDHAM -A8FD..A8FE;N # Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY -A8FF;N # Mn DEVANAGARI VOWEL SIGN AY -A900..A909;N # Nd [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE -A90A..A925;N # Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO -A926..A92D;N # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU -A92E..A92F;N # Po [2] KAYAH LI SIGN CWI..KAYAH LI SIGN SHYA -A930..A946;N # Lo [23] REJANG LETTER KA..REJANG LETTER A -A947..A951;N # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R -A952..A953;N # Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA -A95F;N # Po REJANG SECTION MARK -A960..A97C;W # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH -A980..A982;N # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR -A983;N # Mc JAVANESE SIGN WIGNYAN -A984..A9B2;N # Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA -A9B3;N # Mn JAVANESE SIGN CECAK TELU -A9B4..A9B5;N # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG -A9B6..A9B9;N # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT -A9BA..A9BB;N # Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE -A9BC..A9BD;N # Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET -A9BE..A9C0;N # Mc [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON -A9C1..A9CD;N # Po [13] JAVANESE LEFT RERENGGAN..JAVANESE TURNED PADA PISELEH -A9CF;N # Lm JAVANESE PANGRANGKEP -A9D0..A9D9;N # Nd [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE -A9DE..A9DF;N # Po [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN -A9E0..A9E4;N # Lo [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA -A9E5;N # Mn MYANMAR SIGN SHAN SAW -A9E6;N # Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION -A9E7..A9EF;N # Lo [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA -A9F0..A9F9;N # Nd [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE -A9FA..A9FE;N # Lo [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA -AA00..AA28;N # Lo [41] CHAM LETTER A..CHAM LETTER HA -AA29..AA2E;N # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE -AA2F..AA30;N # Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI -AA31..AA32;N # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE -AA33..AA34;N # Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA -AA35..AA36;N # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA -AA40..AA42;N # Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG -AA43;N # Mn CHAM CONSONANT SIGN FINAL NG -AA44..AA4B;N # Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS -AA4C;N # Mn CHAM CONSONANT SIGN FINAL M -AA4D;N # Mc CHAM CONSONANT SIGN FINAL H -AA50..AA59;N # Nd [10] CHAM DIGIT ZERO..CHAM DIGIT NINE -AA5C..AA5F;N # Po [4] CHAM PUNCTUATION SPIRAL..CHAM PUNCTUATION TRIPLE DANDA -AA60..AA6F;N # Lo [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA -AA70;N # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION -AA71..AA76;N # Lo [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM -AA77..AA79;N # So [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO -AA7A;N # Lo MYANMAR LETTER AITON RA -AA7B;N # Mc MYANMAR SIGN PAO KAREN TONE -AA7C;N # Mn MYANMAR SIGN TAI LAING TONE-2 -AA7D;N # Mc MYANMAR SIGN TAI LAING TONE-5 -AA7E..AA7F;N # Lo [2] MYANMAR LETTER SHWE PALAUNG CHA..MYANMAR LETTER SHWE PALAUNG SHA -AA80..AAAF;N # Lo [48] TAI VIET LETTER LOW KO..TAI VIET LETTER HIGH O -AAB0;N # Mn TAI VIET MAI KANG -AAB1;N # Lo TAI VIET VOWEL AA -AAB2..AAB4;N # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U -AAB5..AAB6;N # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O -AAB7..AAB8;N # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA -AAB9..AABD;N # Lo [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN -AABE..AABF;N # Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK -AAC0;N # Lo TAI VIET TONE MAI NUENG -AAC1;N # Mn TAI VIET TONE MAI THO -AAC2;N # Lo TAI VIET TONE MAI SONG -AADB..AADC;N # Lo [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG -AADD;N # Lm TAI VIET SYMBOL SAM -AADE..AADF;N # Po [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI -AAE0..AAEA;N # Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA -AAEB;N # Mc MEETEI MAYEK VOWEL SIGN II -AAEC..AAED;N # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI -AAEE..AAEF;N # Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU -AAF0..AAF1;N # Po [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM -AAF2;N # Lo MEETEI MAYEK ANJI -AAF3..AAF4;N # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK -AAF5;N # Mc MEETEI MAYEK VOWEL SIGN VISARGA -AAF6;N # Mn MEETEI MAYEK VIRAMA -AB01..AB06;N # Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO -AB09..AB0E;N # Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO -AB11..AB16;N # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO -AB20..AB26;N # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO -AB28..AB2E;N # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO -AB30..AB5A;N # Ll [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG -AB5B;N # Sk MODIFIER BREVE WITH INVERTED BREVE -AB5C..AB5F;N # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK -AB60..AB68;N # Ll [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE -AB69;N # Lm MODIFIER LETTER SMALL TURNED W -AB6A..AB6B;N # Sk [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK -AB70..ABBF;N # Ll [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA -ABC0..ABE2;N # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM -ABE3..ABE4;N # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP -ABE5;N # Mn MEETEI MAYEK VOWEL SIGN ANAP -ABE6..ABE7;N # Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP -ABE8;N # Mn MEETEI MAYEK VOWEL SIGN UNAP -ABE9..ABEA;N # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG -ABEB;N # Po MEETEI MAYEK CHEIKHEI -ABEC;N # Mc MEETEI MAYEK LUM IYEK -ABED;N # Mn MEETEI MAYEK APUN IYEK -ABF0..ABF9;N # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE -AC00..D7A3;W # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH -D7B0..D7C6;N # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E -D7CB..D7FB;N # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH -D800..DB7F;N # Cs [896] .. -DB80..DBFF;N # Cs [128] .. -DC00..DFFF;N # Cs [1024] .. -E000..F8FF;A # Co [6400] .. -F900..FA6D;W # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D -FA6E..FA6F;W # Cn [2] .. -FA70..FAD9;W # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 -FADA..FAFF;W # Cn [38] .. -FB00..FB06;N # Ll [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST -FB13..FB17;N # Ll [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH -FB1D;N # Lo HEBREW LETTER YOD WITH HIRIQ -FB1E;N # Mn HEBREW POINT JUDEO-SPANISH VARIKA -FB1F..FB28;N # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV -FB29;N # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN -FB2A..FB36;N # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH -FB38..FB3C;N # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH -FB3E;N # Lo HEBREW LETTER MEM WITH DAGESH -FB40..FB41;N # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH -FB43..FB44;N # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH -FB46..FB4F;N # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED -FB50..FBB1;N # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM -FBB2..FBC2;N # Sk [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE -FBD3..FD3D;N # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM -FD3E;N # Pe ORNATE LEFT PARENTHESIS -FD3F;N # Ps ORNATE RIGHT PARENTHESIS -FD40..FD4F;N # So [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH -FD50..FD8F;N # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM -FD92..FDC7;N # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM -FDCF;N # So ARABIC LIGATURE SALAAMUHU ALAYNAA -FDF0..FDFB;N # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU -FDFC;N # Sc RIAL SIGN -FDFD..FDFF;N # So [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL -FE00..FE0F;A # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 -FE10..FE16;W # Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK -FE17;W # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET -FE18;W # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET -FE19;W # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS -FE20..FE2F;N # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF -FE30;W # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER -FE31..FE32;W # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH -FE33..FE34;W # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE -FE35;W # Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS -FE36;W # Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS -FE37;W # Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET -FE38;W # Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET -FE39;W # Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET -FE3A;W # Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET -FE3B;W # Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET -FE3C;W # Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET -FE3D;W # Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET -FE3E;W # Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET -FE3F;W # Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET -FE40;W # Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET -FE41;W # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET -FE42;W # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET -FE43;W # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET -FE44;W # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET -FE45..FE46;W # Po [2] SESAME DOT..WHITE SESAME DOT -FE47;W # Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET -FE48;W # Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET -FE49..FE4C;W # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE -FE4D..FE4F;W # Pc [3] DASHED LOW LINE..WAVY LOW LINE -FE50..FE52;W # Po [3] SMALL COMMA..SMALL FULL STOP -FE54..FE57;W # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK -FE58;W # Pd SMALL EM DASH -FE59;W # Ps SMALL LEFT PARENTHESIS -FE5A;W # Pe SMALL RIGHT PARENTHESIS -FE5B;W # Ps SMALL LEFT CURLY BRACKET -FE5C;W # Pe SMALL RIGHT CURLY BRACKET -FE5D;W # Ps SMALL LEFT TORTOISE SHELL BRACKET -FE5E;W # Pe SMALL RIGHT TORTOISE SHELL BRACKET -FE5F..FE61;W # Po [3] SMALL NUMBER SIGN..SMALL ASTERISK -FE62;W # Sm SMALL PLUS SIGN -FE63;W # Pd SMALL HYPHEN-MINUS -FE64..FE66;W # Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN -FE68;W # Po SMALL REVERSE SOLIDUS -FE69;W # Sc SMALL DOLLAR SIGN -FE6A..FE6B;W # Po [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT -FE70..FE74;N # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM -FE76..FEFC;N # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM -FEFF;N # Cf ZERO WIDTH NO-BREAK SPACE -FF01..FF03;F # Po [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN -FF04;F # Sc FULLWIDTH DOLLAR SIGN -FF05..FF07;F # Po [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE -FF08;F # Ps FULLWIDTH LEFT PARENTHESIS -FF09;F # Pe FULLWIDTH RIGHT PARENTHESIS -FF0A;F # Po FULLWIDTH ASTERISK -FF0B;F # Sm FULLWIDTH PLUS SIGN -FF0C;F # Po FULLWIDTH COMMA -FF0D;F # Pd FULLWIDTH HYPHEN-MINUS -FF0E..FF0F;F # Po [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS -FF10..FF19;F # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE -FF1A..FF1B;F # Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON -FF1C..FF1E;F # Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN -FF1F..FF20;F # Po [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT -FF21..FF3A;F # Lu [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z -FF3B;F # Ps FULLWIDTH LEFT SQUARE BRACKET -FF3C;F # Po FULLWIDTH REVERSE SOLIDUS -FF3D;F # Pe FULLWIDTH RIGHT SQUARE BRACKET -FF3E;F # Sk FULLWIDTH CIRCUMFLEX ACCENT -FF3F;F # Pc FULLWIDTH LOW LINE -FF40;F # Sk FULLWIDTH GRAVE ACCENT -FF41..FF5A;F # Ll [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z -FF5B;F # Ps FULLWIDTH LEFT CURLY BRACKET -FF5C;F # Sm FULLWIDTH VERTICAL LINE -FF5D;F # Pe FULLWIDTH RIGHT CURLY BRACKET -FF5E;F # Sm FULLWIDTH TILDE -FF5F;F # Ps FULLWIDTH LEFT WHITE PARENTHESIS -FF60;F # Pe FULLWIDTH RIGHT WHITE PARENTHESIS -FF61;H # Po HALFWIDTH IDEOGRAPHIC FULL STOP -FF62;H # Ps HALFWIDTH LEFT CORNER BRACKET -FF63;H # Pe HALFWIDTH RIGHT CORNER BRACKET -FF64..FF65;H # Po [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT -FF66..FF6F;H # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU -FF70;H # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK -FF71..FF9D;H # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N -FF9E..FF9F;H # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK -FFA0..FFBE;H # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH -FFC2..FFC7;H # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E -FFCA..FFCF;H # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE -FFD2..FFD7;H # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU -FFDA..FFDC;H # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I -FFE0..FFE1;F # Sc [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN -FFE2;F # Sm FULLWIDTH NOT SIGN -FFE3;F # Sk FULLWIDTH MACRON -FFE4;F # So FULLWIDTH BROKEN BAR -FFE5..FFE6;F # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN -FFE8;H # So HALFWIDTH FORMS LIGHT VERTICAL -FFE9..FFEC;H # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW -FFED..FFEE;H # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE -FFF9..FFFB;N # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR -FFFC;N # So OBJECT REPLACEMENT CHARACTER -FFFD;A # So REPLACEMENT CHARACTER -10000..1000B;N # Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE -1000D..10026;N # Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO -10028..1003A;N # Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO -1003C..1003D;N # Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE -1003F..1004D;N # Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO -10050..1005D;N # Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089 -10080..100FA;N # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305 -10100..10102;N # Po [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK -10107..10133;N # No [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND -10137..1013F;N # So [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT -10140..10174;N # Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS -10175..10178;N # No [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN -10179..10189;N # So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN -1018A..1018B;N # No [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN -1018C..1018E;N # So [3] GREEK SINUSOID SIGN..NOMISMA SIGN -10190..1019C;N # So [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL -101A0;N # So GREEK SYMBOL TAU RHO -101D0..101FC;N # So [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND -101FD;N # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE -10280..1029C;N # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X -102A0..102D0;N # Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3 -102E0;N # Mn COPTIC EPACT THOUSANDS MARK -102E1..102FB;N # No [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED -10300..1031F;N # Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS -10320..10323;N # No [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY -1032D..1032F;N # Lo [3] OLD ITALIC LETTER YE..OLD ITALIC LETTER SOUTHERN TSE -10330..10340;N # Lo [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA -10341;N # Nl GOTHIC LETTER NINETY -10342..10349;N # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL -1034A;N # Nl GOTHIC LETTER NINE HUNDRED -10350..10375;N # Lo [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA -10376..1037A;N # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII -10380..1039D;N # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU -1039F;N # Po UGARITIC WORD DIVIDER -103A0..103C3;N # Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA -103C8..103CF;N # Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH -103D0;N # Po OLD PERSIAN WORD DIVIDER -103D1..103D5;N # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED -10400..1044F;N # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW -10450..1047F;N # Lo [48] SHAVIAN LETTER PEEP..SHAVIAN LETTER YEW -10480..1049D;N # Lo [30] OSMANYA LETTER ALEF..OSMANYA LETTER OO -104A0..104A9;N # Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE -104B0..104D3;N # Lu [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA -104D8..104FB;N # Ll [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA -10500..10527;N # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE -10530..10563;N # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW -1056F;N # Po CAUCASIAN ALBANIAN CITATION MARK -10570..1057A;N # Lu [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA -1057C..1058A;N # Lu [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE -1058C..10592;N # Lu [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE -10594..10595;N # Lu [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE -10597..105A1;N # Ll [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA -105A3..105B1;N # Ll [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE -105B3..105B9;N # Ll [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE -105BB..105BC;N # Ll [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE -10600..10736;N # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 -10740..10755;N # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE -10760..10767;N # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 -10780..10785;N # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK -10787..107B0;N # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK -107B2..107BA;N # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL -10800..10805;N # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA -10808;N # Lo CYPRIOT SYLLABLE JO -1080A..10835;N # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO -10837..10838;N # Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE -1083C;N # Lo CYPRIOT SYLLABLE ZA -1083F;N # Lo CYPRIOT SYLLABLE ZO -10840..10855;N # Lo [22] IMPERIAL ARAMAIC LETTER ALEPH..IMPERIAL ARAMAIC LETTER TAW -10857;N # Po IMPERIAL ARAMAIC SECTION SIGN -10858..1085F;N # No [8] IMPERIAL ARAMAIC NUMBER ONE..IMPERIAL ARAMAIC NUMBER TEN THOUSAND -10860..10876;N # Lo [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW -10877..10878;N # So [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON -10879..1087F;N # No [7] PALMYRENE NUMBER ONE..PALMYRENE NUMBER TWENTY -10880..1089E;N # Lo [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW -108A7..108AF;N # No [9] NABATAEAN NUMBER ONE..NABATAEAN NUMBER ONE HUNDRED -108E0..108F2;N # Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH -108F4..108F5;N # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW -108FB..108FF;N # No [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED -10900..10915;N # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU -10916..1091B;N # No [6] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER THREE -1091F;N # Po PHOENICIAN WORD SEPARATOR -10920..10939;N # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C -1093F;N # Po LYDIAN TRIANGULAR MARK -10980..1099F;N # Lo [32] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2 -109A0..109B7;N # Lo [24] MEROITIC CURSIVE LETTER A..MEROITIC CURSIVE LETTER DA -109BC..109BD;N # No [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF -109BE..109BF;N # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN -109C0..109CF;N # No [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY -109D2..109FF;N # No [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS -10A00;N # Lo KHAROSHTHI LETTER A -10A01..10A03;N # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R -10A05..10A06;N # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O -10A0C..10A0F;N # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA -10A10..10A13;N # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA -10A15..10A17;N # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA -10A19..10A35;N # Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA -10A38..10A3A;N # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW -10A3F;N # Mn KHAROSHTHI VIRAMA -10A40..10A48;N # No [9] KHAROSHTHI DIGIT ONE..KHAROSHTHI FRACTION ONE HALF -10A50..10A58;N # Po [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES -10A60..10A7C;N # Lo [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH -10A7D..10A7E;N # No [2] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMBER FIFTY -10A7F;N # Po OLD SOUTH ARABIAN NUMERIC INDICATOR -10A80..10A9C;N # Lo [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH -10A9D..10A9F;N # No [3] OLD NORTH ARABIAN NUMBER ONE..OLD NORTH ARABIAN NUMBER TWENTY -10AC0..10AC7;N # Lo [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW -10AC8;N # So MANICHAEAN SIGN UD -10AC9..10AE4;N # Lo [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW -10AE5..10AE6;N # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW -10AEB..10AEF;N # No [5] MANICHAEAN NUMBER ONE..MANICHAEAN NUMBER ONE HUNDRED -10AF0..10AF6;N # Po [7] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION LINE FILLER -10B00..10B35;N # Lo [54] AVESTAN LETTER A..AVESTAN LETTER HE -10B39..10B3F;N # Po [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION -10B40..10B55;N # Lo [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW -10B58..10B5F;N # No [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND -10B60..10B72;N # Lo [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW -10B78..10B7F;N # No [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND -10B80..10B91;N # Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW -10B99..10B9C;N # Po [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT -10BA9..10BAF;N # No [7] PSALTER PAHLAVI NUMBER ONE..PSALTER PAHLAVI NUMBER ONE HUNDRED -10C00..10C48;N # Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH -10C80..10CB2;N # Lu [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US -10CC0..10CF2;N # Ll [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US -10CFA..10CFF;N # No [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND -10D00..10D23;N # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA -10D24..10D27;N # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI -10D30..10D39;N # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE -10E60..10E7E;N # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS -10E80..10EA9;N # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET -10EAB..10EAC;N # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK -10EAD;N # Pd YEZIDI HYPHENATION MARK -10EB0..10EB1;N # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE -10EFD..10EFF;N # Mn [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA -10F00..10F1C;N # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL -10F1D..10F26;N # No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF -10F27;N # Lo OLD SOGDIAN LIGATURE AYIN-DALETH -10F30..10F45;N # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN -10F46..10F50;N # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW -10F51..10F54;N # No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED -10F55..10F59;N # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT -10F70..10F81;N # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH -10F82..10F85;N # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW -10F86..10F89;N # Po [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS -10FB0..10FC4;N # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW -10FC5..10FCB;N # No [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED -10FE0..10FF6;N # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH -11000;N # Mc BRAHMI SIGN CANDRABINDU -11001;N # Mn BRAHMI SIGN ANUSVARA -11002;N # Mc BRAHMI SIGN VISARGA -11003..11037;N # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA -11038..11046;N # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA -11047..1104D;N # Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS -11052..11065;N # No [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND -11066..1106F;N # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE -11070;N # Mn BRAHMI SIGN OLD TAMIL VIRAMA -11071..11072;N # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O -11073..11074;N # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O -11075;N # Lo BRAHMI LETTER OLD TAMIL LLA -1107F;N # Mn BRAHMI NUMBER JOINER -11080..11081;N # Mn [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA -11082;N # Mc KAITHI SIGN VISARGA -11083..110AF;N # Lo [45] KAITHI LETTER A..KAITHI LETTER HA -110B0..110B2;N # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II -110B3..110B6;N # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI -110B7..110B8;N # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU -110B9..110BA;N # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA -110BB..110BC;N # Po [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN -110BD;N # Cf KAITHI NUMBER SIGN -110BE..110C1;N # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA -110C2;N # Mn KAITHI VOWEL SIGN VOCALIC R -110CD;N # Cf KAITHI NUMBER SIGN ABOVE -110D0..110E8;N # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE -110F0..110F9;N # Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE -11100..11102;N # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA -11103..11126;N # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA -11127..1112B;N # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU -1112C;N # Mc CHAKMA VOWEL SIGN E -1112D..11134;N # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA -11136..1113F;N # Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE -11140..11143;N # Po [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK -11144;N # Lo CHAKMA LETTER LHAA -11145..11146;N # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI -11147;N # Lo CHAKMA LETTER VAA -11150..11172;N # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA -11173;N # Mn MAHAJANI SIGN NUKTA -11174..11175;N # Po [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK -11176;N # Lo MAHAJANI LIGATURE SHRI -11180..11181;N # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA -11182;N # Mc SHARADA SIGN VISARGA -11183..111B2;N # Lo [48] SHARADA LETTER A..SHARADA LETTER HA -111B3..111B5;N # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II -111B6..111BE;N # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O -111BF..111C0;N # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA -111C1..111C4;N # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM -111C5..111C8;N # Po [4] SHARADA DANDA..SHARADA SEPARATOR -111C9..111CC;N # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK -111CD;N # Po SHARADA SUTRA MARK -111CE;N # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E -111CF;N # Mn SHARADA SIGN INVERTED CANDRABINDU -111D0..111D9;N # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE -111DA;N # Lo SHARADA EKAM -111DB;N # Po SHARADA SIGN SIDDHAM -111DC;N # Lo SHARADA HEADSTROKE -111DD..111DF;N # Po [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2 -111E1..111F4;N # No [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND -11200..11211;N # Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA -11213..1122B;N # Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA -1122C..1122E;N # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II -1122F..11231;N # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI -11232..11233;N # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU -11234;N # Mn KHOJKI SIGN ANUSVARA -11235;N # Mc KHOJKI SIGN VIRAMA -11236..11237;N # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA -11238..1123D;N # Po [6] KHOJKI DANDA..KHOJKI ABBREVIATION SIGN -1123E;N # Mn KHOJKI SIGN SUKUN -1123F..11240;N # Lo [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I -11241;N # Mn KHOJKI VOWEL SIGN VOCALIC R -11280..11286;N # Lo [7] MULTANI LETTER A..MULTANI LETTER GA -11288;N # Lo MULTANI LETTER GHA -1128A..1128D;N # Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA -1128F..1129D;N # Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA -1129F..112A8;N # Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA -112A9;N # Po MULTANI SECTION MARK -112B0..112DE;N # Lo [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA -112DF;N # Mn KHUDAWADI SIGN ANUSVARA -112E0..112E2;N # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II -112E3..112EA;N # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA -112F0..112F9;N # Nd [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE -11300..11301;N # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU -11302..11303;N # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA -11305..1130C;N # Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L -1130F..11310;N # Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI -11313..11328;N # Lo [22] GRANTHA LETTER OO..GRANTHA LETTER NA -1132A..11330;N # Lo [7] GRANTHA LETTER PA..GRANTHA LETTER RA -11332..11333;N # Lo [2] GRANTHA LETTER LA..GRANTHA LETTER LLA -11335..11339;N # Lo [5] GRANTHA LETTER VA..GRANTHA LETTER HA -1133B..1133C;N # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA -1133D;N # Lo GRANTHA SIGN AVAGRAHA -1133E..1133F;N # Mc [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I -11340;N # Mn GRANTHA VOWEL SIGN II -11341..11344;N # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR -11347..11348;N # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI -1134B..1134D;N # Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA -11350;N # Lo GRANTHA OM -11357;N # Mc GRANTHA AU LENGTH MARK -1135D..11361;N # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL -11362..11363;N # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL -11366..1136C;N # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX -11370..11374;N # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA -11400..11434;N # Lo [53] NEWA LETTER A..NEWA LETTER HA -11435..11437;N # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II -11438..1143F;N # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI -11440..11441;N # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU -11442..11444;N # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA -11445;N # Mc NEWA SIGN VISARGA -11446;N # Mn NEWA SIGN NUKTA -11447..1144A;N # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI -1144B..1144F;N # Po [5] NEWA DANDA..NEWA ABBREVIATION SIGN -11450..11459;N # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE -1145A..1145B;N # Po [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK -1145D;N # Po NEWA INSERTION SIGN -1145E;N # Mn NEWA SANDHI MARK -1145F..11461;N # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA -11480..114AF;N # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA -114B0..114B2;N # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II -114B3..114B8;N # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL -114B9;N # Mc TIRHUTA VOWEL SIGN E -114BA;N # Mn TIRHUTA VOWEL SIGN SHORT E -114BB..114BE;N # Mc [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU -114BF..114C0;N # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA -114C1;N # Mc TIRHUTA SIGN VISARGA -114C2..114C3;N # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA -114C4..114C5;N # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG -114C6;N # Po TIRHUTA ABBREVIATION SIGN -114C7;N # Lo TIRHUTA OM -114D0..114D9;N # Nd [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE -11580..115AE;N # Lo [47] SIDDHAM LETTER A..SIDDHAM LETTER HA -115AF..115B1;N # Mc [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II -115B2..115B5;N # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR -115B8..115BB;N # Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU -115BC..115BD;N # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA -115BE;N # Mc SIDDHAM SIGN VISARGA -115BF..115C0;N # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA -115C1..115D7;N # Po [23] SIDDHAM SIGN SIDDHAM..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES -115D8..115DB;N # Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U -115DC..115DD;N # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU -11600..1162F;N # Lo [48] MODI LETTER A..MODI LETTER LLA -11630..11632;N # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II -11633..1163A;N # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI -1163B..1163C;N # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU -1163D;N # Mn MODI SIGN ANUSVARA -1163E;N # Mc MODI SIGN VISARGA -1163F..11640;N # Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA -11641..11643;N # Po [3] MODI DANDA..MODI ABBREVIATION SIGN -11644;N # Lo MODI SIGN HUVA -11650..11659;N # Nd [10] MODI DIGIT ZERO..MODI DIGIT NINE -11660..1166C;N # Po [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT -11680..116AA;N # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA -116AB;N # Mn TAKRI SIGN ANUSVARA -116AC;N # Mc TAKRI SIGN VISARGA -116AD;N # Mn TAKRI VOWEL SIGN AA -116AE..116AF;N # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II -116B0..116B5;N # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU -116B6;N # Mc TAKRI SIGN VIRAMA -116B7;N # Mn TAKRI SIGN NUKTA -116B8;N # Lo TAKRI LETTER ARCHAIC KHA -116B9;N # Po TAKRI ABBREVIATION SIGN -116C0..116C9;N # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE -11700..1171A;N # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA -1171D..1171F;N # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA -11720..11721;N # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA -11722..11725;N # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU -11726;N # Mc AHOM VOWEL SIGN E -11727..1172B;N # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER -11730..11739;N # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE -1173A..1173B;N # No [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY -1173C..1173E;N # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI -1173F;N # So AHOM SYMBOL VI -11740..11746;N # Lo [7] AHOM LETTER CA..AHOM LETTER LLA -11800..1182B;N # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA -1182C..1182E;N # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II -1182F..11837;N # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA -11838;N # Mc DOGRA SIGN VISARGA -11839..1183A;N # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA -1183B;N # Po DOGRA ABBREVIATION SIGN -118A0..118DF;N # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO -118E0..118E9;N # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE -118EA..118F2;N # No [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY -118FF;N # Lo WARANG CITI OM -11900..11906;N # Lo [7] DIVES AKURU LETTER A..DIVES AKURU LETTER E -11909;N # Lo DIVES AKURU LETTER O -1190C..11913;N # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA -11915..11916;N # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA -11918..1192F;N # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA -11930..11935;N # Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E -11937..11938;N # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O -1193B..1193C;N # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU -1193D;N # Mc DIVES AKURU SIGN HALANTA -1193E;N # Mn DIVES AKURU VIRAMA -1193F;N # Lo DIVES AKURU PREFIXED NASAL SIGN -11940;N # Mc DIVES AKURU MEDIAL YA -11941;N # Lo DIVES AKURU INITIAL RA -11942;N # Mc DIVES AKURU MEDIAL RA -11943;N # Mn DIVES AKURU SIGN NUKTA -11944..11946;N # Po [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK -11950..11959;N # Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE -119A0..119A7;N # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR -119AA..119D0;N # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA -119D1..119D3;N # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II -119D4..119D7;N # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR -119DA..119DB;N # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI -119DC..119DF;N # Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA -119E0;N # Mn NANDINAGARI SIGN VIRAMA -119E1;N # Lo NANDINAGARI SIGN AVAGRAHA -119E2;N # Po NANDINAGARI SIGN SIDDHAM -119E3;N # Lo NANDINAGARI HEADSTROKE -119E4;N # Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E -11A00;N # Lo ZANABAZAR SQUARE LETTER A -11A01..11A0A;N # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK -11A0B..11A32;N # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA -11A33..11A38;N # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA -11A39;N # Mc ZANABAZAR SQUARE SIGN VISARGA -11A3A;N # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA -11A3B..11A3E;N # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA -11A3F..11A46;N # Po [8] ZANABAZAR SQUARE INITIAL HEAD MARK..ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK -11A47;N # Mn ZANABAZAR SQUARE SUBJOINER -11A50;N # Lo SOYOMBO LETTER A -11A51..11A56;N # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE -11A57..11A58;N # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU -11A59..11A5B;N # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK -11A5C..11A89;N # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA -11A8A..11A96;N # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA -11A97;N # Mc SOYOMBO SIGN VISARGA -11A98..11A99;N # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER -11A9A..11A9C;N # Po [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD -11A9D;N # Lo SOYOMBO MARK PLUTA -11A9E..11AA2;N # Po [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2 -11AB0..11ABF;N # Lo [16] CANADIAN SYLLABICS NATTILIK HI..CANADIAN SYLLABICS SPA -11AC0..11AF8;N # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL -11B00..11B09;N # Po [10] DEVANAGARI HEAD MARK..DEVANAGARI SIGN MINDU -11C00..11C08;N # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L -11C0A..11C2E;N # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA -11C2F;N # Mc BHAIKSUKI VOWEL SIGN AA -11C30..11C36;N # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L -11C38..11C3D;N # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA -11C3E;N # Mc BHAIKSUKI SIGN VISARGA -11C3F;N # Mn BHAIKSUKI SIGN VIRAMA -11C40;N # Lo BHAIKSUKI SIGN AVAGRAHA -11C41..11C45;N # Po [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2 -11C50..11C59;N # Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE -11C5A..11C6C;N # No [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK -11C70..11C71;N # Po [2] MARCHEN HEAD MARK..MARCHEN MARK SHAD -11C72..11C8F;N # Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A -11C92..11CA7;N # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA -11CA9;N # Mc MARCHEN SUBJOINED LETTER YA -11CAA..11CB0;N # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA -11CB1;N # Mc MARCHEN VOWEL SIGN I -11CB2..11CB3;N # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E -11CB4;N # Mc MARCHEN VOWEL SIGN O -11CB5..11CB6;N # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU -11D00..11D06;N # Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E -11D08..11D09;N # Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O -11D0B..11D30;N # Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA -11D31..11D36;N # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R -11D3A;N # Mn MASARAM GONDI VOWEL SIGN E -11D3C..11D3D;N # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O -11D3F..11D45;N # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA -11D46;N # Lo MASARAM GONDI REPHA -11D47;N # Mn MASARAM GONDI RA-KARA -11D50..11D59;N # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE -11D60..11D65;N # Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU -11D67..11D68;N # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI -11D6A..11D89;N # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA -11D8A..11D8E;N # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU -11D90..11D91;N # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI -11D93..11D94;N # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU -11D95;N # Mn GUNJALA GONDI SIGN ANUSVARA -11D96;N # Mc GUNJALA GONDI SIGN VISARGA -11D97;N # Mn GUNJALA GONDI VIRAMA -11D98;N # Lo GUNJALA GONDI OM -11DA0..11DA9;N # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE -11EE0..11EF2;N # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA -11EF3..11EF4;N # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U -11EF5..11EF6;N # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O -11EF7..11EF8;N # Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION -11F00..11F01;N # Mn [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA -11F02;N # Lo KAWI SIGN REPHA -11F03;N # Mc KAWI SIGN VISARGA -11F04..11F10;N # Lo [13] KAWI LETTER A..KAWI LETTER O -11F12..11F33;N # Lo [34] KAWI LETTER KA..KAWI LETTER JNYA -11F34..11F35;N # Mc [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA -11F36..11F3A;N # Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R -11F3E..11F3F;N # Mc [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI -11F40;N # Mn KAWI VOWEL SIGN EU -11F41;N # Mc KAWI SIGN KILLER -11F42;N # Mn KAWI CONJOINER -11F43..11F4F;N # Po [13] KAWI DANDA..KAWI PUNCTUATION CLOSING SPIRAL -11F50..11F59;N # Nd [10] KAWI DIGIT ZERO..KAWI DIGIT NINE -11FB0;N # Lo LISU LETTER YHA -11FC0..11FD4;N # No [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH -11FD5..11FDC;N # So [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI -11FDD..11FE0;N # Sc [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN -11FE1..11FF1;N # So [17] TAMIL SIGN PAARAM..TAMIL SIGN VAKAIYARAA -11FFF;N # Po TAMIL PUNCTUATION END OF TEXT -12000..12399;N # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U -12400..1246E;N # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM -12470..12474;N # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON -12480..12543;N # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU -12F90..12FF0;N # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 -12FF1..12FF2;N # Po [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302 -13000..1342F;N # Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D -13430..1343F;N # Cf [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE -13440;N # Mn EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY -13441..13446;N # Lo [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN -13447..13455;N # Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED -14400..14646;N # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 -16800..16A38;N # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ -16A40..16A5E;N # Lo [31] MRO LETTER TA..MRO LETTER TEK -16A60..16A69;N # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE -16A6E..16A6F;N # Po [2] MRO DANDA..MRO DOUBLE DANDA -16A70..16ABE;N # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA -16AC0..16AC9;N # Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE -16AD0..16AED;N # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I -16AF0..16AF4;N # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE -16AF5;N # Po BASSA VAH FULL STOP -16B00..16B2F;N # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU -16B30..16B36;N # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM -16B37..16B3B;N # Po [5] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS FEEM -16B3C..16B3F;N # So [4] PAHAWH HMONG SIGN XYEEM NTXIV..PAHAWH HMONG SIGN XYEEM FAIB -16B40..16B43;N # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM -16B44;N # Po PAHAWH HMONG SIGN XAUS -16B45;N # So PAHAWH HMONG SIGN CIM TSOV ROG -16B50..16B59;N # Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE -16B5B..16B61;N # No [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS -16B63..16B77;N # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS -16B7D..16B8F;N # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ -16E40..16E7F;N # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y -16E80..16E96;N # No [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM -16E97..16E9A;N # Po [4] MEDEFAIDRIN COMMA..MEDEFAIDRIN EXCLAMATION OH -16F00..16F4A;N # Lo [75] MIAO LETTER PA..MIAO LETTER RTE -16F4F;N # Mn MIAO SIGN CONSONANT MODIFIER BAR -16F50;N # Lo MIAO LETTER NASALIZATION -16F51..16F87;N # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI -16F8F..16F92;N # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW -16F93..16F9F;N # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 -16FE0..16FE1;W # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK -16FE2;W # Po OLD CHINESE HOOK MARK -16FE3;W # Lm OLD CHINESE ITERATION MARK -16FE4;W # Mn KHITAN SMALL SCRIPT FILLER -16FF0..16FF1;W # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY -17000..187F7;W # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 -18800..18AFF;W # Lo [768] TANGUT COMPONENT-001..TANGUT COMPONENT-768 -18B00..18CD5;W # Lo [470] KHITAN SMALL SCRIPT CHARACTER-18B00..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18D00..18D08;W # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 -1AFF0..1AFF3;W # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 -1AFF5..1AFFB;W # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 -1AFFD..1AFFE;W # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 -1B000..1B0FF;W # Lo [256] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER RE-2 -1B100..1B122;W # Lo [35] HENTAIGANA LETTER RE-3..KATAKANA LETTER ARCHAIC WU -1B132;W # Lo HIRAGANA LETTER SMALL KO -1B150..1B152;W # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO -1B155;W # Lo KATAKANA LETTER SMALL KO -1B164..1B167;W # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N -1B170..1B2FB;W # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB -1BC00..1BC6A;N # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M -1BC70..1BC7C;N # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK -1BC80..1BC88;N # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL -1BC90..1BC99;N # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW -1BC9C;N # So DUPLOYAN SIGN O WITH CROSS -1BC9D..1BC9E;N # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK -1BC9F;N # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP -1BCA0..1BCA3;N # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP -1CF00..1CF2D;N # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT -1CF30..1CF46;N # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG -1CF50..1CFC3;N # So [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK -1D000..1D0F5;N # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO -1D100..1D126;N # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 -1D129..1D164;N # So [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE -1D165..1D166;N # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM -1D167..1D169;N # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 -1D16A..1D16C;N # So [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3 -1D16D..1D172;N # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 -1D173..1D17A;N # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE -1D17B..1D182;N # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE -1D183..1D184;N # So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN -1D185..1D18B;N # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE -1D18C..1D1A9;N # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH -1D1AA..1D1AD;N # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO -1D1AE..1D1EA;N # So [61] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KORON -1D200..1D241;N # So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54 -1D242..1D244;N # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME -1D245;N # So GREEK MUSICAL LEIMMA -1D2C0..1D2D3;N # No [20] KAKTOVIK NUMERAL ZERO..KAKTOVIK NUMERAL NINETEEN -1D2E0..1D2F3;N # No [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN -1D300..1D356;N # So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING -1D360..1D378;N # No [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE -1D400..1D454;N # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G -1D456..1D49C;N # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A -1D49E..1D49F;N # Lu [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D -1D4A2;N # Lu MATHEMATICAL SCRIPT CAPITAL G -1D4A5..1D4A6;N # Lu [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K -1D4A9..1D4AC;N # Lu [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q -1D4AE..1D4B9;N # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D -1D4BB;N # Ll MATHEMATICAL SCRIPT SMALL F -1D4BD..1D4C3;N # Ll [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N -1D4C5..1D505;N # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B -1D507..1D50A;N # Lu [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G -1D50D..1D514;N # Lu [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q -1D516..1D51C;N # Lu [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y -1D51E..1D539;N # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B -1D53B..1D53E;N # Lu [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G -1D540..1D544;N # Lu [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M -1D546;N # Lu MATHEMATICAL DOUBLE-STRUCK CAPITAL O -1D54A..1D550;N # Lu [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y -1D552..1D6A5;N # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J -1D6A8..1D6C0;N # Lu [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA -1D6C1;N # Sm MATHEMATICAL BOLD NABLA -1D6C2..1D6DA;N # Ll [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA -1D6DB;N # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL -1D6DC..1D6FA;N # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA -1D6FB;N # Sm MATHEMATICAL ITALIC NABLA -1D6FC..1D714;N # Ll [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA -1D715;N # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL -1D716..1D734;N # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA -1D735;N # Sm MATHEMATICAL BOLD ITALIC NABLA -1D736..1D74E;N # Ll [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA -1D74F;N # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL -1D750..1D76E;N # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA -1D76F;N # Sm MATHEMATICAL SANS-SERIF BOLD NABLA -1D770..1D788;N # Ll [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA -1D789;N # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL -1D78A..1D7A8;N # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA -1D7A9;N # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA -1D7AA..1D7C2;N # Ll [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA -1D7C3;N # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL -1D7C4..1D7CB;N # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA -1D7CE..1D7FF;N # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE -1D800..1D9FF;N # So [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD -1DA00..1DA36;N # Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN -1DA37..1DA3A;N # So [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE -1DA3B..1DA6C;N # Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT -1DA6D..1DA74;N # So [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING -1DA75;N # Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS -1DA76..1DA83;N # So [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH -1DA84;N # Mn SIGNWRITING LOCATION HEAD NECK -1DA85..1DA86;N # So [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS -1DA87..1DA8B;N # Po [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS -1DA9B..1DA9F;N # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 -1DAA1..1DAAF;N # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 -1DF00..1DF09;N # Ll [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK -1DF0A;N # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK -1DF0B..1DF1E;N # Ll [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL -1DF25..1DF2A;N # Ll [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK -1E000..1E006;N # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE -1E008..1E018;N # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU -1E01B..1E021;N # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI -1E023..1E024;N # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS -1E026..1E02A;N # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA -1E030..1E06D;N # Lm [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE -1E08F;N # Mn COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I -1E100..1E12C;N # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W -1E130..1E136;N # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D -1E137..1E13D;N # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER -1E140..1E149;N # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE -1E14E;N # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ -1E14F;N # So NYIAKENG PUACHUE HMONG CIRCLED CA -1E290..1E2AD;N # Lo [30] TOTO LETTER PA..TOTO LETTER A -1E2AE;N # Mn TOTO SIGN RISING TONE -1E2C0..1E2EB;N # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH -1E2EC..1E2EF;N # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI -1E2F0..1E2F9;N # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE -1E2FF;N # Sc WANCHO NGUN SIGN -1E4D0..1E4EA;N # Lo [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL -1E4EB;N # Lm NAG MUNDARI SIGN OJOD -1E4EC..1E4EF;N # Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH -1E4F0..1E4F9;N # Nd [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE -1E7E0..1E7E6;N # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO -1E7E8..1E7EB;N # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE -1E7ED..1E7EE;N # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE -1E7F0..1E7FE;N # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE -1E800..1E8C4;N # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON -1E8C7..1E8CF;N # No [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE -1E8D0..1E8D6;N # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS -1E900..1E943;N # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA -1E944..1E94A;N # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA -1E94B;N # Lm ADLAM NASALIZATION MARK -1E950..1E959;N # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE -1E95E..1E95F;N # Po [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK -1EC71..1ECAB;N # No [59] INDIC SIYAQ NUMBER ONE..INDIC SIYAQ NUMBER PREFIXED NINE -1ECAC;N # So INDIC SIYAQ PLACEHOLDER -1ECAD..1ECAF;N # No [3] INDIC SIYAQ FRACTION ONE QUARTER..INDIC SIYAQ FRACTION THREE QUARTERS -1ECB0;N # Sc INDIC SIYAQ RUPEE MARK -1ECB1..1ECB4;N # No [4] INDIC SIYAQ NUMBER ALTERNATE ONE..INDIC SIYAQ ALTERNATE LAKH MARK -1ED01..1ED2D;N # No [45] OTTOMAN SIYAQ NUMBER ONE..OTTOMAN SIYAQ NUMBER NINETY THOUSAND -1ED2E;N # So OTTOMAN SIYAQ MARRATAN -1ED2F..1ED3D;N # No [15] OTTOMAN SIYAQ ALTERNATE NUMBER TWO..OTTOMAN SIYAQ FRACTION ONE SIXTH -1EE00..1EE03;N # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL -1EE05..1EE1F;N # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF -1EE21..1EE22;N # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM -1EE24;N # Lo ARABIC MATHEMATICAL INITIAL HEH -1EE27;N # Lo ARABIC MATHEMATICAL INITIAL HAH -1EE29..1EE32;N # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF -1EE34..1EE37;N # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH -1EE39;N # Lo ARABIC MATHEMATICAL INITIAL DAD -1EE3B;N # Lo ARABIC MATHEMATICAL INITIAL GHAIN -1EE42;N # Lo ARABIC MATHEMATICAL TAILED JEEM -1EE47;N # Lo ARABIC MATHEMATICAL TAILED HAH -1EE49;N # Lo ARABIC MATHEMATICAL TAILED YEH -1EE4B;N # Lo ARABIC MATHEMATICAL TAILED LAM -1EE4D..1EE4F;N # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN -1EE51..1EE52;N # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF -1EE54;N # Lo ARABIC MATHEMATICAL TAILED SHEEN -1EE57;N # Lo ARABIC MATHEMATICAL TAILED KHAH -1EE59;N # Lo ARABIC MATHEMATICAL TAILED DAD -1EE5B;N # Lo ARABIC MATHEMATICAL TAILED GHAIN -1EE5D;N # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON -1EE5F;N # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF -1EE61..1EE62;N # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM -1EE64;N # Lo ARABIC MATHEMATICAL STRETCHED HEH -1EE67..1EE6A;N # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF -1EE6C..1EE72;N # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF -1EE74..1EE77;N # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH -1EE79..1EE7C;N # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH -1EE7E;N # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH -1EE80..1EE89;N # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH -1EE8B..1EE9B;N # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN -1EEA1..1EEA3;N # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL -1EEA5..1EEA9;N # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH -1EEAB..1EEBB;N # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN -1EEF0..1EEF1;N # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL -1F000..1F003;N # So [4] MAHJONG TILE EAST WIND..MAHJONG TILE NORTH WIND -1F004;W # So MAHJONG TILE RED DRAGON -1F005..1F02B;N # So [39] MAHJONG TILE GREEN DRAGON..MAHJONG TILE BACK -1F030..1F093;N # So [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06 -1F0A0..1F0AE;N # So [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES -1F0B1..1F0BF;N # So [15] PLAYING CARD ACE OF HEARTS..PLAYING CARD RED JOKER -1F0C1..1F0CE;N # So [14] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD KING OF DIAMONDS -1F0CF;W # So PLAYING CARD BLACK JOKER -1F0D1..1F0F5;N # So [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21 -1F100..1F10A;A # No [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA -1F10B..1F10C;N # No [2] DINGBAT CIRCLED SANS-SERIF DIGIT ZERO..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO -1F10D..1F10F;N # So [3] CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH -1F110..1F12D;A # So [30] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED CD -1F12E..1F12F;N # So [2] CIRCLED WZ..COPYLEFT SYMBOL -1F130..1F169;A # So [58] SQUARED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z -1F16A..1F16F;N # So [6] RAISED MC SIGN..CIRCLED HUMAN FIGURE -1F170..1F18D;A # So [30] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED SA -1F18E;W # So NEGATIVE SQUARED AB -1F18F..1F190;A # So [2] NEGATIVE SQUARED WC..SQUARE DJ -1F191..1F19A;W # So [10] SQUARED CL..SQUARED VS -1F19B..1F1AC;A # So [18] SQUARED THREE D..SQUARED VOD -1F1AD;N # So MASK WORK SYMBOL -1F1E6..1F1FF;N # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z -1F200..1F202;W # So [3] SQUARE HIRAGANA HOKA..SQUARED KATAKANA SA -1F210..1F23B;W # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D -1F240..1F248;W # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 -1F250..1F251;W # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT -1F260..1F265;W # So [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI -1F300..1F320;W # So [33] CYCLONE..SHOOTING STAR -1F321..1F32C;N # So [12] THERMOMETER..WIND BLOWING FACE -1F32D..1F335;W # So [9] HOT DOG..CACTUS -1F336;N # So HOT PEPPER -1F337..1F37C;W # So [70] TULIP..BABY BOTTLE -1F37D;N # So FORK AND KNIFE WITH PLATE -1F37E..1F393;W # So [22] BOTTLE WITH POPPING CORK..GRADUATION CAP -1F394..1F39F;N # So [12] HEART WITH TIP ON THE LEFT..ADMISSION TICKETS -1F3A0..1F3CA;W # So [43] CAROUSEL HORSE..SWIMMER -1F3CB..1F3CE;N # So [4] WEIGHT LIFTER..RACING CAR -1F3CF..1F3D3;W # So [5] CRICKET BAT AND BALL..TABLE TENNIS PADDLE AND BALL -1F3D4..1F3DF;N # So [12] SNOW CAPPED MOUNTAIN..STADIUM -1F3E0..1F3F0;W # So [17] HOUSE BUILDING..EUROPEAN CASTLE -1F3F1..1F3F3;N # So [3] WHITE PENNANT..WAVING WHITE FLAG -1F3F4;W # So WAVING BLACK FLAG -1F3F5..1F3F7;N # So [3] ROSETTE..LABEL -1F3F8..1F3FA;W # So [3] BADMINTON RACQUET AND SHUTTLECOCK..AMPHORA -1F3FB..1F3FF;W # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 -1F400..1F43E;W # So [63] RAT..PAW PRINTS -1F43F;N # So CHIPMUNK -1F440;W # So EYES -1F441;N # So EYE -1F442..1F4FC;W # So [187] EAR..VIDEOCASSETTE -1F4FD..1F4FE;N # So [2] FILM PROJECTOR..PORTABLE STEREO -1F4FF..1F53D;W # So [63] PRAYER BEADS..DOWN-POINTING SMALL RED TRIANGLE -1F53E..1F54A;N # So [13] LOWER RIGHT SHADOWED WHITE CIRCLE..DOVE OF PEACE -1F54B..1F54E;W # So [4] KAABA..MENORAH WITH NINE BRANCHES -1F54F;N # So BOWL OF HYGIEIA -1F550..1F567;W # So [24] CLOCK FACE ONE OCLOCK..CLOCK FACE TWELVE-THIRTY -1F568..1F579;N # So [18] RIGHT SPEAKER..JOYSTICK -1F57A;W # So MAN DANCING -1F57B..1F594;N # So [26] LEFT HAND TELEPHONE RECEIVER..REVERSED VICTORY HAND -1F595..1F596;W # So [2] REVERSED HAND WITH MIDDLE FINGER EXTENDED..RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS -1F597..1F5A3;N # So [13] WHITE DOWN POINTING LEFT HAND INDEX..BLACK DOWN POINTING BACKHAND INDEX -1F5A4;W # So BLACK HEART -1F5A5..1F5FA;N # So [86] DESKTOP COMPUTER..WORLD MAP -1F5FB..1F5FF;W # So [5] MOUNT FUJI..MOYAI -1F600..1F64F;W # So [80] GRINNING FACE..PERSON WITH FOLDED HANDS -1F650..1F67F;N # So [48] NORTH WEST POINTING LEAF..REVERSE CHECKER BOARD -1F680..1F6C5;W # So [70] ROCKET..LEFT LUGGAGE -1F6C6..1F6CB;N # So [6] TRIANGLE WITH ROUNDED CORNERS..COUCH AND LAMP -1F6CC;W # So SLEEPING ACCOMMODATION -1F6CD..1F6CF;N # So [3] SHOPPING BAGS..BED -1F6D0..1F6D2;W # So [3] PLACE OF WORSHIP..SHOPPING TROLLEY -1F6D3..1F6D4;N # So [2] STUPA..PAGODA -1F6D5..1F6D7;W # So [3] HINDU TEMPLE..ELEVATOR -1F6DC..1F6DF;W # So [4] WIRELESS..RING BUOY -1F6E0..1F6EA;N # So [11] HAMMER AND WRENCH..NORTHEAST-POINTING AIRPLANE -1F6EB..1F6EC;W # So [2] AIRPLANE DEPARTURE..AIRPLANE ARRIVING -1F6F0..1F6F3;N # So [4] SATELLITE..PASSENGER SHIP -1F6F4..1F6FC;W # So [9] SCOOTER..ROLLER SKATE -1F700..1F776;N # So [119] ALCHEMICAL SYMBOL FOR QUINTESSENCE..LUNAR ECLIPSE -1F77B..1F77F;N # So [5] HAUMEA..ORCUS -1F780..1F7D9;N # So [90] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NINE POINTED WHITE STAR -1F7E0..1F7EB;W # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE -1F7F0;W # So HEAVY EQUALS SIGN -1F800..1F80B;N # So [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD -1F810..1F847;N # So [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW -1F850..1F859;N # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW -1F860..1F887;N # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW -1F890..1F8AD;N # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS -1F8B0..1F8B1;N # So [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST -1F900..1F90B;N # So [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT -1F90C..1F93A;W # So [47] PINCHED FINGERS..FENCER -1F93B;N # So MODERN PENTATHLON -1F93C..1F945;W # So [10] WRESTLERS..GOAL NET -1F946;N # So RIFLE -1F947..1F9FF;W # So [185] FIRST PLACE MEDAL..NAZAR AMULET -1FA00..1FA53;N # So [84] NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP -1FA60..1FA6D;N # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER -1FA70..1FA7C;W # So [13] BALLET SHOES..CRUTCH -1FA80..1FA88;W # So [9] YO-YO..FLUTE -1FA90..1FABD;W # So [46] RINGED PLANET..WING -1FABF..1FAC5;W # So [7] GOOSE..PERSON WITH CROWN -1FACE..1FADB;W # So [14] MOOSE..PEA POD -1FAE0..1FAE8;W # So [9] MELTING FACE..SHAKING FACE -1FAF0..1FAF8;W # So [9] HAND WITH INDEX FINGER AND THUMB CROSSED..RIGHTWARDS PUSHING HAND -1FB00..1FB92;N # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK -1FB94..1FBCA;N # So [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON -1FBF0..1FBF9;N # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE -20000..2A6DF;W # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF -2A6E0..2A6FF;W # Cn [32] .. -2A700..2B739;W # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 -2B73A..2B73F;W # Cn [6] .. -2B740..2B81D;W # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D -2B81E..2B81F;W # Cn [2] .. -2B820..2CEA1;W # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 -2CEA2..2CEAF;W # Cn [14] .. -2CEB0..2EBE0;W # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 -2EBE1..2F7FF;W # Cn [3103] .. -2F800..2FA1D;W # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D -2FA1E..2FA1F;W # Cn [2] .. -2FA20..2FFFD;W # Cn [1502] .. -30000..3134A;W # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -3134B..3134F;W # Cn [5] .. -31350..323AF;W # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF -323B0..3FFFD;W # Cn [56398] .. -E0001;N # Cf LANGUAGE TAG -E0020..E007F;N # Cf [96] TAG SPACE..CANCEL TAG -E0100..E01EF;A # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -F0000..FFFFD;A # Co [65534] .. -100000..10FFFD;A # Co [65534] .. +0000..001F ; N # Cc [32] .. +0020 ; Na # Zs SPACE +0021..0023 ; Na # Po [3] EXCLAMATION MARK..NUMBER SIGN +0024 ; Na # Sc DOLLAR SIGN +0025..0027 ; Na # Po [3] PERCENT SIGN..APOSTROPHE +0028 ; Na # Ps LEFT PARENTHESIS +0029 ; Na # Pe RIGHT PARENTHESIS +002A ; Na # Po ASTERISK +002B ; Na # Sm PLUS SIGN +002C ; Na # Po COMMA +002D ; Na # Pd HYPHEN-MINUS +002E..002F ; Na # Po [2] FULL STOP..SOLIDUS +0030..0039 ; Na # Nd [10] DIGIT ZERO..DIGIT NINE +003A..003B ; Na # Po [2] COLON..SEMICOLON +003C..003E ; Na # Sm [3] LESS-THAN SIGN..GREATER-THAN SIGN +003F..0040 ; Na # Po [2] QUESTION MARK..COMMERCIAL AT +0041..005A ; Na # Lu [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z +005B ; Na # Ps LEFT SQUARE BRACKET +005C ; Na # Po REVERSE SOLIDUS +005D ; Na # Pe RIGHT SQUARE BRACKET +005E ; Na # Sk CIRCUMFLEX ACCENT +005F ; Na # Pc LOW LINE +0060 ; Na # Sk GRAVE ACCENT +0061..007A ; Na # Ll [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z +007B ; Na # Ps LEFT CURLY BRACKET +007C ; Na # Sm VERTICAL LINE +007D ; Na # Pe RIGHT CURLY BRACKET +007E ; Na # Sm TILDE +007F ; N # Cc +0080..009F ; N # Cc [32] .. +00A0 ; N # Zs NO-BREAK SPACE +00A1 ; A # Po INVERTED EXCLAMATION MARK +00A2..00A3 ; Na # Sc [2] CENT SIGN..POUND SIGN +00A4 ; A # Sc CURRENCY SIGN +00A5 ; Na # Sc YEN SIGN +00A6 ; Na # So BROKEN BAR +00A7 ; A # Po SECTION SIGN +00A8 ; A # Sk DIAERESIS +00A9 ; N # So COPYRIGHT SIGN +00AA ; A # Lo FEMININE ORDINAL INDICATOR +00AB ; N # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +00AC ; Na # Sm NOT SIGN +00AD ; A # Cf SOFT HYPHEN +00AE ; A # So REGISTERED SIGN +00AF ; Na # Sk MACRON +00B0 ; A # So DEGREE SIGN +00B1 ; A # Sm PLUS-MINUS SIGN +00B2..00B3 ; A # No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE +00B4 ; A # Sk ACUTE ACCENT +00B5 ; N # Ll MICRO SIGN +00B6..00B7 ; A # Po [2] PILCROW SIGN..MIDDLE DOT +00B8 ; A # Sk CEDILLA +00B9 ; A # No SUPERSCRIPT ONE +00BA ; A # Lo MASCULINE ORDINAL INDICATOR +00BB ; N # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +00BC..00BE ; A # No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS +00BF ; A # Po INVERTED QUESTION MARK +00C0..00C5 ; N # Lu [6] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER A WITH RING ABOVE +00C6 ; A # Lu LATIN CAPITAL LETTER AE +00C7..00CF ; N # Lu [9] LATIN CAPITAL LETTER C WITH CEDILLA..LATIN CAPITAL LETTER I WITH DIAERESIS +00D0 ; A # Lu LATIN CAPITAL LETTER ETH +00D1..00D6 ; N # Lu [6] LATIN CAPITAL LETTER N WITH TILDE..LATIN CAPITAL LETTER O WITH DIAERESIS +00D7 ; A # Sm MULTIPLICATION SIGN +00D8 ; A # Lu LATIN CAPITAL LETTER O WITH STROKE +00D9..00DD ; N # Lu [5] LATIN CAPITAL LETTER U WITH GRAVE..LATIN CAPITAL LETTER Y WITH ACUTE +00DE..00E1 ; A # L& [4] LATIN CAPITAL LETTER THORN..LATIN SMALL LETTER A WITH ACUTE +00E2..00E5 ; N # Ll [4] LATIN SMALL LETTER A WITH CIRCUMFLEX..LATIN SMALL LETTER A WITH RING ABOVE +00E6 ; A # Ll LATIN SMALL LETTER AE +00E7 ; N # Ll LATIN SMALL LETTER C WITH CEDILLA +00E8..00EA ; A # Ll [3] LATIN SMALL LETTER E WITH GRAVE..LATIN SMALL LETTER E WITH CIRCUMFLEX +00EB ; N # Ll LATIN SMALL LETTER E WITH DIAERESIS +00EC..00ED ; A # Ll [2] LATIN SMALL LETTER I WITH GRAVE..LATIN SMALL LETTER I WITH ACUTE +00EE..00EF ; N # Ll [2] LATIN SMALL LETTER I WITH CIRCUMFLEX..LATIN SMALL LETTER I WITH DIAERESIS +00F0 ; A # Ll LATIN SMALL LETTER ETH +00F1 ; N # Ll LATIN SMALL LETTER N WITH TILDE +00F2..00F3 ; A # Ll [2] LATIN SMALL LETTER O WITH GRAVE..LATIN SMALL LETTER O WITH ACUTE +00F4..00F6 ; N # Ll [3] LATIN SMALL LETTER O WITH CIRCUMFLEX..LATIN SMALL LETTER O WITH DIAERESIS +00F7 ; A # Sm DIVISION SIGN +00F8..00FA ; A # Ll [3] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER U WITH ACUTE +00FB ; N # Ll LATIN SMALL LETTER U WITH CIRCUMFLEX +00FC ; A # Ll LATIN SMALL LETTER U WITH DIAERESIS +00FD ; N # Ll LATIN SMALL LETTER Y WITH ACUTE +00FE ; A # Ll LATIN SMALL LETTER THORN +00FF ; N # Ll LATIN SMALL LETTER Y WITH DIAERESIS +0100 ; N # Lu LATIN CAPITAL LETTER A WITH MACRON +0101 ; A # Ll LATIN SMALL LETTER A WITH MACRON +0102..0110 ; N # L& [15] LATIN CAPITAL LETTER A WITH BREVE..LATIN CAPITAL LETTER D WITH STROKE +0111 ; A # Ll LATIN SMALL LETTER D WITH STROKE +0112 ; N # Lu LATIN CAPITAL LETTER E WITH MACRON +0113 ; A # Ll LATIN SMALL LETTER E WITH MACRON +0114..011A ; N # L& [7] LATIN CAPITAL LETTER E WITH BREVE..LATIN CAPITAL LETTER E WITH CARON +011B ; A # Ll LATIN SMALL LETTER E WITH CARON +011C..0125 ; N # L& [10] LATIN CAPITAL LETTER G WITH CIRCUMFLEX..LATIN SMALL LETTER H WITH CIRCUMFLEX +0126..0127 ; A # L& [2] LATIN CAPITAL LETTER H WITH STROKE..LATIN SMALL LETTER H WITH STROKE +0128..012A ; N # L& [3] LATIN CAPITAL LETTER I WITH TILDE..LATIN CAPITAL LETTER I WITH MACRON +012B ; A # Ll LATIN SMALL LETTER I WITH MACRON +012C..0130 ; N # L& [5] LATIN CAPITAL LETTER I WITH BREVE..LATIN CAPITAL LETTER I WITH DOT ABOVE +0131..0133 ; A # L& [3] LATIN SMALL LETTER DOTLESS I..LATIN SMALL LIGATURE IJ +0134..0137 ; N # L& [4] LATIN CAPITAL LETTER J WITH CIRCUMFLEX..LATIN SMALL LETTER K WITH CEDILLA +0138 ; A # Ll LATIN SMALL LETTER KRA +0139..013E ; N # L& [6] LATIN CAPITAL LETTER L WITH ACUTE..LATIN SMALL LETTER L WITH CARON +013F..0142 ; A # L& [4] LATIN CAPITAL LETTER L WITH MIDDLE DOT..LATIN SMALL LETTER L WITH STROKE +0143 ; N # Lu LATIN CAPITAL LETTER N WITH ACUTE +0144 ; A # Ll LATIN SMALL LETTER N WITH ACUTE +0145..0147 ; N # L& [3] LATIN CAPITAL LETTER N WITH CEDILLA..LATIN CAPITAL LETTER N WITH CARON +0148..014B ; A # L& [4] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER ENG +014C ; N # Lu LATIN CAPITAL LETTER O WITH MACRON +014D ; A # Ll LATIN SMALL LETTER O WITH MACRON +014E..0151 ; N # L& [4] LATIN CAPITAL LETTER O WITH BREVE..LATIN SMALL LETTER O WITH DOUBLE ACUTE +0152..0153 ; A # L& [2] LATIN CAPITAL LIGATURE OE..LATIN SMALL LIGATURE OE +0154..0165 ; N # L& [18] LATIN CAPITAL LETTER R WITH ACUTE..LATIN SMALL LETTER T WITH CARON +0166..0167 ; A # L& [2] LATIN CAPITAL LETTER T WITH STROKE..LATIN SMALL LETTER T WITH STROKE +0168..016A ; N # L& [3] LATIN CAPITAL LETTER U WITH TILDE..LATIN CAPITAL LETTER U WITH MACRON +016B ; A # Ll LATIN SMALL LETTER U WITH MACRON +016C..017F ; N # L& [20] LATIN CAPITAL LETTER U WITH BREVE..LATIN SMALL LETTER LONG S +0180..01BA ; N # L& [59] LATIN SMALL LETTER B WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL +01BB ; N # Lo LATIN LETTER TWO WITH STROKE +01BC..01BF ; N # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN +01C0..01C3 ; N # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK +01C4..01CD ; N # L& [10] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER A WITH CARON +01CE ; A # Ll LATIN SMALL LETTER A WITH CARON +01CF ; N # Lu LATIN CAPITAL LETTER I WITH CARON +01D0 ; A # Ll LATIN SMALL LETTER I WITH CARON +01D1 ; N # Lu LATIN CAPITAL LETTER O WITH CARON +01D2 ; A # Ll LATIN SMALL LETTER O WITH CARON +01D3 ; N # Lu LATIN CAPITAL LETTER U WITH CARON +01D4 ; A # Ll LATIN SMALL LETTER U WITH CARON +01D5 ; N # Lu LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01D6 ; A # Ll LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D7 ; N # Lu LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D8 ; A # Ll LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D9 ; N # Lu LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +01DA ; A # Ll LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01DB ; N # Lu LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01DC ; A # Ll LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DD..024F ; N # L& [115] LATIN SMALL LETTER TURNED E..LATIN SMALL LETTER Y WITH STROKE +0250 ; N # Ll LATIN SMALL LETTER TURNED A +0251 ; A # Ll LATIN SMALL LETTER ALPHA +0252..0260 ; N # Ll [15] LATIN SMALL LETTER TURNED ALPHA..LATIN SMALL LETTER G WITH HOOK +0261 ; A # Ll LATIN SMALL LETTER SCRIPT G +0262..0293 ; N # Ll [50] LATIN LETTER SMALL CAPITAL G..LATIN SMALL LETTER EZH WITH CURL +0294 ; N # Lo LATIN LETTER GLOTTAL STOP +0295..02AF ; N # Ll [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +02B0..02C1 ; N # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP +02C2..02C3 ; N # Sk [2] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER RIGHT ARROWHEAD +02C4 ; A # Sk MODIFIER LETTER UP ARROWHEAD +02C5 ; N # Sk MODIFIER LETTER DOWN ARROWHEAD +02C6 ; N # Lm MODIFIER LETTER CIRCUMFLEX ACCENT +02C7 ; A # Lm CARON +02C8 ; N # Lm MODIFIER LETTER VERTICAL LINE +02C9..02CB ; A # Lm [3] MODIFIER LETTER MACRON..MODIFIER LETTER GRAVE ACCENT +02CC ; N # Lm MODIFIER LETTER LOW VERTICAL LINE +02CD ; A # Lm MODIFIER LETTER LOW MACRON +02CE..02CF ; N # Lm [2] MODIFIER LETTER LOW GRAVE ACCENT..MODIFIER LETTER LOW ACUTE ACCENT +02D0 ; A # Lm MODIFIER LETTER TRIANGULAR COLON +02D1 ; N # Lm MODIFIER LETTER HALF TRIANGULAR COLON +02D2..02D7 ; N # Sk [6] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER MINUS SIGN +02D8..02DB ; A # Sk [4] BREVE..OGONEK +02DC ; N # Sk SMALL TILDE +02DD ; A # Sk DOUBLE ACUTE ACCENT +02DE ; N # Sk MODIFIER LETTER RHOTIC HOOK +02DF ; A # Sk MODIFIER LETTER CROSS ACCENT +02E0..02E4 ; N # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP +02E5..02EB ; N # Sk [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK +02EC ; N # Lm MODIFIER LETTER VOICING +02ED ; N # Sk MODIFIER LETTER UNASPIRATED +02EE ; N # Lm MODIFIER LETTER DOUBLE APOSTROPHE +02EF..02FF ; N # Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW +0300..036F ; A # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X +0370..0373 ; N # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI +0374 ; N # Lm GREEK NUMERAL SIGN +0375 ; N # Sk GREEK LOWER NUMERAL SIGN +0376..0377 ; N # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA +037A ; N # Lm GREEK YPOGEGRAMMENI +037B..037D ; N # Ll [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL +037E ; N # Po GREEK QUESTION MARK +037F ; N # Lu GREEK CAPITAL LETTER YOT +0384..0385 ; N # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS +0386 ; N # Lu GREEK CAPITAL LETTER ALPHA WITH TONOS +0387 ; N # Po GREEK ANO TELEIA +0388..038A ; N # Lu [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS +038C ; N # Lu GREEK CAPITAL LETTER OMICRON WITH TONOS +038E..0390 ; N # L& [3] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +0391..03A1 ; A # Lu [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO +03A3..03A9 ; A # Lu [7] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER OMEGA +03AA..03B0 ; N # L& [7] GREEK CAPITAL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +03B1..03C1 ; A # Ll [17] GREEK SMALL LETTER ALPHA..GREEK SMALL LETTER RHO +03C2 ; N # Ll GREEK SMALL LETTER FINAL SIGMA +03C3..03C9 ; A # Ll [7] GREEK SMALL LETTER SIGMA..GREEK SMALL LETTER OMEGA +03CA..03F5 ; N # L& [44] GREEK SMALL LETTER IOTA WITH DIALYTIKA..GREEK LUNATE EPSILON SYMBOL +03F6 ; N # Sm GREEK REVERSED LUNATE EPSILON SYMBOL +03F7..03FF ; N # L& [9] GREEK CAPITAL LETTER SHO..GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL +0400 ; N # Lu CYRILLIC CAPITAL LETTER IE WITH GRAVE +0401 ; A # Lu CYRILLIC CAPITAL LETTER IO +0402..040F ; N # Lu [14] CYRILLIC CAPITAL LETTER DJE..CYRILLIC CAPITAL LETTER DZHE +0410..044F ; A # L& [64] CYRILLIC CAPITAL LETTER A..CYRILLIC SMALL LETTER YA +0450 ; N # Ll CYRILLIC SMALL LETTER IE WITH GRAVE +0451 ; A # Ll CYRILLIC SMALL LETTER IO +0452..0481 ; N # L& [48] CYRILLIC SMALL LETTER DJE..CYRILLIC SMALL LETTER KOPPA +0482 ; N # So CYRILLIC THOUSANDS SIGN +0483..0487 ; N # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE +0488..0489 ; N # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN +048A..04FF ; N # L& [118] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER HA WITH STROKE +0500..052F ; N # L& [48] CYRILLIC CAPITAL LETTER KOMI DE..CYRILLIC SMALL LETTER EL WITH DESCENDER +0531..0556 ; N # Lu [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH +0559 ; N # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING +055A..055F ; N # Po [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK +0560..0588 ; N # Ll [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE +0589 ; N # Po ARMENIAN FULL STOP +058A ; N # Pd ARMENIAN HYPHEN +058D..058E ; N # So [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN +058F ; N # Sc ARMENIAN DRAM SIGN +0591..05BD ; N # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG +05BE ; N # Pd HEBREW PUNCTUATION MAQAF +05BF ; N # Mn HEBREW POINT RAFE +05C0 ; N # Po HEBREW PUNCTUATION PASEQ +05C1..05C2 ; N # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT +05C3 ; N # Po HEBREW PUNCTUATION SOF PASUQ +05C4..05C5 ; N # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT +05C6 ; N # Po HEBREW PUNCTUATION NUN HAFUKHA +05C7 ; N # Mn HEBREW POINT QAMATS QATAN +05D0..05EA ; N # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV +05EF..05F2 ; N # Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD +05F3..05F4 ; N # Po [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM +0600..0605 ; N # Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE +0606..0608 ; N # Sm [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY +0609..060A ; N # Po [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN +060B ; N # Sc AFGHANI SIGN +060C..060D ; N # Po [2] ARABIC COMMA..ARABIC DATE SEPARATOR +060E..060F ; N # So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA +0610..061A ; N # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA +061B ; N # Po ARABIC SEMICOLON +061C ; N # Cf ARABIC LETTER MARK +061D..061F ; N # Po [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK +0620..063F ; N # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE +0640 ; N # Lm ARABIC TATWEEL +0641..064A ; N # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH +064B..065F ; N # Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW +0660..0669 ; N # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE +066A..066D ; N # Po [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR +066E..066F ; N # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF +0670 ; N # Mn ARABIC LETTER SUPERSCRIPT ALEF +0671..06D3 ; N # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE +06D4 ; N # Po ARABIC FULL STOP +06D5 ; N # Lo ARABIC LETTER AE +06D6..06DC ; N # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN +06DD ; N # Cf ARABIC END OF AYAH +06DE ; N # So ARABIC START OF RUB EL HIZB +06DF..06E4 ; N # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA +06E5..06E6 ; N # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH +06E7..06E8 ; N # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON +06E9 ; N # So ARABIC PLACE OF SAJDAH +06EA..06ED ; N # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM +06EE..06EF ; N # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V +06F0..06F9 ; N # Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE +06FA..06FC ; N # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW +06FD..06FE ; N # So [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN +06FF ; N # Lo ARABIC LETTER HEH WITH INVERTED V +0700..070D ; N # Po [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS +070F ; N # Cf SYRIAC ABBREVIATION MARK +0710 ; N # Lo SYRIAC LETTER ALAPH +0711 ; N # Mn SYRIAC LETTER SUPERSCRIPT ALAPH +0712..072F ; N # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH +0730..074A ; N # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH +074D..074F ; N # Lo [3] SYRIAC LETTER SOGDIAN ZHAIN..SYRIAC LETTER SOGDIAN FE +0750..077F ; N # Lo [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE +0780..07A5 ; N # Lo [38] THAANA LETTER HAA..THAANA LETTER WAAVU +07A6..07B0 ; N # Mn [11] THAANA ABAFILI..THAANA SUKUN +07B1 ; N # Lo THAANA LETTER NAA +07C0..07C9 ; N # Nd [10] NKO DIGIT ZERO..NKO DIGIT NINE +07CA..07EA ; N # Lo [33] NKO LETTER A..NKO LETTER JONA RA +07EB..07F3 ; N # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE +07F4..07F5 ; N # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE +07F6 ; N # So NKO SYMBOL OO DENNEN +07F7..07F9 ; N # Po [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK +07FA ; N # Lm NKO LAJANYALAN +07FD ; N # Mn NKO DANTAYALAN +07FE..07FF ; N # Sc [2] NKO DOROME SIGN..NKO TAMAN SIGN +0800..0815 ; N # Lo [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF +0816..0819 ; N # Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH +081A ; N # Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT +081B..0823 ; N # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A +0824 ; N # Lm SAMARITAN MODIFIER LETTER SHORT A +0825..0827 ; N # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U +0828 ; N # Lm SAMARITAN MODIFIER LETTER I +0829..082D ; N # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA +0830..083E ; N # Po [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU +0840..0858 ; N # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN +0859..085B ; N # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK +085E ; N # Po MANDAIC PUNCTUATION +0860..086A ; N # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA +0870..0887 ; N # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0888 ; N # Sk ARABIC RAISED ROUND DOT +0889..088E ; N # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0890..0891 ; N # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE +0898..089F ; N # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +08A0..08C8 ; N # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF +08C9 ; N # Lm ARABIC SMALL FARSI YEH +08CA..08E1 ; N # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA +08E2 ; N # Cf ARABIC DISPUTED END OF AYAH +08E3..08FF ; N # Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA +0900..0902 ; N # Mn [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA +0903 ; N # Mc DEVANAGARI SIGN VISARGA +0904..0939 ; N # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA +093A ; N # Mn DEVANAGARI VOWEL SIGN OE +093B ; N # Mc DEVANAGARI VOWEL SIGN OOE +093C ; N # Mn DEVANAGARI SIGN NUKTA +093D ; N # Lo DEVANAGARI SIGN AVAGRAHA +093E..0940 ; N # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II +0941..0948 ; N # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI +0949..094C ; N # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU +094D ; N # Mn DEVANAGARI SIGN VIRAMA +094E..094F ; N # Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW +0950 ; N # Lo DEVANAGARI OM +0951..0957 ; N # Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE +0958..0961 ; N # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL +0962..0963 ; N # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL +0964..0965 ; N # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA +0966..096F ; N # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE +0970 ; N # Po DEVANAGARI ABBREVIATION SIGN +0971 ; N # Lm DEVANAGARI SIGN HIGH SPACING DOT +0972..097F ; N # Lo [14] DEVANAGARI LETTER CANDRA A..DEVANAGARI LETTER BBA +0980 ; N # Lo BENGALI ANJI +0981 ; N # Mn BENGALI SIGN CANDRABINDU +0982..0983 ; N # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA +0985..098C ; N # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L +098F..0990 ; N # Lo [2] BENGALI LETTER E..BENGALI LETTER AI +0993..09A8 ; N # Lo [22] BENGALI LETTER O..BENGALI LETTER NA +09AA..09B0 ; N # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA +09B2 ; N # Lo BENGALI LETTER LA +09B6..09B9 ; N # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA +09BC ; N # Mn BENGALI SIGN NUKTA +09BD ; N # Lo BENGALI SIGN AVAGRAHA +09BE..09C0 ; N # Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II +09C1..09C4 ; N # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR +09C7..09C8 ; N # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI +09CB..09CC ; N # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU +09CD ; N # Mn BENGALI SIGN VIRAMA +09CE ; N # Lo BENGALI LETTER KHANDA TA +09D7 ; N # Mc BENGALI AU LENGTH MARK +09DC..09DD ; N # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA +09DF..09E1 ; N # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL +09E2..09E3 ; N # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL +09E6..09EF ; N # Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE +09F0..09F1 ; N # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL +09F2..09F3 ; N # Sc [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN +09F4..09F9 ; N # No [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN +09FA ; N # So BENGALI ISSHAR +09FB ; N # Sc BENGALI GANDA MARK +09FC ; N # Lo BENGALI LETTER VEDIC ANUSVARA +09FD ; N # Po BENGALI ABBREVIATION SIGN +09FE ; N # Mn BENGALI SANDHI MARK +0A01..0A02 ; N # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI +0A03 ; N # Mc GURMUKHI SIGN VISARGA +0A05..0A0A ; N # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU +0A0F..0A10 ; N # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI +0A13..0A28 ; N # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA +0A2A..0A30 ; N # Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA +0A32..0A33 ; N # Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA +0A35..0A36 ; N # Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA +0A38..0A39 ; N # Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA +0A3C ; N # Mn GURMUKHI SIGN NUKTA +0A3E..0A40 ; N # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II +0A41..0A42 ; N # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU +0A47..0A48 ; N # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI +0A4B..0A4D ; N # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA +0A51 ; N # Mn GURMUKHI SIGN UDAAT +0A59..0A5C ; N # Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA +0A5E ; N # Lo GURMUKHI LETTER FA +0A66..0A6F ; N # Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE +0A70..0A71 ; N # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK +0A72..0A74 ; N # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR +0A75 ; N # Mn GURMUKHI SIGN YAKASH +0A76 ; N # Po GURMUKHI ABBREVIATION SIGN +0A81..0A82 ; N # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA +0A83 ; N # Mc GUJARATI SIGN VISARGA +0A85..0A8D ; N # Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E +0A8F..0A91 ; N # Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O +0A93..0AA8 ; N # Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA +0AAA..0AB0 ; N # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA +0AB2..0AB3 ; N # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA +0AB5..0AB9 ; N # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA +0ABC ; N # Mn GUJARATI SIGN NUKTA +0ABD ; N # Lo GUJARATI SIGN AVAGRAHA +0ABE..0AC0 ; N # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II +0AC1..0AC5 ; N # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E +0AC7..0AC8 ; N # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI +0AC9 ; N # Mc GUJARATI VOWEL SIGN CANDRA O +0ACB..0ACC ; N # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU +0ACD ; N # Mn GUJARATI SIGN VIRAMA +0AD0 ; N # Lo GUJARATI OM +0AE0..0AE1 ; N # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL +0AE2..0AE3 ; N # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL +0AE6..0AEF ; N # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE +0AF0 ; N # Po GUJARATI ABBREVIATION SIGN +0AF1 ; N # Sc GUJARATI RUPEE SIGN +0AF9 ; N # Lo GUJARATI LETTER ZHA +0AFA..0AFF ; N # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE +0B01 ; N # Mn ORIYA SIGN CANDRABINDU +0B02..0B03 ; N # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA +0B05..0B0C ; N # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L +0B0F..0B10 ; N # Lo [2] ORIYA LETTER E..ORIYA LETTER AI +0B13..0B28 ; N # Lo [22] ORIYA LETTER O..ORIYA LETTER NA +0B2A..0B30 ; N # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA +0B32..0B33 ; N # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA +0B35..0B39 ; N # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA +0B3C ; N # Mn ORIYA SIGN NUKTA +0B3D ; N # Lo ORIYA SIGN AVAGRAHA +0B3E ; N # Mc ORIYA VOWEL SIGN AA +0B3F ; N # Mn ORIYA VOWEL SIGN I +0B40 ; N # Mc ORIYA VOWEL SIGN II +0B41..0B44 ; N # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR +0B47..0B48 ; N # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI +0B4B..0B4C ; N # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU +0B4D ; N # Mn ORIYA SIGN VIRAMA +0B55..0B56 ; N # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK +0B57 ; N # Mc ORIYA AU LENGTH MARK +0B5C..0B5D ; N # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA +0B5F..0B61 ; N # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL +0B62..0B63 ; N # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL +0B66..0B6F ; N # Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE +0B70 ; N # So ORIYA ISSHAR +0B71 ; N # Lo ORIYA LETTER WA +0B72..0B77 ; N # No [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS +0B82 ; N # Mn TAMIL SIGN ANUSVARA +0B83 ; N # Lo TAMIL SIGN VISARGA +0B85..0B8A ; N # Lo [6] TAMIL LETTER A..TAMIL LETTER UU +0B8E..0B90 ; N # Lo [3] TAMIL LETTER E..TAMIL LETTER AI +0B92..0B95 ; N # Lo [4] TAMIL LETTER O..TAMIL LETTER KA +0B99..0B9A ; N # Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA +0B9C ; N # Lo TAMIL LETTER JA +0B9E..0B9F ; N # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA +0BA3..0BA4 ; N # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA +0BA8..0BAA ; N # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA +0BAE..0BB9 ; N # Lo [12] TAMIL LETTER MA..TAMIL LETTER HA +0BBE..0BBF ; N # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I +0BC0 ; N # Mn TAMIL VOWEL SIGN II +0BC1..0BC2 ; N # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU +0BC6..0BC8 ; N # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI +0BCA..0BCC ; N # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU +0BCD ; N # Mn TAMIL SIGN VIRAMA +0BD0 ; N # Lo TAMIL OM +0BD7 ; N # Mc TAMIL AU LENGTH MARK +0BE6..0BEF ; N # Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE +0BF0..0BF2 ; N # No [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND +0BF3..0BF8 ; N # So [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN +0BF9 ; N # Sc TAMIL RUPEE SIGN +0BFA ; N # So TAMIL NUMBER SIGN +0C00 ; N # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE +0C01..0C03 ; N # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA +0C04 ; N # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE +0C05..0C0C ; N # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L +0C0E..0C10 ; N # Lo [3] TELUGU LETTER E..TELUGU LETTER AI +0C12..0C28 ; N # Lo [23] TELUGU LETTER O..TELUGU LETTER NA +0C2A..0C39 ; N # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA +0C3C ; N # Mn TELUGU SIGN NUKTA +0C3D ; N # Lo TELUGU SIGN AVAGRAHA +0C3E..0C40 ; N # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II +0C41..0C44 ; N # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR +0C46..0C48 ; N # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI +0C4A..0C4D ; N # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA +0C55..0C56 ; N # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK +0C58..0C5A ; N # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5D ; N # Lo TELUGU LETTER NAKAARA POLLU +0C60..0C61 ; N # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL +0C62..0C63 ; N # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL +0C66..0C6F ; N # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE +0C77 ; N # Po TELUGU SIGN SIDDHAM +0C78..0C7E ; N # No [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR +0C7F ; N # So TELUGU SIGN TUUMU +0C80 ; N # Lo KANNADA SIGN SPACING CANDRABINDU +0C81 ; N # Mn KANNADA SIGN CANDRABINDU +0C82..0C83 ; N # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA +0C84 ; N # Po KANNADA SIGN SIDDHAM +0C85..0C8C ; N # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L +0C8E..0C90 ; N # Lo [3] KANNADA LETTER E..KANNADA LETTER AI +0C92..0CA8 ; N # Lo [23] KANNADA LETTER O..KANNADA LETTER NA +0CAA..0CB3 ; N # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA +0CB5..0CB9 ; N # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA +0CBC ; N # Mn KANNADA SIGN NUKTA +0CBD ; N # Lo KANNADA SIGN AVAGRAHA +0CBE ; N # Mc KANNADA VOWEL SIGN AA +0CBF ; N # Mn KANNADA VOWEL SIGN I +0CC0..0CC4 ; N # Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR +0CC6 ; N # Mn KANNADA VOWEL SIGN E +0CC7..0CC8 ; N # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI +0CCA..0CCB ; N # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO +0CCC..0CCD ; N # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA +0CD5..0CD6 ; N # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK +0CDD..0CDE ; N # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA +0CE0..0CE1 ; N # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL +0CE2..0CE3 ; N # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL +0CE6..0CEF ; N # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE +0CF1..0CF2 ; N # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA +0CF3 ; N # Mc KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT +0D00..0D01 ; N # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU +0D02..0D03 ; N # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA +0D04..0D0C ; N # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L +0D0E..0D10 ; N # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI +0D12..0D3A ; N # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA +0D3B..0D3C ; N # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA +0D3D ; N # Lo MALAYALAM SIGN AVAGRAHA +0D3E..0D40 ; N # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II +0D41..0D44 ; N # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR +0D46..0D48 ; N # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI +0D4A..0D4C ; N # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU +0D4D ; N # Mn MALAYALAM SIGN VIRAMA +0D4E ; N # Lo MALAYALAM LETTER DOT REPH +0D4F ; N # So MALAYALAM SIGN PARA +0D54..0D56 ; N # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL +0D57 ; N # Mc MALAYALAM AU LENGTH MARK +0D58..0D5E ; N # No [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH +0D5F..0D61 ; N # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL +0D62..0D63 ; N # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL +0D66..0D6F ; N # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE +0D70..0D78 ; N # No [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS +0D79 ; N # So MALAYALAM DATE MARK +0D7A..0D7F ; N # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K +0D81 ; N # Mn SINHALA SIGN CANDRABINDU +0D82..0D83 ; N # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA +0D85..0D96 ; N # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA +0D9A..0DB1 ; N # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA +0DB3..0DBB ; N # Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA +0DBD ; N # Lo SINHALA LETTER DANTAJA LAYANNA +0DC0..0DC6 ; N # Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA +0DCA ; N # Mn SINHALA SIGN AL-LAKUNA +0DCF..0DD1 ; N # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA +0DD2..0DD4 ; N # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA +0DD6 ; N # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA +0DD8..0DDF ; N # Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA +0DE6..0DEF ; N # Nd [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE +0DF2..0DF3 ; N # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA +0DF4 ; N # Po SINHALA PUNCTUATION KUNDDALIYA +0E01..0E30 ; N # Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A +0E31 ; N # Mn THAI CHARACTER MAI HAN-AKAT +0E32..0E33 ; N # Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM +0E34..0E3A ; N # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU +0E3F ; N # Sc THAI CURRENCY SYMBOL BAHT +0E40..0E45 ; N # Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO +0E46 ; N # Lm THAI CHARACTER MAIYAMOK +0E47..0E4E ; N # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN +0E4F ; N # Po THAI CHARACTER FONGMAN +0E50..0E59 ; N # Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE +0E5A..0E5B ; N # Po [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT +0E81..0E82 ; N # Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG +0E84 ; N # Lo LAO LETTER KHO TAM +0E86..0E8A ; N # Lo [5] LAO LETTER PALI GHA..LAO LETTER SO TAM +0E8C..0EA3 ; N # Lo [24] LAO LETTER PALI JHA..LAO LETTER LO LING +0EA5 ; N # Lo LAO LETTER LO LOOT +0EA7..0EB0 ; N # Lo [10] LAO LETTER WO..LAO VOWEL SIGN A +0EB1 ; N # Mn LAO VOWEL SIGN MAI KAN +0EB2..0EB3 ; N # Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM +0EB4..0EBC ; N # Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO +0EBD ; N # Lo LAO SEMIVOWEL SIGN NYO +0EC0..0EC4 ; N # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI +0EC6 ; N # Lm LAO KO LA +0EC8..0ECE ; N # Mn [7] LAO TONE MAI EK..LAO YAMAKKAN +0ED0..0ED9 ; N # Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE +0EDC..0EDF ; N # Lo [4] LAO HO NO..LAO LETTER KHMU NYO +0F00 ; N # Lo TIBETAN SYLLABLE OM +0F01..0F03 ; N # So [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA +0F04..0F12 ; N # Po [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD +0F13 ; N # So TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN +0F14 ; N # Po TIBETAN MARK GTER TSHEG +0F15..0F17 ; N # So [3] TIBETAN LOGOTYPE SIGN CHAD RTAGS..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS +0F18..0F19 ; N # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS +0F1A..0F1F ; N # So [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG +0F20..0F29 ; N # Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE +0F2A..0F33 ; N # No [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO +0F34 ; N # So TIBETAN MARK BSDUS RTAGS +0F35 ; N # Mn TIBETAN MARK NGAS BZUNG NYI ZLA +0F36 ; N # So TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN +0F37 ; N # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS +0F38 ; N # So TIBETAN MARK CHE MGO +0F39 ; N # Mn TIBETAN MARK TSA -PHRU +0F3A ; N # Ps TIBETAN MARK GUG RTAGS GYON +0F3B ; N # Pe TIBETAN MARK GUG RTAGS GYAS +0F3C ; N # Ps TIBETAN MARK ANG KHANG GYON +0F3D ; N # Pe TIBETAN MARK ANG KHANG GYAS +0F3E..0F3F ; N # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES +0F40..0F47 ; N # Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA +0F49..0F6C ; N # Lo [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA +0F71..0F7E ; N # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO +0F7F ; N # Mc TIBETAN SIGN RNAM BCAD +0F80..0F84 ; N # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA +0F85 ; N # Po TIBETAN MARK PALUTA +0F86..0F87 ; N # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS +0F88..0F8C ; N # Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN +0F8D..0F97 ; N # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA +0F99..0FBC ; N # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA +0FBE..0FC5 ; N # So [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE +0FC6 ; N # Mn TIBETAN SYMBOL PADMA GDAN +0FC7..0FCC ; N # So [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL +0FCE..0FCF ; N # So [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM +0FD0..0FD4 ; N # Po [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA +0FD5..0FD8 ; N # So [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS +0FD9..0FDA ; N # Po [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS +1000..102A ; N # Lo [43] MYANMAR LETTER KA..MYANMAR LETTER AU +102B..102C ; N # Mc [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA +102D..1030 ; N # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU +1031 ; N # Mc MYANMAR VOWEL SIGN E +1032..1037 ; N # Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW +1038 ; N # Mc MYANMAR SIGN VISARGA +1039..103A ; N # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT +103B..103C ; N # Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA +103D..103E ; N # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA +103F ; N # Lo MYANMAR LETTER GREAT SA +1040..1049 ; N # Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE +104A..104F ; N # Po [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE +1050..1055 ; N # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL +1056..1057 ; N # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR +1058..1059 ; N # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL +105A..105D ; N # Lo [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE +105E..1060 ; N # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA +1061 ; N # Lo MYANMAR LETTER SGAW KAREN SHA +1062..1064 ; N # Mc [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO +1065..1066 ; N # Lo [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA +1067..106D ; N # Mc [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5 +106E..1070 ; N # Lo [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA +1071..1074 ; N # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE +1075..1081 ; N # Lo [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA +1082 ; N # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA +1083..1084 ; N # Mc [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E +1085..1086 ; N # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y +1087..108C ; N # Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3 +108D ; N # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE +108E ; N # Lo MYANMAR LETTER RUMAI PALAUNG FA +108F ; N # Mc MYANMAR SIGN RUMAI PALAUNG TONE-5 +1090..1099 ; N # Nd [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE +109A..109C ; N # Mc [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A +109D ; N # Mn MYANMAR VOWEL SIGN AITON AI +109E..109F ; N # So [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION +10A0..10C5 ; N # Lu [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE +10C7 ; N # Lu GEORGIAN CAPITAL LETTER YN +10CD ; N # Lu GEORGIAN CAPITAL LETTER AEN +10D0..10FA ; N # Ll [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN +10FB ; N # Po GEORGIAN PARAGRAPH SEPARATOR +10FC ; N # Lm MODIFIER LETTER GEORGIAN NAR +10FD..10FF ; N # Ll [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN +1100..115F ; W # Lo [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER +1160..11FF ; N # Lo [160] HANGUL JUNGSEONG FILLER..HANGUL JONGSEONG SSANGNIEUN +1200..1248 ; N # Lo [73] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE QWA +124A..124D ; N # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE +1250..1256 ; N # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO +1258 ; N # Lo ETHIOPIC SYLLABLE QHWA +125A..125D ; N # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE +1260..1288 ; N # Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA +128A..128D ; N # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE +1290..12B0 ; N # Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA +12B2..12B5 ; N # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE +12B8..12BE ; N # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO +12C0 ; N # Lo ETHIOPIC SYLLABLE KXWA +12C2..12C5 ; N # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE +12C8..12D6 ; N # Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O +12D8..1310 ; N # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA +1312..1315 ; N # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE +1318..135A ; N # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA +135D..135F ; N # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK +1360..1368 ; N # Po [9] ETHIOPIC SECTION MARK..ETHIOPIC PARAGRAPH SEPARATOR +1369..137C ; N # No [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND +1380..138F ; N # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE +1390..1399 ; N # So [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT +13A0..13F5 ; N # Lu [86] CHEROKEE LETTER A..CHEROKEE LETTER MV +13F8..13FD ; N # Ll [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV +1400 ; N # Pd CANADIAN SYLLABICS HYPHEN +1401..166C ; N # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA +166D ; N # So CANADIAN SYLLABICS CHI SIGN +166E ; N # Po CANADIAN SYLLABICS FULL STOP +166F..167F ; N # Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W +1680 ; N # Zs OGHAM SPACE MARK +1681..169A ; N # Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH +169B ; N # Ps OGHAM FEATHER MARK +169C ; N # Pe OGHAM REVERSED FEATHER MARK +16A0..16EA ; N # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X +16EB..16ED ; N # Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION +16EE..16F0 ; N # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL +16F1..16F8 ; N # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC +1700..1711 ; N # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA +1712..1714 ; N # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA +1715 ; N # Mc TAGALOG SIGN PAMUDPOD +171F ; N # Lo TAGALOG LETTER ARCHAIC RA +1720..1731 ; N # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA +1732..1733 ; N # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U +1734 ; N # Mc HANUNOO SIGN PAMUDPOD +1735..1736 ; N # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION +1740..1751 ; N # Lo [18] BUHID LETTER A..BUHID LETTER HA +1752..1753 ; N # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U +1760..176C ; N # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA +176E..1770 ; N # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA +1772..1773 ; N # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U +1780..17B3 ; N # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU +17B4..17B5 ; N # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA +17B6 ; N # Mc KHMER VOWEL SIGN AA +17B7..17BD ; N # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA +17BE..17C5 ; N # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU +17C6 ; N # Mn KHMER SIGN NIKAHIT +17C7..17C8 ; N # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU +17C9..17D3 ; N # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT +17D4..17D6 ; N # Po [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH +17D7 ; N # Lm KHMER SIGN LEK TOO +17D8..17DA ; N # Po [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT +17DB ; N # Sc KHMER CURRENCY SYMBOL RIEL +17DC ; N # Lo KHMER SIGN AVAKRAHASANYA +17DD ; N # Mn KHMER SIGN ATTHACAN +17E0..17E9 ; N # Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE +17F0..17F9 ; N # No [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON +1800..1805 ; N # Po [6] MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS +1806 ; N # Pd MONGOLIAN TODO SOFT HYPHEN +1807..180A ; N # Po [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU +180B..180D ; N # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180E ; N # Cf MONGOLIAN VOWEL SEPARATOR +180F ; N # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR +1810..1819 ; N # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE +1820..1842 ; N # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI +1843 ; N # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN +1844..1878 ; N # Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS +1880..1884 ; N # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA +1885..1886 ; N # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA +1887..18A8 ; N # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA +18A9 ; N # Mn MONGOLIAN LETTER ALI GALI DAGALGA +18AA ; N # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA +18B0..18F5 ; N # Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S +1900..191E ; N # Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA +1920..1922 ; N # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U +1923..1926 ; N # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU +1927..1928 ; N # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O +1929..192B ; N # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA +1930..1931 ; N # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA +1932 ; N # Mn LIMBU SMALL LETTER ANUSVARA +1933..1938 ; N # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA +1939..193B ; N # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I +1940 ; N # So LIMBU SIGN LOO +1944..1945 ; N # Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK +1946..194F ; N # Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE +1950..196D ; N # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI +1970..1974 ; N # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6 +1980..19AB ; N # Lo [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA +19B0..19C9 ; N # Lo [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2 +19D0..19D9 ; N # Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE +19DA ; N # No NEW TAI LUE THAM DIGIT ONE +19DE..19DF ; N # So [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV +19E0..19FF ; N # So [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC +1A00..1A16 ; N # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA +1A17..1A18 ; N # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U +1A19..1A1A ; N # Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O +1A1B ; N # Mn BUGINESE VOWEL SIGN AE +1A1E..1A1F ; N # Po [2] BUGINESE PALLAWA..BUGINESE END OF SECTION +1A20..1A54 ; N # Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA +1A55 ; N # Mc TAI THAM CONSONANT SIGN MEDIAL RA +1A56 ; N # Mn TAI THAM CONSONANT SIGN MEDIAL LA +1A57 ; N # Mc TAI THAM CONSONANT SIGN LA TANG LAI +1A58..1A5E ; N # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA +1A60 ; N # Mn TAI THAM SIGN SAKOT +1A61 ; N # Mc TAI THAM VOWEL SIGN A +1A62 ; N # Mn TAI THAM VOWEL SIGN MAI SAT +1A63..1A64 ; N # Mc [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA +1A65..1A6C ; N # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW +1A6D..1A72 ; N # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI +1A73..1A7C ; N # Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN +1A7F ; N # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT +1A80..1A89 ; N # Nd [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE +1A90..1A99 ; N # Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE +1AA0..1AA6 ; N # Po [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA +1AA7 ; N # Lm TAI THAM SIGN MAI YAMOK +1AA8..1AAD ; N # Po [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG +1AB0..1ABD ; N # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW +1ABE ; N # Me COMBINING PARENTHESES OVERLAY +1ABF..1ACE ; N # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T +1B00..1B03 ; N # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG +1B04 ; N # Mc BALINESE SIGN BISAH +1B05..1B33 ; N # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA +1B34 ; N # Mn BALINESE SIGN REREKAN +1B35 ; N # Mc BALINESE VOWEL SIGN TEDUNG +1B36..1B3A ; N # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA +1B3B ; N # Mc BALINESE VOWEL SIGN RA REPA TEDUNG +1B3C ; N # Mn BALINESE VOWEL SIGN LA LENGA +1B3D..1B41 ; N # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG +1B42 ; N # Mn BALINESE VOWEL SIGN PEPET +1B43..1B44 ; N # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG +1B45..1B4C ; N # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA +1B50..1B59 ; N # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE +1B5A..1B60 ; N # Po [7] BALINESE PANTI..BALINESE PAMENENG +1B61..1B6A ; N # So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE +1B6B..1B73 ; N # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG +1B74..1B7C ; N # So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING +1B7D..1B7E ; N # Po [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG +1B80..1B81 ; N # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR +1B82 ; N # Mc SUNDANESE SIGN PANGWISAD +1B83..1BA0 ; N # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA +1BA1 ; N # Mc SUNDANESE CONSONANT SIGN PAMINGKAL +1BA2..1BA5 ; N # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU +1BA6..1BA7 ; N # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG +1BA8..1BA9 ; N # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG +1BAA ; N # Mc SUNDANESE SIGN PAMAAEH +1BAB..1BAD ; N # Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA +1BAE..1BAF ; N # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA +1BB0..1BB9 ; N # Nd [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE +1BBA..1BBF ; N # Lo [6] SUNDANESE AVAGRAHA..SUNDANESE LETTER FINAL M +1BC0..1BE5 ; N # Lo [38] BATAK LETTER A..BATAK LETTER U +1BE6 ; N # Mn BATAK SIGN TOMPI +1BE7 ; N # Mc BATAK VOWEL SIGN E +1BE8..1BE9 ; N # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE +1BEA..1BEC ; N # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O +1BED ; N # Mn BATAK VOWEL SIGN KARO O +1BEE ; N # Mc BATAK VOWEL SIGN U +1BEF..1BF1 ; N # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H +1BF2..1BF3 ; N # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN +1BFC..1BFF ; N # Po [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT +1C00..1C23 ; N # Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A +1C24..1C2B ; N # Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU +1C2C..1C33 ; N # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T +1C34..1C35 ; N # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG +1C36..1C37 ; N # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA +1C3B..1C3F ; N # Po [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK +1C40..1C49 ; N # Nd [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE +1C4D..1C4F ; N # Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA +1C50..1C59 ; N # Nd [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE +1C5A..1C77 ; N # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH +1C78..1C7D ; N # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD +1C7E..1C7F ; N # Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD +1C80..1C88 ; N # Ll [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +1C90..1CBA ; N # Lu [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN +1CBD..1CBF ; N # Lu [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN +1CC0..1CC7 ; N # Po [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA +1CD0..1CD2 ; N # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA +1CD3 ; N # Po VEDIC SIGN NIHSHVASA +1CD4..1CE0 ; N # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA +1CE1 ; N # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA +1CE2..1CE8 ; N # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL +1CE9..1CEC ; N # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL +1CED ; N # Mn VEDIC SIGN TIRYAK +1CEE..1CF3 ; N # Lo [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA +1CF4 ; N # Mn VEDIC TONE CANDRA ABOVE +1CF5..1CF6 ; N # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA +1CF7 ; N # Mc VEDIC SIGN ATIKRAMA +1CF8..1CF9 ; N # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE +1CFA ; N # Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA +1D00..1D2B ; N # Ll [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL +1D2C..1D6A ; N # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI +1D6B..1D77 ; N # Ll [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G +1D78 ; N # Lm MODIFIER LETTER CYRILLIC EN +1D79..1D7F ; N # Ll [7] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER UPSILON WITH STROKE +1D80..1D9A ; N # Ll [27] LATIN SMALL LETTER B WITH PALATAL HOOK..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK +1D9B..1DBF ; N # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA +1DC0..1DFF ; N # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +1E00..1EFF ; N # L& [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP +1F00..1F15 ; N # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F18..1F1D ; N # Lu [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F20..1F45 ; N # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F48..1F4D ; N # Lu [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F50..1F57 ; N # Ll [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F59 ; N # Lu GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B ; N # Lu GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D ; N # Lu GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F..1F7D ; N # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA +1F80..1FB4 ; N # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6..1FBC ; N # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBD ; N # Sk GREEK KORONIS +1FBE ; N # Ll GREEK PROSGEGRAMMENI +1FBF..1FC1 ; N # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI +1FC2..1FC4 ; N # Ll [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6..1FCC ; N # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FCD..1FCF ; N # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI +1FD0..1FD3 ; N # Ll [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6..1FDB ; N # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA +1FDD..1FDF ; N # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI +1FE0..1FEC ; N # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA +1FED..1FEF ; N # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA +1FF2..1FF4 ; N # Ll [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6..1FFC ; N # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +1FFD..1FFE ; N # Sk [2] GREEK OXIA..GREEK DASIA +2000..200A ; N # Zs [11] EN QUAD..HAIR SPACE +200B..200F ; N # Cf [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK +2010 ; A # Pd HYPHEN +2011..2012 ; N # Pd [2] NON-BREAKING HYPHEN..FIGURE DASH +2013..2015 ; A # Pd [3] EN DASH..HORIZONTAL BAR +2016 ; A # Po DOUBLE VERTICAL LINE +2017 ; N # Po DOUBLE LOW LINE +2018 ; A # Pi LEFT SINGLE QUOTATION MARK +2019 ; A # Pf RIGHT SINGLE QUOTATION MARK +201A ; N # Ps SINGLE LOW-9 QUOTATION MARK +201B ; N # Pi SINGLE HIGH-REVERSED-9 QUOTATION MARK +201C ; A # Pi LEFT DOUBLE QUOTATION MARK +201D ; A # Pf RIGHT DOUBLE QUOTATION MARK +201E ; N # Ps DOUBLE LOW-9 QUOTATION MARK +201F ; N # Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK +2020..2022 ; A # Po [3] DAGGER..BULLET +2023 ; N # Po TRIANGULAR BULLET +2024..2027 ; A # Po [4] ONE DOT LEADER..HYPHENATION POINT +2028 ; N # Zl LINE SEPARATOR +2029 ; N # Zp PARAGRAPH SEPARATOR +202A..202E ; N # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE +202F ; N # Zs NARROW NO-BREAK SPACE +2030 ; A # Po PER MILLE SIGN +2031 ; N # Po PER TEN THOUSAND SIGN +2032..2033 ; A # Po [2] PRIME..DOUBLE PRIME +2034 ; N # Po TRIPLE PRIME +2035 ; A # Po REVERSED PRIME +2036..2038 ; N # Po [3] REVERSED DOUBLE PRIME..CARET +2039 ; N # Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK +203A ; N # Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +203B ; A # Po REFERENCE MARK +203C..203D ; N # Po [2] DOUBLE EXCLAMATION MARK..INTERROBANG +203E ; A # Po OVERLINE +203F..2040 ; N # Pc [2] UNDERTIE..CHARACTER TIE +2041..2043 ; N # Po [3] CARET INSERTION POINT..HYPHEN BULLET +2044 ; N # Sm FRACTION SLASH +2045 ; N # Ps LEFT SQUARE BRACKET WITH QUILL +2046 ; N # Pe RIGHT SQUARE BRACKET WITH QUILL +2047..2051 ; N # Po [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY +2052 ; N # Sm COMMERCIAL MINUS SIGN +2053 ; N # Po SWUNG DASH +2054 ; N # Pc INVERTED UNDERTIE +2055..205E ; N # Po [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS +205F ; N # Zs MEDIUM MATHEMATICAL SPACE +2060..2064 ; N # Cf [5] WORD JOINER..INVISIBLE PLUS +2066..206F ; N # Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES +2070 ; N # No SUPERSCRIPT ZERO +2071 ; N # Lm SUPERSCRIPT LATIN SMALL LETTER I +2074 ; A # No SUPERSCRIPT FOUR +2075..2079 ; N # No [5] SUPERSCRIPT FIVE..SUPERSCRIPT NINE +207A..207C ; N # Sm [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN +207D ; N # Ps SUPERSCRIPT LEFT PARENTHESIS +207E ; N # Pe SUPERSCRIPT RIGHT PARENTHESIS +207F ; A # Lm SUPERSCRIPT LATIN SMALL LETTER N +2080 ; N # No SUBSCRIPT ZERO +2081..2084 ; A # No [4] SUBSCRIPT ONE..SUBSCRIPT FOUR +2085..2089 ; N # No [5] SUBSCRIPT FIVE..SUBSCRIPT NINE +208A..208C ; N # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN +208D ; N # Ps SUBSCRIPT LEFT PARENTHESIS +208E ; N # Pe SUBSCRIPT RIGHT PARENTHESIS +2090..209C ; N # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T +20A0..20A8 ; N # Sc [9] EURO-CURRENCY SIGN..RUPEE SIGN +20A9 ; H # Sc WON SIGN +20AA..20AB ; N # Sc [2] NEW SHEQEL SIGN..DONG SIGN +20AC ; A # Sc EURO SIGN +20AD..20C0 ; N # Sc [20] KIP SIGN..SOM SIGN +20D0..20DC ; N # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE +20DD..20E0 ; N # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH +20E1 ; N # Mn COMBINING LEFT RIGHT ARROW ABOVE +20E2..20E4 ; N # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE +20E5..20F0 ; N # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE +2100..2101 ; N # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT +2102 ; N # Lu DOUBLE-STRUCK CAPITAL C +2103 ; A # So DEGREE CELSIUS +2104 ; N # So CENTRE LINE SYMBOL +2105 ; A # So CARE OF +2106 ; N # So CADA UNA +2107 ; N # Lu EULER CONSTANT +2108 ; N # So SCRUPLE +2109 ; A # So DEGREE FAHRENHEIT +210A..2112 ; N # L& [9] SCRIPT SMALL G..SCRIPT CAPITAL L +2113 ; A # Ll SCRIPT SMALL L +2114 ; N # So L B BAR SYMBOL +2115 ; N # Lu DOUBLE-STRUCK CAPITAL N +2116 ; A # So NUMERO SIGN +2117 ; N # So SOUND RECORDING COPYRIGHT +2118 ; N # Sm SCRIPT CAPITAL P +2119..211D ; N # Lu [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R +211E..2120 ; N # So [3] PRESCRIPTION TAKE..SERVICE MARK +2121..2122 ; A # So [2] TELEPHONE SIGN..TRADE MARK SIGN +2123 ; N # So VERSICLE +2124 ; N # Lu DOUBLE-STRUCK CAPITAL Z +2125 ; N # So OUNCE SIGN +2126 ; A # Lu OHM SIGN +2127 ; N # So INVERTED OHM SIGN +2128 ; N # Lu BLACK-LETTER CAPITAL Z +2129 ; N # So TURNED GREEK SMALL LETTER IOTA +212A ; N # Lu KELVIN SIGN +212B ; A # Lu ANGSTROM SIGN +212C..212D ; N # Lu [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C +212E ; N # So ESTIMATED SYMBOL +212F..2134 ; N # L& [6] SCRIPT SMALL E..SCRIPT SMALL O +2135..2138 ; N # Lo [4] ALEF SYMBOL..DALET SYMBOL +2139 ; N # Ll INFORMATION SOURCE +213A..213B ; N # So [2] ROTATED CAPITAL Q..FACSIMILE SIGN +213C..213F ; N # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI +2140..2144 ; N # Sm [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y +2145..2149 ; N # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J +214A ; N # So PROPERTY LINE +214B ; N # Sm TURNED AMPERSAND +214C..214D ; N # So [2] PER SIGN..AKTIESELSKAB +214E ; N # Ll TURNED SMALL F +214F ; N # So SYMBOL FOR SAMARITAN SOURCE +2150..2152 ; N # No [3] VULGAR FRACTION ONE SEVENTH..VULGAR FRACTION ONE TENTH +2153..2154 ; A # No [2] VULGAR FRACTION ONE THIRD..VULGAR FRACTION TWO THIRDS +2155..215A ; N # No [6] VULGAR FRACTION ONE FIFTH..VULGAR FRACTION FIVE SIXTHS +215B..215E ; A # No [4] VULGAR FRACTION ONE EIGHTH..VULGAR FRACTION SEVEN EIGHTHS +215F ; N # No FRACTION NUMERATOR ONE +2160..216B ; A # Nl [12] ROMAN NUMERAL ONE..ROMAN NUMERAL TWELVE +216C..216F ; N # Nl [4] ROMAN NUMERAL FIFTY..ROMAN NUMERAL ONE THOUSAND +2170..2179 ; A # Nl [10] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL TEN +217A..2182 ; N # Nl [9] SMALL ROMAN NUMERAL ELEVEN..ROMAN NUMERAL TEN THOUSAND +2183..2184 ; N # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C +2185..2188 ; N # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND +2189 ; A # No VULGAR FRACTION ZERO THIRDS +218A..218B ; N # So [2] TURNED DIGIT TWO..TURNED DIGIT THREE +2190..2194 ; A # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW +2195..2199 ; A # So [5] UP DOWN ARROW..SOUTH WEST ARROW +219A..219B ; N # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE +219C..219F ; N # So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW +21A0 ; N # Sm RIGHTWARDS TWO HEADED ARROW +21A1..21A2 ; N # So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL +21A3 ; N # Sm RIGHTWARDS ARROW WITH TAIL +21A4..21A5 ; N # So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR +21A6 ; N # Sm RIGHTWARDS ARROW FROM BAR +21A7..21AD ; N # So [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW +21AE ; N # Sm LEFT RIGHT ARROW WITH STROKE +21AF..21B7 ; N # So [9] DOWNWARDS ZIGZAG ARROW..CLOCKWISE TOP SEMICIRCLE ARROW +21B8..21B9 ; A # So [2] NORTH WEST ARROW TO LONG BAR..LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR +21BA..21CD ; N # So [20] ANTICLOCKWISE OPEN CIRCLE ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE +21CE..21CF ; N # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE +21D0..21D1 ; N # So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW +21D2 ; A # Sm RIGHTWARDS DOUBLE ARROW +21D3 ; N # So DOWNWARDS DOUBLE ARROW +21D4 ; A # Sm LEFT RIGHT DOUBLE ARROW +21D5..21E6 ; N # So [18] UP DOWN DOUBLE ARROW..LEFTWARDS WHITE ARROW +21E7 ; A # So UPWARDS WHITE ARROW +21E8..21F3 ; N # So [12] RIGHTWARDS WHITE ARROW..UP DOWN WHITE ARROW +21F4..21FF ; N # Sm [12] RIGHT ARROW WITH SMALL CIRCLE..LEFT RIGHT OPEN-HEADED ARROW +2200 ; A # Sm FOR ALL +2201 ; N # Sm COMPLEMENT +2202..2203 ; A # Sm [2] PARTIAL DIFFERENTIAL..THERE EXISTS +2204..2206 ; N # Sm [3] THERE DOES NOT EXIST..INCREMENT +2207..2208 ; A # Sm [2] NABLA..ELEMENT OF +2209..220A ; N # Sm [2] NOT AN ELEMENT OF..SMALL ELEMENT OF +220B ; A # Sm CONTAINS AS MEMBER +220C..220E ; N # Sm [3] DOES NOT CONTAIN AS MEMBER..END OF PROOF +220F ; A # Sm N-ARY PRODUCT +2210 ; N # Sm N-ARY COPRODUCT +2211 ; A # Sm N-ARY SUMMATION +2212..2214 ; N # Sm [3] MINUS SIGN..DOT PLUS +2215 ; A # Sm DIVISION SLASH +2216..2219 ; N # Sm [4] SET MINUS..BULLET OPERATOR +221A ; A # Sm SQUARE ROOT +221B..221C ; N # Sm [2] CUBE ROOT..FOURTH ROOT +221D..2220 ; A # Sm [4] PROPORTIONAL TO..ANGLE +2221..2222 ; N # Sm [2] MEASURED ANGLE..SPHERICAL ANGLE +2223 ; A # Sm DIVIDES +2224 ; N # Sm DOES NOT DIVIDE +2225 ; A # Sm PARALLEL TO +2226 ; N # Sm NOT PARALLEL TO +2227..222C ; A # Sm [6] LOGICAL AND..DOUBLE INTEGRAL +222D ; N # Sm TRIPLE INTEGRAL +222E ; A # Sm CONTOUR INTEGRAL +222F..2233 ; N # Sm [5] SURFACE INTEGRAL..ANTICLOCKWISE CONTOUR INTEGRAL +2234..2237 ; A # Sm [4] THEREFORE..PROPORTION +2238..223B ; N # Sm [4] DOT MINUS..HOMOTHETIC +223C..223D ; A # Sm [2] TILDE OPERATOR..REVERSED TILDE +223E..2247 ; N # Sm [10] INVERTED LAZY S..NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO +2248 ; A # Sm ALMOST EQUAL TO +2249..224B ; N # Sm [3] NOT ALMOST EQUAL TO..TRIPLE TILDE +224C ; A # Sm ALL EQUAL TO +224D..2251 ; N # Sm [5] EQUIVALENT TO..GEOMETRICALLY EQUAL TO +2252 ; A # Sm APPROXIMATELY EQUAL TO OR THE IMAGE OF +2253..225F ; N # Sm [13] IMAGE OF OR APPROXIMATELY EQUAL TO..QUESTIONED EQUAL TO +2260..2261 ; A # Sm [2] NOT EQUAL TO..IDENTICAL TO +2262..2263 ; N # Sm [2] NOT IDENTICAL TO..STRICTLY EQUIVALENT TO +2264..2267 ; A # Sm [4] LESS-THAN OR EQUAL TO..GREATER-THAN OVER EQUAL TO +2268..2269 ; N # Sm [2] LESS-THAN BUT NOT EQUAL TO..GREATER-THAN BUT NOT EQUAL TO +226A..226B ; A # Sm [2] MUCH LESS-THAN..MUCH GREATER-THAN +226C..226D ; N # Sm [2] BETWEEN..NOT EQUIVALENT TO +226E..226F ; A # Sm [2] NOT LESS-THAN..NOT GREATER-THAN +2270..2281 ; N # Sm [18] NEITHER LESS-THAN NOR EQUAL TO..DOES NOT SUCCEED +2282..2283 ; A # Sm [2] SUBSET OF..SUPERSET OF +2284..2285 ; N # Sm [2] NOT A SUBSET OF..NOT A SUPERSET OF +2286..2287 ; A # Sm [2] SUBSET OF OR EQUAL TO..SUPERSET OF OR EQUAL TO +2288..2294 ; N # Sm [13] NEITHER A SUBSET OF NOR EQUAL TO..SQUARE CUP +2295 ; A # Sm CIRCLED PLUS +2296..2298 ; N # Sm [3] CIRCLED MINUS..CIRCLED DIVISION SLASH +2299 ; A # Sm CIRCLED DOT OPERATOR +229A..22A4 ; N # Sm [11] CIRCLED RING OPERATOR..DOWN TACK +22A5 ; A # Sm UP TACK +22A6..22BE ; N # Sm [25] ASSERTION..RIGHT ANGLE WITH ARC +22BF ; A # Sm RIGHT TRIANGLE +22C0..22FF ; N # Sm [64] N-ARY LOGICAL AND..Z NOTATION BAG MEMBERSHIP +2300..2307 ; N # So [8] DIAMETER SIGN..WAVY LINE +2308 ; N # Ps LEFT CEILING +2309 ; N # Pe RIGHT CEILING +230A ; N # Ps LEFT FLOOR +230B ; N # Pe RIGHT FLOOR +230C..2311 ; N # So [6] BOTTOM RIGHT CROP..SQUARE LOZENGE +2312 ; A # So ARC +2313..2319 ; N # So [7] SEGMENT..TURNED NOT SIGN +231A..231B ; W # So [2] WATCH..HOURGLASS +231C..231F ; N # So [4] TOP LEFT CORNER..BOTTOM RIGHT CORNER +2320..2321 ; N # Sm [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL +2322..2328 ; N # So [7] FROWN..KEYBOARD +2329 ; W # Ps LEFT-POINTING ANGLE BRACKET +232A ; W # Pe RIGHT-POINTING ANGLE BRACKET +232B..237B ; N # So [81] ERASE TO THE LEFT..NOT CHECK MARK +237C ; N # Sm RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW +237D..239A ; N # So [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL +239B..23B3 ; N # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM +23B4..23DB ; N # So [40] TOP SQUARE BRACKET..FUSE +23DC..23E1 ; N # Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET +23E2..23E8 ; N # So [7] WHITE TRAPEZIUM..DECIMAL EXPONENT SYMBOL +23E9..23EC ; W # So [4] BLACK RIGHT-POINTING DOUBLE TRIANGLE..BLACK DOWN-POINTING DOUBLE TRIANGLE +23ED..23EF ; N # So [3] BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR..BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR +23F0 ; W # So ALARM CLOCK +23F1..23F2 ; N # So [2] STOPWATCH..TIMER CLOCK +23F3 ; W # So HOURGLASS WITH FLOWING SAND +23F4..23FF ; N # So [12] BLACK MEDIUM LEFT-POINTING TRIANGLE..OBSERVER EYE SYMBOL +2400..2426 ; N # So [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO +2440..244A ; N # So [11] OCR HOOK..OCR DOUBLE BACKSLASH +2460..249B ; A # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP +249C..24E9 ; A # So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z +24EA ; N # No CIRCLED DIGIT ZERO +24EB..24FF ; A # No [21] NEGATIVE CIRCLED NUMBER ELEVEN..NEGATIVE CIRCLED DIGIT ZERO +2500..254B ; A # So [76] BOX DRAWINGS LIGHT HORIZONTAL..BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL +254C..254F ; N # So [4] BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL..BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL +2550..2573 ; A # So [36] BOX DRAWINGS DOUBLE HORIZONTAL..BOX DRAWINGS LIGHT DIAGONAL CROSS +2574..257F ; N # So [12] BOX DRAWINGS LIGHT LEFT..BOX DRAWINGS HEAVY UP AND LIGHT DOWN +2580..258F ; A # So [16] UPPER HALF BLOCK..LEFT ONE EIGHTH BLOCK +2590..2591 ; N # So [2] RIGHT HALF BLOCK..LIGHT SHADE +2592..2595 ; A # So [4] MEDIUM SHADE..RIGHT ONE EIGHTH BLOCK +2596..259F ; N # So [10] QUADRANT LOWER LEFT..QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT +25A0..25A1 ; A # So [2] BLACK SQUARE..WHITE SQUARE +25A2 ; N # So WHITE SQUARE WITH ROUNDED CORNERS +25A3..25A9 ; A # So [7] WHITE SQUARE CONTAINING BLACK SMALL SQUARE..SQUARE WITH DIAGONAL CROSSHATCH FILL +25AA..25B1 ; N # So [8] BLACK SMALL SQUARE..WHITE PARALLELOGRAM +25B2..25B3 ; A # So [2] BLACK UP-POINTING TRIANGLE..WHITE UP-POINTING TRIANGLE +25B4..25B5 ; N # So [2] BLACK UP-POINTING SMALL TRIANGLE..WHITE UP-POINTING SMALL TRIANGLE +25B6 ; A # So BLACK RIGHT-POINTING TRIANGLE +25B7 ; A # Sm WHITE RIGHT-POINTING TRIANGLE +25B8..25BB ; N # So [4] BLACK RIGHT-POINTING SMALL TRIANGLE..WHITE RIGHT-POINTING POINTER +25BC..25BD ; A # So [2] BLACK DOWN-POINTING TRIANGLE..WHITE DOWN-POINTING TRIANGLE +25BE..25BF ; N # So [2] BLACK DOWN-POINTING SMALL TRIANGLE..WHITE DOWN-POINTING SMALL TRIANGLE +25C0 ; A # So BLACK LEFT-POINTING TRIANGLE +25C1 ; A # Sm WHITE LEFT-POINTING TRIANGLE +25C2..25C5 ; N # So [4] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE LEFT-POINTING POINTER +25C6..25C8 ; A # So [3] BLACK DIAMOND..WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND +25C9..25CA ; N # So [2] FISHEYE..LOZENGE +25CB ; A # So WHITE CIRCLE +25CC..25CD ; N # So [2] DOTTED CIRCLE..CIRCLE WITH VERTICAL FILL +25CE..25D1 ; A # So [4] BULLSEYE..CIRCLE WITH RIGHT HALF BLACK +25D2..25E1 ; N # So [16] CIRCLE WITH LOWER HALF BLACK..LOWER HALF CIRCLE +25E2..25E5 ; A # So [4] BLACK LOWER RIGHT TRIANGLE..BLACK UPPER RIGHT TRIANGLE +25E6..25EE ; N # So [9] WHITE BULLET..UP-POINTING TRIANGLE WITH RIGHT HALF BLACK +25EF ; A # So LARGE CIRCLE +25F0..25F7 ; N # So [8] WHITE SQUARE WITH UPPER LEFT QUADRANT..WHITE CIRCLE WITH UPPER RIGHT QUADRANT +25F8..25FC ; N # Sm [5] UPPER LEFT TRIANGLE..BLACK MEDIUM SQUARE +25FD..25FE ; W # Sm [2] WHITE MEDIUM SMALL SQUARE..BLACK MEDIUM SMALL SQUARE +25FF ; N # Sm LOWER RIGHT TRIANGLE +2600..2604 ; N # So [5] BLACK SUN WITH RAYS..COMET +2605..2606 ; A # So [2] BLACK STAR..WHITE STAR +2607..2608 ; N # So [2] LIGHTNING..THUNDERSTORM +2609 ; A # So SUN +260A..260D ; N # So [4] ASCENDING NODE..OPPOSITION +260E..260F ; A # So [2] BLACK TELEPHONE..WHITE TELEPHONE +2610..2613 ; N # So [4] BALLOT BOX..SALTIRE +2614..2615 ; W # So [2] UMBRELLA WITH RAIN DROPS..HOT BEVERAGE +2616..261B ; N # So [6] WHITE SHOGI PIECE..BLACK RIGHT POINTING INDEX +261C ; A # So WHITE LEFT POINTING INDEX +261D ; N # So WHITE UP POINTING INDEX +261E ; A # So WHITE RIGHT POINTING INDEX +261F..263F ; N # So [33] WHITE DOWN POINTING INDEX..MERCURY +2640 ; A # So FEMALE SIGN +2641 ; N # So EARTH +2642 ; A # So MALE SIGN +2643..2647 ; N # So [5] JUPITER..PLUTO +2648..2653 ; W # So [12] ARIES..PISCES +2654..265F ; N # So [12] WHITE CHESS KING..BLACK CHESS PAWN +2660..2661 ; A # So [2] BLACK SPADE SUIT..WHITE HEART SUIT +2662 ; N # So WHITE DIAMOND SUIT +2663..2665 ; A # So [3] BLACK CLUB SUIT..BLACK HEART SUIT +2666 ; N # So BLACK DIAMOND SUIT +2667..266A ; A # So [4] WHITE CLUB SUIT..EIGHTH NOTE +266B ; N # So BEAMED EIGHTH NOTES +266C..266D ; A # So [2] BEAMED SIXTEENTH NOTES..MUSIC FLAT SIGN +266E ; N # So MUSIC NATURAL SIGN +266F ; A # Sm MUSIC SHARP SIGN +2670..267E ; N # So [15] WEST SYRIAC CROSS..PERMANENT PAPER SIGN +267F ; W # So WHEELCHAIR SYMBOL +2680..2692 ; N # So [19] DIE FACE-1..HAMMER AND PICK +2693 ; W # So ANCHOR +2694..269D ; N # So [10] CROSSED SWORDS..OUTLINED WHITE STAR +269E..269F ; A # So [2] THREE LINES CONVERGING RIGHT..THREE LINES CONVERGING LEFT +26A0 ; N # So WARNING SIGN +26A1 ; W # So HIGH VOLTAGE SIGN +26A2..26A9 ; N # So [8] DOUBLED FEMALE SIGN..HORIZONTAL MALE WITH STROKE SIGN +26AA..26AB ; W # So [2] MEDIUM WHITE CIRCLE..MEDIUM BLACK CIRCLE +26AC..26BC ; N # So [17] MEDIUM SMALL WHITE CIRCLE..SESQUIQUADRATE +26BD..26BE ; W # So [2] SOCCER BALL..BASEBALL +26BF ; A # So SQUARED KEY +26C0..26C3 ; N # So [4] WHITE DRAUGHTS MAN..BLACK DRAUGHTS KING +26C4..26C5 ; W # So [2] SNOWMAN WITHOUT SNOW..SUN BEHIND CLOUD +26C6..26CD ; A # So [8] RAIN..DISABLED CAR +26CE ; W # So OPHIUCHUS +26CF..26D3 ; A # So [5] PICK..CHAINS +26D4 ; W # So NO ENTRY +26D5..26E1 ; A # So [13] ALTERNATE ONE-WAY LEFT WAY TRAFFIC..RESTRICTED LEFT ENTRY-2 +26E2 ; N # So ASTRONOMICAL SYMBOL FOR URANUS +26E3 ; A # So HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE +26E4..26E7 ; N # So [4] PENTAGRAM..INVERTED PENTAGRAM +26E8..26E9 ; A # So [2] BLACK CROSS ON SHIELD..SHINTO SHRINE +26EA ; W # So CHURCH +26EB..26F1 ; A # So [7] CASTLE..UMBRELLA ON GROUND +26F2..26F3 ; W # So [2] FOUNTAIN..FLAG IN HOLE +26F4 ; A # So FERRY +26F5 ; W # So SAILBOAT +26F6..26F9 ; A # So [4] SQUARE FOUR CORNERS..PERSON WITH BALL +26FA ; W # So TENT +26FB..26FC ; A # So [2] JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL +26FD ; W # So FUEL PUMP +26FE..26FF ; A # So [2] CUP ON BLACK SQUARE..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE +2700..2704 ; N # So [5] BLACK SAFETY SCISSORS..WHITE SCISSORS +2705 ; W # So WHITE HEAVY CHECK MARK +2706..2709 ; N # So [4] TELEPHONE LOCATION SIGN..ENVELOPE +270A..270B ; W # So [2] RAISED FIST..RAISED HAND +270C..2727 ; N # So [28] VICTORY HAND..WHITE FOUR POINTED STAR +2728 ; W # So SPARKLES +2729..273C ; N # So [20] STRESS OUTLINED WHITE STAR..OPEN CENTRE TEARDROP-SPOKED ASTERISK +273D ; A # So HEAVY TEARDROP-SPOKED ASTERISK +273E..274B ; N # So [14] SIX PETALLED BLACK AND WHITE FLORETTE..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK +274C ; W # So CROSS MARK +274D ; N # So SHADOWED WHITE CIRCLE +274E ; W # So NEGATIVE SQUARED CROSS MARK +274F..2752 ; N # So [4] LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE +2753..2755 ; W # So [3] BLACK QUESTION MARK ORNAMENT..WHITE EXCLAMATION MARK ORNAMENT +2756 ; N # So BLACK DIAMOND MINUS WHITE X +2757 ; W # So HEAVY EXCLAMATION MARK SYMBOL +2758..2767 ; N # So [16] LIGHT VERTICAL BAR..ROTATED FLORAL HEART BULLET +2768 ; N # Ps MEDIUM LEFT PARENTHESIS ORNAMENT +2769 ; N # Pe MEDIUM RIGHT PARENTHESIS ORNAMENT +276A ; N # Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT +276B ; N # Pe MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT +276C ; N # Ps MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT +276D ; N # Pe MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT +276E ; N # Ps HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT +276F ; N # Pe HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT +2770 ; N # Ps HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT +2771 ; N # Pe HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT +2772 ; N # Ps LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT +2773 ; N # Pe LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT +2774 ; N # Ps MEDIUM LEFT CURLY BRACKET ORNAMENT +2775 ; N # Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT +2776..277F ; A # No [10] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED NUMBER TEN +2780..2793 ; N # No [20] DINGBAT CIRCLED SANS-SERIF DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN +2794 ; N # So HEAVY WIDE-HEADED RIGHTWARDS ARROW +2795..2797 ; W # So [3] HEAVY PLUS SIGN..HEAVY DIVISION SIGN +2798..27AF ; N # So [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW +27B0 ; W # So CURLY LOOP +27B1..27BE ; N # So [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW +27BF ; W # So DOUBLE CURLY LOOP +27C0..27C4 ; N # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET +27C5 ; N # Ps LEFT S-SHAPED BAG DELIMITER +27C6 ; N # Pe RIGHT S-SHAPED BAG DELIMITER +27C7..27E5 ; N # Sm [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK +27E6 ; Na # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET +27E7 ; Na # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET +27E8 ; Na # Ps MATHEMATICAL LEFT ANGLE BRACKET +27E9 ; Na # Pe MATHEMATICAL RIGHT ANGLE BRACKET +27EA ; Na # Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET +27EB ; Na # Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET +27EC ; Na # Ps MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET +27ED ; Na # Pe MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET +27EE ; N # Ps MATHEMATICAL LEFT FLATTENED PARENTHESIS +27EF ; N # Pe MATHEMATICAL RIGHT FLATTENED PARENTHESIS +27F0..27FF ; N # Sm [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW +2800..28FF ; N # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678 +2900..297F ; N # Sm [128] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..DOWN FISH TAIL +2980..2982 ; N # Sm [3] TRIPLE VERTICAL BAR DELIMITER..Z NOTATION TYPE COLON +2983 ; N # Ps LEFT WHITE CURLY BRACKET +2984 ; N # Pe RIGHT WHITE CURLY BRACKET +2985 ; Na # Ps LEFT WHITE PARENTHESIS +2986 ; Na # Pe RIGHT WHITE PARENTHESIS +2987 ; N # Ps Z NOTATION LEFT IMAGE BRACKET +2988 ; N # Pe Z NOTATION RIGHT IMAGE BRACKET +2989 ; N # Ps Z NOTATION LEFT BINDING BRACKET +298A ; N # Pe Z NOTATION RIGHT BINDING BRACKET +298B ; N # Ps LEFT SQUARE BRACKET WITH UNDERBAR +298C ; N # Pe RIGHT SQUARE BRACKET WITH UNDERBAR +298D ; N # Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER +298E ; N # Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER +298F ; N # Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER +2990 ; N # Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER +2991 ; N # Ps LEFT ANGLE BRACKET WITH DOT +2992 ; N # Pe RIGHT ANGLE BRACKET WITH DOT +2993 ; N # Ps LEFT ARC LESS-THAN BRACKET +2994 ; N # Pe RIGHT ARC GREATER-THAN BRACKET +2995 ; N # Ps DOUBLE LEFT ARC GREATER-THAN BRACKET +2996 ; N # Pe DOUBLE RIGHT ARC LESS-THAN BRACKET +2997 ; N # Ps LEFT BLACK TORTOISE SHELL BRACKET +2998 ; N # Pe RIGHT BLACK TORTOISE SHELL BRACKET +2999..29D7 ; N # Sm [63] DOTTED FENCE..BLACK HOURGLASS +29D8 ; N # Ps LEFT WIGGLY FENCE +29D9 ; N # Pe RIGHT WIGGLY FENCE +29DA ; N # Ps LEFT DOUBLE WIGGLY FENCE +29DB ; N # Pe RIGHT DOUBLE WIGGLY FENCE +29DC..29FB ; N # Sm [32] INCOMPLETE INFINITY..TRIPLE PLUS +29FC ; N # Ps LEFT-POINTING CURVED ANGLE BRACKET +29FD ; N # Pe RIGHT-POINTING CURVED ANGLE BRACKET +29FE..29FF ; N # Sm [2] TINY..MINY +2A00..2AFF ; N # Sm [256] N-ARY CIRCLED DOT OPERATOR..N-ARY WHITE VERTICAL BAR +2B00..2B1A ; N # So [27] NORTH EAST WHITE ARROW..DOTTED SQUARE +2B1B..2B1C ; W # So [2] BLACK LARGE SQUARE..WHITE LARGE SQUARE +2B1D..2B2F ; N # So [19] BLACK VERY SMALL SQUARE..WHITE VERTICAL ELLIPSE +2B30..2B44 ; N # Sm [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET +2B45..2B46 ; N # So [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW +2B47..2B4C ; N # Sm [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR +2B4D..2B4F ; N # So [3] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..SHORT BACKSLANTED SOUTH ARROW +2B50 ; W # So WHITE MEDIUM STAR +2B51..2B54 ; N # So [4] BLACK SMALL STAR..WHITE RIGHT-POINTING PENTAGON +2B55 ; W # So HEAVY LARGE CIRCLE +2B56..2B59 ; A # So [4] HEAVY OVAL WITH OVAL INSIDE..HEAVY CIRCLED SALTIRE +2B5A..2B73 ; N # So [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR +2B76..2B95 ; N # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW +2B97..2BFF ; N # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL +2C00..2C5F ; N # L& [96] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI +2C60..2C7B ; N # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E +2C7C..2C7D ; N # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V +2C7E..2C7F ; N # Lu [2] LATIN CAPITAL LETTER S WITH SWASH TAIL..LATIN CAPITAL LETTER Z WITH SWASH TAIL +2C80..2CE4 ; N # L& [101] COPTIC CAPITAL LETTER ALFA..COPTIC SYMBOL KAI +2CE5..2CEA ; N # So [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA +2CEB..2CEE ; N # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA +2CEF..2CF1 ; N # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS +2CF2..2CF3 ; N # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI +2CF9..2CFC ; N # Po [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER +2CFD ; N # No COPTIC FRACTION ONE HALF +2CFE..2CFF ; N # Po [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER +2D00..2D25 ; N # Ll [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE +2D27 ; N # Ll GEORGIAN SMALL LETTER YN +2D2D ; N # Ll GEORGIAN SMALL LETTER AEN +2D30..2D67 ; N # Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO +2D6F ; N # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK +2D70 ; N # Po TIFINAGH SEPARATOR MARK +2D7F ; N # Mn TIFINAGH CONSONANT JOINER +2D80..2D96 ; N # Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE +2DA0..2DA6 ; N # Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO +2DA8..2DAE ; N # Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO +2DB0..2DB6 ; N # Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO +2DB8..2DBE ; N # Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO +2DC0..2DC6 ; N # Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO +2DC8..2DCE ; N # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO +2DD0..2DD6 ; N # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO +2DD8..2DDE ; N # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO +2DE0..2DFF ; N # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS +2E00..2E01 ; N # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER +2E02 ; N # Pi LEFT SUBSTITUTION BRACKET +2E03 ; N # Pf RIGHT SUBSTITUTION BRACKET +2E04 ; N # Pi LEFT DOTTED SUBSTITUTION BRACKET +2E05 ; N # Pf RIGHT DOTTED SUBSTITUTION BRACKET +2E06..2E08 ; N # Po [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER +2E09 ; N # Pi LEFT TRANSPOSITION BRACKET +2E0A ; N # Pf RIGHT TRANSPOSITION BRACKET +2E0B ; N # Po RAISED SQUARE +2E0C ; N # Pi LEFT RAISED OMISSION BRACKET +2E0D ; N # Pf RIGHT RAISED OMISSION BRACKET +2E0E..2E16 ; N # Po [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE +2E17 ; N # Pd DOUBLE OBLIQUE HYPHEN +2E18..2E19 ; N # Po [2] INVERTED INTERROBANG..PALM BRANCH +2E1A ; N # Pd HYPHEN WITH DIAERESIS +2E1B ; N # Po TILDE WITH RING ABOVE +2E1C ; N # Pi LEFT LOW PARAPHRASE BRACKET +2E1D ; N # Pf RIGHT LOW PARAPHRASE BRACKET +2E1E..2E1F ; N # Po [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW +2E20 ; N # Pi LEFT VERTICAL BAR WITH QUILL +2E21 ; N # Pf RIGHT VERTICAL BAR WITH QUILL +2E22 ; N # Ps TOP LEFT HALF BRACKET +2E23 ; N # Pe TOP RIGHT HALF BRACKET +2E24 ; N # Ps BOTTOM LEFT HALF BRACKET +2E25 ; N # Pe BOTTOM RIGHT HALF BRACKET +2E26 ; N # Ps LEFT SIDEWAYS U BRACKET +2E27 ; N # Pe RIGHT SIDEWAYS U BRACKET +2E28 ; N # Ps LEFT DOUBLE PARENTHESIS +2E29 ; N # Pe RIGHT DOUBLE PARENTHESIS +2E2A..2E2E ; N # Po [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK +2E2F ; N # Lm VERTICAL TILDE +2E30..2E39 ; N # Po [10] RING POINT..TOP HALF SECTION SIGN +2E3A..2E3B ; N # Pd [2] TWO-EM DASH..THREE-EM DASH +2E3C..2E3F ; N # Po [4] STENOGRAPHIC FULL STOP..CAPITULUM +2E40 ; N # Pd DOUBLE HYPHEN +2E41 ; N # Po REVERSED COMMA +2E42 ; N # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK +2E43..2E4F ; N # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER +2E50..2E51 ; N # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR +2E52..2E54 ; N # Po [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK +2E55 ; N # Ps LEFT SQUARE BRACKET WITH STROKE +2E56 ; N # Pe RIGHT SQUARE BRACKET WITH STROKE +2E57 ; N # Ps LEFT SQUARE BRACKET WITH DOUBLE STROKE +2E58 ; N # Pe RIGHT SQUARE BRACKET WITH DOUBLE STROKE +2E59 ; N # Ps TOP HALF LEFT PARENTHESIS +2E5A ; N # Pe TOP HALF RIGHT PARENTHESIS +2E5B ; N # Ps BOTTOM HALF LEFT PARENTHESIS +2E5C ; N # Pe BOTTOM HALF RIGHT PARENTHESIS +2E5D ; N # Pd OBLIQUE HYPHEN +2E80..2E99 ; W # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP +2E9B..2EF3 ; W # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE +2F00..2FD5 ; W # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE +2FF0..2FFF ; W # So [16] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER ROTATION +3000 ; F # Zs IDEOGRAPHIC SPACE +3001..3003 ; W # Po [3] IDEOGRAPHIC COMMA..DITTO MARK +3004 ; W # So JAPANESE INDUSTRIAL STANDARD SYMBOL +3005 ; W # Lm IDEOGRAPHIC ITERATION MARK +3006 ; W # Lo IDEOGRAPHIC CLOSING MARK +3007 ; W # Nl IDEOGRAPHIC NUMBER ZERO +3008 ; W # Ps LEFT ANGLE BRACKET +3009 ; W # Pe RIGHT ANGLE BRACKET +300A ; W # Ps LEFT DOUBLE ANGLE BRACKET +300B ; W # Pe RIGHT DOUBLE ANGLE BRACKET +300C ; W # Ps LEFT CORNER BRACKET +300D ; W # Pe RIGHT CORNER BRACKET +300E ; W # Ps LEFT WHITE CORNER BRACKET +300F ; W # Pe RIGHT WHITE CORNER BRACKET +3010 ; W # Ps LEFT BLACK LENTICULAR BRACKET +3011 ; W # Pe RIGHT BLACK LENTICULAR BRACKET +3012..3013 ; W # So [2] POSTAL MARK..GETA MARK +3014 ; W # Ps LEFT TORTOISE SHELL BRACKET +3015 ; W # Pe RIGHT TORTOISE SHELL BRACKET +3016 ; W # Ps LEFT WHITE LENTICULAR BRACKET +3017 ; W # Pe RIGHT WHITE LENTICULAR BRACKET +3018 ; W # Ps LEFT WHITE TORTOISE SHELL BRACKET +3019 ; W # Pe RIGHT WHITE TORTOISE SHELL BRACKET +301A ; W # Ps LEFT WHITE SQUARE BRACKET +301B ; W # Pe RIGHT WHITE SQUARE BRACKET +301C ; W # Pd WAVE DASH +301D ; W # Ps REVERSED DOUBLE PRIME QUOTATION MARK +301E..301F ; W # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK +3020 ; W # So POSTAL MARK FACE +3021..3029 ; W # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE +302A..302D ; W # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK +302E..302F ; W # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK +3030 ; W # Pd WAVY DASH +3031..3035 ; W # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF +3036..3037 ; W # So [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL +3038..303A ; W # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY +303B ; W # Lm VERTICAL IDEOGRAPHIC ITERATION MARK +303C ; W # Lo MASU MARK +303D ; W # Po PART ALTERNATION MARK +303E ; W # So IDEOGRAPHIC VARIATION INDICATOR +303F ; N # So IDEOGRAPHIC HALF FILL SPACE +3041..3096 ; W # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE +3099..309A ; W # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +309B..309C ; W # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +309D..309E ; W # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK +309F ; W # Lo HIRAGANA DIGRAPH YORI +30A0 ; W # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN +30A1..30FA ; W # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO +30FB ; W # Po KATAKANA MIDDLE DOT +30FC..30FE ; W # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK +30FF ; W # Lo KATAKANA DIGRAPH KOTO +3105..312F ; W # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN +3131..318E ; W # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE +3190..3191 ; W # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK +3192..3195 ; W # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK +3196..319F ; W # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK +31A0..31BF ; W # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH +31C0..31E3 ; W # So [36] CJK STROKE T..CJK STROKE Q +31EF ; W # So IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION +31F0..31FF ; W # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO +3200..321E ; W # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU +3220..3229 ; W # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN +322A..3247 ; W # So [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO +3248..324F ; A # No [8] CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE +3250 ; W # So PARTNERSHIP SIGN +3251..325F ; W # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE +3260..327F ; W # So [32] CIRCLED HANGUL KIYEOK..KOREAN STANDARD SYMBOL +3280..3289 ; W # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN +328A..32B0 ; W # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT +32B1..32BF ; W # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY +32C0..32FF ; W # So [64] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE ERA NAME REIWA +3300..33FF ; W # So [256] SQUARE APAATO..SQUARE GAL +3400..4DBF ; W # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF +4DC0..4DFF ; N # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION +4E00..9FFF ; W # Lo [20992] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFF +A000..A014 ; W # Lo [21] YI SYLLABLE IT..YI SYLLABLE E +A015 ; W # Lm YI SYLLABLE WU +A016..A48C ; W # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR +A490..A4C6 ; W # So [55] YI RADICAL QOT..YI RADICAL KE +A4D0..A4F7 ; N # Lo [40] LISU LETTER BA..LISU LETTER OE +A4F8..A4FD ; N # Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU +A4FE..A4FF ; N # Po [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP +A500..A60B ; N # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG +A60C ; N # Lm VAI SYLLABLE LENGTHENER +A60D..A60F ; N # Po [3] VAI COMMA..VAI QUESTION MARK +A610..A61F ; N # Lo [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG +A620..A629 ; N # Nd [10] VAI DIGIT ZERO..VAI DIGIT NINE +A62A..A62B ; N # Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO +A640..A66D ; N # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O +A66E ; N # Lo CYRILLIC LETTER MULTIOCULAR O +A66F ; N # Mn COMBINING CYRILLIC VZMET +A670..A672 ; N # Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN +A673 ; N # Po SLAVONIC ASTERISK +A674..A67D ; N # Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK +A67E ; N # Po CYRILLIC KAVYKA +A67F ; N # Lm CYRILLIC PAYEROK +A680..A69B ; N # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O +A69C..A69D ; N # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN +A69E..A69F ; N # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E +A6A0..A6E5 ; N # Lo [70] BAMUM LETTER A..BAMUM LETTER KI +A6E6..A6EF ; N # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM +A6F0..A6F1 ; N # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS +A6F2..A6F7 ; N # Po [6] BAMUM NJAEMLI..BAMUM QUESTION MARK +A700..A716 ; N # Sk [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR +A717..A71F ; N # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK +A720..A721 ; N # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE +A722..A76F ; N # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON +A770 ; N # Lm MODIFIER LETTER US +A771..A787 ; N # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T +A788 ; N # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT +A789..A78A ; N # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN +A78B..A78E ; N # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT +A78F ; N # Lo LATIN LETTER SINOLOGICAL DOT +A790..A7CA ; N # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7D0..A7D1 ; N # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; N # Ll LATIN SMALL LETTER DOUBLE THORN +A7D5..A7D9 ; N # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7F2..A7F4 ; N # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A7F5..A7F6 ; N # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H +A7F7 ; N # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I +A7F8..A7F9 ; N # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE +A7FA ; N # Ll LATIN LETTER SMALL CAPITAL TURNED M +A7FB..A7FF ; N # Lo [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M +A800..A801 ; N # Lo [2] SYLOTI NAGRI LETTER A..SYLOTI NAGRI LETTER I +A802 ; N # Mn SYLOTI NAGRI SIGN DVISVARA +A803..A805 ; N # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O +A806 ; N # Mn SYLOTI NAGRI SIGN HASANTA +A807..A80A ; N # Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO +A80B ; N # Mn SYLOTI NAGRI SIGN ANUSVARA +A80C..A822 ; N # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO +A823..A824 ; N # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I +A825..A826 ; N # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E +A827 ; N # Mc SYLOTI NAGRI VOWEL SIGN OO +A828..A82B ; N # So [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4 +A82C ; N # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA +A830..A835 ; N # No [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS +A836..A837 ; N # So [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK +A838 ; N # Sc NORTH INDIC RUPEE MARK +A839 ; N # So NORTH INDIC QUANTITY MARK +A840..A873 ; N # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU +A874..A877 ; N # Po [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD +A880..A881 ; N # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA +A882..A8B3 ; N # Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA +A8B4..A8C3 ; N # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU +A8C4..A8C5 ; N # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU +A8CE..A8CF ; N # Po [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA +A8D0..A8D9 ; N # Nd [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE +A8E0..A8F1 ; N # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA +A8F2..A8F7 ; N # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA +A8F8..A8FA ; N # Po [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET +A8FB ; N # Lo DEVANAGARI HEADSTROKE +A8FC ; N # Po DEVANAGARI SIGN SIDDHAM +A8FD..A8FE ; N # Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY +A8FF ; N # Mn DEVANAGARI VOWEL SIGN AY +A900..A909 ; N # Nd [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE +A90A..A925 ; N # Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO +A926..A92D ; N # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU +A92E..A92F ; N # Po [2] KAYAH LI SIGN CWI..KAYAH LI SIGN SHYA +A930..A946 ; N # Lo [23] REJANG LETTER KA..REJANG LETTER A +A947..A951 ; N # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R +A952..A953 ; N # Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA +A95F ; N # Po REJANG SECTION MARK +A960..A97C ; W # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH +A980..A982 ; N # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR +A983 ; N # Mc JAVANESE SIGN WIGNYAN +A984..A9B2 ; N # Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA +A9B3 ; N # Mn JAVANESE SIGN CECAK TELU +A9B4..A9B5 ; N # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG +A9B6..A9B9 ; N # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT +A9BA..A9BB ; N # Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE +A9BC..A9BD ; N # Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET +A9BE..A9C0 ; N # Mc [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON +A9C1..A9CD ; N # Po [13] JAVANESE LEFT RERENGGAN..JAVANESE TURNED PADA PISELEH +A9CF ; N # Lm JAVANESE PANGRANGKEP +A9D0..A9D9 ; N # Nd [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE +A9DE..A9DF ; N # Po [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN +A9E0..A9E4 ; N # Lo [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA +A9E5 ; N # Mn MYANMAR SIGN SHAN SAW +A9E6 ; N # Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION +A9E7..A9EF ; N # Lo [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA +A9F0..A9F9 ; N # Nd [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE +A9FA..A9FE ; N # Lo [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA +AA00..AA28 ; N # Lo [41] CHAM LETTER A..CHAM LETTER HA +AA29..AA2E ; N # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE +AA2F..AA30 ; N # Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI +AA31..AA32 ; N # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE +AA33..AA34 ; N # Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA +AA35..AA36 ; N # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA +AA40..AA42 ; N # Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG +AA43 ; N # Mn CHAM CONSONANT SIGN FINAL NG +AA44..AA4B ; N # Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS +AA4C ; N # Mn CHAM CONSONANT SIGN FINAL M +AA4D ; N # Mc CHAM CONSONANT SIGN FINAL H +AA50..AA59 ; N # Nd [10] CHAM DIGIT ZERO..CHAM DIGIT NINE +AA5C..AA5F ; N # Po [4] CHAM PUNCTUATION SPIRAL..CHAM PUNCTUATION TRIPLE DANDA +AA60..AA6F ; N # Lo [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA +AA70 ; N # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION +AA71..AA76 ; N # Lo [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM +AA77..AA79 ; N # So [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO +AA7A ; N # Lo MYANMAR LETTER AITON RA +AA7B ; N # Mc MYANMAR SIGN PAO KAREN TONE +AA7C ; N # Mn MYANMAR SIGN TAI LAING TONE-2 +AA7D ; N # Mc MYANMAR SIGN TAI LAING TONE-5 +AA7E..AA7F ; N # Lo [2] MYANMAR LETTER SHWE PALAUNG CHA..MYANMAR LETTER SHWE PALAUNG SHA +AA80..AAAF ; N # Lo [48] TAI VIET LETTER LOW KO..TAI VIET LETTER HIGH O +AAB0 ; N # Mn TAI VIET MAI KANG +AAB1 ; N # Lo TAI VIET VOWEL AA +AAB2..AAB4 ; N # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U +AAB5..AAB6 ; N # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O +AAB7..AAB8 ; N # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA +AAB9..AABD ; N # Lo [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN +AABE..AABF ; N # Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK +AAC0 ; N # Lo TAI VIET TONE MAI NUENG +AAC1 ; N # Mn TAI VIET TONE MAI THO +AAC2 ; N # Lo TAI VIET TONE MAI SONG +AADB..AADC ; N # Lo [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG +AADD ; N # Lm TAI VIET SYMBOL SAM +AADE..AADF ; N # Po [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI +AAE0..AAEA ; N # Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA +AAEB ; N # Mc MEETEI MAYEK VOWEL SIGN II +AAEC..AAED ; N # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI +AAEE..AAEF ; N # Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU +AAF0..AAF1 ; N # Po [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM +AAF2 ; N # Lo MEETEI MAYEK ANJI +AAF3..AAF4 ; N # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK +AAF5 ; N # Mc MEETEI MAYEK VOWEL SIGN VISARGA +AAF6 ; N # Mn MEETEI MAYEK VIRAMA +AB01..AB06 ; N # Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO +AB09..AB0E ; N # Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO +AB11..AB16 ; N # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO +AB20..AB26 ; N # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO +AB28..AB2E ; N # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO +AB30..AB5A ; N # Ll [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG +AB5B ; N # Sk MODIFIER BREVE WITH INVERTED BREVE +AB5C..AB5F ; N # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK +AB60..AB68 ; N # Ll [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE +AB69 ; N # Lm MODIFIER LETTER SMALL TURNED W +AB6A..AB6B ; N # Sk [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK +AB70..ABBF ; N # Ll [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA +ABC0..ABE2 ; N # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM +ABE3..ABE4 ; N # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP +ABE5 ; N # Mn MEETEI MAYEK VOWEL SIGN ANAP +ABE6..ABE7 ; N # Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP +ABE8 ; N # Mn MEETEI MAYEK VOWEL SIGN UNAP +ABE9..ABEA ; N # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG +ABEB ; N # Po MEETEI MAYEK CHEIKHEI +ABEC ; N # Mc MEETEI MAYEK LUM IYEK +ABED ; N # Mn MEETEI MAYEK APUN IYEK +ABF0..ABF9 ; N # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE +AC00..D7A3 ; W # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH +D7B0..D7C6 ; N # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E +D7CB..D7FB ; N # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH +D800..DB7F ; N # Cs [896] .. +DB80..DBFF ; N # Cs [128] .. +DC00..DFFF ; N # Cs [1024] .. +E000..F8FF ; A # Co [6400] .. +F900..FA6D ; W # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D +FA6E..FA6F ; W # Cn [2] .. +FA70..FAD9 ; W # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 +FADA..FAFF ; W # Cn [38] .. +FB00..FB06 ; N # Ll [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST +FB13..FB17 ; N # Ll [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH +FB1D ; N # Lo HEBREW LETTER YOD WITH HIRIQ +FB1E ; N # Mn HEBREW POINT JUDEO-SPANISH VARIKA +FB1F..FB28 ; N # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV +FB29 ; N # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN +FB2A..FB36 ; N # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH +FB38..FB3C ; N # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH +FB3E ; N # Lo HEBREW LETTER MEM WITH DAGESH +FB40..FB41 ; N # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH +FB43..FB44 ; N # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH +FB46..FB4F ; N # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED +FB50..FBB1 ; N # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM +FBB2..FBC2 ; N # Sk [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE +FBD3..FD3D ; N # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM +FD3E ; N # Pe ORNATE LEFT PARENTHESIS +FD3F ; N # Ps ORNATE RIGHT PARENTHESIS +FD40..FD4F ; N # So [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH +FD50..FD8F ; N # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM +FD92..FDC7 ; N # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FDCF ; N # So ARABIC LIGATURE SALAAMUHU ALAYNAA +FDF0..FDFB ; N # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU +FDFC ; N # Sc RIAL SIGN +FDFD..FDFF ; N # So [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL +FE00..FE0F ; A # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 +FE10..FE16 ; W # Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK +FE17 ; W # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET +FE18 ; W # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET +FE19 ; W # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS +FE20..FE2F ; N # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF +FE30 ; W # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER +FE31..FE32 ; W # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH +FE33..FE34 ; W # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE +FE35 ; W # Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS +FE36 ; W # Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS +FE37 ; W # Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET +FE38 ; W # Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET +FE39 ; W # Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET +FE3A ; W # Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET +FE3B ; W # Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET +FE3C ; W # Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET +FE3D ; W # Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET +FE3E ; W # Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET +FE3F ; W # Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET +FE40 ; W # Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET +FE41 ; W # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET +FE42 ; W # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET +FE43 ; W # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET +FE44 ; W # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET +FE45..FE46 ; W # Po [2] SESAME DOT..WHITE SESAME DOT +FE47 ; W # Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET +FE48 ; W # Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET +FE49..FE4C ; W # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE +FE4D..FE4F ; W # Pc [3] DASHED LOW LINE..WAVY LOW LINE +FE50..FE52 ; W # Po [3] SMALL COMMA..SMALL FULL STOP +FE54..FE57 ; W # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK +FE58 ; W # Pd SMALL EM DASH +FE59 ; W # Ps SMALL LEFT PARENTHESIS +FE5A ; W # Pe SMALL RIGHT PARENTHESIS +FE5B ; W # Ps SMALL LEFT CURLY BRACKET +FE5C ; W # Pe SMALL RIGHT CURLY BRACKET +FE5D ; W # Ps SMALL LEFT TORTOISE SHELL BRACKET +FE5E ; W # Pe SMALL RIGHT TORTOISE SHELL BRACKET +FE5F..FE61 ; W # Po [3] SMALL NUMBER SIGN..SMALL ASTERISK +FE62 ; W # Sm SMALL PLUS SIGN +FE63 ; W # Pd SMALL HYPHEN-MINUS +FE64..FE66 ; W # Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN +FE68 ; W # Po SMALL REVERSE SOLIDUS +FE69 ; W # Sc SMALL DOLLAR SIGN +FE6A..FE6B ; W # Po [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT +FE70..FE74 ; N # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM +FE76..FEFC ; N # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM +FEFF ; N # Cf ZERO WIDTH NO-BREAK SPACE +FF01..FF03 ; F # Po [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN +FF04 ; F # Sc FULLWIDTH DOLLAR SIGN +FF05..FF07 ; F # Po [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE +FF08 ; F # Ps FULLWIDTH LEFT PARENTHESIS +FF09 ; F # Pe FULLWIDTH RIGHT PARENTHESIS +FF0A ; F # Po FULLWIDTH ASTERISK +FF0B ; F # Sm FULLWIDTH PLUS SIGN +FF0C ; F # Po FULLWIDTH COMMA +FF0D ; F # Pd FULLWIDTH HYPHEN-MINUS +FF0E..FF0F ; F # Po [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS +FF10..FF19 ; F # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE +FF1A..FF1B ; F # Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON +FF1C..FF1E ; F # Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN +FF1F..FF20 ; F # Po [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT +FF21..FF3A ; F # Lu [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z +FF3B ; F # Ps FULLWIDTH LEFT SQUARE BRACKET +FF3C ; F # Po FULLWIDTH REVERSE SOLIDUS +FF3D ; F # Pe FULLWIDTH RIGHT SQUARE BRACKET +FF3E ; F # Sk FULLWIDTH CIRCUMFLEX ACCENT +FF3F ; F # Pc FULLWIDTH LOW LINE +FF40 ; F # Sk FULLWIDTH GRAVE ACCENT +FF41..FF5A ; F # Ll [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z +FF5B ; F # Ps FULLWIDTH LEFT CURLY BRACKET +FF5C ; F # Sm FULLWIDTH VERTICAL LINE +FF5D ; F # Pe FULLWIDTH RIGHT CURLY BRACKET +FF5E ; F # Sm FULLWIDTH TILDE +FF5F ; F # Ps FULLWIDTH LEFT WHITE PARENTHESIS +FF60 ; F # Pe FULLWIDTH RIGHT WHITE PARENTHESIS +FF61 ; H # Po HALFWIDTH IDEOGRAPHIC FULL STOP +FF62 ; H # Ps HALFWIDTH LEFT CORNER BRACKET +FF63 ; H # Pe HALFWIDTH RIGHT CORNER BRACKET +FF64..FF65 ; H # Po [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT +FF66..FF6F ; H # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU +FF70 ; H # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +FF71..FF9D ; H # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N +FF9E..FF9F ; H # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +FFA0..FFBE ; H # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH +FFC2..FFC7 ; H # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E +FFCA..FFCF ; H # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE +FFD2..FFD7 ; H # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU +FFDA..FFDC ; H # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I +FFE0..FFE1 ; F # Sc [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN +FFE2 ; F # Sm FULLWIDTH NOT SIGN +FFE3 ; F # Sk FULLWIDTH MACRON +FFE4 ; F # So FULLWIDTH BROKEN BAR +FFE5..FFE6 ; F # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN +FFE8 ; H # So HALFWIDTH FORMS LIGHT VERTICAL +FFE9..FFEC ; H # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW +FFED..FFEE ; H # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE +FFF9..FFFB ; N # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR +FFFC ; N # So OBJECT REPLACEMENT CHARACTER +FFFD ; A # So REPLACEMENT CHARACTER +10000..1000B ; N # Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE +1000D..10026 ; N # Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO +10028..1003A ; N # Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO +1003C..1003D ; N # Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE +1003F..1004D ; N # Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO +10050..1005D ; N # Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089 +10080..100FA ; N # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305 +10100..10102 ; N # Po [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK +10107..10133 ; N # No [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND +10137..1013F ; N # So [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT +10140..10174 ; N # Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS +10175..10178 ; N # No [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN +10179..10189 ; N # So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN +1018A..1018B ; N # No [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN +1018C..1018E ; N # So [3] GREEK SINUSOID SIGN..NOMISMA SIGN +10190..1019C ; N # So [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL +101A0 ; N # So GREEK SYMBOL TAU RHO +101D0..101FC ; N # So [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND +101FD ; N # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE +10280..1029C ; N # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X +102A0..102D0 ; N # Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3 +102E0 ; N # Mn COPTIC EPACT THOUSANDS MARK +102E1..102FB ; N # No [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED +10300..1031F ; N # Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS +10320..10323 ; N # No [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY +1032D..1032F ; N # Lo [3] OLD ITALIC LETTER YE..OLD ITALIC LETTER SOUTHERN TSE +10330..10340 ; N # Lo [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA +10341 ; N # Nl GOTHIC LETTER NINETY +10342..10349 ; N # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL +1034A ; N # Nl GOTHIC LETTER NINE HUNDRED +10350..10375 ; N # Lo [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA +10376..1037A ; N # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII +10380..1039D ; N # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU +1039F ; N # Po UGARITIC WORD DIVIDER +103A0..103C3 ; N # Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA +103C8..103CF ; N # Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH +103D0 ; N # Po OLD PERSIAN WORD DIVIDER +103D1..103D5 ; N # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED +10400..1044F ; N # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW +10450..1047F ; N # Lo [48] SHAVIAN LETTER PEEP..SHAVIAN LETTER YEW +10480..1049D ; N # Lo [30] OSMANYA LETTER ALEF..OSMANYA LETTER OO +104A0..104A9 ; N # Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE +104B0..104D3 ; N # Lu [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA +104D8..104FB ; N # Ll [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA +10500..10527 ; N # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE +10530..10563 ; N # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW +1056F ; N # Po CAUCASIAN ALBANIAN CITATION MARK +10570..1057A ; N # Lu [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; N # Lu [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; N # Lu [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; N # Lu [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; N # Ll [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; N # Ll [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; N # Ll [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; N # Ll [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +10600..10736 ; N # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 +10740..10755 ; N # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE +10760..10767 ; N # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 +10780..10785 ; N # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; N # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; N # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL +10800..10805 ; N # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA +10808 ; N # Lo CYPRIOT SYLLABLE JO +1080A..10835 ; N # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO +10837..10838 ; N # Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE +1083C ; N # Lo CYPRIOT SYLLABLE ZA +1083F ; N # Lo CYPRIOT SYLLABLE ZO +10840..10855 ; N # Lo [22] IMPERIAL ARAMAIC LETTER ALEPH..IMPERIAL ARAMAIC LETTER TAW +10857 ; N # Po IMPERIAL ARAMAIC SECTION SIGN +10858..1085F ; N # No [8] IMPERIAL ARAMAIC NUMBER ONE..IMPERIAL ARAMAIC NUMBER TEN THOUSAND +10860..10876 ; N # Lo [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW +10877..10878 ; N # So [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON +10879..1087F ; N # No [7] PALMYRENE NUMBER ONE..PALMYRENE NUMBER TWENTY +10880..1089E ; N # Lo [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW +108A7..108AF ; N # No [9] NABATAEAN NUMBER ONE..NABATAEAN NUMBER ONE HUNDRED +108E0..108F2 ; N # Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH +108F4..108F5 ; N # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW +108FB..108FF ; N # No [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED +10900..10915 ; N # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU +10916..1091B ; N # No [6] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER THREE +1091F ; N # Po PHOENICIAN WORD SEPARATOR +10920..10939 ; N # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C +1093F ; N # Po LYDIAN TRIANGULAR MARK +10980..1099F ; N # Lo [32] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2 +109A0..109B7 ; N # Lo [24] MEROITIC CURSIVE LETTER A..MEROITIC CURSIVE LETTER DA +109BC..109BD ; N # No [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF +109BE..109BF ; N # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN +109C0..109CF ; N # No [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY +109D2..109FF ; N # No [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS +10A00 ; N # Lo KHAROSHTHI LETTER A +10A01..10A03 ; N # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R +10A05..10A06 ; N # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O +10A0C..10A0F ; N # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA +10A10..10A13 ; N # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA +10A15..10A17 ; N # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA +10A19..10A35 ; N # Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA +10A38..10A3A ; N # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW +10A3F ; N # Mn KHAROSHTHI VIRAMA +10A40..10A48 ; N # No [9] KHAROSHTHI DIGIT ONE..KHAROSHTHI FRACTION ONE HALF +10A50..10A58 ; N # Po [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES +10A60..10A7C ; N # Lo [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH +10A7D..10A7E ; N # No [2] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMBER FIFTY +10A7F ; N # Po OLD SOUTH ARABIAN NUMERIC INDICATOR +10A80..10A9C ; N # Lo [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH +10A9D..10A9F ; N # No [3] OLD NORTH ARABIAN NUMBER ONE..OLD NORTH ARABIAN NUMBER TWENTY +10AC0..10AC7 ; N # Lo [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW +10AC8 ; N # So MANICHAEAN SIGN UD +10AC9..10AE4 ; N # Lo [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW +10AE5..10AE6 ; N # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW +10AEB..10AEF ; N # No [5] MANICHAEAN NUMBER ONE..MANICHAEAN NUMBER ONE HUNDRED +10AF0..10AF6 ; N # Po [7] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION LINE FILLER +10B00..10B35 ; N # Lo [54] AVESTAN LETTER A..AVESTAN LETTER HE +10B39..10B3F ; N # Po [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION +10B40..10B55 ; N # Lo [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW +10B58..10B5F ; N # No [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND +10B60..10B72 ; N # Lo [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW +10B78..10B7F ; N # No [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND +10B80..10B91 ; N # Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW +10B99..10B9C ; N # Po [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT +10BA9..10BAF ; N # No [7] PSALTER PAHLAVI NUMBER ONE..PSALTER PAHLAVI NUMBER ONE HUNDRED +10C00..10C48 ; N # Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH +10C80..10CB2 ; N # Lu [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US +10CC0..10CF2 ; N # Ll [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US +10CFA..10CFF ; N # No [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND +10D00..10D23 ; N # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA +10D24..10D27 ; N # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI +10D30..10D39 ; N # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE +10E60..10E7E ; N # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS +10E80..10EA9 ; N # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET +10EAB..10EAC ; N # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK +10EAD ; N # Pd YEZIDI HYPHENATION MARK +10EB0..10EB1 ; N # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE +10EFD..10EFF ; N # Mn [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA +10F00..10F1C ; N # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL +10F1D..10F26 ; N # No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF +10F27 ; N # Lo OLD SOGDIAN LIGATURE AYIN-DALETH +10F30..10F45 ; N # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN +10F46..10F50 ; N # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW +10F51..10F54 ; N # No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED +10F55..10F59 ; N # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT +10F70..10F81 ; N # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH +10F82..10F85 ; N # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW +10F86..10F89 ; N # Po [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS +10FB0..10FC4 ; N # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW +10FC5..10FCB ; N # No [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED +10FE0..10FF6 ; N # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH +11000 ; N # Mc BRAHMI SIGN CANDRABINDU +11001 ; N # Mn BRAHMI SIGN ANUSVARA +11002 ; N # Mc BRAHMI SIGN VISARGA +11003..11037 ; N # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA +11038..11046 ; N # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA +11047..1104D ; N # Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS +11052..11065 ; N # No [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND +11066..1106F ; N # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE +11070 ; N # Mn BRAHMI SIGN OLD TAMIL VIRAMA +11071..11072 ; N # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11073..11074 ; N # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O +11075 ; N # Lo BRAHMI LETTER OLD TAMIL LLA +1107F ; N # Mn BRAHMI NUMBER JOINER +11080..11081 ; N # Mn [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA +11082 ; N # Mc KAITHI SIGN VISARGA +11083..110AF ; N # Lo [45] KAITHI LETTER A..KAITHI LETTER HA +110B0..110B2 ; N # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II +110B3..110B6 ; N # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI +110B7..110B8 ; N # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU +110B9..110BA ; N # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA +110BB..110BC ; N # Po [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN +110BD ; N # Cf KAITHI NUMBER SIGN +110BE..110C1 ; N # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA +110C2 ; N # Mn KAITHI VOWEL SIGN VOCALIC R +110CD ; N # Cf KAITHI NUMBER SIGN ABOVE +110D0..110E8 ; N # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE +110F0..110F9 ; N # Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE +11100..11102 ; N # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA +11103..11126 ; N # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA +11127..1112B ; N # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU +1112C ; N # Mc CHAKMA VOWEL SIGN E +1112D..11134 ; N # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA +11136..1113F ; N # Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE +11140..11143 ; N # Po [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK +11144 ; N # Lo CHAKMA LETTER LHAA +11145..11146 ; N # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI +11147 ; N # Lo CHAKMA LETTER VAA +11150..11172 ; N # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA +11173 ; N # Mn MAHAJANI SIGN NUKTA +11174..11175 ; N # Po [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK +11176 ; N # Lo MAHAJANI LIGATURE SHRI +11180..11181 ; N # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA +11182 ; N # Mc SHARADA SIGN VISARGA +11183..111B2 ; N # Lo [48] SHARADA LETTER A..SHARADA LETTER HA +111B3..111B5 ; N # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II +111B6..111BE ; N # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O +111BF..111C0 ; N # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA +111C1..111C4 ; N # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM +111C5..111C8 ; N # Po [4] SHARADA DANDA..SHARADA SEPARATOR +111C9..111CC ; N # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK +111CD ; N # Po SHARADA SUTRA MARK +111CE ; N # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E +111CF ; N # Mn SHARADA SIGN INVERTED CANDRABINDU +111D0..111D9 ; N # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE +111DA ; N # Lo SHARADA EKAM +111DB ; N # Po SHARADA SIGN SIDDHAM +111DC ; N # Lo SHARADA HEADSTROKE +111DD..111DF ; N # Po [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2 +111E1..111F4 ; N # No [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND +11200..11211 ; N # Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA +11213..1122B ; N # Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA +1122C..1122E ; N # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II +1122F..11231 ; N # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI +11232..11233 ; N # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU +11234 ; N # Mn KHOJKI SIGN ANUSVARA +11235 ; N # Mc KHOJKI SIGN VIRAMA +11236..11237 ; N # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA +11238..1123D ; N # Po [6] KHOJKI DANDA..KHOJKI ABBREVIATION SIGN +1123E ; N # Mn KHOJKI SIGN SUKUN +1123F..11240 ; N # Lo [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I +11241 ; N # Mn KHOJKI VOWEL SIGN VOCALIC R +11280..11286 ; N # Lo [7] MULTANI LETTER A..MULTANI LETTER GA +11288 ; N # Lo MULTANI LETTER GHA +1128A..1128D ; N # Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA +1128F..1129D ; N # Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA +1129F..112A8 ; N # Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA +112A9 ; N # Po MULTANI SECTION MARK +112B0..112DE ; N # Lo [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA +112DF ; N # Mn KHUDAWADI SIGN ANUSVARA +112E0..112E2 ; N # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II +112E3..112EA ; N # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA +112F0..112F9 ; N # Nd [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE +11300..11301 ; N # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU +11302..11303 ; N # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA +11305..1130C ; N # Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L +1130F..11310 ; N # Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI +11313..11328 ; N # Lo [22] GRANTHA LETTER OO..GRANTHA LETTER NA +1132A..11330 ; N # Lo [7] GRANTHA LETTER PA..GRANTHA LETTER RA +11332..11333 ; N # Lo [2] GRANTHA LETTER LA..GRANTHA LETTER LLA +11335..11339 ; N # Lo [5] GRANTHA LETTER VA..GRANTHA LETTER HA +1133B..1133C ; N # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA +1133D ; N # Lo GRANTHA SIGN AVAGRAHA +1133E..1133F ; N # Mc [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I +11340 ; N # Mn GRANTHA VOWEL SIGN II +11341..11344 ; N # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR +11347..11348 ; N # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI +1134B..1134D ; N # Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA +11350 ; N # Lo GRANTHA OM +11357 ; N # Mc GRANTHA AU LENGTH MARK +1135D..11361 ; N # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL +11362..11363 ; N # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL +11366..1136C ; N # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX +11370..11374 ; N # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA +11400..11434 ; N # Lo [53] NEWA LETTER A..NEWA LETTER HA +11435..11437 ; N # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II +11438..1143F ; N # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI +11440..11441 ; N # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU +11442..11444 ; N # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA +11445 ; N # Mc NEWA SIGN VISARGA +11446 ; N # Mn NEWA SIGN NUKTA +11447..1144A ; N # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI +1144B..1144F ; N # Po [5] NEWA DANDA..NEWA ABBREVIATION SIGN +11450..11459 ; N # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE +1145A..1145B ; N # Po [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK +1145D ; N # Po NEWA INSERTION SIGN +1145E ; N # Mn NEWA SANDHI MARK +1145F..11461 ; N # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA +11480..114AF ; N # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA +114B0..114B2 ; N # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II +114B3..114B8 ; N # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL +114B9 ; N # Mc TIRHUTA VOWEL SIGN E +114BA ; N # Mn TIRHUTA VOWEL SIGN SHORT E +114BB..114BE ; N # Mc [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU +114BF..114C0 ; N # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA +114C1 ; N # Mc TIRHUTA SIGN VISARGA +114C2..114C3 ; N # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA +114C4..114C5 ; N # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG +114C6 ; N # Po TIRHUTA ABBREVIATION SIGN +114C7 ; N # Lo TIRHUTA OM +114D0..114D9 ; N # Nd [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE +11580..115AE ; N # Lo [47] SIDDHAM LETTER A..SIDDHAM LETTER HA +115AF..115B1 ; N # Mc [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II +115B2..115B5 ; N # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR +115B8..115BB ; N # Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU +115BC..115BD ; N # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA +115BE ; N # Mc SIDDHAM SIGN VISARGA +115BF..115C0 ; N # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA +115C1..115D7 ; N # Po [23] SIDDHAM SIGN SIDDHAM..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES +115D8..115DB ; N # Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U +115DC..115DD ; N # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU +11600..1162F ; N # Lo [48] MODI LETTER A..MODI LETTER LLA +11630..11632 ; N # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II +11633..1163A ; N # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI +1163B..1163C ; N # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU +1163D ; N # Mn MODI SIGN ANUSVARA +1163E ; N # Mc MODI SIGN VISARGA +1163F..11640 ; N # Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA +11641..11643 ; N # Po [3] MODI DANDA..MODI ABBREVIATION SIGN +11644 ; N # Lo MODI SIGN HUVA +11650..11659 ; N # Nd [10] MODI DIGIT ZERO..MODI DIGIT NINE +11660..1166C ; N # Po [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT +11680..116AA ; N # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA +116AB ; N # Mn TAKRI SIGN ANUSVARA +116AC ; N # Mc TAKRI SIGN VISARGA +116AD ; N # Mn TAKRI VOWEL SIGN AA +116AE..116AF ; N # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II +116B0..116B5 ; N # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU +116B6 ; N # Mc TAKRI SIGN VIRAMA +116B7 ; N # Mn TAKRI SIGN NUKTA +116B8 ; N # Lo TAKRI LETTER ARCHAIC KHA +116B9 ; N # Po TAKRI ABBREVIATION SIGN +116C0..116C9 ; N # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE +11700..1171A ; N # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA +1171D..1171F ; N # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA +11720..11721 ; N # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA +11722..11725 ; N # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU +11726 ; N # Mc AHOM VOWEL SIGN E +11727..1172B ; N # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER +11730..11739 ; N # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE +1173A..1173B ; N # No [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY +1173C..1173E ; N # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI +1173F ; N # So AHOM SYMBOL VI +11740..11746 ; N # Lo [7] AHOM LETTER CA..AHOM LETTER LLA +11800..1182B ; N # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA +1182C..1182E ; N # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II +1182F..11837 ; N # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA +11838 ; N # Mc DOGRA SIGN VISARGA +11839..1183A ; N # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA +1183B ; N # Po DOGRA ABBREVIATION SIGN +118A0..118DF ; N # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO +118E0..118E9 ; N # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE +118EA..118F2 ; N # No [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY +118FF ; N # Lo WARANG CITI OM +11900..11906 ; N # Lo [7] DIVES AKURU LETTER A..DIVES AKURU LETTER E +11909 ; N # Lo DIVES AKURU LETTER O +1190C..11913 ; N # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA +11915..11916 ; N # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA +11918..1192F ; N # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA +11930..11935 ; N # Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E +11937..11938 ; N # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O +1193B..1193C ; N # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU +1193D ; N # Mc DIVES AKURU SIGN HALANTA +1193E ; N # Mn DIVES AKURU VIRAMA +1193F ; N # Lo DIVES AKURU PREFIXED NASAL SIGN +11940 ; N # Mc DIVES AKURU MEDIAL YA +11941 ; N # Lo DIVES AKURU INITIAL RA +11942 ; N # Mc DIVES AKURU MEDIAL RA +11943 ; N # Mn DIVES AKURU SIGN NUKTA +11944..11946 ; N # Po [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK +11950..11959 ; N # Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE +119A0..119A7 ; N # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR +119AA..119D0 ; N # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA +119D1..119D3 ; N # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II +119D4..119D7 ; N # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR +119DA..119DB ; N # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI +119DC..119DF ; N # Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA +119E0 ; N # Mn NANDINAGARI SIGN VIRAMA +119E1 ; N # Lo NANDINAGARI SIGN AVAGRAHA +119E2 ; N # Po NANDINAGARI SIGN SIDDHAM +119E3 ; N # Lo NANDINAGARI HEADSTROKE +119E4 ; N # Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E +11A00 ; N # Lo ZANABAZAR SQUARE LETTER A +11A01..11A0A ; N # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK +11A0B..11A32 ; N # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA +11A33..11A38 ; N # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA +11A39 ; N # Mc ZANABAZAR SQUARE SIGN VISARGA +11A3A ; N # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA +11A3B..11A3E ; N # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA +11A3F..11A46 ; N # Po [8] ZANABAZAR SQUARE INITIAL HEAD MARK..ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK +11A47 ; N # Mn ZANABAZAR SQUARE SUBJOINER +11A50 ; N # Lo SOYOMBO LETTER A +11A51..11A56 ; N # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE +11A57..11A58 ; N # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU +11A59..11A5B ; N # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK +11A5C..11A89 ; N # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA +11A8A..11A96 ; N # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA +11A97 ; N # Mc SOYOMBO SIGN VISARGA +11A98..11A99 ; N # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER +11A9A..11A9C ; N # Po [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD +11A9D ; N # Lo SOYOMBO MARK PLUTA +11A9E..11AA2 ; N # Po [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2 +11AB0..11ABF ; N # Lo [16] CANADIAN SYLLABICS NATTILIK HI..CANADIAN SYLLABICS SPA +11AC0..11AF8 ; N # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL +11B00..11B09 ; N # Po [10] DEVANAGARI HEAD MARK..DEVANAGARI SIGN MINDU +11C00..11C08 ; N # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L +11C0A..11C2E ; N # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA +11C2F ; N # Mc BHAIKSUKI VOWEL SIGN AA +11C30..11C36 ; N # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L +11C38..11C3D ; N # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA +11C3E ; N # Mc BHAIKSUKI SIGN VISARGA +11C3F ; N # Mn BHAIKSUKI SIGN VIRAMA +11C40 ; N # Lo BHAIKSUKI SIGN AVAGRAHA +11C41..11C45 ; N # Po [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2 +11C50..11C59 ; N # Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE +11C5A..11C6C ; N # No [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK +11C70..11C71 ; N # Po [2] MARCHEN HEAD MARK..MARCHEN MARK SHAD +11C72..11C8F ; N # Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A +11C92..11CA7 ; N # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA +11CA9 ; N # Mc MARCHEN SUBJOINED LETTER YA +11CAA..11CB0 ; N # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA +11CB1 ; N # Mc MARCHEN VOWEL SIGN I +11CB2..11CB3 ; N # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E +11CB4 ; N # Mc MARCHEN VOWEL SIGN O +11CB5..11CB6 ; N # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU +11D00..11D06 ; N # Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E +11D08..11D09 ; N # Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O +11D0B..11D30 ; N # Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA +11D31..11D36 ; N # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R +11D3A ; N # Mn MASARAM GONDI VOWEL SIGN E +11D3C..11D3D ; N # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O +11D3F..11D45 ; N # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA +11D46 ; N # Lo MASARAM GONDI REPHA +11D47 ; N # Mn MASARAM GONDI RA-KARA +11D50..11D59 ; N # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE +11D60..11D65 ; N # Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU +11D67..11D68 ; N # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI +11D6A..11D89 ; N # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA +11D8A..11D8E ; N # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU +11D90..11D91 ; N # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI +11D93..11D94 ; N # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU +11D95 ; N # Mn GUNJALA GONDI SIGN ANUSVARA +11D96 ; N # Mc GUNJALA GONDI SIGN VISARGA +11D97 ; N # Mn GUNJALA GONDI VIRAMA +11D98 ; N # Lo GUNJALA GONDI OM +11DA0..11DA9 ; N # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE +11EE0..11EF2 ; N # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA +11EF3..11EF4 ; N # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U +11EF5..11EF6 ; N # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O +11EF7..11EF8 ; N # Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION +11F00..11F01 ; N # Mn [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA +11F02 ; N # Lo KAWI SIGN REPHA +11F03 ; N # Mc KAWI SIGN VISARGA +11F04..11F10 ; N # Lo [13] KAWI LETTER A..KAWI LETTER O +11F12..11F33 ; N # Lo [34] KAWI LETTER KA..KAWI LETTER JNYA +11F34..11F35 ; N # Mc [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA +11F36..11F3A ; N # Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R +11F3E..11F3F ; N # Mc [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI +11F40 ; N # Mn KAWI VOWEL SIGN EU +11F41 ; N # Mc KAWI SIGN KILLER +11F42 ; N # Mn KAWI CONJOINER +11F43..11F4F ; N # Po [13] KAWI DANDA..KAWI PUNCTUATION CLOSING SPIRAL +11F50..11F59 ; N # Nd [10] KAWI DIGIT ZERO..KAWI DIGIT NINE +11FB0 ; N # Lo LISU LETTER YHA +11FC0..11FD4 ; N # No [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH +11FD5..11FDC ; N # So [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI +11FDD..11FE0 ; N # Sc [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN +11FE1..11FF1 ; N # So [17] TAMIL SIGN PAARAM..TAMIL SIGN VAKAIYARAA +11FFF ; N # Po TAMIL PUNCTUATION END OF TEXT +12000..12399 ; N # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U +12400..1246E ; N # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM +12470..12474 ; N # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON +12480..12543 ; N # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +12F90..12FF0 ; N # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 +12FF1..12FF2 ; N # Po [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302 +13000..1342F ; N # Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D +13430..1343F ; N # Cf [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE +13440 ; N # Mn EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY +13441..13446 ; N # Lo [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN +13447..13455 ; N # Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED +14400..14646 ; N # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 +16800..16A38 ; N # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ +16A40..16A5E ; N # Lo [31] MRO LETTER TA..MRO LETTER TEK +16A60..16A69 ; N # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE +16A6E..16A6F ; N # Po [2] MRO DANDA..MRO DOUBLE DANDA +16A70..16ABE ; N # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA +16AC0..16AC9 ; N # Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE +16AD0..16AED ; N # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I +16AF0..16AF4 ; N # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE +16AF5 ; N # Po BASSA VAH FULL STOP +16B00..16B2F ; N # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU +16B30..16B36 ; N # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM +16B37..16B3B ; N # Po [5] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS FEEM +16B3C..16B3F ; N # So [4] PAHAWH HMONG SIGN XYEEM NTXIV..PAHAWH HMONG SIGN XYEEM FAIB +16B40..16B43 ; N # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM +16B44 ; N # Po PAHAWH HMONG SIGN XAUS +16B45 ; N # So PAHAWH HMONG SIGN CIM TSOV ROG +16B50..16B59 ; N # Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE +16B5B..16B61 ; N # No [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS +16B63..16B77 ; N # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS +16B7D..16B8F ; N # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ +16E40..16E7F ; N # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16E80..16E96 ; N # No [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM +16E97..16E9A ; N # Po [4] MEDEFAIDRIN COMMA..MEDEFAIDRIN EXCLAMATION OH +16F00..16F4A ; N # Lo [75] MIAO LETTER PA..MIAO LETTER RTE +16F4F ; N # Mn MIAO SIGN CONSONANT MODIFIER BAR +16F50 ; N # Lo MIAO LETTER NASALIZATION +16F51..16F87 ; N # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI +16F8F..16F92 ; N # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW +16F93..16F9F ; N # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 +16FE0..16FE1 ; W # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK +16FE2 ; W # Po OLD CHINESE HOOK MARK +16FE3 ; W # Lm OLD CHINESE ITERATION MARK +16FE4 ; W # Mn KHITAN SMALL SCRIPT FILLER +16FF0..16FF1 ; W # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY +17000..187F7 ; W # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 +18800..18AFF ; W # Lo [768] TANGUT COMPONENT-001..TANGUT COMPONENT-768 +18B00..18CD5 ; W # Lo [470] KHITAN SMALL SCRIPT CHARACTER-18B00..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18D00..18D08 ; W # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 +1AFF0..1AFF3 ; W # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; W # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; W # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 +1B000..1B0FF ; W # Lo [256] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER RE-2 +1B100..1B122 ; W # Lo [35] HENTAIGANA LETTER RE-3..KATAKANA LETTER ARCHAIC WU +1B132 ; W # Lo HIRAGANA LETTER SMALL KO +1B150..1B152 ; W # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO +1B155 ; W # Lo KATAKANA LETTER SMALL KO +1B164..1B167 ; W # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N +1B170..1B2FB ; W # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB +1BC00..1BC6A ; N # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M +1BC70..1BC7C ; N # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK +1BC80..1BC88 ; N # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL +1BC90..1BC99 ; N # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW +1BC9C ; N # So DUPLOYAN SIGN O WITH CROSS +1BC9D..1BC9E ; N # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK +1BC9F ; N # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP +1BCA0..1BCA3 ; N # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP +1CF00..1CF2D ; N # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; N # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG +1CF50..1CFC3 ; N # So [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK +1D000..1D0F5 ; N # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO +1D100..1D126 ; N # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 +1D129..1D164 ; N # So [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE +1D165..1D166 ; N # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM +1D167..1D169 ; N # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 +1D16A..1D16C ; N # So [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3 +1D16D..1D172 ; N # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 +1D173..1D17A ; N # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE +1D17B..1D182 ; N # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE +1D183..1D184 ; N # So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN +1D185..1D18B ; N # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE +1D18C..1D1A9 ; N # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH +1D1AA..1D1AD ; N # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO +1D1AE..1D1EA ; N # So [61] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KORON +1D200..1D241 ; N # So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54 +1D242..1D244 ; N # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME +1D245 ; N # So GREEK MUSICAL LEIMMA +1D2C0..1D2D3 ; N # No [20] KAKTOVIK NUMERAL ZERO..KAKTOVIK NUMERAL NINETEEN +1D2E0..1D2F3 ; N # No [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN +1D300..1D356 ; N # So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING +1D360..1D378 ; N # No [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE +1D400..1D454 ; N # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G +1D456..1D49C ; N # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A +1D49E..1D49F ; N # Lu [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D +1D4A2 ; N # Lu MATHEMATICAL SCRIPT CAPITAL G +1D4A5..1D4A6 ; N # Lu [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K +1D4A9..1D4AC ; N # Lu [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q +1D4AE..1D4B9 ; N # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D +1D4BB ; N # Ll MATHEMATICAL SCRIPT SMALL F +1D4BD..1D4C3 ; N # Ll [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N +1D4C5..1D505 ; N # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B +1D507..1D50A ; N # Lu [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G +1D50D..1D514 ; N # Lu [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q +1D516..1D51C ; N # Lu [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y +1D51E..1D539 ; N # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B +1D53B..1D53E ; N # Lu [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G +1D540..1D544 ; N # Lu [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M +1D546 ; N # Lu MATHEMATICAL DOUBLE-STRUCK CAPITAL O +1D54A..1D550 ; N # Lu [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y +1D552..1D6A5 ; N # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J +1D6A8..1D6C0 ; N # Lu [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA +1D6C1 ; N # Sm MATHEMATICAL BOLD NABLA +1D6C2..1D6DA ; N # Ll [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA +1D6DB ; N # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL +1D6DC..1D6FA ; N # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA +1D6FB ; N # Sm MATHEMATICAL ITALIC NABLA +1D6FC..1D714 ; N # Ll [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA +1D715 ; N # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL +1D716..1D734 ; N # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA +1D735 ; N # Sm MATHEMATICAL BOLD ITALIC NABLA +1D736..1D74E ; N # Ll [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA +1D74F ; N # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL +1D750..1D76E ; N # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA +1D76F ; N # Sm MATHEMATICAL SANS-SERIF BOLD NABLA +1D770..1D788 ; N # Ll [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA +1D789 ; N # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL +1D78A..1D7A8 ; N # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA +1D7A9 ; N # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA +1D7AA..1D7C2 ; N # Ll [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA +1D7C3 ; N # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL +1D7C4..1D7CB ; N # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA +1D7CE..1D7FF ; N # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE +1D800..1D9FF ; N # So [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD +1DA00..1DA36 ; N # Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN +1DA37..1DA3A ; N # So [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE +1DA3B..1DA6C ; N # Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT +1DA6D..1DA74 ; N # So [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING +1DA75 ; N # Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS +1DA76..1DA83 ; N # So [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH +1DA84 ; N # Mn SIGNWRITING LOCATION HEAD NECK +1DA85..1DA86 ; N # So [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS +1DA87..1DA8B ; N # Po [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS +1DA9B..1DA9F ; N # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 +1DAA1..1DAAF ; N # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 +1DF00..1DF09 ; N # Ll [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0A ; N # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +1DF0B..1DF1E ; N # Ll [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL +1DF25..1DF2A ; N # Ll [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK +1E000..1E006 ; N # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE +1E008..1E018 ; N # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU +1E01B..1E021 ; N # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI +1E023..1E024 ; N # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS +1E026..1E02A ; N # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA +1E030..1E06D ; N # Lm [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE +1E08F ; N # Mn COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +1E100..1E12C ; N # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W +1E130..1E136 ; N # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D +1E137..1E13D ; N # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER +1E140..1E149 ; N # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE +1E14E ; N # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ +1E14F ; N # So NYIAKENG PUACHUE HMONG CIRCLED CA +1E290..1E2AD ; N # Lo [30] TOTO LETTER PA..TOTO LETTER A +1E2AE ; N # Mn TOTO SIGN RISING TONE +1E2C0..1E2EB ; N # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH +1E2EC..1E2EF ; N # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI +1E2F0..1E2F9 ; N # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE +1E2FF ; N # Sc WANCHO NGUN SIGN +1E4D0..1E4EA ; N # Lo [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL +1E4EB ; N # Lm NAG MUNDARI SIGN OJOD +1E4EC..1E4EF ; N # Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH +1E4F0..1E4F9 ; N # Nd [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE +1E7E0..1E7E6 ; N # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB ; N # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE ; N # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE ; N # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE +1E800..1E8C4 ; N # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON +1E8C7..1E8CF ; N # No [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE +1E8D0..1E8D6 ; N # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS +1E900..1E943 ; N # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA +1E944..1E94A ; N # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA +1E94B ; N # Lm ADLAM NASALIZATION MARK +1E950..1E959 ; N # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE +1E95E..1E95F ; N # Po [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK +1EC71..1ECAB ; N # No [59] INDIC SIYAQ NUMBER ONE..INDIC SIYAQ NUMBER PREFIXED NINE +1ECAC ; N # So INDIC SIYAQ PLACEHOLDER +1ECAD..1ECAF ; N # No [3] INDIC SIYAQ FRACTION ONE QUARTER..INDIC SIYAQ FRACTION THREE QUARTERS +1ECB0 ; N # Sc INDIC SIYAQ RUPEE MARK +1ECB1..1ECB4 ; N # No [4] INDIC SIYAQ NUMBER ALTERNATE ONE..INDIC SIYAQ ALTERNATE LAKH MARK +1ED01..1ED2D ; N # No [45] OTTOMAN SIYAQ NUMBER ONE..OTTOMAN SIYAQ NUMBER NINETY THOUSAND +1ED2E ; N # So OTTOMAN SIYAQ MARRATAN +1ED2F..1ED3D ; N # No [15] OTTOMAN SIYAQ ALTERNATE NUMBER TWO..OTTOMAN SIYAQ FRACTION ONE SIXTH +1EE00..1EE03 ; N # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL +1EE05..1EE1F ; N # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF +1EE21..1EE22 ; N # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM +1EE24 ; N # Lo ARABIC MATHEMATICAL INITIAL HEH +1EE27 ; N # Lo ARABIC MATHEMATICAL INITIAL HAH +1EE29..1EE32 ; N # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF +1EE34..1EE37 ; N # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH +1EE39 ; N # Lo ARABIC MATHEMATICAL INITIAL DAD +1EE3B ; N # Lo ARABIC MATHEMATICAL INITIAL GHAIN +1EE42 ; N # Lo ARABIC MATHEMATICAL TAILED JEEM +1EE47 ; N # Lo ARABIC MATHEMATICAL TAILED HAH +1EE49 ; N # Lo ARABIC MATHEMATICAL TAILED YEH +1EE4B ; N # Lo ARABIC MATHEMATICAL TAILED LAM +1EE4D..1EE4F ; N # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN +1EE51..1EE52 ; N # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF +1EE54 ; N # Lo ARABIC MATHEMATICAL TAILED SHEEN +1EE57 ; N # Lo ARABIC MATHEMATICAL TAILED KHAH +1EE59 ; N # Lo ARABIC MATHEMATICAL TAILED DAD +1EE5B ; N # Lo ARABIC MATHEMATICAL TAILED GHAIN +1EE5D ; N # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON +1EE5F ; N # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF +1EE61..1EE62 ; N # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM +1EE64 ; N # Lo ARABIC MATHEMATICAL STRETCHED HEH +1EE67..1EE6A ; N # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF +1EE6C..1EE72 ; N # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF +1EE74..1EE77 ; N # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH +1EE79..1EE7C ; N # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH +1EE7E ; N # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH +1EE80..1EE89 ; N # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH +1EE8B..1EE9B ; N # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN +1EEA1..1EEA3 ; N # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL +1EEA5..1EEA9 ; N # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH +1EEAB..1EEBB ; N # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN +1EEF0..1EEF1 ; N # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL +1F000..1F003 ; N # So [4] MAHJONG TILE EAST WIND..MAHJONG TILE NORTH WIND +1F004 ; W # So MAHJONG TILE RED DRAGON +1F005..1F02B ; N # So [39] MAHJONG TILE GREEN DRAGON..MAHJONG TILE BACK +1F030..1F093 ; N # So [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06 +1F0A0..1F0AE ; N # So [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES +1F0B1..1F0BF ; N # So [15] PLAYING CARD ACE OF HEARTS..PLAYING CARD RED JOKER +1F0C1..1F0CE ; N # So [14] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD KING OF DIAMONDS +1F0CF ; W # So PLAYING CARD BLACK JOKER +1F0D1..1F0F5 ; N # So [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21 +1F100..1F10A ; A # No [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA +1F10B..1F10C ; N # No [2] DINGBAT CIRCLED SANS-SERIF DIGIT ZERO..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO +1F10D..1F10F ; N # So [3] CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH +1F110..1F12D ; A # So [30] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED CD +1F12E..1F12F ; N # So [2] CIRCLED WZ..COPYLEFT SYMBOL +1F130..1F169 ; A # So [58] SQUARED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z +1F16A..1F16F ; N # So [6] RAISED MC SIGN..CIRCLED HUMAN FIGURE +1F170..1F18D ; A # So [30] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED SA +1F18E ; W # So NEGATIVE SQUARED AB +1F18F..1F190 ; A # So [2] NEGATIVE SQUARED WC..SQUARE DJ +1F191..1F19A ; W # So [10] SQUARED CL..SQUARED VS +1F19B..1F1AC ; A # So [18] SQUARED THREE D..SQUARED VOD +1F1AD ; N # So MASK WORK SYMBOL +1F1E6..1F1FF ; N # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z +1F200..1F202 ; W # So [3] SQUARE HIRAGANA HOKA..SQUARED KATAKANA SA +1F210..1F23B ; W # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D +1F240..1F248 ; W # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 +1F250..1F251 ; W # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT +1F260..1F265 ; W # So [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI +1F300..1F320 ; W # So [33] CYCLONE..SHOOTING STAR +1F321..1F32C ; N # So [12] THERMOMETER..WIND BLOWING FACE +1F32D..1F335 ; W # So [9] HOT DOG..CACTUS +1F336 ; N # So HOT PEPPER +1F337..1F37C ; W # So [70] TULIP..BABY BOTTLE +1F37D ; N # So FORK AND KNIFE WITH PLATE +1F37E..1F393 ; W # So [22] BOTTLE WITH POPPING CORK..GRADUATION CAP +1F394..1F39F ; N # So [12] HEART WITH TIP ON THE LEFT..ADMISSION TICKETS +1F3A0..1F3CA ; W # So [43] CAROUSEL HORSE..SWIMMER +1F3CB..1F3CE ; N # So [4] WEIGHT LIFTER..RACING CAR +1F3CF..1F3D3 ; W # So [5] CRICKET BAT AND BALL..TABLE TENNIS PADDLE AND BALL +1F3D4..1F3DF ; N # So [12] SNOW CAPPED MOUNTAIN..STADIUM +1F3E0..1F3F0 ; W # So [17] HOUSE BUILDING..EUROPEAN CASTLE +1F3F1..1F3F3 ; N # So [3] WHITE PENNANT..WAVING WHITE FLAG +1F3F4 ; W # So WAVING BLACK FLAG +1F3F5..1F3F7 ; N # So [3] ROSETTE..LABEL +1F3F8..1F3FA ; W # So [3] BADMINTON RACQUET AND SHUTTLECOCK..AMPHORA +1F3FB..1F3FF ; W # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 +1F400..1F43E ; W # So [63] RAT..PAW PRINTS +1F43F ; N # So CHIPMUNK +1F440 ; W # So EYES +1F441 ; N # So EYE +1F442..1F4FC ; W # So [187] EAR..VIDEOCASSETTE +1F4FD..1F4FE ; N # So [2] FILM PROJECTOR..PORTABLE STEREO +1F4FF..1F53D ; W # So [63] PRAYER BEADS..DOWN-POINTING SMALL RED TRIANGLE +1F53E..1F54A ; N # So [13] LOWER RIGHT SHADOWED WHITE CIRCLE..DOVE OF PEACE +1F54B..1F54E ; W # So [4] KAABA..MENORAH WITH NINE BRANCHES +1F54F ; N # So BOWL OF HYGIEIA +1F550..1F567 ; W # So [24] CLOCK FACE ONE OCLOCK..CLOCK FACE TWELVE-THIRTY +1F568..1F579 ; N # So [18] RIGHT SPEAKER..JOYSTICK +1F57A ; W # So MAN DANCING +1F57B..1F594 ; N # So [26] LEFT HAND TELEPHONE RECEIVER..REVERSED VICTORY HAND +1F595..1F596 ; W # So [2] REVERSED HAND WITH MIDDLE FINGER EXTENDED..RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS +1F597..1F5A3 ; N # So [13] WHITE DOWN POINTING LEFT HAND INDEX..BLACK DOWN POINTING BACKHAND INDEX +1F5A4 ; W # So BLACK HEART +1F5A5..1F5FA ; N # So [86] DESKTOP COMPUTER..WORLD MAP +1F5FB..1F5FF ; W # So [5] MOUNT FUJI..MOYAI +1F600..1F64F ; W # So [80] GRINNING FACE..PERSON WITH FOLDED HANDS +1F650..1F67F ; N # So [48] NORTH WEST POINTING LEAF..REVERSE CHECKER BOARD +1F680..1F6C5 ; W # So [70] ROCKET..LEFT LUGGAGE +1F6C6..1F6CB ; N # So [6] TRIANGLE WITH ROUNDED CORNERS..COUCH AND LAMP +1F6CC ; W # So SLEEPING ACCOMMODATION +1F6CD..1F6CF ; N # So [3] SHOPPING BAGS..BED +1F6D0..1F6D2 ; W # So [3] PLACE OF WORSHIP..SHOPPING TROLLEY +1F6D3..1F6D4 ; N # So [2] STUPA..PAGODA +1F6D5..1F6D7 ; W # So [3] HINDU TEMPLE..ELEVATOR +1F6DC..1F6DF ; W # So [4] WIRELESS..RING BUOY +1F6E0..1F6EA ; N # So [11] HAMMER AND WRENCH..NORTHEAST-POINTING AIRPLANE +1F6EB..1F6EC ; W # So [2] AIRPLANE DEPARTURE..AIRPLANE ARRIVING +1F6F0..1F6F3 ; N # So [4] SATELLITE..PASSENGER SHIP +1F6F4..1F6FC ; W # So [9] SCOOTER..ROLLER SKATE +1F700..1F776 ; N # So [119] ALCHEMICAL SYMBOL FOR QUINTESSENCE..LUNAR ECLIPSE +1F77B..1F77F ; N # So [5] HAUMEA..ORCUS +1F780..1F7D9 ; N # So [90] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NINE POINTED WHITE STAR +1F7E0..1F7EB ; W # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE +1F7F0 ; W # So HEAVY EQUALS SIGN +1F800..1F80B ; N # So [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD +1F810..1F847 ; N # So [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW +1F850..1F859 ; N # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW +1F860..1F887 ; N # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW +1F890..1F8AD ; N # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS +1F8B0..1F8B1 ; N # So [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST +1F900..1F90B ; N # So [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT +1F90C..1F93A ; W # So [47] PINCHED FINGERS..FENCER +1F93B ; N # So MODERN PENTATHLON +1F93C..1F945 ; W # So [10] WRESTLERS..GOAL NET +1F946 ; N # So RIFLE +1F947..1F9FF ; W # So [185] FIRST PLACE MEDAL..NAZAR AMULET +1FA00..1FA53 ; N # So [84] NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP +1FA60..1FA6D ; N # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER +1FA70..1FA7C ; W # So [13] BALLET SHOES..CRUTCH +1FA80..1FA88 ; W # So [9] YO-YO..FLUTE +1FA90..1FABD ; W # So [46] RINGED PLANET..WING +1FABF..1FAC5 ; W # So [7] GOOSE..PERSON WITH CROWN +1FACE..1FADB ; W # So [14] MOOSE..PEA POD +1FAE0..1FAE8 ; W # So [9] MELTING FACE..SHAKING FACE +1FAF0..1FAF8 ; W # So [9] HAND WITH INDEX FINGER AND THUMB CROSSED..RIGHTWARDS PUSHING HAND +1FB00..1FB92 ; N # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK +1FB94..1FBCA ; N # So [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON +1FBF0..1FBF9 ; N # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE +20000..2A6DF ; W # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A6E0..2A6FF ; W # Cn [32] .. +2A700..2B739 ; W # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 +2B73A..2B73F ; W # Cn [6] .. +2B740..2B81D ; W # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D +2B81E..2B81F ; W # Cn [2] .. +2B820..2CEA1 ; W # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 +2CEA2..2CEAF ; W # Cn [14] .. +2CEB0..2EBE0 ; W # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 +2EBE1..2EBEF ; W # Cn [15] .. +2EBF0..2EE5D ; W # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D +2EE5E..2F7FF ; W # Cn [2466] .. +2F800..2FA1D ; W # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D +2FA1E..2FA1F ; W # Cn [2] .. +2FA20..2FFFD ; W # Cn [1502] .. +30000..3134A ; W # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A +3134B..3134F ; W # Cn [5] .. +31350..323AF ; W # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF +323B0..3FFFD ; W # Cn [56398] .. +E0001 ; N # Cf LANGUAGE TAG +E0020..E007F ; N # Cf [96] TAG SPACE..CANCEL TAG +E0100..E01EF ; A # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 +F0000..FFFFD ; A # Co [65534] .. +100000..10FFFD ; A # Co [65534] .. # EOF diff --git a/contrib/unicode/NameAliases.txt b/contrib/unicode/NameAliases.txt index db3a863a920c..1e6f50243f90 100644 --- a/contrib/unicode/NameAliases.txt +++ b/contrib/unicode/NameAliases.txt @@ -1,6 +1,6 @@ -# NameAliases-15.0.0.txt -# Date: 2022-07-26, 20:13:00 GMT [KW] -# © 2022 Unicode®, Inc. +# NameAliases-15.1.0.txt +# Date: 2023-01-05 +# © 2023 Unicode®, Inc. # For terms of use, see https://www.unicode.org/terms_of_use.html # # Unicode Character Database diff --git a/contrib/unicode/PropList.txt b/contrib/unicode/PropList.txt index b49d6460c169..777e8a288188 100644 --- a/contrib/unicode/PropList.txt +++ b/contrib/unicode/PropList.txt @@ -1,6 +1,6 @@ -# PropList-15.0.0.txt -# Date: 2022-08-05, 22:17:16 GMT -# © 2022 Unicode®, Inc. +# PropList-15.1.0.txt +# Date: 2023-08-01, 21:56:53 GMT +# © 2023 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see https://www.unicode.org/terms_of_use.html # @@ -856,11 +856,12 @@ FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COM 2B740..2B81D ; Ideographic # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; Ideographic # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 2CEB0..2EBE0 ; Ideographic # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 +2EBF0..2EE5D ; Ideographic # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 2F800..2FA1D ; Ideographic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; Ideographic # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A 31350..323AF ; Ideographic # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF -# Total code points: 105854 +# Total code points: 106476 # ================================================ @@ -1241,9 +1242,10 @@ E0020..E007F ; Other_Grapheme_Extend # Cf [96] TAG SPACE..CANCEL TAG # ================================================ 2FF0..2FF1 ; IDS_Binary_Operator # So [2] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW -2FF4..2FFB ; IDS_Binary_Operator # So [8] IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID +2FF4..2FFD ; IDS_Binary_Operator # So [10] IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND..IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER RIGHT +31EF ; IDS_Binary_Operator # So IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION -# Total code points: 10 +# Total code points: 13 # ================================================ @@ -1253,6 +1255,12 @@ E0020..E007F ; Other_Grapheme_Extend # Cf [96] TAG SPACE..CANCEL TAG # ================================================ +2FFE..2FFF ; IDS_Unary_Operator # So [2] IDEOGRAPHIC DESCRIPTION CHARACTER HORIZONTAL REFLECTION..IDEOGRAPHIC DESCRIPTION CHARACTER ROTATION + +# Total code points: 2 + +# ================================================ + 2E80..2E99 ; Radical # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP 2E9B..2EF3 ; Radical # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE 2F00..2FD5 ; Radical # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE @@ -1275,10 +1283,11 @@ FA27..FA29 ; Unified_Ideograph # Lo [3] CJK COMPATIBILITY IDEOGRAPH-FA27..C 2B740..2B81D ; Unified_Ideograph # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; Unified_Ideograph # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 2CEB0..2EBE0 ; Unified_Ideograph # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 +2EBF0..2EE5D ; Unified_Ideograph # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 30000..3134A ; Unified_Ideograph # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A 31350..323AF ; Unified_Ideograph # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF -# Total code points: 97058 +# Total code points: 97680 # ================================================ @@ -1376,8 +1385,58 @@ AABB..AABC ; Logical_Order_Exception # Lo [2] TAI VIET VOWEL AUE..TAI VIET 0387 ; Other_ID_Continue # Po GREEK ANO TELEIA 1369..1371 ; Other_ID_Continue # No [9] ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE 19DA ; Other_ID_Continue # No NEW TAI LUE THAM DIGIT ONE +200C..200D ; Other_ID_Continue # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER +30FB ; Other_ID_Continue # Po KATAKANA MIDDLE DOT +FF65 ; Other_ID_Continue # Po HALFWIDTH KATAKANA MIDDLE DOT -# Total code points: 12 +# Total code points: 16 + +# ================================================ + +00B2..00B3 ; ID_Compat_Math_Continue # No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE +00B9 ; ID_Compat_Math_Continue # No SUPERSCRIPT ONE +2070 ; ID_Compat_Math_Continue # No SUPERSCRIPT ZERO +2074..2079 ; ID_Compat_Math_Continue # No [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE +207A..207C ; ID_Compat_Math_Continue # Sm [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN +207D ; ID_Compat_Math_Continue # Ps SUPERSCRIPT LEFT PARENTHESIS +207E ; ID_Compat_Math_Continue # Pe SUPERSCRIPT RIGHT PARENTHESIS +2080..2089 ; ID_Compat_Math_Continue # No [10] SUBSCRIPT ZERO..SUBSCRIPT NINE +208A..208C ; ID_Compat_Math_Continue # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN +208D ; ID_Compat_Math_Continue # Ps SUBSCRIPT LEFT PARENTHESIS +208E ; ID_Compat_Math_Continue # Pe SUBSCRIPT RIGHT PARENTHESIS +2202 ; ID_Compat_Math_Continue # Sm PARTIAL DIFFERENTIAL +2207 ; ID_Compat_Math_Continue # Sm NABLA +221E ; ID_Compat_Math_Continue # Sm INFINITY +1D6C1 ; ID_Compat_Math_Continue # Sm MATHEMATICAL BOLD NABLA +1D6DB ; ID_Compat_Math_Continue # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL +1D6FB ; ID_Compat_Math_Continue # Sm MATHEMATICAL ITALIC NABLA +1D715 ; ID_Compat_Math_Continue # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL +1D735 ; ID_Compat_Math_Continue # Sm MATHEMATICAL BOLD ITALIC NABLA +1D74F ; ID_Compat_Math_Continue # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL +1D76F ; ID_Compat_Math_Continue # Sm MATHEMATICAL SANS-SERIF BOLD NABLA +1D789 ; ID_Compat_Math_Continue # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL +1D7A9 ; ID_Compat_Math_Continue # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA +1D7C3 ; ID_Compat_Math_Continue # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL + +# Total code points: 43 + +# ================================================ + +2202 ; ID_Compat_Math_Start # Sm PARTIAL DIFFERENTIAL +2207 ; ID_Compat_Math_Start # Sm NABLA +221E ; ID_Compat_Math_Start # Sm INFINITY +1D6C1 ; ID_Compat_Math_Start # Sm MATHEMATICAL BOLD NABLA +1D6DB ; ID_Compat_Math_Start # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL +1D6FB ; ID_Compat_Math_Start # Sm MATHEMATICAL ITALIC NABLA +1D715 ; ID_Compat_Math_Start # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL +1D735 ; ID_Compat_Math_Start # Sm MATHEMATICAL BOLD ITALIC NABLA +1D74F ; ID_Compat_Math_Start # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL +1D76F ; ID_Compat_Math_Start # Sm MATHEMATICAL SANS-SERIF BOLD NABLA +1D789 ; ID_Compat_Math_Start # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL +1D7A9 ; ID_Compat_Math_Start # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA +1D7C3 ; ID_Compat_Math_Start # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL + +# Total code points: 13 # ================================================ @@ -1398,6 +1457,7 @@ AABB..AABC ; Logical_Order_Exception # Lo [2] TAI VIET VOWEL AUE..TAI VIET 1367..1368 ; Sentence_Terminal # Po [2] ETHIOPIC QUESTION MARK..ETHIOPIC PARAGRAPH SEPARATOR 166E ; Sentence_Terminal # Po CANADIAN SYLLABICS FULL STOP 1735..1736 ; Sentence_Terminal # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION +17D4..17D5 ; Sentence_Terminal # Po [2] KHMER SIGN KHAN..KHMER SIGN BARIYOOSAN 1803 ; Sentence_Terminal # Po MONGOLIAN FULL STOP 1809 ; Sentence_Terminal # Po MONGOLIAN MANCHU FULL STOP 1944..1945 ; Sentence_Terminal # Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK @@ -1462,7 +1522,7 @@ FF61 ; Sentence_Terminal # Po HALFWIDTH IDEOGRAPHIC FULL STOP 1BC9F ; Sentence_Terminal # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP 1DA88 ; Sentence_Terminal # Po SIGNWRITING FULL STOP -# Total code points: 154 +# Total code points: 156 # ================================================ diff --git a/contrib/unicode/README b/contrib/unicode/README index 50ef0c32b827..1f5fee6dc350 100644 --- a/contrib/unicode/README +++ b/contrib/unicode/README @@ -30,7 +30,7 @@ localedata/unicode-gen/unicode_utils.py localedata/unicode-gen/utf8_gen.py And the most recent versions added to GCC are from glibc git commit: -4c721f24fc190d1dc935eb0bab283de7cf13182e +71de3aead9fffe89556e80ebc94aa918d8ee7bca The script gen_wcwidth.py found here contains the GCC-specific code to map glibc's output to the lookup tables we require. This script should not need @@ -40,14 +40,14 @@ produce ucnid.h. The procedure to update GCC's Unicode support is the following: -1. Update the five Unicode data files from the above URLs. +1. Update the six Unicode data files from the above URLs. 2. Update the two glibc files in from_glibc/ from glibc's git. Update the commit number above in this README. 3. Run ./gen_wcwidth.py X.Y > ../../libcpp/generated_cpp_wcwidth.h (where X.Y is the version of the Unicode standard corresponding to the - Unicode data files being used, most recently, 15.0.0). + Unicode data files being used, most recently, 15.1.0). 4. Update Unicode Copyright years in libcpp/makeucnid.cc and in libcpp/makeuname2c.cc up to the year in which the Unicode diff --git a/contrib/unicode/UnicodeData.txt b/contrib/unicode/UnicodeData.txt index ea963a7162ce..bdcc41850d7f 100644 --- a/contrib/unicode/UnicodeData.txt +++ b/contrib/unicode/UnicodeData.txt @@ -11231,6 +11231,10 @@ 2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;; 2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;; 2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;; +2FFC;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM RIGHT;So;0;ON;;;;;N;;;;; +2FFD;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER RIGHT;So;0;ON;;;;;N;;;;; +2FFE;IDEOGRAPHIC DESCRIPTION CHARACTER HORIZONTAL REFLECTION;So;0;ON;;;;;N;;;;; +2FFF;IDEOGRAPHIC DESCRIPTION CHARACTER ROTATION;So;0;ON;;;;;N;;;;; 3000;IDEOGRAPHIC SPACE;Zs;0;WS; 0020;;;;N;;;;; 3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;; 3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;; @@ -11705,6 +11709,7 @@ 31E1;CJK STROKE HZZZG;So;0;ON;;;;;N;;;;; 31E2;CJK STROKE PG;So;0;ON;;;;;N;;;;; 31E3;CJK STROKE Q;So;0;ON;;;;;N;;;;; +31EF;IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION;So;0;ON;;;;;N;;;;; 31F0;KATAKANA LETTER SMALL KU;Lo;0;L;;;;;N;;;;; 31F1;KATAKANA LETTER SMALL SI;Lo;0;L;;;;;N;;;;; 31F2;KATAKANA LETTER SMALL SU;Lo;0;L;;;;;N;;;;; @@ -34035,6 +34040,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 2CEA1;;Lo;0;L;;;;;N;;;;; 2CEB0;;Lo;0;L;;;;;N;;;;; 2EBE0;;Lo;0;L;;;;;N;;;;; +2EBF0;;Lo;0;L;;;;;N;;;;; +2EE5D;;Lo;0;L;;;;;N;;;;; 2F800;CJK COMPATIBILITY IDEOGRAPH-2F800;Lo;0;L;4E3D;;;;N;;;;; 2F801;CJK COMPATIBILITY IDEOGRAPH-2F801;Lo;0;L;4E38;;;;N;;;;; 2F802;CJK COMPATIBILITY IDEOGRAPH-2F802;Lo;0;L;4E41;;;;N;;;;; diff --git a/contrib/unicode/from_glibc/utf8_gen.py b/contrib/unicode/from_glibc/utf8_gen.py index b48dc2aaa451..117c5a96526e 100755 --- a/contrib/unicode/from_glibc/utf8_gen.py +++ b/contrib/unicode/from_glibc/utf8_gen.py @@ -350,7 +350,7 @@ if __name__ == "__main__": # the EastAsianWidth.txt file. if re.match(r'.*\.\..*', LINE): continue - if re.match(r'^[^;]*;[WF]', LINE): + if re.match(r'^[^;]*;\s*[WF]\s*', LINE): EAST_ASIAN_WIDTH_LINES.append(LINE.strip()) with open(ARGS.prop_list_file, mode='r') as PROP_LIST_FILE: PROP_LIST_LINES = [] diff --git a/libcpp/generated_cpp_wcwidth.h b/libcpp/generated_cpp_wcwidth.h index 4931c65232e8..a77291256f22 100644 --- a/libcpp/generated_cpp_wcwidth.h +++ b/libcpp/generated_cpp_wcwidth.h @@ -1,5 +1,5 @@ /* Generated by contrib/unicode/gen_wcwidth.py, with the help of glibc's - utf8_gen.py, using version 15.0.0 of the Unicode standard. */ + utf8_gen.py, using version 15.1.0 of the Unicode standard. */ static const cppchar_t wcwidth_range_ends[] = { 0x2ff, 0x36f, 0x482, 0x489, 0x590, 0x5bd, 0x5be, 0x5bf, @@ -55,72 +55,72 @@ static const cppchar_t wcwidth_range_ends[] = { 0x2797, 0x27af, 0x27b0, 0x27be, 0x27bf, 0x2b1a, 0x2b1c, 0x2b4f, 0x2b50, 0x2b54, 0x2b55, 0x2cee, 0x2cf1, 0x2d7e, 0x2d7f, 0x2ddf, 0x2dff, 0x2e7f, 0x2e99, 0x2e9a, 0x2ef3, 0x2eff, 0x2fd5, 0x2fef, - 0x2ffb, 0x2fff, 0x3029, 0x302d, 0x303e, 0x3040, 0x3096, 0x3098, - 0x309a, 0x30ff, 0x3104, 0x312f, 0x3130, 0x318e, 0x318f, 0x31e3, - 0x31ef, 0x321e, 0x321f, 0xa48c, 0xa48f, 0xa4c6, 0xa66e, 0xa672, - 0xa673, 0xa67d, 0xa69d, 0xa69f, 0xa6ef, 0xa6f1, 0xa801, 0xa802, - 0xa805, 0xa806, 0xa80a, 0xa80b, 0xa824, 0xa826, 0xa82b, 0xa82c, - 0xa8c3, 0xa8c5, 0xa8df, 0xa8f1, 0xa8fe, 0xa8ff, 0xa925, 0xa92d, - 0xa946, 0xa951, 0xa95f, 0xa97c, 0xa97f, 0xa982, 0xa9b2, 0xa9b3, - 0xa9b5, 0xa9b9, 0xa9bb, 0xa9bd, 0xa9e4, 0xa9e5, 0xaa28, 0xaa2e, - 0xaa30, 0xaa32, 0xaa34, 0xaa36, 0xaa42, 0xaa43, 0xaa4b, 0xaa4c, - 0xaa7b, 0xaa7c, 0xaaaf, 0xaab0, 0xaab1, 0xaab4, 0xaab6, 0xaab8, - 0xaabd, 0xaabf, 0xaac0, 0xaac1, 0xaaeb, 0xaaed, 0xaaf5, 0xaaf6, - 0xabe4, 0xabe5, 0xabe7, 0xabe8, 0xabec, 0xabed, 0xabff, 0xd7a3, - 0xd7af, 0xd7c6, 0xd7ca, 0xd7fb, 0xf8ff, 0xfa6d, 0xfa6f, 0xfad9, - 0xfb1d, 0xfb1e, 0xfdff, 0xfe0f, 0xfe19, 0xfe1f, 0xfe2f, 0xfe52, - 0xfe53, 0xfe66, 0xfe67, 0xfe6b, 0xfefe, 0xfeff, 0xff00, 0xff60, - 0xffdf, 0xffe6, 0xfff8, 0xfffb, 0x101fc, 0x101fd, 0x102df, 0x102e0, - 0x10375, 0x1037a, 0x10a00, 0x10a03, 0x10a04, 0x10a06, 0x10a0b, 0x10a0f, - 0x10a37, 0x10a3a, 0x10a3e, 0x10a3f, 0x10ae4, 0x10ae6, 0x10d23, 0x10d27, - 0x10eaa, 0x10eac, 0x10efc, 0x10eff, 0x10f45, 0x10f50, 0x10f81, 0x10f85, - 0x11000, 0x11001, 0x11037, 0x11046, 0x1106f, 0x11070, 0x11072, 0x11074, - 0x1107e, 0x11081, 0x110b2, 0x110b6, 0x110b8, 0x110ba, 0x110c1, 0x110c2, - 0x110ff, 0x11102, 0x11126, 0x1112b, 0x1112c, 0x11134, 0x11172, 0x11173, - 0x1117f, 0x11181, 0x111b5, 0x111be, 0x111c8, 0x111cc, 0x111ce, 0x111cf, - 0x1122e, 0x11231, 0x11233, 0x11234, 0x11235, 0x11237, 0x1123d, 0x1123e, - 0x11240, 0x11241, 0x112de, 0x112df, 0x112e2, 0x112ea, 0x112ff, 0x11301, - 0x1133a, 0x1133c, 0x1133f, 0x11340, 0x11365, 0x1136c, 0x1136f, 0x11374, - 0x11437, 0x1143f, 0x11441, 0x11444, 0x11445, 0x11446, 0x1145d, 0x1145e, - 0x114b2, 0x114b8, 0x114b9, 0x114ba, 0x114be, 0x114c0, 0x114c1, 0x114c3, - 0x115b1, 0x115b5, 0x115bb, 0x115bd, 0x115be, 0x115c0, 0x115db, 0x115dd, - 0x11632, 0x1163a, 0x1163c, 0x1163d, 0x1163e, 0x11640, 0x116aa, 0x116ab, - 0x116ac, 0x116ad, 0x116af, 0x116b5, 0x116b6, 0x116b7, 0x1171c, 0x1171f, - 0x11721, 0x11725, 0x11726, 0x1172b, 0x1182e, 0x11837, 0x11838, 0x1183a, - 0x1193a, 0x1193c, 0x1193d, 0x1193e, 0x11942, 0x11943, 0x119d3, 0x119d7, - 0x119d9, 0x119db, 0x119df, 0x119e0, 0x11a00, 0x11a0a, 0x11a32, 0x11a38, - 0x11a3a, 0x11a3e, 0x11a46, 0x11a47, 0x11a50, 0x11a56, 0x11a58, 0x11a5b, - 0x11a89, 0x11a96, 0x11a97, 0x11a99, 0x11c2f, 0x11c36, 0x11c37, 0x11c3d, - 0x11c3e, 0x11c3f, 0x11c91, 0x11ca7, 0x11ca9, 0x11cb0, 0x11cb1, 0x11cb3, - 0x11cb4, 0x11cb6, 0x11d30, 0x11d36, 0x11d39, 0x11d3a, 0x11d3b, 0x11d3d, - 0x11d3e, 0x11d45, 0x11d46, 0x11d47, 0x11d8f, 0x11d91, 0x11d94, 0x11d95, - 0x11d96, 0x11d97, 0x11ef2, 0x11ef4, 0x11eff, 0x11f01, 0x11f35, 0x11f3a, - 0x11f3f, 0x11f40, 0x11f41, 0x11f42, 0x1342f, 0x13440, 0x13446, 0x13455, - 0x16aef, 0x16af4, 0x16b2f, 0x16b36, 0x16f4e, 0x16f4f, 0x16f8e, 0x16f92, - 0x16fdf, 0x16fe3, 0x16fe4, 0x16fef, 0x16ff1, 0x16fff, 0x187f7, 0x187ff, - 0x18cd5, 0x18cff, 0x18d08, 0x1afef, 0x1aff3, 0x1aff4, 0x1affb, 0x1affc, - 0x1affe, 0x1afff, 0x1b122, 0x1b131, 0x1b132, 0x1b14f, 0x1b152, 0x1b154, - 0x1b155, 0x1b163, 0x1b167, 0x1b16f, 0x1b2fb, 0x1bc9c, 0x1bc9e, 0x1bc9f, - 0x1bca3, 0x1ceff, 0x1cf2d, 0x1cf2f, 0x1cf46, 0x1d166, 0x1d169, 0x1d172, - 0x1d182, 0x1d184, 0x1d18b, 0x1d1a9, 0x1d1ad, 0x1d241, 0x1d244, 0x1d9ff, - 0x1da36, 0x1da3a, 0x1da6c, 0x1da74, 0x1da75, 0x1da83, 0x1da84, 0x1da9a, - 0x1da9f, 0x1daa0, 0x1daaf, 0x1dfff, 0x1e006, 0x1e007, 0x1e018, 0x1e01a, - 0x1e021, 0x1e022, 0x1e024, 0x1e025, 0x1e02a, 0x1e08e, 0x1e08f, 0x1e12f, - 0x1e136, 0x1e2ad, 0x1e2ae, 0x1e2eb, 0x1e2ef, 0x1e4eb, 0x1e4ef, 0x1e8cf, - 0x1e8d6, 0x1e943, 0x1e94a, 0x1f003, 0x1f004, 0x1f0ce, 0x1f0cf, 0x1f18d, - 0x1f18e, 0x1f190, 0x1f19a, 0x1f1ff, 0x1f202, 0x1f20f, 0x1f23b, 0x1f23f, - 0x1f248, 0x1f24f, 0x1f251, 0x1f25f, 0x1f265, 0x1f2ff, 0x1f320, 0x1f32c, - 0x1f335, 0x1f336, 0x1f37c, 0x1f37d, 0x1f393, 0x1f39f, 0x1f3ca, 0x1f3ce, - 0x1f3d3, 0x1f3df, 0x1f3f0, 0x1f3f3, 0x1f3f4, 0x1f3f7, 0x1f43e, 0x1f43f, - 0x1f440, 0x1f441, 0x1f4fc, 0x1f4fe, 0x1f53d, 0x1f54a, 0x1f54e, 0x1f54f, - 0x1f567, 0x1f579, 0x1f57a, 0x1f594, 0x1f596, 0x1f5a3, 0x1f5a4, 0x1f5fa, - 0x1f64f, 0x1f67f, 0x1f6c5, 0x1f6cb, 0x1f6cc, 0x1f6cf, 0x1f6d2, 0x1f6d4, - 0x1f6d7, 0x1f6db, 0x1f6df, 0x1f6ea, 0x1f6ec, 0x1f6f3, 0x1f6fc, 0x1f7df, - 0x1f7eb, 0x1f7ef, 0x1f7f0, 0x1f90b, 0x1f93a, 0x1f93b, 0x1f945, 0x1f946, - 0x1f9ff, 0x1fa6f, 0x1fa7c, 0x1fa7f, 0x1fa88, 0x1fa8f, 0x1fabd, 0x1fabe, - 0x1fac5, 0x1facd, 0x1fadb, 0x1fadf, 0x1fae8, 0x1faef, 0x1faf8, 0x1ffff, - 0x2a6df, 0x2a6ff, 0x2b739, 0x2b73f, 0x2b81d, 0x2b81f, 0x2cea1, 0x2ceaf, - 0x2ebe0, 0x2f7ff, 0x2fa1d, 0x2ffff, 0x3134a, 0x3134f, 0x323af, 0xe0000, + 0x3029, 0x302d, 0x303e, 0x3040, 0x3096, 0x3098, 0x309a, 0x30ff, + 0x3104, 0x312f, 0x3130, 0x318e, 0x318f, 0x31e3, 0x31ee, 0x321e, + 0x321f, 0xa48c, 0xa48f, 0xa4c6, 0xa66e, 0xa672, 0xa673, 0xa67d, + 0xa69d, 0xa69f, 0xa6ef, 0xa6f1, 0xa801, 0xa802, 0xa805, 0xa806, + 0xa80a, 0xa80b, 0xa824, 0xa826, 0xa82b, 0xa82c, 0xa8c3, 0xa8c5, + 0xa8df, 0xa8f1, 0xa8fe, 0xa8ff, 0xa925, 0xa92d, 0xa946, 0xa951, + 0xa95f, 0xa97c, 0xa97f, 0xa982, 0xa9b2, 0xa9b3, 0xa9b5, 0xa9b9, + 0xa9bb, 0xa9bd, 0xa9e4, 0xa9e5, 0xaa28, 0xaa2e, 0xaa30, 0xaa32, + 0xaa34, 0xaa36, 0xaa42, 0xaa43, 0xaa4b, 0xaa4c, 0xaa7b, 0xaa7c, + 0xaaaf, 0xaab0, 0xaab1, 0xaab4, 0xaab6, 0xaab8, 0xaabd, 0xaabf, + 0xaac0, 0xaac1, 0xaaeb, 0xaaed, 0xaaf5, 0xaaf6, 0xabe4, 0xabe5, + 0xabe7, 0xabe8, 0xabec, 0xabed, 0xabff, 0xd7a3, 0xd7af, 0xd7c6, + 0xd7ca, 0xd7fb, 0xf8ff, 0xfa6d, 0xfa6f, 0xfad9, 0xfb1d, 0xfb1e, + 0xfdff, 0xfe0f, 0xfe19, 0xfe1f, 0xfe2f, 0xfe52, 0xfe53, 0xfe66, + 0xfe67, 0xfe6b, 0xfefe, 0xfeff, 0xff00, 0xff60, 0xffdf, 0xffe6, + 0xfff8, 0xfffb, 0x101fc, 0x101fd, 0x102df, 0x102e0, 0x10375, 0x1037a, + 0x10a00, 0x10a03, 0x10a04, 0x10a06, 0x10a0b, 0x10a0f, 0x10a37, 0x10a3a, + 0x10a3e, 0x10a3f, 0x10ae4, 0x10ae6, 0x10d23, 0x10d27, 0x10eaa, 0x10eac, + 0x10efc, 0x10eff, 0x10f45, 0x10f50, 0x10f81, 0x10f85, 0x11000, 0x11001, + 0x11037, 0x11046, 0x1106f, 0x11070, 0x11072, 0x11074, 0x1107e, 0x11081, + 0x110b2, 0x110b6, 0x110b8, 0x110ba, 0x110c1, 0x110c2, 0x110ff, 0x11102, + 0x11126, 0x1112b, 0x1112c, 0x11134, 0x11172, 0x11173, 0x1117f, 0x11181, + 0x111b5, 0x111be, 0x111c8, 0x111cc, 0x111ce, 0x111cf, 0x1122e, 0x11231, + 0x11233, 0x11234, 0x11235, 0x11237, 0x1123d, 0x1123e, 0x11240, 0x11241, + 0x112de, 0x112df, 0x112e2, 0x112ea, 0x112ff, 0x11301, 0x1133a, 0x1133c, + 0x1133f, 0x11340, 0x11365, 0x1136c, 0x1136f, 0x11374, 0x11437, 0x1143f, + 0x11441, 0x11444, 0x11445, 0x11446, 0x1145d, 0x1145e, 0x114b2, 0x114b8, + 0x114b9, 0x114ba, 0x114be, 0x114c0, 0x114c1, 0x114c3, 0x115b1, 0x115b5, + 0x115bb, 0x115bd, 0x115be, 0x115c0, 0x115db, 0x115dd, 0x11632, 0x1163a, + 0x1163c, 0x1163d, 0x1163e, 0x11640, 0x116aa, 0x116ab, 0x116ac, 0x116ad, + 0x116af, 0x116b5, 0x116b6, 0x116b7, 0x1171c, 0x1171f, 0x11721, 0x11725, + 0x11726, 0x1172b, 0x1182e, 0x11837, 0x11838, 0x1183a, 0x1193a, 0x1193c, + 0x1193d, 0x1193e, 0x11942, 0x11943, 0x119d3, 0x119d7, 0x119d9, 0x119db, + 0x119df, 0x119e0, 0x11a00, 0x11a0a, 0x11a32, 0x11a38, 0x11a3a, 0x11a3e, + 0x11a46, 0x11a47, 0x11a50, 0x11a56, 0x11a58, 0x11a5b, 0x11a89, 0x11a96, + 0x11a97, 0x11a99, 0x11c2f, 0x11c36, 0x11c37, 0x11c3d, 0x11c3e, 0x11c3f, + 0x11c91, 0x11ca7, 0x11ca9, 0x11cb0, 0x11cb1, 0x11cb3, 0x11cb4, 0x11cb6, + 0x11d30, 0x11d36, 0x11d39, 0x11d3a, 0x11d3b, 0x11d3d, 0x11d3e, 0x11d45, + 0x11d46, 0x11d47, 0x11d8f, 0x11d91, 0x11d94, 0x11d95, 0x11d96, 0x11d97, + 0x11ef2, 0x11ef4, 0x11eff, 0x11f01, 0x11f35, 0x11f3a, 0x11f3f, 0x11f40, + 0x11f41, 0x11f42, 0x1342f, 0x13440, 0x13446, 0x13455, 0x16aef, 0x16af4, + 0x16b2f, 0x16b36, 0x16f4e, 0x16f4f, 0x16f8e, 0x16f92, 0x16fdf, 0x16fe3, + 0x16fe4, 0x16fef, 0x16ff1, 0x16fff, 0x187f7, 0x187ff, 0x18cd5, 0x18cff, + 0x18d08, 0x1afef, 0x1aff3, 0x1aff4, 0x1affb, 0x1affc, 0x1affe, 0x1afff, + 0x1b122, 0x1b131, 0x1b132, 0x1b14f, 0x1b152, 0x1b154, 0x1b155, 0x1b163, + 0x1b167, 0x1b16f, 0x1b2fb, 0x1bc9c, 0x1bc9e, 0x1bc9f, 0x1bca3, 0x1ceff, + 0x1cf2d, 0x1cf2f, 0x1cf46, 0x1d166, 0x1d169, 0x1d172, 0x1d182, 0x1d184, + 0x1d18b, 0x1d1a9, 0x1d1ad, 0x1d241, 0x1d244, 0x1d9ff, 0x1da36, 0x1da3a, + 0x1da6c, 0x1da74, 0x1da75, 0x1da83, 0x1da84, 0x1da9a, 0x1da9f, 0x1daa0, + 0x1daaf, 0x1dfff, 0x1e006, 0x1e007, 0x1e018, 0x1e01a, 0x1e021, 0x1e022, + 0x1e024, 0x1e025, 0x1e02a, 0x1e08e, 0x1e08f, 0x1e12f, 0x1e136, 0x1e2ad, + 0x1e2ae, 0x1e2eb, 0x1e2ef, 0x1e4eb, 0x1e4ef, 0x1e8cf, 0x1e8d6, 0x1e943, + 0x1e94a, 0x1f003, 0x1f004, 0x1f0ce, 0x1f0cf, 0x1f18d, 0x1f18e, 0x1f190, + 0x1f19a, 0x1f1ff, 0x1f202, 0x1f20f, 0x1f23b, 0x1f23f, 0x1f248, 0x1f24f, + 0x1f251, 0x1f25f, 0x1f265, 0x1f2ff, 0x1f320, 0x1f32c, 0x1f335, 0x1f336, + 0x1f37c, 0x1f37d, 0x1f393, 0x1f39f, 0x1f3ca, 0x1f3ce, 0x1f3d3, 0x1f3df, + 0x1f3f0, 0x1f3f3, 0x1f3f4, 0x1f3f7, 0x1f43e, 0x1f43f, 0x1f440, 0x1f441, + 0x1f4fc, 0x1f4fe, 0x1f53d, 0x1f54a, 0x1f54e, 0x1f54f, 0x1f567, 0x1f579, + 0x1f57a, 0x1f594, 0x1f596, 0x1f5a3, 0x1f5a4, 0x1f5fa, 0x1f64f, 0x1f67f, + 0x1f6c5, 0x1f6cb, 0x1f6cc, 0x1f6cf, 0x1f6d2, 0x1f6d4, 0x1f6d7, 0x1f6db, + 0x1f6df, 0x1f6ea, 0x1f6ec, 0x1f6f3, 0x1f6fc, 0x1f7df, 0x1f7eb, 0x1f7ef, + 0x1f7f0, 0x1f90b, 0x1f93a, 0x1f93b, 0x1f945, 0x1f946, 0x1f9ff, 0x1fa6f, + 0x1fa7c, 0x1fa7f, 0x1fa88, 0x1fa8f, 0x1fabd, 0x1fabe, 0x1fac5, 0x1facd, + 0x1fadb, 0x1fadf, 0x1fae8, 0x1faef, 0x1faf8, 0x1ffff, 0x2a6df, 0x2a6ff, + 0x2b739, 0x2b73f, 0x2b81d, 0x2b81f, 0x2cea1, 0x2ceaf, 0x2ebe0, 0x2ebef, + 0x2ee5d, 0x2f7ff, 0x2fa1d, 0x2ffff, 0x3134a, 0x3134f, 0x323af, 0xe0000, 0xe0001, 0xe001f, 0xe007f, 0xe00ff, 0xe01ef, }; @@ -142,12 +142,12 @@ static const unsigned char wcwidth_widths[] = { 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, - 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 2, 1, 2, 1, - 0, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, - 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 0, 1, 0, + 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 2, 1, 2, 0, 2, 1, 2, 1, 0, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, - 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 0, 1, 0, 1, 2, 1, 2, - 1, 0, 1, 0, 2, 1, 0, 2, 1, 2, 1, 2, 1, 0, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 0, 1, 0, 1, 2, 1, 2, 1, 0, + 1, 0, 2, 1, 0, 2, 1, 2, 1, 2, 1, 0, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, @@ -156,11 +156,11 @@ static const unsigned char wcwidth_widths[] = { 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, - 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 0, 1, 2, 1, 2, 1, - 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 1, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 0, 1, 2, 1, 2, 1, 2, 1, + 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, + 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, diff --git a/libcpp/makeucnid.cc b/libcpp/makeucnid.cc index 66d31a83640d..5ce17b7f7809 100644 --- a/libcpp/makeucnid.cc +++ b/libcpp/makeucnid.cc @@ -467,7 +467,7 @@ write_copyright (void) .\n\ \n\ \n\ - Copyright (C) 1991-2022 Unicode, Inc. All rights reserved.\n\ + Copyright (C) 1991-2023 Unicode, Inc. All rights reserved.\n\ Distributed under the Terms of Use in\n\ http://www.unicode.org/copyright.html.\n\ \n\ diff --git a/libcpp/makeuname2c.cc b/libcpp/makeuname2c.cc index 16d544d49949..d064558d83fa 100644 --- a/libcpp/makeuname2c.cc +++ b/libcpp/makeuname2c.cc @@ -69,7 +69,7 @@ struct entry { const char *name; unsigned long codepoint; }; static struct entry *entries; static unsigned long num_allocated, num_entries; -/* Unicode 15 Table 4-8. */ +/* Unicode 15.1 Table 4-8. */ struct generated { const char *prefix; /* max_high is a workaround for UnicodeData.txt inconsistencies @@ -87,6 +87,7 @@ static struct generated generated_ranges[] = { "CJK UNIFIED IDEOGRAPH-", 0x2b740, 0x2b81d, 0, 1, 0 }, { "CJK UNIFIED IDEOGRAPH-", 0x2b820, 0x2cea1, 0, 1, 0 }, { "CJK UNIFIED IDEOGRAPH-", 0x2ceb0, 0x2ebe0, 0, 1, 0 }, + { "CJK UNIFIED IDEOGRAPH-", 0x2ebf0, 0x2ee5d, 0, 1, 0 }, { "CJK UNIFIED IDEOGRAPH-", 0x30000, 0x3134a, 0, 1, 0 }, { "CJK UNIFIED IDEOGRAPH-", 0x31350, 0x323af, 0, 1, 0 }, { "TANGUT IDEOGRAPH-", 0x17000, 0x187f7, 0, 2, 0 }, @@ -669,7 +670,7 @@ write_copyright (void) .\n\ \n\ \n\ - Copyright (C) 1991-2022 Unicode, Inc. All rights reserved.\n\ + Copyright (C) 1991-2023 Unicode, Inc. All rights reserved.\n\ Distributed under the Terms of Use in\n\ http://www.unicode.org/copyright.html.\n\ \n\ diff --git a/libcpp/ucnid.h b/libcpp/ucnid.h index dcf6c76440fb..cde9fcfa9af8 100644 --- a/libcpp/ucnid.h +++ b/libcpp/ucnid.h @@ -16,7 +16,7 @@ . - Copyright (C) 1991-2022 Unicode, Inc. All rights reserved. + Copyright (C) 1991-2023 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in http://www.unicode.org/copyright.html. @@ -1379,7 +1379,8 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0| 0| 0|CID|NFC| 0| 0, 0, 0x1ffe }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1fff }, { 0| 0| 0| 0| 0| 0| 0|CID| 0| 0| 0, 0, 0x200a }, -{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x200d }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x200b }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x200d }, { 0| 0| 0| 0| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2029 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x202e }, { 0| 0| 0| 0| 0| 0| 0|CID|NFC| 0| 0, 0, 0x203e }, @@ -1625,7 +1626,7 @@ static const struct ucnrange ucnranges[] = { { C99| 0|CXX|C11| 0|CXX23| 0| 0|NFC|NKC| 0, 0, 0x30f4 }, { C99| 0|CXX|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x30f6 }, { 0| 0|CXX|C11| 0|CXX23| 0| 0|NFC|NKC| 0, 0, 0x30fa }, -{ C99| 0|CXX|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x30fb }, +{ C99| 0|CXX|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x30fb }, { C99| 0|CXX|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x30fc }, { 0| 0|CXX|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x30fd }, { 0| 0|CXX|C11| 0|CXX23| 0| 0|NFC|NKC| 0, 0, 0x30fe }, @@ -1906,7 +1907,8 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC| 0| 0, 0, 0xff3f }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC| 0| 0, 0, 0xff40 }, { 0| 0|CXX|C11| 0|CXX23| 0|CID|NFC| 0| 0, 0, 0xff5a }, -{ 0| 0| 0|C11| 0| 0| 0|CID|NFC| 0| 0, 0, 0xff65 }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC| 0| 0, 0, 0xff64 }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC| 0| 0, 0, 0xff65 }, { 0| 0|CXX|C11| 0|CXX23| 0|CID|NFC| 0| 0, 0, 0xff9d }, { 0| 0|CXX|C11| 0|CXX23|NXX23|CID|NFC| 0| 0, 0, 0xff9f }, { 0| 0|CXX|C11| 0|CXX23| 0|CID|NFC| 0| 0, 0, 0xffbe }, @@ -2786,6 +2788,8 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2cea1 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2ceaf }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2ebe0 }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2ebef }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2ee5d }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2f7ff }, { 0| 0| 0|C11| 0|CXX23| 0| 0| 0| 0| 0, 0, 0x2fa1d }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2fffd }, diff --git a/libcpp/uname2c.h b/libcpp/uname2c.h index 6a1ed9b3f4ab..821996cf50ee 100644 --- a/libcpp/uname2c.h +++ b/libcpp/uname2c.h @@ -16,7 +16,7 @@ . - Copyright (C) 1991-2022 Unicode, Inc. All rights reserved. + Copyright (C) 1991-2023 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in http://www.unicode.org/copyright.html. @@ -52,7 +52,7 @@ use or other dealings in these Data Files or Software without prior written authorization of the copyright holder. */ -static const char uname2c_dict[59891] = +static const char uname2c_dict[59919] = "DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BARUIGHUR KIRGHIZ " "YEH WITH HAMZA ABOVE WITH ALEF MAKSURA LANTED EQUAL ABOVE GREATER-THAN ABOVE " "SLANTED EQUAL WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVELANTED EQUAL A" @@ -237,752 +237,753 @@ static const char uname2c_dict[59891] = "TEFT OPEN BOX OPERATOREFT-POINTING TRIANGLEEIGHT SPOKED ASTERISKELATIONAL COM" "POSITIONEQUAL TO OR LESS-THANER RIGHT CORNER ANGLEFINAL CONSONANT SIGN FLATTE" "NED PARENTHESISGHT OPEN BOX OPERATORGRAMMOS OKTO DODEKATAGRUENT WITH DOT ABOV" -"EHALF TRIANGULAR COLONHAND INTERIOR PRODUCTHOCKEY STICK AND PUCKHORIZONTAL TA" -"BULATIONHOUSAND MILLIONS SIGNINTERSECTING LOGICAL INTERSECTION OPERATORINVERT" -"ED BRIDGE BELOWINVERTED GLOTTAL STOPLATTENED OPEN A ABOVELESS-THAN OR EQUAL T" -"OLETTER SMALL CAPITAL MALE WITH STROKE SIGNMIDDLE RING LITTLE ONMORPHOLOGICAL" -" DIVIDERND TELEPHONE RECEIVERNTISTRY SYMBOL LIGHT OCAL NOTATION SYMBOL-OHAMMA" -"D ISOLATED FORMOP SHADED WHITE ARROWOPPOSING AN PLUS NAGAPAP PLUS PAP PLUS LU" -"3QUADRANT CIRCULAR ARCRATING SYSTEM COMMANDRELICT HOUSE BUILDINGREVERSED FEAT" -"HER MARKRISING DIAGONAL SLASHSH AMPERSAND ORNAMENTSHORT LEFTWARDS ARROWSIDE T" -"O SIDE SCISSORSTEEN POINTED ASTERISKTHICK LETTER SELECTORTILDE OPERATOR ABOVE" -" TOUCHING INSIDE MOUTHTRIANGULAR HALF BLOCKVERTICAL LINE OVERLAYVERY HEAVY BA" -"RB ARROWVOICED ITERATION MARKWITH INVERTED V ABOVEWO-CIRCLE ALTERNATE IWO-CIR" -"CLE NUKTA ABOVEXTRA SHORT VOWEL MARKYIG MGO TSHEG SHAD MA ABOVE LEFT TRIANGLE" -" AND DIAGONAL STROKE BEGIN LOGOGRAM MARK OVER LAGAR GUNU SHE OVER TUR ZA OVER" -" ZA WITH HORIZONTAL BAR79 OVER LAK-079 GUNUA- SHOG GI MGO RGYANAND NORTH EAST" -" ARROWAND NORTH WEST ARROWAND SOUTH EAST ARROWAND SOUTH WEST ARROWANGE ANTIRE" -"STRICTIONARXIS KAI FTHORA VOUBETWEEN PALM FACINGSBSET OF NOR EQUAL TOCENTRE V" -"ERTICAL LINECHARACTER INTRODUCERCHEMICAL SYMBOL FOR CONSONANT SIGN HAARUCRESC" -"ENT MOON SYMBOLCURRENCY SYMBOL RIELCURVED ANGLE BRACKETDOTLESS HEAD OF KHAHDO" -"UBLE ANGLE BRACKETDOUBLE DOT TONE MARKDOWN ARROWHEAD BELOWE CONSONANT MODIFIE" -"RE POINTED WHITE STAREMESTVENNY ZADERZHKAENARMONIOS ANTIFONIAEVERSED ROTATED " -"RANAFINAL CONSONANT MARKFIVE SPOKED ASTERISKFORMS LIGHT VERTICALFOUR RAISED K" -"NUCKLESGHTWARDS ARROW BELOWGRA GCAN -CHAR RTAGSHALF CIRCLE WITH DOTHAR2 TIMES" -" GAL PLUS HIGH RATHA OR LOW PAHIGH TONE APOSTROPHEHREE-DOT NUKTA ABOVEIMAGE O" -"F OR EQUAL TOINDEX RING LITTLE ONINING OBLIQUE STROKEINSIDE MOUTH RELAXEDINVE" -"RSE WHITE CIRCLEINVERTED CANDRABINDUIRCLES HITTING WALL JUDEO-SPANISH VARIKAK" -"HAMTI REDUPLICATIONL FUNCTIONAL SYMBOL LASHING SWEAT SYMBOLLATALIZED HOOK BEL" -"OWLE WITH POPPING CORKLEFT AND LOWER RIGHTLEFT-TO-RIGHT SECANTMULTIPLE PUNCTU" -"ATIONNIS RACQUET AND BALLONCAVE-SIDED DIAMONDONE MARK SGAW KAREN OTLESS J WIT" -"H STROKEOVER LEFTWARDS ARROWPLUS GISH TIMES TAK4POTABLE WATER SYMBOLREAN STAN" -"DARD SYMBOLREVERSED ONE HUNDREDRIGHT ANGLE WITH DOTRIGHT QUADRANT BLACKRIGHT " -"U-SHAPED ARROWRUMAI PALAUNG TONE-5SCRIPTION CHARACTER SEPARATOR KEY SYMBOLSEP" -"ARATOR MIDDLE DOTSIDEWAYS NOON GHUNNASTAR WITH MIDDLE DOTTHROUGH SMALL CIRCLE" -"TRANSPOSITION MARKERUBHAANAHU WA TAAALAAUP-POINTING TRIANGLEVAL WITH OVAL INS" -"IDEWARE-FUNCTION SYMBOLWET CULTIVATION SIGNWITH FOUR DOTS ABOVEWITH SOROCHYA " -"NOZHKAWORD REPETITION MARKYIG MGO PHUR SHAD MAYRENAIC TWO DRACHMAS AND PROSGE" -"GRAMMENI AND RETROFLEX HOOK FLUTTERING IN WIND IN A RECTANGLE BOX KASKAL U GU" -"NU DISH LOVE YOU HAND SIGN WITH STRIKETHROUGH WITH VERTICAL TAILA END LOGOGRA" -"M MARKAHU ALAYHI WA-AALIHALTERNATE LAKH MARKANS-SERIF CAPITAL LANSPOSITION BR" -"ACKETARABIC FORM SHAPINGARENTHESIS NOTEHEADARTIAL DIFFERENTIALATED TELLER MAC" -"HINEBETWEEN MIDDLE RINGC DIGRAPH WITH CURLCIRCLED SANS-SERIF CIRCLED WHITE AR" -"ROWD CIRCUMFLEX ACCENTDENOMINATOR SIXTEENDOWN AND HORIZONTALDOWN POINTING IND" -"EXET WITH WHITE CROSSEVEN POWERS OF FOURFIVE FINGERS SPREADFLOORPLANE TWISTIN" -"GFT-POINTING FLEURONGAPPED CIRCLE ARROWGIBBOUS MOON SYMBOLHAND COVERING MOUTH" -"HEAD-SHAPED POINTERHORT STROKE OVERLAYHURISAZ THURS THORNIGATURE AYIN-DALETHI" -"LDING CONSTRUCTIONIMIDIA SEXTULA SIGNIN CHEN SPUNGS SHADING SHIRT WITH SASHIN" -"GLE DOT TONE MARKINSIDE CIRCLE BELOWISPUTED END OF AYAHITED LIABILITY SIGNKUL" -"L AND CROSSBONESLEADING MCHAN RTAGSLEFT POINTING INDEXLEFT TO LOWER RIGHTLEFT" -" U-SHAPED ARROWLF MADDA OVER MADDALUB-SPOKED ASTERISKMOVES AGAINST CHEEKMSHEL" -"L MOBILE PHONENAXIAN FIVE HUNDREDNDRED POINTS SYMBOLNE HUNDRED TWENTY PNETWOR" -"KED COMPUTERSNOGRAPHIC FULL STOPNORTH ARROW WITH HOOP SEMICIRCLE ARROWOTATED " -"ARDHAVISARGAOVER E NUN OVER NUNOW-9 QUOTATION MARKPARAGRAPH SEPARATORPREFIXED" -" NASAL SIGNQUADRUPLE CRESCENTSQUESTION MARK ABOVERAILING MCHAN RTAGSRATUM SUP" -"ER STRATUMREE-QUARTER CIRCLE RIGHT MIDDLE STROKERIGHT TO LOWER LEFTRROW NO-BR" -"EAK SPACERY CULTIVATION SIGNSEQUENCE INTRODUCERSEVEN EIGHTHS BLOCKSH PLUS HU " -"PLUS ASHSLANTED NORTH ARROWSTRAIGHT THUMB BENTSTRATIAN FIFTY MNASSYMBOL FOR B" -"EGINNERTART OF RUB EL HIZBTHANG LONG ANUSVARATIGHTLY-CLOSED EYESTO LOWER RIGH" -"T FILLTRANNO MALO POVYSHETURNED PADA PISELEHTURNED SECTION MARKTWENTY-FIVE DE" -"GREESUBLE DOT WITHIN DOTUP HORIZONTAL HEAVYUP HORIZONTAL LIGHTURRENCY SYMBOL " -"BAHTVARIANT FORM ILIMMUVARIANT WITH SQUAREVARIATION INDICATORVASTNESS OR WAST" -"INGVERSAL INTERSECTIONVERSE FINAL BARLINEVERTICAL TABULATIONWITH YEH FINAL FO" -"RMWOMEN HOLDING HANDS AND NO DOTS ABOVE AND SMASH PRODUCT AND YPOGEGRAMMENI F" -"OR SIMALUNGUN SA NOT LITTER SYMBOL OVER INVERTED SHU SPREAD THUMB SIDE THUMB " -"INDEX THUMB WITH CIRCLE ABOVE WITH CIRCLE BELOW WITH CROSSED-TAIL WITH FLOWIN" -"G SAND WITH KAVYKA ABOVEABBREVIATION MARK AND LOW RIGHT RINGARROW SHAFT WIDTH" -" ASTED SWEET POTATOASTROLOGICAL SIGN ATERRESTRIAL ALIENATIN SMALL LETTER BAAR" -"AKA WA-TAAALAABASELINE ROUND DOTBOTTOM RIGHT KASRACANTILLATION SIGN CONTINUIN" -"G OVERLAPCOPPER ANTIMONIATECTLY EQUIVALENT TOCUP WITHOUT HANDLEDOUBLE PUNCTUA" -"TIONDOWN-OUTPUT SYMBOLEAST POINTING LEAFENTERING TONE MARKENTY-TWO POINT TWOE" -"PIGRAPHIC LETTER ERTICAL BAR VIRAMAEVENTEEN FULL STOPEVERSED CHELYUSTKAFIVE E" -"IGHTHS BLOCKFORKED PARAGRAPHOSFORTY-FIVE DEGREESGATIVE ACKNOWLEDGEGGLY VERTIC" -"AL LINEGISH CROSSING GISHHAIS LUS NTOG NTOGHILOSOPHERS SULFURHOLDING BACK TEA" -"RSHORIZONTALLY BELOWHOUSANDS SEPARATORHUNDREDS UNIT MARKIGATURE ZAYIN-YODHIGS" -"AW PUZZLE PIECEIN POSSESSION SIGNINDEPENDENT VOWEL IRROR HORIZONTALLYITAN SMA" -"LL SCRIPT IX SPOKED ASTERISKJEEM ISOLATED FORMKANTAJA NAASIKYAYAKBAR ISOLATED" -" FORMKOREAN CHARACTER OLEFT MIDDLE STROKELEFT-STEM TONE BARLOSED CIRCLE ARROW" -"LOWER MIDDLE RIGHTMATHEMATICAL SPACENINETEEN FULL STOPNISH VERSE DIVIDERNITE " -"PART INTEGRALNORMAL SUBGROUP OFNYET THYOOM TA-ROLNYOOGA NAAKSIKYAYAORK ON THE" -" DECAYEDOTLESS DALATH RISHOU ALAYHE WASALLAMOUCHTONE TELEPHONEOW TONE APOSTRO" -"PHEPACING CANDRABINDUPERFIXED LETTER RAPUNCTUATION BINDU QUARTER NOTE STEM RI" -"ST CIRCLE FRONT RYUKOVAYA SVETLAYAS INSIDE AND ABOVES PRESSED TOGETHERSEPTUPL" -"E CRESCENTSSET OVER BUILDINGSSHAN REDUPLICATIONSINGLE PUNCTUATIONSMALL CIRCLE" -" ABOVESMALL RED TRIANGLESOUL ISOLATED FORMSYMMETRIC SWAPPINGTILTING FROM WAIS" -"TTO LOWER LEFT FILLTOP U-SHAPED ARROWTROFLEX HOOK BELOWTYPE A ELECTRONICSU-SH" -"APED ORNAMENTSUM WITH DRUMSTICKSUP ARROWHEAD BELOWUPPER MIDDLE RIGHTUTLINED B" -"LACK STARVARIANT FORM LIMMUVERY SMALL DIAMONDWEST POINTING LEAFWHITE VERTICAL" -" BARWITH JUSTIFICATIONWITH STROKE SYMBOLYLLABLE LENGTHENERYPTIAN HIEROGLYPH " -"ALTERNATION MARK AND PALATAL HOOK GRAVEYARD SYMBOL LAGAB TIMES ASH2 LAGAR OVE" -"R LAGAR OVER ZU PLUS SAR PLUS SHA3 PLUS A TO BLACK DIAMOND WITH BULLET NOSE W" -"ITH SOUND WAVES WITH TILDE ABOVE-GAAHLAA TTUDDAAG-HEIGHT LEFT HOOK0 WHEELED C" -"HARIOTA PLUS HA PLUS DAABBREVIATION SIGNAEUM ONE PLETHRONALTERNATE NUMBER AMB" -"DA WITH STROKEAMPHYLIAN DIGAMMAAND BLACK SQUARESAPLI DYO DODEKATAASTERN PWO K" -"AREN ATHERING TOGETHERAUKAZ LAGU LOGR LBE WITH MERIDIANSBERBER ACADEMY YABOTT" -"OM HALF BLACKBRACKET EXTENSIONBRIGHTNESS SYMBOLBUT RELIEVED FACECAL SYMBOL BO" -"TTOMCANCELLATION MARKCANDRABINDU ABOVECIRCLES WITH DOTSCLOSED LITTLE YUSCOMBI" -"NING NUMBER CONSONANT SIGN PACONTINUATION SIGNCONTOURED OUTLINECROSS PUNCTUAT" -"IONCTION APPLICATIONDELPHIC FIVE MNASDENTAL PERCUSSIVEEAR SCREEN SYMBOLEMICOL" -"ON UNDERBARFACING BABY CHICKFINGER-POST ARROWFLICK ALTERNATINGFRACTION ONE HA" -"LFFROM SMALL CIRCLEGENERIC MATERIALSGREATER-THAN NOR GREATER-THAN SIGNHAH ISO" -"LATED FORMHEART-SHAPED EYESHIRTEEN FULL STOPHORIZONTAL DOUBLEHORIZONTAL SINGL" -"EIASTRE MARK ABOVEICTED LEFT ENTRY-IDEOGRAPHIC COMMAIGHTEEN FULL STOPINEAR AN" -"NOTATION ING POLE AND FISHINITIAL LETTER RAINVERTED MCHU CANKE BOTTLE AND CUP" -"KHAH INITIAL FORMLAGOLITIC LETTER LAH ISOLATED FORMLAPPING LESS-THANLD PERMIC" -" LETTER LHOUETTE OF JAPANLIAN HIEROGLYPH AMALL WHITE CIRCLEMANENT PAPER SIGNM" -"EDIUM BARB ARROWMEEM INITIAL FORMMILITARY AIRPLANENASALIZATION MARKNAUDIZ NYD" -" NAUD NNE EYEBROW RAISEDNEGATIVE CIRCLED NFORMATION SOURCENG STROKE OVERLAYON" -"E EIGHTH BLOCK-OPEN-HEADED ARROWOURTEEN FULL STOPOWER NUMERAL SIGNPINWHEEL AS" -"TERISKPRECEDING SOLIDUSPRESSIONLESS FACEPRIZNAK MODIFIER PUNCTUATION SIGN QUA" -"T REVERSED ESHREATIONAL VEHICLERIATION SELECTOR-RIGHT HALF CIRCLERYBLION BASE" -" SIGNS REVOLVING LIGHTSERVER EYE SYMBOLSIGN O WITH CROSSSQUARED TIMES KURSTRA" -"IGHT MOVEMENTTAN ISOLATED FORMTARTING FROM SIGNTEN THOUSAND SIGNTERSYLLABIC T" -"SHEGTHREE SOUND WAVESTIAL ARTS UNIFORMTONAL RANGE MARK TRIPLE DASH ARROWULAR " -"MEDIUM SHADEUP AND HORIZONTALUP POINTING INDEXURNED COMMA ABOVEURNED DAMMA BE" -"LOWVARIANT FORM ASH9VARIANT FORM IMINVARIANT FORM USSUVEE WITH UNDERBARVERAGE" -" WITH SLASHVERY SMALL SQUAREVOCALIZATION MARKVRE TOURNOIS SIGNWHITE PARENTHES" -"ISWHITE SHOGI PIECEWITH NOT EQUAL TOWO VERTICAL DOTS Y ON BLACK SQUAREYEH ISO" -"LATED FORM AND HEAVY RIGHT AND LIGHT RIGHT CAPPED MOUNTAIN INSERTION POINT LI" -"GHT MOON ARTA OR THE IMAGE OF PLUS KAK PLUS A SMALL ROTATIONS TIMES DISH TENU" -" TIMES GAN2 TENU WITH BUNNY EARS WITH DOT INSIDE WITH HEADSTROKEADIAN SYLLABI" -"CS AFFRICATION MARKANABAZAR SQUARE ARENTHESES ABOVEB2 TENU PLUS TABBOLD GREEK" -" CROSSBOTTOM HALF RINGCASIAN ALBANIAN CH WITH UMBRELLACOMPRESSED ARROWCONSONA" -"NT JOINERCORNER DOWNWARDSCORNER LEFTWARDSCREAMING IN FEARDEWAYS U BRACKETDITO" -"RIAL CORONISDOTTED CRESCENTSDOUBLE CRESCENTSDOUBLE DOT ABOVEDOUBLE HEAD MARKD" -"OUBLE TURNSTILEDOUBLE ZAPYATAYADOWN RIGHT BARB DVUMYA ZAPYATYMIE PLUS GAN2 TE" -"NUECIMAL SEPARATOREFORE COMPLETIONEN MILLIONS SIGNEND OF TEXT MARKENTRE WHITE" -" STARENUMERATION SIGNEPSILON UNDERBARERCURY SUBLIMATEEVERSED VISARGA EVERY OT" -"HER TIMEFALLING DIAGONALFFERENCE BETWEENFLOORPLANE SPACEHIGH SPACING DOTHMATU" -"LLAH ALAYHEHOLDING TOGETHERHYPHENATION MARKIDED GREEK CROSSIFTEEN FULL STOPIG" -"HTH NOTE STEM IMENSIONAL ANGLEINDEPENDENT SHININDEX THUMB SIDEINES CONVERGING" -" IPPER-MOUTH FACEIRCLE X NOTEHEADISTOS DISC SIGN IVE POINTED STARK PERMITTED " -"HERELD ASSYRIAN ONE LEFT ARROW ABOVELEFT HALF CIRCLELIGHT AND RIGHT LIGHT BAR" -"B ARROWLLOW PAN OF FOODLOWER OVER UPPERLTERNATE HASANTAMAGNIFYING GLASSMESTVE" -"NNY KLYUCHMIDDLE AND BELOWMIDDLE AND RIGHTNAL DIGIT SHAPESNION WITH SERIFSNTA" -"IGANA LETTER O-MINOAN SIGN CMOLD TAMIL VIRAMAOLD WHITE CIRCLEORIZONTAL JOINER" -"PEN CENTRE CROSSPLACEHOLDER MARKPLE MEASURE RESTPOSTPOSITION MENPRECEDING SUB" -"SETPRECHGESANG STEMQ WITH HOOK TAILQUALS SIGN BELOWR PLUS GAN2 TENURAIDO RAD " -"REID RRAYS AND DOTTED RECORD SEPARATORREPETITION MARK-RESH-AYIN-DALETHRIGHT D" -"OWN BARB RIGHT HALF BELOWRIGHT HALF BLACKRISING TONE MARKRIZONTAL ELLIPSESANS" -"-SERIF ARROWSERIFS AT BOTTOMSHU2 PLUS KASKALSIGN RISING TONESITION INDICATORS" -"LANTED EQUAL TOSMALL CAPITAL ELSMALL NOON ABOVESTERISK OPERATORSTICKING OUT F" -"ARSTRAIGHT STRETCHSTRING FRETBOARDSTUCK-OUT TONGUETAKANA-HIRAGANA TRIPLE CRES" -"CENTSUBJOINED LETTER UDLY CRYING FACEULDERED OPEN BOXUMBER SIGN ABOVEUP MIDDL" -"E HINGEDUP-OUTPUT SYMBOLUPERSCRIPT ALAPHUPPER OVER LOWERVARIANT FORM ESHVERY " -"HEAVY SHAFTVIEWING CEREMONYVOWEL LENGTHENERWALLED ENCLOSUREWAVY HAMZA BELOWWI" -"TH CENTRED DOTWITH HEARING AIDWITH LEFT UPTURNYATHOS BASE SIGNYIR MKPARAQ MEU" -"N ALTERNATE FORM AND BOTTOM END AND LOWER LEFT CLOUD AND RAIN CORNER BRACKET " -"DEYTEROU ICHOU NEPOSTOYANNAYA OPERATOR WITH OVER MOUNTAINS OVER SIG4 SHU2 PA" -"RESTIGMENON PLUS HI PLUS A THROUGH CIRCLE THUMB STRAIGHT TIMES IGI GUNU TOUC" -"HING INDEX WITH DESCENDER WITH DIAERESIS WITH RIGHT LEG-CARRIER LETTER-NO-EVI" -"L MONKEY-PIECE SWIMSUIT2 CHARIOT FRAMEACHES THE LIMITAI LAING DIGIT ALAYHE AS" -"SALLAMALIF LENGTHENERALMOST EQUAL TOAMARITAN SOURCEAMOUNT OF CHECKAND PARALLE" -"L TOATA LINK ESCAPEATINATE MYSLITEBAR ABOVE UNIONBELGTHOR SYMBOLBELOW LONG DA" -"SHBENT OVER INDEXBINDING BRACKETBLOCK DIAGONAL BREAKING HYPHENBROWS STRAIGHT " -"CAPITAL LETTERSCIRCUIT-OUTPUT CKET CALCULATORCLOSED BY CURVECORNER WITH DOTDA" -"GESH OR MAPIQDESCENDING TONEDI ALLAHOU ANHUDIALYTIKA TONOSDIGA AELA-PILLADOIN" -"G CARTWHEELDOUBLE TRIANGLEDOWN SEQUENTIALDOWNWARDS TRENDE ISOLATED FORME MUSI" -"CAL NOTESE OVER INFINITYEFT REPEAT SIGNEH INITIAL FORMERICAN FOOTBALLESIDE LE" -"SS-THANESSARON CHRONONETIC VERSE SIGNEXPONENT SYMBOLFIVE-LIKE BHALEFORWARD TI" -"LTINGFOUR DOTS WITH FOUR ENCLOSURESFRACTION DIGIT FTER COMPLETIONGEMINATION M" -"ARKGGLY LINE BELOWGHT REPEAT SIGNGROUP SEPARATORHAKING PARALLELHALF FILL SPAC" -"EHEH MEDIAL FORMHOOKED INDEX UPHORIZONTAL DASHHORIZONTAL FILLHOUSAND STATERSH" -"REE DOTS BELOWIAMOND UNDERBARIDING ENCLOSUREIGN PALI VIRAMAIMISEOS CHRONOUIMP" -"ERFECTA RESTING SYMBOL FOR INGLE HEAD MARKINUS SIGN BELOWINVERTED LAZY SINVER" -"TED STROKEIRCUMFLEX BELOWITH FINGERNAILSIZED WHEELCHAIRKISIM5 TIMES BIKTOVIK " -"NUMERAL LATION FUNCTIONLD TAMIL SHORT LEFT DOWN BARB LEFT HALF BELOWLEFT HALF" -" BLACKLEFT HAND INDEXLETTER CAPITAL LEVEL TONE MARKLEVEN FULL STOPLIGHT AND L" -"EFT LMOST EQUAL TO LONG HOOK BELOWLONG VOWEL SIGNLOOK OF TRIUMPHLOSED INSULAR" -" GMALAKON CHROMA MARRYING MAIDENMEEM FINAL FORMMIDDLE DIAGONALMURDA MAHAPRANA" -"N-ARY SUMMATIONNA DOUBLE HELIXNASALIZED TONE-ND OF PARAGRAPHNJOINING MACRONNO" -" GOOD GESTURENOON FINAL FORMNOON WITH KASRANOT APPROXIMATENVERTED UBADAMAODIF" -"IER DAMAGEDODO SOFT HYPHENOGOGRAM KHAMTI OLIDUS OPERATORON TOP OF MODEMOND PL" -"ACE MEDALONJOINED HINGEDONTOUR INTEGRALORIZONTAL COLONORT EQUALS SIGNOUBLE BA" -"CKSLASHOW-FALLING TONEOWER HALF BLACKPEN SQUARED DOTPENSION RAILWAYPERTHO PEO" -"RTH PPLUS SIGN BELOWPRISHTHAMATRA EPUT SYMBOL FOR QUADRUPLE ARROWQUADRUPLE DA" -"SH R WITH FISHHOOKREAMY EYEBROWS RECEPTIVE EARTHRECITATIVE MARKREVERSE SOLIDU" -"SREVERSED OPEN ERIGHT HALF RINGRIGHT RERENGGANRIGHTWARDS AND RIGHTWARDS TICKR" -"MAN PENNY SIGNRNAMENT STROKE-S ELEVATUS MARKS IN SILHOUETTESALTER PAHLAVI SHI" -"TA PLUS GISHSHORT OVER LONGSIXTEENTH NOTESSSICAL BUILDINGST QUARTER MOONST SY" -"RIAC CROSSSTERESIS SYMBOLSTROKE NOT SIGNTAI LAING TONE-THREE DISH TENUTHROWIN" -"G A KISSTILDE DIAERESISTIP ON THE LEFTTOP RIGHT FATHATRIANGULAR MARKTVIMADUR " -"SYMBOLTWO WITH STROKEU PLUS U PLUS UUBLE RING BELOWUGMENTATION DOTULTIPLICATI" -"ON XUMAI PALAUNG FAUR POINTED STARUSTER NOTEHEAD VERTICAL SECANTVOWEL SEPARAT" -"ORVOWEL SHORTENERWALLPLANE SPACEWHITE DOT RIGHTWITH DOWN ARROWWITH RAIN DROPS" -"XTEEN FULL STOPYNCHRONOUS IDLEZAIN FINAL FORMZERO WITH SLASH AND DIAERESIS CR" -"OSSING ESH2 HASER FOR VAV WITH BACK YER WITH LONG LEG-CURRENCY SIGN1 OVER LAK" -"-081AFETY SCISSORSAI LENGTH MARKALF TREE TRUNKALLAJALALOUHOUAMNUC PII KUUHAND" -" COLD SWEATANGLE OPENING AROUND-PROFILEAU LENGTH MARKBAG MEMBERSHIPBHATTIPROL" -"U AABLACK TRIANGLEBLADE SCISSORSCENTURIAL SIGNCEPTER OF JOVECERTAINTY SIGNCOL" -"ON OPERATORCRIFICIAL WINED-UP NEWSPAPERDASIA PNEUMATADEYTEROS ICHOSDI ALLAAHU" -" ANHDIAGONAL MOUTHDIAGONAL PATH DIO MICROPHONEDIRECTION FLIPDOES NOT EXISTDOU" -"BLE-STRUCK DUN3 GUNU GUNUED SYMBOL FOR EMIVOWEL SIGN END OF SECTIONENDED MULT" -"IMAPENNA WITH BARSEPENTHETIC YUTERIAL ARAMAIC ERIC INDICATORERTICAL JOINEREXC" -"LAMATION OHEXTENDED BHALEFATHATAN ABOVEFFED FLATBREADFFICE BUILDINGFINAL ANUS" -"VARAFORWARD INDEX GERED TREMOLO-GHT WITH STARSGUNU TIMES ASHGYPTOLOGICAL AHES" -"IVE BANDAGEHIRD-STAGE HLIHREE-LEGGED TEIGHTWARDS VANEIKHAYA PUTNAYAINFINITY B" -"ELOWING HANDS SIGNINOLOGICAL DOTINSERTION SIGNINVERTED BIRGAINVERTED DAMMAIRC" -"ULAR VIRAMAISED ROUND DOTISSION TICKETSITA PLUS GISH IVE KEY SYMBOLIVE OBOLS " -"SIGNIWAZ TIR TYR TJOINED SQUARESLACE OF SAJDAHLEFTWARDS AND LEFTWARDS TICKLES" -"S-THAN NOR LETTER OVERLAPLEVEN TWELFTHSLIGHTLY SMALL LINE EXTENSIONLITTLE SEC" -"TIONLOTUS POSITIONLOWER DIAGONALMEDIUM DIAMONDMENSION ORIGINMID-LEVEL TONEMOT" -"HETIC ABOVEMRACHNOTIKHAYANORTH ARABIAN NYI ZLA NAA DAOBLIQUE HYPHENOLD RESOLU" -"TIONONE SOUND WAVEOOTNOTE MARKEROPPOSING PIRIGORANGE DIAMONDORD SEPARATOR OSI" -"TION SYMBOLOT TILDE ABOVEOTHERS CIRCLEDOUR OBOLS SIGNOUSING THUNDEROVER GUD L" -"UGALPAO KAREN TONEPARATED SYMBOLPARTMENT STOREPEN MARK BELOWPLE WITH HEARTPLE" -"TE INFINITYPLITTING APARTPPED MIDDLE UPPROTECTED AREAQUINARIUS SIGNRD PLACE M" -"EDALREATIVE HEAVENREE-LINE STAFFREH FINAL FORMREVERSED-SCHWARIGHT CROSSBARRIN" -"G MEGAPHONEROSS ON SHIELDSECOND SUBUNITSEL LOCOMOTIVESEPARATOR MARKSHAN MEDIA" -"L WASHESHIG TIMES SIDE-DOWN FACESMALL LETTER DSMALL LETTER JSMALL TRIANGLESMO" -"KING SYMBOLSPEECH BUBBLESSQUIGGLE ARROWSTRONG ISOLATESURROUND FROM TELPIECE C" -"LOCKTERMINAL MARK-TETARTOS ICHOSTHAKA ANUDATTATHALAN ETHEL OTHER CHRISTMASTHO" -"USANDS MARKTHOUSANDS SIGNTHREE POINTED TIMES OPERATORTIMES SHU TENUTOP HALF B" -"LACKTRANSMIT STATETRIANGLE WITH TURKIC LETTER TWO DOT LEADERTWO ENCLOSURESTWO" -" WHITE DOTSUAL WHEELCHAIRUBHAYATO MUKHAUND MARK ABOVEUNDER RELATIONUNION OPER" -"ATORUNIT SEPARATORUP RIGHT BARB UPPED INDEX UPUSPENSION MARKVENIENCE STOREVER" -"TICAL ABOVEVERTICAL COLONVERTICAL HEAVYVERTICAL LIGHTVONIC ASTERISKVRON SNOWF" -"LAKEWITH DOT BELOWWITH FATHATAN WITH LEFT HOOKWORD SEPARATORXO EKFONITIKONYOU" -"THFUL FOLLYZAH WITH MEEM ZAKAYA LANTERN AND SKI BOOT AND YEN SIGN B BAR SYMBO" -"L BAT AND BALL BZHI MIG CAN CROSSING KA2 DIMINUTION-1 DIRECTIONAL HEADED ARR" -"OW OF THE HORNS OPPOSING KUR TIMES KASKAL VARIANT FORM WITH INK PEN WITH JEGO" -"GAN WITH OVERBAR WITH TEE TOP WITHOUT SNOW-ESASA DOTTED-OFF CALENDAR-OR-PLUS " -"SIGN-PER-EM SPACEACCOMMODATIONALL LOST SIGNAMUHU ALAYNAAAN RUPEE SIGNANNED LE" -"ATHERAPPED PRESENTAR WITH QUILLARCHAIC KOPPAARGOSYNTHETONARLAUG SYMBOLARRED T" -"RIDENTARROW OVERLAYAUDATE CHRIVIAWELLEMET YAZBACKSLASH BARBALL AND HOOPBASAN " -"LETTER BOHAIRIC KHEIBOTTOM CORNERBOWING DEEPLYBY DEFINITIONCHECKER BOARDCHRYS" -"ANTHEMUMCIRCLE INSIDECITATION MARKCRIPTION TAKECRIPTIONAL PACROSSING GABACROS" -"SING GAN2CROSSING MUSHCULATED LORRYDIAERESIZED UDIC MARK SIGNDOTTED ZLAMA DOU" -"BLE CIRCLEDOUBLE HYPHENDOUBLE MUCAADDOUBLE STROKEDVOECHELNAYA EAVENLY EARTHED" -" PAPERCLIPSEDIC ANUSVARAEELING PERSONEHU FEOH FE FEMPHATIC TONEER BOARD FILLE" -"RTION SYMBOLEUROPE-AFRICAEVERSED DAMMAFICATION CARDFINAL LETTER FINAL SEMKATH" -"FIXED-FORM RAFOREMENTIONEDFROWNING FACEFT ARROWHEAD FULL SURROUNDGAR FRACTION" -" GAW KAREN SHAGIFT ENVELOPEGTER TSHEG MAGYA GRAM SHADH-TYPE SYMBOLHAKASSIAN C" -"HEHAM DIGIT ONEHERICAL ANGLEHIEROGLYPHIC HINESE TONE YHREE TWELFTHSI WITH STR" -"OKEIDE LOST SIGNIFI ROHINGYA IGHT TWELFTHSILABIAL CLICKILE SEPARATORIMAGE BRA" -"CKETINTEREST SIGNINVERTED FORKINVERTED TURNIOT SYLLABLE IRCLED INDEX ISH LIRA" -" SIGNITING THROUGHIVE POINT ONEIVE SLOW SIGNJES SU NGA ROK WORK SYMBOLKAPYEOU" -"NPIEUPL-TYPE SYMBOLLATERAL CLICKLEFT CROSSBARLEGETOS ICHOSLISION SYMBOLLOCATI" -"ON SIGNLOCK WITH KEYLOSING SPIRALLVE FULL STOPLVEOLAR CLICKMAILBOX WITH MALL " -"LETTER ZMALO POVYSHE MARKS CHAPTERMASORA CIRCLEMEDIUM SQUAREMELODIC QITSAMESS" -"ENIAN TENMINDER RIBBONMINUS SIMILARMINUS WHITE XMOBILE PHONESMODIFIER MARKMUL" -"TIOCULAR ONAP PIZZICATONG TERMINATORNINE TWELFTHSNING MOVEMENTNTY FULL STOPNU" -"MERATOR ONENUMERIC SIGN OBLIQUE LINE OGOTYPE SIGN OLVING HEARTSOMAN NUMERAL O" -"NAL COMPUTERONG RIGHT LEGONG-LEGGED DEONGRATULATIONOON NOTEHEAD OPPOSING NAGA" -"OTEHEAD BLACKOURTH SUBUNITOUT MIDDLE UPPA NJI PIPAEMPAIRED ARROWSPLUS OPERATO" -"RPPOSING LUGALPREPONDERANCEQUARTERS SIGNRACKETS ABOVERANKS CASKET RIGHT HARPO" -"ONRIPLE SVARITARIZONTAL TAILRN PENTATHLONROTATED BIRGARPENTRY PLANERRIAGE RET" -"URNRTABLE STEREOS KAI APOTHESS KRYZHEM ON S UP TOGETHERSAL PLUS TUG2SAMYOK SA" -"NNYASELECTED AREASHESH PLUS KISIA-AUSTRALIASIGN AVAGRAHASIGN PAMUDPODSILI PNE" -"UMATASMALL LETTERSSSAGE WAITINGSTABLE SYMBOLSTERTIUS SIGNSYNDESMOS NEOTE ORDE" -"R MARKTED HAND SIGNTHIRD SUBUNITTIRTA TUMETESTOP HALF RINGTU WAS-SALAAMU WITH" -" STROKEUDDISA SIRRAHUE OF LIBERTYUFFLE PRODUCTUPERIMPOSED XUPONDIUS SIGNUPSIL" -"ON WITH UPWARDS TRENDURNED W BELOWUSHING UPWARDUSICAL LEIMMAVE-LINE STAFFVEN " -"POINT ONEVERGREEN TREEVERLAY MIDDLEVERTICAL BARSVERTICAL FILLVICE CONTROL VOW" -"EL SIGN PAW RING INSIDEWAVY LOW LINEWAVY OVERLINEWAW-AYIN-RESHWITH ASTERISKWI" -"TH INTEGRALWO-LINE STAFFYMBOL TAU RHOYOD YOD PATAHYUUKALEAPINTUZHOU NUMERAL " -"AND PICTURE AND TOP END CROSSING GU IN TRIANGLE KLYUCHEVAYA LINE SYMBOL OF AN" -"TIMONY ON PEDESTAL OVER KISIM5 OVER MIDDLE OVER TWO PI SKEWED LEFT WITH DAGES" -"H WITH INDEX WITH UPTURN-DZUD RTAGS -MAIL SYMBOL-SHAPED SIGN-SIMPLIFIED 6 LO" -"NG NGGOOAA AS-SALAAMACE INTEGRALACUTE ACCENTAFU LEERAEWAALLPOINT PENALT PAN S" -"IGNALTERNATING AND CRESCENTAND OPERATORANG KHANG GYAR DIAERESISARALLELOGRAMAT" -"NAH HAFUKHATTOOED HEADBACK OF HANDBAHIRGOMUKHABEHIND CLOUDBETWEEN LIPSBINING " -"MARK BLACK CIRCLEBLOWING FACEBLUE DIAMONDBRATION MODEBRIDGE ABOVEBSCRIPT ALEF" -"BUTTON MOUSEBYSMAL WATERCABBAGE-TREECALENDAR PADCENDING NODECHAIR SYMBOLCIAN " -"LETTER CIRCLED PLUSCIRCLES AND CK-O-LANTERNCRESCENT BARCROSSING GI4CROSSING K" -"ALCROSSING LU2CROSSING NUNDASHED ARROWDE MARK SIGNDENTAL CLICKDICTION SIGNDIG" -"RAPH KOTODIGRAPH YORIDOT OPERATORDOUBLE ARCH DOUBLE ARROWDOWN HARPOONDOWN NEU" -"TRALDUG TIMES NIEAGULL BELOWEEPING SMALLEIGHTH NOTESEMELY HEAVY EMISOFT SIGNE" -"NARIUS SIGNENOS CHRONOUERPENDICULARETRETES SIGNEVERING FACEFALLING DOTSFEMINI" -"NE DOTFERENCE MARKFLAG ON POSTFOLDED HANDSFORMING ARTSFOUNTAIN PENFT RERENGGA" -"NGAW KAREN EUGBY FOOTBALLGEBA KAREN IGREEN DRAGONGROUND SLIDEGUARDED AREAHAH " -"WITH DALHALF BRACKETHAND FORMAT HASIS SYMBOLHEAD-BANDAGEHIBITED SIGNHREE FING" -"ERSHYPHEN-MINUSIDENTICAL TOIGATURE SHRIILLED CIRCLEIN MIDDLE UPINDEX MIDDLEIN" -"G ENVELOPEING HAND FANING HITTING ING OPERATORINTEGRATION INUSOID SIGNINVERTE" -"BRATEIRAGANA HOKAIRTY-SECOND IVE TWELFTHSKANA REPEAT KAPPA SYMBOLKHAMTI TONE-" -"KHMIMIC KHEILAM WITH YEHLARGE DOUBLELARGE TRIPLELATALIZATIONLAYING CARDSLEADI" -"NG EYESLEFT HARPOONLER CONSTANTLICKING LIPSLIMBS DIGITSLINGING FIRELINKING MA" -"RKLL MODIFIER-LLE PATTERN LOWER CORNERLOWERED FLAGLU PLUS ESH2LUS NOTEHEADM N" -"SHUT NYAMMADDA ABOVE MALL SECTIONMANNAZ MAN MMBELLISHMENTMEDARY CAMELMEDIUM S" -"HAFTMETA STAVROUMIDDLE PIECEMING TO MEETMONOGRAPH UKMPHASIS MARKMPTY CENTRE M" -"UM TIMES PAN ELEMENT OFNARROW SHAFTNATURAL SIGNNCK CONSTANTNDING PERSONNEPOST" -"OYANNYNERSHIP SIGNNGLE BARLINENJALA GONDI NORTHERN TSENOTCHED HOOKNOTCHED TAI" -"LNUITY SYMBOLOGOGRAM NYAJOHAZARD SIGNOID NOTEHEADOING TO MEETOK HAND SIGNON U" -"S SYMBOLONISHED FACEOPENING LEFTOPLE HUGGINGOPPOSING LU2OQ NSHUT YUMOTTOM HAL" -"F OOUCHES THUMBOUGHT BUBBLEOUR TWELFTHSPHEME JOINERPOETRY MARK-PORT CONTROLPO" -"UTING FACEPROTOS ICHOSQUARED ARROWQUARTER SIGNQUIRREL TAILRAFFIC LIGHTRAH BEN" -" YOMORANCHING OUTRCHAIC SAMPIREFACE COLONREN CROSSINGREVERSE MARKRIAGE SYMBOL" -"RIAL TRAMWAYRIGHT DOUBLERIGHT SINGLERING OVERLAYRION CHRONONRISTMAS TREERNAM " -"BCAD MAROLLING EYESROUNDED ZEROS ABOVE SIGNS SUBPUNCTISSAZ IS ISS ISECTION SI" -"GNSH ZIDA TENUSHED BARLINESHORT RIKRIKSMALL DOUBLESMALL TRIPLESMILING FACESS-" -"THAN SIGNSUR OVER SURT MONGKEUAEQTE SEPARATORTEARS OF JOYTERNATE AYINTHETA SY" -"MBOLTHIC LETTER THODOX CROSSTHREE HEARTSTOP-LIGHTED TRAGRAM FOR TRIPLE DANDAT" -"RIPLE FLAMEUBSCRIPT TWOUGHT BALLOONUH PLUS GISHULL NOTEHEADUME INTEGRALUN WIT" -"H RAYSUPPER CORNERUSEATED FACEUTH ARABIAN UTH-SLAVEY KVAKRAHASANYAVER EQUAL T" -"OVICTORY HANDVOLTAGE SIGNWDATA SQUAREWIGGLY FENCEWITH SMALL VXIRON KLASMAYAN " -"NUMERAL YMBOL BINDU YOD TRIANGLEYOUTHFULNESS AND MACRON DECORATION I ZAPYATOY" -" OF FLOWERS OF FORTUNE OVER BULUG OVER IDIM PLUS MASH2 PLUS NUNUZ PROPORTION" -" S ZAPYATOY SHOE STILE TACK BELOW TIMES ESH2 UPPER HALF WITH CARON WITH COMMA" -" WITH DASIA WITH FLASH WITH JACKS WITH MAPIQ WITH PLATE WITH TITLO WITH TRILL" -" WRIST FLEX-COPPER ORE-MINUS SIGN-OFF SYMBOL0 FOOTSTOOL3 LONG NGGO5 LONG MBOO" -"6 LONG NGGEACKED COMMAACTIVE SIGNACUTE-GRAVEAESCULAPIUSAESHAE NYAMAGAZ DAEG D" -"AGONAL SIGNAILLESS PHIAMUSED FACEARAM GONDI ARM SPIRAL ARMS RAISEDARPEGGIATO " -"ASE TO THE ATH PRODUCTATION POINTATION SPACEAWNING FACEBANK SYMBOLBELOW RIGHT" -"BETA SYMBOLBLACK ARROWBOTTOM MARKBREVE BELOWBUMPY ABOVEBZHI -KHYILCAN RGYINGS" -"CARET TILDECCUMULATIONCE OF PIZZACELANDIC-YRCH AND LAMPCHING CHICKCK SEXTANT-" -"COMBINATIONCOND SCREENCONTAIN AS CREDIT SIGNCROSSING BUCROSSING ENCROSSING IM" -"CROSSING PICROSSING URCTION MARK CTION MARK-CURVED BENDDALETH-RESHDASH SYMBOL" -"DE KIKAKUI DENT EMBLEMDESK PERSONDIATONON DIDOACHASHMEEDOLLAR SIGNDONG TSHUGS" -"DOUBLE AND DOUBLE MARKDOUBLE RINGDOUBLE SHADDUATION CAPDYO CHRONONE WITH VEIL" -"E2 TIMES ANEAVER DENE EDICAL MASKEEZING FACEEN STRAIGHTENG DIGRAPHENTHESIZED " -"EORGIAN NAREPIDAUREAN ERCENT SIGNESH DIGRAPHETEI MAYEK EUNJOMNDEUQFGHANI SIGN" -"FINAL SIGMAFIRE ENGINEFOURTH ROOTGAP FILLER-GAYANUKITTAGE AT NIGHTGENTLE WIND" -"GHAIN WITH GRAMMA SIGNGRAVE-ACUTEGSUM -KHYILGUISED FACEHAGGAR YAZHHANG KHUDAM" -"HAWH HMONG HEATED FACEHEAVEN MARKHEELED SHOEHIGH STROKEHITE DRAGONHLETIC SHOE" -"HOKHLOM ON HORA DIGIT HREE BALUDAI TIMES BADI TIMES NUNIBLE-CREE YIEN MONSTER" -"IL FRAGMENTILCROW SIGNILIQUA SIGNIMULTANEOUSIN EQUAL TOINDERGARTENINDICESIMA " -"IPLE TONGUEIRCLED TEXTISIGOTHIC ZIVERY TRUCKIX TWELFTHSJECT SYMBOLJIHVAMULIYA" -"JOYOUS LAKEKAARA POLLUKRAINIAN IEKTIESELSKABL OF THREADL TIMES LALLACK SULFUR" -"LACKLETTER LATIN CROSSLCE TSA CANLD POLISH OLD SCRIPT XLEAF CLOVERLEEP SYMBOL" -"LEFT DOUBLELEFT SINGLELEFT SYMBOLLETION MARKLEU SATANGALINE FILLERLON SKEWED " -"LOSED ENTRYLOSING MARKLOTI NAGRI LT OF CLOTHLTED FLOWERLTERNATE AALTERNATE YA" -"LU PLUS IGILUPOVODNAYAMACING FACEMBA BAYANNAMBLER GLASSME LONG CANMED RGYINGS" -"MFON PIPAEMMICAL HEARTMIDDLE BENTMIDDLE HOOKMIDDLE STEMMONOCULAR OMOVED BELOW" -"MUNCIA SIGNMUUSIKATOANN THE VERGENBLENDED UKND ODD SIGNND OF PIECENG LEFT LEG" -"NIKOLSBURG NITIAL IZHENSE CHEEKS NTIMONY ORENUMBER SIGNNUMBER ZERONUN HAFUKHA" -"NUSVARA ONENYIS -KHYILOF ENVELOPEOF MASHFAATOHINGYA YEHOLD NUBIAN OMAN SIYAQ " -"ONIAN SIGN OPPOSING ENOPPOSING IMOR OPERATORORCE SYMBOLORT BARLINEOUBLE ACUTE" -"OUBLE DANDAOUNDED FACEOUTHERN TSEOVERSTRUCK PARAKALESMAPERISPOMENIPHNAEK MUAN" -"PODCHASHIEMPOST OFFICEPUT MORTUUMQUERED FLAGQUIQUADRATERA SOMPENG RACHMA SIGN" -"RADITIONAL RAISED FLAGRANSMISSIONRCHAIC JNYAREAKTHROUGHRESPONDS TORIGHT GUARD" -"RIGHT HEAVYRIGHT-HAND RING LIQUIDRIPLE PRIMERISING DOTSRITING HANDROKUTASTI A" -"RONTHISMATAROR-BARRED ROSS ACCENTRPOON ABOVERUNNING MANRYVNIA SIGNSECOND MARK" -"SHAAYATHIYASHEQEL SIGNSIMILE SIGNSINGLE AND SMALL CLOUDSPEED TRAINSPIRATED FA" -"SSANGKIYEOKSTEAMY ROOMSTERED SIGNSTORIC SITESVASTI SIGNSYMBOL VIDJSYURA SASAK" -"TA EQUAL TOTENS DIGIT TETRAFONIASTH-THALATHATHAM DIGIT THIRDS SIGNTHREE TIMES" -"TIEE SHEUOQTIGHT ACUTETONAL MARK TRAIGHT WAWTRESS SIGN TRESVETLAYATRIAN CAMEL" -"TRUNCATED ATUNE COOKIETWO FINGERSTY THOUSANDUBLE TONGUEUETTE BREADUG RTAGS GY" -"UISHED FACEULO TWO SUMUMAN FIGUREUNIT DIGIT UNJO WYNN WUPADHMANIYAURRENT SIGN" -"USHING HANDUTH CORNERSUTING WHALEVA V CHELNUVAMAGOMUKHAVARYS ICHOSVE OF PEACE" -"VISARGA ONEVYKA ABOVE WASLA ABOVEWE PALAUNG WHITE JOKERWING NEEDLEWINKING EYE" -"WITH GARDENWO TWELFTHSXAGRAM FOR XESTES SIGNXI RADICAL XTINGUISHERYEORINHIEUH" -"ZERO THIRDSZIGZAG LINEZZA WA JALL AND ACUTE AND ARROW AND BREVE AND KNIFE AND" -" MOUSE DRAWINGS KABA TENU LATE FORM OF DHARMA OVER KAD5 PLUS SHU2 POVODNAYA " -"RESUPINUS RGYA GRAM SCHROEDER THOUSANDS TIMES SHE WITH BASE WITH BELT WITH EG" -"GS WITH LOW WITH PAGE WITH PLUS WITH RAIN WITH RING WITH TAIL WITH TICK-LUE " -"KARAN-SHAPED HA1 LONG MBE1 PLASTICS2 LONG MBO2 PLASTICS2 PLUS ASH3 PLASTICS4 " -"PLASTICS5 PLASTICS6 PLASTICS7 PLASTICSA PLUS IGIA PLUS KURA TANG LAIAB2 TIMES" -" ABATA TREEACE FILLERADAK BINDIADDA WITH AEDA-PILLAAILED BIRDAKKHANGYAOALEF L" -"AMEDALEF WITH ALENT SIGNALLY MARK ANDHI MARKANGKHANKHUANGULAR TOAR ECLIPSEASP" -"IRATIONASTERISCUSATRICHISMAATTY WITH AUTOMOBILEAYER BEADSBA SATANGABELOW LEFT" -"BLACK FLAGBLUE HEARTBOLD SHAFTBROKEN BARBSTRUCTIONC WITH DOTCAPITAL ETCH BALL" -"OONCHAD RTAGSCHARACTER-CHECK MARKCIRCLED CACISIVENESSCOLATE BARCOMPONENT COMP" -"ONENT-CROPHONIC CROSS MARKCURLED WAWCURLY HAIRCY MESSAGED KEYBOARDD WITH DOTD" -"A PLUS HADA SATANGADED PERSONDIATONIKI DIGIT ZERODIRGA MUREDOUBLE BARDUOUS TR" -"EEE PLUS SUMEARLY FORMEARTH MARKEBENSTIMMEED FIGURE-ED FINGERSEDESTRIANSEEKIN" -"G EYEEICH STARKEIGHTIETHSELT BUCKLEENETRATIONENS SYMBOLENTHUSIASMEONGCHIEUMEQ" -"UIHOPPERETTA-PILLAEUTRAL YEREVERSED PEF SHE-GOATFAHRENHEITFFICULTIESFINAL HET" -"HFOR RECORDFORMATTINGFRONT WALLFTOGGOS OUG MUNDARI GAGE CLAIMGANDA MARKGAS BZ" -"UNG GBAKURUNENGGING FACEGGRAVATIONGHT LIFTERGIMEL-HETHGOLUBCHIK GREE SLASHGUA" -" PI MAOHAAPRAANA HAMZA MARKHAN DIGIT HEAVY BEATHERMOMETERHOOK ABOVEHOTIC HOOK" -"HREE ABOVEHUNGARIAN I ARCHAIONICAL TAPERICK FIGUREIDDLE MARKIDEOGRAPH IED SHR" -"IMPIGATING RAIGATURE OEIKRON ISONILE FOLDERINDEX BENTINDU BELOWING LARGE ING-" -"SHIFT INHERENT AINITIAL RAION BOTTLEISMUTH OREIT MBAAKETITH DIGIT IXTHS DISHJ" -"ONG TILE K2 PLUS BUKA SATANGAKAI SYMBOLKINDI MVOPKRYZHEVAYALACK JOKERLANE MER" -"GELE LETTER LE-DELAYEDLEFT GUARDLEFT HEAVYLEFT LIGHTLEFT SERIFLEFT-HAND LEK A" -"TTAK LENDED YUSLET SYMBOLLGIZ EOLHXLHAG RTAGSLIGHT BEATLIGHT BULBLIMITATIONLI" -"NDRICITYLLOW HEARTLOGICAL ORLONG FINALLONG OVER LONG TSHEGLOWER HOOKLPAPRAANA" -" LTERNATE ULTIC CROSSM STALLIONMADDA MARKMALL ALEPHME PLUS ENMEEM ABOVEMEL SY" -"MBOLMILLE SIGNMINO TILE MONOFONIASMONOGRAM BMONOSPACE MONTH SIGNMOTORCYCLEN N" -"GGEUAETNAKE BELOWNANGMONTHONASPIRATEDNDA PA NJINDU TEMPLENGLICANA WNGUAGE TAG" -"NOTE WITH NTITY MARKNTO SHRINENUMBER TENOANDAKHIATOF HYGIEIAOLING FACEOLON EQ" -"UALOMMA BELOWON MEDIAL OON LILITHOON SELENAOP NKAARAEOPEN SHELFOROME SIGNORTH" -"ERN TAOSSED SHEIOSTAL MARKOTING STAROUND OMEGAOUR FIFTHSOUT INDEX OUTER JOINO" -"UTHERN TAPASSIMBANGPEDAL MARKPLUS BELOWPLUS ERIN2PLUS NAGA POLICE CARPOUND SI" -"GNPPOPOTAMUSPRALINEAR QUISH QUADR2 PLUS SURAGGISMATARCHAIC KHARDHACANDRARECIP" -"ITATERED DRAGONRESH BELOWREVERSED IRGE CIRCLERGE SQUARERHO SYMBOLRIGHT HOOKRI" -"GHT SIGNRING ABOVERING THUMBRKING FACEROAD OMEGAROEZENIAN ROUND DOT ROUNDED E" -"RRSI SYMBOLRUDIMENTA RUPEE MARKSBUB -CHALSCAN LINE-SE-CREE SKSELINE ESHSGOR R" -"TAGSSHARP SIGNSHMIRI YEHSIDEWAYS ISIXTEENTHSSMALL TAH SMILO SIGNSPACE MARKSS " -"OF MILKSSANGARAEASSANGPIEUPST PALETTEST-FEEDINGSTRAL SIGNSTROM SIGNSTRUCTION " -"SYLLABLE MT AND BOLTTAIL GLASSTAMAN SIGNTEMPLATIONTERNATIVE TESE CROSSTHAPASC" -"AN THDAY CAKETHMIKON N TIMES SIGNTING HEARTTOP CORNERTREFACTIONTRESS AND TRET" -"CHED CTWENTIETHSTWO SHORTSTWO THIRDSTYPE COLONU CIN HAU U2 PLUS BAUAM TSHOOJU" -"ARDEDNESSUBLE DASH UM ROTUNDAUMAN EARTHUNKIA SIGNUP HARPOONUP NEUTRALUP OR DO" -"WNUPPER HOOKUR CORNERSUR HUNDREDUR YIG MGOURIPIGMENTURVED OMETUSEL HORSEUTH O" -"R SPYVEL SLIDERVERAGE BOXVIE CAMERAVIOUS PAGEW OR MODELWHITE FLAGWHITE HAIRWH" -"OLE NOTEWING HEARTWITH SPOONWITH STRAWWITH WINGSWO SHORTS XED BICEPSXHEEJ CEE" -"VY AND RICEYEH BARREEYMBOL AIVAZAR AMULETZEIRO SIGNZH DIGRAPHZU OVER ZU AND B" -"ELT AND CURL AND TAIL APODEXIA DIVIDERS FROM BAR GARSHUNI OF BLOOD OF PAPER O" -"VER BAL OVER LUM PLUS GAL PLUS GUD PLUS KU3 PLUS LAL PLUS SAG PLUS TUR PLUS Z" -"A7 RA OR RI RICKSHAW SPARKLER STREAMER TIMES HA TIMES UD TROMIKON-AMMONIAC-KH" -"YUD PA-LOW TONE-MID TONE-STACCATO0 LONG LE1 CHARIOT2 GARMENT247 DIPTE3 PLUS A" -"N5 BATHTUB5 CYPERUS5 LONG JOA PLUS NAABOVE TO ACE NOTE ADEG ADEGADMA GDANAF P" -"ERSONAFFE FACEAINTBRUSHAISED DOTAJANYALANAL RUNOUTALAYALAM ALI GALI ALPAPRANA" -"ANEROSIS ANG CITI ANGGEUAETANSKRIT SANTAYALANANTHAKHATAOS ICHOSARCHAIC MARIST" -"ERA ARM CLOCKAS MEMBERATHAMASATATTACHED AVE ARROWB DIGRAPHBASE UNITBEER MUGSB" -"IAL SIGNBICYCLISTBING CANEBITE LIPSBKHASIAN BO BAIMAIBO GYFU GBOTH BENTBRUL S" -"HADCANG TE-UCAPITAL DCAPITAL ICAPITAL QCARTRIDGECHANICAL CHAVIYANICHOSEONG CL" -"OSED PLCOIN SIGNCOMPLETEDCONJOINERCORN FACECRESCENDOCUBE ROOTCULTATIOND SALTI" -"REDAD WITH DENT AND DEPARTUREDOWN HANDDOWN SIGNDOWN STEPDRAM SIGNDUS RTAGSE A" -"T LEFTEAVY DOWNEBIT SIGNED DIGIT ED PLANETEEN WITH EFAIDRIN EFORMED TEIGHT OF" -" ELEGRAPH ELLOWSHIPEMBEDDINGEMPTY SETENTRY SAWER BUBBLEERCIAL ATERTY LINEES A" -"KURU ESAME DOTETER SIGNETRASIMOUETTI BALLEURO SIGNFACING UPFEH WITH FINAL MEM" -"FINAL NGAFINAL NUNFISH TAILFLAT SIGNFOUR BENTFROM WALLG IN HOLEGITTARIUSGREAT" -"ER YGRIK SIGNHAIKSUKI HALF NOTEHALF SIGNHALSHELETHARACTERSHARD SIGNHEADSCARFH" -"I SYMBOLHIMA SIMAHINOCEROSHIYYAALAAHOOK MARKHOT SASAKHREE FOR HWAZ EH EI PLUS" -" LIIA SYMBOLIALECT-P ICE CREAMIDEOGRAM IDEWAYS UIGH HAMZAIGHTH ASHIGN NUKTAIG" -"N SAFHAIGN TOMPIILE TILDEILIPPINE IN SQUAREINAL NOTEINARBORASING CARD ING DOL" -"LSING GLOVEING LANESING STONEINISHMENTINNYIIYHEIRST MARKISEN-ISENITRA SIGNIVE" -"-PULL-IVINATIONJERUSALEMK GESTUREKA- SHOG KAMEYTSA KEMPHRENGKING BOOTKSTREPTO" -"NKU RU KHAKYO TOWERL ME HANDLACKFOOT LAN SIGN LARGEMENTLEFT RINGLEFT TACKLIGH" -"TNINGLINE FACELISSANDO LITTLE UPLIVERANCELLABLE B0LLABLE OMLOND HAIRLONG TIP " -"LOWER DOTLVIN SIGNM HE-GOATMAEMGBIEEMALL RINGMARK CIM MARK SHADMBROIDERYMETOB" -"ELUSMHANCHOLLMRACHNAYAMUKPHRENGNA KHONNANCLOSING NDAILING NFORZANDONG SANDALN" -"GER ROOTNGER SHIPNGUN SIGNNIGGAHITANIGHT OF NIHSHVASANING SIGNNO TELEIANSERT " -"AT NTERPRISENTESSENCENTRACTIONNUSVARAYANVERTED ROCCLUSIONODIASTOLEOF STIMMEOK" -"ED HEADOKED TAILOKOUFISMAOM SYMBOLON GROUNDON TEUAEQONE MARK-ONE THIRDONG GRA" -"VEONGSEONG OO DENNENOP HALF OORT-TWIG-ORTH WINDOTAL SIGNOURA SIGNOUT MOUTHOUT" -"H WINDOVER GAN2OVER MUSHOW KAVYKAP DIGRAPHP ELAMITEPAA-PILLAPADE SUITPANYANGG" -"APENT SIGNPENTASEMEPIDERY HAPLE HEARTPOSITIONSPPOINTED PPOSITIONPROJECTORQUAD" -"COLONQUEEN OF QUSHSHAYAR PLUS RARCHAIC IIRCHAIC RARDEL DKARREAK HERERED JOKER" -"REDNE ON REFORMED RFUL FACERIED FACERNEY PARARO WIDTH ROJECTIONROTATION-RPORA" -"TIONRTER MARKRTS MEDALRUM CLEF-RWARI DDAS DIGRAPHSEMICOLONSEPTEMBERSHAB CEEBS" -"IVE FACESMALL YUSSOF PASUQSPIRITUS SSANGSIOSSTAL BALLSTEBASKETSTRELNAYAT OF M" -"EATT ON BONETABE SIGNTAKHALLUSTANDSTILLTED PLANTTEH ABOVETIMES NA2TIMES PAPTO" -" CORNERTONE MAI TRAIGHT UTREDECILETRESVETLOTTED STEMTUKWENTISTUTEYASATUBSTITU" -"TEUE MAEMBAULL BLANKUMED HEADUNGLASSESUNGSEONG UPPER DOTUPTSTIMMEUR-DE-LISURA" -"MAZDAAURLY LOOPURNED AYBURNED GANURUZ UR UUTRA MARKUURDHAJA UVUZHAKKUVANAGARI" -" VELOPMENTVER LUGALVERLONG AVEUAENGAMVICE MARKVIGINTILEVINE LEAFVISARGAYAVOCA" -"LIC RVOETOCHIEVRAKHIYA WASH TAILWING STARWITH FACEWORDSPACEWRINKLES WRY SMILE" -"XCITEMENTXHAUSTIONY BLOSSOMY-FOURTH Y-FOURTHSYEAR SIGNYEH ABOVEYRANISMA Z DIG" -"RAPHZAKRYTAYAZAL SASAKZENE RINGZERO SIGNZIR SASAK ANTENNA AT DUSK CEDILLA FAC" -"ING HANDLES KEMBANG LANTANG NUTILLU OF YARN ON LEFT OTTAVA OVER KG OVER MU " -"OVER ZI PLUS DI PLUS DU PLUS RU POLNAYA RASWADI SATCHEL SCOTS S SLIDING TALEN" -"TS TTUDDAG YUQ NAE-CREE TH-EM DASH-KHIEUKH-PHIEUPH-X BELOW0 BRONZE1 BARLEY1 H" -"ELMET3 ARMOUR56 TURO28 KANAKOA SIGN AABAAFILIABOAFILIACKSPACEAEN NYAMAIYANNOI" -"ALLIANCEAMS HORNANC SIGNANE TREEANS SIGNAPITAL FAR TSHESARCASITEARKLEAN ARRIV" -"INGARSI YEHARTYRIA AST WINDASTERN WATAKANA ATE MARKATEBOARDATH MARKAVY BANDAY" -"-NIGHTAZHAAKKUBACKWARDBATBEIT BER POLEBEVERAGEBIEE FONBILLIONSBINOVILEBLE SIG" -"NBLED CARBLINEAR BOL SIGNBOT FACEBOX TRAYBRA FACEBUNDANCEC SIYAQ CABLEWAYCAL " -"DISCCANDICUSCASSETTECEILING CER BALLCHATTAWACHINESE CK CHARTCLIMBINGCLOSED TC" -"OMBINEDCOUNCIL COUNTERSCURLICUECURSIVE D BUBBLED CROSS DAMMATANDANTAJA DDY BE" -"ARDIAMONDSDIFONIASDIM GUNUDIT CARDDOCUMENTDS-CREE DUSHENNADVANTAGEDVISVARAE O" -"F POOEBEEFILIECH YIWNED BRICKEGORIAN EK ONKARELEPHANTEN NTEUMENICIAN EOUT BOX" -"ER TRUTHERAL URNERDIGRISEREVODKAESH LOOPEST WINDET SHOESETA SIGNETRASEMEEUFEU" -"AETEVEN OF EVERANCEEXCHANGEFEBRUARYFILE BOXFINAL THFLOURISHFOR STOPFRAKTUR FR" -"ICAN DGARITIC GBASINNAGENITIVEGLASNAYAGORAZDO GREAT SAHAGALL HHALF GURHAN-AKA" -"THARBAHAYHARMONICHESPIAN HOP BELLHREE OF I SHAKTIICHAEAN IGMOID SIMANSIS INAG" -"ARI ING BELLING BOWLING ROD IRD MARKIS FORM IS WHEELIS-PILLAITA MFONJACK OF J" -"AVIYANIJUNCTIONKAIYARAAKASRATANKATAKANAL POLISHL-LAKUNALA LENGALATION XLEANIN" -"G LESS SHALESSER YLF RING LFWIDTH LKULIZMYLOCATIVELONG BARLONG S TLORRAINELOW" -" STOPLOZHITIELTRY LEGLUB SUITM ALLAAHMALL AXEMANDARINMANGALAMMARRATANME BADGE" -"ME WITH MEM-QOPHMIONIAN MMATION MON TIMEMY HOUSEN-JOINERNA METEKNAMENNY NAVIY" -"ANINCE SIGNNED FOODNEIFORM NEUTRAL NG RTAGSNI ABOVENINE OF NITIAL ZNO SLASHNO" -" THUMBNOTE PADNOVEMBERNRES TOSOBOOFILIOCALIC MOCK SALTOCUS OF ODESTONEOHM SIG" -"NOLLOWINGOM NTEUMOMANIAN OMMA BARON CROSSONE FOR OO TYPE OREHEAD ORM FEEDOT M" -"BUAEOTIFIED OVER BU OVER GA2OVER GI4OVER SAGOVER SHEOVER TIROVERRIDEPAIRTHRAP" -"AKPAK EPALOCHKAPAVIYANIPENTAGONPRECEDESPROSTAYAPUB DAWBPUN IYEKPUSHPIKAQAIRTH" -"RAQUINTILERAMMA GGRASMIAN RAUGHTS RDEL NAGREATNESSRED HAIRREE MARKRESVETLYRIL" -"LIONSRIYOOSANROSHTHI ROSSED ORSE DUNGS OCHKOMSALT OF SANYAKA SCRIPT GSE WEDGE" -"SENTAGONSHKIR KASHOE JOTSHORT ERSIFISTONSIGN LAESIX DOTSSMA SIGNSNA LDANSOFTN" -"ESSSPERSIONSQUEEZEDSUCCEEDSSUPERSETSWIMMINGT NGGEETTAALUJA TAI LUE TAR EYESTE" -"R FACETHIOPIC THOSCOPETICK IN TIRRUP RTISMOS ETO-LEFT TOWARDS TRI DISHTRICOLO" -"NTTENTIONTTO MARKTURNED MUAREG YAUATRILLOUBJOINERUDAWADI UKEUTNDAULLS LEGUNDE" -"RDOTUNDERTIEUNG DASHUP TRUCKV OVER MVE SASAKVERGENCEVESSEL BVOLUTIONVOMITINGW" -" PRINTSWASH KAFWBOY HATWN HEARTWO ABOVEWON SIGNWRINKLEDWRITING XCELLENTY BEET" -"LEY POPPERYAMAKKANYBEYFILIYENISEI YER YAGHYESIEUNGYIDDISH YPORROONYRILLIC ZAK" -"RYTOEZWARAKAYZWJ THAJ APLOUN BUTTON CER-WA CHIKI FLEXUS ISLAND KEFULA LONSUM" -" MAELEE MENDUT MUOMAE MUQDAM OCLOCK OPEN-O PLOPHU RAMBAT SHAKER SLOWLY STRIDE" -" TEDUNG WAAJIB WOLOSO-CREE R-KIYEOK-MACRON-MU-MO--SHIFT--THIRTY-TIKEUT-WELSH " -"0 SPEAR0 WHEAT1 ARROW2 OLIVE2 WOMAN26 EYYY3 AREPA3 EIGHT3 MONTH3 OMEGA3 SPICE" -"3 SWORD3 WHEEL5 NGGEE6 NGGOO7 NGGUA7 NGUAN9 CLOTH9 NGGAAA -PHRUA NAME ACTER T" -"AD NECKAELAENGAETMEUNAHAPAKHALESMA ALLOT XALTILLOAM ALEFAN MARKAND ENDANDERER" -"ANGKUOQANGLED ANGLONGANGOLATAPEZIUMARDNESSARRED BARRED OAS SIGNASHTRA ASUTORU" -"ATAEAN ATH OF AU MARKAULDRONAUNTLETAXIMATAAY SIGNBAIRKANBAMBOOSBARREKHBERGINE" -"BERRIESBIG YUSBLACHKOBOARDERBORZAYABOURINGBREVIS BUFFALOBULANCECABINETCANDRA " -"CAP TENCAYANNACELSIUSCHEINAPCHEVRONCHIEUCHCK LIMECLEAVERCLOSE ECLOTHESCOASTER" -"COMING CONTACTCOPTIC CRACKERD MADDAD MOUTHDA FACEDANCINGDANESE DAYANNADEAVOUR" -"DHALATHDIARGONDIPLOUNDISIMOUDOFONONDRIL BUDU NJAADYNAMICE DRINKE GLASSEAD ORE" -"EAVY YAECEMBERED RICEEIGHT KEL PUMPEN LEAFENSHUETER THANERNIN AESTIVALETNAHTA" -"EULEUNGF DAVIDF SASAKFATIGUEFAYANNAFINAGH FINAL YFLUENCEFORKINGGAYANNAGENERAL" -"GHEUGHEGLAGOLIGOLIAN GRADUALHAARKAAHALANTAHANGUL HAYANNAHEADINGHEXAGONHI SIGN" -"HIUCHUSHYAAUSHI NTEUMI RTAGSIANGQI IBIFILIIC WANDICOPTERICYCLESIFIED EIKHAHIT" -"IL DRUMILLEANNIMILAR INNABARISIBLE ITALIC ITON RAIVE OF JAIN OMJARATI JAYANNA" -"JECTIVEJERAN JJIBWAY KARO BAKAYANNAKEUAERIKHA YATKKURUNIKOMBUVAKOQNDONKORONIS" -"KPAK WAKUTAARUKYLISMAL SEGNOLAGIOS LAK-050LAMITE LASHES LAYANNALE LEAFLEK TOO" -"LENGTH-LEUT KALEYBALLLF FACELIGHT XLJUDIJELLYFISHLYGISMAMAAYYAAMAI SATMANCHU " -"MARCATOMASSAGEMBOL B0MEETORUMERICASMINGKALMINIMA MRACHNYMUNGKAHNANCIALNAYANNA" -"NEQUDAANESTED NG MASKNIKAHITNJAEMLINUMBERSOCTAGONOCTOBEROF SOAPOFFICEROGDIAN " -"OKRYTIEOLAPUK OMERANGON FACEONG UEXONGONANONTIEENOP MARKORCULUSOREVMA ORKHON " -"ORTIETHOT NGOMOT REPHOUR OF OUT HUBOVER ANOVER DUOW ALEFOWILO SOX BACKOX LINE" -"P PIEETPALLAWAPANESE PANSIOSPAYANNAPAYEROKPECTIVEPEGERMAPENGKALPERVISEPHUTHAO" -"PLOYAN POMOFO POVODNYPPROACHPRENKHAPSTICKSPTHAHA PURPLE PUSHPINQUARIUSQUEEZE " -"R2 GUNURA REPARAKHANGRANGKEPRARIETYRAYANNARD DISKRD FACERDO RJEREATHY REREKAN" -"RESILLORIPPLE RISIMOURMUKHI ROGRESSROKEN LRRECTUSRTHIAN RY FACES-SAJDASA VAH " -"SAMPHAOSANDHI SANGAN SAYANNASCOOTERSEGMENTSERPINASEXTILESHAKINGSHIFT TSHORT A" -"SIDDHAMSIGN UDSOLDIERSOV ROGSPRINGSST TUBESTERINGSUKUUDOSYNAGMAT ASHESTA MARK" -"TAISYOUTALL AATASHEELTAYANNATCHFORKTHALIYATHESEOSTHIEUTHTHKUQI TIKRAMATIVATE " -"TORNADOTRAINERTROLLEYTRYASKATSECHKATTHACANTTILIK TYSCAPEUBUFILIUKKAKHAUM IYEK" -"UN MEUTUP HANDUP MARKUP SIGNUP STEPUP TACKURATIONURFACE URGLASSUSSYERUUT TIME" -"UYGHUR VANESE VAPOURSVAV YODVAYANNAVE DOT VEMENT-VEW NOWVILIK BVILLAINVOICING" -"VOWEL KVYSOKO WAZ EOHWDRIVERWIFRUITWIGNYANWO FOR WO MARKWO WAENWORSHIPXOPHONE" -"Y GREENY HEARTYA LAMPYAH LI YANMAR YAYANNAYELLOW YMAIC LYNAMIC ZQAPHA AGUNG " -"CARET DIPLI EPOCH EQUID FACE- KAPAL LELET LONGA MELIK MURDA QATAN RULER SPLIT" -" TIKHY-HIDET-HIEUH-IEUNG-PIEUP0 NGGI0 NGGO0 NYON0 NYUN00-1021 GBOO1 GOLD1 HOR" -"N1 NDEE1 WINE2 KPOO2 MBOO2 NGGU3 GBEE3 HEEI3 NGGA4 DART4 DEER4 KPEE4 MUAN4 NG" -"EN4 NJOO4 NYIN5 MERI5 WOOL6 GUEI6 HUAN6 NGGE6 TREE7 GUAN7 KAPO7 MBEE7 MBUU7 N" -"DOO7 NGON8 HOOU8 MBEE8 NYAN8 NYEN9 MUEN9 NJEEA HAAMA-KARAAASHAEACINTHAEMMAEAE" -"SURAAFFIX AGOGUEAGRANTAILUREAJANI AK-668AKABATANCHORANGKATANIMALANUARYAPISMAA" -"PLI MAPYRUSARADDOARBUTAARSEOSASHGABASSINGATTERYATTIC AUTUMNBAFILIBANWA BEFILI" -"BETAN BGBIEEBISCUSBISHOPBLINK BOFILIBOWTIEBURGERC CLEFCALATECARIK CASTLECATAW" -"ACEVITUCHADINCHAMKOCHEIKHCHEMA CHESS CHIRETCHO CHCHURCHCKNESSCLOSETCODILECRAY" -"ONCREASECUMBERCUPPEDDAGGERDE DOGDERMA DGEHOGDICINEDIESISDOKMAIDUCEUSDVANCEE W" -"AVEEAHMUKED CAPED ICEEENTH-EIGHTYELLITEEMASTIEMPUS EN GHEENIKI ENTIMAEPACT ER" -"MATAESTAN ET KUTEU MBUEUAENAEUNYAMEUREUTEVENTHEXHALEEXISTSEYANNAF CLEFF MAREF" -"AMILYFATHA FF OF FORMEEFORTISFRAMESGANGIAGBASAQGEADALGEDOLAGGLINGGHAMALGHETTI" -"GHEUAEGLAZ HGNANT GO NGUGOBLINGORGONGRASP GS-PA GURAMUHALF HHAM AIHAMEDHHAMIL" -"OHASHKAHE MGOHEISEIHERMESHEUAEPHIBIT HIMAHUHINGE HIVETEHO HOIHORT IHUMBS HUR " -"PAI HOOKI MAIMIASMA IB YAMIDE ESIEVAN IGGLESILBOATILLAGEIN YEHINAGMAINCUNXIND" -"HI INGAATINHALEINSHIPIRINGUISSANTISSHARISSIMOITABLEITHER ITULUMIX OF IXTY PIY" -"ANNAKAYAH KE PHOKEYCAPKILLERKLITONKRISISKTIKO KUSHU2KY WAYLAFRONLAMADHLAMEDHL" -"ASTONLD MAPLEVEL-LIGIONLIGON LISHA LITIKILLIPOPLONG EM BOARM BULLMADDAHMADR M" -"MALL FMANYA ME DIEMECHIKMPLINGN DASHN YANGN-NISFNACLESNCH FRNDA TANEUME NGBAT" -" NGGONGNIRUGUNISTERNIZKO NKNOWNNOKHUKNOR BUNOWMANNOZHEKNSANAQNSUZ ANTEVMANTII" -"MUNTOGENOBELOSOCENCEOCIETYODHADHOFOUNDOGONEKOITIC ON KEYONOCLEOOMUUTOOPED OPE" -"N DOPEN POPITSAOSETTEOW TIEPALUTAPBOARDPEAKS PECIALPENCILPEPPERPICKETPIRIT PO" -"KOJIPOMMEEPUFFEDPWATCHQAMATSQETANARAAKANRACINGRAKLITRAVEL-RBITSAREMEDYRENGTHR" -"ICORNRIISAPRISEMERKAANUROCKETRSENICRSHANARSIAN S SHOES TENTSAADIYSAUCERSHAYIM" -"SHMAAMSICKLESIXTHSSKAPI SOUNAPSPADESSPATHISPITALSSLESSSTANCESTANCYSTLERSSTOLI" -" STROFOSUCKEDSURANGSURED SWORDSSYNAFISYOUWAT NJAQTAIKHUTAMINGTARGETTAU ROTAUR" -"OSTE TSETE USETERON TEUWENTHAKKUTIKENOTIMATETIRYAKTOPBARTRAPLITRIKE TURBANTUX" -"EDOU MBITUAEQTUUANGXIUBLE XUCIBLEUDARKAUGGAGEUNGAAMUP BOWUPNAYAURNAMAUUMISHUY" -"ANNAUZEIROVERTKAVILIANVIRIAMWBERRYWEORTHWINDOWWN BOWWN BOXWO OF WORKERWRENCHX" -" FACEXIMIZEXO NEOYAKASHYIN-DOYOMBO YRENE YSTICKZHITSA AMPS CAPO CHWV COAT DEK" -"A FUJI GORA HAA ICON ILUT JERA KAWI LACA MOOD SARI TABS TELU-ALAF-BEAM-RING-" -"SIOS0 BEE0 DOO0 DWO0 GBO0 GEE0 HAN0 HEE0 JOO0 MAN0 OIL0-VAS1 DWE1 FAN1 PEE1 T" -"EE1 TWO1 WVI1 YOO1-VAS2 HEN2 HOO2 KPA2 KPI2 MBA2 MBE2 MBU2 NJA2 NJU2 POO2 PTE" -"2 SEE2-VAS3 BOO3 FOO3 HIN3 HON3 NDI3 RA33 VEE3 WEI3-VAS32 JE4 ABB4 GBI4 KPU4 " -"LEE4 LOO4 MBO4 MON4 NDO4 TOO4 VOO4 WOO4 WUI4-VAS5 KEE5 MBI5 NDU5-VAS6 GBA6 KO" -"O6 RA26 SIA6 SOO6 TA26 WEE6-VAS7 FUA7 GBE7 HUN7 JEE7 MIN7 NEN7 NIN7 TWE7-VAS8" -" FEE8 GBU8 KPE8 KPO8 MAN8 NAN8 NWA8 RO28-VAS9 DEE9 KUA9 MEN9 MUN9 NDA9 NDE9 N" -"ON9 NUN9 PU29 WVA9 WVE9 YEE9-VASA UNAA YUEAADHUAAMAEACHKAADULTAEMAEAEPENAEREE" -"AGMA ALGARALLEYALLI ALOG ALPHAAMEKHANGELANNONAPPLEAR AEARERUARTARASAR ASEIAAS" -"PERATAF ATIYAAUTHSAVROSAWAY BAARUBACUSBALAGBASA BASSABEITHBENDEBHADHBHETHBISA" -"HBLAKOBOOTSBORZYBREW BSTERCAANGCAKESCAKRACALYACANUSCAUDACAUSECCEPTCCOLICECAKC" -"ECEKCEREKCHADACHERYCHESTCHIMECHOOICHOOLCHULACHUTECIEUCCKAGECKTIECLIFFCLONECLU" -"BSCROWNCTRICCUBEDDAIC DATUSDBOATDELTADENCEDEPTHDESTYDHAM DKAR DLINGDOTS-DSMAN" -"DWICHE GEEEAGLEEATH EBALLEESHIEGALIEGIONEGL HEIDONEISMAEKEETEMAKEEMBICEMLJAEN" -"ANOENDEPENENGENJETEO-EUEOPLEERINEERKHAESHE3ESO EET TUEUAEMEURAEEYBUSEYYALF CO" -"WF EWEF SOWFAAFUFAIHUFEARNFLAGSFLICTFLUTEFORCEFSAAQGADOLGALGAGAMALGAMANGAZE-G" -"EAN GESH2GHNUTGHULUGOGI GORGIGULUSGURE GVANGHAALUHADDAHAINUHALA HALQAHANNAHAS" -"E-HATHIHAYINHETHEHIMELHIRIQHISTIHIUTHHOLAMHOLARHOTELHROOMHUMP HUTA I KOII-RES" -"IARDSIAUDAICHONICRONIHVUSIKARAIKURUILVERIMGBAIMMA IMMERINGSAINNA INTHUIPEHAIP" -"INGIRACYISTLEITHI ITUALJANG JERVIJUDGEJUDULJUEUIK-020KARORKBALLKERETKESH2KHAP" -"HKNOBSKO LAKTOP KURONKUSMAKWAENL NETL-JUZLABATLABORLAGUSLAMDALATIKLAYARLEASEL" -"ENISLOAN LOBE LOMKALOOP LOURELURALLWAY M RAMMAAEHMAALAMACUSMADYAMAI KMAIZEMAL" -"ONMAQAFMEEMUMEIZIMELONMENOEMEPETMETEGMETRYMI ROMIEUMMINDUMINGOMISRAMMOTHMPARE" -"MROCKMSHAEMUCH MUHORMUOY NA PONABLANADA NASHINCORANEGARNEMKANENOENGENTNGMANNG" -"UE NIEUNNINTHNIS FNNAN NSIEENSUAENSYONNTHA NTXIVNUENGNZEUMO ANGO BOXO KAIO PL" -"AO RUAOBYLAOCADOOJKI OKARAOKEE OLD XOMBIEOMMAEOPLETOQPENORUTOOSTEROTERIOTHALO" -"UNCEPAATOPASEQPATAKPCHA PEAN PEITHPEN OPEN-PPEPETPI ROPITERPLHAUPLUTAPLUTOPMU" -"NKPOLI PONSEPPAGEPSILIPTUNEQAAFUQUIRYR-RUBRACHYRAIDARASHARCHIDRDIONREGIAREIWA" -"RELA RELAAREPHARICEMRIEENRIEULRILLARITSIROGOMRONOSROWN RRITORUDAARUHUARULAIRU" -"MP-RUSH RYASOSADHESAKINSALADSATA SAUILSEGOLSENTOSHANGSHAR2SHARASHARUSHIMASHOO" -"KSHTINSICLESILA3SKATESOLVESPINESTARTSTNUTSTORMSUKUNSURYASUTUHTEGEHTENSETHINGT" -"IGMATINNETIPPITKAANTMAAUTON ATORCHTORSOTOYORTRACKTRAIFTRIOLTSADITSEEBTSERETTO" -"CKTTORUTUEUMTURN TUUMUU U UUBITOUBURUUBUTSUDAATUGUSTUKARAUMMERUNGBAUNITYUNOO " -"UQUETURINEURITYURTLEUTEUXUTIESVAAVUVATORVIET VITAEVRIDOVZMETWAAVUWAQFAWATTOWB" -"OATWFISHWIDE WINDUWINJAWISADWU318WUAETXING XTRA-XW XWXYOOJYAMOKYECEKYENAPYIZE" -"TYSTERYURIIZHAINZIDI ZILDEZSEKAZYGOS C D OHM POD R S WEB-RAY-UM 0 BI0 HO0 JU0" -" KO0 NI0 PU0 RA0 SA0 WI0 YE0 ZO028B1 DA1 DO1 DU1 GA1 HA1 IN1 KI1 KU1 PO1 QI1 " -"RA1 SA1 SI1 SU1 VU1 YI13582 BU2 KA2 L22 NO2 PE2 QO2 RO2 SO2 VI2 YA3 A33 EE3 J" -"E3 JO3 KU3 L33 LE3 ME3 MI3 MU3 PA3 RI3 TA3 YU4 DO4 FI4 KE4 L44 NE4 TE4 TU4 WA" -"4 WI4 ZE5 A25 AN5 AU5 BB5 DE5 FA5 FE5 GI5 IN5 JU5 LI5 MO5 NU5 OO5 TE5 TO5 VA5" -" VE5 WA5 WE6 DI6 FU6 HE6 HI6 JE6 JO6 L66 LA6 NA6 PO6 QA6 RU6 SE6 WU7 BE7 DA7 " -"DD7 EI7 JA7 KI7 LU7 RE7 TI7 VO7 ZA8 BO8 DU8 EN8 FO8 GU8 JI8 KO8 PI8 QE8 SU8 W" -"E9 JA9 PA9 PI9 SE9 SI9 SO9 TA9 TO9 TUA IEA-HAAACUACASAFELAHADAILMALAIALDAALTA" -"AMLAAN XANAEAPAQAPONARA3ARGIAROOARUMATIMATYAAULABAGSBALDBASHBAYIBBITBERDBETHB" -"OOKBOREBUNGBUOYCANOCASECAYNCHAUCOONCORECRETCWAADAGSDAIRDDAKDDHIDEADDGERDIM2DZ" -"HAEAAEEEEEEENGEENUEIPTEIRTEIWSEZZOFAIBFASTFEEMFETHFEUQFFINFIRIFITAFWAAGAMEGAM" -"LGEDEGGWSGHOMGHWAGIBAGIDAGIEAGIR2GOALGORTGROMGRU GUINHAVEHAYNHEEPHEROHERUHEYN" -"HEYSHEYTHHWAHID HIINHMI HOM HOPHHSDAHSHUHUB2HUENHUVAHWAAIANOIARAIFATIGERIITOI" -"K HIKIRILUYINORINY IPODIQAAISI JEONJIIMJOT KAAFKAD3KAKOKALIKAPHKCETKEUPKICKKI" -"NIKMA KOBAKOETKOKEKOKOKWAALFERLFIELIFULIUMLIWNLOLLLOVOLUISLUMNMARUMARYMESOMFA" -"AMIIMMIINMLYAMMU2MPETMUASMUINMVATMWAANAAUNAG NAM2NANANCERNDAPNDUENEMANEO NET " -"NGA2NHAYNJAMNNNANOWCNPEANRUANSHENSUBNTAANTOCNUNGNUUNNWAAO-YOOBATOBROODLEOFUMO" -"JI OJODONA ONUTOONEOOTHOPODOPUSORAXORIIOUBTOXIAPARDPAWNPEEIPEEPPEUXPHABPHINPL" -"UGPLUMPOLOPRILQASRQEF QHAUQOPARAFEREIARGU2RIFYROA ROARROOKROUTRPSERROIRSO-RT " -"TRUISRUKURUNARUSISA-ISEENSEEVSELFSEYESHTASIKISINKSLURSOKASONGSUABTFONTUKITURU" -"TZELUGU UHURULU UNAVUON URUSUSA UTAEUTANUTTYVEDEVEUMVEUXVEYZVIDAVIYOVOS VUEQW" -"AAKWAETWAHAWAIRWAW WDERWULUXEIAXEYNYAWNYEUXYUDHYUKUYWAAZATAZAYNZELOZETAZIETZI" -"Z2ZZY 0 E0 U0-004A0B91 X1-01-212114D15518D2-020B2532DD3 D3 I3-030531C4 E4-05 " -"U5-05505575B66-06206D77 O72C8 A8 I8F09819E3A7AAEFAL2ALKAUJAWXAZUB57B89BIBBXGC" -"A9CAHCAICIGCWICYAD42D70DA2DE6DIBDJADZEE80EEGEIEEYKEZHF14F8CFAJFLYFOMFUEHAQHOJ" -"HOXI-IIMNIWRJAHJEUJHAK00KUEKUGLFALK LULNIIOAYOIXPOQPUQQ00QARQIFQIGQOFQOTQUFSI" -"ISUUTJETUJUDYUEZUMXUOPUQAVAUVNOVOKVOYVUUWAUWOQX00XAUXEHXWGXWVY00YOTZJEZOOZORZ" -"UPZZE16171D1F343638394048494B4E6490929599C0D0G0G3G9LXPVVDVWZ0"; +"EHALF TRIANGULAR COLONHAND INTERIOR PRODUCTHOCKEY STICK AND PUCKHORIZONTAL RE" +"FLECTIONHORIZONTAL TABULATIONHOUSAND MILLIONS SIGNINTERSECTING LOGICAL INTERS" +"ECTION OPERATORINVERTED BRIDGE BELOWINVERTED GLOTTAL STOPLATTENED OPEN A ABOV" +"ELESS-THAN OR EQUAL TOLETTER SMALL CAPITAL MALE WITH STROKE SIGNMIDDLE RING L" +"ITTLE ONMORPHOLOGICAL DIVIDERND TELEPHONE RECEIVERNTISTRY SYMBOL LIGHT OCAL N" +"OTATION SYMBOL-OHAMMAD ISOLATED FORMOP SHADED WHITE ARROWOPPOSING AN PLUS NAG" +"APAP PLUS PAP PLUS LU3QUADRANT CIRCULAR ARCRATING SYSTEM COMMANDRELICT HOUSE " +"BUILDINGREVERSED FEATHER MARKRISING DIAGONAL SLASHSH AMPERSAND ORNAMENTSHORT " +"LEFTWARDS ARROWSIDE TO SIDE SCISSORSTEEN POINTED ASTERISKTHICK LETTER SELECTO" +"RTILDE OPERATOR ABOVE TOUCHING INSIDE MOUTHTRIANGULAR HALF BLOCKVERTICAL LINE" +" OVERLAYVERY HEAVY BARB ARROWVOICED ITERATION MARKWITH INVERTED V ABOVEWO-CIR" +"CLE ALTERNATE IWO-CIRCLE NUKTA ABOVEXTRA SHORT VOWEL MARKYIG MGO TSHEG SHAD M" +"A ABOVE LEFT TRIANGLE AND DIAGONAL STROKE BEGIN LOGOGRAM MARK OVER LAGAR GUNU" +" SHE OVER TUR ZA OVER ZA WITH HORIZONTAL BAR79 OVER LAK-079 GUNUA- SHOG GI MG" +"O RGYANAND NORTH EAST ARROWAND NORTH WEST ARROWAND SOUTH EAST ARROWAND SOUTH " +"WEST ARROWANGE ANTIRESTRICTIONARXIS KAI FTHORA VOUBETWEEN PALM FACINGSBSET OF" +" NOR EQUAL TOCENTRE VERTICAL LINECHARACTER INTRODUCERCHEMICAL SYMBOL FOR CONS" +"ONANT SIGN HAARUCRESCENT MOON SYMBOLCURRENCY SYMBOL RIELCURVED ANGLE BRACKETD" +"OTLESS HEAD OF KHAHDOUBLE ANGLE BRACKETDOUBLE DOT TONE MARKDOWN ARROWHEAD BEL" +"OWE CONSONANT MODIFIERE POINTED WHITE STAREMESTVENNY ZADERZHKAENARMONIOS ANTI" +"FONIAEVERSED ROTATED RANAFINAL CONSONANT MARKFIVE SPOKED ASTERISKFORMS LIGHT " +"VERTICALFOUR RAISED KNUCKLESGHTWARDS ARROW BELOWGRA GCAN -CHAR RTAGSHALF CIRC" +"LE WITH DOTHAR2 TIMES GAL PLUS HIGH RATHA OR LOW PAHIGH TONE APOSTROPHEHREE-D" +"OT NUKTA ABOVEIMAGE OF OR EQUAL TOINDEX RING LITTLE ONINING OBLIQUE STROKEINS" +"IDE MOUTH RELAXEDINVERSE WHITE CIRCLEINVERTED CANDRABINDUIRCLES HITTING WALL " +"JUDEO-SPANISH VARIKAKHAMTI REDUPLICATIONL FUNCTIONAL SYMBOL LASHING SWEAT SYM" +"BOLLATALIZED HOOK BELOWLE WITH POPPING CORKLEFT AND LOWER RIGHTLEFT-TO-RIGHT " +"SECANTMULTIPLE PUNCTUATIONNIS RACQUET AND BALLONCAVE-SIDED DIAMONDONE MARK SG" +"AW KAREN OTLESS J WITH STROKEOVER LEFTWARDS ARROWPLUS GISH TIMES TAK4POTABLE " +"WATER SYMBOLREAN STANDARD SYMBOLREVERSED ONE HUNDREDRIGHT ANGLE WITH DOTRIGHT" +" QUADRANT BLACKRIGHT U-SHAPED ARROWRUMAI PALAUNG TONE-5SCRIPTION CHARACTER SE" +"PARATOR KEY SYMBOLSEPARATOR MIDDLE DOTSIDEWAYS NOON GHUNNASTAR WITH MIDDLE DO" +"TTHROUGH SMALL CIRCLETRANSPOSITION MARKERUBHAANAHU WA TAAALAAUP-POINTING TRIA" +"NGLEVAL WITH OVAL INSIDEWARE-FUNCTION SYMBOLWET CULTIVATION SIGNWITH FOUR DOT" +"S ABOVEWITH SOROCHYA NOZHKAWORD REPETITION MARKYIG MGO PHUR SHAD MAYRENAIC TW" +"O DRACHMAS AND PROSGEGRAMMENI AND RETROFLEX HOOK FLUTTERING IN WIND IN A RECT" +"ANGLE BOX KASKAL U GUNU DISH LOVE YOU HAND SIGN WITH STRIKETHROUGH WITH VERTI" +"CAL TAILA END LOGOGRAM MARKAHU ALAYHI WA-AALIHALTERNATE LAKH MARKANS-SERIF CA" +"PITAL LANSPOSITION BRACKETARABIC FORM SHAPINGARENTHESIS NOTEHEADARTIAL DIFFER" +"ENTIALATED TELLER MACHINEBETWEEN MIDDLE RINGC DIGRAPH WITH CURLCIRCLED SANS-S" +"ERIF CIRCLED WHITE ARROWD CIRCUMFLEX ACCENTDENOMINATOR SIXTEENDOWN AND HORIZO" +"NTALDOWN POINTING INDEXET WITH WHITE CROSSEVEN POWERS OF FOURFIVE FINGERS SPR" +"EADFLOORPLANE TWISTINGFT-POINTING FLEURONGAPPED CIRCLE ARROWGIBBOUS MOON SYMB" +"OLHAND COVERING MOUTHHEAD-SHAPED POINTERHORT STROKE OVERLAYHURISAZ THURS THOR" +"NIGATURE AYIN-DALETHILDING CONSTRUCTIONIMIDIA SEXTULA SIGNIN CHEN SPUNGS SHAD" +"ING SHIRT WITH SASHINGLE DOT TONE MARKINSIDE CIRCLE BELOWISPUTED END OF AYAHI" +"TED LIABILITY SIGNKULL AND CROSSBONESLEADING MCHAN RTAGSLEFT POINTING INDEXLE" +"FT TO LOWER RIGHTLEFT U-SHAPED ARROWLF MADDA OVER MADDALUB-SPOKED ASTERISKMOV" +"ES AGAINST CHEEKMSHELL MOBILE PHONENAXIAN FIVE HUNDREDNDRED POINTS SYMBOLNE H" +"UNDRED TWENTY PNETWORKED COMPUTERSNOGRAPHIC FULL STOPNORTH ARROW WITH HOOP SE" +"MICIRCLE ARROWOTATED ARDHAVISARGAOVER E NUN OVER NUNOW-9 QUOTATION MARKPARAGR" +"APH SEPARATORPREFIXED NASAL SIGNQUADRUPLE CRESCENTSQUESTION MARK ABOVERAILING" +" MCHAN RTAGSRATUM SUPER STRATUMREE-QUARTER CIRCLE RIGHT MIDDLE STROKERIGHT TO" +" LOWER LEFTRROW NO-BREAK SPACERY CULTIVATION SIGNSEQUENCE INTRODUCERSEVEN EIG" +"HTHS BLOCKSH PLUS HU PLUS ASHSLANTED NORTH ARROWSTRAIGHT THUMB BENTSTRATIAN F" +"IFTY MNASSYMBOL FOR BEGINNERTART OF RUB EL HIZBTHANG LONG ANUSVARATIGHTLY-CLO" +"SED EYESTO LOWER RIGHT FILLTRANNO MALO POVYSHETURNED PADA PISELEHTURNED SECTI" +"ON MARKTWENTY-FIVE DEGREESUBLE DOT WITHIN DOTUP HORIZONTAL HEAVYUP HORIZONTAL" +" LIGHTURRENCY SYMBOL BAHTVARIANT FORM ILIMMUVARIANT WITH SQUAREVARIATION INDI" +"CATORVASTNESS OR WASTINGVERSAL INTERSECTIONVERSE FINAL BARLINEVERTICAL TABULA" +"TIONWITH YEH FINAL FORMWOMEN HOLDING HANDS AND NO DOTS ABOVE AND SMASH PRODUC" +"T AND YPOGEGRAMMENI FOR SIMALUNGUN SA NOT LITTER SYMBOL OVER INVERTED SHU SPR" +"EAD THUMB SIDE THUMB INDEX THUMB WITH CIRCLE ABOVE WITH CIRCLE BELOW WITH CRO" +"SSED-TAIL WITH FLOWING SAND WITH KAVYKA ABOVEABBREVIATION MARK AND LOW RIGHT " +"RINGARROW SHAFT WIDTH ASTED SWEET POTATOASTROLOGICAL SIGN ATERRESTRIAL ALIENA" +"TIN SMALL LETTER BAARAKA WA-TAAALAABASELINE ROUND DOTBOTTOM RIGHT KASRACANTIL" +"LATION SIGN CONTINUING OVERLAPCOPPER ANTIMONIATECTLY EQUIVALENT TOCUP WITHOUT" +" HANDLEDOUBLE PUNCTUATIONDOWN-OUTPUT SYMBOLEAST POINTING LEAFENTERING TONE MA" +"RKENTY-TWO POINT TWOEPIGRAPHIC LETTER ERTICAL BAR VIRAMAEVENTEEN FULL STOPEVE" +"RSED CHELYUSTKAFIVE EIGHTHS BLOCKFORKED PARAGRAPHOSFORTY-FIVE DEGREESGATIVE A" +"CKNOWLEDGEGGLY VERTICAL LINEGISH CROSSING GISHHAIS LUS NTOG NTOGHILOSOPHERS S" +"ULFURHOLDING BACK TEARSHORIZONTALLY BELOWHOUSANDS SEPARATORHUNDREDS UNIT MARK" +"IGATURE ZAYIN-YODHIGSAW PUZZLE PIECEIN POSSESSION SIGNINDEPENDENT VOWEL IRROR" +" HORIZONTALLYITAN SMALL SCRIPT IX SPOKED ASTERISKJEEM ISOLATED FORMKANTAJA NA" +"ASIKYAYAKBAR ISOLATED FORMKOREAN CHARACTER OLEFT MIDDLE STROKELEFT-STEM TONE " +"BARLOSED CIRCLE ARROWLOWER MIDDLE RIGHTMATHEMATICAL SPACENINETEEN FULL STOPNI" +"SH VERSE DIVIDERNITE PART INTEGRALNORMAL SUBGROUP OFNYET THYOOM TA-ROLNYOOGA " +"NAAKSIKYAYAORK ON THE DECAYEDOTLESS DALATH RISHOU ALAYHE WASALLAMOUCHTONE TEL" +"EPHONEOW TONE APOSTROPHEPACING CANDRABINDUPERFIXED LETTER RAPUNCTUATION BINDU" +" QUARTER NOTE STEM RIST CIRCLE FRONT RYUKOVAYA SVETLAYAS INSIDE AND ABOVES PR" +"ESSED TOGETHERSEPTUPLE CRESCENTSSET OVER BUILDINGSSHAN REDUPLICATIONSINGLE PU" +"NCTUATIONSMALL CIRCLE ABOVESMALL RED TRIANGLESOUL ISOLATED FORMSYMMETRIC SWAP" +"PINGTILTING FROM WAISTTO LOWER LEFT FILLTOP U-SHAPED ARROWTROFLEX HOOK BELOWT" +"YPE A ELECTRONICSU-SHAPED ORNAMENTSUM WITH DRUMSTICKSUP ARROWHEAD BELOWUPPER " +"MIDDLE RIGHTUTLINED BLACK STARVARIANT FORM LIMMUVERY SMALL DIAMONDWEST POINTI" +"NG LEAFWHITE VERTICAL BARWITH JUSTIFICATIONWITH STROKE SYMBOLYLLABLE LENGTHEN" +"ERYPTIAN HIEROGLYPH ALTERNATION MARK AND PALATAL HOOK GRAVEYARD SYMBOL LAGAB" +" TIMES ASH2 LAGAR OVER LAGAR OVER ZU PLUS SAR PLUS SHA3 PLUS A TO BLACK DIAMO" +"ND WITH BULLET NOSE WITH SOUND WAVES WITH TILDE ABOVE-GAAHLAA TTUDDAAG-HEIGHT" +" LEFT HOOK0 WHEELED CHARIOTA PLUS HA PLUS DAABBREVIATION SIGNAEUM ONE PLETHRO" +"NALTERNATE NUMBER AMBDA WITH STROKEAMPHYLIAN DIGAMMAAND BLACK SQUARESAPLI DYO" +" DODEKATAASTERN PWO KAREN ATHERING TOGETHERAUKAZ LAGU LOGR LBE WITH MERIDIANS" +"BERBER ACADEMY YABOTTOM HALF BLACKBRACKET EXTENSIONBRIGHTNESS SYMBOLBUT RELIE" +"VED FACECAL SYMBOL BOTTOMCANCELLATION MARKCANDRABINDU ABOVECIRCLES WITH DOTSC" +"LOSED LITTLE YUSCOMBINING NUMBER CONSONANT SIGN PACONTINUATION SIGNCONTOURED " +"OUTLINECROSS PUNCTUATIONCTION APPLICATIONDELPHIC FIVE MNASDENTAL PERCUSSIVEEA" +"R SCREEN SYMBOLEMICOLON UNDERBARFACING BABY CHICKFINGER-POST ARROWFLICK ALTER" +"NATINGFRACTION ONE HALFFROM SMALL CIRCLEGENERIC MATERIALSGREATER-THAN NOR GRE" +"ATER-THAN SIGNHAH ISOLATED FORMHEART-SHAPED EYESHIRTEEN FULL STOPHORIZONTAL D" +"OUBLEHORIZONTAL SINGLEIASTRE MARK ABOVEICTED LEFT ENTRY-IDEOGRAPHIC COMMAIGHT" +"EEN FULL STOPINEAR ANNOTATION ING POLE AND FISHINITIAL LETTER RAINVERTED MCHU" +" CANKE BOTTLE AND CUPKHAH INITIAL FORMLAGOLITIC LETTER LAH ISOLATED FORMLAPPI" +"NG LESS-THANLD PERMIC LETTER LHOUETTE OF JAPANLIAN HIEROGLYPH AMALL WHITE CIR" +"CLEMANENT PAPER SIGNMEDIUM BARB ARROWMEEM INITIAL FORMMILITARY AIRPLANENASALI" +"ZATION MARKNAUDIZ NYD NAUD NNE EYEBROW RAISEDNEGATIVE CIRCLED NFORMATION SOUR" +"CENG STROKE OVERLAYONE EIGHTH BLOCK-OPEN-HEADED ARROWOURTEEN FULL STOPOWER NU" +"MERAL SIGNPINWHEEL ASTERISKPRECEDING SOLIDUSPRESSIONLESS FACEPRIZNAK MODIFIER" +" PUNCTUATION SIGN QUAT REVERSED ESHREATIONAL VEHICLERIATION SELECTOR-RIGHT HA" +"LF CIRCLERYBLION BASE SIGNS REVOLVING LIGHTSERVER EYE SYMBOLSIGN O WITH CROSS" +"SQUARED TIMES KURSTRAIGHT MOVEMENTTAN ISOLATED FORMTARTING FROM SIGNTEN THOUS" +"AND SIGNTERSYLLABIC TSHEGTHREE SOUND WAVESTIAL ARTS UNIFORMTONAL RANGE MARK T" +"RIPLE DASH ARROWULAR MEDIUM SHADEUP AND HORIZONTALUP POINTING INDEXURNED COMM" +"A ABOVEURNED DAMMA BELOWVARIANT FORM ASH9VARIANT FORM IMINVARIANT FORM USSUVE" +"E WITH UNDERBARVERAGE WITH SLASHVERY SMALL SQUAREVOCALIZATION MARKVRE TOURNOI" +"S SIGNWHITE PARENTHESISWHITE SHOGI PIECEWITH NOT EQUAL TOWO VERTICAL DOTS Y O" +"N BLACK SQUAREYEH ISOLATED FORM AND HEAVY RIGHT AND LIGHT RIGHT CAPPED MOUNTA" +"IN INSERTION POINT LIGHT MOON ARTA OR THE IMAGE OF PLUS KAK PLUS A SMALL ROTA" +"TIONS TIMES DISH TENU TIMES GAN2 TENU WITH BUNNY EARS WITH DOT INSIDE WITH HE" +"ADSTROKEADIAN SYLLABICS AFFRICATION MARKANABAZAR SQUARE ARENTHESES ABOVEB2 TE" +"NU PLUS TABBOLD GREEK CROSSBOTTOM HALF RINGCASIAN ALBANIAN CH WITH UMBRELLACO" +"MPRESSED ARROWCONSONANT JOINERCORNER DOWNWARDSCORNER LEFTWARDSCREAMING IN FEA" +"RDEWAYS U BRACKETDITORIAL CORONISDOTTED CRESCENTSDOUBLE CRESCENTSDOUBLE DOT A" +"BOVEDOUBLE HEAD MARKDOUBLE TURNSTILEDOUBLE ZAPYATAYADOWN RIGHT BARB DVUMYA ZA" +"PYATYMIE PLUS GAN2 TENUECIMAL SEPARATOREFORE COMPLETIONEN MILLIONS SIGNEND OF" +" TEXT MARKENTRE WHITE STARENUMERATION SIGNEPSILON UNDERBARERCURY SUBLIMATEEVE" +"RSED VISARGA EVERY OTHER TIMEFALLING DIAGONALFFERENCE BETWEENFLOORPLANE SPACE" +"HIGH SPACING DOTHMATULLAH ALAYHEHOLDING TOGETHERHYPHENATION MARKIDED GREEK CR" +"OSSIFTEEN FULL STOPIGHTH NOTE STEM IMENSIONAL ANGLEINDEPENDENT SHININDEX THUM" +"B SIDEINES CONVERGING IPPER-MOUTH FACEIRCLE X NOTEHEADISTOS DISC SIGN IVE POI" +"NTED STARK PERMITTED HERELD ASSYRIAN ONE LEFT ARROW ABOVELEFT HALF CIRCLELIGH" +"T AND RIGHT LIGHT BARB ARROWLLOW PAN OF FOODLOWER OVER UPPERLTERNATE HASANTAM" +"AGNIFYING GLASSMESTVENNY KLYUCHMIDDLE AND BELOWMIDDLE AND RIGHTNAL DIGIT SHAP" +"ESNION WITH SERIFSNTAIGANA LETTER O-MINOAN SIGN CMOLD TAMIL VIRAMAOLD WHITE C" +"IRCLEORIZONTAL JOINERPEN CENTRE CROSSPLACEHOLDER MARKPLE MEASURE RESTPOSTPOSI" +"TION MENPRECEDING SUBSETPRECHGESANG STEMQ WITH HOOK TAILQUALS SIGN BELOWR PLU" +"S GAN2 TENURAIDO RAD REID RRAYS AND DOTTED RECORD SEPARATORREPETITION MARK-RE" +"SH-AYIN-DALETHRIGHT DOWN BARB RIGHT HALF BELOWRIGHT HALF BLACKRISING TONE MAR" +"KRIZONTAL ELLIPSESANS-SERIF ARROWSERIFS AT BOTTOMSHU2 PLUS KASKALSIGN RISING " +"TONESITION INDICATORSLANTED EQUAL TOSMALL CAPITAL ELSMALL NOON ABOVESTERISK O" +"PERATORSTICKING OUT FARSTRAIGHT STRETCHSTRING FRETBOARDSTUCK-OUT TONGUETAKANA" +"-HIRAGANA TRIPLE CRESCENTSUBJOINED LETTER UDLY CRYING FACEULDERED OPEN BOXUMB" +"ER SIGN ABOVEUP MIDDLE HINGEDUP-OUTPUT SYMBOLUPERSCRIPT ALAPHUPPER OVER LOWER" +"VARIANT FORM ESHVERY HEAVY SHAFTVIEWING CEREMONYVOWEL LENGTHENERWALLED ENCLOS" +"UREWAVY HAMZA BELOWWITH CENTRED DOTWITH HEARING AIDWITH LEFT UPTURNYATHOS BAS" +"E SIGNYIR MKPARAQ MEUN ALTERNATE FORM AND BOTTOM END AND LOWER LEFT CLOUD AND" +" RAIN CORNER BRACKET DEYTEROU ICHOU NEPOSTOYANNAYA OPERATOR WITH OVER MOUNTA" +"INS OVER SIG4 SHU2 PARESTIGMENON PLUS HI PLUS A THROUGH CIRCLE THUMB STRAIGH" +"T TIMES IGI GUNU TOUCHING INDEX WITH DESCENDER WITH DIAERESIS WITH RIGHT LEG-" +"CARRIER LETTER-NO-EVIL MONKEY-PIECE SWIMSUIT2 CHARIOT FRAMEACHES THE LIMITAI " +"LAING DIGIT ALAYHE ASSALLAMALIF LENGTHENERALMOST EQUAL TOAMARITAN SOURCEAMOUN" +"T OF CHECKAND PARALLEL TOATA LINK ESCAPEATINATE MYSLITEBAR ABOVE UNIONBELGTHO" +"R SYMBOLBELOW LONG DASHBENT OVER INDEXBINDING BRACKETBLOCK DIAGONAL BREAKING " +"HYPHENBROWS STRAIGHT CAPITAL LETTERSCIRCUIT-OUTPUT CKET CALCULATORCLOSED BY C" +"URVECORNER WITH DOTDAGESH OR MAPIQDESCENDING TONEDI ALLAHOU ANHUDIALYTIKA TON" +"OSDIGA AELA-PILLADOING CARTWHEELDOUBLE TRIANGLEDOWN SEQUENTIALDOWNWARDS TREND" +"E ISOLATED FORME MUSICAL NOTESE OVER INFINITYEFT REPEAT SIGNEH INITIAL FORMER" +"ICAN FOOTBALLESIDE LESS-THANESSARON CHRONONETIC VERSE SIGNEXPONENT SYMBOLFIVE" +"-LIKE BHALEFORWARD TILTINGFOUR DOTS WITH FOUR ENCLOSURESFRACTION DIGIT FTER C" +"OMPLETIONGEMINATION MARKGGLY LINE BELOWGHT REPEAT SIGNGROUP SEPARATORHAKING P" +"ARALLELHALF FILL SPACEHEH MEDIAL FORMHOOKED INDEX UPHORIZONTAL DASHHORIZONTAL" +" FILLHOUSAND STATERSHREE DOTS BELOWIAMOND UNDERBARIDING ENCLOSUREIGN PALI VIR" +"AMAIMISEOS CHRONOUIMPERFECTA RESTING SYMBOL FOR INGLE HEAD MARKINUS SIGN BELO" +"WINVERTED LAZY SINVERTED STROKEIRCUMFLEX BELOWITH FINGERNAILSIZED WHEELCHAIRK" +"ISIM5 TIMES BIKTOVIK NUMERAL LATION FUNCTIONLD TAMIL SHORT LEFT DOWN BARB LEF" +"T HALF BELOWLEFT HALF BLACKLEFT HAND INDEXLETTER CAPITAL LEVEL TONE MARKLEVEN" +" FULL STOPLIGHT AND LEFT LMOST EQUAL TO LONG HOOK BELOWLONG VOWEL SIGNLOOK OF" +" TRIUMPHLOSED INSULAR GMALAKON CHROMA MARRYING MAIDENMEEM FINAL FORMMIDDLE DI" +"AGONALMURDA MAHAPRANAN-ARY SUMMATIONNA DOUBLE HELIXNASALIZED TONE-ND OF PARAG" +"RAPHNJOINING MACRONNO GOOD GESTURENOON FINAL FORMNOON WITH KASRANOT APPROXIMA" +"TENVERTED UBADAMAODIFIER DAMAGEDODO SOFT HYPHENOGOGRAM KHAMTI OLIDUS OPERATOR" +"ON TOP OF MODEMOND PLACE MEDALONJOINED HINGEDONTOUR INTEGRALORIZONTAL COLONOR" +"T EQUALS SIGNOUBLE BACKSLASHOW-FALLING TONEOWER HALF BLACKPEN SQUARED DOTPENS" +"ION RAILWAYPERTHO PEORTH PPLUS SIGN BELOWPRISHTHAMATRA EPUT SYMBOL FOR QUADRU" +"PLE ARROWQUADRUPLE DASH R WITH FISHHOOKREAMY EYEBROWS RECEPTIVE EARTHRECITATI" +"VE MARKREVERSE SOLIDUSREVERSED OPEN ERIGHT HALF RINGRIGHT RERENGGANRIGHTWARDS" +" AND RIGHTWARDS TICKRMAN PENNY SIGNRNAMENT STROKE-S ELEVATUS MARKS IN SILHOUE" +"TTESALTER PAHLAVI SHITA PLUS GISHSHORT OVER LONGSIXTEENTH NOTESSSICAL BUILDIN" +"GST QUARTER MOONST SYRIAC CROSSSTERESIS SYMBOLSTROKE NOT SIGNTAI LAING TONE-T" +"HREE DISH TENUTHROWING A KISSTILDE DIAERESISTIP ON THE LEFTTOP RIGHT FATHATRI" +"ANGULAR MARKTVIMADUR SYMBOLTWO WITH STROKEU PLUS U PLUS UUBLE RING BELOWUGMEN" +"TATION DOTULTIPLICATION XUMAI PALAUNG FAUR POINTED STARUSTER NOTEHEAD VERTICA" +"L SECANTVOWEL SEPARATORVOWEL SHORTENERWALLPLANE SPACEWHITE DOT RIGHTWITH DOWN" +" ARROWWITH RAIN DROPSXTEEN FULL STOPYNCHRONOUS IDLEZAIN FINAL FORMZERO WITH S" +"LASH AND DIAERESIS CROSSING ESH2 HASER FOR VAV WITH BACK YER WITH LONG LEG-CU" +"RRENCY SIGN1 OVER LAK-081AFETY SCISSORSAI LENGTH MARKALF TREE TRUNKALLAJALALO" +"UHOUAMNUC PII KUUHAND COLD SWEATANGLE OPENING AROUND-PROFILEAU LENGTH MARKBAG" +" MEMBERSHIPBHATTIPROLU AABLACK TRIANGLEBLADE SCISSORSCENTURIAL SIGNCEPTER OF " +"JOVECERTAINTY SIGNCOLON OPERATORCRIFICIAL WINED-UP NEWSPAPERDASIA PNEUMATADEY" +"TEROS ICHOSDI ALLAAHU ANHDIAGONAL MOUTHDIAGONAL PATH DIO MICROPHONEDIRECTION " +"FLIPDOES NOT EXISTDOUBLE-STRUCK DUN3 GUNU GUNUED SYMBOL FOR EMIVOWEL SIGN END" +" OF SECTIONENDED MULTIMAPENNA WITH BARSEPENTHETIC YUTERIAL ARAMAIC ERIC INDIC" +"ATORERTICAL JOINEREXCLAMATION OHEXTENDED BHALEFATHATAN ABOVEFFED FLATBREADFFI" +"CE BUILDINGFINAL ANUSVARAFORWARD INDEX GERED TREMOLO-GHT WITH STARSGUNU TIMES" +" ASHGYPTOLOGICAL AHESIVE BANDAGEHIRD-STAGE HLIHREE-LEGGED TEIGHTWARDS VANEIKH" +"AYA PUTNAYAINFINITY BELOWING HANDS SIGNINOLOGICAL DOTINSERTION SIGNINVERTED B" +"IRGAINVERTED DAMMAIRCULAR VIRAMAISED ROUND DOTISSION TICKETSITA PLUS GISH IVE" +" KEY SYMBOLIVE OBOLS SIGNIWAZ TIR TYR TJOINED SQUARESLACE OF SAJDAHLEFTWARDS " +"AND LEFTWARDS TICKLESS-THAN NOR LETTER OVERLAPLEVEN TWELFTHSLIGHTLY SMALL LIN" +"E EXTENSIONLITTLE SECTIONLOTUS POSITIONLOWER DIAGONALMEDIUM DIAMONDMENSION OR" +"IGINMID-LEVEL TONEMOTHETIC ABOVEMRACHNOTIKHAYANORTH ARABIAN NYI ZLA NAA DAOBL" +"IQUE HYPHENOLD RESOLUTIONONE SOUND WAVEOOTNOTE MARKEROPPOSING PIRIGORANGE DIA" +"MONDORD SEPARATOR OSITION SYMBOLOT TILDE ABOVEOTHERS CIRCLEDOUR OBOLS SIGNOUS" +"ING THUNDEROVER GUD LUGALPAO KAREN TONEPARATED SYMBOLPARTMENT STOREPEN MARK B" +"ELOWPLE WITH HEARTPLETE INFINITYPLITTING APARTPPED MIDDLE UPPROTECTED AREAQUI" +"NARIUS SIGNRD PLACE MEDALREATIVE HEAVENREE-LINE STAFFREH FINAL FORMREVERSED-S" +"CHWARIGHT CROSSBARRING MEGAPHONEROSS ON SHIELDSECOND SUBUNITSEL LOCOMOTIVESEP" +"ARATOR MARKSHAN MEDIAL WASHESHIG TIMES SIDE-DOWN FACESMALL LETTER DSMALL LETT" +"ER JSMALL TRIANGLESMOKING SYMBOLSPEECH BUBBLESSQUIGGLE ARROWSTRONG ISOLATETEL" +"PIECE CLOCKTERMINAL MARK-TETARTOS ICHOSTHAKA ANUDATTATHALAN ETHEL OTHER CHRIS" +"TMASTHOUSANDS MARKTHOUSANDS SIGNTHREE POINTED TIMES OPERATORTIMES SHU TENUTOP" +" HALF BLACKTRANSMIT STATETRIANGLE WITH TURKIC LETTER TWO DOT LEADERTWO ENCLOS" +"URESTWO WHITE DOTSUAL WHEELCHAIRUBHAYATO MUKHAUND MARK ABOVEUNDER RELATIONUNI" +"ON OPERATORUNIT SEPARATORUP RIGHT BARB UPPED INDEX UPUSPENSION MARKVENIENCE S" +"TOREVERTICAL ABOVEVERTICAL COLONVERTICAL HEAVYVERTICAL LIGHTVONIC ASTERISKVRO" +"N SNOWFLAKEWITH DOT BELOWWITH FATHATAN WITH LEFT HOOKWORD SEPARATORXO EKFONIT" +"IKONYOUTHFUL FOLLYZAH WITH MEEM ZAKAYA LANTERN AND SKI BOOT AND YEN SIGN B BA" +"R SYMBOL BAT AND BALL BZHI MIG CAN CROSSING KA2 DIMINUTION-1 DIRECTIONAL HEA" +"DED ARROW OF THE HORNS OPPOSING KUR TIMES KASKAL VARIANT FORM WITH INK PEN WI" +"TH JEGOGAN WITH OVERBAR WITH TEE TOP WITHOUT SNOW-ESASA DOTTED-OFF CALENDAR-O" +"R-PLUS SIGN-PER-EM SPACEACCOMMODATIONALL LOST SIGNAMUHU ALAYNAAAN RUPEE SIGNA" +"NNED LEATHERAPPED PRESENTAR WITH QUILLARCHAIC KOPPAARGOSYNTHETONARLAUG SYMBOL" +"ARRED TRIDENTARROW OVERLAYAUDATE CHRIVIAWELLEMET YAZBACKSLASH BARBALL AND HOO" +"PBASAN LETTER BOHAIRIC KHEIBOTTOM CORNERBOWING DEEPLYBY DEFINITIONCHECKER BOA" +"RDCHRYSANTHEMUMCIRCLE INSIDECITATION MARKCRIPTION TAKECRIPTIONAL PACROSSING G" +"ABACROSSING GAN2CROSSING MUSHCULATED LORRYDIAERESIZED UDIC MARK SIGNDOTTED ZL" +"AMA DOUBLE CIRCLEDOUBLE HYPHENDOUBLE MUCAADDOUBLE STROKEDVOECHELNAYA EAVENLY " +"EARTHED PAPERCLIPSEDIC ANUSVARAEELING PERSONEHU FEOH FE FEMPHATIC TONEER BOAR" +"D FILLERTION SYMBOLEUROPE-AFRICAEVERSED DAMMAFICATION CARDFINAL LETTER FINAL " +"SEMKATHFIXED-FORM RAFOREMENTIONEDFROWNING FACEFT ARROWHEAD FULL SURROUNDGAR F" +"RACTION GAW KAREN SHAGIFT ENVELOPEGTER TSHEG MAGYA GRAM SHADH-TYPE SYMBOLHAKA" +"SSIAN CHEHAM DIGIT ONEHERICAL ANGLEHIEROGLYPHIC HINESE TONE YHREE TWELFTHSI W" +"ITH STROKEIDE LOST SIGNIFI ROHINGYA IGHT TWELFTHSILABIAL CLICKILE SEPARATORIM" +"AGE BRACKETINTEREST SIGNINVERTED FORKINVERTED TURNIOT SYLLABLE IRCLED INDEX I" +"SH LIRA SIGNITING THROUGHIVE POINT ONEIVE SLOW SIGNJES SU NGA ROK WORK SYMBOL" +"KAPYEOUNPIEUPL-TYPE SYMBOLLATERAL CLICKLEFT CROSSBARLEGETOS ICHOSLISION SYMBO" +"LLOCATION SIGNLOCK WITH KEYLOSING SPIRALLVE FULL STOPLVEOLAR CLICKMAILBOX WIT" +"H MALL LETTER ZMALO POVYSHE MARKS CHAPTERMASORA CIRCLEMEDIUM SQUAREMELODIC QI" +"TSAMESSENIAN TENMINDER RIBBONMINUS SIMILARMINUS WHITE XMOBILE PHONESMODIFIER " +"MARKMULTIOCULAR ONAP PIZZICATONG TERMINATORNINE TWELFTHSNING MOVEMENTNTY FULL" +" STOPNUMERATOR ONENUMERIC SIGN OBLIQUE LINE OGOTYPE SIGN OLVING HEARTSOMAN NU" +"MERAL ONAL COMPUTERONG RIGHT LEGONG-LEGGED DEONGRATULATIONOON NOTEHEAD OPPOSI" +"NG NAGAOTEHEAD BLACKOURTH SUBUNITOUT MIDDLE UPPA NJI PIPAEMPAIRED ARROWSPLUS " +"OPERATORPPOSING LUGALPREPONDERANCEQUARTERS SIGNRACKETS ABOVERANKS CASKET RIGH" +"T HARPOONRIPLE SVARITARIZONTAL TAILRN PENTATHLONROTATED BIRGARPENTRY PLANERRI" +"AGE RETURNRTABLE STEREOS KAI APOTHESS KRYZHEM ON S UP TOGETHERSAL PLUS TUG2SA" +"MYOK SANNYASELECTED AREASHESH PLUS KISIA-AUSTRALIASIGN AVAGRAHASIGN PAMUDPODS" +"ILI PNEUMATASMALL LETTERSSSAGE WAITINGSTABLE SYMBOLSTERTIUS SIGNSYNDESMOS NEO" +"TE ORDER MARKTED HAND SIGNTHIRD SUBUNITTIRTA TUMETESTOP HALF RINGTU WAS-SALAA" +"MU WITH STROKEUDDISA SIRRAHUE OF LIBERTYUFFLE PRODUCTUPERIMPOSED XUPONDIUS SI" +"GNUPSILON WITH UPWARDS TRENDURNED W BELOWUSHING UPWARDUSICAL LEIMMAVE-LINE ST" +"AFFVEN POINT ONEVERGREEN TREEVERLAY MIDDLEVERTICAL BARSVERTICAL FILLVICE CONT" +"ROL VOWEL SIGN PAW RING INSIDEWAVY LOW LINEWAVY OVERLINEWAW-AYIN-RESHWITH AST" +"ERISKWITH INTEGRALWO-LINE STAFFYMBOL TAU RHOYOD YOD PATAHYUUKALEAPINTUZHOU NU" +"MERAL AND PICTURE AND TOP END CROSSING GU IN TRIANGLE KLYUCHEVAYA LINE SYMBO" +"L OF ANTIMONY ON PEDESTAL OVER KISIM5 OVER MIDDLE OVER TWO PI SKEWED LEFT WIT" +"H DAGESH WITH INDEX WITH UPTURN-DZUD RTAGS -MAIL SYMBOL-SHAPED SIGN-SIMPLIFI" +"ED 6 LONG NGGOOAA AS-SALAAMACE INTEGRALACUTE ACCENTAFU LEERAEWAALLPOINT PENAL" +"T PAN SIGNALTERNATING AND CRESCENTAND OPERATORANG KHANG GYAR DIAERESISARALLEL" +"OGRAMATNAH HAFUKHATTOOED HEADBACK OF HANDBAHIRGOMUKHABEHIND CLOUDBETWEEN LIPS" +"BINING MARK BLACK CIRCLEBLOWING FACEBLUE DIAMONDBRATION MODEBRIDGE ABOVEBSCRI" +"PT ALEFBUTTON MOUSEBYSMAL WATERCABBAGE-TREECALENDAR PADCENDING NODECHAIR SYMB" +"OLCIAN LETTER CIRCLED PLUSCIRCLES AND CK-O-LANTERNCRESCENT BARCROSSING GI4CRO" +"SSING KALCROSSING LU2CROSSING NUNDASHED ARROWDE MARK SIGNDENTAL CLICKDICTION " +"SIGNDIGRAPH KOTODIGRAPH YORIDOT OPERATORDOUBLE ARCH DOUBLE ARROWDOWN HARPOOND" +"OWN NEUTRALDUG TIMES NIEAGULL BELOWEEPING SMALLEIGHTH NOTESEMELY HEAVY EMISOF" +"T SIGNENARIUS SIGNENOS CHRONOUERPENDICULARETRETES SIGNEVERING FACEFALLING DOT" +"SFEMININE DOTFERENCE MARKFLAG ON POSTFOLDED HANDSFORMING ARTSFOUNTAIN PENFT R" +"ERENGGANGAW KAREN EUGBY FOOTBALLGEBA KAREN IGREEN DRAGONGROUND SLIDEGUARDED A" +"REAHAH WITH DALHALF BRACKETHAND FORMAT HASIS SYMBOLHEAD-BANDAGEHIBITED SIGNHR" +"EE FINGERSHYPHEN-MINUSIDENTICAL TOIGATURE SHRIILLED CIRCLEIN MIDDLE UPINDEX M" +"IDDLEING ENVELOPEING HAND FANING HITTING ING OPERATORINTEGRATION INUSOID SIGN" +"INVERTEBRATEIRAGANA HOKAIRTY-SECOND IVE TWELFTHSKANA REPEAT KAPPA SYMBOLKHAMT" +"I TONE-KHMIMIC KHEILAM WITH YEHLARGE DOUBLELARGE TRIPLELATALIZATIONLAYING CAR" +"DSLEADING EYESLEFT HARPOONLER CONSTANTLICKING LIPSLIMBS DIGITSLINGING FIRELIN" +"KING MARKLL MODIFIER-LLE PATTERN LOWER CORNERLOWERED FLAGLU PLUS ESH2LUS NOTE" +"HEADM NSHUT NYAMMADDA ABOVE MALL SECTIONMANNAZ MAN MMBELLISHMENTMEDARY CAMELM" +"EDIUM SHAFTMETA STAVROUMIDDLE PIECEMING TO MEETMONOGRAPH UKMPHASIS MARKMPTY C" +"ENTRE MUM TIMES PAN ELEMENT OFNARROW SHAFTNATURAL SIGNNCK CONSTANTNDING PERSO" +"NNEPOSTOYANNYNERSHIP SIGNNGLE BARLINENJALA GONDI NORTHERN TSENOTCHED HOOKNOTC" +"HED TAILNUITY SYMBOLOGOGRAM NYAJOHAZARD SIGNOID NOTEHEADOING TO MEETOK HAND S" +"IGNON US SYMBOLONISHED FACEOPENING LEFTOPLE HUGGINGOPPOSING LU2OQ NSHUT YUMOT" +"TOM HALF OOUCHES THUMBOUGHT BUBBLEOUR TWELFTHSPHEME JOINERPOETRY MARK-PORT CO" +"NTROLPOUTING FACEPROTOS ICHOSQUARED ARROWQUARTER SIGNQUIRREL TAILRAFFIC LIGHT" +"RAH BEN YOMORANCHING OUTRCHAIC SAMPIREFACE COLONREN CROSSINGREVERSE MARKRIAGE" +" SYMBOLRIAL TRAMWAYRIGHT DOUBLERIGHT SINGLERING OVERLAYRION CHRONONRISTMAS TR" +"EERNAM BCAD MAROLLING EYESROUNDED ZERORROUND FROM S ABOVE SIGNS SUBPUNCTISSAZ" +" IS ISS ISECTION SIGNSH ZIDA TENUSHED BARLINESHORT RIKRIKSMALL DOUBLESMALL TR" +"IPLESMILING FACESS-THAN SIGNSUR OVER SURT MONGKEUAEQTE SEPARATORTEARS OF JOYT" +"ERNATE AYINTHETA SYMBOLTHIC LETTER THODOX CROSSTHREE HEARTSTOP-LIGHTED TRAGRA" +"M FOR TRIPLE DANDATRIPLE FLAMEUBSCRIPT TWOUGHT BALLOONUH PLUS GISHULL NOTEHEA" +"DUME INTEGRALUN WITH RAYSUPPER CORNERUSEATED FACEUTH ARABIAN UTH-SLAVEY KVAKR" +"AHASANYAVER EQUAL TOVICTORY HANDVOLTAGE SIGNWDATA SQUAREWIGGLY FENCEWITH SMAL" +"L VXIRON KLASMAYAN NUMERAL YMBOL BINDU YOD TRIANGLEYOUTHFULNESS AND MACRON DE" +"CORATION I ZAPYATOY OF FLOWERS OF FORTUNE OVER BULUG OVER IDIM PLUS MASH2 PL" +"US NUNUZ PROPORTION S ZAPYATOY SHOE STILE TACK BELOW TIMES ESH2 UPPER HALF WI" +"TH CARON WITH COMMA WITH DASIA WITH FLASH WITH JACKS WITH MAPIQ WITH PLATE WI" +"TH TITLO WITH TRILL WRIST FLEX-COPPER ORE-MINUS SIGN-OFF SYMBOL0 FOOTSTOOL3 L" +"ONG NGGO5 LONG MBOO6 LONG NGGEACKED COMMAACTIVE SIGNACUTE-GRAVEAESCULAPIUSAES" +"HAE NYAMAGAZ DAEG DAGONAL SIGNAILLESS PHIAMUSED FACEARAM GONDI ARM SPIRAL ARM" +"S RAISEDARPEGGIATO ASE TO THE ATH PRODUCTATION POINTATION SPACEAWNING FACEBAN" +"K SYMBOLBELOW RIGHTBETA SYMBOLBLACK ARROWBOTTOM MARKBREVE BELOWBUMPY ABOVEBZH" +"I -KHYILCAN RGYINGSCARET TILDECCUMULATIONCE OF PIZZACELANDIC-YRCH AND LAMPCHI" +"NG CHICKCK SEXTANT-COMBINATIONCOND SCREENCONTAIN AS CREDIT SIGNCROSSING BUCRO" +"SSING ENCROSSING IMCROSSING PICROSSING URCTION MARK CTION MARK-CURVED BENDDAL" +"ETH-RESHDASH SYMBOLDE KIKAKUI DENT EMBLEMDESK PERSONDIATONON DIDOACHASHMEEDOL" +"LAR SIGNDONG TSHUGSDOUBLE AND DOUBLE MARKDOUBLE RINGDOUBLE SHADDUATION CAPDYO" +" CHRONONE WITH VEILE2 TIMES ANEAVER DENE EDICAL MASKEEZING FACEEN STRAIGHTENG" +" DIGRAPHENTHESIZED EORGIAN NAREPIDAUREAN ERCENT SIGNESH DIGRAPHETEI MAYEK EUN" +"JOMNDEUQFGHANI SIGNFINAL SIGMAFIRE ENGINEFOURTH ROOTGAP FILLER-GAYANUKITTAGE " +"AT NIGHTGENTLE WINDGHAIN WITH GRAMMA SIGNGRAVE-ACUTEGSUM -KHYILGUISED FACEHAG" +"GAR YAZHHANG KHUDAMHAWH HMONG HEATED FACEHEAVEN MARKHEELED SHOEHIGH STROKEHIT" +"E DRAGONHLETIC SHOEHOKHLOM ON HORA DIGIT HREE BALUDAI TIMES BADI TIMES NUNIBL" +"E-CREE YIEN MONSTERIL FRAGMENTILCROW SIGNILIQUA SIGNIMULTANEOUSIN EQUAL TOIND" +"ERGARTENINDICESIMA IPLE TONGUEIRCLED TEXTISIGOTHIC ZIVERY TRUCKIX TWELFTHSJEC" +"T SYMBOLJIHVAMULIYAJOYOUS LAKEKAARA POLLUKRAINIAN IEKTIESELSKABL OF THREADL T" +"IMES LALLACK SULFURLACKLETTER LATIN CROSSLCE TSA CANLD POLISH OLD SCRIPT XLEA" +"F CLOVERLEEP SYMBOLLEFT DOUBLELEFT SINGLELEFT SYMBOLLETION MARKLEU SATANGALIN" +"E FILLERLON SKEWED LOSED ENTRYLOSING MARKLOTI NAGRI LT OF CLOTHLTED FLOWERLTE" +"RNATE AALTERNATE YALU PLUS IGILUPOVODNAYAMACING FACEMBA BAYANNAMBLER GLASSME " +"LONG CANMED RGYINGSMFON PIPAEMMICAL HEARTMIDDLE BENTMIDDLE HOOKMIDDLE STEMMON" +"OCULAR OMOVED BELOWMUNCIA SIGNMUUSIKATOANN THE VERGENBLENDED UKND ODD SIGNND " +"OF PIECENG LEFT LEGNIKOLSBURG NITIAL IZHENSE CHEEKS NTIMONY ORENUMBER SIGNNUM" +"BER ZERONUN HAFUKHANUSVARA ONENYIS -KHYILOF ENVELOPEOF MASHFAATOHINGYA YEHOLD" +" NUBIAN OMAN SIYAQ ONIAN SIGN OPPOSING ENOPPOSING IMOR OPERATORORCE SYMBOLORT" +" BARLINEOUBLE ACUTEOUBLE DANDAOUNDED FACEOUTHERN TSEOVERSTRUCK PARAKALESMAPER" +"ISPOMENIPHNAEK MUANPODCHASHIEMPOST OFFICEPUT MORTUUMQUERED FLAGQUIQUADRATERA " +"SOMPENG RACHMA SIGNRADITIONAL RAISED FLAGRANSMISSIONRCHAIC JNYAREAKTHROUGHRES" +"PONDS TORIGHT GUARDRIGHT HEAVYRIGHT-HAND RING LIQUIDRIPLE PRIMERISING DOTSRIT" +"ING HANDROKUTASTI ARONTHISMATAROR-BARRED ROSS ACCENTRPOON ABOVERUNNING MANRYV" +"NIA SIGNSECOND MARKSHAAYATHIYASHEQEL SIGNSIMILE SIGNSINGLE AND SMALL CLOUDSPE" +"ED TRAINSPIRATED FASSANGKIYEOKSTEAMY ROOMSTERED SIGNSTORIC SITESVASTI SIGNSYM" +"BOL VIDJSYURA SASAKTA EQUAL TOTENS DIGIT TETRAFONIASTH-THALATHATHAM DIGIT THI" +"RDS SIGNTHREE TIMESTIEE SHEUOQTIGHT ACUTETONAL MARK TRAIGHT WAWTRESS SIGN TRE" +"SVETLAYATRIAN CAMELTRUNCATED ATUNE COOKIETWO FINGERSTY THOUSANDUBLE TONGUEUET" +"TE BREADUG RTAGS GYUISHED FACEULO TWO SUMUMAN FIGUREUNIT DIGIT UNJO WYNN WUPA" +"DHMANIYAURRENT SIGNUSHING HANDUTH CORNERSUTING WHALEVA V CHELNUVAMAGOMUKHAVAR" +"YS ICHOSVE OF PEACEVISARGA ONEVYKA ABOVE WASLA ABOVEWE PALAUNG WHITE JOKERWIN" +"G NEEDLEWINKING EYEWITH GARDENWO TWELFTHSXAGRAM FOR XESTES SIGNXI RADICAL XTI" +"NGUISHERYEORINHIEUHZERO THIRDSZIGZAG LINEZZA WA JALL AND ACUTE AND ARROW AND " +"BREVE AND KNIFE AND MOUSE DRAWINGS KABA TENU LATE FORM OF DHARMA OVER KAD5 P" +"LUS SHU2 POVODNAYA RESUPINUS RGYA GRAM SCHROEDER THOUSANDS TIMES SHE WITH BAS" +"E WITH BELT WITH EGGS WITH LOW WITH PAGE WITH PLUS WITH RAIN WITH RING WITH " +"TAIL WITH TICK-LUE KARAN-SHAPED HA1 LONG MBE1 PLASTICS2 LONG MBO2 PLASTICS2 P" +"LUS ASH3 PLASTICS4 PLASTICS5 PLASTICS6 PLASTICS7 PLASTICSA PLUS IGIA PLUS KUR" +"A TANG LAIAB2 TIMES ABATA TREEACE FILLERADAK BINDIADDA WITH AEDA-PILLAAILED B" +"IRDAKKHANGYAOALEF LAMEDALEF WITH ALENT SIGNALLY MARK ANDHI MARKANGKHANKHUANGU" +"LAR TOAR ECLIPSEASPIRATIONASTERISCUSATRICHISMAATTY WITH AUTOMOBILEAYER BEADSB" +"A SATANGABELOW LEFTBLACK FLAGBLUE HEARTBOLD SHAFTBROKEN BARBSTRUCTIONC WITH D" +"OTCAPITAL ETCH BALLOONCHAD RTAGSCHARACTER-CHECK MARKCIRCLED CACISIVENESSCOLAT" +"E BARCOMPONENT COMPONENT-CROPHONIC CROSS MARKCURLED WAWCURLY HAIRCY MESSAGED " +"KEYBOARDD WITH DOTDA PLUS HADA SATANGADED PERSONDIATONIKI DIGIT ZERODIRGA MUR" +"EDOUBLE BARDUOUS TREEE PLUS SUMEARLY FORMEARTH MARKEBENSTIMMEED FIGURE-ED FIN" +"GERSEDESTRIANSEEKING EYEEICH STARKEIGHTIETHSELT BUCKLEENETRATIONENS SYMBOLENT" +"HUSIASMEONGCHIEUMEQUIHOPPERETTA-PILLAEUTRAL YEREVERSED PEF SHE-GOATFAHRENHEIT" +"FFICULTIESFINAL HETHFOR RECORDFORMATTINGFRONT WALLFTOGGOS OUG MUNDARI GAGE CL" +"AIMGANDA MARKGAS BZUNG GBAKURUNENGGING FACEGGRAVATIONGHT LIFTERGIMEL-HETHGOLU" +"BCHIK GREE SLASHGUA PI MAOHAAPRAANA HAMZA MARKHAN DIGIT HEAVY BEATHERMOMETERH" +"OOK ABOVEHOTIC HOOKHREE ABOVEHUNGARIAN I ARCHAIONICAL TAPERICK FIGUREIDDLE MA" +"RKIDEOGRAPH IED SHRIMPIGATING RAIGATURE OEIKRON ISONILE FOLDERINDEX BENTINDU " +"BELOWING LARGE ING-SHIFT INHERENT AINITIAL RAION BOTTLEISMUTH OREIT MBAAKETIT" +"H DIGIT IXTHS DISHJONG TILE K2 PLUS BUKA SATANGAKAI SYMBOLKINDI MVOPKRYZHEVAY" +"ALACK JOKERLANE MERGELE LETTER LE-DELAYEDLEFT GUARDLEFT HEAVYLEFT LIGHTLEFT S" +"ERIFLEFT-HAND LEK ATTAK LENDED YUSLET SYMBOLLGIZ EOLHXLHAG RTAGSLIGHT BEATLIG" +"HT BULBLIMITATIONLINDRICITYLLOW HEARTLOGICAL ORLONG FINALLONG OVER LONG TSHEG" +"LOWER HOOKLPAPRAANA LTERNATE ULTIC CROSSM STALLIONMADDA MARKMALL ALEPHME PLUS" +" ENMEEM ABOVEMEL SYMBOLMILLE SIGNMINO TILE MONOFONIASMONOGRAM BMONOSPACE MONT" +"H SIGNMOTORCYCLEN NGGEUAETNAKE BELOWNANGMONTHONASPIRATEDNDA PA NJINDU TEMPLEN" +"GLICANA WNGUAGE TAGNOTE WITH NTITY MARKNTO SHRINENUMBER TENOANDAKHIATOF HYGIE" +"IAOLING FACEOLON EQUALOMMA BELOWON MEDIAL OON LILITHOON SELENAOP NKAARAEOPEN " +"SHELFOROME SIGNORTHERN TAOSSED SHEIOSTAL MARKOTING STAROUND OMEGAOUR FIFTHSOU" +"T INDEX OUTER JOINOUTHERN TAPASSIMBANGPEDAL MARKPLUS BELOWPLUS ERIN2PLUS NAGA" +" POLICE CARPOUND SIGNPPOPOTAMUSPRALINEAR QUISH QUADR2 PLUS SURAGGISMATARCHAIC" +" KHARDHACANDRARECIPITATERED DRAGONRESH BELOWREVERSED IRGE CIRCLERGE SQUARERHO" +" SYMBOLRIGHT HOOKRIGHT SIGNRING ABOVERING THUMBRKING FACEROAD OMEGAROEZENIAN " +"ROUND DOT ROUNDED ERRSI SYMBOLRUDIMENTA RUPEE MARKSBUB -CHALSCAN LINE-SE-CREE" +" SKSELINE ESHSGOR RTAGSSHARP SIGNSHMIRI YEHSIDEWAYS ISIXTEENTHSSMALL TAH SMIL" +"O SIGNSPACE MARKSS OF MILKSSANGARAEASSANGPIEUPST PALETTEST-FEEDINGSTRAL SIGNS" +"TROM SIGNSTRUCTION SYLLABLE MT AND BOLTTAIL GLASSTAMAN SIGNTEMPLATIONTERNATIV" +"E TESE CROSSTHAPASCAN THDAY CAKETHMIKON N TIMES SIGNTING HEARTTOP CORNERTREFA" +"CTIONTRESS AND TRETCHED CTWENTIETHSTWO SHORTSTWO THIRDSTYPE COLONU CIN HAU U2" +" PLUS BAUAM TSHOOJUARDEDNESSUBLE DASH UM ROTUNDAUMAN EARTHUNKIA SIGNUP HARPOO" +"NUP NEUTRALUP OR DOWNUPPER HOOKUR CORNERSUR HUNDREDUR YIG MGOURIPIGMENTURVED " +"OMETUSEL HORSEUTH OR SPYVEL SLIDERVERAGE BOXVIE CAMERAVIOUS PAGEW OR MODELWHI" +"TE FLAGWHITE HAIRWHOLE NOTEWING HEARTWITH SPOONWITH STRAWWITH WINGSWO SHORTS " +"XED BICEPSXHEEJ CEEVY AND RICEYEH BARREEYMBOL AIVAZAR AMULETZEIRO SIGNZH DIGR" +"APHZU OVER ZU AND BELT AND CURL AND TAIL APODEXIA DIVIDERS FROM BAR GARSHUNI " +"OF BLOOD OF PAPER OVER BAL OVER LUM PLUS GAL PLUS GUD PLUS KU3 PLUS LAL PLUS " +"SAG PLUS TUR PLUS ZA7 RA OR RI RICKSHAW SPARKLER STREAMER TIMES HA TIMES UD T" +"ROMIKON-AMMONIAC-KHYUD PA-LOW TONE-MID TONE-STACCATO0 LONG LE1 CHARIOT2 GARME" +"NT247 DIPTE3 PLUS AN5 BATHTUB5 CYPERUS5 LONG JOA PLUS NAABOVE TO ACE NOTE ADE" +"G ADEGADMA GDANAF PERSONAFFE FACEAINTBRUSHAISED DOTAJANYALANAL RUNOUTALAYALAM" +" ALI GALI ALPAPRANAANEROSIS ANG CITI ANGGEUAETANSKRIT SANTAYALANANTHAKHATAOS " +"ICHOSARCHAIC MARISTERA ARM CLOCKAS MEMBERATHAMASATATTACHED AVE ARROWB DIGRAPH" +"BASE UNITBEER MUGSBIAL SIGNBICYCLISTBING CANEBITE LIPSBKHASIAN BO BAIMAIBO GY" +"FU GBOTH BENTBRUL SHADBTRACTIONCANG TE-UCAPITAL DCAPITAL ICAPITAL QCARTRIDGEC" +"HANICAL CHAVIYANICHOSEONG CLOSED PLCOIN SIGNCOMPLETEDCONJOINERCORN FACECRESCE" +"NDOCUBE ROOTCULTATIOND SALTIREDAD WITH DENT AND DEPARTUREDOWN HANDDOWN SIGNDO" +"WN STEPDRAM SIGNDUS RTAGSE AT LEFTEAVY DOWNEBIT SIGNED DIGIT ED PLANETEEN WIT" +"H EFAIDRIN EFORMED TEIGHT OF ELEGRAPH ELLOWSHIPEMBEDDINGEMPTY SETENTRY SAWER " +"BUBBLEERCIAL ATERTY LINEES AKURU ESAME DOTETER SIGNETRASIMOUETTI BALLEURO SIG" +"NFACING UPFEH WITH FINAL MEMFINAL NGAFINAL NUNFISH TAILFLAT SIGNFOUR BENTFROM" +" WALLG IN HOLEGITTARIUSGREATER YGRIK SIGNHAIKSUKI HALF NOTEHALF SIGNHALSHELET" +"HARACTERSHARD SIGNHEADSCARFHI SYMBOLHIMA SIMAHINOCEROSHIYYAALAAHOOK MARKHOT S" +"ASAKHREE FOR HWAZ EH EI PLUS LIIA SYMBOLIALECT-P ICE CREAMIDEOGRAM IDEWAYS UI" +"GH HAMZAIGHTH ASHIGN NUKTAIGN SAFHAIGN TOMPIILE TILDEILIPPINE IN SQUAREINAL N" +"OTEINARBORASING CARD ING DOLLSING GLOVEING LANESING STONEINISHMENTINNYIIYHEIR" +"ST MARKISEN-ISENITRA SIGNIVE-PULL-IVINATIONJERUSALEMK GESTUREKA- SHOG KAMEYTS" +"A KEMPHRENGKING BOOTKSTREPTONKU RU KHAKYO TOWERL ME HANDLACKFOOT LAN SIGN LAR" +"GEMENTLEFT RINGLEFT TACKLIGHTNINGLINE FACELISSANDO LITTLE UPLIVERANCELLABLE B" +"0LLABLE OMLOND HAIRLONG TIP LOWER DOTLVIN SIGNM HE-GOATMAEMGBIEEMALL RINGMARK" +" CIM MARK SHADMBROIDERYMETOBELUSMHANCHOLLMRACHNAYAMUKPHRENGNA KHONNANCLOSING " +"NDAILING NFORZANDONG SANDALNGER ROOTNGER SHIPNGUN SIGNNIGGAHITANIGHT OF NIHSH" +"VASANING SIGNNO TELEIANSERT AT NTERPRISENTESSENCENTRACTIONNUSVARAYANVERTED RO" +"CCLUSIONODIASTOLEOF STIMMEOKED HEADOKED TAILOKOUFISMAOM SYMBOLON GROUNDON TEU" +"AEQONE MARK-ONE THIRDONG GRAVEONGSEONG OO DENNENOP HALF OORT-TWIG-ORTH WINDOT" +"AL SIGNOURA SIGNOUT MOUTHOUTH WINDOVER GAN2OVER MUSHOW KAVYKAP DIGRAPHP ELAMI" +"TEPAA-PILLAPADE SUITPANYANGGAPENT SIGNPENTASEMEPIDERY HAPLE HEARTPOSITIONSPPO" +"INTED PPOSITIONPROJECTORQUADCOLONQUEEN OF QUSHSHAYAR PLUS RARCHAIC IIRCHAIC R" +"ARDEL DKARREAK HERERED JOKERREDNE ON REFORMED RFUL FACERIED FACERNEY PARARO W" +"IDTH ROJECTIONROTATION-RPORATIONRTER MARKRTS MEDALRUM CLEF-RWARI DDAS DIGRAPH" +"SEMICOLONSEPTEMBERSHAB CEEBSIVE FACESMALL YUSSOF PASUQSPIRITUS SSANGSIOSSTAL " +"BALLSTEBASKETSTRELNAYAT OF MEATT ON BONETABE SIGNTAKHALLUSTANDSTILLTED PLANTT" +"EH ABOVETIMES NA2TIMES PAPTO CORNERTONE MAI TRAIGHT UTREDECILETRESVETLOTTED S" +"TEMTUKWENTISTUTEYASATUBSTITUTEUE MAEMBAULL BLANKUMED HEADUNGLASSESUNGSEONG UP" +"PER DOTUPTSTIMMEUR-DE-LISURAMAZDAAURLY LOOPURNED AYBURNED GANURUZ UR UUTRA MA" +"RKUURDHAJA UVUZHAKKUVANAGARI VELOPMENTVER LUGALVERLONG AVEUAENGAMVICE MARKVIG" +"INTILEVINE LEAFVISARGAYAVOCALIC RVOETOCHIEVRAKHIYA WASH TAILWING STARWITH FAC" +"EWORDSPACEWRINKLES WRY SMILEXCITEMENTXHAUSTIONY BLOSSOMY-FOURTH Y-FOURTHSYEAR" +" SIGNYEH ABOVEYRANISMA Z DIGRAPHZAKRYTAYAZAL SASAKZENE RINGZERO SIGNZIR SASAK" +" ANTENNA AT DUSK CEDILLA FACING HANDLES KEMBANG LANTANG NUTILLU OF YARN ON L" +"EFT OTTAVA OVER KG OVER MU OVER ZI PLUS DI PLUS DU PLUS RU POLNAYA RASWADI S" +"ATCHEL SCOTS S SLIDING TALENTS TTUDDAG YUQ NAE-CREE TH-EM DASH-KHIEUKH-PHIEUP" +"H-X BELOW0 BRONZE1 BARLEY1 HELMET3 ARMOUR56 TURO28 KANAKOA SIGN AABAAFILIABOA" +"FILIACKSPACEAEN NYAMAIYANNOIALLIANCEAMS HORNANC SIGNANE TREEANS SIGNAPITAL FA" +"R TSHESARCASITEARKLEAN ARRIVINGARSI YEHARTYRIA AST WINDASTERN WATAKANA ATE MA" +"RKATEBOARDATH MARKAVY BANDAY-NIGHTAZHAAKKUBACKWARDBATBEIT BER POLEBEVERAGEBIE" +"E FONBILLIONSBINOVILEBLE SIGNBLED CARBLINEAR BOL SIGNBOT FACEBOX TRAYBRA FACE" +"BUNDANCEC SIYAQ CABLEWAYCAL DISCCANDICUSCASSETTECEILING CER BALLCHATTAWACHINE" +"SE CK CHARTCLIMBINGCLOSED TCOMBINEDCOUNCIL COUNTERSCURLICUECURSIVE D BUBBLED " +"CROSS DAMMATANDANTAJA DDY BEARDIAMONDSDIFONIASDIM GUNUDIT CARDDOCUMENTDS-CREE" +" DUSHENNADVANTAGEDVISVARAE OF POOEBEEFILIECH YIWNED BRICKEGORIAN EK ONKARELEP" +"HANTEN NTEUMENICIAN EOUT BOXER TRUTHERAL URNERDIGRISEREVODKAESH LOOPEST WINDE" +"T SHOESETA SIGNETRASEMEEUFEUAETEVEN OF EVERANCEEXCHANGEFEBRUARYFILE BOXFINAL " +"THFLOURISHFOR STOPFRAKTUR FRICAN DGARITIC GBASINNAGENITIVEGLASNAYAGORAZDO GRE" +"AT SAHAGALL HHALF GURHAN-AKATHARBAHAYHARMONICHESPIAN HOP BELLHREE OF I SHAKTI" +"ICHAEAN IGMOID SIMANSIS INAGARI ING BELLING BOWLING ROD IRD MARKIS FORM IS WH" +"EELIS-PILLAITA MFONJACK OF JAVIYANIJUNCTIONKAIYARAAKASRATANKATAKANAL POLISHL-" +"LAKUNALA LENGALATION XLEANING LESS SHALESSER YLF RING LFWIDTH LKULIZMYLOCATIV" +"ELONG BARLONG S TLORRAINELOW STOPLOZHITIELTRY LEGLUB SUITM ALLAAHMALL AXEMAND" +"ARINMANGALAMMARRATANME BADGEME WITH MEM-QOPHMIONIAN MMATION MON TIMEMY HOUSEN" +"-JOINERNA METEKNAMENNY NAVIYANINCE SIGNNED FOODNEIFORM NEUTRAL NG RTAGSNI ABO" +"VENINE OF NITIAL ZNO SLASHNO THUMBNOTE PADNOVEMBERNRES TOSOBOOFILIOCALIC MOCK" +" SALTOCUS OF ODESTONEOHM SIGNOLLOWINGOM NTEUMOMANIAN OMMA BARON CROSSONE FOR " +"OO TYPE OREHEAD ORM FEEDOT MBUAEOTIFIED OVER BU OVER GA2OVER GI4OVER SAGOVER " +"SHEOVER TIROVERRIDEPAIRTHRAPAKPAK EPALOCHKAPAVIYANIPENTAGONPRECEDESPROSTAYAPU" +"B DAWBPUN IYEKPUSHPIKAQAIRTHRAQUINTILERAMMA GGRASMIAN RAUGHTS RDEL NAGREATNES" +"SRED HAIRREE MARKRESVETLYRILLIONSRIYOOSANROSHTHI ROSSED ORSE DUNGS OCHKOMSALT" +" OF SANYAKA SCRIPT GSE WEDGESENTAGONSHKIR KASHOE JOTSHORT ERSIFISTONSIGN LAES" +"IX DOTSSMA SIGNSNA LDANSOFTNESSSPERSIONSQUEEZEDSUCCEEDSSUPERSETSWIMMINGT NGGE" +"ETTAALUJA TAI LUE TAR EYESTER FACETHIOPIC THOSCOPETICK IN TIRRUP RTISMOS ETO-" +"LEFT TOWARDS TRI DISHTRICOLONTTENTIONTTO MARKTURNED MUAREG YAUATRILLOUBJOINER" +"UDAWADI UKEUTNDAULLS LEGUNDERDOTUNDERTIEUNG DASHUP TRUCKV OVER MVE SASAKVERGE" +"NCEVESSEL BVOLUTIONVOMITINGW PRINTSWASH KAFWBOY HATWN HEARTWO ABOVEWON SIGNWR" +"INKLEDWRITING XCELLENTY BEETLEY POPPERYAMAKKANYBEYFILIYENISEI YER YAGHYESIEUN" +"GYIDDISH YPORROONYRILLIC ZAKRYTOEZWARAKAYZWJ THAJ APLOUN BUTTON CER-WA CHIKI " +" FLEXUS ISLAND KEFULA LONSUM MAELEE MENDUT MUOMAE MUQDAM OCLOCK OPEN-O PLOPHU" +" RAMBAT SHAKER SLOWLY STRIDE TEDUNG WAAJIB WOLOSO-CREE R-KIYEOK-MACRON-MU-MO-" +"-SHIFT--THIRTY-TIKEUT-WELSH 0 SPEAR0 WHEAT1 ARROW2 OLIVE2 WOMAN26 EYYY3 AREPA" +"3 EIGHT3 MONTH3 OMEGA3 SPICE3 SWORD3 WHEEL5 NGGEE6 NGGOO7 NGGUA7 NGUAN9 CLOTH" +"9 NGGAAA -PHRUA NAME ACTER TAD NECKAELAENGAETMEUNAHAPAKHALESMA ALLOT XALTILLO" +"AM ALEFAN MARKAND ENDANDERERANGKUOQANGLED ANGLONGANGOLATAPEZIUMARDNESSARRED B" +"ARRED OAS SIGNASHTRA ASUTORUATAEAN ATH OF AU MARKAULDRONAUNTLETAXIMATAAY SIGN" +"BAIRKANBAMBOOSBARREKHBERGINEBERRIESBIG YUSBLACHKOBOARDERBORZAYABOURINGBREVIS " +"BUFFALOBULANCECABINETCANDRA CAP TENCAYANNACELSIUSCHEINAPCHEVRONCHIEUCHCK LIME" +"CLEAVERCLOSE ECLOTHESCOASTERCOMING CONTACTCOPTIC CRACKERD MADDAD MOUTHDA FACE" +"DANCINGDANESE DAYANNADEAVOURDHALATHDIARGONDIPLOUNDISIMOUDOFONONDRIL BUDU NJAA" +"DYNAMICE DRINKE GLASSEAD OREEAVY YAECEMBERED RICEEIGHT KEL PUMPEN LEAFENSHUET" +"ER THANERNIN AESTIVALETNAHTAEULEUNGF DAVIDF SASAKFATIGUEFAYANNAFINAGH FINAL Y" +"FLUENCEFORKINGGAYANNAGENERALGHEUGHEGLAGOLIGOLIAN GRADUALHAARKAAHALANTAHANGUL " +"HAYANNAHEADINGHEXAGONHI SIGNHIUCHUSHYAAUSHI NTEUMI RTAGSIANGQI IBIFILIIC WAND" +"ICOPTERICYCLESIFIED EIKHAHITIL DRUMILLEANNIMILAR INNABARISIBLE ITALIC ITON RA" +"IVE OF JAIN OMJARATI JAYANNAJECTIVEJERAN JJIBWAY KARO BAKAYANNAKEUAERIKHA YAT" +"KKURUNIKOMBUVAKOQNDONKORONISKPAK WAKUTAARUKYLISMAL SEGNOLAGIOS LAK-050LAMITE " +"LASHES LAYANNALE LEAFLEK TOOLENGTH-LEUT KALEYBALLLF FACELIGHT XLJUDIJELLYFISH" +"LYGISMAMAAYYAAMAI SATMANCHU MARCATOMASSAGEMBOL B0MEETORUMERICASMINGKALMINIMA " +"MRACHNYMUNGKAHNANCIALNAYANNANEQUDAANESTED NG MASKNIKAHITNJAEMLINUMBERSOCTAGON" +"OCTOBEROF SOAPOFFICEROGDIAN OKRYTIEOLAPUK OMERANGON FACEONG UEXONGONANONTIEEN" +"OP MARKORCULUSOREVMA ORKHON ORTIETHOT NGOMOT REPHOUR OF OUT HUBOVER ANOVER DU" +"OW ALEFOWILO SOX BACKOX LINEP PIEETPALLAWAPANESE PANSIOSPAYANNAPAYEROKPECTIVE" +"PEGERMAPENGKALPERVISEPHUTHAOPLOYAN POMOFO POVODNYPPROACHPRENKHAPSTICKSPTHAHA " +"PURPLE PUSHPINQUARIUSQUEEZE R2 GUNURA REPARAKHANGRANGKEPRARIETYRAYANNARD DISK" +"RD FACERDO RJEREATHY REREKANRESILLORIPPLE RISIMOURMUKHI ROGRESSROKEN LRRECTUS" +"RTHIAN RY FACES-SAJDASA VAH SAMPHAOSANDHI SANGAN SAYANNASCOOTERSEGMENTSERPINA" +"SEXTILESHAKINGSHIFT TSHORT ASIDDHAMSIGN UDSOLDIERSOV ROGSPRINGSST TUBESTERING" +"SUKUUDOSYNAGMAT ASHESTA MARKTAISYOUTALL AATASHEELTAYANNATCHFORKTHALIYATHESEOS" +"THIEUTHTHKUQI TIKRAMATIVATE TORNADOTRAINERTROLLEYTRYASKATSECHKATTHACANTTILIK " +"TYSCAPEUBUFILIUKKAKHAUM IYEKUN MEUTUP HANDUP MARKUP SIGNUP STEPUP TACKURATION" +"URFACE URGLASSUSSYERUUT TIMEUYGHUR VANESE VAPOURSVAV YODVAYANNAVE DOT VEMENT-" +"VEW NOWVILIK BVILLAINVOICINGVOWEL KVYSOKO WAZ EOHWDRIVERWIFRUITWIGNYANWO FOR " +"WO MARKWO WAENWORSHIPXOPHONEY GREENY HEARTYA LAMPYAH LI YANMAR YAYANNAYELLOW " +"YMAIC LYNAMIC ZQAPHA AGUNG CARET DIPLI EPOCH EQUID FACE- KAPAL LELET LONGA M" +"ELIK MURDA QATAN RULER SPLIT TIKHY-HIDET-HIEUH-IEUNG-PIEUP0 NGGI0 NGGO0 NYON0" +" NYUN00-1021 GBOO1 GOLD1 HORN1 NDEE1 WINE2 KPOO2 MBOO2 NGGU3 GBEE3 HEEI3 NGGA" +"4 DART4 DEER4 KPEE4 MUAN4 NGEN4 NJOO4 NYIN5 MERI5 WOOL6 GUEI6 HUAN6 NGGE6 TRE" +"E7 GUAN7 KAPO7 MBEE7 MBUU7 NDOO7 NGON8 HOOU8 MBEE8 NYAN8 NYEN9 MUEN9 NJEEA HA" +"AMA-KARAAASHAEACINTHAEMMAEAESURAAFFIX AGOGUEAGRANTAILUREAJANI AK-668AKABATANC" +"HORANGKATANIMALANUARYAPISMAAPLI MAPYRUSARADDOARBUTAARSEOSASHGABASSINGATTERYAT" +"TIC AUTUMNBAFILIBANWA BEFILIBETAN BGBIEEBISCUSBISHOPBLINK BOFILIBOWTIEBURGERC" +" CLEFCALATECARIK CASTLECATAWACEVITUCHADINCHAMKOCHEIKHCHEMA CHESS CHIRETCHO CH" +"CHURCHCKNESSCLOSETCODILECRAYONCREASECUMBERCUPPEDDAGGERDE DOGDERMA DGEHOGDICIN" +"EDIESISDOKMAIDUCEUSDVANCEE WAVEEAHMUKED CAPED ICEEENTH-EIGHTYELLITEEMASTIEMPU" +"S EN GHEENIKI ENTIMAEPACT ERMATAESTAN ET KUTEU MBUEUAENAEUNYAMEUREUTEVENTHEXH" +"ALEEXISTSEYANNAF CLEFF MAREFAMILYFATHA FF OF FORMEEFORTISFRAMESGANGIAGBASAQGE" +"ADALGEDOLAGGLINGGHAMALGHETTIGHEUAEGLAZ HGNANT GO NGUGOBLINGORGONGRASP GS-PA G" +"URAMUHALF HHAM AIHAMEDHHAMILOHASHKAHE MGOHEISEIHERMESHEUAEPHIBIT HIMAHUHINGE " +"HIVETEHO HOIHORT IHUMBS HUR PAI HOOKI MAIMIASMA IB YAMIDE ESIEVAN IGGLESILBOA" +"TILLAGEIN YEHINAGMAINCUNXINDHI INGAATINHALEINSHIPIRINGUISSANTISSHARISSIMOITAB" +"LEITHER ITULUMIX OF IXTY PIYANNAKAYAH KE PHOKEYCAPKILLERKLITONKRISISKTIKO KUS" +"HU2KY WAYLAFRONLAMADHLAMEDHLASTONLD MAPLEVEL-LIGIONLIGON LISHA LITIKILLIPOPLO" +"NG EM BOARM BULLMADDAHMADR MMALL FMANYA ME DIEMECHIKMPLINGN DASHN YANGN-NISFN" +"ACLESNCH FRNDA TANEUME NGBAT NGGONGNIRUGUNISTERNIZKO NKNOWNNOKHUKNOR BUNOWMAN" +"NOZHEKNSANAQNSUZ ANTEVMANTIIMUNTOGENOBELOSOCENCEOCIETYODHADHOFOUNDOGONEKOITIC" +" ON KEYONOCLEOOMUUTOOPED OPEN DOPEN POPITSAOSETTEOW TIEPALUTAPBOARDPEAKS PECI" +"ALPENCILPEPPERPICKETPIRIT POKOJIPOMMEEPUFFEDPWATCHQAMATSQETANARAAKANRACINGRAK" +"LITRAVEL-RBITSAREMEDYRENGTHRICORNRIISAPRISEMERKAANUROCKETRSENICRSHANARSIAN S " +"SHOES TENTSAADIYSAUCERSHAYIMSHMAAMSICKLESIXTHSSKAPI SOUNAPSPADESSPATHISPITALS" +"SLESSSTANCESTANCYSTLERSSTOLI STROFOSUCKEDSURANGSURED SWORDSSYNAFISYOUWAT NJAQ" +"TAIKHUTAMINGTARGETTAU ROTAUROSTE TSETE USETERON TEUWENTHAKKUTIKENOTIMATETIRYA" +"KTOPBARTRAPLITRIKE TURBANTUXEDOU MBITUAEQTUUANGXIUBLE XUCIBLEUDARKAUGGAGEUNGA" +"AMUP BOWUPNAYAURNAMAUUMISHUYANNAUZEIROVERTKAVILIANVIRIAMWBERRYWEORTHWINDOWWN " +"BOWWN BOXWO OF WORKERWRENCHX FACEXIMIZEXO NEOYAKASHYIN-DOYOMBO YRENE YSTICKZH" +"ITSA AMPS CAPO CHWV COAT DEKA FUJI GORA HAA ICON ILUT JERA KAWI LACA MOOD SA" +"RI TABS TELU-ALAF-BEAM-RING-SIOS0 BEE0 DOO0 DWO0 GBO0 GEE0 HAN0 HEE0 JOO0 MAN" +"0 OIL0-VAS1 DWE1 FAN1 PEE1 TEE1 TWO1 WVI1 YOO1-VAS2 HEN2 HOO2 KPA2 KPI2 MBA2 " +"MBE2 MBU2 NJA2 NJU2 POO2 PTE2 SEE2-VAS3 BOO3 FOO3 HIN3 HON3 NDI3 RA33 VEE3 WE" +"I3-VAS32 JE4 ABB4 GBI4 KPU4 LEE4 LOO4 MBO4 MON4 NDO4 TOO4 VOO4 WOO4 WUI4-VAS5" +" KEE5 MBI5 NDU5-VAS6 GBA6 KOO6 RA26 SIA6 SOO6 TA26 WEE6-VAS7 FUA7 GBE7 HUN7 J" +"EE7 MIN7 NEN7 NIN7 TWE7-VAS8 FEE8 GBU8 KPE8 KPO8 MAN8 NAN8 NWA8 RO28-VAS9 DEE" +"9 KUA9 MEN9 MUN9 NDA9 NDE9 NON9 NUN9 PU29 WVA9 WVE9 YEE9-VASA UNAA YUEAADHUAA" +"MAEACHKAADULTAEMAEAEPENAEREEAGMA ALGARALLEYALLI ALOG ALPHAAMEKHANGELANNONAPPL" +"EAR AEARERUARTARASAR ASEIAASPERATAF ATIYAAUTHSAVROSAWAY BAARUBACUSBALAGBASA B" +"ASSABEITHBENDEBHADHBHETHBISAHBLAKOBOOTSBORZYBREW BSTERCAANGCAKESCAKRACALYACAN" +"USCAUDACAUSECCEPTCCOLICECAKCECEKCEREKCHADACHERYCHESTCHIMECHOOICHOOLCHULACHUTE" +"CIEUCCKAGECKTIECLIFFCLONECLUBSCROWNCTRICCUBEDDAIC DATUSDBOATDELTADENCEDEPTHDE" +"STYDHAM DKAR DLINGDOTS-DSMANDWICHE GEEEAGLEEATH EBALLEESHIEGALIEGIONEGL HEIDO" +"NEISMAEKEETEMAKEEMBICEMLJAENANOENDEPENENGENJETEO-EUEOPLEERINEERKHAESHE3ESO EE" +"T TUEUAEMEURAEEYBUSEYYALF COWF EWEF SOWFAAFUFAIHUFEARNFLAGSFLICTFLUTEFORCEFSA" +"AQGADOLGALGAGAMALGAMANGAZE-GEAN GESH2GHNUTGHULUGOGI GORGIGULUSGURE GVANGHAALU" +"HADDAHAINUHALA HALQAHANNAHASE-HATHIHAYINHETHEHIMELHIRIQHISTIHIUTHHOLAMHOLARHO" +"TELHROOMHUMP HUTA I KOII-RESIARDSIAUDAICHONICRONIHVUSIKARAIKURUILVERIMGBAIMMA" +" IMMERINGSAINNA INTHUIPEHAIPINGIRACYISTLEITHI ITUALJANG JERVIJUDGEJUDULJUEUIK" +"-020KARORKBALLKERETKESH2KHAPHKNOBSKO LAKTOP KURONKUSMAKWAENL NETL-JUZLABATLAB" +"ORLAGUSLAMDALATIKLAYARLEASELENISLOAN LOBE LOMKALOOP LOURELURALLWAY M RAMMAAEH" +"MAALAMACUSMADYAMAI KMAIZEMALONMAQAFMEEMUMEIZIMELONMENOEMEPETMETEGMETRYMI ROMI" +"EUMMINDUMINGOMISRAMMOTHMPAREMROCKMSHAEMUCH MUHORMUOY NA PONABLANADA NASHINCOR" +"ANEGARNEMKANENOENGENTNGMANNGUE NIEUNNINTHNIS FNNAN NSIEENSUAENSYONNTHA NTXIVN" +"UENGNZEUMO ANGO BOXO KAIO PLAO RUAOBYLAOCADOOJKI OKARAOKEE OLD XOMBIEOMMAEOPL" +"ETOQPENORUTOOSTEROTERIOTHALOUNCEPAATOPASEQPATAKPCHA PEAN PEITHPEN OPEN-PPEPET" +"PI ROPITERPLHAUPLUTAPLUTOPMUNKPOLI PONSEPPAGEPSILIPTUNEQAAFUQUIRYR-RUBRACHYRA" +"IDARASHARCHIDRDIONREGIAREIWARELA RELAAREPHARICEMRIEENRIEULRILLARITSIROGOMRONO" +"SROWN RRITORUDAARUHUARULAIRUMP-RUSH RYASOSADHESAKINSALADSATA SAUILSEGOLSENTOS" +"HANGSHAR2SHARASHARUSHIMASHOOKSHTINSICLESILA3SKATESOLVESPINESTARTSTNUTSTORMSUK" +"UNSURYASUTUHTEGEHTENSETHINGTIGMATINNETIPPITKAANTMAAUTON ATORCHTORSOTOYORTRACK" +"TRAIFTRIOLTSADITSEEBTSERETTOCKTTORUTUEUMTURN TUUMUU U UUBITOUBURUUBUTSUDAATUG" +"USTUKARAUMMERUNGBAUNITYUNOO UQUETURINEURITYURTLEUTEUXUTIESVAAVUVATORVIET VITA" +"EVRIDOVZMETWAAVUWAQFAWATTOWBOATWFISHWIDE WINDUWINJAWISADWU318WUAETXING XTRA-X" +"W XWXYOOJYAMOKYECEKYENAPYIZETYSTERYURIIZHAINZIDI ZILDEZSEKAZYGOS C D OHM POD " +"R S WEB-RAY-UM 0 BI0 HO0 JU0 KO0 NI0 PU0 RA0 SA0 WI0 YE0 ZO028B1 DA1 DO1 DU1 " +"GA1 HA1 IN1 KI1 KU1 PO1 QI1 RA1 SA1 SI1 SU1 VU1 YI13582 BU2 KA2 L22 NO2 PE2 Q" +"O2 RO2 SO2 VI2 YA3 A33 EE3 JE3 JO3 KU3 L33 LE3 ME3 MI3 MU3 PA3 RI3 TA3 YU4 DO" +"4 FI4 KE4 L44 NE4 TE4 TU4 WA4 WI4 ZE5 A25 AN5 AU5 BB5 DE5 FA5 FE5 GI5 IN5 JU5" +" LI5 MO5 NU5 OO5 TE5 TO5 VA5 VE5 WA5 WE6 DI6 FU6 HE6 HI6 JE6 JO6 L66 LA6 NA6 " +"PO6 QA6 RU6 SE6 WU7 BE7 DA7 DD7 EI7 JA7 KI7 LU7 RE7 TI7 VO7 ZA8 BO8 DU8 EN8 F" +"O8 GU8 JI8 KO8 PI8 QE8 SU8 WE9 JA9 PA9 PI9 SE9 SI9 SO9 TA9 TO9 TUA IEA-HAAACU" +"ACASAFELAHADAILMALAIALDAALTAAMLAAN XANAEAPAQAPONARA3ARGIAROOARUMATIMATYAAULAB" +"AGSBALDBASHBAYIBBITBERDBETHBOOKBOREBUNGBUOYCANOCASECAYNCHAUCOONCORECRETCWAADA" +"GSDAIRDDAKDDHIDEADDGERDIM2DZHAEAAEEEEEEENGEENUEIPTEIRTEIWSEZZOFAIBFASTFEEMFET" +"HFEUQFFINFIRIFITAFWAAGAMEGAMLGEDEGGWSGHOMGHWAGIBAGIDAGIEAGIR2GOALGORTGROMGRU " +"GUINHAVEHAYNHEEPHEROHERUHEYNHEYSHEYTHHWAHID HIINHMI HOM HOPHHSDAHSHUHUB2HUENH" +"UVAHWAAIANOIARAIFATIGERIITOIK HIKIRILUYINORINY IPODIQAAISI JEONJIIMJOT KAAFKA" +"D3KAKOKALIKAPHKCETKEUPKICKKINIKMA KOBAKOETKOKEKOKOKWAALFERLFIELIFULIUMLIWNLOL" +"LLOVOLUISLUMNMARUMARYMESOMFAAMIIMMIINMLYAMMU2MPETMUASMUINMVATMWAANAAUNAG NAM2" +"NANANCERNDAPNDUENEMANEO NET NGA2NHAYNJAMNNNANOWCNPEANRUANSHENSUBNTAANTOCNUNGN" +"UUNNWAAO-YOOBATOBROODLEOFUMOJI OJODONA ONUTOONEOOTHOPODOPUSORAXORIIOUBTOXIAPA" +"RDPAWNPEEIPEEPPEUXPHABPHINPLUGPLUMPOLOPRILQASRQEF QHAUQOPARAFEREIARGU2RIFYROA" +" ROARROOKROUTRPSERROIRSO-RT TRUISRUKURUNARUSISA-ISEENSEEVSELFSEYESHTASIKISINK" +"SLURSOKASONGSUABTFONTUKITURUTZELUGU UHURULU UNAVUON URUSUSA UTAEUTANUTTYVEDEV" +"EUMVEUXVEYZVIDAVIYOVOS VUEQWAAKWAETWAHAWAIRWAW WDERWULUXEIAXEYNYAWNYEUXYUDHYU" +"KUYWAAZATAZAYNZELOZETAZIETZIZ2ZZY 0 E0 U0-004A0B91 X1-01-212114D15518D2-020B2" +"532DD3 D3 I3-030531C4 E4-05 U5-05505575B66-06206D77 O72C8 A8 I8F09819E3A7AAEF" +"AL2ALKAUJAWXAZUB57B89BIBBXGCA9CAHCAICIGCWICYAD42D70DA2DE6DIBDJADZEE80EEGEIEEY" +"KEZHF14F8CFAJFLYFOMFUEHAQHOJHOXI-IIMNIWRJAHJEUJHAK00KUEKUGLFALK LULNIIOAYOIXP" +"OQPUQQ00QARQIFQIGQOFQOTQUFSIISUUTJETUJUDYUEZUMXUOPUQAVAUVNOVOKVOYVUUWAUWOQX00" +"XAUXEHXWGXWVY00YOTZJEZOOZORZUPZZE16171D1F343638394048494B4E6490929599C0D0G0G3" +"G9LXPVVDVWZ0"; -static const unsigned char uname2c_tree[210697] = { - 0xa1, 0xb5, 0xe4, 0x0b, 0xa2, 0x9d, 0xea, 0x0a, 0xa3, 0x9d, 0x9a, 0x09, - 0xa4, 0xd2, 0xe8, 0x08, 0xa5, 0xfd, 0x9f, 0x08, 0xa6, 0xe0, 0x92, 0x08, - 0xa7, 0xee, 0xd2, 0x07, 0xa8, 0xa2, 0x89, 0x07, 0xa9, 0xdc, 0xf4, 0x06, +static const unsigned char uname2c_tree[210737] = { + 0xa1, 0xdd, 0xe4, 0x0b, 0xa2, 0xc5, 0xea, 0x0a, 0xa3, 0xc5, 0x9a, 0x09, + 0xa4, 0xfa, 0xe8, 0x08, 0xa5, 0xa5, 0xa0, 0x08, 0xa6, 0x88, 0x93, 0x08, + 0xa7, 0x96, 0xd3, 0x07, 0xa8, 0xca, 0x89, 0x07, 0xa9, 0xdc, 0xf4, 0x06, 0xaa, 0xe1, 0xee, 0x06, 0xab, 0x97, 0xbb, 0x06, 0xac, 0xf7, 0xb7, 0x05, 0xad, 0xdb, 0x90, 0x04, 0xae, 0xb6, 0xeb, 0x03, 0xaf, 0x9c, 0xc0, 0x03, 0xb0, 0xde, 0x93, 0x03, 0x02, 0x7c, 0x00, 0xb1, 0x92, 0x03, 0xb2, 0xd1, 0xf1, 0x02, 0xb3, 0xc0, 0xec, 0x01, 0xb4, 0xed, 0x80, 0x01, 0xb5, 0xe9, 0x74, 0xb6, 0x99, 0x56, 0xb7, 0xdf, 0x3f, 0xb8, 0xe5, 0x3e, 0xb9, 0xd3, - 0x10, 0xba, 0x01, 0xff, 0x0a, 0x5d, 0x1b, 0xe9, 0x0f, 0x10, 0xe9, 0x5a, - 0x80, 0x0c, 0xa5, 0xd1, 0x0b, 0x50, 0xd9, 0x5d, 0x10, 0xf9, 0x01, 0x08, - 0xa5, 0xbe, 0x06, 0x45, 0xb8, 0xde, 0xdf, 0xf9, 0x41, 0x0a, 0x99, 0x53, - 0xaa, 0x07, 0x06, 0xb5, 0xd3, 0x23, 0x11, 0x62, 0x57, 0x01, 0xff, 0x4e, - 0x12, 0x70, 0x44, 0xcf, 0x01, 0x45, 0xdb, 0x80, 0x45, 0xcf, 0x01, 0x06, - 0x31, 0xd3, 0x06, 0x43, 0xb1, 0x26, 0x46, 0xcf, 0x41, 0xd2, 0x42, 0xcf, + 0x10, 0xba, 0x01, 0xff, 0x0a, 0x5d, 0x1b, 0xe9, 0x0f, 0x10, 0xfe, 0x5a, + 0x80, 0x0c, 0xa5, 0xd1, 0x0b, 0x50, 0xee, 0x5d, 0x10, 0xf9, 0x01, 0x08, + 0xc1, 0xbe, 0x06, 0x45, 0xd4, 0xde, 0xdf, 0xf9, 0x41, 0x0a, 0xae, 0x53, + 0xaa, 0x07, 0x06, 0xd1, 0xd3, 0x23, 0x11, 0x77, 0x57, 0x01, 0xff, 0x4e, + 0x27, 0x70, 0x44, 0xcf, 0x01, 0x45, 0xe2, 0x80, 0x45, 0xcf, 0x01, 0x06, + 0x4d, 0xd3, 0x06, 0x43, 0xb1, 0x26, 0x46, 0xcf, 0x41, 0xd2, 0x42, 0xcf, 0x01, 0xd3, 0x43, 0xcf, 0x41, 0x02, 0x98, 0x14, 0xf2, 0x06, 0xa4, 0xcf, - 0x06, 0x44, 0xd6, 0xe4, 0x83, 0xcf, 0x01, 0x0a, 0x55, 0xa2, 0xa3, 0x06, - 0xab, 0xf1, 0x05, 0x46, 0x85, 0xd3, 0xa7, 0xcf, 0x81, 0xca, 0x05, 0x45, - 0x31, 0xde, 0xc2, 0xcf, 0x01, 0xaf, 0x8d, 0x05, 0xb0, 0xda, 0x04, 0xb2, - 0xcb, 0x04, 0xb3, 0x4f, 0x09, 0x88, 0xb7, 0x17, 0xba, 0x01, 0xff, 0xa1, - 0x06, 0x46, 0xa2, 0xb1, 0x85, 0xcf, 0x41, 0x46, 0xf1, 0xd3, 0x55, 0xcf, - 0x01, 0x47, 0xb3, 0x2e, 0x5d, 0xcf, 0x41, 0x0c, 0xa1, 0x83, 0x18, 0x49, - 0xb7, 0xb2, 0x64, 0xcf, 0x01, 0x48, 0x0d, 0xc0, 0x63, 0xcf, 0x01, 0x48, - 0x35, 0x4f, 0x65, 0xcf, 0x01, 0x4b, 0x6b, 0x9b, 0x66, 0xcf, 0x41, 0x49, - 0xb7, 0xb2, 0x68, 0xcf, 0x01, 0x48, 0x0d, 0xc0, 0x67, 0xcf, 0x01, 0x48, - 0x35, 0x4f, 0x69, 0xcf, 0x01, 0x4b, 0x6b, 0x9b, 0x6a, 0xcf, 0x41, 0x09, - 0xa0, 0xb1, 0xa3, 0x03, 0x48, 0x1d, 0xbe, 0x7d, 0xcf, 0x81, 0x82, 0x03, - 0xb4, 0x01, 0xff, 0x44, 0x26, 0xe4, 0x86, 0xcf, 0x81, 0xac, 0x02, 0x46, - 0x63, 0xd4, 0x56, 0xcf, 0x81, 0x95, 0x02, 0x05, 0x7b, 0xdf, 0x01, 0xff, - 0x09, 0x36, 0x7b, 0xe8, 0x01, 0x04, 0x0e, 0xe5, 0xae, 0x01, 0xab, 0x42, - 0x4e, 0x3e, 0x73, 0x93, 0xcf, 0x01, 0x4e, 0x04, 0x63, 0x97, 0xcf, 0x01, - 0xb0, 0x20, 0xb4, 0x01, 0xff, 0x4e, 0x9a, 0x71, 0x9a, 0xcf, 0x01, 0x05, - 0xd0, 0xdf, 0x01, 0xff, 0x48, 0xb5, 0xbc, 0xac, 0xcf, 0x01, 0x49, 0x0b, - 0x97, 0xad, 0xcf, 0x01, 0x49, 0xea, 0xb5, 0xae, 0xcf, 0x41, 0xaf, 0x06, - 0x47, 0x0e, 0xc0, 0x92, 0xcf, 0x41, 0x4b, 0x09, 0x97, 0x95, 0xcf, 0x01, - 0x47, 0x0d, 0x97, 0x96, 0xcf, 0x41, 0x06, 0xa2, 0x83, 0x5a, 0x02, 0x48, - 0x16, 0x01, 0xff, 0x47, 0x2d, 0x4f, 0xb5, 0xcf, 0x81, 0x06, 0x47, 0xd4, - 0xa3, 0x94, 0xcf, 0x41, 0x80, 0x01, 0xff, 0x04, 0x0e, 0xe5, 0x0c, 0x49, - 0x0b, 0x97, 0xb6, 0xcf, 0x01, 0x47, 0x50, 0xcc, 0xbe, 0xcf, 0x41, 0x44, - 0x0e, 0x63, 0xb9, 0xcf, 0x81, 0x28, 0xaf, 0x01, 0xff, 0x4a, 0xd1, 0xa3, - 0xbc, 0xcf, 0x81, 0x18, 0x49, 0x0b, 0x97, 0xba, 0xcf, 0xc1, 0x00, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x50, 0x19, 0x5c, 0xbb, 0xcf, 0x01, 0x50, 0xaa, - 0x2e, 0xb8, 0xcf, 0x41, 0x4a, 0x91, 0x9d, 0xbd, 0xcf, 0x41, 0x56, 0xa4, - 0x2e, 0xb7, 0xcf, 0x41, 0x4e, 0x04, 0x63, 0x99, 0xcf, 0x01, 0x49, 0x0b, - 0x97, 0x98, 0xcf, 0x41, 0x44, 0x0e, 0x63, 0xa2, 0xcf, 0x81, 0x28, 0xaf, - 0x01, 0xff, 0x4a, 0xd1, 0xa3, 0xa5, 0xcf, 0x81, 0x18, 0x49, 0x0b, 0x97, - 0xa3, 0xcf, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x50, 0x19, 0x5c, - 0xa4, 0xcf, 0x01, 0x50, 0xaa, 0x2e, 0xa1, 0xcf, 0x41, 0x4a, 0x91, 0x9d, + 0x06, 0x44, 0xf2, 0xe4, 0x83, 0xcf, 0x01, 0x0a, 0x68, 0xa2, 0xa3, 0x06, + 0xab, 0xf1, 0x05, 0x46, 0xa1, 0xd3, 0xa7, 0xcf, 0x81, 0xca, 0x05, 0x45, + 0x4d, 0xde, 0xc2, 0xcf, 0x01, 0xaf, 0x8d, 0x05, 0xb0, 0xda, 0x04, 0xb2, + 0xcb, 0x04, 0xb3, 0x4f, 0x09, 0xa4, 0xb7, 0x17, 0xba, 0x01, 0xff, 0xa1, + 0x06, 0x46, 0xbe, 0xb1, 0x85, 0xcf, 0x41, 0x46, 0x0d, 0xd4, 0x55, 0xcf, + 0x01, 0x47, 0xb3, 0x2e, 0x5d, 0xcf, 0x41, 0x0c, 0xa8, 0x83, 0x18, 0x49, + 0xd3, 0xb2, 0x64, 0xcf, 0x01, 0x48, 0x29, 0xc0, 0x63, 0xcf, 0x01, 0x48, + 0x4a, 0x4f, 0x65, 0xcf, 0x01, 0x4b, 0x7e, 0x9b, 0x66, 0xcf, 0x41, 0x49, + 0xd3, 0xb2, 0x68, 0xcf, 0x01, 0x48, 0x29, 0xc0, 0x67, 0xcf, 0x01, 0x48, + 0x4a, 0x4f, 0x69, 0xcf, 0x01, 0x4b, 0x7e, 0x9b, 0x6a, 0xcf, 0x41, 0x09, + 0xbc, 0xb1, 0xa3, 0x03, 0x48, 0x39, 0xbe, 0x7d, 0xcf, 0x81, 0x82, 0x03, + 0xb4, 0x01, 0xff, 0x44, 0x42, 0xe4, 0x86, 0xcf, 0x81, 0xac, 0x02, 0x46, + 0x7f, 0xd4, 0x56, 0xcf, 0x81, 0x95, 0x02, 0x05, 0x97, 0xdf, 0x01, 0xff, + 0x09, 0x3d, 0x7b, 0xe8, 0x01, 0x04, 0x2a, 0xe5, 0xae, 0x01, 0xab, 0x42, + 0x4e, 0x53, 0x73, 0x93, 0xcf, 0x01, 0x4e, 0x19, 0x63, 0x97, 0xcf, 0x01, + 0xb0, 0x20, 0xb4, 0x01, 0xff, 0x4e, 0xaf, 0x71, 0x9a, 0xcf, 0x01, 0x05, + 0xec, 0xdf, 0x01, 0xff, 0x48, 0xd1, 0xbc, 0xac, 0xcf, 0x01, 0x49, 0x1e, + 0x97, 0xad, 0xcf, 0x01, 0x49, 0x06, 0xb6, 0xae, 0xcf, 0x41, 0xaf, 0x06, + 0x47, 0x2a, 0xc0, 0x92, 0xcf, 0x41, 0x4b, 0x1c, 0x97, 0x95, 0xcf, 0x01, + 0x47, 0x20, 0x97, 0x96, 0xcf, 0x41, 0x06, 0xa9, 0x83, 0x5a, 0x02, 0x48, + 0x16, 0x01, 0xff, 0x47, 0x42, 0x4f, 0xb5, 0xcf, 0x81, 0x06, 0x47, 0xe7, + 0xa3, 0x94, 0xcf, 0x41, 0x80, 0x01, 0xff, 0x04, 0x2a, 0xe5, 0x0c, 0x49, + 0x1e, 0x97, 0xb6, 0xcf, 0x01, 0x47, 0x6c, 0xcc, 0xbe, 0xcf, 0x41, 0x44, + 0x23, 0x63, 0xb9, 0xcf, 0x81, 0x28, 0xaf, 0x01, 0xff, 0x4a, 0xe4, 0xa3, + 0xbc, 0xcf, 0x81, 0x18, 0x49, 0x1e, 0x97, 0xba, 0xcf, 0xc1, 0x00, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x50, 0x2e, 0x5c, 0xbb, 0xcf, 0x01, 0x50, 0xaa, + 0x2e, 0xb8, 0xcf, 0x41, 0x4a, 0xa4, 0x9d, 0xbd, 0xcf, 0x41, 0x56, 0xa4, + 0x2e, 0xb7, 0xcf, 0x41, 0x4e, 0x19, 0x63, 0x99, 0xcf, 0x01, 0x49, 0x1e, + 0x97, 0x98, 0xcf, 0x41, 0x44, 0x23, 0x63, 0xa2, 0xcf, 0x81, 0x28, 0xaf, + 0x01, 0xff, 0x4a, 0xe4, 0xa3, 0xa5, 0xcf, 0x81, 0x18, 0x49, 0x1e, 0x97, + 0xa3, 0xcf, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x50, 0x2e, 0x5c, + 0xa4, 0xcf, 0x01, 0x50, 0xaa, 0x2e, 0xa1, 0xcf, 0x41, 0x4a, 0xa4, 0x9d, 0xa6, 0xcf, 0x41, 0x56, 0xa4, 0x2e, 0xa0, 0xcf, 0x41, 0x43, 0xb7, 0x2e, - 0x9b, 0xcf, 0x81, 0x16, 0xaf, 0x01, 0xff, 0x4a, 0xd1, 0xa3, 0x9c, 0xcf, - 0x01, 0x49, 0x0b, 0x97, 0x9d, 0xcf, 0xc1, 0x00, 0x4c, 0xa0, 0x83, 0x9f, - 0xcf, 0x41, 0x4c, 0xa0, 0x83, 0x9e, 0xcf, 0x41, 0x80, 0x01, 0xff, 0x48, - 0xa5, 0xc0, 0x57, 0xcf, 0x01, 0x54, 0x84, 0x41, 0x5a, 0xcf, 0x41, 0x80, - 0x01, 0xff, 0x4e, 0x04, 0x63, 0x91, 0xcf, 0x01, 0x02, 0x31, 0x01, 0x0d, - 0x49, 0x18, 0xb8, 0x8b, 0xcf, 0xc1, 0x00, 0x4b, 0xc6, 0x8f, 0x8c, 0xcf, - 0x41, 0x50, 0x39, 0x5c, 0x8e, 0xcf, 0x01, 0x47, 0xdb, 0x80, 0x88, 0xcf, - 0x81, 0x1e, 0x45, 0xa3, 0xdf, 0x8d, 0xcf, 0x01, 0x48, 0x71, 0x8f, 0x87, - 0xcf, 0xc1, 0x00, 0x03, 0x9f, 0x07, 0x01, 0xff, 0x47, 0xdb, 0x80, 0x89, - 0xcf, 0x01, 0x4b, 0x19, 0x99, 0x8f, 0xcf, 0x41, 0x4b, 0x6e, 0x8f, 0x8a, - 0xcf, 0x41, 0x80, 0x01, 0xff, 0x02, 0x31, 0x01, 0x06, 0x48, 0xe5, 0xc2, - 0x7f, 0xcf, 0x41, 0x47, 0xdb, 0x80, 0x80, 0xcf, 0x01, 0x48, 0x71, 0x8f, - 0x7e, 0xcf, 0x41, 0x0d, 0x36, 0x7b, 0x36, 0x07, 0xa1, 0x83, 0x1b, 0x49, - 0xb7, 0xb2, 0x71, 0xcf, 0x01, 0x48, 0x35, 0x4f, 0x72, 0xcf, 0x01, 0xb4, - 0x01, 0xff, 0x46, 0x9a, 0x71, 0x74, 0xcf, 0x01, 0x4a, 0x6c, 0x9b, 0x73, - 0xcf, 0x41, 0x4e, 0x04, 0x63, 0x77, 0xcf, 0x01, 0x05, 0x30, 0x4f, 0x01, - 0xff, 0x48, 0x35, 0x4f, 0x76, 0xcf, 0x01, 0x47, 0x45, 0x73, 0x78, 0xcf, - 0x41, 0x4b, 0xa1, 0x83, 0x7c, 0xcf, 0x01, 0x4e, 0x04, 0x63, 0x7b, 0xcf, - 0x01, 0x48, 0x0d, 0xc0, 0x79, 0xcf, 0x01, 0x48, 0x35, 0x4f, 0x7a, 0xcf, - 0x41, 0x52, 0x01, 0x4c, 0x6c, 0xcf, 0x01, 0x42, 0xc4, 0x16, 0x82, 0xcf, - 0x41, 0xa1, 0x1c, 0x48, 0x15, 0xbc, 0x58, 0xcf, 0x81, 0x0f, 0xaf, 0x01, - 0xff, 0x48, 0x1b, 0x99, 0x70, 0xcf, 0x01, 0x48, 0xed, 0xbd, 0x90, 0xcf, - 0x41, 0x4f, 0x03, 0x63, 0x59, 0xcf, 0x41, 0x43, 0xb2, 0x7d, 0x5c, 0xcf, - 0x01, 0x46, 0xd5, 0xd4, 0x52, 0xcf, 0x01, 0x42, 0x96, 0x07, 0xc3, 0xcf, - 0x41, 0x45, 0x12, 0xda, 0xc0, 0xcf, 0x01, 0x44, 0x82, 0xe7, 0xaf, 0xcf, - 0xc1, 0x00, 0x80, 0x01, 0xff, 0xab, 0x0c, 0x48, 0x35, 0x4f, 0xb0, 0xcf, - 0x01, 0x4b, 0x6b, 0x9b, 0xb1, 0xcf, 0x41, 0x0b, 0xa2, 0x83, 0x06, 0x52, - 0x2b, 0x4f, 0xb2, 0xcf, 0x41, 0x4e, 0x04, 0x63, 0xb4, 0xcf, 0x01, 0x48, - 0x35, 0x4f, 0xb3, 0xcf, 0x41, 0x80, 0x01, 0xff, 0x07, 0xa1, 0x83, 0x06, - 0x47, 0x7b, 0xca, 0xa8, 0xcf, 0x41, 0x4c, 0xf0, 0x8a, 0xab, 0xcf, 0x01, - 0x47, 0x7b, 0xca, 0xaa, 0xcf, 0x01, 0x43, 0x8a, 0xe9, 0xa9, 0xcf, 0x41, - 0x46, 0xed, 0xd1, 0x6e, 0xcf, 0x01, 0x45, 0xc4, 0x5e, 0x54, 0xcf, 0x01, - 0x45, 0x9a, 0xde, 0x84, 0xcf, 0x01, 0x02, 0x48, 0x16, 0x06, 0x46, 0xa4, + 0x9b, 0xcf, 0x81, 0x16, 0xaf, 0x01, 0xff, 0x4a, 0xe4, 0xa3, 0x9c, 0xcf, + 0x01, 0x49, 0x1e, 0x97, 0x9d, 0xcf, 0xc1, 0x00, 0x4c, 0xa7, 0x83, 0x9f, + 0xcf, 0x41, 0x4c, 0xa7, 0x83, 0x9e, 0xcf, 0x41, 0x80, 0x01, 0xff, 0x48, + 0xc1, 0xc0, 0x57, 0xcf, 0x01, 0x54, 0x99, 0x41, 0x5a, 0xcf, 0x41, 0x80, + 0x01, 0xff, 0x4e, 0x19, 0x63, 0x91, 0xcf, 0x01, 0x02, 0x31, 0x01, 0x0d, + 0x49, 0x34, 0xb8, 0x8b, 0xcf, 0xc1, 0x00, 0x4b, 0xd9, 0x8f, 0x8c, 0xcf, + 0x41, 0x50, 0x4e, 0x5c, 0x8e, 0xcf, 0x01, 0x47, 0xe2, 0x80, 0x88, 0xcf, + 0x81, 0x1e, 0x45, 0xbf, 0xdf, 0x8d, 0xcf, 0x01, 0x48, 0x84, 0x8f, 0x87, + 0xcf, 0xc1, 0x00, 0x03, 0x9f, 0x07, 0x01, 0xff, 0x47, 0xe2, 0x80, 0x89, + 0xcf, 0x01, 0x4b, 0x2c, 0x99, 0x8f, 0xcf, 0x41, 0x4b, 0x81, 0x8f, 0x8a, + 0xcf, 0x41, 0x80, 0x01, 0xff, 0x02, 0x31, 0x01, 0x06, 0x48, 0x01, 0xc3, + 0x7f, 0xcf, 0x41, 0x47, 0xe2, 0x80, 0x80, 0xcf, 0x01, 0x48, 0x84, 0x8f, + 0x7e, 0xcf, 0x41, 0x0d, 0x3d, 0x7b, 0x36, 0x07, 0xa8, 0x83, 0x1b, 0x49, + 0xd3, 0xb2, 0x71, 0xcf, 0x01, 0x48, 0x4a, 0x4f, 0x72, 0xcf, 0x01, 0xb4, + 0x01, 0xff, 0x46, 0xaf, 0x71, 0x74, 0xcf, 0x01, 0x4a, 0x7f, 0x9b, 0x73, + 0xcf, 0x41, 0x4e, 0x19, 0x63, 0x77, 0xcf, 0x01, 0x05, 0x45, 0x4f, 0x01, + 0xff, 0x48, 0x4a, 0x4f, 0x76, 0xcf, 0x01, 0x47, 0x5a, 0x73, 0x78, 0xcf, + 0x41, 0x4b, 0xa8, 0x83, 0x7c, 0xcf, 0x01, 0x4e, 0x19, 0x63, 0x7b, 0xcf, + 0x01, 0x48, 0x29, 0xc0, 0x79, 0xcf, 0x01, 0x48, 0x4a, 0x4f, 0x7a, 0xcf, + 0x41, 0x52, 0x16, 0x4c, 0x6c, 0xcf, 0x01, 0x42, 0xc4, 0x16, 0x82, 0xcf, + 0x41, 0xa1, 0x1c, 0x48, 0x31, 0xbc, 0x58, 0xcf, 0x81, 0x0f, 0xaf, 0x01, + 0xff, 0x48, 0x2e, 0x99, 0x70, 0xcf, 0x01, 0x48, 0x09, 0xbe, 0x90, 0xcf, + 0x41, 0x4f, 0x18, 0x63, 0x59, 0xcf, 0x41, 0x43, 0xb9, 0x7d, 0x5c, 0xcf, + 0x01, 0x46, 0xf1, 0xd4, 0x52, 0xcf, 0x01, 0x42, 0x96, 0x07, 0xc3, 0xcf, + 0x41, 0x45, 0x2e, 0xda, 0xc0, 0xcf, 0x01, 0x44, 0x9e, 0xe7, 0xaf, 0xcf, + 0xc1, 0x00, 0x80, 0x01, 0xff, 0xab, 0x0c, 0x48, 0x4a, 0x4f, 0xb0, 0xcf, + 0x01, 0x4b, 0x7e, 0x9b, 0xb1, 0xcf, 0x41, 0x0b, 0xa9, 0x83, 0x06, 0x52, + 0x40, 0x4f, 0xb2, 0xcf, 0x41, 0x4e, 0x19, 0x63, 0xb4, 0xcf, 0x01, 0x48, + 0x4a, 0x4f, 0xb3, 0xcf, 0x41, 0x80, 0x01, 0xff, 0x07, 0xa8, 0x83, 0x06, + 0x47, 0x97, 0xca, 0xa8, 0xcf, 0x41, 0x4c, 0xf7, 0x8a, 0xab, 0xcf, 0x01, + 0x47, 0x97, 0xca, 0xaa, 0xcf, 0x01, 0x43, 0xa6, 0xe9, 0xa9, 0xcf, 0x41, + 0x46, 0x09, 0xd2, 0x6e, 0xcf, 0x01, 0x45, 0xd9, 0x5e, 0x54, 0xcf, 0x01, + 0x45, 0xb6, 0xde, 0x84, 0xcf, 0x01, 0x02, 0x48, 0x16, 0x06, 0x46, 0xc0, 0xb3, 0xbf, 0xcf, 0x41, 0x42, 0x96, 0x07, 0x50, 0xcf, 0x81, 0x06, 0x42, - 0x6d, 0x25, 0x81, 0xcf, 0x41, 0x46, 0x09, 0xce, 0x51, 0xcf, 0x41, 0x45, - 0x1c, 0xda, 0x5e, 0xcf, 0x01, 0x47, 0x1d, 0xc9, 0x60, 0xcf, 0x01, 0x46, - 0x77, 0xc0, 0x61, 0xcf, 0x01, 0xb4, 0x01, 0xff, 0x44, 0x0b, 0xce, 0x5f, - 0xcf, 0x01, 0x48, 0x75, 0xc0, 0x62, 0xcf, 0x41, 0xa5, 0x12, 0x4f, 0x1a, - 0x5c, 0x6b, 0xcf, 0x01, 0x43, 0x10, 0x76, 0xc1, 0xcf, 0x01, 0x4b, 0x3c, - 0x9c, 0x53, 0xcf, 0x41, 0x50, 0xb9, 0x5e, 0x75, 0xcf, 0x01, 0x46, 0xe1, - 0xd4, 0x6d, 0xcf, 0x41, 0x45, 0xf4, 0xd1, 0x6f, 0xcf, 0x01, 0x48, 0x0b, + 0x6d, 0x25, 0x81, 0xcf, 0x41, 0x46, 0x25, 0xce, 0x51, 0xcf, 0x41, 0x45, + 0x38, 0xda, 0x5e, 0xcf, 0x01, 0x47, 0x39, 0xc9, 0x60, 0xcf, 0x01, 0x46, + 0x93, 0xc0, 0x61, 0xcf, 0x01, 0xb4, 0x01, 0xff, 0x44, 0x27, 0xce, 0x5f, + 0xcf, 0x01, 0x48, 0x91, 0xc0, 0x62, 0xcf, 0x41, 0xa5, 0x12, 0x4f, 0x2f, + 0x5c, 0x6b, 0xcf, 0x01, 0x43, 0x17, 0x76, 0xc1, 0xcf, 0x01, 0x4b, 0x4f, + 0x9c, 0x53, 0xcf, 0x41, 0x50, 0xce, 0x5e, 0x75, 0xcf, 0x01, 0x46, 0xfd, + 0xd4, 0x6d, 0xcf, 0x41, 0x45, 0x10, 0xd2, 0x6f, 0xcf, 0x01, 0x48, 0x20, 0x4c, 0x5b, 0xcf, 0x41, 0x57, 0x2b, 0x2a, 0x3e, 0xcf, 0x01, 0x5b, 0x7b, - 0x1a, 0x41, 0xcf, 0x01, 0x05, 0xb9, 0x00, 0x17, 0x11, 0x94, 0x58, 0x01, - 0xff, 0x47, 0x3e, 0x73, 0x30, 0xcf, 0x01, 0x46, 0x6b, 0xb6, 0x31, 0xcf, - 0x01, 0x49, 0x68, 0xb6, 0x32, 0xcf, 0x41, 0x47, 0x6c, 0xc5, 0x24, 0xcf, - 0x01, 0xa3, 0xcf, 0x03, 0xa4, 0xc0, 0x03, 0x08, 0xbd, 0xbc, 0x90, 0x03, - 0xab, 0xf4, 0x02, 0x45, 0x6e, 0xdd, 0x27, 0xcf, 0x01, 0x0d, 0x5c, 0x7e, - 0xb6, 0x02, 0x06, 0xd3, 0xd3, 0x90, 0x02, 0xaf, 0xfd, 0x01, 0x02, 0x9c, + 0x1a, 0x41, 0xcf, 0x01, 0x05, 0xb9, 0x00, 0x17, 0x11, 0xa9, 0x58, 0x01, + 0xff, 0x47, 0x53, 0x73, 0x30, 0xcf, 0x01, 0x46, 0x87, 0xb6, 0x31, 0xcf, + 0x01, 0x49, 0x84, 0xb6, 0x32, 0xcf, 0x41, 0x47, 0x88, 0xc5, 0x24, 0xcf, + 0x01, 0xa3, 0xcf, 0x03, 0xa4, 0xc0, 0x03, 0x08, 0xd9, 0xbc, 0x90, 0x03, + 0xab, 0xf4, 0x02, 0x45, 0x8a, 0xdd, 0x27, 0xcf, 0x01, 0x0d, 0x63, 0x7e, + 0xb6, 0x02, 0x06, 0xef, 0xd3, 0x90, 0x02, 0xaf, 0xfd, 0x01, 0x02, 0x9c, 0x01, 0xab, 0x01, 0x02, 0x71, 0x00, 0x9a, 0x01, 0xb3, 0x76, 0xb4, 0x4d, - 0x46, 0x49, 0xd6, 0x25, 0xcf, 0x01, 0x07, 0x29, 0xcd, 0x18, 0xba, 0x01, - 0xff, 0x48, 0x30, 0x3d, 0x33, 0xcf, 0x01, 0xa5, 0x01, 0xff, 0x42, 0x13, - 0x01, 0x20, 0xcf, 0x01, 0x43, 0x87, 0xe9, 0x2a, 0xcf, 0x41, 0x03, 0xb6, - 0x00, 0x1b, 0x03, 0xcc, 0x02, 0x01, 0xff, 0x0b, 0xe3, 0x94, 0x06, 0x46, - 0xdc, 0x80, 0x1d, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x0b, 0xcf, 0x01, 0x45, + 0x46, 0x65, 0xd6, 0x25, 0xcf, 0x01, 0x07, 0x45, 0xcd, 0x18, 0xba, 0x01, + 0xff, 0x48, 0x45, 0x3d, 0x33, 0xcf, 0x01, 0xa5, 0x01, 0xff, 0x42, 0x13, + 0x01, 0x20, 0xcf, 0x01, 0x43, 0xa3, 0xe9, 0x2a, 0xcf, 0x41, 0x03, 0xb6, + 0x00, 0x1b, 0x03, 0xcc, 0x02, 0x01, 0xff, 0x0b, 0xf6, 0x94, 0x06, 0x46, + 0xe3, 0x80, 0x1d, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x0b, 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x17, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x08, 0xcf, 0x01, 0x45, - 0xc8, 0x00, 0x14, 0xcf, 0x41, 0x46, 0x9a, 0x71, 0x23, 0xcf, 0x01, 0x45, - 0xf0, 0xbf, 0x3c, 0xcf, 0x01, 0x05, 0xe4, 0xdf, 0x01, 0xff, 0x03, 0xb6, - 0x00, 0x06, 0x49, 0xd9, 0x80, 0x18, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x02, - 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x0e, 0xcf, 0x41, 0x44, 0xd2, 0xe5, 0x2b, - 0xcf, 0x01, 0x4e, 0x8a, 0x41, 0x3b, 0xcf, 0x01, 0x09, 0x12, 0xb5, 0x06, - 0x53, 0x36, 0x48, 0x1a, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x05, 0xcf, 0x01, - 0x45, 0xc8, 0x00, 0x11, 0xcf, 0x41, 0x43, 0x84, 0xe9, 0x22, 0xcf, 0x01, - 0x45, 0xb0, 0xe1, 0x2c, 0xcf, 0x41, 0xa4, 0x38, 0x06, 0x63, 0x7e, 0x01, + 0xc8, 0x00, 0x14, 0xcf, 0x41, 0x46, 0xaf, 0x71, 0x23, 0xcf, 0x01, 0x45, + 0x0c, 0xc0, 0x3c, 0xcf, 0x01, 0x05, 0x00, 0xe0, 0x01, 0xff, 0x03, 0xb6, + 0x00, 0x06, 0x49, 0xe0, 0x80, 0x18, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x02, + 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x0e, 0xcf, 0x41, 0x44, 0xee, 0xe5, 0x2b, + 0xcf, 0x01, 0x4e, 0x9f, 0x41, 0x3b, 0xcf, 0x01, 0x09, 0x2e, 0xb5, 0x06, + 0x53, 0x4b, 0x48, 0x1a, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x05, 0xcf, 0x01, + 0x45, 0xc8, 0x00, 0x11, 0xcf, 0x41, 0x43, 0xa0, 0xe9, 0x22, 0xcf, 0x01, + 0x45, 0xcc, 0xe1, 0x2c, 0xcf, 0x41, 0xa4, 0x38, 0x06, 0x6a, 0x7e, 0x01, 0xff, 0x03, 0xb6, 0x00, 0x23, 0xb3, 0x01, 0xff, 0x02, 0x44, 0x00, 0x06, - 0x46, 0x36, 0x48, 0x1c, 0xcf, 0x41, 0x0b, 0xe3, 0x94, 0x06, 0x46, 0xdc, + 0x46, 0x4b, 0x48, 0x1c, 0xcf, 0x41, 0x0b, 0xf6, 0x94, 0x06, 0x46, 0xe3, 0x80, 0x1b, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x0a, 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x16, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x07, 0xcf, 0x01, 0x45, 0xc8, - 0x00, 0x13, 0xcf, 0x41, 0x47, 0x1c, 0x99, 0x36, 0xcf, 0x81, 0x06, 0x46, - 0x7f, 0xd6, 0x26, 0xcf, 0x41, 0x55, 0x7a, 0x34, 0x37, 0xcf, 0x41, 0x47, - 0x5e, 0xc5, 0x3a, 0xcf, 0x01, 0xee, 0x21, 0xcf, 0x01, 0x47, 0x57, 0xcc, - 0x35, 0xcf, 0x41, 0x03, 0xb6, 0x00, 0x11, 0x0d, 0xd9, 0x80, 0x01, 0xff, + 0x00, 0x13, 0xcf, 0x41, 0x47, 0x2f, 0x99, 0x36, 0xcf, 0x81, 0x06, 0x46, + 0x9b, 0xd6, 0x26, 0xcf, 0x41, 0x55, 0x7a, 0x34, 0x37, 0xcf, 0x41, 0x47, + 0x7a, 0xc5, 0x3a, 0xcf, 0x01, 0xee, 0x21, 0xcf, 0x01, 0x47, 0x73, 0xcc, + 0x35, 0xcf, 0x41, 0x03, 0xb6, 0x00, 0x11, 0x0d, 0xe0, 0x80, 0x01, 0xff, 0x44, 0xc3, 0x00, 0x01, 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x0d, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x04, 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x10, 0xcf, 0x41, 0x03, 0xb6, 0x00, 0x23, 0xb3, 0x01, 0xff, 0x02, 0x44, 0x00, 0x06, 0x46, - 0x36, 0x48, 0x1e, 0xcf, 0x41, 0x0b, 0xe3, 0x94, 0x06, 0x46, 0xdc, 0x80, + 0x4b, 0x48, 0x1e, 0xcf, 0x41, 0x0b, 0xf6, 0x94, 0x06, 0x46, 0xe3, 0x80, 0x19, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x09, 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x15, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x06, 0xcf, 0x01, 0x45, 0xc8, 0x00, - 0x12, 0xcf, 0x41, 0x45, 0x5e, 0xd9, 0x29, 0xcf, 0x01, 0x44, 0xdc, 0x80, - 0x40, 0xcf, 0x81, 0x06, 0x46, 0x61, 0xd6, 0x28, 0xcf, 0x41, 0x48, 0x8d, - 0xb8, 0x2d, 0xcf, 0x41, 0x06, 0xd3, 0xd3, 0x06, 0x46, 0x29, 0xcd, 0x1f, - 0xcf, 0x41, 0x03, 0xb6, 0x00, 0x11, 0x0d, 0xd9, 0x80, 0x01, 0xff, 0x44, + 0x12, 0xcf, 0x41, 0x45, 0x7a, 0xd9, 0x29, 0xcf, 0x01, 0x44, 0xe3, 0x80, + 0x40, 0xcf, 0x81, 0x06, 0x46, 0x7d, 0xd6, 0x28, 0xcf, 0x41, 0x48, 0xa9, + 0xb8, 0x2d, 0xcf, 0x41, 0x06, 0xef, 0xd3, 0x06, 0x46, 0x45, 0xcd, 0x1f, + 0xcf, 0x41, 0x03, 0xb6, 0x00, 0x11, 0x0d, 0xe0, 0x80, 0x01, 0xff, 0x44, 0xc3, 0x00, 0x00, 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x0c, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x03, 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x0f, 0xcf, 0x41, 0x54, - 0x24, 0x3d, 0x34, 0xcf, 0x01, 0x49, 0x7f, 0xb7, 0x3d, 0xcf, 0x41, 0x46, - 0xf3, 0xd1, 0x38, 0xcf, 0x81, 0x06, 0x4a, 0x25, 0xaa, 0x3f, 0xcf, 0x41, - 0x48, 0xcd, 0xb8, 0x39, 0xcf, 0x41, 0x48, 0xa5, 0xba, 0x93, 0xf9, 0x01, - 0x09, 0x3f, 0xb5, 0x06, 0x42, 0xc6, 0x02, 0xe2, 0x2b, 0x40, 0x46, 0x73, - 0x5b, 0x0d, 0x20, 0x00, 0x02, 0xb4, 0x01, 0x06, 0x45, 0x4d, 0x47, 0x0b, - 0x20, 0x40, 0x4c, 0x46, 0x47, 0xff, 0xfe, 0x00, 0x48, 0x95, 0xbe, 0x0c, - 0x20, 0x40, 0x02, 0xaf, 0x00, 0xa8, 0x03, 0x54, 0x60, 0x3d, 0x33, 0x1a, + 0x39, 0x3d, 0x34, 0xcf, 0x01, 0x49, 0x9b, 0xb7, 0x3d, 0xcf, 0x41, 0x46, + 0x0f, 0xd2, 0x38, 0xcf, 0x81, 0x06, 0x4a, 0x38, 0xaa, 0x3f, 0xcf, 0x41, + 0x48, 0xe9, 0xb8, 0x39, 0xcf, 0x41, 0x48, 0xc1, 0xba, 0x93, 0xf9, 0x01, + 0x09, 0x5b, 0xb5, 0x06, 0x42, 0xc6, 0x02, 0xe2, 0x2b, 0x40, 0x46, 0x88, + 0x5b, 0x0d, 0x20, 0x00, 0x02, 0xb4, 0x01, 0x06, 0x45, 0x62, 0x47, 0x0b, + 0x20, 0x40, 0x4c, 0x5b, 0x47, 0xff, 0xfe, 0x00, 0x48, 0xb1, 0xbe, 0x0c, + 0x20, 0x40, 0x02, 0xaf, 0x00, 0xa8, 0x03, 0x54, 0x75, 0x3d, 0x33, 0x1a, 0x01, 0x08, 0xd7, 0x14, 0x91, 0x03, 0x07, 0xf1, 0x04, 0x90, 0x01, 0x05, 0xb9, 0x00, 0x74, 0xb3, 0x3a, 0x06, 0x11, 0x35, 0x01, 0xff, 0x4b, 0x17, 0x35, 0x0a, 0x1a, 0x01, 0x05, 0xdb, 0x02, 0x01, 0xff, 0xa1, 0x20, 0xe5, 0x04, 0x1a, 0x01, 0xe9, 0x01, 0x1a, 0x01, 0xef, 0x06, 0x1a, 0x81, 0x0f, - 0x4a, 0x55, 0xa7, 0x09, 0x1a, 0x01, 0xf5, 0x03, 0x1a, 0xc1, 0x00, 0xe5, + 0x4a, 0x68, 0xa7, 0x09, 0x1a, 0x01, 0xf5, 0x03, 0x1a, 0xc1, 0x00, 0xe5, 0x02, 0x1a, 0x41, 0xe5, 0x05, 0x1a, 0x41, 0xe9, 0x07, 0x1a, 0x01, 0xf5, - 0x08, 0x1a, 0x41, 0x04, 0xdc, 0x02, 0x06, 0x48, 0xdd, 0xc1, 0x47, 0x1a, + 0x08, 0x1a, 0x41, 0x04, 0xdc, 0x02, 0x06, 0x48, 0xf9, 0xc1, 0x47, 0x1a, 0x41, 0x48, 0x5b, 0x14, 0x38, 0x1a, 0x01, 0x06, 0x3b, 0x21, 0x11, 0x02, - 0x02, 0x00, 0x01, 0xff, 0x44, 0x49, 0x21, 0x34, 0x1a, 0x01, 0x45, 0x69, + 0x02, 0x00, 0x01, 0xff, 0x44, 0x49, 0x21, 0x34, 0x1a, 0x01, 0x45, 0x7e, 0x46, 0x39, 0x1a, 0x41, 0x4e, 0xcf, 0x22, 0x37, 0x1a, 0x01, 0x45, 0x41, 0x21, 0x35, 0x1a, 0xc1, 0x00, 0x4e, 0xcf, 0x22, 0x36, 0x1a, 0x41, 0x4b, - 0x36, 0x93, 0x43, 0x1a, 0x01, 0x4a, 0xb7, 0xa4, 0x44, 0x1a, 0x01, 0x44, + 0x49, 0x93, 0x43, 0x1a, 0x01, 0x4a, 0xca, 0xa4, 0x44, 0x1a, 0x01, 0x44, 0xa4, 0x02, 0x42, 0x1a, 0x01, 0x45, 0xe9, 0x35, 0x41, 0x1a, 0x41, 0x42, 0x1a, 0x23, 0x29, 0x1a, 0x01, 0xe1, 0x00, 0x1a, 0x01, 0xa2, 0xe5, 0x01, 0xa3, 0xd8, 0x01, 0xa4, 0xb2, 0x01, 0xa7, 0xa5, 0x01, 0x42, 0x22, 0x00, @@ -1006,21 +1007,21 @@ static const unsigned char uname2c_tree[210697] = { 0x17, 0x1a, 0x41, 0xe1, 0x10, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x11, 0x1a, 0x41, 0xe1, 0x20, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x21, 0x1a, 0x41, 0x56, 0xc2, 0x2f, 0x45, 0x1a, 0x01, 0x49, 0x88, 0x19, 0x3f, 0x1a, 0x41, 0x06, - 0x00, 0x39, 0x27, 0x06, 0x89, 0x2a, 0x01, 0xff, 0x0d, 0xd2, 0x7b, 0x06, - 0x51, 0x86, 0x55, 0x3a, 0x1a, 0x41, 0x42, 0x74, 0x00, 0x3d, 0x1a, 0x01, + 0x15, 0x39, 0x27, 0x06, 0x89, 0x2a, 0x01, 0xff, 0x0d, 0xd9, 0x7b, 0x06, + 0x51, 0x9b, 0x55, 0x3a, 0x1a, 0x41, 0x42, 0x74, 0x00, 0x3d, 0x1a, 0x01, 0x42, 0x71, 0x00, 0x3c, 0x1a, 0x01, 0x42, 0xb4, 0x09, 0x3e, 0x1a, 0x01, 0x42, 0x20, 0x20, 0x3b, 0x1a, 0x41, 0x56, 0xc2, 0x2f, 0x46, 0x1a, 0x01, - 0x49, 0x88, 0x19, 0x40, 0x1a, 0x41, 0x4e, 0x32, 0x6f, 0xff, 0x22, 0x00, + 0x49, 0x88, 0x19, 0x40, 0x1a, 0x41, 0x4e, 0x47, 0x6f, 0xff, 0x22, 0x00, 0x56, 0x80, 0x2f, 0x64, 0x2a, 0x00, 0x05, 0xc3, 0x00, 0x46, 0xb2, 0x27, - 0xb3, 0x06, 0x4a, 0x7b, 0xa9, 0x82, 0x29, 0x40, 0x06, 0x3d, 0xd0, 0x06, - 0x43, 0xf4, 0x3f, 0x81, 0x29, 0x40, 0x4b, 0xbb, 0x36, 0x1f, 0x2a, 0x00, - 0xb0, 0x01, 0xff, 0x45, 0xc4, 0xdc, 0x20, 0x2a, 0x00, 0x49, 0x48, 0xb5, - 0x21, 0x2a, 0x40, 0x54, 0xd0, 0x3b, 0x65, 0x2a, 0x00, 0x55, 0xb1, 0x36, - 0x3e, 0x2a, 0x00, 0x05, 0xc9, 0x00, 0x01, 0xff, 0x4f, 0xd4, 0x64, 0x8a, - 0x29, 0x00, 0x4d, 0x17, 0x7d, 0x88, 0x29, 0x40, 0x4f, 0xd4, 0x64, 0x89, - 0x29, 0x00, 0x4d, 0x17, 0x7d, 0x87, 0x29, 0x40, 0x4b, 0x73, 0x91, 0x71, - 0xf9, 0x01, 0xa5, 0xc4, 0x2b, 0xa9, 0x06, 0x44, 0x9e, 0xe6, 0x80, 0xfa, - 0x41, 0x80, 0x06, 0x46, 0x97, 0xd3, 0x2f, 0x26, 0x40, 0x08, 0xe4, 0x9c, + 0xb3, 0x06, 0x4a, 0x8e, 0xa9, 0x82, 0x29, 0x40, 0x06, 0x59, 0xd0, 0x06, + 0x43, 0x09, 0x40, 0x81, 0x29, 0x40, 0x4b, 0xbb, 0x36, 0x1f, 0x2a, 0x00, + 0xb0, 0x01, 0xff, 0x45, 0xe0, 0xdc, 0x20, 0x2a, 0x00, 0x49, 0x64, 0xb5, + 0x21, 0x2a, 0x40, 0x54, 0xe5, 0x3b, 0x65, 0x2a, 0x00, 0x55, 0xb1, 0x36, + 0x3e, 0x2a, 0x00, 0x05, 0xc9, 0x00, 0x01, 0xff, 0x4f, 0xe9, 0x64, 0x8a, + 0x29, 0x00, 0x4d, 0x1e, 0x7d, 0x88, 0x29, 0x40, 0x4f, 0xe9, 0x64, 0x89, + 0x29, 0x00, 0x4d, 0x1e, 0x7d, 0x87, 0x29, 0x40, 0x4b, 0x86, 0x91, 0x71, + 0xf9, 0x01, 0xa5, 0xc4, 0x2b, 0xa9, 0x06, 0x44, 0xba, 0xe6, 0x80, 0xfa, + 0x41, 0x80, 0x06, 0x46, 0xb3, 0xd3, 0x2f, 0x26, 0x40, 0x08, 0xf7, 0x9c, 0xcd, 0x28, 0x09, 0x39, 0x16, 0x01, 0xff, 0xe1, 0x0a, 0xa0, 0x80, 0xb6, 0x28, 0xa2, 0x94, 0x26, 0xa3, 0x87, 0x24, 0xa4, 0x9d, 0x22, 0xe5, 0x14, 0xa0, 0x80, 0x93, 0x22, 0xa6, 0xb6, 0x21, 0xa7, 0xb7, 0x1f, 0xa8, 0x8b, @@ -1457,18 +1458,18 @@ static const unsigned char uname2c_tree[210697] = { 0x09, 0xa0, 0x40, 0xa2, 0xd3, 0x02, 0xa3, 0xb1, 0x02, 0xa4, 0xa4, 0x02, 0xa7, 0x83, 0x02, 0xa8, 0xe5, 0x01, 0xaa, 0xcc, 0x01, 0xab, 0xbf, 0x01, 0xac, 0xad, 0x01, 0xad, 0xa0, 0x01, 0xae, 0x83, 0x01, 0x42, 0x1f, 0x00, - 0xa9, 0xa4, 0x00, 0xb0, 0x6f, 0x43, 0x60, 0xe9, 0x90, 0xa4, 0x00, 0xb3, + 0xa9, 0xa4, 0x00, 0xb0, 0x6f, 0x43, 0x7c, 0xe9, 0x90, 0xa4, 0x00, 0xb3, 0x49, 0xb4, 0x3d, 0xb6, 0x2f, 0x42, 0x15, 0x02, 0xb8, 0xa4, 0x00, 0xb9, 0x1d, 0xba, 0x01, 0xff, 0xe1, 0xb2, 0xa4, 0x00, 0x42, 0x20, 0x04, 0xab, - 0xa4, 0x00, 0xb5, 0x06, 0x44, 0x2e, 0xe8, 0xc4, 0xa4, 0x40, 0xf0, 0xa2, + 0xa4, 0x00, 0xb5, 0x06, 0x44, 0x4a, 0xe8, 0xc4, 0xa4, 0x40, 0xf0, 0xa2, 0xa4, 0x00, 0xf2, 0xc1, 0xa4, 0x40, 0x42, 0x52, 0x00, 0xae, 0xa4, 0x00, 0xef, 0x9d, 0xa4, 0x40, 0x42, 0xaa, 0x09, 0xb1, 0xa4, 0x00, 0x42, 0x42, 0x00, 0xaf, 0xa4, 0x40, 0x42, 0x8a, 0x00, 0xa0, 0xa4, 0x00, 0xf5, 0xa8, 0xa4, 0x40, 0xa8, 0x06, 0x42, 0xdb, 0x02, 0x95, 0xa4, 0x40, 0x42, 0x8a, 0x00, 0xc0, 0xa4, 0x00, 0x42, 0x1f, 0x00, 0xc2, 0xa4, 0x00, 0x42, 0x42, 0x00, 0xba, 0xa4, 0x00, 0xf9, 0xb0, 0xa4, 0x40, 0x42, 0x0a, 0x07, 0x9e, - 0xa4, 0x00, 0x42, 0xf7, 0x62, 0xac, 0xa4, 0x40, 0x43, 0x7d, 0xb2, 0xc5, - 0xa4, 0x00, 0xb9, 0x06, 0x43, 0xb4, 0xe9, 0xb4, 0xa4, 0x40, 0x42, 0xbf, + 0xa4, 0x00, 0x42, 0x0c, 0x63, 0xac, 0xa4, 0x40, 0x43, 0x99, 0xb2, 0xc5, + 0xa4, 0x00, 0xb9, 0x06, 0x43, 0xd0, 0xe9, 0xb4, 0xa4, 0x40, 0x42, 0xbf, 0x03, 0x93, 0xa4, 0x00, 0x42, 0x1f, 0x00, 0xa7, 0xa4, 0x40, 0xe9, 0x98, 0xa4, 0x00, 0x42, 0x1f, 0x00, 0x9c, 0xa4, 0x40, 0xe9, 0x91, 0xa4, 0x80, 0x06, 0x42, 0x99, 0x22, 0x9a, 0xa4, 0x40, 0xe5, 0xbb, 0xa4, 0x40, 0xe5, @@ -1479,210 +1480,210 @@ static const unsigned char uname2c_tree[210697] = { 0x00, 0xbf, 0xa4, 0x00, 0x42, 0x1f, 0x04, 0x9f, 0xa4, 0x40, 0xe1, 0xa1, 0xa4, 0x00, 0x42, 0xaa, 0x09, 0x97, 0xa4, 0x00, 0xa7, 0x06, 0x42, 0x20, 0x04, 0xb6, 0xa4, 0x40, 0x42, 0x1f, 0x00, 0x96, 0xa4, 0x00, 0x42, 0x1f, - 0x04, 0xa6, 0xa4, 0x40, 0x43, 0x2b, 0x6d, 0xa4, 0xa4, 0x00, 0xf5, 0xb9, + 0x04, 0xa6, 0xa4, 0x40, 0x43, 0x40, 0x6d, 0xa4, 0xa4, 0x00, 0xf5, 0xb9, 0xa4, 0x40, 0x42, 0xb0, 0x01, 0xc3, 0xa4, 0x00, 0x42, 0xbf, 0x03, 0xbe, - 0xa4, 0x00, 0x43, 0x7b, 0xe9, 0xbd, 0xa4, 0x00, 0xf9, 0xbc, 0xa4, 0xc0, + 0xa4, 0x00, 0x43, 0x97, 0xe9, 0xbd, 0xa4, 0x00, 0xf9, 0xbc, 0xa4, 0xc0, 0x00, 0xf0, 0x94, 0xa4, 0x00, 0xf4, 0xa3, 0xa4, 0x40, 0x43, 0xc2, 0x0b, - 0x9b, 0xa4, 0x00, 0x42, 0x42, 0x00, 0xa5, 0xa4, 0x40, 0x4a, 0x8f, 0xa4, - 0x9b, 0xf4, 0x01, 0x46, 0xc8, 0x03, 0xa5, 0x00, 0x00, 0x05, 0xa6, 0xe1, - 0x01, 0xff, 0x0a, 0x99, 0x53, 0xa0, 0x02, 0x50, 0x59, 0x5d, 0xad, 0x0e, + 0x9b, 0xa4, 0x00, 0x42, 0x42, 0x00, 0xa5, 0xa4, 0x40, 0x4a, 0xa2, 0xa4, + 0x9b, 0xf4, 0x01, 0x46, 0xc8, 0x03, 0xa5, 0x00, 0x00, 0x05, 0xc2, 0xe1, + 0x01, 0xff, 0x0a, 0xae, 0x53, 0xa0, 0x02, 0x50, 0x6e, 0x5d, 0xad, 0x0e, 0x01, 0x07, 0xf1, 0x04, 0x01, 0xff, 0x42, 0xbc, 0x04, 0x81, 0x0e, 0x01, 0xa3, 0xf8, 0x01, 0x02, 0x68, 0x0f, 0xeb, 0x01, 0xa5, 0xd4, 0x01, 0x42, - 0xed, 0x06, 0x99, 0x0e, 0x01, 0x43, 0xaf, 0xaf, 0x9f, 0x0e, 0x01, 0xa8, + 0xed, 0x06, 0x99, 0x0e, 0x01, 0x43, 0xcb, 0xaf, 0x9f, 0x0e, 0x01, 0xa8, 0xb9, 0x01, 0x42, 0x77, 0x24, 0x90, 0x0e, 0x01, 0xab, 0xa4, 0x01, 0x43, - 0xb0, 0x00, 0xa0, 0x0e, 0x81, 0x96, 0x01, 0x43, 0x2a, 0x89, 0xa1, 0x0e, + 0xb0, 0x00, 0xa0, 0x0e, 0x81, 0x96, 0x01, 0x43, 0x31, 0x89, 0xa1, 0x0e, 0x01, 0x43, 0x40, 0x20, 0xa2, 0x0e, 0x01, 0x42, 0xd1, 0x00, 0xa5, 0x0e, 0x01, 0xb0, 0x78, 0x43, 0x9d, 0x12, 0x9c, 0x0e, 0x01, 0xb2, 0x66, 0xb3, 0x4e, 0xb4, 0x42, 0x42, 0x9f, 0x03, 0xa3, 0x0e, 0x01, 0x42, 0xb4, 0x09, - 0x9a, 0x0e, 0x81, 0x2f, 0x43, 0x08, 0x83, 0xa4, 0x0e, 0x01, 0xb8, 0x1d, - 0x43, 0xa8, 0xe9, 0xa8, 0x0e, 0x81, 0x10, 0xba, 0x01, 0xff, 0xe1, 0x8f, + 0x9a, 0x0e, 0x81, 0x2f, 0x43, 0x0f, 0x83, 0xa4, 0x0e, 0x01, 0xb8, 0x1d, + 0x43, 0xc4, 0xe9, 0xa8, 0x0e, 0x81, 0x10, 0xba, 0x01, 0xff, 0xe1, 0x8f, 0x0e, 0x81, 0x04, 0xe5, 0x96, 0x0e, 0x41, 0xec, 0x8c, 0x0e, 0x41, 0x56, - 0x78, 0x2e, 0xb1, 0x0e, 0x41, 0xe1, 0x8a, 0x0e, 0x01, 0x44, 0x2e, 0xe5, - 0x98, 0x0e, 0x41, 0x4f, 0xa9, 0x62, 0x9b, 0x0e, 0x41, 0xe1, 0x95, 0x0e, + 0x78, 0x2e, 0xb1, 0x0e, 0x41, 0xe1, 0x8a, 0x0e, 0x01, 0x44, 0x4a, 0xe5, + 0x98, 0x0e, 0x41, 0x4f, 0xbe, 0x62, 0x9b, 0x0e, 0x41, 0xe1, 0x95, 0x0e, 0x01, 0x42, 0xb0, 0x01, 0x84, 0x0e, 0x41, 0x42, 0xe8, 0x01, 0x93, 0x0e, 0x01, 0xe5, 0x85, 0x0e, 0x01, 0x43, 0x99, 0x14, 0x92, 0x0e, 0x01, 0x42, 0x9e, 0x01, 0x91, 0x0e, 0x41, 0xe1, 0x8d, 0x0e, 0x01, 0x42, 0x22, 0x00, 0x8e, 0x0e, 0x41, 0xe5, 0x82, 0x0e, 0x01, 0x42, 0xb0, 0x01, 0x83, 0x0e, 0x41, 0x4f, 0x4a, 0x37, 0xb0, 0x0e, 0x41, 0x42, 0x9e, 0x12, 0x9d, 0x0e, - 0x01, 0x43, 0x8e, 0x4a, 0x9e, 0x0e, 0x41, 0x42, 0x65, 0x0f, 0xa7, 0x0e, - 0x01, 0x42, 0x22, 0x00, 0x89, 0x0e, 0x41, 0x43, 0x30, 0x64, 0x80, 0x0e, + 0x01, 0x43, 0xa3, 0x4a, 0x9e, 0x0e, 0x41, 0x42, 0x65, 0x0f, 0xa7, 0x0e, + 0x01, 0x42, 0x22, 0x00, 0x89, 0x0e, 0x41, 0x43, 0x45, 0x64, 0x80, 0x0e, 0x01, 0xf4, 0xa9, 0x0e, 0x01, 0xf7, 0xa6, 0x0e, 0x01, 0x42, 0xd0, 0x1a, 0x97, 0x0e, 0x41, 0xe4, 0x94, 0x0e, 0x01, 0xec, 0x8b, 0x0e, 0x41, 0xa8, 0x06, 0x42, 0x29, 0x02, 0x86, 0x0e, 0x41, 0x43, 0xf1, 0x34, 0x88, 0x0e, - 0x01, 0x42, 0x29, 0x02, 0x87, 0x0e, 0x41, 0x4a, 0x7d, 0xa2, 0xab, 0x0e, - 0x01, 0x4a, 0xf3, 0xa4, 0xac, 0x0e, 0x41, 0x53, 0x0d, 0x42, 0x27, 0x23, - 0x00, 0x44, 0xce, 0xe1, 0x7b, 0xfa, 0x01, 0x07, 0x87, 0xc7, 0x06, 0x42, + 0x01, 0x42, 0x29, 0x02, 0x87, 0x0e, 0x41, 0x4a, 0x90, 0xa2, 0xab, 0x0e, + 0x01, 0x4a, 0x06, 0xa5, 0xac, 0x0e, 0x41, 0x53, 0x22, 0x42, 0x27, 0x23, + 0x00, 0x44, 0xea, 0xe1, 0x7b, 0xfa, 0x01, 0x07, 0xa3, 0xc7, 0x06, 0x42, 0x0c, 0x00, 0xbb, 0x22, 0x40, 0x06, 0x1c, 0x07, 0x31, 0x04, 0xdf, 0x04, - 0x01, 0xff, 0xa3, 0x1e, 0x48, 0xdd, 0xbb, 0x62, 0xfa, 0x01, 0x47, 0x17, - 0xc7, 0x60, 0xfa, 0x01, 0x45, 0x34, 0xaa, 0x63, 0xfa, 0x01, 0x48, 0x45, - 0xbe, 0x61, 0xfa, 0x01, 0x47, 0xaf, 0xcb, 0x66, 0xfa, 0x41, 0x45, 0x9f, - 0xd9, 0x65, 0xfa, 0x01, 0x46, 0x1d, 0x52, 0x64, 0xfa, 0x41, 0xa3, 0x1e, - 0x48, 0xdd, 0xbb, 0x69, 0xfa, 0x01, 0x47, 0x17, 0xc7, 0x67, 0xfa, 0x01, - 0x45, 0x34, 0xaa, 0x6a, 0xfa, 0x01, 0x48, 0x45, 0xbe, 0x68, 0xfa, 0x01, - 0x47, 0xaf, 0xcb, 0x6d, 0xfa, 0x41, 0x45, 0x9f, 0xd9, 0x6c, 0xfa, 0x01, - 0x46, 0x1d, 0x52, 0x6b, 0xfa, 0x41, 0xa1, 0xf4, 0x0d, 0xa5, 0xbf, 0x0d, + 0x01, 0xff, 0xa3, 0x1e, 0x48, 0xf9, 0xbb, 0x62, 0xfa, 0x01, 0x47, 0x33, + 0xc7, 0x60, 0xfa, 0x01, 0x45, 0x47, 0xaa, 0x63, 0xfa, 0x01, 0x48, 0x61, + 0xbe, 0x61, 0xfa, 0x01, 0x47, 0xcb, 0xcb, 0x66, 0xfa, 0x41, 0x45, 0xbb, + 0xd9, 0x65, 0xfa, 0x01, 0x46, 0x32, 0x52, 0x64, 0xfa, 0x41, 0xa3, 0x1e, + 0x48, 0xf9, 0xbb, 0x69, 0xfa, 0x01, 0x47, 0x33, 0xc7, 0x67, 0xfa, 0x01, + 0x45, 0x47, 0xaa, 0x6a, 0xfa, 0x01, 0x48, 0x61, 0xbe, 0x68, 0xfa, 0x01, + 0x47, 0xcb, 0xcb, 0x6d, 0xfa, 0x41, 0x45, 0xbb, 0xd9, 0x6c, 0xfa, 0x01, + 0x46, 0x32, 0x52, 0x6b, 0xfa, 0x41, 0xa1, 0xf4, 0x0d, 0xa5, 0xbf, 0x0d, 0xa8, 0xf6, 0x03, 0xa9, 0x8c, 0x01, 0xaf, 0x23, 0xb2, 0x01, 0xff, 0x4d, - 0x89, 0x79, 0x81, 0xf3, 0x01, 0xa5, 0x06, 0x4a, 0xeb, 0x99, 0x0d, 0x27, - 0x40, 0x4b, 0x52, 0x91, 0x40, 0x22, 0x00, 0x43, 0xf8, 0x22, 0x27, 0xf5, - 0x01, 0x46, 0x83, 0xd5, 0x3c, 0xf9, 0x41, 0x47, 0xb4, 0xc8, 0x3a, 0xf4, + 0x90, 0x79, 0x81, 0xf3, 0x01, 0xa5, 0x06, 0x4a, 0xfe, 0x99, 0x0d, 0x27, + 0x40, 0x4b, 0x65, 0x91, 0x40, 0x22, 0x00, 0x43, 0xf8, 0x22, 0x27, 0xf5, + 0x01, 0x46, 0x9f, 0xd5, 0x3c, 0xf9, 0x41, 0x47, 0xd0, 0xc8, 0x3a, 0xf4, 0x01, 0xad, 0x2f, 0x46, 0xc8, 0x03, 0xa9, 0x20, 0x00, 0x42, 0xf3, 0x0a, - 0xb5, 0xfa, 0x01, 0xb2, 0x01, 0xff, 0x02, 0x06, 0x00, 0x10, 0x46, 0x2b, - 0xd3, 0xfa, 0xf5, 0x01, 0xed, 0xb1, 0xfa, 0x01, 0x49, 0x2d, 0xb5, 0x1f, - 0xf6, 0x41, 0x46, 0x73, 0x5b, 0x60, 0x20, 0x00, 0x54, 0xa8, 0x40, 0x31, - 0x2e, 0x40, 0x42, 0x1a, 0x00, 0x69, 0xf4, 0x81, 0x06, 0x4a, 0x65, 0xa1, - 0xba, 0xf6, 0x41, 0x50, 0x99, 0x5a, 0x6f, 0xf4, 0x01, 0x02, 0x31, 0x01, - 0x01, 0xff, 0x45, 0x17, 0xda, 0x62, 0xf4, 0x01, 0x47, 0xdc, 0xc5, 0x5a, - 0xf4, 0x01, 0x43, 0x46, 0x1f, 0x52, 0xf4, 0x01, 0x46, 0xf0, 0xb2, 0x61, - 0xf4, 0x41, 0x0a, 0xbf, 0x19, 0x45, 0x52, 0x5b, 0x4c, 0x3e, 0x2e, 0x00, - 0x4b, 0xdd, 0x96, 0x40, 0xf9, 0x01, 0xae, 0x11, 0x02, 0x88, 0x00, 0x01, - 0xff, 0x4a, 0x89, 0xa0, 0xae, 0xf5, 0x01, 0x44, 0xec, 0x00, 0xdc, 0xf6, - 0x41, 0xa4, 0x10, 0x47, 0x76, 0xc6, 0x77, 0xf3, 0x01, 0xe7, 0xbd, 0xfa, - 0x01, 0x49, 0xa6, 0xa7, 0x09, 0xf6, 0x41, 0x80, 0x06, 0x42, 0xd1, 0x00, - 0x9f, 0xfa, 0x41, 0x4c, 0x50, 0x85, 0x2c, 0xf3, 0x01, 0x45, 0x76, 0xda, + 0xb5, 0xfa, 0x01, 0xb2, 0x01, 0xff, 0x02, 0x06, 0x00, 0x10, 0x46, 0x47, + 0xd3, 0xfa, 0xf5, 0x01, 0xed, 0xb1, 0xfa, 0x01, 0x49, 0x49, 0xb5, 0x1f, + 0xf6, 0x41, 0x46, 0x88, 0x5b, 0x60, 0x20, 0x00, 0x54, 0xbd, 0x40, 0x31, + 0x2e, 0x40, 0x42, 0x1a, 0x00, 0x69, 0xf4, 0x81, 0x06, 0x4a, 0x78, 0xa1, + 0xba, 0xf6, 0x41, 0x50, 0xae, 0x5a, 0x6f, 0xf4, 0x01, 0x02, 0x31, 0x01, + 0x01, 0xff, 0x45, 0x33, 0xda, 0x62, 0xf4, 0x01, 0x47, 0xf8, 0xc5, 0x5a, + 0xf4, 0x01, 0x43, 0x46, 0x1f, 0x52, 0xf4, 0x01, 0x46, 0x0c, 0xb3, 0x61, + 0xf4, 0x41, 0x0a, 0xbf, 0x19, 0x45, 0x52, 0x70, 0x4c, 0x3e, 0x2e, 0x00, + 0x4b, 0xf0, 0x96, 0x40, 0xf9, 0x01, 0xae, 0x11, 0x02, 0x88, 0x00, 0x01, + 0xff, 0x4a, 0x9c, 0xa0, 0xae, 0xf5, 0x01, 0x44, 0xec, 0x00, 0xdc, 0xf6, + 0x41, 0xa4, 0x10, 0x47, 0x92, 0xc6, 0x77, 0xf3, 0x01, 0xe7, 0xbd, 0xfa, + 0x01, 0x49, 0xb9, 0xa7, 0x09, 0xf6, 0x41, 0x80, 0x06, 0x42, 0xd1, 0x00, + 0x9f, 0xfa, 0x41, 0x4c, 0x57, 0x85, 0x2c, 0xf3, 0x01, 0x45, 0x92, 0xda, 0x90, 0xf3, 0x41, 0x0a, 0xa5, 0x01, 0xfb, 0x01, 0x0a, 0xea, 0x01, 0xd8, 0x01, 0x06, 0xb4, 0x01, 0x8e, 0x01, 0x0b, 0xb3, 0x02, 0x6c, 0x06, 0x39, - 0x1e, 0x23, 0x08, 0x50, 0x02, 0x01, 0xff, 0x4a, 0x58, 0x3a, 0x69, 0xf8, - 0x01, 0x50, 0x52, 0x3a, 0x79, 0xf8, 0x01, 0x50, 0x69, 0x5e, 0x61, 0xf8, - 0x01, 0x51, 0x52, 0x56, 0x71, 0xf8, 0x01, 0x55, 0x4d, 0x3a, 0x81, 0xf8, - 0x41, 0x05, 0x11, 0x21, 0x23, 0x05, 0x8b, 0x18, 0x01, 0xff, 0x4a, 0x58, - 0x3a, 0x6f, 0xf8, 0x01, 0x50, 0x52, 0x3a, 0x7f, 0xf8, 0x01, 0x50, 0x69, - 0x5e, 0x67, 0xf8, 0x01, 0x51, 0x52, 0x56, 0x77, 0xf8, 0x01, 0x55, 0x4d, - 0x3a, 0x87, 0xf8, 0x41, 0x4a, 0x58, 0x3a, 0x6e, 0xf8, 0x01, 0x50, 0x52, - 0x3a, 0x7e, 0xf8, 0x01, 0x50, 0x69, 0x5e, 0x66, 0xf8, 0x01, 0x51, 0x52, - 0x56, 0x76, 0xf8, 0x01, 0x55, 0x4d, 0x3a, 0x86, 0xf8, 0x41, 0x4a, 0x58, - 0x3a, 0x6a, 0xf8, 0x01, 0x50, 0x52, 0x3a, 0x7a, 0xf8, 0x01, 0x50, 0x69, - 0x5e, 0x62, 0xf8, 0x01, 0x51, 0x52, 0x56, 0x72, 0xf8, 0x01, 0x55, 0x4d, + 0x1e, 0x23, 0x08, 0x50, 0x02, 0x01, 0xff, 0x4a, 0x6d, 0x3a, 0x69, 0xf8, + 0x01, 0x50, 0x67, 0x3a, 0x79, 0xf8, 0x01, 0x50, 0x7e, 0x5e, 0x61, 0xf8, + 0x01, 0x51, 0x67, 0x56, 0x71, 0xf8, 0x01, 0x55, 0x62, 0x3a, 0x81, 0xf8, + 0x41, 0x05, 0x11, 0x21, 0x23, 0x05, 0x8b, 0x18, 0x01, 0xff, 0x4a, 0x6d, + 0x3a, 0x6f, 0xf8, 0x01, 0x50, 0x67, 0x3a, 0x7f, 0xf8, 0x01, 0x50, 0x7e, + 0x5e, 0x67, 0xf8, 0x01, 0x51, 0x67, 0x56, 0x77, 0xf8, 0x01, 0x55, 0x62, + 0x3a, 0x87, 0xf8, 0x41, 0x4a, 0x6d, 0x3a, 0x6e, 0xf8, 0x01, 0x50, 0x67, + 0x3a, 0x7e, 0xf8, 0x01, 0x50, 0x7e, 0x5e, 0x66, 0xf8, 0x01, 0x51, 0x67, + 0x56, 0x76, 0xf8, 0x01, 0x55, 0x62, 0x3a, 0x86, 0xf8, 0x41, 0x4a, 0x6d, + 0x3a, 0x6a, 0xf8, 0x01, 0x50, 0x67, 0x3a, 0x7a, 0xf8, 0x01, 0x50, 0x7e, + 0x5e, 0x62, 0xf8, 0x01, 0x51, 0x67, 0x56, 0x72, 0xf8, 0x01, 0x55, 0x62, 0x3a, 0x82, 0xf8, 0x41, 0x05, 0x11, 0x21, 0x23, 0x05, 0x8b, 0x18, 0x01, - 0xff, 0x4a, 0x58, 0x3a, 0x6c, 0xf8, 0x01, 0x50, 0x52, 0x3a, 0x7c, 0xf8, - 0x01, 0x50, 0x69, 0x5e, 0x64, 0xf8, 0x01, 0x51, 0x52, 0x56, 0x74, 0xf8, - 0x01, 0x55, 0x4d, 0x3a, 0x84, 0xf8, 0x41, 0x4a, 0x58, 0x3a, 0x6d, 0xf8, - 0x01, 0x50, 0x52, 0x3a, 0x7d, 0xf8, 0x01, 0x50, 0x69, 0x5e, 0x65, 0xf8, - 0x01, 0x51, 0x52, 0x56, 0x75, 0xf8, 0x01, 0x55, 0x4d, 0x3a, 0x85, 0xf8, - 0x41, 0x4a, 0x58, 0x3a, 0x68, 0xf8, 0x01, 0x50, 0x52, 0x3a, 0x78, 0xf8, - 0x01, 0x50, 0x69, 0x5e, 0x60, 0xf8, 0x01, 0x51, 0x52, 0x56, 0x70, 0xf8, - 0x01, 0x55, 0x4d, 0x3a, 0x80, 0xf8, 0x41, 0x4a, 0x58, 0x3a, 0x6b, 0xf8, - 0x01, 0x50, 0x52, 0x3a, 0x7b, 0xf8, 0x01, 0x50, 0x69, 0x5e, 0x63, 0xf8, - 0x01, 0x51, 0x52, 0x56, 0x73, 0xf8, 0x01, 0x55, 0x4d, 0x3a, 0x83, 0xf8, + 0xff, 0x4a, 0x6d, 0x3a, 0x6c, 0xf8, 0x01, 0x50, 0x67, 0x3a, 0x7c, 0xf8, + 0x01, 0x50, 0x7e, 0x5e, 0x64, 0xf8, 0x01, 0x51, 0x67, 0x56, 0x74, 0xf8, + 0x01, 0x55, 0x62, 0x3a, 0x84, 0xf8, 0x41, 0x4a, 0x6d, 0x3a, 0x6d, 0xf8, + 0x01, 0x50, 0x67, 0x3a, 0x7d, 0xf8, 0x01, 0x50, 0x7e, 0x5e, 0x65, 0xf8, + 0x01, 0x51, 0x67, 0x56, 0x75, 0xf8, 0x01, 0x55, 0x62, 0x3a, 0x85, 0xf8, + 0x41, 0x4a, 0x6d, 0x3a, 0x68, 0xf8, 0x01, 0x50, 0x67, 0x3a, 0x78, 0xf8, + 0x01, 0x50, 0x7e, 0x5e, 0x60, 0xf8, 0x01, 0x51, 0x67, 0x56, 0x70, 0xf8, + 0x01, 0x55, 0x62, 0x3a, 0x80, 0xf8, 0x41, 0x4a, 0x6d, 0x3a, 0x6b, 0xf8, + 0x01, 0x50, 0x67, 0x3a, 0x7b, 0xf8, 0x01, 0x50, 0x7e, 0x5e, 0x63, 0xf8, + 0x01, 0x51, 0x67, 0x56, 0x73, 0xf8, 0x01, 0x55, 0x62, 0x3a, 0x83, 0xf8, 0x41, 0x43, 0x67, 0x00, 0x0b, 0xf4, 0x01, 0x43, 0x87, 0x11, 0xde, 0xf6, 0x81, 0xac, 0x09, 0x03, 0xaf, 0x02, 0x01, 0xff, 0x80, 0x06, 0x5b, 0x0e, - 0x18, 0xb3, 0x27, 0x40, 0x12, 0x87, 0x4a, 0x8e, 0x09, 0x46, 0x64, 0x1f, + 0x18, 0xb3, 0x27, 0x40, 0x12, 0x9c, 0x4a, 0x8e, 0x09, 0x46, 0x64, 0x1f, 0xe6, 0x25, 0x00, 0xa3, 0x97, 0x06, 0xa4, 0xa6, 0x05, 0x59, 0x3a, 0x11, 0x55, 0x27, 0x00, 0xa6, 0xe9, 0x04, 0xa8, 0xa9, 0x04, 0xac, 0xde, 0x03, - 0xad, 0xb0, 0x03, 0x43, 0x19, 0x95, 0x11, 0x27, 0x00, 0xb0, 0x90, 0x03, + 0xad, 0xb0, 0x03, 0x43, 0x2c, 0x95, 0x11, 0x27, 0x00, 0xb0, 0x90, 0x03, 0x56, 0x6c, 0x32, 0x54, 0x27, 0x00, 0xb2, 0xcd, 0x02, 0xb3, 0x75, 0xb4, 0x53, 0x02, 0x50, 0x02, 0x21, 0x03, 0x32, 0x00, 0x01, 0xff, 0x06, 0x35, - 0x00, 0x06, 0x4e, 0x63, 0x59, 0x1e, 0x2b, 0x40, 0x43, 0x16, 0x00, 0xfe, - 0x2a, 0x00, 0x47, 0x82, 0x60, 0x2f, 0x2b, 0x00, 0x49, 0x13, 0x42, 0xaf, + 0x00, 0x06, 0x4e, 0x78, 0x59, 0x1e, 0x2b, 0x40, 0x43, 0x16, 0x00, 0xfe, + 0x2a, 0x00, 0x47, 0x97, 0x60, 0x2f, 0x2b, 0x00, 0x49, 0x28, 0x42, 0xaf, 0x25, 0x40, 0x0a, 0x9b, 0x01, 0x1e, 0x0a, 0x4b, 0x0a, 0x01, 0xff, 0x47, - 0xb9, 0xc5, 0xca, 0xfb, 0x01, 0x4e, 0x8a, 0x75, 0xb5, 0x25, 0x00, 0x48, + 0xd5, 0xc5, 0xca, 0xfb, 0x01, 0x4e, 0x9f, 0x75, 0xb5, 0x25, 0x00, 0x48, 0x01, 0x02, 0xb3, 0x25, 0xc0, 0x00, 0x49, 0x4a, 0x37, 0xec, 0x25, 0x40, 0x4e, 0xf9, 0x23, 0x46, 0xf4, 0x01, 0x45, 0xe7, 0x0e, 0x1d, 0x26, 0x40, - 0x48, 0x98, 0x38, 0x0f, 0x26, 0x00, 0x52, 0xad, 0x4e, 0x7e, 0xf5, 0x01, - 0xb2, 0x06, 0x57, 0x08, 0x2e, 0xd7, 0x26, 0x40, 0x47, 0xd2, 0xc4, 0xe2, - 0x23, 0x00, 0x66, 0x2a, 0x06, 0xc1, 0x27, 0x40, 0x47, 0xc8, 0x39, 0x04, - 0x27, 0x00, 0x49, 0x60, 0xaf, 0x46, 0xfe, 0x00, 0x4a, 0xab, 0x59, 0x16, - 0x26, 0x00, 0xad, 0xa2, 0x01, 0x49, 0x67, 0xb4, 0x64, 0x26, 0x00, 0x45, + 0x48, 0xad, 0x38, 0x0f, 0x26, 0x00, 0x52, 0xc2, 0x4e, 0x7e, 0xf5, 0x01, + 0xb2, 0x06, 0x57, 0x08, 0x2e, 0xd7, 0x26, 0x40, 0x47, 0xee, 0xc4, 0xe2, + 0x23, 0x00, 0x66, 0x2a, 0x06, 0xc1, 0x27, 0x40, 0x47, 0xdd, 0x39, 0x04, + 0x27, 0x00, 0x49, 0x7c, 0xaf, 0x46, 0xfe, 0x00, 0x4a, 0xc0, 0x59, 0x16, + 0x26, 0x00, 0xad, 0xa2, 0x01, 0x49, 0x83, 0xb4, 0x64, 0x26, 0x00, 0x45, 0xdc, 0x04, 0xa1, 0x25, 0x80, 0x2e, 0x43, 0x8c, 0x11, 0x06, 0x26, 0x00, - 0x42, 0x24, 0x0a, 0x23, 0xf3, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4c, 0x20, - 0x85, 0x25, 0xf3, 0x81, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x44, 0xf9, - 0x5f, 0x3c, 0x26, 0x00, 0x4b, 0x79, 0x9a, 0x24, 0xf3, 0x41, 0x4a, 0x09, - 0x9e, 0x26, 0xf3, 0x41, 0x80, 0x01, 0xff, 0x46, 0x8c, 0x85, 0x33, 0xf5, - 0x01, 0x11, 0x5e, 0x07, 0x48, 0x05, 0x51, 0x00, 0x01, 0xff, 0x54, 0x20, + 0x42, 0x24, 0x0a, 0x23, 0xf3, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4c, 0x27, + 0x85, 0x25, 0xf3, 0x81, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x44, 0x0e, + 0x60, 0x3c, 0x26, 0x00, 0x4b, 0x8c, 0x9a, 0x24, 0xf3, 0x41, 0x4a, 0x1c, + 0x9e, 0x26, 0xf3, 0x41, 0x80, 0x01, 0xff, 0x46, 0x93, 0x85, 0x33, 0xf5, + 0x01, 0x11, 0x5e, 0x07, 0x48, 0x05, 0x51, 0x00, 0x01, 0xff, 0x54, 0x35, 0x3c, 0x85, 0x23, 0x00, 0xac, 0x24, 0xb2, 0x16, 0x06, 0x6d, 0x02, 0x06, 0x57, 0xc3, 0x2d, 0xeb, 0x25, 0x40, 0x4d, 0xcc, 0x0b, 0xf0, 0x25, 0x00, - 0x4e, 0x44, 0x40, 0xf3, 0x25, 0x40, 0x4e, 0xec, 0x6b, 0xe5, 0x27, 0x00, - 0x4e, 0x23, 0x17, 0xa2, 0x25, 0x40, 0x4d, 0x89, 0x72, 0xe4, 0x27, 0x00, + 0x4e, 0x59, 0x40, 0xf3, 0x25, 0x40, 0x4e, 0x01, 0x6c, 0xe5, 0x27, 0x00, + 0x4e, 0x23, 0x17, 0xa2, 0x25, 0x40, 0x4d, 0x9e, 0x72, 0xe4, 0x27, 0x00, 0x05, 0x14, 0x01, 0x01, 0xff, 0x4d, 0xcc, 0x0b, 0xf1, 0x25, 0x00, 0x4e, - 0x44, 0x40, 0xf2, 0x25, 0x40, 0x4d, 0x83, 0x7e, 0x95, 0xf7, 0x01, 0x4c, - 0x65, 0x59, 0xa3, 0x25, 0x00, 0x51, 0x60, 0x59, 0x94, 0xf7, 0x41, 0x04, - 0x3e, 0x06, 0x06, 0x4a, 0x9e, 0x8d, 0x3a, 0x26, 0x40, 0x47, 0x75, 0x07, + 0x59, 0x40, 0xf2, 0x25, 0x40, 0x4d, 0x8a, 0x7e, 0x95, 0xf7, 0x01, 0x4c, + 0x7a, 0x59, 0xa3, 0x25, 0x00, 0x51, 0x75, 0x59, 0x94, 0xf7, 0x41, 0x04, + 0x3e, 0x06, 0x06, 0x4a, 0xb1, 0x8d, 0x3a, 0x26, 0x40, 0x47, 0x75, 0x07, 0x2b, 0x2b, 0x00, 0xb3, 0x01, 0xff, 0x45, 0xdc, 0x04, 0xab, 0x25, 0x00, - 0x43, 0x8c, 0x11, 0x52, 0x2b, 0x40, 0x48, 0x14, 0x42, 0xad, 0x25, 0x00, + 0x43, 0x8c, 0x11, 0x52, 0x2b, 0x40, 0x48, 0x29, 0x42, 0xad, 0x25, 0x00, 0x04, 0xc9, 0x00, 0x01, 0xff, 0x0a, 0x9b, 0x01, 0x1f, 0x0a, 0x4b, 0x0a, - 0x01, 0xff, 0xb0, 0x0c, 0x4e, 0x8a, 0x75, 0xb9, 0x25, 0x00, 0x48, 0x01, - 0x02, 0xb7, 0x25, 0x40, 0x47, 0xfe, 0xbf, 0x54, 0x2b, 0x00, 0x46, 0x54, + 0x01, 0xff, 0xb0, 0x0c, 0x4e, 0x9f, 0x75, 0xb9, 0x25, 0x00, 0x48, 0x01, + 0x02, 0xb7, 0x25, 0x40, 0x47, 0x1a, 0xc0, 0x54, 0x2b, 0x00, 0x46, 0x69, 0x44, 0xbb, 0x25, 0x40, 0x4e, 0xf9, 0x23, 0x49, 0xf4, 0x01, 0x45, 0xe7, - 0x0e, 0x1e, 0x26, 0x40, 0x4c, 0xe4, 0x84, 0xb1, 0x25, 0x00, 0x02, 0x92, - 0x01, 0x01, 0xff, 0x44, 0x43, 0x2f, 0xf1, 0xf3, 0x01, 0x45, 0x00, 0xc0, - 0x20, 0x2b, 0x40, 0x06, 0x9c, 0x03, 0x06, 0x4a, 0x29, 0xa6, 0xdd, 0x2b, - 0x40, 0x47, 0x9d, 0x3f, 0x26, 0x2b, 0x00, 0x47, 0x75, 0x07, 0x28, 0x2b, - 0x00, 0xb3, 0x01, 0xff, 0x4b, 0x66, 0x59, 0xfd, 0x25, 0x00, 0x45, 0xdc, + 0x0e, 0x1e, 0x26, 0x40, 0x4c, 0xeb, 0x84, 0xb1, 0x25, 0x00, 0x02, 0x92, + 0x01, 0x01, 0xff, 0x44, 0x43, 0x2f, 0xf1, 0xf3, 0x01, 0x45, 0x1c, 0xc0, + 0x20, 0x2b, 0x40, 0x06, 0x9c, 0x03, 0x06, 0x4a, 0x3c, 0xa6, 0xdd, 0x2b, + 0x40, 0x47, 0xb2, 0x3f, 0x26, 0x2b, 0x00, 0x47, 0x75, 0x07, 0x28, 0x2b, + 0x00, 0xb3, 0x01, 0xff, 0x4b, 0x7b, 0x59, 0xfd, 0x25, 0x00, 0x45, 0xdc, 0x04, 0xfb, 0x25, 0x00, 0x43, 0x8c, 0x11, 0x50, 0x2b, 0x40, 0xa1, 0x3a, 0x03, 0xc4, 0x00, 0x06, 0x65, 0x57, 0x07, 0xa0, 0xf7, 0x41, 0x80, 0x17, - 0x0a, 0x4b, 0x0a, 0x01, 0xff, 0x47, 0x53, 0x44, 0xc5, 0x25, 0x00, 0x4e, - 0x8a, 0x75, 0xc3, 0x25, 0x00, 0x48, 0x01, 0x02, 0xc1, 0x25, 0x40, 0x4a, - 0xe5, 0xa3, 0xd9, 0x26, 0x00, 0x09, 0x9c, 0x01, 0x01, 0xff, 0x4e, 0xf9, - 0x23, 0x48, 0xf4, 0x01, 0x45, 0xe7, 0x0e, 0x1c, 0x26, 0x40, 0x4a, 0x69, - 0xa7, 0x1c, 0x2b, 0x00, 0x49, 0x24, 0x96, 0x46, 0xf5, 0x41, 0x55, 0x22, - 0x35, 0xab, 0xf5, 0x01, 0xa5, 0x0f, 0xaf, 0x01, 0xff, 0x50, 0x79, 0x60, - 0x2d, 0x2b, 0x00, 0x47, 0xc0, 0xcc, 0xd6, 0x29, 0x40, 0xa1, 0x06, 0x45, - 0x5f, 0xc7, 0x21, 0x2b, 0x40, 0x42, 0x34, 0x00, 0x0d, 0xf9, 0x81, 0x11, - 0x03, 0x8f, 0x13, 0x01, 0xff, 0x4a, 0x1b, 0xa0, 0x05, 0x27, 0x00, 0x5c, + 0x0a, 0x4b, 0x0a, 0x01, 0xff, 0x47, 0x68, 0x44, 0xc5, 0x25, 0x00, 0x4e, + 0x9f, 0x75, 0xc3, 0x25, 0x00, 0x48, 0x01, 0x02, 0xc1, 0x25, 0x40, 0x4a, + 0xf8, 0xa3, 0xd9, 0x26, 0x00, 0x09, 0x9c, 0x01, 0x01, 0xff, 0x4e, 0xf9, + 0x23, 0x48, 0xf4, 0x01, 0x45, 0xe7, 0x0e, 0x1c, 0x26, 0x40, 0x4a, 0x7c, + 0xa7, 0x1c, 0x2b, 0x00, 0x49, 0x37, 0x96, 0x46, 0xf5, 0x41, 0x55, 0x22, + 0x35, 0xab, 0xf5, 0x01, 0xa5, 0x0f, 0xaf, 0x01, 0xff, 0x50, 0x8e, 0x60, + 0x2d, 0x2b, 0x00, 0x47, 0xdc, 0xcc, 0xd6, 0x29, 0x40, 0xa1, 0x06, 0x45, + 0x7b, 0xc7, 0x21, 0x2b, 0x40, 0x42, 0x34, 0x00, 0x0d, 0xf9, 0x81, 0x11, + 0x03, 0x8f, 0x13, 0x01, 0xff, 0x4a, 0x2e, 0xa0, 0x05, 0x27, 0x00, 0x5c, 0x15, 0x17, 0xc0, 0xfb, 0x41, 0x45, 0xb7, 0x24, 0x61, 0x26, 0x40, 0xac, - 0x16, 0x0c, 0x76, 0x11, 0x06, 0x4c, 0x07, 0x7c, 0x39, 0x26, 0x40, 0x44, + 0x16, 0x0c, 0x76, 0x11, 0x06, 0x4c, 0x0e, 0x7c, 0x39, 0x26, 0x40, 0x44, 0x31, 0x14, 0xce, 0x2b, 0x00, 0x44, 0x8b, 0x11, 0x27, 0x27, 0x40, 0x42, 0x23, 0x02, 0x90, 0x26, 0x80, 0x0f, 0xaf, 0x01, 0xff, 0x45, 0x07, 0x0e, 0x40, 0x27, 0x00, 0x43, 0x15, 0x01, 0xae, 0xf4, 0x41, 0x64, 0xc5, 0x07, - 0xff, 0x26, 0x40, 0x46, 0x9e, 0x3f, 0xc7, 0x25, 0x80, 0x3c, 0x03, 0xa6, - 0x01, 0x11, 0x08, 0x4d, 0xc0, 0x01, 0xff, 0x44, 0xc9, 0x30, 0xc1, 0x26, + 0xff, 0x26, 0x40, 0x46, 0xb3, 0x3f, 0xc7, 0x25, 0x80, 0x3c, 0x03, 0xa6, + 0x01, 0x11, 0x08, 0x69, 0xc0, 0x01, 0xff, 0x44, 0xc9, 0x30, 0xc1, 0x26, 0x00, 0x43, 0x60, 0x16, 0xc0, 0x26, 0x40, 0x0a, 0x9b, 0x01, 0x11, 0x0a, - 0x4b, 0x0a, 0x01, 0xff, 0x4e, 0x8a, 0x75, 0xbf, 0x25, 0x00, 0x48, 0x01, + 0x4b, 0x0a, 0x01, 0xff, 0x4e, 0x9f, 0x75, 0xbf, 0x25, 0x00, 0x48, 0x01, 0x02, 0xbd, 0x25, 0x40, 0x4e, 0xf9, 0x23, 0x47, 0xf4, 0x01, 0x45, 0xe7, - 0x0e, 0x1f, 0x26, 0x00, 0x4f, 0xb2, 0x68, 0x97, 0xf5, 0x41, 0x80, 0x01, - 0xff, 0x11, 0x5e, 0x07, 0x12, 0x49, 0xfe, 0xb0, 0xcb, 0x26, 0x00, 0x44, - 0xb8, 0x24, 0x62, 0x26, 0x00, 0x50, 0x59, 0x62, 0xd0, 0x27, 0x40, 0x4e, - 0x06, 0x73, 0x9b, 0xf7, 0x01, 0x4d, 0xbc, 0x50, 0xc8, 0x25, 0x00, 0x52, - 0xb7, 0x50, 0x9a, 0xf7, 0x41, 0x05, 0xd6, 0x80, 0x6a, 0x45, 0x01, 0x04, - 0xcb, 0x25, 0x80, 0x1e, 0x48, 0x2d, 0xbe, 0x67, 0x26, 0x00, 0x54, 0x90, - 0x3f, 0xe1, 0x27, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, 0x88, - 0x72, 0xe2, 0x27, 0x00, 0x4f, 0xeb, 0x6b, 0xe3, 0x27, 0x40, 0x80, 0x01, + 0x0e, 0x1f, 0x26, 0x00, 0x4f, 0xc7, 0x68, 0x97, 0xf5, 0x41, 0x80, 0x01, + 0xff, 0x11, 0x5e, 0x07, 0x12, 0x49, 0x1a, 0xb1, 0xcb, 0x26, 0x00, 0x44, + 0xb8, 0x24, 0x62, 0x26, 0x00, 0x50, 0x6e, 0x62, 0xd0, 0x27, 0x40, 0x4e, + 0x1b, 0x73, 0x9b, 0xf7, 0x01, 0x4d, 0xd1, 0x50, 0xc8, 0x25, 0x00, 0x52, + 0xcc, 0x50, 0x9a, 0xf7, 0x41, 0x05, 0xdd, 0x80, 0x6a, 0x45, 0x01, 0x04, + 0xcb, 0x25, 0x80, 0x1e, 0x48, 0x49, 0xbe, 0x67, 0x26, 0x00, 0x54, 0xa5, + 0x3f, 0xe1, 0x27, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, 0x9d, + 0x72, 0xe2, 0x27, 0x00, 0x4f, 0x00, 0x6c, 0xe3, 0x27, 0x40, 0x80, 0x01, 0xff, 0x5d, 0x4d, 0x13, 0x8a, 0xf7, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0x02, 0x3b, 0x01, 0x27, 0x06, 0x13, 0x01, 0x17, 0x48, 0x25, 0x09, 0x87, 0x26, 0x00, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x4d, 0xcc, 0x0b, 0xf4, 0x25, - 0x00, 0x4e, 0x44, 0x40, 0xf7, 0x25, 0x40, 0x4d, 0xcc, 0x0b, 0xf5, 0x25, - 0x00, 0x4e, 0x44, 0x40, 0xf6, 0x25, 0x40, 0x47, 0xc6, 0x00, 0x86, 0x26, - 0x00, 0x48, 0xea, 0x3c, 0xec, 0x29, 0x40, 0x46, 0xe9, 0xcf, 0x57, 0x26, - 0x80, 0xe7, 0x01, 0x4a, 0x83, 0xa1, 0x48, 0xfa, 0x81, 0xd9, 0x01, 0xab, - 0x73, 0x44, 0xe6, 0xe6, 0x59, 0x26, 0x80, 0x5b, 0x45, 0xca, 0xb4, 0x55, - 0x26, 0x80, 0x43, 0x44, 0x36, 0xe7, 0x56, 0x26, 0x80, 0x2b, 0x07, 0x2d, - 0x09, 0x01, 0xff, 0x46, 0xe9, 0xcf, 0x21, 0xfa, 0x01, 0xab, 0x12, 0x44, - 0xe6, 0xe6, 0x23, 0xfa, 0x01, 0x45, 0xca, 0xb4, 0x1f, 0xfa, 0x01, 0x44, - 0x36, 0xe7, 0x20, 0xfa, 0x41, 0x43, 0xa1, 0x01, 0x1e, 0xfa, 0x01, 0x45, - 0x39, 0x94, 0x22, 0xfa, 0x41, 0x09, 0x5c, 0x29, 0x01, 0xff, 0x4e, 0x65, + 0x00, 0x4e, 0x59, 0x40, 0xf7, 0x25, 0x40, 0x4d, 0xcc, 0x0b, 0xf5, 0x25, + 0x00, 0x4e, 0x59, 0x40, 0xf6, 0x25, 0x40, 0x47, 0xc6, 0x00, 0x86, 0x26, + 0x00, 0x48, 0xff, 0x3c, 0xec, 0x29, 0x40, 0x46, 0x05, 0xd0, 0x57, 0x26, + 0x80, 0xe7, 0x01, 0x4a, 0x96, 0xa1, 0x48, 0xfa, 0x81, 0xd9, 0x01, 0xab, + 0x73, 0x44, 0x02, 0xe7, 0x59, 0x26, 0x80, 0x5b, 0x45, 0xe6, 0xb4, 0x55, + 0x26, 0x80, 0x43, 0x44, 0x52, 0xe7, 0x56, 0x26, 0x80, 0x2b, 0x07, 0x2d, + 0x09, 0x01, 0xff, 0x46, 0x05, 0xd0, 0x21, 0xfa, 0x01, 0xab, 0x12, 0x44, + 0x02, 0xe7, 0x23, 0xfa, 0x01, 0x45, 0xe6, 0xb4, 0x1f, 0xfa, 0x01, 0x44, + 0x52, 0xe7, 0x20, 0xfa, 0x41, 0x43, 0xa1, 0x01, 0x1e, 0xfa, 0x01, 0x45, + 0x4c, 0x94, 0x22, 0xfa, 0x41, 0x09, 0x5c, 0x29, 0x01, 0xff, 0x4e, 0x65, 0x29, 0x0b, 0xfa, 0x01, 0x5b, 0x89, 0x1b, 0x35, 0xfa, 0x41, 0x09, 0x5c, 0x29, 0x01, 0xff, 0x4e, 0x65, 0x29, 0x0a, 0xfa, 0x01, 0x5b, 0x89, 0x1b, 0x34, 0xfa, 0x41, 0x09, 0x5c, 0x29, 0x01, 0xff, 0x4e, 0x65, 0x29, 0x0e, 0xfa, 0x01, 0x5b, 0x89, 0x1b, 0x38, 0xfa, 0x41, 0x43, 0xa1, 0x01, 0x54, - 0x26, 0x80, 0x4c, 0x45, 0x39, 0x94, 0x58, 0x26, 0xc0, 0x00, 0x09, 0x5c, - 0x29, 0x15, 0x8d, 0x01, 0xff, 0x46, 0xe9, 0xcf, 0x50, 0xfa, 0x01, 0x45, - 0xca, 0xb4, 0x4e, 0xfa, 0x01, 0x44, 0x36, 0xe7, 0x4f, 0xfa, 0x41, 0x52, - 0x37, 0x4c, 0x06, 0xfa, 0x01, 0x4e, 0x65, 0x29, 0x0d, 0xfa, 0x01, 0x5f, + 0x26, 0x80, 0x4c, 0x45, 0x4c, 0x94, 0x58, 0x26, 0xc0, 0x00, 0x09, 0x5c, + 0x29, 0x15, 0x8d, 0x01, 0xff, 0x46, 0x05, 0xd0, 0x50, 0xfa, 0x01, 0x45, + 0xe6, 0xb4, 0x4e, 0xfa, 0x01, 0x44, 0x52, 0xe7, 0x4f, 0xfa, 0x41, 0x52, + 0x4c, 0x4c, 0x06, 0xfa, 0x01, 0x4e, 0x65, 0x29, 0x0d, 0xfa, 0x01, 0x5f, 0xe5, 0x0f, 0x1b, 0xfa, 0x01, 0xb4, 0x01, 0xff, 0x5c, 0x19, 0x16, 0x45, 0xfa, 0x01, 0x0b, 0x8a, 0x1b, 0x01, 0xff, 0x4f, 0x95, 0x1b, 0x37, 0xfa, - 0x01, 0x53, 0x6f, 0x48, 0x30, 0xfa, 0x41, 0x09, 0x5c, 0x29, 0x01, 0xff, + 0x01, 0x53, 0x84, 0x48, 0x30, 0xfa, 0x41, 0x09, 0x5c, 0x29, 0x01, 0xff, 0x4e, 0x65, 0x29, 0x09, 0xfa, 0x01, 0x5b, 0x89, 0x1b, 0x33, 0xfa, 0x41, 0x57, 0x5c, 0x29, 0x4b, 0xfa, 0x41, 0x09, 0x5c, 0x29, 0x01, 0xff, 0x4e, 0x65, 0x29, 0x0c, 0xfa, 0x01, 0x5b, 0x89, 0x1b, 0x36, 0xfa, 0x41, 0x43, - 0xcd, 0x09, 0xac, 0xf8, 0x01, 0x4a, 0x71, 0xa9, 0xad, 0xf8, 0x41, 0x4a, - 0x73, 0x9d, 0x38, 0x26, 0x00, 0x4c, 0xc8, 0x85, 0x7f, 0x26, 0x40, 0x04, - 0x47, 0x16, 0x22, 0xa4, 0x14, 0xa9, 0x06, 0x4f, 0x90, 0x6c, 0x70, 0x26, - 0x40, 0x5a, 0xb0, 0x1d, 0x18, 0x21, 0x00, 0x4a, 0x41, 0xa2, 0xcb, 0xf3, + 0xcd, 0x09, 0xac, 0xf8, 0x01, 0x4a, 0x84, 0xa9, 0xad, 0xf8, 0x41, 0x4a, + 0x86, 0x9d, 0x38, 0x26, 0x00, 0x4c, 0xcf, 0x85, 0x7f, 0x26, 0x40, 0x04, + 0x47, 0x16, 0x22, 0xa4, 0x14, 0xa9, 0x06, 0x4f, 0xa5, 0x6c, 0x70, 0x26, + 0x40, 0x5a, 0xb0, 0x1d, 0x18, 0x21, 0x00, 0x4a, 0x54, 0xa2, 0xcb, 0xf3, 0x41, 0x44, 0x09, 0x05, 0x92, 0xf4, 0x01, 0x5a, 0xab, 0x15, 0xbc, 0x27, 0x40, 0x48, 0xfa, 0x1c, 0x40, 0xf6, 0x01, 0x44, 0xed, 0x06, 0x29, 0xf6, - 0x41, 0x44, 0x12, 0x82, 0xc7, 0xf9, 0x01, 0xae, 0xb5, 0x05, 0xb2, 0x95, - 0x01, 0x49, 0xe1, 0xb5, 0xd1, 0xf5, 0x01, 0xb4, 0x62, 0xb6, 0x11, 0x05, - 0x6f, 0xe1, 0x01, 0xff, 0x54, 0x70, 0x3c, 0x12, 0xf3, 0x01, 0x53, 0x21, + 0x41, 0x44, 0x19, 0x82, 0xc7, 0xf9, 0x01, 0xae, 0xb5, 0x05, 0xb2, 0x95, + 0x01, 0x49, 0xfd, 0xb5, 0xd1, 0xf5, 0x01, 0xb4, 0x62, 0xb6, 0x11, 0x05, + 0x8b, 0xe1, 0x01, 0xff, 0x54, 0x85, 0x3c, 0x12, 0xf3, 0x01, 0x53, 0x36, 0x44, 0x14, 0xf3, 0x41, 0x02, 0x60, 0x00, 0x35, 0x04, 0xa1, 0x01, 0x1f, 0x02, 0x09, 0x00, 0x01, 0xff, 0x44, 0xe9, 0x10, 0x30, 0x30, 0x00, 0xac, - 0x06, 0x48, 0x00, 0x83, 0x4b, 0xfe, 0x40, 0x43, 0xf1, 0x07, 0x07, 0x23, - 0x00, 0x47, 0xf4, 0x82, 0x4f, 0xfe, 0x40, 0x4a, 0xb7, 0x9f, 0xf4, 0xf3, - 0x01, 0x49, 0x3d, 0x42, 0x4b, 0xf4, 0x01, 0x4a, 0x75, 0xaa, 0xf3, 0xf3, + 0x06, 0x48, 0x07, 0x83, 0x4b, 0xfe, 0x40, 0x43, 0xf1, 0x07, 0x07, 0x23, + 0x00, 0x47, 0xfb, 0x82, 0x4f, 0xfe, 0x40, 0x4a, 0xca, 0x9f, 0xf4, 0xf3, + 0x01, 0x49, 0x52, 0x42, 0x4b, 0xf4, 0x01, 0x4a, 0x88, 0xaa, 0xf3, 0xf3, 0x41, 0x18, 0x4f, 0x24, 0x06, 0x44, 0xe9, 0x10, 0x1c, 0x30, 0x40, 0x44, 0xc3, 0x00, 0x3f, 0x2b, 0x00, 0x45, 0xc8, 0x00, 0x33, 0x29, 0x40, 0x42, 0x98, 0x14, 0x1a, 0x23, 0x00, 0x02, 0x33, 0x00, 0x01, 0xff, 0x80, 0x06, - 0x45, 0xbe, 0xdd, 0x49, 0xf3, 0x41, 0x47, 0x81, 0xc5, 0x03, 0xf4, 0x01, - 0x46, 0x61, 0xd0, 0xbe, 0xf6, 0x01, 0x44, 0x06, 0xe7, 0x3d, 0xf9, 0x01, - 0x44, 0xda, 0x51, 0x0a, 0xf3, 0x41, 0x09, 0xfc, 0xac, 0x06, 0x49, 0x2c, + 0x45, 0xda, 0xdd, 0x49, 0xf3, 0x41, 0x47, 0x9d, 0xc5, 0x03, 0xf4, 0x01, + 0x46, 0x7d, 0xd0, 0xbe, 0xf6, 0x01, 0x44, 0x22, 0xe7, 0x3d, 0xf9, 0x01, + 0x44, 0xef, 0x51, 0x0a, 0xf3, 0x41, 0x09, 0x0f, 0xad, 0x06, 0x49, 0x48, 0xb3, 0xa0, 0x26, 0x40, 0x0f, 0xe9, 0x04, 0xd1, 0x02, 0x06, 0xf4, 0x05, 0x8a, 0x02, 0x07, 0xbf, 0x35, 0xc8, 0x01, 0x42, 0x19, 0x04, 0xff, 0x18, 0x01, 0x0d, 0x7c, 0x07, 0x01, 0xff, 0xe1, 0xc1, 0x18, 0x81, 0xa9, 0x01, @@ -1691,21 +1692,21 @@ static const unsigned char uname2c_tree[210697] = { 0xa8, 0x69, 0x42, 0x6b, 0x25, 0xc6, 0x18, 0x01, 0x42, 0xce, 0x02, 0xcc, 0x18, 0x01, 0xae, 0x4f, 0xef, 0xc9, 0x18, 0x81, 0x44, 0x42, 0xa3, 0x0a, 0xd8, 0x18, 0x01, 0xb3, 0x30, 0x43, 0xf3, 0x04, 0xd2, 0x18, 0x01, 0xb5, - 0x20, 0x44, 0xda, 0xe7, 0xdf, 0x18, 0x01, 0x42, 0x51, 0x00, 0xc2, 0x18, + 0x20, 0x44, 0xf6, 0xe7, 0xdf, 0x18, 0x01, 0x42, 0x51, 0x00, 0xc2, 0x18, 0x01, 0xb9, 0x01, 0xff, 0xe1, 0xc4, 0x18, 0x01, 0xef, 0xc5, 0x18, 0x01, 0xf5, 0xc3, 0x18, 0xc1, 0x00, 0xea, 0xce, 0x18, 0x41, 0xe3, 0xcf, 0x18, 0x01, 0xf5, 0xc7, 0x18, 0x41, 0x42, 0x6b, 0x25, 0xde, 0x18, 0x01, 0x43, - 0x69, 0xe9, 0xdd, 0x18, 0x41, 0x42, 0x7f, 0x02, 0xd1, 0x18, 0x41, 0x43, - 0xf1, 0x51, 0xc0, 0x18, 0x01, 0x43, 0x76, 0x40, 0xd3, 0x18, 0x41, 0x42, - 0x17, 0x00, 0xdc, 0x18, 0x01, 0x43, 0x86, 0xc0, 0xd9, 0x18, 0x01, 0xaf, + 0x85, 0xe9, 0xdd, 0x18, 0x41, 0x42, 0x7f, 0x02, 0xd1, 0x18, 0x41, 0x43, + 0x06, 0x52, 0xc0, 0x18, 0x01, 0x43, 0x8b, 0x40, 0xd3, 0x18, 0x41, 0x42, + 0x17, 0x00, 0xdc, 0x18, 0x01, 0x43, 0xa2, 0xc0, 0xd9, 0x18, 0x01, 0xaf, 0x01, 0xff, 0x42, 0x13, 0x01, 0xda, 0x18, 0x01, 0x42, 0xcf, 0x00, 0xdb, 0x18, 0x41, 0xae, 0x01, 0xff, 0xee, 0xd0, 0x18, 0x01, 0xf9, 0xcd, 0x18, 0x41, 0xed, 0xd6, 0x18, 0x01, 0x42, 0x1d, 0x01, 0xca, 0x18, 0x01, 0xf4, - 0xd5, 0x18, 0x41, 0x46, 0xd9, 0xd0, 0xf1, 0x18, 0x01, 0xa6, 0x29, 0x46, + 0xd5, 0x18, 0x41, 0x46, 0xf5, 0xd0, 0xf1, 0x18, 0x01, 0xa6, 0x29, 0x46, 0x65, 0x29, 0xf2, 0x18, 0x01, 0xb3, 0x15, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xea, 0x18, 0x01, 0x45, 0xf2, 0x0f, 0xec, 0x18, 0x01, 0x45, 0x38, - 0x29, 0xeb, 0x18, 0x41, 0x46, 0x96, 0x1b, 0xf0, 0x18, 0x01, 0x44, 0xd1, - 0xd2, 0xef, 0x18, 0x41, 0x44, 0xce, 0x47, 0xee, 0x18, 0x01, 0x44, 0x38, + 0x29, 0xeb, 0x18, 0x41, 0x46, 0x96, 0x1b, 0xf0, 0x18, 0x01, 0x44, 0xed, + 0xd2, 0xef, 0x18, 0x41, 0x44, 0xe3, 0x47, 0xee, 0x18, 0x01, 0x44, 0x4d, 0x4c, 0xed, 0x18, 0x41, 0x45, 0xd1, 0x09, 0xe8, 0x18, 0x01, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0xe9, 0x18, 0x01, 0x43, 0xcd, 0x09, 0xe1, 0x18, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xe0, 0x18, 0x41, 0x44, 0x25, @@ -1717,21 +1718,21 @@ static const unsigned char uname2c_tree[210697] = { 0x02, 0xab, 0x18, 0x01, 0xa8, 0x69, 0x42, 0x6b, 0x25, 0xa6, 0x18, 0x01, 0x42, 0xce, 0x02, 0xac, 0x18, 0x01, 0xae, 0x4f, 0xef, 0xa9, 0x18, 0x81, 0x44, 0x42, 0xa3, 0x0a, 0xb8, 0x18, 0x01, 0xb3, 0x30, 0x43, 0xf3, 0x04, - 0xb2, 0x18, 0x01, 0xb5, 0x20, 0x44, 0xda, 0xe7, 0xbf, 0x18, 0x01, 0x42, + 0xb2, 0x18, 0x01, 0xb5, 0x20, 0x44, 0xf6, 0xe7, 0xbf, 0x18, 0x01, 0x42, 0x51, 0x00, 0xa2, 0x18, 0x01, 0xb9, 0x01, 0xff, 0xe1, 0xa4, 0x18, 0x01, 0xef, 0xa5, 0x18, 0x01, 0xf5, 0xa3, 0x18, 0xc1, 0x00, 0xea, 0xae, 0x18, 0x41, 0xe3, 0xaf, 0x18, 0x01, 0xf5, 0xa7, 0x18, 0x41, 0x42, 0x6b, 0x25, - 0xbe, 0x18, 0x01, 0x43, 0x69, 0xe9, 0xbd, 0x18, 0x41, 0x42, 0x7f, 0x02, - 0xb1, 0x18, 0x41, 0x43, 0xf1, 0x51, 0xa0, 0x18, 0x01, 0x43, 0x76, 0x40, - 0xb3, 0x18, 0x41, 0x42, 0x17, 0x00, 0xbc, 0x18, 0x01, 0x43, 0x86, 0xc0, + 0xbe, 0x18, 0x01, 0x43, 0x85, 0xe9, 0xbd, 0x18, 0x41, 0x42, 0x7f, 0x02, + 0xb1, 0x18, 0x41, 0x43, 0x06, 0x52, 0xa0, 0x18, 0x01, 0x43, 0x8b, 0x40, + 0xb3, 0x18, 0x41, 0x42, 0x17, 0x00, 0xbc, 0x18, 0x01, 0x43, 0xa2, 0xc0, 0xb9, 0x18, 0x01, 0xaf, 0x01, 0xff, 0x42, 0x13, 0x01, 0xba, 0x18, 0x01, 0x42, 0xcf, 0x00, 0xbb, 0x18, 0x41, 0xae, 0x01, 0xff, 0xee, 0xb0, 0x18, 0x01, 0xf9, 0xad, 0x18, 0x41, 0xed, 0xb6, 0x18, 0x01, 0x42, 0x1d, 0x01, - 0xaa, 0x18, 0x01, 0xf4, 0xb5, 0x18, 0x41, 0x04, 0x4f, 0xd0, 0x11, 0x04, - 0xa1, 0x01, 0x01, 0xff, 0x54, 0x70, 0x3c, 0x18, 0xf3, 0x01, 0x53, 0x21, + 0xaa, 0x18, 0x01, 0xf4, 0xb5, 0x18, 0x41, 0x04, 0x6b, 0xd0, 0x11, 0x04, + 0xa1, 0x01, 0x01, 0xff, 0x54, 0x85, 0x3c, 0x18, 0xf3, 0x01, 0x53, 0x36, 0x44, 0x16, 0xf3, 0x41, 0x06, 0xf4, 0x05, 0xa6, 0x02, 0x07, 0xf1, 0x04, - 0x25, 0x49, 0x08, 0xb3, 0xff, 0xe2, 0x01, 0x05, 0xdd, 0x29, 0x01, 0xff, - 0x43, 0x38, 0xd4, 0xee, 0xe2, 0x81, 0x0d, 0x43, 0x84, 0x17, 0xec, 0xe2, + 0x25, 0x49, 0x24, 0xb3, 0xff, 0xe2, 0x01, 0x05, 0xdd, 0x29, 0x01, 0xff, + 0x43, 0x54, 0xd4, 0xee, 0xe2, 0x81, 0x0d, 0x43, 0x84, 0x17, 0xec, 0xe2, 0xc1, 0x00, 0x42, 0xd2, 0x02, 0xed, 0xe2, 0x41, 0x42, 0xd2, 0x02, 0xef, 0xe2, 0x41, 0xe1, 0xc1, 0xe2, 0x81, 0xdf, 0x01, 0x42, 0x16, 0x00, 0xc2, 0xe2, 0x01, 0x42, 0x37, 0x00, 0xc3, 0xe2, 0x01, 0x42, 0x68, 0x0f, 0xc4, @@ -1750,7 +1751,7 @@ static const unsigned char uname2c_tree[210697] = { 0xe2, 0x01, 0x42, 0x22, 0x00, 0xc7, 0xe2, 0x41, 0xee, 0xe6, 0xe2, 0xc1, 0x00, 0xe7, 0xe2, 0xe2, 0x41, 0xe1, 0xc9, 0xe2, 0x01, 0x42, 0x24, 0x02, 0xdd, 0xe2, 0x01, 0x42, 0x20, 0x20, 0xe9, 0xe2, 0x41, 0xe1, 0xc8, 0xe2, - 0x01, 0x43, 0x33, 0x44, 0xdf, 0xe2, 0x41, 0xe1, 0xd4, 0xe2, 0x01, 0x42, + 0x01, 0x43, 0x48, 0x44, 0xdf, 0xe2, 0x41, 0xe1, 0xd4, 0xe2, 0x01, 0x42, 0x22, 0x00, 0xd9, 0xe2, 0x41, 0x42, 0x1d, 0x01, 0xe5, 0xe2, 0x41, 0xee, 0xe7, 0xe2, 0x41, 0xe1, 0xc0, 0xe2, 0x81, 0x0a, 0x42, 0x1d, 0x01, 0xe4, 0xe2, 0x01, 0xf5, 0xd6, 0xe2, 0x41, 0xee, 0xe8, 0xe2, 0xc1, 0x00, 0xe7, @@ -1761,24 +1762,24 @@ static const unsigned char uname2c_tree[210697] = { 0xf7, 0xe2, 0x01, 0x42, 0x30, 0x27, 0xf6, 0xe2, 0x41, 0x43, 0xd7, 0x04, 0xf5, 0xe2, 0x01, 0x43, 0xfb, 0x05, 0xf4, 0xe2, 0x41, 0xa1, 0xc1, 0x0a, 0xa5, 0xaa, 0x05, 0xa9, 0xba, 0x01, 0xaf, 0x9c, 0x01, 0x02, 0x1f, 0x01, - 0x01, 0xff, 0x45, 0x3f, 0xda, 0xe6, 0x2b, 0x00, 0x0d, 0x2d, 0x7c, 0x01, - 0xff, 0xa6, 0x74, 0x04, 0xcd, 0x09, 0x35, 0x4d, 0x78, 0x47, 0x5e, 0x21, - 0x00, 0xb4, 0x06, 0x4b, 0x02, 0x9d, 0x89, 0x21, 0x40, 0x05, 0x25, 0x01, - 0x11, 0x03, 0xc2, 0x06, 0x01, 0xff, 0x46, 0x87, 0xa6, 0x56, 0x21, 0x00, - 0x46, 0x1e, 0x9b, 0x54, 0x21, 0x40, 0x47, 0x7e, 0x47, 0x5c, 0x21, 0x00, - 0x46, 0x87, 0xa6, 0x57, 0x21, 0x00, 0x48, 0x2a, 0x01, 0xbe, 0x00, 0x40, - 0x46, 0xd1, 0x09, 0x5b, 0x21, 0x00, 0x45, 0x87, 0xa6, 0x55, 0x21, 0x00, - 0x44, 0x22, 0x00, 0xbd, 0x00, 0x00, 0x45, 0x4f, 0xde, 0x51, 0x21, 0x00, + 0x01, 0xff, 0x45, 0x5b, 0xda, 0xe6, 0x2b, 0x00, 0x0d, 0x34, 0x7c, 0x01, + 0xff, 0xa6, 0x74, 0x04, 0xcd, 0x09, 0x35, 0x4d, 0x8d, 0x47, 0x5e, 0x21, + 0x00, 0xb4, 0x06, 0x4b, 0x15, 0x9d, 0x89, 0x21, 0x40, 0x05, 0x25, 0x01, + 0x11, 0x03, 0xc2, 0x06, 0x01, 0xff, 0x46, 0x9a, 0xa6, 0x56, 0x21, 0x00, + 0x46, 0x31, 0x9b, 0x54, 0x21, 0x40, 0x47, 0x93, 0x47, 0x5c, 0x21, 0x00, + 0x46, 0x9a, 0xa6, 0x57, 0x21, 0x00, 0x48, 0x2a, 0x01, 0xbe, 0x00, 0x40, + 0x46, 0xd1, 0x09, 0x5b, 0x21, 0x00, 0x45, 0x9a, 0xa6, 0x55, 0x21, 0x00, + 0x44, 0x22, 0x00, 0xbd, 0x00, 0x00, 0x45, 0x6b, 0xde, 0x51, 0x21, 0x00, 0x47, 0x2a, 0x01, 0xbc, 0x00, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x6a, 0x19, 0x52, 0x21, 0x00, 0x44, 0xcd, 0x0e, 0x53, 0x21, 0x40, 0x46, - 0x33, 0xd1, 0x50, 0x21, 0x00, 0x44, 0x95, 0xa3, 0x59, 0x21, 0x40, 0x04, - 0xd7, 0x04, 0x06, 0x4a, 0x83, 0xa6, 0x58, 0x21, 0x40, 0x47, 0x7e, 0x47, - 0x5d, 0x21, 0x00, 0x46, 0x4d, 0xd5, 0x5a, 0x21, 0x40, 0x50, 0x69, 0x5d, - 0xbb, 0xfb, 0x01, 0xac, 0x01, 0xff, 0x44, 0x5a, 0xe4, 0x0b, 0xf3, 0x01, - 0x47, 0xad, 0xc8, 0xd0, 0xf3, 0x01, 0x4c, 0x80, 0x8e, 0x30, 0x22, 0x40, - 0x4c, 0x68, 0x85, 0xf3, 0xf4, 0x01, 0x4a, 0xe2, 0x8e, 0x0c, 0x27, 0x00, - 0x03, 0xe5, 0x1d, 0xc8, 0x03, 0xa5, 0xaf, 0x03, 0x44, 0xf7, 0xa5, 0xbb, - 0xf3, 0x01, 0x43, 0x85, 0x15, 0x4d, 0x26, 0x00, 0x07, 0x26, 0xcc, 0x01, + 0x4f, 0xd1, 0x50, 0x21, 0x00, 0x44, 0xa8, 0xa3, 0x59, 0x21, 0x40, 0x04, + 0xd7, 0x04, 0x06, 0x4a, 0x96, 0xa6, 0x58, 0x21, 0x40, 0x47, 0x93, 0x47, + 0x5d, 0x21, 0x00, 0x46, 0x69, 0xd5, 0x5a, 0x21, 0x40, 0x50, 0x7e, 0x5d, + 0xbb, 0xfb, 0x01, 0xac, 0x01, 0xff, 0x44, 0x76, 0xe4, 0x0b, 0xf3, 0x01, + 0x47, 0xc9, 0xc8, 0xd0, 0xf3, 0x01, 0x4c, 0x93, 0x8e, 0x30, 0x22, 0x40, + 0x4c, 0x6f, 0x85, 0xf3, 0xf4, 0x01, 0x4a, 0xf5, 0x8e, 0x0c, 0x27, 0x00, + 0x03, 0xe5, 0x1d, 0xc8, 0x03, 0xa5, 0xaf, 0x03, 0x44, 0x0a, 0xa6, 0xbb, + 0xf3, 0x01, 0x43, 0x85, 0x15, 0x4d, 0x26, 0x00, 0x07, 0x42, 0xcc, 0x01, 0xff, 0x0f, 0xe9, 0x04, 0xcf, 0x01, 0x0d, 0x7c, 0x07, 0x01, 0xff, 0xe1, 0x97, 0x05, 0x01, 0xa2, 0xb9, 0x01, 0xa3, 0xac, 0x01, 0xa4, 0x9f, 0x01, 0xe5, 0x9f, 0x05, 0x81, 0x95, 0x01, 0x42, 0x0f, 0x18, 0xa0, 0x05, 0x01, @@ -1788,7 +1789,7 @@ static const unsigned char uname2c_tree[210697] = { 0xae, 0x05, 0x01, 0x42, 0x6f, 0x02, 0xaf, 0x05, 0x01, 0x42, 0x9d, 0x12, 0xb0, 0x05, 0x01, 0x42, 0x88, 0x00, 0xb1, 0x05, 0x01, 0xb3, 0x26, 0xb4, 0x1a, 0xf5, 0xb7, 0x05, 0x01, 0x42, 0x32, 0x00, 0xb8, 0x05, 0x01, 0x42, - 0x89, 0x3e, 0xb9, 0x05, 0x01, 0xf9, 0xbb, 0x05, 0x01, 0x42, 0x58, 0x07, + 0x9e, 0x3e, 0xb9, 0x05, 0x01, 0xf9, 0xbb, 0x05, 0x01, 0x42, 0x58, 0x07, 0xbc, 0x05, 0x41, 0xe5, 0xb5, 0x05, 0x01, 0x42, 0xb0, 0x01, 0xb6, 0x05, 0x41, 0xe5, 0xb3, 0x05, 0x01, 0x42, 0xb0, 0x01, 0xb4, 0x05, 0x41, 0xe5, 0xac, 0x05, 0x01, 0x42, 0x18, 0x1e, 0xad, 0x05, 0x41, 0xe1, 0xa9, 0x05, @@ -1804,7 +1805,7 @@ static const unsigned char uname2c_tree[210697] = { 0x5a, 0x42, 0x2a, 0x02, 0x84, 0x05, 0x01, 0xae, 0x48, 0xef, 0x87, 0x05, 0x01, 0x42, 0x6f, 0x02, 0x88, 0x05, 0x01, 0x42, 0x9d, 0x12, 0x89, 0x05, 0x01, 0x42, 0x88, 0x00, 0x8a, 0x05, 0x01, 0xb3, 0x26, 0xb4, 0x1a, 0xf5, - 0x90, 0x05, 0x01, 0x42, 0x32, 0x00, 0x91, 0x05, 0x01, 0x42, 0x89, 0x3e, + 0x90, 0x05, 0x01, 0x42, 0x32, 0x00, 0x91, 0x05, 0x01, 0x42, 0x9e, 0x3e, 0x92, 0x05, 0x01, 0xf9, 0x94, 0x05, 0x01, 0x42, 0x58, 0x07, 0x95, 0x05, 0x41, 0xe5, 0x8e, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x8f, 0x05, 0x41, 0xe5, 0x8c, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x8d, 0x05, 0x41, 0xe5, 0x85, 0x05, @@ -1814,66 +1815,66 @@ static const unsigned char uname2c_tree[210697] = { 0x41, 0xe5, 0x75, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x76, 0x05, 0x41, 0xe5, 0x73, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x74, 0x05, 0x41, 0x42, 0xbc, 0x04, 0x71, 0x05, 0x01, 0xe5, 0x72, 0x05, 0x41, 0x1f, 0x61, 0x10, 0x06, 0x4c, - 0xf8, 0x8e, 0x17, 0x23, 0x40, 0x42, 0x37, 0x00, 0xf0, 0x6f, 0x01, 0x44, - 0x6a, 0xe6, 0xf1, 0x6f, 0x41, 0x80, 0x06, 0x48, 0xd5, 0xba, 0xfc, 0xf4, - 0x41, 0x46, 0x5b, 0xaa, 0xf9, 0xf4, 0x01, 0x44, 0xde, 0xe4, 0xae, 0xf3, + 0x0b, 0x8f, 0x17, 0x23, 0x40, 0x42, 0x37, 0x00, 0xf0, 0x6f, 0x01, 0x44, + 0x86, 0xe6, 0xf1, 0x6f, 0x41, 0x80, 0x06, 0x48, 0xf1, 0xba, 0xfc, 0xf4, + 0x41, 0x46, 0x6e, 0xaa, 0xf9, 0xf4, 0x01, 0x44, 0xfa, 0xe4, 0xae, 0xf3, 0x41, 0x55, 0xca, 0x35, 0x2f, 0x2a, 0x00, 0x04, 0xf0, 0x05, 0xcd, 0x02, - 0xb2, 0x06, 0x43, 0x8b, 0x11, 0xb6, 0x26, 0x40, 0x45, 0x1b, 0xe0, 0x23, + 0xb2, 0x06, 0x43, 0x8b, 0x11, 0xb6, 0x26, 0x40, 0x45, 0x37, 0xe0, 0x23, 0x21, 0x00, 0x06, 0x35, 0x00, 0x67, 0x02, 0x09, 0x00, 0x01, 0xff, 0x50, - 0x19, 0x5b, 0xa5, 0xf7, 0x01, 0x06, 0x8c, 0x13, 0x11, 0x05, 0x04, 0xde, + 0x2e, 0x5b, 0xa5, 0xf7, 0x01, 0x06, 0x8c, 0x13, 0x11, 0x05, 0x20, 0xde, 0x01, 0xff, 0x4c, 0x87, 0x00, 0xd9, 0x22, 0x00, 0x49, 0xec, 0x00, 0xd8, - 0x22, 0x40, 0x06, 0x8b, 0x12, 0x37, 0x54, 0x74, 0x3d, 0xb3, 0xf7, 0x01, - 0x4b, 0x1e, 0x5b, 0xa6, 0xf7, 0x01, 0x4f, 0xa0, 0x6b, 0x7d, 0xf6, 0x01, + 0x22, 0x40, 0x06, 0x8b, 0x12, 0x37, 0x54, 0x89, 0x3d, 0xb3, 0xf7, 0x01, + 0x4b, 0x33, 0x5b, 0xa6, 0xf7, 0x01, 0x4f, 0xb5, 0x6b, 0x7d, 0xf6, 0x01, 0xb3, 0x11, 0x06, 0xad, 0x02, 0x01, 0xff, 0x46, 0x00, 0x04, 0x88, 0xf7, 0x01, 0x46, 0xdb, 0x04, 0x92, 0xf7, 0x41, 0x46, 0x16, 0x17, 0xad, 0xf7, - 0x01, 0x52, 0x57, 0x4d, 0xb9, 0xf7, 0x01, 0x46, 0x68, 0x2d, 0x7c, 0xf6, + 0x01, 0x52, 0x6c, 0x4d, 0xb9, 0xf7, 0x01, 0x46, 0x68, 0x2d, 0x7c, 0xf6, 0x41, 0x52, 0xbd, 0x28, 0xd0, 0xf7, 0x01, 0x4f, 0xbd, 0x1a, 0xbf, 0xf7, 0x41, 0x04, 0x16, 0x00, 0xb7, 0x01, 0x48, 0xcf, 0x26, 0xee, 0x22, 0x00, - 0x49, 0x75, 0x41, 0x5e, 0x20, 0x00, 0x5a, 0xe4, 0x1d, 0x3b, 0x30, 0x00, - 0x0c, 0x04, 0x89, 0x7e, 0x44, 0xf0, 0x07, 0x7c, 0x00, 0x80, 0x53, 0x55, - 0x55, 0x38, 0xa8, 0x26, 0x00, 0x11, 0xeb, 0x56, 0x31, 0x48, 0xfd, 0xc0, - 0x3d, 0x2e, 0x00, 0xb4, 0x06, 0x4b, 0x0d, 0x9d, 0x9a, 0x29, 0x40, 0x02, - 0x5c, 0x00, 0x0c, 0x44, 0x9a, 0x20, 0x2f, 0x2e, 0x00, 0x4c, 0x64, 0x8c, - 0xa6, 0xf6, 0x41, 0x44, 0x9d, 0x40, 0x7f, 0x2b, 0x00, 0x47, 0xa6, 0x37, - 0x0b, 0x00, 0xc0, 0x00, 0x44, 0x2f, 0xaf, 0x8a, 0x00, 0x40, 0xd2, 0x70, + 0x49, 0x8a, 0x41, 0x5e, 0x20, 0x00, 0x5a, 0xe4, 0x1d, 0x3b, 0x30, 0x00, + 0x0c, 0x0b, 0x89, 0x7e, 0x44, 0xf0, 0x07, 0x7c, 0x00, 0x80, 0x53, 0x55, + 0x6a, 0x38, 0xa8, 0x26, 0x00, 0x11, 0x00, 0x57, 0x31, 0x48, 0x19, 0xc1, + 0x3d, 0x2e, 0x00, 0xb4, 0x06, 0x4b, 0x20, 0x9d, 0x9a, 0x29, 0x40, 0x02, + 0x5c, 0x00, 0x0c, 0x44, 0x9a, 0x20, 0x2f, 0x2e, 0x00, 0x4c, 0x6b, 0x8c, + 0xa6, 0xf6, 0x41, 0x44, 0xb2, 0x40, 0x7f, 0x2b, 0x00, 0x47, 0xbb, 0x37, + 0x0b, 0x00, 0xc0, 0x00, 0x44, 0x4b, 0xaf, 0x8a, 0x00, 0x40, 0xd2, 0x70, 0xfb, 0x01, 0xd3, 0x71, 0xfb, 0x01, 0xd4, 0x72, 0xfb, 0x01, 0xd5, 0x73, 0xfb, 0x01, 0xd6, 0x74, 0xfb, 0x01, 0xd7, 0x75, 0xfb, 0x41, 0x80, 0x01, - 0xff, 0x49, 0x19, 0x53, 0xd0, 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x07, 0x00, 0x04, 0x06, 0x4a, 0xb2, 0x40, 0x7f, 0x23, 0x40, 0x45, 0x5c, + 0xff, 0x49, 0x2e, 0x53, 0xd0, 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, + 0x07, 0x00, 0x04, 0x06, 0x4a, 0xc7, 0x40, 0x7f, 0x23, 0x40, 0x45, 0x5c, 0x00, 0xef, 0x2a, 0x00, 0x45, 0x25, 0x06, 0xf0, 0x2a, 0x40, 0x44, 0xb9, 0x00, 0x31, 0x30, 0x80, 0x0d, 0x56, 0x24, 0x34, 0x32, 0x30, 0xc0, 0x00, - 0x4b, 0xf2, 0x8f, 0x34, 0x30, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xa6, 0x07, - 0x35, 0x30, 0x00, 0x4a, 0xf3, 0x8f, 0x33, 0x30, 0x40, 0x55, 0x61, 0x35, + 0x4b, 0x05, 0x90, 0x34, 0x30, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xa6, 0x07, + 0x35, 0x30, 0x00, 0x4a, 0x06, 0x90, 0x33, 0x30, 0x40, 0x55, 0x61, 0x35, 0xd0, 0x29, 0x00, 0x55, 0x09, 0x36, 0xe4, 0x2a, 0x00, 0x56, 0x5e, 0x33, 0xe2, 0x2a, 0x00, 0x56, 0xf8, 0x33, 0xca, 0x27, 0x40, 0x05, 0xdb, 0x02, 0x94, 0x01, 0x05, 0xdd, 0x29, 0x01, 0xff, 0x60, 0xcc, 0x0d, 0xe1, 0x1c, - 0x00, 0x07, 0x96, 0xc5, 0x79, 0x02, 0x3b, 0x01, 0x5e, 0x02, 0x1b, 0x02, - 0x4e, 0x47, 0x89, 0xca, 0xd2, 0x1c, 0x00, 0x02, 0x0d, 0x00, 0x38, 0x45, - 0x02, 0xe0, 0xd1, 0x1c, 0x00, 0xb4, 0x1e, 0x0b, 0x20, 0x20, 0x01, 0xff, + 0x00, 0x07, 0xb2, 0xc5, 0x79, 0x02, 0x3b, 0x01, 0x5e, 0x02, 0x1b, 0x02, + 0x4e, 0x47, 0xa5, 0xca, 0xd2, 0x1c, 0x00, 0x02, 0x0d, 0x00, 0x38, 0x45, + 0x1e, 0xe0, 0xd1, 0x1c, 0x00, 0xb4, 0x1e, 0x0b, 0x20, 0x20, 0x01, 0xff, 0x5e, 0xbd, 0x10, 0xd5, 0x1c, 0x00, 0x53, 0xa7, 0x09, 0xd6, 0x1c, 0x00, - 0x5b, 0xf4, 0x19, 0xd7, 0x1c, 0xc0, 0x00, 0x4a, 0xaf, 0x9d, 0xd9, 0x1c, - 0x40, 0x4f, 0x77, 0x67, 0xdf, 0x1c, 0x00, 0x4d, 0x71, 0x80, 0xdb, 0x1c, + 0x5b, 0xf4, 0x19, 0xd7, 0x1c, 0xc0, 0x00, 0x4a, 0xc2, 0x9d, 0xd9, 0x1c, + 0x40, 0x4f, 0x8c, 0x67, 0xdf, 0x1c, 0x00, 0x4d, 0x78, 0x80, 0xdb, 0x1c, 0x00, 0x4d, 0x5e, 0x0d, 0xde, 0x1c, 0x40, 0x63, 0x97, 0x09, 0xe0, 0x1c, - 0x00, 0x48, 0x93, 0xa7, 0xf8, 0x1c, 0x40, 0x46, 0x17, 0xd5, 0xd0, 0x1c, - 0x00, 0x4e, 0x08, 0x76, 0xdc, 0x1c, 0x40, 0x47, 0xfb, 0x10, 0xdd, 0x1c, - 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x4a, 0x91, 0xa7, 0xf9, 0x1c, 0x00, + 0x00, 0x48, 0xa6, 0xa7, 0xf8, 0x1c, 0x40, 0x46, 0x33, 0xd5, 0xd0, 0x1c, + 0x00, 0x4e, 0x0f, 0x76, 0xdc, 0x1c, 0x40, 0x47, 0xfb, 0x10, 0xdd, 0x1c, + 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x4a, 0xa4, 0xa7, 0xf9, 0x1c, 0x00, 0x47, 0xb3, 0x09, 0xda, 0x1c, 0x40, 0x45, 0x5c, 0x00, 0xf4, 0x1c, 0x00, 0x45, 0x25, 0x06, 0xd8, 0x1c, 0x40, 0xa1, 0x72, 0x5c, 0x71, 0x15, 0xfa, - 0x1c, 0x00, 0x56, 0x46, 0x30, 0xee, 0x1c, 0x00, 0x4b, 0xbf, 0x95, 0xf5, - 0x1c, 0x00, 0x4d, 0x4f, 0x30, 0xef, 0x1c, 0x00, 0x49, 0x23, 0xb3, 0xd3, - 0x1c, 0x00, 0xb2, 0x36, 0x46, 0x07, 0xd6, 0xed, 0x1c, 0x00, 0x4b, 0x05, - 0x9c, 0xf6, 0x1c, 0x00, 0x08, 0xe1, 0x5c, 0x06, 0x5a, 0x20, 0x20, 0xd4, - 0x1c, 0x40, 0x48, 0x0e, 0x76, 0xe5, 0x1c, 0x80, 0x13, 0x47, 0xb3, 0x09, - 0xe2, 0x1c, 0x00, 0x46, 0x10, 0x76, 0xe3, 0x1c, 0xc0, 0x00, 0x4a, 0x1d, - 0x9e, 0xe7, 0x1c, 0x40, 0x4a, 0x1d, 0x9e, 0xe8, 0x1c, 0x40, 0x10, 0xd9, - 0x5c, 0x0c, 0x53, 0x5b, 0x46, 0xf3, 0x1c, 0x00, 0x53, 0xfd, 0x47, 0xf0, - 0x1c, 0x40, 0x48, 0x0e, 0x76, 0xe6, 0x1c, 0x00, 0x46, 0x10, 0x76, 0xe4, - 0x1c, 0x40, 0x08, 0x5c, 0x14, 0x0c, 0x4b, 0x63, 0x46, 0xf2, 0x1c, 0x00, - 0x47, 0x2d, 0xcc, 0xf7, 0x1c, 0x40, 0x4c, 0x81, 0x15, 0xe9, 0x1c, 0x00, - 0x4c, 0x14, 0x85, 0xea, 0x1c, 0x00, 0x4e, 0xe8, 0x76, 0xf1, 0x1c, 0x00, - 0x4b, 0x47, 0x9c, 0xeb, 0x1c, 0xc0, 0x00, 0x4a, 0x1d, 0x9e, 0xec, 0x1c, - 0x40, 0x02, 0x48, 0x03, 0xb4, 0x08, 0x45, 0x91, 0x8c, 0xdb, 0xf9, 0x01, - 0x11, 0xa6, 0x57, 0x01, 0xff, 0xd1, 0x00, 0xfe, 0x80, 0xda, 0x04, 0xd2, + 0x1c, 0x00, 0x56, 0x46, 0x30, 0xee, 0x1c, 0x00, 0x4b, 0xd2, 0x95, 0xf5, + 0x1c, 0x00, 0x4d, 0x4f, 0x30, 0xef, 0x1c, 0x00, 0x49, 0x3f, 0xb3, 0xd3, + 0x1c, 0x00, 0xb2, 0x36, 0x46, 0x23, 0xd6, 0xed, 0x1c, 0x00, 0x4b, 0x18, + 0x9c, 0xf6, 0x1c, 0x00, 0x08, 0xf6, 0x5c, 0x06, 0x5a, 0x20, 0x20, 0xd4, + 0x1c, 0x40, 0x48, 0x15, 0x76, 0xe5, 0x1c, 0x80, 0x13, 0x47, 0xb3, 0x09, + 0xe2, 0x1c, 0x00, 0x46, 0x17, 0x76, 0xe3, 0x1c, 0xc0, 0x00, 0x4a, 0x30, + 0x9e, 0xe7, 0x1c, 0x40, 0x4a, 0x30, 0x9e, 0xe8, 0x1c, 0x40, 0x10, 0xee, + 0x5c, 0x0c, 0x53, 0x70, 0x46, 0xf3, 0x1c, 0x00, 0x53, 0x12, 0x48, 0xf0, + 0x1c, 0x40, 0x48, 0x15, 0x76, 0xe6, 0x1c, 0x00, 0x46, 0x17, 0x76, 0xe4, + 0x1c, 0x40, 0x08, 0x5c, 0x14, 0x0c, 0x4b, 0x78, 0x46, 0xf2, 0x1c, 0x00, + 0x47, 0x49, 0xcc, 0xf7, 0x1c, 0x40, 0x4c, 0x81, 0x15, 0xe9, 0x1c, 0x00, + 0x4c, 0x1b, 0x85, 0xea, 0x1c, 0x00, 0x4e, 0xef, 0x76, 0xf1, 0x1c, 0x00, + 0x4b, 0x5a, 0x9c, 0xeb, 0x1c, 0xc0, 0x00, 0x4a, 0x30, 0x9e, 0xec, 0x1c, + 0x40, 0x02, 0x48, 0x03, 0xb4, 0x08, 0x45, 0x98, 0x8c, 0xdb, 0xf9, 0x01, + 0x11, 0xbb, 0x57, 0x01, 0xff, 0xd1, 0x00, 0xfe, 0x80, 0xda, 0x04, 0xd2, 0x01, 0xfe, 0x80, 0xbf, 0x02, 0xd3, 0x02, 0xfe, 0x80, 0x91, 0x02, 0xd4, 0x03, 0xfe, 0x80, 0xe3, 0x01, 0xd5, 0x04, 0xfe, 0x80, 0xb5, 0x01, 0xd6, 0x05, 0xfe, 0x80, 0x87, 0x01, 0xd7, 0x06, 0xfe, 0x80, 0x5a, 0xd8, 0x07, @@ -1966,11 +1967,11 @@ static const unsigned char uname2c_tree[210697] = { 0x0b, 0x49, 0xa0, 0x14, 0x0e, 0xa6, 0x00, 0x4d, 0xbd, 0x30, 0x0f, 0xa6, 0x00, 0x02, 0xf7, 0x06, 0x01, 0xff, 0x07, 0x3b, 0x16, 0x5f, 0x05, 0x80, 0x14, 0x01, 0xff, 0x44, 0x45, 0x14, 0x17, 0xa6, 0x00, 0xa4, 0x3d, 0xa6, - 0x2f, 0x44, 0x9f, 0xa3, 0x1f, 0xa6, 0x00, 0xab, 0x1b, 0x43, 0x42, 0xe9, + 0x2f, 0x44, 0xb2, 0xa3, 0x1f, 0xa6, 0x00, 0xab, 0x1b, 0x43, 0x5e, 0xe9, 0x16, 0xa6, 0x00, 0xb4, 0x01, 0xff, 0x42, 0xda, 0x10, 0x19, 0xa6, 0x00, 0x43, 0xa1, 0x01, 0x15, 0xa6, 0x00, 0x43, 0x0a, 0x0d, 0x1d, 0xa6, 0x40, - 0x44, 0xa2, 0xe4, 0x14, 0xa6, 0x00, 0x43, 0x76, 0x40, 0x1c, 0xa6, 0x40, - 0x42, 0xda, 0x10, 0x18, 0xa6, 0x00, 0x44, 0xa2, 0xe4, 0x13, 0xa6, 0x40, + 0x44, 0xbe, 0xe4, 0x14, 0xa6, 0x00, 0x43, 0x8b, 0x40, 0x1c, 0xa6, 0x40, + 0x42, 0xda, 0x10, 0x18, 0xa6, 0x00, 0x44, 0xbe, 0xe4, 0x13, 0xa6, 0x40, 0x43, 0x1c, 0x01, 0x1a, 0xa6, 0x00, 0xaf, 0x01, 0xff, 0x42, 0xe7, 0x1e, 0x1e, 0xa6, 0x00, 0x43, 0x0a, 0x0d, 0x1b, 0xa6, 0x40, 0xe1, 0x49, 0xa5, 0x80, 0x85, 0x0a, 0xa2, 0xc4, 0x09, 0xa3, 0xa3, 0x09, 0xa4, 0xc2, 0x08, @@ -2031,7 +2032,7 @@ static const unsigned char uname2c_tree[210697] = { 0xa6, 0x00, 0x42, 0xed, 0x06, 0x10, 0xa6, 0x00, 0x42, 0x1b, 0x02, 0x11, 0xa6, 0x00, 0x42, 0x6c, 0x00, 0x2a, 0xa6, 0x00, 0x43, 0x1b, 0x1f, 0x12, 0xa6, 0x40, 0xe5, 0x15, 0xa5, 0x40, 0xe1, 0x6e, 0xa5, 0x00, 0xa2, 0x3c, - 0xe5, 0x08, 0xa6, 0x80, 0x33, 0x02, 0xb4, 0x87, 0x11, 0xe9, 0x46, 0xa5, + 0xe5, 0x08, 0xa6, 0x80, 0x33, 0x02, 0xbb, 0x87, 0x11, 0xe9, 0x46, 0xa5, 0x00, 0xef, 0xde, 0xa5, 0x80, 0x04, 0xf5, 0xb7, 0xa5, 0x40, 0xef, 0x92, 0xa5, 0x40, 0xe1, 0x56, 0xa5, 0x00, 0xe5, 0xee, 0xa5, 0x80, 0x11, 0xe9, 0x2f, 0xa5, 0x00, 0xef, 0xc6, 0xa5, 0x80, 0x04, 0xf5, 0xa0, 0xa5, 0x40, @@ -2041,7 +2042,7 @@ static const unsigned char uname2c_tree[210697] = { 0xa5, 0x40, 0xe5, 0x08, 0xa5, 0x40, 0xe1, 0x5e, 0xa5, 0x00, 0xe5, 0xf7, 0xa5, 0x80, 0x11, 0xe9, 0x37, 0xa5, 0x00, 0xef, 0xcf, 0xa5, 0x80, 0x04, 0xf5, 0xa8, 0xa5, 0x40, 0xef, 0x83, 0xa5, 0x40, 0xe5, 0x12, 0xa5, 0x00, - 0x48, 0x1b, 0x51, 0x0c, 0xa6, 0x40, 0xe1, 0x6a, 0xa5, 0x80, 0x43, 0xe5, + 0x48, 0x30, 0x51, 0x0c, 0xa6, 0x40, 0xe1, 0x6a, 0xa5, 0x80, 0x43, 0xe5, 0x03, 0xa6, 0x80, 0x3a, 0xe9, 0x43, 0xa5, 0x00, 0xef, 0xdb, 0xa5, 0x80, 0x2d, 0xb0, 0x04, 0xf5, 0xb4, 0xa5, 0x40, 0xe1, 0x54, 0xa5, 0x80, 0x1e, 0xe5, 0xec, 0xa5, 0x80, 0x11, 0xe9, 0x2e, 0xa5, 0x00, 0xef, 0xc5, 0xa5, @@ -2086,83 +2087,83 @@ static const unsigned char uname2c_tree[210697] = { 0xa6, 0x40, 0x44, 0x25, 0x01, 0x23, 0xa6, 0x00, 0x42, 0x15, 0x02, 0x22, 0xa6, 0x40, 0x44, 0x96, 0x1b, 0x27, 0xa6, 0x00, 0x42, 0x30, 0x27, 0x26, 0xa6, 0x40, 0x43, 0xd7, 0x04, 0x25, 0xa6, 0x00, 0x43, 0xfb, 0x05, 0x24, - 0xa6, 0x40, 0x08, 0x9d, 0xbc, 0xb0, 0x0a, 0x47, 0x52, 0x5b, 0x02, 0x26, + 0xa6, 0x40, 0x08, 0xb9, 0xbc, 0xb0, 0x0a, 0x47, 0x67, 0x5b, 0x02, 0x26, 0x80, 0x99, 0x0a, 0xae, 0xa3, 0x09, 0xb0, 0x06, 0x45, 0x17, 0x1f, 0x45, 0x26, 0x40, 0x80, 0x8b, 0x08, 0x0a, 0x4b, 0x0a, 0xd3, 0x07, 0x04, 0x6f, - 0x02, 0xff, 0x03, 0x4e, 0x60, 0x75, 0x43, 0xf6, 0x01, 0x06, 0xa9, 0x01, - 0x01, 0xff, 0xa1, 0xff, 0x02, 0x06, 0x1c, 0x07, 0xee, 0x02, 0x50, 0x59, - 0x5b, 0x3d, 0xf8, 0x01, 0xa4, 0xd9, 0x02, 0x51, 0x54, 0x54, 0x35, 0xf8, - 0x01, 0xa8, 0xfa, 0x01, 0x4d, 0x09, 0x80, 0xc8, 0x21, 0x00, 0x4f, 0x46, - 0x6b, 0xf0, 0x27, 0x00, 0x46, 0x0b, 0xd5, 0x6d, 0xf6, 0x01, 0xb3, 0xd9, + 0x02, 0xff, 0x03, 0x4e, 0x75, 0x75, 0x43, 0xf6, 0x01, 0x06, 0xa9, 0x01, + 0x01, 0xff, 0xa1, 0xff, 0x02, 0x06, 0x1c, 0x07, 0xee, 0x02, 0x50, 0x6e, + 0x5b, 0x3d, 0xf8, 0x01, 0xa4, 0xd9, 0x02, 0x51, 0x69, 0x54, 0x35, 0xf8, + 0x01, 0xa8, 0xfa, 0x01, 0x4d, 0x10, 0x80, 0xc8, 0x21, 0x00, 0x4f, 0x5b, + 0x6b, 0xf0, 0x27, 0x00, 0x46, 0x27, 0xd5, 0x6d, 0xf6, 0x01, 0xb3, 0xd9, 0x01, 0xb4, 0x47, 0x06, 0xad, 0x02, 0x01, 0xff, 0x45, 0xce, 0x00, 0xe7, - 0x21, 0x80, 0x0d, 0x4c, 0xa0, 0x86, 0xee, 0x21, 0xc0, 0x00, 0x4c, 0xc4, - 0x83, 0xef, 0x21, 0x40, 0x80, 0x01, 0xff, 0x48, 0x4d, 0xab, 0xea, 0x21, - 0x80, 0x1e, 0x4b, 0xc5, 0x83, 0xeb, 0x21, 0x80, 0x06, 0x59, 0x79, 0x1c, + 0x21, 0x80, 0x0d, 0x4c, 0xa7, 0x86, 0xee, 0x21, 0xc0, 0x00, 0x4c, 0xcb, + 0x83, 0xef, 0x21, 0x40, 0x80, 0x01, 0xff, 0x48, 0x60, 0xab, 0xea, 0x21, + 0x80, 0x1e, 0x4b, 0xcc, 0x83, 0xeb, 0x21, 0x80, 0x06, 0x59, 0x79, 0x1c, 0x95, 0xf8, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, 0x0b, 0x00, 0xec, - 0x21, 0x00, 0x4c, 0x32, 0x00, 0xed, 0x21, 0x40, 0x54, 0x44, 0x3b, 0xb8, + 0x21, 0x00, 0x4c, 0x32, 0x00, 0xed, 0x21, 0x40, 0x54, 0x59, 0x3b, 0xb8, 0x2b, 0x40, 0x02, 0x0d, 0x00, 0x1c, 0x02, 0x15, 0x02, 0x01, 0xff, 0x4d, - 0x92, 0x78, 0x9f, 0x21, 0x00, 0x0e, 0x20, 0x05, 0x01, 0xff, 0x51, 0x87, + 0x99, 0x78, 0x9f, 0x21, 0x00, 0x0e, 0x20, 0x05, 0x01, 0xff, 0x51, 0x9c, 0x54, 0x49, 0x29, 0x00, 0x58, 0x2e, 0x05, 0xed, 0x2b, 0x40, 0x05, 0x04, - 0x02, 0x06, 0x49, 0x4c, 0x6b, 0x0a, 0x29, 0x40, 0x4a, 0xe0, 0x01, 0x91, + 0x02, 0x06, 0x49, 0x61, 0x6b, 0x0a, 0x29, 0x40, 0x4a, 0xe0, 0x01, 0x91, 0xf8, 0x01, 0x08, 0x09, 0x02, 0x01, 0xff, 0x45, 0xce, 0x00, 0x61, 0x2b, - 0x80, 0x0c, 0x4c, 0x40, 0x86, 0x6b, 0x2b, 0x00, 0x4d, 0x09, 0x80, 0x85, + 0x80, 0x0c, 0x4c, 0x47, 0x86, 0x6b, 0x2b, 0x00, 0x4d, 0x10, 0x80, 0x85, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x6c, 0xea, 0x01, 0x81, 0x2b, 0x00, 0x46, - 0x0d, 0x13, 0x71, 0x2b, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0xcb, - 0x9f, 0x29, 0xf8, 0x01, 0x58, 0x3f, 0x25, 0x7b, 0x2b, 0x00, 0x4b, 0x0e, - 0x62, 0x2d, 0xf8, 0x01, 0x09, 0x54, 0xb2, 0x12, 0x4c, 0x54, 0x8a, 0x25, - 0xf8, 0x01, 0x4c, 0xc0, 0x8a, 0x21, 0xf8, 0x01, 0x50, 0x09, 0x62, 0x31, + 0x0d, 0x13, 0x71, 0x2b, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0xde, + 0x9f, 0x29, 0xf8, 0x01, 0x58, 0x3f, 0x25, 0x7b, 0x2b, 0x00, 0x4b, 0x23, + 0x62, 0x2d, 0xf8, 0x01, 0x09, 0x70, 0xb2, 0x12, 0x4c, 0x5b, 0x8a, 0x25, + 0xf8, 0x01, 0x4c, 0xc7, 0x8a, 0x21, 0xf8, 0x01, 0x50, 0x1e, 0x62, 0x31, 0xf8, 0x41, 0x49, 0xea, 0x01, 0xa2, 0x2b, 0x00, 0x4a, 0xb3, 0x02, 0xa3, - 0x2b, 0x40, 0x4f, 0x8a, 0x60, 0x51, 0xf8, 0x01, 0x4c, 0x40, 0x8c, 0x39, + 0x2b, 0x40, 0x4f, 0x9f, 0x60, 0x51, 0xf8, 0x01, 0x4c, 0x47, 0x8c, 0x39, 0xf8, 0x41, 0x11, 0x96, 0x04, 0x11, 0x05, 0x8d, 0x13, 0x01, 0xff, 0x45, - 0xce, 0x00, 0x45, 0xf8, 0x01, 0x50, 0x59, 0x5b, 0x41, 0xf8, 0x41, 0x04, + 0xce, 0x00, 0x45, 0xf8, 0x01, 0x50, 0x6e, 0x5b, 0x41, 0xf8, 0x41, 0x04, 0xc3, 0x00, 0x19, 0x05, 0xc8, 0x00, 0x01, 0xff, 0x80, 0x06, 0x45, 0xa9, - 0x01, 0xbe, 0x21, 0x40, 0x48, 0x4d, 0xab, 0x5c, 0x29, 0x00, 0x46, 0x0d, + 0x01, 0xbe, 0x21, 0x40, 0x48, 0x60, 0xab, 0x5c, 0x29, 0x00, 0x46, 0x0d, 0x13, 0x54, 0x29, 0x40, 0x80, 0x06, 0x45, 0xa9, 0x01, 0xbf, 0x21, 0x40, - 0x07, 0x51, 0x09, 0x0c, 0x48, 0x4d, 0xab, 0x60, 0x29, 0x00, 0x46, 0x0d, + 0x07, 0x51, 0x09, 0x0c, 0x48, 0x60, 0xab, 0x60, 0x29, 0x00, 0x46, 0x0d, 0x13, 0x58, 0x29, 0x40, 0x61, 0x21, 0x0c, 0x6e, 0x29, 0x00, 0x5f, 0x80, - 0x10, 0x63, 0x29, 0x40, 0x4b, 0x41, 0x86, 0xe1, 0x21, 0x00, 0x4b, 0xa1, - 0x86, 0xd1, 0x21, 0x40, 0x45, 0xce, 0x00, 0x06, 0x2b, 0x00, 0x53, 0x50, - 0x43, 0x89, 0x2b, 0x40, 0x45, 0x27, 0xde, 0x15, 0x2e, 0x00, 0x44, 0xcf, + 0x10, 0x63, 0x29, 0x40, 0x4b, 0x48, 0x86, 0xe1, 0x21, 0x00, 0x4b, 0xa8, + 0x86, 0xd1, 0x21, 0x40, 0x45, 0xce, 0x00, 0x06, 0x2b, 0x00, 0x53, 0x65, + 0x43, 0x89, 0x2b, 0x40, 0x45, 0x43, 0xde, 0x15, 0x2e, 0x00, 0x44, 0xcf, 0x00, 0x91, 0x21, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x5a, 0xc6, 0x1c, 0xb8, - 0xfb, 0x01, 0x48, 0x4d, 0xab, 0xa5, 0x21, 0x00, 0x5c, 0x6d, 0x16, 0xc5, + 0xfb, 0x01, 0x48, 0x60, 0xab, 0xa5, 0x21, 0x00, 0x5c, 0x6d, 0x16, 0xc5, 0x21, 0x00, 0x46, 0x0d, 0x13, 0x12, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x4d, 0x29, 0x7b, 0xde, 0x21, 0x00, 0x55, 0xd5, 0x01, 0x15, 0xf8, + 0xff, 0x4d, 0x30, 0x7b, 0xde, 0x21, 0x00, 0x55, 0xd5, 0x01, 0x15, 0xf8, 0x01, 0x51, 0x4c, 0x04, 0x09, 0x29, 0x00, 0x58, 0x77, 0x26, 0x09, 0xf8, - 0x01, 0x59, 0x47, 0x22, 0x05, 0xf8, 0x01, 0x4c, 0x38, 0x8b, 0x99, 0xf8, + 0x01, 0x59, 0x47, 0x22, 0x05, 0xf8, 0x01, 0x4c, 0x3f, 0x8b, 0x99, 0xf8, 0x01, 0x06, 0x3c, 0x06, 0x11, 0x04, 0xc3, 0x0a, 0x01, 0xff, 0x49, 0xea, 0x01, 0xb0, 0x21, 0x00, 0x4a, 0xb3, 0x02, 0xb1, 0x21, 0x40, 0x55, 0xd5, 0x01, 0x11, 0xf8, 0x01, 0x52, 0x33, 0x05, 0x01, 0xf8, 0x41, 0x04, 0x1a, - 0x00, 0xab, 0x03, 0x4e, 0x5c, 0x6f, 0x01, 0x27, 0x00, 0x52, 0x13, 0x4c, + 0x00, 0xab, 0x03, 0x4e, 0x71, 0x6f, 0x01, 0x27, 0x00, 0x52, 0x28, 0x4c, 0x84, 0xfb, 0x01, 0x05, 0x22, 0x00, 0xf1, 0x02, 0x05, 0xc3, 0x00, 0xda, - 0x01, 0x04, 0xcd, 0x09, 0xc9, 0x01, 0x06, 0xc8, 0x00, 0x1f, 0x53, 0x78, + 0x01, 0x04, 0xcd, 0x09, 0xc9, 0x01, 0x06, 0xc8, 0x00, 0x1f, 0x53, 0x8d, 0x47, 0x86, 0xfb, 0x01, 0xb4, 0x01, 0xff, 0x05, 0x25, 0x01, 0x06, 0x5b, - 0x02, 0x1b, 0x6d, 0xfb, 0x41, 0x4d, 0x7e, 0x47, 0x83, 0xfb, 0x01, 0x4e, - 0x2a, 0x01, 0x85, 0xfb, 0x41, 0x0f, 0xe3, 0x64, 0x42, 0x5a, 0x7c, 0x1d, - 0x50, 0x27, 0x00, 0x63, 0xdd, 0x09, 0xb1, 0x23, 0x00, 0x46, 0x8d, 0xd4, - 0x10, 0x27, 0x00, 0x55, 0x27, 0x39, 0xdd, 0x25, 0x00, 0x0f, 0xa4, 0x02, - 0x1a, 0xb4, 0x01, 0xff, 0x51, 0x04, 0x50, 0x99, 0xfb, 0x01, 0x05, 0x1a, - 0x01, 0x01, 0xff, 0x42, 0x68, 0x00, 0xf9, 0x25, 0x00, 0x51, 0xb6, 0x58, + 0x02, 0x1b, 0x6d, 0xfb, 0x41, 0x4d, 0x93, 0x47, 0x83, 0xfb, 0x01, 0x4e, + 0x2a, 0x01, 0x85, 0xfb, 0x41, 0x0f, 0xf8, 0x64, 0x42, 0x5a, 0x7c, 0x1d, + 0x50, 0x27, 0x00, 0x63, 0xdd, 0x09, 0xb1, 0x23, 0x00, 0x46, 0xa9, 0xd4, + 0x10, 0x27, 0x00, 0x55, 0x3c, 0x39, 0xdd, 0x25, 0x00, 0x0f, 0xa4, 0x02, + 0x1a, 0xb4, 0x01, 0xff, 0x51, 0x19, 0x50, 0x99, 0xfb, 0x01, 0x05, 0x1a, + 0x01, 0x01, 0xff, 0x42, 0x68, 0x00, 0xf9, 0x25, 0x00, 0x51, 0xcb, 0x58, 0x9d, 0xfb, 0x41, 0x46, 0x00, 0x04, 0x3f, 0xf5, 0x01, 0x46, 0xdb, 0x04, 0x52, 0x27, 0x40, 0x1b, 0x60, 0x1a, 0x50, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x0a, 0x73, 0x02, 0x31, 0x08, 0x84, 0x02, 0x17, 0x15, 0x7d, 0x02, 0x01, 0xff, 0x46, 0x73, 0x02, 0x54, 0xfb, 0x01, 0x4c, 0xb0, 0x0d, 0x67, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x55, 0xfb, 0x41, 0x06, 0x13, 0x01, 0x06, 0x52, - 0x81, 0x50, 0x63, 0xfb, 0x41, 0x46, 0x73, 0x02, 0x56, 0xfb, 0x01, 0x4c, - 0xb0, 0x0d, 0x65, 0xfb, 0x41, 0x06, 0x13, 0x01, 0x06, 0x52, 0x81, 0x50, + 0x96, 0x50, 0x63, 0xfb, 0x41, 0x46, 0x73, 0x02, 0x56, 0xfb, 0x01, 0x4c, + 0xb0, 0x0d, 0x65, 0xfb, 0x41, 0x06, 0x13, 0x01, 0x06, 0x52, 0x96, 0x50, 0x62, 0xfb, 0x41, 0x4c, 0xb0, 0x0d, 0x64, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x66, 0xfb, 0x41, 0x46, 0x73, 0x02, 0x52, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x53, 0xfb, 0x41, 0x4c, 0xd1, 0x09, 0x94, 0x25, 0x00, 0x4d, 0x10, 0x1b, - 0x82, 0xfb, 0x41, 0x0f, 0xe3, 0x64, 0x2c, 0x4f, 0x4c, 0x65, 0xd4, 0x27, - 0x00, 0x64, 0x79, 0x08, 0xb0, 0x23, 0x00, 0x55, 0x27, 0x39, 0xdc, 0x25, - 0x00, 0xb4, 0x01, 0xff, 0x52, 0x24, 0x48, 0x98, 0xfb, 0x01, 0x05, 0x1a, - 0x01, 0x01, 0xff, 0x42, 0x68, 0x00, 0xf8, 0x25, 0x00, 0x51, 0xb6, 0x58, + 0x82, 0xfb, 0x41, 0x0f, 0xf8, 0x64, 0x2c, 0x4f, 0x61, 0x65, 0xd4, 0x27, + 0x00, 0x64, 0x79, 0x08, 0xb0, 0x23, 0x00, 0x55, 0x3c, 0x39, 0xdc, 0x25, + 0x00, 0xb4, 0x01, 0xff, 0x52, 0x39, 0x48, 0x98, 0xfb, 0x01, 0x05, 0x1a, + 0x01, 0x01, 0xff, 0x42, 0x68, 0x00, 0xf8, 0x25, 0x00, 0x51, 0xcb, 0x58, 0x9c, 0xfb, 0x41, 0x06, 0x13, 0x01, 0x11, 0x1b, 0xa4, 0x1b, 0x01, 0xff, 0x46, 0x73, 0x02, 0x57, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x58, 0xfb, 0x41, 0x0a, 0x73, 0x02, 0x32, 0x08, 0x84, 0x02, 0x17, 0x15, 0xaa, 0x1b, 0x01, 0xff, 0x46, 0x73, 0x02, 0x59, 0xfb, 0x01, 0x4c, 0xb0, 0x0d, 0x5c, 0xfb, - 0x01, 0x45, 0xc8, 0x00, 0x5a, 0xfb, 0x41, 0x52, 0xe7, 0x4d, 0x5e, 0xfb, + 0x01, 0x45, 0xc8, 0x00, 0x5a, 0xfb, 0x41, 0x52, 0xfc, 0x4d, 0x5e, 0xfb, 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x46, 0x73, 0x02, 0x5b, 0xfb, 0x01, - 0x4c, 0xb0, 0x0d, 0x60, 0xfb, 0x41, 0x52, 0xe7, 0x4d, 0x5d, 0xfb, 0x01, + 0x4c, 0xb0, 0x0d, 0x60, 0xfb, 0x41, 0x52, 0xfc, 0x4d, 0x5d, 0xfb, 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x4c, 0xb0, 0x0d, 0x5f, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x61, 0xfb, 0x41, 0x45, 0x33, 0x01, 0x80, 0x25, 0x80, 0x1c, 0x46, 0x00, 0x04, 0xe0, 0x25, 0x00, 0x08, 0x93, 0x03, 0x06, 0x4c, 0x9b, @@ -2170,116 +2171,116 @@ static const unsigned char uname2c_tree[210697] = { 0x0f, 0xda, 0x25, 0x40, 0x64, 0xa1, 0x07, 0x91, 0xfb, 0x41, 0xac, 0x06, 0x6f, 0x09, 0x01, 0x68, 0xfb, 0x41, 0x6d, 0x65, 0x01, 0x6a, 0xfb, 0x01, 0x05, 0x14, 0x01, 0x01, 0xff, 0x50, 0xcd, 0x09, 0x80, 0xfb, 0x01, 0x55, - 0x23, 0x3a, 0x9a, 0xfb, 0x41, 0x48, 0x28, 0x30, 0xe7, 0xf6, 0x01, 0x51, - 0x74, 0x56, 0xe6, 0xf6, 0x01, 0x4c, 0xc1, 0x4f, 0x3a, 0xf5, 0x01, 0x06, - 0x3c, 0x06, 0x11, 0x0e, 0x94, 0x76, 0x01, 0xff, 0x4f, 0xa3, 0x68, 0xed, - 0x25, 0x00, 0x50, 0x59, 0x60, 0xee, 0x25, 0x40, 0x48, 0x28, 0x30, 0xe8, - 0xf6, 0x01, 0x4c, 0xc1, 0x4f, 0x3c, 0xf5, 0x41, 0x05, 0xce, 0x00, 0x6d, - 0x05, 0xa2, 0x04, 0x48, 0x05, 0xda, 0x12, 0x19, 0x49, 0xba, 0xaf, 0x7e, + 0x38, 0x3a, 0x9a, 0xfb, 0x41, 0x48, 0x28, 0x30, 0xe7, 0xf6, 0x01, 0x51, + 0x89, 0x56, 0xe6, 0xf6, 0x01, 0x4c, 0xd6, 0x4f, 0x3a, 0xf5, 0x01, 0x06, + 0x3c, 0x06, 0x11, 0x0e, 0x9b, 0x76, 0x01, 0xff, 0x4f, 0xb8, 0x68, 0xed, + 0x25, 0x00, 0x50, 0x6e, 0x60, 0xee, 0x25, 0x40, 0x48, 0x28, 0x30, 0xe8, + 0xf6, 0x01, 0x4c, 0xd6, 0x4f, 0x3c, 0xf5, 0x41, 0x05, 0xce, 0x00, 0x6d, + 0x05, 0xa2, 0x04, 0x48, 0x05, 0xda, 0x12, 0x19, 0x49, 0xd6, 0xaf, 0x7e, 0x29, 0x00, 0x57, 0xdd, 0x2c, 0xf0, 0x22, 0x00, 0x44, 0xca, 0x34, 0xa5, - 0x22, 0xc0, 0x00, 0x52, 0x09, 0x4a, 0xdf, 0x27, 0x40, 0x45, 0xce, 0x00, - 0x95, 0x21, 0x80, 0x1e, 0x4b, 0x9f, 0x91, 0x0d, 0x2b, 0x00, 0x4c, 0xa0, - 0x86, 0xd5, 0x21, 0x00, 0x50, 0x89, 0x60, 0x59, 0xf8, 0x01, 0x55, 0x01, - 0x02, 0x65, 0x2b, 0x00, 0x4b, 0xa1, 0x0e, 0xf3, 0x21, 0x40, 0x4a, 0xcd, - 0x9d, 0xa8, 0x21, 0x40, 0x0f, 0x85, 0x68, 0x11, 0x10, 0x39, 0x60, 0x01, - 0xff, 0x4c, 0x7c, 0x89, 0x4c, 0x29, 0x00, 0x4d, 0x64, 0x80, 0x4f, 0x29, - 0x40, 0x4c, 0x7c, 0x89, 0x51, 0x29, 0x00, 0x4d, 0x64, 0x80, 0x4d, 0x29, - 0x40, 0x4f, 0x5d, 0x63, 0xbd, 0x29, 0x00, 0x44, 0xe6, 0x01, 0x03, 0x23, + 0x22, 0xc0, 0x00, 0x52, 0x1e, 0x4a, 0xdf, 0x27, 0x40, 0x45, 0xce, 0x00, + 0x95, 0x21, 0x80, 0x1e, 0x4b, 0xb2, 0x91, 0x0d, 0x2b, 0x00, 0x4c, 0xa7, + 0x86, 0xd5, 0x21, 0x00, 0x50, 0x9e, 0x60, 0x59, 0xf8, 0x01, 0x55, 0x01, + 0x02, 0x65, 0x2b, 0x00, 0x4b, 0xa1, 0x0e, 0xf3, 0x21, 0x40, 0x4a, 0xe0, + 0x9d, 0xa8, 0x21, 0x40, 0x0f, 0x9a, 0x68, 0x11, 0x10, 0x4e, 0x60, 0x01, + 0xff, 0x4c, 0x83, 0x89, 0x4c, 0x29, 0x00, 0x4d, 0x6b, 0x80, 0x4f, 0x29, + 0x40, 0x4c, 0x83, 0x89, 0x51, 0x29, 0x00, 0x4d, 0x6b, 0x80, 0x4d, 0x29, + 0x40, 0x4f, 0x72, 0x63, 0xbd, 0x29, 0x00, 0x44, 0xe6, 0x01, 0x03, 0x23, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x5b, 0x29, 0x18, 0x24, 0x23, 0x00, 0x52, - 0x0e, 0x42, 0xb9, 0x2b, 0x40, 0x4b, 0x10, 0x91, 0x12, 0xf6, 0x01, 0x4e, - 0x86, 0x6f, 0xd1, 0x2b, 0x00, 0xa4, 0x59, 0xa9, 0x06, 0x5a, 0x9a, 0x1e, - 0xaf, 0x26, 0x40, 0x49, 0x49, 0xae, 0x84, 0xf9, 0x01, 0x42, 0x10, 0x00, + 0x23, 0x42, 0xb9, 0x2b, 0x40, 0x4b, 0x23, 0x91, 0x12, 0xf6, 0x01, 0x4e, + 0x9b, 0x6f, 0xd1, 0x2b, 0x00, 0xa4, 0x59, 0xa9, 0x06, 0x5a, 0x9a, 0x1e, + 0xaf, 0x26, 0x40, 0x49, 0x65, 0xae, 0x84, 0xf9, 0x01, 0x42, 0x10, 0x00, 0x2a, 0x22, 0x80, 0x14, 0xb4, 0x06, 0x57, 0x7b, 0x22, 0x72, 0x26, 0x40, - 0x4a, 0x6f, 0x1e, 0x1f, 0x00, 0x00, 0x49, 0x4a, 0x70, 0xfa, 0x2b, 0x40, + 0x4a, 0x6f, 0x1e, 0x1f, 0x00, 0x00, 0x49, 0x5f, 0x70, 0xfa, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x1d, 0x5c, 0x55, 0x15, 0x4a, 0x2a, - 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0x99, 0xa4, 0x45, 0x2a, 0x00, - 0x4a, 0x77, 0x90, 0x41, 0x2a, 0x00, 0x47, 0xf3, 0x78, 0x42, 0x2a, 0x40, + 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0xac, 0xa4, 0x45, 0x2a, 0x00, + 0x4a, 0x8a, 0x90, 0x41, 0x2a, 0x00, 0x47, 0xfa, 0x78, 0x42, 0x2a, 0x40, 0x56, 0x12, 0x2f, 0x48, 0x2a, 0x00, 0x4c, 0x68, 0x09, 0x46, 0x2a, 0x40, - 0x45, 0x08, 0xc2, 0x3f, 0x20, 0x00, 0x48, 0x75, 0xa7, 0x8c, 0x23, 0x40, - 0x80, 0x01, 0xff, 0x49, 0xb3, 0xb3, 0xf1, 0x26, 0x00, 0x4f, 0x07, 0x6e, + 0x45, 0x24, 0xc2, 0x3f, 0x20, 0x00, 0x48, 0x88, 0xa7, 0x8c, 0x23, 0x40, + 0x80, 0x01, 0xff, 0x49, 0xcf, 0xb3, 0xf1, 0x26, 0x00, 0x4f, 0x1c, 0x6e, 0x14, 0x26, 0x40, 0x07, 0xf1, 0x04, 0x06, 0x4c, 0x9f, 0x22, 0x9f, 0x03, - 0x41, 0xa1, 0xb3, 0x01, 0x44, 0x94, 0x91, 0x81, 0x03, 0x01, 0xa4, 0x9e, + 0x41, 0xa1, 0xb3, 0x01, 0x44, 0xa7, 0x91, 0x81, 0x03, 0x01, 0xa4, 0x9e, 0x01, 0xa7, 0x8f, 0x01, 0x42, 0x0b, 0x00, 0x85, 0x03, 0x81, 0x81, 0x01, - 0xe9, 0x9b, 0x03, 0x01, 0xab, 0x6f, 0x45, 0x4b, 0xdd, 0x8d, 0x03, 0x01, + 0xe9, 0x9b, 0x03, 0x01, 0xab, 0x6f, 0x45, 0x67, 0xdd, 0x8d, 0x03, 0x01, 0x43, 0xb9, 0x04, 0x8e, 0x03, 0x01, 0x43, 0x40, 0x20, 0x90, 0x03, 0x01, - 0x42, 0xa3, 0x0a, 0x94, 0x03, 0x01, 0x44, 0x1a, 0xe7, 0x96, 0x03, 0x01, - 0x45, 0x62, 0xdf, 0x97, 0x03, 0x01, 0xb3, 0x2f, 0xb4, 0x1d, 0xf5, 0x9c, - 0x03, 0x01, 0x42, 0x15, 0x02, 0x86, 0x03, 0x01, 0x43, 0xf9, 0x4c, 0x8a, + 0x42, 0xa3, 0x0a, 0x94, 0x03, 0x01, 0x44, 0x36, 0xe7, 0x96, 0x03, 0x01, + 0x45, 0x7e, 0xdf, 0x97, 0x03, 0x01, 0xb3, 0x2f, 0xb4, 0x1d, 0xf5, 0x9c, + 0x03, 0x01, 0x42, 0x15, 0x02, 0x86, 0x03, 0x01, 0x43, 0x0e, 0x4d, 0x8a, 0x03, 0x01, 0xba, 0x01, 0xff, 0x43, 0xec, 0x0d, 0x87, 0x03, 0x01, 0xf5, - 0x91, 0x03, 0x41, 0x42, 0xf2, 0x04, 0x89, 0x03, 0x01, 0x45, 0x24, 0xdc, + 0x91, 0x03, 0x41, 0x42, 0xf2, 0x04, 0x89, 0x03, 0x01, 0x45, 0x40, 0xdc, 0x98, 0x03, 0x01, 0xef, 0x9a, 0x03, 0x41, 0xa1, 0x0c, 0x43, 0x99, 0x14, 0x8c, 0x03, 0x01, 0x42, 0x6f, 0x00, 0x9d, 0x03, 0x41, 0x42, 0x04, 0x00, - 0x95, 0x03, 0x01, 0x43, 0x7a, 0x4d, 0x92, 0x03, 0x41, 0x42, 0x9e, 0x12, + 0x95, 0x03, 0x01, 0x43, 0x8f, 0x4d, 0x92, 0x03, 0x41, 0x42, 0x9e, 0x12, 0x8b, 0x03, 0x01, 0x42, 0x22, 0x00, 0x83, 0x03, 0x41, 0x42, 0x12, 0x00, - 0x88, 0x03, 0x41, 0x44, 0xfe, 0xe3, 0x82, 0x03, 0x01, 0x44, 0x4a, 0x94, - 0x99, 0x03, 0x41, 0x44, 0x01, 0xcc, 0x84, 0x03, 0x01, 0x43, 0x22, 0x00, - 0x8f, 0x03, 0x41, 0x42, 0x9e, 0x01, 0x93, 0x03, 0x01, 0x43, 0x1d, 0x74, + 0x88, 0x03, 0x41, 0x44, 0x1a, 0xe4, 0x82, 0x03, 0x01, 0x44, 0x5d, 0x94, + 0x99, 0x03, 0x41, 0x44, 0x1d, 0xcc, 0x84, 0x03, 0x01, 0x43, 0x22, 0x00, + 0x8f, 0x03, 0x41, 0x42, 0x9e, 0x01, 0x93, 0x03, 0x01, 0x43, 0x32, 0x74, 0x80, 0x03, 0x41, 0x8d, 0xc0, 0x6b, 0xa1, 0xa9, 0x31, 0xa5, 0xc7, 0x26, 0xa8, 0xb4, 0x1c, 0xa9, 0x97, 0x09, 0xaf, 0xc3, 0x05, 0xb2, 0xd5, 0x02, 0xb5, 0x82, 0x01, 0xb7, 0x01, 0xff, 0x57, 0xb8, 0x28, 0x39, 0x27, 0x00, 0x57, 0x9b, 0x2b, 0x00, 0xf5, 0x01, 0xaf, 0x01, 0xff, 0x80, 0x06, 0x48, - 0x15, 0xb9, 0x3a, 0x2e, 0x40, 0x5c, 0x39, 0x15, 0x51, 0x20, 0x00, 0x4c, - 0x8c, 0x85, 0xb0, 0xf5, 0x01, 0x58, 0xdf, 0x24, 0x75, 0x2a, 0x00, 0x03, - 0xc5, 0x06, 0x3e, 0x46, 0x74, 0x7f, 0x95, 0xf4, 0x01, 0x15, 0xc2, 0x37, - 0x28, 0x4e, 0x5e, 0x72, 0xc9, 0x29, 0x00, 0x08, 0xa9, 0x1f, 0x12, 0x51, - 0x68, 0x49, 0x6c, 0xf4, 0x01, 0x4e, 0xa6, 0x75, 0xea, 0xf5, 0x01, 0x53, - 0x66, 0x49, 0x6d, 0xf4, 0x41, 0x4c, 0xc0, 0x84, 0x07, 0x2a, 0x00, 0x4b, - 0xa0, 0x98, 0x08, 0x2a, 0x40, 0x43, 0x1a, 0x00, 0x55, 0x2a, 0x00, 0x42, + 0x31, 0xb9, 0x3a, 0x2e, 0x40, 0x5c, 0x39, 0x15, 0x51, 0x20, 0x00, 0x4c, + 0x93, 0x85, 0xb0, 0xf5, 0x01, 0x58, 0xdf, 0x24, 0x75, 0x2a, 0x00, 0x03, + 0xc5, 0x06, 0x3e, 0x46, 0x7b, 0x7f, 0x95, 0xf4, 0x01, 0x15, 0xd7, 0x37, + 0x28, 0x4e, 0x73, 0x72, 0xc9, 0x29, 0x00, 0x08, 0xa9, 0x1f, 0x12, 0x51, + 0x7d, 0x49, 0x6c, 0xf4, 0x01, 0x4e, 0xbb, 0x75, 0xea, 0xf5, 0x01, 0x53, + 0x7b, 0x49, 0x6d, 0xf4, 0x41, 0x4c, 0xc7, 0x84, 0x07, 0x2a, 0x00, 0x4b, + 0xb3, 0x98, 0x08, 0x2a, 0x40, 0x43, 0x1a, 0x00, 0x55, 0x2a, 0x00, 0x42, 0x0c, 0x00, 0x56, 0x2a, 0x40, 0x80, 0x06, 0x5a, 0x94, 0x0a, 0x2a, 0x2e, - 0x40, 0x46, 0xb8, 0x76, 0x25, 0x20, 0x00, 0x4b, 0xa3, 0x0a, 0x5a, 0x20, - 0x40, 0x49, 0xf9, 0xaf, 0xae, 0x20, 0x00, 0x43, 0x4e, 0x19, 0x37, 0xf3, - 0x01, 0x4b, 0x2a, 0x97, 0x43, 0xf9, 0x01, 0xb2, 0x01, 0xff, 0xab, 0xac, + 0x40, 0x46, 0xbf, 0x76, 0x25, 0x20, 0x00, 0x4b, 0xa3, 0x0a, 0x5a, 0x20, + 0x40, 0x49, 0x15, 0xb0, 0xae, 0x20, 0x00, 0x43, 0x4e, 0x19, 0x37, 0xf3, + 0x01, 0x4b, 0x3d, 0x97, 0x43, 0xf9, 0x01, 0xb2, 0x01, 0xff, 0xab, 0xac, 0x01, 0x04, 0x78, 0x06, 0x06, 0x43, 0xbd, 0x01, 0x22, 0xf4, 0x41, 0xa1, 0x93, 0x01, 0x06, 0x1c, 0x07, 0x82, 0x01, 0xa3, 0x74, 0xa4, 0x5b, 0x57, - 0xfa, 0x2a, 0x29, 0x21, 0x00, 0x02, 0xb4, 0x01, 0x3b, 0x4c, 0x80, 0x8b, - 0x8f, 0xf5, 0x01, 0xb3, 0x06, 0x51, 0xa4, 0x59, 0xc9, 0x26, 0x40, 0x12, - 0xa5, 0x42, 0x1d, 0x48, 0x32, 0x54, 0x35, 0x2e, 0x00, 0x46, 0x73, 0xd3, - 0x4e, 0x21, 0x00, 0x05, 0x3a, 0x1e, 0x01, 0xff, 0x52, 0x95, 0x4b, 0x57, - 0xf6, 0x01, 0x52, 0xc9, 0x50, 0x55, 0xf6, 0x41, 0xe7, 0x41, 0x21, 0x00, + 0xfa, 0x2a, 0x29, 0x21, 0x00, 0x02, 0xb4, 0x01, 0x3b, 0x4c, 0x87, 0x8b, + 0x8f, 0xf5, 0x01, 0xb3, 0x06, 0x51, 0xb9, 0x59, 0xc9, 0x26, 0x40, 0x12, + 0xba, 0x42, 0x1d, 0x48, 0x47, 0x54, 0x35, 0x2e, 0x00, 0x46, 0x8f, 0xd3, + 0x4e, 0x21, 0x00, 0x05, 0x3a, 0x1e, 0x01, 0xff, 0x52, 0xaa, 0x4b, 0x57, + 0xf6, 0x01, 0x52, 0xde, 0x50, 0x55, 0xf6, 0x41, 0xe7, 0x41, 0x21, 0x00, 0xec, 0x42, 0x21, 0x00, 0xf9, 0x44, 0x21, 0x40, 0x04, 0xb6, 0x01, 0x06, - 0x46, 0x5c, 0x2f, 0x19, 0x23, 0x40, 0x52, 0x95, 0x4b, 0x56, 0xf6, 0x01, - 0x52, 0xc9, 0x50, 0x54, 0xf6, 0x41, 0x45, 0x86, 0xd0, 0x38, 0x2e, 0x00, + 0x46, 0x5c, 0x2f, 0x19, 0x23, 0x40, 0x52, 0xaa, 0x4b, 0x56, 0xf6, 0x01, + 0x52, 0xde, 0x50, 0x54, 0xf6, 0x41, 0x45, 0xa2, 0xd0, 0x38, 0x2e, 0x00, 0x06, 0x12, 0x14, 0x01, 0xff, 0x44, 0x25, 0x01, 0x8b, 0x21, 0x00, 0x42, - 0x15, 0x02, 0x8a, 0x21, 0x40, 0x48, 0xbd, 0xb9, 0x32, 0x21, 0x00, 0x44, - 0x19, 0x04, 0x32, 0x2e, 0x40, 0x48, 0xfd, 0xbf, 0xc2, 0x2b, 0x00, 0x4b, - 0xaa, 0x59, 0xca, 0x26, 0x40, 0x48, 0x94, 0x39, 0x4b, 0x21, 0x00, 0x44, + 0x15, 0x02, 0x8a, 0x21, 0x40, 0x48, 0xd9, 0xb9, 0x32, 0x21, 0x00, 0x44, + 0x19, 0x04, 0x32, 0x2e, 0x40, 0x48, 0x19, 0xc0, 0xc2, 0x2b, 0x00, 0x4b, + 0xbf, 0x59, 0xca, 0x26, 0x40, 0x48, 0xa9, 0x39, 0x4b, 0x21, 0x00, 0x44, 0x05, 0x02, 0xa2, 0x29, 0x40, 0x42, 0xae, 0x1a, 0x83, 0xf9, 0x01, 0x4d, - 0x65, 0x7d, 0xba, 0x20, 0x40, 0xa1, 0xb2, 0x02, 0xa9, 0x3d, 0xaf, 0x14, - 0xb5, 0x01, 0xff, 0xe5, 0xa8, 0x22, 0x80, 0x06, 0x44, 0x2a, 0xe6, 0xba, - 0xf3, 0x41, 0x50, 0x39, 0x5a, 0xdf, 0x2b, 0x40, 0x42, 0x3f, 0x06, 0xcc, - 0xf9, 0x81, 0x1a, 0xb0, 0x01, 0xff, 0x42, 0x8e, 0x41, 0xc6, 0xf3, 0x01, - 0x05, 0x36, 0x00, 0x01, 0xff, 0x45, 0x71, 0xc6, 0x79, 0xf3, 0x01, 0x44, - 0x82, 0x55, 0x20, 0xf4, 0x41, 0x45, 0x84, 0xdb, 0x8e, 0xf6, 0x41, 0x03, - 0x1c, 0x01, 0xb1, 0x01, 0x45, 0x69, 0x37, 0x5d, 0x20, 0x00, 0x4b, 0xd3, - 0x92, 0x31, 0xf5, 0x01, 0x09, 0x2f, 0x8e, 0x6e, 0x04, 0x3a, 0x1b, 0x01, - 0xff, 0x4e, 0x94, 0x6f, 0xf6, 0x2a, 0x00, 0x46, 0x85, 0xd0, 0x4b, 0x2e, + 0x6c, 0x7d, 0xba, 0x20, 0x40, 0xa1, 0xb2, 0x02, 0xa9, 0x3d, 0xaf, 0x14, + 0xb5, 0x01, 0xff, 0xe5, 0xa8, 0x22, 0x80, 0x06, 0x44, 0x46, 0xe6, 0xba, + 0xf3, 0x41, 0x50, 0x4e, 0x5a, 0xdf, 0x2b, 0x40, 0x42, 0x3f, 0x06, 0xcc, + 0xf9, 0x81, 0x1a, 0xb0, 0x01, 0xff, 0x42, 0xa3, 0x41, 0xc6, 0xf3, 0x01, + 0x05, 0x36, 0x00, 0x01, 0xff, 0x45, 0x8d, 0xc6, 0x79, 0xf3, 0x01, 0x44, + 0x97, 0x55, 0x20, 0xf4, 0x41, 0x45, 0xa0, 0xdb, 0x8e, 0xf6, 0x41, 0x03, + 0x1c, 0x01, 0xb1, 0x01, 0x45, 0x69, 0x37, 0x5d, 0x20, 0x00, 0x4b, 0xe6, + 0x92, 0x31, 0xf5, 0x01, 0x09, 0x42, 0x8e, 0x6e, 0x04, 0x3a, 0x1b, 0x01, + 0xff, 0x4e, 0xa9, 0x6f, 0xf6, 0x2a, 0x00, 0x46, 0xa1, 0xd0, 0x4b, 0x2e, 0x00, 0x14, 0x36, 0x27, 0x4d, 0x48, 0xad, 0x23, 0x2d, 0x22, 0x00, 0x07, - 0x40, 0xc9, 0x37, 0xb0, 0x29, 0x57, 0x67, 0x2d, 0xfb, 0x2a, 0x00, 0x45, + 0x5c, 0xc9, 0x37, 0xb0, 0x29, 0x57, 0x67, 0x2d, 0xfb, 0x2a, 0x00, 0x45, 0x99, 0x20, 0x4b, 0x22, 0x00, 0x0d, 0x42, 0x01, 0x01, 0xff, 0x4f, 0x6f, 0x2d, 0xf4, 0x2a, 0x00, 0x49, 0xb0, 0x34, 0x80, 0x29, 0x00, 0x4f, 0x56, 0x01, 0xaa, 0x22, 0x00, 0x56, 0xf8, 0x33, 0xf5, 0x2a, 0x40, 0x43, 0x72, 0x25, 0xfb, 0x29, 0x00, 0x44, 0xd3, 0x18, 0x34, 0x20, 0x40, 0x4c, 0x87, 0x00, 0xf8, 0x2a, 0x00, 0x49, 0xec, 0x00, 0xf7, 0x2a, 0x40, 0x56, 0xac, - 0x2f, 0x68, 0x2a, 0x00, 0x56, 0x74, 0x33, 0x69, 0x2a, 0x40, 0x45, 0x8c, - 0x6b, 0x37, 0x26, 0x00, 0x44, 0xb4, 0x89, 0x32, 0x26, 0x00, 0x46, 0xc0, + 0x2f, 0x68, 0x2a, 0x00, 0x56, 0x74, 0x33, 0x69, 0x2a, 0x40, 0x45, 0xa1, + 0x6b, 0x37, 0x26, 0x00, 0x44, 0xbb, 0x89, 0x32, 0x26, 0x00, 0x46, 0xd5, 0x74, 0x30, 0x26, 0x00, 0x44, 0x52, 0x2b, 0x31, 0x26, 0x00, 0x48, 0x1a, - 0x31, 0x36, 0x26, 0x00, 0x47, 0x09, 0x74, 0x33, 0x26, 0x00, 0xb7, 0x01, + 0x31, 0x36, 0x26, 0x00, 0x47, 0x1e, 0x74, 0x33, 0x26, 0x00, 0xb7, 0x01, 0xff, 0x44, 0x8a, 0x00, 0x35, 0x26, 0x00, 0x43, 0xee, 0x05, 0x34, 0x26, 0x40, 0x02, 0x68, 0x00, 0x17, 0x05, 0x1f, 0x01, 0x01, 0xff, 0x46, 0x64, - 0x1f, 0x23, 0x20, 0x00, 0x4c, 0x6c, 0x87, 0xa9, 0xf6, 0x01, 0x45, 0xfe, - 0xcd, 0xd0, 0xf4, 0x41, 0x06, 0x50, 0x00, 0x06, 0x58, 0xa0, 0x05, 0x9d, + 0x1f, 0x23, 0x20, 0x00, 0x4c, 0x73, 0x87, 0xa9, 0xf6, 0x01, 0x45, 0x1a, + 0xce, 0xd0, 0xf4, 0x41, 0x06, 0x50, 0x00, 0x06, 0x58, 0xa0, 0x05, 0x9d, 0x27, 0x40, 0x49, 0xec, 0x1b, 0xca, 0x29, 0x00, 0x4f, 0x22, 0x17, 0xc6, - 0xf6, 0x01, 0x50, 0x99, 0x60, 0xcd, 0x29, 0x00, 0x48, 0x3b, 0x54, 0xcb, - 0x29, 0x40, 0xa3, 0x28, 0x4c, 0x4c, 0x86, 0x22, 0x21, 0x00, 0x42, 0x9e, + 0xf6, 0x01, 0x50, 0xae, 0x60, 0xcd, 0x29, 0x00, 0x48, 0x50, 0x54, 0xcb, + 0x29, 0x40, 0xa3, 0x28, 0x4c, 0x53, 0x86, 0x22, 0x21, 0x00, 0x42, 0x9e, 0x01, 0x86, 0xf6, 0x01, 0xed, 0x8a, 0xf6, 0x81, 0x11, 0x02, 0x5f, 0x01, - 0x01, 0xff, 0x45, 0x26, 0xdf, 0xd7, 0x2b, 0x00, 0x53, 0x1a, 0x49, 0xdb, - 0x2a, 0x40, 0x44, 0xab, 0x65, 0x8b, 0xf6, 0x41, 0x45, 0x00, 0xdd, 0xb2, + 0x01, 0xff, 0x45, 0x42, 0xdf, 0xd7, 0x2b, 0x00, 0x53, 0x2f, 0x49, 0xdb, + 0x2a, 0x40, 0x44, 0xc0, 0x65, 0x8b, 0xf6, 0x41, 0x45, 0x1c, 0xdd, 0xb2, 0xf5, 0x01, 0x43, 0x36, 0x08, 0x9c, 0xf6, 0x41, 0x44, 0x71, 0x33, 0xbd, - 0xf6, 0x01, 0x49, 0xcd, 0xb1, 0xfc, 0xf5, 0x01, 0x44, 0xf3, 0x34, 0x45, - 0xf3, 0x01, 0x44, 0x55, 0x61, 0x45, 0xf4, 0x01, 0xaf, 0xa3, 0x03, 0x02, + 0xf6, 0x01, 0x49, 0xe9, 0xb1, 0xfc, 0xf5, 0x01, 0x44, 0xf3, 0x34, 0x45, + 0xf3, 0x01, 0x44, 0x6a, 0x61, 0x45, 0xf4, 0x01, 0xaf, 0xa3, 0x03, 0x02, 0x20, 0x00, 0x8f, 0x02, 0x17, 0x22, 0x2d, 0xbf, 0x01, 0xb4, 0x01, 0xff, - 0x49, 0xcf, 0xac, 0x30, 0x23, 0x00, 0x02, 0x7b, 0x02, 0x01, 0xff, 0x07, - 0xf1, 0x04, 0x06, 0x50, 0xb9, 0x60, 0xae, 0xe2, 0x41, 0xe1, 0xad, 0xe2, + 0x49, 0xe2, 0xac, 0x30, 0x23, 0x00, 0x02, 0x7b, 0x02, 0x01, 0xff, 0x07, + 0xf1, 0x04, 0x06, 0x50, 0xce, 0x60, 0xae, 0xe2, 0x41, 0xe1, 0xad, 0xe2, 0x81, 0x9d, 0x01, 0xa2, 0x7a, 0x43, 0x29, 0x1e, 0x9a, 0xe2, 0x01, 0x42, 0x68, 0x0f, 0x93, 0xe2, 0x01, 0xe5, 0xa6, 0xe2, 0x81, 0x65, 0x42, 0x24, 0x02, 0x95, 0xe2, 0x01, 0x42, 0x22, 0x00, 0x9e, 0xe2, 0x01, 0xe9, 0xa1, @@ -2291,55 +2292,55 @@ static const unsigned char uname2c_tree[210697] = { 0x01, 0x42, 0xa9, 0x01, 0x9c, 0xe2, 0x01, 0x42, 0x20, 0x20, 0x9b, 0xe2, 0x41, 0xe1, 0x97, 0xe2, 0x01, 0x42, 0x24, 0x02, 0x98, 0xe2, 0x41, 0xf5, 0xa3, 0xe2, 0x41, 0xef, 0xa8, 0xe2, 0x41, 0xe1, 0x91, 0xe2, 0x01, 0x07, - 0xf9, 0xca, 0x01, 0xff, 0x42, 0xeb, 0x0d, 0xac, 0xe2, 0x01, 0xe5, 0xa7, + 0x15, 0xcb, 0x01, 0xff, 0x42, 0xeb, 0x0d, 0xac, 0xe2, 0x01, 0xe5, 0xa7, 0xe2, 0x81, 0x09, 0xe9, 0xa2, 0xe2, 0xc1, 0x00, 0xf5, 0xa4, 0xe2, 0x41, 0xef, 0xa9, 0xe2, 0x41, 0xe5, 0xab, 0xe2, 0x41, 0x16, 0x28, 0x2f, 0x06, - 0x56, 0x22, 0x31, 0x2a, 0xf1, 0x41, 0x02, 0xd2, 0xe9, 0x31, 0x95, 0x23, - 0x96, 0x0f, 0x97, 0x01, 0xff, 0x43, 0x46, 0xe8, 0x44, 0xf2, 0x01, 0x43, - 0x94, 0xe8, 0x46, 0xf2, 0x41, 0x43, 0x64, 0xe8, 0x45, 0xf2, 0x01, 0x43, - 0x88, 0xe8, 0x48, 0xf2, 0x01, 0x43, 0x9a, 0xe8, 0x40, 0xf2, 0x41, 0x43, - 0x67, 0xe8, 0x47, 0xf2, 0x01, 0x43, 0xc4, 0xe8, 0x43, 0xf2, 0x41, 0x42, - 0xa5, 0xe8, 0x41, 0xf2, 0x01, 0x42, 0x07, 0xe9, 0x42, 0xf2, 0x41, 0x04, + 0x56, 0x22, 0x31, 0x2a, 0xf1, 0x41, 0x02, 0xee, 0xe9, 0x31, 0x95, 0x23, + 0x96, 0x0f, 0x97, 0x01, 0xff, 0x43, 0x62, 0xe8, 0x44, 0xf2, 0x01, 0x43, + 0xb0, 0xe8, 0x46, 0xf2, 0x41, 0x43, 0x80, 0xe8, 0x45, 0xf2, 0x01, 0x43, + 0xa4, 0xe8, 0x48, 0xf2, 0x01, 0x43, 0xb6, 0xe8, 0x40, 0xf2, 0x41, 0x43, + 0x83, 0xe8, 0x47, 0xf2, 0x01, 0x43, 0xe0, 0xe8, 0x43, 0xf2, 0x41, 0x42, + 0xc1, 0xe8, 0x41, 0xf2, 0x01, 0x42, 0x23, 0xe9, 0x42, 0xf2, 0x41, 0x04, 0xc9, 0x15, 0x78, 0x4d, 0x88, 0x08, 0xde, 0x23, 0x00, 0x02, 0x22, 0x00, 0x48, 0x05, 0xc3, 0x00, 0x30, 0x4b, 0x70, 0x1f, 0xdc, 0x23, 0x00, 0x06, 0xc8, 0x00, 0x12, 0x4e, 0xe1, 0x23, 0xb4, 0x23, 0x00, 0x56, 0x36, 0x08, 0xe0, 0x23, 0x00, 0x58, 0xe7, 0x28, 0x1d, 0xf5, 0x41, 0xa3, 0x06, 0x4c, - 0xfc, 0x87, 0x23, 0x2e, 0x40, 0x45, 0x00, 0x0a, 0x1d, 0x23, 0x00, 0x43, - 0x7f, 0x0b, 0x0e, 0x23, 0x40, 0xa3, 0x06, 0x4c, 0xfc, 0x87, 0x22, 0x2e, + 0x03, 0x88, 0x23, 0x2e, 0x40, 0x45, 0x00, 0x0a, 0x1d, 0x23, 0x00, 0x43, + 0x7f, 0x0b, 0x0e, 0x23, 0x40, 0xa3, 0x06, 0x4c, 0x03, 0x88, 0x22, 0x2e, 0x40, 0x45, 0x00, 0x0a, 0x1c, 0x23, 0x00, 0x43, 0x7f, 0x0b, 0x0f, 0x23, - 0x40, 0x03, 0x24, 0x00, 0x04, 0xf4, 0xa9, 0xf3, 0x41, 0x4c, 0x44, 0x85, + 0x40, 0x03, 0x24, 0x00, 0x04, 0xf4, 0xa9, 0xf3, 0x41, 0x4c, 0x4b, 0x85, 0xca, 0x2b, 0x00, 0x48, 0xad, 0x23, 0x20, 0x23, 0x00, 0x50, 0xe3, 0x21, - 0x59, 0x2e, 0x00, 0x51, 0x6a, 0x1f, 0x5a, 0x2e, 0x00, 0x4c, 0x54, 0x8d, + 0x59, 0x2e, 0x00, 0x51, 0x6a, 0x1f, 0x5a, 0x2e, 0x00, 0x4c, 0x67, 0x8d, 0x39, 0x2e, 0x40, 0x53, 0xb9, 0x0e, 0x3a, 0x29, 0x80, 0x06, 0x5a, 0x14, - 0x1d, 0x3c, 0x29, 0x40, 0x4a, 0xff, 0x9d, 0x3d, 0x29, 0x40, 0x44, 0x45, + 0x1d, 0x3c, 0x29, 0x40, 0x4a, 0x12, 0x9e, 0x3d, 0x29, 0x40, 0x44, 0x4c, 0x7e, 0xf0, 0xf9, 0x01, 0x42, 0x53, 0x00, 0xb7, 0xf9, 0xc1, 0x00, 0x45, - 0xb8, 0xac, 0xa5, 0xfa, 0x41, 0x06, 0xd7, 0xcf, 0xde, 0x07, 0x44, 0x48, - 0x08, 0xab, 0xf3, 0x01, 0x4f, 0x00, 0x66, 0xdd, 0x29, 0x00, 0x07, 0xf4, - 0xc6, 0xa6, 0x05, 0xa7, 0x90, 0x05, 0x43, 0xcd, 0x1b, 0x7e, 0x00, 0x80, + 0xcb, 0xac, 0xa5, 0xfa, 0x41, 0x06, 0xf3, 0xcf, 0xde, 0x07, 0x44, 0x48, + 0x08, 0xab, 0xf3, 0x01, 0x4f, 0x15, 0x66, 0xdd, 0x29, 0x00, 0x07, 0x10, + 0xc7, 0xa6, 0x05, 0xa7, 0x90, 0x05, 0x43, 0xcd, 0x1b, 0x7e, 0x00, 0x80, 0xbf, 0x04, 0x02, 0x2a, 0x02, 0xa3, 0x04, 0x42, 0x4a, 0x18, 0xfe, 0x29, 0x80, 0x95, 0x04, 0xb2, 0x01, 0xff, 0x47, 0x32, 0x13, 0x2b, 0xf6, 0x01, - 0x05, 0x6a, 0xdc, 0x11, 0x0b, 0x7f, 0x98, 0x01, 0xff, 0x4a, 0xf3, 0x9f, + 0x05, 0x86, 0xdc, 0x11, 0x0b, 0x92, 0x98, 0x01, 0xff, 0x4a, 0x06, 0xa0, 0x52, 0x2e, 0x00, 0x42, 0xf2, 0x04, 0x4a, 0x20, 0x40, 0xa1, 0xe8, 0x03, - 0x06, 0xf4, 0x05, 0xa1, 0x03, 0x45, 0x06, 0xdc, 0xc5, 0x14, 0x01, 0x07, + 0x06, 0xf4, 0x05, 0xa1, 0x03, 0x45, 0x22, 0xdc, 0xc5, 0x14, 0x01, 0x07, 0xf1, 0x04, 0x85, 0x01, 0x42, 0x19, 0x04, 0xc7, 0x14, 0x01, 0x05, 0xdb, - 0x02, 0x50, 0x0b, 0x5b, 0x70, 0x01, 0xff, 0xa1, 0x3d, 0xe5, 0xb9, 0x14, + 0x02, 0x50, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xa1, 0x3d, 0xe5, 0xb9, 0x14, 0x01, 0xe9, 0xb1, 0x14, 0x81, 0x30, 0xef, 0xbc, 0x14, 0x01, 0x06, 0x1c, - 0x33, 0x20, 0xf5, 0xb3, 0x14, 0x81, 0x17, 0x08, 0x76, 0xb7, 0x01, 0xff, + 0x33, 0x20, 0xf5, 0xb3, 0x14, 0x81, 0x17, 0x08, 0x92, 0xb7, 0x01, 0xff, 0xec, 0xb7, 0x14, 0x81, 0x09, 0xf2, 0xb5, 0x14, 0xc1, 0x00, 0xf2, 0xb6, 0x14, 0x41, 0xec, 0xb8, 0x14, 0x41, 0xf5, 0xb4, 0x14, 0x41, 0xe5, 0xba, 0x14, 0x01, 0xef, 0xbd, 0x14, 0x41, 0xe9, 0xb2, 0x14, 0x41, 0xe1, 0xb0, 0x14, 0x01, 0xe9, 0xbb, 0x14, 0x01, 0xf5, 0xbe, 0x14, 0x41, 0xa1, 0x1d, - 0x4b, 0x3b, 0x21, 0xbf, 0x14, 0x01, 0x45, 0xab, 0x3a, 0xc3, 0x14, 0x01, + 0x4b, 0x3b, 0x21, 0xbf, 0x14, 0x01, 0x45, 0xc0, 0x3a, 0xc3, 0x14, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x49, 0x21, 0xc2, 0x14, 0x01, 0x45, - 0x69, 0x46, 0xc1, 0x14, 0x41, 0x47, 0x5c, 0x14, 0xc0, 0x14, 0x01, 0x47, - 0x3a, 0x81, 0xc4, 0x14, 0x41, 0xe1, 0x81, 0x14, 0x81, 0xff, 0x01, 0xa2, + 0x7e, 0x46, 0xc1, 0x14, 0x41, 0x47, 0x5c, 0x14, 0xc0, 0x14, 0x01, 0x47, + 0x41, 0x81, 0xc4, 0x14, 0x41, 0xe1, 0x81, 0x14, 0x81, 0xff, 0x01, 0xa2, 0xf2, 0x01, 0xa3, 0xe5, 0x01, 0xa4, 0xcc, 0x01, 0xe5, 0x8b, 0x14, 0x01, 0xa7, 0xbb, 0x01, 0x42, 0x22, 0x00, 0xaf, 0x14, 0x01, 0xe9, 0x83, 0x14, 0x81, 0xab, 0x01, 0xaa, 0x9e, 0x01, 0xab, 0x91, 0x01, 0x42, 0x74, 0x00, 0xaa, 0x14, 0x01, 0x42, 0x6c, 0x00, 0xa7, 0x14, 0x01, 0xae, 0x6d, 0xef, 0x8d, 0x14, 0x01, 0xb0, 0x5d, 0x42, 0x71, 0x00, 0xa9, 0x14, 0x01, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, 0x85, 0x14, 0x81, 0x23, 0xb6, 0x06, 0x42, 0x20, - 0x20, 0xa8, 0x14, 0x41, 0xe1, 0xab, 0x14, 0x01, 0x07, 0x77, 0xb7, 0x01, + 0x20, 0xa8, 0x14, 0x41, 0xe1, 0xab, 0x14, 0x01, 0x07, 0x93, 0xb7, 0x01, 0xff, 0xec, 0x89, 0x14, 0x81, 0x09, 0xf2, 0x87, 0x14, 0xc1, 0x00, 0xf2, 0x88, 0x14, 0x41, 0xec, 0x8a, 0x14, 0x41, 0xf5, 0x86, 0x14, 0x41, 0xe1, 0x9e, 0x14, 0x01, 0x42, 0x22, 0x00, 0x9f, 0x14, 0x01, 0xb4, 0x01, 0xff, @@ -2360,21 +2361,21 @@ static const unsigned char uname2c_tree[210697] = { 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xd0, 0x14, 0x41, 0x44, 0x25, 0x01, 0xd3, 0x14, 0x01, 0x42, 0x15, 0x02, 0xd2, 0x14, 0x41, 0x44, 0x96, 0x1b, 0xd7, 0x14, 0x01, 0x42, 0x30, 0x27, 0xd6, 0x14, 0x41, 0x43, 0xd7, 0x04, 0xd5, - 0x14, 0x01, 0x43, 0xfb, 0x05, 0xd4, 0x14, 0x41, 0x50, 0x35, 0x52, 0xc6, - 0x14, 0x01, 0x43, 0xff, 0x7f, 0x80, 0x14, 0x41, 0x62, 0x8c, 0x0a, 0x3a, + 0x14, 0x01, 0x43, 0xfb, 0x05, 0xd4, 0x14, 0x41, 0x50, 0x4a, 0x52, 0xc6, + 0x14, 0x01, 0x43, 0x06, 0x80, 0x80, 0x14, 0x41, 0x62, 0x8c, 0x0a, 0x3a, 0x0b, 0x41, 0x47, 0x0b, 0x19, 0xf2, 0x23, 0x00, 0x07, 0x72, 0x29, 0x01, - 0xff, 0x4f, 0xa3, 0x68, 0xd4, 0x29, 0x00, 0x50, 0x59, 0x60, 0xd5, 0x29, + 0xff, 0x4f, 0xb8, 0x68, 0xd4, 0x29, 0x00, 0x50, 0x6e, 0x60, 0xd5, 0x29, 0x40, 0x80, 0x01, 0xff, 0x48, 0x4b, 0x1b, 0x3c, 0x22, 0x80, 0x1b, 0x05, - 0x51, 0x00, 0x01, 0xff, 0x04, 0x9f, 0x0a, 0x06, 0x4a, 0x91, 0xa7, 0x1b, + 0x51, 0x00, 0x01, 0xff, 0x04, 0x9f, 0x0a, 0x06, 0x4a, 0xa4, 0xa7, 0x1b, 0x2e, 0x40, 0x45, 0x5c, 0x00, 0x1e, 0x2e, 0x00, 0x45, 0x25, 0x06, 0x1f, 0x2e, 0x40, 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x11, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x49, 0xec, 0x1b, 0x6a, 0x2a, 0x00, 0x4b, 0xdf, 0x99, 0x6b, + 0x01, 0xff, 0x49, 0xec, 0x1b, 0x6a, 0x2a, 0x00, 0x4b, 0xf2, 0x99, 0x6b, 0x2a, 0x40, 0x4f, 0x67, 0x06, 0x49, 0x2b, 0x00, 0x50, 0xb3, 0x02, 0x72, 0x29, 0x40, 0x42, 0x33, 0x00, 0x05, 0xf4, 0x81, 0x06, 0x57, 0x3f, 0x2b, - 0x45, 0x27, 0x40, 0x45, 0xec, 0x06, 0x2f, 0xf4, 0x41, 0x50, 0x69, 0x5b, + 0x45, 0x27, 0x40, 0x45, 0xec, 0x06, 0x2f, 0xf4, 0x41, 0x50, 0x7e, 0x5b, 0x7f, 0x2d, 0x00, 0x07, 0xf1, 0x04, 0x0c, 0x62, 0xf2, 0x0a, 0x6f, 0x2d, - 0x00, 0x4e, 0x36, 0x75, 0x70, 0x2d, 0x40, 0xa1, 0x82, 0x02, 0x11, 0xef, - 0x52, 0xf5, 0x01, 0xb4, 0xc0, 0x01, 0xb9, 0x01, 0xff, 0xe1, 0x30, 0x2d, + 0x00, 0x4e, 0x4b, 0x75, 0x70, 0x2d, 0x40, 0xa1, 0x82, 0x02, 0x11, 0x04, + 0x53, 0xf5, 0x01, 0xb4, 0xc0, 0x01, 0xb9, 0x01, 0xff, 0xe1, 0x30, 0x2d, 0x80, 0x15, 0xe5, 0x66, 0x2d, 0x80, 0x0c, 0xe9, 0x49, 0x2d, 0x00, 0xef, 0x67, 0x2d, 0x00, 0xf5, 0x53, 0x2d, 0x40, 0xf9, 0x3b, 0x2d, 0x40, 0xe1, 0x44, 0x2d, 0x00, 0xe2, 0x31, 0x2d, 0x80, 0x95, 0x01, 0x42, 0x98, 0x14, @@ -2390,33 +2391,33 @@ static const unsigned char uname2c_tree[210697] = { 0x55, 0x2d, 0x40, 0xe8, 0x45, 0x2d, 0xc0, 0x00, 0xe8, 0x3f, 0x2d, 0x40, 0xe8, 0x43, 0x2d, 0x40, 0xe8, 0x56, 0x2d, 0xc0, 0x00, 0xe8, 0x34, 0x2d, 0x40, 0xe4, 0x39, 0x2d, 0x80, 0x04, 0xe8, 0x38, 0x2d, 0x40, 0xe8, 0x3a, - 0x2d, 0x40, 0xe8, 0x32, 0x2d, 0x40, 0x4d, 0xf1, 0x79, 0x64, 0x2d, 0x00, - 0x08, 0xcd, 0xc1, 0x01, 0xff, 0xa7, 0x1d, 0xe8, 0x42, 0x2d, 0x00, 0xeb, + 0x2d, 0x40, 0xe8, 0x32, 0x2d, 0x40, 0x4d, 0xf8, 0x79, 0x64, 0x2d, 0x00, + 0x08, 0xe9, 0xc1, 0x01, 0xff, 0xa7, 0x1d, 0xe8, 0x42, 0x2d, 0x00, 0xeb, 0x3e, 0x2d, 0x80, 0x10, 0x42, 0x1d, 0x01, 0x51, 0x2d, 0x00, 0xf1, 0x48, 0x2d, 0x00, 0x42, 0x6d, 0x25, 0x4c, 0x2d, 0x40, 0xe8, 0x46, 0x2d, 0x40, 0xe8, 0x57, 0x2d, 0x00, 0xee, 0x50, 0x2d, 0x40, 0xe8, 0x41, 0x2d, 0x00, - 0xea, 0x35, 0x2d, 0x40, 0x4b, 0x80, 0x94, 0x4b, 0x2d, 0x00, 0x48, 0xbd, - 0xc2, 0x58, 0x2d, 0x40, 0x12, 0xab, 0x4a, 0x9d, 0x0b, 0x12, 0x17, 0x4b, - 0x80, 0x0b, 0x06, 0xf4, 0x05, 0xf3, 0x09, 0x49, 0xc4, 0xb1, 0xbe, 0x0f, + 0xea, 0x35, 0x2d, 0x40, 0x4b, 0x93, 0x94, 0x4b, 0x2d, 0x00, 0x48, 0xd9, + 0xc2, 0x58, 0x2d, 0x40, 0x12, 0xc0, 0x4a, 0x9d, 0x0b, 0x12, 0x2c, 0x4b, + 0x80, 0x0b, 0x06, 0xf4, 0x05, 0xf3, 0x09, 0x49, 0xe0, 0xb1, 0xbe, 0x0f, 0x80, 0xe5, 0x09, 0xac, 0xbf, 0x07, 0x05, 0xb9, 0x00, 0xf6, 0x04, 0xb3, - 0x51, 0x0b, 0x5b, 0x70, 0x01, 0xff, 0x42, 0xda, 0x10, 0x71, 0x0f, 0x00, + 0x51, 0x0b, 0x70, 0x70, 0x01, 0xff, 0x42, 0xda, 0x10, 0x71, 0x0f, 0x00, 0xe5, 0x7a, 0x0f, 0x80, 0x3d, 0xe9, 0x72, 0x0f, 0x80, 0x34, 0xef, 0x7c, - 0x0f, 0x80, 0x2b, 0x4a, 0x55, 0xa7, 0x80, 0x0f, 0x80, 0x20, 0xf5, 0x74, - 0x0f, 0x80, 0x17, 0x08, 0x76, 0xb7, 0x01, 0xff, 0xec, 0x78, 0x0f, 0x80, + 0x0f, 0x80, 0x2b, 0x4a, 0x68, 0xa7, 0x80, 0x0f, 0x80, 0x20, 0xf5, 0x74, + 0x0f, 0x80, 0x17, 0x08, 0x92, 0xb7, 0x01, 0xff, 0xec, 0x78, 0x0f, 0x80, 0x09, 0xf2, 0x76, 0x0f, 0xc0, 0x00, 0xf2, 0x77, 0x0f, 0x40, 0xec, 0x79, 0x0f, 0x40, 0xf5, 0x75, 0x0f, 0x40, 0xe9, 0x81, 0x0f, 0x40, 0xef, 0x7d, 0x0f, 0x40, 0xe9, 0x73, 0x0f, 0x40, 0xe5, 0x7b, 0x0f, 0x40, 0x04, 0xdc, - 0x02, 0xfd, 0x02, 0x09, 0x79, 0x61, 0x4b, 0xb9, 0x01, 0xff, 0x49, 0x42, - 0xb2, 0x00, 0x0f, 0x00, 0x05, 0x80, 0x14, 0x01, 0xff, 0x47, 0x5a, 0xc6, - 0xc4, 0x0f, 0x00, 0x46, 0xe5, 0xd3, 0xc9, 0x0f, 0x80, 0x1b, 0xb0, 0x0d, - 0x47, 0xf2, 0xca, 0xc5, 0x0f, 0xc0, 0x00, 0x4a, 0xa5, 0x9d, 0xc7, 0x0f, - 0x40, 0x49, 0x99, 0xac, 0xc6, 0x0f, 0x00, 0x46, 0x3b, 0xd2, 0xc8, 0x0f, - 0x40, 0x80, 0x01, 0xff, 0x4b, 0xcb, 0x91, 0xcc, 0x0f, 0x00, 0x4b, 0x6a, - 0x94, 0xcb, 0x0f, 0x00, 0x4b, 0x3d, 0x98, 0xca, 0x0f, 0x40, 0x07, 0xf1, - 0x04, 0x17, 0x05, 0xdb, 0x02, 0x01, 0xff, 0x51, 0x97, 0x55, 0x8f, 0x0f, - 0x00, 0x4b, 0x2d, 0x96, 0x8d, 0x0f, 0x00, 0x48, 0xa0, 0x55, 0x8e, 0x0f, + 0x02, 0xfd, 0x02, 0x09, 0x8e, 0x61, 0x4b, 0xb9, 0x01, 0xff, 0x49, 0x5e, + 0xb2, 0x00, 0x0f, 0x00, 0x05, 0x80, 0x14, 0x01, 0xff, 0x47, 0x76, 0xc6, + 0xc4, 0x0f, 0x00, 0x46, 0x01, 0xd4, 0xc9, 0x0f, 0x80, 0x1b, 0xb0, 0x0d, + 0x47, 0x0e, 0xcb, 0xc5, 0x0f, 0xc0, 0x00, 0x4a, 0xb8, 0x9d, 0xc7, 0x0f, + 0x40, 0x49, 0xac, 0xac, 0xc6, 0x0f, 0x00, 0x46, 0x57, 0xd2, 0xc8, 0x0f, + 0x40, 0x80, 0x01, 0xff, 0x4b, 0xde, 0x91, 0xcc, 0x0f, 0x00, 0x4b, 0x7d, + 0x94, 0xcb, 0x0f, 0x00, 0x4b, 0x50, 0x98, 0xca, 0x0f, 0x40, 0x07, 0xf1, + 0x04, 0x17, 0x05, 0xdb, 0x02, 0x01, 0xff, 0x51, 0xac, 0x55, 0x8f, 0x0f, + 0x00, 0x4b, 0x40, 0x96, 0x8d, 0x0f, 0x00, 0x48, 0xb5, 0x55, 0x8e, 0x0f, 0x40, 0x42, 0x1a, 0x23, 0xb0, 0x0f, 0x00, 0xe1, 0xb8, 0x0f, 0x00, 0xa2, - 0xfc, 0x01, 0xa3, 0xef, 0x01, 0xa4, 0xc9, 0x01, 0x0b, 0xec, 0x7b, 0xb2, + 0xfc, 0x01, 0xa3, 0xef, 0x01, 0xa4, 0xc9, 0x01, 0x0b, 0xf3, 0x7b, 0xb2, 0x01, 0xa7, 0xa5, 0x01, 0x42, 0x22, 0x00, 0xb7, 0x0f, 0x00, 0x42, 0x77, 0x24, 0x97, 0x0f, 0x00, 0xab, 0x86, 0x01, 0x42, 0x74, 0x00, 0xb3, 0x0f, 0x00, 0x42, 0x6c, 0x00, 0xa8, 0x0f, 0x00, 0xae, 0x62, 0xb0, 0x56, 0x42, @@ -2438,50 +2439,50 @@ static const unsigned char uname2c_tree[210697] = { 0x42, 0x22, 0x00, 0xac, 0x0f, 0x40, 0xe1, 0x9c, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x9d, 0x0f, 0x40, 0xe1, 0x95, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x96, 0x0f, 0x40, 0xe1, 0xa6, 0x0f, 0x00, 0x42, 0x22, 0x00, 0xa7, 0x0f, 0x40, - 0x04, 0x12, 0xe5, 0x90, 0x01, 0x51, 0x97, 0x55, 0x8c, 0x0f, 0x00, 0x02, - 0xf9, 0x1c, 0x7a, 0xad, 0x6c, 0x4e, 0x5a, 0x73, 0x82, 0x0f, 0x00, 0xb2, - 0x17, 0x48, 0x0d, 0xc1, 0x83, 0x0f, 0x00, 0x02, 0x20, 0x20, 0x01, 0xff, - 0x48, 0xd5, 0xbe, 0x87, 0x0f, 0x00, 0x47, 0xc6, 0xb9, 0x3e, 0x0f, 0x40, - 0x04, 0xf8, 0xb4, 0x0c, 0x4d, 0x99, 0x7d, 0x7e, 0x0f, 0x00, 0x48, 0x0d, - 0x8d, 0x7f, 0x0f, 0x40, 0x05, 0xe4, 0xda, 0x1f, 0x04, 0x42, 0xe6, 0x01, - 0xff, 0xa7, 0x06, 0x49, 0xf7, 0xb4, 0xce, 0x0f, 0x40, 0x43, 0xd6, 0xe8, - 0x1d, 0x0f, 0x00, 0x44, 0x3d, 0x98, 0x1e, 0x0f, 0x00, 0x43, 0x5c, 0x50, - 0xcf, 0x0f, 0x40, 0xa7, 0x06, 0x48, 0x55, 0xc0, 0x1f, 0x0f, 0x40, 0x43, - 0xd6, 0xe8, 0x1a, 0x0f, 0x00, 0x44, 0x3d, 0x98, 0x1b, 0x0f, 0x00, 0x43, - 0x5c, 0x50, 0x1c, 0x0f, 0x40, 0x48, 0xc5, 0xb9, 0x3f, 0x0f, 0x00, 0x47, - 0xa1, 0x55, 0x89, 0x0f, 0x40, 0x49, 0x2f, 0x96, 0x88, 0x0f, 0x00, 0x47, - 0x80, 0xc7, 0x86, 0x0f, 0x40, 0x4b, 0xd6, 0x91, 0x8a, 0x0f, 0x00, 0x4b, - 0x40, 0x97, 0x8b, 0x0f, 0x40, 0x0c, 0xcc, 0x84, 0xb3, 0x02, 0xa2, 0x88, + 0x04, 0x2e, 0xe5, 0x90, 0x01, 0x51, 0xac, 0x55, 0x8c, 0x0f, 0x00, 0x02, + 0xf9, 0x1c, 0x7a, 0xad, 0x6c, 0x4e, 0x6f, 0x73, 0x82, 0x0f, 0x00, 0xb2, + 0x17, 0x48, 0x29, 0xc1, 0x83, 0x0f, 0x00, 0x02, 0x20, 0x20, 0x01, 0xff, + 0x48, 0xf1, 0xbe, 0x87, 0x0f, 0x00, 0x47, 0xe2, 0xb9, 0x3e, 0x0f, 0x40, + 0x04, 0x14, 0xb5, 0x0c, 0x4d, 0xa0, 0x7d, 0x7e, 0x0f, 0x00, 0x48, 0x14, + 0x8d, 0x7f, 0x0f, 0x40, 0x05, 0x00, 0xdb, 0x1f, 0x04, 0x5e, 0xe6, 0x01, + 0xff, 0xa7, 0x06, 0x49, 0x13, 0xb5, 0xce, 0x0f, 0x40, 0x43, 0xf2, 0xe8, + 0x1d, 0x0f, 0x00, 0x44, 0x50, 0x98, 0x1e, 0x0f, 0x00, 0x43, 0x71, 0x50, + 0xcf, 0x0f, 0x40, 0xa7, 0x06, 0x48, 0x71, 0xc0, 0x1f, 0x0f, 0x40, 0x43, + 0xf2, 0xe8, 0x1a, 0x0f, 0x00, 0x44, 0x50, 0x98, 0x1b, 0x0f, 0x00, 0x43, + 0x71, 0x50, 0x1c, 0x0f, 0x40, 0x48, 0xe1, 0xb9, 0x3f, 0x0f, 0x00, 0x47, + 0xb6, 0x55, 0x89, 0x0f, 0x40, 0x49, 0x42, 0x96, 0x88, 0x0f, 0x00, 0x47, + 0x9c, 0xc7, 0x86, 0x0f, 0x40, 0x4b, 0xe9, 0x91, 0x8a, 0x0f, 0x00, 0x4b, + 0x53, 0x97, 0x8b, 0x0f, 0x40, 0x0c, 0xd3, 0x84, 0xb3, 0x02, 0xa2, 0x88, 0x02, 0xa3, 0xd4, 0x01, 0x55, 0xdf, 0x35, 0x0c, 0x0f, 0x00, 0xa7, 0x95, - 0x01, 0x47, 0x41, 0xc7, 0x84, 0x0f, 0x00, 0x02, 0x9e, 0x01, 0x75, 0x53, - 0x3e, 0x45, 0xd9, 0x0f, 0x00, 0x56, 0x90, 0x31, 0xd1, 0x0f, 0x00, 0xae, - 0x3f, 0x46, 0x75, 0xd4, 0x85, 0x0f, 0x00, 0xb2, 0x2b, 0xb3, 0x1d, 0xb4, - 0x06, 0x55, 0xcb, 0x3a, 0x07, 0x0f, 0x40, 0x53, 0xe0, 0x46, 0xda, 0x0f, - 0x00, 0xb3, 0x01, 0xff, 0x47, 0x54, 0xc4, 0x39, 0x0f, 0x00, 0x48, 0xd5, - 0x3a, 0x0f, 0x0f, 0x40, 0x49, 0xd4, 0xad, 0x08, 0x0f, 0x00, 0x43, 0xa5, - 0x02, 0x0d, 0x0f, 0x40, 0x4d, 0x61, 0x7c, 0x12, 0x0f, 0x00, 0x53, 0xb9, - 0x44, 0x11, 0x0f, 0x40, 0x0a, 0x19, 0xa2, 0x18, 0x04, 0x3e, 0x98, 0x01, + 0x01, 0x47, 0x5d, 0xc7, 0x84, 0x0f, 0x00, 0x02, 0x9e, 0x01, 0x75, 0x53, + 0x53, 0x45, 0xd9, 0x0f, 0x00, 0x56, 0x90, 0x31, 0xd1, 0x0f, 0x00, 0xae, + 0x3f, 0x46, 0x91, 0xd4, 0x85, 0x0f, 0x00, 0xb2, 0x2b, 0xb3, 0x1d, 0xb4, + 0x06, 0x55, 0xe0, 0x3a, 0x07, 0x0f, 0x40, 0x53, 0xf5, 0x46, 0xda, 0x0f, + 0x00, 0xb3, 0x01, 0xff, 0x47, 0x70, 0xc4, 0x39, 0x0f, 0x00, 0x48, 0xea, + 0x3a, 0x0f, 0x0f, 0x40, 0x49, 0xe7, 0xad, 0x08, 0x0f, 0x00, 0x43, 0xa5, + 0x02, 0x0d, 0x0f, 0x40, 0x4d, 0x68, 0x7c, 0x12, 0x0f, 0x00, 0x53, 0xce, + 0x44, 0x11, 0x0f, 0x40, 0x0a, 0x2c, 0xa2, 0x18, 0x04, 0x51, 0x98, 0x01, 0xff, 0x44, 0xa4, 0x02, 0x0e, 0x0f, 0x00, 0x45, 0xe9, 0x35, 0xd2, 0x0f, - 0xc0, 0x00, 0x45, 0xa1, 0x03, 0x10, 0x0f, 0x40, 0x47, 0x5a, 0x73, 0x35, - 0x0f, 0x00, 0x4a, 0x1d, 0xa8, 0x37, 0x0f, 0x40, 0x06, 0xd9, 0x14, 0x06, - 0x51, 0x61, 0x58, 0x0b, 0x0f, 0x40, 0x5b, 0x44, 0x18, 0xd3, 0x0f, 0x00, - 0x4f, 0x50, 0x18, 0x04, 0x0f, 0x40, 0x04, 0xf4, 0x04, 0x11, 0x0b, 0xc3, + 0xc0, 0x00, 0x45, 0xa1, 0x03, 0x10, 0x0f, 0x40, 0x47, 0x6f, 0x73, 0x35, + 0x0f, 0x00, 0x4a, 0x30, 0xa8, 0x37, 0x0f, 0x40, 0x06, 0xd9, 0x14, 0x06, + 0x51, 0x76, 0x58, 0x0b, 0x0f, 0x40, 0x5b, 0x44, 0x18, 0xd3, 0x0f, 0x00, + 0x4f, 0x50, 0x18, 0x04, 0x0f, 0x40, 0x04, 0xf4, 0x04, 0x11, 0x0b, 0xd6, 0x9b, 0x01, 0xff, 0x42, 0xbb, 0x01, 0x3b, 0x0f, 0x00, 0x42, 0x10, 0x00, 0x3a, 0x0f, 0x40, 0x45, 0xe9, 0x35, 0x14, 0x0f, 0x00, 0x08, 0x50, 0x18, - 0x01, 0xff, 0x04, 0xd2, 0xe1, 0x06, 0x4b, 0x81, 0x9b, 0x01, 0x0f, 0x40, - 0x4d, 0x54, 0x7c, 0x03, 0x0f, 0x00, 0x4c, 0x0c, 0x8d, 0x02, 0x0f, 0x40, - 0x05, 0xe2, 0x91, 0x17, 0x46, 0xf9, 0xd1, 0x38, 0x0f, 0x00, 0x07, 0x1b, + 0x01, 0xff, 0x04, 0xee, 0xe1, 0x06, 0x4b, 0x94, 0x9b, 0x01, 0x0f, 0x40, + 0x4d, 0x5b, 0x7c, 0x03, 0x0f, 0x00, 0x4c, 0x13, 0x8d, 0x02, 0x0f, 0x40, + 0x05, 0xf5, 0x91, 0x17, 0x46, 0x15, 0xd2, 0x38, 0x0f, 0x00, 0x07, 0x22, 0x7e, 0x01, 0xff, 0x5b, 0x5f, 0x18, 0xd4, 0x0f, 0x00, 0x4f, 0x6b, 0x18, - 0x05, 0x0f, 0x40, 0x0c, 0x24, 0x84, 0x06, 0x54, 0xac, 0x41, 0x06, 0x0f, - 0x40, 0x4c, 0x5f, 0x78, 0x36, 0x0f, 0x00, 0x4b, 0x35, 0x97, 0x13, 0x0f, - 0x40, 0x09, 0x97, 0xb1, 0x18, 0xb3, 0x01, 0xff, 0x49, 0xb5, 0xae, 0x34, - 0x0f, 0x00, 0xab, 0x01, 0xff, 0x54, 0x6c, 0x3b, 0xd0, 0x0f, 0x00, 0x4a, - 0x11, 0xaa, 0x09, 0x0f, 0x40, 0x4c, 0x9a, 0x31, 0xd0, 0x0f, 0x00, 0x47, + 0x05, 0x0f, 0x40, 0x0c, 0x2b, 0x84, 0x06, 0x54, 0xc1, 0x41, 0x06, 0x0f, + 0x40, 0x4c, 0x66, 0x78, 0x36, 0x0f, 0x00, 0x4b, 0x48, 0x97, 0x13, 0x0f, + 0x40, 0x09, 0xb3, 0xb1, 0x18, 0xb3, 0x01, 0xff, 0x49, 0xd1, 0xae, 0x34, + 0x0f, 0x00, 0xab, 0x01, 0xff, 0x54, 0x81, 0x3b, 0xd0, 0x0f, 0x00, 0x4a, + 0x24, 0xaa, 0x09, 0x0f, 0x40, 0x4c, 0x9a, 0x31, 0xd0, 0x0f, 0x00, 0x47, 0x50, 0x18, 0x0a, 0x0f, 0x40, 0x42, 0xbb, 0x01, 0x3d, 0x0f, 0x00, 0x42, - 0x10, 0x00, 0x3c, 0x0f, 0x40, 0x06, 0xf2, 0x04, 0x11, 0x0d, 0x60, 0x7f, - 0x01, 0xff, 0x4a, 0x07, 0xa0, 0x15, 0x0f, 0x00, 0x4a, 0x5d, 0xa4, 0x16, + 0x10, 0x00, 0x3c, 0x0f, 0x40, 0x06, 0xf2, 0x04, 0x11, 0x0d, 0x67, 0x7f, + 0x01, 0xff, 0x4a, 0x1a, 0xa0, 0x15, 0x0f, 0x00, 0x4a, 0x70, 0xa4, 0x16, 0x0f, 0x40, 0x42, 0x1a, 0x23, 0x60, 0x0f, 0x00, 0xe1, 0x68, 0x0f, 0x00, - 0xa2, 0xf7, 0x01, 0xa3, 0xea, 0x01, 0xa4, 0xc4, 0x01, 0x4d, 0xec, 0x7b, + 0xa2, 0xf7, 0x01, 0xa3, 0xea, 0x01, 0xa4, 0xc4, 0x01, 0x4d, 0xf3, 0x7b, 0x6a, 0x0f, 0x00, 0xa7, 0xb1, 0x01, 0x42, 0x22, 0x00, 0x67, 0x0f, 0x00, 0x42, 0x77, 0x24, 0x47, 0x0f, 0x00, 0xab, 0x8c, 0x01, 0x42, 0x74, 0x00, 0x63, 0x0f, 0x00, 0x42, 0x6c, 0x00, 0x58, 0x0f, 0x00, 0xae, 0x68, 0xb0, @@ -2502,7 +2503,7 @@ static const unsigned char uname2c_tree[210697] = { 0x00, 0xba, 0x01, 0xff, 0xe1, 0x5b, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x5c, 0x0f, 0x40, 0xe1, 0x4c, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x4d, 0x0f, 0x40, 0xe1, 0x45, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x46, 0x0f, 0x40, 0xe1, 0x56, - 0x0f, 0x00, 0x42, 0x22, 0x00, 0x57, 0x0f, 0x40, 0x4d, 0x5e, 0x78, 0xbf, + 0x0f, 0x00, 0x42, 0x22, 0x00, 0x57, 0x0f, 0x40, 0x4d, 0x65, 0x78, 0xbf, 0x0f, 0x40, 0x45, 0xd1, 0x09, 0x28, 0x0f, 0x00, 0xa6, 0x74, 0x05, 0x22, 0x00, 0x2e, 0x44, 0xb8, 0x27, 0x29, 0x0f, 0x00, 0x43, 0xcd, 0x09, 0x21, 0x0f, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x20, 0x0f, 0x40, @@ -2514,186 +2515,186 @@ static const unsigned char uname2c_tree[210697] = { 0x42, 0x15, 0x02, 0x2b, 0x0f, 0x40, 0x44, 0x96, 0x1b, 0x30, 0x0f, 0x00, 0x42, 0x30, 0x27, 0x2f, 0x0f, 0x40, 0x43, 0xd7, 0x04, 0x2e, 0x0f, 0x00, 0x43, 0xfb, 0x05, 0x2d, 0x0f, 0x40, 0x43, 0xd7, 0x04, 0x25, 0x0f, 0x00, - 0x43, 0xfb, 0x05, 0x24, 0x0f, 0x40, 0x49, 0xdd, 0xad, 0xc2, 0x0f, 0x00, - 0x4a, 0x91, 0xa2, 0xc0, 0x0f, 0x00, 0x4a, 0x67, 0xa4, 0xc1, 0x0f, 0x00, - 0x4a, 0xf5, 0xa7, 0xc3, 0x0f, 0x40, 0x49, 0x09, 0xac, 0x18, 0x0f, 0x00, - 0xb3, 0x01, 0xff, 0x4b, 0x0a, 0x93, 0x19, 0x0f, 0x00, 0x54, 0xc4, 0x3d, + 0x43, 0xfb, 0x05, 0x24, 0x0f, 0x40, 0x49, 0xf9, 0xad, 0xc2, 0x0f, 0x00, + 0x4a, 0xa4, 0xa2, 0xc0, 0x0f, 0x00, 0x4a, 0x7a, 0xa4, 0xc1, 0x0f, 0x00, + 0x4a, 0x08, 0xa8, 0xc3, 0x0f, 0x40, 0x49, 0x1c, 0xac, 0x18, 0x0f, 0x00, + 0xb3, 0x01, 0xff, 0x4b, 0x1d, 0x93, 0x19, 0x0f, 0x00, 0x54, 0xd9, 0x3d, 0x17, 0x0f, 0x40, 0xa1, 0xb7, 0x02, 0x02, 0x33, 0x00, 0x8b, 0x02, 0xa9, 0xe3, 0x01, 0xaf, 0xd4, 0x01, 0x03, 0x26, 0x01, 0x24, 0xb5, 0x01, 0xff, - 0x04, 0xa2, 0x89, 0x11, 0x04, 0xa1, 0x18, 0x01, 0xff, 0x4f, 0xd6, 0x62, - 0xc8, 0x26, 0x00, 0x45, 0x3e, 0xe0, 0x08, 0x26, 0x40, 0x49, 0x9a, 0xae, - 0x4e, 0xf4, 0x01, 0x47, 0x9d, 0xcc, 0x4d, 0xf4, 0x41, 0x80, 0x41, 0x8d, - 0x01, 0xff, 0x02, 0x06, 0x00, 0x0c, 0x47, 0x16, 0xb9, 0x3b, 0x2e, 0x00, - 0x4c, 0x3c, 0x79, 0x04, 0x20, 0x40, 0x63, 0x74, 0x09, 0xa3, 0x27, 0x00, + 0x04, 0xa9, 0x89, 0x11, 0x04, 0xa1, 0x18, 0x01, 0xff, 0x4f, 0xeb, 0x62, + 0xc8, 0x26, 0x00, 0x45, 0x5a, 0xe0, 0x08, 0x26, 0x40, 0x49, 0xb6, 0xae, + 0x4e, 0xf4, 0x01, 0x47, 0xb9, 0xcc, 0x4d, 0xf4, 0x41, 0x80, 0x41, 0x8d, + 0x01, 0xff, 0x02, 0x06, 0x00, 0x0c, 0x47, 0x32, 0xb9, 0x3b, 0x2e, 0x00, + 0x4c, 0x43, 0x79, 0x04, 0x20, 0x40, 0x63, 0x74, 0x09, 0xa3, 0x27, 0x00, 0x6c, 0xbe, 0x01, 0x9b, 0x2b, 0x00, 0x6b, 0x42, 0x02, 0x99, 0x2b, 0x00, - 0x0c, 0x20, 0x8e, 0x01, 0xff, 0x5f, 0xc6, 0x0f, 0x98, 0x2b, 0x00, 0x0b, + 0x0c, 0x33, 0x8e, 0x01, 0xff, 0x5f, 0xc6, 0x0f, 0x98, 0x2b, 0x00, 0x0b, 0xb3, 0x02, 0x01, 0xff, 0x49, 0xe1, 0x01, 0xa2, 0x27, 0x00, 0x55, 0xd5, - 0x01, 0x9a, 0x2b, 0x40, 0x4c, 0x8c, 0x85, 0xb1, 0xf5, 0x01, 0x58, 0xdf, - 0x24, 0x76, 0x2a, 0x00, 0xa4, 0x4f, 0xac, 0x36, 0x53, 0x0f, 0x46, 0xa7, - 0xf5, 0x01, 0x52, 0xbd, 0x28, 0xc2, 0xf7, 0x01, 0xb2, 0x06, 0x4e, 0xa6, - 0x75, 0xeb, 0xf5, 0x41, 0x04, 0xc1, 0x40, 0x06, 0x50, 0xa2, 0x2b, 0xf6, + 0x01, 0x9a, 0x2b, 0x40, 0x4c, 0x93, 0x85, 0xb1, 0xf5, 0x01, 0x58, 0xdf, + 0x24, 0x76, 0x2a, 0x00, 0xa4, 0x4f, 0xac, 0x36, 0x53, 0x24, 0x46, 0xa7, + 0xf5, 0x01, 0x52, 0xbd, 0x28, 0xc2, 0xf7, 0x01, 0xb2, 0x06, 0x4e, 0xbb, + 0x75, 0xeb, 0xf5, 0x41, 0x04, 0xd6, 0x40, 0x06, 0x50, 0xa2, 0x2b, 0xf6, 0x21, 0x40, 0x45, 0x5c, 0x00, 0xe4, 0xf5, 0x01, 0x45, 0x25, 0x06, 0xe5, 0xf5, 0x01, 0x44, 0xc3, 0x00, 0xe6, 0xf5, 0x01, 0x45, 0xc8, 0x00, 0xe7, - 0xf5, 0x41, 0x4f, 0xac, 0x39, 0x31, 0x2b, 0x00, 0x10, 0xc9, 0x5d, 0x01, + 0xf5, 0x41, 0x4f, 0xc1, 0x39, 0x31, 0x2b, 0x00, 0x10, 0xde, 0x5d, 0x01, 0xff, 0x44, 0xc3, 0x00, 0x9f, 0x26, 0x00, 0x45, 0xc8, 0x00, 0x9e, 0x26, - 0x40, 0x50, 0x99, 0x5d, 0xc0, 0x27, 0x00, 0x4e, 0xa0, 0x0a, 0x56, 0x20, - 0x40, 0x49, 0xed, 0xb2, 0x74, 0xfa, 0x01, 0x4c, 0x5c, 0x8e, 0xad, 0xf4, - 0x41, 0xae, 0x06, 0x4e, 0xaa, 0x74, 0x49, 0xf9, 0x41, 0x80, 0x06, 0x49, - 0xa6, 0xa7, 0x14, 0xf9, 0x41, 0x4b, 0x1e, 0x5b, 0xa1, 0xf7, 0x01, 0xb3, - 0x01, 0xff, 0x46, 0x16, 0x17, 0xa8, 0xf7, 0x01, 0x44, 0x4e, 0x47, 0x09, - 0x20, 0x40, 0xa5, 0x11, 0x02, 0x08, 0x07, 0x01, 0xff, 0x47, 0x68, 0xc6, - 0xe7, 0x29, 0x00, 0x45, 0xa0, 0xa2, 0x21, 0xf3, 0x41, 0x80, 0x06, 0x44, - 0x6a, 0x5c, 0x34, 0x22, 0x40, 0x4e, 0x20, 0x70, 0x04, 0x22, 0x00, 0x46, - 0x3f, 0xd1, 0x03, 0x22, 0x40, 0x04, 0xa5, 0x10, 0xfc, 0x04, 0x02, 0x48, + 0x40, 0x50, 0xae, 0x5d, 0xc0, 0x27, 0x00, 0x4e, 0xa0, 0x0a, 0x56, 0x20, + 0x40, 0x49, 0x09, 0xb3, 0x74, 0xfa, 0x01, 0x4c, 0x6f, 0x8e, 0xad, 0xf4, + 0x41, 0xae, 0x06, 0x4e, 0xbf, 0x74, 0x49, 0xf9, 0x41, 0x80, 0x06, 0x49, + 0xb9, 0xa7, 0x14, 0xf9, 0x41, 0x4b, 0x33, 0x5b, 0xa1, 0xf7, 0x01, 0xb3, + 0x01, 0xff, 0x46, 0x16, 0x17, 0xa8, 0xf7, 0x01, 0x44, 0x63, 0x47, 0x09, + 0x20, 0x40, 0xa5, 0x11, 0x02, 0x08, 0x07, 0x01, 0xff, 0x47, 0x84, 0xc6, + 0xe7, 0x29, 0x00, 0x45, 0xb3, 0xa2, 0x21, 0xf3, 0x41, 0x80, 0x06, 0x44, + 0x7f, 0x5c, 0x34, 0x22, 0x40, 0x4e, 0x35, 0x70, 0x04, 0x22, 0x00, 0x46, + 0x5b, 0xd1, 0x03, 0x22, 0x40, 0x04, 0xa5, 0x10, 0xfc, 0x04, 0x02, 0x48, 0x03, 0x01, 0xff, 0xa3, 0x47, 0x06, 0xf4, 0x05, 0x01, 0xff, 0x45, 0xd1, 0x09, 0x58, 0x0e, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x59, 0x0e, 0x00, 0x43, 0xcd, 0x09, 0x51, 0x0e, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x50, 0x0e, 0x40, 0x44, 0x25, 0x01, 0x53, 0x0e, 0x00, 0x42, 0x15, 0x02, 0x52, 0x0e, 0x40, 0x44, 0x96, 0x1b, 0x57, 0x0e, 0x00, 0x42, 0x30, 0x27, 0x56, 0x0e, 0x40, 0x43, 0xd7, 0x04, 0x55, 0x0e, 0x00, 0x43, 0xfb, - 0x05, 0x54, 0x0e, 0x40, 0x09, 0x35, 0x3c, 0x06, 0x53, 0xbb, 0x48, 0x3f, - 0x0e, 0x40, 0x4a, 0x49, 0x9f, 0x5a, 0x0e, 0x00, 0x49, 0xb9, 0xad, 0x1a, - 0x0e, 0x00, 0x06, 0x4f, 0xd0, 0xfc, 0x03, 0x03, 0xec, 0x5f, 0xeb, 0x03, - 0x02, 0xe9, 0x02, 0xd5, 0x03, 0x03, 0x0e, 0x6b, 0xc4, 0x03, 0xab, 0x8d, - 0x03, 0xac, 0xf0, 0x02, 0xad, 0xb4, 0x02, 0xae, 0x96, 0x02, 0x45, 0x81, + 0x05, 0x54, 0x0e, 0x40, 0x09, 0x4a, 0x3c, 0x06, 0x53, 0xd0, 0x48, 0x3f, + 0x0e, 0x40, 0x4a, 0x5c, 0x9f, 0x5a, 0x0e, 0x00, 0x49, 0xcc, 0xad, 0x1a, + 0x0e, 0x00, 0x06, 0x6b, 0xd0, 0xfc, 0x03, 0x03, 0x01, 0x60, 0xeb, 0x03, + 0x02, 0xe9, 0x02, 0xd5, 0x03, 0x03, 0x23, 0x6b, 0xc4, 0x03, 0xab, 0x8d, + 0x03, 0xac, 0xf0, 0x02, 0xad, 0xb4, 0x02, 0xae, 0x96, 0x02, 0x45, 0x9d, 0xde, 0x2d, 0x0e, 0x00, 0xb0, 0xde, 0x01, 0xb2, 0xd1, 0x01, 0xb3, 0x69, - 0xb4, 0x20, 0x47, 0x5a, 0xcd, 0x27, 0x0e, 0x00, 0xb9, 0x01, 0xff, 0x47, - 0xa6, 0xc2, 0x4e, 0x0e, 0x00, 0x03, 0xe3, 0xd6, 0x01, 0xff, 0x42, 0x6d, + 0xb4, 0x20, 0x47, 0x76, 0xcd, 0x27, 0x0e, 0x00, 0xb9, 0x01, 0xff, 0x47, + 0xc2, 0xc2, 0x4e, 0x0e, 0x00, 0x03, 0xff, 0xd6, 0x01, 0xff, 0x42, 0x6d, 0x00, 0x22, 0x0e, 0x00, 0x43, 0xa1, 0x01, 0x0d, 0x0e, 0x40, 0xa8, 0x11, - 0x02, 0x7b, 0x02, 0x01, 0xff, 0x45, 0xef, 0xde, 0x0f, 0x0e, 0x00, 0x43, - 0xdb, 0x16, 0x15, 0x0e, 0x40, 0x49, 0x20, 0xad, 0x4c, 0x0e, 0x00, 0x02, - 0x7b, 0x02, 0x01, 0xff, 0x4a, 0x7f, 0xa5, 0x11, 0x0e, 0x00, 0x47, 0x66, + 0x02, 0x7b, 0x02, 0x01, 0xff, 0x45, 0x0b, 0xdf, 0x0f, 0x0e, 0x00, 0x43, + 0xdb, 0x16, 0x15, 0x0e, 0x40, 0x49, 0x33, 0xad, 0x4c, 0x0e, 0x00, 0x02, + 0x7b, 0x02, 0x01, 0xff, 0x4a, 0x92, 0xa5, 0x11, 0x0e, 0x00, 0x47, 0x82, 0xca, 0x12, 0x0e, 0x00, 0x02, 0x53, 0x00, 0x01, 0xff, 0xa1, 0x0c, 0x43, - 0x0a, 0x0d, 0x18, 0x0e, 0x00, 0x43, 0x76, 0x40, 0x16, 0x0e, 0x40, 0x43, + 0x0a, 0x0d, 0x18, 0x0e, 0x00, 0x43, 0x8b, 0x40, 0x16, 0x0e, 0x40, 0x43, 0x90, 0x00, 0x17, 0x0e, 0x00, 0xee, 0x10, 0x0e, 0x40, 0x04, 0x60, 0x14, - 0x1e, 0x02, 0x7b, 0x02, 0x01, 0xff, 0x44, 0x5a, 0xe7, 0x29, 0x0e, 0x00, + 0x1e, 0x02, 0x7b, 0x02, 0x01, 0xff, 0x44, 0x76, 0xe7, 0x29, 0x0e, 0x00, 0xb3, 0x01, 0xff, 0x43, 0x4f, 0x17, 0x28, 0x0e, 0x00, 0xef, 0x0b, 0x0e, 0x00, 0x42, 0x7d, 0x00, 0x2a, 0x0e, 0x40, 0xe1, 0x30, 0x0e, 0x80, 0x23, 0xe5, 0x40, 0x0e, 0x00, 0xe9, 0x34, 0x0e, 0x80, 0x16, 0xef, 0x42, 0x0e, 0x00, 0xf5, 0x38, 0x0e, 0xc0, 0x00, 0xe5, 0x36, 0x0e, 0x80, 0x04, 0xf5, 0x39, 0x0e, 0x40, 0xe5, 0x37, 0x0e, 0x40, 0xe9, 0x35, 0x0e, 0x40, 0xe1, - 0x32, 0x0e, 0x00, 0xe5, 0x41, 0x0e, 0x00, 0x06, 0x47, 0xd2, 0x04, 0xed, - 0x33, 0x0e, 0x40, 0x44, 0xf2, 0xe3, 0x44, 0x0e, 0x00, 0x43, 0x16, 0x99, - 0x43, 0x0e, 0x40, 0x45, 0x95, 0xde, 0x23, 0x0e, 0x00, 0xf5, 0x24, 0x0e, - 0x40, 0x48, 0x8d, 0xb9, 0x2f, 0x0e, 0x00, 0xa8, 0x06, 0x45, 0x90, 0xde, - 0x1b, 0x0e, 0x40, 0x45, 0xba, 0xdc, 0x3a, 0x0e, 0x00, 0x02, 0x7b, 0x02, - 0x01, 0xff, 0x02, 0xfc, 0x0e, 0x06, 0x47, 0x54, 0xcb, 0x20, 0x0e, 0x40, - 0x42, 0x1a, 0x00, 0x1e, 0x0e, 0x00, 0x43, 0x76, 0x40, 0x1c, 0x0e, 0x40, - 0x46, 0xb7, 0xd1, 0x07, 0x0e, 0x00, 0x47, 0xb1, 0xc7, 0x4d, 0x0e, 0x00, - 0x03, 0xb8, 0xd1, 0x01, 0xff, 0x42, 0x92, 0x01, 0x13, 0x0e, 0x00, 0xf5, - 0x19, 0x0e, 0x40, 0x02, 0x35, 0x06, 0x06, 0x44, 0x3b, 0x48, 0x21, 0x0e, - 0x40, 0x80, 0x0c, 0x46, 0xbf, 0xd5, 0x47, 0x0e, 0x00, 0x45, 0x83, 0xe1, - 0x46, 0x0e, 0x40, 0x48, 0xed, 0xba, 0x4b, 0x0e, 0x00, 0x42, 0xd8, 0x16, - 0x48, 0x0e, 0x00, 0x48, 0xdd, 0xbc, 0x31, 0x0e, 0x00, 0xb4, 0x01, 0xff, + 0x32, 0x0e, 0x00, 0xe5, 0x41, 0x0e, 0x00, 0x06, 0x63, 0xd2, 0x04, 0xed, + 0x33, 0x0e, 0x40, 0x44, 0x0e, 0xe4, 0x44, 0x0e, 0x00, 0x43, 0x29, 0x99, + 0x43, 0x0e, 0x40, 0x45, 0xb1, 0xde, 0x23, 0x0e, 0x00, 0xf5, 0x24, 0x0e, + 0x40, 0x48, 0xa9, 0xb9, 0x2f, 0x0e, 0x00, 0xa8, 0x06, 0x45, 0xac, 0xde, + 0x1b, 0x0e, 0x40, 0x45, 0xd6, 0xdc, 0x3a, 0x0e, 0x00, 0x02, 0x7b, 0x02, + 0x01, 0xff, 0x02, 0xfc, 0x0e, 0x06, 0x47, 0x70, 0xcb, 0x20, 0x0e, 0x40, + 0x42, 0x1a, 0x00, 0x1e, 0x0e, 0x00, 0x43, 0x8b, 0x40, 0x1c, 0x0e, 0x40, + 0x46, 0xd3, 0xd1, 0x07, 0x0e, 0x00, 0x47, 0xcd, 0xc7, 0x4d, 0x0e, 0x00, + 0x03, 0xd4, 0xd1, 0x01, 0xff, 0x42, 0x92, 0x01, 0x13, 0x0e, 0x00, 0xf5, + 0x19, 0x0e, 0x40, 0x02, 0x35, 0x06, 0x06, 0x44, 0x50, 0x48, 0x21, 0x0e, + 0x40, 0x80, 0x0c, 0x46, 0xdb, 0xd5, 0x47, 0x0e, 0x00, 0x45, 0x9f, 0xe1, + 0x46, 0x0e, 0x40, 0x48, 0x09, 0xbb, 0x4b, 0x0e, 0x00, 0x42, 0xd8, 0x16, + 0x48, 0x0e, 0x00, 0x48, 0xf9, 0xbc, 0x31, 0x0e, 0x00, 0xb4, 0x01, 0xff, 0x42, 0x0b, 0x00, 0x49, 0x0e, 0x00, 0x42, 0x0d, 0x00, 0x4a, 0x0e, 0x40, - 0x4a, 0x0d, 0x9f, 0x45, 0x0e, 0x00, 0x02, 0x7b, 0x02, 0x04, 0xf5, 0x26, - 0x0e, 0x40, 0x45, 0x85, 0xda, 0x2c, 0x0e, 0x00, 0x44, 0x11, 0x0a, 0x25, - 0x0e, 0x40, 0x02, 0x0b, 0x00, 0x06, 0x45, 0x8b, 0xde, 0x01, 0x0e, 0x40, - 0x80, 0x06, 0x43, 0x79, 0xa3, 0x5b, 0x0e, 0x40, 0x02, 0xda, 0x0a, 0x06, - 0x47, 0xc8, 0xca, 0x06, 0x0e, 0x40, 0x42, 0x35, 0x06, 0x02, 0x0e, 0x00, + 0x4a, 0x20, 0x9f, 0x45, 0x0e, 0x00, 0x02, 0x7b, 0x02, 0x04, 0xf5, 0x26, + 0x0e, 0x40, 0x45, 0xa1, 0xda, 0x2c, 0x0e, 0x00, 0x44, 0x11, 0x0a, 0x25, + 0x0e, 0x40, 0x02, 0x0b, 0x00, 0x06, 0x45, 0xa7, 0xde, 0x01, 0x0e, 0x40, + 0x80, 0x06, 0x43, 0x8c, 0xa3, 0x5b, 0x0e, 0x40, 0x02, 0xda, 0x0a, 0x06, + 0x47, 0xe4, 0xca, 0x06, 0x0e, 0x40, 0x42, 0x35, 0x06, 0x02, 0x0e, 0x00, 0x42, 0x10, 0x00, 0x05, 0x0e, 0x00, 0x43, 0xa8, 0x0a, 0x03, 0x0e, 0x00, 0x43, 0x49, 0x0f, 0x04, 0x0e, 0x40, 0x43, 0xb4, 0x0b, 0x2b, 0x0e, 0x00, - 0x46, 0xdf, 0xd3, 0x2e, 0x0e, 0x40, 0x43, 0xec, 0x06, 0x1d, 0x0e, 0x80, - 0x06, 0x45, 0x40, 0xde, 0x4f, 0x0e, 0x40, 0xee, 0x1f, 0x0e, 0x40, 0x45, - 0x67, 0xda, 0x0e, 0x0e, 0x00, 0x43, 0xd7, 0x16, 0x14, 0x0e, 0x40, 0x42, + 0x46, 0xfb, 0xd3, 0x2e, 0x0e, 0x40, 0x43, 0xec, 0x06, 0x1d, 0x0e, 0x80, + 0x06, 0x45, 0x5c, 0xde, 0x4f, 0x0e, 0x40, 0xee, 0x1f, 0x0e, 0x40, 0x45, + 0x83, 0xda, 0x0e, 0x0e, 0x00, 0x43, 0xd7, 0x16, 0x14, 0x0e, 0x40, 0x42, 0x1a, 0x00, 0x08, 0x0e, 0x80, 0x0c, 0x43, 0xa1, 0x01, 0x09, 0x0e, 0x00, - 0x42, 0xca, 0x4b, 0x0c, 0x0e, 0x40, 0xe7, 0x0a, 0x0e, 0x40, 0xa1, 0xc6, - 0x02, 0xa5, 0xb1, 0x02, 0x47, 0x8e, 0xc7, 0xa8, 0x07, 0x00, 0x07, 0xf1, - 0x04, 0x20, 0xaf, 0x0c, 0x45, 0x43, 0xe0, 0xb0, 0x07, 0x00, 0x47, 0x73, - 0xcc, 0xaa, 0x07, 0x40, 0x48, 0x75, 0xb9, 0xaf, 0x07, 0x00, 0x46, 0xf5, - 0xcf, 0xae, 0x07, 0x00, 0x48, 0x1d, 0xbf, 0xab, 0x07, 0x40, 0xa1, 0xf8, - 0x01, 0x43, 0xe1, 0x4a, 0x84, 0x07, 0x00, 0x49, 0x13, 0xae, 0x97, 0x07, - 0x00, 0xa4, 0xd5, 0x01, 0x45, 0x9d, 0xdb, 0x8a, 0x07, 0x00, 0xa7, 0xba, - 0x01, 0xa8, 0xab, 0x01, 0x48, 0x7d, 0xbd, 0x96, 0x07, 0x00, 0xab, 0x96, - 0x01, 0xac, 0x87, 0x01, 0x45, 0xb4, 0xdd, 0x89, 0x07, 0x00, 0xae, 0x73, - 0x48, 0xf5, 0xbf, 0x95, 0x07, 0x00, 0x45, 0x49, 0xdf, 0xa4, 0x07, 0x00, - 0x43, 0x77, 0xa2, 0x83, 0x07, 0x00, 0xb3, 0x44, 0xb4, 0x25, 0x45, 0x1a, - 0xe1, 0x88, 0x07, 0x00, 0x45, 0x38, 0xe1, 0xa5, 0x07, 0x00, 0x43, 0x5f, + 0x42, 0xdf, 0x4b, 0x0c, 0x0e, 0x40, 0xe7, 0x0a, 0x0e, 0x40, 0xa1, 0xc6, + 0x02, 0xa5, 0xb1, 0x02, 0x47, 0xaa, 0xc7, 0xa8, 0x07, 0x00, 0x07, 0xf1, + 0x04, 0x20, 0xaf, 0x0c, 0x45, 0x5f, 0xe0, 0xb0, 0x07, 0x00, 0x47, 0x8f, + 0xcc, 0xaa, 0x07, 0x40, 0x48, 0x91, 0xb9, 0xaf, 0x07, 0x00, 0x46, 0x11, + 0xd0, 0xae, 0x07, 0x00, 0x48, 0x39, 0xbf, 0xab, 0x07, 0x40, 0xa1, 0xf8, + 0x01, 0x43, 0xf6, 0x4a, 0x84, 0x07, 0x00, 0x49, 0x2f, 0xae, 0x97, 0x07, + 0x00, 0xa4, 0xd5, 0x01, 0x45, 0xb9, 0xdb, 0x8a, 0x07, 0x00, 0xa7, 0xba, + 0x01, 0xa8, 0xab, 0x01, 0x48, 0x99, 0xbd, 0x96, 0x07, 0x00, 0xab, 0x96, + 0x01, 0xac, 0x87, 0x01, 0x45, 0xd0, 0xdd, 0x89, 0x07, 0x00, 0xae, 0x73, + 0x48, 0x11, 0xc0, 0x95, 0x07, 0x00, 0x45, 0x65, 0xdf, 0xa4, 0x07, 0x00, + 0x43, 0x8a, 0xa2, 0x83, 0x07, 0x00, 0xb3, 0x44, 0xb4, 0x25, 0x45, 0x36, + 0xe1, 0x88, 0x07, 0x00, 0x45, 0x54, 0xe1, 0xa5, 0x07, 0x00, 0x43, 0x7b, 0xb0, 0x94, 0x07, 0x00, 0xba, 0x01, 0xff, 0xa1, 0x04, 0xef, 0xa1, 0x07, - 0x40, 0xe1, 0x9c, 0x07, 0x00, 0x46, 0x16, 0xae, 0x92, 0x07, 0x40, 0x47, - 0x15, 0xae, 0x93, 0x07, 0x00, 0x43, 0x6b, 0x3c, 0x8c, 0x07, 0x80, 0x0a, + 0x40, 0xe1, 0x9c, 0x07, 0x00, 0x46, 0x32, 0xae, 0x92, 0x07, 0x40, 0x47, + 0x31, 0xae, 0x93, 0x07, 0x00, 0x43, 0x80, 0x3c, 0x8c, 0x07, 0x80, 0x0a, 0xef, 0xa0, 0x07, 0x00, 0x43, 0xd9, 0x10, 0x98, 0x07, 0x40, 0x42, 0xe6, - 0x13, 0x9b, 0x07, 0x40, 0x45, 0x54, 0xd9, 0x9e, 0x07, 0x00, 0x44, 0xa6, - 0xe4, 0x90, 0x07, 0x00, 0xa8, 0x01, 0xff, 0x47, 0x15, 0xae, 0x81, 0x07, - 0x00, 0x44, 0xa6, 0xe4, 0x9d, 0x07, 0x40, 0x42, 0xda, 0x10, 0xb1, 0x07, - 0x00, 0x44, 0x65, 0x8e, 0x82, 0x07, 0x40, 0x44, 0xe7, 0x81, 0x8d, 0x07, - 0x00, 0x48, 0x14, 0xae, 0x85, 0x07, 0x40, 0x44, 0x9e, 0xdb, 0x86, 0x07, - 0x00, 0x43, 0x6b, 0x3c, 0x9a, 0x07, 0x40, 0x42, 0xda, 0x10, 0x80, 0x07, - 0x00, 0x43, 0x6b, 0x3c, 0x99, 0x07, 0x40, 0x44, 0x9e, 0xdb, 0x8e, 0x07, - 0x00, 0x45, 0x15, 0xdc, 0xa3, 0x07, 0x00, 0x48, 0xad, 0xbe, 0x8f, 0x07, - 0x40, 0xa1, 0x06, 0x45, 0x0b, 0xdc, 0x8b, 0x07, 0x40, 0x44, 0x55, 0xd9, - 0x9f, 0x07, 0x00, 0x46, 0x16, 0xae, 0x91, 0x07, 0x40, 0x43, 0x99, 0x18, - 0xa2, 0x07, 0x00, 0x44, 0xee, 0xe5, 0x87, 0x07, 0x40, 0x46, 0xd1, 0xcf, - 0xac, 0x07, 0x00, 0x48, 0xb5, 0xbb, 0xa9, 0x07, 0x00, 0x48, 0xad, 0xc2, - 0xad, 0x07, 0x40, 0x48, 0x6d, 0xb9, 0xa7, 0x07, 0x00, 0x46, 0xc5, 0xcf, - 0xa6, 0x07, 0x40, 0xa1, 0xb6, 0x0a, 0x48, 0x5d, 0xbb, 0xf8, 0xf9, 0x01, - 0xac, 0xea, 0x04, 0xae, 0xd7, 0x04, 0x47, 0xc4, 0xcb, 0xea, 0xf9, 0x01, - 0x0c, 0x2c, 0x8e, 0x01, 0xff, 0xa1, 0xb1, 0x04, 0xa2, 0x9c, 0x04, 0xa3, + 0x13, 0x9b, 0x07, 0x40, 0x45, 0x70, 0xd9, 0x9e, 0x07, 0x00, 0x44, 0xc2, + 0xe4, 0x90, 0x07, 0x00, 0xa8, 0x01, 0xff, 0x47, 0x31, 0xae, 0x81, 0x07, + 0x00, 0x44, 0xc2, 0xe4, 0x9d, 0x07, 0x40, 0x42, 0xda, 0x10, 0xb1, 0x07, + 0x00, 0x44, 0x78, 0x8e, 0x82, 0x07, 0x40, 0x44, 0xee, 0x81, 0x8d, 0x07, + 0x00, 0x48, 0x30, 0xae, 0x85, 0x07, 0x40, 0x44, 0xba, 0xdb, 0x86, 0x07, + 0x00, 0x43, 0x80, 0x3c, 0x9a, 0x07, 0x40, 0x42, 0xda, 0x10, 0x80, 0x07, + 0x00, 0x43, 0x80, 0x3c, 0x99, 0x07, 0x40, 0x44, 0xba, 0xdb, 0x8e, 0x07, + 0x00, 0x45, 0x31, 0xdc, 0xa3, 0x07, 0x00, 0x48, 0xc9, 0xbe, 0x8f, 0x07, + 0x40, 0xa1, 0x06, 0x45, 0x27, 0xdc, 0x8b, 0x07, 0x40, 0x44, 0x71, 0xd9, + 0x9f, 0x07, 0x00, 0x46, 0x32, 0xae, 0x91, 0x07, 0x40, 0x43, 0x99, 0x18, + 0xa2, 0x07, 0x00, 0x44, 0x0a, 0xe6, 0x87, 0x07, 0x40, 0x46, 0xed, 0xcf, + 0xac, 0x07, 0x00, 0x48, 0xd1, 0xbb, 0xa9, 0x07, 0x00, 0x48, 0xc9, 0xc2, + 0xad, 0x07, 0x40, 0x48, 0x89, 0xb9, 0xa7, 0x07, 0x00, 0x46, 0xe1, 0xcf, + 0xa6, 0x07, 0x40, 0xa1, 0xb6, 0x0a, 0x48, 0x79, 0xbb, 0xf8, 0xf9, 0x01, + 0xac, 0xea, 0x04, 0xae, 0xd7, 0x04, 0x47, 0xe0, 0xcb, 0xea, 0xf9, 0x01, + 0x0c, 0x3f, 0x8e, 0x01, 0xff, 0xa1, 0xb1, 0x04, 0xa2, 0x9c, 0x04, 0xa3, 0xc4, 0x03, 0xa4, 0xff, 0x02, 0xa5, 0xd0, 0x02, 0xa6, 0xa2, 0x02, 0xa7, - 0x80, 0x02, 0xa8, 0xf1, 0x01, 0x02, 0x9e, 0x01, 0xe0, 0x01, 0x43, 0xe1, + 0x80, 0x02, 0xa8, 0xf1, 0x01, 0x02, 0x9e, 0x01, 0xe0, 0x01, 0x43, 0xf4, 0x8d, 0x1d, 0xd3, 0x01, 0xab, 0xcb, 0x01, 0xac, 0xb4, 0x01, 0xad, 0x9f, - 0x01, 0xaf, 0x90, 0x01, 0xb0, 0x74, 0xb2, 0x47, 0xb3, 0x22, 0x45, 0xf2, - 0xe0, 0x3b, 0xd3, 0x01, 0x53, 0x07, 0x49, 0x37, 0xd3, 0x01, 0x02, 0xa9, - 0x01, 0x06, 0x4c, 0x4c, 0x8f, 0x11, 0xd3, 0x41, 0x45, 0x72, 0x7d, 0x17, - 0xd3, 0x01, 0x43, 0x48, 0x1f, 0x44, 0xd3, 0x41, 0x48, 0x55, 0xbc, 0x4b, - 0xd3, 0x01, 0x46, 0xb9, 0x89, 0x45, 0xd3, 0x01, 0xb4, 0x01, 0xff, 0xaf, - 0x06, 0x46, 0xed, 0xd4, 0x29, 0xd3, 0x41, 0x45, 0x3a, 0xdf, 0x4c, 0xd3, - 0x01, 0x42, 0x32, 0x00, 0x31, 0xd3, 0x41, 0xa5, 0x06, 0x45, 0xd8, 0xdc, - 0x35, 0xd3, 0x41, 0x43, 0x2e, 0x2a, 0x14, 0xd3, 0x01, 0x45, 0x5a, 0xdd, - 0x1a, 0xd3, 0x01, 0xb3, 0x01, 0xff, 0xa9, 0x06, 0x45, 0x35, 0xdf, 0x2e, - 0xd3, 0x41, 0x45, 0xd0, 0xda, 0x2c, 0xd3, 0x01, 0x46, 0x77, 0xd5, 0x1b, - 0xd3, 0x41, 0xa1, 0x0c, 0x4a, 0x5b, 0xa1, 0x13, 0xd3, 0x01, 0x45, 0x06, - 0xe1, 0x2a, 0xd3, 0x41, 0x45, 0x1c, 0x61, 0x24, 0xd3, 0x01, 0x45, 0xd6, - 0x89, 0x34, 0xd3, 0x41, 0x4b, 0xae, 0x97, 0x53, 0xd3, 0x01, 0x49, 0xaf, - 0xb4, 0x0d, 0xd3, 0x41, 0x46, 0xad, 0xcf, 0x40, 0xd3, 0x01, 0x46, 0x91, - 0x16, 0x39, 0xd3, 0x01, 0x44, 0x0b, 0x80, 0x08, 0xd3, 0x41, 0xa1, 0x06, - 0x45, 0x1b, 0xdb, 0x25, 0xd3, 0x41, 0x47, 0x73, 0xc5, 0x55, 0xd3, 0x01, - 0x4a, 0x6b, 0xaa, 0x2d, 0xd3, 0x41, 0x4c, 0xdc, 0x86, 0x0a, 0xd3, 0x01, - 0x46, 0x9b, 0xd2, 0x27, 0xd3, 0x41, 0x46, 0x73, 0xd0, 0x12, 0xd3, 0x01, - 0x43, 0x02, 0x0a, 0x46, 0xd3, 0x41, 0x47, 0xd9, 0xc4, 0x4d, 0xd3, 0x01, - 0x4b, 0xa4, 0x4c, 0x16, 0xd3, 0x41, 0x48, 0xbc, 0x52, 0x28, 0xd3, 0x81, - 0x12, 0x4c, 0x74, 0x8b, 0x2f, 0xd3, 0x01, 0x48, 0x5d, 0xc0, 0x32, 0xd3, - 0x01, 0x4a, 0xa3, 0xa9, 0x3e, 0xd3, 0x41, 0x43, 0x0d, 0x05, 0x3f, 0xd3, - 0x41, 0x46, 0x53, 0xcf, 0x50, 0xd3, 0x01, 0x45, 0xc3, 0x01, 0x36, 0xd3, + 0x01, 0xaf, 0x90, 0x01, 0xb0, 0x74, 0xb2, 0x47, 0xb3, 0x22, 0x45, 0x0e, + 0xe1, 0x3b, 0xd3, 0x01, 0x53, 0x1c, 0x49, 0x37, 0xd3, 0x01, 0x02, 0xa9, + 0x01, 0x06, 0x4c, 0x5f, 0x8f, 0x11, 0xd3, 0x41, 0x45, 0x79, 0x7d, 0x17, + 0xd3, 0x01, 0x43, 0x48, 0x1f, 0x44, 0xd3, 0x41, 0x48, 0x71, 0xbc, 0x4b, + 0xd3, 0x01, 0x46, 0xc0, 0x89, 0x45, 0xd3, 0x01, 0xb4, 0x01, 0xff, 0xaf, + 0x06, 0x46, 0x09, 0xd5, 0x29, 0xd3, 0x41, 0x45, 0x56, 0xdf, 0x4c, 0xd3, + 0x01, 0x42, 0x32, 0x00, 0x31, 0xd3, 0x41, 0xa5, 0x06, 0x45, 0xf4, 0xdc, + 0x35, 0xd3, 0x41, 0x43, 0x2e, 0x2a, 0x14, 0xd3, 0x01, 0x45, 0x76, 0xdd, + 0x1a, 0xd3, 0x01, 0xb3, 0x01, 0xff, 0xa9, 0x06, 0x45, 0x51, 0xdf, 0x2e, + 0xd3, 0x41, 0x45, 0xec, 0xda, 0x2c, 0xd3, 0x01, 0x46, 0x93, 0xd5, 0x1b, + 0xd3, 0x41, 0xa1, 0x0c, 0x4a, 0x6e, 0xa1, 0x13, 0xd3, 0x01, 0x45, 0x22, + 0xe1, 0x2a, 0xd3, 0x41, 0x45, 0x31, 0x61, 0x24, 0xd3, 0x01, 0x45, 0xdd, + 0x89, 0x34, 0xd3, 0x41, 0x4b, 0xc1, 0x97, 0x53, 0xd3, 0x01, 0x49, 0xcb, + 0xb4, 0x0d, 0xd3, 0x41, 0x46, 0xc9, 0xcf, 0x40, 0xd3, 0x01, 0x46, 0x91, + 0x16, 0x39, 0xd3, 0x01, 0x44, 0x12, 0x80, 0x08, 0xd3, 0x41, 0xa1, 0x06, + 0x45, 0x37, 0xdb, 0x25, 0xd3, 0x41, 0x47, 0x8f, 0xc5, 0x55, 0xd3, 0x01, + 0x4a, 0x7e, 0xaa, 0x2d, 0xd3, 0x41, 0x4c, 0xe3, 0x86, 0x0a, 0xd3, 0x01, + 0x46, 0xb7, 0xd2, 0x27, 0xd3, 0x41, 0x46, 0x8f, 0xd0, 0x12, 0xd3, 0x01, + 0x43, 0x02, 0x0a, 0x46, 0xd3, 0x41, 0x47, 0xf5, 0xc4, 0x4d, 0xd3, 0x01, + 0x4b, 0xb9, 0x4c, 0x16, 0xd3, 0x41, 0x48, 0xd1, 0x52, 0x28, 0xd3, 0x81, + 0x12, 0x4c, 0x7b, 0x8b, 0x2f, 0xd3, 0x01, 0x48, 0x79, 0xc0, 0x32, 0xd3, + 0x01, 0x4a, 0xb6, 0xa9, 0x3e, 0xd3, 0x41, 0x43, 0x0d, 0x05, 0x3f, 0xd3, + 0x41, 0x46, 0x6f, 0xcf, 0x50, 0xd3, 0x01, 0x45, 0xc3, 0x01, 0x36, 0xd3, 0x01, 0xaf, 0x11, 0x03, 0xa1, 0x14, 0x01, 0xff, 0x47, 0xff, 0x03, 0x07, - 0xd3, 0x01, 0x44, 0x86, 0x21, 0x2b, 0xd3, 0x41, 0x47, 0x4e, 0xbf, 0x18, - 0xd3, 0x01, 0x47, 0xcb, 0xcb, 0x56, 0xd3, 0x41, 0x43, 0x85, 0x31, 0x1c, - 0xd3, 0x01, 0x4c, 0x3c, 0x8a, 0x42, 0xd3, 0x01, 0xae, 0x0c, 0x47, 0x06, - 0x2f, 0x3a, 0xd3, 0x01, 0x49, 0xd0, 0xb7, 0x4a, 0xd3, 0x41, 0x48, 0x25, - 0xbb, 0x30, 0xd3, 0x01, 0x47, 0x30, 0xc6, 0x1f, 0xd3, 0x01, 0x49, 0xf1, - 0xb1, 0x33, 0xd3, 0x41, 0x48, 0x37, 0x35, 0x48, 0xd3, 0x01, 0xa5, 0x28, - 0xa9, 0x0c, 0x44, 0xda, 0xe6, 0x43, 0xd3, 0x01, 0x45, 0x15, 0xe1, 0x20, - 0xd3, 0x41, 0x4a, 0xbf, 0xa1, 0x54, 0xd3, 0x01, 0xad, 0x06, 0x48, 0x2d, - 0xc2, 0x10, 0xd3, 0x41, 0x49, 0x46, 0xb1, 0x3c, 0xd3, 0x01, 0x44, 0x9d, - 0x5b, 0x49, 0xd3, 0x41, 0x4a, 0x2f, 0xa0, 0x22, 0xd3, 0x01, 0x59, 0x7f, - 0x21, 0x0f, 0xd3, 0x01, 0x47, 0x8a, 0xae, 0x47, 0xd3, 0x41, 0x45, 0x74, - 0x02, 0x06, 0xd3, 0x01, 0x45, 0x60, 0xbc, 0x21, 0xd3, 0x01, 0x03, 0xfb, - 0x0b, 0x31, 0xaf, 0x01, 0xff, 0x03, 0x71, 0x5c, 0x1e, 0xae, 0x01, 0xff, - 0x46, 0x7d, 0xd5, 0x38, 0xd3, 0x01, 0xb4, 0x01, 0xff, 0x43, 0x69, 0x0b, - 0x15, 0xd3, 0x01, 0x46, 0xfe, 0x7b, 0x1e, 0xd3, 0x01, 0x47, 0xd6, 0xca, - 0x0b, 0xd3, 0x41, 0x45, 0x74, 0x5c, 0x4e, 0xd3, 0x01, 0x45, 0x98, 0xb9, + 0xd3, 0x01, 0x44, 0x86, 0x21, 0x2b, 0xd3, 0x41, 0x47, 0x6a, 0xbf, 0x18, + 0xd3, 0x01, 0x47, 0xe7, 0xcb, 0x56, 0xd3, 0x41, 0x43, 0x85, 0x31, 0x1c, + 0xd3, 0x01, 0x4c, 0x43, 0x8a, 0x42, 0xd3, 0x01, 0xae, 0x0c, 0x47, 0x06, + 0x2f, 0x3a, 0xd3, 0x01, 0x49, 0xec, 0xb7, 0x4a, 0xd3, 0x41, 0x48, 0x41, + 0xbb, 0x30, 0xd3, 0x01, 0x47, 0x4c, 0xc6, 0x1f, 0xd3, 0x01, 0x49, 0x0d, + 0xb2, 0x33, 0xd3, 0x41, 0x48, 0x37, 0x35, 0x48, 0xd3, 0x01, 0xa5, 0x28, + 0xa9, 0x0c, 0x44, 0xf6, 0xe6, 0x43, 0xd3, 0x01, 0x45, 0x31, 0xe1, 0x20, + 0xd3, 0x41, 0x4a, 0xd2, 0xa1, 0x54, 0xd3, 0x01, 0xad, 0x06, 0x48, 0x49, + 0xc2, 0x10, 0xd3, 0x41, 0x49, 0x62, 0xb1, 0x3c, 0xd3, 0x01, 0x44, 0xb2, + 0x5b, 0x49, 0xd3, 0x41, 0x4a, 0x42, 0xa0, 0x22, 0xd3, 0x01, 0x59, 0x7f, + 0x21, 0x0f, 0xd3, 0x01, 0x47, 0xa6, 0xae, 0x47, 0xd3, 0x41, 0x45, 0x74, + 0x02, 0x06, 0xd3, 0x01, 0x45, 0x7c, 0xbc, 0x21, 0xd3, 0x01, 0x03, 0xfb, + 0x0b, 0x31, 0xaf, 0x01, 0xff, 0x03, 0x86, 0x5c, 0x1e, 0xae, 0x01, 0xff, + 0x46, 0x99, 0xd5, 0x38, 0xd3, 0x01, 0xb4, 0x01, 0xff, 0x43, 0x69, 0x0b, + 0x15, 0xd3, 0x01, 0x46, 0x05, 0x7c, 0x1e, 0xd3, 0x01, 0x47, 0xf2, 0xca, + 0x0b, 0xd3, 0x41, 0x45, 0x89, 0x5c, 0x4e, 0xd3, 0x01, 0x45, 0xb4, 0xb9, 0x52, 0xd3, 0x41, 0xa5, 0x06, 0x43, 0x94, 0x16, 0x4f, 0xd3, 0x41, 0x47, - 0x0d, 0xc6, 0x3d, 0xd3, 0x01, 0x44, 0x86, 0x21, 0x26, 0xd3, 0x41, 0x46, - 0xc8, 0x63, 0x09, 0xd3, 0x01, 0x4e, 0x76, 0x73, 0x23, 0xd3, 0x01, 0x4c, - 0x7c, 0x8c, 0x0e, 0xd3, 0x41, 0x4b, 0xec, 0x91, 0x41, 0xd3, 0x01, 0x46, - 0xb5, 0xd0, 0x19, 0xd3, 0x01, 0x4a, 0x37, 0xa2, 0x51, 0xd3, 0x01, 0x45, - 0x73, 0x3c, 0x0c, 0xd3, 0x41, 0x47, 0xf1, 0x8e, 0xb8, 0x20, 0x00, 0x54, - 0x7c, 0x3f, 0xbe, 0xf3, 0x01, 0xf4, 0xfa, 0x26, 0x40, 0xa5, 0x87, 0x05, - 0x04, 0x9e, 0xe7, 0x01, 0xff, 0x4e, 0xc2, 0x6e, 0x56, 0x0c, 0x00, 0x06, - 0xf4, 0x05, 0xb5, 0x04, 0x0f, 0xb4, 0x66, 0xf7, 0x03, 0x02, 0x68, 0x00, - 0x9c, 0x01, 0x05, 0xdb, 0x02, 0x4e, 0x0b, 0x5b, 0x70, 0x01, 0xff, 0xa1, + 0x29, 0xc6, 0x3d, 0xd3, 0x01, 0x44, 0x86, 0x21, 0x26, 0xd3, 0x41, 0x46, + 0xdd, 0x63, 0x09, 0xd3, 0x01, 0x4e, 0x8b, 0x73, 0x23, 0xd3, 0x01, 0x4c, + 0x83, 0x8c, 0x0e, 0xd3, 0x41, 0x4b, 0xff, 0x91, 0x41, 0xd3, 0x01, 0x46, + 0xd1, 0xd0, 0x19, 0xd3, 0x01, 0x4a, 0x4a, 0xa2, 0x51, 0xd3, 0x01, 0x45, + 0x88, 0x3c, 0x0c, 0xd3, 0x41, 0x47, 0x04, 0x8f, 0xb8, 0x20, 0x00, 0x54, + 0x91, 0x3f, 0xbe, 0xf3, 0x01, 0xf4, 0xfa, 0x26, 0x40, 0xa5, 0x87, 0x05, + 0x04, 0xba, 0xe7, 0x01, 0xff, 0x4e, 0xd7, 0x6e, 0x56, 0x0c, 0x00, 0x06, + 0xf4, 0x05, 0xb5, 0x04, 0x0f, 0xc9, 0x66, 0xf7, 0x03, 0x02, 0x68, 0x00, + 0x9c, 0x01, 0x05, 0xdb, 0x02, 0x4e, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xa1, 0x3b, 0xe5, 0x46, 0x0c, 0x80, 0x32, 0xe9, 0x3f, 0x0c, 0x80, 0x29, 0xef, - 0x4a, 0x0c, 0x80, 0x20, 0xf5, 0x41, 0x0c, 0x80, 0x17, 0x08, 0x76, 0xb7, + 0x4a, 0x0c, 0x80, 0x20, 0xf5, 0x41, 0x0c, 0x80, 0x17, 0x08, 0x92, 0xb7, 0x01, 0xff, 0xec, 0x62, 0x0c, 0x80, 0x09, 0xf2, 0x43, 0x0c, 0xc0, 0x00, 0xf2, 0x44, 0x0c, 0x40, 0xec, 0x63, 0x0c, 0x40, 0xf5, 0x42, 0x0c, 0x40, 0xef, 0x4b, 0x0c, 0x40, 0xe9, 0x40, 0x0c, 0x40, 0xe5, 0x47, 0x0c, 0x40, 0xe1, 0x3e, 0x0c, 0x00, 0xe9, 0x48, 0x0c, 0x00, 0xf5, 0x4c, 0x0c, 0x40, - 0xa1, 0x3c, 0xa3, 0x23, 0x45, 0xab, 0x3a, 0x3c, 0x0c, 0x00, 0x47, 0xa1, - 0xcb, 0x77, 0x0c, 0x00, 0x45, 0xc0, 0xe0, 0x7f, 0x0c, 0x00, 0x02, 0x02, - 0x00, 0x01, 0xff, 0x44, 0x49, 0x21, 0x4d, 0x0c, 0x00, 0x45, 0x69, 0x46, + 0xa1, 0x3c, 0xa3, 0x23, 0x45, 0xc0, 0x3a, 0x3c, 0x0c, 0x00, 0x47, 0xbd, + 0xcb, 0x77, 0x0c, 0x00, 0x45, 0xdc, 0xe0, 0x7f, 0x0c, 0x00, 0x02, 0x02, + 0x00, 0x01, 0xff, 0x44, 0x49, 0x21, 0x4d, 0x0c, 0x00, 0x45, 0x7e, 0x46, 0x03, 0x0c, 0x40, 0x4a, 0x3c, 0x21, 0x01, 0x0c, 0x00, 0x09, 0x52, 0x14, - 0x01, 0xff, 0x4e, 0x5b, 0x14, 0x04, 0x0c, 0x00, 0x51, 0x66, 0x53, 0x00, - 0x0c, 0x40, 0x47, 0x5c, 0x14, 0x02, 0x0c, 0x00, 0x47, 0x3a, 0x81, 0x3d, + 0x01, 0xff, 0x4e, 0x5b, 0x14, 0x04, 0x0c, 0x00, 0x51, 0x7b, 0x53, 0x00, + 0x0c, 0x40, 0x47, 0x5c, 0x14, 0x02, 0x0c, 0x00, 0x47, 0x41, 0x81, 0x3d, 0x0c, 0x40, 0x49, 0x19, 0x35, 0x55, 0x0c, 0x00, 0x05, 0xf3, 0x04, 0x01, 0xff, 0xe1, 0x05, 0x0c, 0x80, 0xb9, 0x02, 0xa2, 0xac, 0x02, 0xa3, 0x9f, 0x02, 0xa4, 0x80, 0x02, 0xe5, 0x0e, 0x0c, 0x80, 0xf6, 0x01, 0xa7, 0xe9, @@ -2702,7 +2703,7 @@ static const unsigned char uname2c_tree[210697] = { 0x00, 0x2e, 0x0c, 0x00, 0xae, 0x85, 0x01, 0xef, 0x12, 0x0c, 0x80, 0x7c, 0xb0, 0x70, 0xb2, 0x5d, 0xb3, 0x4b, 0xb4, 0x2c, 0xf5, 0x09, 0x0c, 0x80, 0x23, 0xb6, 0x06, 0x42, 0x20, 0x20, 0x2f, 0x0c, 0x40, 0xe1, 0x35, 0x0c, - 0x00, 0x07, 0x77, 0xb7, 0x01, 0xff, 0xec, 0x0c, 0x0c, 0x80, 0x09, 0xf2, + 0x00, 0x07, 0x93, 0xb7, 0x01, 0xff, 0xec, 0x0c, 0x0c, 0x80, 0x09, 0xf2, 0x0b, 0x0c, 0xc0, 0x00, 0xf2, 0x60, 0x0c, 0x40, 0xec, 0x61, 0x0c, 0x40, 0xf5, 0x0a, 0x0c, 0x40, 0xe1, 0x24, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x25, 0x0c, 0x00, 0x42, 0x45, 0x05, 0x58, 0x0c, 0x00, 0xb4, 0x01, 0xff, 0xe1, @@ -2712,7 +2713,7 @@ static const unsigned char uname2c_tree[210697] = { 0x42, 0x71, 0x00, 0x5a, 0x0c, 0x40, 0xe1, 0x2a, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x2b, 0x0c, 0x40, 0xef, 0x13, 0x0c, 0x40, 0xe1, 0x28, 0x0c, 0x80, 0x12, 0x42, 0x24, 0x02, 0x19, 0x0c, 0x00, 0x42, 0x2f, 0x04, 0x23, 0x0c, - 0x00, 0x42, 0x20, 0x20, 0x1e, 0x0c, 0x40, 0x4b, 0xd5, 0x95, 0x5d, 0x0c, + 0x00, 0x42, 0x20, 0x20, 0x1e, 0x0c, 0x40, 0x4b, 0xe8, 0x95, 0x5d, 0x0c, 0x40, 0xe1, 0x32, 0x0c, 0x00, 0xac, 0x01, 0xff, 0xe1, 0x33, 0x0c, 0x00, 0x42, 0x74, 0x00, 0x34, 0x0c, 0x40, 0xe1, 0x15, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x16, 0x0c, 0x40, 0xe1, 0x1c, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x1d, @@ -2722,33 +2723,33 @@ static const unsigned char uname2c_tree[210697] = { 0x0c, 0x40, 0xe1, 0x21, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x22, 0x0c, 0x40, 0xe1, 0x1a, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x1b, 0x0c, 0x40, 0xe1, 0x2c, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x2d, 0x0c, 0x40, 0xe1, 0x06, 0x0c, 0x00, - 0xe9, 0x10, 0x0c, 0x00, 0xf5, 0x14, 0x0c, 0x40, 0x08, 0x75, 0xbf, 0x29, - 0xb4, 0x06, 0x5b, 0xf5, 0x1b, 0x78, 0x0c, 0x40, 0x09, 0x77, 0xb0, 0x11, - 0x07, 0x4c, 0xcd, 0x01, 0xff, 0x53, 0xc2, 0x43, 0x7d, 0x0c, 0x00, 0x52, - 0xfe, 0x1b, 0x7a, 0x0c, 0x40, 0x53, 0xc2, 0x43, 0x7e, 0x0c, 0x00, 0x52, - 0xfe, 0x1b, 0x7b, 0x0c, 0x40, 0x53, 0xc2, 0x43, 0x7c, 0x0c, 0x00, 0x52, + 0xe9, 0x10, 0x0c, 0x00, 0xf5, 0x14, 0x0c, 0x40, 0x08, 0x91, 0xbf, 0x29, + 0xb4, 0x06, 0x5b, 0xf5, 0x1b, 0x78, 0x0c, 0x40, 0x09, 0x93, 0xb0, 0x11, + 0x07, 0x68, 0xcd, 0x01, 0xff, 0x53, 0xd7, 0x43, 0x7d, 0x0c, 0x00, 0x52, + 0xfe, 0x1b, 0x7a, 0x0c, 0x40, 0x53, 0xd7, 0x43, 0x7e, 0x0c, 0x00, 0x52, + 0xfe, 0x1b, 0x7b, 0x0c, 0x40, 0x53, 0xd7, 0x43, 0x7c, 0x0c, 0x00, 0x52, 0xfe, 0x1b, 0x79, 0x0c, 0x40, 0x45, 0xd1, 0x09, 0x6e, 0x0c, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x6f, 0x0c, 0x00, 0x43, 0xcd, 0x09, 0x67, 0x0c, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x66, 0x0c, 0x40, 0x44, 0x25, 0x01, 0x69, 0x0c, 0x00, 0x42, 0x15, 0x02, 0x68, 0x0c, 0x40, 0x44, 0x96, 0x1b, 0x6d, 0x0c, 0x00, 0x42, 0x30, 0x27, 0x6c, 0x0c, 0x40, 0x43, 0xd7, 0x04, 0x6b, 0x0c, 0x00, 0x43, 0xfb, 0x05, 0x6a, 0x0c, 0x40, 0x06, - 0x9b, 0x38, 0x0c, 0x45, 0x78, 0xc1, 0x2d, 0xf5, 0x01, 0x46, 0xdb, 0x2e, - 0xfa, 0xf4, 0x41, 0x4d, 0x01, 0x7e, 0x06, 0x27, 0x00, 0x4f, 0x65, 0x6a, + 0xb0, 0x38, 0x0c, 0x45, 0x94, 0xc1, 0x2d, 0xf5, 0x01, 0x46, 0xdb, 0x2e, + 0xfa, 0xf4, 0x41, 0x4d, 0x08, 0x7e, 0x06, 0x27, 0x00, 0x4f, 0x7a, 0x6a, 0x80, 0xf5, 0x01, 0x03, 0xe1, 0x0b, 0x06, 0x44, 0xdb, 0x02, 0x21, 0x21, - 0x40, 0x45, 0xa4, 0x38, 0xde, 0xf4, 0x81, 0x06, 0x45, 0x9f, 0x81, 0x15, - 0x23, 0x40, 0x4a, 0xf5, 0x9d, 0x7c, 0xf5, 0x41, 0x52, 0x5f, 0x4b, 0x75, - 0xf3, 0x01, 0x43, 0xf4, 0x3f, 0xd6, 0xfa, 0x01, 0xb2, 0x01, 0xff, 0x4d, - 0x21, 0x79, 0xc6, 0xf4, 0x01, 0x05, 0x7e, 0x0b, 0x01, 0xff, 0x57, 0x59, + 0x40, 0x45, 0xb9, 0x38, 0xde, 0xf4, 0x81, 0x06, 0x45, 0xa6, 0x81, 0x15, + 0x23, 0x40, 0x4a, 0x08, 0x9e, 0x7c, 0xf5, 0x41, 0x52, 0x74, 0x4b, 0x75, + 0xf3, 0x01, 0x43, 0x09, 0x40, 0xd6, 0xfa, 0x01, 0xb2, 0x01, 0xff, 0x4d, + 0x28, 0x79, 0xc6, 0xf4, 0x01, 0x05, 0x7e, 0x0b, 0x01, 0xff, 0x57, 0x59, 0x2a, 0xba, 0x27, 0x00, 0x4f, 0xbd, 0x1a, 0x3b, 0x27, 0x40, 0x5a, 0xe0, 0x1c, 0xd3, 0xf3, 0x01, 0x42, 0x18, 0x04, 0x2e, 0xf3, 0x01, 0xa7, 0xe9, - 0x33, 0x02, 0x48, 0x03, 0xa3, 0x28, 0xab, 0xf7, 0x24, 0x09, 0x36, 0x9f, + 0x33, 0x02, 0x48, 0x03, 0xa3, 0x28, 0xab, 0xf7, 0x24, 0x09, 0x49, 0x9f, 0xe6, 0x24, 0xad, 0xa9, 0x1e, 0xae, 0x1c, 0x03, 0x3c, 0x2d, 0x0c, 0x44, - 0xb2, 0xe7, 0x49, 0x26, 0x00, 0x42, 0x5c, 0x0b, 0x95, 0xf6, 0x41, 0x49, - 0x01, 0xae, 0xad, 0xf5, 0x01, 0x45, 0x38, 0xcd, 0x07, 0x27, 0x40, 0x4a, - 0xd1, 0x9e, 0x8b, 0xf3, 0x01, 0xa7, 0x01, 0xff, 0x45, 0x61, 0xdb, 0x4a, - 0xf3, 0x01, 0x03, 0xbf, 0x49, 0xff, 0x19, 0x03, 0xc3, 0x0b, 0x01, 0xff, - 0x0a, 0x4d, 0xa0, 0x0f, 0xa9, 0x01, 0xff, 0x49, 0xd6, 0x24, 0x02, 0xd8, + 0xce, 0xe7, 0x49, 0x26, 0x00, 0x42, 0x5c, 0x0b, 0x95, 0xf6, 0x41, 0x49, + 0x1d, 0xae, 0xad, 0xf5, 0x01, 0x45, 0x54, 0xcd, 0x07, 0x27, 0x40, 0x4a, + 0xe4, 0x9e, 0x8b, 0xf3, 0x01, 0xa7, 0x01, 0xff, 0x45, 0x7d, 0xdb, 0x4a, + 0xf3, 0x01, 0x03, 0xd4, 0x49, 0xff, 0x19, 0x03, 0xc3, 0x0b, 0x01, 0xff, + 0x0a, 0x60, 0xa0, 0x0f, 0xa9, 0x01, 0xff, 0x49, 0xd6, 0x24, 0x02, 0xd8, 0x00, 0x4d, 0xf1, 0x1d, 0xe0, 0x6f, 0x41, 0x90, 0xbd, 0x16, 0x91, 0x8f, 0x13, 0x92, 0xe1, 0x0f, 0x93, 0xb3, 0x0c, 0x94, 0x85, 0x09, 0x95, 0xd7, 0x05, 0x96, 0xa9, 0x02, 0x97, 0x01, 0xff, 0x90, 0xfb, 0x01, 0x91, 0xd0, @@ -3042,20 +3043,20 @@ static const unsigned char uname2c_tree[210697] = { 0x01, 0xf1, 0x96, 0x6a, 0x01, 0xf8, 0x97, 0x6a, 0x01, 0xfa, 0x95, 0x6a, 0x41, 0xe1, 0xb0, 0x6a, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x6a, 0x01, 0x42, 0x45, 0x05, 0xb6, 0x6a, 0x41, 0xe1, 0xa4, 0x6a, 0x01, 0xa8, 0x01, 0xff, - 0xe1, 0xb4, 0x6a, 0x01, 0x04, 0x5d, 0x30, 0x01, 0xff, 0x43, 0xbb, 0xe8, - 0x93, 0x6a, 0x01, 0x43, 0x75, 0xe9, 0x92, 0x6a, 0x41, 0xe1, 0xa7, 0x6a, + 0xe1, 0xb4, 0x6a, 0x01, 0x04, 0x5d, 0x30, 0x01, 0xff, 0x43, 0xd7, 0xe8, + 0x93, 0x6a, 0x01, 0x43, 0x91, 0xe9, 0x92, 0x6a, 0x41, 0xe1, 0xa7, 0x6a, 0x01, 0x42, 0x22, 0x00, 0xa9, 0x6a, 0x41, 0xe3, 0x71, 0x6a, 0x01, 0xf1, 0x72, 0x6a, 0x01, 0xf8, 0x73, 0x6a, 0x01, 0xfa, 0x70, 0x6a, 0x41, 0xe1, 0xac, 0x6a, 0x01, 0x42, 0x24, 0x02, 0xa3, 0x6a, 0x01, 0x42, 0x22, 0x00, 0xb3, 0x6a, 0x01, 0x42, 0x20, 0x20, 0xa8, 0x6a, 0x41, 0xe1, 0xab, 0x6a, 0x01, 0xe3, 0x9d, 0x6a, 0x01, 0xf1, 0x9e, 0x6a, 0x01, 0xf8, 0x9f, 0x6a, - 0x01, 0xfa, 0x9c, 0x6a, 0x41, 0xe1, 0xae, 0x6a, 0x01, 0x47, 0xa2, 0xc9, + 0x01, 0xfa, 0x9c, 0x6a, 0x41, 0xe1, 0xae, 0x6a, 0x01, 0x47, 0xbe, 0xc9, 0x91, 0x6a, 0x41, 0xe1, 0xa0, 0x6a, 0x01, 0x42, 0x22, 0x00, 0xa1, 0x6a, 0x41, 0xe3, 0x81, 0x6a, 0x01, 0xf1, 0x82, 0x6a, 0x01, 0xf8, 0x83, 0x6a, 0x01, 0xfa, 0x80, 0x6a, 0x41, 0xe1, 0xad, 0x6a, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0xaf, 0x6a, 0x01, 0x42, 0x12, 0x00, 0xb8, 0x6a, 0x41, 0xe1, 0xa2, 0x6a, 0x01, 0x42, 0x22, 0x00, 0xb7, 0x6a, 0x41, 0xe1, 0xbb, 0x6a, 0x01, - 0x47, 0xa9, 0xaf, 0x90, 0x6a, 0x41, 0xe3, 0x7d, 0x6a, 0x01, 0xf1, 0x7e, + 0x47, 0xc5, 0xaf, 0x90, 0x6a, 0x41, 0xe3, 0x7d, 0x6a, 0x01, 0xf1, 0x7e, 0x6a, 0x01, 0xf8, 0x7f, 0x6a, 0x01, 0xfa, 0x7c, 0x6a, 0x41, 0xe1, 0xb1, 0x6a, 0x01, 0x42, 0x22, 0x00, 0xbc, 0x6a, 0x41, 0xe1, 0xb5, 0x6a, 0x01, 0x42, 0x22, 0x00, 0xbd, 0x6a, 0x41, 0xe3, 0x75, 0x6a, 0x01, 0xf1, 0x76, @@ -3067,36 +3068,36 @@ static const unsigned char uname2c_tree[210697] = { 0x01, 0xc3, 0x6a, 0x01, 0x42, 0x15, 0x02, 0xc2, 0x6a, 0x41, 0x44, 0x96, 0x1b, 0xc7, 0x6a, 0x01, 0x42, 0x30, 0x27, 0xc6, 0x6a, 0x41, 0x43, 0xd7, 0x04, 0xc5, 0x6a, 0x01, 0x43, 0xfb, 0x05, 0xc4, 0x6a, 0x41, 0x43, 0x67, - 0x00, 0xd4, 0xfa, 0x01, 0x03, 0x3d, 0x4a, 0x01, 0xff, 0xa1, 0x9a, 0x06, - 0xa3, 0x8b, 0x06, 0xa4, 0xb0, 0x05, 0x09, 0x76, 0x54, 0x93, 0x04, 0x52, - 0x0f, 0x4d, 0xee, 0x1f, 0x01, 0xac, 0xbc, 0x02, 0x4a, 0x57, 0xa5, 0xf4, + 0x00, 0xd4, 0xfa, 0x01, 0x03, 0x52, 0x4a, 0x01, 0xff, 0xa1, 0x9a, 0x06, + 0xa3, 0x8b, 0x06, 0xa4, 0xb0, 0x05, 0x09, 0x8b, 0x54, 0x93, 0x04, 0x52, + 0x24, 0x4d, 0xee, 0x1f, 0x01, 0xac, 0xbc, 0x02, 0x4a, 0x6a, 0xa5, 0xf4, 0x0b, 0x00, 0x07, 0xbf, 0x35, 0x95, 0x02, 0x42, 0x19, 0x04, 0xd0, 0x0b, - 0x00, 0x57, 0x98, 0x2c, 0xff, 0x1f, 0x01, 0x4a, 0x72, 0x79, 0xf9, 0x0b, - 0x00, 0xb3, 0x5b, 0xb4, 0x42, 0x0b, 0x5b, 0x70, 0x0c, 0x54, 0x5c, 0x41, - 0xe4, 0x1f, 0x01, 0x49, 0xf4, 0xb7, 0xf5, 0x0b, 0x40, 0xa1, 0x24, 0xe5, + 0x00, 0x57, 0x98, 0x2c, 0xff, 0x1f, 0x01, 0x4a, 0x79, 0x79, 0xf9, 0x0b, + 0x00, 0xb3, 0x5b, 0xb4, 0x42, 0x0b, 0x70, 0x70, 0x0c, 0x54, 0x71, 0x41, + 0xe4, 0x1f, 0x01, 0x49, 0x10, 0xb8, 0xf5, 0x0b, 0x40, 0xa1, 0x24, 0xe5, 0xc6, 0x0b, 0x80, 0x1b, 0xe9, 0xbf, 0x0b, 0x80, 0x12, 0xef, 0xca, 0x0b, 0x80, 0x09, 0xf5, 0xc1, 0x0b, 0xc0, 0x00, 0xf5, 0xc2, 0x0b, 0x40, 0xef, 0xcb, 0x0b, 0x40, 0xe9, 0xc0, 0x0b, 0x40, 0xe5, 0xc7, 0x0b, 0x40, 0xe1, 0xbe, 0x0b, 0x00, 0xe9, 0xc8, 0x0b, 0x00, 0xf5, 0xcc, 0x0b, 0x40, 0x49, - 0x0d, 0xb4, 0xed, 0x1f, 0x01, 0x0b, 0x66, 0x99, 0x01, 0xff, 0x4b, 0x4f, - 0x92, 0xe8, 0x1f, 0x01, 0x4b, 0x11, 0x98, 0xe9, 0x1f, 0x41, 0x4c, 0x9c, - 0x84, 0xe7, 0x1f, 0x01, 0x04, 0xdc, 0x02, 0x0c, 0x49, 0x79, 0xb4, 0xec, - 0x1f, 0x01, 0x51, 0x3f, 0x58, 0xef, 0x1f, 0x41, 0xa1, 0x81, 0x01, 0x46, - 0x25, 0xd0, 0xd6, 0x1f, 0x01, 0xab, 0x64, 0x02, 0xe2, 0x14, 0x4e, 0x43, - 0x13, 0xbe, 0xd5, 0x1f, 0x01, 0xb0, 0x2c, 0x47, 0x1e, 0xb7, 0xd8, 0x1f, + 0x29, 0xb4, 0xed, 0x1f, 0x01, 0x0b, 0x79, 0x99, 0x01, 0xff, 0x4b, 0x62, + 0x92, 0xe8, 0x1f, 0x01, 0x4b, 0x24, 0x98, 0xe9, 0x1f, 0x41, 0x4c, 0xa3, + 0x84, 0xe7, 0x1f, 0x01, 0x04, 0xdc, 0x02, 0x0c, 0x49, 0x95, 0xb4, 0xec, + 0x1f, 0x01, 0x51, 0x54, 0x58, 0xef, 0x1f, 0x41, 0xa1, 0x81, 0x01, 0x46, + 0x41, 0xd0, 0xd6, 0x1f, 0x01, 0xab, 0x64, 0x02, 0xe2, 0x14, 0x4e, 0x43, + 0x2f, 0xbe, 0xd5, 0x1f, 0x01, 0xb0, 0x2c, 0x47, 0x3a, 0xb7, 0xd8, 0x1f, 0x01, 0xb6, 0x01, 0xff, 0xa1, 0x15, 0x43, 0x4c, 0x2a, 0xe3, 0x1f, 0x01, - 0xa9, 0x01, 0xff, 0x44, 0x49, 0x21, 0xcd, 0x0b, 0x00, 0x45, 0x69, 0x46, - 0x83, 0x0b, 0x40, 0x48, 0x8d, 0xbd, 0xf1, 0x1f, 0x01, 0x46, 0xc9, 0xd4, + 0xa9, 0x01, 0xff, 0x44, 0x49, 0x21, 0xcd, 0x0b, 0x00, 0x45, 0x7e, 0x46, + 0x83, 0x0b, 0x40, 0x48, 0xa9, 0xbd, 0xf1, 0x1f, 0x01, 0x46, 0xe5, 0xd4, 0xe0, 0x1f, 0x41, 0xa1, 0x06, 0x42, 0x10, 0x00, 0xdf, 0x1f, 0x41, 0x44, - 0xa4, 0x70, 0xe1, 0x1f, 0x01, 0x43, 0x2f, 0x04, 0xde, 0x1f, 0x01, 0x46, - 0xf5, 0xd5, 0xdb, 0x1f, 0x41, 0x47, 0x36, 0xc8, 0xdc, 0x1f, 0x01, 0x47, - 0x11, 0xcc, 0xf0, 0x1f, 0x01, 0x49, 0x1c, 0xb7, 0xd9, 0x1f, 0x41, 0x44, - 0xde, 0xe3, 0xdd, 0x1f, 0x01, 0xb5, 0x01, 0xff, 0x44, 0x1f, 0x77, 0xda, - 0x1f, 0x01, 0x43, 0x60, 0x78, 0xe2, 0x1f, 0x41, 0x48, 0x35, 0xba, 0xd7, + 0xb9, 0x70, 0xe1, 0x1f, 0x01, 0x43, 0x2f, 0x04, 0xde, 0x1f, 0x01, 0x46, + 0x11, 0xd6, 0xdb, 0x1f, 0x41, 0x47, 0x52, 0xc8, 0xdc, 0x1f, 0x01, 0x47, + 0x2d, 0xcc, 0xf0, 0x1f, 0x01, 0x49, 0x38, 0xb7, 0xd9, 0x1f, 0x41, 0x44, + 0xfa, 0xe3, 0xdd, 0x1f, 0x01, 0xb5, 0x01, 0xff, 0x44, 0x26, 0x77, 0xda, + 0x1f, 0x01, 0x43, 0x67, 0x78, 0xe2, 0x1f, 0x41, 0x48, 0x51, 0xba, 0xd7, 0x1f, 0x01, 0x47, 0x5c, 0x14, 0x82, 0x0b, 0x40, 0x04, 0xcd, 0x09, 0x0c, 0x44, 0xdb, 0x02, 0xfa, 0x0b, 0x00, 0x43, 0xe0, 0x05, 0xf0, 0x0b, 0x40, - 0x47, 0xe9, 0x0f, 0xf1, 0x0b, 0x00, 0x48, 0x54, 0x58, 0xf2, 0x0b, 0x40, - 0x48, 0x3e, 0x42, 0xe6, 0x1f, 0x01, 0x06, 0xf2, 0x04, 0x01, 0xff, 0xe1, + 0x47, 0xe9, 0x0f, 0xf1, 0x0b, 0x00, 0x48, 0x69, 0x58, 0xf2, 0x0b, 0x40, + 0x48, 0x53, 0x42, 0xe6, 0x1f, 0x01, 0x06, 0xf2, 0x04, 0x01, 0xff, 0xe1, 0x85, 0x0b, 0x80, 0xb1, 0x01, 0x42, 0x37, 0x00, 0x9a, 0x0b, 0x00, 0xe5, 0x8e, 0x0b, 0x80, 0xa1, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x0b, 0x00, 0xe9, 0x87, 0x0b, 0x80, 0x91, 0x01, 0x42, 0x77, 0x24, 0x9c, 0x0b, 0x00, 0x42, @@ -3114,37 +3115,37 @@ static const unsigned char uname2c_tree[210697] = { 0x42, 0x74, 0x00, 0xb4, 0x0b, 0x40, 0xe9, 0x88, 0x0b, 0x40, 0xe5, 0x8f, 0x0b, 0x40, 0xe1, 0x86, 0x0b, 0x00, 0xe9, 0x90, 0x0b, 0x00, 0xf5, 0x94, 0x0b, 0x40, 0x58, 0x57, 0x25, 0xd4, 0x1f, 0x01, 0x04, 0xcd, 0x09, 0x27, - 0x06, 0x24, 0x01, 0x01, 0xff, 0x4a, 0x47, 0xa1, 0xc6, 0x1f, 0x01, 0x48, - 0x2a, 0x01, 0xd3, 0x1f, 0x01, 0x04, 0x2f, 0x27, 0x06, 0x4a, 0x5d, 0xa9, - 0xcd, 0x1f, 0x41, 0x46, 0x49, 0xa8, 0xce, 0x1f, 0x01, 0x49, 0xeb, 0xb7, + 0x06, 0x24, 0x01, 0x01, 0xff, 0x4a, 0x5a, 0xa1, 0xc6, 0x1f, 0x01, 0x48, + 0x2a, 0x01, 0xd3, 0x1f, 0x01, 0x04, 0x2f, 0x27, 0x06, 0x4a, 0x70, 0xa9, + 0xcd, 0x1f, 0x41, 0x46, 0x5c, 0xa8, 0xce, 0x1f, 0x01, 0x49, 0x07, 0xb8, 0xc7, 0x1f, 0x41, 0x05, 0xd1, 0x09, 0x59, 0xa6, 0x4b, 0x05, 0x79, 0x29, 0x3f, 0x58, 0x1f, 0x27, 0xc1, 0x1f, 0x01, 0x47, 0x2a, 0x01, 0xd0, 0x1f, 0x01, 0x04, 0x2f, 0x27, 0x1d, 0xb4, 0x01, 0xff, 0x44, 0x6a, 0x19, 0xcb, - 0x1f, 0x01, 0xa8, 0x06, 0x48, 0x20, 0x23, 0xc8, 0x1f, 0x41, 0x4b, 0xec, - 0x88, 0xc5, 0x1f, 0x01, 0x59, 0x0f, 0x23, 0xc0, 0x1f, 0x41, 0x06, 0xd3, - 0xd0, 0x06, 0x48, 0xe2, 0xb7, 0xc3, 0x1f, 0x41, 0xd1, 0xc9, 0x1f, 0x01, + 0x1f, 0x01, 0xa8, 0x06, 0x48, 0x20, 0x23, 0xc8, 0x1f, 0x41, 0x4b, 0xf3, + 0x88, 0xc5, 0x1f, 0x01, 0x59, 0x0f, 0x23, 0xc0, 0x1f, 0x41, 0x06, 0xef, + 0xd0, 0x06, 0x48, 0xfe, 0xb7, 0xc3, 0x1f, 0x41, 0xd1, 0xc9, 0x1f, 0x01, 0xd2, 0xca, 0x1f, 0x41, 0xd1, 0xd1, 0x1f, 0x01, 0xd2, 0xd2, 0x1f, 0x41, - 0x44, 0x88, 0xa6, 0xcf, 0x1f, 0x01, 0x47, 0xd3, 0xc9, 0xc4, 0x1f, 0x41, - 0xe8, 0xcc, 0x1f, 0x01, 0x44, 0x24, 0x23, 0xc2, 0x1f, 0x41, 0x47, 0x2d, - 0xc5, 0xf3, 0x0b, 0x00, 0x49, 0xd0, 0xae, 0xf6, 0x0b, 0x00, 0x05, 0xf5, - 0x05, 0x06, 0x53, 0x52, 0x47, 0xe5, 0x1f, 0x41, 0x45, 0xd1, 0x09, 0xee, + 0x44, 0x9b, 0xa6, 0xcf, 0x1f, 0x01, 0x47, 0xef, 0xc9, 0xc4, 0x1f, 0x41, + 0xe8, 0xcc, 0x1f, 0x01, 0x44, 0x24, 0x23, 0xc2, 0x1f, 0x41, 0x47, 0x49, + 0xc5, 0xf3, 0x0b, 0x00, 0x49, 0xec, 0xae, 0xf6, 0x0b, 0x00, 0x05, 0xf5, + 0x05, 0x06, 0x53, 0x67, 0x47, 0xe5, 0x1f, 0x41, 0x45, 0xd1, 0x09, 0xee, 0x0b, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0xef, 0x0b, 0x00, 0x43, 0xcd, 0x09, 0xe7, 0x0b, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xe6, 0x0b, 0x40, 0x44, 0x25, 0x01, 0xe9, 0x0b, 0x00, 0x42, 0x15, 0x02, 0xe8, 0x0b, 0x40, 0x44, 0x96, 0x1b, 0xed, 0x0b, 0x00, 0x42, 0x30, 0x27, 0xec, 0x0b, 0x40, 0x43, 0xd7, 0x04, 0xeb, 0x0b, 0x00, 0x43, 0xfb, 0x05, 0xea, - 0x0b, 0x40, 0x4a, 0x50, 0x92, 0xf7, 0x0b, 0x00, 0x4b, 0x10, 0x9c, 0xea, - 0x1f, 0x41, 0x4b, 0xc4, 0x97, 0xeb, 0x1f, 0x01, 0x4c, 0x30, 0x8d, 0xf8, - 0x0b, 0x00, 0x4d, 0x25, 0x6f, 0xd7, 0x0b, 0x40, 0x44, 0xf8, 0x0f, 0x78, - 0xd3, 0x01, 0x43, 0xcd, 0x09, 0x77, 0xd3, 0x41, 0x48, 0xf5, 0xbb, 0x61, - 0xf9, 0x01, 0x03, 0xa4, 0x09, 0x01, 0xff, 0x51, 0x34, 0x52, 0xb9, 0x16, + 0x0b, 0x40, 0x4a, 0x63, 0x92, 0xf7, 0x0b, 0x00, 0x4b, 0x23, 0x9c, 0xea, + 0x1f, 0x41, 0x4b, 0xd7, 0x97, 0xeb, 0x1f, 0x01, 0x4c, 0x43, 0x8d, 0xf8, + 0x0b, 0x00, 0x4d, 0x3a, 0x6f, 0xd7, 0x0b, 0x40, 0x44, 0xf8, 0x0f, 0x78, + 0xd3, 0x01, 0x43, 0xcd, 0x09, 0x77, 0xd3, 0x41, 0x48, 0x11, 0xbc, 0x61, + 0xf9, 0x01, 0x03, 0xa4, 0x09, 0x01, 0xff, 0x51, 0x49, 0x52, 0xb9, 0x16, 0x01, 0x06, 0xf4, 0x05, 0xd1, 0x02, 0x07, 0xf1, 0x04, 0x4e, 0x05, 0xdb, - 0x02, 0x2d, 0x0b, 0x5b, 0x70, 0x01, 0xff, 0xa1, 0x1a, 0xe5, 0xb2, 0x16, + 0x02, 0x2d, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xa1, 0x1a, 0xe5, 0xb2, 0x16, 0x01, 0xe9, 0xae, 0x16, 0x81, 0x0d, 0xef, 0xb4, 0x16, 0x01, 0xf5, 0xb0, 0x16, 0xc1, 0x00, 0xf5, 0xb1, 0x16, 0x41, 0xe9, 0xaf, 0x16, 0x41, 0xe1, 0xad, 0x16, 0x01, 0xe9, 0xb3, 0x16, 0x01, 0xf5, 0xb5, 0x16, 0x41, 0x48, - 0x5b, 0x14, 0xab, 0x16, 0x01, 0x45, 0xab, 0x3a, 0xb7, 0x16, 0x01, 0x02, - 0x02, 0x00, 0x01, 0xff, 0x44, 0x49, 0x21, 0xb6, 0x16, 0x01, 0x45, 0x69, + 0x5b, 0x14, 0xab, 0x16, 0x01, 0x45, 0xc0, 0x3a, 0xb7, 0x16, 0x01, 0x02, + 0x02, 0x00, 0x01, 0xff, 0x44, 0x49, 0x21, 0xb6, 0x16, 0x01, 0x45, 0x7e, 0x46, 0xac, 0x16, 0x41, 0xe1, 0x80, 0x16, 0x81, 0xe7, 0x01, 0xa2, 0xda, 0x01, 0xa3, 0xcd, 0x01, 0xa4, 0xb4, 0x01, 0xe5, 0x86, 0x16, 0x01, 0xa7, 0xa3, 0x01, 0x42, 0x22, 0x00, 0xa9, 0x16, 0x01, 0xe9, 0x82, 0x16, 0x81, @@ -3165,26 +3166,26 @@ static const unsigned char uname2c_tree[210697] = { 0x06, 0x42, 0x22, 0x00, 0x9c, 0x16, 0x41, 0xe1, 0x96, 0x16, 0x01, 0x42, 0x22, 0x00, 0x97, 0x16, 0x41, 0xe1, 0x8f, 0x16, 0x01, 0x42, 0x22, 0x00, 0x90, 0x16, 0x41, 0xe1, 0xa0, 0x16, 0x01, 0x42, 0x22, 0x00, 0xa1, 0x16, - 0x41, 0xe1, 0x81, 0x16, 0x01, 0xe9, 0x87, 0x16, 0x01, 0x4a, 0x23, 0xa7, + 0x41, 0xe1, 0x81, 0x16, 0x01, 0xe9, 0x87, 0x16, 0x01, 0x4a, 0x36, 0xa7, 0xb8, 0x16, 0x01, 0xf5, 0x89, 0x16, 0x41, 0x45, 0xd1, 0x09, 0xc8, 0x16, 0x01, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0xc9, 0x16, 0x01, 0x43, 0xcd, 0x09, 0xc1, 0x16, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xc0, 0x16, 0x41, 0x44, 0x25, 0x01, 0xc3, 0x16, 0x01, 0x42, 0x15, 0x02, 0xc2, 0x16, 0x41, 0x44, 0x96, 0x1b, 0xc7, 0x16, 0x01, 0x42, 0x30, 0x27, 0xc6, 0x16, 0x41, 0x43, 0xd7, 0x04, 0xc5, 0x16, 0x01, 0x43, 0xfb, 0x05, 0xc4, 0x16, - 0x41, 0x0a, 0xef, 0xa3, 0xfc, 0x09, 0x05, 0x13, 0x9b, 0xc1, 0x03, 0x05, - 0x24, 0xe1, 0x01, 0xff, 0x07, 0xf1, 0x04, 0x91, 0x01, 0x05, 0xa0, 0xdd, - 0x80, 0x01, 0x07, 0x7e, 0x14, 0x5c, 0x09, 0x4d, 0xb6, 0x40, 0x06, 0x11, + 0x41, 0x0a, 0x02, 0xa4, 0xfc, 0x09, 0x05, 0x26, 0x9b, 0xc1, 0x03, 0x05, + 0x40, 0xe1, 0x01, 0xff, 0x07, 0xf1, 0x04, 0x91, 0x01, 0x05, 0xbc, 0xdd, + 0x80, 0x01, 0x07, 0x7e, 0x14, 0x5c, 0x09, 0x69, 0xb6, 0x40, 0x06, 0x11, 0x35, 0x01, 0xff, 0xa1, 0x23, 0xe5, 0xb5, 0xaa, 0x00, 0xe9, 0xb2, 0xaa, 0x80, 0x16, 0xef, 0xb6, 0xaa, 0x00, 0xf5, 0xb4, 0xaa, 0xc0, 0x00, 0xe1, 0xba, 0xaa, 0x00, 0xe5, 0xb3, 0xaa, 0xc0, 0x00, 0xe1, 0xb9, 0xaa, 0x40, 0xe1, 0xb8, 0xaa, 0x40, 0xe1, 0xb1, 0xaa, 0x00, 0xed, 0xbe, 0xaa, 0x00, 0xee, 0xbd, 0xaa, 0x00, 0x42, 0x30, 0x12, 0xbb, 0xaa, 0x00, 0xf9, 0xbc, - 0xaa, 0x40, 0x42, 0xd8, 0x16, 0xbf, 0xaa, 0x00, 0x45, 0x77, 0xde, 0xc0, - 0xaa, 0x00, 0x44, 0x86, 0xe7, 0xc2, 0xaa, 0x00, 0x43, 0x0b, 0x07, 0xc1, - 0xaa, 0x40, 0x46, 0x29, 0xd2, 0xde, 0xaa, 0x00, 0x02, 0xce, 0x02, 0x0c, - 0x45, 0x77, 0xde, 0xdc, 0xaa, 0x00, 0x43, 0x9b, 0x7e, 0xdd, 0xaa, 0x40, - 0x45, 0x6f, 0xdc, 0xdf, 0xaa, 0x00, 0xee, 0xdb, 0xaa, 0x40, 0x43, 0x1c, + 0xaa, 0x40, 0x42, 0xd8, 0x16, 0xbf, 0xaa, 0x00, 0x45, 0x93, 0xde, 0xc0, + 0xaa, 0x00, 0x44, 0xa2, 0xe7, 0xc2, 0xaa, 0x00, 0x43, 0x0b, 0x07, 0xc1, + 0xaa, 0x40, 0x46, 0x45, 0xd2, 0xde, 0xaa, 0x00, 0x02, 0xce, 0x02, 0x0c, + 0x45, 0x93, 0xde, 0xdc, 0xaa, 0x00, 0x43, 0xa2, 0x7e, 0xdd, 0xaa, 0x40, + 0x45, 0x8b, 0xdc, 0xdf, 0xaa, 0x00, 0xee, 0xdb, 0xaa, 0x40, 0x43, 0x1c, 0x01, 0xb0, 0xaa, 0x00, 0x43, 0xae, 0x02, 0xb7, 0xaa, 0x40, 0x05, 0x2a, 0x0a, 0x93, 0x01, 0x04, 0x0d, 0x04, 0x01, 0xff, 0x42, 0x5d, 0x00, 0x9a, 0xaa, 0x00, 0xa3, 0x7c, 0x42, 0x3b, 0x01, 0x92, 0xaa, 0x00, 0x42, 0xe9, @@ -3192,10 +3193,10 @@ static const unsigned char uname2c_tree[210697] = { 0x00, 0xac, 0xaa, 0x00, 0xab, 0x52, 0x42, 0x13, 0x01, 0xa8, 0xaa, 0x00, 0x42, 0x08, 0x07, 0xa2, 0xaa, 0x00, 0xae, 0x34, 0xef, 0xae, 0xaa, 0x00, 0xb0, 0x24, 0x42, 0xd0, 0x00, 0xa6, 0xaa, 0x00, 0x42, 0xe1, 0x02, 0x8e, - 0xaa, 0x00, 0xb4, 0x0c, 0x42, 0xd7, 0x1a, 0xaa, 0xaa, 0x00, 0x42, 0x39, + 0xaa, 0x00, 0xb4, 0x0c, 0x42, 0xd7, 0x1a, 0xaa, 0xaa, 0x00, 0x42, 0x4e, 0x42, 0xa4, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x96, 0xaa, 0x00, 0xef, 0x94, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x9e, 0xaa, 0x00, 0xef, 0x9c, 0xaa, 0x40, - 0x42, 0x60, 0x12, 0x88, 0xaa, 0x00, 0xef, 0x98, 0xaa, 0x00, 0x42, 0x39, + 0x42, 0x60, 0x12, 0x88, 0xaa, 0x00, 0xef, 0x98, 0xaa, 0x00, 0x42, 0x4e, 0x42, 0x90, 0xaa, 0x40, 0xa8, 0x04, 0xef, 0x80, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x84, 0xaa, 0x00, 0xef, 0x82, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x8c, 0xaa, 0x00, 0xef, 0x8a, 0xaa, 0x40, 0x42, 0x5d, 0x00, 0x9b, 0xaa, 0x00, @@ -3204,20 +3205,20 @@ static const unsigned char uname2c_tree[210697] = { 0xaa, 0x00, 0xab, 0x52, 0x42, 0x13, 0x01, 0xa9, 0xaa, 0x00, 0x42, 0x08, 0x07, 0xa3, 0xaa, 0x00, 0xae, 0x34, 0xef, 0xaf, 0xaa, 0x00, 0xb0, 0x24, 0x42, 0xd0, 0x00, 0xa7, 0xaa, 0x00, 0x42, 0xe1, 0x02, 0x8f, 0xaa, 0x00, - 0xb4, 0x0c, 0x42, 0xd7, 0x1a, 0xab, 0xaa, 0x00, 0x42, 0x39, 0x42, 0xa5, + 0xb4, 0x0c, 0x42, 0xd7, 0x1a, 0xab, 0xaa, 0x00, 0x42, 0x4e, 0x42, 0xa5, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x97, 0xaa, 0x00, 0xef, 0x95, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x9f, 0xaa, 0x00, 0xef, 0x9d, 0xaa, 0x40, 0x42, 0x60, - 0x12, 0x89, 0xaa, 0x00, 0xef, 0x99, 0xaa, 0x00, 0x42, 0x39, 0x42, 0x91, + 0x12, 0x89, 0xaa, 0x00, 0xef, 0x99, 0xaa, 0x00, 0x42, 0x4e, 0x42, 0x91, 0xaa, 0x40, 0xa8, 0x04, 0xef, 0x81, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x85, 0xaa, 0x00, 0xef, 0x83, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x8d, 0xaa, 0x00, - 0xef, 0x8b, 0xaa, 0x40, 0x02, 0x18, 0x04, 0xe9, 0x05, 0x0b, 0xee, 0x94, + 0xef, 0x8b, 0xaa, 0x40, 0x02, 0x18, 0x04, 0xe9, 0x05, 0x0b, 0x01, 0x95, 0xa2, 0x05, 0x07, 0xf1, 0x04, 0xdd, 0x02, 0x05, 0xdb, 0x02, 0xac, 0x01, - 0x0b, 0x13, 0x9b, 0x66, 0x0b, 0x5b, 0x70, 0x01, 0xff, 0xe1, 0x61, 0x1a, + 0x0b, 0x26, 0x9b, 0x66, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xe1, 0x61, 0x1a, 0x80, 0x50, 0xe5, 0x6e, 0x1a, 0x00, 0xe9, 0x65, 0x1a, 0x80, 0x43, 0x47, - 0xde, 0xc8, 0x62, 0x1a, 0x00, 0xef, 0x6b, 0x1a, 0x80, 0x20, 0xb4, 0x12, + 0xfa, 0xc8, 0x62, 0x1a, 0x00, 0xef, 0x6b, 0x1a, 0x80, 0x20, 0xb4, 0x12, 0xf5, 0x69, 0x1a, 0xc0, 0x00, 0xe5, 0x67, 0x1a, 0x00, 0xf5, 0x6a, 0x1a, - 0xc0, 0x00, 0xe5, 0x68, 0x1a, 0x40, 0x46, 0xf6, 0xcb, 0x64, 0x1a, 0x00, - 0x46, 0xe1, 0xd1, 0x72, 0x1a, 0x40, 0x02, 0x5a, 0x00, 0x08, 0xef, 0x70, + 0xc0, 0x00, 0xe5, 0x68, 0x1a, 0x40, 0x46, 0x12, 0xcc, 0x64, 0x1a, 0x00, + 0x46, 0xfd, 0xd1, 0x72, 0x1a, 0x40, 0x02, 0x5a, 0x00, 0x08, 0xef, 0x70, 0x1a, 0x00, 0xf9, 0x6d, 0x1a, 0x40, 0x45, 0x5c, 0x00, 0x73, 0x1a, 0x00, 0x45, 0x25, 0x06, 0x6c, 0x1a, 0x40, 0xe9, 0x66, 0x1a, 0x40, 0xe1, 0x63, 0x1a, 0x00, 0xe5, 0x6f, 0x1a, 0x00, 0xe9, 0x71, 0x1a, 0x40, 0x45, 0xd1, @@ -3226,23 +3227,23 @@ static const unsigned char uname2c_tree[210697] = { 0x1b, 0x90, 0x1a, 0x40, 0x44, 0x25, 0x01, 0x93, 0x1a, 0x00, 0x42, 0x15, 0x02, 0x92, 0x1a, 0x40, 0x44, 0x96, 0x1b, 0x97, 0x1a, 0x00, 0x42, 0x30, 0x27, 0x96, 0x1a, 0x40, 0x43, 0xd7, 0x04, 0x95, 0x1a, 0x00, 0x43, 0xfb, - 0x05, 0x94, 0x1a, 0x40, 0x45, 0x2b, 0xda, 0xad, 0x1a, 0x00, 0x46, 0xa9, - 0xd0, 0xa5, 0x1a, 0x00, 0xa8, 0x91, 0x01, 0xab, 0x61, 0x04, 0x6e, 0x40, + 0x05, 0x94, 0x1a, 0x40, 0x45, 0x47, 0xda, 0xad, 0x1a, 0x00, 0x46, 0xc5, + 0xd0, 0xa5, 0x1a, 0x00, 0xa8, 0x91, 0x01, 0xab, 0x61, 0x04, 0x83, 0x40, 0x44, 0xb2, 0x36, 0x02, 0x45, 0x05, 0x19, 0x05, 0xec, 0x2d, 0x0d, 0x45, - 0x29, 0x06, 0xa0, 0x1a, 0xc0, 0x00, 0x44, 0xe6, 0xe7, 0xa1, 0x1a, 0x40, - 0xd1, 0x75, 0x1a, 0x00, 0xd2, 0x76, 0x1a, 0x40, 0x43, 0x78, 0x86, 0x60, - 0x1a, 0x00, 0x45, 0x70, 0xe0, 0xaa, 0x1a, 0x80, 0x06, 0x43, 0x93, 0x3b, - 0xa2, 0x1a, 0x40, 0x43, 0xf6, 0x6e, 0xab, 0x1a, 0x40, 0x46, 0x1d, 0xcf, - 0x7a, 0x1a, 0x00, 0x54, 0x4c, 0x3d, 0xa6, 0x1a, 0x40, 0x44, 0x48, 0x9f, - 0x74, 0x1a, 0x80, 0x0c, 0x43, 0x9b, 0x7e, 0x7b, 0x1a, 0x00, 0x45, 0x83, - 0xe1, 0xa7, 0x1a, 0x40, 0x44, 0x13, 0x64, 0x58, 0x1a, 0x40, 0x43, 0xda, - 0x10, 0xa8, 0x1a, 0x80, 0x21, 0x43, 0xbe, 0x4e, 0xa3, 0x1a, 0x00, 0x04, - 0x5e, 0xe5, 0x01, 0xff, 0x06, 0xeb, 0x2d, 0x06, 0x4a, 0x31, 0x9e, 0x7c, + 0x29, 0x06, 0xa0, 0x1a, 0xc0, 0x00, 0x44, 0x02, 0xe8, 0xa1, 0x1a, 0x40, + 0xd1, 0x75, 0x1a, 0x00, 0xd2, 0x76, 0x1a, 0x40, 0x43, 0x7f, 0x86, 0x60, + 0x1a, 0x00, 0x45, 0x8c, 0xe0, 0xaa, 0x1a, 0x80, 0x06, 0x43, 0xa8, 0x3b, + 0xa2, 0x1a, 0x40, 0x43, 0x0b, 0x6f, 0xab, 0x1a, 0x40, 0x46, 0x39, 0xcf, + 0x7a, 0x1a, 0x00, 0x54, 0x61, 0x3d, 0xa6, 0x1a, 0x40, 0x44, 0x5b, 0x9f, + 0x74, 0x1a, 0x80, 0x0c, 0x43, 0xa2, 0x7e, 0x7b, 0x1a, 0x00, 0x45, 0x9f, + 0xe1, 0xa7, 0x1a, 0x40, 0x44, 0x28, 0x64, 0x58, 0x1a, 0x40, 0x43, 0xda, + 0x10, 0xa8, 0x1a, 0x80, 0x21, 0x43, 0xd3, 0x4e, 0xa3, 0x1a, 0x00, 0x04, + 0x7a, 0xe5, 0x01, 0xff, 0x06, 0xeb, 0x2d, 0x06, 0x4a, 0x44, 0x9e, 0x7c, 0x1a, 0x40, 0xd3, 0x77, 0x1a, 0x00, 0xd4, 0x78, 0x1a, 0x00, 0xd5, 0x79, - 0x1a, 0x40, 0x43, 0xf6, 0x6e, 0xa9, 0x1a, 0x40, 0x43, 0x1c, 0x01, 0xac, - 0x1a, 0x00, 0x42, 0x0a, 0x63, 0xa4, 0x1a, 0x40, 0xe1, 0x4b, 0x1a, 0x00, + 0x1a, 0x40, 0x43, 0x0b, 0x6f, 0xa9, 0x1a, 0x40, 0x43, 0x1c, 0x01, 0xac, + 0x1a, 0x00, 0x42, 0x1f, 0x63, 0xa4, 0x1a, 0x40, 0xe1, 0x4b, 0x1a, 0x00, 0x42, 0x16, 0x00, 0x37, 0x1a, 0x00, 0x42, 0x68, 0x0f, 0x2f, 0x1a, 0x00, - 0x42, 0x27, 0x01, 0x51, 0x1a, 0x00, 0x48, 0xc5, 0xbc, 0x54, 0x1a, 0x00, + 0x42, 0x27, 0x01, 0x51, 0x1a, 0x00, 0x48, 0xe1, 0xbc, 0x54, 0x1a, 0x00, 0x05, 0x2a, 0x0a, 0xbf, 0x01, 0xe9, 0x4d, 0x1a, 0x80, 0xb5, 0x01, 0xac, 0x46, 0x42, 0x6c, 0x00, 0x3e, 0x1a, 0x00, 0xae, 0x2e, 0x42, 0x99, 0x04, 0x52, 0x1a, 0x00, 0xb2, 0x0f, 0xf5, 0x4f, 0x1a, 0x80, 0x06, 0x42, 0xa9, @@ -3253,14 +3254,14 @@ static const unsigned char uname2c_tree[210697] = { 0x43, 0x1a, 0x80, 0x64, 0x42, 0x74, 0x00, 0x4a, 0x1a, 0x00, 0x03, 0xd1, 0x00, 0x06, 0x42, 0x30, 0x12, 0x44, 0x1a, 0x40, 0xa3, 0x48, 0x42, 0xed, 0x06, 0x3c, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x4c, 0x1a, 0x00, 0xab, 0x2a, - 0xb0, 0x1e, 0x45, 0x05, 0x3e, 0x30, 0x1a, 0x00, 0x42, 0x45, 0x05, 0x2a, + 0xb0, 0x1e, 0x45, 0x1a, 0x3e, 0x30, 0x1a, 0x00, 0x42, 0x45, 0x05, 0x2a, 0x1a, 0x00, 0xb4, 0x06, 0x42, 0x20, 0x20, 0x3f, 0x1a, 0x40, 0xe1, 0x34, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x35, 0x1a, 0x40, 0xe1, 0x3b, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x3d, 0x1a, 0x40, 0xe1, 0x23, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x25, 0x1a, 0x00, 0x42, 0x06, 0x24, 0x24, 0x1a, 0x40, 0xe1, 0x29, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x2b, 0x1a, 0x40, 0xe5, 0x53, 0x1a, 0x40, 0xe9, 0x4e, 0x1a, 0x40, 0xa3, 0x54, 0x42, 0xed, 0x06, 0x3a, 0x1a, 0x00, - 0x42, 0x22, 0x00, 0x49, 0x1a, 0x00, 0xab, 0x36, 0xb0, 0x2a, 0x45, 0x05, + 0x42, 0x22, 0x00, 0x49, 0x1a, 0x00, 0xab, 0x36, 0xb0, 0x2a, 0x45, 0x1a, 0x3e, 0x2e, 0x1a, 0x00, 0xb3, 0x12, 0xb4, 0x06, 0x42, 0x20, 0x20, 0x40, 0x1a, 0x40, 0xe1, 0x32, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x33, 0x1a, 0x40, 0xe1, 0x48, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x46, 0x1a, 0x00, 0x42, 0x45, @@ -3274,10 +3275,10 @@ static const unsigned char uname2c_tree[210697] = { 0x1b, 0x87, 0x1a, 0x00, 0x42, 0x30, 0x27, 0x86, 0x1a, 0x40, 0x43, 0xd7, 0x04, 0x85, 0x1a, 0x00, 0x43, 0xfb, 0x05, 0x84, 0x1a, 0x40, 0x59, 0x2e, 0x22, 0x7f, 0x1a, 0x00, 0x0d, 0x56, 0x2f, 0x01, 0xff, 0x42, 0x16, 0x00, - 0x5d, 0x1a, 0x00, 0x49, 0xa8, 0xaf, 0x59, 0x1a, 0x00, 0x54, 0x00, 0x3e, + 0x5d, 0x1a, 0x00, 0x49, 0xc4, 0xaf, 0x59, 0x1a, 0x00, 0x54, 0x15, 0x3e, 0x5b, 0x1a, 0x00, 0xac, 0x1d, 0xad, 0x06, 0x42, 0x45, 0x05, 0x5e, 0x1a, 0x40, 0xe1, 0x5c, 0x1a, 0x00, 0x06, 0x64, 0x2f, 0x01, 0xff, 0x42, 0x74, - 0x00, 0x56, 0x1a, 0x00, 0x42, 0x71, 0x00, 0x55, 0x1a, 0x40, 0x4a, 0xbd, + 0x00, 0x56, 0x1a, 0x00, 0x42, 0x71, 0x00, 0x55, 0x1a, 0x40, 0x4a, 0xd0, 0x9e, 0x57, 0x1a, 0x00, 0x45, 0x7b, 0x31, 0x5a, 0x1a, 0x40, 0xe1, 0x63, 0x19, 0x80, 0xb0, 0x01, 0xe5, 0x6b, 0x19, 0x80, 0xa2, 0x01, 0x42, 0xed, 0x06, 0x5c, 0x19, 0x00, 0x42, 0x22, 0x00, 0x5e, 0x19, 0x00, 0xe9, 0x64, @@ -3295,8 +3296,8 @@ static const unsigned char uname2c_tree[210697] = { 0x42, 0x24, 0x02, 0x52, 0x19, 0x40, 0xe1, 0x50, 0x19, 0x00, 0x42, 0x22, 0x00, 0x60, 0x19, 0x40, 0xe5, 0x65, 0x19, 0x00, 0xe8, 0x66, 0x19, 0x40, 0xe9, 0x6d, 0x19, 0x00, 0x42, 0x30, 0x12, 0x6c, 0x19, 0x40, 0x80, 0x82, - 0x02, 0x05, 0x8b, 0xd9, 0x70, 0x06, 0xcb, 0xcf, 0x01, 0xff, 0x07, 0xf1, - 0x04, 0x0d, 0x0b, 0x5b, 0x70, 0x01, 0xff, 0xe9, 0x72, 0x17, 0x00, 0xf5, + 0x02, 0x05, 0xa7, 0xd9, 0x70, 0x06, 0xe7, 0xcf, 0x01, 0xff, 0x07, 0xf1, + 0x04, 0x0d, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xe9, 0x72, 0x17, 0x00, 0xf5, 0x73, 0x17, 0x40, 0xe1, 0x60, 0x17, 0x00, 0x42, 0x16, 0x00, 0x6a, 0x17, 0x00, 0x42, 0x68, 0x0f, 0x67, 0x17, 0x00, 0x42, 0x24, 0x02, 0x64, 0x17, 0x00, 0xe9, 0x61, 0x17, 0x00, 0x42, 0x1b, 0x02, 0x63, 0x17, 0x00, 0x42, @@ -3305,8 +3306,8 @@ static const unsigned char uname2c_tree[210697] = { 0x00, 0x42, 0x12, 0x00, 0x66, 0x17, 0x00, 0xf5, 0x62, 0x17, 0x00, 0x42, 0xa9, 0x01, 0x6f, 0x17, 0x00, 0x42, 0x20, 0x20, 0x6c, 0x17, 0x40, 0xe1, 0x68, 0x17, 0x00, 0x42, 0x24, 0x02, 0x65, 0x17, 0x40, 0x07, 0xf1, 0x04, - 0x1d, 0x05, 0xdb, 0x02, 0x0d, 0x0b, 0x5b, 0x70, 0x01, 0xff, 0xe9, 0x12, - 0x17, 0x00, 0xf5, 0x13, 0x17, 0x40, 0x48, 0x46, 0x81, 0x15, 0x17, 0x00, + 0x1d, 0x05, 0xdb, 0x02, 0x0d, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xe9, 0x12, + 0x17, 0x00, 0xf5, 0x13, 0x17, 0x40, 0x48, 0x4d, 0x81, 0x15, 0x17, 0x00, 0x46, 0x47, 0x21, 0x14, 0x17, 0x40, 0xe1, 0x00, 0x17, 0x80, 0x62, 0x42, 0x16, 0x00, 0x0a, 0x17, 0x00, 0x42, 0x68, 0x0f, 0x07, 0x17, 0x00, 0x42, 0x24, 0x02, 0x04, 0x17, 0x00, 0x42, 0x22, 0x00, 0x11, 0x17, 0x00, 0xe9, @@ -3316,19 +3317,19 @@ static const unsigned char uname2c_tree[210697] = { 0x45, 0x05, 0x10, 0x17, 0x00, 0x42, 0x12, 0x00, 0x06, 0x17, 0x00, 0xf5, 0x02, 0x17, 0x00, 0x42, 0xa9, 0x01, 0x0f, 0x17, 0x00, 0x42, 0x20, 0x20, 0x0c, 0x17, 0x40, 0xe1, 0x08, 0x17, 0x00, 0x42, 0x24, 0x02, 0x05, 0x17, - 0x40, 0x49, 0xee, 0xb4, 0x1f, 0x17, 0x40, 0xa1, 0x82, 0x04, 0xa3, 0xe1, + 0x40, 0x49, 0x0a, 0xb5, 0x1f, 0x17, 0x40, 0xa1, 0x82, 0x04, 0xa3, 0xe1, 0x03, 0xa4, 0x92, 0x03, 0xa5, 0x83, 0x03, 0x49, 0xa0, 0x14, 0x2e, 0x00, - 0x0e, 0x02, 0x87, 0x00, 0xec, 0x02, 0x4c, 0x44, 0x88, 0x2d, 0x00, 0x0e, - 0xac, 0x63, 0x4b, 0x11, 0x98, 0x23, 0x00, 0x0e, 0xb0, 0x4f, 0x02, 0x7c, + 0x0e, 0x02, 0x87, 0x00, 0xec, 0x02, 0x4c, 0x4b, 0x88, 0x2d, 0x00, 0x0e, + 0xac, 0x63, 0x4b, 0x24, 0x98, 0x23, 0x00, 0x0e, 0xb0, 0x4f, 0x02, 0x7c, 0x00, 0x3f, 0xb2, 0x20, 0xb3, 0x0c, 0x45, 0x99, 0x20, 0x7e, 0x00, 0x0e, - 0x4d, 0x38, 0x3a, 0x7c, 0x00, 0x4e, 0x48, 0x32, 0x54, 0x3b, 0x00, 0x0e, - 0x46, 0x68, 0x2d, 0x2f, 0x00, 0x0e, 0x44, 0x4e, 0x47, 0x20, 0x00, 0x4e, - 0x4e, 0xa1, 0x6b, 0x5c, 0x00, 0x0e, 0x05, 0xc9, 0x00, 0x01, 0xff, 0x4d, + 0x4d, 0x4d, 0x3a, 0x7c, 0x00, 0x4e, 0x48, 0x47, 0x54, 0x3b, 0x00, 0x0e, + 0x46, 0x68, 0x2d, 0x2f, 0x00, 0x0e, 0x44, 0x63, 0x47, 0x20, 0x00, 0x4e, + 0x4e, 0xb6, 0x6b, 0x5c, 0x00, 0x0e, 0x05, 0xc9, 0x00, 0x01, 0xff, 0x4d, 0x88, 0x08, 0x7d, 0x00, 0x0e, 0x4b, 0x70, 0x1f, 0x29, 0x00, 0x0e, 0x4e, 0xe1, 0x23, 0x5d, 0x00, 0x4e, 0x4b, 0xbf, 0x30, 0x3f, 0x00, 0x0e, 0x4c, - 0x20, 0x04, 0x22, 0x00, 0x4e, 0x4b, 0xc5, 0x93, 0x25, 0x00, 0x0e, 0x48, - 0x1a, 0x6b, 0x2b, 0x00, 0x4e, 0x05, 0xe4, 0x04, 0x24, 0xa5, 0x06, 0x47, - 0xf4, 0x82, 0x5f, 0x00, 0x4e, 0x03, 0xc5, 0x00, 0x06, 0x4c, 0xa8, 0x8d, + 0x20, 0x04, 0x22, 0x00, 0x4e, 0x4b, 0xd8, 0x93, 0x25, 0x00, 0x0e, 0x48, + 0x2f, 0x6b, 0x2b, 0x00, 0x4e, 0x05, 0xe4, 0x04, 0x24, 0xa5, 0x06, 0x47, + 0xfb, 0x82, 0x5f, 0x00, 0x4e, 0x03, 0xc5, 0x00, 0x06, 0x4c, 0xbb, 0x8d, 0x3c, 0x00, 0x4e, 0x4d, 0x88, 0x08, 0x7b, 0x00, 0x0e, 0x4b, 0x70, 0x1f, 0x28, 0x00, 0x0e, 0x4e, 0xe1, 0x23, 0x5b, 0x00, 0x4e, 0x0f, 0xe9, 0x04, 0x6d, 0x0d, 0x7c, 0x07, 0x01, 0xff, 0xe1, 0x61, 0x00, 0x0e, 0xe2, 0x62, @@ -3349,9 +3350,9 @@ static const unsigned char uname2c_tree[210697] = { 0x00, 0x0e, 0xf3, 0x53, 0x00, 0x0e, 0xf4, 0x54, 0x00, 0x0e, 0xf5, 0x55, 0x00, 0x0e, 0xf6, 0x56, 0x00, 0x0e, 0xf7, 0x57, 0x00, 0x0e, 0xf8, 0x58, 0x00, 0x0e, 0xf9, 0x59, 0x00, 0x0e, 0xfa, 0x5a, 0x00, 0x4e, 0x4a, 0x7b, - 0x20, 0x60, 0x00, 0x0e, 0x4f, 0xbc, 0x54, 0x3e, 0x00, 0x4e, 0x4a, 0xa3, + 0x20, 0x60, 0x00, 0x0e, 0x4f, 0xd1, 0x54, 0x3e, 0x00, 0x4e, 0x4a, 0xa3, 0x11, 0x3d, 0x00, 0x0e, 0x4f, 0xae, 0x00, 0x21, 0x00, 0x4e, 0x05, 0xf5, - 0x05, 0x06, 0x4a, 0x00, 0x93, 0x24, 0x00, 0x4e, 0x45, 0xd1, 0x09, 0x38, + 0x05, 0x06, 0x4a, 0x13, 0x93, 0x24, 0x00, 0x4e, 0x45, 0xd1, 0x09, 0x38, 0x00, 0x0e, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x39, 0x00, 0x0e, 0x43, 0xcd, 0x09, 0x31, 0x00, 0x0e, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x30, 0x00, 0x4e, 0x44, 0x25, 0x01, 0x33, 0x00, 0x0e, 0x42, 0x15, 0x02, 0x32, @@ -3359,102 +3360,102 @@ static const unsigned char uname2c_tree[210697] = { 0x00, 0x4e, 0x43, 0xd7, 0x04, 0x35, 0x00, 0x0e, 0x43, 0xfb, 0x05, 0x34, 0x00, 0x4e, 0x50, 0xd5, 0x03, 0x5e, 0x00, 0x0e, 0xaf, 0x01, 0xff, 0x43, 0xac, 0x10, 0x3a, 0x00, 0x0e, 0x02, 0x1a, 0x04, 0x01, 0xff, 0xe1, 0x2c, - 0x00, 0x0e, 0x49, 0x45, 0xaf, 0x40, 0x00, 0x4e, 0x48, 0x94, 0x39, 0x26, + 0x00, 0x0e, 0x49, 0x61, 0xaf, 0x40, 0x00, 0x4e, 0x48, 0xa9, 0x39, 0x26, 0x00, 0x0e, 0x49, 0x4d, 0x32, 0x27, 0x00, 0x0e, 0x47, 0x95, 0x0b, 0x2a, - 0x00, 0x4e, 0x43, 0xc7, 0x70, 0x96, 0xf9, 0x01, 0x45, 0xd0, 0x44, 0x55, - 0xf4, 0x41, 0x4c, 0x94, 0x83, 0xcc, 0x29, 0x00, 0xa1, 0xf2, 0x7c, 0xa3, + 0x00, 0x4e, 0x43, 0xdc, 0x70, 0x96, 0xf9, 0x01, 0x45, 0xe5, 0x44, 0x55, + 0xf4, 0x41, 0x4c, 0x9b, 0x83, 0xcc, 0x29, 0x00, 0xa1, 0xf2, 0x7c, 0xa3, 0xd6, 0x7b, 0xa5, 0xf3, 0x79, 0xa8, 0xd1, 0x70, 0xa9, 0x86, 0x3a, 0xab, 0xd9, 0x39, 0xac, 0xaf, 0x38, 0xad, 0xff, 0x33, 0xae, 0xc4, 0x33, 0xaf, 0xf4, 0x28, 0xb0, 0xa5, 0x27, 0x02, 0x7c, 0x00, 0xd7, 0x15, 0xb4, 0xab, - 0x13, 0xb5, 0x93, 0x0a, 0xb7, 0xf8, 0x09, 0xb9, 0x01, 0xff, 0x0b, 0xc7, + 0x13, 0xb5, 0x93, 0x0a, 0xb7, 0xf8, 0x09, 0xb9, 0x01, 0xff, 0x0b, 0xda, 0x96, 0xe5, 0x07, 0xad, 0xb2, 0x05, 0xae, 0xa3, 0x05, 0x02, 0x0d, 0x00, - 0x01, 0xff, 0x03, 0x97, 0x6c, 0x06, 0x43, 0x5a, 0x07, 0x89, 0xf4, 0x41, - 0x51, 0x63, 0x4a, 0x0f, 0x07, 0x00, 0x47, 0x42, 0xc5, 0x4a, 0x07, 0x00, - 0x02, 0x18, 0x04, 0xed, 0x04, 0x0d, 0xf5, 0x7a, 0xdc, 0x04, 0xa5, 0xc2, - 0x04, 0x4c, 0x54, 0x87, 0x40, 0x07, 0x00, 0xa8, 0x85, 0x04, 0x07, 0xf1, - 0x04, 0xca, 0x01, 0x45, 0x1a, 0x25, 0x49, 0x07, 0x00, 0x0d, 0x53, 0x7f, - 0xb3, 0x01, 0x07, 0x97, 0xca, 0x9c, 0x01, 0x49, 0xd3, 0xb4, 0x41, 0x07, - 0x00, 0xb2, 0x78, 0x02, 0x6f, 0x00, 0x3a, 0xb4, 0x17, 0x07, 0xae, 0xcd, + 0x01, 0xff, 0x03, 0xac, 0x6c, 0x06, 0x43, 0x5a, 0x07, 0x89, 0xf4, 0x41, + 0x51, 0x78, 0x4a, 0x0f, 0x07, 0x00, 0x47, 0x5e, 0xc5, 0x4a, 0x07, 0x00, + 0x02, 0x18, 0x04, 0xed, 0x04, 0x0d, 0xfc, 0x7a, 0xdc, 0x04, 0xa5, 0xc2, + 0x04, 0x4c, 0x5b, 0x87, 0x40, 0x07, 0x00, 0xa8, 0x85, 0x04, 0x07, 0xf1, + 0x04, 0xca, 0x01, 0x45, 0x1a, 0x25, 0x49, 0x07, 0x00, 0x0d, 0x5a, 0x7f, + 0xb3, 0x01, 0x07, 0xb3, 0xca, 0x9c, 0x01, 0x49, 0xef, 0xb4, 0x41, 0x07, + 0x00, 0xb2, 0x78, 0x02, 0x6f, 0x00, 0x3a, 0xb4, 0x17, 0x07, 0xca, 0xcd, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x33, 0x07, 0x00, 0x45, 0x25, 0x06, 0x34, 0x07, 0x00, 0x46, 0x48, 0x1d, 0x35, 0x07, 0x40, 0x0a, 0x08, 0x11, 0x11, - 0x11, 0xc6, 0x59, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x43, 0x07, 0x00, 0x45, + 0x11, 0xdb, 0x59, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x43, 0x07, 0x00, 0x45, 0x25, 0x06, 0x44, 0x07, 0x40, 0x45, 0x5c, 0x00, 0x45, 0x07, 0x00, 0x45, - 0x25, 0x06, 0x46, 0x07, 0x40, 0x08, 0x85, 0xba, 0x18, 0x0a, 0xfb, 0xa6, + 0x25, 0x06, 0x46, 0x07, 0x40, 0x08, 0xa1, 0xba, 0x18, 0x0a, 0x0e, 0xa7, 0x01, 0xff, 0x45, 0x69, 0x37, 0x03, 0x07, 0x80, 0x06, 0x49, 0xa0, 0x14, - 0x01, 0x07, 0x40, 0x4c, 0xf4, 0x83, 0x08, 0x07, 0x40, 0x45, 0x69, 0x37, - 0x04, 0x07, 0x80, 0x06, 0x49, 0xa0, 0x14, 0x02, 0x07, 0x40, 0x08, 0xf4, + 0x01, 0x07, 0x40, 0x4c, 0xfb, 0x83, 0x08, 0x07, 0x40, 0x45, 0x69, 0x37, + 0x04, 0x07, 0x80, 0x06, 0x49, 0xa0, 0x14, 0x02, 0x07, 0x40, 0x08, 0xfb, 0x83, 0x01, 0xff, 0x44, 0xc3, 0x00, 0x09, 0x07, 0x00, 0x45, 0xc8, 0x00, - 0x09, 0x07, 0x40, 0x05, 0xef, 0xd9, 0x0c, 0x47, 0x7a, 0xcc, 0x42, 0x07, - 0x00, 0x44, 0xee, 0xe7, 0x3f, 0x07, 0x40, 0x45, 0x5c, 0x00, 0x36, 0x07, + 0x09, 0x07, 0x40, 0x05, 0x0b, 0xda, 0x0c, 0x47, 0x96, 0xcc, 0x42, 0x07, + 0x00, 0x44, 0x0a, 0xe8, 0x3f, 0x07, 0x40, 0x45, 0x5c, 0x00, 0x36, 0x07, 0x00, 0x45, 0x25, 0x06, 0x37, 0x07, 0x40, 0x45, 0x5c, 0x00, 0x30, 0x07, 0x00, 0x45, 0x25, 0x06, 0x31, 0x07, 0x00, 0x46, 0x48, 0x1d, 0x32, 0x07, 0x40, 0x45, 0x5c, 0x00, 0x47, 0x07, 0x00, 0x45, 0x25, 0x06, 0x48, 0x07, - 0x40, 0x45, 0xe4, 0x61, 0x10, 0x07, 0x00, 0x44, 0x46, 0xe4, 0x12, 0x07, - 0x00, 0xa4, 0x9b, 0x02, 0xe5, 0x25, 0x07, 0x00, 0x4d, 0xdf, 0x7b, 0x24, - 0x07, 0x00, 0x45, 0xcf, 0xdb, 0x13, 0x07, 0x80, 0x83, 0x02, 0x42, 0xb0, - 0x01, 0x17, 0x07, 0x80, 0xf5, 0x01, 0x44, 0xba, 0xe5, 0x1f, 0x07, 0x00, - 0x46, 0x19, 0xd3, 0x20, 0x07, 0x00, 0xad, 0x96, 0x01, 0x43, 0x40, 0x20, - 0x22, 0x07, 0x00, 0x42, 0x6f, 0x02, 0x26, 0x07, 0x80, 0x72, 0x44, 0xaf, - 0xcd, 0x29, 0x07, 0x00, 0xb2, 0x5e, 0xb3, 0x2e, 0xb4, 0x19, 0x43, 0x08, - 0x83, 0x18, 0x07, 0x00, 0x44, 0x12, 0xe8, 0x1d, 0x07, 0x80, 0x06, 0x44, - 0x34, 0x6e, 0x19, 0x07, 0x40, 0x43, 0x48, 0x13, 0x1e, 0x07, 0x40, 0x42, - 0xaf, 0x3f, 0x2c, 0x07, 0x00, 0x43, 0x25, 0x23, 0x1b, 0x07, 0xc0, 0x00, - 0x49, 0x55, 0xab, 0x1c, 0x07, 0x40, 0x44, 0xd6, 0xdf, 0x28, 0x07, 0x00, - 0x46, 0xe6, 0x7b, 0x23, 0x07, 0x00, 0x43, 0x99, 0x14, 0x2b, 0x07, 0x00, - 0x07, 0x7f, 0xc9, 0x06, 0x50, 0xd9, 0x61, 0x11, 0x07, 0x40, 0x42, 0x0f, - 0x18, 0x4f, 0x07, 0x00, 0x45, 0x0f, 0xdd, 0x4e, 0x07, 0x00, 0x45, 0xa1, - 0xe1, 0x4d, 0x07, 0x40, 0x4a, 0xa1, 0xa1, 0x27, 0x07, 0x00, 0x43, 0x4b, - 0x0b, 0x2a, 0x07, 0x40, 0x06, 0x1d, 0xd5, 0x01, 0xff, 0x45, 0x08, 0xda, - 0x2d, 0x07, 0x00, 0x47, 0x37, 0xc6, 0x2f, 0x07, 0x00, 0x46, 0x99, 0xd1, - 0x2e, 0x07, 0x40, 0x09, 0xd8, 0xac, 0x06, 0x42, 0x29, 0x02, 0x21, 0x07, + 0x40, 0x45, 0xf9, 0x61, 0x10, 0x07, 0x00, 0x44, 0x62, 0xe4, 0x12, 0x07, + 0x00, 0xa4, 0x9b, 0x02, 0xe5, 0x25, 0x07, 0x00, 0x4d, 0xe6, 0x7b, 0x24, + 0x07, 0x00, 0x45, 0xeb, 0xdb, 0x13, 0x07, 0x80, 0x83, 0x02, 0x42, 0xb0, + 0x01, 0x17, 0x07, 0x80, 0xf5, 0x01, 0x44, 0xd6, 0xe5, 0x1f, 0x07, 0x00, + 0x46, 0x35, 0xd3, 0x20, 0x07, 0x00, 0xad, 0x96, 0x01, 0x43, 0x40, 0x20, + 0x22, 0x07, 0x00, 0x42, 0x6f, 0x02, 0x26, 0x07, 0x80, 0x72, 0x44, 0xcb, + 0xcd, 0x29, 0x07, 0x00, 0xb2, 0x5e, 0xb3, 0x2e, 0xb4, 0x19, 0x43, 0x0f, + 0x83, 0x18, 0x07, 0x00, 0x44, 0x2e, 0xe8, 0x1d, 0x07, 0x80, 0x06, 0x44, + 0x49, 0x6e, 0x19, 0x07, 0x40, 0x43, 0x48, 0x13, 0x1e, 0x07, 0x40, 0x42, + 0xc4, 0x3f, 0x2c, 0x07, 0x00, 0x43, 0x25, 0x23, 0x1b, 0x07, 0xc0, 0x00, + 0x49, 0x68, 0xab, 0x1c, 0x07, 0x40, 0x44, 0xf2, 0xdf, 0x28, 0x07, 0x00, + 0x46, 0xed, 0x7b, 0x23, 0x07, 0x00, 0x43, 0x99, 0x14, 0x2b, 0x07, 0x00, + 0x07, 0x9b, 0xc9, 0x06, 0x50, 0xee, 0x61, 0x11, 0x07, 0x40, 0x42, 0x0f, + 0x18, 0x4f, 0x07, 0x00, 0x45, 0x2b, 0xdd, 0x4e, 0x07, 0x00, 0x45, 0xbd, + 0xe1, 0x4d, 0x07, 0x40, 0x4a, 0xb4, 0xa1, 0x27, 0x07, 0x00, 0x43, 0x4b, + 0x0b, 0x2a, 0x07, 0x40, 0x06, 0x39, 0xd5, 0x01, 0xff, 0x45, 0x24, 0xda, + 0x2d, 0x07, 0x00, 0x47, 0x53, 0xc6, 0x2f, 0x07, 0x00, 0x46, 0xb5, 0xd1, + 0x2e, 0x07, 0x40, 0x09, 0xeb, 0xac, 0x06, 0x42, 0x29, 0x02, 0x21, 0x07, 0x40, 0x43, 0xc2, 0x27, 0x66, 0x08, 0x00, 0x42, 0x77, 0x24, 0x61, 0x08, 0x00, 0x02, 0x3f, 0x06, 0x2c, 0xae, 0x12, 0x42, 0x71, 0x00, 0x67, 0x08, 0x00, 0x43, 0x93, 0x1e, 0x6a, 0x08, 0x00, 0x43, 0xd2, 0x25, 0x63, 0x08, 0x40, 0x42, 0x24, 0x02, 0x60, 0x08, 0x00, 0xae, 0x06, 0x42, 0x20, 0x20, 0x62, 0x08, 0x40, 0xe1, 0x64, 0x08, 0x00, 0x42, 0x2f, 0x04, 0x65, 0x08, 0x40, 0xe1, 0x68, 0x08, 0x00, 0x42, 0x74, 0x00, 0x69, 0x08, 0x40, 0x42, - 0x53, 0x00, 0x1a, 0x07, 0x40, 0x49, 0x55, 0xab, 0x14, 0x07, 0x40, 0x45, - 0x91, 0x4e, 0x15, 0x07, 0x00, 0x52, 0x89, 0x4e, 0x16, 0x07, 0x40, 0x08, - 0xd5, 0xb9, 0x1e, 0x04, 0x18, 0x7a, 0x06, 0x4f, 0xa1, 0x6a, 0x05, 0x07, - 0x40, 0x80, 0x06, 0x4d, 0x14, 0x79, 0x3c, 0x07, 0x40, 0x45, 0x5c, 0x00, - 0x3a, 0x07, 0x00, 0x45, 0x25, 0x06, 0x3b, 0x07, 0x40, 0x4a, 0x71, 0x9f, - 0x0d, 0x07, 0x00, 0x49, 0xa5, 0xb2, 0x0c, 0x07, 0x00, 0x46, 0xa8, 0xb2, - 0x0b, 0x07, 0x40, 0x4f, 0xc0, 0x69, 0x00, 0x07, 0x00, 0x05, 0x16, 0x79, + 0x53, 0x00, 0x1a, 0x07, 0x40, 0x49, 0x68, 0xab, 0x14, 0x07, 0x40, 0x45, + 0xa6, 0x4e, 0x15, 0x07, 0x00, 0x52, 0x9e, 0x4e, 0x16, 0x07, 0x40, 0x08, + 0xf1, 0xb9, 0x1e, 0x04, 0x1f, 0x7a, 0x06, 0x4f, 0xb6, 0x6a, 0x05, 0x07, + 0x40, 0x80, 0x06, 0x4d, 0x1b, 0x79, 0x3c, 0x07, 0x40, 0x45, 0x5c, 0x00, + 0x3a, 0x07, 0x00, 0x45, 0x25, 0x06, 0x3b, 0x07, 0x40, 0x4a, 0x84, 0x9f, + 0x0d, 0x07, 0x00, 0x49, 0xc1, 0xb2, 0x0c, 0x07, 0x00, 0x46, 0xc4, 0xb2, + 0x0b, 0x07, 0x40, 0x4f, 0xd5, 0x69, 0x00, 0x07, 0x00, 0x05, 0x1d, 0x79, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x3d, 0x07, 0x00, 0x45, 0x25, 0x06, 0x3e, 0x07, 0x40, 0x47, 0x1c, 0x01, 0x39, 0x07, 0x00, 0x4a, 0x0b, 0x00, 0x38, - 0x07, 0x40, 0x0b, 0xa6, 0x96, 0x06, 0x49, 0x59, 0xb3, 0x0a, 0x07, 0x40, + 0x07, 0x40, 0x0b, 0xb9, 0x96, 0x06, 0x49, 0x75, 0xb3, 0x0a, 0x07, 0x40, 0x44, 0xc3, 0x00, 0x06, 0x07, 0x00, 0x45, 0xc8, 0x00, 0x07, 0x07, 0x40, - 0x46, 0x47, 0xcf, 0x4d, 0xf5, 0x01, 0x4d, 0x27, 0x6e, 0x16, 0x00, 0x40, - 0x08, 0x0e, 0x1f, 0x06, 0x45, 0xd2, 0xdd, 0x2f, 0x23, 0x40, 0x4b, 0x50, + 0x46, 0x63, 0xcf, 0x4d, 0xf5, 0x01, 0x4d, 0x3c, 0x6e, 0x16, 0x00, 0x40, + 0x08, 0x0e, 0x1f, 0x06, 0x45, 0xee, 0xdd, 0x2f, 0x23, 0x40, 0x4b, 0x65, 0x4c, 0x06, 0x24, 0x00, 0xa2, 0x91, 0x02, 0x02, 0x37, 0x00, 0x80, 0x02, - 0xa4, 0xc7, 0x01, 0xa5, 0x96, 0x01, 0xa6, 0x87, 0x01, 0x4f, 0xff, 0x66, - 0x1d, 0x24, 0x00, 0x55, 0x98, 0x37, 0x09, 0x24, 0x00, 0x49, 0x66, 0x1e, - 0x0a, 0x24, 0x00, 0x4d, 0x69, 0x7e, 0x45, 0xf5, 0x01, 0xae, 0x59, 0x50, - 0x09, 0x60, 0x1e, 0x24, 0x00, 0xb3, 0x12, 0x52, 0x39, 0x50, 0x97, 0x2b, - 0x00, 0x4e, 0x20, 0x77, 0x1f, 0x24, 0x00, 0x53, 0x40, 0x49, 0x0b, 0x24, - 0x40, 0x4f, 0x4d, 0x64, 0x4f, 0x21, 0x00, 0x05, 0x54, 0xa3, 0x29, 0x44, - 0x4e, 0x47, 0x20, 0x24, 0x00, 0x08, 0xea, 0x47, 0x13, 0x49, 0x8c, 0xb6, - 0x1a, 0x24, 0x80, 0x06, 0x4f, 0x25, 0x6e, 0x16, 0x24, 0x40, 0x49, 0xac, - 0x2a, 0x26, 0x24, 0x40, 0x47, 0x56, 0xc7, 0x01, 0x24, 0x00, 0x44, 0xab, + 0xa4, 0xc7, 0x01, 0xa5, 0x96, 0x01, 0xa6, 0x87, 0x01, 0x4f, 0x14, 0x67, + 0x1d, 0x24, 0x00, 0x55, 0xad, 0x37, 0x09, 0x24, 0x00, 0x49, 0x66, 0x1e, + 0x0a, 0x24, 0x00, 0x4d, 0x70, 0x7e, 0x45, 0xf5, 0x01, 0xae, 0x59, 0x50, + 0x1e, 0x60, 0x1e, 0x24, 0x00, 0xb3, 0x12, 0x52, 0x4e, 0x50, 0x97, 0x2b, + 0x00, 0x4e, 0x27, 0x77, 0x1f, 0x24, 0x00, 0x53, 0x55, 0x49, 0x0b, 0x24, + 0x40, 0x4f, 0x62, 0x64, 0x4f, 0x21, 0x00, 0x05, 0x67, 0xa3, 0x29, 0x44, + 0x63, 0x47, 0x20, 0x24, 0x00, 0x08, 0xff, 0x47, 0x13, 0x49, 0xa8, 0xb6, + 0x1a, 0x24, 0x80, 0x06, 0x4f, 0x3a, 0x6e, 0x16, 0x24, 0x40, 0x49, 0xac, + 0x2a, 0x26, 0x24, 0x40, 0x47, 0x72, 0xc7, 0x01, 0x24, 0x00, 0x44, 0xab, 0x2c, 0x02, 0x24, 0x40, 0x42, 0x9e, 0x01, 0x0f, 0x24, 0x00, 0x43, 0x09, 0x07, 0x0e, 0x24, 0x40, 0xa5, 0x06, 0x43, 0xa1, 0x14, 0x00, 0x24, 0x40, - 0x52, 0x49, 0x4c, 0x15, 0x24, 0x00, 0x45, 0x65, 0x1e, 0x24, 0x24, 0x40, - 0x4d, 0x0a, 0x7d, 0x1c, 0x24, 0x00, 0x48, 0x8d, 0xbf, 0x0c, 0x24, 0x40, - 0xae, 0x06, 0x45, 0x84, 0x64, 0x1b, 0x24, 0x40, 0x05, 0x47, 0x04, 0x06, - 0x45, 0x4e, 0xdf, 0x05, 0x24, 0x40, 0x46, 0x9b, 0x03, 0x19, 0x24, 0x00, - 0xb4, 0x01, 0xff, 0x43, 0xde, 0x05, 0x03, 0x24, 0x00, 0x4b, 0x7c, 0x99, - 0x04, 0x24, 0xc0, 0x00, 0x46, 0x32, 0x01, 0x17, 0x24, 0x40, 0x4f, 0x7a, - 0x64, 0x10, 0x24, 0x00, 0xa5, 0x01, 0xff, 0x44, 0x65, 0x74, 0x21, 0x24, - 0x80, 0x20, 0x0d, 0xc7, 0x82, 0x01, 0xff, 0x44, 0xfa, 0x05, 0x14, 0x24, + 0x52, 0x5e, 0x4c, 0x15, 0x24, 0x00, 0x45, 0x65, 0x1e, 0x24, 0x24, 0x40, + 0x4d, 0x11, 0x7d, 0x1c, 0x24, 0x00, 0x48, 0xa9, 0xbf, 0x0c, 0x24, 0x40, + 0xae, 0x06, 0x45, 0x99, 0x64, 0x1b, 0x24, 0x40, 0x05, 0x47, 0x04, 0x06, + 0x45, 0x6a, 0xdf, 0x05, 0x24, 0x40, 0x46, 0x9b, 0x03, 0x19, 0x24, 0x00, + 0xb4, 0x01, 0xff, 0x43, 0xde, 0x05, 0x03, 0x24, 0x00, 0x4b, 0x8f, 0x99, + 0x04, 0x24, 0xc0, 0x00, 0x46, 0x32, 0x01, 0x17, 0x24, 0x40, 0x4f, 0x8f, + 0x64, 0x10, 0x24, 0x00, 0xa5, 0x01, 0xff, 0x44, 0x7a, 0x74, 0x21, 0x24, + 0x80, 0x20, 0x0d, 0xce, 0x82, 0x01, 0xff, 0x44, 0xfa, 0x05, 0x14, 0x24, 0x00, 0x43, 0xcd, 0x09, 0x11, 0x24, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x13, 0x24, 0x00, 0x42, 0x15, 0x02, 0x12, 0x24, 0x40, 0x49, 0xac, - 0x2a, 0x25, 0x24, 0x40, 0x44, 0xd6, 0x28, 0x18, 0x24, 0x00, 0x4d, 0xb2, - 0x80, 0x0d, 0x24, 0x40, 0x48, 0x7d, 0xb9, 0x08, 0x24, 0x00, 0x43, 0x41, - 0x08, 0x07, 0x24, 0x40, 0x07, 0xf1, 0x04, 0x4d, 0x0c, 0x10, 0x8c, 0x39, - 0x05, 0xdb, 0x02, 0x1b, 0x0b, 0x5b, 0x70, 0x01, 0xff, 0xe1, 0x23, 0xa8, + 0x2a, 0x25, 0x24, 0x40, 0x44, 0xd6, 0x28, 0x18, 0x24, 0x00, 0x4d, 0xb9, + 0x80, 0x0d, 0x24, 0x40, 0x48, 0x99, 0xb9, 0x08, 0x24, 0x00, 0x43, 0x41, + 0x08, 0x07, 0x24, 0x40, 0x07, 0xf1, 0x04, 0x4d, 0x0c, 0x17, 0x8c, 0x39, + 0x05, 0xdb, 0x02, 0x1b, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xe1, 0x23, 0xa8, 0x00, 0xe5, 0x26, 0xa8, 0x00, 0xe9, 0x24, 0xa8, 0x00, 0x42, 0x99, 0x04, - 0x27, 0xa8, 0x00, 0xf5, 0x25, 0xa8, 0x40, 0xa1, 0x0c, 0x48, 0xa5, 0xbb, - 0x02, 0xa8, 0x00, 0x47, 0xa2, 0x5e, 0x06, 0xa8, 0x40, 0x50, 0x99, 0x5e, + 0x27, 0xa8, 0x00, 0xf5, 0x25, 0xa8, 0x40, 0xa1, 0x0c, 0x48, 0xc1, 0xbb, + 0x02, 0xa8, 0x00, 0x47, 0xb7, 0x5e, 0x06, 0xa8, 0x40, 0x50, 0xae, 0x5e, 0x2c, 0xa8, 0x00, 0x47, 0x5c, 0x14, 0x0b, 0xa8, 0x40, 0xd1, 0x28, 0xa8, 0x00, 0xd2, 0x29, 0xa8, 0x00, 0xd3, 0x2a, 0xa8, 0x00, 0xd4, 0x2b, 0xa8, 0x40, 0xe1, 0x00, 0xa8, 0x00, 0xa2, 0xa9, 0x01, 0xa3, 0x9c, 0x01, 0xa4, @@ -3472,52 +3473,52 @@ static const unsigned char uname2c_tree[210697] = { 0x40, 0xa4, 0x0a, 0x42, 0x0b, 0x00, 0x17, 0xa8, 0x00, 0xef, 0x16, 0xa8, 0x40, 0x42, 0x0b, 0x00, 0x13, 0xa8, 0x00, 0xef, 0x12, 0xa8, 0x40, 0x42, 0x0b, 0x00, 0x0d, 0xa8, 0x00, 0xef, 0x0c, 0xa8, 0x40, 0x42, 0x0b, 0x00, - 0x1c, 0xa8, 0x00, 0xef, 0x1b, 0xa8, 0x40, 0xa1, 0x0c, 0x45, 0xab, 0xdc, - 0xca, 0xf3, 0x01, 0x48, 0x0d, 0xc2, 0x53, 0x20, 0x40, 0xee, 0xa2, 0xf9, - 0x01, 0x55, 0x90, 0x39, 0x75, 0xf6, 0x41, 0x02, 0xf5, 0x10, 0xb5, 0x07, - 0x46, 0x2f, 0xc1, 0x7b, 0x22, 0x80, 0xdd, 0x06, 0x08, 0x7d, 0xbe, 0xc6, + 0x1c, 0xa8, 0x00, 0xef, 0x1b, 0xa8, 0x40, 0xa1, 0x0c, 0x45, 0xc7, 0xdc, + 0xca, 0xf3, 0x01, 0x48, 0x29, 0xc2, 0x53, 0x20, 0x40, 0xee, 0xa2, 0xf9, + 0x01, 0x55, 0xa5, 0x39, 0x75, 0xf6, 0x41, 0x02, 0xf5, 0x10, 0xb5, 0x07, + 0x46, 0x4b, 0xc1, 0x7b, 0x22, 0x80, 0xdd, 0x06, 0x08, 0x99, 0xbe, 0xc6, 0x06, 0xee, 0x09, 0x26, 0x80, 0xac, 0x02, 0x03, 0x6f, 0x02, 0x1f, 0x02, 0xdd, 0x19, 0x0f, 0xb3, 0x01, 0xff, 0x42, 0x49, 0x00, 0x63, 0xf3, 0x01, - 0x4f, 0xfb, 0x6a, 0x9f, 0xf6, 0x41, 0x4c, 0x6c, 0x84, 0x2f, 0x22, 0x00, - 0x42, 0x33, 0x00, 0xc4, 0xf3, 0x41, 0x44, 0x26, 0xe5, 0xb8, 0xf9, 0x01, - 0xb3, 0x06, 0x47, 0x14, 0xcd, 0xb9, 0xf9, 0x41, 0x06, 0x7a, 0x05, 0x86, + 0x4f, 0x10, 0x6b, 0x9f, 0xf6, 0x41, 0x4c, 0x73, 0x84, 0x2f, 0x22, 0x00, + 0x42, 0x33, 0x00, 0xc4, 0xf3, 0x41, 0x44, 0x42, 0xe5, 0xb8, 0xf9, 0x01, + 0xb3, 0x06, 0x47, 0x30, 0xcd, 0xb9, 0xf9, 0x41, 0x06, 0x7a, 0x05, 0x86, 0x01, 0x03, 0x4a, 0x08, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x66, 0x07, 0x51, - 0x09, 0x56, 0x42, 0xf4, 0x01, 0x83, 0x22, 0x80, 0x1d, 0x51, 0x40, 0x57, + 0x09, 0x56, 0x42, 0xf4, 0x01, 0x83, 0x22, 0x80, 0x1d, 0x51, 0x55, 0x57, 0xc9, 0x27, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x43, 0xc5, 0x06, 0xbe, - 0x2a, 0x00, 0x59, 0x60, 0x22, 0xc2, 0x2a, 0x00, 0x4f, 0x19, 0x6b, 0xc0, + 0x2a, 0x00, 0x59, 0x60, 0x22, 0xc2, 0x2a, 0x00, 0x4f, 0x2e, 0x6b, 0xc0, 0x2a, 0x40, 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x13, 0x4b, 0xf4, 0x25, - 0x87, 0x22, 0x80, 0x06, 0x51, 0xb5, 0x59, 0x8b, 0x22, 0x40, 0x4f, 0x4a, - 0x37, 0xc4, 0x2a, 0x40, 0x4f, 0x3e, 0x64, 0xca, 0x2a, 0x00, 0x4b, 0xa2, - 0x11, 0xc6, 0x2a, 0x00, 0x4c, 0xeb, 0x27, 0xcc, 0x2a, 0x00, 0x4e, 0xf9, - 0x39, 0xc8, 0x2a, 0x40, 0x5e, 0xdb, 0x10, 0xd8, 0x2a, 0x00, 0x46, 0xf3, + 0x87, 0x22, 0x80, 0x06, 0x51, 0xca, 0x59, 0x8b, 0x22, 0x40, 0x4f, 0x4a, + 0x37, 0xc4, 0x2a, 0x40, 0x4f, 0x53, 0x64, 0xca, 0x2a, 0x00, 0x4b, 0xa2, + 0x11, 0xc6, 0x2a, 0x00, 0x4c, 0xeb, 0x27, 0xcc, 0x2a, 0x00, 0x4e, 0x0e, + 0x3a, 0xc8, 0x2a, 0x40, 0x5e, 0xdb, 0x10, 0xd8, 0x2a, 0x00, 0x46, 0xf3, 0x10, 0xd7, 0x2a, 0x40, 0x4f, 0x67, 0x06, 0x7b, 0x29, 0x00, 0x02, 0x6f, 0x00, 0x01, 0xff, 0x44, 0xf5, 0x10, 0xd4, 0x2a, 0x00, 0x46, 0x14, 0x32, 0xd6, 0x2a, 0x40, 0xa5, 0x62, 0xa6, 0x54, 0xac, 0x40, 0x45, 0x29, 0x1d, 0x7b, 0x20, 0x00, 0x44, 0xb8, 0x27, 0x79, 0x20, 0x00, 0x43, 0xcd, 0x09, - 0xb9, 0x00, 0x00, 0x49, 0x19, 0x6b, 0x7a, 0x20, 0x00, 0x51, 0x6a, 0x1f, + 0xb9, 0x00, 0x00, 0x49, 0x2e, 0x6b, 0x7a, 0x20, 0x00, 0x51, 0x6a, 0x1f, 0x7e, 0x20, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x70, 0x20, 0x40, 0x44, 0x25, 0x01, 0xb3, 0x00, 0x00, 0x42, 0x15, 0x02, 0xb2, 0x00, 0x40, 0x44, 0x96, 0x1b, 0x77, 0x20, 0x00, 0x42, 0x30, 0x27, 0x76, 0x20, - 0x40, 0x12, 0xcf, 0x4a, 0x06, 0x4f, 0xe4, 0x21, 0x7d, 0x20, 0x40, 0xe9, + 0x40, 0x12, 0xe4, 0x4a, 0x06, 0x4f, 0xe4, 0x21, 0x7d, 0x20, 0x40, 0xe9, 0x71, 0x20, 0x00, 0xee, 0x7f, 0x20, 0x40, 0x43, 0xd7, 0x04, 0x75, 0x20, 0x00, 0x43, 0xfb, 0x05, 0x74, 0x20, 0x40, 0x44, 0xc9, 0x00, 0x78, 0x20, - 0x00, 0x4a, 0xa3, 0x11, 0x7c, 0x20, 0x40, 0x80, 0x85, 0x04, 0x07, 0x22, - 0xc6, 0x19, 0x46, 0x7d, 0x8f, 0x3b, 0xf3, 0x01, 0x44, 0x4c, 0xb3, 0x05, - 0xf3, 0x81, 0x06, 0x52, 0x73, 0x4f, 0x07, 0xf3, 0x41, 0x4f, 0x21, 0x63, - 0x04, 0xf3, 0x41, 0x48, 0x39, 0x81, 0xba, 0x1b, 0x00, 0x11, 0xaa, 0x53, + 0x00, 0x4a, 0xa3, 0x11, 0x7c, 0x20, 0x40, 0x80, 0x85, 0x04, 0x07, 0x3e, + 0xc6, 0x19, 0x46, 0x90, 0x8f, 0x3b, 0xf3, 0x01, 0x44, 0x68, 0xb3, 0x05, + 0xf3, 0x81, 0x06, 0x52, 0x88, 0x4f, 0x07, 0xf3, 0x41, 0x4f, 0x36, 0x63, + 0x04, 0xf3, 0x41, 0x48, 0x40, 0x81, 0xba, 0x1b, 0x00, 0x11, 0xbf, 0x53, 0xb6, 0x03, 0x06, 0xf4, 0x05, 0xef, 0x02, 0x07, 0xf1, 0x04, 0x8d, 0x01, - 0x12, 0xf5, 0x4e, 0x57, 0x05, 0xdb, 0x02, 0x2c, 0x0d, 0xd4, 0x82, 0x01, - 0xff, 0x45, 0xc8, 0xdd, 0xa8, 0x1b, 0x00, 0xae, 0x01, 0xff, 0x47, 0x70, - 0xc4, 0xa6, 0x1b, 0x00, 0x47, 0xd1, 0xc6, 0xa9, 0x1b, 0x00, 0x45, 0xed, - 0xdb, 0xa4, 0x1b, 0x00, 0x45, 0xab, 0x10, 0xa7, 0x1b, 0x00, 0x44, 0x16, + 0x12, 0x0a, 0x4f, 0x57, 0x05, 0xdb, 0x02, 0x2c, 0x0d, 0xdb, 0x82, 0x01, + 0xff, 0x45, 0xe4, 0xdd, 0xa8, 0x1b, 0x00, 0xae, 0x01, 0xff, 0x47, 0x8c, + 0xc4, 0xa6, 0x1b, 0x00, 0x47, 0xed, 0xc6, 0xa9, 0x1b, 0x00, 0x45, 0x09, + 0xdc, 0xa4, 0x1b, 0x00, 0x45, 0xab, 0x10, 0xa7, 0x1b, 0x00, 0x44, 0x32, 0xe8, 0xa5, 0x1b, 0x40, 0x02, 0xc1, 0x08, 0x06, 0x46, 0x47, 0x21, 0xab, - 0x1b, 0x40, 0x45, 0x8c, 0xdd, 0xaa, 0x1b, 0x00, 0xae, 0x01, 0xff, 0xa7, - 0x06, 0x45, 0x88, 0xe1, 0x80, 0x1b, 0x40, 0x45, 0x55, 0xdd, 0x81, 0x1b, - 0x00, 0x45, 0x60, 0xe1, 0x82, 0x1b, 0x40, 0x4a, 0xa3, 0x9f, 0xc7, 0x1c, - 0x00, 0x45, 0x35, 0xda, 0xc3, 0x1c, 0x00, 0x4a, 0xa7, 0xa0, 0xc6, 0x1c, - 0x00, 0x4a, 0xb3, 0xa3, 0xc5, 0x1c, 0x00, 0x4b, 0x90, 0x96, 0xc4, 0x1c, - 0x00, 0xb0, 0x06, 0x45, 0x48, 0xe0, 0xc0, 0x1c, 0x40, 0x47, 0xc4, 0xc4, - 0xc1, 0x1c, 0x00, 0x46, 0x67, 0xd6, 0xc2, 0x1c, 0x40, 0xe1, 0x83, 0x1b, + 0x1b, 0x40, 0x45, 0xa8, 0xdd, 0xaa, 0x1b, 0x00, 0xae, 0x01, 0xff, 0xa7, + 0x06, 0x45, 0xa4, 0xe1, 0x80, 0x1b, 0x40, 0x45, 0x71, 0xdd, 0x81, 0x1b, + 0x00, 0x45, 0x7c, 0xe1, 0x82, 0x1b, 0x40, 0x4a, 0xb6, 0x9f, 0xc7, 0x1c, + 0x00, 0x45, 0x51, 0xda, 0xc3, 0x1c, 0x00, 0x4a, 0xba, 0xa0, 0xc6, 0x1c, + 0x00, 0x4a, 0xc6, 0xa3, 0xc5, 0x1c, 0x00, 0x4b, 0xa3, 0x96, 0xc4, 0x1c, + 0x00, 0xb0, 0x06, 0x45, 0x64, 0xe0, 0xc0, 0x1c, 0x40, 0x47, 0xe0, 0xc4, + 0xc1, 0x1c, 0x00, 0x46, 0x83, 0xd6, 0xc2, 0x1c, 0x40, 0xe1, 0x83, 0x1b, 0x80, 0xcd, 0x01, 0xa2, 0xc0, 0x01, 0x42, 0x37, 0x00, 0x8e, 0x1b, 0x00, 0x42, 0x68, 0x0f, 0x93, 0x1b, 0x00, 0xe5, 0x88, 0x1b, 0x80, 0xaa, 0x01, 0xa6, 0x96, 0x01, 0x42, 0x24, 0x02, 0x8c, 0x1b, 0x00, 0x42, 0x22, 0x00, @@ -3535,92 +3536,92 @@ static const unsigned char uname2c_tree[210697] = { 0x8a, 0x1b, 0x00, 0x42, 0x22, 0x00, 0xae, 0x1b, 0x40, 0xe1, 0x96, 0x1b, 0x00, 0x05, 0x01, 0x25, 0x01, 0xff, 0xeb, 0xbe, 0x1b, 0x00, 0xed, 0xbf, 0x1b, 0x40, 0xf5, 0x89, 0x1b, 0x40, 0xe1, 0x98, 0x1b, 0x00, 0x42, 0x22, - 0x00, 0xbd, 0x1b, 0x40, 0xe5, 0x86, 0x1b, 0x00, 0x48, 0xe5, 0xb4, 0xbd, + 0x00, 0xbd, 0x1b, 0x40, 0xe5, 0x86, 0x1b, 0x00, 0x48, 0x01, 0xb5, 0xbd, 0x1b, 0x40, 0x45, 0xd1, 0x09, 0xb8, 0x1b, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0xb9, 0x1b, 0x00, 0x43, 0xcd, 0x09, 0xb1, 0x1b, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xb0, 0x1b, 0x40, 0x44, 0x25, 0x01, 0xb3, 0x1b, 0x00, 0x42, 0x15, 0x02, 0xb2, 0x1b, 0x40, 0x44, 0x96, 0x1b, 0xb7, 0x1b, 0x00, 0x42, 0x30, 0x27, 0xb6, 0x1b, 0x40, 0x43, 0xd7, 0x04, 0xb5, - 0x1b, 0x00, 0x43, 0xfb, 0x05, 0xb4, 0x1b, 0x40, 0x47, 0x0f, 0xc9, 0xa1, - 0x1b, 0x00, 0x02, 0x4a, 0x18, 0x11, 0x07, 0x62, 0xcb, 0x01, 0xff, 0x42, + 0x1b, 0x00, 0x43, 0xfb, 0x05, 0xb4, 0x1b, 0x40, 0x47, 0x2b, 0xc9, 0xa1, + 0x1b, 0x00, 0x02, 0x4a, 0x18, 0x11, 0x07, 0x7e, 0xcb, 0x01, 0xff, 0x42, 0x6c, 0x00, 0xac, 0x1b, 0x00, 0x42, 0xa9, 0x01, 0xad, 0x1b, 0x40, 0x44, - 0xc9, 0x8e, 0xa2, 0x1b, 0x00, 0x43, 0x97, 0xdc, 0xa3, 0x1b, 0x40, 0x4c, - 0x20, 0x85, 0xc5, 0x26, 0x00, 0x49, 0xa3, 0xb7, 0x1e, 0xf3, 0x41, 0x46, + 0xdc, 0x8e, 0xa2, 0x1b, 0x00, 0x43, 0xb3, 0xdc, 0xa3, 0x1b, 0x40, 0x4c, + 0x27, 0x85, 0xc5, 0x26, 0x00, 0x49, 0xbf, 0xb7, 0x1e, 0xf3, 0x41, 0x46, 0x74, 0x09, 0xb3, 0x23, 0x00, 0x43, 0x1e, 0x00, 0xb2, 0x23, 0x00, 0x4d, - 0x22, 0x83, 0x0b, 0x2a, 0x40, 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x1c, - 0x55, 0x8b, 0x35, 0xe9, 0x22, 0x00, 0x06, 0xf4, 0x25, 0x06, 0x4e, 0x04, + 0x29, 0x83, 0x0b, 0x2a, 0x40, 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x1c, + 0x55, 0x8b, 0x35, 0xe9, 0x22, 0x00, 0x06, 0xf4, 0x25, 0x06, 0x4e, 0x0b, 0x77, 0xb1, 0x22, 0x40, 0x45, 0x75, 0x0b, 0x7d, 0x22, 0x00, 0x4a, 0x96, - 0x35, 0x7f, 0x22, 0x40, 0x4f, 0x3e, 0x64, 0xb8, 0x2a, 0x00, 0x4b, 0xa2, + 0x35, 0x7f, 0x22, 0x40, 0x4f, 0x53, 0x64, 0xb8, 0x2a, 0x00, 0x4b, 0xa2, 0x11, 0xb4, 0x2a, 0x00, 0x04, 0xd4, 0x20, 0x11, 0x0c, 0xdf, 0x27, 0x01, 0xff, 0x4b, 0xa2, 0x11, 0xb0, 0x2a, 0x00, 0x4c, 0xeb, 0x27, 0xb2, 0x2a, - 0x40, 0x4f, 0x3e, 0x64, 0xba, 0x2a, 0x00, 0x48, 0x72, 0x0b, 0xb6, 0x2a, - 0x40, 0x06, 0x7a, 0x05, 0x75, 0x03, 0x4a, 0x08, 0x06, 0x46, 0x8f, 0xb6, + 0x40, 0x4f, 0x53, 0x64, 0xba, 0x2a, 0x00, 0x48, 0x72, 0x0b, 0xb6, 0x2a, + 0x40, 0x06, 0x7a, 0x05, 0x75, 0x03, 0x4a, 0x08, 0x06, 0x46, 0xab, 0xb6, 0x1a, 0x00, 0x40, 0x06, 0x5c, 0x00, 0x50, 0x42, 0xf4, 0x01, 0x82, 0x22, 0x80, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x43, 0xc5, 0x06, 0xbd, 0x2a, - 0x00, 0x59, 0x60, 0x22, 0xc1, 0x2a, 0x00, 0x4f, 0x19, 0x6b, 0xbf, 0x2a, + 0x00, 0x59, 0x60, 0x22, 0xc1, 0x2a, 0x00, 0x4f, 0x2e, 0x6b, 0xbf, 0x2a, 0x40, 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x13, 0x4b, 0xf4, 0x25, 0x86, - 0x22, 0x80, 0x06, 0x51, 0xb5, 0x59, 0x8a, 0x22, 0x40, 0x4f, 0x4a, 0x37, - 0xc3, 0x2a, 0x40, 0x4f, 0x3e, 0x64, 0xc9, 0x2a, 0x00, 0x4b, 0xa2, 0x11, - 0xc5, 0x2a, 0x00, 0x4c, 0xeb, 0x27, 0xcb, 0x2a, 0x00, 0x4e, 0xf9, 0x39, + 0x22, 0x80, 0x06, 0x51, 0xca, 0x59, 0x8a, 0x22, 0x40, 0x4f, 0x4a, 0x37, + 0xc3, 0x2a, 0x40, 0x4f, 0x53, 0x64, 0xc9, 0x2a, 0x00, 0x4b, 0xa2, 0x11, + 0xc5, 0x2a, 0x00, 0x4c, 0xeb, 0x27, 0xcb, 0x2a, 0x00, 0x4e, 0x0e, 0x3a, 0xc7, 0x2a, 0x40, 0x50, 0xb3, 0x02, 0x79, 0x29, 0x00, 0x02, 0x6f, 0x00, 0x01, 0xff, 0x44, 0xf5, 0x10, 0xd5, 0x2a, 0x00, 0x46, 0x14, 0x32, 0xd3, 0x2a, 0x40, 0xa5, 0x54, 0xa6, 0x46, 0x50, 0xe3, 0x21, 0x8d, 0x20, 0x00, 0x45, 0x29, 0x1d, 0x8b, 0x20, 0x00, 0x44, 0xb8, 0x27, 0x89, 0x20, 0x00, - 0x43, 0xcd, 0x09, 0x81, 0x20, 0x00, 0x49, 0x19, 0x6b, 0x8a, 0x20, 0x00, + 0x43, 0xcd, 0x09, 0x81, 0x20, 0x00, 0x49, 0x2e, 0x6b, 0x8a, 0x20, 0x00, 0x51, 0x6a, 0x1f, 0x8e, 0x20, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x80, 0x20, 0x40, 0x44, 0x25, 0x01, 0x83, 0x20, 0x00, 0x42, 0x15, 0x02, 0x82, 0x20, 0x40, 0x44, 0x96, 0x1b, 0x87, 0x20, 0x00, 0x42, 0x30, 0x27, 0x86, 0x20, 0x40, 0x43, 0xd7, 0x04, 0x85, 0x20, 0x00, 0x43, 0xfb, 0x05, 0x84, 0x20, 0x40, 0x44, 0xc9, 0x00, 0x88, 0x20, 0x00, 0x4a, 0xa3, - 0x11, 0x8c, 0x20, 0x40, 0xa1, 0x9b, 0x01, 0xa5, 0x7d, 0x4a, 0xe1, 0xa2, + 0x11, 0x8c, 0x20, 0x40, 0xa1, 0x9b, 0x01, 0xa5, 0x7d, 0x4a, 0xf4, 0xa2, 0xc5, 0xfb, 0x81, 0x52, 0xaf, 0x44, 0xb2, 0x15, 0xb5, 0x01, 0xff, 0x4e, - 0x04, 0x70, 0x99, 0xf3, 0x01, 0x4e, 0xf2, 0x70, 0x59, 0xf9, 0x01, 0x42, + 0x19, 0x70, 0x99, 0xf3, 0x01, 0x4e, 0x07, 0x71, 0x59, 0xf9, 0x01, 0x42, 0xc1, 0x08, 0xd3, 0xf6, 0x41, 0xa1, 0x15, 0x57, 0xe3, 0x2a, 0x29, 0x27, - 0x00, 0xa9, 0x01, 0xff, 0x52, 0x4d, 0x4b, 0x63, 0x22, 0x00, 0x4d, 0x05, - 0x7f, 0x9c, 0x00, 0x40, 0x04, 0xc9, 0x00, 0x06, 0x46, 0x91, 0xd6, 0x53, - 0xf3, 0x41, 0x46, 0xfd, 0xcd, 0xcf, 0xf4, 0x01, 0x44, 0x86, 0x21, 0xe4, - 0x23, 0x40, 0x48, 0xfd, 0xba, 0xe0, 0xf5, 0x01, 0x46, 0xb7, 0xd4, 0xf1, - 0x23, 0x40, 0x80, 0x01, 0xff, 0x08, 0xc5, 0xbd, 0x11, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x4b, 0x31, 0x91, 0xc6, 0xfb, 0x01, 0x45, 0x9e, 0x24, 0xc9, + 0x00, 0xa9, 0x01, 0xff, 0x52, 0x62, 0x4b, 0x63, 0x22, 0x00, 0x4d, 0x0c, + 0x7f, 0x9c, 0x00, 0x40, 0x04, 0xc9, 0x00, 0x06, 0x46, 0xad, 0xd6, 0x53, + 0xf3, 0x41, 0x46, 0x19, 0xce, 0xcf, 0xf4, 0x01, 0x44, 0x86, 0x21, 0xe4, + 0x23, 0x40, 0x48, 0x19, 0xbb, 0xe0, 0xf5, 0x01, 0x46, 0xd3, 0xd4, 0xf1, + 0x23, 0x40, 0x80, 0x01, 0xff, 0x08, 0xe1, 0xbd, 0x11, 0x05, 0x51, 0x00, + 0x01, 0xff, 0x4b, 0x44, 0x91, 0xc6, 0xfb, 0x01, 0x45, 0x9e, 0x24, 0xc9, 0xfb, 0x41, 0x44, 0xc3, 0x00, 0xc7, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0xc8, - 0xfb, 0x41, 0x02, 0x57, 0x00, 0x0c, 0x53, 0x22, 0x46, 0x3c, 0x2e, 0x00, - 0x48, 0x75, 0xc1, 0x7a, 0xfa, 0x41, 0x4b, 0x2b, 0x75, 0x82, 0xf6, 0x01, - 0x48, 0x3d, 0xbd, 0x5c, 0xf3, 0x41, 0x44, 0x9d, 0x03, 0xdf, 0xf3, 0x01, - 0x06, 0x63, 0xd1, 0x75, 0x4d, 0x3f, 0x2e, 0x83, 0xf5, 0x01, 0x4c, 0xe4, + 0xfb, 0x41, 0x02, 0x57, 0x00, 0x0c, 0x53, 0x37, 0x46, 0x3c, 0x2e, 0x00, + 0x48, 0x91, 0xc1, 0x7a, 0xfa, 0x41, 0x4b, 0x40, 0x75, 0x82, 0xf6, 0x01, + 0x48, 0x59, 0xbd, 0x5c, 0xf3, 0x41, 0x44, 0x9d, 0x03, 0xdf, 0xf3, 0x01, + 0x06, 0x7f, 0xd1, 0x75, 0x4d, 0x3f, 0x2e, 0x83, 0xf5, 0x01, 0x4c, 0xeb, 0x8a, 0xcd, 0xf9, 0x01, 0xb2, 0x0f, 0xb4, 0x01, 0xff, 0x43, 0xb5, 0x00, - 0x89, 0xf6, 0x01, 0x4d, 0x04, 0x82, 0xfd, 0xf5, 0x41, 0x80, 0x2b, 0x05, - 0x19, 0x32, 0x01, 0xff, 0x4c, 0xe4, 0x87, 0x96, 0x00, 0x00, 0x47, 0x56, - 0xc7, 0x01, 0x00, 0x00, 0x4e, 0x8e, 0x74, 0x96, 0x00, 0x00, 0xb3, 0x06, - 0x44, 0xab, 0x2c, 0x02, 0x00, 0x40, 0x4c, 0x0e, 0x81, 0x86, 0x00, 0x00, - 0x45, 0x3a, 0x61, 0x98, 0x00, 0x40, 0x4c, 0xb4, 0x84, 0x2a, 0x26, 0x00, + 0x89, 0xf6, 0x01, 0x4d, 0x0b, 0x82, 0xfd, 0xf5, 0x41, 0x80, 0x2b, 0x05, + 0x19, 0x32, 0x01, 0xff, 0x4c, 0xeb, 0x87, 0x96, 0x00, 0x00, 0x47, 0x72, + 0xc7, 0x01, 0x00, 0x00, 0x4e, 0xa3, 0x74, 0x96, 0x00, 0x00, 0xb3, 0x06, + 0x44, 0xab, 0x2c, 0x02, 0x00, 0x40, 0x4c, 0x15, 0x81, 0x86, 0x00, 0x00, + 0x45, 0x4f, 0x61, 0x98, 0x00, 0x40, 0x4c, 0xbb, 0x84, 0x2a, 0x26, 0x00, 0x46, 0xa2, 0x11, 0x5b, 0x22, 0x00, 0xaf, 0x11, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x4f, 0xa3, 0x68, 0xea, 0x2b, 0x00, 0x50, 0x59, 0x60, 0xeb, 0x2b, - 0x40, 0x47, 0xd8, 0xc6, 0x21, 0x27, 0x00, 0x47, 0x4c, 0x1b, 0xc6, 0x22, - 0x40, 0x4b, 0xd9, 0x90, 0x95, 0x26, 0x00, 0x46, 0x05, 0xd2, 0x9a, 0x26, + 0xff, 0x4f, 0xb8, 0x68, 0xea, 0x2b, 0x00, 0x50, 0x6e, 0x60, 0xeb, 0x2b, + 0x40, 0x47, 0xf4, 0xc6, 0x21, 0x27, 0x00, 0x47, 0x4c, 0x1b, 0xc6, 0x22, + 0x40, 0x4b, 0xec, 0x90, 0x95, 0x26, 0x00, 0x46, 0x21, 0xd2, 0x9a, 0x26, 0x40, 0xa1, 0x06, 0x42, 0x03, 0x00, 0x91, 0xf9, 0x41, 0x02, 0x88, 0x00, 0x06, 0x58, 0x27, 0x28, 0xa7, 0x27, 0x40, 0x80, 0xee, 0x05, 0x02, 0x06, 0x00, 0x01, 0xff, 0x48, 0x94, 0x0b, 0xc6, 0x29, 0x00, 0xa3, 0xb1, 0x03, - 0x4c, 0x88, 0x86, 0xa1, 0x22, 0x00, 0x47, 0x99, 0xc6, 0x9f, 0xf1, 0x01, + 0x4c, 0x8f, 0x86, 0xa1, 0x22, 0x00, 0x47, 0xb5, 0xc6, 0x9f, 0xf1, 0x01, 0xa6, 0x82, 0x03, 0xa8, 0xeb, 0x02, 0x42, 0x03, 0x00, 0x94, 0xf1, 0x01, 0xab, 0xc6, 0x02, 0xac, 0xb4, 0x01, 0xad, 0xa7, 0x01, 0xae, 0x9a, 0x01, - 0xaf, 0x8d, 0x01, 0xb0, 0x7f, 0x55, 0x7b, 0x39, 0xc4, 0x29, 0x00, 0xb3, + 0xaf, 0x8d, 0x01, 0xb0, 0x7f, 0x55, 0x90, 0x39, 0xc4, 0x29, 0x00, 0xb3, 0x3d, 0xb4, 0x20, 0xb5, 0x12, 0xb6, 0x06, 0x42, 0x94, 0x18, 0x4f, 0xf1, 0x41, 0x42, 0xf3, 0x0a, 0xac, 0xf1, 0x01, 0xf3, 0x9a, 0xf1, 0x41, 0x42, - 0xbf, 0x3c, 0xab, 0xf1, 0x01, 0x57, 0x6a, 0x2c, 0x99, 0xf1, 0x41, 0x46, + 0xd4, 0x3c, 0xab, 0xf1, 0x01, 0x57, 0x6a, 0x2c, 0x99, 0xf1, 0x41, 0x46, 0x83, 0x0e, 0x9b, 0xf1, 0x01, 0x44, 0x29, 0x02, 0xa0, 0x22, 0x00, 0xb7, - 0x01, 0xff, 0x52, 0xb9, 0x4b, 0xa2, 0xf1, 0x01, 0x43, 0xe4, 0x2d, 0x9d, + 0x01, 0xff, 0x52, 0xce, 0x4b, 0xa2, 0xf1, 0x01, 0x43, 0xe4, 0x2d, 0x9d, 0xf1, 0x41, 0x46, 0x16, 0x17, 0xdd, 0x26, 0x00, 0xe4, 0x4c, 0xf1, 0x01, - 0xa5, 0x22, 0x42, 0x5f, 0x59, 0xaa, 0xf1, 0x01, 0x46, 0xd1, 0xd2, 0xa3, + 0xa5, 0x22, 0x42, 0x74, 0x59, 0xaa, 0xf1, 0x01, 0x46, 0xed, 0xd2, 0xa3, 0xf1, 0x01, 0x4b, 0x5f, 0x13, 0xc7, 0x29, 0x00, 0x42, 0xfc, 0x0b, 0x98, 0xf1, 0x01, 0x45, 0xdc, 0x04, 0xc8, 0x29, 0x00, 0xf3, 0x4d, 0xf1, 0x41, - 0x4b, 0x39, 0x92, 0x9c, 0xf1, 0x01, 0x4d, 0x86, 0x82, 0xa1, 0xf1, 0x41, - 0x43, 0x72, 0x25, 0x9e, 0x22, 0x00, 0x42, 0xea, 0xe9, 0x4e, 0xf1, 0x41, - 0xeb, 0x97, 0xf1, 0x01, 0x53, 0xfc, 0x45, 0xa4, 0xf1, 0x41, 0x42, 0xd9, + 0x4b, 0x4c, 0x92, 0x9c, 0xf1, 0x01, 0x4d, 0x8d, 0x82, 0xa1, 0xf1, 0x41, + 0x43, 0x72, 0x25, 0x9e, 0x22, 0x00, 0x42, 0x06, 0xea, 0x4e, 0xf1, 0x41, + 0xeb, 0x97, 0xf1, 0x01, 0x53, 0x11, 0x46, 0xa4, 0xf1, 0x41, 0x42, 0xd9, 0x1b, 0x95, 0xf1, 0x01, 0xe7, 0x96, 0xf1, 0x41, 0x44, 0x2a, 0x1d, 0x9f, 0x22, 0x00, 0xf6, 0x4b, 0xf1, 0x41, 0x05, 0xe4, 0x04, 0x19, 0xaf, 0x01, - 0xff, 0x06, 0xab, 0x1f, 0x06, 0x46, 0x71, 0xd5, 0xa9, 0xf1, 0x41, 0x43, + 0xff, 0x06, 0xab, 0x1f, 0x06, 0x46, 0x8d, 0xd5, 0xa9, 0xf1, 0x41, 0x43, 0x1a, 0x00, 0xce, 0x27, 0x00, 0x42, 0x0c, 0x00, 0xcf, 0x27, 0x40, 0x0f, - 0xe9, 0x04, 0x06, 0x4e, 0x6e, 0x75, 0xa5, 0xf1, 0x41, 0xe1, 0x30, 0xf1, + 0xe9, 0x04, 0x06, 0x4e, 0x83, 0x75, 0xa5, 0xf1, 0x41, 0xe1, 0x30, 0xf1, 0x01, 0xe2, 0x31, 0xf1, 0x01, 0xe3, 0x32, 0xf1, 0x01, 0xe4, 0x33, 0xf1, 0x01, 0xe5, 0x34, 0xf1, 0x01, 0xe6, 0x35, 0xf1, 0x01, 0xe7, 0x36, 0xf1, 0x01, 0xe8, 0x37, 0xf1, 0x01, 0xe9, 0x38, 0xf1, 0x01, 0xea, 0x39, 0xf1, @@ -3629,79 +3630,79 @@ static const unsigned char uname2c_tree[210697] = { 0x01, 0xf1, 0x40, 0xf1, 0x01, 0xf2, 0x41, 0xf1, 0x01, 0xf3, 0x42, 0xf1, 0x01, 0xf4, 0x43, 0xf1, 0x01, 0xf5, 0x44, 0xf1, 0x01, 0xf6, 0x45, 0xf1, 0x01, 0xf7, 0x46, 0xf1, 0x01, 0xf8, 0x47, 0xf1, 0x01, 0xf9, 0x48, 0xf1, - 0x01, 0xfa, 0x49, 0xf1, 0x41, 0x08, 0x05, 0xba, 0x06, 0x42, 0xae, 0x1a, - 0xbf, 0x26, 0x40, 0x42, 0x04, 0x00, 0x13, 0xf2, 0x01, 0x44, 0xde, 0xe5, + 0x01, 0xfa, 0x49, 0xf1, 0x41, 0x08, 0x21, 0xba, 0x06, 0x42, 0xae, 0x1a, + 0xbf, 0x26, 0x40, 0x42, 0x04, 0x00, 0x13, 0xf2, 0x01, 0x44, 0xfa, 0xe5, 0x01, 0xf2, 0x01, 0x42, 0x45, 0x05, 0x02, 0xf2, 0x41, 0xe3, 0xa6, 0xf1, - 0x01, 0x42, 0x7e, 0x0b, 0xa7, 0xf1, 0x01, 0x45, 0x74, 0xdc, 0xa8, 0xf1, + 0x01, 0x42, 0x7e, 0x0b, 0xa7, 0xf1, 0x01, 0x45, 0x90, 0xdc, 0xa8, 0xf1, 0x01, 0xf6, 0x4a, 0xf1, 0x41, 0x55, 0xf8, 0x34, 0xc5, 0x29, 0x00, 0x4d, - 0x7f, 0x7d, 0xa0, 0xf1, 0x01, 0x04, 0xfb, 0x05, 0x06, 0x43, 0x26, 0x01, + 0x86, 0x7d, 0xa0, 0xf1, 0x01, 0x04, 0xfb, 0x05, 0x06, 0x43, 0x26, 0x01, 0x93, 0xf1, 0x41, 0x4f, 0x9f, 0x0a, 0x2c, 0x2e, 0x00, 0xeb, 0x9e, 0xf1, - 0x41, 0x15, 0x29, 0x2f, 0x0a, 0xec, 0x91, 0xf1, 0x01, 0x43, 0x94, 0x90, - 0x92, 0xf1, 0x41, 0x02, 0xd2, 0xe9, 0x80, 0x02, 0x95, 0x9b, 0x01, 0x96, - 0x4b, 0x97, 0x23, 0x98, 0x0f, 0x99, 0x01, 0xff, 0x43, 0x43, 0xe8, 0x2b, - 0xf2, 0x01, 0x43, 0x55, 0xe8, 0x3b, 0xf2, 0x41, 0x43, 0xa9, 0xe8, 0x16, - 0xf2, 0x01, 0x43, 0xcd, 0xe8, 0x23, 0xf2, 0x01, 0x43, 0xe2, 0xe8, 0x30, - 0xf2, 0x41, 0x43, 0x52, 0xe8, 0x1a, 0xf2, 0x01, 0x95, 0x12, 0x43, 0xa6, - 0xe8, 0x32, 0xf2, 0x01, 0x43, 0xac, 0xe8, 0x33, 0xf2, 0x01, 0x43, 0xdf, - 0xe8, 0x21, 0xf2, 0x41, 0x42, 0xc0, 0xe9, 0x22, 0xf2, 0x01, 0x42, 0x1d, - 0xd8, 0x38, 0xf2, 0x41, 0x92, 0x3a, 0x93, 0x2c, 0x95, 0x1e, 0x43, 0x91, - 0xe8, 0x19, 0xf2, 0x01, 0x02, 0xe3, 0xe8, 0x0c, 0x43, 0xf4, 0xe8, 0x35, - 0xf2, 0x01, 0x43, 0x03, 0xe9, 0x26, 0xf2, 0x41, 0xd8, 0x37, 0xf2, 0x01, - 0xd9, 0x36, 0xf2, 0x41, 0x42, 0xdc, 0xe9, 0x1b, 0xf2, 0x01, 0x42, 0x40, - 0xb2, 0x1f, 0xf2, 0x41, 0x42, 0x64, 0x3b, 0x2f, 0xf2, 0x01, 0x42, 0x59, - 0xe8, 0x28, 0xf2, 0x41, 0x42, 0xd0, 0xe9, 0x10, 0xf2, 0x01, 0x42, 0x65, - 0xe8, 0x31, 0xf2, 0x01, 0x42, 0xda, 0xe9, 0x27, 0xf2, 0x41, 0x43, 0x5b, - 0xe8, 0x1e, 0xf2, 0x01, 0x92, 0x48, 0x93, 0x3a, 0x94, 0x2c, 0x43, 0x8b, - 0xe8, 0x3a, 0xf2, 0x01, 0x43, 0xa3, 0xe8, 0x24, 0xf2, 0x01, 0x99, 0x12, - 0x43, 0xc1, 0xe8, 0x11, 0xf2, 0x01, 0x43, 0xe8, 0xe8, 0x2c, 0xf2, 0x01, - 0x43, 0x06, 0xe9, 0x1d, 0xf2, 0x41, 0x42, 0xb3, 0x6e, 0x15, 0xf2, 0x01, - 0x42, 0x35, 0xd9, 0x17, 0xf2, 0x41, 0x42, 0xb1, 0x6e, 0x34, 0xf2, 0x01, - 0x42, 0xc8, 0xe9, 0x25, 0xf2, 0x41, 0x42, 0xe0, 0x03, 0x12, 0xf2, 0x01, - 0x42, 0xc1, 0xe9, 0x2e, 0xf2, 0x41, 0x42, 0xbe, 0xe9, 0x20, 0xf2, 0x01, - 0x42, 0x56, 0xe8, 0x1c, 0xf2, 0x01, 0x42, 0x9a, 0xe8, 0x39, 0xf2, 0x41, - 0x90, 0x12, 0x42, 0x95, 0xe4, 0x2d, 0xf2, 0x01, 0x42, 0x07, 0xe9, 0x14, - 0xf2, 0x01, 0x42, 0x86, 0xce, 0x18, 0xf2, 0x41, 0xd0, 0x29, 0xf2, 0x01, + 0x41, 0x15, 0x29, 0x2f, 0x0a, 0xec, 0x91, 0xf1, 0x01, 0x43, 0xa7, 0x90, + 0x92, 0xf1, 0x41, 0x02, 0xee, 0xe9, 0x80, 0x02, 0x95, 0x9b, 0x01, 0x96, + 0x4b, 0x97, 0x23, 0x98, 0x0f, 0x99, 0x01, 0xff, 0x43, 0x5f, 0xe8, 0x2b, + 0xf2, 0x01, 0x43, 0x71, 0xe8, 0x3b, 0xf2, 0x41, 0x43, 0xc5, 0xe8, 0x16, + 0xf2, 0x01, 0x43, 0xe9, 0xe8, 0x23, 0xf2, 0x01, 0x43, 0xfe, 0xe8, 0x30, + 0xf2, 0x41, 0x43, 0x6e, 0xe8, 0x1a, 0xf2, 0x01, 0x95, 0x12, 0x43, 0xc2, + 0xe8, 0x32, 0xf2, 0x01, 0x43, 0xc8, 0xe8, 0x33, 0xf2, 0x01, 0x43, 0xfb, + 0xe8, 0x21, 0xf2, 0x41, 0x42, 0xdc, 0xe9, 0x22, 0xf2, 0x01, 0x42, 0x39, + 0xd8, 0x38, 0xf2, 0x41, 0x92, 0x3a, 0x93, 0x2c, 0x95, 0x1e, 0x43, 0xad, + 0xe8, 0x19, 0xf2, 0x01, 0x02, 0xff, 0xe8, 0x0c, 0x43, 0x10, 0xe9, 0x35, + 0xf2, 0x01, 0x43, 0x1f, 0xe9, 0x26, 0xf2, 0x41, 0xd8, 0x37, 0xf2, 0x01, + 0xd9, 0x36, 0xf2, 0x41, 0x42, 0xf8, 0xe9, 0x1b, 0xf2, 0x01, 0x42, 0x5c, + 0xb2, 0x1f, 0xf2, 0x41, 0x42, 0x79, 0x3b, 0x2f, 0xf2, 0x01, 0x42, 0x75, + 0xe8, 0x28, 0xf2, 0x41, 0x42, 0xec, 0xe9, 0x10, 0xf2, 0x01, 0x42, 0x81, + 0xe8, 0x31, 0xf2, 0x01, 0x42, 0xf6, 0xe9, 0x27, 0xf2, 0x41, 0x43, 0x77, + 0xe8, 0x1e, 0xf2, 0x01, 0x92, 0x48, 0x93, 0x3a, 0x94, 0x2c, 0x43, 0xa7, + 0xe8, 0x3a, 0xf2, 0x01, 0x43, 0xbf, 0xe8, 0x24, 0xf2, 0x01, 0x99, 0x12, + 0x43, 0xdd, 0xe8, 0x11, 0xf2, 0x01, 0x43, 0x04, 0xe9, 0x2c, 0xf2, 0x01, + 0x43, 0x22, 0xe9, 0x1d, 0xf2, 0x41, 0x42, 0xc8, 0x6e, 0x15, 0xf2, 0x01, + 0x42, 0x51, 0xd9, 0x17, 0xf2, 0x41, 0x42, 0xc6, 0x6e, 0x34, 0xf2, 0x01, + 0x42, 0xe4, 0xe9, 0x25, 0xf2, 0x41, 0x42, 0xe0, 0x03, 0x12, 0xf2, 0x01, + 0x42, 0xdd, 0xe9, 0x2e, 0xf2, 0x41, 0x42, 0xda, 0xe9, 0x20, 0xf2, 0x01, + 0x42, 0x72, 0xe8, 0x1c, 0xf2, 0x01, 0x42, 0xb6, 0xe8, 0x39, 0xf2, 0x41, + 0x90, 0x12, 0x42, 0xb1, 0xe4, 0x2d, 0xf2, 0x01, 0x42, 0x23, 0xe9, 0x14, + 0xf2, 0x01, 0x42, 0xa2, 0xce, 0x18, 0xf2, 0x41, 0xd0, 0x29, 0xf2, 0x01, 0xd9, 0x2a, 0xf2, 0x41, 0xa1, 0x9d, 0x0b, 0xa2, 0xf2, 0x0a, 0xa3, 0xb2, 0x0a, 0xa4, 0xf8, 0x09, 0xa5, 0xbd, 0x09, 0xa6, 0xa7, 0x09, 0xa7, 0xdd, 0x08, 0xa8, 0x83, 0x08, 0xa9, 0xd3, 0x07, 0xab, 0xa2, 0x06, 0xac, 0x81, 0x06, 0xad, 0x8d, 0x04, 0xae, 0xe5, 0x03, 0xaf, 0xba, 0x03, 0xb0, 0xb2, - 0x02, 0xb2, 0xe4, 0x01, 0xb3, 0xb9, 0x01, 0xb4, 0xa4, 0x01, 0x43, 0xae, - 0xe7, 0x06, 0x33, 0x00, 0x48, 0x1d, 0xc2, 0xde, 0x33, 0x00, 0xb7, 0x19, - 0xb9, 0x01, 0xff, 0x02, 0xda, 0x10, 0x06, 0x43, 0x16, 0x99, 0x50, 0x33, + 0x02, 0xb2, 0xe4, 0x01, 0xb3, 0xb9, 0x01, 0xb4, 0xa4, 0x01, 0x43, 0xca, + 0xe7, 0x06, 0x33, 0x00, 0x48, 0x39, 0xc2, 0xde, 0x33, 0x00, 0xb7, 0x19, + 0xb9, 0x01, 0xff, 0x02, 0xda, 0x10, 0x06, 0x43, 0x29, 0x99, 0x50, 0x33, 0x40, 0x42, 0x3b, 0x01, 0x4e, 0x33, 0x00, 0x42, 0x3d, 0x00, 0x4f, 0x33, - 0x40, 0x44, 0xfc, 0x84, 0x57, 0x33, 0x00, 0xe2, 0xdd, 0x33, 0x00, 0x04, - 0x52, 0x00, 0x01, 0xff, 0x51, 0x00, 0x53, 0x13, 0x2b, 0x00, 0x51, 0xcc, - 0x53, 0xe0, 0x29, 0x00, 0x58, 0x27, 0x25, 0xa9, 0x25, 0x00, 0x4f, 0x59, + 0x40, 0x44, 0x03, 0x85, 0x57, 0x33, 0x00, 0xe2, 0xdd, 0x33, 0x00, 0x04, + 0x52, 0x00, 0x01, 0xff, 0x51, 0x15, 0x53, 0x13, 0x2b, 0x00, 0x51, 0xe1, + 0x53, 0xe0, 0x29, 0x00, 0x58, 0x27, 0x25, 0xa9, 0x25, 0x00, 0x4f, 0x6e, 0x67, 0xa4, 0x25, 0x00, 0xac, 0x3d, 0x5a, 0x36, 0x1f, 0xa6, 0x25, 0x00, - 0x50, 0x59, 0x60, 0xe8, 0x25, 0x00, 0x4e, 0x78, 0x76, 0x12, 0x2b, 0x00, - 0x06, 0x6d, 0x02, 0x06, 0x4d, 0xba, 0x82, 0xa5, 0x25, 0x40, 0x05, 0xc3, + 0x50, 0x6e, 0x60, 0xe8, 0x25, 0x00, 0x4e, 0x7f, 0x76, 0x12, 0x2b, 0x00, + 0x06, 0x6d, 0x02, 0x06, 0x4d, 0xc1, 0x82, 0xa5, 0x25, 0x40, 0x05, 0xc3, 0x00, 0x11, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x53, 0x2e, 0x23, 0x14, 0x2b, - 0x00, 0x52, 0x03, 0x50, 0xa8, 0x25, 0x40, 0x53, 0x2e, 0x23, 0xe9, 0x25, - 0x00, 0x53, 0x23, 0x48, 0xa7, 0x25, 0x40, 0x4e, 0xa4, 0x68, 0xe7, 0x25, + 0x00, 0x52, 0x18, 0x50, 0xa8, 0x25, 0x40, 0x53, 0x2e, 0x23, 0xe9, 0x25, + 0x00, 0x53, 0x38, 0x48, 0xa7, 0x25, 0x40, 0x4e, 0xb9, 0x68, 0xe7, 0x25, 0x00, 0x05, 0x14, 0x01, 0x01, 0xff, 0x58, 0x8f, 0x26, 0x15, 0x2b, 0x00, - 0x59, 0x28, 0x23, 0xea, 0x25, 0x40, 0x45, 0xcc, 0xd5, 0x96, 0xf7, 0x01, - 0x42, 0x01, 0x9d, 0x94, 0x33, 0x00, 0x42, 0x10, 0x00, 0x27, 0x33, 0x40, - 0xa1, 0x1a, 0x03, 0x92, 0x01, 0x0e, 0x46, 0xa1, 0xd2, 0x21, 0x33, 0x00, + 0x59, 0x28, 0x23, 0xea, 0x25, 0x40, 0x45, 0xe8, 0xd5, 0x96, 0xf7, 0x01, + 0x42, 0x14, 0x9d, 0x94, 0x33, 0x00, 0x42, 0x10, 0x00, 0x27, 0x33, 0x40, + 0xa1, 0x1a, 0x03, 0x92, 0x01, 0x0e, 0x46, 0xbd, 0xd2, 0x21, 0x33, 0x00, 0xf2, 0xdb, 0x33, 0x00, 0xf6, 0xdc, 0x33, 0x40, 0xe9, 0x22, 0x33, 0x00, - 0xef, 0x23, 0x33, 0x40, 0x45, 0x97, 0xdc, 0x1f, 0x33, 0x00, 0x46, 0x09, + 0xef, 0x23, 0x33, 0x40, 0x45, 0xb3, 0xdc, 0x1f, 0x33, 0x00, 0x46, 0x25, 0xd4, 0x20, 0x33, 0x40, 0x42, 0xe8, 0x01, 0xad, 0x33, 0x80, 0x37, 0xa5, - 0x29, 0xa9, 0x15, 0x43, 0x35, 0x66, 0x1a, 0x22, 0x00, 0xb5, 0x01, 0xff, - 0x43, 0xf2, 0x6e, 0x53, 0x33, 0x00, 0x45, 0xcf, 0xe0, 0x54, 0x33, 0x40, + 0x29, 0xa9, 0x15, 0x43, 0x4a, 0x66, 0x1a, 0x22, 0x00, 0xb5, 0x01, 0xff, + 0x43, 0x07, 0x6f, 0x53, 0x33, 0x00, 0x45, 0xeb, 0xe0, 0x54, 0x33, 0x40, 0x55, 0x1a, 0x37, 0xce, 0x2a, 0x00, 0x42, 0x71, 0x00, 0x52, 0x33, 0x00, - 0x45, 0xb1, 0xe0, 0x51, 0x33, 0x40, 0x42, 0xe2, 0x14, 0x55, 0x33, 0x00, - 0x46, 0x0f, 0xd4, 0x56, 0x33, 0x40, 0x47, 0x21, 0x0b, 0xae, 0x33, 0xc0, + 0x45, 0xcd, 0xe0, 0x51, 0x33, 0x40, 0x42, 0xe2, 0x14, 0x55, 0x33, 0x00, + 0x46, 0x2b, 0xd4, 0x56, 0x33, 0x40, 0x47, 0x21, 0x0b, 0xae, 0x33, 0xc0, 0x00, 0x48, 0xda, 0x04, 0xaf, 0x33, 0x40, 0xe1, 0xa9, 0x33, 0x80, 0x6b, 0xe3, 0x76, 0x33, 0x00, 0xa5, 0x4b, 0xe6, 0x8a, 0x33, 0x00, 0xe8, 0xd7, - 0x33, 0x00, 0xa9, 0x2e, 0xed, 0xd8, 0x33, 0x00, 0xaf, 0x16, 0x42, 0x32, + 0x33, 0x00, 0xa9, 0x2e, 0xed, 0xd8, 0x33, 0x00, 0xaf, 0x16, 0x42, 0x4e, 0xb7, 0xd9, 0x33, 0x00, 0xf2, 0xda, 0x33, 0x00, 0xf3, 0xb0, 0x33, 0x00, 0xf6, 0xb4, 0x33, 0x00, 0xf7, 0xba, 0x33, 0x40, 0x44, 0x26, 0x12, 0x3d, - 0x33, 0x00, 0x43, 0xad, 0x0a, 0x40, 0x33, 0x00, 0x50, 0xc9, 0x60, 0xd0, - 0x2b, 0x40, 0x47, 0xfc, 0xc4, 0x2e, 0x33, 0x00, 0xab, 0x01, 0xff, 0xef, - 0x30, 0x33, 0x00, 0x43, 0x27, 0xa2, 0x2f, 0x33, 0x40, 0x43, 0x84, 0x93, + 0x33, 0x00, 0x43, 0xad, 0x0a, 0x40, 0x33, 0x00, 0x50, 0xde, 0x60, 0xd0, + 0x2b, 0x40, 0x47, 0x18, 0xc5, 0x2e, 0x33, 0x00, 0xab, 0x01, 0xff, 0xef, + 0x30, 0x33, 0x00, 0x43, 0x3a, 0xa2, 0x2f, 0x33, 0x40, 0x43, 0x97, 0x93, 0x3b, 0x33, 0x00, 0xae, 0x06, 0x42, 0xe1, 0x02, 0x37, 0x33, 0x40, 0x43, - 0x4b, 0xdc, 0x38, 0x33, 0x00, 0x42, 0x6f, 0x00, 0x3a, 0x33, 0x40, 0x45, - 0xf7, 0xd6, 0x80, 0x33, 0x00, 0xa1, 0x01, 0xff, 0x45, 0xf3, 0xdf, 0x2b, - 0x33, 0x00, 0x42, 0x5c, 0x01, 0x2c, 0x33, 0x40, 0x43, 0x40, 0x69, 0x09, + 0x67, 0xdc, 0x38, 0x33, 0x00, 0x42, 0x6f, 0x00, 0x3a, 0x33, 0x40, 0x45, + 0x13, 0xd7, 0x80, 0x33, 0x00, 0xa1, 0x01, 0xff, 0x45, 0x0f, 0xe0, 0x2b, + 0x33, 0x00, 0x42, 0x5c, 0x01, 0x2c, 0x33, 0x40, 0x43, 0x55, 0x69, 0x09, 0x33, 0x00, 0x43, 0x87, 0x15, 0x0a, 0x33, 0x00, 0x4a, 0x26, 0x2c, 0x90, 0x22, 0x80, 0x04, 0xf6, 0x75, 0x33, 0x40, 0x04, 0x5e, 0x1c, 0x01, 0xff, 0x48, 0x72, 0x0b, 0x92, 0x22, 0x00, 0x4c, 0xeb, 0x27, 0xe5, 0x22, 0x40, @@ -3710,114 +3711,114 @@ static const unsigned char uname2c_tree[210697] = { 0xb5, 0x33, 0x00, 0xf7, 0xbb, 0x33, 0x40, 0x42, 0xb4, 0x01, 0x28, 0x33, 0x40, 0x80, 0xcd, 0x01, 0xe1, 0x83, 0x33, 0x80, 0xa7, 0x01, 0xe2, 0x86, 0x33, 0x80, 0x9b, 0x01, 0xa5, 0x85, 0x01, 0xe7, 0x8e, 0x33, 0x00, 0x42, - 0x01, 0x9d, 0x92, 0x33, 0x00, 0xa9, 0x62, 0xec, 0x96, 0x33, 0x00, 0xed, + 0x14, 0x9d, 0x92, 0x33, 0x00, 0xa9, 0x62, 0xec, 0x96, 0x33, 0x00, 0xed, 0x9c, 0x33, 0x80, 0x4a, 0x42, 0xe2, 0x02, 0xd6, 0x33, 0x00, 0x42, 0xc1, 0x08, 0xab, 0x33, 0x00, 0xf3, 0xb3, 0x33, 0x00, 0x02, 0x2e, 0x02, 0x16, - 0xf6, 0xb7, 0x33, 0x80, 0x0b, 0xf7, 0xbd, 0x33, 0xc0, 0x00, 0x45, 0x02, - 0x75, 0xbf, 0x33, 0x40, 0x45, 0x02, 0x75, 0xb9, 0x33, 0x40, 0xe1, 0x82, + 0xf6, 0xb7, 0x33, 0x80, 0x0b, 0xf7, 0xbd, 0x33, 0xc0, 0x00, 0x45, 0x17, + 0x75, 0xbf, 0x33, 0x40, 0x45, 0x17, 0x75, 0xb9, 0x33, 0x40, 0xe1, 0x82, 0x33, 0x00, 0xe6, 0x8c, 0x33, 0x00, 0xe7, 0x8d, 0x33, 0x00, 0xec, 0x95, 0x33, 0x00, 0xed, 0x9b, 0x33, 0x00, 0xf3, 0xb2, 0x33, 0x00, 0xf6, 0xb6, - 0x33, 0x00, 0xf7, 0xbc, 0x33, 0x40, 0x80, 0x01, 0xff, 0x45, 0xb7, 0xda, - 0xa3, 0x33, 0x00, 0x47, 0xdb, 0x04, 0x9f, 0x33, 0x40, 0x45, 0x23, 0xdd, + 0x33, 0x00, 0xf7, 0xbc, 0x33, 0x40, 0x80, 0x01, 0xff, 0x45, 0xd3, 0xda, + 0xa3, 0x33, 0x00, 0x47, 0xdb, 0x04, 0x9f, 0x33, 0x40, 0x45, 0x3f, 0xdd, 0x48, 0x33, 0x00, 0xec, 0xd5, 0x33, 0x00, 0x42, 0x0d, 0x00, 0x49, 0x33, - 0xc0, 0x00, 0x45, 0xe0, 0xd9, 0x4a, 0x33, 0x40, 0x45, 0x03, 0xc9, 0x4d, + 0xc0, 0x00, 0x45, 0xfc, 0xd9, 0x4a, 0x33, 0x40, 0x45, 0x1f, 0xc9, 0x4d, 0x33, 0x00, 0x42, 0x24, 0x02, 0x4b, 0x33, 0xc0, 0x00, 0x43, 0x28, 0x12, - 0x4c, 0x33, 0x40, 0x46, 0x3b, 0x06, 0xd4, 0x33, 0x40, 0x43, 0x7e, 0x4c, - 0x45, 0x33, 0x00, 0xa9, 0x0c, 0x45, 0x68, 0xde, 0x47, 0x33, 0x00, 0x44, - 0x52, 0xe7, 0x46, 0x33, 0x40, 0x44, 0x23, 0xdd, 0x43, 0x33, 0x00, 0x42, - 0x3d, 0x00, 0x44, 0x33, 0x40, 0x45, 0xb7, 0xda, 0xa5, 0x33, 0x00, 0xaf, + 0x4c, 0x33, 0x40, 0x46, 0x3b, 0x06, 0xd4, 0x33, 0x40, 0x43, 0x93, 0x4c, + 0x45, 0x33, 0x00, 0xa9, 0x0c, 0x45, 0x84, 0xde, 0x47, 0x33, 0x00, 0x44, + 0x6e, 0xe7, 0x46, 0x33, 0x40, 0x44, 0x3f, 0xdd, 0x43, 0x33, 0x00, 0x42, + 0x3d, 0x00, 0x44, 0x33, 0x40, 0x45, 0xd3, 0xda, 0xa5, 0x33, 0x00, 0xaf, 0x06, 0x47, 0xdb, 0x04, 0xa1, 0x33, 0x40, 0x42, 0xa1, 0x09, 0xc1, 0x33, 0x00, 0x45, 0x23, 0x0b, 0xa7, 0x33, 0xc0, 0x00, 0x48, 0xda, 0x04, 0xa8, 0x33, 0x40, 0x55, 0x72, 0x36, 0xcd, 0x2a, 0x00, 0xed, 0xd0, 0x33, 0x00, 0xee, 0xd1, 0x33, 0x00, 0xaf, 0x04, 0xf8, 0xd3, 0x33, 0x40, 0xe7, 0xd2, - 0x33, 0x00, 0x45, 0x58, 0x07, 0x11, 0x23, 0x40, 0x44, 0xbe, 0xe1, 0xc0, + 0x33, 0x00, 0x45, 0x58, 0x07, 0x11, 0x23, 0x40, 0x44, 0xda, 0xe1, 0xc0, 0x33, 0x00, 0xe1, 0x84, 0x33, 0x80, 0x8d, 0x01, 0xe2, 0x85, 0x33, 0x00, 0x43, 0x37, 0x00, 0x89, 0x33, 0x00, 0x44, 0xa1, 0x1b, 0x1c, 0x33, 0x00, - 0xe7, 0x8f, 0x33, 0x00, 0x42, 0x01, 0x9d, 0x91, 0x33, 0x00, 0x43, 0xd3, + 0xe7, 0x8f, 0x33, 0x00, 0x42, 0x14, 0x9d, 0x91, 0x33, 0x00, 0x43, 0xd3, 0x1d, 0x14, 0x33, 0x80, 0x5a, 0xeb, 0xcd, 0x33, 0x00, 0xec, 0x98, 0x33, 0x00, 0xed, 0x9e, 0x33, 0x80, 0x36, 0xaf, 0x28, 0x42, 0xc1, 0x08, 0xaa, 0x33, 0x00, 0xf4, 0xcf, 0x33, 0x00, 0x02, 0x42, 0x00, 0x0e, 0xf6, 0xb8, - 0x33, 0x00, 0xf7, 0xbe, 0x33, 0x00, 0x45, 0x9c, 0xe1, 0x12, 0x33, 0x40, - 0x44, 0xc2, 0xe6, 0x1b, 0x33, 0x00, 0x46, 0x79, 0xd6, 0x1a, 0x33, 0x40, - 0x43, 0x29, 0x32, 0x1e, 0x33, 0x00, 0x44, 0x56, 0xe7, 0x1d, 0x33, 0x40, + 0x33, 0x00, 0xf7, 0xbe, 0x33, 0x00, 0x45, 0xb8, 0xe1, 0x12, 0x33, 0x40, + 0x44, 0xde, 0xe6, 0x1b, 0x33, 0x00, 0x46, 0x95, 0xd6, 0x1a, 0x33, 0x40, + 0x43, 0x29, 0x32, 0x1e, 0x33, 0x00, 0x44, 0x72, 0xe7, 0x1d, 0x33, 0x40, 0x80, 0x01, 0xff, 0xa3, 0x06, 0x47, 0xdb, 0x04, 0xa2, 0x33, 0x40, 0x46, - 0xea, 0x04, 0xce, 0x33, 0x00, 0x44, 0xb8, 0xda, 0xa6, 0x33, 0x40, 0x46, - 0xd5, 0xd1, 0x15, 0x33, 0x00, 0x47, 0x01, 0xc9, 0x16, 0x33, 0x00, 0x45, - 0x42, 0xe1, 0x17, 0x33, 0x40, 0x43, 0xa3, 0x09, 0x0b, 0x33, 0x00, 0xb2, - 0x01, 0xff, 0x44, 0xfc, 0x84, 0x0c, 0x33, 0x00, 0x44, 0xd6, 0xe6, 0x0d, - 0x33, 0x40, 0x47, 0x3d, 0x3e, 0x8f, 0x22, 0x80, 0x15, 0xee, 0xcc, 0x33, - 0x80, 0x04, 0xf5, 0x7a, 0x33, 0x40, 0x44, 0xee, 0x9c, 0x04, 0x33, 0x00, + 0xea, 0x04, 0xce, 0x33, 0x00, 0x44, 0xd4, 0xda, 0xa6, 0x33, 0x40, 0x46, + 0xf1, 0xd1, 0x15, 0x33, 0x00, 0x47, 0x1d, 0xc9, 0x16, 0x33, 0x00, 0x45, + 0x5e, 0xe1, 0x17, 0x33, 0x40, 0x43, 0xa3, 0x09, 0x0b, 0x33, 0x00, 0xb2, + 0x01, 0xff, 0x44, 0x03, 0x85, 0x0c, 0x33, 0x00, 0x44, 0xf2, 0xe6, 0x0d, + 0x33, 0x40, 0x47, 0x52, 0x3e, 0x8f, 0x22, 0x80, 0x15, 0xee, 0xcc, 0x33, + 0x80, 0x04, 0xf5, 0x7a, 0x33, 0x40, 0x44, 0x01, 0x9d, 0x04, 0x33, 0x00, 0x42, 0x35, 0x00, 0x05, 0x33, 0x40, 0x04, 0x5e, 0x1c, 0x01, 0xff, 0x48, 0x72, 0x0b, 0x91, 0x22, 0x00, 0x4c, 0xeb, 0x27, 0xe4, 0x22, 0x40, 0xe1, - 0xca, 0x33, 0x80, 0x4c, 0xa5, 0x3e, 0xe7, 0xcc, 0x32, 0x00, 0x4c, 0xe0, + 0xca, 0x33, 0x80, 0x4c, 0xa5, 0x3e, 0xe7, 0xcc, 0x32, 0x00, 0x4c, 0xe7, 0x88, 0x00, 0xf2, 0x01, 0xaf, 0x21, 0xf0, 0xcb, 0x33, 0x80, 0x18, 0xb5, - 0x04, 0xfa, 0x90, 0x33, 0x40, 0x46, 0x95, 0xcf, 0x32, 0x33, 0x00, 0x44, - 0x7a, 0xe5, 0x33, 0x33, 0x00, 0x43, 0xd0, 0x02, 0x35, 0x33, 0x40, 0xe1, + 0x04, 0xfa, 0x90, 0x33, 0x40, 0x46, 0xb1, 0xcf, 0x32, 0x33, 0x00, 0x44, + 0x96, 0xe5, 0x33, 0x33, 0x00, 0x43, 0xd0, 0x02, 0x35, 0x33, 0x40, 0xe1, 0x71, 0x33, 0x40, 0xee, 0x3f, 0x33, 0x00, 0xaf, 0x01, 0xff, 0xee, 0x42, - 0x33, 0x00, 0x42, 0x3d, 0x00, 0x41, 0x33, 0x40, 0x47, 0x59, 0xc8, 0x36, - 0x33, 0x00, 0x44, 0xb4, 0xe0, 0x39, 0x33, 0x40, 0x43, 0x6e, 0x1d, 0x2a, - 0x33, 0x40, 0xa1, 0x35, 0xe2, 0x87, 0x33, 0x00, 0x42, 0x01, 0x9d, 0x93, - 0x33, 0x00, 0xa9, 0x17, 0x42, 0xc1, 0x08, 0xac, 0x33, 0x00, 0x45, 0xd6, + 0x33, 0x00, 0x42, 0x3d, 0x00, 0x41, 0x33, 0x40, 0x47, 0x75, 0xc8, 0x36, + 0x33, 0x00, 0x44, 0xd0, 0xe0, 0x39, 0x33, 0x40, 0x43, 0x6e, 0x1d, 0x2a, + 0x33, 0x40, 0xa1, 0x35, 0xe2, 0x87, 0x33, 0x00, 0x42, 0x14, 0x9d, 0x93, + 0x33, 0x00, 0xa9, 0x17, 0x42, 0xc1, 0x08, 0xac, 0x33, 0x00, 0x45, 0xf2, 0xd1, 0x18, 0x33, 0x80, 0x04, 0xf9, 0xc9, 0x33, 0x40, 0x43, 0x28, 0x12, - 0x19, 0x33, 0x40, 0x42, 0x24, 0x02, 0x10, 0x33, 0x00, 0x43, 0x42, 0xe9, - 0x11, 0x33, 0x00, 0x45, 0xb7, 0xdf, 0x13, 0x33, 0x40, 0xec, 0xff, 0x33, - 0x00, 0x43, 0x2f, 0x8a, 0x0f, 0x33, 0x00, 0x43, 0x09, 0x0d, 0x0e, 0x33, + 0x19, 0x33, 0x40, 0x42, 0x24, 0x02, 0x10, 0x33, 0x00, 0x43, 0x5e, 0xe9, + 0x11, 0x33, 0x00, 0x45, 0xd3, 0xdf, 0x13, 0x33, 0x40, 0xec, 0xff, 0x33, + 0x00, 0x43, 0x36, 0x8a, 0x0f, 0x33, 0x00, 0x43, 0x09, 0x0d, 0x0e, 0x33, 0x40, 0xed, 0x99, 0x33, 0x00, 0xaf, 0x01, 0xff, 0x42, 0x20, 0x04, 0xcd, - 0x23, 0x00, 0x4a, 0xfd, 0xa9, 0xf6, 0x26, 0x40, 0x44, 0xd4, 0x95, 0x08, - 0x33, 0x00, 0xb2, 0x0a, 0x47, 0xd2, 0xcb, 0x07, 0x33, 0x00, 0xf6, 0xce, - 0x32, 0x40, 0x07, 0x5b, 0xc4, 0x04, 0xe7, 0xcd, 0x32, 0x40, 0x46, 0xff, - 0xd1, 0x7b, 0x33, 0x00, 0x45, 0xb9, 0xdd, 0x7e, 0x33, 0x00, 0x45, 0x76, - 0xdf, 0xff, 0x32, 0x00, 0x46, 0xb3, 0xd5, 0x7c, 0x33, 0x00, 0x47, 0xee, - 0xcb, 0x7d, 0x33, 0x40, 0xe1, 0x72, 0x33, 0x80, 0x2c, 0xe2, 0xc8, 0x33, + 0x23, 0x00, 0x4a, 0x10, 0xaa, 0xf6, 0x26, 0x40, 0x44, 0xe7, 0x95, 0x08, + 0x33, 0x00, 0xb2, 0x0a, 0x47, 0xee, 0xcb, 0x07, 0x33, 0x00, 0xf6, 0xce, + 0x32, 0x40, 0x07, 0x77, 0xc4, 0x04, 0xe7, 0xcd, 0x32, 0x40, 0x46, 0x1b, + 0xd2, 0x7b, 0x33, 0x00, 0x45, 0xd5, 0xdd, 0x7e, 0x33, 0x00, 0x45, 0x92, + 0xdf, 0xff, 0x32, 0x00, 0x46, 0xcf, 0xd5, 0x7c, 0x33, 0x00, 0x47, 0x0a, + 0xcc, 0x7d, 0x33, 0x40, 0xe1, 0x72, 0x33, 0x80, 0x2c, 0xe2, 0xc8, 0x33, 0x00, 0x43, 0x52, 0x09, 0x25, 0x33, 0x00, 0xea, 0x90, 0xf1, 0x01, 0xec, 0x97, 0x33, 0x00, 0xed, 0x77, 0x33, 0x80, 0x06, 0x43, 0x8d, 0x07, 0x26, - 0x33, 0x40, 0x80, 0x01, 0xff, 0x45, 0xb7, 0xda, 0x79, 0x33, 0x00, 0x47, + 0x33, 0x40, 0x80, 0x01, 0xff, 0x45, 0xd3, 0xda, 0x79, 0x33, 0x00, 0x47, 0xdb, 0x04, 0x78, 0x33, 0x40, 0x43, 0x92, 0x16, 0x24, 0x33, 0x40, 0x48, - 0x9d, 0xb8, 0xc6, 0x33, 0x00, 0xa1, 0x2d, 0xe3, 0xc4, 0x33, 0x00, 0xe4, + 0xb9, 0xb8, 0xc6, 0x33, 0x00, 0xa1, 0x2d, 0xe3, 0xc4, 0x33, 0x00, 0xe4, 0xc5, 0x33, 0x00, 0xed, 0x9d, 0x33, 0x80, 0x11, 0xef, 0xc7, 0x33, 0x80, - 0x06, 0x42, 0x50, 0x02, 0x94, 0x22, 0x40, 0x49, 0x5a, 0xb5, 0x7f, 0x33, - 0x40, 0x80, 0x01, 0xff, 0x45, 0xb7, 0xda, 0xa4, 0x33, 0x00, 0x47, 0xdb, + 0x06, 0x42, 0x50, 0x02, 0x94, 0x22, 0x40, 0x49, 0x76, 0xb5, 0x7f, 0x33, + 0x40, 0x80, 0x01, 0xff, 0x45, 0xd3, 0xda, 0xa4, 0x33, 0x00, 0x47, 0xdb, 0x04, 0xa0, 0x33, 0x40, 0xec, 0x88, 0x33, 0x00, 0xf0, 0x93, 0x22, 0x40, - 0xa1, 0x1c, 0x44, 0x87, 0x0f, 0x3c, 0x33, 0x00, 0x43, 0xe6, 0x76, 0x31, - 0x33, 0x00, 0x45, 0xcc, 0xde, 0x3e, 0x33, 0x00, 0xf1, 0xc3, 0x33, 0x00, - 0x47, 0xc7, 0xcc, 0x34, 0x33, 0x40, 0x45, 0xae, 0xd9, 0x2d, 0x33, 0x00, + 0xa1, 0x1c, 0x44, 0x87, 0x0f, 0x3c, 0x33, 0x00, 0x43, 0xed, 0x76, 0x31, + 0x33, 0x00, 0x45, 0xe8, 0xde, 0x3e, 0x33, 0x00, 0xf1, 0xc3, 0x33, 0x00, + 0x47, 0xe3, 0xcc, 0x34, 0x33, 0x40, 0x45, 0xca, 0xd9, 0x2d, 0x33, 0x00, 0xf2, 0x74, 0x33, 0x40, 0x47, 0xac, 0x25, 0xdf, 0x33, 0x00, 0x43, 0x3c, - 0x00, 0x03, 0x33, 0x00, 0xed, 0xc2, 0x33, 0x00, 0x44, 0x7a, 0xe6, 0x02, - 0x33, 0x00, 0x45, 0xe5, 0xde, 0x00, 0x33, 0x00, 0x45, 0xbc, 0xdf, 0x01, + 0x00, 0x03, 0x33, 0x00, 0xed, 0xc2, 0x33, 0x00, 0x44, 0x96, 0xe6, 0x02, + 0x33, 0x00, 0x45, 0x01, 0xdf, 0x00, 0x33, 0x00, 0x45, 0xd8, 0xdf, 0x01, 0x33, 0x00, 0xf5, 0x73, 0x33, 0x40, 0xa1, 0xa9, 0x01, 0xa5, 0x65, 0x4d, - 0x95, 0x7c, 0x22, 0x22, 0x80, 0x4d, 0xa9, 0x27, 0x54, 0x04, 0x3f, 0xa6, + 0x9c, 0x7c, 0x22, 0x22, 0x80, 0x4d, 0xa9, 0x27, 0x54, 0x19, 0x3f, 0xa6, 0xf4, 0x01, 0xaf, 0x01, 0xff, 0x43, 0x5a, 0x07, 0xfd, 0xf9, 0x01, 0xaf, - 0x0c, 0x49, 0x6c, 0xb5, 0xc5, 0xf3, 0x01, 0x4b, 0x31, 0x9c, 0x33, 0xf4, - 0x41, 0x4b, 0xf6, 0x95, 0xf5, 0xf9, 0x01, 0xee, 0x44, 0xf9, 0x41, 0x43, + 0x0c, 0x49, 0x88, 0xb5, 0xc5, 0xf3, 0x01, 0x4b, 0x44, 0x9c, 0x33, 0xf4, + 0x41, 0x4b, 0x09, 0x96, 0xf5, 0xf9, 0x01, 0xee, 0x44, 0xf9, 0x41, 0x43, 0xa2, 0x18, 0x77, 0xf5, 0x81, 0x17, 0x04, 0xdd, 0x01, 0x01, 0xff, 0x4c, - 0xb0, 0x85, 0xd3, 0xf5, 0x01, 0x48, 0x05, 0xbf, 0xd2, 0xf5, 0x01, 0x45, - 0x3f, 0x08, 0x1a, 0xf4, 0x41, 0x44, 0xca, 0xe1, 0x78, 0xf5, 0x41, 0x09, - 0x0d, 0x6f, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xa0, 0x29, 0x00, 0x42, 0x50, - 0x02, 0xa1, 0x29, 0x40, 0x02, 0x6d, 0x00, 0x14, 0xa5, 0x06, 0x4a, 0x59, - 0xa8, 0xb7, 0x20, 0x40, 0x4a, 0xfd, 0x9f, 0xac, 0xf4, 0x01, 0x45, 0xc6, - 0xda, 0xa4, 0xf6, 0x41, 0x4f, 0xd5, 0x63, 0x4a, 0xf6, 0x01, 0x42, 0x33, + 0xb7, 0x85, 0xd3, 0xf5, 0x01, 0x48, 0x21, 0xbf, 0xd2, 0xf5, 0x01, 0x45, + 0x3f, 0x08, 0x1a, 0xf4, 0x41, 0x44, 0xe6, 0xe1, 0x78, 0xf5, 0x41, 0x09, + 0x22, 0x6f, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xa0, 0x29, 0x00, 0x42, 0x50, + 0x02, 0xa1, 0x29, 0x40, 0x02, 0x6d, 0x00, 0x14, 0xa5, 0x06, 0x4a, 0x6c, + 0xa8, 0xb7, 0x20, 0x40, 0x4a, 0x10, 0xa0, 0xac, 0xf4, 0x01, 0x45, 0xe2, + 0xda, 0xa4, 0xf6, 0x41, 0x4f, 0xea, 0x63, 0x4a, 0xf6, 0x01, 0x42, 0x33, 0x00, 0x08, 0xf5, 0x81, 0x06, 0x56, 0xca, 0x30, 0xe3, 0xf5, 0x41, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x53, 0xd4, 0x28, 0x07, 0xf5, 0x01, 0x4e, 0x84, - 0x73, 0x09, 0xf5, 0x01, 0x51, 0x72, 0x58, 0x0a, 0xf5, 0x41, 0x42, 0x73, - 0x02, 0x20, 0x00, 0x00, 0x46, 0x9f, 0xd1, 0x5d, 0xf3, 0x01, 0x03, 0x61, - 0x0c, 0x01, 0xff, 0xe5, 0x47, 0x27, 0x80, 0x06, 0x49, 0x70, 0x7f, 0x96, + 0x50, 0x00, 0x01, 0xff, 0x53, 0xd4, 0x28, 0x07, 0xf5, 0x01, 0x4e, 0x99, + 0x73, 0x09, 0xf5, 0x01, 0x51, 0x87, 0x58, 0x0a, 0xf5, 0x41, 0x42, 0x73, + 0x02, 0x20, 0x00, 0x00, 0x46, 0xbb, 0xd1, 0x5d, 0xf3, 0x01, 0x03, 0x61, + 0x0c, 0x01, 0xff, 0xe5, 0x47, 0x27, 0x80, 0x06, 0x49, 0x77, 0x7f, 0x96, 0xf4, 0x41, 0xf3, 0x28, 0x27, 0x40, 0xa3, 0xbe, 0x0a, 0x02, 0xc5, 0x00, - 0x99, 0x0a, 0x06, 0x80, 0xc9, 0xe2, 0x07, 0x03, 0x69, 0x2d, 0xc3, 0x07, - 0x46, 0x4a, 0x58, 0xc0, 0x20, 0x00, 0x5e, 0x61, 0x12, 0x1c, 0xf5, 0x01, - 0x0b, 0x50, 0x99, 0xce, 0x05, 0xb5, 0x89, 0x04, 0x06, 0xdf, 0xd6, 0x01, + 0x99, 0x0a, 0x06, 0x9c, 0xc9, 0xe2, 0x07, 0x03, 0x69, 0x2d, 0xc3, 0x07, + 0x46, 0x5f, 0x58, 0xc0, 0x20, 0x00, 0x5e, 0x61, 0x12, 0x1c, 0xf5, 0x01, + 0x0b, 0x63, 0x99, 0xce, 0x05, 0xb5, 0x89, 0x04, 0x06, 0xfb, 0xd6, 0x01, 0xff, 0x17, 0x87, 0x2a, 0xe6, 0x03, 0x15, 0xf0, 0x36, 0xad, 0x03, 0x4f, - 0xd2, 0x66, 0x98, 0x1a, 0x01, 0x5b, 0x88, 0x19, 0xa0, 0x1a, 0x81, 0x8e, + 0xe7, 0x66, 0x98, 0x1a, 0x01, 0x5b, 0x88, 0x19, 0xa0, 0x1a, 0x81, 0x8e, 0x03, 0x07, 0xf1, 0x04, 0x8d, 0x01, 0x05, 0xb9, 0x00, 0x71, 0xb3, 0x4d, - 0x0e, 0xec, 0x75, 0x41, 0x06, 0x11, 0x35, 0x01, 0xff, 0x4b, 0x17, 0x35, + 0x0e, 0xf3, 0x75, 0x41, 0x06, 0x11, 0x35, 0x01, 0xff, 0x4b, 0x17, 0x35, 0x5b, 0x1a, 0x01, 0x05, 0xdb, 0x02, 0x01, 0xff, 0xa1, 0x27, 0xe5, 0x54, 0x1a, 0x01, 0xe9, 0x51, 0x1a, 0x01, 0xef, 0x55, 0x1a, 0x81, 0x16, 0xf5, - 0x53, 0x1a, 0x81, 0x0d, 0x08, 0x76, 0xb7, 0x01, 0xff, 0xec, 0x5a, 0x1a, + 0x53, 0x1a, 0x81, 0x0d, 0x08, 0x92, 0xb7, 0x01, 0xff, 0xec, 0x5a, 0x1a, 0x01, 0xf2, 0x59, 0x1a, 0x41, 0xe5, 0x52, 0x1a, 0x41, 0xe5, 0x56, 0x1a, 0x41, 0xe9, 0x57, 0x1a, 0x01, 0xf5, 0x58, 0x1a, 0x41, 0xd1, 0xa1, 0x1a, - 0x01, 0xd2, 0xa2, 0x1a, 0x41, 0x04, 0xdc, 0x02, 0x06, 0x48, 0xdd, 0xc1, - 0x99, 0x1a, 0x41, 0x48, 0x5b, 0x14, 0x96, 0x1a, 0x01, 0x4b, 0xbf, 0x95, - 0x84, 0x1a, 0x01, 0x4b, 0x05, 0x9c, 0x85, 0x1a, 0x01, 0x47, 0x67, 0x46, - 0x97, 0x1a, 0x41, 0x4b, 0x36, 0x93, 0x9c, 0x1a, 0x01, 0x45, 0x21, 0xdf, + 0x01, 0xd2, 0xa2, 0x1a, 0x41, 0x04, 0xdc, 0x02, 0x06, 0x48, 0xf9, 0xc1, + 0x99, 0x1a, 0x41, 0x48, 0x5b, 0x14, 0x96, 0x1a, 0x01, 0x4b, 0xd2, 0x95, + 0x84, 0x1a, 0x01, 0x4b, 0x18, 0x9c, 0x85, 0x1a, 0x01, 0x47, 0x7c, 0x46, + 0x97, 0x1a, 0x41, 0x4b, 0x49, 0x93, 0x9c, 0x1a, 0x01, 0x45, 0x3d, 0xdf, 0x9d, 0x1a, 0x01, 0x44, 0xa4, 0x02, 0x9b, 0x1a, 0x01, 0x45, 0xe9, 0x35, 0x9a, 0x1a, 0x41, 0x42, 0x1a, 0x23, 0x7a, 0x1a, 0x01, 0xe1, 0x50, 0x1a, 0x01, 0xa2, 0xe5, 0x01, 0xa3, 0xd8, 0x01, 0xa4, 0xb9, 0x01, 0xa7, 0xac, @@ -3840,8 +3841,8 @@ static const unsigned char uname2c_tree[210697] = { 0x6e, 0x1a, 0x01, 0x42, 0x59, 0x00, 0x77, 0x1a, 0x41, 0xe1, 0x68, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x69, 0x1a, 0x41, 0xe1, 0x61, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x62, 0x1a, 0x41, 0xe1, 0x72, 0x1a, 0x01, 0x42, 0x22, 0x00, - 0x73, 0x1a, 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x4b, 0x8e, 0x9f, - 0x1a, 0x01, 0x4c, 0x44, 0x8e, 0x9e, 0x1a, 0x41, 0x42, 0x1a, 0x23, 0x95, + 0x73, 0x1a, 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x5e, 0x8e, 0x9f, + 0x1a, 0x01, 0x4c, 0x57, 0x8e, 0x9e, 0x1a, 0x41, 0x42, 0x1a, 0x23, 0x95, 0x1a, 0x01, 0xe2, 0x8f, 0x1a, 0x01, 0xe4, 0x8d, 0x1a, 0x01, 0xe7, 0x8a, 0x1a, 0x01, 0xeb, 0x8b, 0x1a, 0x01, 0xec, 0x92, 0x1a, 0x01, 0xed, 0x90, 0x1a, 0x01, 0xee, 0x8e, 0x1a, 0x81, 0x0d, 0xf2, 0x91, 0x1a, 0x01, 0xf3, @@ -3850,32 +3851,32 @@ static const unsigned char uname2c_tree[210697] = { 0xb3, 0x01, 0xff, 0xe1, 0x89, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x88, 0x1a, 0x41, 0x56, 0xa6, 0x31, 0x17, 0x21, 0x00, 0x03, 0x53, 0x00, 0x01, 0xff, 0x05, 0x11, 0x21, 0x56, 0x05, 0x8b, 0x18, 0x01, 0xff, 0x45, 0xce, 0x00, - 0x99, 0x21, 0x80, 0x3b, 0x4b, 0x9f, 0x91, 0x0b, 0x2b, 0x00, 0x4c, 0xa0, - 0x86, 0xd9, 0x21, 0x00, 0x09, 0x9c, 0x01, 0x19, 0x50, 0x89, 0x60, 0x57, + 0x99, 0x21, 0x80, 0x3b, 0x4b, 0xb2, 0x91, 0x0b, 0x2b, 0x00, 0x4c, 0xa7, + 0x86, 0xd9, 0x21, 0x00, 0x09, 0x9c, 0x01, 0x19, 0x50, 0x9e, 0x60, 0x57, 0xf8, 0x01, 0x55, 0x01, 0x02, 0x69, 0x2b, 0x80, 0x06, 0x4b, 0xa1, 0x0e, - 0x03, 0x2b, 0x40, 0x47, 0x0c, 0x13, 0x79, 0x2b, 0x40, 0x43, 0x5f, 0xc6, - 0x61, 0xf6, 0x01, 0x44, 0xa3, 0x4b, 0x51, 0xf6, 0x01, 0x49, 0x64, 0xb7, - 0x59, 0xf6, 0x41, 0x80, 0x01, 0xff, 0x54, 0x94, 0x3b, 0x2a, 0x29, 0x00, + 0x03, 0x2b, 0x40, 0x47, 0x0c, 0x13, 0x79, 0x2b, 0x40, 0x43, 0x7b, 0xc6, + 0x61, 0xf6, 0x01, 0x44, 0xb8, 0x4b, 0x51, 0xf6, 0x01, 0x49, 0x80, 0xb7, + 0x59, 0xf6, 0x41, 0x80, 0x01, 0xff, 0x54, 0xa9, 0x3b, 0x2a, 0x29, 0x00, 0x49, 0x0c, 0x22, 0x26, 0x29, 0x40, 0x45, 0xce, 0x00, 0x98, 0x21, 0x80, - 0x3b, 0x4b, 0x9f, 0x91, 0x0a, 0x2b, 0x00, 0x4c, 0xa0, 0x86, 0xd8, 0x21, - 0x00, 0x09, 0x9c, 0x01, 0x19, 0x50, 0x89, 0x60, 0x56, 0xf8, 0x01, 0x55, + 0x3b, 0x4b, 0xb2, 0x91, 0x0a, 0x2b, 0x00, 0x4c, 0xa7, 0x86, 0xd8, 0x21, + 0x00, 0x09, 0x9c, 0x01, 0x19, 0x50, 0x9e, 0x60, 0x56, 0xf8, 0x01, 0x55, 0x01, 0x02, 0x68, 0x2b, 0x80, 0x06, 0x4b, 0xa1, 0x0e, 0x02, 0x2b, 0x40, - 0x47, 0x0c, 0x13, 0x78, 0x2b, 0x40, 0x43, 0x5f, 0xc6, 0x63, 0xf6, 0x01, - 0x44, 0xa3, 0x4b, 0x53, 0xf6, 0x01, 0x49, 0x64, 0xb7, 0x5b, 0xf6, 0x41, - 0x80, 0x01, 0xff, 0x54, 0xbc, 0x3b, 0x29, 0x29, 0x00, 0x59, 0x02, 0x21, - 0x2d, 0x29, 0x00, 0x49, 0x44, 0xb6, 0xf2, 0x21, 0x00, 0x49, 0x0c, 0x22, + 0x47, 0x0c, 0x13, 0x78, 0x2b, 0x40, 0x43, 0x7b, 0xc6, 0x63, 0xf6, 0x01, + 0x44, 0xb8, 0x4b, 0x53, 0xf6, 0x01, 0x49, 0x80, 0xb7, 0x5b, 0xf6, 0x41, + 0x80, 0x01, 0xff, 0x54, 0xd1, 0x3b, 0x29, 0x29, 0x00, 0x59, 0x02, 0x21, + 0x2d, 0x29, 0x00, 0x49, 0x60, 0xb6, 0xf2, 0x21, 0x00, 0x49, 0x0c, 0x22, 0x25, 0x29, 0x40, 0x06, 0xf4, 0x05, 0x9d, 0x01, 0x07, 0xf1, 0x04, 0x01, - 0xff, 0x42, 0xe6, 0x06, 0xe2, 0x10, 0x01, 0x43, 0xca, 0x48, 0xd2, 0x10, - 0x01, 0x43, 0xd0, 0xe8, 0xd3, 0x10, 0x01, 0x43, 0x77, 0x72, 0xd4, 0x10, - 0x01, 0xa5, 0x74, 0x43, 0x14, 0xb3, 0xd5, 0x10, 0x01, 0x43, 0xbe, 0x1e, - 0xde, 0x10, 0x01, 0x42, 0x5b, 0x17, 0xe4, 0x10, 0x01, 0x43, 0x27, 0xe9, - 0xe0, 0x10, 0x01, 0x43, 0x7e, 0x42, 0xdf, 0x10, 0x01, 0x43, 0x56, 0x16, + 0xff, 0x42, 0xe6, 0x06, 0xe2, 0x10, 0x01, 0x43, 0xdf, 0x48, 0xd2, 0x10, + 0x01, 0x43, 0xec, 0xe8, 0xd3, 0x10, 0x01, 0x43, 0x8c, 0x72, 0xd4, 0x10, + 0x01, 0xa5, 0x74, 0x43, 0x30, 0xb3, 0xd5, 0x10, 0x01, 0x43, 0xbe, 0x1e, + 0xde, 0x10, 0x01, 0x42, 0x5b, 0x17, 0xe4, 0x10, 0x01, 0x43, 0x43, 0xe9, + 0xe0, 0x10, 0x01, 0x43, 0x93, 0x42, 0xdf, 0x10, 0x01, 0x43, 0x56, 0x16, 0xd8, 0x10, 0x01, 0x02, 0x6c, 0x00, 0x44, 0xae, 0x30, 0x42, 0xfe, 0x25, - 0xe6, 0x10, 0x01, 0x43, 0x12, 0x3e, 0xdb, 0x10, 0x01, 0x43, 0x5d, 0x16, - 0xdd, 0x10, 0x01, 0x43, 0xcb, 0xbc, 0xd0, 0x10, 0x01, 0x43, 0xe5, 0x06, - 0xd1, 0x10, 0x01, 0x42, 0xe8, 0x6e, 0xe5, 0x10, 0x01, 0x43, 0x50, 0xcb, - 0xda, 0x10, 0x01, 0x43, 0x15, 0x45, 0xdc, 0x10, 0x41, 0x42, 0xe6, 0x06, - 0xd9, 0x10, 0x01, 0x43, 0x14, 0xb3, 0xd7, 0x10, 0x01, 0x43, 0x15, 0x45, + 0xe6, 0x10, 0x01, 0x43, 0x27, 0x3e, 0xdb, 0x10, 0x01, 0x43, 0x5d, 0x16, + 0xdd, 0x10, 0x01, 0x43, 0xe7, 0xbc, 0xd0, 0x10, 0x01, 0x43, 0xe5, 0x06, + 0xd1, 0x10, 0x01, 0x42, 0xfd, 0x6e, 0xe5, 0x10, 0x01, 0x43, 0x6c, 0xcb, + 0xda, 0x10, 0x01, 0x43, 0x2a, 0x45, 0xdc, 0x10, 0x41, 0x42, 0xe6, 0x06, + 0xd9, 0x10, 0x01, 0x43, 0x30, 0xb3, 0xd7, 0x10, 0x01, 0x43, 0x2a, 0x45, 0xe1, 0x10, 0x41, 0xe5, 0xe8, 0x10, 0x01, 0xe8, 0xd6, 0x10, 0x41, 0x42, 0x4e, 0x00, 0xe3, 0x10, 0x01, 0xe8, 0xe7, 0x10, 0x41, 0x45, 0xd1, 0x09, 0xf8, 0x10, 0x01, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0xf9, 0x10, 0x01, 0x43, @@ -3884,308 +3885,308 @@ static const unsigned char uname2c_tree[210697] = { 0xf2, 0x10, 0x41, 0x44, 0x96, 0x1b, 0xf7, 0x10, 0x01, 0x42, 0x30, 0x27, 0xf6, 0x10, 0x41, 0x43, 0xd7, 0x04, 0xf5, 0x10, 0x01, 0x43, 0xfb, 0x05, 0xf4, 0x10, 0x41, 0x56, 0x18, 0x22, 0x6a, 0xf6, 0x81, 0x0d, 0x42, 0xc6, - 0x02, 0x2f, 0x00, 0xc0, 0x00, 0x4d, 0xed, 0x78, 0xf6, 0x29, 0x40, 0x50, - 0xb6, 0x0f, 0x6b, 0xf6, 0x41, 0x0a, 0x99, 0x53, 0xda, 0x01, 0x50, 0xa9, + 0x02, 0x2f, 0x00, 0xc0, 0x00, 0x4d, 0xf4, 0x78, 0xf6, 0x29, 0x40, 0x50, + 0xb6, 0x0f, 0x6b, 0xf6, 0x41, 0x0a, 0xae, 0x53, 0xda, 0x01, 0x50, 0xbe, 0x5d, 0x45, 0x0f, 0x01, 0x07, 0xf1, 0x04, 0x49, 0x07, 0xbf, 0x35, 0x29, - 0x0c, 0x8c, 0x14, 0x01, 0xff, 0x4f, 0xdd, 0x3d, 0x57, 0x0f, 0x01, 0x54, - 0xd8, 0x3d, 0x59, 0x0f, 0x01, 0x04, 0x25, 0x09, 0x01, 0xff, 0x51, 0x77, - 0x53, 0x58, 0x0f, 0x01, 0x4d, 0xad, 0x82, 0x55, 0x0f, 0xc1, 0x00, 0x4a, - 0x7e, 0x53, 0x56, 0x0f, 0x41, 0x43, 0xcd, 0x09, 0x51, 0x0f, 0x81, 0x0f, + 0x0c, 0x8c, 0x14, 0x01, 0xff, 0x4f, 0xf2, 0x3d, 0x57, 0x0f, 0x01, 0x54, + 0xed, 0x3d, 0x59, 0x0f, 0x01, 0x04, 0x25, 0x09, 0x01, 0xff, 0x51, 0x8c, + 0x53, 0x58, 0x0f, 0x01, 0x4d, 0xb4, 0x82, 0x55, 0x0f, 0xc1, 0x00, 0x4a, + 0x93, 0x53, 0x56, 0x0f, 0x41, 0x43, 0xcd, 0x09, 0x51, 0x0f, 0x81, 0x0f, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x52, 0x0f, 0x01, 0x45, 0x38, 0x29, 0x53, 0x0f, 0x41, 0x48, 0xe8, 0x0f, 0x54, 0x0f, 0x41, 0xa1, 0x79, 0x44, - 0x46, 0xe4, 0x31, 0x0f, 0x01, 0x44, 0xc6, 0xe4, 0x43, 0x0f, 0x01, 0x45, - 0x4b, 0xa2, 0x32, 0x0f, 0x01, 0x42, 0xb0, 0x01, 0x33, 0x0f, 0x81, 0x5a, - 0x44, 0xba, 0xe5, 0x38, 0x0f, 0x01, 0xac, 0x46, 0x43, 0xb9, 0x04, 0x3a, + 0x62, 0xe4, 0x31, 0x0f, 0x01, 0x44, 0xe2, 0xe4, 0x43, 0x0f, 0x01, 0x45, + 0x5e, 0xa2, 0x32, 0x0f, 0x01, 0x42, 0xb0, 0x01, 0x33, 0x0f, 0x81, 0x5a, + 0x44, 0xd6, 0xe5, 0x38, 0x0f, 0x01, 0xac, 0x46, 0x43, 0xb9, 0x04, 0x3a, 0x0f, 0x01, 0x43, 0x40, 0x20, 0x3b, 0x0f, 0x01, 0x42, 0x6f, 0x02, 0x3e, - 0x0f, 0x01, 0x49, 0x29, 0x60, 0x40, 0x0f, 0x01, 0xb3, 0x18, 0x43, 0xf1, - 0xba, 0x42, 0x0f, 0x01, 0x43, 0x08, 0x83, 0x34, 0x0f, 0x01, 0x44, 0xf9, - 0x4c, 0x37, 0x0f, 0x01, 0x45, 0xf3, 0x4c, 0x35, 0x0f, 0x41, 0xa1, 0x06, - 0x43, 0x99, 0x14, 0x41, 0x0f, 0x41, 0x43, 0xd7, 0xdf, 0x3f, 0x0f, 0x01, - 0x44, 0x96, 0xd9, 0x3c, 0x0f, 0x41, 0x45, 0xe8, 0xd1, 0x39, 0x0f, 0x01, - 0x43, 0xeb, 0x54, 0x44, 0x0f, 0x41, 0x42, 0x53, 0x00, 0x36, 0x0f, 0x41, - 0x44, 0x99, 0x38, 0x30, 0x0f, 0x01, 0x43, 0x4b, 0x18, 0x3d, 0x0f, 0x41, + 0x0f, 0x01, 0x49, 0x3e, 0x60, 0x40, 0x0f, 0x01, 0xb3, 0x18, 0x43, 0x0d, + 0xbb, 0x42, 0x0f, 0x01, 0x43, 0x0f, 0x83, 0x34, 0x0f, 0x01, 0x44, 0x0e, + 0x4d, 0x37, 0x0f, 0x01, 0x45, 0x08, 0x4d, 0x35, 0x0f, 0x41, 0xa1, 0x06, + 0x43, 0x99, 0x14, 0x41, 0x0f, 0x41, 0x43, 0xf3, 0xdf, 0x3f, 0x0f, 0x01, + 0x44, 0xb2, 0xd9, 0x3c, 0x0f, 0x41, 0x45, 0x04, 0xd2, 0x39, 0x0f, 0x01, + 0x43, 0x00, 0x55, 0x44, 0x0f, 0x41, 0x42, 0x53, 0x00, 0x36, 0x0f, 0x41, + 0x44, 0xae, 0x38, 0x30, 0x0f, 0x01, 0x43, 0x4b, 0x18, 0x3d, 0x0f, 0x41, 0x06, 0xf5, 0x11, 0x43, 0x04, 0x9f, 0x0a, 0x33, 0x05, 0xeb, 0x12, 0x23, - 0x4f, 0x0c, 0x69, 0x4e, 0x0f, 0x01, 0x4a, 0x4b, 0xa7, 0x4f, 0x0f, 0x01, + 0x4f, 0x21, 0x69, 0x4e, 0x0f, 0x01, 0x4a, 0x5e, 0xa7, 0x4f, 0x0f, 0x01, 0x4c, 0x1d, 0x0d, 0x50, 0x0f, 0x01, 0x09, 0x8d, 0x0a, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x49, 0x0f, 0x01, 0x45, 0x25, 0x06, 0x47, 0x0f, 0x41, 0x45, 0x5c, 0x00, 0x4c, 0x0f, 0x01, 0x45, 0x25, 0x06, 0x4d, 0x0f, 0x41, 0x45, 0x5c, 0x00, 0x48, 0x0f, 0x01, 0x45, 0x25, 0x06, 0x46, 0x0f, 0x41, 0x45, 0x5c, 0x00, 0x4a, 0x0f, 0x01, 0x45, 0x25, 0x06, 0x4b, 0x0f, 0x41, 0x80, - 0x0c, 0x44, 0xb5, 0x1a, 0x4e, 0xf9, 0x01, 0x54, 0x48, 0x41, 0x94, 0x23, - 0x40, 0x46, 0x59, 0x5d, 0xad, 0x00, 0x00, 0x49, 0xa4, 0xb0, 0x66, 0xf3, - 0x01, 0x51, 0x26, 0x35, 0xac, 0xf5, 0x41, 0x48, 0xe5, 0xba, 0xbd, 0x26, - 0x00, 0x42, 0x6e, 0x00, 0xe6, 0xf9, 0x41, 0xa1, 0x2a, 0x4b, 0x83, 0x93, - 0x27, 0xf9, 0x01, 0x02, 0xd1, 0x00, 0x01, 0xff, 0x50, 0x19, 0x5a, 0xd4, - 0xf3, 0x01, 0x47, 0x65, 0xc5, 0xc2, 0xf3, 0x01, 0x45, 0x51, 0x2b, 0x44, - 0x27, 0x00, 0x43, 0x60, 0x16, 0x03, 0x26, 0xc0, 0x00, 0x4d, 0x07, 0x79, + 0x0c, 0x44, 0xb5, 0x1a, 0x4e, 0xf9, 0x01, 0x54, 0x5d, 0x41, 0x94, 0x23, + 0x40, 0x46, 0x6e, 0x5d, 0xad, 0x00, 0x00, 0x49, 0xc0, 0xb0, 0x66, 0xf3, + 0x01, 0x51, 0x26, 0x35, 0xac, 0xf5, 0x41, 0x48, 0x01, 0xbb, 0xbd, 0x26, + 0x00, 0x42, 0x6e, 0x00, 0xe6, 0xf9, 0x41, 0xa1, 0x2a, 0x4b, 0x96, 0x93, + 0x27, 0xf9, 0x01, 0x02, 0xd1, 0x00, 0x01, 0xff, 0x50, 0x2e, 0x5a, 0xd4, + 0xf3, 0x01, 0x47, 0x81, 0xc5, 0xc2, 0xf3, 0x01, 0x45, 0x51, 0x2b, 0x44, + 0x27, 0x00, 0x43, 0x60, 0x16, 0x03, 0x26, 0xc0, 0x00, 0x4d, 0x0e, 0x79, 0xc4, 0x26, 0x40, 0x42, 0x62, 0x01, 0x0c, 0xf4, 0x01, 0x42, 0x37, 0x01, - 0x0d, 0xf4, 0x41, 0xa1, 0x86, 0x01, 0xa9, 0x06, 0x4c, 0x9a, 0x75, 0xac, - 0xf6, 0x41, 0xac, 0x06, 0x4a, 0xa5, 0xa7, 0x0f, 0xf6, 0x41, 0xe5, 0x23, + 0x0d, 0xf4, 0x41, 0xa1, 0x86, 0x01, 0xa9, 0x06, 0x4c, 0xaf, 0x75, 0xac, + 0xf6, 0x41, 0xac, 0x06, 0x4a, 0xb8, 0xa7, 0x0f, 0xf6, 0x41, 0xe5, 0x23, 0x23, 0x00, 0x04, 0xa1, 0x01, 0x01, 0xff, 0x0e, 0xfa, 0x1c, 0x5d, 0x0a, 0xed, 0x06, 0x01, 0xff, 0xa8, 0x44, 0x4a, 0x3d, 0x26, 0x03, 0xf6, 0x81, 0x26, 0xb3, 0x06, 0x44, 0x7a, 0x0b, 0x72, 0xf9, 0x41, 0x4b, 0x09, 0x1d, - 0x0a, 0xf6, 0x81, 0x06, 0x49, 0xb0, 0xb6, 0x0e, 0xf6, 0x41, 0x05, 0x19, - 0x00, 0x01, 0xff, 0x53, 0x34, 0x44, 0x2d, 0xf9, 0x01, 0x4c, 0x14, 0x8e, - 0x70, 0xf9, 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0xfe, 0x6e, 0x05, - 0xf6, 0x01, 0x4c, 0x08, 0x1d, 0x04, 0xf6, 0x01, 0x53, 0x10, 0x48, 0x06, - 0xf6, 0x41, 0x43, 0x3e, 0x48, 0x07, 0xf6, 0x01, 0x50, 0xdd, 0x54, 0x0d, - 0xf6, 0x01, 0x44, 0xa8, 0x78, 0x08, 0xf6, 0x41, 0x51, 0xdc, 0x54, 0x3b, + 0x0a, 0xf6, 0x81, 0x06, 0x49, 0xcc, 0xb6, 0x0e, 0xf6, 0x41, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x53, 0x49, 0x44, 0x2d, 0xf9, 0x01, 0x4c, 0x27, 0x8e, + 0x70, 0xf9, 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x13, 0x6f, 0x05, + 0xf6, 0x01, 0x4c, 0x08, 0x1d, 0x04, 0xf6, 0x01, 0x53, 0x25, 0x48, 0x06, + 0xf6, 0x41, 0x43, 0x53, 0x48, 0x07, 0xf6, 0x01, 0x50, 0xf2, 0x54, 0x0d, + 0xf6, 0x01, 0x44, 0xaf, 0x78, 0x08, 0xf6, 0x41, 0x51, 0xf1, 0x54, 0x3b, 0xf6, 0x01, 0x4a, 0x3d, 0x26, 0x3a, 0xf6, 0x41, 0x02, 0x3f, 0x06, 0x06, - 0x4a, 0x93, 0x49, 0x33, 0x2a, 0x40, 0x80, 0x0d, 0x47, 0xb5, 0xc6, 0xaa, + 0x4a, 0xa8, 0x49, 0x33, 0x2a, 0x40, 0x80, 0x0d, 0x47, 0xd1, 0xc6, 0xaa, 0x2a, 0xc0, 0x00, 0x4c, 0xf3, 0x25, 0xac, 0x2a, 0x40, 0xa1, 0xf6, 0x02, - 0x4c, 0x5c, 0x85, 0x39, 0xf5, 0x01, 0x02, 0x18, 0x04, 0xbb, 0x02, 0x4b, - 0xff, 0x92, 0x69, 0xfe, 0x00, 0xa5, 0x88, 0x02, 0x49, 0xa0, 0x14, 0x52, - 0xfe, 0x00, 0x51, 0xba, 0x54, 0x65, 0xfe, 0x00, 0x4c, 0x44, 0x88, 0x63, - 0xfe, 0x00, 0x51, 0x42, 0x55, 0x51, 0xfe, 0x00, 0x02, 0x68, 0x00, 0xcf, - 0x01, 0x4b, 0x11, 0x98, 0x5f, 0xfe, 0x00, 0x4e, 0xae, 0x73, 0x38, 0xf5, + 0x4c, 0x63, 0x85, 0x39, 0xf5, 0x01, 0x02, 0x18, 0x04, 0xbb, 0x02, 0x4b, + 0x12, 0x93, 0x69, 0xfe, 0x00, 0xa5, 0x88, 0x02, 0x49, 0xa0, 0x14, 0x52, + 0xfe, 0x00, 0x51, 0xcf, 0x54, 0x65, 0xfe, 0x00, 0x4c, 0x4b, 0x88, 0x63, + 0xfe, 0x00, 0x51, 0x57, 0x55, 0x51, 0xfe, 0x00, 0x02, 0x68, 0x00, 0xcf, + 0x01, 0x4b, 0x24, 0x98, 0x5f, 0xfe, 0x00, 0x4e, 0xc3, 0x73, 0x38, 0xf5, 0x01, 0xb0, 0xb4, 0x01, 0x4d, 0xbd, 0x30, 0x56, 0xfe, 0x00, 0xb2, 0x1a, - 0x49, 0x90, 0xb5, 0x54, 0xfe, 0x00, 0xb4, 0x06, 0x51, 0x3e, 0x59, 0x61, + 0x49, 0xac, 0xb5, 0x54, 0xfe, 0x00, 0xb4, 0x06, 0x51, 0x53, 0x59, 0x61, 0x2a, 0x40, 0x44, 0x9a, 0x20, 0xdc, 0x02, 0x00, 0x60, 0x8e, 0x0a, 0x3b, - 0x0b, 0x41, 0x4e, 0xa1, 0x6b, 0x68, 0xfe, 0x00, 0x05, 0xc9, 0x00, 0x76, - 0x0d, 0x7a, 0x7f, 0x01, 0xff, 0xa5, 0x63, 0xa6, 0x46, 0x44, 0xb8, 0x27, + 0x0b, 0x41, 0x4e, 0xb6, 0x6b, 0x68, 0xfe, 0x00, 0x05, 0xc9, 0x00, 0x76, + 0x0d, 0x81, 0x7f, 0x01, 0xff, 0xa5, 0x63, 0xa6, 0x46, 0x44, 0xb8, 0x27, 0x78, 0x21, 0x00, 0x43, 0xcd, 0x09, 0x70, 0x21, 0x80, 0x2a, 0xb3, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x79, 0x21, 0x00, 0x44, 0x25, 0x01, 0x72, 0x21, 0x00, 0xb7, 0x01, 0xff, 0x44, 0xb8, 0x28, 0x7b, 0x21, 0x00, 0xef, 0x71, 0x21, 0x40, 0x44, 0x96, 0x1b, 0x76, 0x21, 0x00, 0x42, 0x30, 0x27, 0x75, 0x21, 0x40, 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x7d, 0x21, - 0x00, 0x48, 0x54, 0x58, 0x7f, 0x21, 0x40, 0xa9, 0x06, 0x43, 0xfb, 0x05, - 0x73, 0x21, 0x40, 0x43, 0xcf, 0x47, 0x7c, 0x21, 0x00, 0x42, 0x32, 0x00, + 0x00, 0x48, 0x69, 0x58, 0x7f, 0x21, 0x40, 0xa9, 0x06, 0x43, 0xfb, 0x05, + 0x73, 0x21, 0x40, 0x43, 0xe4, 0x47, 0x7c, 0x21, 0x00, 0x42, 0x32, 0x00, 0x74, 0x21, 0xc0, 0x00, 0x48, 0xe8, 0x0f, 0x7e, 0x21, 0x40, 0x44, 0xc9, - 0x00, 0x77, 0x21, 0x00, 0x45, 0xdf, 0x68, 0x7a, 0x21, 0x40, 0x4d, 0x88, + 0x00, 0x77, 0x21, 0x00, 0x45, 0xf4, 0x68, 0x7a, 0x21, 0x40, 0x4d, 0x88, 0x08, 0x5c, 0xfe, 0x00, 0x4b, 0x70, 0x1f, 0x5a, 0xfe, 0x00, 0x56, 0x36, - 0x08, 0x5e, 0xfe, 0x40, 0x4b, 0xc5, 0x93, 0x6a, 0xfe, 0x00, 0x48, 0x1a, - 0x6b, 0x62, 0xfe, 0x40, 0x03, 0xc5, 0x00, 0x06, 0x4c, 0xa8, 0x8d, 0x64, + 0x08, 0x5e, 0xfe, 0x40, 0x4b, 0xd8, 0x93, 0x6a, 0xfe, 0x00, 0x48, 0x2f, + 0x6b, 0x62, 0xfe, 0x40, 0x03, 0xc5, 0x00, 0x06, 0x4c, 0xbb, 0x8d, 0x64, 0xfe, 0x40, 0x4d, 0x88, 0x08, 0x5b, 0xfe, 0x00, 0x4b, 0x70, 0x1f, 0x59, - 0xfe, 0x00, 0x56, 0x36, 0x08, 0x5d, 0xfe, 0x40, 0x49, 0xb7, 0x8a, 0x0a, - 0x22, 0x80, 0x12, 0x46, 0x17, 0xb9, 0x58, 0xfe, 0x00, 0x4a, 0xa3, 0x11, + 0xfe, 0x00, 0x56, 0x36, 0x08, 0x5d, 0xfe, 0x40, 0x49, 0xbe, 0x8a, 0x0a, + 0x22, 0x80, 0x12, 0x46, 0x33, 0xb9, 0x58, 0xfe, 0x00, 0x4a, 0xa3, 0x11, 0x66, 0xfe, 0x00, 0x4f, 0xae, 0x00, 0x57, 0xfe, 0x40, 0x06, 0x50, 0x00, - 0x01, 0xff, 0x47, 0xf3, 0x78, 0xf7, 0x22, 0x00, 0x68, 0x35, 0x04, 0xf4, + 0x01, 0xff, 0x47, 0xfa, 0x78, 0xf7, 0x22, 0x00, 0x68, 0x35, 0x04, 0xf4, 0x22, 0x40, 0x43, 0xac, 0x10, 0x55, 0xfe, 0x00, 0x02, 0x1a, 0x04, 0x1c, - 0x07, 0x2a, 0x63, 0x01, 0xff, 0x49, 0x4d, 0xad, 0x0d, 0x22, 0x00, 0x05, - 0x51, 0x00, 0x01, 0xff, 0x47, 0xf3, 0x78, 0xfe, 0x22, 0x00, 0x68, 0x35, - 0x04, 0xfc, 0x22, 0x40, 0xe1, 0x50, 0xfe, 0x00, 0x49, 0x45, 0xaf, 0x6b, - 0xfe, 0x40, 0x47, 0x29, 0x30, 0xe9, 0xf6, 0x01, 0x48, 0x94, 0x39, 0x60, + 0x07, 0x3f, 0x63, 0x01, 0xff, 0x49, 0x60, 0xad, 0x0d, 0x22, 0x00, 0x05, + 0x51, 0x00, 0x01, 0xff, 0x47, 0xfa, 0x78, 0xfe, 0x22, 0x00, 0x68, 0x35, + 0x04, 0xfc, 0x22, 0x40, 0xe1, 0x50, 0xfe, 0x00, 0x49, 0x61, 0xaf, 0x6b, + 0xfe, 0x40, 0x47, 0x29, 0x30, 0xe9, 0xf6, 0x01, 0x48, 0xa9, 0x39, 0x60, 0xfe, 0x00, 0x47, 0x95, 0x0b, 0x61, 0xfe, 0x40, 0xa1, 0x6c, 0xa5, 0x40, - 0xa9, 0x27, 0xaf, 0x01, 0xff, 0xb0, 0x0d, 0xb4, 0x01, 0xff, 0x48, 0x0f, + 0xa9, 0x27, 0xaf, 0x01, 0xff, 0xb0, 0x0d, 0xb4, 0x01, 0xff, 0x48, 0x24, 0x43, 0xb0, 0xf3, 0x01, 0xe8, 0xa5, 0xf9, 0x41, 0xe5, 0x33, 0x23, 0x00, - 0x0a, 0x45, 0xa3, 0x01, 0xff, 0x43, 0x1a, 0x00, 0x58, 0x2a, 0x00, 0x42, - 0x0c, 0x00, 0x57, 0x2a, 0x40, 0x4b, 0xf7, 0x91, 0x55, 0xf3, 0x01, 0x06, - 0xc2, 0x72, 0x01, 0xff, 0x4d, 0x06, 0x7c, 0x41, 0xf6, 0x01, 0x4c, 0x9c, + 0x0a, 0x58, 0xa3, 0x01, 0xff, 0x43, 0x1a, 0x00, 0x58, 0x2a, 0x00, 0x42, + 0x0c, 0x00, 0x57, 0x2a, 0x40, 0x4b, 0x0a, 0x92, 0x55, 0xf3, 0x01, 0x06, + 0xd7, 0x72, 0x01, 0xff, 0x4d, 0x0d, 0x7c, 0x41, 0xf6, 0x01, 0x4c, 0xaf, 0x8d, 0x42, 0xf6, 0x41, 0xe4, 0xf7, 0xf6, 0x01, 0x02, 0xaa, 0x09, 0x06, - 0x4a, 0x39, 0xaa, 0x75, 0xf5, 0x41, 0x04, 0xa1, 0x01, 0x06, 0x46, 0x40, - 0xcb, 0x2a, 0xf6, 0x41, 0x4d, 0x48, 0x79, 0xcc, 0xf6, 0x01, 0x44, 0xed, + 0x4a, 0x4c, 0xaa, 0x75, 0xf5, 0x41, 0x04, 0xa1, 0x01, 0x06, 0x46, 0x5c, + 0xcb, 0x2a, 0xf6, 0x41, 0x4d, 0x4f, 0x79, 0xcc, 0xf6, 0x01, 0x44, 0xed, 0x06, 0x34, 0xf6, 0x01, 0x46, 0xf7, 0x06, 0xa4, 0xf4, 0x41, 0x05, 0x76, - 0x00, 0x06, 0x4e, 0x9e, 0x77, 0x73, 0xa6, 0x40, 0x0c, 0x87, 0x25, 0x11, - 0x13, 0x35, 0x46, 0x01, 0xff, 0x49, 0x8f, 0xb3, 0x5a, 0x2b, 0x00, 0x4d, - 0x7e, 0x80, 0x5c, 0x2b, 0x40, 0x4c, 0x87, 0x00, 0x96, 0x2a, 0x80, 0x0d, - 0x49, 0xec, 0x00, 0x95, 0x2a, 0xc0, 0x00, 0x50, 0xa9, 0x5a, 0x97, 0x2a, - 0x40, 0x50, 0xa9, 0x5a, 0x98, 0x2a, 0x40, 0x48, 0x15, 0xba, 0xf9, 0xf6, + 0x00, 0x06, 0x4e, 0xa5, 0x77, 0x73, 0xa6, 0x40, 0x0c, 0x87, 0x25, 0x11, + 0x13, 0x4a, 0x46, 0x01, 0xff, 0x49, 0xab, 0xb3, 0x5a, 0x2b, 0x00, 0x4d, + 0x85, 0x80, 0x5c, 0x2b, 0x40, 0x4c, 0x87, 0x00, 0x96, 0x2a, 0x80, 0x0d, + 0x49, 0xec, 0x00, 0x95, 0x2a, 0xc0, 0x00, 0x50, 0xbe, 0x5a, 0x97, 0x2a, + 0x40, 0x50, 0xbe, 0x5a, 0x98, 0x2a, 0x40, 0x48, 0x31, 0xba, 0xf9, 0xf6, 0x01, 0xa9, 0x16, 0xb5, 0x01, 0xff, 0x42, 0x3f, 0x06, 0x80, 0xf4, 0x81, - 0x06, 0x42, 0xfe, 0x22, 0xa8, 0xf9, 0x41, 0x4f, 0x2f, 0x45, 0x20, 0x26, - 0x40, 0x4d, 0x2a, 0x78, 0xbf, 0xf3, 0x01, 0x42, 0x33, 0x00, 0xf7, 0x26, - 0x40, 0xa4, 0xbc, 0x31, 0x02, 0xdd, 0x02, 0xf0, 0x07, 0x51, 0x0e, 0x56, - 0xfe, 0xf5, 0x01, 0x06, 0xc7, 0xc7, 0xbe, 0x07, 0xae, 0x30, 0xb8, 0x01, - 0xff, 0x02, 0x9b, 0x01, 0x0c, 0x4d, 0x3b, 0x79, 0x06, 0x20, 0x00, 0x55, - 0xcf, 0x39, 0x3a, 0x27, 0x40, 0x60, 0xec, 0x0d, 0x3e, 0x27, 0x00, 0x07, + 0x06, 0x42, 0xfe, 0x22, 0xa8, 0xf9, 0x41, 0x4f, 0x44, 0x45, 0x20, 0x26, + 0x40, 0x4d, 0x31, 0x78, 0xbf, 0xf3, 0x01, 0x42, 0x33, 0x00, 0xf7, 0x26, + 0x40, 0xa4, 0xbc, 0x31, 0x02, 0xdd, 0x02, 0xf0, 0x07, 0x51, 0x23, 0x56, + 0xfe, 0xf5, 0x01, 0x06, 0xe3, 0xc7, 0xbe, 0x07, 0xae, 0x30, 0xb8, 0x01, + 0xff, 0x02, 0x9b, 0x01, 0x0c, 0x4d, 0x42, 0x79, 0x06, 0x20, 0x00, 0x55, + 0xe4, 0x39, 0x3a, 0x27, 0x40, 0x60, 0xec, 0x0d, 0x3e, 0x27, 0x00, 0x07, 0x15, 0x07, 0x01, 0xff, 0x4a, 0xc5, 0x28, 0x36, 0x27, 0x00, 0x4d, 0x82, - 0x11, 0xcd, 0xf7, 0x01, 0x54, 0xd0, 0x40, 0x2f, 0xf5, 0x41, 0x46, 0xbb, - 0xd0, 0x3f, 0x22, 0x00, 0x03, 0x06, 0x02, 0xc1, 0x06, 0x05, 0x1a, 0xdc, - 0x01, 0xff, 0x08, 0xa3, 0x79, 0xa4, 0x05, 0xac, 0xae, 0x01, 0x56, 0x56, - 0x32, 0xf4, 0x0d, 0x00, 0x05, 0xdb, 0x02, 0x89, 0x01, 0x0b, 0x5b, 0x70, - 0x01, 0xff, 0x4a, 0x9c, 0x65, 0xcf, 0x0d, 0x00, 0x05, 0x97, 0x65, 0x52, - 0x02, 0x24, 0x02, 0x42, 0xab, 0x01, 0xff, 0x05, 0x7b, 0xaf, 0x29, 0x04, - 0x3e, 0xc8, 0x01, 0xff, 0x45, 0x0b, 0xd7, 0xdb, 0x0d, 0x00, 0x42, 0xb4, - 0x09, 0xd9, 0x0d, 0xc0, 0x00, 0x05, 0x1a, 0xd7, 0x01, 0xff, 0x4a, 0x9c, - 0x65, 0xdc, 0x0d, 0x00, 0x4f, 0x97, 0x65, 0xdd, 0x0d, 0x00, 0x4b, 0x28, - 0x94, 0xde, 0x0d, 0x40, 0x4a, 0xf9, 0x9e, 0xd0, 0x0d, 0x00, 0x48, 0x65, - 0xbd, 0xd2, 0x0d, 0x00, 0x49, 0x5e, 0xb4, 0xd4, 0x0d, 0x40, 0x4a, 0x8d, - 0xa1, 0xd8, 0x0d, 0x00, 0x49, 0x2a, 0x94, 0xdf, 0x0d, 0x40, 0x4a, 0xf9, - 0x9e, 0xd1, 0x0d, 0x00, 0x02, 0x24, 0x02, 0x12, 0x48, 0x65, 0xbd, 0xd3, - 0x0d, 0x00, 0x47, 0x3d, 0xc8, 0xda, 0x0d, 0x00, 0x49, 0x5e, 0xb4, 0xd6, - 0x0d, 0x40, 0x4a, 0x8d, 0xa1, 0xf2, 0x0d, 0x00, 0x49, 0x2a, 0x94, 0xf3, - 0x0d, 0x40, 0xa1, 0x0c, 0x4b, 0x3b, 0x21, 0x81, 0x0d, 0x00, 0x49, 0x6d, - 0xb7, 0x83, 0x0d, 0x40, 0x48, 0xad, 0xbd, 0xca, 0x0d, 0x00, 0x49, 0x62, - 0xb3, 0x82, 0x0d, 0x40, 0x06, 0xf2, 0x04, 0x47, 0x0a, 0x8b, 0xa3, 0x01, + 0x11, 0xcd, 0xf7, 0x01, 0x54, 0xe5, 0x40, 0x2f, 0xf5, 0x41, 0x46, 0xd7, + 0xd0, 0x3f, 0x22, 0x00, 0x03, 0x06, 0x02, 0xc1, 0x06, 0x05, 0x36, 0xdc, + 0x01, 0xff, 0x08, 0xaa, 0x79, 0xa4, 0x05, 0xac, 0xae, 0x01, 0x56, 0x56, + 0x32, 0xf4, 0x0d, 0x00, 0x05, 0xdb, 0x02, 0x89, 0x01, 0x0b, 0x70, 0x70, + 0x01, 0xff, 0x4a, 0xb1, 0x65, 0xcf, 0x0d, 0x00, 0x05, 0xac, 0x65, 0x52, + 0x02, 0x24, 0x02, 0x42, 0xab, 0x01, 0xff, 0x05, 0x97, 0xaf, 0x29, 0x04, + 0x5a, 0xc8, 0x01, 0xff, 0x45, 0x27, 0xd7, 0xdb, 0x0d, 0x00, 0x42, 0xb4, + 0x09, 0xd9, 0x0d, 0xc0, 0x00, 0x05, 0x36, 0xd7, 0x01, 0xff, 0x4a, 0xb1, + 0x65, 0xdc, 0x0d, 0x00, 0x4f, 0xac, 0x65, 0xdd, 0x0d, 0x00, 0x4b, 0x3b, + 0x94, 0xde, 0x0d, 0x40, 0x4a, 0x0c, 0x9f, 0xd0, 0x0d, 0x00, 0x48, 0x81, + 0xbd, 0xd2, 0x0d, 0x00, 0x49, 0x7a, 0xb4, 0xd4, 0x0d, 0x40, 0x4a, 0xa0, + 0xa1, 0xd8, 0x0d, 0x00, 0x49, 0x3d, 0x94, 0xdf, 0x0d, 0x40, 0x4a, 0x0c, + 0x9f, 0xd1, 0x0d, 0x00, 0x02, 0x24, 0x02, 0x12, 0x48, 0x81, 0xbd, 0xd3, + 0x0d, 0x00, 0x47, 0x59, 0xc8, 0xda, 0x0d, 0x00, 0x49, 0x7a, 0xb4, 0xd6, + 0x0d, 0x40, 0x4a, 0xa0, 0xa1, 0xf2, 0x0d, 0x00, 0x49, 0x3d, 0x94, 0xf3, + 0x0d, 0x40, 0xa1, 0x0c, 0x4b, 0x3b, 0x21, 0x81, 0x0d, 0x00, 0x49, 0x89, + 0xb7, 0x83, 0x0d, 0x40, 0x48, 0xc9, 0xbd, 0xca, 0x0d, 0x00, 0x49, 0x7e, + 0xb3, 0x82, 0x0d, 0x40, 0x06, 0xf2, 0x04, 0x47, 0x0a, 0x9e, 0xa3, 0x01, 0xff, 0x45, 0xd1, 0x09, 0xee, 0x0d, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0xef, 0x0d, 0x00, 0x43, 0xcd, 0x09, 0xe7, 0x0d, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xe6, 0x0d, 0x40, 0x44, 0x25, 0x01, 0xe9, 0x0d, 0x00, 0x42, 0x15, 0x02, 0xe8, 0x0d, 0x40, 0x44, 0x96, 0x1b, 0xed, 0x0d, 0x00, 0x42, 0x30, 0x27, 0xec, 0x0d, 0x40, 0x43, 0xd7, 0x04, 0xeb, 0x0d, - 0x00, 0x43, 0xfb, 0x05, 0xea, 0x0d, 0x40, 0xa1, 0xb4, 0x02, 0x08, 0x55, - 0xbb, 0x9d, 0x02, 0xa5, 0x8e, 0x02, 0x47, 0xed, 0xc6, 0xc6, 0x0d, 0x00, - 0x47, 0x4f, 0xc7, 0xc4, 0x0d, 0x00, 0xa9, 0xd3, 0x01, 0x52, 0x7b, 0x4d, - 0x9e, 0x0d, 0x00, 0xad, 0x67, 0xaf, 0x59, 0x47, 0xdd, 0xca, 0xbb, 0x0d, - 0x00, 0x08, 0xb5, 0xc0, 0x35, 0x08, 0x4d, 0xc1, 0x1a, 0xb5, 0x0c, 0x47, - 0xf1, 0xcc, 0xc0, 0x0d, 0x00, 0x47, 0x92, 0xcd, 0xba, 0x0d, 0x40, 0x46, - 0x73, 0xd6, 0x8c, 0x0d, 0x00, 0x45, 0x0b, 0x63, 0x8b, 0x0d, 0x40, 0x4a, - 0x83, 0x4d, 0xa4, 0x0d, 0x00, 0x02, 0x45, 0x05, 0x01, 0xff, 0x52, 0x65, - 0x4e, 0xa5, 0x0d, 0x00, 0x45, 0x0b, 0x63, 0xc1, 0x0d, 0x40, 0xa4, 0x0c, - 0x47, 0x10, 0xc7, 0x9f, 0x0d, 0x00, 0x47, 0xfe, 0xc7, 0xa6, 0x0d, 0x40, - 0x46, 0x24, 0x97, 0xb3, 0x0d, 0x00, 0x47, 0x29, 0xc6, 0xac, 0x0d, 0x40, - 0x46, 0x0a, 0x63, 0x95, 0x0d, 0x00, 0x45, 0x0b, 0x63, 0x94, 0x0d, 0x40, - 0xa1, 0x17, 0x09, 0x13, 0xb7, 0x01, 0xff, 0x47, 0x8a, 0xc8, 0xc5, 0x0d, - 0x00, 0x47, 0x32, 0xc9, 0xab, 0x0d, 0x00, 0x47, 0x69, 0xcb, 0xc2, 0x0d, - 0x40, 0x0a, 0x73, 0xa2, 0x06, 0x45, 0x0b, 0x63, 0xb8, 0x0d, 0x40, 0x47, - 0x23, 0x97, 0xb7, 0x0d, 0x00, 0x47, 0xa4, 0xc5, 0xa1, 0x0d, 0x00, 0xa4, - 0x27, 0x47, 0x10, 0xc7, 0x9d, 0x0d, 0x00, 0x47, 0xfe, 0xc7, 0xa3, 0x0d, - 0x00, 0x47, 0x21, 0xc8, 0x9b, 0x0d, 0x00, 0x47, 0x3c, 0xca, 0xb5, 0x0d, - 0x00, 0xb4, 0x01, 0xff, 0x46, 0x24, 0x97, 0xae, 0x0d, 0x00, 0x47, 0x03, - 0xcc, 0xa8, 0x0d, 0x40, 0x46, 0x24, 0x97, 0xb0, 0x0d, 0x00, 0x47, 0x29, - 0xc6, 0xaa, 0x0d, 0x40, 0x46, 0xd7, 0xd2, 0x8a, 0x0d, 0x00, 0x02, 0xe6, - 0x13, 0x16, 0x02, 0x3d, 0x00, 0x06, 0x45, 0x0b, 0x63, 0x89, 0x0d, 0x40, - 0x46, 0x73, 0xd6, 0x8e, 0x0d, 0x00, 0x45, 0x0b, 0x63, 0x8d, 0x0d, 0x40, - 0x46, 0x73, 0xd6, 0x90, 0x0d, 0x00, 0x45, 0x0b, 0x63, 0x8f, 0x0d, 0x40, - 0x46, 0x45, 0xd1, 0x92, 0x0d, 0x00, 0x45, 0x0b, 0x63, 0x91, 0x0d, 0x40, - 0x47, 0x8a, 0xc8, 0xbd, 0x0d, 0x00, 0x47, 0x32, 0xc9, 0xb1, 0x0d, 0x00, - 0x47, 0x69, 0xcb, 0xc3, 0x0d, 0x40, 0x46, 0x24, 0x97, 0x86, 0x0d, 0x00, - 0xa5, 0x5d, 0x46, 0xd7, 0xd2, 0x93, 0x0d, 0x00, 0x0a, 0xcb, 0xa4, 0x12, - 0x4b, 0x1f, 0x97, 0xb9, 0x0d, 0x00, 0x46, 0x73, 0xd6, 0x96, 0x0d, 0x00, - 0x45, 0x0b, 0x63, 0x85, 0x0d, 0x40, 0x47, 0x23, 0x97, 0xb6, 0x0d, 0x00, - 0x47, 0xa4, 0xc5, 0xa0, 0x0d, 0x00, 0xa4, 0x27, 0x47, 0x10, 0xc7, 0x9c, - 0x0d, 0x00, 0x47, 0xfe, 0xc7, 0xa2, 0x0d, 0x00, 0x47, 0x21, 0xc8, 0x9a, - 0x0d, 0x00, 0x47, 0x3c, 0xca, 0xb4, 0x0d, 0x00, 0xb4, 0x01, 0xff, 0x46, - 0x24, 0x97, 0xad, 0x0d, 0x00, 0x47, 0x03, 0xcc, 0xa7, 0x0d, 0x40, 0x46, - 0x24, 0x97, 0xaf, 0x0d, 0x00, 0x47, 0x29, 0xc6, 0xa9, 0x0d, 0x40, 0x46, - 0x45, 0xd1, 0x88, 0x0d, 0x00, 0x45, 0x0b, 0x63, 0x87, 0x0d, 0x40, 0x06, - 0xf4, 0x05, 0x52, 0x07, 0xbf, 0x35, 0x01, 0xff, 0x46, 0xd9, 0xd0, 0xf1, + 0x00, 0x43, 0xfb, 0x05, 0xea, 0x0d, 0x40, 0xa1, 0xb4, 0x02, 0x08, 0x71, + 0xbb, 0x9d, 0x02, 0xa5, 0x8e, 0x02, 0x47, 0x09, 0xc7, 0xc6, 0x0d, 0x00, + 0x47, 0x6b, 0xc7, 0xc4, 0x0d, 0x00, 0xa9, 0xd3, 0x01, 0x52, 0x90, 0x4d, + 0x9e, 0x0d, 0x00, 0xad, 0x67, 0xaf, 0x59, 0x47, 0xf9, 0xca, 0xbb, 0x0d, + 0x00, 0x08, 0xd1, 0xc0, 0x35, 0x08, 0x69, 0xc1, 0x1a, 0xb5, 0x0c, 0x47, + 0x0d, 0xcd, 0xc0, 0x0d, 0x00, 0x47, 0xae, 0xcd, 0xba, 0x0d, 0x40, 0x46, + 0x8f, 0xd6, 0x8c, 0x0d, 0x00, 0x45, 0x20, 0x63, 0x8b, 0x0d, 0x40, 0x4a, + 0x98, 0x4d, 0xa4, 0x0d, 0x00, 0x02, 0x45, 0x05, 0x01, 0xff, 0x52, 0x7a, + 0x4e, 0xa5, 0x0d, 0x00, 0x45, 0x20, 0x63, 0xc1, 0x0d, 0x40, 0xa4, 0x0c, + 0x47, 0x2c, 0xc7, 0x9f, 0x0d, 0x00, 0x47, 0x1a, 0xc8, 0xa6, 0x0d, 0x40, + 0x46, 0x37, 0x97, 0xb3, 0x0d, 0x00, 0x47, 0x45, 0xc6, 0xac, 0x0d, 0x40, + 0x46, 0x1f, 0x63, 0x95, 0x0d, 0x00, 0x45, 0x20, 0x63, 0x94, 0x0d, 0x40, + 0xa1, 0x17, 0x09, 0x2f, 0xb7, 0x01, 0xff, 0x47, 0xa6, 0xc8, 0xc5, 0x0d, + 0x00, 0x47, 0x4e, 0xc9, 0xab, 0x0d, 0x00, 0x47, 0x85, 0xcb, 0xc2, 0x0d, + 0x40, 0x0a, 0x86, 0xa2, 0x06, 0x45, 0x20, 0x63, 0xb8, 0x0d, 0x40, 0x47, + 0x36, 0x97, 0xb7, 0x0d, 0x00, 0x47, 0xc0, 0xc5, 0xa1, 0x0d, 0x00, 0xa4, + 0x27, 0x47, 0x2c, 0xc7, 0x9d, 0x0d, 0x00, 0x47, 0x1a, 0xc8, 0xa3, 0x0d, + 0x00, 0x47, 0x3d, 0xc8, 0x9b, 0x0d, 0x00, 0x47, 0x58, 0xca, 0xb5, 0x0d, + 0x00, 0xb4, 0x01, 0xff, 0x46, 0x37, 0x97, 0xae, 0x0d, 0x00, 0x47, 0x1f, + 0xcc, 0xa8, 0x0d, 0x40, 0x46, 0x37, 0x97, 0xb0, 0x0d, 0x00, 0x47, 0x45, + 0xc6, 0xaa, 0x0d, 0x40, 0x46, 0xf3, 0xd2, 0x8a, 0x0d, 0x00, 0x02, 0xe6, + 0x13, 0x16, 0x02, 0x3d, 0x00, 0x06, 0x45, 0x20, 0x63, 0x89, 0x0d, 0x40, + 0x46, 0x8f, 0xd6, 0x8e, 0x0d, 0x00, 0x45, 0x20, 0x63, 0x8d, 0x0d, 0x40, + 0x46, 0x8f, 0xd6, 0x90, 0x0d, 0x00, 0x45, 0x20, 0x63, 0x8f, 0x0d, 0x40, + 0x46, 0x61, 0xd1, 0x92, 0x0d, 0x00, 0x45, 0x20, 0x63, 0x91, 0x0d, 0x40, + 0x47, 0xa6, 0xc8, 0xbd, 0x0d, 0x00, 0x47, 0x4e, 0xc9, 0xb1, 0x0d, 0x00, + 0x47, 0x85, 0xcb, 0xc3, 0x0d, 0x40, 0x46, 0x37, 0x97, 0x86, 0x0d, 0x00, + 0xa5, 0x5d, 0x46, 0xf3, 0xd2, 0x93, 0x0d, 0x00, 0x0a, 0xde, 0xa4, 0x12, + 0x4b, 0x32, 0x97, 0xb9, 0x0d, 0x00, 0x46, 0x8f, 0xd6, 0x96, 0x0d, 0x00, + 0x45, 0x20, 0x63, 0x85, 0x0d, 0x40, 0x47, 0x36, 0x97, 0xb6, 0x0d, 0x00, + 0x47, 0xc0, 0xc5, 0xa0, 0x0d, 0x00, 0xa4, 0x27, 0x47, 0x2c, 0xc7, 0x9c, + 0x0d, 0x00, 0x47, 0x1a, 0xc8, 0xa2, 0x0d, 0x00, 0x47, 0x3d, 0xc8, 0x9a, + 0x0d, 0x00, 0x47, 0x58, 0xca, 0xb4, 0x0d, 0x00, 0xb4, 0x01, 0xff, 0x46, + 0x37, 0x97, 0xad, 0x0d, 0x00, 0x47, 0x1f, 0xcc, 0xa7, 0x0d, 0x40, 0x46, + 0x37, 0x97, 0xaf, 0x0d, 0x00, 0x47, 0x45, 0xc6, 0xa9, 0x0d, 0x40, 0x46, + 0x61, 0xd1, 0x88, 0x0d, 0x00, 0x45, 0x20, 0x63, 0x87, 0x0d, 0x40, 0x06, + 0xf4, 0x05, 0x52, 0x07, 0xbf, 0x35, 0x01, 0xff, 0x46, 0xf5, 0xd0, 0xf1, 0x11, 0x01, 0xa6, 0x39, 0x46, 0x65, 0x29, 0xf2, 0x11, 0x01, 0x04, 0xcd, 0x09, 0x23, 0xb3, 0x15, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xea, 0x11, 0x01, 0x45, 0xf2, 0x0f, 0xec, 0x11, 0x01, 0x45, 0x38, 0x29, 0xeb, 0x11, - 0x41, 0x46, 0x96, 0x1b, 0xf0, 0x11, 0x01, 0x44, 0xd1, 0xd2, 0xef, 0x11, - 0x41, 0x47, 0xe9, 0x0f, 0xf3, 0x11, 0x01, 0x48, 0x54, 0x58, 0xf4, 0x11, - 0x41, 0x44, 0xce, 0x47, 0xee, 0x11, 0x01, 0x44, 0x38, 0x4c, 0xed, 0x11, + 0x41, 0x46, 0x96, 0x1b, 0xf0, 0x11, 0x01, 0x44, 0xed, 0xd2, 0xef, 0x11, + 0x41, 0x47, 0xe9, 0x0f, 0xf3, 0x11, 0x01, 0x48, 0x69, 0x58, 0xf4, 0x11, + 0x41, 0x44, 0xe3, 0x47, 0xee, 0x11, 0x01, 0x44, 0x4d, 0x4c, 0xed, 0x11, 0x41, 0x45, 0xd1, 0x09, 0xe8, 0x11, 0x01, 0xa6, 0x29, 0x44, 0xb8, 0x27, 0xe9, 0x11, 0x01, 0x43, 0xcd, 0x09, 0xe1, 0x11, 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xe3, 0x11, 0x01, 0x42, 0x15, 0x02, 0xe2, 0x11, 0x41, 0x44, 0x96, 0x1b, 0xe7, 0x11, 0x01, 0x42, 0x30, 0x27, 0xe6, 0x11, 0x41, 0x43, 0xd7, 0x04, 0xe5, 0x11, 0x01, 0x43, 0xfb, 0x05, 0xe4, - 0x11, 0x41, 0x80, 0x0d, 0x07, 0xb3, 0xc3, 0x01, 0xff, 0xd2, 0x8e, 0x00, - 0x00, 0xd3, 0x8f, 0x00, 0x40, 0x54, 0x34, 0x3c, 0x9a, 0x00, 0x00, 0x5e, + 0x11, 0x41, 0x80, 0x0d, 0x07, 0xcf, 0xc3, 0x01, 0xff, 0xd2, 0x8e, 0x00, + 0x00, 0xd3, 0x8f, 0x00, 0x40, 0x54, 0x49, 0x3c, 0x9a, 0x00, 0x00, 0x5e, 0xad, 0x11, 0x1b, 0x20, 0x00, 0xac, 0x17, 0x63, 0x46, 0x0a, 0x3a, 0x20, - 0x00, 0x07, 0x93, 0xcb, 0x01, 0xff, 0x44, 0x25, 0x01, 0x8f, 0x00, 0x00, + 0x00, 0x07, 0xaf, 0xcb, 0x01, 0xff, 0x44, 0x25, 0x01, 0x8f, 0x00, 0x00, 0x42, 0x15, 0x02, 0x8e, 0x00, 0x40, 0x61, 0x42, 0x0c, 0x39, 0x20, 0x00, - 0x53, 0x81, 0x46, 0x1a, 0x20, 0x40, 0x06, 0x5c, 0x00, 0x17, 0x4d, 0xb7, + 0x53, 0x96, 0x46, 0x1a, 0x20, 0x40, 0x06, 0x5c, 0x00, 0x17, 0x4d, 0xbe, 0x7e, 0x6c, 0x2a, 0x00, 0x03, 0x79, 0x08, 0x01, 0xff, 0x4c, 0x87, 0x00, 0x9e, 0x2a, 0x00, 0x49, 0xec, 0x00, 0x9d, 0x2a, 0x40, 0x5e, 0x8f, 0x11, - 0xa0, 0x2a, 0x00, 0x5b, 0x2a, 0x1a, 0x9f, 0x2a, 0x40, 0x4d, 0x9f, 0x78, - 0x18, 0xf9, 0x01, 0x08, 0x85, 0xc2, 0x01, 0xff, 0x04, 0xca, 0x85, 0x96, + 0xa0, 0x2a, 0x00, 0x5b, 0x2a, 0x1a, 0x9f, 0x2a, 0x40, 0x4d, 0xa6, 0x78, + 0x18, 0xf9, 0x01, 0x08, 0xa1, 0xc2, 0x01, 0xff, 0x04, 0xd1, 0x85, 0x96, 0x29, 0x02, 0x45, 0x08, 0xea, 0x28, 0xa3, 0xc2, 0x28, 0xa4, 0xd7, 0x27, - 0xa5, 0xf8, 0x25, 0xa6, 0xec, 0x24, 0x06, 0xc9, 0xd1, 0xd5, 0x24, 0xa8, + 0xa5, 0xf8, 0x25, 0xa6, 0xec, 0x24, 0x06, 0xe5, 0xd1, 0xd5, 0x24, 0xa8, 0xc7, 0x14, 0xac, 0xc2, 0x13, 0x02, 0x08, 0x07, 0x8c, 0x06, 0xae, 0xe3, 0x05, 0x4b, 0x70, 0x1f, 0x8b, 0xda, 0x01, 0xb2, 0xdf, 0x03, 0xb3, 0xe1, 0x02, 0xb4, 0x0c, 0x62, 0x9c, 0x0b, 0x75, 0xda, 0x01, 0x5b, 0xbf, 0x1b, - 0x6f, 0xda, 0x41, 0xa5, 0x84, 0x02, 0xaf, 0x92, 0x01, 0x06, 0xdb, 0xd4, - 0x01, 0xff, 0x0b, 0xe8, 0x43, 0x52, 0x0a, 0xbf, 0x1b, 0x01, 0xff, 0x0b, - 0x26, 0x91, 0x37, 0x09, 0x51, 0xb5, 0x06, 0x47, 0x8c, 0xcb, 0x51, 0xd9, - 0x41, 0x0b, 0xe8, 0x43, 0x17, 0x0a, 0xbf, 0x1b, 0x01, 0xff, 0x4b, 0x6b, + 0x6f, 0xda, 0x41, 0xa5, 0x84, 0x02, 0xaf, 0x92, 0x01, 0x06, 0xf7, 0xd4, + 0x01, 0xff, 0x0b, 0xfd, 0x43, 0x52, 0x0a, 0xbf, 0x1b, 0x01, 0xff, 0x0b, + 0x39, 0x91, 0x37, 0x09, 0x6d, 0xb5, 0x06, 0x47, 0xa8, 0xcb, 0x51, 0xd9, + 0x41, 0x0b, 0xfd, 0x43, 0x17, 0x0a, 0xbf, 0x1b, 0x01, 0xff, 0x4b, 0x80, 0x54, 0x4d, 0xd9, 0x01, 0x46, 0x3b, 0x01, 0x4c, 0xd9, 0x01, 0x46, 0xe5, - 0x08, 0x4b, 0xd9, 0x41, 0x4b, 0x6b, 0x54, 0x50, 0xd9, 0x01, 0x46, 0x3b, + 0x08, 0x4b, 0xd9, 0x41, 0x4b, 0x80, 0x54, 0x50, 0xd9, 0x01, 0x46, 0x3b, 0x01, 0x4f, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0x4e, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0x53, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0x52, 0xd9, 0x01, 0x46, 0x37, - 0x1b, 0x54, 0xd9, 0x41, 0x09, 0x51, 0xb5, 0x06, 0x47, 0x8c, 0xcb, 0x87, - 0xd9, 0x41, 0x0b, 0xe8, 0x43, 0x17, 0x0a, 0xbf, 0x1b, 0x01, 0xff, 0x4b, - 0x6b, 0x54, 0x86, 0xd9, 0x01, 0x46, 0x3b, 0x01, 0x85, 0xd9, 0x01, 0x46, - 0xe5, 0x08, 0x84, 0xd9, 0x41, 0x4b, 0x6b, 0x54, 0x83, 0xd9, 0x01, 0x46, + 0x1b, 0x54, 0xd9, 0x41, 0x09, 0x6d, 0xb5, 0x06, 0x47, 0xa8, 0xcb, 0x87, + 0xd9, 0x41, 0x0b, 0xfd, 0x43, 0x17, 0x0a, 0xbf, 0x1b, 0x01, 0xff, 0x4b, + 0x80, 0x54, 0x86, 0xd9, 0x01, 0x46, 0x3b, 0x01, 0x85, 0xd9, 0x01, 0x46, + 0xe5, 0x08, 0x84, 0xd9, 0x41, 0x4b, 0x80, 0x54, 0x83, 0xd9, 0x01, 0x46, 0x3b, 0x01, 0x82, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0x81, 0xd9, 0x41, 0x05, - 0x45, 0xde, 0x32, 0x04, 0x46, 0xe7, 0x17, 0x04, 0x05, 0xde, 0x01, 0xff, - 0x47, 0xc6, 0x08, 0x07, 0xd9, 0x01, 0x48, 0x68, 0x3f, 0x06, 0xd9, 0x01, - 0x46, 0xe5, 0x08, 0x05, 0xd9, 0x41, 0x53, 0xe8, 0x43, 0x74, 0xda, 0x01, - 0x0a, 0xbf, 0x1b, 0x01, 0xff, 0x4b, 0xa7, 0x92, 0x73, 0xda, 0x01, 0x50, - 0x29, 0x61, 0x72, 0xda, 0x41, 0x07, 0x73, 0x02, 0x29, 0x54, 0x78, 0x3e, - 0x5d, 0xda, 0x01, 0x4c, 0x94, 0x89, 0x5a, 0xda, 0x01, 0x53, 0xb0, 0x45, - 0x5e, 0xda, 0x01, 0x50, 0x19, 0x61, 0x59, 0xda, 0x01, 0x04, 0xc3, 0x0a, - 0x01, 0xff, 0x4c, 0x2c, 0x85, 0x5b, 0xda, 0x01, 0x55, 0x0e, 0x3a, 0x5c, - 0xda, 0x41, 0x4c, 0x17, 0x3a, 0x60, 0xda, 0x01, 0x4c, 0x19, 0x61, 0x5f, - 0xda, 0x41, 0x43, 0x25, 0x23, 0x61, 0xda, 0x81, 0x17, 0x0b, 0xfb, 0x97, + 0x61, 0xde, 0x32, 0x04, 0x62, 0xe7, 0x17, 0x04, 0x21, 0xde, 0x01, 0xff, + 0x47, 0xc6, 0x08, 0x07, 0xd9, 0x01, 0x48, 0x7d, 0x3f, 0x06, 0xd9, 0x01, + 0x46, 0xe5, 0x08, 0x05, 0xd9, 0x41, 0x53, 0xfd, 0x43, 0x74, 0xda, 0x01, + 0x0a, 0xbf, 0x1b, 0x01, 0xff, 0x4b, 0xba, 0x92, 0x73, 0xda, 0x01, 0x50, + 0x3e, 0x61, 0x72, 0xda, 0x41, 0x07, 0x73, 0x02, 0x29, 0x54, 0x8d, 0x3e, + 0x5d, 0xda, 0x01, 0x4c, 0x9b, 0x89, 0x5a, 0xda, 0x01, 0x53, 0xc5, 0x45, + 0x5e, 0xda, 0x01, 0x50, 0x2e, 0x61, 0x59, 0xda, 0x01, 0x04, 0xc3, 0x0a, + 0x01, 0xff, 0x4c, 0x33, 0x85, 0x5b, 0xda, 0x01, 0x55, 0x23, 0x3a, 0x5c, + 0xda, 0x41, 0x4c, 0x2c, 0x3a, 0x60, 0xda, 0x01, 0x4c, 0x2e, 0x61, 0x5f, + 0xda, 0x41, 0x43, 0x25, 0x23, 0x61, 0xda, 0x81, 0x17, 0x0b, 0x0e, 0x98, 0x01, 0xff, 0x44, 0x2a, 0x0a, 0x2d, 0xda, 0x01, 0x43, 0x13, 0x01, 0x2f, 0xda, 0x01, 0x46, 0x7d, 0x02, 0x2e, 0xda, 0x41, 0x80, 0x01, 0xff, 0x49, - 0xa7, 0xad, 0x67, 0xda, 0x01, 0x48, 0x26, 0x58, 0x62, 0xda, 0x01, 0x03, + 0xba, 0xad, 0x67, 0xda, 0x01, 0x48, 0x3b, 0x58, 0x62, 0xda, 0x01, 0x03, 0xb6, 0x00, 0x01, 0xff, 0x44, 0x4e, 0x19, 0x65, 0xda, 0x81, 0x0d, 0x46, - 0x53, 0x61, 0x63, 0xda, 0xc1, 0x00, 0x49, 0x25, 0x58, 0x64, 0xda, 0x41, - 0x49, 0x25, 0x58, 0x66, 0xda, 0x41, 0x48, 0x32, 0x54, 0x89, 0xda, 0x01, - 0x08, 0xca, 0x1b, 0x5b, 0x07, 0xb3, 0xca, 0x27, 0x06, 0x19, 0xd6, 0x11, - 0x07, 0xb9, 0xcc, 0x01, 0xff, 0x47, 0xc6, 0x08, 0x15, 0xd9, 0x01, 0x47, + 0x68, 0x61, 0x63, 0xda, 0xc1, 0x00, 0x49, 0x3a, 0x58, 0x64, 0xda, 0x41, + 0x49, 0x3a, 0x58, 0x66, 0xda, 0x41, 0x48, 0x47, 0x54, 0x89, 0xda, 0x01, + 0x08, 0xca, 0x1b, 0x5b, 0x07, 0xcf, 0xca, 0x27, 0x06, 0x35, 0xd6, 0x11, + 0x07, 0xd5, 0xcc, 0x01, 0xff, 0x47, 0xc6, 0x08, 0x15, 0xd9, 0x01, 0x47, 0xf7, 0x06, 0x14, 0xd9, 0x41, 0x47, 0xc6, 0x08, 0x0d, 0xd9, 0x01, 0x48, - 0x68, 0x3f, 0x0c, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0x0b, 0xd9, 0x41, 0x51, - 0x65, 0x54, 0x20, 0xd9, 0x01, 0x06, 0x0f, 0x1a, 0x1a, 0xb3, 0x01, 0xff, - 0x49, 0xca, 0x65, 0x1a, 0xd9, 0x01, 0x05, 0x3d, 0x06, 0x01, 0xff, 0x48, - 0x68, 0x3f, 0x19, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0x17, 0xd9, 0x41, 0x48, - 0x68, 0x3f, 0x18, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0x16, 0xd9, 0x41, 0x04, - 0xb4, 0x0b, 0x06, 0x52, 0xf1, 0x4f, 0x71, 0xda, 0x41, 0x49, 0x9d, 0xb4, - 0x6e, 0xda, 0x01, 0x45, 0x2f, 0xe0, 0x6d, 0xda, 0x41, 0x07, 0x20, 0x04, - 0x17, 0x03, 0xf3, 0x47, 0x01, 0xff, 0x47, 0xc6, 0x08, 0x13, 0xd9, 0x01, - 0x48, 0x68, 0x3f, 0x12, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0x11, 0xd9, 0x41, - 0x0a, 0xc6, 0x89, 0x9d, 0x01, 0x8d, 0x01, 0xff, 0x0b, 0xe8, 0x43, 0x4e, + 0x7d, 0x3f, 0x0c, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0x0b, 0xd9, 0x41, 0x51, + 0x7a, 0x54, 0x20, 0xd9, 0x01, 0x06, 0x0f, 0x1a, 0x1a, 0xb3, 0x01, 0xff, + 0x49, 0xdf, 0x65, 0x1a, 0xd9, 0x01, 0x05, 0x3d, 0x06, 0x01, 0xff, 0x48, + 0x7d, 0x3f, 0x19, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0x17, 0xd9, 0x41, 0x48, + 0x7d, 0x3f, 0x18, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0x16, 0xd9, 0x41, 0x04, + 0xb4, 0x0b, 0x06, 0x52, 0x06, 0x50, 0x71, 0xda, 0x41, 0x49, 0xb9, 0xb4, + 0x6e, 0xda, 0x01, 0x45, 0x4b, 0xe0, 0x6d, 0xda, 0x41, 0x07, 0x20, 0x04, + 0x17, 0x03, 0x08, 0x48, 0x01, 0xff, 0x47, 0xc6, 0x08, 0x13, 0xd9, 0x01, + 0x48, 0x7d, 0x3f, 0x12, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0x11, 0xd9, 0x41, + 0x0a, 0xcd, 0x89, 0x9d, 0x01, 0x8d, 0x01, 0xff, 0x0b, 0xfd, 0x43, 0x4e, 0x0a, 0xbf, 0x1b, 0x01, 0xff, 0x08, 0x69, 0x10, 0x30, 0x46, 0x3b, 0x01, 0xa3, 0xd9, 0x81, 0x18, 0x46, 0xe5, 0x08, 0xa2, 0xd9, 0xc1, 0x00, 0x09, - 0x65, 0x23, 0x01, 0xff, 0x45, 0x71, 0xda, 0xb1, 0xd9, 0x01, 0x4a, 0xe7, - 0xa1, 0xaa, 0xd9, 0x41, 0x09, 0x65, 0x23, 0x01, 0xff, 0x45, 0x71, 0xda, - 0xb2, 0xd9, 0x01, 0x4a, 0xe7, 0xa1, 0xab, 0xd9, 0x41, 0xe5, 0xa4, 0xd9, - 0x01, 0x0c, 0xa4, 0x88, 0x01, 0xff, 0x45, 0x71, 0xda, 0xb3, 0xd9, 0x01, - 0x4a, 0xe7, 0xa1, 0xac, 0xd9, 0x41, 0x4b, 0x6b, 0x54, 0xe1, 0xd9, 0x81, + 0x65, 0x23, 0x01, 0xff, 0x45, 0x8d, 0xda, 0xb1, 0xd9, 0x01, 0x4a, 0xfa, + 0xa1, 0xaa, 0xd9, 0x41, 0x09, 0x65, 0x23, 0x01, 0xff, 0x45, 0x8d, 0xda, + 0xb2, 0xd9, 0x01, 0x4a, 0xfa, 0xa1, 0xab, 0xd9, 0x41, 0xe5, 0xa4, 0xd9, + 0x01, 0x0c, 0xab, 0x88, 0x01, 0xff, 0x45, 0x8d, 0xda, 0xb3, 0xd9, 0x01, + 0x4a, 0xfa, 0xa1, 0xac, 0xd9, 0x41, 0x4b, 0x80, 0x54, 0xe1, 0xd9, 0x81, 0x30, 0x46, 0x3b, 0x01, 0xe0, 0xd9, 0x81, 0x18, 0x46, 0xe5, 0x08, 0xdf, - 0xd9, 0xc1, 0x00, 0x09, 0x65, 0x23, 0x01, 0xff, 0x47, 0xdd, 0xba, 0xc3, + 0xd9, 0xc1, 0x00, 0x09, 0x65, 0x23, 0x01, 0xff, 0x47, 0xf9, 0xba, 0xc3, 0xd9, 0x01, 0x45, 0xbc, 0x21, 0xd2, 0xd9, 0x41, 0x09, 0x65, 0x23, 0x01, - 0xff, 0x47, 0xdd, 0xba, 0xc4, 0xd9, 0x01, 0x45, 0xbc, 0x21, 0xd3, 0xd9, - 0x41, 0x09, 0x65, 0x23, 0x01, 0xff, 0x47, 0xdd, 0xba, 0xc5, 0xd9, 0x01, + 0xff, 0x47, 0xf9, 0xba, 0xc4, 0xd9, 0x01, 0x45, 0xbc, 0x21, 0xd3, 0xd9, + 0x41, 0x09, 0x65, 0x23, 0x01, 0xff, 0x47, 0xf9, 0xba, 0xc5, 0xd9, 0x01, 0x45, 0xbc, 0x21, 0xd4, 0xd9, 0x41, 0x91, 0x20, 0xd2, 0xa1, 0xda, 0x01, 0xd3, 0xa2, 0xda, 0x01, 0xd4, 0xa3, 0xda, 0x01, 0xd5, 0xa4, 0xda, 0x01, 0xd6, 0xa5, 0xda, 0x01, 0xd7, 0xa6, 0xda, 0x01, 0xd8, 0xa7, 0xda, 0x01, 0xd9, 0xa8, 0xda, 0x41, 0xd0, 0xa9, 0xda, 0x01, 0xd1, 0xaa, 0xda, 0x01, 0xd2, 0xab, 0xda, 0x01, 0xd3, 0xac, 0xda, 0x01, 0xd4, 0xad, 0xda, 0x01, - 0xd5, 0xae, 0xda, 0x01, 0xd6, 0xaf, 0xda, 0x41, 0x43, 0x68, 0x64, 0x6a, - 0xda, 0x01, 0x04, 0x35, 0x15, 0x01, 0xff, 0x47, 0xf1, 0xc5, 0x32, 0xda, - 0x01, 0x47, 0xbd, 0x86, 0x31, 0xda, 0x01, 0xb7, 0x01, 0xff, 0x46, 0x65, - 0xd2, 0x34, 0xda, 0x01, 0x47, 0xb6, 0xb7, 0x33, 0xda, 0x41, 0x04, 0x3b, - 0x1e, 0xe1, 0x0b, 0x07, 0xff, 0xcc, 0x01, 0xff, 0x09, 0x2e, 0x23, 0xdd, - 0x0a, 0x0b, 0xe8, 0x43, 0xd5, 0x05, 0x06, 0x1d, 0xd2, 0x99, 0x05, 0x0a, + 0xd5, 0xae, 0xda, 0x01, 0xd6, 0xaf, 0xda, 0x41, 0x43, 0x7d, 0x64, 0x6a, + 0xda, 0x01, 0x04, 0x35, 0x15, 0x01, 0xff, 0x47, 0x0d, 0xc6, 0x32, 0xda, + 0x01, 0x47, 0xc4, 0x86, 0x31, 0xda, 0x01, 0xb7, 0x01, 0xff, 0x46, 0x81, + 0xd2, 0x34, 0xda, 0x01, 0x47, 0xd2, 0xb7, 0x33, 0xda, 0x41, 0x04, 0x3b, + 0x1e, 0xe1, 0x0b, 0x07, 0x1b, 0xcd, 0x01, 0xff, 0x09, 0x2e, 0x23, 0xdd, + 0x0a, 0x0b, 0xfd, 0x43, 0xd5, 0x05, 0x06, 0x39, 0xd2, 0x99, 0x05, 0x0a, 0xbf, 0x1b, 0x01, 0xff, 0x0b, 0x37, 0x24, 0xee, 0x04, 0xa2, 0xbe, 0x04, 0xa3, 0x80, 0x03, 0x07, 0x3b, 0x01, 0xe2, 0x02, 0x08, 0x37, 0x19, 0xc7, - 0x02, 0x05, 0x65, 0xdc, 0xa0, 0x02, 0x43, 0x5e, 0xe1, 0x68, 0xda, 0x01, - 0x05, 0x73, 0xdd, 0xec, 0x01, 0x06, 0x81, 0xd4, 0xd5, 0x01, 0xb3, 0xa4, + 0x02, 0x05, 0x81, 0xdc, 0xa0, 0x02, 0x43, 0x7a, 0xe1, 0x68, 0xda, 0x01, + 0x05, 0x8f, 0xdd, 0xec, 0x01, 0x06, 0x9d, 0xd4, 0xd5, 0x01, 0xb3, 0xa4, 0x01, 0x07, 0x37, 0x1b, 0x86, 0x01, 0xb7, 0x17, 0x07, 0xf8, 0x2f, 0x01, 0xff, 0x45, 0x0f, 0x1a, 0x47, 0xd9, 0x01, 0x46, 0x9b, 0x03, 0x46, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0x45, 0xd9, 0x41, 0x04, 0x7b, 0x20, 0x11, 0x12, - 0x19, 0x4f, 0x01, 0xff, 0x46, 0x3b, 0x01, 0xee, 0xd9, 0x01, 0x46, 0xe5, - 0x08, 0xed, 0xd9, 0x41, 0x06, 0xf5, 0x11, 0x27, 0x0e, 0xf6, 0x6f, 0x11, - 0x08, 0x66, 0x23, 0x01, 0xff, 0x45, 0x71, 0xda, 0xb0, 0xd9, 0x01, 0x4a, - 0xe7, 0xa1, 0xa9, 0xd9, 0x41, 0x45, 0x0f, 0x1a, 0xb6, 0xd9, 0x01, 0x46, + 0x2e, 0x4f, 0x01, 0xff, 0x46, 0x3b, 0x01, 0xee, 0xd9, 0x01, 0x46, 0xe5, + 0x08, 0xed, 0xd9, 0x41, 0x06, 0xf5, 0x11, 0x27, 0x0e, 0x0b, 0x70, 0x11, + 0x08, 0x66, 0x23, 0x01, 0xff, 0x45, 0x8d, 0xda, 0xb0, 0xd9, 0x01, 0x4a, + 0xfa, 0xa1, 0xa9, 0xd9, 0x41, 0x45, 0x0f, 0x1a, 0xb6, 0xd9, 0x01, 0x46, 0x9b, 0x03, 0xb5, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0xb4, 0xd9, 0x41, 0x07, 0x3b, 0x01, 0x17, 0x07, 0x37, 0x1b, 0x01, 0xff, 0x45, 0x0f, 0x1a, 0x9e, 0xd9, 0x01, 0x46, 0x9b, 0x03, 0x9d, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0x9c, 0xd9, 0x41, 0x45, 0x0f, 0x1a, 0x9b, 0xd9, 0x01, 0x46, 0x9b, 0x03, 0x9a, - 0xd9, 0x01, 0x45, 0x3c, 0x06, 0x99, 0xd9, 0x41, 0x4b, 0x6b, 0x54, 0x36, - 0xd9, 0x81, 0x0c, 0x51, 0x1d, 0x58, 0x34, 0xd9, 0x01, 0x4a, 0x61, 0x90, - 0x35, 0xd9, 0x41, 0x4b, 0x60, 0x90, 0x37, 0xd9, 0x41, 0x46, 0x0e, 0x67, - 0xa5, 0xd9, 0x01, 0x06, 0xe6, 0x08, 0x01, 0xff, 0x09, 0xb1, 0x47, 0x06, - 0x4a, 0x61, 0x90, 0x2e, 0xd9, 0x41, 0x45, 0x0f, 0x1a, 0x2c, 0xd9, 0x81, + 0xd9, 0x01, 0x45, 0x3c, 0x06, 0x99, 0xd9, 0x41, 0x4b, 0x80, 0x54, 0x36, + 0xd9, 0x81, 0x0c, 0x51, 0x32, 0x58, 0x34, 0xd9, 0x01, 0x4a, 0x74, 0x90, + 0x35, 0xd9, 0x41, 0x4b, 0x73, 0x90, 0x37, 0xd9, 0x41, 0x46, 0x23, 0x67, + 0xa5, 0xd9, 0x01, 0x06, 0xe6, 0x08, 0x01, 0xff, 0x09, 0xc6, 0x47, 0x06, + 0x4a, 0x74, 0x90, 0x2e, 0xd9, 0x41, 0x45, 0x0f, 0x1a, 0x2c, 0xd9, 0x81, 0x0c, 0x46, 0x9b, 0x03, 0x2b, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0x2a, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x2d, 0xd9, 0x41, 0x45, 0x0f, 0x1a, 0x4a, 0xd9, 0x01, 0x46, 0x9b, 0x03, 0x49, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0x48, 0xd9, 0x41, 0x08, 0x66, 0x23, 0x19, 0x45, 0x0f, 0x1a, 0x97, 0xd9, 0x01, 0x46, 0x9b, 0x03, 0x96, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0x95, 0xd9, 0xc1, 0x00, - 0x47, 0x3a, 0x01, 0x98, 0xd9, 0x41, 0x45, 0x71, 0xda, 0xaf, 0xd9, 0x01, - 0x4a, 0xe7, 0xa1, 0xa8, 0xd9, 0x41, 0x08, 0x66, 0x23, 0x12, 0x45, 0x0f, + 0x47, 0x3a, 0x01, 0x98, 0xd9, 0x41, 0x45, 0x8d, 0xda, 0xaf, 0xd9, 0x01, + 0x4a, 0xfa, 0xa1, 0xa8, 0xd9, 0x41, 0x08, 0x66, 0x23, 0x12, 0x45, 0x0f, 0x1a, 0x94, 0xd9, 0x01, 0x46, 0x9b, 0x03, 0x93, 0xd9, 0x01, 0x45, 0x3c, - 0x06, 0x92, 0xd9, 0x41, 0x45, 0x71, 0xda, 0xae, 0xd9, 0x01, 0x4a, 0xe7, - 0xa1, 0xa7, 0xd9, 0x41, 0x07, 0xb4, 0x3e, 0x06, 0x46, 0xf2, 0xc5, 0x28, + 0x06, 0x92, 0xd9, 0x41, 0x45, 0x8d, 0xda, 0xae, 0xd9, 0x01, 0x4a, 0xfa, + 0xa1, 0xa7, 0xd9, 0x41, 0x07, 0xc9, 0x3e, 0x06, 0x46, 0x0e, 0xc6, 0x28, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xf2, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0xf1, - 0xd9, 0x41, 0x4b, 0x6b, 0x54, 0x31, 0xd9, 0x81, 0x0c, 0x48, 0xb1, 0x47, - 0x2f, 0xd9, 0x01, 0x4a, 0x61, 0x90, 0x30, 0xd9, 0x41, 0x4b, 0x60, 0x90, - 0x32, 0xd9, 0x41, 0x05, 0x1c, 0xa0, 0xa4, 0x01, 0x06, 0x00, 0x0a, 0x87, + 0xd9, 0x41, 0x4b, 0x80, 0x54, 0x31, 0xd9, 0x81, 0x0c, 0x48, 0xc6, 0x47, + 0x2f, 0xd9, 0x01, 0x4a, 0x74, 0x90, 0x30, 0xd9, 0x41, 0x4b, 0x73, 0x90, + 0x32, 0xd9, 0x41, 0x05, 0x2f, 0xa0, 0xa4, 0x01, 0x06, 0x00, 0x0a, 0x87, 0x01, 0x44, 0x0e, 0x0f, 0x33, 0xd9, 0x01, 0x04, 0xf6, 0x11, 0x01, 0xff, - 0x80, 0x11, 0x08, 0x45, 0xbb, 0x01, 0xff, 0x46, 0x9b, 0x03, 0xa1, 0xd9, + 0x80, 0x11, 0x08, 0x61, 0xbb, 0x01, 0xff, 0x46, 0x9b, 0x03, 0xa1, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0xa0, 0xd9, 0x41, 0xa8, 0x39, 0x08, 0x10, 0x1b, - 0x1c, 0x02, 0x53, 0x00, 0x01, 0xff, 0x4b, 0x8e, 0x93, 0x9f, 0xd9, 0x01, - 0x13, 0x06, 0x47, 0x01, 0xff, 0x46, 0x9b, 0x03, 0x91, 0xd9, 0x01, 0x45, + 0x1c, 0x02, 0x53, 0x00, 0x01, 0xff, 0x4b, 0xa1, 0x93, 0x9f, 0xd9, 0x01, + 0x13, 0x1b, 0x47, 0x01, 0xff, 0x46, 0x9b, 0x03, 0x91, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0x90, 0xd9, 0x41, 0x45, 0x0f, 0x1a, 0x8a, 0xd9, 0x81, 0x0c, 0x46, 0x9b, 0x03, 0x89, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0x88, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x8b, 0xd9, 0x41, 0x0b, 0x7a, 0x29, 0x11, 0x07, 0x67, - 0x23, 0x01, 0xff, 0x45, 0x71, 0xda, 0xad, 0xd9, 0x01, 0x4a, 0xe7, 0xa1, + 0x23, 0x01, 0xff, 0x45, 0x8d, 0xda, 0xad, 0xd9, 0x01, 0x4a, 0xfa, 0xa1, 0xa6, 0xd9, 0x41, 0x45, 0x0f, 0x1a, 0x8e, 0xd9, 0x81, 0x0c, 0x46, 0x9b, 0x03, 0x8d, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0x8c, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x8f, 0xd9, 0x41, 0x45, 0x0f, 0x1a, 0x3d, 0xd9, 0x01, 0x46, 0x9b, - 0x03, 0x3c, 0xd9, 0x01, 0x48, 0x70, 0x5a, 0x3e, 0xd9, 0x01, 0x45, 0x3c, + 0x03, 0x3c, 0xd9, 0x01, 0x48, 0x85, 0x5a, 0x3e, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0x3b, 0xd9, 0x41, 0x45, 0x0f, 0x1a, 0x41, 0xd9, 0x01, 0x46, 0x9b, 0x03, 0x40, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0x3f, 0xd9, 0x41, 0x04, 0x45, 0x04, 0x17, 0x03, 0x7c, 0x36, 0x01, 0xff, 0x45, 0x0f, 0x1a, 0x44, 0xd9, @@ -4194,54 +4195,54 @@ static const unsigned char uname2c_tree[210697] = { 0x01, 0x45, 0x3c, 0x06, 0x38, 0xd9, 0x41, 0x07, 0x9b, 0x03, 0x11, 0x06, 0x3c, 0x06, 0x01, 0xff, 0x46, 0x3b, 0x01, 0xe5, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0xe3, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xe6, 0xd9, 0x01, 0x46, 0xe5, - 0x08, 0xe4, 0xd9, 0x41, 0x4f, 0xc4, 0x65, 0x24, 0xd9, 0x01, 0x55, 0xba, + 0x08, 0xe4, 0xd9, 0x41, 0x4f, 0xd9, 0x65, 0x24, 0xd9, 0x01, 0x55, 0xcf, 0x39, 0x27, 0xd9, 0x01, 0x03, 0x9c, 0x13, 0x01, 0xff, 0x05, 0xda, 0x12, - 0x06, 0x4a, 0xc9, 0x65, 0x23, 0xd9, 0x41, 0x0c, 0xa8, 0x84, 0x0c, 0x45, + 0x06, 0x4a, 0xde, 0x65, 0x23, 0xd9, 0x41, 0x0c, 0xaf, 0x84, 0x0c, 0x45, 0x0f, 0x1a, 0x21, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0x22, 0xd9, 0x41, 0x45, 0x0f, 0x1a, 0x25, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0x26, 0xd9, 0x41, 0x18, 0x37, 0x24, 0xcd, 0x04, 0xa2, 0xad, 0x04, 0xa3, 0xbf, 0x03, 0x07, 0x3b, - 0x01, 0xa1, 0x03, 0x08, 0x37, 0x19, 0x86, 0x03, 0x05, 0x65, 0xdc, 0xb0, - 0x02, 0x43, 0x5e, 0xe1, 0x69, 0xda, 0x01, 0x05, 0x73, 0xdd, 0xd0, 0x01, - 0x06, 0x81, 0xd4, 0xb9, 0x01, 0xb3, 0x88, 0x01, 0x07, 0x37, 0x1b, 0x68, + 0x01, 0xa1, 0x03, 0x08, 0x37, 0x19, 0x86, 0x03, 0x05, 0x81, 0xdc, 0xb0, + 0x02, 0x43, 0x7a, 0xe1, 0x69, 0xda, 0x01, 0x05, 0x8f, 0xdd, 0xd0, 0x01, + 0x06, 0x9d, 0xd4, 0xb9, 0x01, 0xb3, 0x88, 0x01, 0x07, 0x37, 0x1b, 0x68, 0xb7, 0x17, 0x07, 0xf8, 0x2f, 0x01, 0xff, 0x45, 0x0f, 0x1a, 0x7d, 0xd9, 0x01, 0x46, 0x9b, 0x03, 0x7c, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0x7b, 0xd9, 0x41, 0x04, 0x7b, 0x20, 0x11, 0x19, 0x5a, 0x23, 0x01, 0xff, 0x46, 0x3b, 0x01, 0xf0, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0xef, 0xd9, 0x41, 0x08, 0x66, 0x23, 0x15, 0x45, 0x0f, 0x1a, 0xde, 0xd9, 0x01, 0xb3, 0x01, 0xff, 0x44, - 0x3d, 0x06, 0xdd, 0xd9, 0x01, 0x44, 0x75, 0xa5, 0xdc, 0xd9, 0x41, 0x08, - 0xdd, 0xba, 0x11, 0x06, 0xbc, 0x21, 0x01, 0xff, 0x45, 0x0f, 0x1a, 0xd1, + 0x3d, 0x06, 0xdd, 0xd9, 0x01, 0x44, 0x88, 0xa5, 0xdc, 0xd9, 0x41, 0x08, + 0xf9, 0xba, 0x11, 0x06, 0xbc, 0x21, 0x01, 0xff, 0x45, 0x0f, 0x1a, 0xd1, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0xd0, 0xd9, 0x41, 0x45, 0x0f, 0x1a, 0xc2, - 0xd9, 0x01, 0x45, 0x3c, 0x06, 0xc1, 0xd9, 0x41, 0x0c, 0xa8, 0x84, 0x0c, - 0x51, 0x1d, 0x58, 0x6f, 0xd9, 0x01, 0x4a, 0x61, 0x90, 0x70, 0xd9, 0x41, - 0x48, 0x26, 0x58, 0x71, 0xd9, 0x01, 0x4a, 0x61, 0x90, 0x72, 0xd9, 0x41, - 0x4f, 0x0e, 0x67, 0xe2, 0xd9, 0x01, 0x06, 0xe6, 0x08, 0x01, 0xff, 0x09, - 0xb1, 0x47, 0x06, 0x4a, 0x61, 0x90, 0x69, 0xd9, 0x41, 0x45, 0x0f, 0x1a, + 0xd9, 0x01, 0x45, 0x3c, 0x06, 0xc1, 0xd9, 0x41, 0x0c, 0xaf, 0x84, 0x0c, + 0x51, 0x32, 0x58, 0x6f, 0xd9, 0x01, 0x4a, 0x74, 0x90, 0x70, 0xd9, 0x41, + 0x48, 0x3b, 0x58, 0x71, 0xd9, 0x01, 0x4a, 0x74, 0x90, 0x72, 0xd9, 0x41, + 0x4f, 0x23, 0x67, 0xe2, 0xd9, 0x01, 0x06, 0xe6, 0x08, 0x01, 0xff, 0x09, + 0xc6, 0x47, 0x06, 0x4a, 0x74, 0x90, 0x69, 0xd9, 0x41, 0x45, 0x0f, 0x1a, 0x67, 0xd9, 0x81, 0x0c, 0x46, 0x9b, 0x03, 0x66, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0x65, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x68, 0xd9, 0x41, 0x45, 0x0f, 0x1a, 0x80, 0xd9, 0x01, 0x46, 0x9b, 0x03, 0x7f, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0x7e, 0xd9, 0x41, 0x08, 0x66, 0x23, 0x06, 0x45, 0x3c, 0x06, 0xdb, - 0xd9, 0x41, 0x08, 0xdd, 0xba, 0x26, 0x06, 0xbc, 0x21, 0x01, 0xff, 0x06, + 0xd9, 0x41, 0x08, 0xf9, 0xba, 0x26, 0x06, 0xbc, 0x21, 0x01, 0xff, 0x06, 0x0f, 0x1a, 0x11, 0x06, 0x3c, 0x06, 0x01, 0xff, 0x46, 0x3b, 0x01, 0xce, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0xcc, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xcf, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0xcd, 0xd9, 0x41, 0x06, 0x0f, 0x1a, 0x11, 0x06, 0x3c, 0x06, 0x01, 0xff, 0x46, 0x3b, 0x01, 0xbf, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0xbd, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xc0, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0xbe, 0xd9, 0x41, 0x08, 0x66, 0x23, 0x06, 0x45, 0x3c, 0x06, - 0xda, 0xd9, 0x41, 0x08, 0xdd, 0xba, 0x22, 0x06, 0xbc, 0x21, 0x01, 0xff, - 0x4c, 0x40, 0x89, 0xc9, 0xd9, 0x01, 0x4c, 0x84, 0x8d, 0xc8, 0xd9, 0x01, - 0x07, 0x37, 0x1b, 0x01, 0xff, 0x4c, 0x4c, 0x89, 0xcb, 0xd9, 0x01, 0x4c, - 0x90, 0x8d, 0xca, 0xd9, 0x41, 0x06, 0x0f, 0x1a, 0x11, 0x06, 0x3c, 0x06, + 0xda, 0xd9, 0x41, 0x08, 0xf9, 0xba, 0x22, 0x06, 0xbc, 0x21, 0x01, 0xff, + 0x4c, 0x47, 0x89, 0xc9, 0xd9, 0x01, 0x4c, 0x97, 0x8d, 0xc8, 0xd9, 0x01, + 0x07, 0x37, 0x1b, 0x01, 0xff, 0x4c, 0x53, 0x89, 0xcb, 0xd9, 0x01, 0x4c, + 0xa3, 0x8d, 0xca, 0xd9, 0x41, 0x06, 0x0f, 0x1a, 0x11, 0x06, 0x3c, 0x06, 0x01, 0xff, 0x46, 0x3b, 0x01, 0xb9, 0xd9, 0x01, 0x46, 0x37, 0x1b, 0xbb, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xba, 0xd9, 0x01, 0x46, 0x37, 0x1b, 0xbc, - 0xd9, 0x41, 0x14, 0xb4, 0x3e, 0x06, 0x46, 0xf2, 0xc5, 0x29, 0xd9, 0x41, + 0xd9, 0x41, 0x14, 0xc9, 0x3e, 0x06, 0x46, 0x0e, 0xc6, 0x29, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xf4, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0xf3, 0xd9, 0x41, - 0x4b, 0x6b, 0x54, 0x6c, 0xd9, 0x81, 0x0c, 0x48, 0xb1, 0x47, 0x6a, 0xd9, - 0x01, 0x4a, 0x61, 0x90, 0x6b, 0xd9, 0x41, 0x4b, 0x60, 0x90, 0x6d, 0xd9, - 0x41, 0x44, 0x67, 0x64, 0x77, 0xd9, 0x01, 0x06, 0x00, 0x0a, 0x4f, 0x44, - 0x0e, 0x0f, 0x6e, 0xd9, 0x01, 0x05, 0xf6, 0x11, 0x01, 0xff, 0x48, 0x15, + 0x4b, 0x80, 0x54, 0x6c, 0xd9, 0x81, 0x0c, 0x48, 0xc6, 0x47, 0x6a, 0xd9, + 0x01, 0x4a, 0x74, 0x90, 0x6b, 0xd9, 0x41, 0x4b, 0x73, 0x90, 0x6d, 0xd9, + 0x41, 0x44, 0x7c, 0x64, 0x77, 0xd9, 0x01, 0x06, 0x00, 0x0a, 0x4f, 0x44, + 0x0e, 0x0f, 0x6e, 0xd9, 0x01, 0x05, 0xf6, 0x11, 0x01, 0xff, 0x48, 0x31, 0xbb, 0xd9, 0xd9, 0x01, 0x08, 0x66, 0x23, 0x19, 0x45, 0x0f, 0x1a, 0xd7, 0xd9, 0x81, 0x0c, 0x46, 0x9b, 0x03, 0xd6, 0xd9, 0x01, 0x45, 0x3c, 0x06, - 0xd5, 0xd9, 0x41, 0x42, 0x60, 0x01, 0xd8, 0xd9, 0x41, 0x08, 0xdd, 0xba, + 0xd5, 0xd9, 0x41, 0x42, 0x60, 0x01, 0xd8, 0xd9, 0x41, 0x08, 0xf9, 0xba, 0x11, 0x06, 0xbc, 0x21, 0x01, 0xff, 0x45, 0x0f, 0x1a, 0xc7, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0xc6, 0xd9, 0x41, 0x45, 0x0f, 0x1a, 0xb8, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0xb7, 0xd9, 0x41, 0x45, 0x0f, 0x1a, 0x76, 0xd9, 0x01, @@ -4252,76 +4253,76 @@ static const unsigned char uname2c_tree[210697] = { 0x11, 0x06, 0x3c, 0x06, 0x01, 0xff, 0x46, 0x3b, 0x01, 0xea, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0xe7, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xeb, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0xe8, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xec, 0xd9, 0x01, - 0x46, 0xe5, 0x08, 0xe9, 0xd9, 0x41, 0x05, 0xdb, 0xd9, 0x5d, 0x08, 0xc6, - 0x08, 0x1e, 0x08, 0x9d, 0xc1, 0x01, 0xff, 0x45, 0x0f, 0x1a, 0x5b, 0xd9, + 0x46, 0xe5, 0x08, 0xe9, 0xd9, 0x41, 0x05, 0xf7, 0xd9, 0x5d, 0x08, 0xc6, + 0x08, 0x1e, 0x08, 0xb9, 0xc1, 0x01, 0xff, 0x45, 0x0f, 0x1a, 0x5b, 0xd9, 0x81, 0x0c, 0x46, 0x9b, 0x03, 0x5a, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0x59, - 0xd9, 0x41, 0x42, 0x60, 0x01, 0x5c, 0xd9, 0x41, 0x05, 0xdb, 0xd9, 0x1e, - 0x08, 0x9d, 0xc1, 0x01, 0xff, 0x45, 0x0f, 0x1a, 0x63, 0xd9, 0x81, 0x0c, + 0xd9, 0x41, 0x42, 0x60, 0x01, 0x5c, 0xd9, 0x41, 0x05, 0xf7, 0xd9, 0x1e, + 0x08, 0xb9, 0xc1, 0x01, 0xff, 0x45, 0x0f, 0x1a, 0x63, 0xd9, 0x81, 0x0c, 0x46, 0x9b, 0x03, 0x62, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0x61, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x64, 0xd9, 0x41, 0x45, 0x0f, 0x1a, 0x5f, 0xd9, 0x81, 0x0c, 0x46, 0x9b, 0x03, 0x5e, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0x5d, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x60, 0xd9, 0x41, 0x45, 0x0f, 0x1a, 0x57, 0xd9, 0x81, 0x0c, 0x46, 0x9b, 0x03, 0x56, 0xd9, 0x01, 0x45, 0x3c, 0x06, 0x55, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x58, 0xd9, 0x41, 0xa3, 0xac, 0x01, 0x45, - 0x06, 0x7c, 0x41, 0xda, 0x81, 0x95, 0x01, 0x44, 0xe6, 0x6c, 0x4d, 0xda, - 0x81, 0x7f, 0x05, 0xfb, 0x03, 0x3d, 0x45, 0xc2, 0xb7, 0x3e, 0xda, 0x81, - 0x27, 0x45, 0x57, 0xe0, 0x50, 0xda, 0x81, 0x11, 0x09, 0xb5, 0xb7, 0x01, + 0x0d, 0x7c, 0x41, 0xda, 0x81, 0x95, 0x01, 0x44, 0xfb, 0x6c, 0x4d, 0xda, + 0x81, 0x7f, 0x05, 0xfb, 0x03, 0x3d, 0x45, 0xde, 0xb7, 0x3e, 0xda, 0x81, + 0x27, 0x45, 0x73, 0xe0, 0x50, 0xda, 0x81, 0x11, 0x09, 0xd1, 0xb7, 0x01, 0xff, 0x46, 0x3b, 0x01, 0x58, 0xda, 0x01, 0x46, 0xe5, 0x08, 0x57, 0xda, - 0x41, 0x80, 0x01, 0xff, 0x47, 0xa5, 0x2d, 0x51, 0xda, 0x01, 0x46, 0x95, + 0x41, 0x80, 0x01, 0xff, 0x47, 0xa5, 0x2d, 0x51, 0xda, 0x01, 0x46, 0xb1, 0xd5, 0x52, 0xda, 0x41, 0x80, 0x01, 0xff, 0x44, 0xfb, 0x03, 0x40, 0xda, - 0x01, 0x48, 0x7d, 0xc2, 0x3f, 0xda, 0x41, 0x46, 0x00, 0x04, 0x44, 0xda, - 0x01, 0x47, 0xa5, 0x2d, 0x45, 0xda, 0x01, 0x44, 0x3d, 0x41, 0x47, 0xda, - 0x81, 0x1c, 0x49, 0x13, 0x42, 0x4a, 0xda, 0x81, 0x06, 0x48, 0x7d, 0xc2, - 0x46, 0xda, 0x41, 0x80, 0x01, 0xff, 0x48, 0x7d, 0xc2, 0x4b, 0xda, 0x01, - 0x44, 0x0a, 0xe8, 0x4c, 0xda, 0x41, 0x80, 0x01, 0xff, 0x48, 0x7d, 0xc2, - 0x48, 0xda, 0x01, 0x44, 0x0a, 0xe8, 0x49, 0xda, 0x41, 0x80, 0x01, 0xff, - 0x47, 0xa5, 0x2d, 0x4e, 0xda, 0x01, 0x48, 0x7d, 0xc2, 0x4f, 0xda, 0x41, - 0x80, 0x01, 0xff, 0x44, 0xfb, 0x03, 0x43, 0xda, 0x01, 0x48, 0x7d, 0xc2, + 0x01, 0x48, 0x99, 0xc2, 0x3f, 0xda, 0x41, 0x46, 0x00, 0x04, 0x44, 0xda, + 0x01, 0x47, 0xa5, 0x2d, 0x45, 0xda, 0x01, 0x44, 0x52, 0x41, 0x47, 0xda, + 0x81, 0x1c, 0x49, 0x28, 0x42, 0x4a, 0xda, 0x81, 0x06, 0x48, 0x99, 0xc2, + 0x46, 0xda, 0x41, 0x80, 0x01, 0xff, 0x48, 0x99, 0xc2, 0x4b, 0xda, 0x01, + 0x44, 0x26, 0xe8, 0x4c, 0xda, 0x41, 0x80, 0x01, 0xff, 0x48, 0x99, 0xc2, + 0x48, 0xda, 0x01, 0x44, 0x26, 0xe8, 0x49, 0xda, 0x41, 0x80, 0x01, 0xff, + 0x47, 0xa5, 0x2d, 0x4e, 0xda, 0x01, 0x48, 0x99, 0xc2, 0x4f, 0xda, 0x41, + 0x80, 0x01, 0xff, 0x44, 0xfb, 0x03, 0x43, 0xda, 0x01, 0x48, 0x99, 0xc2, 0x42, 0xda, 0x41, 0x06, 0x48, 0x19, 0x06, 0x46, 0x2b, 0x17, 0x56, 0xda, - 0x41, 0x47, 0xf1, 0xc5, 0x3d, 0xda, 0x01, 0x47, 0xa5, 0x2d, 0x3c, 0xda, - 0x01, 0x47, 0xbd, 0x86, 0x3b, 0xda, 0x41, 0xa9, 0x3e, 0x07, 0x02, 0x7e, - 0x01, 0xff, 0x80, 0x0f, 0x8d, 0x01, 0xff, 0x50, 0x19, 0x5d, 0x80, 0xda, - 0x01, 0x4f, 0xda, 0x6d, 0x7f, 0xda, 0x41, 0x45, 0xd5, 0xda, 0x83, 0xda, - 0x01, 0x02, 0xb0, 0x01, 0x12, 0x4c, 0xa0, 0x89, 0x86, 0xda, 0x01, 0x45, - 0x84, 0xe0, 0x85, 0xda, 0x01, 0x45, 0x93, 0x4a, 0x82, 0xda, 0x41, 0x47, - 0x69, 0xc4, 0x84, 0xda, 0x01, 0x44, 0xc9, 0x00, 0x81, 0xda, 0x41, 0x03, - 0xf2, 0x11, 0x17, 0xb0, 0x01, 0xff, 0x80, 0x06, 0x52, 0x4f, 0x4f, 0x53, - 0xda, 0x41, 0x50, 0x89, 0x5e, 0x54, 0xda, 0x01, 0x50, 0xe9, 0x61, 0x55, - 0xda, 0x41, 0x4b, 0x2e, 0x92, 0x76, 0xda, 0x01, 0x07, 0x9f, 0xc8, 0x01, + 0x41, 0x47, 0x0d, 0xc6, 0x3d, 0xda, 0x01, 0x47, 0xa5, 0x2d, 0x3c, 0xda, + 0x01, 0x47, 0xc4, 0x86, 0x3b, 0xda, 0x41, 0xa9, 0x3e, 0x07, 0x09, 0x7e, + 0x01, 0xff, 0x80, 0x0f, 0x8d, 0x01, 0xff, 0x50, 0x2e, 0x5d, 0x80, 0xda, + 0x01, 0x4f, 0xef, 0x6d, 0x7f, 0xda, 0x41, 0x45, 0xf1, 0xda, 0x83, 0xda, + 0x01, 0x02, 0xb0, 0x01, 0x12, 0x4c, 0xa7, 0x89, 0x86, 0xda, 0x01, 0x45, + 0xa0, 0xe0, 0x85, 0xda, 0x01, 0x45, 0xa8, 0x4a, 0x82, 0xda, 0x41, 0x47, + 0x85, 0xc4, 0x84, 0xda, 0x01, 0x44, 0xc9, 0x00, 0x81, 0xda, 0x41, 0x03, + 0xf2, 0x11, 0x17, 0xb0, 0x01, 0xff, 0x80, 0x06, 0x52, 0x64, 0x4f, 0x53, + 0xda, 0x41, 0x50, 0x9e, 0x5e, 0x54, 0xda, 0x01, 0x50, 0xfe, 0x61, 0x55, + 0xda, 0x41, 0x4b, 0x41, 0x92, 0x76, 0xda, 0x01, 0x07, 0xbb, 0xc8, 0x01, 0xff, 0xd1, 0x77, 0xda, 0x01, 0xd2, 0x78, 0xda, 0x01, 0xd3, 0x79, 0xda, 0x01, 0xd4, 0x7a, 0xda, 0x01, 0xd5, 0x7b, 0xda, 0x01, 0xd6, 0x7c, 0xda, 0x01, 0xd7, 0x7d, 0xda, 0x41, 0xa1, 0x44, 0x43, 0xe7, 0x01, 0xff, 0xd9, - 0xc1, 0x00, 0x80, 0x01, 0xff, 0x08, 0x26, 0x58, 0x06, 0x43, 0xd3, 0x18, + 0xc1, 0x00, 0x80, 0x01, 0xff, 0x08, 0x3b, 0x58, 0x06, 0x43, 0xd3, 0x18, 0x00, 0xda, 0x41, 0x47, 0xff, 0x03, 0x06, 0xda, 0x01, 0x8d, 0x01, 0xff, - 0x0b, 0xe8, 0x43, 0x17, 0x0a, 0xbf, 0x1b, 0x01, 0xff, 0x45, 0xf5, 0x11, - 0x04, 0xda, 0x01, 0x48, 0xb1, 0x47, 0x01, 0xda, 0x01, 0x44, 0x5e, 0x04, - 0x02, 0xda, 0x41, 0x45, 0xf5, 0x11, 0x05, 0xda, 0x01, 0x48, 0xb1, 0x47, + 0x0b, 0xfd, 0x43, 0x17, 0x0a, 0xbf, 0x1b, 0x01, 0xff, 0x45, 0xf5, 0x11, + 0x04, 0xda, 0x01, 0x48, 0xc6, 0x47, 0x01, 0xda, 0x01, 0x44, 0x5e, 0x04, + 0x02, 0xda, 0x41, 0x45, 0xf5, 0x11, 0x05, 0xda, 0x01, 0x48, 0xc6, 0x47, 0x03, 0xda, 0x41, 0x42, 0x46, 0x00, 0x6b, 0xda, 0x01, 0x03, 0xdf, 0x16, 0x01, 0xff, 0x45, 0x04, 0x02, 0x85, 0xd8, 0x81, 0xad, 0x0e, 0xa3, 0xe0, - 0x0b, 0xa6, 0xee, 0x02, 0xa8, 0x39, 0x44, 0x3d, 0x41, 0x77, 0xd8, 0xc1, - 0x00, 0x80, 0x01, 0xff, 0x53, 0xd5, 0x43, 0x56, 0xd8, 0x01, 0x45, 0xe7, - 0x0e, 0x03, 0xd8, 0x01, 0x49, 0x27, 0xb2, 0x95, 0xd8, 0x01, 0x48, 0xfd, - 0xbe, 0x79, 0xd8, 0x01, 0x4b, 0xac, 0x16, 0xb2, 0xd8, 0x01, 0x06, 0xef, + 0x0b, 0xa6, 0xee, 0x02, 0xa8, 0x39, 0x44, 0x52, 0x41, 0x77, 0xd8, 0xc1, + 0x00, 0x80, 0x01, 0xff, 0x53, 0xea, 0x43, 0x56, 0xd8, 0x01, 0x45, 0xe7, + 0x0e, 0x03, 0xd8, 0x01, 0x49, 0x43, 0xb2, 0x95, 0xd8, 0x01, 0x48, 0x19, + 0xbf, 0x79, 0xd8, 0x01, 0x4b, 0xac, 0x16, 0xb2, 0xd8, 0x01, 0x06, 0xef, 0x11, 0x01, 0xff, 0x47, 0xa5, 0x2d, 0x7a, 0xd8, 0x01, 0x44, 0x53, 0x09, 0x78, 0xd8, 0x41, 0x44, 0xdf, 0x08, 0x7d, 0xd8, 0x81, 0x4c, 0x43, 0x05, - 0x0d, 0x6b, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x48, 0x2d, 0xbb, 0x6a, - 0xd8, 0x01, 0x12, 0x50, 0x3e, 0x26, 0x07, 0x7d, 0x02, 0x06, 0x4a, 0x9b, + 0x0d, 0x6b, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x48, 0x49, 0xbb, 0x6a, + 0xd8, 0x01, 0x12, 0x65, 0x3e, 0x26, 0x07, 0x7d, 0x02, 0x06, 0x4a, 0xae, 0xa7, 0xb9, 0xd8, 0x41, 0x55, 0xac, 0x16, 0xda, 0xd8, 0x81, 0x06, 0x45, 0xef, 0x11, 0xca, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x42, 0x9e, 0x01, 0xd9, 0xd8, 0x01, 0x43, 0x09, 0x07, 0xd8, 0xd8, 0x41, 0x42, 0x9e, 0x01, 0xbe, 0xd8, 0x01, 0x43, 0x09, 0x07, 0xbd, 0xd8, 0x01, 0x45, 0xa0, 0x18, 0xbf, 0xd8, 0x41, 0x80, 0x01, 0xff, 0xa6, 0xce, 0x01, 0x45, 0xe7, 0x0e, 0x04, 0xd8, 0x81, 0x7c, 0x46, 0xb1, 0x16, 0x8a, 0xd8, 0x81, 0x5f, 0x46, 0x7d, - 0x02, 0xc5, 0xd8, 0x81, 0x52, 0x48, 0xfd, 0xbe, 0x82, 0xd8, 0x01, 0x44, + 0x02, 0xc5, 0xd8, 0x81, 0x52, 0x48, 0x19, 0xbf, 0x82, 0xd8, 0x01, 0x44, 0xfb, 0x03, 0x7b, 0xd8, 0x81, 0x2b, 0x44, 0x03, 0x07, 0xa7, 0xd8, 0x81, 0x1e, 0x45, 0x3c, 0x06, 0x7e, 0xd8, 0x01, 0x06, 0xef, 0x11, 0x01, 0xff, - 0x53, 0x17, 0x43, 0x84, 0xd8, 0x01, 0x44, 0x53, 0x09, 0x80, 0xd8, 0xc1, - 0x00, 0x4f, 0x8a, 0x63, 0x83, 0xd8, 0x41, 0x5d, 0xd9, 0x12, 0xac, 0xd8, - 0x41, 0x80, 0x01, 0xff, 0x48, 0xfd, 0xbe, 0x81, 0xd8, 0x01, 0x06, 0xef, + 0x53, 0x2c, 0x43, 0x84, 0xd8, 0x01, 0x44, 0x53, 0x09, 0x80, 0xd8, 0xc1, + 0x00, 0x4f, 0x9f, 0x63, 0x83, 0xd8, 0x41, 0x5d, 0xd9, 0x12, 0xac, 0xd8, + 0x41, 0x80, 0x01, 0xff, 0x48, 0x19, 0xbf, 0x81, 0xd8, 0x01, 0x06, 0xef, 0x11, 0x01, 0xff, 0x47, 0xa5, 0x2d, 0x7c, 0xd8, 0x01, 0x44, 0x53, 0x09, 0x7f, 0xd8, 0x41, 0x4c, 0xab, 0x16, 0xd1, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x45, 0xe7, 0x0e, 0xa2, 0xd8, 0x81, 0x06, 0x45, 0xef, 0x11, 0x9b, 0xd8, - 0x41, 0x46, 0xee, 0x11, 0x9d, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x46, 0xc3, + 0x41, 0x46, 0xee, 0x11, 0x9d, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x46, 0xd8, 0x61, 0xdb, 0xd8, 0x01, 0x07, 0x7d, 0x02, 0x2b, 0x4b, 0xac, 0x16, 0xc1, 0xd8, 0x01, 0x45, 0xef, 0x11, 0xf0, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x45, 0x0f, 0x1a, 0xef, 0xd8, 0x01, 0x44, 0xfb, 0x03, 0xee, 0xd8, 0x01, @@ -4330,22 +4331,22 @@ static const unsigned char uname2c_tree[210697] = { 0x88, 0xd8, 0xc1, 0x00, 0x4a, 0xb7, 0x16, 0x8d, 0xd8, 0x41, 0x57, 0xb2, 0x2b, 0x55, 0xd8, 0x01, 0x55, 0x53, 0x19, 0x4b, 0xd8, 0x41, 0x43, 0x8f, 0x21, 0x03, 0xd9, 0x81, 0xc8, 0x01, 0x43, 0xd9, 0x01, 0x5a, 0xd8, 0xc1, - 0x00, 0x80, 0x01, 0xff, 0x54, 0xf8, 0x3b, 0x5b, 0xd8, 0x01, 0xa6, 0x61, - 0x44, 0x86, 0x11, 0x5c, 0xd8, 0x81, 0x3b, 0x06, 0x04, 0xce, 0x17, 0x06, + 0x00, 0x80, 0x01, 0xff, 0x54, 0x0d, 0x3c, 0x5b, 0xd8, 0x01, 0xa6, 0x61, + 0x44, 0x86, 0x11, 0x5c, 0xd8, 0x81, 0x3b, 0x06, 0x20, 0xce, 0x17, 0x06, 0xef, 0x11, 0x01, 0xff, 0x44, 0x69, 0x19, 0x5f, 0xd8, 0x01, 0x47, 0xa5, 0x2d, 0x60, 0xd8, 0x01, 0x44, 0x53, 0x09, 0x5d, 0xd8, 0x41, 0x46, 0x73, - 0x02, 0x62, 0xd8, 0x81, 0x0c, 0x50, 0xb9, 0x5d, 0x61, 0xd8, 0x01, 0x46, - 0xb1, 0x16, 0x65, 0xd8, 0x41, 0x4b, 0xec, 0x49, 0x63, 0xd8, 0xc1, 0x00, - 0x45, 0x68, 0x19, 0x64, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x53, 0xd5, 0x43, - 0x4d, 0xd8, 0x81, 0x06, 0x4a, 0xed, 0x49, 0x5e, 0xd8, 0x41, 0x80, 0x01, - 0xff, 0x44, 0x69, 0x19, 0x51, 0xd8, 0x01, 0x49, 0xcc, 0xaf, 0x4f, 0xd8, + 0x02, 0x62, 0xd8, 0x81, 0x0c, 0x50, 0xce, 0x5d, 0x61, 0xd8, 0x01, 0x46, + 0xb1, 0x16, 0x65, 0xd8, 0x41, 0x4b, 0x01, 0x4a, 0x63, 0xd8, 0xc1, 0x00, + 0x45, 0x68, 0x19, 0x64, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x53, 0xea, 0x43, + 0x4d, 0xd8, 0x81, 0x06, 0x4a, 0x02, 0x4a, 0x5e, 0xd8, 0x41, 0x80, 0x01, + 0xff, 0x44, 0x69, 0x19, 0x51, 0xd8, 0x01, 0x49, 0xe8, 0xaf, 0x4f, 0xd8, 0x41, 0x52, 0xb2, 0x2b, 0x4c, 0xd8, 0x81, 0x23, 0x4b, 0x53, 0x19, 0x44, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x44, 0x69, 0x19, 0x45, 0xd8, 0x01, - 0x49, 0xb8, 0x16, 0x47, 0xd8, 0x81, 0x06, 0x46, 0xc3, 0x61, 0x46, 0xd8, - 0x41, 0x46, 0x03, 0xce, 0x48, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x44, 0x69, - 0x19, 0x50, 0xd8, 0x01, 0x49, 0xcc, 0xaf, 0x4e, 0xd8, 0x01, 0x46, 0xc3, + 0x49, 0xb8, 0x16, 0x47, 0xd8, 0x81, 0x06, 0x46, 0xd8, 0x61, 0x46, 0xd8, + 0x41, 0x46, 0x1f, 0xce, 0x48, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x44, 0x69, + 0x19, 0x50, 0xd8, 0x01, 0x49, 0xe8, 0xaf, 0x4e, 0xd8, 0x01, 0x46, 0xd8, 0x61, 0x57, 0xd8, 0x81, 0x06, 0x4d, 0x9f, 0x2d, 0x52, 0xd8, 0x41, 0x80, - 0x01, 0xff, 0x48, 0xfd, 0xbe, 0x59, 0xd8, 0x01, 0x4a, 0xed, 0x49, 0x58, + 0x01, 0xff, 0x48, 0x19, 0xbf, 0x59, 0xd8, 0x01, 0x4a, 0x02, 0x4a, 0x58, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x5b, 0x52, 0x19, 0x4a, 0xd8, 0x01, 0x44, 0x86, 0x11, 0x04, 0xd9, 0x01, 0x45, 0xe7, 0x0e, 0x00, 0xd8, 0x81, 0x85, 0x03, 0x07, 0xb1, 0x16, 0xb2, 0x02, 0x07, 0x7d, 0x02, 0xbd, 0x01, 0x05, @@ -4353,100 +4354,100 @@ static const unsigned char uname2c_tree[210697] = { 0xff, 0x08, 0xc6, 0x08, 0x58, 0x47, 0xa5, 0x2d, 0xfa, 0xd8, 0x01, 0x44, 0x86, 0x11, 0xf6, 0xd8, 0x01, 0x05, 0x16, 0x02, 0x3c, 0x05, 0x53, 0x09, 0x26, 0x06, 0xaf, 0x22, 0x01, 0xff, 0x4c, 0x52, 0x19, 0x01, 0xd9, 0x01, - 0x4a, 0x31, 0xa3, 0x08, 0xd8, 0x01, 0x49, 0x27, 0xb2, 0x93, 0xd8, 0x01, - 0xb4, 0x01, 0xff, 0x4c, 0x38, 0x88, 0x00, 0xd9, 0x01, 0x4a, 0x98, 0x9b, + 0x4a, 0x44, 0xa3, 0x08, 0xd8, 0x01, 0x49, 0x43, 0xb2, 0x93, 0xd8, 0x01, + 0xb4, 0x01, 0xff, 0x4c, 0x3f, 0x88, 0x00, 0xd9, 0x01, 0x4a, 0xab, 0x9b, 0xfe, 0xd8, 0x41, 0x44, 0x69, 0x19, 0xf9, 0xd8, 0x01, 0x49, 0xb8, 0x16, - 0xf8, 0xd8, 0x01, 0x48, 0x2e, 0x23, 0xf7, 0xd8, 0x41, 0x54, 0x9c, 0x3d, - 0x02, 0xd9, 0x01, 0x4b, 0x97, 0x9b, 0xff, 0xd8, 0x41, 0x4c, 0x80, 0x88, + 0xf8, 0xd8, 0x01, 0x48, 0x2e, 0x23, 0xf7, 0xd8, 0x41, 0x54, 0xb1, 0x3d, + 0x02, 0xd9, 0x01, 0x4b, 0xaa, 0x9b, 0xff, 0xd8, 0x41, 0x4c, 0x87, 0x88, 0xfb, 0xd8, 0x81, 0x0c, 0x4b, 0xa5, 0x16, 0xfc, 0xd8, 0x01, 0x4b, 0xac, - 0x16, 0xfd, 0xd8, 0x41, 0x49, 0x72, 0x63, 0x2c, 0xd8, 0x41, 0x44, 0xa5, + 0x16, 0xfd, 0xd8, 0x41, 0x49, 0x87, 0x63, 0x2c, 0xd8, 0x41, 0x44, 0xa5, 0x01, 0xab, 0xd8, 0x01, 0x45, 0xe7, 0x0e, 0xb7, 0xd8, 0x01, 0x46, 0xb1, 0x16, 0xb0, 0xd8, 0x01, 0x46, 0x7d, 0x02, 0xb4, 0xd8, 0x81, 0x12, 0x4e, - 0xa1, 0x3d, 0xaf, 0xd8, 0x01, 0x45, 0xef, 0x11, 0xb8, 0xd8, 0x01, 0x42, + 0xb6, 0x3d, 0xaf, 0xd8, 0x01, 0x45, 0xef, 0x11, 0xb8, 0xd8, 0x01, 0x42, 0x50, 0x02, 0xae, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x49, 0xb8, 0x16, 0xb5, - 0xd8, 0x01, 0x4f, 0xa1, 0x3d, 0xb6, 0xd8, 0x41, 0x4f, 0xc5, 0x64, 0x1c, + 0xd8, 0x01, 0x4f, 0xb6, 0x3d, 0xb6, 0xd8, 0x41, 0x4f, 0xda, 0x64, 0x1c, 0xd8, 0x01, 0x44, 0xa5, 0x01, 0xc4, 0xd8, 0x01, 0x46, 0xb1, 0x16, 0xcc, 0xd8, 0x01, 0xb2, 0x50, 0x06, 0xef, 0x11, 0x0d, 0x42, 0x50, 0x02, 0xc6, - 0xd8, 0xc1, 0x00, 0x4b, 0xec, 0x49, 0xc9, 0xd8, 0x41, 0x07, 0xbd, 0xc4, - 0x24, 0xa3, 0x0c, 0x4f, 0x3b, 0x67, 0x30, 0xd8, 0x01, 0x46, 0xb1, 0x16, - 0xcb, 0xd8, 0x41, 0x0d, 0x58, 0x7d, 0x06, 0x4e, 0x3c, 0x77, 0x36, 0xd8, - 0x41, 0x46, 0xc3, 0x61, 0x39, 0xd8, 0x01, 0x42, 0x50, 0x02, 0x38, 0xd8, - 0x41, 0x48, 0x42, 0x67, 0x42, 0xd8, 0x01, 0x0a, 0x8d, 0xa6, 0x01, 0xff, + 0xd8, 0xc1, 0x00, 0x4b, 0x01, 0x4a, 0xc9, 0xd8, 0x41, 0x07, 0xd9, 0xc4, + 0x24, 0xa3, 0x0c, 0x4f, 0x50, 0x67, 0x30, 0xd8, 0x01, 0x46, 0xb1, 0x16, + 0xcb, 0xd8, 0x41, 0x0d, 0x5f, 0x7d, 0x06, 0x4e, 0x43, 0x77, 0x36, 0xd8, + 0x41, 0x46, 0xd8, 0x61, 0x39, 0xd8, 0x01, 0x42, 0x50, 0x02, 0x38, 0xd8, + 0x41, 0x48, 0x57, 0x67, 0x42, 0xd8, 0x01, 0x0a, 0xa0, 0xa6, 0x01, 0xff, 0x47, 0xbf, 0x1c, 0x41, 0xd8, 0x01, 0x42, 0x50, 0x02, 0x40, 0xd8, 0x41, - 0x4d, 0xa2, 0x3d, 0xc8, 0xd8, 0x01, 0x4a, 0xad, 0x16, 0xcd, 0xd8, 0x41, + 0x4d, 0xb7, 0x3d, 0xc8, 0xd8, 0x01, 0x4a, 0xad, 0x16, 0xcd, 0xd8, 0x41, 0x44, 0x69, 0x19, 0x98, 0xd8, 0x01, 0x44, 0xa5, 0x01, 0x8e, 0xd8, 0x81, - 0x27, 0x45, 0xe7, 0x0e, 0xa0, 0xd8, 0x81, 0x1a, 0x4e, 0xa1, 0x3d, 0x97, + 0x27, 0x45, 0xe7, 0x0e, 0xa0, 0xd8, 0x81, 0x1a, 0x4e, 0xb6, 0x3d, 0x97, 0xd8, 0x01, 0xb4, 0x06, 0x42, 0x50, 0x02, 0x92, 0xd8, 0x41, 0x44, 0xf0, - 0x11, 0x9a, 0xd8, 0x01, 0x4c, 0xe0, 0x8b, 0x99, 0xd8, 0x41, 0x46, 0xee, - 0x11, 0x9c, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x4e, 0xe6, 0x73, 0x91, 0xd8, - 0x01, 0x07, 0x0e, 0xcb, 0x01, 0xff, 0x46, 0x98, 0x3c, 0x90, 0xd8, 0x01, - 0x48, 0xb1, 0x47, 0x8f, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x44, 0x69, 0x19, - 0x06, 0xd8, 0x81, 0xf2, 0x03, 0x46, 0x7f, 0xd0, 0x0a, 0xd8, 0x01, 0x46, - 0xc3, 0x61, 0x0b, 0xd8, 0x81, 0xce, 0x03, 0x46, 0x7d, 0x02, 0x0e, 0xd8, - 0x81, 0xcd, 0x01, 0xb2, 0xbe, 0x01, 0x06, 0xef, 0x11, 0x18, 0x50, 0xb9, + 0x11, 0x9a, 0xd8, 0x01, 0x4c, 0xe7, 0x8b, 0x99, 0xd8, 0x41, 0x46, 0xee, + 0x11, 0x9c, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x4e, 0xfb, 0x73, 0x91, 0xd8, + 0x01, 0x07, 0x2a, 0xcb, 0x01, 0xff, 0x46, 0xad, 0x3c, 0x90, 0xd8, 0x01, + 0x48, 0xc6, 0x47, 0x8f, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x44, 0x69, 0x19, + 0x06, 0xd8, 0x81, 0xf2, 0x03, 0x46, 0x9b, 0xd0, 0x0a, 0xd8, 0x01, 0x46, + 0xd8, 0x61, 0x0b, 0xd8, 0x81, 0xce, 0x03, 0x46, 0x7d, 0x02, 0x0e, 0xd8, + 0x81, 0xcd, 0x01, 0xb2, 0xbe, 0x01, 0x06, 0xef, 0x11, 0x18, 0x50, 0xce, 0x61, 0x13, 0xd8, 0xc1, 0x00, 0x07, 0xee, 0x11, 0x01, 0xff, 0x49, 0xb8, - 0x16, 0x25, 0xd8, 0x01, 0x44, 0x53, 0x09, 0x24, 0xd8, 0x41, 0x07, 0xbd, - 0xc4, 0x91, 0x01, 0xa3, 0x5f, 0x0e, 0x1c, 0x71, 0x4f, 0x44, 0x04, 0x0d, + 0x16, 0x25, 0xd8, 0x01, 0x44, 0x53, 0x09, 0x24, 0xd8, 0x41, 0x07, 0xd9, + 0xc4, 0x91, 0x01, 0xa3, 0x5f, 0x0e, 0x31, 0x71, 0x4f, 0x44, 0x04, 0x0d, 0xe6, 0xd8, 0x81, 0x37, 0x44, 0x53, 0x09, 0xdc, 0xd8, 0xc1, 0x00, 0x80, - 0x01, 0xff, 0x49, 0xcb, 0xad, 0xe2, 0xd8, 0x01, 0x06, 0xe9, 0x11, 0x17, + 0x01, 0xff, 0x49, 0xde, 0xad, 0xe2, 0xd8, 0x01, 0x06, 0xe9, 0x11, 0x17, 0x06, 0xef, 0x11, 0x01, 0xff, 0x44, 0x69, 0x19, 0xe0, 0xd8, 0x01, 0x49, 0xb8, 0x16, 0xdf, 0xd8, 0x01, 0x48, 0x2e, 0x23, 0xde, 0xd8, 0x41, 0x44, - 0x69, 0x19, 0xe1, 0xd8, 0x01, 0x45, 0xc3, 0x61, 0xe3, 0xd8, 0x41, 0x0a, - 0x82, 0x74, 0x01, 0xff, 0x46, 0xc3, 0x61, 0x43, 0xd8, 0x01, 0x42, 0x50, - 0x02, 0x31, 0xd8, 0x41, 0x44, 0x69, 0x19, 0xe5, 0xd8, 0x01, 0x48, 0xb1, + 0x69, 0x19, 0xe1, 0xd8, 0x01, 0x45, 0xd8, 0x61, 0xe3, 0xd8, 0x41, 0x0a, + 0x97, 0x74, 0x01, 0xff, 0x46, 0xd8, 0x61, 0x43, 0xd8, 0x01, 0x42, 0x50, + 0x02, 0x31, 0xd8, 0x41, 0x44, 0x69, 0x19, 0xe5, 0xd8, 0x01, 0x48, 0xc6, 0x47, 0xe4, 0xd8, 0x41, 0x45, 0x01, 0x04, 0xeb, 0xd8, 0x81, 0x23, 0xb5, - 0x01, 0xff, 0x4e, 0x80, 0x74, 0x37, 0xd8, 0x01, 0xb2, 0x01, 0xff, 0x45, - 0x30, 0xbb, 0xe7, 0xd8, 0x01, 0x09, 0xf8, 0x11, 0x01, 0xff, 0x46, 0x01, - 0x12, 0xe8, 0xd8, 0x01, 0x45, 0xa0, 0x18, 0xea, 0xd8, 0x41, 0x4b, 0x83, - 0x74, 0x3c, 0xd8, 0x41, 0x4c, 0x74, 0x88, 0x3b, 0xd8, 0x01, 0x4d, 0xef, - 0x7f, 0x3a, 0xd8, 0x41, 0x4d, 0xa2, 0x3d, 0x09, 0xd8, 0x01, 0x4a, 0xad, + 0x01, 0xff, 0x4e, 0x95, 0x74, 0x37, 0xd8, 0x01, 0xb2, 0x01, 0xff, 0x45, + 0x4c, 0xbb, 0xe7, 0xd8, 0x01, 0x09, 0xf8, 0x11, 0x01, 0xff, 0x46, 0x01, + 0x12, 0xe8, 0xd8, 0x01, 0x45, 0xa0, 0x18, 0xea, 0xd8, 0x41, 0x4b, 0x98, + 0x74, 0x3c, 0xd8, 0x41, 0x4c, 0x7b, 0x88, 0x3b, 0xd8, 0x01, 0x4d, 0xf6, + 0x7f, 0x3a, 0xd8, 0x41, 0x4d, 0xb7, 0x3d, 0x09, 0xd8, 0x01, 0x4a, 0xad, 0x16, 0xba, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x44, 0x69, 0x19, 0x10, 0xd8, - 0x81, 0xe8, 0x01, 0xa3, 0x7d, 0x46, 0xc3, 0x61, 0x12, 0xd8, 0x81, 0x70, - 0x46, 0xb1, 0x16, 0xa4, 0xd8, 0x01, 0xb2, 0x4c, 0x53, 0xb1, 0x47, 0x20, + 0x81, 0xe8, 0x01, 0xa3, 0x7d, 0x46, 0xd8, 0x61, 0x12, 0xd8, 0x81, 0x70, + 0x46, 0xb1, 0x16, 0xa4, 0xd8, 0x01, 0xb2, 0x4c, 0x53, 0xc6, 0x47, 0x20, 0xd8, 0x01, 0x45, 0xef, 0x11, 0x1e, 0xd8, 0x81, 0x06, 0x57, 0x95, 0x2d, 0x27, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x46, 0xe9, 0x2f, 0x3f, 0xd8, 0x81, 0x29, 0x44, 0x69, 0x19, 0x22, 0xd8, 0x01, 0xa3, 0x0f, 0xa8, 0x01, 0xff, - 0x45, 0xc4, 0x61, 0x2b, 0xd8, 0x01, 0x45, 0x3c, 0x67, 0x2a, 0xd8, 0x41, - 0x46, 0x65, 0x13, 0x29, 0xd8, 0x01, 0x4f, 0x83, 0x6a, 0x3d, 0xd8, 0x01, - 0x45, 0x3c, 0x77, 0x28, 0xd8, 0x41, 0x44, 0x8f, 0x0f, 0x3e, 0xd8, 0x41, - 0x4e, 0xa2, 0x3d, 0x11, 0xd8, 0x01, 0x43, 0xa1, 0x01, 0x86, 0xd8, 0xc1, + 0x45, 0xd9, 0x61, 0x2b, 0xd8, 0x01, 0x45, 0x51, 0x67, 0x2a, 0xd8, 0x41, + 0x46, 0x65, 0x13, 0x29, 0xd8, 0x01, 0x4f, 0x98, 0x6a, 0x3d, 0xd8, 0x01, + 0x45, 0x43, 0x77, 0x28, 0xd8, 0x41, 0x44, 0x8f, 0x0f, 0x3e, 0xd8, 0x41, + 0x4e, 0xb7, 0x3d, 0x11, 0xd8, 0x01, 0x43, 0xa1, 0x01, 0x86, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x44, 0x69, 0x19, 0x8b, 0xd8, 0x01, 0x49, 0xb8, - 0x16, 0x8c, 0xd8, 0x41, 0x52, 0xe5, 0x49, 0x23, 0xd8, 0x41, 0x48, 0xb9, + 0x16, 0x8c, 0xd8, 0x41, 0x52, 0xfa, 0x49, 0x23, 0xd8, 0x41, 0x48, 0xb9, 0x16, 0x15, 0xd8, 0x81, 0x18, 0x04, 0x0e, 0x0f, 0x01, 0xff, 0x47, 0xb0, 0x16, 0xa9, 0xd8, 0x01, 0x42, 0x05, 0x00, 0x1a, 0xd8, 0xc1, 0x00, 0x4b, - 0xec, 0x49, 0x33, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x46, 0x7f, 0xd0, 0x18, - 0xd8, 0x81, 0x3a, 0x46, 0xc3, 0x61, 0x19, 0xd8, 0x81, 0x2d, 0x4a, 0x31, - 0xa3, 0x16, 0xd8, 0x01, 0x4b, 0x61, 0x97, 0x17, 0xd8, 0x01, 0x06, 0xef, + 0x01, 0x4a, 0x33, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x46, 0x9b, 0xd0, 0x18, + 0xd8, 0x81, 0x3a, 0x46, 0xd8, 0x61, 0x19, 0xd8, 0x81, 0x2d, 0x4a, 0x44, + 0xa3, 0x16, 0xd8, 0x01, 0x4b, 0x74, 0x97, 0x17, 0xd8, 0x01, 0x06, 0xef, 0x11, 0x01, 0xff, 0x47, 0xa5, 0x2d, 0x34, 0xd8, 0x01, 0x44, 0x53, 0x09, 0x2d, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x44, 0x69, 0x19, 0x2f, 0xd8, - 0x01, 0x49, 0xb8, 0x16, 0x2e, 0xd8, 0x41, 0x4b, 0xec, 0x49, 0x32, 0xd8, - 0x41, 0x4e, 0x9e, 0x2d, 0x35, 0xd8, 0x41, 0x4f, 0x6c, 0x63, 0x21, 0xd8, - 0x41, 0x80, 0x01, 0xff, 0x43, 0x13, 0x01, 0x0c, 0xd8, 0x01, 0x49, 0x85, - 0x74, 0x14, 0xd8, 0xc1, 0x00, 0x4b, 0xec, 0x49, 0x26, 0xd8, 0x41, 0x4c, - 0xdc, 0x83, 0x1d, 0xd8, 0x41, 0x45, 0x01, 0x04, 0x76, 0xd8, 0x81, 0xca, - 0x01, 0x43, 0x2a, 0xca, 0x66, 0xd8, 0x81, 0x8f, 0x01, 0xb5, 0x01, 0xff, - 0xf0, 0x6d, 0xd8, 0x81, 0x1c, 0x46, 0x2f, 0xbb, 0x75, 0xd8, 0xc1, 0x00, - 0x80, 0x01, 0xff, 0x54, 0x50, 0x3e, 0xbc, 0xd8, 0x01, 0x55, 0x6a, 0x38, + 0x01, 0x49, 0xb8, 0x16, 0x2e, 0xd8, 0x41, 0x4b, 0x01, 0x4a, 0x32, 0xd8, + 0x41, 0x4e, 0x9e, 0x2d, 0x35, 0xd8, 0x41, 0x4f, 0x81, 0x63, 0x21, 0xd8, + 0x41, 0x80, 0x01, 0xff, 0x43, 0x13, 0x01, 0x0c, 0xd8, 0x01, 0x49, 0x9a, + 0x74, 0x14, 0xd8, 0xc1, 0x00, 0x4b, 0x01, 0x4a, 0x26, 0xd8, 0x41, 0x4c, + 0xe3, 0x83, 0x1d, 0xd8, 0x41, 0x45, 0x01, 0x04, 0x76, 0xd8, 0x81, 0xca, + 0x01, 0x43, 0x46, 0xca, 0x66, 0xd8, 0x81, 0x8f, 0x01, 0xb5, 0x01, 0xff, + 0xf0, 0x6d, 0xd8, 0x81, 0x1c, 0x46, 0x4b, 0xbb, 0x75, 0xd8, 0xc1, 0x00, + 0x80, 0x01, 0xff, 0x54, 0x65, 0x3e, 0xbc, 0xd8, 0x01, 0x55, 0x7f, 0x38, 0xcf, 0xd8, 0x01, 0x44, 0xfb, 0x03, 0x74, 0xd8, 0x41, 0x80, 0x01, 0xff, - 0x53, 0xd5, 0x43, 0x53, 0xd8, 0x81, 0x5b, 0x45, 0xe7, 0x0e, 0x02, 0xd8, - 0x81, 0x3e, 0x52, 0xa5, 0x16, 0xd0, 0xd8, 0x01, 0x48, 0xfd, 0xbe, 0x71, + 0x53, 0xea, 0x43, 0x53, 0xd8, 0x81, 0x5b, 0x45, 0xe7, 0x0e, 0x02, 0xd8, + 0x81, 0x3e, 0x52, 0xa5, 0x16, 0xd0, 0xd8, 0x01, 0x48, 0x19, 0xbf, 0x71, 0xd8, 0x01, 0x44, 0xfb, 0x03, 0x6c, 0xd8, 0x81, 0x11, 0x06, 0xef, 0x11, 0x01, 0xff, 0x47, 0xa5, 0x2d, 0x73, 0xd8, 0x01, 0x44, 0x53, 0x09, 0x6f, - 0xd8, 0x41, 0x80, 0x01, 0xff, 0x48, 0xfd, 0xbe, 0x70, 0xd8, 0x01, 0x06, + 0xd8, 0x41, 0x80, 0x01, 0xff, 0x48, 0x19, 0xbf, 0x70, 0xd8, 0x01, 0x06, 0xef, 0x11, 0x01, 0xff, 0x47, 0xa5, 0x2d, 0x72, 0xd8, 0x01, 0x44, 0x53, 0x09, 0x6e, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x4b, 0xac, 0x16, 0xc0, 0xd8, 0x01, 0x45, 0xef, 0x11, 0xec, 0xd8, 0xc1, 0x00, 0x45, 0xfa, 0x03, 0xed, 0xd8, 0x41, 0x45, 0xfa, 0x03, 0x54, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x56, 0x52, 0x19, 0x49, 0xd8, 0x01, 0x5e, 0xe9, 0x11, 0xe9, 0xd8, 0x01, 0x5c, - 0xa5, 0x16, 0xd6, 0xd8, 0x81, 0x17, 0x48, 0xfd, 0xbe, 0x68, 0xd8, 0x01, + 0xa5, 0x16, 0xd6, 0xd8, 0x81, 0x17, 0x48, 0x19, 0xbf, 0x68, 0xd8, 0x01, 0x06, 0xef, 0x11, 0x01, 0xff, 0x47, 0xa5, 0x2d, 0x69, 0xd8, 0x01, 0x44, - 0x53, 0x09, 0x67, 0xd8, 0x41, 0x45, 0xc1, 0x39, 0xd7, 0xd8, 0x41, 0x80, + 0x53, 0x09, 0x67, 0xd8, 0x41, 0x45, 0xd6, 0x39, 0xd7, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x45, 0xe7, 0x0e, 0x01, 0xd8, 0x81, 0x2d, 0x07, 0xb1, 0x16, 0x1d, 0x07, 0x7d, 0x02, 0x06, 0x4b, 0xac, 0x16, 0xb1, 0xd8, 0x41, 0x4b, 0xac, 0x16, 0xce, 0xd8, 0x81, 0x06, 0x42, 0x50, 0x02, 0xc7, 0xd8, 0x41, 0x45, 0x68, 0x19, 0xd5, 0xd8, 0x41, 0x45, 0xe7, 0x0e, 0xa1, 0xd8, 0x01, 0x42, 0x50, 0x02, 0x94, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x44, 0x69, 0x19, - 0x07, 0xd8, 0x01, 0x45, 0xc3, 0x61, 0x0d, 0xd8, 0x01, 0x46, 0x7d, 0x02, + 0x07, 0xd8, 0x01, 0x45, 0xd8, 0x61, 0x0d, 0xd8, 0x01, 0x46, 0x7d, 0x02, 0x0f, 0xd8, 0x81, 0x06, 0x4b, 0xac, 0x16, 0xbb, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x05, 0x0d, 0x0f, 0x12, 0x46, 0xb1, 0x16, 0xa5, 0xd8, 0x01, 0x44, 0x03, 0x07, 0x87, 0xd8, 0x01, 0x45, 0xef, 0x11, 0x1f, 0xd8, 0x41, 0x47, @@ -4456,89 +4457,89 @@ static const unsigned char uname2c_tree[210697] = { 0xff, 0x5d, 0xa4, 0x13, 0xad, 0xd8, 0x01, 0x46, 0xb1, 0x16, 0xb3, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x42, 0x9e, 0x01, 0xd3, 0xd8, 0x01, 0x43, 0x09, 0x07, 0xd2, 0xd8, 0x41, 0x45, 0xe7, 0x0e, 0xa3, 0xd8, 0x81, 0x06, 0x42, - 0x50, 0x02, 0x96, 0xd8, 0x41, 0x52, 0xf7, 0x49, 0x9f, 0xd8, 0xc1, 0x00, + 0x50, 0x02, 0x96, 0xd8, 0x41, 0x52, 0x0c, 0x4a, 0x9f, 0xd8, 0xc1, 0x00, 0x44, 0x8f, 0x0f, 0x9e, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x07, 0x7d, 0x02, 0x23, 0x4b, 0xac, 0x16, 0xc3, 0xd8, 0x81, 0x16, 0x45, 0xef, 0x11, 0xf4, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x42, 0x9e, 0x01, 0xf3, 0xd8, 0x01, 0x43, 0x09, 0x07, 0xf2, 0xd8, 0x41, 0x44, 0x8f, 0x0f, 0xc2, 0xd8, 0x41, 0x46, 0xb1, 0x16, 0xa8, 0xd8, 0x01, 0x44, 0x03, 0x07, 0x89, 0xd8, 0x41, - 0x47, 0xc6, 0x08, 0x0a, 0xd9, 0x01, 0x48, 0x68, 0x3f, 0x09, 0xd9, 0x01, + 0x47, 0xc6, 0x08, 0x0a, 0xd9, 0x01, 0x48, 0x7d, 0x3f, 0x09, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0x08, 0xd9, 0x41, 0x1c, 0x1d, 0x15, 0x72, 0xa9, 0x52, - 0xac, 0x1c, 0x08, 0x85, 0xbf, 0x06, 0x48, 0xa1, 0x14, 0x88, 0xda, 0x41, - 0x47, 0xf1, 0xc5, 0x12, 0xda, 0x01, 0x47, 0xbd, 0x86, 0x11, 0xda, 0x01, - 0x48, 0x7d, 0xc2, 0x13, 0xda, 0x41, 0x04, 0xf1, 0x0c, 0x06, 0x5a, 0x1c, + 0xac, 0x1c, 0x08, 0xa1, 0xbf, 0x06, 0x48, 0xa1, 0x14, 0x88, 0xda, 0x41, + 0x47, 0x0d, 0xc6, 0x12, 0xda, 0x01, 0x47, 0xc4, 0x86, 0x11, 0xda, 0x01, + 0x48, 0x99, 0xc2, 0x13, 0xda, 0x41, 0x04, 0xf1, 0x0c, 0x06, 0x5a, 0x1c, 0x1f, 0x70, 0xda, 0x41, 0x06, 0x0f, 0x1a, 0x1a, 0xb3, 0x01, 0xff, 0x49, - 0xca, 0x65, 0x1f, 0xd9, 0x01, 0x05, 0x3d, 0x06, 0x01, 0xff, 0x48, 0x68, - 0x3f, 0x1e, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0x1c, 0xd9, 0x41, 0x48, 0x68, - 0x3f, 0x1d, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0x1b, 0xd9, 0x41, 0x0c, 0xc4, + 0xdf, 0x65, 0x1f, 0xd9, 0x01, 0x05, 0x3d, 0x06, 0x01, 0xff, 0x48, 0x7d, + 0x3f, 0x1e, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0x1c, 0xd9, 0x41, 0x48, 0x7d, + 0x3f, 0x1d, 0xd9, 0x01, 0x46, 0xe5, 0x08, 0x1b, 0xd9, 0x41, 0x0c, 0xcb, 0x89, 0x06, 0x44, 0xe0, 0x08, 0x7e, 0xda, 0x41, 0xd2, 0x9b, 0xda, 0x01, 0xd3, 0x9c, 0xda, 0x01, 0xd4, 0x9d, 0xda, 0x01, 0xd5, 0x9e, 0xda, 0x01, - 0xd6, 0x9f, 0xda, 0x41, 0x4f, 0x87, 0x66, 0x07, 0xda, 0x01, 0x4a, 0xe9, + 0xd6, 0x9f, 0xda, 0x41, 0x4f, 0x9c, 0x66, 0x07, 0xda, 0x01, 0x4a, 0xfc, 0xa9, 0x08, 0xda, 0xc1, 0x00, 0x48, 0xa6, 0x0b, 0x09, 0xda, 0x41, 0x43, - 0x41, 0x18, 0x30, 0xda, 0x01, 0x49, 0xc7, 0xb7, 0x6c, 0xda, 0x01, 0x02, - 0x4d, 0x00, 0x01, 0xff, 0x80, 0xb2, 0x01, 0x0f, 0x01, 0x65, 0x9b, 0x01, - 0x05, 0xd9, 0xdb, 0x4e, 0x07, 0x83, 0xc8, 0x38, 0x02, 0x31, 0x01, 0x01, + 0x41, 0x18, 0x30, 0xda, 0x01, 0x49, 0xe3, 0xb7, 0x6c, 0xda, 0x01, 0x02, + 0x4d, 0x00, 0x01, 0xff, 0x80, 0xb2, 0x01, 0x0f, 0x16, 0x65, 0x9b, 0x01, + 0x05, 0xf5, 0xdb, 0x4e, 0x07, 0x9f, 0xc8, 0x38, 0x02, 0x31, 0x01, 0x01, 0xff, 0x46, 0xfa, 0x0b, 0x16, 0xda, 0x01, 0x05, 0x22, 0x00, 0x1d, 0x44, - 0xfb, 0x03, 0x14, 0xda, 0x01, 0x48, 0x25, 0xc1, 0x15, 0xda, 0x01, 0x04, - 0xbd, 0x19, 0x01, 0xff, 0x45, 0xfa, 0x03, 0x1a, 0xda, 0x01, 0x4d, 0x1f, + 0xfb, 0x03, 0x14, 0xda, 0x01, 0x48, 0x41, 0xc1, 0x15, 0xda, 0x01, 0x04, + 0xbd, 0x19, 0x01, 0xff, 0x45, 0xfa, 0x03, 0x1a, 0xda, 0x01, 0x4d, 0x26, 0x7f, 0x1c, 0xda, 0x41, 0x46, 0xfa, 0x0b, 0x1b, 0xda, 0x01, 0x44, 0xfb, - 0x03, 0x19, 0xda, 0x41, 0x44, 0xa5, 0x01, 0x1f, 0xda, 0x01, 0x4a, 0xfb, - 0x41, 0x20, 0xda, 0x01, 0x42, 0x50, 0x02, 0x1e, 0xda, 0x41, 0x0b, 0xe8, - 0x43, 0x29, 0x0a, 0xbf, 0x1b, 0x01, 0xff, 0xa3, 0x16, 0x48, 0xb1, 0x47, - 0x21, 0xda, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4b, 0x6b, 0x54, 0x23, 0xda, + 0x03, 0x19, 0xda, 0x41, 0x44, 0xa5, 0x01, 0x1f, 0xda, 0x01, 0x4a, 0x10, + 0x42, 0x20, 0xda, 0x01, 0x42, 0x50, 0x02, 0x1e, 0xda, 0x41, 0x0b, 0xfd, + 0x43, 0x29, 0x0a, 0xbf, 0x1b, 0x01, 0xff, 0xa3, 0x16, 0x48, 0xc6, 0x47, + 0x21, 0xda, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4b, 0x80, 0x54, 0x23, 0xda, 0x01, 0x46, 0x3b, 0x01, 0x22, 0xda, 0x41, 0x47, 0x0e, 0x0a, 0x29, 0xda, - 0x01, 0x45, 0x23, 0x20, 0x27, 0xda, 0x41, 0x46, 0x98, 0x3c, 0x28, 0xda, - 0x01, 0x48, 0xb1, 0x47, 0x24, 0xda, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4b, - 0x6b, 0x54, 0x26, 0xda, 0x01, 0x46, 0x3b, 0x01, 0x25, 0xda, 0x41, 0x44, - 0xa5, 0x01, 0x0c, 0xda, 0x01, 0x47, 0xbd, 0x86, 0x0b, 0xda, 0x01, 0x42, - 0x50, 0x02, 0x0a, 0xda, 0x41, 0x06, 0xef, 0xcf, 0x06, 0x44, 0xaa, 0x9c, - 0x1d, 0xda, 0x41, 0x48, 0x68, 0x3f, 0x18, 0xda, 0x01, 0x46, 0xe5, 0x08, - 0x17, 0xda, 0x41, 0x0f, 0x73, 0x6b, 0x48, 0x07, 0xa7, 0xcd, 0x01, 0xff, - 0x0a, 0x53, 0x2e, 0x33, 0x50, 0xe9, 0x5c, 0xfd, 0xd9, 0x01, 0x44, 0xbe, - 0xe4, 0xf7, 0xd9, 0x01, 0x47, 0x33, 0xc7, 0xfe, 0xd9, 0x01, 0x47, 0x85, - 0x3e, 0xfa, 0xd9, 0x01, 0xb3, 0x06, 0x45, 0x57, 0xe0, 0xf9, 0xd9, 0x41, - 0x4b, 0x51, 0x95, 0xfb, 0xd9, 0x81, 0x06, 0x43, 0x13, 0x01, 0xf8, 0xd9, - 0x41, 0x4c, 0x6a, 0x54, 0xfc, 0xd9, 0x41, 0x45, 0x0f, 0x1a, 0xf6, 0xd9, - 0x01, 0x45, 0x3c, 0x06, 0xf5, 0xd9, 0x41, 0x4c, 0xb8, 0x86, 0x0e, 0xda, - 0x01, 0x08, 0xcd, 0xbe, 0x06, 0x4a, 0xdf, 0xa9, 0x0f, 0xda, 0x41, 0x44, + 0x01, 0x45, 0x23, 0x20, 0x27, 0xda, 0x41, 0x46, 0xad, 0x3c, 0x28, 0xda, + 0x01, 0x48, 0xc6, 0x47, 0x24, 0xda, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4b, + 0x80, 0x54, 0x26, 0xda, 0x01, 0x46, 0x3b, 0x01, 0x25, 0xda, 0x41, 0x44, + 0xa5, 0x01, 0x0c, 0xda, 0x01, 0x47, 0xc4, 0x86, 0x0b, 0xda, 0x01, 0x42, + 0x50, 0x02, 0x0a, 0xda, 0x41, 0x06, 0x0b, 0xd0, 0x06, 0x44, 0xbd, 0x9c, + 0x1d, 0xda, 0x41, 0x48, 0x7d, 0x3f, 0x18, 0xda, 0x01, 0x46, 0xe5, 0x08, + 0x17, 0xda, 0x41, 0x0f, 0x88, 0x6b, 0x48, 0x07, 0xc3, 0xcd, 0x01, 0xff, + 0x0a, 0x53, 0x2e, 0x33, 0x50, 0xfe, 0x5c, 0xfd, 0xd9, 0x01, 0x44, 0xda, + 0xe4, 0xf7, 0xd9, 0x01, 0x47, 0x4f, 0xc7, 0xfe, 0xd9, 0x01, 0x47, 0x9a, + 0x3e, 0xfa, 0xd9, 0x01, 0xb3, 0x06, 0x45, 0x73, 0xe0, 0xf9, 0xd9, 0x41, + 0x4b, 0x64, 0x95, 0xfb, 0xd9, 0x81, 0x06, 0x43, 0x13, 0x01, 0xf8, 0xd9, + 0x41, 0x4c, 0x7f, 0x54, 0xfc, 0xd9, 0x41, 0x45, 0x0f, 0x1a, 0xf6, 0xd9, + 0x01, 0x45, 0x3c, 0x06, 0xf5, 0xd9, 0x41, 0x4c, 0xbf, 0x86, 0x0e, 0xda, + 0x01, 0x08, 0xe9, 0xbe, 0x06, 0x4a, 0xf2, 0xa9, 0x0f, 0xda, 0x41, 0x44, 0xa5, 0x01, 0x0d, 0xda, 0x01, 0x42, 0x50, 0x02, 0x10, 0xda, 0x41, 0x06, - 0x00, 0x98, 0x0f, 0xaf, 0x01, 0xff, 0x43, 0xac, 0x10, 0x8a, 0xda, 0x01, - 0x43, 0x1a, 0x04, 0x87, 0xda, 0x41, 0x47, 0xbd, 0x86, 0x2b, 0xda, 0x01, - 0x46, 0xb1, 0xd4, 0x2a, 0xda, 0x01, 0x46, 0x95, 0xd5, 0x2c, 0xda, 0x41, - 0x05, 0x07, 0xdb, 0x17, 0x04, 0xcc, 0xdf, 0x01, 0xff, 0x47, 0xc6, 0x08, - 0x10, 0xd9, 0x01, 0x48, 0x68, 0x3f, 0x0f, 0xd9, 0x01, 0x46, 0xe5, 0x08, - 0x0e, 0xd9, 0x41, 0x46, 0x39, 0xd1, 0x3a, 0xda, 0x01, 0x46, 0x95, 0xd2, - 0x39, 0xda, 0x41, 0x04, 0x50, 0x85, 0x11, 0x04, 0x95, 0xd5, 0x01, 0xff, - 0x50, 0x69, 0x5a, 0x38, 0xda, 0x01, 0x46, 0x0a, 0x05, 0x36, 0xda, 0x41, - 0x50, 0x69, 0x5a, 0x37, 0xda, 0x01, 0x47, 0x1e, 0x61, 0x35, 0xda, 0x41, - 0x05, 0xdf, 0xda, 0x3e, 0x06, 0xbf, 0x40, 0x01, 0xff, 0x06, 0x1c, 0x07, - 0x1d, 0x06, 0xad, 0x02, 0x01, 0xff, 0x53, 0x9c, 0x43, 0x9f, 0xf5, 0x01, - 0x53, 0x51, 0x45, 0x98, 0xf5, 0x01, 0x54, 0xd8, 0x0e, 0x99, 0xf5, 0x01, - 0x51, 0xd8, 0x58, 0x9e, 0xf5, 0x41, 0x53, 0x9c, 0x43, 0xa1, 0xf5, 0x01, - 0x53, 0x51, 0x45, 0x9a, 0xf5, 0x01, 0x54, 0xd8, 0x0e, 0x9b, 0xf5, 0x01, - 0x51, 0xd8, 0x58, 0xa0, 0xf5, 0x41, 0xa4, 0xb8, 0x04, 0x50, 0x89, 0x5c, - 0xc9, 0x15, 0x01, 0x07, 0xf1, 0x04, 0x86, 0x02, 0x10, 0x19, 0x60, 0xf5, - 0x01, 0xb3, 0x43, 0x0b, 0x5b, 0x70, 0x01, 0xff, 0xa1, 0x25, 0xe5, 0xb8, + 0x13, 0x98, 0x0f, 0xaf, 0x01, 0xff, 0x43, 0xac, 0x10, 0x8a, 0xda, 0x01, + 0x43, 0x1a, 0x04, 0x87, 0xda, 0x41, 0x47, 0xc4, 0x86, 0x2b, 0xda, 0x01, + 0x46, 0xcd, 0xd4, 0x2a, 0xda, 0x01, 0x46, 0xb1, 0xd5, 0x2c, 0xda, 0x41, + 0x05, 0x23, 0xdb, 0x17, 0x04, 0xe8, 0xdf, 0x01, 0xff, 0x47, 0xc6, 0x08, + 0x10, 0xd9, 0x01, 0x48, 0x7d, 0x3f, 0x0f, 0xd9, 0x01, 0x46, 0xe5, 0x08, + 0x0e, 0xd9, 0x41, 0x46, 0x55, 0xd1, 0x3a, 0xda, 0x01, 0x46, 0xb1, 0xd2, + 0x39, 0xda, 0x41, 0x04, 0x57, 0x85, 0x11, 0x04, 0xb1, 0xd5, 0x01, 0xff, + 0x50, 0x7e, 0x5a, 0x38, 0xda, 0x01, 0x46, 0x0a, 0x05, 0x36, 0xda, 0x41, + 0x50, 0x7e, 0x5a, 0x37, 0xda, 0x01, 0x47, 0x33, 0x61, 0x35, 0xda, 0x41, + 0x05, 0xfb, 0xda, 0x3e, 0x06, 0xd4, 0x40, 0x01, 0xff, 0x06, 0x1c, 0x07, + 0x1d, 0x06, 0xad, 0x02, 0x01, 0xff, 0x53, 0xb1, 0x43, 0x9f, 0xf5, 0x01, + 0x53, 0x66, 0x45, 0x98, 0xf5, 0x01, 0x54, 0xd8, 0x0e, 0x99, 0xf5, 0x01, + 0x51, 0xed, 0x58, 0x9e, 0xf5, 0x41, 0x53, 0xb1, 0x43, 0xa1, 0xf5, 0x01, + 0x53, 0x66, 0x45, 0x9a, 0xf5, 0x01, 0x54, 0xd8, 0x0e, 0x9b, 0xf5, 0x01, + 0x51, 0xed, 0x58, 0xa0, 0xf5, 0x41, 0xa4, 0xb8, 0x04, 0x50, 0x9e, 0x5c, + 0xc9, 0x15, 0x01, 0x07, 0xf1, 0x04, 0x86, 0x02, 0x10, 0x2e, 0x60, 0xf5, + 0x01, 0xb3, 0x43, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xa1, 0x25, 0xe5, 0xb8, 0x15, 0x01, 0xe9, 0xb0, 0x15, 0x81, 0x18, 0xef, 0xba, 0x15, 0x01, 0xf5, - 0xb2, 0x15, 0x81, 0x0b, 0x49, 0x76, 0xb7, 0xb4, 0x15, 0xc1, 0x00, 0xf2, + 0xb2, 0x15, 0x81, 0x0b, 0x49, 0x92, 0xb7, 0xb4, 0x15, 0xc1, 0x00, 0xf2, 0xb5, 0x15, 0x41, 0xf5, 0xb3, 0x15, 0x41, 0xe9, 0xb1, 0x15, 0x41, 0xe1, - 0xaf, 0x15, 0x01, 0xe9, 0xb9, 0x15, 0x01, 0x4a, 0xd5, 0xa4, 0xdc, 0x15, + 0xaf, 0x15, 0x01, 0xe9, 0xb9, 0x15, 0x01, 0x4a, 0xe8, 0xa4, 0xdc, 0x15, 0x81, 0x04, 0xf5, 0xbb, 0x15, 0x41, 0xf5, 0xdd, 0x15, 0x41, 0xa5, 0x2e, 0x04, 0xdc, 0x02, 0x01, 0xff, 0x48, 0x5b, 0x14, 0xbd, 0x15, 0x01, 0x4b, - 0x3b, 0x21, 0xbc, 0x15, 0x01, 0x45, 0xab, 0x3a, 0xc0, 0x15, 0x01, 0x47, - 0xa1, 0xcb, 0xc1, 0x15, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x49, - 0x21, 0xbf, 0x15, 0x01, 0x45, 0x69, 0x46, 0xbe, 0x15, 0x41, 0x0b, 0x91, + 0x3b, 0x21, 0xbc, 0x15, 0x01, 0x45, 0xc0, 0x3a, 0xc0, 0x15, 0x01, 0x47, + 0xbd, 0xcb, 0xc1, 0x15, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x49, + 0x21, 0xbf, 0x15, 0x01, 0x45, 0x7e, 0x46, 0xbe, 0x15, 0x41, 0x0b, 0xa4, 0x92, 0x11, 0x08, 0x72, 0x1e, 0x01, 0xff, 0x43, 0x16, 0x00, 0xc5, 0x15, - 0x01, 0x43, 0xc5, 0x06, 0xc4, 0x15, 0x41, 0x4b, 0x2b, 0x93, 0xcf, 0x15, - 0x81, 0x5e, 0x05, 0x51, 0x00, 0x01, 0xff, 0x0c, 0xec, 0x85, 0x43, 0x50, - 0xd9, 0x5b, 0xd1, 0x15, 0x01, 0x53, 0xba, 0x46, 0xd3, 0x15, 0x01, 0x10, - 0xf9, 0x5f, 0x21, 0x52, 0x61, 0x4f, 0xd4, 0x15, 0x01, 0x03, 0x19, 0x01, - 0x01, 0xff, 0x09, 0x7f, 0xae, 0x06, 0x4d, 0xc0, 0x46, 0xd2, 0x15, 0x41, - 0x50, 0xc9, 0x5b, 0xcb, 0x15, 0x01, 0x52, 0x4b, 0x50, 0xca, 0x15, 0x41, - 0x49, 0xc4, 0x46, 0xcc, 0x15, 0x01, 0x50, 0xd9, 0x5b, 0xcd, 0x15, 0x01, - 0x50, 0x69, 0x61, 0xce, 0x15, 0x41, 0x4f, 0xa5, 0x66, 0xd7, 0x15, 0x01, - 0x44, 0xf9, 0x5f, 0xd5, 0x15, 0x01, 0x4e, 0xbe, 0x76, 0xd6, 0x15, 0x41, - 0x4a, 0x8e, 0x8e, 0xd0, 0x15, 0x41, 0xd1, 0xc6, 0x15, 0x01, 0xd2, 0xc7, + 0x01, 0x43, 0xc5, 0x06, 0xc4, 0x15, 0x41, 0x4b, 0x3e, 0x93, 0xcf, 0x15, + 0x81, 0x5e, 0x05, 0x51, 0x00, 0x01, 0xff, 0x0c, 0xf3, 0x85, 0x43, 0x50, + 0xee, 0x5b, 0xd1, 0x15, 0x01, 0x53, 0xcf, 0x46, 0xd3, 0x15, 0x01, 0x10, + 0x0e, 0x60, 0x21, 0x52, 0x76, 0x4f, 0xd4, 0x15, 0x01, 0x03, 0x19, 0x01, + 0x01, 0xff, 0x09, 0x9b, 0xae, 0x06, 0x4d, 0xd5, 0x46, 0xd2, 0x15, 0x41, + 0x50, 0xde, 0x5b, 0xcb, 0x15, 0x01, 0x52, 0x60, 0x50, 0xca, 0x15, 0x41, + 0x49, 0xd9, 0x46, 0xcc, 0x15, 0x01, 0x50, 0xee, 0x5b, 0xcd, 0x15, 0x01, + 0x50, 0x7e, 0x61, 0xce, 0x15, 0x41, 0x4f, 0xba, 0x66, 0xd7, 0x15, 0x01, + 0x44, 0x0e, 0x60, 0xd5, 0x15, 0x01, 0x4e, 0xc5, 0x76, 0xd6, 0x15, 0x41, + 0x4a, 0xa1, 0x8e, 0xd0, 0x15, 0x41, 0xd1, 0xc6, 0x15, 0x01, 0xd2, 0xc7, 0x15, 0x01, 0xd3, 0xc8, 0x15, 0x41, 0xe1, 0x80, 0x15, 0x81, 0x8f, 0x02, 0xa2, 0x82, 0x02, 0xa3, 0xf5, 0x01, 0xa4, 0xdc, 0x01, 0xe5, 0x8a, 0x15, 0x01, 0xa7, 0xcb, 0x01, 0x42, 0x22, 0x00, 0xae, 0x15, 0x01, 0xe9, 0x82, @@ -4546,10 +4547,10 @@ static const unsigned char uname2c_tree[210697] = { 0x00, 0xa9, 0x15, 0x01, 0x42, 0x6c, 0x00, 0xa6, 0x15, 0x01, 0xae, 0x7d, 0xef, 0x8c, 0x15, 0x01, 0xb0, 0x6d, 0x42, 0x71, 0x00, 0xa8, 0x15, 0x01, 0xb3, 0x55, 0xb4, 0x2c, 0xf5, 0x84, 0x15, 0x81, 0x23, 0xb6, 0x06, 0x42, - 0x20, 0x20, 0xa7, 0x15, 0x41, 0xe1, 0xaa, 0x15, 0x01, 0x07, 0x77, 0xb7, + 0x20, 0x20, 0xa7, 0x15, 0x41, 0xe1, 0xaa, 0x15, 0x01, 0x07, 0x93, 0xb7, 0x01, 0xff, 0xec, 0x88, 0x15, 0x81, 0x09, 0xf2, 0x86, 0x15, 0xc1, 0x00, 0xf2, 0x87, 0x15, 0x41, 0xec, 0x89, 0x15, 0x41, 0xf5, 0x85, 0x15, 0x41, - 0xe1, 0x9d, 0x15, 0x01, 0xa8, 0x17, 0xb4, 0x0b, 0x55, 0x8c, 0x3a, 0xd9, + 0xe1, 0x9d, 0x15, 0x01, 0xa8, 0x17, 0xb4, 0x0b, 0x55, 0xa1, 0x3a, 0xd9, 0x15, 0xc1, 0x00, 0xe9, 0xda, 0x15, 0x41, 0xe1, 0x98, 0x15, 0x01, 0x42, 0x22, 0x00, 0x99, 0x15, 0x41, 0xe1, 0x9e, 0x15, 0x01, 0x56, 0xae, 0x32, 0xd8, 0x15, 0x41, 0xe1, 0xad, 0x15, 0x01, 0x42, 0x22, 0x00, 0xab, 0x15, @@ -4563,39 +4564,39 @@ static const unsigned char uname2c_tree[210697] = { 0x41, 0xe1, 0x9a, 0x15, 0x01, 0x42, 0x22, 0x00, 0x9b, 0x15, 0x41, 0xe1, 0x93, 0x15, 0x01, 0x42, 0x22, 0x00, 0x94, 0x15, 0x41, 0xe1, 0xa4, 0x15, 0x01, 0x42, 0x22, 0x00, 0xa5, 0x15, 0x41, 0xe1, 0x81, 0x15, 0x01, 0xe9, - 0x8b, 0x15, 0x01, 0x4a, 0xd5, 0xa4, 0xdb, 0x15, 0x01, 0xf5, 0x8d, 0x15, - 0x41, 0x44, 0x0b, 0x1e, 0xc2, 0x15, 0x01, 0x4b, 0xcc, 0x98, 0xc3, 0x15, + 0x8b, 0x15, 0x01, 0x4a, 0xe8, 0xa4, 0xdb, 0x15, 0x01, 0xf5, 0x8d, 0x15, + 0x41, 0x44, 0x0b, 0x1e, 0xc2, 0x15, 0x01, 0x4b, 0xdf, 0x98, 0xc3, 0x15, 0x41, 0xa1, 0xd6, 0x01, 0x43, 0x0d, 0x31, 0x11, 0xf4, 0x01, 0xa9, 0xad, - 0x01, 0xaf, 0x14, 0xb2, 0x06, 0x4d, 0x11, 0x82, 0xe2, 0x29, 0x40, 0x43, + 0x01, 0xaf, 0x14, 0xb2, 0x06, 0x4d, 0x18, 0x82, 0xe2, 0x29, 0x40, 0x43, 0xd9, 0x19, 0x90, 0xf9, 0x01, 0x42, 0x2a, 0x0d, 0x37, 0xf9, 0x41, 0x5d, - 0x30, 0x13, 0x2f, 0xf9, 0x01, 0x4a, 0x6f, 0xa6, 0x20, 0xf3, 0x01, 0x06, - 0x59, 0x2c, 0x7b, 0x02, 0x34, 0x00, 0x0c, 0x50, 0x99, 0x61, 0x7d, 0x23, + 0x30, 0x13, 0x2f, 0xf9, 0x01, 0x4a, 0x82, 0xa6, 0x20, 0xf3, 0x01, 0x06, + 0x59, 0x2c, 0x7b, 0x02, 0x34, 0x00, 0x0c, 0x50, 0xae, 0x61, 0x7d, 0x23, 0x00, 0x43, 0x15, 0x01, 0xbf, 0xf6, 0x41, 0x80, 0x26, 0x44, 0x18, 0x29, - 0x70, 0xf3, 0x01, 0x0c, 0x08, 0x88, 0x04, 0xf3, 0x73, 0xfa, 0x41, 0x52, - 0x29, 0x4b, 0xa1, 0xbc, 0x01, 0x49, 0xa3, 0xae, 0xa2, 0xbc, 0x01, 0x4e, - 0xa4, 0x72, 0xa0, 0xbc, 0x01, 0x47, 0xa4, 0xcc, 0xa3, 0xbc, 0x41, 0xa2, - 0x35, 0x49, 0xc5, 0x34, 0xdf, 0x2a, 0x80, 0x28, 0x49, 0x03, 0xb2, 0xde, - 0x2a, 0x00, 0x66, 0x50, 0x06, 0x44, 0x29, 0x00, 0x53, 0x9e, 0x47, 0x4e, - 0x2b, 0x00, 0x47, 0xab, 0xcc, 0xe0, 0x2a, 0xc0, 0x00, 0x80, 0x01, 0xff, - 0x55, 0xb9, 0x34, 0xe9, 0x2a, 0x00, 0x4d, 0x42, 0x59, 0xe8, 0x2a, 0x40, - 0x4d, 0xed, 0x78, 0xe7, 0x2a, 0x40, 0x56, 0xe6, 0x2e, 0x4f, 0x2b, 0x00, - 0x6c, 0x92, 0x01, 0x5f, 0x2b, 0x40, 0x44, 0x2e, 0xe4, 0xcd, 0xf6, 0x01, - 0x47, 0x49, 0xcc, 0xd2, 0xf6, 0x41, 0x43, 0x66, 0x21, 0xe1, 0xf6, 0x01, - 0x03, 0xc5, 0x00, 0x0a, 0x4a, 0xcf, 0xa5, 0xe9, 0x26, 0x00, 0xf0, 0xa2, + 0x70, 0xf3, 0x01, 0x0c, 0x0f, 0x88, 0x04, 0xf3, 0x73, 0xfa, 0x41, 0x52, + 0x3e, 0x4b, 0xa1, 0xbc, 0x01, 0x49, 0xbf, 0xae, 0xa2, 0xbc, 0x01, 0x4e, + 0xb9, 0x72, 0xa0, 0xbc, 0x01, 0x47, 0xc0, 0xcc, 0xa3, 0xbc, 0x41, 0xa2, + 0x35, 0x49, 0xc5, 0x34, 0xdf, 0x2a, 0x80, 0x28, 0x49, 0x1f, 0xb2, 0xde, + 0x2a, 0x00, 0x66, 0x50, 0x06, 0x44, 0x29, 0x00, 0x53, 0xb3, 0x47, 0x4e, + 0x2b, 0x00, 0x47, 0xc7, 0xcc, 0xe0, 0x2a, 0xc0, 0x00, 0x80, 0x01, 0xff, + 0x55, 0xb9, 0x34, 0xe9, 0x2a, 0x00, 0x4d, 0x57, 0x59, 0xe8, 0x2a, 0x40, + 0x4d, 0xf4, 0x78, 0xe7, 0x2a, 0x40, 0x56, 0xe6, 0x2e, 0x4f, 0x2b, 0x00, + 0x6c, 0x92, 0x01, 0x5f, 0x2b, 0x40, 0x44, 0x4a, 0xe4, 0xcd, 0xf6, 0x01, + 0x47, 0x65, 0xcc, 0xd2, 0xf6, 0x41, 0x43, 0x66, 0x21, 0xe1, 0xf6, 0x01, + 0x03, 0xc5, 0x00, 0x0a, 0x4a, 0xe2, 0xa5, 0xe9, 0x26, 0x00, 0xf0, 0xa2, 0xf6, 0x41, 0x42, 0x9e, 0x01, 0x0f, 0x00, 0x00, 0x43, 0x09, 0x07, 0x0e, - 0x00, 0x40, 0x0c, 0xa7, 0x02, 0xaf, 0x07, 0x49, 0xa6, 0xa7, 0xe8, 0xfa, - 0x01, 0x50, 0x79, 0x5e, 0x58, 0xf9, 0x01, 0x45, 0xfa, 0xdd, 0x18, 0x26, - 0x00, 0xb2, 0xbb, 0x02, 0xb6, 0x01, 0xff, 0x46, 0xcd, 0xd0, 0x67, 0xf3, - 0x01, 0x0b, 0xd5, 0x85, 0x01, 0xff, 0xa1, 0xfc, 0x01, 0x43, 0xc7, 0xe8, - 0x5a, 0x04, 0x01, 0x46, 0x55, 0xd0, 0x57, 0x04, 0x01, 0x44, 0x8a, 0xe4, + 0x00, 0x40, 0x0c, 0xa7, 0x02, 0xaf, 0x07, 0x49, 0xb9, 0xa7, 0xe8, 0xfa, + 0x01, 0x50, 0x8e, 0x5e, 0x58, 0xf9, 0x01, 0x45, 0x16, 0xde, 0x18, 0x26, + 0x00, 0xb2, 0xbb, 0x02, 0xb6, 0x01, 0xff, 0x46, 0xe9, 0xd0, 0x67, 0xf3, + 0x01, 0x0b, 0xdc, 0x85, 0x01, 0xff, 0xa1, 0xfc, 0x01, 0x43, 0xe3, 0xe8, + 0x5a, 0x04, 0x01, 0x46, 0x71, 0xd0, 0x57, 0x04, 0x01, 0x44, 0xa6, 0xe4, 0x5b, 0x04, 0x01, 0xa5, 0xd1, 0x01, 0x43, 0x6b, 0x1e, 0x53, 0x04, 0x01, - 0x43, 0x05, 0xa2, 0x5c, 0x04, 0x01, 0xa8, 0xb6, 0x01, 0xa9, 0xa3, 0x01, - 0x45, 0xe7, 0xdc, 0x61, 0x04, 0x01, 0x44, 0xc6, 0xe5, 0x52, 0x04, 0x01, - 0x44, 0xfa, 0xe5, 0x64, 0x04, 0x01, 0xad, 0x82, 0x01, 0x43, 0x40, 0x20, - 0x6f, 0x04, 0x01, 0xaf, 0x5a, 0x44, 0xee, 0xe6, 0x50, 0x04, 0x01, 0x44, - 0x32, 0xe7, 0x6e, 0x04, 0x01, 0xb3, 0x42, 0xb4, 0x2c, 0x42, 0x50, 0x02, + 0x43, 0x18, 0xa2, 0x5c, 0x04, 0x01, 0xa8, 0xb6, 0x01, 0xa9, 0xa3, 0x01, + 0x45, 0x03, 0xdd, 0x61, 0x04, 0x01, 0x44, 0xe2, 0xe5, 0x52, 0x04, 0x01, + 0x44, 0x16, 0xe6, 0x64, 0x04, 0x01, 0xad, 0x82, 0x01, 0x43, 0x40, 0x20, + 0x6f, 0x04, 0x01, 0xaf, 0x5a, 0x44, 0x0a, 0xe7, 0x50, 0x04, 0x01, 0x44, + 0x4e, 0xe7, 0x6e, 0x04, 0x01, 0xb3, 0x42, 0xb4, 0x2c, 0x42, 0x50, 0x02, 0x73, 0x04, 0x01, 0x43, 0x11, 0x35, 0x5d, 0x04, 0x01, 0x02, 0x15, 0x02, - 0x12, 0x02, 0x4d, 0x00, 0x06, 0x43, 0xae, 0xe9, 0x5f, 0x04, 0x41, 0xe1, + 0x12, 0x02, 0x4d, 0x00, 0x06, 0x43, 0xca, 0xe9, 0x5f, 0x04, 0x41, 0xe1, 0x58, 0x04, 0x01, 0xf7, 0x7f, 0x04, 0x41, 0xe5, 0x62, 0x04, 0x01, 0x42, 0xe2, 0x02, 0x6b, 0x04, 0x41, 0xa8, 0x06, 0x42, 0x20, 0x04, 0x51, 0x04, 0x41, 0x42, 0xae, 0x1a, 0x5e, 0x04, 0x01, 0x43, 0x3f, 0x00, 0x54, 0x04, @@ -4605,31 +4606,31 @@ static const unsigned char uname2c_tree[210697] = { 0x01, 0x42, 0x0a, 0x07, 0x6c, 0x04, 0x41, 0x46, 0x91, 0x16, 0x60, 0x04, 0x01, 0x43, 0x29, 0x02, 0x65, 0x04, 0x41, 0x42, 0x1a, 0x00, 0x7e, 0x04, 0x01, 0x42, 0x73, 0x02, 0x72, 0x04, 0x01, 0xe6, 0x66, 0x04, 0x41, 0x44, - 0xda, 0xe3, 0x63, 0x04, 0x01, 0x43, 0x76, 0x40, 0x59, 0x04, 0x41, 0xa1, + 0xf6, 0xe3, 0x63, 0x04, 0x01, 0x43, 0x8b, 0x40, 0x59, 0x04, 0x41, 0xa1, 0x0c, 0x42, 0xbe, 0x10, 0x67, 0x04, 0x01, 0x42, 0xcf, 0x00, 0x7b, 0x04, 0x41, 0xf2, 0x7d, 0x04, 0x01, 0xf4, 0x70, 0x04, 0x41, 0x42, 0x3b, 0x01, 0x69, 0x04, 0x01, 0x42, 0x5b, 0x07, 0x71, 0x04, 0x01, 0xe8, 0x6d, 0x04, 0x01, 0x42, 0x46, 0x00, 0x7a, 0x04, 0x01, 0xb2, 0x0c, 0x42, 0xa4, 0x02, 0x68, 0x04, 0x01, 0x42, 0x15, 0x01, 0x77, 0x04, 0x41, 0xe5, 0x78, 0x04, - 0x01, 0x43, 0xf9, 0x5f, 0x7c, 0x04, 0x41, 0x04, 0x51, 0x48, 0x04, 0xeb, - 0x88, 0xf9, 0x41, 0x51, 0x34, 0x52, 0xc7, 0x11, 0x01, 0x51, 0xbb, 0x53, - 0xdd, 0x11, 0x01, 0xa4, 0xf6, 0x03, 0xa5, 0xe7, 0x03, 0x4a, 0xbf, 0x5a, + 0x01, 0x43, 0x0e, 0x60, 0x7c, 0x04, 0x41, 0x04, 0x66, 0x48, 0x04, 0xeb, + 0x88, 0xf9, 0x41, 0x51, 0x49, 0x52, 0xc7, 0x11, 0x01, 0x51, 0xd0, 0x53, + 0xdd, 0x11, 0x01, 0xa4, 0xf6, 0x03, 0xa5, 0xe7, 0x03, 0x4a, 0xd4, 0x5a, 0xdc, 0x11, 0x01, 0x07, 0xf1, 0x04, 0xc4, 0x01, 0x42, 0x19, 0x04, 0xc4, - 0x11, 0x01, 0xb3, 0x55, 0x06, 0x11, 0x35, 0x01, 0xff, 0x4d, 0xde, 0x7e, + 0x11, 0x01, 0xb3, 0x55, 0x06, 0x11, 0x35, 0x01, 0xff, 0x4d, 0xe5, 0x7e, 0xcb, 0x11, 0x01, 0x05, 0xdb, 0x02, 0x01, 0xff, 0xa1, 0x37, 0xe5, 0xbc, 0x11, 0x01, 0xe9, 0xb4, 0x11, 0x81, 0x2a, 0xef, 0xbe, 0x11, 0x01, 0x4f, - 0x28, 0x6b, 0xce, 0x11, 0x01, 0xf5, 0xb6, 0x11, 0x81, 0x17, 0x08, 0x76, + 0x3d, 0x6b, 0xce, 0x11, 0x01, 0xf5, 0xb6, 0x11, 0x81, 0x17, 0x08, 0x92, 0xb7, 0x01, 0xff, 0xec, 0xba, 0x11, 0x81, 0x09, 0xf2, 0xb8, 0x11, 0xc1, 0x00, 0xf2, 0xb9, 0x11, 0x41, 0xec, 0xbb, 0x11, 0x41, 0xf5, 0xb7, 0x11, 0x41, 0xe9, 0xb5, 0x11, 0x41, 0xe1, 0xb3, 0x11, 0x01, 0xe9, 0xbd, 0x11, - 0x01, 0xf5, 0xbf, 0x11, 0x41, 0x4a, 0x3f, 0x9f, 0xc9, 0x11, 0x01, 0xa5, - 0x4d, 0x04, 0xdc, 0x02, 0x06, 0x49, 0x0a, 0xb7, 0xcd, 0x11, 0x41, 0xa1, - 0x35, 0x4b, 0x3b, 0x21, 0x80, 0x11, 0x01, 0x54, 0xa0, 0x3e, 0xcf, 0x11, - 0x01, 0x4b, 0xbf, 0x95, 0xc2, 0x11, 0x01, 0x45, 0xab, 0x3a, 0xca, 0x11, - 0x01, 0x47, 0xa1, 0xcb, 0xdb, 0x11, 0x01, 0x4b, 0x05, 0x9c, 0xc3, 0x11, + 0x01, 0xf5, 0xbf, 0x11, 0x41, 0x4a, 0x52, 0x9f, 0xc9, 0x11, 0x01, 0xa5, + 0x4d, 0x04, 0xdc, 0x02, 0x06, 0x49, 0x26, 0xb7, 0xcd, 0x11, 0x41, 0xa1, + 0x35, 0x4b, 0x3b, 0x21, 0x80, 0x11, 0x01, 0x54, 0xb5, 0x3e, 0xcf, 0x11, + 0x01, 0x4b, 0xd2, 0x95, 0xc2, 0x11, 0x01, 0x45, 0xc0, 0x3a, 0xca, 0x11, + 0x01, 0x47, 0xbd, 0xcb, 0xdb, 0x11, 0x01, 0x4b, 0x18, 0x9c, 0xc3, 0x11, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x49, 0x21, 0xc0, 0x11, 0x01, - 0x45, 0x69, 0x46, 0x82, 0x11, 0x41, 0x47, 0x5c, 0x14, 0x81, 0x11, 0x01, - 0x47, 0x3a, 0x81, 0xc1, 0x11, 0x41, 0x0b, 0x9c, 0x92, 0x06, 0x47, 0x72, + 0x45, 0x7e, 0x46, 0x82, 0x11, 0x41, 0x47, 0x5c, 0x14, 0x81, 0x11, 0x01, + 0x47, 0x41, 0x81, 0xc1, 0x11, 0x41, 0x0b, 0xaf, 0x92, 0x06, 0x47, 0x72, 0x1e, 0xc8, 0x11, 0x41, 0xd1, 0xde, 0x11, 0x01, 0xd2, 0xdf, 0x11, 0x41, 0xe1, 0x83, 0x11, 0x81, 0x86, 0x02, 0xa2, 0xf9, 0x01, 0xa3, 0xec, 0x01, 0xa4, 0xd3, 0x01, 0xe5, 0x8d, 0x11, 0x01, 0xa7, 0xc2, 0x01, 0x42, 0x22, @@ -4638,7 +4639,7 @@ static const unsigned char uname2c_tree[210697] = { 0x01, 0xae, 0x6d, 0xef, 0x8f, 0x11, 0x01, 0xb0, 0x5d, 0x42, 0x71, 0x00, 0xab, 0x11, 0x01, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, 0x87, 0x11, 0x81, 0x23, 0xb6, 0x06, 0x42, 0x20, 0x20, 0xaa, 0x11, 0x41, 0xe1, 0xae, 0x11, 0x01, - 0x07, 0x77, 0xb7, 0x01, 0xff, 0xec, 0x8b, 0x11, 0x81, 0x09, 0xf2, 0x89, + 0x07, 0x93, 0xb7, 0x01, 0xff, 0xec, 0x8b, 0x11, 0x81, 0x09, 0xf2, 0x89, 0x11, 0xc1, 0x00, 0xf2, 0x8a, 0x11, 0x41, 0xec, 0x8c, 0x11, 0x41, 0xf5, 0x88, 0x11, 0x41, 0xe1, 0xa0, 0x11, 0x01, 0x42, 0x22, 0x00, 0xa1, 0x11, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x9b, 0x11, 0x01, 0x42, 0x22, 0x00, 0x9c, @@ -4654,63 +4655,63 @@ static const unsigned char uname2c_tree[210697] = { 0x11, 0x01, 0x42, 0x22, 0x00, 0x9e, 0x11, 0x41, 0xe1, 0x96, 0x11, 0x01, 0x42, 0x22, 0x00, 0x97, 0x11, 0x41, 0xe1, 0xa7, 0x11, 0x01, 0x42, 0x22, 0x00, 0xa8, 0x11, 0x41, 0xe1, 0x84, 0x11, 0x01, 0xe9, 0x8e, 0x11, 0x01, - 0xf5, 0x90, 0x11, 0x41, 0x43, 0xa0, 0xb1, 0xda, 0x11, 0x01, 0x55, 0xb6, + 0xf5, 0x90, 0x11, 0x41, 0x43, 0xbc, 0xb1, 0xda, 0x11, 0x01, 0x55, 0xcb, 0x3a, 0xcc, 0x11, 0x41, 0x44, 0x0b, 0x1e, 0xc5, 0x11, 0x01, 0x05, 0xf5, - 0x05, 0x06, 0x4b, 0xcc, 0x98, 0xc6, 0x11, 0x41, 0x45, 0xd1, 0x09, 0xd8, + 0x05, 0x06, 0x4b, 0xdf, 0x98, 0xc6, 0x11, 0x41, 0x45, 0xd1, 0x09, 0xd8, 0x11, 0x01, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0xd9, 0x11, 0x01, 0x43, 0xcd, 0x09, 0xd1, 0x11, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xd0, 0x11, 0x41, 0x44, 0x25, 0x01, 0xd3, 0x11, 0x01, 0x42, 0x15, 0x02, 0xd2, 0x11, 0x41, 0x44, 0x96, 0x1b, 0xd7, 0x11, 0x01, 0x42, 0x30, 0x27, 0xd6, 0x11, 0x41, 0x43, 0xd7, 0x04, 0xd5, 0x11, 0x01, 0x43, 0xfb, 0x05, 0xd4, - 0x11, 0x41, 0x46, 0x00, 0x04, 0x4d, 0x27, 0x00, 0x4b, 0x22, 0x96, 0x1e, + 0x11, 0x41, 0x46, 0x00, 0x04, 0x4d, 0x27, 0x00, 0x4b, 0x35, 0x96, 0x1e, 0x27, 0x00, 0x44, 0x8b, 0x11, 0x30, 0x27, 0x40, 0xa1, 0xd5, 0x01, 0xa3, - 0xbd, 0x01, 0x43, 0x0f, 0x97, 0xf2, 0x2b, 0x00, 0xa5, 0xa8, 0x01, 0x45, - 0x63, 0x6d, 0x13, 0x23, 0x80, 0x5a, 0x44, 0xea, 0xe5, 0x33, 0xf9, 0x01, - 0x02, 0x7d, 0x02, 0x3e, 0x4e, 0x2c, 0x74, 0xfb, 0x2b, 0x00, 0xb2, 0x2a, - 0xb3, 0x1c, 0x02, 0xc6, 0x00, 0x0c, 0x4b, 0x9f, 0x9c, 0xa1, 0xfa, 0x01, - 0x45, 0x87, 0xcb, 0xb9, 0x26, 0x40, 0x45, 0x29, 0x1d, 0x16, 0x22, 0x00, - 0x4e, 0x86, 0x76, 0x93, 0x00, 0x40, 0x47, 0x62, 0xaf, 0x45, 0xfe, 0x00, - 0x4b, 0x45, 0x99, 0xbc, 0x26, 0x40, 0x65, 0xe8, 0x06, 0x2c, 0xf9, 0x01, - 0x49, 0x52, 0xb7, 0x20, 0x21, 0x40, 0x45, 0x69, 0x37, 0x3b, 0x00, 0x00, - 0x61, 0xdf, 0x0b, 0x32, 0x2a, 0x00, 0x47, 0x85, 0xcb, 0xba, 0x26, 0x40, - 0x09, 0xd9, 0xae, 0x01, 0xff, 0x45, 0xd1, 0x09, 0xf8, 0xfb, 0x01, 0xa6, + 0xbd, 0x01, 0x43, 0x22, 0x97, 0xf2, 0x2b, 0x00, 0xa5, 0xa8, 0x01, 0x45, + 0x78, 0x6d, 0x13, 0x23, 0x80, 0x5a, 0x44, 0x06, 0xe6, 0x33, 0xf9, 0x01, + 0x02, 0x7d, 0x02, 0x3e, 0x4e, 0x41, 0x74, 0xfb, 0x2b, 0x00, 0xb2, 0x2a, + 0xb3, 0x1c, 0x02, 0xc6, 0x00, 0x0c, 0x4b, 0xb2, 0x9c, 0xa1, 0xfa, 0x01, + 0x45, 0xa3, 0xcb, 0xb9, 0x26, 0x40, 0x45, 0x29, 0x1d, 0x16, 0x22, 0x00, + 0x4e, 0x8d, 0x76, 0x93, 0x00, 0x40, 0x47, 0x7e, 0xaf, 0x45, 0xfe, 0x00, + 0x4b, 0x58, 0x99, 0xbc, 0x26, 0x40, 0x65, 0xe8, 0x06, 0x2c, 0xf9, 0x01, + 0x49, 0x6e, 0xb7, 0x20, 0x21, 0x40, 0x45, 0x69, 0x37, 0x3b, 0x00, 0x00, + 0x61, 0xdf, 0x0b, 0x32, 0x2a, 0x00, 0x47, 0xa1, 0xcb, 0xba, 0x26, 0x40, + 0x09, 0xf5, 0xae, 0x01, 0xff, 0x45, 0xd1, 0x09, 0xf8, 0xfb, 0x01, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0xf9, 0xfb, 0x01, 0x43, 0xcd, 0x09, 0xf1, 0xfb, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xf0, 0xfb, 0x41, 0x44, 0x25, 0x01, 0xf3, 0xfb, 0x01, 0x42, 0x15, 0x02, 0xf2, 0xfb, 0x41, 0x44, 0x96, 0x1b, 0xf7, 0xfb, 0x01, 0x42, 0x30, 0x27, 0xf6, 0xfb, 0x41, 0x43, 0xd7, 0x04, 0xf5, 0xfb, 0x01, 0x43, 0xfb, 0x05, 0xf4, 0xfb, 0x41, 0x4f, - 0xd5, 0x63, 0x48, 0xf6, 0x01, 0x45, 0xe9, 0xda, 0x31, 0xf3, 0x41, 0x4f, - 0x74, 0x6a, 0x48, 0xf9, 0x01, 0xb4, 0x01, 0xff, 0x48, 0xc6, 0x03, 0xa7, + 0xea, 0x63, 0x48, 0xf6, 0x01, 0x45, 0x05, 0xdb, 0x31, 0xf3, 0x41, 0x4f, + 0x89, 0x6a, 0x48, 0xf9, 0x01, 0xb4, 0x01, 0xff, 0x48, 0xc6, 0x03, 0xa7, 0x00, 0x00, 0x42, 0x0c, 0x00, 0x14, 0x23, 0x40, 0xec, 0xad, 0xf9, 0x01, - 0xf4, 0xba, 0xf4, 0x41, 0xa1, 0x8a, 0x01, 0x44, 0x81, 0xda, 0xeb, 0xf3, + 0xf4, 0xba, 0xf4, 0x41, 0xa1, 0x8a, 0x01, 0x44, 0x9d, 0xda, 0xeb, 0xf3, 0x81, 0x7d, 0xaf, 0x64, 0xb2, 0x01, 0xff, 0xa5, 0x53, 0x04, 0x7c, 0x05, - 0x0c, 0x43, 0x7e, 0x1e, 0xdc, 0xf4, 0x01, 0x44, 0xbf, 0x46, 0x08, 0x21, + 0x0c, 0x43, 0x7e, 0x1e, 0xdc, 0xf4, 0x01, 0x44, 0xd4, 0x46, 0x08, 0x21, 0x40, 0x08, 0xe9, 0x04, 0x1b, 0x54, 0x34, 0x1d, 0x70, 0xf6, 0x01, 0x06, 0x3c, 0x06, 0x01, 0xff, 0xe5, 0x2f, 0x21, 0x00, 0xe7, 0x0a, 0x21, 0x00, 0xec, 0x13, 0x21, 0x00, 0xef, 0x34, 0x21, 0x40, 0xe2, 0x2c, 0x21, 0x00, 0xe5, 0x30, 0x21, 0x00, 0xe6, 0x31, 0x21, 0x00, 0xe8, 0x0b, 0x21, 0x00, 0xe9, 0x10, 0x21, 0x00, 0xec, 0x12, 0x21, 0x00, 0xed, 0x33, 0x21, 0x00, 0xf0, 0x18, 0x21, 0x00, 0xf2, 0x1b, 0x21, 0x40, 0x42, 0x92, 0x01, 0xb5, - 0xf5, 0x01, 0x47, 0x37, 0xcd, 0x9b, 0xfa, 0x41, 0x44, 0x73, 0xcb, 0xf4, - 0xf6, 0x01, 0x03, 0x80, 0xcb, 0x01, 0xff, 0x42, 0x10, 0x00, 0x82, 0xf9, - 0x01, 0x42, 0xc6, 0x02, 0x4f, 0x26, 0x40, 0x48, 0xdd, 0xb8, 0x92, 0xf3, + 0xf5, 0x01, 0x47, 0x53, 0xcd, 0x9b, 0xfa, 0x41, 0x44, 0x8f, 0xcb, 0xf4, + 0xf6, 0x01, 0x03, 0x9c, 0xcb, 0x01, 0xff, 0x42, 0x10, 0x00, 0x82, 0xf9, + 0x01, 0x42, 0xc6, 0x02, 0x4f, 0x26, 0x40, 0x48, 0xf9, 0xb8, 0x92, 0xf3, 0x41, 0x43, 0xec, 0x00, 0x96, 0x26, 0x00, 0x42, 0xdd, 0x19, 0xe3, 0xf9, - 0x41, 0x05, 0xb5, 0x6e, 0x81, 0x08, 0x49, 0xe7, 0xaf, 0x50, 0x26, 0x00, - 0x46, 0x6b, 0xd2, 0xf5, 0x26, 0x00, 0x51, 0xa8, 0x55, 0x76, 0xf3, 0x01, - 0xac, 0xd8, 0x07, 0x08, 0x4e, 0x64, 0xcf, 0x04, 0xae, 0xa1, 0x04, 0x42, + 0x41, 0x05, 0xca, 0x6e, 0x81, 0x08, 0x49, 0x03, 0xb0, 0x50, 0x26, 0x00, + 0x46, 0x87, 0xd2, 0xf5, 0x26, 0x00, 0x51, 0xbd, 0x55, 0x76, 0xf3, 0x01, + 0xac, 0xd8, 0x07, 0x08, 0x63, 0x64, 0xcf, 0x04, 0xae, 0xa1, 0x04, 0x42, 0x0d, 0x00, 0x7b, 0xf9, 0x01, 0xb4, 0x85, 0x04, 0x02, 0x42, 0x00, 0x06, - 0x47, 0x68, 0xcd, 0xb7, 0xf3, 0x41, 0x07, 0xf5, 0xc4, 0x06, 0x44, 0xca, - 0xe6, 0x95, 0xf9, 0x41, 0x54, 0x5c, 0x3c, 0xb4, 0xa8, 0x00, 0xa4, 0x96, - 0x03, 0x07, 0xf1, 0x04, 0x6f, 0x05, 0xdb, 0x02, 0x4e, 0x0b, 0x5b, 0x70, + 0x47, 0x84, 0xcd, 0xb7, 0xf3, 0x41, 0x07, 0x11, 0xc5, 0x06, 0x44, 0xe6, + 0xe6, 0x95, 0xf9, 0x41, 0x54, 0x71, 0x3c, 0xb4, 0xa8, 0x00, 0xa4, 0x96, + 0x03, 0x07, 0xf1, 0x04, 0x6f, 0x05, 0xdb, 0x02, 0x4e, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xa1, 0x3b, 0xe5, 0xbe, 0xa8, 0x80, 0x32, 0xe9, 0xb6, 0xa8, 0x80, 0x29, 0xef, 0xc1, 0xa8, 0x80, 0x20, 0xf5, 0xb8, 0xa8, 0x80, 0x17, - 0x08, 0x76, 0xb7, 0x01, 0xff, 0xec, 0xbc, 0xa8, 0x80, 0x09, 0xf2, 0xba, + 0x08, 0x92, 0xb7, 0x01, 0xff, 0xec, 0xbc, 0xa8, 0x80, 0x09, 0xf2, 0xba, 0xa8, 0xc0, 0x00, 0xf2, 0xbb, 0xa8, 0x40, 0xec, 0xbd, 0xa8, 0x40, 0xf5, 0xb9, 0xa8, 0x40, 0xef, 0xc2, 0xa8, 0x40, 0xe9, 0xb7, 0xa8, 0x40, 0xe5, 0xbf, 0xa8, 0x40, 0xe1, 0xb5, 0xa8, 0x00, 0xe9, 0xc0, 0xa8, 0x00, 0xf5, 0xc3, 0xa8, 0x40, 0x48, 0x5b, 0x14, 0x80, 0xa8, 0x00, 0x4b, 0x3b, 0x21, 0xc5, 0xa8, 0x00, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x49, 0x21, 0xc4, - 0xa8, 0x00, 0x45, 0x69, 0x46, 0x81, 0xa8, 0x40, 0xe1, 0x82, 0xa8, 0x80, + 0xa8, 0x00, 0x45, 0x7e, 0x46, 0x81, 0xa8, 0x40, 0xe1, 0x82, 0xa8, 0x80, 0x91, 0x02, 0xa2, 0x84, 0x02, 0xa3, 0xf7, 0x01, 0xa4, 0xde, 0x01, 0xe5, 0x8c, 0xa8, 0x80, 0xd4, 0x01, 0xa7, 0xc7, 0x01, 0x42, 0x22, 0x00, 0xb2, 0xa8, 0x00, 0xe9, 0x84, 0xa8, 0x80, 0xb7, 0x01, 0xaa, 0xaa, 0x01, 0xab, @@ -4718,7 +4719,7 @@ static const unsigned char uname2c_tree[210697] = { 0x72, 0xef, 0x8f, 0xa8, 0x80, 0x69, 0xb0, 0x5d, 0x42, 0x71, 0x00, 0xac, 0xa8, 0x00, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, 0x86, 0xa8, 0x80, 0x23, 0xb6, 0x06, 0x42, 0x20, 0x20, 0xab, 0xa8, 0x40, 0xe1, 0xae, 0xa8, 0x00, 0x07, - 0x77, 0xb7, 0x01, 0xff, 0xec, 0x8a, 0xa8, 0x80, 0x09, 0xf2, 0x88, 0xa8, + 0x93, 0xb7, 0x01, 0xff, 0xec, 0x8a, 0xa8, 0x80, 0x09, 0xf2, 0x88, 0xa8, 0xc0, 0x00, 0xf2, 0x89, 0xa8, 0x40, 0xec, 0x8b, 0xa8, 0x40, 0xf5, 0x87, 0xa8, 0x40, 0xe1, 0xa1, 0xa8, 0x00, 0x42, 0x22, 0x00, 0xa2, 0xa8, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x9c, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x9d, 0xa8, @@ -4735,110 +4736,110 @@ static const unsigned char uname2c_tree[210697] = { 0x9f, 0xa8, 0x40, 0xe1, 0x97, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x98, 0xa8, 0x40, 0xe1, 0xa8, 0xa8, 0x00, 0x42, 0x22, 0x00, 0xa9, 0xa8, 0x40, 0xe1, 0x83, 0xa8, 0x00, 0xe9, 0x8e, 0xa8, 0x00, 0xf5, 0x91, 0xa8, 0x40, 0x44, - 0x0b, 0x1e, 0xce, 0xa8, 0x00, 0x05, 0xf5, 0x05, 0x06, 0x4b, 0xcc, 0x98, + 0x0b, 0x1e, 0xce, 0xa8, 0x00, 0x05, 0xf5, 0x05, 0x06, 0x4b, 0xdf, 0x98, 0xcf, 0xa8, 0x40, 0x45, 0xd1, 0x09, 0xd8, 0xa8, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0xd9, 0xa8, 0x00, 0x43, 0xcd, 0x09, 0xd1, 0xa8, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xd0, 0xa8, 0x40, 0x44, 0x25, 0x01, 0xd3, 0xa8, 0x00, 0x42, 0x15, 0x02, 0xd2, 0xa8, 0x40, 0x44, 0x96, 0x1b, 0xd7, 0xa8, 0x00, 0x42, 0x30, 0x27, 0xd6, 0xa8, 0x40, 0x43, 0xd7, 0x04, - 0xd5, 0xa8, 0x00, 0x43, 0xfb, 0x05, 0xd4, 0xa8, 0x40, 0x46, 0xdf, 0xd0, - 0xf0, 0xf6, 0x81, 0x06, 0x43, 0x5d, 0x01, 0x44, 0x26, 0x40, 0x48, 0x45, - 0xb8, 0xe1, 0xf4, 0x41, 0x45, 0xf8, 0xda, 0x6a, 0xf9, 0x01, 0x08, 0x36, + 0xd5, 0xa8, 0x00, 0x43, 0xfb, 0x05, 0xd4, 0xa8, 0x40, 0x46, 0xfb, 0xd0, + 0xf0, 0xf6, 0x81, 0x06, 0x43, 0x5d, 0x01, 0x44, 0x26, 0x40, 0x48, 0x61, + 0xb8, 0xe1, 0xf4, 0x41, 0x45, 0x14, 0xdb, 0x6a, 0xf9, 0x01, 0x08, 0x36, 0x14, 0x01, 0xff, 0x06, 0x8c, 0x13, 0x06, 0x54, 0x3e, 0x14, 0x7a, 0xf6, 0x41, 0x07, 0x3b, 0x01, 0x06, 0x68, 0x0d, 0x04, 0x78, 0xf6, 0x41, 0x5d, 0x18, 0x04, 0x77, 0xf6, 0x01, 0x64, 0x2d, 0x09, 0x76, 0xf6, 0x41, 0x51, - 0x63, 0x4a, 0x36, 0x08, 0x00, 0x07, 0xf1, 0x04, 0xf3, 0x01, 0xad, 0xb2, - 0x01, 0x0c, 0x8c, 0x14, 0x51, 0x0b, 0x5b, 0x70, 0x01, 0xff, 0xe1, 0x23, + 0x78, 0x4a, 0x36, 0x08, 0x00, 0x07, 0xf1, 0x04, 0xf3, 0x01, 0xad, 0xb2, + 0x01, 0x0c, 0x8c, 0x14, 0x51, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xe1, 0x23, 0x08, 0x80, 0x43, 0xe5, 0x1d, 0x08, 0x00, 0xe9, 0x2a, 0x08, 0x00, 0x05, 0x4f, 0x30, 0x22, 0xef, 0x2b, 0x08, 0x80, 0x12, 0xb3, 0x04, 0xf5, 0x27, - 0x08, 0x40, 0x46, 0x9b, 0xcb, 0x25, 0x08, 0x00, 0x44, 0x44, 0xe0, 0x2c, - 0x08, 0x40, 0x49, 0x40, 0xb7, 0x21, 0x08, 0xc0, 0x00, 0xe1, 0x1e, 0x08, + 0x08, 0x40, 0x46, 0xb7, 0xcb, 0x25, 0x08, 0x00, 0x44, 0x60, 0xe0, 0x2c, + 0x08, 0x40, 0x49, 0x5c, 0xb7, 0x21, 0x08, 0xc0, 0x00, 0xe1, 0x1e, 0x08, 0x40, 0xe1, 0x22, 0x08, 0x80, 0x0c, 0xe5, 0x1c, 0x08, 0x00, 0xe9, 0x29, 0x08, 0x00, 0xf5, 0x26, 0x08, 0x40, 0xe1, 0x1f, 0x08, 0x40, 0xe1, 0x20, - 0x08, 0x40, 0xa1, 0x3b, 0x43, 0x97, 0xa9, 0x33, 0x08, 0x00, 0x4d, 0x90, - 0x7e, 0x37, 0x08, 0x00, 0x47, 0x39, 0xc9, 0x30, 0x08, 0x00, 0x45, 0x98, - 0x7e, 0x39, 0x08, 0x00, 0xb3, 0x15, 0x44, 0x96, 0xe7, 0x3b, 0x08, 0x00, - 0xba, 0x01, 0xff, 0x43, 0xaf, 0xe8, 0x3a, 0x08, 0x00, 0x44, 0x96, 0xe5, - 0x38, 0x08, 0x40, 0x49, 0x5c, 0xb0, 0x35, 0x08, 0x00, 0x4b, 0x53, 0x98, - 0x3d, 0x08, 0x40, 0x45, 0xc0, 0xdb, 0x31, 0x08, 0x00, 0xae, 0x0c, 0x46, - 0x05, 0xd5, 0x3c, 0x08, 0x00, 0x45, 0x75, 0xe0, 0x34, 0x08, 0x40, 0x43, - 0xaf, 0x10, 0x32, 0x08, 0x00, 0x44, 0x3e, 0xe6, 0x3e, 0x08, 0x40, 0x04, - 0xba, 0x00, 0x15, 0x0f, 0xf3, 0x0a, 0x01, 0xff, 0x4e, 0x90, 0x70, 0x1a, - 0x08, 0x00, 0xe9, 0x28, 0x08, 0x00, 0x47, 0x9a, 0xcb, 0x24, 0x08, 0x40, - 0x46, 0x5b, 0x65, 0x19, 0x08, 0x00, 0x4e, 0x90, 0x70, 0x1b, 0x08, 0x00, - 0x42, 0x9e, 0x01, 0x16, 0x08, 0x80, 0x0c, 0x47, 0x39, 0xc9, 0x2d, 0x08, - 0x00, 0x49, 0x74, 0xb3, 0x18, 0x08, 0x40, 0x45, 0x4c, 0xd7, 0x17, 0x08, - 0x40, 0x44, 0x4d, 0xd7, 0x00, 0x08, 0x00, 0xa2, 0x72, 0x45, 0x90, 0x4e, - 0x03, 0x08, 0x00, 0x42, 0xde, 0x08, 0x10, 0x08, 0x00, 0x45, 0xd4, 0xdb, - 0x02, 0x08, 0x00, 0xa9, 0x52, 0x44, 0xaa, 0xe5, 0x0a, 0x08, 0x00, 0x45, - 0x3c, 0xdd, 0x0b, 0x08, 0x00, 0x43, 0x2a, 0x89, 0x0c, 0x08, 0x00, 0x43, - 0x40, 0x20, 0x0d, 0x08, 0x00, 0x43, 0x63, 0xe9, 0x12, 0x08, 0x00, 0x44, - 0x97, 0x4e, 0x13, 0x08, 0x00, 0xb3, 0x20, 0xb4, 0x0c, 0x43, 0x9b, 0x70, - 0x09, 0x08, 0x00, 0x43, 0x58, 0x07, 0x06, 0x08, 0x40, 0x43, 0x6f, 0xb9, - 0x15, 0x08, 0x00, 0x42, 0x52, 0x00, 0x08, 0x08, 0x00, 0x46, 0x2f, 0xd5, - 0x11, 0x08, 0x40, 0x43, 0x90, 0x00, 0x14, 0x08, 0x00, 0x46, 0x8f, 0xd2, + 0x08, 0x40, 0xa1, 0x3b, 0x43, 0xaa, 0xa9, 0x33, 0x08, 0x00, 0x4d, 0x97, + 0x7e, 0x37, 0x08, 0x00, 0x47, 0x55, 0xc9, 0x30, 0x08, 0x00, 0x45, 0x9f, + 0x7e, 0x39, 0x08, 0x00, 0xb3, 0x15, 0x44, 0xb2, 0xe7, 0x3b, 0x08, 0x00, + 0xba, 0x01, 0xff, 0x43, 0xcb, 0xe8, 0x3a, 0x08, 0x00, 0x44, 0xb2, 0xe5, + 0x38, 0x08, 0x40, 0x49, 0x78, 0xb0, 0x35, 0x08, 0x00, 0x4b, 0x66, 0x98, + 0x3d, 0x08, 0x40, 0x45, 0xdc, 0xdb, 0x31, 0x08, 0x00, 0xae, 0x0c, 0x46, + 0x21, 0xd5, 0x3c, 0x08, 0x00, 0x45, 0x91, 0xe0, 0x34, 0x08, 0x40, 0x43, + 0xaf, 0x10, 0x32, 0x08, 0x00, 0x44, 0x5a, 0xe6, 0x3e, 0x08, 0x40, 0x04, + 0xba, 0x00, 0x15, 0x0f, 0xf3, 0x0a, 0x01, 0xff, 0x4e, 0xa5, 0x70, 0x1a, + 0x08, 0x00, 0xe9, 0x28, 0x08, 0x00, 0x47, 0xb6, 0xcb, 0x24, 0x08, 0x40, + 0x46, 0x70, 0x65, 0x19, 0x08, 0x00, 0x4e, 0xa5, 0x70, 0x1b, 0x08, 0x00, + 0x42, 0x9e, 0x01, 0x16, 0x08, 0x80, 0x0c, 0x47, 0x55, 0xc9, 0x2d, 0x08, + 0x00, 0x49, 0x90, 0xb3, 0x18, 0x08, 0x40, 0x45, 0x68, 0xd7, 0x17, 0x08, + 0x40, 0x44, 0x69, 0xd7, 0x00, 0x08, 0x00, 0xa2, 0x72, 0x45, 0xa5, 0x4e, + 0x03, 0x08, 0x00, 0x42, 0xde, 0x08, 0x10, 0x08, 0x00, 0x45, 0xf0, 0xdb, + 0x02, 0x08, 0x00, 0xa9, 0x52, 0x44, 0xc6, 0xe5, 0x0a, 0x08, 0x00, 0x45, + 0x58, 0xdd, 0x0b, 0x08, 0x00, 0x43, 0x31, 0x89, 0x0c, 0x08, 0x00, 0x43, + 0x40, 0x20, 0x0d, 0x08, 0x00, 0x43, 0x7f, 0xe9, 0x12, 0x08, 0x00, 0x44, + 0xac, 0x4e, 0x13, 0x08, 0x00, 0xb3, 0x20, 0xb4, 0x0c, 0x43, 0xb0, 0x70, + 0x09, 0x08, 0x00, 0x43, 0x58, 0x07, 0x06, 0x08, 0x40, 0x43, 0x8b, 0xb9, + 0x15, 0x08, 0x00, 0x42, 0x52, 0x00, 0x08, 0x08, 0x00, 0x46, 0x4b, 0xd5, + 0x11, 0x08, 0x40, 0x43, 0x90, 0x00, 0x14, 0x08, 0x00, 0x46, 0xab, 0xd2, 0x0e, 0x08, 0x40, 0xee, 0x0f, 0x08, 0x00, 0xf4, 0x07, 0x08, 0x00, 0xf9, 0x04, 0x08, 0x40, 0x42, 0xda, 0x10, 0x05, 0x08, 0x00, 0x42, 0x52, 0x00, - 0x01, 0x08, 0x40, 0xb4, 0x06, 0x4a, 0x2a, 0x8c, 0xe1, 0xfa, 0x41, 0x47, - 0x6d, 0xc3, 0xc2, 0xf9, 0x01, 0x43, 0xe0, 0x0b, 0x13, 0x26, 0x40, 0x43, - 0x82, 0x11, 0xf7, 0xf9, 0x01, 0x44, 0x80, 0x58, 0xba, 0xf9, 0x41, 0xa1, - 0x87, 0x1f, 0xa5, 0xf2, 0x18, 0x49, 0x53, 0xb0, 0x8f, 0xf9, 0x01, 0xa9, - 0xcb, 0x0a, 0xaf, 0x81, 0x07, 0xb5, 0x01, 0xff, 0x48, 0x75, 0xba, 0xbd, - 0x20, 0x00, 0x4c, 0xb4, 0x87, 0xc9, 0xf3, 0x01, 0x4a, 0xf9, 0xa3, 0xf4, - 0x29, 0x00, 0x03, 0x7f, 0xc7, 0xf3, 0x04, 0xae, 0x2f, 0x48, 0x74, 0x79, - 0xa8, 0x20, 0x00, 0x1a, 0x9e, 0x1f, 0x01, 0xff, 0x48, 0x6d, 0xba, 0xf6, - 0x2b, 0x00, 0x46, 0x6f, 0xba, 0xf4, 0x2b, 0x00, 0x48, 0x35, 0xc0, 0xf5, - 0x2b, 0x00, 0x48, 0xcd, 0xc0, 0xf7, 0x2b, 0x00, 0x49, 0x5f, 0xb6, 0xf8, - 0x2b, 0x00, 0x49, 0x5b, 0xb7, 0xf3, 0x2b, 0x40, 0x03, 0xd3, 0x02, 0x0f, - 0xae, 0x01, 0xff, 0x42, 0x33, 0x00, 0xc3, 0xf3, 0x01, 0x53, 0xcc, 0x44, - 0xbd, 0xf3, 0x41, 0x4d, 0xbd, 0x79, 0xee, 0x16, 0x00, 0x4f, 0xa7, 0x64, - 0xf0, 0x16, 0x00, 0x51, 0xdd, 0x53, 0xed, 0x16, 0x00, 0x07, 0xf1, 0x04, - 0x12, 0x54, 0x68, 0x3f, 0xec, 0x16, 0x00, 0x52, 0x97, 0x4f, 0xeb, 0x16, - 0x00, 0x4f, 0x26, 0x6d, 0xef, 0x16, 0x40, 0xa1, 0xec, 0x03, 0x58, 0x67, + 0x01, 0x08, 0x40, 0xb4, 0x06, 0x4a, 0x31, 0x8c, 0xe1, 0xfa, 0x41, 0x47, + 0x89, 0xc3, 0xc2, 0xf9, 0x01, 0x43, 0xe0, 0x0b, 0x13, 0x26, 0x40, 0x43, + 0x82, 0x11, 0xf7, 0xf9, 0x01, 0x44, 0x95, 0x58, 0xba, 0xf9, 0x41, 0xa1, + 0x87, 0x1f, 0xa5, 0xf2, 0x18, 0x49, 0x6f, 0xb0, 0x8f, 0xf9, 0x01, 0xa9, + 0xcb, 0x0a, 0xaf, 0x81, 0x07, 0xb5, 0x01, 0xff, 0x48, 0x91, 0xba, 0xbd, + 0x20, 0x00, 0x4c, 0xbb, 0x87, 0xc9, 0xf3, 0x01, 0x4a, 0x0c, 0xa4, 0xf4, + 0x29, 0x00, 0x03, 0x9b, 0xc7, 0xf3, 0x04, 0xae, 0x2f, 0x48, 0x7b, 0x79, + 0xa8, 0x20, 0x00, 0x1a, 0x9e, 0x1f, 0x01, 0xff, 0x48, 0x89, 0xba, 0xf6, + 0x2b, 0x00, 0x46, 0x8b, 0xba, 0xf4, 0x2b, 0x00, 0x48, 0x51, 0xc0, 0xf5, + 0x2b, 0x00, 0x48, 0xe9, 0xc0, 0xf7, 0x2b, 0x00, 0x49, 0x7b, 0xb6, 0xf8, + 0x2b, 0x00, 0x49, 0x77, 0xb7, 0xf3, 0x2b, 0x40, 0x03, 0xd3, 0x02, 0x0f, + 0xae, 0x01, 0xff, 0x42, 0x33, 0x00, 0xc3, 0xf3, 0x01, 0x53, 0xe1, 0x44, + 0xbd, 0xf3, 0x41, 0x4d, 0xc4, 0x79, 0xee, 0x16, 0x00, 0x4f, 0xbc, 0x64, + 0xf0, 0x16, 0x00, 0x51, 0xf2, 0x53, 0xed, 0x16, 0x00, 0x07, 0xf1, 0x04, + 0x12, 0x54, 0x7d, 0x3f, 0xec, 0x16, 0x00, 0x52, 0xac, 0x4f, 0xeb, 0x16, + 0x00, 0x4f, 0x3b, 0x6d, 0xef, 0x16, 0x40, 0xa1, 0xec, 0x03, 0x58, 0x67, 0x24, 0xd2, 0x16, 0x00, 0xe3, 0xcd, 0x16, 0x80, 0xc8, 0x03, 0xe4, 0xd1, 0x16, 0x80, 0xab, 0x03, 0xe5, 0xc2, 0x16, 0x80, 0x8d, 0x03, 0xa6, 0xe1, 0x02, 0xe7, 0xb5, 0x16, 0x80, 0xc8, 0x02, 0x02, 0x22, 0x00, 0xb7, 0x02, - 0xa9, 0x8f, 0x02, 0x47, 0x0c, 0xc8, 0xc3, 0x16, 0x00, 0xeb, 0xf1, 0x16, - 0x80, 0xf4, 0x01, 0xac, 0xc8, 0x01, 0x4c, 0x30, 0x8a, 0xd7, 0x16, 0x00, - 0x51, 0x96, 0x56, 0xbe, 0x16, 0x00, 0xef, 0xae, 0x16, 0x80, 0x98, 0x01, - 0x4f, 0x0a, 0x6b, 0xc8, 0x16, 0x00, 0xf1, 0xe9, 0x16, 0x00, 0x50, 0xe9, - 0x5f, 0xb1, 0x16, 0x00, 0xb3, 0x34, 0xb4, 0x26, 0x49, 0x01, 0xb7, 0xa2, + 0xa9, 0x8f, 0x02, 0x47, 0x28, 0xc8, 0xc3, 0x16, 0x00, 0xeb, 0xf1, 0x16, + 0x80, 0xf4, 0x01, 0xac, 0xc8, 0x01, 0x4c, 0x37, 0x8a, 0xd7, 0x16, 0x00, + 0x51, 0xab, 0x56, 0xbe, 0x16, 0x00, 0xef, 0xae, 0x16, 0x80, 0x98, 0x01, + 0x4f, 0x1f, 0x6b, 0xc8, 0x16, 0x00, 0xf1, 0xe9, 0x16, 0x00, 0x50, 0xfe, + 0x5f, 0xb1, 0x16, 0x00, 0xb3, 0x34, 0xb4, 0x26, 0x49, 0x1d, 0xb7, 0xa2, 0x16, 0x00, 0xf6, 0xa1, 0x16, 0x00, 0xf7, 0xa5, 0x16, 0x80, 0x11, 0xf8, 0xea, 0x16, 0x00, 0xf9, 0xa4, 0x16, 0x80, 0x04, 0xfa, 0xce, 0x16, 0x40, - 0xf2, 0xa3, 0x16, 0x40, 0x4b, 0xfa, 0x9b, 0xb9, 0x16, 0x40, 0x53, 0x6d, - 0x44, 0xa6, 0x16, 0x00, 0x4e, 0x50, 0x72, 0xcf, 0x16, 0x40, 0xe8, 0xf2, - 0x16, 0x80, 0x12, 0x56, 0x88, 0x30, 0xcb, 0x16, 0x00, 0x47, 0x0b, 0xca, - 0xca, 0x16, 0x00, 0x43, 0xb8, 0x09, 0xe5, 0x16, 0x40, 0x09, 0xfb, 0xb3, + 0xf2, 0xa3, 0x16, 0x40, 0x4b, 0x0d, 0x9c, 0xb9, 0x16, 0x40, 0x53, 0x82, + 0x44, 0xa6, 0x16, 0x00, 0x4e, 0x65, 0x72, 0xcf, 0x16, 0x40, 0xe8, 0xf2, + 0x16, 0x80, 0x12, 0x56, 0x88, 0x30, 0xcb, 0x16, 0x00, 0x47, 0x27, 0xca, + 0xca, 0x16, 0x00, 0x43, 0xb8, 0x09, 0xe5, 0x16, 0x40, 0x09, 0x17, 0xb4, 0x01, 0xff, 0x44, 0x17, 0x00, 0xc6, 0x16, 0x00, 0x49, 0x76, 0x24, 0xd3, - 0x16, 0x00, 0x48, 0xcd, 0xbc, 0xbd, 0x16, 0x00, 0x46, 0x6d, 0xd3, 0xd9, - 0x16, 0x00, 0x46, 0xa1, 0x56, 0xbf, 0x16, 0x00, 0x45, 0x0d, 0x75, 0xad, - 0x16, 0x00, 0x45, 0x99, 0x30, 0xcc, 0x16, 0x00, 0x45, 0x59, 0x72, 0xd0, + 0x16, 0x00, 0x48, 0xe9, 0xbc, 0xbd, 0x16, 0x00, 0x46, 0x89, 0xd3, 0xd9, + 0x16, 0x00, 0x46, 0xb6, 0x56, 0xbf, 0x16, 0x00, 0x45, 0x22, 0x75, 0xad, + 0x16, 0x00, 0x45, 0x99, 0x30, 0xcc, 0x16, 0x00, 0x45, 0x6e, 0x72, 0xd0, 0x16, 0x00, 0x42, 0x99, 0x22, 0xe7, 0x16, 0x40, 0xe5, 0xaf, 0x16, 0x00, - 0xee, 0xb0, 0x16, 0x00, 0xef, 0xf3, 0x16, 0x00, 0x45, 0x08, 0xdf, 0xd5, - 0x16, 0x00, 0x43, 0xf2, 0x01, 0xa9, 0x16, 0x00, 0x4e, 0x16, 0x76, 0xdf, - 0x16, 0x40, 0x51, 0xcd, 0x52, 0xda, 0x16, 0x00, 0x0b, 0x8e, 0x30, 0x01, - 0xff, 0x45, 0xa9, 0xd9, 0xc5, 0x16, 0x00, 0x48, 0xcd, 0xbc, 0xbc, 0x16, - 0x00, 0x46, 0x6d, 0xd3, 0xd8, 0x16, 0x00, 0x45, 0x0d, 0x75, 0xac, 0x16, - 0x00, 0x42, 0x99, 0x22, 0xe6, 0x16, 0x40, 0x03, 0x75, 0x40, 0x01, 0xff, - 0x42, 0x44, 0x00, 0xb4, 0x16, 0x00, 0xe1, 0xb2, 0x16, 0x40, 0x4b, 0x02, + 0xee, 0xb0, 0x16, 0x00, 0xef, 0xf3, 0x16, 0x00, 0x45, 0x24, 0xdf, 0xd5, + 0x16, 0x00, 0x43, 0xf2, 0x01, 0xa9, 0x16, 0x00, 0x4e, 0x1d, 0x76, 0xdf, + 0x16, 0x40, 0x51, 0xe2, 0x52, 0xda, 0x16, 0x00, 0x0b, 0x8e, 0x30, 0x01, + 0xff, 0x45, 0xc5, 0xd9, 0xc5, 0x16, 0x00, 0x48, 0xe9, 0xbc, 0xbc, 0x16, + 0x00, 0x46, 0x89, 0xd3, 0xd8, 0x16, 0x00, 0x45, 0x22, 0x75, 0xac, 0x16, + 0x00, 0x42, 0x99, 0x22, 0xe6, 0x16, 0x40, 0x03, 0x8a, 0x40, 0x01, 0xff, + 0x42, 0x44, 0x00, 0xb4, 0x16, 0x00, 0xe1, 0xb2, 0x16, 0x40, 0x4b, 0x15, 0x92, 0xe8, 0x16, 0x00, 0x42, 0x1d, 0x01, 0xdd, 0x16, 0x80, 0x12, 0x42, - 0x0c, 0x00, 0xe1, 0x16, 0x00, 0x4c, 0x48, 0x8d, 0xc1, 0x16, 0x00, 0x47, - 0x30, 0xcd, 0xc7, 0x16, 0x40, 0x43, 0x51, 0x72, 0xdc, 0x16, 0x40, 0x45, - 0x20, 0xdb, 0xbb, 0x16, 0x00, 0x46, 0xab, 0xd1, 0xba, 0x16, 0x40, 0x42, - 0x17, 0x00, 0xb8, 0x16, 0x00, 0xa5, 0x01, 0xff, 0x49, 0xc2, 0xad, 0xb7, - 0x16, 0x00, 0xf2, 0xc4, 0x16, 0x40, 0x4d, 0x77, 0x7b, 0xa0, 0x16, 0x00, - 0x0d, 0x57, 0x80, 0x01, 0xff, 0xa1, 0x12, 0x42, 0x4e, 0x00, 0xf6, 0x16, + 0x0c, 0x00, 0xe1, 0x16, 0x00, 0x4c, 0x5b, 0x8d, 0xc1, 0x16, 0x00, 0x47, + 0x4c, 0xcd, 0xc7, 0x16, 0x40, 0x43, 0x66, 0x72, 0xdc, 0x16, 0x40, 0x45, + 0x3c, 0xdb, 0xbb, 0x16, 0x00, 0x46, 0xc7, 0xd1, 0xba, 0x16, 0x40, 0x42, + 0x17, 0x00, 0xb8, 0x16, 0x00, 0xa5, 0x01, 0xff, 0x49, 0xd5, 0xad, 0xb7, + 0x16, 0x00, 0xf2, 0xc4, 0x16, 0x40, 0x4d, 0x7e, 0x7b, 0xa0, 0x16, 0x00, + 0x0d, 0x5e, 0x80, 0x01, 0xff, 0xa1, 0x12, 0x42, 0x4e, 0x00, 0xf6, 0x16, 0x00, 0x42, 0xe0, 0x02, 0xf5, 0x16, 0x00, 0x42, 0xfc, 0x0b, 0xf4, 0x16, 0x40, 0xe3, 0xf7, 0x16, 0x00, 0x43, 0x12, 0x1d, 0xf8, 0x16, 0x40, 0x42, - 0x17, 0x00, 0xe0, 0x16, 0x00, 0x49, 0x80, 0xb0, 0xd6, 0x16, 0x00, 0x42, + 0x17, 0x00, 0xe0, 0x16, 0x00, 0x49, 0x9c, 0xb0, 0xd6, 0x16, 0x00, 0x42, 0x1d, 0x01, 0xb6, 0x16, 0x00, 0x42, 0x53, 0x00, 0xa7, 0x16, 0x40, 0x4b, - 0xef, 0x90, 0xde, 0x16, 0x00, 0x06, 0x1c, 0x79, 0x01, 0xff, 0xec, 0xdb, - 0x16, 0x00, 0xee, 0xc0, 0x16, 0x00, 0xf0, 0xd4, 0x16, 0x40, 0x43, 0x34, - 0x65, 0xe3, 0x16, 0x00, 0xa5, 0x06, 0x46, 0x97, 0xd6, 0xe2, 0x16, 0x40, - 0x43, 0x34, 0x65, 0xe4, 0x16, 0x00, 0xee, 0xb3, 0x16, 0x40, 0x43, 0xa9, - 0x19, 0xaa, 0x16, 0x00, 0x43, 0x12, 0x1d, 0xab, 0x16, 0x00, 0x4a, 0x53, - 0xa4, 0xc9, 0x16, 0x00, 0x46, 0xfd, 0xd3, 0xa8, 0x16, 0x40, 0x06, 0xf4, - 0x05, 0xb2, 0x01, 0x09, 0x76, 0x54, 0x91, 0x01, 0x07, 0xbf, 0x35, 0x01, + 0x02, 0x91, 0xde, 0x16, 0x00, 0x06, 0x23, 0x79, 0x01, 0xff, 0xec, 0xdb, + 0x16, 0x00, 0xee, 0xc0, 0x16, 0x00, 0xf0, 0xd4, 0x16, 0x40, 0x43, 0x49, + 0x65, 0xe3, 0x16, 0x00, 0xa5, 0x06, 0x46, 0xb3, 0xd6, 0xe2, 0x16, 0x40, + 0x43, 0x49, 0x65, 0xe4, 0x16, 0x00, 0xee, 0xb3, 0x16, 0x40, 0x43, 0xa9, + 0x19, 0xaa, 0x16, 0x00, 0x43, 0x12, 0x1d, 0xab, 0x16, 0x00, 0x4a, 0x66, + 0xa4, 0xc9, 0x16, 0x00, 0x46, 0x19, 0xd4, 0xa8, 0x16, 0x40, 0x06, 0xf4, + 0x05, 0xb2, 0x01, 0x09, 0x8b, 0x54, 0x91, 0x01, 0x07, 0xbf, 0x35, 0x01, 0xff, 0x05, 0xd1, 0x09, 0x7e, 0xa6, 0x5f, 0x04, 0xb8, 0x27, 0x4f, 0x4b, 0xe5, 0x0f, 0x72, 0x0e, 0x01, 0xb3, 0x26, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x69, 0x0e, 0x01, 0xa8, 0x0f, 0xb7, 0x01, 0xff, 0x44, 0x98, 0x1b, @@ -4848,238 +4849,238 @@ static const unsigned char uname2c_tree[210697] = { 0x42, 0xf5, 0x0f, 0x6e, 0x0e, 0x41, 0x48, 0xe8, 0x0f, 0x78, 0x0e, 0x01, 0x42, 0xf5, 0x0f, 0x6f, 0x0e, 0x41, 0x48, 0xe8, 0x0f, 0x7a, 0x0e, 0x01, 0x42, 0xf5, 0x0f, 0x71, 0x0e, 0x41, 0xa9, 0x0f, 0xaf, 0x01, 0xff, 0x43, - 0xf4, 0x0f, 0x6c, 0x0e, 0x01, 0x4a, 0x07, 0xaa, 0x75, 0x0e, 0x41, 0x43, - 0xcf, 0x47, 0x6d, 0x0e, 0x01, 0x4a, 0x57, 0x35, 0x76, 0x0e, 0x41, 0x48, + 0xf4, 0x0f, 0x6c, 0x0e, 0x01, 0x4a, 0x1a, 0xaa, 0x75, 0x0e, 0x41, 0x43, + 0xe4, 0x47, 0x6d, 0x0e, 0x01, 0x4a, 0x57, 0x35, 0x76, 0x0e, 0x41, 0x48, 0xe8, 0x0f, 0x79, 0x0e, 0x01, 0xf9, 0x70, 0x0e, 0x41, 0x04, 0xcd, 0x09, - 0x06, 0x4a, 0x71, 0xa9, 0x7e, 0x0e, 0x41, 0x44, 0x22, 0x00, 0x7b, 0x0e, + 0x06, 0x4a, 0x84, 0xa9, 0x7e, 0x0e, 0x41, 0x44, 0x22, 0x00, 0x7b, 0x0e, 0x01, 0x47, 0x2a, 0x01, 0x7c, 0x0e, 0x01, 0x45, 0xcc, 0x0e, 0x7d, 0x0e, 0x41, 0x45, 0xd1, 0x09, 0x67, 0x0e, 0x01, 0xa6, 0x29, 0x44, 0xb8, 0x27, 0x68, 0x0e, 0x01, 0x43, 0xcd, 0x09, 0x60, 0x0e, 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x62, 0x0e, 0x01, 0x42, 0x15, 0x02, 0x61, 0x0e, 0x41, 0x44, 0x96, 0x1b, 0x66, 0x0e, 0x01, 0x42, 0x30, 0x27, 0x65, 0x0e, 0x41, 0x43, 0xd7, 0x04, 0x64, 0x0e, 0x01, 0x43, 0xfb, 0x05, 0x63, - 0x0e, 0x41, 0x52, 0x99, 0x4a, 0x60, 0xf3, 0x01, 0x48, 0x95, 0xba, 0x16, + 0x0e, 0x41, 0x52, 0xae, 0x4a, 0x60, 0xf3, 0x01, 0x48, 0xb1, 0xba, 0x16, 0xf9, 0x01, 0x42, 0x36, 0x01, 0xa8, 0xfa, 0x81, 0xad, 0x03, 0x02, 0x3f, - 0x06, 0x83, 0x03, 0x04, 0x60, 0x16, 0x7a, 0x45, 0xd1, 0xde, 0x13, 0xf4, + 0x06, 0x83, 0x03, 0x04, 0x60, 0x16, 0x7a, 0x45, 0xed, 0xde, 0x13, 0xf4, 0x01, 0x42, 0xc7, 0x02, 0x39, 0xf3, 0x81, 0x67, 0x06, 0x51, 0x1f, 0x45, - 0x03, 0x24, 0x0a, 0x06, 0x45, 0x47, 0xe1, 0xa3, 0xf6, 0x41, 0x80, 0x2d, - 0x0e, 0x4a, 0x70, 0x01, 0xff, 0x43, 0xd3, 0xe8, 0x65, 0xf2, 0x01, 0x42, + 0x03, 0x24, 0x0a, 0x06, 0x45, 0x63, 0xe1, 0xa3, 0xf6, 0x41, 0x80, 0x2d, + 0x0e, 0x5f, 0x70, 0x01, 0xff, 0x43, 0xef, 0xe8, 0x65, 0xf2, 0x01, 0x42, 0xa0, 0x14, 0x60, 0xf2, 0x01, 0x42, 0xe6, 0x13, 0x61, 0xf2, 0x01, 0x02, 0xa4, 0x02, 0x06, 0x42, 0x5c, 0x0b, 0x63, 0xf2, 0x41, 0x42, 0x3c, 0x01, - 0x62, 0xf2, 0x01, 0x46, 0x37, 0xd6, 0x64, 0xf2, 0x41, 0x47, 0xa5, 0xca, - 0xcd, 0xf4, 0x01, 0x46, 0xcb, 0xd5, 0x8b, 0xf7, 0x41, 0x49, 0xf8, 0xad, + 0x62, 0xf2, 0x01, 0x46, 0x53, 0xd6, 0x64, 0xf2, 0x41, 0x47, 0xc1, 0xca, + 0xcd, 0xf4, 0x01, 0x46, 0xe7, 0xd5, 0x8b, 0xf7, 0x41, 0x49, 0x14, 0xae, 0x3a, 0x21, 0x00, 0x53, 0x57, 0x1f, 0x67, 0x27, 0x00, 0x58, 0xff, 0x25, 0x65, 0x27, 0x00, 0x5d, 0x18, 0x14, 0xcd, 0x2b, 0x00, 0x57, 0xf1, 0x2d, - 0xcf, 0x2b, 0x40, 0x43, 0xf3, 0x04, 0xf5, 0xf3, 0x41, 0x47, 0xee, 0xc4, - 0x9a, 0x01, 0x01, 0x4e, 0x6a, 0x6f, 0x9b, 0x01, 0x01, 0xa4, 0xe4, 0x01, - 0x08, 0x23, 0x57, 0x33, 0x4e, 0x9c, 0x74, 0x97, 0x01, 0x01, 0xb3, 0x06, - 0x4a, 0x99, 0x97, 0x91, 0x01, 0x41, 0xa5, 0x06, 0x4b, 0x46, 0x95, 0x95, - 0x01, 0x41, 0x4b, 0x98, 0x97, 0x92, 0x01, 0x01, 0x4d, 0x82, 0x81, 0x98, - 0x01, 0x01, 0x02, 0xdf, 0x05, 0x01, 0xff, 0x48, 0xb5, 0xb9, 0x90, 0x01, - 0x01, 0x48, 0xb1, 0x44, 0x93, 0x01, 0x41, 0xa5, 0x9e, 0x01, 0xa6, 0x68, + 0xcf, 0x2b, 0x40, 0x43, 0xf3, 0x04, 0xf5, 0xf3, 0x41, 0x47, 0x0a, 0xc5, + 0x9a, 0x01, 0x01, 0x4e, 0x7f, 0x6f, 0x9b, 0x01, 0x01, 0xa4, 0xe4, 0x01, + 0x08, 0x38, 0x57, 0x33, 0x4e, 0xb1, 0x74, 0x97, 0x01, 0x01, 0xb3, 0x06, + 0x4a, 0xac, 0x97, 0x91, 0x01, 0x41, 0xa5, 0x06, 0x4b, 0x59, 0x95, 0x95, + 0x01, 0x41, 0x4b, 0xab, 0x97, 0x92, 0x01, 0x01, 0x4d, 0x89, 0x81, 0x98, + 0x01, 0x01, 0x02, 0xdf, 0x05, 0x01, 0xff, 0x48, 0xd1, 0xb9, 0x90, 0x01, + 0x01, 0x48, 0xc6, 0x44, 0x93, 0x01, 0x41, 0xa5, 0x9e, 0x01, 0xa6, 0x68, 0x44, 0xb8, 0x27, 0x68, 0x21, 0x00, 0x43, 0xcd, 0x09, 0x60, 0x21, 0x80, - 0x3e, 0x54, 0x1c, 0x40, 0x83, 0x21, 0x00, 0xb3, 0x23, 0xb4, 0x01, 0xff, + 0x3e, 0x54, 0x31, 0x40, 0x83, 0x21, 0x00, 0xb3, 0x23, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x69, 0x21, 0x80, 0x13, 0x44, 0x25, 0x01, 0x62, 0x21, 0x00, 0xb7, 0x01, 0xff, 0x44, 0xb8, 0x28, 0x6b, 0x21, 0x00, 0xef, 0x61, - 0x21, 0x40, 0x49, 0x53, 0x58, 0x82, 0x21, 0x40, 0x44, 0x96, 0x1b, 0x66, - 0x21, 0x00, 0x42, 0x30, 0x27, 0x65, 0x21, 0xc0, 0x00, 0x4a, 0x69, 0x9d, + 0x21, 0x40, 0x49, 0x68, 0x58, 0x82, 0x21, 0x40, 0x44, 0x96, 0x1b, 0x66, + 0x21, 0x00, 0x42, 0x30, 0x27, 0x65, 0x21, 0xc0, 0x00, 0x4a, 0x7c, 0x9d, 0x85, 0x21, 0x40, 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x6d, 0x21, 0x80, - 0x0d, 0x48, 0x54, 0x58, 0x6f, 0x21, 0xc0, 0x00, 0x44, 0xba, 0xe1, 0x80, - 0x21, 0x40, 0x49, 0x53, 0x58, 0x88, 0x21, 0x40, 0xa9, 0x06, 0x43, 0xfb, - 0x05, 0x63, 0x21, 0x40, 0x43, 0xcf, 0x47, 0x6c, 0x21, 0x80, 0x16, 0x42, + 0x0d, 0x48, 0x69, 0x58, 0x6f, 0x21, 0xc0, 0x00, 0x44, 0xd6, 0xe1, 0x80, + 0x21, 0x40, 0x49, 0x68, 0x58, 0x88, 0x21, 0x40, 0xa9, 0x06, 0x43, 0xfb, + 0x05, 0x63, 0x21, 0x40, 0x43, 0xe4, 0x47, 0x6c, 0x21, 0x80, 0x16, 0x42, 0x32, 0x00, 0x64, 0x21, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, - 0x6e, 0x21, 0x00, 0x48, 0x54, 0x58, 0x81, 0x21, 0x40, 0x80, 0x01, 0xff, - 0x4a, 0xf7, 0xa0, 0x86, 0x21, 0x00, 0x48, 0x54, 0x58, 0x87, 0x21, 0x40, - 0x44, 0xc9, 0x00, 0x67, 0x21, 0x00, 0x45, 0xdf, 0x68, 0x6a, 0x21, 0x40, - 0x4c, 0x0c, 0x87, 0x96, 0x01, 0x01, 0x53, 0xa6, 0x44, 0x94, 0x01, 0x01, - 0x4d, 0x2b, 0x82, 0x99, 0x01, 0x41, 0x49, 0x67, 0xab, 0xfb, 0xf9, 0x01, - 0xa5, 0x06, 0x59, 0xb1, 0x21, 0x23, 0xf9, 0x41, 0x4e, 0xb0, 0x6f, 0xde, - 0xf5, 0x01, 0x02, 0x18, 0x00, 0x01, 0xff, 0x47, 0xe3, 0xc5, 0xa2, 0xf3, - 0x01, 0x45, 0x25, 0xe0, 0xfc, 0xf6, 0x41, 0x42, 0xf2, 0x04, 0x80, 0xf6, - 0x41, 0x47, 0xb3, 0x46, 0xfc, 0xfd, 0x00, 0x44, 0xb3, 0x7e, 0x80, 0xf3, + 0x6e, 0x21, 0x00, 0x48, 0x69, 0x58, 0x81, 0x21, 0x40, 0x80, 0x01, 0xff, + 0x4a, 0x0a, 0xa1, 0x86, 0x21, 0x00, 0x48, 0x69, 0x58, 0x87, 0x21, 0x40, + 0x44, 0xc9, 0x00, 0x67, 0x21, 0x00, 0x45, 0xf4, 0x68, 0x6a, 0x21, 0x40, + 0x4c, 0x13, 0x87, 0x96, 0x01, 0x01, 0x53, 0xbb, 0x44, 0x94, 0x01, 0x01, + 0x4d, 0x32, 0x82, 0x99, 0x01, 0x41, 0x49, 0x7a, 0xab, 0xfb, 0xf9, 0x01, + 0xa5, 0x06, 0x59, 0xb1, 0x21, 0x23, 0xf9, 0x41, 0x4e, 0xc5, 0x6f, 0xde, + 0xf5, 0x01, 0x02, 0x18, 0x00, 0x01, 0xff, 0x47, 0xff, 0xc5, 0xa2, 0xf3, + 0x01, 0x45, 0x41, 0xe0, 0xfc, 0xf6, 0x41, 0x42, 0xf2, 0x04, 0x80, 0xf6, + 0x41, 0x47, 0xc8, 0x46, 0xfc, 0xfd, 0x00, 0x44, 0xba, 0x7e, 0x80, 0xf3, 0x81, 0xca, 0x0d, 0x03, 0xef, 0x06, 0xb9, 0x0d, 0x43, 0xda, 0x03, 0x46, 0xf9, 0x01, 0x03, 0xca, 0x00, 0x4a, 0x42, 0x1d, 0x01, 0x8d, 0xf4, 0x81, - 0x11, 0x17, 0x50, 0x2d, 0x01, 0xff, 0x50, 0xf9, 0x5c, 0x2b, 0x29, 0x00, - 0x50, 0xac, 0x3b, 0x30, 0x29, 0x40, 0x80, 0x0c, 0x49, 0xe2, 0xae, 0x90, - 0xfa, 0x01, 0x48, 0x35, 0xbd, 0x6d, 0xf5, 0x41, 0x45, 0x5c, 0x00, 0xda, - 0x02, 0x00, 0x44, 0x56, 0xe4, 0xdf, 0xf6, 0x01, 0x48, 0x72, 0x0b, 0x57, - 0x22, 0x00, 0x4b, 0x5c, 0x95, 0x56, 0x22, 0x00, 0x48, 0x4b, 0x1b, 0x18, + 0x11, 0x17, 0x50, 0x2d, 0x01, 0xff, 0x50, 0x0e, 0x5d, 0x2b, 0x29, 0x00, + 0x50, 0xc1, 0x3b, 0x30, 0x29, 0x40, 0x80, 0x0c, 0x49, 0xfe, 0xae, 0x90, + 0xfa, 0x01, 0x48, 0x51, 0xbd, 0x6d, 0xf5, 0x41, 0x45, 0x5c, 0x00, 0xda, + 0x02, 0x00, 0x44, 0x72, 0xe4, 0xdf, 0xf6, 0x01, 0x48, 0x72, 0x0b, 0x57, + 0x22, 0x00, 0x4b, 0x6f, 0x95, 0x56, 0x22, 0x00, 0x48, 0x4b, 0x1b, 0x18, 0x22, 0x00, 0x45, 0x9c, 0x01, 0x30, 0x2e, 0x40, 0x80, 0xbd, 0x07, 0x8d, 0xd0, 0x06, 0x55, 0x6e, 0x37, 0x3d, 0x2a, 0x00, 0x06, 0xa9, 0x01, 0x01, 0xff, 0x45, 0xce, 0x00, 0x92, 0x21, 0x80, 0xba, 0x04, 0xa2, 0x9b, 0x04, - 0x50, 0x59, 0x5b, 0x3e, 0xf8, 0x01, 0xa4, 0xdb, 0x03, 0xa6, 0xcc, 0x03, - 0xa8, 0xcb, 0x02, 0x57, 0xc9, 0x2b, 0xa7, 0xf8, 0x01, 0x51, 0xfc, 0x56, - 0xfe, 0x21, 0x00, 0xb0, 0xb0, 0x02, 0x4f, 0x46, 0x6b, 0x46, 0x2b, 0x00, + 0x50, 0x6e, 0x5b, 0x3e, 0xf8, 0x01, 0xa4, 0xdb, 0x03, 0xa6, 0xcc, 0x03, + 0xa8, 0xcb, 0x02, 0x57, 0xc9, 0x2b, 0xa7, 0xf8, 0x01, 0x51, 0x11, 0x57, + 0xfe, 0x21, 0x00, 0xb0, 0xb0, 0x02, 0x4f, 0x5b, 0x6b, 0x46, 0x2b, 0x00, 0xb2, 0x9b, 0x02, 0xb3, 0x81, 0x02, 0xb4, 0x1f, 0xb7, 0x01, 0xff, 0x49, - 0x68, 0xad, 0x9d, 0x21, 0x00, 0x4a, 0xa2, 0x0e, 0xe8, 0x21, 0xc0, 0x00, - 0x80, 0x01, 0xff, 0x49, 0xd5, 0xaf, 0xf0, 0x21, 0x00, 0x59, 0x79, 0x1c, - 0x96, 0xf8, 0x41, 0x55, 0xe8, 0x38, 0xa3, 0xf8, 0x01, 0x02, 0x0d, 0x00, - 0x51, 0x02, 0x15, 0x02, 0x01, 0xff, 0x4d, 0x92, 0x78, 0xa0, 0x21, 0x00, - 0x08, 0x09, 0x02, 0x01, 0xff, 0x06, 0xce, 0x00, 0x06, 0x51, 0xa5, 0x58, - 0x10, 0x29, 0x40, 0x48, 0x4d, 0xab, 0x05, 0x29, 0x00, 0x05, 0x51, 0x00, + 0x7b, 0xad, 0x9d, 0x21, 0x00, 0x4a, 0xa2, 0x0e, 0xe8, 0x21, 0xc0, 0x00, + 0x80, 0x01, 0xff, 0x49, 0xf1, 0xaf, 0xf0, 0x21, 0x00, 0x59, 0x79, 0x1c, + 0x96, 0xf8, 0x41, 0x55, 0xfd, 0x38, 0xa3, 0xf8, 0x01, 0x02, 0x0d, 0x00, + 0x51, 0x02, 0x15, 0x02, 0x01, 0xff, 0x4d, 0x99, 0x78, 0xa0, 0x21, 0x00, + 0x08, 0x09, 0x02, 0x01, 0xff, 0x06, 0xce, 0x00, 0x06, 0x51, 0xba, 0x58, + 0x10, 0x29, 0x40, 0x48, 0x60, 0xab, 0x05, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x56, 0xac, 0x2f, 0x01, 0x29, 0x00, 0xb4, 0x06, 0x4f, 0xb3, 0x2f, 0x00, 0x29, 0x40, 0x43, 0xaf, 0x15, 0x16, 0x29, 0x80, 0x06, 0x52, 0x34, 0x05, 0xee, 0x2b, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x56, 0xac, 0x2f, 0x18, 0x29, 0x00, 0x4f, 0xb3, 0x2f, 0x17, 0x29, 0x40, 0x05, 0x04, 0x02, 0x11, 0x04, 0x3a, 0x1b, 0x01, 0xff, 0x45, 0xce, 0x00, 0xdb, 0x21, - 0x00, 0x4a, 0xac, 0x58, 0x0f, 0x29, 0x40, 0x4a, 0xe0, 0x01, 0x92, 0xf8, + 0x00, 0x4a, 0xc1, 0x58, 0x0f, 0x29, 0x40, 0x4a, 0xe0, 0x01, 0x92, 0xf8, 0x01, 0x08, 0x09, 0x02, 0x01, 0xff, 0x45, 0xce, 0x00, 0x62, 0x2b, 0x80, - 0x0c, 0x4c, 0x40, 0x86, 0x6c, 0x2b, 0x00, 0x4d, 0x09, 0x80, 0x86, 0x2b, + 0x0c, 0x4c, 0x47, 0x86, 0x6c, 0x2b, 0x00, 0x4d, 0x10, 0x80, 0x86, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x64, 0x9d, 0x08, 0x82, 0x2b, 0x00, 0x46, 0x0d, - 0x13, 0x72, 0x2b, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0xcb, 0x9f, - 0x2a, 0xf8, 0x01, 0x07, 0x3b, 0x01, 0x28, 0x4b, 0x0e, 0x62, 0x2e, 0xf8, - 0x01, 0x09, 0x54, 0xb2, 0x12, 0x4c, 0x54, 0x8a, 0x26, 0xf8, 0x01, 0x4c, - 0xc0, 0x8a, 0x22, 0xf8, 0x01, 0x50, 0x09, 0x62, 0x32, 0xf8, 0x41, 0x49, + 0x13, 0x72, 0x2b, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0xde, 0x9f, + 0x2a, 0xf8, 0x01, 0x07, 0x3b, 0x01, 0x28, 0x4b, 0x23, 0x62, 0x2e, 0xf8, + 0x01, 0x09, 0x70, 0xb2, 0x12, 0x4c, 0x5b, 0x8a, 0x26, 0xf8, 0x01, 0x4c, + 0xc7, 0x8a, 0x22, 0xf8, 0x01, 0x50, 0x1e, 0x62, 0x32, 0xf8, 0x41, 0x49, 0xa5, 0x01, 0xa7, 0x2b, 0x00, 0x47, 0x50, 0x02, 0xa5, 0x2b, 0x40, 0x51, 0x4c, 0x04, 0x7c, 0x2b, 0x00, 0x4f, 0xb3, 0x2f, 0x7c, 0x2b, 0x40, 0x4f, - 0x8a, 0x60, 0x52, 0xf8, 0x01, 0x02, 0x7c, 0x00, 0x01, 0xff, 0x4a, 0x42, - 0x8c, 0x3a, 0xf8, 0x01, 0x4b, 0xb7, 0x75, 0xdd, 0x21, 0x40, 0x57, 0x6d, - 0x2b, 0xa5, 0xf8, 0x01, 0x45, 0x0c, 0xd5, 0x6e, 0xf6, 0x41, 0x4c, 0x0a, - 0x80, 0xc9, 0x21, 0x00, 0x4b, 0x1b, 0x9c, 0xf8, 0xfa, 0x41, 0xa1, 0x11, + 0x9f, 0x60, 0x52, 0xf8, 0x01, 0x02, 0x7c, 0x00, 0x01, 0xff, 0x4a, 0x49, + 0x8c, 0x3a, 0xf8, 0x01, 0x4b, 0xcc, 0x75, 0xdd, 0x21, 0x40, 0x57, 0x6d, + 0x2b, 0xa5, 0xf8, 0x01, 0x45, 0x28, 0xd5, 0x6e, 0xf6, 0x41, 0x4c, 0x11, + 0x80, 0xc9, 0x21, 0x00, 0x4b, 0x2e, 0x9c, 0xf8, 0xfa, 0x41, 0xa1, 0x11, 0x05, 0x8d, 0x13, 0x01, 0xff, 0x45, 0xce, 0x00, 0x46, 0xf8, 0x01, 0x50, - 0x59, 0x5b, 0x42, 0xf8, 0x41, 0x42, 0x1b, 0x00, 0xf1, 0xfa, 0x01, 0x06, + 0x6e, 0x5b, 0x42, 0xf8, 0x41, 0x42, 0x1b, 0x00, 0xf1, 0xfa, 0x01, 0x06, 0x97, 0x04, 0x01, 0xff, 0x56, 0xd2, 0x31, 0xcc, 0x21, 0x00, 0x0a, 0x9d, 0x04, 0x01, 0xff, 0x04, 0xa5, 0x01, 0x31, 0x02, 0x50, 0x02, 0x01, 0xff, 0x80, 0x06, 0x45, 0xa9, 0x01, 0xc0, 0x21, 0x40, 0x06, 0x5c, 0x00, 0x0c, - 0x48, 0x4d, 0xab, 0x5b, 0x29, 0x00, 0x46, 0x0d, 0x13, 0x53, 0x29, 0x40, + 0x48, 0x60, 0xab, 0x5b, 0x29, 0x00, 0x46, 0x0d, 0x13, 0x53, 0x29, 0x40, 0xac, 0x06, 0x61, 0x8a, 0x04, 0x64, 0x29, 0x40, 0x5d, 0xc1, 0x13, 0x68, - 0x29, 0x00, 0x48, 0xbd, 0x64, 0x6c, 0x29, 0x40, 0x80, 0x06, 0x45, 0xa9, - 0x01, 0xc1, 0x21, 0x40, 0x66, 0x46, 0x05, 0x69, 0x29, 0x00, 0x4f, 0xb6, - 0x64, 0x6d, 0x29, 0x00, 0x48, 0x4d, 0xab, 0x5f, 0x29, 0x00, 0x46, 0x0d, - 0x13, 0x57, 0x29, 0x40, 0x50, 0x55, 0x54, 0x36, 0xf8, 0x01, 0x60, 0x8c, - 0x0e, 0xab, 0xf8, 0x41, 0x4b, 0x41, 0x86, 0xe2, 0x21, 0x00, 0x06, 0x3c, - 0x01, 0x01, 0xff, 0x45, 0xce, 0x00, 0xd2, 0x21, 0x80, 0x06, 0x4a, 0xac, + 0x29, 0x00, 0x48, 0xd2, 0x64, 0x6c, 0x29, 0x40, 0x80, 0x06, 0x45, 0xa9, + 0x01, 0xc1, 0x21, 0x40, 0x66, 0x46, 0x05, 0x69, 0x29, 0x00, 0x4f, 0xcb, + 0x64, 0x6d, 0x29, 0x00, 0x48, 0x60, 0xab, 0x5f, 0x29, 0x00, 0x46, 0x0d, + 0x13, 0x57, 0x29, 0x40, 0x50, 0x6a, 0x54, 0x36, 0xf8, 0x01, 0x60, 0x8c, + 0x0e, 0xab, 0xf8, 0x41, 0x4b, 0x48, 0x86, 0xe2, 0x21, 0x00, 0x06, 0x3c, + 0x01, 0x01, 0xff, 0x45, 0xce, 0x00, 0xd2, 0x21, 0x80, 0x06, 0x4a, 0xc1, 0x58, 0x0d, 0x29, 0x40, 0x80, 0x06, 0x45, 0xad, 0x15, 0x1c, 0x29, 0x40, - 0x48, 0x4d, 0xab, 0x07, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x46, + 0x48, 0x60, 0xab, 0x07, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x46, 0x57, 0x04, 0xcf, 0x21, 0x00, 0x4f, 0xb3, 0x2f, 0x03, 0x29, 0x40, 0x5f, 0x2b, 0x0f, 0xa9, 0xf8, 0x01, 0x05, 0x1d, 0x07, 0x06, 0x58, 0x4f, 0x27, - 0xa1, 0xf8, 0x41, 0x45, 0xce, 0x00, 0x95, 0x2b, 0x00, 0x53, 0x50, 0x43, + 0xa1, 0xf8, 0x41, 0x45, 0xce, 0x00, 0x95, 0x2b, 0x00, 0x53, 0x65, 0x43, 0x8a, 0x2b, 0x40, 0x80, 0x06, 0x45, 0xad, 0x15, 0x1a, 0x29, 0x40, 0xa1, - 0xcc, 0x01, 0x48, 0x4d, 0xab, 0xa6, 0x21, 0x80, 0xbe, 0x01, 0x54, 0xcc, + 0xcc, 0x01, 0x48, 0x60, 0xab, 0xa6, 0x21, 0x80, 0xbe, 0x01, 0x54, 0xe1, 0x3f, 0xc4, 0x21, 0x00, 0xb4, 0x90, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x50, 0x79, 0x5b, 0xb4, 0x21, 0x00, 0x02, 0x3b, 0x01, 0x75, 0x55, 0xd5, + 0x50, 0x8e, 0x5b, 0xb4, 0x21, 0x00, 0x02, 0x3b, 0x01, 0x75, 0x55, 0xd5, 0x01, 0x16, 0xf8, 0x01, 0x44, 0x04, 0x0d, 0xaa, 0x21, 0x00, 0xac, 0x5b, - 0x59, 0x47, 0x22, 0x06, 0xf8, 0x01, 0x4c, 0x38, 0x8b, 0x9a, 0xf8, 0x01, - 0x4a, 0xbf, 0xa6, 0x45, 0x29, 0x00, 0xb3, 0x31, 0xb4, 0x06, 0x4f, 0xb3, + 0x59, 0x47, 0x22, 0x06, 0xf8, 0x01, 0x4c, 0x3f, 0x8b, 0x9a, 0xf8, 0x01, + 0x4a, 0xd2, 0xa6, 0x45, 0x29, 0x00, 0xb3, 0x31, 0xb4, 0x06, 0x4f, 0xb3, 0x2f, 0xf8, 0x21, 0x40, 0x43, 0xaf, 0x15, 0xa3, 0x21, 0x80, 0x11, 0x03, 0xc4, 0x0a, 0x01, 0xff, 0x49, 0xa5, 0x01, 0x0e, 0x2b, 0x00, 0x47, 0x50, 0x02, 0x0f, 0x2b, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x56, 0xac, 0x2f, 0x15, 0x29, 0x00, 0x4f, 0xb3, 0x2f, 0x14, 0x29, 0x40, 0x05, 0x3d, 0x06, 0x06, 0x45, 0x58, 0x04, 0x9b, 0x21, 0x40, 0x55, 0xd5, 0x01, 0x12, 0xf8, 0x01, 0x52, 0x33, 0x05, 0x02, 0xf8, 0x41, 0x57, 0x78, 0x26, 0x0a, 0xf8, - 0x01, 0x43, 0x47, 0x46, 0xac, 0x21, 0x40, 0x49, 0x71, 0xb6, 0x11, 0x29, + 0x01, 0x43, 0x5c, 0x46, 0xac, 0x21, 0x40, 0x49, 0x8d, 0xb6, 0x11, 0x29, 0x00, 0x54, 0xae, 0x2f, 0xfb, 0x21, 0x40, 0x07, 0xff, 0x27, 0x11, 0x03, - 0x0e, 0x13, 0x01, 0xff, 0x42, 0x17, 0x00, 0xe5, 0x21, 0x00, 0x4c, 0xb1, - 0x51, 0x1e, 0x29, 0x40, 0x4c, 0x87, 0x00, 0x43, 0x2b, 0x00, 0x48, 0x35, - 0xc1, 0x44, 0x2b, 0x00, 0xf8, 0x47, 0x29, 0x40, 0x51, 0xac, 0x51, 0x20, + 0x0e, 0x13, 0x01, 0xff, 0x42, 0x17, 0x00, 0xe5, 0x21, 0x00, 0x4c, 0xc6, + 0x51, 0x1e, 0x29, 0x40, 0x4c, 0x87, 0x00, 0x43, 0x2b, 0x00, 0x48, 0x51, + 0xc1, 0x44, 0x2b, 0x00, 0xf8, 0x47, 0x29, 0x40, 0x51, 0xc1, 0x51, 0x20, 0x29, 0x40, 0x05, 0x5d, 0x00, 0x06, 0x63, 0xba, 0x09, 0xb6, 0xfb, 0x41, - 0x4f, 0x3e, 0x64, 0x75, 0x29, 0x00, 0x08, 0xa0, 0x6b, 0x0c, 0x55, 0xa5, - 0x39, 0x42, 0x29, 0x00, 0x4e, 0xf9, 0x39, 0x74, 0x29, 0x40, 0x4f, 0x3e, - 0x64, 0x48, 0x2b, 0x00, 0x4e, 0xf9, 0x39, 0x4c, 0x2b, 0x40, 0x07, 0x43, + 0x4f, 0x53, 0x64, 0x75, 0x29, 0x00, 0x08, 0xb5, 0x6b, 0x0c, 0x55, 0xba, + 0x39, 0x42, 0x29, 0x00, 0x4e, 0x0e, 0x3a, 0x74, 0x29, 0x40, 0x4f, 0x53, + 0x64, 0x48, 0x2b, 0x00, 0x4e, 0x0e, 0x3a, 0x4c, 0x2b, 0x40, 0x07, 0x58, 0x54, 0x4d, 0x5b, 0x6d, 0x19, 0xe5, 0x26, 0x00, 0x09, 0x9c, 0x01, 0x2b, - 0xb3, 0x1d, 0x08, 0x95, 0xc1, 0x01, 0xff, 0x49, 0x21, 0xaf, 0x2b, 0x20, + 0xb3, 0x1d, 0x08, 0xb1, 0xc1, 0x01, 0xff, 0x49, 0x3d, 0xaf, 0x2b, 0x20, 0x00, 0x47, 0xe0, 0x02, 0x67, 0x20, 0x00, 0x44, 0xb9, 0x00, 0x0f, 0x20, - 0x00, 0x48, 0xd5, 0xbf, 0x2e, 0x20, 0x40, 0x5c, 0xfd, 0x15, 0xa9, 0x27, + 0x00, 0x48, 0xf1, 0xbf, 0x2e, 0x20, 0x40, 0x5c, 0xfd, 0x15, 0xa9, 0x27, 0x00, 0x57, 0x56, 0x2b, 0x38, 0x29, 0x40, 0x4d, 0x96, 0x0d, 0x2a, 0x23, - 0x00, 0x54, 0x98, 0x3c, 0xfd, 0x29, 0x00, 0x5b, 0xb0, 0x18, 0xbb, 0x00, - 0x00, 0x50, 0xa9, 0x5e, 0x0e, 0xf5, 0x41, 0x56, 0xfc, 0x2e, 0x8d, 0x05, - 0x00, 0x44, 0xef, 0xc0, 0x1c, 0xf9, 0x01, 0x4b, 0xc6, 0x9a, 0xd5, 0x0f, - 0xc0, 0x00, 0x4a, 0x7e, 0x53, 0xd7, 0x0f, 0x40, 0xa1, 0xb3, 0x04, 0x06, + 0x00, 0x54, 0xad, 0x3c, 0xfd, 0x29, 0x00, 0x5b, 0xb0, 0x18, 0xbb, 0x00, + 0x00, 0x50, 0xbe, 0x5e, 0x0e, 0xf5, 0x41, 0x56, 0xfc, 0x2e, 0x8d, 0x05, + 0x00, 0x44, 0x0b, 0xc1, 0x1c, 0xf9, 0x01, 0x4b, 0xd9, 0x9a, 0xd5, 0x0f, + 0xc0, 0x00, 0x4a, 0x93, 0x53, 0xd7, 0x0f, 0x40, 0xa1, 0xb3, 0x04, 0x06, 0x1c, 0x07, 0xa2, 0x04, 0xa3, 0xf7, 0x03, 0x02, 0x3b, 0x01, 0xc7, 0x03, 0xa6, 0xb0, 0x03, 0x02, 0x22, 0x00, 0xf5, 0x02, 0x56, 0x7a, 0x31, 0x1d, 0x2e, 0x00, 0x60, 0x2c, 0x0e, 0xca, 0x22, 0x00, 0xaf, 0xca, 0x02, 0x4b, 0x70, 0x1f, 0x29, 0x00, 0x80, 0xad, 0x02, 0x57, 0xaf, 0x2c, 0x0d, 0x2e, 0x00, 0xb3, 0x91, 0x01, 0xb4, 0x43, 0x0a, 0x32, 0x00, 0x33, 0xb7, 0x01, - 0xff, 0x05, 0xae, 0x02, 0x06, 0x4b, 0x05, 0x8f, 0xd9, 0x29, 0x40, 0xa3, + 0xff, 0x05, 0xae, 0x02, 0x06, 0x4b, 0x18, 0x8f, 0xd9, 0x29, 0x40, 0xa3, 0x18, 0x52, 0x85, 0x24, 0x17, 0x30, 0x00, 0x4b, 0x70, 0x1f, 0x86, 0x29, 0x00, 0x4e, 0xe1, 0x23, 0x1b, 0x30, 0x00, 0x56, 0x36, 0x08, 0x19, 0x30, - 0x40, 0x4d, 0xe7, 0x62, 0x0f, 0x30, 0x00, 0x4c, 0x89, 0x08, 0x84, 0x29, - 0x40, 0x4d, 0x96, 0x79, 0x21, 0x2e, 0x00, 0x47, 0x19, 0xca, 0xb9, 0x23, + 0x40, 0x4d, 0xfc, 0x62, 0x0f, 0x30, 0x00, 0x4c, 0x89, 0x08, 0x84, 0x29, + 0x40, 0x4d, 0x9d, 0x79, 0x21, 0x2e, 0x00, 0x47, 0x35, 0xca, 0xb9, 0x23, 0x40, 0x43, 0x1e, 0x07, 0xa2, 0x22, 0x00, 0xa8, 0x27, 0x55, 0x37, 0x08, - 0x15, 0x30, 0x00, 0xb2, 0x01, 0xff, 0x53, 0xb8, 0x42, 0x0a, 0x2e, 0x00, + 0x15, 0x30, 0x00, 0xb2, 0x01, 0xff, 0x53, 0xcd, 0x42, 0x0a, 0x2e, 0x00, 0x04, 0x1b, 0x01, 0x01, 0xff, 0x42, 0x68, 0x00, 0xbf, 0x22, 0x80, 0x06, - 0x56, 0x07, 0x1b, 0x6e, 0xfb, 0x41, 0x54, 0xe0, 0x3a, 0xce, 0x29, 0x40, - 0x5e, 0xce, 0x0e, 0xc3, 0xfb, 0x01, 0x4c, 0xec, 0x8b, 0xed, 0xf5, 0x01, - 0x04, 0x26, 0x01, 0x01, 0xff, 0x4d, 0x7e, 0x47, 0x88, 0xfb, 0x01, 0x4e, + 0x56, 0x07, 0x1b, 0x6e, 0xfb, 0x41, 0x54, 0xf5, 0x3a, 0xce, 0x29, 0x40, + 0x5e, 0xce, 0x0e, 0xc3, 0xfb, 0x01, 0x4c, 0xf3, 0x8b, 0xed, 0xf5, 0x01, + 0x04, 0x26, 0x01, 0x01, 0xff, 0x4d, 0x93, 0x47, 0x88, 0xfb, 0x01, 0x4e, 0x2a, 0x01, 0x8a, 0xfb, 0x41, 0x55, 0xa4, 0x34, 0xc6, 0x27, 0x00, 0xa5, 0x7f, 0xa9, 0x71, 0x02, 0x6f, 0x02, 0x4f, 0x4d, 0xe2, 0x23, 0x5d, 0x00, 0x80, 0x06, 0x53, 0xc4, 0x23, 0x03, 0x2e, 0x40, 0x80, 0x01, 0xff, 0x49, - 0x19, 0x53, 0xa5, 0x23, 0x00, 0x4c, 0xdc, 0x89, 0xa6, 0x23, 0x00, 0x4c, - 0x98, 0x8e, 0xa4, 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4d, 0x29, - 0x7b, 0x58, 0x2e, 0x00, 0x45, 0x9e, 0x79, 0x46, 0x20, 0x00, 0x46, 0x57, - 0x04, 0x56, 0x2e, 0x00, 0x08, 0x7d, 0xc1, 0x06, 0x48, 0x3b, 0x54, 0x8c, - 0x29, 0x40, 0x4d, 0x32, 0x7a, 0x8e, 0x29, 0x00, 0x4a, 0x35, 0xa9, 0x90, - 0x29, 0x40, 0x44, 0xab, 0x24, 0x68, 0xf5, 0x81, 0x06, 0x4a, 0xa9, 0x75, - 0xe9, 0xf5, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, 0x84, 0x73, 0x69, - 0xf5, 0x01, 0x51, 0x72, 0x58, 0x6a, 0xf5, 0x41, 0x50, 0xa9, 0x5b, 0x27, + 0x2e, 0x53, 0xa5, 0x23, 0x00, 0x4c, 0xe3, 0x89, 0xa6, 0x23, 0x00, 0x4c, + 0xab, 0x8e, 0xa4, 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4d, 0x30, + 0x7b, 0x58, 0x2e, 0x00, 0x45, 0xa5, 0x79, 0x46, 0x20, 0x00, 0x46, 0x57, + 0x04, 0x56, 0x2e, 0x00, 0x08, 0x99, 0xc1, 0x06, 0x48, 0x50, 0x54, 0x8c, + 0x29, 0x40, 0x4d, 0x39, 0x7a, 0x8e, 0x29, 0x00, 0x4a, 0x48, 0xa9, 0x90, + 0x29, 0x40, 0x44, 0xab, 0x24, 0x68, 0xf5, 0x81, 0x06, 0x4a, 0xbe, 0x75, + 0xe9, 0xf5, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, 0x99, 0x73, 0x69, + 0xf5, 0x01, 0x51, 0x87, 0x58, 0x6a, 0xf5, 0x41, 0x50, 0xbe, 0x5b, 0x27, 0x2e, 0x00, 0x53, 0x56, 0x0a, 0x19, 0x20, 0x40, 0x50, 0x3c, 0x0e, 0xcc, - 0x22, 0x00, 0x51, 0x7a, 0x47, 0x8b, 0xfb, 0x41, 0x80, 0x01, 0xff, 0x49, - 0x19, 0x53, 0x9f, 0x23, 0x00, 0x4a, 0xc1, 0xa4, 0xa0, 0x23, 0x00, 0x4a, - 0xf3, 0xa9, 0x9e, 0x23, 0x40, 0x03, 0xf2, 0x07, 0x0c, 0x4f, 0xec, 0x6a, - 0xbc, 0xfb, 0x01, 0x49, 0x98, 0xa6, 0xd6, 0x27, 0x40, 0x4c, 0xd1, 0x09, + 0x22, 0x00, 0x51, 0x8f, 0x47, 0x8b, 0xfb, 0x41, 0x80, 0x01, 0xff, 0x49, + 0x2e, 0x53, 0x9f, 0x23, 0x00, 0x4a, 0xd4, 0xa4, 0xa0, 0x23, 0x00, 0x4a, + 0x06, 0xaa, 0x9e, 0x23, 0x40, 0x03, 0xf2, 0x07, 0x0c, 0x4f, 0x01, 0x6b, + 0xbc, 0xfb, 0x01, 0x49, 0xab, 0xa6, 0xd6, 0x27, 0x40, 0x4c, 0xd1, 0x09, 0x95, 0x25, 0x00, 0x4d, 0x10, 0x1b, 0x87, 0xfb, 0x41, 0x03, 0x24, 0x00, - 0x06, 0x55, 0x94, 0x38, 0x7d, 0xf5, 0x41, 0x02, 0x33, 0x01, 0x12, 0x46, - 0x2b, 0xa3, 0xba, 0xfb, 0x01, 0x4c, 0x9b, 0x03, 0x8d, 0xfb, 0x01, 0x4b, - 0x2c, 0x9a, 0xb3, 0xfb, 0x41, 0x04, 0x1e, 0x07, 0x06, 0x43, 0x35, 0x01, + 0x06, 0x55, 0xa9, 0x38, 0x7d, 0xf5, 0x41, 0x02, 0x33, 0x01, 0x12, 0x46, + 0x3e, 0xa3, 0xba, 0xfb, 0x01, 0x4c, 0x9b, 0x03, 0x8d, 0xfb, 0x01, 0x4b, + 0x3f, 0x9a, 0xb3, 0xfb, 0x41, 0x04, 0x1e, 0x07, 0x06, 0x43, 0x35, 0x01, 0x90, 0x25, 0x40, 0x46, 0x00, 0x04, 0xd7, 0x25, 0x00, 0x44, 0x8b, 0x11, 0xe9, 0x2b, 0x40, 0xa9, 0x06, 0x44, 0xbd, 0x21, 0x0b, 0x23, 0x40, 0x47, - 0xbc, 0xaf, 0x7d, 0x29, 0x00, 0x50, 0x15, 0x4c, 0x89, 0xfb, 0x41, 0x59, + 0xd8, 0xaf, 0x7d, 0x29, 0x00, 0x50, 0x2a, 0x4c, 0x89, 0xfb, 0x41, 0x59, 0xbe, 0x23, 0x05, 0x2e, 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0xa1, 0x12, 0x4b, 0x70, 0x1f, 0x29, 0x2e, 0x00, 0x4e, 0x1e, 0x04, 0x1d, 0x20, 0x00, - 0x4c, 0x04, 0x8f, 0xdb, 0x29, 0x40, 0x4c, 0x97, 0x0d, 0x0b, 0x30, 0x00, - 0x56, 0xf0, 0x32, 0x70, 0x29, 0x40, 0x46, 0xde, 0xba, 0x09, 0x23, 0x00, - 0x4d, 0xe7, 0x62, 0x0d, 0x30, 0x00, 0x4c, 0x89, 0x08, 0x7d, 0x00, 0xc0, - 0x00, 0x80, 0x01, 0xff, 0x4a, 0xc1, 0xa4, 0xad, 0x23, 0x00, 0x4c, 0x6c, - 0x8a, 0xac, 0x23, 0x00, 0x4a, 0xf3, 0xa9, 0xab, 0x23, 0x40, 0x52, 0x85, + 0x4c, 0x17, 0x8f, 0xdb, 0x29, 0x40, 0x4c, 0x97, 0x0d, 0x0b, 0x30, 0x00, + 0x56, 0xf0, 0x32, 0x70, 0x29, 0x40, 0x46, 0xfa, 0xba, 0x09, 0x23, 0x00, + 0x4d, 0xfc, 0x62, 0x0d, 0x30, 0x00, 0x4c, 0x89, 0x08, 0x7d, 0x00, 0xc0, + 0x00, 0x80, 0x01, 0xff, 0x4a, 0xd4, 0xa4, 0xad, 0x23, 0x00, 0x4c, 0x73, + 0x8a, 0xac, 0x23, 0x00, 0x4a, 0x06, 0xaa, 0xab, 0x23, 0x40, 0x52, 0x85, 0x24, 0x11, 0x30, 0x00, 0x56, 0x36, 0x08, 0x98, 0x29, 0x40, 0xae, 0x1a, 0xb2, 0x01, 0xff, 0x56, 0xcb, 0x15, 0x94, 0x29, 0x00, 0x09, 0x2a, 0x05, - 0x01, 0xff, 0x4c, 0xe0, 0x85, 0xf4, 0x27, 0x00, 0x4c, 0x5e, 0x13, 0xf4, - 0x21, 0x40, 0x02, 0x06, 0x00, 0x43, 0xa7, 0x01, 0xff, 0x49, 0x3c, 0xaf, + 0x01, 0xff, 0x4c, 0xe7, 0x85, 0xf4, 0x27, 0x00, 0x4c, 0x5e, 0x13, 0xf4, + 0x21, 0x40, 0x02, 0x06, 0x00, 0x43, 0xa7, 0x01, 0xff, 0x49, 0x58, 0xaf, 0xef, 0xf5, 0x01, 0x42, 0x68, 0x00, 0x1f, 0x22, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x47, 0x45, 0x08, 0x09, 0x30, 0x80, 0x23, 0x5a, 0x62, 0x1d, 0x01, - 0x2e, 0x00, 0x53, 0x69, 0x1d, 0x00, 0x2e, 0x00, 0x53, 0xe1, 0x48, 0x9c, + 0x2e, 0x00, 0x53, 0x69, 0x1d, 0x00, 0x2e, 0x00, 0x53, 0xf6, 0x48, 0x9c, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x43, 0xc9, 0x15, 0xbe, 0x22, 0x00, 0x56, 0xee, 0x2f, 0x7c, 0x23, 0x40, 0x49, 0x4a, 0x37, 0x92, 0x29, 0x40, 0x56, 0xc7, 0x09, 0x7f, 0xfb, 0x01, 0x56, 0xa0, 0x33, 0x7e, 0xfb, - 0x41, 0x44, 0xb5, 0x1a, 0x59, 0xf3, 0x01, 0x47, 0xff, 0xc5, 0x58, 0xf3, + 0x41, 0x44, 0xb5, 0x1a, 0x59, 0xf3, 0x01, 0x47, 0x1b, 0xc6, 0x58, 0xf3, 0x41, 0x07, 0xcd, 0x00, 0x01, 0xff, 0x05, 0xda, 0x12, 0x31, 0x05, 0xc3, 0x00, 0x21, 0x06, 0xc8, 0x00, 0x11, 0x03, 0x9c, 0x13, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xb2, 0x2b, 0x00, 0x45, 0xc8, 0x00, 0xb3, 0x2b, 0x40, 0x44, 0xa5, 0x01, 0xb7, 0x2b, 0x00, 0x42, 0x50, 0x02, 0xb5, 0x2b, 0x40, 0x44, 0xa5, 0x01, 0xb6, 0x2b, 0x00, 0x42, 0x50, 0x02, 0xb4, 0x2b, 0x40, 0x44, 0xc3, 0x00, 0xb0, 0x2b, 0x00, 0x45, 0xc8, 0x00, 0xb1, 0x2b, 0x40, 0xa3, - 0xb8, 0x05, 0x02, 0x06, 0x00, 0xa7, 0x05, 0x4c, 0x60, 0x87, 0x3b, 0x20, - 0x00, 0x02, 0xf6, 0x05, 0xaa, 0x04, 0x05, 0xdd, 0xdc, 0xcb, 0x02, 0x4b, - 0x39, 0x53, 0x0c, 0xf6, 0x01, 0x4d, 0xaa, 0x7e, 0x97, 0xf3, 0x01, 0x53, - 0x1f, 0x1e, 0xfd, 0xff, 0x00, 0xb3, 0x99, 0x02, 0x05, 0xbb, 0xe0, 0x82, - 0x02, 0xb6, 0x01, 0xff, 0x04, 0x96, 0x03, 0x06, 0x4d, 0x6d, 0x7f, 0x9e, + 0xb8, 0x05, 0x02, 0x06, 0x00, 0xa7, 0x05, 0x4c, 0x67, 0x87, 0x3b, 0x20, + 0x00, 0x02, 0xf6, 0x05, 0xaa, 0x04, 0x05, 0xf9, 0xdc, 0xcb, 0x02, 0x4b, + 0x4e, 0x53, 0x0c, 0xf6, 0x01, 0x4d, 0xb1, 0x7e, 0x97, 0xf3, 0x01, 0x53, + 0x1f, 0x1e, 0xfd, 0xff, 0x00, 0xb3, 0x99, 0x02, 0x05, 0xd7, 0xe0, 0x82, + 0x02, 0xb6, 0x01, 0xff, 0x04, 0x96, 0x03, 0x06, 0x4d, 0x74, 0x7f, 0x9e, 0xf4, 0x41, 0x80, 0xa9, 0x01, 0x02, 0x06, 0x00, 0x01, 0xff, 0x45, 0x04, 0x02, 0xa3, 0x29, 0x80, 0x96, 0x01, 0x45, 0x18, 0x04, 0x41, 0x2e, 0x00, - 0x07, 0x3b, 0x01, 0x79, 0x49, 0x2a, 0xaf, 0xb0, 0x29, 0x00, 0x52, 0x25, - 0x4c, 0x11, 0x2e, 0x00, 0x60, 0x0c, 0x0e, 0x95, 0xf5, 0x01, 0x48, 0xb5, + 0x07, 0x3b, 0x01, 0x79, 0x49, 0x46, 0xaf, 0xb0, 0x29, 0x00, 0x52, 0x3a, + 0x4c, 0x11, 0x2e, 0x00, 0x60, 0x0c, 0x0e, 0x95, 0xf5, 0x01, 0x48, 0xca, 0x6c, 0x10, 0x23, 0x00, 0xb0, 0x53, 0x4d, 0xbd, 0x30, 0x2e, 0x2e, 0x00, - 0xb2, 0x39, 0xb3, 0x2b, 0xb4, 0x06, 0x4c, 0xe0, 0x8e, 0x94, 0xf5, 0x41, - 0x06, 0x35, 0xd2, 0x13, 0x44, 0x9a, 0x20, 0x3d, 0x22, 0x80, 0x06, 0x4b, - 0xd4, 0x99, 0x37, 0x20, 0x40, 0x47, 0xa1, 0x11, 0xcd, 0x22, 0x40, 0x49, - 0x9a, 0xae, 0x93, 0xf5, 0x01, 0x47, 0x9d, 0xcc, 0x92, 0xf5, 0x41, 0x53, - 0xa5, 0x42, 0x43, 0x21, 0x00, 0x48, 0x32, 0x54, 0x4f, 0x20, 0x40, 0x5f, - 0x4a, 0x0f, 0x91, 0xf5, 0x01, 0x4a, 0x31, 0x40, 0xfe, 0x2b, 0x00, 0x5a, - 0x50, 0x1f, 0x19, 0x26, 0x40, 0x4b, 0x3b, 0x95, 0x4b, 0x20, 0x00, 0x44, + 0xb2, 0x39, 0xb3, 0x2b, 0xb4, 0x06, 0x4c, 0xf3, 0x8e, 0x94, 0xf5, 0x41, + 0x06, 0x51, 0xd2, 0x13, 0x44, 0x9a, 0x20, 0x3d, 0x22, 0x80, 0x06, 0x4b, + 0xe7, 0x99, 0x37, 0x20, 0x40, 0x47, 0xa1, 0x11, 0xcd, 0x22, 0x40, 0x49, + 0xb6, 0xae, 0x93, 0xf5, 0x01, 0x47, 0xb9, 0xcc, 0x92, 0xf5, 0x41, 0x53, + 0xba, 0x42, 0x43, 0x21, 0x00, 0x48, 0x47, 0x54, 0x4f, 0x20, 0x40, 0x5f, + 0x4a, 0x0f, 0x91, 0xf5, 0x01, 0x4a, 0x46, 0x40, 0xfe, 0x2b, 0x00, 0x5a, + 0x50, 0x1f, 0x19, 0x26, 0x40, 0x4b, 0x4e, 0x95, 0x4b, 0x20, 0x00, 0x44, 0xd3, 0x18, 0x35, 0x20, 0x40, 0x45, 0xd2, 0x18, 0x36, 0x20, 0x80, 0x06, - 0x4f, 0xae, 0x6c, 0xed, 0x2a, 0x40, 0x4f, 0x1d, 0x04, 0x1d, 0x30, 0x40, - 0x4e, 0x41, 0x59, 0xa5, 0x29, 0x40, 0x4d, 0x59, 0x7a, 0x7f, 0xf6, 0x01, + 0x4f, 0xc3, 0x6c, 0xed, 0x2a, 0x40, 0x4f, 0x1d, 0x04, 0x1d, 0x30, 0x40, + 0x4e, 0x56, 0x59, 0xa5, 0x29, 0x40, 0x4d, 0x60, 0x7a, 0x7f, 0xf6, 0x01, 0x45, 0xe7, 0x0e, 0x8d, 0x00, 0x00, 0x02, 0xc3, 0x01, 0x2d, 0x47, 0x67, - 0x2d, 0x5c, 0x00, 0x80, 0x11, 0x15, 0xf9, 0x39, 0x01, 0xff, 0x4f, 0x67, + 0x2d, 0x5c, 0x00, 0x80, 0x11, 0x15, 0x0e, 0x3a, 0x01, 0xff, 0x4f, 0x67, 0x06, 0x41, 0x2b, 0x00, 0x50, 0xb3, 0x02, 0x47, 0x2b, 0x40, 0x80, 0x01, - 0xff, 0x48, 0x4b, 0x1b, 0xf5, 0x29, 0x00, 0x50, 0x99, 0x5f, 0xc8, 0x27, + 0xff, 0x48, 0x4b, 0x1b, 0xf5, 0x29, 0x00, 0x50, 0xae, 0x5f, 0xc8, 0x27, 0x00, 0x56, 0xf8, 0x33, 0xf7, 0x29, 0x40, 0x5e, 0x71, 0x11, 0xc8, 0xf7, 0x01, 0x47, 0x68, 0x1e, 0x8d, 0x00, 0x40, 0x44, 0xc3, 0x00, 0x90, 0x2b, 0x00, 0x45, 0xc8, 0x00, 0x91, 0x2b, 0x00, 0x46, 0xf7, 0x06, 0xce, 0x23, - 0x40, 0x45, 0x35, 0xdf, 0x1f, 0x21, 0x00, 0x02, 0x19, 0x01, 0x01, 0xff, - 0x11, 0x31, 0x55, 0x06, 0x43, 0x5b, 0x4e, 0xbb, 0xf6, 0x41, 0xd1, 0xe0, + 0x40, 0x45, 0x51, 0xdf, 0x1f, 0x21, 0x00, 0x02, 0x19, 0x01, 0x01, 0xff, + 0x11, 0x46, 0x55, 0x06, 0x43, 0x70, 0x4e, 0xbb, 0xf6, 0x41, 0xd1, 0xe0, 0x26, 0x00, 0xd2, 0xe1, 0x26, 0x40, 0x0f, 0x54, 0x2f, 0xc4, 0x01, 0x07, 0xf1, 0x04, 0x37, 0x4c, 0x11, 0x24, 0x5f, 0xa9, 0x00, 0xb6, 0x01, 0xff, - 0x45, 0x48, 0x21, 0x53, 0xa9, 0x00, 0x0a, 0x5c, 0x70, 0x01, 0xff, 0xa1, + 0x45, 0x48, 0x21, 0x53, 0xa9, 0x00, 0x0a, 0x71, 0x70, 0x01, 0xff, 0xa1, 0x19, 0xe5, 0x49, 0xa9, 0x80, 0x0c, 0xe9, 0x47, 0xa9, 0x00, 0xef, 0x4b, 0xa9, 0x00, 0xf5, 0x48, 0xa9, 0x40, 0xe1, 0x4e, 0xa9, 0x00, 0xf5, 0x4d, 0xa9, 0x40, 0xe9, 0x4a, 0xa9, 0x00, 0xf5, 0x4c, 0xa9, 0x40, 0xe1, 0x46, @@ -5096,7 +5097,7 @@ static const unsigned char uname2c_tree[210697] = { 0x24, 0x02, 0x43, 0xa9, 0x40, 0xe1, 0x38, 0xa9, 0x00, 0x42, 0x16, 0x00, 0x42, 0xa9, 0x40, 0xe8, 0x52, 0xa9, 0x00, 0xee, 0x50, 0xa9, 0x80, 0x04, 0xf2, 0x51, 0xa9, 0x40, 0xe7, 0x4f, 0xa9, 0x40, 0x1d, 0x6f, 0x14, 0x06, - 0x4b, 0xb0, 0x9a, 0xae, 0x00, 0x40, 0xe1, 0xe6, 0xf1, 0x01, 0xe2, 0xe7, + 0x4b, 0xc3, 0x9a, 0xae, 0x00, 0x40, 0xe1, 0xe6, 0xf1, 0x01, 0xe2, 0xe7, 0xf1, 0x01, 0xe3, 0xe8, 0xf1, 0x01, 0xe4, 0xe9, 0xf1, 0x01, 0xe5, 0xea, 0xf1, 0x01, 0xe6, 0xeb, 0xf1, 0x01, 0xe7, 0xec, 0xf1, 0x01, 0xe8, 0xed, 0xf1, 0x01, 0xe9, 0xee, 0xf1, 0x01, 0xea, 0xef, 0xf1, 0x01, 0xeb, 0xf0, @@ -5105,153 +5106,153 @@ static const unsigned char uname2c_tree[210697] = { 0xf1, 0x01, 0xf2, 0xf7, 0xf1, 0x01, 0xf3, 0xf8, 0xf1, 0x01, 0xf4, 0xf9, 0xf1, 0x01, 0xf5, 0xfa, 0xf1, 0x01, 0xf6, 0xfb, 0xf1, 0x01, 0xf7, 0xfc, 0xf1, 0x01, 0xf8, 0xfd, 0xf1, 0x01, 0xf9, 0xfe, 0xf1, 0x01, 0xfa, 0xff, - 0xf1, 0x41, 0x45, 0xa4, 0xd9, 0x4e, 0xf3, 0x01, 0x4d, 0x47, 0x7c, 0xe7, - 0xf9, 0x41, 0x44, 0xaa, 0xe4, 0xfe, 0xf9, 0x01, 0x4d, 0x0c, 0x60, 0x1e, - 0x00, 0x00, 0x51, 0x95, 0x57, 0x99, 0xf6, 0x01, 0x03, 0x85, 0x22, 0x01, - 0xff, 0x4f, 0xe0, 0x26, 0x7c, 0x26, 0x00, 0x0f, 0xd1, 0x67, 0x01, 0xff, - 0x51, 0x98, 0x54, 0x7a, 0x26, 0x00, 0x05, 0xe3, 0x1e, 0x01, 0xff, 0x4a, - 0x4f, 0x9e, 0x73, 0x26, 0x00, 0x4a, 0x63, 0x9e, 0x74, 0x26, 0x00, 0x4a, - 0x77, 0x9e, 0x75, 0x26, 0x00, 0x4a, 0x81, 0x9e, 0x76, 0x26, 0x00, 0x4a, - 0x8b, 0x9e, 0x77, 0x26, 0x00, 0x4a, 0x95, 0x9e, 0x78, 0x26, 0x00, 0x4a, - 0x9f, 0x9e, 0x79, 0x26, 0x40, 0x44, 0x3e, 0xe4, 0x07, 0xf4, 0x81, 0xc4, + 0xf1, 0x41, 0x45, 0xc0, 0xd9, 0x4e, 0xf3, 0x01, 0x4d, 0x4e, 0x7c, 0xe7, + 0xf9, 0x41, 0x44, 0xc6, 0xe4, 0xfe, 0xf9, 0x01, 0x4d, 0x21, 0x60, 0x1e, + 0x00, 0x00, 0x51, 0xaa, 0x57, 0x99, 0xf6, 0x01, 0x03, 0x85, 0x22, 0x01, + 0xff, 0x4f, 0xe0, 0x26, 0x7c, 0x26, 0x00, 0x0f, 0xe6, 0x67, 0x01, 0xff, + 0x51, 0xad, 0x54, 0x7a, 0x26, 0x00, 0x05, 0xe3, 0x1e, 0x01, 0xff, 0x4a, + 0x62, 0x9e, 0x73, 0x26, 0x00, 0x4a, 0x76, 0x9e, 0x74, 0x26, 0x00, 0x4a, + 0x8a, 0x9e, 0x75, 0x26, 0x00, 0x4a, 0x94, 0x9e, 0x76, 0x26, 0x00, 0x4a, + 0x9e, 0x9e, 0x77, 0x26, 0x00, 0x4a, 0xa8, 0x9e, 0x78, 0x26, 0x00, 0x4a, + 0xb2, 0x9e, 0x79, 0x26, 0x40, 0x44, 0x5a, 0xe4, 0x07, 0xf4, 0x81, 0xc4, 0x01, 0xa3, 0xaa, 0x01, 0x02, 0x00, 0x00, 0x8e, 0x01, 0xa9, 0x15, 0xed, - 0x0f, 0xf4, 0x01, 0xf4, 0x00, 0xf4, 0x81, 0x06, 0x43, 0xb1, 0xe9, 0x92, - 0xfa, 0x41, 0x42, 0xb5, 0x00, 0x36, 0x22, 0x40, 0x05, 0x82, 0xdd, 0x67, - 0xee, 0xc6, 0x26, 0x80, 0x5c, 0x04, 0xc7, 0x02, 0x01, 0xff, 0x4c, 0x08, + 0x0f, 0xf4, 0x01, 0xf4, 0x00, 0xf4, 0x81, 0x06, 0x43, 0xcd, 0xe9, 0x92, + 0xfa, 0x41, 0x42, 0xb5, 0x00, 0x36, 0x22, 0x40, 0x05, 0x9e, 0xdd, 0x67, + 0xee, 0xc6, 0x26, 0x80, 0x5c, 0x04, 0xc7, 0x02, 0x01, 0xff, 0x4c, 0x0f, 0x85, 0x1a, 0xf9, 0x01, 0x45, 0x18, 0x04, 0x34, 0x2e, 0x00, 0x43, 0xc5, - 0x06, 0x33, 0x2e, 0x80, 0x3e, 0x44, 0xef, 0xc0, 0x0a, 0x27, 0x00, 0x44, + 0x06, 0x33, 0x2e, 0x80, 0x3e, 0x44, 0x0b, 0xc1, 0x0a, 0x27, 0x00, 0x44, 0x1e, 0x0c, 0x0b, 0x27, 0x80, 0x20, 0x54, 0x5b, 0x28, 0x06, 0x2e, 0x00, - 0xad, 0x06, 0x46, 0xdb, 0x04, 0x0b, 0x2e, 0x40, 0x46, 0x02, 0x5e, 0x6a, - 0xf1, 0x01, 0x46, 0x40, 0x42, 0x6b, 0xf1, 0x01, 0x46, 0x87, 0x0c, 0x6c, + 0xad, 0x06, 0x46, 0xdb, 0x04, 0x0b, 0x2e, 0x40, 0x46, 0x17, 0x5e, 0x6a, + 0xf1, 0x01, 0x46, 0x55, 0x42, 0x6b, 0xf1, 0x01, 0x46, 0x87, 0x0c, 0x6c, 0xf1, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4f, 0x5a, 0x0f, 0x90, 0xf5, 0x01, 0x64, 0xc1, 0x08, 0x96, 0xf5, 0x41, 0x58, 0x57, 0x28, 0x07, 0x2e, - 0x40, 0x43, 0x3f, 0x7a, 0x08, 0xf3, 0x41, 0x43, 0xc7, 0x63, 0x83, 0xf6, - 0x01, 0x45, 0x8e, 0xe0, 0xe4, 0xf6, 0x41, 0x51, 0x44, 0x53, 0xb7, 0x23, - 0x00, 0xef, 0xfb, 0xf4, 0xc1, 0x00, 0x47, 0x04, 0xc3, 0x18, 0xf5, 0x01, - 0x4b, 0xc3, 0x90, 0x22, 0x26, 0x40, 0x44, 0x6a, 0xe4, 0x9d, 0xf9, 0x01, - 0x04, 0xa1, 0x01, 0x01, 0xff, 0x43, 0xc7, 0x63, 0xce, 0xf3, 0x01, 0x4a, - 0x61, 0xa5, 0xcd, 0xf3, 0x41, 0x45, 0xec, 0x06, 0x30, 0xf4, 0x41, 0xa1, - 0x24, 0x06, 0xbf, 0x30, 0x0c, 0x46, 0x83, 0xd2, 0xbb, 0x26, 0x00, 0x4c, - 0x20, 0x04, 0x22, 0x00, 0x40, 0x80, 0x06, 0x4b, 0xde, 0x60, 0x5f, 0x22, + 0x40, 0x43, 0x46, 0x7a, 0x08, 0xf3, 0x41, 0x43, 0xdc, 0x63, 0x83, 0xf6, + 0x01, 0x45, 0xaa, 0xe0, 0xe4, 0xf6, 0x41, 0x51, 0x59, 0x53, 0xb7, 0x23, + 0x00, 0xef, 0xfb, 0xf4, 0xc1, 0x00, 0x47, 0x20, 0xc3, 0x18, 0xf5, 0x01, + 0x4b, 0xd6, 0x90, 0x22, 0x26, 0x40, 0x44, 0x86, 0xe4, 0x9d, 0xf9, 0x01, + 0x04, 0xa1, 0x01, 0x01, 0xff, 0x43, 0xdc, 0x63, 0xce, 0xf3, 0x01, 0x4a, + 0x74, 0xa5, 0xcd, 0xf3, 0x41, 0x45, 0xec, 0x06, 0x30, 0xf4, 0x41, 0xa1, + 0x24, 0x06, 0xbf, 0x30, 0x0c, 0x46, 0x9f, 0xd2, 0xbb, 0x26, 0x00, 0x4c, + 0x20, 0x04, 0x22, 0x00, 0x40, 0x80, 0x06, 0x4b, 0xf3, 0x60, 0x5f, 0x22, 0x40, 0x50, 0xad, 0x00, 0x48, 0x20, 0x00, 0x44, 0xb9, 0x00, 0x3f, 0x00, - 0x40, 0x02, 0x7e, 0x0b, 0x12, 0x43, 0x45, 0x61, 0x7e, 0xf7, 0x01, 0x49, - 0x0a, 0x4f, 0x69, 0x26, 0x00, 0x59, 0xa5, 0x23, 0x16, 0x2a, 0x40, 0x04, - 0xd6, 0x0b, 0x11, 0x05, 0xbf, 0x46, 0x01, 0xff, 0x51, 0xad, 0x23, 0x0c, + 0x40, 0x02, 0x7e, 0x0b, 0x12, 0x43, 0x5a, 0x61, 0x7e, 0xf7, 0x01, 0x49, + 0x1f, 0x4f, 0x69, 0x26, 0x00, 0x59, 0xa5, 0x23, 0x16, 0x2a, 0x40, 0x04, + 0xd6, 0x0b, 0x11, 0x05, 0xd4, 0x46, 0x01, 0xff, 0x51, 0xad, 0x23, 0x0c, 0x2a, 0x00, 0x45, 0xd2, 0x18, 0x57, 0x20, 0x40, 0x06, 0x13, 0x01, 0x46, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x44, 0xc3, 0x00, 0x98, 0x25, 0x80, 0x14, - 0x45, 0xc8, 0x00, 0x9d, 0x25, 0xc0, 0x00, 0x4f, 0xc7, 0x62, 0x9e, 0x25, - 0xc0, 0x00, 0x50, 0x44, 0x3f, 0x9f, 0x25, 0x40, 0x05, 0x19, 0x00, 0x01, + 0x45, 0xc8, 0x00, 0x9d, 0x25, 0xc0, 0x00, 0x4f, 0xdc, 0x62, 0x9e, 0x25, + 0xc0, 0x00, 0x50, 0x59, 0x3f, 0x9f, 0x25, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x06, 0x13, 0x01, 0x11, 0x16, 0xb6, 0x33, 0x01, 0xff, 0x44, 0xc3, - 0x00, 0x9b, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x9c, 0x25, 0x40, 0x54, 0x40, + 0x00, 0x9b, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x9c, 0x25, 0x40, 0x54, 0x55, 0x3f, 0x99, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x9a, 0x25, 0x40, 0x44, 0xc3, 0x00, 0x96, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x97, 0x25, 0x40, 0xa1, 0x88, 0x18, 0xa5, 0xf5, 0x15, 0xa8, 0xdf, 0x0e, 0xa9, 0xd8, 0x0d, 0xac, 0xeb, - 0x07, 0xaf, 0x8c, 0x06, 0xb2, 0xfc, 0x01, 0x0f, 0x36, 0x6c, 0x33, 0xb5, + 0x07, 0xaf, 0x8c, 0x06, 0xb2, 0xfc, 0x01, 0x0f, 0x4b, 0x6c, 0x33, 0xb5, 0x01, 0xff, 0x58, 0x97, 0x24, 0xe2, 0xf4, 0x01, 0x04, 0xa5, 0x0a, 0x1a, - 0xb2, 0x0c, 0x45, 0xa7, 0xca, 0xcc, 0xf4, 0x01, 0x5c, 0x31, 0x17, 0xae, - 0xf6, 0x41, 0x49, 0x94, 0xb4, 0x9c, 0xf4, 0x01, 0x42, 0xc7, 0x02, 0x5b, - 0xf4, 0x41, 0x4b, 0x68, 0x91, 0x08, 0x20, 0x00, 0x4f, 0x18, 0x6c, 0x4e, - 0x2e, 0x40, 0x0f, 0x96, 0x66, 0xb4, 0x01, 0x07, 0xf1, 0x04, 0x3f, 0x07, - 0xbf, 0x35, 0x0c, 0x4c, 0x11, 0x24, 0x99, 0x0b, 0x01, 0x53, 0x5c, 0x48, + 0xb2, 0x0c, 0x45, 0xc3, 0xca, 0xcc, 0xf4, 0x01, 0x5c, 0x31, 0x17, 0xae, + 0xf6, 0x41, 0x49, 0xb0, 0xb4, 0x9c, 0xf4, 0x01, 0x42, 0xc7, 0x02, 0x5b, + 0xf4, 0x41, 0x4b, 0x7b, 0x91, 0x08, 0x20, 0x00, 0x4f, 0x2d, 0x6c, 0x4e, + 0x2e, 0x40, 0x0f, 0xab, 0x66, 0xb4, 0x01, 0x07, 0xf1, 0x04, 0x3f, 0x07, + 0xbf, 0x35, 0x0c, 0x4c, 0x11, 0x24, 0x99, 0x0b, 0x01, 0x53, 0x71, 0x48, 0x9a, 0x0b, 0x41, 0x44, 0xfa, 0x05, 0xac, 0x0b, 0x01, 0x43, 0xcd, 0x09, 0xa9, 0x0b, 0x81, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xad, 0x0b, 0x01, 0x44, 0x25, 0x01, 0xab, 0x0b, 0x01, 0xb7, 0x01, 0xff, 0x44, 0x98, 0x1b, 0xae, 0x0b, 0x01, 0xef, 0xaa, 0x0b, 0x41, 0x48, 0xe8, 0x0f, 0xaf, - 0x0b, 0x41, 0x45, 0x02, 0xa5, 0x80, 0x0b, 0x01, 0x44, 0x46, 0xe4, 0x81, - 0x0b, 0x01, 0x46, 0x8d, 0x44, 0x83, 0x0b, 0x01, 0x45, 0x4b, 0xa2, 0x82, - 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x84, 0x0b, 0x81, 0x4c, 0x44, 0xba, 0xe5, - 0x89, 0x0b, 0x01, 0x46, 0x1f, 0xd3, 0x8a, 0x0b, 0x01, 0x48, 0x6d, 0xbe, + 0x0b, 0x41, 0x45, 0x15, 0xa5, 0x80, 0x0b, 0x01, 0x44, 0x62, 0xe4, 0x81, + 0x0b, 0x01, 0x46, 0xa2, 0x44, 0x83, 0x0b, 0x01, 0x45, 0x5e, 0xa2, 0x82, + 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x84, 0x0b, 0x81, 0x4c, 0x44, 0xd6, 0xe5, + 0x89, 0x0b, 0x01, 0x46, 0x3b, 0xd3, 0x8a, 0x0b, 0x01, 0x48, 0x89, 0xbe, 0x8b, 0x0b, 0x01, 0x43, 0x40, 0x20, 0x8c, 0x0b, 0x01, 0x42, 0x6f, 0x02, - 0x8e, 0x0b, 0x01, 0xb3, 0x18, 0x43, 0xf1, 0xba, 0x91, 0x0b, 0x01, 0x4d, - 0x08, 0x83, 0x85, 0x0b, 0x01, 0x44, 0xf9, 0x4c, 0x88, 0x0b, 0x01, 0x45, - 0xf3, 0x4c, 0x86, 0x0b, 0x41, 0xa1, 0x06, 0x43, 0x99, 0x14, 0x90, 0x0b, - 0x41, 0x43, 0xd7, 0xdf, 0x8f, 0x0b, 0x01, 0x44, 0x96, 0xd9, 0x8d, 0x0b, + 0x8e, 0x0b, 0x01, 0xb3, 0x18, 0x43, 0x0d, 0xbb, 0x91, 0x0b, 0x01, 0x4d, + 0x0f, 0x83, 0x85, 0x0b, 0x01, 0x44, 0x0e, 0x4d, 0x88, 0x0b, 0x01, 0x45, + 0x08, 0x4d, 0x86, 0x0b, 0x41, 0xa1, 0x06, 0x43, 0x99, 0x14, 0x90, 0x0b, + 0x41, 0x43, 0xf3, 0xdf, 0x8f, 0x0b, 0x01, 0x44, 0xb2, 0xd9, 0x8d, 0x0b, 0x41, 0x42, 0x53, 0x00, 0x87, 0x0b, 0x41, 0x45, 0x0d, 0x0f, 0x9b, 0x0b, - 0x01, 0x43, 0xc5, 0x06, 0x9c, 0x0b, 0x41, 0x4a, 0x99, 0x9f, 0xff, 0xf4, - 0x01, 0xa5, 0x86, 0x01, 0xa9, 0x30, 0xaf, 0x01, 0xff, 0x49, 0x9e, 0xad, - 0xaf, 0xf9, 0x01, 0x4c, 0x2c, 0x88, 0xc7, 0xf6, 0x01, 0x47, 0x05, 0xc8, - 0x05, 0x23, 0x00, 0xb0, 0x06, 0x47, 0x7e, 0xcb, 0xd8, 0x2b, 0x40, 0x49, - 0x4e, 0xaf, 0x4a, 0x21, 0x00, 0x46, 0x92, 0x21, 0x37, 0x22, 0xc0, 0x00, + 0x01, 0x43, 0xc5, 0x06, 0x9c, 0x0b, 0x41, 0x4a, 0xac, 0x9f, 0xff, 0xf4, + 0x01, 0xa5, 0x86, 0x01, 0xa9, 0x30, 0xaf, 0x01, 0xff, 0x49, 0xb1, 0xad, + 0xaf, 0xf9, 0x01, 0x4c, 0x33, 0x88, 0xc7, 0xf6, 0x01, 0x47, 0x21, 0xc8, + 0x05, 0x23, 0x00, 0xb0, 0x06, 0x47, 0x9a, 0xcb, 0xd8, 0x2b, 0x40, 0x49, + 0x6a, 0xaf, 0x4a, 0x21, 0x00, 0x46, 0x92, 0x21, 0x37, 0x22, 0xc0, 0x00, 0x45, 0x75, 0x0b, 0x1d, 0x22, 0x40, 0x42, 0x2a, 0x02, 0x32, 0x20, 0x00, - 0xae, 0x29, 0x02, 0xb4, 0x09, 0x01, 0xff, 0x4a, 0x7f, 0xa0, 0x9e, 0x00, - 0x00, 0x06, 0xe3, 0xd5, 0x01, 0xff, 0x80, 0x0b, 0x8d, 0x01, 0xff, 0xd1, + 0xae, 0x29, 0x02, 0xb4, 0x09, 0x01, 0xff, 0x4a, 0x92, 0xa0, 0x9e, 0x00, + 0x00, 0x06, 0xff, 0xd5, 0x01, 0xff, 0x80, 0x0b, 0x8d, 0x01, 0xff, 0xd1, 0x91, 0x00, 0x00, 0xd2, 0x92, 0x00, 0x40, 0x43, 0xcd, 0x09, 0x91, 0x00, 0x00, 0x43, 0x25, 0x09, 0x92, 0x00, 0x40, 0x42, 0x73, 0x02, 0x34, 0xf9, - 0x81, 0x16, 0xb4, 0x01, 0xff, 0x4e, 0x24, 0x54, 0x99, 0x23, 0x00, 0x42, - 0x33, 0x00, 0xa8, 0xf5, 0xc1, 0x00, 0x45, 0x1f, 0xd7, 0xb6, 0xf5, 0x41, - 0x42, 0xee, 0x00, 0x78, 0xf4, 0x41, 0x45, 0x08, 0xc0, 0x7a, 0x22, 0x80, - 0xa6, 0x02, 0x06, 0xb1, 0xd1, 0x8f, 0x02, 0xb3, 0x0c, 0x44, 0x9a, 0xe7, - 0x68, 0xf9, 0x01, 0x4a, 0x61, 0xaa, 0x97, 0x23, 0x40, 0x4d, 0x8d, 0x7a, + 0x81, 0x16, 0xb4, 0x01, 0xff, 0x4e, 0x39, 0x54, 0x99, 0x23, 0x00, 0x42, + 0x33, 0x00, 0xa8, 0xf5, 0xc1, 0x00, 0x45, 0x3b, 0xd7, 0xb6, 0xf5, 0x41, + 0x42, 0xee, 0x00, 0x78, 0xf4, 0x41, 0x45, 0x24, 0xc0, 0x7a, 0x22, 0x80, + 0xa6, 0x02, 0x06, 0xcd, 0xd1, 0x8f, 0x02, 0xb3, 0x0c, 0x44, 0xb6, 0xe7, + 0x68, 0xf9, 0x01, 0x4a, 0x74, 0xaa, 0x97, 0x23, 0x40, 0x4d, 0x94, 0x7a, 0x1e, 0x21, 0x00, 0x1b, 0x1c, 0x19, 0x01, 0xff, 0x02, 0x18, 0x04, 0xe5, 0x01, 0xa5, 0xd0, 0x01, 0x53, 0xc4, 0x26, 0x19, 0xfe, 0x00, 0x0c, 0xe4, 0x1d, 0xb9, 0x01, 0xac, 0x6a, 0x4d, 0xbd, 0x30, 0x16, 0xfe, 0x00, 0x06, - 0xc8, 0x00, 0x12, 0x49, 0x90, 0xb5, 0x14, 0xfe, 0x00, 0x4e, 0xb0, 0x76, - 0x30, 0xfe, 0x00, 0x4d, 0xee, 0x82, 0x34, 0xfe, 0x40, 0x4d, 0x96, 0x0d, + 0xc8, 0x00, 0x12, 0x49, 0xac, 0xb5, 0x14, 0xfe, 0x00, 0x4e, 0xb7, 0x76, + 0x30, 0xfe, 0x00, 0x4d, 0xf5, 0x82, 0x34, 0xfe, 0x40, 0x4d, 0x96, 0x0d, 0x40, 0xfe, 0x00, 0x58, 0x7f, 0x24, 0x3c, 0xfe, 0x00, 0xa3, 0x34, 0x54, - 0xc0, 0x3c, 0x3e, 0xfe, 0x00, 0x4b, 0x70, 0x1f, 0x36, 0xfe, 0x00, 0x4e, + 0xd5, 0x3c, 0x3e, 0xfe, 0x00, 0x4b, 0x70, 0x1f, 0x36, 0xfe, 0x00, 0x4e, 0xe1, 0x23, 0x48, 0xfe, 0x00, 0x56, 0x36, 0x08, 0x3a, 0xfe, 0x00, 0x06, - 0xad, 0x02, 0x01, 0xff, 0x4e, 0xe6, 0x62, 0x44, 0xfe, 0x00, 0x0e, 0x85, - 0x24, 0x01, 0xff, 0x44, 0x48, 0x08, 0x18, 0xfe, 0x00, 0x44, 0xbe, 0xe5, - 0x18, 0xfe, 0x40, 0x4d, 0xe7, 0x62, 0x42, 0xfe, 0x00, 0x4c, 0x89, 0x08, - 0x38, 0xfe, 0x40, 0x04, 0xc4, 0x00, 0x06, 0x47, 0xf4, 0x82, 0x33, 0xfe, + 0xad, 0x02, 0x01, 0xff, 0x4e, 0xfb, 0x62, 0x44, 0xfe, 0x00, 0x0e, 0x85, + 0x24, 0x01, 0xff, 0x44, 0x48, 0x08, 0x18, 0xfe, 0x00, 0x44, 0xda, 0xe5, + 0x18, 0xfe, 0x40, 0x4d, 0xfc, 0x62, 0x42, 0xfe, 0x00, 0x4c, 0x89, 0x08, + 0x38, 0xfe, 0x40, 0x04, 0xc4, 0x00, 0x06, 0x47, 0xfb, 0x82, 0x33, 0xfe, 0x40, 0x4d, 0x96, 0x0d, 0x3f, 0xfe, 0x00, 0x58, 0x7f, 0x24, 0x3b, 0xfe, - 0x00, 0xa3, 0x29, 0x54, 0xc0, 0x3c, 0x3d, 0xfe, 0x00, 0x4b, 0x70, 0x1f, + 0x00, 0xa3, 0x29, 0x54, 0xd5, 0x3c, 0x3d, 0xfe, 0x00, 0x4b, 0x70, 0x1f, 0x35, 0xfe, 0x00, 0x4e, 0xe1, 0x23, 0x47, 0xfe, 0x00, 0x56, 0x36, 0x08, - 0x39, 0xfe, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, 0x4e, 0xe6, 0x62, 0x43, - 0xfe, 0x00, 0x52, 0x85, 0x24, 0x17, 0xfe, 0x40, 0x4d, 0xe7, 0x62, 0x41, + 0x39, 0xfe, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, 0x4e, 0xfb, 0x62, 0x43, + 0xfe, 0x00, 0x52, 0x85, 0x24, 0x17, 0xfe, 0x40, 0x4d, 0xfc, 0x62, 0x41, 0xfe, 0x00, 0x4c, 0x89, 0x08, 0x37, 0xfe, 0x40, 0x45, 0x18, 0x04, 0x11, - 0xfe, 0x00, 0x49, 0xa0, 0x14, 0x12, 0xfe, 0x40, 0x46, 0x17, 0xb9, 0x31, - 0xfe, 0x00, 0x46, 0x91, 0xd3, 0x32, 0xfe, 0x00, 0x4f, 0xae, 0x00, 0x15, + 0xfe, 0x00, 0x49, 0xa0, 0x14, 0x12, 0xfe, 0x40, 0x46, 0x33, 0xb9, 0x31, + 0xfe, 0x00, 0x46, 0xad, 0xd3, 0x32, 0xfe, 0x00, 0x4f, 0xae, 0x00, 0x15, 0xfe, 0x40, 0x43, 0xac, 0x10, 0x13, 0xfe, 0x00, 0x43, 0x1a, 0x04, 0x10, 0xfe, 0x40, 0x43, 0x60, 0x16, 0xc3, 0xfa, 0x01, 0x46, 0xeb, 0x1a, 0xc4, 0xfa, 0x01, 0x45, 0xbc, 0x29, 0x30, 0xf9, 0x41, 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x1c, 0x55, 0x8b, 0x35, 0xe8, 0x22, 0x00, 0x06, 0xf4, 0x25, - 0x06, 0x4e, 0x04, 0x77, 0xb0, 0x22, 0x40, 0x45, 0x75, 0x0b, 0x7c, 0x22, - 0x00, 0x4a, 0x96, 0x35, 0x7e, 0x22, 0x40, 0x4f, 0x3e, 0x64, 0xb7, 0x2a, + 0x06, 0x4e, 0x0b, 0x77, 0xb0, 0x22, 0x40, 0x45, 0x75, 0x0b, 0x7c, 0x22, + 0x00, 0x4a, 0x96, 0x35, 0x7e, 0x22, 0x40, 0x4f, 0x53, 0x64, 0xb7, 0x2a, 0x00, 0x4b, 0xa2, 0x11, 0xb3, 0x2a, 0x00, 0x04, 0xd4, 0x20, 0x11, 0x0c, 0xdf, 0x27, 0x01, 0xff, 0x4b, 0xa2, 0x11, 0xaf, 0x2a, 0x00, 0x4c, 0xeb, - 0x27, 0xb1, 0x2a, 0x40, 0x4f, 0x3e, 0x64, 0xb9, 0x2a, 0x00, 0x48, 0x72, - 0x0b, 0xb5, 0x2a, 0x40, 0x4f, 0x2e, 0x65, 0xa9, 0xf5, 0x01, 0x05, 0xdf, - 0xa6, 0xbe, 0x01, 0x44, 0xaa, 0xe6, 0x29, 0xf4, 0x01, 0xb0, 0x9f, 0x01, - 0x4d, 0xbf, 0x80, 0xfe, 0xf4, 0x01, 0xb3, 0x6b, 0xb4, 0x4f, 0xb5, 0x24, + 0x27, 0xb1, 0x2a, 0x40, 0x4f, 0x53, 0x64, 0xb9, 0x2a, 0x00, 0x48, 0x72, + 0x0b, 0xb5, 0x2a, 0x40, 0x4f, 0x43, 0x65, 0xa9, 0xf5, 0x01, 0x05, 0xf2, + 0xa6, 0xbe, 0x01, 0x44, 0xc6, 0xe6, 0x29, 0xf4, 0x01, 0xb0, 0x9f, 0x01, + 0x4d, 0xc6, 0x80, 0xfe, 0xf4, 0x01, 0xb3, 0x6b, 0xb4, 0x4f, 0xb5, 0x24, 0x04, 0x15, 0x01, 0x01, 0xff, 0x02, 0x10, 0x00, 0x0f, 0xb3, 0x01, 0xff, - 0x4b, 0x59, 0x96, 0xfe, 0x23, 0x00, 0x45, 0xf8, 0x06, 0xfb, 0x23, 0x40, - 0x47, 0xf6, 0x06, 0xfd, 0x23, 0x00, 0x4b, 0x81, 0x90, 0xfc, 0x23, 0x40, - 0x42, 0x98, 0x14, 0x5d, 0xf4, 0x01, 0x48, 0x25, 0xbe, 0x57, 0xf3, 0x01, - 0x47, 0x3f, 0x42, 0xa3, 0x00, 0x00, 0x4b, 0xc9, 0x99, 0xd7, 0xfa, 0x01, + 0x4b, 0x6c, 0x96, 0xfe, 0x23, 0x00, 0x45, 0xf8, 0x06, 0xfb, 0x23, 0x40, + 0x47, 0xf6, 0x06, 0xfd, 0x23, 0x00, 0x4b, 0x94, 0x90, 0xfc, 0x23, 0x40, + 0x42, 0x98, 0x14, 0x5d, 0xf4, 0x01, 0x48, 0x41, 0xbe, 0x57, 0xf3, 0x01, + 0x47, 0x54, 0x42, 0xa3, 0x00, 0x00, 0x4b, 0xdc, 0x99, 0xd7, 0xfa, 0x01, 0x05, 0xa0, 0x01, 0x01, 0xff, 0x48, 0xfa, 0x1c, 0x3e, 0xf6, 0x01, 0x44, - 0xed, 0x06, 0x21, 0xf6, 0x41, 0x48, 0x81, 0x5e, 0x72, 0xf3, 0x01, 0xa1, - 0x06, 0x49, 0x20, 0xb6, 0xb4, 0xfa, 0x41, 0x50, 0xf8, 0x3f, 0xb0, 0xf6, - 0x01, 0x42, 0x1e, 0x00, 0x54, 0xf9, 0x41, 0x45, 0x25, 0xdb, 0xe7, 0x2b, - 0x00, 0x4f, 0xca, 0x60, 0x16, 0x23, 0x00, 0xb4, 0x01, 0xff, 0x03, 0x13, + 0xed, 0x06, 0x21, 0xf6, 0x41, 0x48, 0x96, 0x5e, 0x72, 0xf3, 0x01, 0xa1, + 0x06, 0x49, 0x3c, 0xb6, 0xb4, 0xfa, 0x41, 0x50, 0x0d, 0x40, 0xb0, 0xf6, + 0x01, 0x42, 0x1e, 0x00, 0x54, 0xf9, 0x41, 0x45, 0x41, 0xdb, 0xe7, 0x2b, + 0x00, 0x4f, 0xdf, 0x60, 0x16, 0x23, 0x00, 0xb4, 0x01, 0xff, 0x03, 0x13, 0x00, 0x06, 0x43, 0x7b, 0x36, 0xee, 0xf4, 0x41, 0x44, 0x02, 0x2a, 0xef, 0xf4, 0x01, 0x44, 0xb9, 0x00, 0x12, 0x30, 0xc0, 0x00, 0x45, 0xec, 0x06, - 0x20, 0x30, 0x40, 0x0d, 0x85, 0x78, 0x06, 0x44, 0x2a, 0x17, 0x7f, 0xf3, - 0x41, 0x4a, 0xdd, 0xa1, 0x2c, 0x20, 0x00, 0x47, 0xe0, 0x02, 0x69, 0x20, - 0x40, 0x43, 0xc7, 0x63, 0x93, 0xf6, 0x81, 0x06, 0x47, 0x78, 0xc9, 0x6e, - 0xf4, 0x41, 0x51, 0xd9, 0x57, 0xa8, 0xf6, 0x41, 0xa1, 0x96, 0x01, 0xb5, + 0x20, 0x30, 0x40, 0x0d, 0x8c, 0x78, 0x06, 0x44, 0x2a, 0x17, 0x7f, 0xf3, + 0x41, 0x4a, 0xf0, 0xa1, 0x2c, 0x20, 0x00, 0x47, 0xe0, 0x02, 0x69, 0x20, + 0x40, 0x43, 0xdc, 0x63, 0x93, 0xf6, 0x81, 0x06, 0x47, 0x94, 0xc9, 0x6e, + 0xf4, 0x41, 0x51, 0xee, 0x57, 0xa8, 0xf6, 0x41, 0xa1, 0x96, 0x01, 0xb5, 0x01, 0xff, 0x44, 0xe0, 0x08, 0xa0, 0xfa, 0x01, 0xb3, 0x29, 0x42, 0x1e, 0x00, 0x47, 0x26, 0xc0, 0x00, 0x06, 0x24, 0x19, 0x01, 0xff, 0xa6, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xd4, 0x2b, 0x00, 0x42, 0x15, 0x02, 0xd3, 0x2b, 0x40, 0x43, 0xd7, 0x04, 0xd6, 0x2b, 0x00, 0x43, 0xfb, 0x05, - 0xd5, 0x2b, 0x40, 0x45, 0xda, 0x02, 0x2b, 0x00, 0x80, 0x06, 0x4b, 0x76, + 0xd5, 0x2b, 0x40, 0x45, 0xda, 0x02, 0x2b, 0x00, 0x80, 0x06, 0x4b, 0x89, 0x90, 0xb1, 0x00, 0x40, 0x80, 0x01, 0xff, 0x51, 0x9c, 0x11, 0x72, 0x2a, - 0x00, 0x03, 0xe6, 0x04, 0x36, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4e, 0x4e, + 0x00, 0x03, 0xe6, 0x04, 0x36, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4e, 0x63, 0x6f, 0x28, 0x2a, 0x00, 0x57, 0x70, 0x2a, 0x23, 0x2a, 0x00, 0x49, 0xf9, 0x10, 0x25, 0x2a, 0x00, 0xb3, 0x11, 0x06, 0x99, 0x20, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x24, 0x2a, 0x00, 0x45, 0x25, 0x06, 0x26, 0x2a, 0x40, 0x51, - 0xaa, 0x4f, 0x22, 0x2a, 0x00, 0x4c, 0x50, 0x8e, 0x27, 0x2a, 0x40, 0x50, - 0x49, 0x5e, 0x2d, 0x2a, 0x00, 0x51, 0xb7, 0x57, 0x2e, 0x2a, 0x00, 0x48, - 0x01, 0x02, 0x39, 0x2a, 0x40, 0xa3, 0xb7, 0x04, 0x4c, 0xd8, 0x8a, 0x0e, - 0x21, 0x80, 0xa9, 0x04, 0xb9, 0x01, 0xff, 0x4c, 0xd8, 0x87, 0xdd, 0xf6, - 0x01, 0x09, 0x19, 0xb1, 0x01, 0xff, 0x07, 0x6d, 0x72, 0xfe, 0x03, 0xa2, - 0xef, 0x03, 0x09, 0x06, 0xaf, 0xd2, 0x03, 0xa6, 0x8d, 0x03, 0x08, 0x75, - 0xbd, 0xf0, 0x02, 0xab, 0xb4, 0x02, 0x08, 0xe5, 0xbe, 0x97, 0x02, 0x09, - 0xca, 0xb4, 0xfa, 0x01, 0x49, 0x09, 0xb5, 0xbf, 0xf0, 0x01, 0xb3, 0xb8, - 0x01, 0xb4, 0x06, 0x4b, 0x94, 0x9c, 0xdf, 0xf0, 0x41, 0x06, 0xcd, 0xb4, - 0x93, 0x01, 0x08, 0x05, 0xbd, 0x77, 0x05, 0xc6, 0xdf, 0x1d, 0x06, 0xaf, - 0xd6, 0x01, 0xff, 0x45, 0xa8, 0xda, 0xd2, 0xf0, 0x01, 0x48, 0x65, 0xbb, - 0xc2, 0xf0, 0x01, 0x46, 0x74, 0x7f, 0xb2, 0xf0, 0x01, 0x46, 0x5f, 0xd5, + 0xbf, 0x4f, 0x22, 0x2a, 0x00, 0x4c, 0x63, 0x8e, 0x27, 0x2a, 0x40, 0x50, + 0x5e, 0x5e, 0x2d, 0x2a, 0x00, 0x51, 0xcc, 0x57, 0x2e, 0x2a, 0x00, 0x48, + 0x01, 0x02, 0x39, 0x2a, 0x40, 0xa3, 0xb7, 0x04, 0x4c, 0xdf, 0x8a, 0x0e, + 0x21, 0x80, 0xa9, 0x04, 0xb9, 0x01, 0xff, 0x4c, 0xdf, 0x87, 0xdd, 0xf6, + 0x01, 0x09, 0x35, 0xb1, 0x01, 0xff, 0x07, 0x82, 0x72, 0xfe, 0x03, 0xa2, + 0xef, 0x03, 0x09, 0x22, 0xaf, 0xd2, 0x03, 0xa6, 0x8d, 0x03, 0x08, 0x91, + 0xbd, 0xf0, 0x02, 0xab, 0xb4, 0x02, 0x08, 0x01, 0xbf, 0x97, 0x02, 0x09, + 0xe6, 0xb4, 0xfa, 0x01, 0x49, 0x25, 0xb5, 0xbf, 0xf0, 0x01, 0xb3, 0xb8, + 0x01, 0xb4, 0x06, 0x4b, 0xa7, 0x9c, 0xdf, 0xf0, 0x41, 0x06, 0xe9, 0xb4, + 0x93, 0x01, 0x08, 0x21, 0xbd, 0x77, 0x05, 0xe2, 0xdf, 0x1d, 0x06, 0xcb, + 0xd6, 0x01, 0xff, 0x45, 0xc4, 0xda, 0xd2, 0xf0, 0x01, 0x48, 0x81, 0xbb, + 0xc2, 0xf0, 0x01, 0x46, 0x7b, 0x7f, 0xb2, 0xf0, 0x01, 0x46, 0x7b, 0xd5, 0xa2, 0xf0, 0x41, 0xd1, 0xe1, 0xf0, 0x81, 0x29, 0xd2, 0xe2, 0xf0, 0x81, 0x1c, 0xd3, 0xe3, 0xf0, 0x01, 0xd4, 0xe4, 0xf0, 0x01, 0xd5, 0xe5, 0xf0, 0x01, 0xd6, 0xe6, 0xf0, 0x01, 0xd7, 0xe7, 0xf0, 0x01, 0xd8, 0xe8, 0xf0, @@ -5259,101 +5260,101 @@ static const unsigned char uname2c_tree[210697] = { 0x41, 0xd0, 0xea, 0xf0, 0x01, 0xd1, 0xeb, 0xf0, 0x01, 0xd2, 0xec, 0xf0, 0x01, 0xd3, 0xed, 0xf0, 0x01, 0xd4, 0xee, 0xf0, 0x01, 0xd5, 0xef, 0xf0, 0x01, 0xd6, 0xf0, 0xf0, 0x01, 0xd7, 0xf1, 0xf0, 0x01, 0xd8, 0xf2, 0xf0, - 0x01, 0xd9, 0xf3, 0xf0, 0x41, 0x45, 0xa8, 0xda, 0xd3, 0xf0, 0x01, 0x48, - 0x65, 0xbb, 0xc3, 0xf0, 0x01, 0x46, 0x74, 0x7f, 0xb3, 0xf0, 0x01, 0x46, - 0x5f, 0xd5, 0xa3, 0xf0, 0x41, 0x45, 0xa8, 0xda, 0xda, 0xf0, 0x01, 0x48, - 0x65, 0xbb, 0xca, 0xf0, 0x01, 0x46, 0x74, 0x7f, 0xba, 0xf0, 0x01, 0x46, - 0x5f, 0xd5, 0xaa, 0xf0, 0x41, 0x08, 0x4d, 0xbc, 0x1d, 0x06, 0xcb, 0xd2, - 0x01, 0xff, 0x45, 0xa8, 0xda, 0xd6, 0xf0, 0x01, 0x48, 0x65, 0xbb, 0xc6, - 0xf0, 0x01, 0x46, 0x74, 0x7f, 0xb6, 0xf0, 0x01, 0x46, 0x5f, 0xd5, 0xa6, - 0xf0, 0x41, 0x45, 0xa8, 0xda, 0xd7, 0xf0, 0x01, 0x48, 0x65, 0xbb, 0xc7, - 0xf0, 0x01, 0x46, 0x74, 0x7f, 0xb7, 0xf0, 0x01, 0x46, 0x5f, 0xd5, 0xa7, - 0xf0, 0x41, 0x45, 0xa8, 0xda, 0xdd, 0xf0, 0x01, 0x48, 0x65, 0xbb, 0xcd, - 0xf0, 0x01, 0x46, 0x74, 0x7f, 0xbd, 0xf0, 0x01, 0x46, 0x5f, 0xd5, 0xad, - 0xf0, 0x41, 0x45, 0xa8, 0xda, 0xd9, 0xf0, 0x01, 0x48, 0x65, 0xbb, 0xc9, - 0xf0, 0x01, 0x46, 0x74, 0x7f, 0xb9, 0xf0, 0x01, 0x46, 0x5f, 0xd5, 0xa9, - 0xf0, 0x41, 0x07, 0x3c, 0x35, 0x1d, 0x09, 0x1a, 0xb3, 0x01, 0xff, 0x45, - 0xa8, 0xda, 0xdc, 0xf0, 0x01, 0x48, 0x65, 0xbb, 0xcc, 0xf0, 0x01, 0x46, - 0x74, 0x7f, 0xbc, 0xf0, 0x01, 0x46, 0x5f, 0xd5, 0xac, 0xf0, 0x41, 0x45, - 0xa8, 0xda, 0xde, 0xf0, 0x01, 0x48, 0x65, 0xbb, 0xce, 0xf0, 0x01, 0x46, - 0x74, 0x7f, 0xbe, 0xf0, 0x01, 0x46, 0x5f, 0xd5, 0xae, 0xf0, 0x41, 0x45, - 0xa8, 0xda, 0xdb, 0xf0, 0x01, 0x48, 0x65, 0xbb, 0xcb, 0xf0, 0x01, 0x46, - 0x74, 0x7f, 0xbb, 0xf0, 0x01, 0x46, 0x5f, 0xd5, 0xab, 0xf0, 0x41, 0x07, - 0xe9, 0xc7, 0x26, 0xaf, 0x01, 0xff, 0x42, 0xe2, 0x02, 0xe0, 0xf0, 0x01, - 0x06, 0xe9, 0xc9, 0x01, 0xff, 0x45, 0xa8, 0xda, 0xd4, 0xf0, 0x01, 0x48, - 0x65, 0xbb, 0xc4, 0xf0, 0x01, 0x46, 0x74, 0x7f, 0xb4, 0xf0, 0x01, 0x46, - 0x5f, 0xd5, 0xa4, 0xf0, 0x41, 0x45, 0xa8, 0xda, 0xd5, 0xf0, 0x01, 0x48, - 0x65, 0xbb, 0xc5, 0xf0, 0x01, 0x46, 0x74, 0x7f, 0xb5, 0xf0, 0x01, 0x46, - 0x5f, 0xd5, 0xa5, 0xf0, 0x41, 0x45, 0xa8, 0xda, 0xd8, 0xf0, 0x01, 0x48, - 0x65, 0xbb, 0xc8, 0xf0, 0x01, 0x46, 0x74, 0x7f, 0xb8, 0xf0, 0x01, 0x46, - 0x5f, 0xd5, 0xa8, 0xf0, 0x41, 0x43, 0x1e, 0x07, 0xa0, 0xf0, 0x01, 0x4a, - 0xdb, 0xa3, 0xcf, 0xf0, 0x41, 0x45, 0xa8, 0xda, 0xd1, 0xf0, 0x01, 0x48, - 0x65, 0xbb, 0xc1, 0xf0, 0x01, 0x46, 0x74, 0x7f, 0xb1, 0xf0, 0x01, 0x46, - 0x5f, 0xd5, 0xa1, 0xf0, 0x41, 0x4c, 0xe8, 0x83, 0x0f, 0x21, 0x40, 0x43, - 0xaa, 0x01, 0xa7, 0xfa, 0x01, 0x05, 0x40, 0x3e, 0x01, 0xff, 0x4d, 0x24, - 0x7d, 0x18, 0x23, 0x00, 0x47, 0x61, 0xcd, 0xd0, 0xf6, 0x41, 0x42, 0x36, + 0x01, 0xd9, 0xf3, 0xf0, 0x41, 0x45, 0xc4, 0xda, 0xd3, 0xf0, 0x01, 0x48, + 0x81, 0xbb, 0xc3, 0xf0, 0x01, 0x46, 0x7b, 0x7f, 0xb3, 0xf0, 0x01, 0x46, + 0x7b, 0xd5, 0xa3, 0xf0, 0x41, 0x45, 0xc4, 0xda, 0xda, 0xf0, 0x01, 0x48, + 0x81, 0xbb, 0xca, 0xf0, 0x01, 0x46, 0x7b, 0x7f, 0xba, 0xf0, 0x01, 0x46, + 0x7b, 0xd5, 0xaa, 0xf0, 0x41, 0x08, 0x69, 0xbc, 0x1d, 0x06, 0xe7, 0xd2, + 0x01, 0xff, 0x45, 0xc4, 0xda, 0xd6, 0xf0, 0x01, 0x48, 0x81, 0xbb, 0xc6, + 0xf0, 0x01, 0x46, 0x7b, 0x7f, 0xb6, 0xf0, 0x01, 0x46, 0x7b, 0xd5, 0xa6, + 0xf0, 0x41, 0x45, 0xc4, 0xda, 0xd7, 0xf0, 0x01, 0x48, 0x81, 0xbb, 0xc7, + 0xf0, 0x01, 0x46, 0x7b, 0x7f, 0xb7, 0xf0, 0x01, 0x46, 0x7b, 0xd5, 0xa7, + 0xf0, 0x41, 0x45, 0xc4, 0xda, 0xdd, 0xf0, 0x01, 0x48, 0x81, 0xbb, 0xcd, + 0xf0, 0x01, 0x46, 0x7b, 0x7f, 0xbd, 0xf0, 0x01, 0x46, 0x7b, 0xd5, 0xad, + 0xf0, 0x41, 0x45, 0xc4, 0xda, 0xd9, 0xf0, 0x01, 0x48, 0x81, 0xbb, 0xc9, + 0xf0, 0x01, 0x46, 0x7b, 0x7f, 0xb9, 0xf0, 0x01, 0x46, 0x7b, 0xd5, 0xa9, + 0xf0, 0x41, 0x07, 0x3c, 0x35, 0x1d, 0x09, 0x36, 0xb3, 0x01, 0xff, 0x45, + 0xc4, 0xda, 0xdc, 0xf0, 0x01, 0x48, 0x81, 0xbb, 0xcc, 0xf0, 0x01, 0x46, + 0x7b, 0x7f, 0xbc, 0xf0, 0x01, 0x46, 0x7b, 0xd5, 0xac, 0xf0, 0x41, 0x45, + 0xc4, 0xda, 0xde, 0xf0, 0x01, 0x48, 0x81, 0xbb, 0xce, 0xf0, 0x01, 0x46, + 0x7b, 0x7f, 0xbe, 0xf0, 0x01, 0x46, 0x7b, 0xd5, 0xae, 0xf0, 0x41, 0x45, + 0xc4, 0xda, 0xdb, 0xf0, 0x01, 0x48, 0x81, 0xbb, 0xcb, 0xf0, 0x01, 0x46, + 0x7b, 0x7f, 0xbb, 0xf0, 0x01, 0x46, 0x7b, 0xd5, 0xab, 0xf0, 0x41, 0x07, + 0x05, 0xc8, 0x26, 0xaf, 0x01, 0xff, 0x42, 0xe2, 0x02, 0xe0, 0xf0, 0x01, + 0x06, 0x05, 0xca, 0x01, 0xff, 0x45, 0xc4, 0xda, 0xd4, 0xf0, 0x01, 0x48, + 0x81, 0xbb, 0xc4, 0xf0, 0x01, 0x46, 0x7b, 0x7f, 0xb4, 0xf0, 0x01, 0x46, + 0x7b, 0xd5, 0xa4, 0xf0, 0x41, 0x45, 0xc4, 0xda, 0xd5, 0xf0, 0x01, 0x48, + 0x81, 0xbb, 0xc5, 0xf0, 0x01, 0x46, 0x7b, 0x7f, 0xb5, 0xf0, 0x01, 0x46, + 0x7b, 0xd5, 0xa5, 0xf0, 0x41, 0x45, 0xc4, 0xda, 0xd8, 0xf0, 0x01, 0x48, + 0x81, 0xbb, 0xc8, 0xf0, 0x01, 0x46, 0x7b, 0x7f, 0xb8, 0xf0, 0x01, 0x46, + 0x7b, 0xd5, 0xa8, 0xf0, 0x41, 0x43, 0x1e, 0x07, 0xa0, 0xf0, 0x01, 0x4a, + 0xee, 0xa3, 0xcf, 0xf0, 0x41, 0x45, 0xc4, 0xda, 0xd1, 0xf0, 0x01, 0x48, + 0x81, 0xbb, 0xc1, 0xf0, 0x01, 0x46, 0x7b, 0x7f, 0xb1, 0xf0, 0x01, 0x46, + 0x7b, 0xd5, 0xa1, 0xf0, 0x41, 0x4c, 0xef, 0x83, 0x0f, 0x21, 0x40, 0x43, + 0xaa, 0x01, 0xa7, 0xfa, 0x01, 0x05, 0x55, 0x3e, 0x01, 0xff, 0x4d, 0x2b, + 0x7d, 0x18, 0x23, 0x00, 0x47, 0x7d, 0xcd, 0xd0, 0xf6, 0x41, 0x42, 0x36, 0x01, 0xcf, 0x26, 0x80, 0x77, 0xe5, 0x67, 0xf9, 0x01, 0xe7, 0x16, 0xf4, - 0x81, 0x5f, 0xac, 0x4d, 0xae, 0x1b, 0xb3, 0x0d, 0x47, 0x0a, 0xcc, 0xd4, - 0x22, 0xc0, 0x00, 0x4d, 0xfa, 0x78, 0xda, 0x2a, 0x40, 0x43, 0x6c, 0x75, - 0x53, 0x26, 0x00, 0x43, 0x3e, 0x38, 0x2b, 0xf5, 0x41, 0x43, 0xda, 0x16, + 0x81, 0x5f, 0xac, 0x4d, 0xae, 0x1b, 0xb3, 0x0d, 0x47, 0x26, 0xcc, 0xd4, + 0x22, 0xc0, 0x00, 0x4d, 0x01, 0x79, 0xda, 0x2a, 0x40, 0x43, 0x81, 0x75, + 0x53, 0x26, 0x00, 0x43, 0x53, 0x38, 0x2b, 0xf5, 0x41, 0x43, 0xda, 0x16, 0x85, 0xfa, 0x01, 0x02, 0x98, 0x14, 0x1a, 0xa5, 0x0c, 0x47, 0x09, 0x26, - 0x77, 0xfa, 0x01, 0x4a, 0x85, 0x11, 0x2f, 0x27, 0x40, 0x4b, 0x63, 0x8f, - 0x8d, 0xf3, 0x01, 0x45, 0xa4, 0xd9, 0x4d, 0xf3, 0x41, 0x4a, 0x1f, 0xa1, - 0x0c, 0xf9, 0x01, 0x48, 0xc6, 0x29, 0x0f, 0xf9, 0x41, 0x49, 0x3d, 0x95, - 0xb6, 0x00, 0x00, 0x48, 0xad, 0xbb, 0xa9, 0xf4, 0x01, 0xec, 0x8a, 0xf4, + 0x77, 0xfa, 0x01, 0x4a, 0x85, 0x11, 0x2f, 0x27, 0x40, 0x4b, 0x76, 0x8f, + 0x8d, 0xf3, 0x01, 0x45, 0xc0, 0xd9, 0x4d, 0xf3, 0x41, 0x4a, 0x32, 0xa1, + 0x0c, 0xf9, 0x01, 0x48, 0xc6, 0x29, 0x0f, 0xf9, 0x41, 0x49, 0x50, 0x95, + 0xb6, 0x00, 0x00, 0x48, 0xc9, 0xbb, 0xa9, 0xf4, 0x01, 0xec, 0x8a, 0xf4, 0x41, 0x80, 0x01, 0xff, 0x44, 0xed, 0x06, 0x37, 0xf4, 0x01, 0x44, 0x34, - 0x15, 0x3d, 0xf4, 0x41, 0x48, 0x15, 0xc2, 0xfb, 0xf6, 0x41, 0xa1, 0xde, - 0x01, 0x09, 0xf5, 0xb0, 0xcd, 0x01, 0xaf, 0x01, 0xff, 0x08, 0xed, 0xbb, + 0x15, 0x3d, 0xf4, 0x41, 0x48, 0x31, 0xc2, 0xfb, 0xf6, 0x41, 0xa1, 0xde, + 0x01, 0x09, 0x11, 0xb1, 0xcd, 0x01, 0xaf, 0x01, 0xff, 0x08, 0x09, 0xbc, 0x06, 0x43, 0x72, 0x25, 0xdb, 0x2b, 0x40, 0x07, 0xf1, 0x04, 0x33, 0x07, - 0xbf, 0x35, 0x06, 0x4e, 0xe4, 0x77, 0x1f, 0x09, 0x41, 0x43, 0xcd, 0x09, + 0xbf, 0x35, 0x06, 0x4e, 0xeb, 0x77, 0x1f, 0x09, 0x41, 0x43, 0xcd, 0x09, 0x16, 0x09, 0x81, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x17, 0x09, 0x01, 0x44, 0x25, 0x01, 0x1b, 0x09, 0x01, 0xb7, 0x01, 0xff, 0x44, 0x98, 0x1b, 0x18, 0x09, 0x01, 0xef, 0x1a, 0x09, 0x41, 0x48, 0xe8, 0x0f, 0x19, - 0x09, 0x41, 0xa1, 0x7b, 0x43, 0xc6, 0x08, 0x01, 0x09, 0x01, 0x44, 0xcb, - 0xda, 0x03, 0x09, 0x01, 0x44, 0xe2, 0xe4, 0x02, 0x09, 0x01, 0x42, 0xb0, - 0x01, 0x04, 0x09, 0x81, 0x5e, 0x43, 0x11, 0x4c, 0x0a, 0x09, 0x01, 0x44, - 0x4b, 0xdd, 0x0b, 0x09, 0x01, 0x43, 0xb9, 0x04, 0x0c, 0x09, 0x01, 0x43, + 0x09, 0x41, 0xa1, 0x7b, 0x43, 0xc6, 0x08, 0x01, 0x09, 0x01, 0x44, 0xe7, + 0xda, 0x03, 0x09, 0x01, 0x44, 0xfe, 0xe4, 0x02, 0x09, 0x01, 0x42, 0xb0, + 0x01, 0x04, 0x09, 0x81, 0x5e, 0x43, 0x26, 0x4c, 0x0a, 0x09, 0x01, 0x44, + 0x67, 0xdd, 0x0b, 0x09, 0x01, 0x43, 0xb9, 0x04, 0x0c, 0x09, 0x01, 0x43, 0x40, 0x20, 0x0d, 0x09, 0x01, 0x42, 0x6f, 0x02, 0x10, 0x09, 0x01, 0x43, - 0x5d, 0xe9, 0x12, 0x09, 0x01, 0x44, 0x59, 0xb0, 0x13, 0x09, 0x01, 0xb3, - 0x20, 0xb4, 0x12, 0x43, 0x90, 0xe9, 0x05, 0x09, 0x01, 0x43, 0xf9, 0x4c, - 0x09, 0x09, 0x01, 0x43, 0x34, 0x6e, 0x06, 0x09, 0x41, 0x42, 0xc3, 0x21, + 0x79, 0xe9, 0x12, 0x09, 0x01, 0x44, 0x75, 0xb0, 0x13, 0x09, 0x01, 0xb3, + 0x20, 0xb4, 0x12, 0x43, 0xac, 0xe9, 0x05, 0x09, 0x01, 0x43, 0x0e, 0x4d, + 0x09, 0x09, 0x01, 0x43, 0x49, 0x6e, 0x06, 0x09, 0x41, 0x42, 0xc3, 0x21, 0x15, 0x09, 0x01, 0x42, 0xf2, 0x04, 0x08, 0x09, 0x41, 0x43, 0x0c, 0x02, - 0x11, 0x09, 0x01, 0x43, 0xe6, 0x7b, 0x0e, 0x09, 0x01, 0x43, 0x99, 0x14, + 0x11, 0x09, 0x01, 0x43, 0xed, 0x7b, 0x0e, 0x09, 0x01, 0x43, 0x99, 0x14, 0x14, 0x09, 0x41, 0xf4, 0x07, 0x09, 0x41, 0x42, 0x9e, 0x01, 0x0f, 0x09, - 0x01, 0x42, 0x24, 0x00, 0x00, 0x09, 0x41, 0x52, 0x71, 0x4b, 0x36, 0x17, - 0x00, 0x52, 0x97, 0x4f, 0x35, 0x17, 0x40, 0x06, 0xcf, 0xd1, 0xc7, 0x02, - 0x10, 0xf9, 0x5d, 0x01, 0xff, 0x45, 0xce, 0x00, 0xd9, 0x01, 0x01, 0xa2, - 0x9a, 0x02, 0xa3, 0xe3, 0x01, 0x02, 0x3b, 0x01, 0xd2, 0x01, 0x45, 0x02, - 0xdb, 0xee, 0x01, 0x01, 0x45, 0xb6, 0xdb, 0xf8, 0x01, 0x01, 0xa7, 0xb7, + 0x01, 0x42, 0x24, 0x00, 0x00, 0x09, 0x41, 0x52, 0x86, 0x4b, 0x36, 0x17, + 0x00, 0x52, 0xac, 0x4f, 0x35, 0x17, 0x40, 0x06, 0xeb, 0xd1, 0xc7, 0x02, + 0x10, 0x0e, 0x5e, 0x01, 0xff, 0x45, 0xce, 0x00, 0xd9, 0x01, 0x01, 0xa2, + 0x9a, 0x02, 0xa3, 0xe3, 0x01, 0x02, 0x3b, 0x01, 0xd2, 0x01, 0x45, 0x1e, + 0xdb, 0xee, 0x01, 0x01, 0x45, 0xd2, 0xdb, 0xf8, 0x01, 0x01, 0xa7, 0xb7, 0x01, 0xa8, 0xa2, 0x01, 0x02, 0xc3, 0x01, 0x93, 0x01, 0x02, 0x6c, 0x00, - 0x82, 0x01, 0x47, 0x12, 0xca, 0xf7, 0x01, 0x01, 0xb0, 0x5f, 0xb2, 0x51, - 0xb3, 0x29, 0xb4, 0x15, 0x44, 0x64, 0xb7, 0xf3, 0x01, 0x01, 0xb7, 0x01, - 0xff, 0x48, 0x25, 0xba, 0xfc, 0x01, 0x01, 0x44, 0xbd, 0x29, 0xd5, 0x01, - 0x41, 0x4c, 0xfc, 0x84, 0xd2, 0x01, 0x01, 0x44, 0x6e, 0xe5, 0xd8, 0x01, - 0x01, 0x44, 0xa0, 0x5a, 0xf0, 0x01, 0x41, 0x42, 0xaf, 0x3f, 0xdf, 0x01, + 0x82, 0x01, 0x47, 0x2e, 0xca, 0xf7, 0x01, 0x01, 0xb0, 0x5f, 0xb2, 0x51, + 0xb3, 0x29, 0xb4, 0x15, 0x44, 0x80, 0xb7, 0xf3, 0x01, 0x01, 0xb7, 0x01, + 0xff, 0x48, 0x41, 0xba, 0xfc, 0x01, 0x01, 0x44, 0xbd, 0x29, 0xd5, 0x01, + 0x41, 0x4c, 0x03, 0x85, 0xd2, 0x01, 0x01, 0x44, 0x8a, 0xe5, 0xd8, 0x01, + 0x01, 0x44, 0xb5, 0x5a, 0xf0, 0x01, 0x41, 0x42, 0xc4, 0x3f, 0xdf, 0x01, 0x01, 0x02, 0x49, 0x00, 0x12, 0x44, 0x11, 0x0a, 0xe5, 0x01, 0x01, 0x48, - 0x3d, 0xbe, 0xfb, 0x01, 0x01, 0x47, 0x42, 0xcc, 0xfa, 0x01, 0x41, 0x43, + 0x59, 0xbe, 0xfb, 0x01, 0x01, 0x47, 0x5e, 0xcc, 0xfa, 0x01, 0x41, 0x43, 0x66, 0x21, 0xdb, 0x01, 0x01, 0xf0, 0xe8, 0x01, 0x41, 0x42, 0x57, 0x00, - 0xed, 0x01, 0x01, 0x46, 0x69, 0xd4, 0xf5, 0x01, 0x41, 0x46, 0x8f, 0xcf, - 0xf4, 0x01, 0x01, 0x49, 0x29, 0xa1, 0xd0, 0x01, 0x01, 0xac, 0x01, 0xff, - 0x48, 0xad, 0xb9, 0xf2, 0x01, 0x01, 0x49, 0xa7, 0xb6, 0xd1, 0x01, 0x41, - 0x46, 0xa3, 0xd3, 0xdd, 0x01, 0x01, 0x45, 0xac, 0xe0, 0xde, 0x01, 0x41, - 0xe4, 0xe0, 0x01, 0x01, 0x42, 0xd2, 0x06, 0xf6, 0x01, 0x41, 0x45, 0x48, + 0xed, 0x01, 0x01, 0x46, 0x85, 0xd4, 0xf5, 0x01, 0x41, 0x46, 0xab, 0xcf, + 0xf4, 0x01, 0x01, 0x49, 0x3c, 0xa1, 0xd0, 0x01, 0x01, 0xac, 0x01, 0xff, + 0x48, 0xc9, 0xb9, 0xf2, 0x01, 0x01, 0x49, 0xc3, 0xb6, 0xd1, 0x01, 0x41, + 0x46, 0xbf, 0xd3, 0xdd, 0x01, 0x01, 0x45, 0xc8, 0xe0, 0xde, 0x01, 0x41, + 0xe4, 0xe0, 0x01, 0x01, 0x42, 0xd2, 0x06, 0xf6, 0x01, 0x41, 0x45, 0x64, 0xb9, 0xd6, 0x01, 0x01, 0x43, 0x03, 0x00, 0xea, 0x01, 0x01, 0x43, 0x2d, - 0x04, 0xe9, 0x01, 0x41, 0x47, 0x1f, 0xc5, 0xd7, 0x01, 0x01, 0x45, 0x4c, - 0x99, 0xf9, 0x01, 0x41, 0x44, 0xf2, 0xe5, 0xe3, 0x01, 0x01, 0x42, 0x32, - 0x00, 0xef, 0x01, 0x41, 0xa1, 0x22, 0x44, 0x92, 0x44, 0xd4, 0x01, 0x01, - 0x43, 0x9d, 0x45, 0xdc, 0x01, 0x01, 0xaf, 0x01, 0xff, 0x44, 0x06, 0xe6, - 0xe6, 0x01, 0x01, 0x42, 0xbb, 0x04, 0xe4, 0x01, 0xc1, 0x00, 0x54, 0x64, - 0x3e, 0xfd, 0x01, 0x41, 0x45, 0x86, 0x6b, 0xd3, 0x01, 0x01, 0x4d, 0xa5, + 0x04, 0xe9, 0x01, 0x41, 0x47, 0x3b, 0xc5, 0xd7, 0x01, 0x01, 0x45, 0x5f, + 0x99, 0xf9, 0x01, 0x41, 0x44, 0x0e, 0xe6, 0xe3, 0x01, 0x01, 0x42, 0x32, + 0x00, 0xef, 0x01, 0x41, 0xa1, 0x22, 0x44, 0xa7, 0x44, 0xd4, 0x01, 0x01, + 0x43, 0xb2, 0x45, 0xdc, 0x01, 0x01, 0xaf, 0x01, 0xff, 0x44, 0x22, 0xe6, + 0xe6, 0x01, 0x01, 0x42, 0xbb, 0x04, 0xe4, 0x01, 0xc1, 0x00, 0x54, 0x79, + 0x3e, 0xfd, 0x01, 0x41, 0x45, 0x9b, 0x6b, 0xd3, 0x01, 0x01, 0x4d, 0xac, 0x80, 0xe2, 0x01, 0x01, 0xf4, 0xec, 0x01, 0x41, 0x42, 0x27, 0x01, 0xf1, - 0x01, 0x81, 0x12, 0xaf, 0x06, 0x48, 0xf5, 0xc1, 0xeb, 0x01, 0x41, 0x47, - 0x94, 0xc9, 0xe1, 0x01, 0x01, 0xf7, 0xda, 0x01, 0x41, 0x44, 0x7e, 0x7d, - 0xe7, 0x01, 0x41, 0x50, 0xf9, 0x5b, 0x75, 0xa8, 0x00, 0x07, 0xf1, 0x04, - 0x38, 0x05, 0xb9, 0x00, 0x28, 0xb3, 0x01, 0xff, 0x4f, 0xe0, 0x67, 0x74, - 0xa8, 0x00, 0xb5, 0x01, 0xff, 0x0f, 0x7a, 0x61, 0x06, 0x52, 0xe3, 0x4e, + 0x01, 0x81, 0x12, 0xaf, 0x06, 0x48, 0x11, 0xc2, 0xeb, 0x01, 0x41, 0x47, + 0xb0, 0xc9, 0xe1, 0x01, 0x01, 0xf7, 0xda, 0x01, 0x41, 0x44, 0x85, 0x7d, + 0xe7, 0x01, 0x41, 0x50, 0x0e, 0x5c, 0x75, 0xa8, 0x00, 0x07, 0xf1, 0x04, + 0x38, 0x05, 0xb9, 0x00, 0x28, 0xb3, 0x01, 0xff, 0x4f, 0xf5, 0x67, 0x74, + 0xa8, 0x00, 0xb5, 0x01, 0xff, 0x0f, 0x8f, 0x61, 0x06, 0x52, 0xf8, 0x4e, 0x72, 0xa8, 0x40, 0x42, 0x71, 0x00, 0x71, 0xa8, 0x00, 0x42, 0xa9, 0x01, - 0x67, 0xa8, 0x00, 0x42, 0x20, 0x20, 0x68, 0xa8, 0x40, 0x4b, 0x36, 0x93, + 0x67, 0xa8, 0x00, 0x42, 0x20, 0x20, 0x68, 0xa8, 0x40, 0x4b, 0x49, 0x93, 0x77, 0xa8, 0x00, 0x44, 0xa4, 0x02, 0x76, 0xa8, 0x40, 0xe1, 0x5d, 0xa8, 0x80, 0x92, 0x02, 0x42, 0x16, 0x00, 0x4e, 0xa8, 0x00, 0xa3, 0xf8, 0x01, 0xa4, 0xe5, 0x01, 0xe5, 0x60, 0xa8, 0x80, 0xdb, 0x01, 0x42, 0xed, 0x06, @@ -5366,7 +5367,7 @@ static const unsigned char uname2c_tree[210697] = { 0x01, 0x53, 0xa8, 0x00, 0x42, 0x06, 0x24, 0x63, 0xa8, 0x00, 0x42, 0x20, 0x20, 0x57, 0xa8, 0x00, 0xba, 0x01, 0xff, 0xe1, 0x55, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x54, 0xa8, 0x40, 0x44, 0x4e, 0x0f, 0x6f, 0xa8, 0x00, 0x48, - 0xcd, 0xbd, 0x6e, 0xa8, 0x40, 0xe1, 0x48, 0xa8, 0x00, 0x42, 0x22, 0x00, + 0xe9, 0xbd, 0x6e, 0xa8, 0x40, 0xe1, 0x48, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x49, 0xa8, 0x00, 0xb3, 0x0d, 0xb4, 0x01, 0xff, 0xe1, 0x69, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x6a, 0xa8, 0x40, 0xe1, 0x50, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x51, 0xa8, 0x40, 0xe1, 0x5b, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x5a, @@ -5378,43 +5379,43 @@ static const unsigned char uname2c_tree[210697] = { 0xe5, 0x66, 0xa8, 0x40, 0xe1, 0x4a, 0xa8, 0x00, 0x42, 0x68, 0x0f, 0x6b, 0xa8, 0x00, 0x42, 0x59, 0x00, 0x52, 0xa8, 0x40, 0xe1, 0x44, 0xa8, 0x80, 0x06, 0x42, 0x22, 0x00, 0x45, 0xa8, 0x40, 0x49, 0x3d, 0x21, 0x73, 0xa8, - 0x40, 0x4b, 0xf3, 0x96, 0x6d, 0xa8, 0x00, 0x4b, 0x8f, 0x9a, 0x70, 0xa8, - 0x40, 0xa1, 0xeb, 0x01, 0x48, 0x2a, 0xa1, 0xb6, 0xf6, 0x01, 0xae, 0xc4, - 0x01, 0x4c, 0xb0, 0x8b, 0xc2, 0xfa, 0x01, 0xb2, 0x14, 0xb3, 0x06, 0x48, - 0xa5, 0xc1, 0xeb, 0xf9, 0x41, 0x48, 0x35, 0xbc, 0xa7, 0x20, 0x00, 0x46, - 0x5d, 0xa8, 0xb1, 0x20, 0x40, 0x80, 0x93, 0x01, 0x49, 0xc7, 0x93, 0x25, - 0x00, 0x00, 0x4c, 0x84, 0x87, 0xad, 0xf3, 0x01, 0x51, 0x41, 0x56, 0x7e, - 0x26, 0x00, 0x4a, 0x26, 0x87, 0xc2, 0x27, 0x80, 0x74, 0xb3, 0x01, 0xff, - 0x4c, 0x3c, 0x87, 0x23, 0xf6, 0x01, 0x02, 0x10, 0x00, 0x06, 0x47, 0x4a, - 0xca, 0x06, 0x23, 0x40, 0x80, 0x06, 0x4b, 0x89, 0x7f, 0xbb, 0xf4, 0x41, - 0x4d, 0x3f, 0x7a, 0x47, 0xf6, 0x01, 0x48, 0x05, 0xbb, 0xd7, 0xf9, 0x01, - 0x4f, 0xa6, 0x65, 0x38, 0xf9, 0x01, 0x48, 0x06, 0x7c, 0x4d, 0xf6, 0x01, + 0x40, 0x4b, 0x06, 0x97, 0x6d, 0xa8, 0x00, 0x4b, 0xa2, 0x9a, 0x70, 0xa8, + 0x40, 0xa1, 0xeb, 0x01, 0x48, 0x3d, 0xa1, 0xb6, 0xf6, 0x01, 0xae, 0xc4, + 0x01, 0x4c, 0xb7, 0x8b, 0xc2, 0xfa, 0x01, 0xb2, 0x14, 0xb3, 0x06, 0x48, + 0xc1, 0xc1, 0xeb, 0xf9, 0x41, 0x48, 0x51, 0xbc, 0xa7, 0x20, 0x00, 0x46, + 0x70, 0xa8, 0xb1, 0x20, 0x40, 0x80, 0x93, 0x01, 0x49, 0xda, 0x93, 0x25, + 0x00, 0x00, 0x4c, 0x8b, 0x87, 0xad, 0xf3, 0x01, 0x51, 0x56, 0x56, 0x7e, + 0x26, 0x00, 0x4a, 0x2d, 0x87, 0xc2, 0x27, 0x80, 0x74, 0xb3, 0x01, 0xff, + 0x4c, 0x43, 0x87, 0x23, 0xf6, 0x01, 0x02, 0x10, 0x00, 0x06, 0x47, 0x66, + 0xca, 0x06, 0x23, 0x40, 0x80, 0x06, 0x4b, 0x90, 0x7f, 0xbb, 0xf4, 0x41, + 0x4d, 0x46, 0x7a, 0x47, 0xf6, 0x01, 0x48, 0x21, 0xbb, 0xd7, 0xf9, 0x01, + 0x4f, 0xbb, 0x65, 0x38, 0xf9, 0x01, 0x48, 0x0d, 0x7c, 0x4d, 0xf6, 0x01, 0x03, 0xe6, 0x04, 0x31, 0x61, 0xc6, 0x0c, 0x4c, 0xf6, 0x01, 0x05, 0x51, - 0x00, 0x01, 0xff, 0xa2, 0x18, 0x45, 0xad, 0xda, 0xc5, 0xfa, 0x01, 0x4c, - 0x78, 0x87, 0x4f, 0xf6, 0x01, 0x49, 0x38, 0xb0, 0xd5, 0xf9, 0x01, 0x4c, - 0x28, 0x8c, 0x4e, 0xf6, 0x41, 0x43, 0x3e, 0x06, 0xf9, 0x26, 0x00, 0x49, - 0x4b, 0xb2, 0x71, 0xf4, 0x41, 0x4e, 0xea, 0x72, 0xd8, 0xf9, 0x01, 0x4b, - 0xa5, 0x9a, 0xd6, 0xf9, 0x41, 0x47, 0x6e, 0x05, 0xe1, 0x2a, 0x40, 0x4a, - 0x25, 0xa5, 0x30, 0x20, 0x00, 0x44, 0xdb, 0x02, 0x4c, 0x21, 0x00, 0x51, - 0x50, 0x58, 0x31, 0x20, 0x40, 0x56, 0x36, 0x2e, 0x86, 0xf5, 0x01, 0x43, - 0x64, 0xb6, 0x0f, 0x27, 0x00, 0x44, 0x16, 0xe5, 0x27, 0xf4, 0x01, 0x49, - 0xab, 0xb5, 0x14, 0xf6, 0x01, 0x46, 0x82, 0x19, 0xe4, 0x26, 0x40, 0x44, - 0xc2, 0xe1, 0xdb, 0xfa, 0x01, 0xa3, 0x0a, 0x44, 0x3b, 0xe0, 0x5c, 0xf9, + 0x00, 0x01, 0xff, 0xa2, 0x18, 0x45, 0xc9, 0xda, 0xc5, 0xfa, 0x01, 0x4c, + 0x7f, 0x87, 0x4f, 0xf6, 0x01, 0x49, 0x54, 0xb0, 0xd5, 0xf9, 0x01, 0x4c, + 0x2f, 0x8c, 0x4e, 0xf6, 0x41, 0x43, 0x3e, 0x06, 0xf9, 0x26, 0x00, 0x49, + 0x67, 0xb2, 0x71, 0xf4, 0x41, 0x4e, 0xff, 0x72, 0xd8, 0xf9, 0x01, 0x4b, + 0xb8, 0x9a, 0xd6, 0xf9, 0x41, 0x47, 0x6e, 0x05, 0xe1, 0x2a, 0x40, 0x4a, + 0x38, 0xa5, 0x30, 0x20, 0x00, 0x44, 0xdb, 0x02, 0x4c, 0x21, 0x00, 0x51, + 0x65, 0x58, 0x31, 0x20, 0x40, 0x56, 0x36, 0x2e, 0x86, 0xf5, 0x01, 0x43, + 0x80, 0xb6, 0x0f, 0x27, 0x00, 0x44, 0x32, 0xe5, 0x27, 0xf4, 0x01, 0x49, + 0xc7, 0xb5, 0x14, 0xf6, 0x01, 0x46, 0x82, 0x19, 0xe4, 0x26, 0x40, 0x44, + 0xde, 0xe1, 0xdb, 0xfa, 0x01, 0xa3, 0x0a, 0x44, 0x57, 0xe0, 0x5c, 0xf9, 0x01, 0xf2, 0x50, 0xf3, 0x41, 0x48, 0x45, 0x17, 0x2e, 0x26, 0x00, 0xe8, - 0x51, 0xf3, 0x01, 0x43, 0x35, 0x01, 0x9a, 0xf9, 0x41, 0x45, 0x94, 0xda, - 0xe6, 0xf4, 0x01, 0xa7, 0xfa, 0x13, 0x0b, 0x96, 0x94, 0x96, 0x0d, 0xac, - 0x87, 0x0b, 0xae, 0xf8, 0x0a, 0x47, 0x55, 0x7b, 0xce, 0xf4, 0x01, 0xb2, - 0x96, 0x03, 0x02, 0xee, 0x00, 0xed, 0x02, 0x0a, 0x85, 0xa9, 0x06, 0x48, - 0x4d, 0xc2, 0x3e, 0xf4, 0x41, 0x4c, 0xcf, 0x25, 0xf5, 0x1a, 0x81, 0xcc, - 0x02, 0xac, 0x62, 0x4e, 0x22, 0x73, 0xef, 0x1a, 0x81, 0x4c, 0x4b, 0x69, - 0x60, 0xe6, 0x1a, 0x81, 0x2f, 0x07, 0x5b, 0xcb, 0x01, 0xff, 0x4c, 0xcf, + 0x51, 0xf3, 0x01, 0x43, 0x35, 0x01, 0x9a, 0xf9, 0x41, 0x45, 0xb0, 0xda, + 0xe6, 0xf4, 0x01, 0xa7, 0xfa, 0x13, 0x0b, 0xa9, 0x94, 0x96, 0x0d, 0xac, + 0x87, 0x0b, 0xae, 0xf8, 0x0a, 0x47, 0x5c, 0x7b, 0xce, 0xf4, 0x01, 0xb2, + 0x96, 0x03, 0x02, 0xee, 0x00, 0xed, 0x02, 0x0a, 0x98, 0xa9, 0x06, 0x48, + 0x69, 0xc2, 0x3e, 0xf4, 0x41, 0x4c, 0xcf, 0x25, 0xf5, 0x1a, 0x81, 0xcc, + 0x02, 0xac, 0x62, 0x4e, 0x37, 0x73, 0xef, 0x1a, 0x81, 0x4c, 0x4b, 0x7e, + 0x60, 0xe6, 0x1a, 0x81, 0x2f, 0x07, 0x77, 0xcb, 0x01, 0xff, 0x4c, 0xcf, 0x25, 0xe7, 0x1a, 0x81, 0x1d, 0x44, 0xdd, 0x29, 0xec, 0x1a, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x45, 0x97, 0x29, 0xee, 0x1a, 0x01, 0x44, 0xac, 0x10, 0xeb, 0x1a, 0xc1, 0x00, 0x46, 0x96, 0x29, 0xed, 0x1a, 0x41, 0x46, 0x96, 0x29, 0xea, 0x1a, 0x41, 0x80, 0x01, 0xff, 0x45, 0x97, 0x29, 0xe9, 0x1a, 0x01, 0x44, 0xac, 0x10, 0xe5, 0x1a, 0xc1, 0x00, 0x46, 0x96, 0x29, 0xe8, 0x1a, 0x41, 0x80, 0x01, 0xff, 0x45, 0x97, 0x29, 0xf2, 0x1a, 0x01, 0x4a, - 0xa3, 0xa4, 0xf1, 0x1a, 0x41, 0x06, 0xf2, 0x04, 0x1d, 0x4f, 0xce, 0x6a, + 0xb6, 0xa4, 0xf1, 0x1a, 0x41, 0x06, 0xf2, 0x04, 0x1d, 0x4f, 0xe3, 0x6a, 0xf4, 0x1a, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x45, 0x97, 0x29, 0xf7, 0x1a, 0x01, 0x44, 0xac, 0x10, 0xf3, 0x1a, 0xc1, 0x00, 0x46, 0x96, 0x29, 0xf6, 0x1a, 0x41, 0xe1, 0xd5, 0x1a, 0x01, 0x42, 0x16, 0x00, 0xcc, 0x1a, 0x01, @@ -5434,26 +5435,26 @@ static const unsigned char uname2c_tree[210697] = { 0x1a, 0x81, 0x10, 0xf0, 0xdc, 0x1a, 0x01, 0xf4, 0xde, 0x1a, 0x01, 0xf7, 0xe2, 0x1a, 0x01, 0xf9, 0xe4, 0x1a, 0x41, 0xe7, 0xe3, 0x1a, 0x41, 0xe1, 0xcd, 0x1a, 0x01, 0x42, 0x22, 0x00, 0xd4, 0x1a, 0x41, 0x80, 0x01, 0xff, - 0x45, 0x97, 0x29, 0xf8, 0x1a, 0x01, 0x47, 0xce, 0x48, 0xf0, 0x1a, 0x41, - 0xa5, 0x16, 0x09, 0x73, 0xb1, 0x06, 0x4c, 0x1c, 0x8c, 0xc2, 0xf6, 0x41, - 0x52, 0x83, 0x4b, 0x91, 0x23, 0x00, 0x50, 0xc9, 0x61, 0x92, 0x23, 0x40, - 0x48, 0x10, 0x1e, 0xfd, 0x2b, 0x00, 0x49, 0xff, 0xb2, 0xf3, 0xf6, 0x41, - 0xa1, 0x9e, 0x07, 0x0b, 0xa4, 0x93, 0x4a, 0x43, 0x5d, 0x29, 0x9c, 0xf9, - 0x01, 0xb4, 0x01, 0xff, 0x51, 0x35, 0x51, 0x3d, 0x30, 0x00, 0x03, 0x05, - 0x0b, 0x0c, 0x4c, 0xfc, 0x8a, 0x50, 0x32, 0x00, 0x48, 0x9d, 0xc2, 0x89, - 0xf3, 0x41, 0x80, 0x06, 0x58, 0xd7, 0x26, 0x7d, 0x26, 0x40, 0x4c, 0xf8, - 0x42, 0x02, 0x22, 0x00, 0x05, 0xf0, 0x07, 0x01, 0xff, 0x48, 0x3d, 0xba, + 0x45, 0x97, 0x29, 0xf8, 0x1a, 0x01, 0x47, 0xe3, 0x48, 0xf0, 0x1a, 0x41, + 0xa5, 0x16, 0x09, 0x8f, 0xb1, 0x06, 0x4c, 0x23, 0x8c, 0xc2, 0xf6, 0x41, + 0x52, 0x98, 0x4b, 0x91, 0x23, 0x00, 0x50, 0xde, 0x61, 0x92, 0x23, 0x40, + 0x48, 0x10, 0x1e, 0xfd, 0x2b, 0x00, 0x49, 0x1b, 0xb3, 0xf3, 0xf6, 0x41, + 0xa1, 0x9e, 0x07, 0x0b, 0xb7, 0x93, 0x4a, 0x43, 0x5d, 0x29, 0x9c, 0xf9, + 0x01, 0xb4, 0x01, 0xff, 0x51, 0x4a, 0x51, 0x3d, 0x30, 0x00, 0x03, 0x05, + 0x0b, 0x0c, 0x4c, 0x03, 0x8b, 0x50, 0x32, 0x00, 0x48, 0xb9, 0xc2, 0x89, + 0xf3, 0x41, 0x80, 0x06, 0x58, 0xd7, 0x26, 0x7d, 0x26, 0x40, 0x4c, 0x0d, + 0x43, 0x02, 0x22, 0x00, 0x05, 0xf0, 0x07, 0x01, 0xff, 0x48, 0x59, 0xba, 0x8c, 0x00, 0x00, 0x44, 0xa5, 0x01, 0x8b, 0x00, 0x00, 0x47, 0xa5, 0x2d, 0x8b, 0x00, 0x00, 0x42, 0x50, 0x02, 0x8c, 0x00, 0x40, 0x06, 0xf4, 0x05, - 0x8e, 0x06, 0x07, 0x48, 0xc7, 0xc2, 0x04, 0x0a, 0xf5, 0xa2, 0xc3, 0x02, - 0x12, 0x9f, 0x4d, 0xb2, 0x02, 0x06, 0xe3, 0x04, 0x55, 0x07, 0xbf, 0x35, - 0x01, 0xff, 0xa5, 0x42, 0xa6, 0x34, 0x48, 0x0b, 0x4e, 0x86, 0x24, 0x00, + 0x8e, 0x06, 0x07, 0x64, 0xc7, 0xc2, 0x04, 0x0a, 0x08, 0xa3, 0xc3, 0x02, + 0x12, 0xb4, 0x4d, 0xb2, 0x02, 0x06, 0xe3, 0x04, 0x55, 0x07, 0xbf, 0x35, + 0x01, 0xff, 0xa5, 0x42, 0xa6, 0x34, 0x48, 0x20, 0x4e, 0x86, 0x24, 0x00, 0xb3, 0x20, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x7d, 0x24, 0x00, 0x47, - 0xed, 0x54, 0x80, 0x24, 0x00, 0x02, 0x15, 0x01, 0x01, 0xff, 0x43, 0xb9, - 0x28, 0x7f, 0x24, 0x00, 0x43, 0x99, 0x1b, 0x87, 0x24, 0x40, 0x48, 0xef, - 0x4b, 0x84, 0x24, 0x00, 0x46, 0x83, 0x43, 0x83, 0x24, 0x40, 0x46, 0x27, - 0x16, 0x82, 0x24, 0x00, 0x47, 0x0d, 0x57, 0x81, 0x24, 0x40, 0x47, 0xb6, - 0x22, 0x85, 0x24, 0x00, 0x45, 0xdf, 0x68, 0x7e, 0x24, 0x40, 0x0f, 0xe9, + 0x02, 0x55, 0x80, 0x24, 0x00, 0x02, 0x15, 0x01, 0x01, 0xff, 0x43, 0xb9, + 0x28, 0x7f, 0x24, 0x00, 0x43, 0x99, 0x1b, 0x87, 0x24, 0x40, 0x48, 0x04, + 0x4c, 0x84, 0x24, 0x00, 0x46, 0x98, 0x43, 0x83, 0x24, 0x40, 0x46, 0x27, + 0x16, 0x82, 0x24, 0x00, 0x47, 0x22, 0x57, 0x81, 0x24, 0x40, 0x47, 0xb6, + 0x22, 0x85, 0x24, 0x00, 0x45, 0xf4, 0x68, 0x7e, 0x24, 0x40, 0x0f, 0xe9, 0x04, 0x6d, 0x0d, 0x7c, 0x07, 0x01, 0xff, 0xe1, 0x9c, 0x24, 0x00, 0xe2, 0x9d, 0x24, 0x00, 0xe3, 0x9e, 0x24, 0x00, 0xe4, 0x9f, 0x24, 0x00, 0xe5, 0xa0, 0x24, 0x00, 0xe6, 0xa1, 0x24, 0x00, 0xe7, 0xa2, 0x24, 0x00, 0xe8, @@ -5472,80 +5473,80 @@ static const unsigned char uname2c_tree[210697] = { 0x21, 0xf1, 0x01, 0xf3, 0x22, 0xf1, 0x01, 0xf4, 0x23, 0xf1, 0x01, 0xf5, 0x24, 0xf1, 0x01, 0xf6, 0x25, 0xf1, 0x01, 0xf7, 0x26, 0xf1, 0x01, 0xf8, 0x27, 0xf1, 0x01, 0xf9, 0x28, 0xf1, 0x01, 0xfa, 0x29, 0xf1, 0x41, 0x43, - 0xe8, 0x0f, 0x1e, 0x32, 0x00, 0x44, 0x9e, 0xe5, 0x1d, 0x32, 0x40, 0x48, - 0x95, 0xb9, 0x3f, 0x32, 0x00, 0xa3, 0xe5, 0x01, 0xa5, 0xd0, 0x01, 0xa6, - 0xad, 0x01, 0x44, 0x1a, 0xe5, 0x32, 0x32, 0x00, 0x45, 0x41, 0xdd, 0x38, + 0xe8, 0x0f, 0x1e, 0x32, 0x00, 0x44, 0xba, 0xe5, 0x1d, 0x32, 0x40, 0x48, + 0xb1, 0xb9, 0x3f, 0x32, 0x00, 0xa3, 0xe5, 0x01, 0xa5, 0xd0, 0x01, 0xa6, + 0xad, 0x01, 0x44, 0x36, 0xe5, 0x32, 0x32, 0x00, 0x45, 0x5d, 0xdd, 0x38, 0x32, 0x00, 0xad, 0x92, 0x01, 0xae, 0x83, 0x01, 0x43, 0xcd, 0x09, 0x20, 0x32, 0x00, 0x02, 0x88, 0x00, 0x60, 0xb3, 0x23, 0xb4, 0x0f, 0xb7, 0x01, 0xff, 0x44, 0x8a, 0x00, 0x2c, 0x32, 0x00, 0x43, 0x56, 0x2a, 0x2d, 0x32, 0x40, 0x42, 0x92, 0x01, 0x29, 0x32, 0x00, 0x44, 0x25, 0x01, 0x22, 0x32, 0x00, 0x42, 0x15, 0x02, 0x21, 0x32, 0x40, 0xa5, 0x2d, 0x42, 0x30, 0x27, - 0x25, 0x32, 0x00, 0x46, 0x21, 0xd4, 0x33, 0x32, 0x00, 0x46, 0x87, 0xd4, + 0x25, 0x32, 0x00, 0x46, 0x3d, 0xd4, 0x33, 0x32, 0x00, 0x46, 0xa3, 0xd4, 0x35, 0x32, 0x00, 0xb4, 0x0d, 0xb5, 0x01, 0xff, 0xee, 0x30, 0x32, 0x00, - 0x47, 0x5f, 0xca, 0x3c, 0x32, 0x40, 0x43, 0x35, 0x01, 0x31, 0x32, 0x00, - 0x43, 0x72, 0xe9, 0x3b, 0x32, 0x40, 0x42, 0x24, 0x00, 0x42, 0x32, 0x00, + 0x47, 0x7b, 0xca, 0x3c, 0x32, 0x40, 0x43, 0x35, 0x01, 0x31, 0x32, 0x00, + 0x43, 0x8e, 0xe9, 0x3b, 0x32, 0x40, 0x42, 0x24, 0x00, 0x42, 0x32, 0x00, 0x43, 0x97, 0x1b, 0x26, 0x32, 0x40, 0x43, 0x2e, 0x2a, 0x43, 0x32, 0x00, - 0x47, 0x8f, 0x79, 0x39, 0x32, 0x00, 0xb3, 0x01, 0xff, 0x45, 0xd5, 0x56, + 0x47, 0x96, 0x79, 0x39, 0x32, 0x00, 0xb3, 0x01, 0xff, 0x45, 0xea, 0x56, 0x3e, 0x32, 0x00, 0xf4, 0x41, 0x32, 0x40, 0x43, 0x30, 0x04, 0x34, 0x32, 0x00, 0x43, 0xf1, 0x07, 0x28, 0x32, 0x40, 0x44, 0xec, 0x0d, 0x2e, 0x32, - 0x00, 0x43, 0x99, 0x04, 0x2a, 0x32, 0x40, 0x47, 0xc3, 0xc6, 0x40, 0x32, - 0x00, 0xa9, 0x06, 0x43, 0xfb, 0x05, 0x23, 0x32, 0x40, 0x47, 0x2b, 0xc9, + 0x00, 0x43, 0x99, 0x04, 0x2a, 0x32, 0x40, 0x47, 0xdf, 0xc6, 0x40, 0x32, + 0x00, 0xa9, 0x06, 0x43, 0xfb, 0x05, 0x23, 0x32, 0x40, 0x47, 0x47, 0xc9, 0x36, 0x32, 0x00, 0x42, 0x88, 0x00, 0x2b, 0x32, 0x00, 0x42, 0x32, 0x00, - 0x24, 0x32, 0x40, 0x44, 0x8d, 0x6b, 0x2f, 0x32, 0x00, 0x44, 0xc9, 0x00, - 0x27, 0x32, 0x00, 0x49, 0x47, 0xb3, 0x3d, 0x32, 0x40, 0x43, 0x3e, 0x06, - 0x3a, 0x32, 0x00, 0x4d, 0xae, 0x7f, 0x37, 0x32, 0x40, 0xa3, 0xa5, 0x01, - 0x45, 0xfd, 0x9c, 0x0d, 0x32, 0x80, 0x97, 0x01, 0x45, 0x0b, 0xc2, 0x07, - 0x32, 0x80, 0x89, 0x01, 0xab, 0x6d, 0x45, 0xdc, 0xdd, 0x04, 0x32, 0x80, - 0x60, 0x45, 0x4a, 0xde, 0x01, 0x32, 0x80, 0x53, 0xb0, 0x37, 0x45, 0x94, - 0xdf, 0x03, 0x32, 0x80, 0x2a, 0x44, 0xd4, 0xb5, 0x06, 0x32, 0x80, 0x1d, - 0xb4, 0x01, 0xff, 0x46, 0x20, 0xcc, 0x0b, 0x32, 0x80, 0x0d, 0x45, 0xc3, + 0x24, 0x32, 0x40, 0x44, 0xa2, 0x6b, 0x2f, 0x32, 0x00, 0x44, 0xc9, 0x00, + 0x27, 0x32, 0x00, 0x49, 0x63, 0xb3, 0x3d, 0x32, 0x40, 0x43, 0x3e, 0x06, + 0x3a, 0x32, 0x00, 0x4d, 0xb5, 0x7f, 0x37, 0x32, 0x40, 0xa3, 0xa5, 0x01, + 0x45, 0x10, 0x9d, 0x0d, 0x32, 0x80, 0x97, 0x01, 0x45, 0x27, 0xc2, 0x07, + 0x32, 0x80, 0x89, 0x01, 0xab, 0x6d, 0x45, 0xf8, 0xdd, 0x04, 0x32, 0x80, + 0x60, 0x45, 0x66, 0xde, 0x01, 0x32, 0x80, 0x53, 0xb0, 0x37, 0x45, 0xb0, + 0xdf, 0x03, 0x32, 0x80, 0x2a, 0x44, 0xf0, 0xb5, 0x06, 0x32, 0x80, 0x1d, + 0xb4, 0x01, 0xff, 0x46, 0x3c, 0xcc, 0x0b, 0x32, 0x80, 0x0d, 0x45, 0xdf, 0xc3, 0x02, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, 0x10, 0x32, 0x40, 0x42, 0x19, 0x00, 0x19, 0x32, 0x40, 0x42, 0x19, 0x00, 0x14, 0x32, 0x40, 0x42, - 0x19, 0x00, 0x11, 0x32, 0x40, 0x46, 0x27, 0xb9, 0x0c, 0x32, 0x80, 0x0d, - 0x44, 0xbc, 0x7d, 0x05, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, 0x13, 0x32, + 0x19, 0x00, 0x11, 0x32, 0x40, 0x46, 0x43, 0xb9, 0x0c, 0x32, 0x80, 0x0d, + 0x44, 0xc3, 0x7d, 0x05, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, 0x13, 0x32, 0x40, 0x42, 0x19, 0x00, 0x1a, 0x32, 0x40, 0x42, 0x19, 0x00, 0x0f, 0x32, - 0x40, 0x42, 0x19, 0x00, 0x12, 0x32, 0x40, 0x46, 0x1f, 0xb9, 0x0a, 0x32, - 0x80, 0x0d, 0x45, 0xa0, 0x9a, 0x00, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, + 0x40, 0x42, 0x19, 0x00, 0x12, 0x32, 0x40, 0x46, 0x3b, 0xb9, 0x0a, 0x32, + 0x80, 0x0d, 0x45, 0xb3, 0x9a, 0x00, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, 0x0e, 0x32, 0x40, 0x42, 0x19, 0x00, 0x18, 0x32, 0x40, 0x42, 0x19, 0x00, - 0x15, 0x32, 0x40, 0x42, 0x19, 0x00, 0x1b, 0x32, 0x40, 0x46, 0xc1, 0xc5, - 0x09, 0x32, 0x80, 0x12, 0x44, 0xc2, 0xc5, 0x08, 0x32, 0xc0, 0x00, 0x80, + 0x15, 0x32, 0x40, 0x42, 0x19, 0x00, 0x1b, 0x32, 0x40, 0x46, 0xdd, 0xc5, + 0x09, 0x32, 0x80, 0x12, 0x44, 0xde, 0xc5, 0x08, 0x32, 0xc0, 0x00, 0x80, 0x01, 0xff, 0xe1, 0x16, 0x32, 0x00, 0xf5, 0x1c, 0x32, 0x40, 0x42, 0x19, 0x00, 0x17, 0x32, 0x40, 0x45, 0xd1, 0x09, 0x7b, 0x24, 0x00, 0xa6, 0x29, 0x44, 0xb8, 0x27, 0x7c, 0x24, 0x00, 0x43, 0xcd, 0x09, 0x74, 0x24, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x76, 0x24, 0x00, 0x42, 0x15, 0x02, 0x75, 0x24, 0x40, 0x44, 0x96, 0x1b, 0x7a, 0x24, 0x00, 0x42, 0x30, 0x27, 0x79, 0x24, 0x40, 0x43, 0xd7, 0x04, 0x78, 0x24, 0x00, 0x43, - 0xfb, 0x05, 0x77, 0x24, 0x40, 0x45, 0x8a, 0xda, 0x82, 0xfa, 0x01, 0x05, + 0xfb, 0x05, 0x77, 0x24, 0x40, 0x45, 0xa6, 0xda, 0x82, 0xfa, 0x01, 0x05, 0xf9, 0x0e, 0x1c, 0x05, 0x61, 0x34, 0x01, 0xff, 0x42, 0x1e, 0x00, 0x25, 0x22, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, 0x4c, 0x04, 0xf2, 0x2a, - 0x00, 0x4e, 0xf9, 0x39, 0xf3, 0x2a, 0x40, 0x4a, 0x6f, 0x1e, 0x29, 0x20, - 0x00, 0x42, 0xfc, 0x0b, 0x0f, 0x2e, 0x00, 0x47, 0x20, 0x6c, 0x4d, 0x2e, - 0x40, 0x45, 0x30, 0xda, 0x5e, 0xf9, 0x01, 0x47, 0x14, 0xc6, 0x3c, 0xf4, + 0x00, 0x4e, 0x0e, 0x3a, 0xf3, 0x2a, 0x40, 0x4a, 0x6f, 0x1e, 0x29, 0x20, + 0x00, 0x42, 0xfc, 0x0b, 0x0f, 0x2e, 0x00, 0x47, 0x35, 0x6c, 0x4d, 0x2e, + 0x40, 0x45, 0x4c, 0xda, 0x5e, 0xf9, 0x01, 0x47, 0x30, 0xc6, 0x3c, 0xf4, 0x41, 0x43, 0xa1, 0x0c, 0xb4, 0x26, 0x00, 0xad, 0x01, 0xff, 0x80, 0xe8, - 0x01, 0x4d, 0xe6, 0x80, 0x32, 0xf9, 0x01, 0x06, 0xe5, 0xd6, 0x01, 0xff, + 0x01, 0x4d, 0xed, 0x80, 0x32, 0xf9, 0x01, 0x06, 0x01, 0xd7, 0x01, 0xff, 0x02, 0x68, 0x00, 0x3a, 0x07, 0xbf, 0x35, 0x06, 0x56, 0xc4, 0x32, 0x78, 0x08, 0x41, 0xa6, 0x22, 0x43, 0xcd, 0x09, 0x79, 0x08, 0x01, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x7e, 0x08, 0x01, 0x44, 0x25, 0x01, 0x7b, 0x08, 0x01, 0xb7, 0x01, 0xff, 0x44, 0x98, 0x1b, 0x7f, 0x08, 0x01, 0xef, 0x7a, 0x08, 0x41, 0x43, 0xd7, 0x04, 0x7d, 0x08, 0x01, 0x43, 0xfb, 0x05, 0x7c, - 0x08, 0x41, 0x53, 0xfb, 0x43, 0x77, 0x08, 0x01, 0x05, 0xf3, 0x04, 0x01, - 0xff, 0xa1, 0x85, 0x01, 0x44, 0x46, 0xe4, 0x61, 0x08, 0x01, 0x46, 0x8d, - 0x44, 0x63, 0x08, 0x01, 0x49, 0xb1, 0xaf, 0x6d, 0x08, 0x01, 0x45, 0x4b, + 0x08, 0x41, 0x53, 0x10, 0x44, 0x77, 0x08, 0x01, 0x05, 0xf3, 0x04, 0x01, + 0xff, 0xa1, 0x85, 0x01, 0x44, 0x62, 0xe4, 0x61, 0x08, 0x01, 0x46, 0xa2, + 0x44, 0x63, 0x08, 0x01, 0x49, 0xcd, 0xaf, 0x6d, 0x08, 0x01, 0x45, 0x5e, 0xa2, 0x62, 0x08, 0x01, 0x42, 0xb0, 0x01, 0x64, 0x08, 0x81, 0x60, 0x44, - 0xba, 0xe5, 0x6a, 0x08, 0x01, 0x46, 0x1f, 0xd3, 0x6b, 0x08, 0x01, 0x43, + 0xd6, 0xe5, 0x6a, 0x08, 0x01, 0x46, 0x3b, 0xd3, 0x6b, 0x08, 0x01, 0x43, 0xb9, 0x04, 0x6c, 0x08, 0x01, 0x43, 0x40, 0x20, 0x6e, 0x08, 0x01, 0x42, - 0x6f, 0x02, 0x71, 0x08, 0x01, 0x44, 0x71, 0xbe, 0x73, 0x08, 0x01, 0x44, - 0x29, 0x60, 0x74, 0x08, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, 0x08, 0x83, - 0x65, 0x08, 0x01, 0x44, 0xf9, 0x4c, 0x69, 0x08, 0x01, 0x45, 0xf3, 0x4c, - 0x66, 0x08, 0x41, 0x42, 0xaf, 0x3f, 0x76, 0x08, 0x01, 0x43, 0x25, 0x23, + 0x6f, 0x02, 0x71, 0x08, 0x01, 0x44, 0x8d, 0xbe, 0x73, 0x08, 0x01, 0x44, + 0x3e, 0x60, 0x74, 0x08, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, 0x0f, 0x83, + 0x65, 0x08, 0x01, 0x44, 0x0e, 0x4d, 0x69, 0x08, 0x01, 0x45, 0x08, 0x4d, + 0x66, 0x08, 0x41, 0x42, 0xc4, 0x3f, 0x76, 0x08, 0x01, 0x43, 0x25, 0x23, 0x68, 0x08, 0x41, 0xa1, 0x06, 0x43, 0x99, 0x14, 0x75, 0x08, 0x41, 0x43, - 0xd7, 0xdf, 0x72, 0x08, 0x01, 0x44, 0x96, 0xd9, 0x6f, 0x08, 0x41, 0x42, - 0x53, 0x00, 0x67, 0x08, 0x41, 0x44, 0x99, 0x38, 0x60, 0x08, 0x01, 0x43, + 0xf3, 0xdf, 0x72, 0x08, 0x01, 0x44, 0xb2, 0xd9, 0x6f, 0x08, 0x41, 0x42, + 0x53, 0x00, 0x67, 0x08, 0x41, 0x44, 0xae, 0x38, 0x60, 0x08, 0x01, 0x43, 0x4b, 0x18, 0x70, 0x08, 0x41, 0x46, 0x1d, 0x2c, 0x19, 0x2e, 0x00, 0x49, - 0x91, 0xae, 0xf3, 0xfa, 0x01, 0x44, 0x85, 0x0f, 0x34, 0xf3, 0x01, 0x47, - 0x8f, 0xcc, 0xf4, 0xfa, 0x41, 0xa3, 0xcf, 0x04, 0x06, 0xf4, 0x05, 0x88, - 0x04, 0x09, 0x8a, 0xb2, 0xd4, 0x03, 0x07, 0xbf, 0x35, 0x9c, 0x03, 0x05, - 0xdb, 0x02, 0x93, 0x01, 0x07, 0x22, 0xcd, 0x01, 0xff, 0xa1, 0x5b, 0xa5, + 0xad, 0xae, 0xf3, 0xfa, 0x01, 0x44, 0x85, 0x0f, 0x34, 0xf3, 0x01, 0x47, + 0xab, 0xcc, 0xf4, 0xfa, 0x41, 0xa3, 0xcf, 0x04, 0x06, 0xf4, 0x05, 0x88, + 0x04, 0x09, 0xa6, 0xb2, 0xd4, 0x03, 0x07, 0xbf, 0x35, 0x9c, 0x03, 0x05, + 0xdb, 0x02, 0x93, 0x01, 0x07, 0x3e, 0xcd, 0x01, 0xff, 0xa1, 0x5b, 0xa5, 0x47, 0xa9, 0x33, 0xaf, 0x1f, 0xb5, 0x0b, 0xb7, 0x01, 0xff, 0xe2, 0x18, 0x6b, 0x01, 0xf6, 0x19, 0x6b, 0x41, 0xa1, 0x08, 0xe2, 0x06, 0x6b, 0x01, 0xf6, 0x07, 0x6b, 0x41, 0xe2, 0x10, 0x6b, 0x01, 0xf6, 0x11, 0x6b, 0x41, @@ -5558,134 +5559,134 @@ static const unsigned char uname2c_tree[210697] = { 0x0e, 0x6b, 0x01, 0xf6, 0x0f, 0x6b, 0x41, 0xe2, 0x04, 0x6b, 0x01, 0xf6, 0x05, 0x6b, 0x41, 0xe2, 0x0a, 0x6b, 0x01, 0xf6, 0x0b, 0x6b, 0x41, 0xe2, 0x1a, 0x6b, 0x01, 0xf6, 0x1b, 0x6b, 0x41, 0x42, 0x10, 0x07, 0x6c, 0x6b, - 0x01, 0x04, 0x8f, 0xb2, 0xc3, 0x01, 0xa8, 0xb4, 0x01, 0x46, 0x53, 0xd2, + 0x01, 0x04, 0xab, 0xb2, 0xc3, 0x01, 0xa8, 0xb4, 0x01, 0x46, 0x6f, 0xd2, 0x43, 0x6b, 0x01, 0x43, 0xfb, 0x0b, 0x70, 0x6b, 0x01, 0xad, 0x8f, 0x01, - 0xae, 0x80, 0x01, 0xb4, 0x6c, 0x04, 0xde, 0xe7, 0x39, 0xb8, 0x06, 0x48, - 0xf5, 0xc2, 0x67, 0x6b, 0x41, 0x43, 0xec, 0x2b, 0x44, 0x6b, 0x01, 0x43, - 0x1e, 0x45, 0x6a, 0x6b, 0x01, 0xb9, 0x01, 0xff, 0x04, 0xb5, 0x1e, 0x06, - 0x42, 0x99, 0x04, 0x64, 0x6b, 0x41, 0x44, 0xba, 0xe4, 0x3f, 0x6b, 0x01, - 0x45, 0x72, 0xde, 0x3c, 0x6b, 0x01, 0x43, 0x59, 0x44, 0x3d, 0x6b, 0x01, - 0x43, 0x59, 0x68, 0x3e, 0x6b, 0x41, 0x44, 0xc2, 0xe4, 0x3b, 0x6b, 0x01, - 0x43, 0x9d, 0x45, 0x63, 0x6b, 0x01, 0x44, 0x7e, 0xe6, 0x42, 0x6b, 0x01, - 0x44, 0x66, 0xe7, 0x40, 0x6b, 0x01, 0xb4, 0x01, 0xff, 0xa8, 0x06, 0x49, - 0xa2, 0xb5, 0x38, 0x6b, 0x41, 0x43, 0x1e, 0x45, 0x3a, 0x6b, 0x01, 0x42, + 0xae, 0x80, 0x01, 0xb4, 0x6c, 0x04, 0xfa, 0xe7, 0x39, 0xb8, 0x06, 0x48, + 0x11, 0xc3, 0x67, 0x6b, 0x41, 0x43, 0xec, 0x2b, 0x44, 0x6b, 0x01, 0x43, + 0x33, 0x45, 0x6a, 0x6b, 0x01, 0xb9, 0x01, 0xff, 0x04, 0xb5, 0x1e, 0x06, + 0x42, 0x99, 0x04, 0x64, 0x6b, 0x41, 0x44, 0xd6, 0xe4, 0x3f, 0x6b, 0x01, + 0x45, 0x8e, 0xde, 0x3c, 0x6b, 0x01, 0x43, 0x6e, 0x44, 0x3d, 0x6b, 0x01, + 0x43, 0x6e, 0x68, 0x3e, 0x6b, 0x41, 0x44, 0xde, 0xe4, 0x3b, 0x6b, 0x01, + 0x43, 0xb2, 0x45, 0x63, 0x6b, 0x01, 0x44, 0x9a, 0xe6, 0x42, 0x6b, 0x01, + 0x44, 0x82, 0xe7, 0x40, 0x6b, 0x01, 0xb4, 0x01, 0xff, 0xa8, 0x06, 0x49, + 0xbe, 0xb5, 0x38, 0x6b, 0x41, 0x43, 0x33, 0x45, 0x3a, 0x6b, 0x01, 0x42, 0x19, 0x04, 0x37, 0x6b, 0x41, 0x42, 0xc3, 0x21, 0x6f, 0x6b, 0x01, 0x4e, - 0x70, 0x71, 0x66, 0x6b, 0x01, 0x4a, 0xcf, 0xaa, 0x6d, 0x6b, 0x41, 0x43, - 0x5a, 0xe9, 0x69, 0x6b, 0x01, 0x43, 0x6f, 0xe9, 0x6b, 0x6b, 0x41, 0x04, - 0xd1, 0xaa, 0x06, 0x42, 0xc6, 0x02, 0x71, 0x6b, 0x41, 0x44, 0x8a, 0xe7, - 0x41, 0x6b, 0x01, 0x45, 0xa2, 0xe0, 0x6e, 0x6b, 0x41, 0x42, 0xc3, 0x01, + 0x85, 0x71, 0x66, 0x6b, 0x01, 0x4a, 0xe2, 0xaa, 0x6d, 0x6b, 0x41, 0x43, + 0x76, 0xe9, 0x69, 0x6b, 0x01, 0x43, 0x8b, 0xe9, 0x6b, 0x6b, 0x41, 0x04, + 0xe4, 0xaa, 0x06, 0x42, 0xc6, 0x02, 0x71, 0x6b, 0x41, 0x44, 0xa6, 0xe7, + 0x41, 0x6b, 0x01, 0x45, 0xbe, 0xe0, 0x6e, 0x6b, 0x41, 0x42, 0xc3, 0x01, 0x65, 0x6b, 0x01, 0x43, 0x7d, 0x2d, 0x68, 0x6b, 0x41, 0xa3, 0x28, 0x52, - 0x7f, 0x4c, 0x72, 0x6b, 0x01, 0x48, 0x15, 0xbf, 0x77, 0x6b, 0x01, 0x48, - 0x15, 0xc0, 0x76, 0x6b, 0x01, 0xb4, 0x01, 0xff, 0x47, 0xb6, 0xcb, 0x45, - 0x6b, 0x01, 0x43, 0xa2, 0xe9, 0x74, 0x6b, 0xc1, 0x00, 0x45, 0x01, 0xd7, - 0x75, 0x6b, 0x41, 0x44, 0x69, 0x16, 0x39, 0x6b, 0x01, 0x4a, 0x99, 0xa9, - 0x73, 0x6b, 0x41, 0x07, 0xe9, 0x0f, 0x25, 0x48, 0xb5, 0x37, 0x5e, 0x6b, - 0x01, 0xb4, 0x01, 0xff, 0x02, 0x92, 0x01, 0x06, 0x48, 0x7d, 0xc0, 0x61, - 0x6b, 0x41, 0x80, 0x04, 0xf3, 0x5b, 0x6b, 0x41, 0x48, 0x65, 0xba, 0x60, - 0x6b, 0x01, 0x49, 0x32, 0x76, 0x5d, 0x6b, 0x41, 0x49, 0xb4, 0x37, 0x5f, - 0x6b, 0x01, 0xf3, 0x5c, 0x6b, 0x41, 0x43, 0xef, 0xe4, 0x35, 0x6b, 0x01, - 0xab, 0x1b, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x43, 0xc0, 0xa9, 0x36, 0x6b, + 0x94, 0x4c, 0x72, 0x6b, 0x01, 0x48, 0x31, 0xbf, 0x77, 0x6b, 0x01, 0x48, + 0x31, 0xc0, 0x76, 0x6b, 0x01, 0xb4, 0x01, 0xff, 0x47, 0xd2, 0xcb, 0x45, + 0x6b, 0x01, 0x43, 0xbe, 0xe9, 0x74, 0x6b, 0xc1, 0x00, 0x45, 0x1d, 0xd7, + 0x75, 0x6b, 0x41, 0x44, 0x69, 0x16, 0x39, 0x6b, 0x01, 0x4a, 0xac, 0xa9, + 0x73, 0x6b, 0x41, 0x07, 0xe9, 0x0f, 0x25, 0x48, 0xca, 0x37, 0x5e, 0x6b, + 0x01, 0xb4, 0x01, 0xff, 0x02, 0x92, 0x01, 0x06, 0x48, 0x99, 0xc0, 0x61, + 0x6b, 0x41, 0x80, 0x04, 0xf3, 0x5b, 0x6b, 0x41, 0x48, 0x81, 0xba, 0x60, + 0x6b, 0x01, 0x49, 0x39, 0x76, 0x5d, 0x6b, 0x41, 0x49, 0xc9, 0x37, 0x5f, + 0x6b, 0x01, 0xf3, 0x5c, 0x6b, 0x41, 0x43, 0x0b, 0xe5, 0x35, 0x6b, 0x01, + 0xab, 0x1b, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x43, 0xd3, 0xa9, 0x36, 0x6b, 0x01, 0x42, 0x3d, 0x01, 0x30, 0x6b, 0x41, 0xef, 0x31, 0x6b, 0x01, 0x43, - 0xeb, 0x6e, 0x34, 0x6b, 0x41, 0x42, 0xed, 0x00, 0x32, 0x6b, 0x01, 0x43, - 0x65, 0x46, 0x33, 0x6b, 0x41, 0x45, 0xd1, 0x09, 0x58, 0x6b, 0x01, 0xa6, + 0x00, 0x6f, 0x34, 0x6b, 0x41, 0x42, 0xed, 0x00, 0x32, 0x6b, 0x01, 0x43, + 0x7a, 0x46, 0x33, 0x6b, 0x41, 0x45, 0xd1, 0x09, 0x58, 0x6b, 0x01, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x59, 0x6b, 0x01, 0x43, 0xcd, 0x09, 0x51, 0x6b, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x50, 0x6b, 0x41, 0x44, 0x25, 0x01, 0x53, 0x6b, 0x01, 0x42, 0x15, 0x02, 0x52, 0x6b, 0x41, 0x44, 0x96, 0x1b, 0x57, 0x6b, 0x01, 0x42, 0x30, 0x27, 0x56, 0x6b, 0x41, 0x43, 0xd7, 0x04, 0x55, 0x6b, 0x01, 0x43, 0xfb, 0x05, 0x54, 0x6b, 0x41, 0x09, - 0xe8, 0xb1, 0x86, 0x01, 0x09, 0x3f, 0x2f, 0x01, 0xff, 0x42, 0xc3, 0x21, + 0x04, 0xb2, 0x86, 0x01, 0x09, 0x3f, 0x2f, 0x01, 0xff, 0x42, 0xc3, 0x21, 0x2d, 0x6b, 0x01, 0xa3, 0x6d, 0xa8, 0x59, 0x43, 0xc2, 0x21, 0x1e, 0x6b, - 0x01, 0x43, 0x6b, 0xd6, 0x26, 0x6b, 0x01, 0xae, 0x24, 0x45, 0x1c, 0xdf, - 0x2a, 0x6b, 0x01, 0x44, 0x16, 0xe7, 0x23, 0x6b, 0x01, 0x43, 0xcc, 0x52, - 0x21, 0x6b, 0x01, 0x43, 0x81, 0xe9, 0x1c, 0x6b, 0x01, 0x43, 0x99, 0xe9, - 0x2e, 0x6b, 0x01, 0x43, 0xe3, 0x79, 0x24, 0x6b, 0x41, 0x42, 0xc3, 0x21, - 0x2c, 0x6b, 0x01, 0x44, 0x66, 0xe4, 0x28, 0x6b, 0x01, 0x43, 0x17, 0xc5, + 0x01, 0x43, 0x87, 0xd6, 0x26, 0x6b, 0x01, 0xae, 0x24, 0x45, 0x38, 0xdf, + 0x2a, 0x6b, 0x01, 0x44, 0x32, 0xe7, 0x23, 0x6b, 0x01, 0x43, 0xe1, 0x52, + 0x21, 0x6b, 0x01, 0x43, 0x9d, 0xe9, 0x1c, 0x6b, 0x01, 0x43, 0xb5, 0xe9, + 0x2e, 0x6b, 0x01, 0x43, 0xea, 0x79, 0x24, 0x6b, 0x41, 0x42, 0xc3, 0x21, + 0x2c, 0x6b, 0x01, 0x44, 0x82, 0xe4, 0x28, 0x6b, 0x01, 0x43, 0x33, 0xc5, 0x22, 0x6b, 0x01, 0x43, 0xc2, 0x21, 0x20, 0x6b, 0x01, 0xb4, 0x01, 0xff, - 0x43, 0xf4, 0x76, 0x2b, 0x6b, 0x01, 0x43, 0x35, 0xd5, 0x1d, 0x6b, 0x41, + 0x43, 0xfb, 0x76, 0x2b, 0x6b, 0x01, 0x43, 0x51, 0xd5, 0x1d, 0x6b, 0x41, 0x42, 0xc3, 0x21, 0x1f, 0x6b, 0x01, 0x43, 0xc2, 0x21, 0x25, 0x6b, 0x01, - 0x43, 0x96, 0x56, 0x29, 0x6b, 0x41, 0x42, 0xc3, 0x21, 0x2f, 0x6b, 0x01, - 0x43, 0xf4, 0x76, 0x27, 0x6b, 0x41, 0x43, 0x09, 0xe9, 0x8b, 0x6b, 0x01, - 0x02, 0x22, 0x00, 0x6e, 0xab, 0x5a, 0xac, 0x4c, 0x44, 0x2e, 0xe6, 0x84, - 0x6b, 0x01, 0x44, 0xf6, 0xe6, 0x87, 0x6b, 0x01, 0xb4, 0x23, 0xb6, 0x15, - 0x45, 0x7e, 0xe1, 0x81, 0x6b, 0x01, 0xb9, 0x01, 0xff, 0x42, 0x21, 0x20, - 0x8c, 0x6b, 0x01, 0x43, 0xf7, 0xe8, 0x7e, 0x6b, 0x41, 0x42, 0x21, 0x20, - 0x8a, 0x6b, 0x01, 0x42, 0xf6, 0xc2, 0x8f, 0x6b, 0x41, 0x43, 0x18, 0xe9, + 0x43, 0xab, 0x56, 0x29, 0x6b, 0x41, 0x42, 0xc3, 0x21, 0x2f, 0x6b, 0x01, + 0x43, 0xfb, 0x76, 0x27, 0x6b, 0x41, 0x43, 0x25, 0xe9, 0x8b, 0x6b, 0x01, + 0x02, 0x22, 0x00, 0x6e, 0xab, 0x5a, 0xac, 0x4c, 0x44, 0x4a, 0xe6, 0x84, + 0x6b, 0x01, 0x44, 0x12, 0xe7, 0x87, 0x6b, 0x01, 0xb4, 0x23, 0xb6, 0x15, + 0x45, 0x9a, 0xe1, 0x81, 0x6b, 0x01, 0xb9, 0x01, 0xff, 0x42, 0x21, 0x20, + 0x8c, 0x6b, 0x01, 0x43, 0x13, 0xe9, 0x7e, 0x6b, 0x41, 0x42, 0x21, 0x20, + 0x8a, 0x6b, 0x01, 0x42, 0x12, 0xc3, 0x8f, 0x6b, 0x41, 0x43, 0x34, 0xe9, 0x85, 0x6b, 0x01, 0xb3, 0x01, 0xff, 0x42, 0x5c, 0x00, 0x86, 0x6b, 0x01, - 0x44, 0xd0, 0xaa, 0x7d, 0x6b, 0x01, 0x42, 0x28, 0x18, 0x8d, 0x6b, 0x41, - 0x43, 0xb8, 0xe8, 0x80, 0x6b, 0x01, 0x42, 0xe0, 0x02, 0x7f, 0x6b, 0x41, - 0x43, 0x1e, 0x85, 0x88, 0x6b, 0x01, 0x42, 0x99, 0x04, 0x82, 0x6b, 0x01, - 0x42, 0x62, 0x56, 0x8e, 0x6b, 0x41, 0xed, 0x89, 0x6b, 0x01, 0x42, 0xf6, - 0xc2, 0x83, 0x6b, 0x41, 0xe5, 0xcf, 0xf5, 0x81, 0x06, 0x43, 0x4e, 0x79, + 0x44, 0xe3, 0xaa, 0x7d, 0x6b, 0x01, 0x42, 0x28, 0x18, 0x8d, 0x6b, 0x41, + 0x43, 0xd4, 0xe8, 0x80, 0x6b, 0x01, 0x42, 0xe0, 0x02, 0x7f, 0x6b, 0x41, + 0x43, 0x25, 0x85, 0x88, 0x6b, 0x01, 0x42, 0x99, 0x04, 0x82, 0x6b, 0x01, + 0x42, 0x77, 0x56, 0x8e, 0x6b, 0x41, 0xed, 0x89, 0x6b, 0x01, 0x42, 0x12, + 0xc3, 0x83, 0x6b, 0x41, 0xe5, 0xcf, 0xf5, 0x81, 0x06, 0x43, 0x55, 0x79, 0xd4, 0xf6, 0x41, 0x80, 0x08, 0xf2, 0xdf, 0xf4, 0x01, 0xf3, 0xd0, 0xf5, - 0x41, 0x49, 0x8d, 0xaf, 0xc4, 0xf4, 0x01, 0x06, 0xcf, 0x03, 0x01, 0xff, - 0x4b, 0x88, 0x95, 0xdf, 0xf5, 0x01, 0x43, 0x89, 0x08, 0xc3, 0xf4, 0x41, + 0x41, 0x49, 0xa9, 0xaf, 0xc4, 0xf4, 0x01, 0x06, 0xcf, 0x03, 0x01, 0xff, + 0x4b, 0x9b, 0x95, 0xdf, 0xf5, 0x01, 0x43, 0x89, 0x08, 0xc3, 0xf4, 0x41, 0xa2, 0xed, 0x2a, 0xa3, 0x89, 0x2a, 0x43, 0xae, 0x09, 0x62, 0xf3, 0x01, - 0x4e, 0x00, 0x71, 0xe2, 0xf3, 0x01, 0xa7, 0xb0, 0x28, 0x47, 0x46, 0xbf, - 0x26, 0x21, 0x00, 0x47, 0xb8, 0xc7, 0xe2, 0xf6, 0x01, 0x4b, 0x81, 0x8b, - 0x4c, 0xf4, 0x01, 0xac, 0x8e, 0x11, 0x48, 0xab, 0xb3, 0x49, 0xf5, 0x01, + 0x4e, 0x15, 0x71, 0xe2, 0xf3, 0x01, 0xa7, 0xb0, 0x28, 0x47, 0x62, 0xbf, + 0x26, 0x21, 0x00, 0x47, 0xd4, 0xc7, 0xe2, 0xf6, 0x01, 0x4b, 0x88, 0x8b, + 0x4c, 0xf4, 0x01, 0xac, 0x8e, 0x11, 0x48, 0xc7, 0xb3, 0x49, 0xf5, 0x01, 0xae, 0xb6, 0x10, 0xb0, 0x85, 0x0f, 0xb2, 0xfb, 0x09, 0xb3, 0xc5, 0x04, 0x02, 0xf3, 0x04, 0x74, 0xb5, 0x46, 0x03, 0x32, 0x00, 0x10, 0x42, 0xc2, - 0x02, 0x89, 0xf9, 0x01, 0xf8, 0x02, 0xf4, 0x01, 0x45, 0x97, 0xe1, 0xaa, - 0xf9, 0x41, 0x4b, 0xa1, 0x94, 0x75, 0xf9, 0x01, 0xac, 0x01, 0xff, 0x42, + 0x02, 0x89, 0xf9, 0x01, 0xf8, 0x02, 0xf4, 0x01, 0x45, 0xb3, 0xe1, 0xaa, + 0xf9, 0x41, 0x4b, 0xb4, 0x94, 0x75, 0xf9, 0x01, 0xac, 0x01, 0xff, 0x42, 0xea, 0x04, 0xd7, 0xf5, 0x81, 0x06, 0x43, 0xf1, 0x07, 0x3e, 0x20, 0x40, - 0x05, 0x5a, 0x2c, 0x01, 0xff, 0x4d, 0x8d, 0x52, 0xbc, 0x2b, 0x00, 0x06, - 0xad, 0x02, 0x01, 0xff, 0x51, 0x89, 0x52, 0xbb, 0x2b, 0x00, 0x47, 0x93, - 0x52, 0xba, 0x2b, 0x40, 0x48, 0xb5, 0xbe, 0x25, 0x21, 0x00, 0xb4, 0x01, - 0xff, 0x48, 0x9d, 0xba, 0xe4, 0xf4, 0x01, 0x06, 0x93, 0x0f, 0x01, 0xff, - 0x4a, 0xc5, 0x28, 0x2d, 0x27, 0x00, 0x4b, 0x1e, 0x5b, 0x19, 0x27, 0x00, - 0x4b, 0x22, 0x96, 0x1f, 0x27, 0x00, 0x4a, 0xf0, 0x2a, 0x9d, 0x26, 0x40, - 0x42, 0x33, 0x00, 0xa6, 0xf9, 0x01, 0x0b, 0x74, 0x98, 0x01, 0xff, 0x11, - 0x56, 0x52, 0xe4, 0x02, 0x0d, 0x76, 0x54, 0xd3, 0x02, 0x48, 0x55, 0xbe, + 0x05, 0x5a, 0x2c, 0x01, 0xff, 0x4d, 0xa2, 0x52, 0xbc, 0x2b, 0x00, 0x06, + 0xad, 0x02, 0x01, 0xff, 0x51, 0x9e, 0x52, 0xbb, 0x2b, 0x00, 0x47, 0xa8, + 0x52, 0xba, 0x2b, 0x40, 0x48, 0xd1, 0xbe, 0x25, 0x21, 0x00, 0xb4, 0x01, + 0xff, 0x48, 0xb9, 0xba, 0xe4, 0xf4, 0x01, 0x06, 0x93, 0x0f, 0x01, 0xff, + 0x4a, 0xc5, 0x28, 0x2d, 0x27, 0x00, 0x4b, 0x33, 0x5b, 0x19, 0x27, 0x00, + 0x4b, 0x35, 0x96, 0x1f, 0x27, 0x00, 0x4a, 0xf0, 0x2a, 0x9d, 0x26, 0x40, + 0x42, 0x33, 0x00, 0xa6, 0xf9, 0x01, 0x0b, 0x87, 0x98, 0x01, 0xff, 0x11, + 0x6b, 0x52, 0xe4, 0x02, 0x0d, 0x8b, 0x54, 0xd3, 0x02, 0x48, 0x71, 0xbe, 0x2e, 0xed, 0x01, 0x07, 0xbf, 0x35, 0x01, 0xff, 0x45, 0xd1, 0x09, 0x08, 0xed, 0x81, 0xa7, 0x02, 0xa6, 0xd9, 0x01, 0x44, 0xb8, 0x27, 0x09, 0xed, 0x81, 0xb6, 0x01, 0x43, 0xcd, 0x09, 0x01, 0xed, 0x81, 0x9f, 0x01, 0xb3, 0x59, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x0a, 0xed, 0x81, 0x49, 0xa8, 0x24, 0xb7, 0x01, 0xff, 0x44, 0x98, 0x1b, 0x0b, 0xed, 0x81, 0x14, 0xef, 0x02, 0xed, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x14, 0xed, - 0x01, 0x48, 0x54, 0x58, 0x1d, 0xed, 0x41, 0x49, 0x53, 0x58, 0x26, 0xed, + 0x01, 0x48, 0x69, 0x58, 0x1d, 0xed, 0x41, 0x49, 0x68, 0x58, 0x26, 0xed, 0x41, 0x44, 0xf3, 0x0f, 0x0c, 0xed, 0x81, 0x16, 0x43, 0x26, 0x01, 0x03, 0xed, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x15, 0xed, 0x01, - 0x48, 0x54, 0x58, 0x1e, 0xed, 0x41, 0x49, 0x53, 0x58, 0x27, 0xed, 0x41, - 0x49, 0x53, 0x58, 0x25, 0xed, 0x41, 0x44, 0x96, 0x1b, 0x07, 0xed, 0x81, + 0x48, 0x69, 0x58, 0x1e, 0xed, 0x41, 0x49, 0x68, 0x58, 0x27, 0xed, 0x41, + 0x49, 0x68, 0x58, 0x25, 0xed, 0x41, 0x44, 0x96, 0x1b, 0x07, 0xed, 0x81, 0x22, 0x42, 0x30, 0x27, 0x06, 0xed, 0xc1, 0x00, 0x80, 0x0d, 0x42, 0xf5, - 0x0f, 0x0f, 0xed, 0xc1, 0x00, 0x49, 0x53, 0x58, 0x2a, 0xed, 0x41, 0x47, - 0xe9, 0x0f, 0x18, 0xed, 0x01, 0x48, 0x54, 0x58, 0x21, 0xed, 0x41, 0x80, - 0x0d, 0x42, 0xf5, 0x0f, 0x10, 0xed, 0xc1, 0x00, 0x49, 0x53, 0x58, 0x2b, - 0xed, 0x41, 0x47, 0xe9, 0x0f, 0x19, 0xed, 0x01, 0x48, 0x54, 0x58, 0x22, + 0x0f, 0x0f, 0xed, 0xc1, 0x00, 0x49, 0x68, 0x58, 0x2a, 0xed, 0x41, 0x47, + 0xe9, 0x0f, 0x18, 0xed, 0x01, 0x48, 0x69, 0x58, 0x21, 0xed, 0x41, 0x80, + 0x0d, 0x42, 0xf5, 0x0f, 0x10, 0xed, 0xc1, 0x00, 0x49, 0x68, 0x58, 0x2b, + 0xed, 0x41, 0x47, 0xe9, 0x0f, 0x19, 0xed, 0x01, 0x48, 0x69, 0x58, 0x22, 0xed, 0x41, 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x13, 0xed, 0x01, 0x48, - 0x54, 0x58, 0x1c, 0xed, 0x41, 0x80, 0x0d, 0x42, 0xf5, 0x0f, 0x12, 0xed, - 0xc1, 0x00, 0x49, 0x53, 0x58, 0x2d, 0xed, 0x41, 0x47, 0xe9, 0x0f, 0x1b, - 0xed, 0x01, 0x48, 0x54, 0x58, 0x24, 0xed, 0x41, 0xa9, 0x26, 0xaf, 0x01, + 0x69, 0x58, 0x1c, 0xed, 0x41, 0x80, 0x0d, 0x42, 0xf5, 0x0f, 0x12, 0xed, + 0xc1, 0x00, 0x49, 0x68, 0x58, 0x2d, 0xed, 0x41, 0x47, 0xe9, 0x0f, 0x1b, + 0xed, 0x01, 0x48, 0x69, 0x58, 0x24, 0xed, 0x41, 0xa9, 0x26, 0xaf, 0x01, 0xff, 0x43, 0xf4, 0x0f, 0x0d, 0xed, 0x81, 0x16, 0x42, 0x42, 0x00, 0x04, 0xed, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x16, 0xed, 0x01, - 0x48, 0x54, 0x58, 0x1f, 0xed, 0x41, 0x49, 0x53, 0x58, 0x28, 0xed, 0x41, - 0x43, 0xcf, 0x47, 0x0e, 0xed, 0x81, 0x16, 0x42, 0x32, 0x00, 0x05, 0xed, + 0x48, 0x69, 0x58, 0x1f, 0xed, 0x41, 0x49, 0x68, 0x58, 0x28, 0xed, 0x41, + 0x43, 0xe4, 0x47, 0x0e, 0xed, 0x81, 0x16, 0x42, 0x32, 0x00, 0x05, 0xed, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x17, 0xed, 0x01, 0x48, - 0x54, 0x58, 0x20, 0xed, 0x41, 0x49, 0x53, 0x58, 0x29, 0xed, 0x41, 0x80, - 0x0b, 0xf9, 0x11, 0xed, 0xc1, 0x00, 0x49, 0x53, 0x58, 0x2c, 0xed, 0x41, - 0x47, 0xe9, 0x0f, 0x1a, 0xed, 0x01, 0x48, 0x54, 0x58, 0x23, 0xed, 0x41, - 0x44, 0x22, 0x00, 0x3c, 0xed, 0x01, 0x45, 0x4d, 0xd5, 0x3d, 0xed, 0x41, + 0x69, 0x58, 0x20, 0xed, 0x41, 0x49, 0x68, 0x58, 0x29, 0xed, 0x41, 0x80, + 0x0b, 0xf9, 0x11, 0xed, 0xc1, 0x00, 0x49, 0x68, 0x58, 0x2c, 0xed, 0x41, + 0x47, 0xe9, 0x0f, 0x1a, 0xed, 0x01, 0x48, 0x69, 0x58, 0x23, 0xed, 0x41, + 0x44, 0x22, 0x00, 0x3c, 0xed, 0x01, 0x45, 0x69, 0xd5, 0x3d, 0xed, 0x41, 0x45, 0xd1, 0x09, 0x35, 0xed, 0x01, 0xa6, 0x3e, 0x44, 0xb8, 0x27, 0x36, 0xed, 0x01, 0xb3, 0x23, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x37, 0xed, 0x81, 0x13, 0x44, 0x25, 0x01, 0x30, 0xed, 0x01, 0x42, 0x15, 0x02, 0x2f, - 0xed, 0xc1, 0x00, 0x49, 0x53, 0x58, 0x3a, 0xed, 0x41, 0x49, 0x53, 0x58, + 0xed, 0xc1, 0x00, 0x49, 0x68, 0x58, 0x3a, 0xed, 0x41, 0x49, 0x68, 0x58, 0x3b, 0xed, 0x41, 0x44, 0x96, 0x1b, 0x34, 0xed, 0x01, 0x42, 0x30, 0x27, 0x33, 0xed, 0xc1, 0x00, 0x48, 0xe8, 0x0f, 0x39, 0xed, 0x41, 0x43, 0xd7, 0x04, 0x32, 0xed, 0x01, 0x43, 0xfb, 0x05, 0x31, 0xed, 0xc1, 0x00, 0x48, - 0xe8, 0x0f, 0x38, 0xed, 0x41, 0x04, 0x3e, 0x3e, 0xfe, 0x01, 0x06, 0x79, + 0xe8, 0x0f, 0x38, 0xed, 0x41, 0x04, 0x53, 0x3e, 0xfe, 0x01, 0x06, 0x95, 0xd3, 0x01, 0xff, 0x06, 0xf4, 0x05, 0xb2, 0x01, 0x07, 0xf1, 0x04, 0x01, 0xff, 0xe1, 0x96, 0x04, 0x81, 0x9d, 0x01, 0x42, 0x16, 0x00, 0x81, 0x04, - 0x01, 0x44, 0x62, 0xe4, 0x8b, 0x04, 0x01, 0xa4, 0x82, 0x01, 0xe5, 0x97, + 0x01, 0x44, 0x7e, 0xe4, 0x8b, 0x04, 0x01, 0xa4, 0x82, 0x01, 0xe5, 0x97, 0x04, 0x81, 0x79, 0x42, 0xed, 0x06, 0x8d, 0x04, 0x01, 0x42, 0x24, 0x02, 0x8c, 0x04, 0x01, 0x42, 0x22, 0x00, 0x94, 0x04, 0x01, 0xe9, 0x98, 0x04, - 0x01, 0x42, 0x77, 0x24, 0x83, 0x04, 0x01, 0xab, 0x4f, 0x44, 0x00, 0xe4, - 0x90, 0x04, 0x01, 0x44, 0x1e, 0xe6, 0x91, 0x04, 0x01, 0x44, 0x96, 0xe6, - 0x92, 0x04, 0x01, 0xef, 0x99, 0x04, 0x81, 0x34, 0x44, 0x49, 0xdf, 0x8e, + 0x01, 0x42, 0x77, 0x24, 0x83, 0x04, 0x01, 0xab, 0x4f, 0x44, 0x1c, 0xe4, + 0x90, 0x04, 0x01, 0x44, 0x3a, 0xe6, 0x91, 0x04, 0x01, 0x44, 0xb2, 0xe6, + 0x92, 0x04, 0x01, 0xef, 0x99, 0x04, 0x81, 0x34, 0x44, 0x65, 0xdf, 0x8e, 0x04, 0x01, 0x42, 0x71, 0x00, 0x87, 0x04, 0x01, 0xb3, 0x1c, 0x42, 0x12, - 0x00, 0x82, 0x04, 0x01, 0xf5, 0x9a, 0x04, 0x01, 0x43, 0x08, 0x83, 0x93, + 0x00, 0x82, 0x04, 0x01, 0xf5, 0x9a, 0x04, 0x01, 0x43, 0x0f, 0x83, 0x93, 0x04, 0x01, 0x42, 0x06, 0x24, 0x84, 0x04, 0x01, 0x42, 0x20, 0x20, 0x95, - 0x04, 0x41, 0xe1, 0x88, 0x04, 0x01, 0x44, 0x42, 0xe5, 0x89, 0x04, 0x41, - 0xef, 0x9d, 0x04, 0x41, 0x43, 0x6f, 0xb9, 0x8f, 0x04, 0x01, 0x42, 0x22, + 0x04, 0x41, 0xe1, 0x88, 0x04, 0x01, 0x44, 0x5e, 0xe5, 0x89, 0x04, 0x41, + 0xef, 0x9d, 0x04, 0x41, 0x43, 0x8b, 0xb9, 0x8f, 0x04, 0x01, 0x42, 0x22, 0x00, 0x85, 0x04, 0x41, 0xe5, 0x9c, 0x04, 0x41, 0x43, 0x87, 0x11, 0x86, 0x04, 0x01, 0x42, 0x22, 0x00, 0x8a, 0x04, 0x41, 0xe1, 0x9b, 0x04, 0x01, 0x43, 0x68, 0x00, 0x80, 0x04, 0x41, 0x45, 0xd1, 0x09, 0xa8, 0x04, 0x01, @@ -5696,8 +5697,8 @@ static const unsigned char uname2c_tree[210697] = { 0x43, 0xd7, 0x04, 0xa5, 0x04, 0x01, 0x43, 0xfb, 0x05, 0xa4, 0x04, 0x41, 0x0f, 0xe9, 0x04, 0xd8, 0x01, 0x0d, 0x7c, 0x07, 0x01, 0xff, 0xe1, 0xd8, 0x04, 0x81, 0xc0, 0x01, 0x43, 0x45, 0x08, 0xdc, 0x04, 0x01, 0x43, 0x29, - 0x1e, 0xdd, 0x04, 0x01, 0x43, 0x64, 0x46, 0xf5, 0x04, 0x01, 0xe5, 0xdf, - 0x04, 0x81, 0x81, 0x01, 0x43, 0xf2, 0x93, 0xf9, 0x04, 0x01, 0xa8, 0x6f, + 0x1e, 0xdd, 0x04, 0x01, 0x43, 0x79, 0x46, 0xf5, 0x04, 0x01, 0xe5, 0xdf, + 0x04, 0x81, 0x81, 0x01, 0x43, 0x05, 0x94, 0xf9, 0x04, 0x01, 0xa8, 0x6f, 0xe9, 0xe3, 0x04, 0x01, 0xab, 0x59, 0x42, 0x74, 0x00, 0xe7, 0x04, 0x01, 0x42, 0x6c, 0x00, 0xe8, 0x04, 0x01, 0x42, 0x2f, 0x04, 0xe9, 0x04, 0x01, 0xef, 0xea, 0x04, 0x81, 0x3c, 0x42, 0xc1, 0x08, 0xec, 0x04, 0x01, 0xb3, @@ -5714,8 +5715,8 @@ static const unsigned char uname2c_tree[210697] = { 0x05, 0xf3, 0x04, 0x41, 0xe8, 0xdb, 0x04, 0x01, 0xe9, 0xd9, 0x04, 0xc1, 0x00, 0xee, 0xda, 0x04, 0x41, 0xe1, 0xb0, 0x04, 0x81, 0xc0, 0x01, 0x43, 0x45, 0x08, 0xb4, 0x04, 0x01, 0x43, 0x29, 0x1e, 0xb5, 0x04, 0x01, 0x43, - 0x64, 0x46, 0xcd, 0x04, 0x01, 0xe5, 0xb7, 0x04, 0x81, 0x81, 0x01, 0x43, - 0xf2, 0x93, 0xd1, 0x04, 0x01, 0xa8, 0x6f, 0xe9, 0xbb, 0x04, 0x01, 0xab, + 0x79, 0x46, 0xcd, 0x04, 0x01, 0xe5, 0xb7, 0x04, 0x81, 0x81, 0x01, 0x43, + 0x05, 0x94, 0xd1, 0x04, 0x01, 0xa8, 0x6f, 0xe9, 0xbb, 0x04, 0x01, 0xab, 0x59, 0x42, 0x74, 0x00, 0xbf, 0x04, 0x01, 0x42, 0x6c, 0x00, 0xc0, 0x04, 0x01, 0x42, 0x2f, 0x04, 0xc1, 0x04, 0x01, 0xef, 0xc2, 0x04, 0x81, 0x3c, 0x42, 0xc1, 0x08, 0xc4, 0x04, 0x01, 0xb3, 0x2a, 0xb4, 0x17, 0xf5, 0xce, @@ -5730,22 +5731,22 @@ static const unsigned char uname2c_tree[210697] = { 0x02, 0xbd, 0x04, 0x01, 0x42, 0xc1, 0x08, 0xc5, 0x04, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0xc9, 0x04, 0x01, 0x42, 0x45, 0x05, 0xcb, 0x04, 0x41, 0xe8, 0xb3, 0x04, 0x01, 0xe9, 0xb1, 0x04, 0xc1, 0x00, 0xee, 0xb2, 0x04, 0x41, - 0x50, 0xa9, 0x5a, 0xc7, 0x27, 0x00, 0x03, 0x1c, 0x01, 0xe6, 0x04, 0x43, + 0x50, 0xbe, 0x5a, 0xc7, 0x27, 0x00, 0x03, 0x1c, 0x01, 0xe6, 0x04, 0x43, 0x31, 0x14, 0x7f, 0xf7, 0x01, 0xa9, 0x16, 0x05, 0x6e, 0x10, 0x06, 0x4c, - 0x08, 0x8e, 0x26, 0x26, 0x40, 0x50, 0xe3, 0x21, 0x3e, 0xfd, 0x00, 0x51, + 0x1b, 0x8e, 0x26, 0x26, 0x40, 0x50, 0xe3, 0x21, 0x3e, 0xfd, 0x00, 0x51, 0x6a, 0x1f, 0x3f, 0xfd, 0x40, 0x48, 0x28, 0x2c, 0xb6, 0x22, 0x00, 0x03, 0xb8, 0x2e, 0x01, 0xff, 0xa1, 0xae, 0x04, 0x06, 0xf4, 0x05, 0xe7, 0x03, - 0x09, 0x76, 0x54, 0xb5, 0x03, 0x46, 0xad, 0xd2, 0x70, 0x0b, 0x00, 0x07, - 0xf1, 0x04, 0x79, 0x05, 0xdb, 0x02, 0x44, 0x0b, 0x5b, 0x70, 0x01, 0xff, + 0x09, 0x8b, 0x54, 0xb5, 0x03, 0x46, 0xc9, 0xd2, 0x70, 0x0b, 0x00, 0x07, + 0xf1, 0x04, 0x79, 0x05, 0xdb, 0x02, 0x44, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xa1, 0x31, 0xe5, 0x47, 0x0b, 0x00, 0xe9, 0x3f, 0x0b, 0x80, 0x24, 0xef, - 0x4b, 0x0b, 0x00, 0xf5, 0x41, 0x0b, 0x80, 0x17, 0x08, 0x76, 0xb7, 0x01, + 0x4b, 0x0b, 0x00, 0xf5, 0x41, 0x0b, 0x80, 0x17, 0x08, 0x92, 0xb7, 0x01, 0xff, 0xec, 0x62, 0x0b, 0x80, 0x09, 0xf2, 0x43, 0x0b, 0xc0, 0x00, 0xf2, 0x44, 0x0b, 0x40, 0xec, 0x63, 0x0b, 0x40, 0xf5, 0x42, 0x0b, 0x40, 0xe9, 0x40, 0x0b, 0x40, 0xe1, 0x3e, 0x0b, 0x00, 0xe9, 0x48, 0x0b, 0x00, 0xf5, 0x4c, 0x0b, 0x40, 0xa1, 0x23, 0x4b, 0x3b, 0x21, 0x01, 0x0b, 0x00, 0x45, - 0xab, 0x3a, 0x3c, 0x0b, 0x00, 0x48, 0x00, 0x83, 0x55, 0x0b, 0x00, 0x02, - 0x02, 0x00, 0x01, 0xff, 0x44, 0x49, 0x21, 0x4d, 0x0b, 0x00, 0x45, 0x69, - 0x46, 0x03, 0x0b, 0x40, 0x47, 0x5c, 0x14, 0x02, 0x0b, 0x00, 0x47, 0x3a, + 0xc0, 0x3a, 0x3c, 0x0b, 0x00, 0x48, 0x07, 0x83, 0x55, 0x0b, 0x00, 0x02, + 0x02, 0x00, 0x01, 0xff, 0x44, 0x49, 0x21, 0x4d, 0x0b, 0x00, 0x45, 0x7e, + 0x46, 0x03, 0x0b, 0x40, 0x47, 0x5c, 0x14, 0x02, 0x0b, 0x00, 0x47, 0x41, 0x81, 0x3d, 0x0b, 0x40, 0xe1, 0x05, 0x0b, 0x80, 0xa0, 0x02, 0xa2, 0x93, 0x02, 0xa3, 0x86, 0x02, 0xa4, 0xed, 0x01, 0xe5, 0x0f, 0x0b, 0x00, 0xa7, 0xdc, 0x01, 0x42, 0x22, 0x00, 0x39, 0x0b, 0x00, 0xe9, 0x07, 0x0b, 0x80, @@ -5754,7 +5755,7 @@ static const unsigned char uname2c_tree[210697] = { 0xb0, 0x76, 0xb2, 0x64, 0xb3, 0x52, 0xb4, 0x39, 0xf5, 0x09, 0x0b, 0x80, 0x30, 0xb6, 0x13, 0x42, 0xa9, 0x01, 0x71, 0x0b, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x2f, 0x0b, 0x00, 0x42, 0x20, 0x20, 0x5f, 0x0b, 0x40, 0xe1, 0x35, - 0x0b, 0x00, 0x07, 0x77, 0xb7, 0x01, 0xff, 0xec, 0x0c, 0x0b, 0x80, 0x09, + 0x0b, 0x00, 0x07, 0x93, 0xb7, 0x01, 0xff, 0xec, 0x0c, 0x0b, 0x80, 0x09, 0xf2, 0x0b, 0x0b, 0xc0, 0x00, 0xf2, 0x60, 0x0b, 0x40, 0xec, 0x61, 0x0b, 0x40, 0xf5, 0x0a, 0x0b, 0x40, 0xe1, 0x24, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x25, 0x0b, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x1f, 0x0b, 0x00, 0x42, 0x22, @@ -5773,62 +5774,62 @@ static const unsigned char uname2c_tree[210697] = { 0xe1, 0x2c, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x2d, 0x0b, 0x40, 0xe1, 0x06, 0x0b, 0x00, 0xe9, 0x10, 0x0b, 0x00, 0xf5, 0x14, 0x0b, 0x40, 0x04, 0xcd, 0x09, 0x11, 0x06, 0x24, 0x01, 0x01, 0xff, 0x48, 0x2a, 0x01, 0x74, 0x0b, - 0x00, 0x4a, 0x45, 0xa8, 0x77, 0x0b, 0x40, 0x46, 0xd1, 0x09, 0x76, 0x0b, + 0x00, 0x4a, 0x58, 0xa8, 0x77, 0x0b, 0x40, 0x46, 0xd1, 0x09, 0x76, 0x0b, 0x00, 0x44, 0x22, 0x00, 0x73, 0x0b, 0x00, 0x47, 0x2a, 0x01, 0x72, 0x0b, - 0x00, 0x49, 0x63, 0x6c, 0x75, 0x0b, 0x40, 0x45, 0xd1, 0x09, 0x6e, 0x0b, + 0x00, 0x49, 0x78, 0x6c, 0x75, 0x0b, 0x40, 0x45, 0xd1, 0x09, 0x6e, 0x0b, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x6f, 0x0b, 0x00, 0x43, 0xcd, 0x09, 0x67, 0x0b, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x66, 0x0b, 0x40, 0x44, 0x25, 0x01, 0x69, 0x0b, 0x00, 0x42, 0x15, 0x02, 0x68, 0x0b, 0x40, 0x44, 0x96, 0x1b, 0x6d, 0x0b, 0x00, 0x42, 0x30, 0x27, 0x6c, 0x0b, 0x40, 0x43, 0xd7, 0x04, 0x6b, 0x0b, 0x00, 0x43, 0xfb, 0x05, 0x6a, 0x0b, - 0x40, 0x4d, 0xc3, 0x6e, 0x56, 0x0b, 0x00, 0x4d, 0x25, 0x6f, 0x57, 0x0b, - 0x40, 0x02, 0x60, 0x00, 0x06, 0x44, 0xbe, 0xe7, 0xa7, 0xf9, 0x41, 0x44, - 0x4a, 0xe4, 0xd9, 0xf4, 0x01, 0x45, 0x5e, 0x1f, 0xe1, 0xf9, 0x41, 0xa5, - 0x24, 0x47, 0x6b, 0xc7, 0xce, 0x26, 0x00, 0x48, 0x2b, 0x15, 0x0d, 0x26, - 0x00, 0x02, 0x35, 0x00, 0x01, 0xff, 0x48, 0xc5, 0xba, 0xbf, 0xf4, 0x81, - 0x06, 0x46, 0x3f, 0xd4, 0x25, 0x23, 0x40, 0x45, 0x1f, 0xd7, 0xb8, 0xf5, - 0x41, 0xae, 0x06, 0x55, 0x3c, 0x39, 0x9d, 0x00, 0x40, 0x80, 0x19, 0x8d, - 0x01, 0xff, 0x0f, 0x1f, 0x65, 0x06, 0x59, 0xdd, 0x22, 0xbe, 0x27, 0x40, - 0x4d, 0x6e, 0x7c, 0x8f, 0x23, 0x00, 0x4d, 0xc0, 0x7d, 0x90, 0x23, 0x40, - 0x02, 0x5d, 0x00, 0x57, 0x07, 0x73, 0x02, 0x3b, 0xa6, 0x2d, 0x4a, 0xba, - 0x71, 0x50, 0xf4, 0x01, 0x44, 0x34, 0x01, 0x13, 0xf5, 0x01, 0x0d, 0x42, + 0x40, 0x4d, 0xd8, 0x6e, 0x56, 0x0b, 0x00, 0x4d, 0x3a, 0x6f, 0x57, 0x0b, + 0x40, 0x02, 0x60, 0x00, 0x06, 0x44, 0xda, 0xe7, 0xa7, 0xf9, 0x41, 0x44, + 0x66, 0xe4, 0xd9, 0xf4, 0x01, 0x45, 0x5e, 0x1f, 0xe1, 0xf9, 0x41, 0xa5, + 0x24, 0x47, 0x87, 0xc7, 0xce, 0x26, 0x00, 0x48, 0x2b, 0x15, 0x0d, 0x26, + 0x00, 0x02, 0x35, 0x00, 0x01, 0xff, 0x48, 0xe1, 0xba, 0xbf, 0xf4, 0x81, + 0x06, 0x46, 0x5b, 0xd4, 0x25, 0x23, 0x40, 0x45, 0x3b, 0xd7, 0xb8, 0xf5, + 0x41, 0xae, 0x06, 0x55, 0x51, 0x39, 0x9d, 0x00, 0x40, 0x80, 0x19, 0x8d, + 0x01, 0xff, 0x0f, 0x34, 0x65, 0x06, 0x59, 0xdd, 0x22, 0xbe, 0x27, 0x40, + 0x4d, 0x75, 0x7c, 0x8f, 0x23, 0x00, 0x4d, 0xc7, 0x7d, 0x90, 0x23, 0x40, + 0x02, 0x5d, 0x00, 0x57, 0x07, 0x73, 0x02, 0x3b, 0xa6, 0x2d, 0x4a, 0xcf, + 0x71, 0x50, 0xf4, 0x01, 0x44, 0x34, 0x01, 0x13, 0xf5, 0x01, 0x0d, 0x49, 0x7e, 0x11, 0x02, 0x6f, 0x00, 0x01, 0xff, 0x44, 0xf5, 0x10, 0xc3, 0x27, - 0x00, 0x46, 0x14, 0x32, 0xc4, 0x27, 0x40, 0x4c, 0xe8, 0x89, 0xed, 0xf4, - 0x01, 0x4b, 0x71, 0x99, 0xec, 0xf4, 0x41, 0x4a, 0x27, 0xa3, 0xc2, 0xf4, - 0x01, 0x45, 0x6f, 0x5f, 0xc1, 0xf5, 0x41, 0x48, 0x94, 0x0b, 0x32, 0x27, + 0x00, 0x46, 0x14, 0x32, 0xc4, 0x27, 0x40, 0x4c, 0xef, 0x89, 0xed, 0xf4, + 0x01, 0x4b, 0x84, 0x99, 0xec, 0xf4, 0x41, 0x4a, 0x3a, 0xa3, 0xc2, 0xf4, + 0x01, 0x45, 0x84, 0x5f, 0xc1, 0xf5, 0x41, 0x48, 0x94, 0x0b, 0x32, 0x27, 0x00, 0x4a, 0xc5, 0x28, 0x2b, 0x27, 0x00, 0x45, 0x0d, 0x0f, 0x1b, 0x27, 0x00, 0x58, 0x3f, 0x28, 0x3c, 0x27, 0x40, 0x42, 0x5a, 0x04, 0xd6, 0xf4, 0x01, 0xf8, 0x23, 0x24, 0x40, 0x72, 0xa7, 0x00, 0x1b, 0xf5, 0x01, 0x07, - 0xea, 0xc5, 0x27, 0xa5, 0x06, 0x43, 0xb5, 0x00, 0xc5, 0xf9, 0x41, 0x80, - 0x06, 0x4f, 0xe4, 0x63, 0x71, 0xfa, 0x41, 0x4c, 0x8c, 0x85, 0xaf, 0xf5, - 0x01, 0x04, 0x9f, 0x0a, 0x01, 0xff, 0x46, 0xb8, 0x76, 0x24, 0x20, 0x00, - 0x59, 0x6e, 0x13, 0x2b, 0x2e, 0x40, 0x4a, 0x8f, 0x9f, 0x98, 0xf6, 0x01, - 0x43, 0xaf, 0x24, 0x8d, 0xf6, 0x01, 0x4b, 0x07, 0x94, 0xf1, 0xf6, 0x01, - 0x4a, 0xdd, 0xa6, 0x94, 0xf6, 0x01, 0x44, 0x25, 0xc5, 0x96, 0xf6, 0x41, - 0x07, 0x12, 0xc3, 0xee, 0x14, 0xa4, 0x06, 0x43, 0xd7, 0x04, 0xd2, 0xfa, - 0x41, 0x80, 0x17, 0x03, 0x16, 0x01, 0x01, 0xff, 0x45, 0x63, 0xd9, 0xd3, + 0x06, 0xc6, 0x27, 0xa5, 0x06, 0x43, 0xb5, 0x00, 0xc5, 0xf9, 0x41, 0x80, + 0x06, 0x4f, 0xf9, 0x63, 0x71, 0xfa, 0x41, 0x4c, 0x93, 0x85, 0xaf, 0xf5, + 0x01, 0x04, 0x9f, 0x0a, 0x01, 0xff, 0x46, 0xbf, 0x76, 0x24, 0x20, 0x00, + 0x59, 0x6e, 0x13, 0x2b, 0x2e, 0x40, 0x4a, 0xa2, 0x9f, 0x98, 0xf6, 0x01, + 0x43, 0xaf, 0x24, 0x8d, 0xf6, 0x01, 0x4b, 0x1a, 0x94, 0xf1, 0xf6, 0x01, + 0x4a, 0xf0, 0xa6, 0x94, 0xf6, 0x01, 0x44, 0x41, 0xc5, 0x96, 0xf6, 0x41, + 0x07, 0x2e, 0xc3, 0xee, 0x14, 0xa4, 0x06, 0x43, 0xd7, 0x04, 0xd2, 0xfa, + 0x41, 0x80, 0x17, 0x03, 0x16, 0x01, 0x01, 0xff, 0x45, 0x7f, 0xd9, 0xd3, 0xf9, 0x01, 0x43, 0x60, 0x16, 0x74, 0xf4, 0x01, 0x45, 0xbc, 0x29, 0x75, - 0xf4, 0x41, 0x08, 0xf5, 0xba, 0xbc, 0x14, 0x0a, 0xc3, 0xa2, 0x8a, 0x10, - 0x07, 0xdb, 0xc7, 0xab, 0x0e, 0x43, 0x6d, 0x21, 0xdd, 0xf5, 0x01, 0x0e, - 0x4c, 0x73, 0xc3, 0x0c, 0x03, 0x6f, 0x02, 0xa1, 0x08, 0x02, 0xe1, 0x02, - 0x98, 0x04, 0x0e, 0xa2, 0x76, 0xc3, 0x01, 0x07, 0xd5, 0xcc, 0x01, 0xff, - 0x0a, 0x99, 0x53, 0x98, 0x01, 0x07, 0xf1, 0x04, 0x22, 0x0c, 0x8c, 0x14, - 0x01, 0xff, 0x43, 0x16, 0x00, 0x86, 0x0f, 0x01, 0x49, 0x75, 0x41, 0x89, + 0xf4, 0x41, 0x08, 0x11, 0xbb, 0xbc, 0x14, 0x0a, 0xd6, 0xa2, 0x8a, 0x10, + 0x07, 0xf7, 0xc7, 0xab, 0x0e, 0x43, 0x6d, 0x21, 0xdd, 0xf5, 0x01, 0x0e, + 0x61, 0x73, 0xc3, 0x0c, 0x03, 0x6f, 0x02, 0xa1, 0x08, 0x02, 0xe1, 0x02, + 0x98, 0x04, 0x0e, 0xa9, 0x76, 0xc3, 0x01, 0x07, 0xf1, 0xcc, 0x01, 0xff, + 0x0a, 0xae, 0x53, 0x98, 0x01, 0x07, 0xf1, 0x04, 0x22, 0x0c, 0x8c, 0x14, + 0x01, 0xff, 0x43, 0x16, 0x00, 0x86, 0x0f, 0x01, 0x49, 0x8a, 0x41, 0x89, 0x0f, 0x01, 0x04, 0x25, 0x09, 0x01, 0xff, 0x44, 0x40, 0x18, 0x87, 0x0f, - 0x01, 0x44, 0xc5, 0x06, 0x88, 0x0f, 0x41, 0x45, 0x02, 0xa5, 0x70, 0x0f, - 0x01, 0x44, 0x46, 0xe4, 0x71, 0x0f, 0x01, 0x4a, 0xc9, 0xa1, 0x75, 0x0f, - 0x01, 0x4a, 0x4b, 0xa2, 0x72, 0x0f, 0x01, 0x44, 0xba, 0xe5, 0x77, 0x0f, + 0x01, 0x44, 0xc5, 0x06, 0x88, 0x0f, 0x41, 0x45, 0x15, 0xa5, 0x70, 0x0f, + 0x01, 0x44, 0x62, 0xe4, 0x71, 0x0f, 0x01, 0x4a, 0xdc, 0xa1, 0x75, 0x0f, + 0x01, 0x4a, 0x5e, 0xa2, 0x72, 0x0f, 0x01, 0x44, 0xd6, 0xe5, 0x77, 0x0f, 0x01, 0xac, 0x46, 0x43, 0xb9, 0x04, 0x79, 0x0f, 0x01, 0x43, 0x40, 0x20, - 0x7a, 0x0f, 0x01, 0x42, 0x6f, 0x02, 0x7c, 0x0f, 0x01, 0x44, 0x29, 0x60, - 0x7e, 0x0f, 0x01, 0xb3, 0x18, 0x43, 0xf1, 0xba, 0x80, 0x0f, 0x01, 0x43, - 0x08, 0x83, 0x73, 0x0f, 0x01, 0x44, 0xf9, 0x4c, 0x76, 0x0f, 0x01, 0x45, - 0xf3, 0x4c, 0x74, 0x0f, 0x41, 0xa1, 0x06, 0x43, 0x99, 0x14, 0x7f, 0x0f, - 0x41, 0x43, 0xd7, 0xdf, 0x7d, 0x0f, 0x01, 0x44, 0x96, 0xd9, 0x7b, 0x0f, - 0x41, 0x45, 0xe8, 0xd1, 0x78, 0x0f, 0x01, 0x43, 0xeb, 0x54, 0x81, 0x0f, + 0x7a, 0x0f, 0x01, 0x42, 0x6f, 0x02, 0x7c, 0x0f, 0x01, 0x44, 0x3e, 0x60, + 0x7e, 0x0f, 0x01, 0xb3, 0x18, 0x43, 0x0d, 0xbb, 0x80, 0x0f, 0x01, 0x43, + 0x0f, 0x83, 0x73, 0x0f, 0x01, 0x44, 0x0e, 0x4d, 0x76, 0x0f, 0x01, 0x45, + 0x08, 0x4d, 0x74, 0x0f, 0x41, 0xa1, 0x06, 0x43, 0x99, 0x14, 0x7f, 0x0f, + 0x41, 0x43, 0xf3, 0xdf, 0x7d, 0x0f, 0x01, 0x44, 0xb2, 0xd9, 0x7b, 0x0f, + 0x41, 0x45, 0x04, 0xd2, 0x78, 0x0f, 0x01, 0x43, 0x00, 0x55, 0x81, 0x0f, 0x41, 0x04, 0x9f, 0x0a, 0x11, 0x09, 0x8d, 0x0a, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x84, 0x0f, 0x01, 0x45, 0x25, 0x06, 0x85, 0x0f, 0x41, 0x45, 0x5c, - 0x00, 0x82, 0x0f, 0x01, 0x45, 0x25, 0x06, 0x83, 0x0f, 0x41, 0x07, 0xcc, - 0xc9, 0x92, 0x01, 0x08, 0xb5, 0xc2, 0x01, 0xff, 0xe1, 0x01, 0x0c, 0x81, + 0x00, 0x82, 0x0f, 0x01, 0x45, 0x25, 0x06, 0x83, 0x0f, 0x41, 0x07, 0xe8, + 0xc9, 0x92, 0x01, 0x08, 0xd1, 0xc2, 0x01, 0xff, 0xe1, 0x01, 0x0c, 0x81, 0x3a, 0xe5, 0x05, 0x0c, 0x81, 0x19, 0xe9, 0x04, 0x0c, 0x81, 0x10, 0xaf, 0x01, 0xff, 0xe5, 0x08, 0x0c, 0x81, 0x04, 0xf1, 0x39, 0x0c, 0x41, 0xeb, 0x1d, 0x0c, 0x41, 0xf1, 0x37, 0x0c, 0x41, 0xe3, 0x33, 0x0c, 0x01, 0xae, @@ -5840,7 +5841,7 @@ static const unsigned char uname2c_tree[210697] = { 0x02, 0x40, 0x0c, 0x01, 0xf4, 0x44, 0x0c, 0x01, 0xf9, 0x17, 0x0c, 0x41, 0xe2, 0x0c, 0x0c, 0x01, 0xe7, 0x10, 0x0c, 0x01, 0xeb, 0x1b, 0x0c, 0x01, 0xee, 0x25, 0x0c, 0x81, 0x08, 0xf4, 0x46, 0x0c, 0x01, 0xf9, 0x19, 0x0c, - 0x41, 0xe7, 0x2e, 0x0c, 0x41, 0xe1, 0x00, 0x0c, 0x81, 0x5d, 0x44, 0x36, + 0x41, 0xe7, 0x2e, 0x0c, 0x41, 0xe1, 0x00, 0x0c, 0x81, 0x5d, 0x44, 0x52, 0xe4, 0x48, 0x0c, 0x01, 0xa5, 0x27, 0xe9, 0x03, 0x0c, 0x81, 0x1a, 0xef, 0x06, 0x0c, 0xc1, 0x00, 0xe5, 0x07, 0x0c, 0x81, 0x0c, 0xf0, 0x30, 0x0c, 0x01, 0xf1, 0x38, 0x0c, 0x01, 0xf4, 0x47, 0x0c, 0x41, 0xeb, 0x1c, 0x0c, @@ -5855,51 +5856,51 @@ static const unsigned char uname2c_tree[210697] = { 0x0c, 0x41, 0xe8, 0x3f, 0x0c, 0x41, 0xe2, 0x0b, 0x0c, 0x01, 0xe4, 0x13, 0x0c, 0x01, 0xe7, 0x0f, 0x0c, 0x01, 0xeb, 0x1a, 0x0c, 0x01, 0xec, 0x20, 0x0c, 0x01, 0xee, 0x24, 0x0c, 0x01, 0xf2, 0x3c, 0x0c, 0x01, 0xf3, 0x3e, - 0x0c, 0x01, 0xf4, 0x45, 0x0c, 0x01, 0xf9, 0x18, 0x0c, 0x41, 0x06, 0x80, - 0xc9, 0xea, 0x01, 0x0c, 0xb0, 0x8e, 0x01, 0xff, 0x07, 0xf1, 0x04, 0x1b, - 0x03, 0xdc, 0x33, 0x01, 0xff, 0x04, 0xbc, 0x04, 0x06, 0x4e, 0xac, 0x70, - 0x7f, 0x0a, 0x41, 0x45, 0xcd, 0x47, 0x7e, 0x0a, 0x01, 0x43, 0xcd, 0x09, - 0x7d, 0x0a, 0x41, 0xa1, 0xb7, 0x01, 0x44, 0x46, 0xe4, 0x68, 0x0a, 0x01, + 0x0c, 0x01, 0xf4, 0x45, 0x0c, 0x01, 0xf9, 0x18, 0x0c, 0x41, 0x06, 0x9c, + 0xc9, 0xea, 0x01, 0x0c, 0xc3, 0x8e, 0x01, 0xff, 0x07, 0xf1, 0x04, 0x1b, + 0x03, 0xdc, 0x33, 0x01, 0xff, 0x04, 0xbc, 0x04, 0x06, 0x4e, 0xc1, 0x70, + 0x7f, 0x0a, 0x41, 0x45, 0xe2, 0x47, 0x7e, 0x0a, 0x01, 0x43, 0xcd, 0x09, + 0x7d, 0x0a, 0x41, 0xa1, 0xb7, 0x01, 0x44, 0x62, 0xe4, 0x68, 0x0a, 0x01, 0xa4, 0x97, 0x01, 0x42, 0x0f, 0x18, 0x70, 0x0a, 0x01, 0xa7, 0x82, 0x01, - 0x42, 0xb0, 0x01, 0x60, 0x0a, 0x81, 0x75, 0xab, 0x67, 0x46, 0x1f, 0xd3, + 0x42, 0xb0, 0x01, 0x60, 0x0a, 0x81, 0x75, 0xab, 0x67, 0x46, 0x3b, 0xd3, 0x61, 0x0a, 0x01, 0x43, 0xb9, 0x04, 0x63, 0x0a, 0x01, 0x43, 0x40, 0x20, - 0x6c, 0x0a, 0x01, 0x44, 0x71, 0xbe, 0x64, 0x0a, 0x01, 0x44, 0x29, 0x60, - 0x67, 0x0a, 0x01, 0xb3, 0x2f, 0xb4, 0x12, 0x43, 0x08, 0x83, 0x65, 0x0a, - 0x01, 0x44, 0xf9, 0x4c, 0x7a, 0x0a, 0x01, 0x44, 0x22, 0xe8, 0x78, 0x0a, - 0x41, 0x42, 0xaf, 0x3f, 0x69, 0x0a, 0x01, 0x43, 0x25, 0x23, 0x77, 0x0a, - 0x01, 0xa8, 0x01, 0xff, 0x42, 0xaf, 0x3f, 0x7b, 0x0a, 0x01, 0x43, 0x25, + 0x6c, 0x0a, 0x01, 0x44, 0x8d, 0xbe, 0x64, 0x0a, 0x01, 0x44, 0x3e, 0x60, + 0x67, 0x0a, 0x01, 0xb3, 0x2f, 0xb4, 0x12, 0x43, 0x0f, 0x83, 0x65, 0x0a, + 0x01, 0x44, 0x0e, 0x4d, 0x7a, 0x0a, 0x01, 0x44, 0x3e, 0xe8, 0x78, 0x0a, + 0x41, 0x42, 0xc4, 0x3f, 0x69, 0x0a, 0x01, 0x43, 0x25, 0x23, 0x77, 0x0a, + 0x01, 0xa8, 0x01, 0xff, 0x42, 0xc4, 0x3f, 0x7b, 0x0a, 0x01, 0x43, 0x25, 0x23, 0x7c, 0x0a, 0x41, 0xa1, 0x06, 0x43, 0x99, 0x14, 0x66, 0x0a, 0x41, - 0x43, 0xd7, 0xdf, 0x6e, 0x0a, 0x01, 0x44, 0x96, 0xd9, 0x6f, 0x0a, 0x01, - 0xf4, 0x6a, 0x0a, 0x41, 0x43, 0xfb, 0x0e, 0x6b, 0x0a, 0x01, 0x44, 0xcf, - 0xa1, 0x6d, 0x0a, 0x41, 0x42, 0x53, 0x00, 0x62, 0x0a, 0x41, 0x44, 0x1e, - 0xe5, 0x76, 0x0a, 0x01, 0x44, 0x4c, 0xa2, 0x74, 0x0a, 0x41, 0x45, 0x8e, - 0x44, 0x75, 0x0a, 0x01, 0x02, 0x22, 0x00, 0x01, 0xff, 0x43, 0xd7, 0xdf, - 0x73, 0x0a, 0x01, 0x44, 0x8f, 0x44, 0x79, 0x0a, 0x41, 0x43, 0x68, 0x00, - 0x71, 0x0a, 0x01, 0x42, 0xd0, 0x1a, 0x72, 0x0a, 0x41, 0x51, 0x76, 0x54, + 0x43, 0xf3, 0xdf, 0x6e, 0x0a, 0x01, 0x44, 0xb2, 0xd9, 0x6f, 0x0a, 0x01, + 0xf4, 0x6a, 0x0a, 0x41, 0x43, 0xfb, 0x0e, 0x6b, 0x0a, 0x01, 0x44, 0xe2, + 0xa1, 0x6d, 0x0a, 0x41, 0x42, 0x53, 0x00, 0x62, 0x0a, 0x41, 0x44, 0x3a, + 0xe5, 0x76, 0x0a, 0x01, 0x44, 0x5f, 0xa2, 0x74, 0x0a, 0x41, 0x45, 0xa3, + 0x44, 0x75, 0x0a, 0x01, 0x02, 0x22, 0x00, 0x01, 0xff, 0x43, 0xf3, 0xdf, + 0x73, 0x0a, 0x01, 0x44, 0xa4, 0x44, 0x79, 0x0a, 0x41, 0x43, 0x68, 0x00, + 0x71, 0x0a, 0x01, 0x42, 0xd0, 0x1a, 0x72, 0x0a, 0x41, 0x51, 0x8b, 0x54, 0x26, 0x0f, 0x01, 0xac, 0x44, 0x07, 0xbf, 0x35, 0x01, 0xff, 0xa6, 0x31, 0x43, 0xcd, 0x09, 0x1d, 0x0f, 0x81, 0x24, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x22, 0x0f, 0x01, 0xa8, 0x0d, 0xb7, 0x01, 0xff, 0x44, 0x98, 0x1b, 0x23, 0x0f, 0x01, 0xef, 0x1e, 0x0f, 0x41, 0x44, 0xf3, 0x0f, 0x24, 0x0f, 0x01, 0x43, 0x26, 0x01, 0x1f, 0x0f, 0x41, 0x48, 0xe8, 0x0f, 0x25, 0x0f, 0x41, 0x43, 0xd7, 0x04, 0x21, 0x0f, 0x01, 0x43, 0xfb, 0x05, 0x20, 0x0f, - 0x41, 0x06, 0xf2, 0x04, 0x06, 0x53, 0x80, 0x44, 0x27, 0x0f, 0x41, 0xa1, - 0xa8, 0x01, 0x44, 0x46, 0xe4, 0x02, 0x0f, 0x01, 0x06, 0x97, 0x29, 0x65, - 0x45, 0x4b, 0xa2, 0x04, 0x0f, 0x01, 0x42, 0xb0, 0x01, 0x05, 0x0f, 0x81, - 0x52, 0x44, 0xba, 0xe5, 0x0b, 0x0f, 0x01, 0x46, 0x1f, 0xd3, 0x0c, 0x0f, + 0x41, 0x06, 0xf2, 0x04, 0x06, 0x53, 0x95, 0x44, 0x27, 0x0f, 0x41, 0xa1, + 0xa8, 0x01, 0x44, 0x62, 0xe4, 0x02, 0x0f, 0x01, 0x06, 0x97, 0x29, 0x65, + 0x45, 0x5e, 0xa2, 0x04, 0x0f, 0x01, 0x42, 0xb0, 0x01, 0x05, 0x0f, 0x81, + 0x52, 0x44, 0xd6, 0xe5, 0x0b, 0x0f, 0x01, 0x46, 0x3b, 0xd3, 0x0c, 0x0f, 0x01, 0x43, 0xb9, 0x04, 0x0d, 0x0f, 0x01, 0x43, 0x40, 0x20, 0x0e, 0x0f, - 0x01, 0x42, 0x6f, 0x02, 0x14, 0x0f, 0x01, 0x50, 0x29, 0x60, 0x18, 0x0f, - 0x01, 0xb3, 0x18, 0x43, 0xf1, 0xba, 0x1a, 0x0f, 0x01, 0x43, 0x08, 0x83, - 0x07, 0x0f, 0x01, 0x44, 0xf9, 0x4c, 0x0a, 0x0f, 0x01, 0x45, 0xf3, 0x4c, + 0x01, 0x42, 0x6f, 0x02, 0x14, 0x0f, 0x01, 0x50, 0x3e, 0x60, 0x18, 0x0f, + 0x01, 0xb3, 0x18, 0x43, 0x0d, 0xbb, 0x1a, 0x0f, 0x01, 0x43, 0x0f, 0x83, + 0x07, 0x0f, 0x01, 0x44, 0x0e, 0x4d, 0x0a, 0x0f, 0x01, 0x45, 0x08, 0x4d, 0x08, 0x0f, 0x41, 0xa1, 0x06, 0x43, 0x99, 0x14, 0x19, 0x0f, 0x41, 0x43, - 0xd7, 0xdf, 0x15, 0x0f, 0x01, 0x44, 0x96, 0xd9, 0x11, 0x0f, 0x41, 0x42, - 0x53, 0x00, 0x09, 0x0f, 0x41, 0x45, 0x02, 0xa5, 0x01, 0x0f, 0x01, 0x44, - 0x46, 0xe4, 0x03, 0x0f, 0x01, 0x42, 0xb0, 0x01, 0x06, 0x0f, 0x01, 0x43, - 0x40, 0x20, 0x0f, 0x0f, 0x81, 0x1a, 0x45, 0xd5, 0xdf, 0x16, 0x0f, 0x81, - 0x0d, 0x43, 0xf1, 0xba, 0x1b, 0x0f, 0xc1, 0x00, 0x53, 0x59, 0x42, 0x1c, - 0x0f, 0x41, 0x53, 0x59, 0x42, 0x17, 0x0f, 0x41, 0x53, 0x59, 0x42, 0x10, - 0x0f, 0x41, 0xac, 0x06, 0x43, 0x4b, 0x18, 0x12, 0x0f, 0x41, 0x43, 0x9a, - 0x38, 0x00, 0x0f, 0x01, 0x4c, 0xe4, 0x8d, 0x13, 0x0f, 0x41, 0x0b, 0x03, - 0x56, 0xb4, 0x02, 0xb3, 0x01, 0xff, 0x04, 0x9c, 0x07, 0x06, 0x4d, 0x87, + 0xf3, 0xdf, 0x15, 0x0f, 0x01, 0x44, 0xb2, 0xd9, 0x11, 0x0f, 0x41, 0x42, + 0x53, 0x00, 0x09, 0x0f, 0x41, 0x45, 0x15, 0xa5, 0x01, 0x0f, 0x01, 0x44, + 0x62, 0xe4, 0x03, 0x0f, 0x01, 0x42, 0xb0, 0x01, 0x06, 0x0f, 0x01, 0x43, + 0x40, 0x20, 0x0f, 0x0f, 0x81, 0x1a, 0x45, 0xf1, 0xdf, 0x16, 0x0f, 0x81, + 0x0d, 0x43, 0x0d, 0xbb, 0x1b, 0x0f, 0xc1, 0x00, 0x53, 0x6e, 0x42, 0x1c, + 0x0f, 0x41, 0x53, 0x6e, 0x42, 0x17, 0x0f, 0x41, 0x53, 0x6e, 0x42, 0x10, + 0x0f, 0x41, 0xac, 0x06, 0x43, 0x4b, 0x18, 0x12, 0x0f, 0x41, 0x43, 0xaf, + 0x38, 0x00, 0x0f, 0x01, 0x4c, 0xf7, 0x8d, 0x13, 0x0f, 0x41, 0x0b, 0x18, + 0x56, 0xb4, 0x02, 0xb3, 0x01, 0xff, 0x04, 0x9c, 0x07, 0x06, 0x4d, 0x8e, 0x7f, 0xb3, 0xf5, 0x41, 0x07, 0xbf, 0x35, 0x80, 0x02, 0x05, 0xdb, 0x02, 0x06, 0x4c, 0x9f, 0x22, 0xd0, 0x03, 0x41, 0xe1, 0xa0, 0x03, 0x81, 0xdd, 0x01, 0xa2, 0xc9, 0x01, 0x42, 0x37, 0x00, 0xa8, 0x03, 0x01, 0xa4, 0xa6, @@ -5909,7 +5910,7 @@ static const unsigned char uname2c_tree[210697] = { 0xc1, 0x08, 0xb1, 0x03, 0x01, 0xb2, 0x48, 0xb3, 0x36, 0xb4, 0x26, 0xf5, 0xa2, 0x03, 0x01, 0xb6, 0x18, 0xb8, 0x0c, 0x42, 0x20, 0x20, 0xb9, 0x03, 0x01, 0x42, 0x59, 0x00, 0xc0, 0x03, 0x41, 0xe1, 0xa7, 0x03, 0x01, 0x4b, - 0x4d, 0x9a, 0xcb, 0x03, 0x41, 0xe1, 0xba, 0x03, 0x01, 0xe9, 0xbb, 0x03, + 0x60, 0x9a, 0xcb, 0x03, 0x41, 0xe1, 0xba, 0x03, 0x01, 0xe9, 0xbb, 0x03, 0x41, 0xe1, 0xab, 0x03, 0x01, 0x42, 0x22, 0x00, 0xb0, 0x03, 0x01, 0xf5, 0xac, 0x03, 0x41, 0xe1, 0xbf, 0x03, 0x01, 0x42, 0x22, 0x00, 0xc1, 0x03, 0x01, 0x42, 0x45, 0x05, 0xc2, 0x03, 0x41, 0xe1, 0xbc, 0x03, 0x01, 0xf5, @@ -5918,62 +5919,62 @@ static const unsigned char uname2c_tree[210697] = { 0xa3, 0x03, 0x01, 0xf5, 0xa4, 0x03, 0x41, 0xe1, 0xa9, 0x03, 0x01, 0xe9, 0xaa, 0x03, 0x41, 0xe1, 0xa5, 0x03, 0x01, 0xf5, 0xa6, 0x03, 0x41, 0xe1, 0xad, 0x03, 0x81, 0x08, 0xe9, 0xae, 0x03, 0x01, 0xf5, 0xaf, 0x03, 0x41, - 0x47, 0x72, 0xc7, 0xcc, 0x03, 0xc1, 0x00, 0x42, 0x50, 0xe8, 0xcd, 0x03, - 0x41, 0xe1, 0xb2, 0x03, 0x81, 0x06, 0x46, 0x6d, 0xd6, 0xcf, 0x03, 0x41, - 0x42, 0x24, 0x02, 0xce, 0x03, 0x41, 0x49, 0xdd, 0xb6, 0xc8, 0x03, 0xc1, - 0x00, 0x42, 0x50, 0xe8, 0xc9, 0x03, 0x01, 0x42, 0x22, 0x00, 0xca, 0x03, + 0x47, 0x8e, 0xc7, 0xcc, 0x03, 0xc1, 0x00, 0x42, 0x6c, 0xe8, 0xcd, 0x03, + 0x41, 0xe1, 0xb2, 0x03, 0x81, 0x06, 0x46, 0x89, 0xd6, 0xcf, 0x03, 0x41, + 0x42, 0x24, 0x02, 0xce, 0x03, 0x41, 0x49, 0xf9, 0xb6, 0xc8, 0x03, 0xc1, + 0x00, 0x42, 0x6c, 0xe8, 0xc9, 0x03, 0x01, 0x42, 0x22, 0x00, 0xca, 0x03, 0x41, 0x47, 0xe9, 0x0f, 0xd5, 0x03, 0x01, 0x43, 0xcd, 0x09, 0xd1, 0x03, 0x01, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xd3, 0x03, 0x01, 0xb7, 0x01, 0xff, 0x44, 0x98, 0x1b, 0xd4, 0x03, 0x01, 0xef, 0xd2, 0x03, 0x41, 0x42, 0x1a, 0x00, 0x50, 0x03, 0x01, 0x43, 0xf2, 0x31, 0x51, 0x03, 0x01, 0x45, - 0x6c, 0xda, 0x64, 0x03, 0x01, 0xa4, 0xba, 0x01, 0xe5, 0x54, 0x03, 0x81, - 0xb0, 0x01, 0x43, 0xb7, 0x45, 0x52, 0x03, 0x01, 0x42, 0x22, 0x00, 0x6c, - 0x03, 0x01, 0xe9, 0x59, 0x03, 0x81, 0x96, 0x01, 0x44, 0xda, 0xe5, 0x5a, - 0x03, 0x01, 0x43, 0x9e, 0x3e, 0x5b, 0x03, 0x01, 0x45, 0xc3, 0xdd, 0x5c, - 0x03, 0x01, 0x45, 0x36, 0xde, 0x5d, 0x03, 0x01, 0xef, 0x69, 0x03, 0x81, - 0x75, 0x44, 0xea, 0xe6, 0x5f, 0x03, 0x01, 0x43, 0xe4, 0x2b, 0x60, 0x03, + 0x88, 0xda, 0x64, 0x03, 0x01, 0xa4, 0xba, 0x01, 0xe5, 0x54, 0x03, 0x81, + 0xb0, 0x01, 0x43, 0xcc, 0x45, 0x52, 0x03, 0x01, 0x42, 0x22, 0x00, 0x6c, + 0x03, 0x01, 0xe9, 0x59, 0x03, 0x81, 0x96, 0x01, 0x44, 0xf6, 0xe5, 0x5a, + 0x03, 0x01, 0x43, 0xb3, 0x3e, 0x5b, 0x03, 0x01, 0x45, 0xdf, 0xdd, 0x5c, + 0x03, 0x01, 0x45, 0x52, 0xde, 0x5d, 0x03, 0x01, 0xef, 0x69, 0x03, 0x81, + 0x75, 0x44, 0x06, 0xe7, 0x5f, 0x03, 0x01, 0x43, 0xe4, 0x2b, 0x60, 0x03, 0x01, 0xb3, 0x53, 0xb4, 0x45, 0xf5, 0x63, 0x03, 0x01, 0xb6, 0x33, 0xb9, - 0x0f, 0xba, 0x01, 0xff, 0x43, 0xda, 0x16, 0x57, 0x03, 0x01, 0x43, 0x2c, + 0x0f, 0xba, 0x01, 0xff, 0x43, 0xda, 0x16, 0x57, 0x03, 0x01, 0x43, 0x48, 0xd2, 0x55, 0x03, 0x41, 0xe1, 0x74, 0x03, 0x81, 0x19, 0x42, 0x33, 0x00, 0x6f, 0x03, 0x81, 0x0a, 0x42, 0x48, 0x16, 0x67, 0x03, 0x01, 0xf5, 0x73, 0x03, 0x41, 0xe9, 0x70, 0x03, 0x01, 0xf5, 0x68, 0x03, 0x41, 0xf4, 0x71, - 0x03, 0x41, 0x42, 0x33, 0x00, 0x6e, 0x03, 0x01, 0x43, 0x7d, 0xda, 0x5e, - 0x03, 0x41, 0x42, 0x35, 0x06, 0x62, 0x03, 0x01, 0x43, 0xae, 0xc5, 0x6d, - 0x03, 0x41, 0xa8, 0x06, 0x42, 0x6b, 0x25, 0x61, 0x03, 0x41, 0x45, 0x7b, - 0xda, 0x66, 0x03, 0x01, 0x43, 0x7d, 0xda, 0x65, 0x03, 0x41, 0xef, 0x6a, + 0x03, 0x41, 0x42, 0x33, 0x00, 0x6e, 0x03, 0x01, 0x43, 0x99, 0xda, 0x5e, + 0x03, 0x41, 0x42, 0x35, 0x06, 0x62, 0x03, 0x01, 0x43, 0xca, 0xc5, 0x6d, + 0x03, 0x41, 0xa8, 0x06, 0x42, 0x6b, 0x25, 0x61, 0x03, 0x41, 0x45, 0x97, + 0xda, 0x66, 0x03, 0x01, 0x43, 0x99, 0xda, 0x65, 0x03, 0x41, 0xef, 0x6a, 0x03, 0x41, 0xe1, 0x75, 0x03, 0x01, 0xe5, 0x72, 0x03, 0x41, 0xe6, 0x6b, 0x03, 0x41, 0x42, 0x9d, 0x01, 0x53, 0x03, 0x01, 0xba, 0x01, 0xff, 0x43, - 0x2c, 0xd2, 0x56, 0x03, 0x01, 0x43, 0xec, 0x04, 0x58, 0x03, 0x41, 0x07, + 0x48, 0xd2, 0x56, 0x03, 0x01, 0x43, 0xec, 0x04, 0x58, 0x03, 0x41, 0x07, 0xf1, 0x04, 0x1a, 0x07, 0xbf, 0x35, 0x01, 0xff, 0x43, 0xcd, 0x09, 0x9d, 0x0a, 0x01, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x9e, 0x0a, 0x01, 0x45, - 0x38, 0x29, 0x9f, 0x0a, 0x41, 0xa1, 0xb0, 0x01, 0x43, 0x20, 0x85, 0x88, - 0x0a, 0x01, 0x02, 0x68, 0x0f, 0x9d, 0x01, 0x03, 0x45, 0xcb, 0x8c, 0x01, - 0x43, 0x96, 0xaf, 0x90, 0x0a, 0x01, 0xa7, 0x78, 0xa8, 0x6a, 0xab, 0x5c, + 0x38, 0x29, 0x9f, 0x0a, 0x41, 0xa1, 0xb0, 0x01, 0x43, 0x27, 0x85, 0x88, + 0x0a, 0x01, 0x02, 0x68, 0x0f, 0x9d, 0x01, 0x03, 0x61, 0xcb, 0x8c, 0x01, + 0x43, 0xb2, 0xaf, 0x90, 0x0a, 0x01, 0xa7, 0x78, 0xa8, 0x6a, 0xab, 0x5c, 0x43, 0xb0, 0x00, 0x81, 0x0a, 0x01, 0x44, 0xb4, 0x1e, 0x83, 0x0a, 0x01, - 0x44, 0xc5, 0x40, 0x8c, 0x0a, 0x01, 0x43, 0x9d, 0x12, 0x84, 0x0a, 0x01, - 0x43, 0xd4, 0x74, 0x87, 0x0a, 0x01, 0x43, 0xbb, 0x12, 0x8e, 0x0a, 0x01, - 0xb4, 0x1b, 0x43, 0x08, 0x83, 0x85, 0x0a, 0x01, 0x43, 0x4d, 0x00, 0x9a, + 0x44, 0xda, 0x40, 0x8c, 0x0a, 0x01, 0x43, 0x9d, 0x12, 0x84, 0x0a, 0x01, + 0x43, 0xe9, 0x74, 0x87, 0x0a, 0x01, 0x43, 0xbb, 0x12, 0x8e, 0x0a, 0x01, + 0xb4, 0x1b, 0x43, 0x0f, 0x83, 0x85, 0x0a, 0x01, 0x43, 0x4d, 0x00, 0x9a, 0x0a, 0x01, 0x02, 0x59, 0x00, 0x01, 0xff, 0xe8, 0x9c, 0x0a, 0x01, 0x42, 0x9e, 0x01, 0x98, 0x0a, 0x41, 0x42, 0xe6, 0x06, 0x97, 0x0a, 0x01, 0x42, 0x4e, 0x00, 0x89, 0x0a, 0x01, 0xa8, 0x01, 0xff, 0x42, 0x13, 0x00, 0x99, 0x0a, 0x01, 0x42, 0x4e, 0x00, 0x9b, 0x0a, 0x41, 0x42, 0x9e, 0x12, 0x8b, 0x0a, 0x01, 0x43, 0xbe, 0x1e, 0x8d, 0x0a, 0x41, 0x42, 0xe6, 0x06, 0x82, 0x0a, 0x01, 0x42, 0x4e, 0x00, 0x80, 0x0a, 0x41, 0x43, 0x6a, 0x16, 0x94, - 0x0a, 0x01, 0x44, 0x4a, 0x94, 0x96, 0x0a, 0x41, 0xd1, 0x8a, 0x0a, 0x01, + 0x0a, 0x01, 0x44, 0x5d, 0x94, 0x96, 0x0a, 0x41, 0xd1, 0x8a, 0x0a, 0x01, 0xd2, 0x86, 0x0a, 0x01, 0xd3, 0x8f, 0x0a, 0x41, 0xe4, 0x93, 0x0a, 0x01, 0xec, 0x95, 0x0a, 0x41, 0x42, 0x9e, 0x01, 0x92, 0x0a, 0x01, 0x43, 0x68, - 0x00, 0x91, 0x0a, 0x41, 0x07, 0xf1, 0x04, 0x21, 0x08, 0x23, 0x57, 0x01, + 0x00, 0x91, 0x0a, 0x41, 0x07, 0xf1, 0x04, 0x21, 0x08, 0x38, 0x57, 0x01, 0xff, 0x02, 0xde, 0x08, 0x0c, 0x43, 0xcd, 0x09, 0x20, 0x03, 0x01, 0x43, - 0xe0, 0x05, 0x22, 0x03, 0x41, 0x43, 0xcf, 0x47, 0x23, 0x03, 0x01, 0x42, + 0xe0, 0x05, 0x22, 0x03, 0x41, 0x43, 0xe4, 0x47, 0x23, 0x03, 0x01, 0x42, 0x32, 0x00, 0x21, 0x03, 0x41, 0xe1, 0x00, 0x03, 0x01, 0x42, 0xbc, 0x04, 0x01, 0x03, 0x01, 0x43, 0x21, 0x2c, 0x1c, 0x03, 0x01, 0x42, 0x04, 0x00, 0x03, 0x03, 0x01, 0xe5, 0x04, 0x03, 0x81, 0x6e, 0x42, 0xb0, 0x01, 0x07, - 0x03, 0x01, 0xe9, 0x09, 0x03, 0x81, 0x5f, 0xab, 0x4b, 0x4c, 0x20, 0x8b, + 0x03, 0x01, 0xe9, 0x09, 0x03, 0x81, 0x5f, 0xab, 0x4b, 0x4c, 0x27, 0x8b, 0x2e, 0x03, 0x01, 0xef, 0x0f, 0x03, 0x01, 0xb0, 0x35, 0xb3, 0x27, 0xb4, 0x1b, 0xf5, 0x16, 0x03, 0x81, 0x12, 0x42, 0x32, 0x00, 0x05, 0x03, 0x01, 0x42, 0x4d, 0x00, 0x2d, 0x03, 0x01, 0x42, 0x58, 0x07, 0x06, 0x03, 0x41, 0xf5, 0x1e, 0x03, 0x41, 0xe5, 0x15, 0x03, 0x01, 0x42, 0xb0, 0x01, 0x08, - 0x03, 0x41, 0x42, 0xb0, 0x01, 0x11, 0x03, 0x01, 0x4b, 0xe2, 0x98, 0x2f, + 0x03, 0x41, 0x42, 0xb0, 0x01, 0x11, 0x03, 0x01, 0x4b, 0xf5, 0x98, 0x2f, 0x03, 0x41, 0xe5, 0x10, 0x03, 0x01, 0x42, 0xb0, 0x01, 0x18, 0x03, 0x41, 0xe1, 0x0a, 0x03, 0x01, 0xe5, 0x02, 0x03, 0x01, 0x42, 0xb0, 0x01, 0x19, 0x03, 0x01, 0xf5, 0x12, 0x03, 0x41, 0xe9, 0x1d, 0x03, 0x41, 0xe6, 0x1a, @@ -5982,13 +5983,13 @@ static const unsigned char uname2c_tree[210697] = { 0x0d, 0xf3, 0x14, 0x03, 0xc1, 0x00, 0xe8, 0x0e, 0x03, 0x01, 0xf3, 0x1f, 0x03, 0x41, 0xf3, 0x1b, 0x03, 0x41, 0x0f, 0xe9, 0x04, 0xaf, 0x02, 0x07, 0xbf, 0x35, 0xfe, 0x01, 0x0d, 0x7c, 0x07, 0x01, 0xff, 0xe1, 0xc0, 0x0c, - 0x81, 0xdf, 0x01, 0x47, 0xd5, 0xc5, 0xca, 0x0c, 0x01, 0xe5, 0xc9, 0x0c, - 0x81, 0x51, 0xe9, 0xd0, 0x0c, 0x81, 0x48, 0x0b, 0xe5, 0x97, 0x38, 0xef, - 0xdb, 0x0c, 0x81, 0x29, 0x0a, 0xe1, 0xa7, 0x19, 0x48, 0xe5, 0xc0, 0xe3, + 0x81, 0xdf, 0x01, 0x47, 0xf1, 0xc5, 0xca, 0x0c, 0x01, 0xe5, 0xc9, 0x0c, + 0x81, 0x51, 0xe9, 0xd0, 0x0c, 0x81, 0x48, 0x0b, 0xf8, 0x97, 0x38, 0xef, + 0xdb, 0x0c, 0x81, 0x29, 0x0a, 0xf4, 0xa7, 0x19, 0x48, 0x01, 0xc1, 0xe3, 0x0c, 0x01, 0xf5, 0xea, 0x0c, 0xc1, 0x00, 0x42, 0xfe, 0x22, 0xd5, 0x0c, - 0x01, 0xf3, 0xf2, 0x0c, 0x01, 0xf5, 0xeb, 0x0c, 0x41, 0x42, 0xca, 0x4b, + 0x01, 0xf3, 0xf2, 0x0c, 0x01, 0xf5, 0xeb, 0x0c, 0x41, 0x42, 0xdf, 0x4b, 0xde, 0x0c, 0x01, 0x42, 0x30, 0x12, 0xed, 0x0c, 0x41, 0x42, 0x27, 0x01, - 0xdf, 0x0c, 0x01, 0xef, 0xdc, 0x0c, 0x41, 0x42, 0xca, 0x4b, 0xdd, 0x0c, + 0xdf, 0x0c, 0x01, 0xef, 0xdc, 0x0c, 0x41, 0x42, 0xdf, 0x4b, 0xdd, 0x0c, 0x01, 0x42, 0x30, 0x12, 0xec, 0x0c, 0x41, 0xe9, 0xd1, 0x0c, 0x41, 0xe2, 0xc2, 0x0c, 0x01, 0xe3, 0xc4, 0x0c, 0x81, 0x72, 0xe4, 0xc7, 0x0c, 0x01, 0xe5, 0xcb, 0x0c, 0x01, 0xe6, 0xcc, 0x0c, 0x01, 0xe7, 0xcd, 0x0c, 0x81, @@ -5998,22 +5999,22 @@ static const unsigned char uname2c_tree[210697] = { 0xf3, 0xe4, 0x0c, 0x81, 0x16, 0xf4, 0xe6, 0x0c, 0x81, 0x0d, 0xf6, 0xee, 0x0c, 0x01, 0xfa, 0xef, 0x0c, 0xc1, 0x00, 0xf3, 0xf0, 0x0c, 0x41, 0xf9, 0xe8, 0x0c, 0x41, 0xfa, 0xe5, 0x0c, 0x41, 0xe3, 0xc5, 0x0c, 0x01, 0xf4, - 0xe7, 0x0c, 0x81, 0x04, 0xf9, 0xda, 0x0c, 0x41, 0x4c, 0x3c, 0x84, 0xf1, + 0xe7, 0x0c, 0x81, 0x04, 0xf9, 0xda, 0x0c, 0x41, 0x4c, 0x43, 0x84, 0xf1, 0x0c, 0x41, 0xf0, 0xe1, 0x0c, 0x41, 0xf9, 0xd7, 0x0c, 0x41, 0xf9, 0xce, 0x0c, 0x41, 0xe8, 0xe9, 0x0c, 0x01, 0xf3, 0xc6, 0x0c, 0x41, 0xe1, 0xc1, 0x0c, 0x01, 0xeb, 0xd4, 0x0c, 0x01, 0x42, 0xbb, 0x04, 0xc3, 0x0c, 0x01, 0x42, 0x1b, 0x00, 0xc8, 0x0c, 0x41, 0x02, 0xde, 0x08, 0x1c, 0x43, 0xcd, 0x09, 0xfa, 0x0c, 0x81, 0x06, 0x43, 0xe0, 0x05, 0xfc, 0x0c, 0x41, 0x80, - 0x01, 0xff, 0x47, 0xe9, 0x0f, 0xfe, 0x0c, 0x01, 0x48, 0x54, 0x58, 0xff, - 0x0c, 0x41, 0x43, 0xcf, 0x47, 0xfd, 0x0c, 0x01, 0x42, 0x32, 0x00, 0xfb, - 0x0c, 0x41, 0xe1, 0x80, 0x0c, 0x81, 0xdf, 0x01, 0x47, 0xd5, 0xc5, 0x8a, + 0x01, 0xff, 0x47, 0xe9, 0x0f, 0xfe, 0x0c, 0x01, 0x48, 0x69, 0x58, 0xff, + 0x0c, 0x41, 0x43, 0xe4, 0x47, 0xfd, 0x0c, 0x01, 0x42, 0x32, 0x00, 0xfb, + 0x0c, 0x41, 0xe1, 0x80, 0x0c, 0x81, 0xdf, 0x01, 0x47, 0xf1, 0xc5, 0x8a, 0x0c, 0x01, 0xe5, 0x89, 0x0c, 0x81, 0x51, 0xe9, 0x90, 0x0c, 0x81, 0x48, - 0x0b, 0xe5, 0x97, 0x38, 0xef, 0x9b, 0x0c, 0x81, 0x29, 0x0a, 0xe1, 0xa7, - 0x19, 0x48, 0xe5, 0xc0, 0xa3, 0x0c, 0x01, 0xf5, 0xaa, 0x0c, 0xc1, 0x00, + 0x0b, 0xf8, 0x97, 0x38, 0xef, 0x9b, 0x0c, 0x81, 0x29, 0x0a, 0xf4, 0xa7, + 0x19, 0x48, 0x01, 0xc1, 0xa3, 0x0c, 0x01, 0xf5, 0xaa, 0x0c, 0xc1, 0x00, 0x42, 0xfe, 0x22, 0x95, 0x0c, 0x01, 0xf3, 0xb2, 0x0c, 0x01, 0xf5, 0xab, - 0x0c, 0x41, 0x42, 0xca, 0x4b, 0x9e, 0x0c, 0x01, 0x42, 0x30, 0x12, 0xad, + 0x0c, 0x41, 0x42, 0xdf, 0x4b, 0x9e, 0x0c, 0x01, 0x42, 0x30, 0x12, 0xad, 0x0c, 0x41, 0x42, 0x27, 0x01, 0x9f, 0x0c, 0x01, 0xef, 0x9c, 0x0c, 0x41, - 0x42, 0xca, 0x4b, 0x9d, 0x0c, 0x01, 0x42, 0x30, 0x12, 0xac, 0x0c, 0x41, + 0x42, 0xdf, 0x4b, 0x9d, 0x0c, 0x01, 0x42, 0x30, 0x12, 0xac, 0x0c, 0x41, 0xe9, 0x91, 0x0c, 0x41, 0xe2, 0x82, 0x0c, 0x01, 0xe3, 0x84, 0x0c, 0x81, 0x72, 0xe4, 0x87, 0x0c, 0x01, 0xe5, 0x8b, 0x0c, 0x01, 0xe6, 0x8c, 0x0c, 0x01, 0xe7, 0x8d, 0x0c, 0x81, 0x5d, 0xe8, 0x8f, 0x0c, 0x01, 0xea, 0x92, @@ -6023,17 +6024,17 @@ static const unsigned char uname2c_tree[210697] = { 0x0c, 0x81, 0x0d, 0xf6, 0xae, 0x0c, 0x01, 0xfa, 0xaf, 0x0c, 0xc1, 0x00, 0xf3, 0xb0, 0x0c, 0x41, 0xf9, 0xa8, 0x0c, 0x41, 0xfa, 0xa5, 0x0c, 0x41, 0xe3, 0x85, 0x0c, 0x01, 0xf4, 0xa7, 0x0c, 0x81, 0x04, 0xf9, 0x9a, 0x0c, - 0x41, 0x4c, 0x3c, 0x84, 0xb1, 0x0c, 0x41, 0xf0, 0xa1, 0x0c, 0x41, 0xf9, + 0x41, 0x4c, 0x43, 0x84, 0xb1, 0x0c, 0x41, 0xf0, 0xa1, 0x0c, 0x41, 0xf9, 0x97, 0x0c, 0x41, 0xf9, 0x8e, 0x0c, 0x41, 0xe8, 0xa9, 0x0c, 0x01, 0xf3, 0x86, 0x0c, 0x41, 0xe1, 0x81, 0x0c, 0x01, 0xeb, 0x94, 0x0c, 0x01, 0x42, 0xbb, 0x04, 0x83, 0x0c, 0x01, 0x42, 0x1b, 0x00, 0x88, 0x0c, 0x41, 0x49, - 0x65, 0xb0, 0xe2, 0x6f, 0x01, 0x4e, 0xf0, 0x1d, 0xe3, 0x6f, 0x41, 0x44, - 0xea, 0xe3, 0x7d, 0x1c, 0x00, 0x06, 0xf4, 0x05, 0xcd, 0x01, 0x50, 0xf1, - 0x51, 0x79, 0x1c, 0x00, 0x07, 0xf1, 0x04, 0x2f, 0x02, 0xe2, 0x14, 0x1f, - 0xb0, 0x06, 0x45, 0x80, 0xdf, 0x7b, 0x1c, 0x40, 0x47, 0x3a, 0xc7, 0x7c, - 0x1c, 0x00, 0x0b, 0x8d, 0x14, 0x01, 0xff, 0x4d, 0x1c, 0x7b, 0x7f, 0x1c, - 0x00, 0x46, 0x23, 0x7b, 0x7e, 0x1c, 0x40, 0x48, 0xfd, 0xb8, 0x78, 0x1c, - 0x00, 0x51, 0xf0, 0x51, 0x7a, 0x1c, 0x40, 0xa1, 0x6e, 0xa5, 0x58, 0xa9, + 0x81, 0xb0, 0xe2, 0x6f, 0x01, 0x4e, 0xf0, 0x1d, 0xe3, 0x6f, 0x41, 0x44, + 0x06, 0xe4, 0x7d, 0x1c, 0x00, 0x06, 0xf4, 0x05, 0xcd, 0x01, 0x50, 0x06, + 0x52, 0x79, 0x1c, 0x00, 0x07, 0xf1, 0x04, 0x2f, 0x02, 0xe2, 0x14, 0x1f, + 0xb0, 0x06, 0x45, 0x9c, 0xdf, 0x7b, 0x1c, 0x40, 0x47, 0x56, 0xc7, 0x7c, + 0x1c, 0x00, 0x0b, 0x8d, 0x14, 0x01, 0xff, 0x4d, 0x23, 0x7b, 0x7f, 0x1c, + 0x00, 0x46, 0x2a, 0x7b, 0x7e, 0x1c, 0x40, 0x48, 0x19, 0xb9, 0x78, 0x1c, + 0x00, 0x51, 0x05, 0x52, 0x7a, 0x1c, 0x40, 0xa1, 0x6e, 0xa5, 0x58, 0xa9, 0x44, 0xac, 0x29, 0xaf, 0x15, 0xb5, 0x01, 0xff, 0xe3, 0x6a, 0x1c, 0x00, 0xe4, 0x6b, 0x1c, 0x00, 0x42, 0xe6, 0x1c, 0x6c, 0x1c, 0x00, 0xf9, 0x6d, 0x1c, 0x40, 0xe2, 0x75, 0x1c, 0x00, 0xe8, 0x77, 0x1c, 0x00, 0x42, 0xf3, @@ -6051,46 +6052,46 @@ static const unsigned char uname2c_tree[210697] = { 0xf5, 0x1b, 0x50, 0x1c, 0x40, 0x44, 0x25, 0x01, 0x53, 0x1c, 0x00, 0x42, 0x15, 0x02, 0x52, 0x1c, 0x40, 0x44, 0x96, 0x1b, 0x57, 0x1c, 0x00, 0x42, 0x30, 0x27, 0x56, 0x1c, 0x40, 0x43, 0xd7, 0x04, 0x55, 0x1c, 0x00, 0x43, - 0xfb, 0x05, 0x54, 0x1c, 0x40, 0x04, 0x88, 0x7c, 0x06, 0x44, 0x35, 0xd4, - 0xdb, 0x02, 0x40, 0x4c, 0x6f, 0x39, 0x9b, 0x16, 0x00, 0x07, 0xf1, 0x04, - 0x0c, 0x55, 0x66, 0x39, 0x9c, 0x16, 0x00, 0x4a, 0x63, 0xa8, 0x80, 0x16, - 0x40, 0x44, 0xee, 0xe3, 0x90, 0x16, 0x00, 0x45, 0xf9, 0xd9, 0x81, 0x16, - 0x00, 0xa3, 0x8f, 0x01, 0x44, 0x7e, 0xe4, 0x87, 0x16, 0x00, 0x02, 0x89, - 0x00, 0x73, 0x45, 0xa7, 0xdb, 0x83, 0x16, 0x00, 0x44, 0x0a, 0xe5, 0x8c, - 0x16, 0x00, 0xa9, 0x59, 0x44, 0x02, 0xe6, 0x82, 0x16, 0x00, 0x44, 0x32, - 0xe6, 0x8b, 0x16, 0x00, 0xae, 0x3f, 0xaf, 0x33, 0x45, 0xfe, 0xde, 0x9a, - 0x16, 0x00, 0x44, 0x4e, 0xe7, 0x8f, 0x16, 0x00, 0xb3, 0x19, 0x45, 0x66, + 0xfb, 0x05, 0x54, 0x1c, 0x40, 0x04, 0x8f, 0x7c, 0x06, 0x44, 0x51, 0xd4, + 0xdb, 0x02, 0x40, 0x4c, 0x84, 0x39, 0x9b, 0x16, 0x00, 0x07, 0xf1, 0x04, + 0x0c, 0x55, 0x7b, 0x39, 0x9c, 0x16, 0x00, 0x4a, 0x76, 0xa8, 0x80, 0x16, + 0x40, 0x44, 0x0a, 0xe4, 0x90, 0x16, 0x00, 0x45, 0x15, 0xda, 0x81, 0x16, + 0x00, 0xa3, 0x8f, 0x01, 0x44, 0x9a, 0xe4, 0x87, 0x16, 0x00, 0x02, 0x89, + 0x00, 0x73, 0x45, 0xc3, 0xdb, 0x83, 0x16, 0x00, 0x44, 0x26, 0xe5, 0x8c, + 0x16, 0x00, 0xa9, 0x59, 0x44, 0x1e, 0xe6, 0x82, 0x16, 0x00, 0x44, 0x4e, + 0xe6, 0x8b, 0x16, 0x00, 0xae, 0x3f, 0xaf, 0x33, 0x45, 0x1a, 0xdf, 0x9a, + 0x16, 0x00, 0x44, 0x6a, 0xe7, 0x8f, 0x16, 0x00, 0xb3, 0x19, 0x45, 0x82, 0xe0, 0x88, 0x16, 0x00, 0xb5, 0x01, 0xff, 0x43, 0xcc, 0x0d, 0x86, 0x16, - 0x00, 0x47, 0xbf, 0xc7, 0x97, 0x16, 0x00, 0xf2, 0x92, 0x16, 0x40, 0x43, - 0xaf, 0x15, 0x84, 0x16, 0x00, 0x45, 0x93, 0xe0, 0x8e, 0x16, 0x40, 0x42, - 0xe6, 0x1c, 0x91, 0x16, 0x00, 0xf2, 0x96, 0x16, 0x40, 0x46, 0x87, 0xd1, + 0x00, 0x47, 0xdb, 0xc7, 0x97, 0x16, 0x00, 0xf2, 0x92, 0x16, 0x40, 0x43, + 0xaf, 0x15, 0x84, 0x16, 0x00, 0x45, 0xaf, 0xe0, 0x8e, 0x16, 0x40, 0x42, + 0xe6, 0x1c, 0x91, 0x16, 0x00, 0xf2, 0x96, 0x16, 0x40, 0x46, 0xa3, 0xd1, 0x8d, 0x16, 0x00, 0x43, 0xb5, 0x00, 0x85, 0x16, 0x40, 0x43, 0xde, 0x08, - 0x98, 0x16, 0x00, 0x46, 0x27, 0xd4, 0x94, 0x16, 0x40, 0x45, 0x03, 0xda, - 0x95, 0x16, 0x00, 0x45, 0x28, 0xd4, 0x93, 0x16, 0x00, 0x49, 0xae, 0xb2, - 0x99, 0x16, 0x40, 0x44, 0xae, 0xe4, 0x8a, 0x16, 0x00, 0x43, 0x7e, 0x1e, - 0x89, 0x16, 0x40, 0x49, 0x64, 0xae, 0x75, 0xf7, 0x01, 0x02, 0x18, 0x00, - 0x0f, 0xb4, 0x01, 0xff, 0x4b, 0xfa, 0x90, 0xd1, 0xf6, 0x01, 0x44, 0xce, - 0xe6, 0x19, 0xf4, 0x41, 0x4f, 0x5c, 0x64, 0x47, 0x24, 0x00, 0xa2, 0x2e, - 0xa3, 0x20, 0xa4, 0x12, 0x44, 0x25, 0x4c, 0x42, 0x24, 0x00, 0x44, 0x04, - 0x0d, 0x40, 0x24, 0x00, 0x4d, 0x31, 0x7d, 0x43, 0x24, 0x40, 0x43, 0x50, - 0x03, 0x48, 0x24, 0x00, 0x4f, 0xbf, 0x6a, 0x4a, 0x24, 0x40, 0x44, 0x45, - 0x68, 0x41, 0x24, 0x00, 0x56, 0xcc, 0x33, 0x49, 0x24, 0x40, 0x4a, 0x51, - 0xa1, 0x44, 0x24, 0x00, 0x46, 0x6f, 0xd4, 0x45, 0x24, 0x00, 0x59, 0xf6, - 0x22, 0x46, 0x24, 0x40, 0x5a, 0x18, 0x1e, 0xfc, 0xff, 0x00, 0x06, 0x6c, - 0x3e, 0x06, 0x51, 0xea, 0x57, 0xff, 0x23, 0x40, 0x0e, 0x08, 0x6f, 0x06, - 0x46, 0x59, 0x5d, 0x5d, 0x2e, 0x40, 0x44, 0xa5, 0x01, 0xa7, 0x29, 0x00, - 0x42, 0x50, 0x02, 0xa6, 0x29, 0x40, 0x05, 0x94, 0x69, 0xa6, 0x24, 0xa1, - 0xd3, 0x1c, 0xa5, 0x88, 0x0d, 0xa9, 0xf0, 0x0c, 0x03, 0x2d, 0xcd, 0xd3, + 0x98, 0x16, 0x00, 0x46, 0x43, 0xd4, 0x94, 0x16, 0x40, 0x45, 0x1f, 0xda, + 0x95, 0x16, 0x00, 0x45, 0x44, 0xd4, 0x93, 0x16, 0x00, 0x49, 0xca, 0xb2, + 0x99, 0x16, 0x40, 0x44, 0xca, 0xe4, 0x8a, 0x16, 0x00, 0x43, 0x7e, 0x1e, + 0x89, 0x16, 0x40, 0x49, 0x80, 0xae, 0x75, 0xf7, 0x01, 0x02, 0x18, 0x00, + 0x0f, 0xb4, 0x01, 0xff, 0x4b, 0x0d, 0x91, 0xd1, 0xf6, 0x01, 0x44, 0xea, + 0xe6, 0x19, 0xf4, 0x41, 0x4f, 0x71, 0x64, 0x47, 0x24, 0x00, 0xa2, 0x2e, + 0xa3, 0x20, 0xa4, 0x12, 0x44, 0x3a, 0x4c, 0x42, 0x24, 0x00, 0x44, 0x04, + 0x0d, 0x40, 0x24, 0x00, 0x4d, 0x38, 0x7d, 0x43, 0x24, 0x40, 0x43, 0x50, + 0x03, 0x48, 0x24, 0x00, 0x4f, 0xd4, 0x6a, 0x4a, 0x24, 0x40, 0x44, 0x5a, + 0x68, 0x41, 0x24, 0x00, 0x56, 0xcc, 0x33, 0x49, 0x24, 0x40, 0x4a, 0x64, + 0xa1, 0x44, 0x24, 0x00, 0x46, 0x8b, 0xd4, 0x45, 0x24, 0x00, 0x59, 0xf6, + 0x22, 0x46, 0x24, 0x40, 0x5a, 0x18, 0x1e, 0xfc, 0xff, 0x00, 0x06, 0x81, + 0x3e, 0x06, 0x51, 0xff, 0x57, 0xff, 0x23, 0x40, 0x0e, 0x1d, 0x6f, 0x06, + 0x46, 0x6e, 0x5d, 0x5d, 0x2e, 0x40, 0x44, 0xa5, 0x01, 0xa7, 0x29, 0x00, + 0x42, 0x50, 0x02, 0xa6, 0x29, 0x40, 0x05, 0xa9, 0x69, 0xa6, 0x24, 0xa1, + 0xd3, 0x1c, 0xa5, 0x88, 0x0d, 0xa9, 0xf0, 0x0c, 0x03, 0x49, 0xcd, 0xd3, 0x09, 0xaf, 0xba, 0x04, 0xb5, 0xb6, 0x03, 0x16, 0x3a, 0x34, 0x01, 0xff, - 0x4a, 0x25, 0xa0, 0x4f, 0xe1, 0x01, 0x06, 0xf4, 0x05, 0xe4, 0x02, 0xac, + 0x4a, 0x38, 0xa0, 0x4f, 0xe1, 0x01, 0x06, 0xf4, 0x05, 0xe4, 0x02, 0xac, 0x55, 0xb3, 0x21, 0x05, 0xec, 0x2d, 0x01, 0xff, 0xe2, 0x30, 0xe1, 0x01, 0xe4, 0x36, 0xe1, 0x01, 0xe7, 0x35, 0xe1, 0x01, 0xea, 0x32, 0xe1, 0x01, 0xed, 0x31, 0xe1, 0x01, 0xf3, 0x34, 0xe1, 0x01, 0xf6, 0x33, 0xe1, 0x41, - 0x04, 0xdc, 0x02, 0x06, 0x52, 0x11, 0x51, 0x3d, 0xe1, 0x41, 0x04, 0x2a, - 0x19, 0x06, 0x45, 0x79, 0xe1, 0x3c, 0xe1, 0x41, 0x46, 0x77, 0xcf, 0x3a, - 0xe1, 0x01, 0x4c, 0xd4, 0x88, 0x3b, 0xe1, 0x01, 0x48, 0x01, 0x7e, 0x39, - 0xe1, 0x01, 0x46, 0xeb, 0x1a, 0x37, 0xe1, 0x01, 0x45, 0x5c, 0xe0, 0x38, - 0xe1, 0x41, 0x06, 0xf2, 0x04, 0x06, 0x4c, 0x50, 0x8b, 0x4e, 0xe1, 0x41, + 0x04, 0xdc, 0x02, 0x06, 0x52, 0x26, 0x51, 0x3d, 0xe1, 0x41, 0x04, 0x2a, + 0x19, 0x06, 0x45, 0x95, 0xe1, 0x3c, 0xe1, 0x41, 0x46, 0x93, 0xcf, 0x3a, + 0xe1, 0x01, 0x4c, 0xdb, 0x88, 0x3b, 0xe1, 0x01, 0x48, 0x08, 0x7e, 0x39, + 0xe1, 0x01, 0x46, 0xeb, 0x1a, 0x37, 0xe1, 0x01, 0x45, 0x78, 0xe0, 0x38, + 0xe1, 0x41, 0x06, 0xf2, 0x04, 0x06, 0x4c, 0x57, 0x8b, 0x4e, 0xe1, 0x41, 0xe1, 0x24, 0xe1, 0x81, 0xf9, 0x01, 0x42, 0x37, 0x00, 0x08, 0xe1, 0x01, 0xa4, 0xe6, 0x01, 0xe5, 0x2a, 0xe1, 0x81, 0xdc, 0x01, 0x42, 0xed, 0x06, 0x15, 0xe1, 0x01, 0x42, 0x24, 0x02, 0x22, 0xe1, 0x01, 0x42, 0x22, 0x00, @@ -6118,81 +6119,81 @@ static const unsigned char uname2c_tree[210697] = { 0x41, 0x44, 0x25, 0x01, 0x43, 0xe1, 0x01, 0x42, 0x15, 0x02, 0x42, 0xe1, 0x41, 0x44, 0x96, 0x1b, 0x47, 0xe1, 0x01, 0x42, 0x30, 0x27, 0x46, 0xe1, 0x41, 0x43, 0xd7, 0x04, 0x45, 0xe1, 0x01, 0x43, 0xfb, 0x05, 0x44, 0xe1, - 0x41, 0x42, 0x3f, 0x06, 0x00, 0x00, 0x00, 0xad, 0x16, 0x04, 0xe2, 0x49, - 0x06, 0x4a, 0xc7, 0xa8, 0x29, 0xf5, 0x41, 0x4a, 0x11, 0xa0, 0x04, 0xd8, + 0x41, 0x42, 0x3f, 0x06, 0x00, 0x00, 0x00, 0xad, 0x16, 0x04, 0xf7, 0x49, + 0x06, 0x4a, 0xda, 0xa8, 0x29, 0xf5, 0x41, 0x4a, 0x24, 0xa0, 0x04, 0xd8, 0x00, 0x4e, 0xf0, 0x1d, 0xe1, 0x6f, 0x41, 0x04, 0xbc, 0x04, 0x06, 0x48, - 0x34, 0xb8, 0x16, 0x21, 0x40, 0xa5, 0x4b, 0xa6, 0x3d, 0x52, 0x0b, 0x4e, - 0x9a, 0x24, 0x00, 0xb3, 0x20, 0xb4, 0x01, 0xff, 0x4c, 0xf5, 0x4b, 0x91, - 0x24, 0x00, 0x51, 0xed, 0x54, 0x94, 0x24, 0x00, 0x02, 0x15, 0x01, 0x01, - 0xff, 0x4d, 0x28, 0x7e, 0x93, 0x24, 0x00, 0x4d, 0x2c, 0x7f, 0x9b, 0x24, - 0x40, 0x52, 0xef, 0x4b, 0x98, 0x24, 0x00, 0xa9, 0x01, 0xff, 0x42, 0xdd, - 0x02, 0x23, 0x00, 0x00, 0x4f, 0x16, 0x6e, 0x97, 0x24, 0x40, 0x50, 0x79, - 0x5d, 0x96, 0x24, 0x00, 0x51, 0x0d, 0x57, 0x95, 0x24, 0x40, 0x51, 0x53, - 0x55, 0x99, 0x24, 0x00, 0x4f, 0xdf, 0x68, 0x92, 0x24, 0x40, 0x80, 0xd8, - 0x04, 0x4c, 0x46, 0x47, 0xa0, 0x00, 0x00, 0x02, 0x7d, 0x02, 0xc1, 0x04, + 0x50, 0xb8, 0x16, 0x21, 0x40, 0xa5, 0x4b, 0xa6, 0x3d, 0x52, 0x20, 0x4e, + 0x9a, 0x24, 0x00, 0xb3, 0x20, 0xb4, 0x01, 0xff, 0x4c, 0x0a, 0x4c, 0x91, + 0x24, 0x00, 0x51, 0x02, 0x55, 0x94, 0x24, 0x00, 0x02, 0x15, 0x01, 0x01, + 0xff, 0x4d, 0x2f, 0x7e, 0x93, 0x24, 0x00, 0x4d, 0x33, 0x7f, 0x9b, 0x24, + 0x40, 0x52, 0x04, 0x4c, 0x98, 0x24, 0x00, 0xa9, 0x01, 0xff, 0x42, 0xdd, + 0x02, 0x23, 0x00, 0x00, 0x4f, 0x2b, 0x6e, 0x97, 0x24, 0x40, 0x50, 0x8e, + 0x5d, 0x96, 0x24, 0x00, 0x51, 0x22, 0x57, 0x95, 0x24, 0x40, 0x51, 0x68, + 0x55, 0x99, 0x24, 0x00, 0x4f, 0xf4, 0x68, 0x92, 0x24, 0x40, 0x80, 0xd8, + 0x04, 0x4c, 0x5b, 0x47, 0xa0, 0x00, 0x00, 0x02, 0x7d, 0x02, 0xc1, 0x04, 0xae, 0xaa, 0x04, 0xf2, 0xbd, 0x22, 0x80, 0xd0, 0x01, 0x42, 0xc7, 0x02, - 0x43, 0xf4, 0x01, 0xb4, 0x01, 0xff, 0x80, 0x3e, 0x05, 0x2f, 0x8b, 0x20, - 0xe5, 0xc8, 0xf5, 0xc1, 0x00, 0x03, 0x46, 0x0d, 0x0d, 0x44, 0x4a, 0xe4, + 0x43, 0xf4, 0x01, 0xb4, 0x01, 0xff, 0x80, 0x3e, 0x05, 0x36, 0x8b, 0x20, + 0xe5, 0xc8, 0xf5, 0xc1, 0x00, 0x03, 0x46, 0x0d, 0x0d, 0x44, 0x66, 0xe4, 0xd3, 0xf4, 0xc1, 0x00, 0x56, 0x8e, 0x2e, 0xd4, 0xf4, 0x41, 0xe4, 0xca, 0xf5, 0x01, 0x42, 0x5b, 0x07, 0xc9, 0xf5, 0x41, 0xac, 0x0c, 0x60, 0x6c, 0x0e, 0x44, 0xf5, 0x01, 0x6b, 0x98, 0x02, 0xb1, 0x27, 0x40, 0x5e, 0x53, 0x11, 0x43, 0xf5, 0x01, 0x6a, 0x17, 0x03, 0xaf, 0x27, 0x40, 0xa1, 0x63, - 0x4a, 0x1b, 0xa0, 0x7b, 0x23, 0x00, 0x03, 0x7b, 0x00, 0x4d, 0x4c, 0x87, - 0x00, 0x6f, 0x22, 0x00, 0x4c, 0x50, 0x88, 0x62, 0x22, 0x00, 0x49, 0xec, - 0x00, 0x6e, 0x22, 0x00, 0x52, 0x41, 0x4e, 0xea, 0x22, 0x80, 0x2e, 0x4b, - 0x6f, 0x64, 0x26, 0x22, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x9a, + 0x4a, 0x2e, 0xa0, 0x7b, 0x23, 0x00, 0x03, 0x7b, 0x00, 0x4d, 0x4c, 0x87, + 0x00, 0x6f, 0x22, 0x00, 0x4c, 0x57, 0x88, 0x62, 0x22, 0x00, 0x49, 0xec, + 0x00, 0x6e, 0x22, 0x00, 0x52, 0x56, 0x4e, 0xea, 0x22, 0x80, 0x2e, 0x4b, + 0x84, 0x64, 0x26, 0x22, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x9a, 0x20, 0x41, 0x22, 0x00, 0x43, 0x45, 0x37, 0xad, 0x22, 0x40, 0x43, 0xdc, - 0x02, 0xac, 0x00, 0x00, 0x06, 0x20, 0x22, 0x01, 0xff, 0x54, 0x3c, 0x3e, + 0x02, 0xac, 0x00, 0x00, 0x06, 0x20, 0x22, 0x01, 0xff, 0x54, 0x51, 0x3e, 0xe2, 0x22, 0x00, 0x57, 0x25, 0x2c, 0xe3, 0x22, 0x40, 0x4c, 0xf3, 0x25, 0xec, 0x22, 0x40, 0x45, 0x75, 0x0b, 0x60, 0x22, 0x00, 0x4a, 0x96, 0x35, - 0x6d, 0x22, 0x40, 0x03, 0x73, 0x05, 0x12, 0x4e, 0x3f, 0x64, 0x49, 0x22, - 0x00, 0x4c, 0xb4, 0x8a, 0x09, 0x22, 0x00, 0x56, 0x48, 0x33, 0x44, 0x22, - 0x40, 0x47, 0x0c, 0x3c, 0x84, 0x22, 0x00, 0x49, 0x14, 0x32, 0x85, 0x22, - 0x40, 0x4d, 0xe8, 0x7a, 0xbb, 0x20, 0x00, 0x4f, 0x44, 0x4e, 0xb2, 0x22, + 0x6d, 0x22, 0x40, 0x03, 0x73, 0x05, 0x12, 0x4e, 0x54, 0x64, 0x49, 0x22, + 0x00, 0x4c, 0xbb, 0x8a, 0x09, 0x22, 0x00, 0x56, 0x48, 0x33, 0x44, 0x22, + 0x40, 0x47, 0x21, 0x3c, 0x84, 0x22, 0x00, 0x49, 0x14, 0x32, 0x85, 0x22, + 0x40, 0x4d, 0xef, 0x7a, 0xbb, 0x20, 0x00, 0x4f, 0x59, 0x4e, 0xb2, 0x22, 0x80, 0xc0, 0x02, 0x02, 0x53, 0x00, 0x01, 0xff, 0x80, 0x06, 0x56, 0x1a, 0x30, 0xea, 0xf6, 0x41, 0x05, 0x11, 0x21, 0xc5, 0x01, 0x06, 0xee, 0x05, - 0x74, 0x05, 0x8b, 0x18, 0x01, 0xff, 0xa1, 0x3b, 0x4b, 0x9f, 0x91, 0x09, - 0x2b, 0x00, 0x4c, 0xa0, 0x86, 0xd6, 0x21, 0x00, 0x09, 0x9c, 0x01, 0x19, - 0x50, 0x89, 0x60, 0x54, 0xf8, 0x01, 0x55, 0x01, 0x02, 0x66, 0x2b, 0x80, + 0x74, 0x05, 0x8b, 0x18, 0x01, 0xff, 0xa1, 0x3b, 0x4b, 0xb2, 0x91, 0x09, + 0x2b, 0x00, 0x4c, 0xa7, 0x86, 0xd6, 0x21, 0x00, 0x09, 0x9c, 0x01, 0x19, + 0x50, 0x9e, 0x60, 0x54, 0xf8, 0x01, 0x55, 0x01, 0x02, 0x66, 0x2b, 0x80, 0x06, 0x4b, 0xa1, 0x0e, 0x01, 0x2b, 0x40, 0x47, 0x0c, 0x13, 0x76, 0x2b, - 0x40, 0x43, 0x5f, 0xc6, 0x60, 0xf6, 0x01, 0x44, 0xa3, 0x4b, 0x50, 0xf6, - 0x01, 0x49, 0x64, 0xb7, 0x58, 0xf6, 0x41, 0x53, 0xa9, 0x3b, 0x21, 0x29, + 0x40, 0x43, 0x7b, 0xc6, 0x60, 0xf6, 0x01, 0x44, 0xb8, 0x4b, 0x50, 0xf6, + 0x01, 0x49, 0x80, 0xb7, 0x58, 0xf6, 0x41, 0x53, 0xbe, 0x3b, 0x21, 0x29, 0x00, 0x44, 0xcf, 0x00, 0x96, 0x21, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x54, - 0x80, 0x3b, 0x27, 0x29, 0x00, 0x59, 0x02, 0x21, 0x32, 0x29, 0x00, 0x03, + 0x95, 0x3b, 0x27, 0x29, 0x00, 0x59, 0x02, 0x21, 0x32, 0x29, 0x00, 0x03, 0x7a, 0x02, 0x06, 0x49, 0x0c, 0x22, 0x23, 0x29, 0x40, 0x46, 0x2a, 0x17, - 0xf1, 0x21, 0x00, 0x48, 0xfd, 0xbd, 0xb8, 0x21, 0x40, 0x09, 0x76, 0x54, - 0x1c, 0x50, 0x69, 0x5f, 0x37, 0xa8, 0x00, 0x03, 0x7c, 0x00, 0x06, 0x4a, - 0xeb, 0xa7, 0x38, 0xa8, 0x40, 0x4a, 0xc5, 0xa5, 0x39, 0xa8, 0x00, 0x49, - 0x63, 0xb5, 0x36, 0xa8, 0x40, 0x04, 0xcd, 0x09, 0x11, 0x06, 0x24, 0x01, - 0x01, 0xff, 0x48, 0x2a, 0x01, 0x32, 0xa8, 0x00, 0x4a, 0x45, 0xa8, 0x35, + 0xf1, 0x21, 0x00, 0x48, 0x19, 0xbe, 0xb8, 0x21, 0x40, 0x09, 0x8b, 0x54, + 0x1c, 0x50, 0x7e, 0x5f, 0x37, 0xa8, 0x00, 0x03, 0x7c, 0x00, 0x06, 0x4a, + 0xfe, 0xa7, 0x38, 0xa8, 0x40, 0x4a, 0xd8, 0xa5, 0x39, 0xa8, 0x00, 0x49, + 0x7f, 0xb5, 0x36, 0xa8, 0x40, 0x04, 0xcd, 0x09, 0x11, 0x06, 0x24, 0x01, + 0x01, 0xff, 0x48, 0x2a, 0x01, 0x32, 0xa8, 0x00, 0x4a, 0x58, 0xa8, 0x35, 0xa8, 0x40, 0x46, 0xd1, 0x09, 0x34, 0xa8, 0x00, 0x44, 0x22, 0x00, 0x31, - 0xa8, 0x00, 0x47, 0x2a, 0x01, 0x30, 0xa8, 0x00, 0x49, 0x63, 0x6c, 0x33, - 0xa8, 0x40, 0xa1, 0x3b, 0x4b, 0x9f, 0x91, 0x08, 0x2b, 0x00, 0x4c, 0xa0, - 0x86, 0xd7, 0x21, 0x00, 0x09, 0x9c, 0x01, 0x19, 0x50, 0x89, 0x60, 0x55, + 0xa8, 0x00, 0x47, 0x2a, 0x01, 0x30, 0xa8, 0x00, 0x49, 0x78, 0x6c, 0x33, + 0xa8, 0x40, 0xa1, 0x3b, 0x4b, 0xb2, 0x91, 0x08, 0x2b, 0x00, 0x4c, 0xa7, + 0x86, 0xd7, 0x21, 0x00, 0x09, 0x9c, 0x01, 0x19, 0x50, 0x9e, 0x60, 0x55, 0xf8, 0x01, 0x55, 0x01, 0x02, 0x67, 0x2b, 0x80, 0x06, 0x4b, 0xa1, 0x0e, - 0x00, 0x2b, 0x40, 0x47, 0x0c, 0x13, 0x77, 0x2b, 0x40, 0x43, 0x5f, 0xc6, - 0x62, 0xf6, 0x01, 0x44, 0xa3, 0x4b, 0x52, 0xf6, 0x01, 0x49, 0x64, 0xb7, - 0x5a, 0xf6, 0x41, 0x53, 0xbd, 0x3b, 0x22, 0x29, 0x00, 0x44, 0xcf, 0x00, - 0x97, 0x21, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x54, 0xa8, 0x3b, 0x28, 0x29, + 0x00, 0x2b, 0x40, 0x47, 0x0c, 0x13, 0x77, 0x2b, 0x40, 0x43, 0x7b, 0xc6, + 0x62, 0xf6, 0x01, 0x44, 0xb8, 0x4b, 0x52, 0xf6, 0x01, 0x49, 0x80, 0xb7, + 0x5a, 0xf6, 0x41, 0x53, 0xd2, 0x3b, 0x22, 0x29, 0x00, 0x44, 0xcf, 0x00, + 0x97, 0x21, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x54, 0xbd, 0x3b, 0x28, 0x29, 0x00, 0x09, 0x0d, 0x0f, 0x06, 0x49, 0x0c, 0x22, 0x24, 0x29, 0x40, 0x50, - 0x98, 0x3b, 0x31, 0x29, 0x00, 0x50, 0xac, 0x3b, 0x2e, 0x29, 0x40, 0x4c, - 0xf3, 0x25, 0xb4, 0x22, 0x40, 0x8d, 0x06, 0x47, 0x09, 0xc7, 0xdd, 0x2a, - 0x40, 0x4f, 0xf2, 0x64, 0x11, 0x20, 0x00, 0x54, 0xf4, 0x3f, 0xb1, 0xf6, - 0x41, 0x50, 0xe9, 0x5e, 0x6f, 0x20, 0x00, 0x48, 0x05, 0xc1, 0x8e, 0x01, - 0x41, 0xa2, 0x2d, 0x45, 0x3c, 0x55, 0xd4, 0x26, 0x80, 0x20, 0x4d, 0xd1, + 0xad, 0x3b, 0x31, 0x29, 0x00, 0x50, 0xc1, 0x3b, 0x2e, 0x29, 0x40, 0x4c, + 0xf3, 0x25, 0xb4, 0x22, 0x40, 0x8d, 0x06, 0x47, 0x25, 0xc7, 0xdd, 0x2a, + 0x40, 0x4f, 0x07, 0x65, 0x11, 0x20, 0x00, 0x54, 0x09, 0x40, 0xb1, 0xf6, + 0x41, 0x50, 0xfe, 0x5e, 0x6f, 0x20, 0x00, 0x48, 0x21, 0xc1, 0x8e, 0x01, + 0x41, 0xa2, 0x2d, 0x45, 0x51, 0x55, 0xd4, 0x26, 0x80, 0x20, 0x4d, 0xd8, 0x7e, 0xf5, 0xf4, 0x01, 0x59, 0xab, 0x22, 0x1e, 0xf5, 0x01, 0xb0, 0x06, - 0x4e, 0x98, 0x75, 0xad, 0xf6, 0x41, 0x4a, 0x29, 0xa1, 0xb7, 0xf6, 0x01, - 0x45, 0xc9, 0xdc, 0x72, 0xf5, 0x41, 0x45, 0xda, 0x02, 0xab, 0xf6, 0x41, - 0x47, 0xa3, 0xc7, 0xb3, 0xf6, 0x01, 0x49, 0x00, 0xb5, 0x83, 0x00, 0x40, + 0x4e, 0xad, 0x75, 0xad, 0xf6, 0x41, 0x4a, 0x3c, 0xa1, 0xb7, 0xf6, 0x01, + 0x45, 0xe5, 0xdc, 0x72, 0xf5, 0x41, 0x45, 0xda, 0x02, 0xab, 0xf6, 0x41, + 0x47, 0xbf, 0xc7, 0xb3, 0xf6, 0x01, 0x49, 0x1c, 0xb5, 0x83, 0x00, 0x40, 0x03, 0x18, 0x04, 0xca, 0x02, 0xa4, 0xf5, 0x01, 0x50, 0xad, 0x00, 0xf9, - 0x07, 0x00, 0x54, 0x14, 0x3e, 0xf4, 0x07, 0x00, 0xac, 0x16, 0x07, 0x7e, - 0x14, 0x06, 0x4a, 0xdb, 0xa8, 0xff, 0x07, 0x40, 0x4a, 0x23, 0xa2, 0xf7, - 0x07, 0x00, 0x49, 0xe9, 0xb3, 0xf6, 0x07, 0x40, 0x49, 0xc6, 0xac, 0xfa, - 0x07, 0x00, 0x06, 0xf2, 0x04, 0x06, 0x52, 0xbf, 0x4e, 0xf5, 0x07, 0x40, + 0x07, 0x00, 0x54, 0x29, 0x3e, 0xf4, 0x07, 0x00, 0xac, 0x16, 0x07, 0x7e, + 0x14, 0x06, 0x4a, 0xee, 0xa8, 0xff, 0x07, 0x40, 0x4a, 0x36, 0xa2, 0xf7, + 0x07, 0x00, 0x49, 0x05, 0xb4, 0xf6, 0x07, 0x40, 0x49, 0xd9, 0xac, 0xfa, + 0x07, 0x00, 0x06, 0xf2, 0x04, 0x06, 0x52, 0xd4, 0x4e, 0xf5, 0x07, 0x40, 0xe1, 0xca, 0x07, 0x00, 0x42, 0x16, 0x00, 0xd3, 0x07, 0x00, 0x43, 0x29, 0x1e, 0xd7, 0x07, 0x00, 0x42, 0x68, 0x0f, 0xd8, 0x07, 0x80, 0xa3, 0x01, 0xe5, 0xcd, 0x07, 0x80, 0x99, 0x01, 0x42, 0xed, 0x06, 0xdd, 0x07, 0x00, - 0x43, 0x23, 0xa2, 0xdc, 0x07, 0x00, 0x42, 0x22, 0x00, 0xe4, 0x07, 0x00, + 0x43, 0x36, 0xa2, 0xdc, 0x07, 0x00, 0x42, 0x22, 0x00, 0xe4, 0x07, 0x00, 0xe9, 0xcc, 0x07, 0x00, 0xaa, 0x66, 0x42, 0x1b, 0x02, 0xde, 0x07, 0x00, 0x42, 0x74, 0x00, 0xdf, 0x07, 0x00, 0x42, 0x6c, 0x00, 0xe1, 0x07, 0x00, 0xee, 0xd2, 0x07, 0x80, 0x37, 0xef, 0xd0, 0x07, 0x80, 0x2e, 0x42, 0xc1, @@ -6201,56 +6202,56 @@ static const unsigned char uname2c_tree[210697] = { 0x01, 0xe5, 0x07, 0x00, 0x42, 0x20, 0x20, 0xe6, 0x07, 0x40, 0xe1, 0xd9, 0x07, 0x00, 0x42, 0x71, 0x00, 0xda, 0x07, 0x40, 0xef, 0xcf, 0x07, 0x40, 0xe1, 0xe3, 0x07, 0x80, 0x0d, 0x42, 0x20, 0x20, 0xe2, 0x07, 0xc0, 0x00, - 0x47, 0x90, 0xc3, 0xe7, 0x07, 0x40, 0x47, 0x90, 0xc3, 0xe0, 0x07, 0x40, - 0xe1, 0xd6, 0x07, 0x00, 0x04, 0xba, 0xe6, 0x01, 0xff, 0x43, 0x29, 0x1e, + 0x47, 0xac, 0xc3, 0xe7, 0x07, 0x40, 0x47, 0xac, 0xc3, 0xe0, 0x07, 0x40, + 0xe1, 0xd6, 0x07, 0x00, 0x04, 0xd6, 0xe6, 0x01, 0xff, 0x43, 0x29, 0x1e, 0xe9, 0x07, 0x00, 0x42, 0x77, 0x24, 0xe8, 0x07, 0x00, 0x42, 0x71, 0x00, - 0xea, 0x07, 0x40, 0xe5, 0xcb, 0x07, 0x40, 0x48, 0xa5, 0xbc, 0xd1, 0x07, - 0x40, 0x49, 0x17, 0xad, 0xfd, 0x07, 0x00, 0x05, 0xf5, 0x05, 0x06, 0x4a, - 0x47, 0xa6, 0xfe, 0x07, 0x40, 0x45, 0xd1, 0x09, 0xc8, 0x07, 0x00, 0xa6, + 0xea, 0x07, 0x40, 0xe5, 0xcb, 0x07, 0x40, 0x48, 0xc1, 0xbc, 0xd1, 0x07, + 0x40, 0x49, 0x2a, 0xad, 0xfd, 0x07, 0x00, 0x05, 0xf5, 0x05, 0x06, 0x4a, + 0x5a, 0xa6, 0xfe, 0x07, 0x40, 0x45, 0xd1, 0x09, 0xc8, 0x07, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0xc9, 0x07, 0x00, 0x43, 0xcd, 0x09, 0xc1, 0x07, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xc0, 0x07, 0x40, 0x44, 0x25, 0x01, 0xc3, 0x07, 0x00, 0x42, 0x15, 0x02, 0xc2, 0x07, 0x40, 0x44, 0x96, 0x1b, 0xc7, 0x07, 0x00, 0x42, 0x30, 0x27, 0xc6, 0x07, 0x40, 0x43, 0xd7, 0x04, 0xc5, 0x07, 0x00, 0x43, 0xfb, 0x05, 0xc4, 0x07, 0x40, 0x07, - 0x54, 0x14, 0x06, 0x42, 0x6c, 0x00, 0xf8, 0x07, 0x40, 0x50, 0xe9, 0x5b, - 0xf3, 0x07, 0x00, 0x05, 0x4f, 0x30, 0x1d, 0x51, 0x85, 0x56, 0xf2, 0x07, - 0x00, 0x06, 0x1c, 0x33, 0x01, 0xff, 0x49, 0x14, 0x3e, 0xeb, 0x07, 0x00, - 0x48, 0x13, 0xac, 0xec, 0x07, 0x00, 0x4b, 0x69, 0x60, 0xed, 0x07, 0x40, - 0x4f, 0x6a, 0x65, 0xee, 0x07, 0x00, 0x49, 0x14, 0x3e, 0xef, 0x07, 0x00, - 0x48, 0x13, 0xac, 0xf0, 0x07, 0x00, 0x4b, 0x69, 0x60, 0xf1, 0x07, 0x40, - 0x4e, 0x38, 0x71, 0x03, 0xf3, 0x01, 0xae, 0x01, 0xff, 0x54, 0x10, 0x3d, - 0xd9, 0xf7, 0x01, 0x42, 0x77, 0x24, 0x77, 0xf9, 0x41, 0x45, 0x99, 0xda, - 0x54, 0xf4, 0x01, 0x03, 0xd4, 0x04, 0xa9, 0x0c, 0x06, 0xbf, 0xd2, 0xd7, - 0x0b, 0x45, 0x44, 0xdf, 0x46, 0x26, 0x80, 0xc9, 0x0b, 0x47, 0xeb, 0xca, + 0x54, 0x14, 0x06, 0x42, 0x6c, 0x00, 0xf8, 0x07, 0x40, 0x50, 0xfe, 0x5b, + 0xf3, 0x07, 0x00, 0x05, 0x4f, 0x30, 0x1d, 0x51, 0x9a, 0x56, 0xf2, 0x07, + 0x00, 0x06, 0x1c, 0x33, 0x01, 0xff, 0x49, 0x29, 0x3e, 0xeb, 0x07, 0x00, + 0x48, 0x26, 0xac, 0xec, 0x07, 0x00, 0x4b, 0x7e, 0x60, 0xed, 0x07, 0x40, + 0x4f, 0x7f, 0x65, 0xee, 0x07, 0x00, 0x49, 0x29, 0x3e, 0xef, 0x07, 0x00, + 0x48, 0x26, 0xac, 0xf0, 0x07, 0x00, 0x4b, 0x7e, 0x60, 0xf1, 0x07, 0x40, + 0x4e, 0x4d, 0x71, 0x03, 0xf3, 0x01, 0xae, 0x01, 0xff, 0x54, 0x25, 0x3d, + 0xd9, 0xf7, 0x01, 0x42, 0x77, 0x24, 0x77, 0xf9, 0x41, 0x45, 0xb5, 0xda, + 0x54, 0xf4, 0x01, 0x03, 0xd4, 0x04, 0xa9, 0x0c, 0x06, 0xdb, 0xd2, 0xd7, + 0x0b, 0x45, 0x60, 0xdf, 0x46, 0x26, 0x80, 0xc9, 0x0b, 0x47, 0x07, 0xcb, 0x13, 0xf9, 0x01, 0xb3, 0xab, 0x0b, 0x02, 0x0a, 0x07, 0xa5, 0x09, 0xb7, - 0x11, 0x03, 0x92, 0x5c, 0x01, 0xff, 0x44, 0xf0, 0x07, 0x85, 0x00, 0x00, - 0x44, 0xfb, 0x9d, 0x98, 0x23, 0x40, 0x80, 0xfa, 0x04, 0x02, 0x5a, 0x00, - 0x16, 0x05, 0xf0, 0x07, 0x06, 0x46, 0xb8, 0x6f, 0xf0, 0xf4, 0x41, 0x44, + 0x11, 0x03, 0xa7, 0x5c, 0x01, 0xff, 0x44, 0xf0, 0x07, 0x85, 0x00, 0x00, + 0x44, 0x0e, 0x9e, 0x98, 0x23, 0x40, 0x80, 0xfa, 0x04, 0x02, 0x5a, 0x00, + 0x16, 0x05, 0xf0, 0x07, 0x06, 0x46, 0xcd, 0x6f, 0xf0, 0xf4, 0x41, 0x44, 0xc3, 0x00, 0x92, 0x2b, 0x00, 0x45, 0xc8, 0x00, 0x93, 0x2b, 0x40, 0x51, - 0x34, 0x52, 0x4f, 0x14, 0x01, 0x45, 0x18, 0x04, 0x4d, 0x14, 0x01, 0xa4, - 0xf4, 0x03, 0x4a, 0x1d, 0x94, 0x4e, 0x14, 0x01, 0x4e, 0xd2, 0x71, 0x5d, + 0x49, 0x52, 0x4f, 0x14, 0x01, 0x45, 0x18, 0x04, 0x4d, 0x14, 0x01, 0xa4, + 0xf4, 0x03, 0x4a, 0x30, 0x94, 0x4e, 0x14, 0x01, 0x4e, 0xe7, 0x71, 0x5d, 0x14, 0x01, 0x07, 0xf1, 0x04, 0xa3, 0x01, 0x42, 0x19, 0x04, 0x49, 0x14, - 0x01, 0x50, 0x69, 0x5f, 0x5b, 0x14, 0x01, 0xb3, 0x44, 0x0b, 0x5b, 0x70, + 0x01, 0x50, 0x7e, 0x5f, 0x5b, 0x14, 0x01, 0xb3, 0x44, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xa1, 0x31, 0xe5, 0x3e, 0x14, 0x01, 0xe9, 0x36, 0x14, 0x81, - 0x24, 0xef, 0x40, 0x14, 0x01, 0xf5, 0x38, 0x14, 0x81, 0x17, 0x08, 0x76, + 0x24, 0xef, 0x40, 0x14, 0x01, 0xf5, 0x38, 0x14, 0x81, 0x17, 0x08, 0x92, 0xb7, 0x01, 0xff, 0xec, 0x3c, 0x14, 0x81, 0x09, 0xf2, 0x3a, 0x14, 0xc1, 0x00, 0xf2, 0x3b, 0x14, 0x41, 0xec, 0x3d, 0x14, 0x41, 0xf5, 0x39, 0x14, 0x41, 0xe9, 0x37, 0x14, 0x41, 0xe1, 0x35, 0x14, 0x01, 0xe9, 0x3f, 0x14, - 0x01, 0xf5, 0x41, 0x14, 0x41, 0x4a, 0x3f, 0x9f, 0x5e, 0x14, 0x01, 0xa9, - 0x01, 0xff, 0x44, 0x86, 0xe4, 0x4a, 0x14, 0x01, 0x03, 0xdd, 0x02, 0x01, - 0xff, 0xa1, 0x2f, 0x4b, 0x3b, 0x21, 0x43, 0x14, 0x01, 0x4e, 0x0e, 0x71, - 0x48, 0x14, 0x01, 0x4b, 0xbf, 0x95, 0x60, 0x14, 0x01, 0x45, 0xab, 0x3a, - 0x46, 0x14, 0x01, 0x4b, 0x05, 0x9c, 0x61, 0x14, 0x01, 0x02, 0x02, 0x00, - 0x01, 0xff, 0x44, 0x49, 0x21, 0x42, 0x14, 0x01, 0x45, 0x69, 0x46, 0x45, - 0x14, 0x41, 0x47, 0x5c, 0x14, 0x44, 0x14, 0x01, 0x47, 0x3a, 0x81, 0x47, + 0x01, 0xf5, 0x41, 0x14, 0x41, 0x4a, 0x52, 0x9f, 0x5e, 0x14, 0x01, 0xa9, + 0x01, 0xff, 0x44, 0xa2, 0xe4, 0x4a, 0x14, 0x01, 0x03, 0xdd, 0x02, 0x01, + 0xff, 0xa1, 0x2f, 0x4b, 0x3b, 0x21, 0x43, 0x14, 0x01, 0x4e, 0x23, 0x71, + 0x48, 0x14, 0x01, 0x4b, 0xd2, 0x95, 0x60, 0x14, 0x01, 0x45, 0xc0, 0x3a, + 0x46, 0x14, 0x01, 0x4b, 0x18, 0x9c, 0x61, 0x14, 0x01, 0x02, 0x02, 0x00, + 0x01, 0xff, 0x44, 0x49, 0x21, 0x42, 0x14, 0x01, 0x45, 0x7e, 0x46, 0x45, + 0x14, 0x41, 0x47, 0x5c, 0x14, 0x44, 0x14, 0x01, 0x47, 0x41, 0x81, 0x47, 0x14, 0x41, 0xe1, 0x00, 0x14, 0x81, 0xae, 0x02, 0xa2, 0xa1, 0x02, 0xa3, 0x94, 0x02, 0xa4, 0xfb, 0x01, 0xe5, 0x0a, 0x14, 0x01, 0xa7, 0xea, 0x01, 0x42, 0x22, 0x00, 0x34, 0x14, 0x01, 0xe9, 0x02, 0x14, 0x81, 0xda, 0x01, 0xaa, 0xcd, 0x01, 0xab, 0xc0, 0x01, 0xac, 0xb3, 0x01, 0xad, 0xa6, 0x01, 0xae, 0x7b, 0xef, 0x0c, 0x14, 0x01, 0xb0, 0x6b, 0xb2, 0x5f, 0xb3, 0x4d, 0xb4, 0x34, 0xf5, 0x04, 0x14, 0x81, 0x2b, 0xb6, 0x0c, 0x42, 0xa9, 0x01, - 0x30, 0x14, 0x01, 0x42, 0x20, 0x20, 0x2b, 0x14, 0x41, 0x4d, 0x5d, 0x7b, - 0x5f, 0x14, 0x01, 0x07, 0x77, 0xb7, 0x01, 0xff, 0xec, 0x08, 0x14, 0x81, + 0x30, 0x14, 0x01, 0x42, 0x20, 0x20, 0x2b, 0x14, 0x41, 0x4d, 0x64, 0x7b, + 0x5f, 0x14, 0x01, 0x07, 0x93, 0xb7, 0x01, 0xff, 0xec, 0x08, 0x14, 0x81, 0x09, 0xf2, 0x06, 0x14, 0xc1, 0x00, 0xf2, 0x07, 0x14, 0x41, 0xec, 0x09, 0x14, 0x41, 0xf5, 0x05, 0x14, 0x41, 0xe1, 0x1f, 0x14, 0x01, 0x42, 0x22, 0x00, 0x20, 0x14, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x1a, 0x14, 0x01, 0x42, @@ -6271,24 +6272,24 @@ static const unsigned char uname2c_tree[210697] = { 0xe1, 0x27, 0x14, 0x01, 0x42, 0x22, 0x00, 0x28, 0x14, 0x41, 0xe1, 0x01, 0x14, 0x01, 0xe9, 0x0b, 0x14, 0x01, 0xf5, 0x0d, 0x14, 0x41, 0x44, 0x0b, 0x1e, 0x4b, 0x14, 0x01, 0x05, 0xf5, 0x05, 0x11, 0x06, 0x3c, 0x01, 0x01, - 0xff, 0x45, 0x18, 0x04, 0x5a, 0x14, 0x01, 0x45, 0x3f, 0x8e, 0x4c, 0x14, + 0xff, 0x45, 0x18, 0x04, 0x5a, 0x14, 0x01, 0x45, 0x52, 0x8e, 0x4c, 0x14, 0x41, 0x45, 0xd1, 0x09, 0x58, 0x14, 0x01, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x59, 0x14, 0x01, 0x43, 0xcd, 0x09, 0x51, 0x14, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x50, 0x14, 0x41, 0x44, 0x25, 0x01, 0x53, 0x14, 0x01, 0x42, 0x15, 0x02, 0x52, 0x14, 0x41, 0x44, 0x96, 0x1b, 0x57, 0x14, 0x01, 0x42, 0x30, 0x27, 0x56, 0x14, 0x41, 0x43, 0xd7, 0x04, 0x55, 0x14, 0x01, 0x43, 0xfb, 0x05, 0x54, 0x14, 0x41, 0x44, 0xf0, 0x07, 0x0a, 0x00, - 0x00, 0x05, 0x97, 0x19, 0xfe, 0x03, 0x4b, 0x58, 0x9a, 0xaa, 0x20, 0x00, - 0x08, 0x55, 0xc1, 0x01, 0xff, 0x06, 0xf4, 0x05, 0xac, 0x03, 0x07, 0xf1, - 0x04, 0x74, 0x48, 0xf5, 0xc0, 0xde, 0x19, 0x80, 0x69, 0xb4, 0x54, 0x0b, - 0x5b, 0x70, 0x01, 0xff, 0xa1, 0x3c, 0xe5, 0xb5, 0x19, 0x00, 0xa9, 0x2e, - 0xef, 0xb7, 0x19, 0x80, 0x1c, 0xf5, 0xb3, 0x19, 0x80, 0x06, 0x4f, 0xcb, + 0x00, 0x05, 0x97, 0x19, 0xfe, 0x03, 0x4b, 0x6b, 0x9a, 0xaa, 0x20, 0x00, + 0x08, 0x71, 0xc1, 0x01, 0xff, 0x06, 0xf4, 0x05, 0xac, 0x03, 0x07, 0xf1, + 0x04, 0x74, 0x48, 0x11, 0xc1, 0xde, 0x19, 0x80, 0x69, 0xb4, 0x54, 0x0b, + 0x70, 0x70, 0x01, 0xff, 0xa1, 0x3c, 0xe5, 0xb5, 0x19, 0x00, 0xa9, 0x2e, + 0xef, 0xb7, 0x19, 0x80, 0x1c, 0xf5, 0xb3, 0x19, 0x80, 0x06, 0x4f, 0xe0, 0x6d, 0xb0, 0x19, 0x40, 0xe5, 0xb9, 0x19, 0x80, 0x08, 0xf5, 0xb4, 0x19, 0x00, 0xf9, 0xbc, 0x19, 0x40, 0xf9, 0xbf, 0x19, 0x40, 0xe1, 0xb8, 0x19, 0x80, 0x04, 0xf9, 0xbd, 0x19, 0x40, 0xf9, 0xbe, 0x19, 0x40, 0xe9, 0xb2, 0x19, 0x00, 0xf9, 0xc0, 0x19, 0x40, 0xe1, 0xb1, 0x19, 0x80, 0x08, 0xe5, 0xb6, 0x19, 0x00, 0xf9, 0xba, 0x19, 0x40, 0xf9, 0xbb, 0x19, 0x40, 0x4d, - 0x88, 0x7c, 0xda, 0x19, 0x00, 0x09, 0xc5, 0xb3, 0x01, 0xff, 0xd1, 0xc8, + 0x8f, 0x7c, 0xda, 0x19, 0x00, 0x09, 0xe1, 0xb3, 0x01, 0xff, 0xd1, 0xc8, 0x19, 0x00, 0xd2, 0xc9, 0x19, 0x40, 0xf6, 0xdf, 0x19, 0x40, 0x06, 0x97, 0x29, 0x92, 0x02, 0x05, 0x2a, 0x0a, 0x89, 0x01, 0x04, 0x0d, 0x04, 0x01, 0xff, 0x42, 0x16, 0x00, 0xa5, 0x19, 0x00, 0x42, 0x68, 0x0f, 0xa4, 0x19, @@ -6321,41 +6322,41 @@ static const unsigned char uname2c_tree[210697] = { 0x44, 0x25, 0x01, 0xd3, 0x19, 0x00, 0x42, 0x15, 0x02, 0xd2, 0x19, 0x40, 0x44, 0x96, 0x1b, 0xd7, 0x19, 0x00, 0x42, 0x30, 0x27, 0xd6, 0x19, 0x40, 0x43, 0xd7, 0x04, 0xd5, 0x19, 0x00, 0x43, 0xfb, 0x05, 0xd4, 0x19, 0x40, - 0x46, 0xf7, 0x06, 0x11, 0xf3, 0x01, 0x49, 0xa3, 0xb7, 0x1a, 0xf3, 0x41, + 0x46, 0xf7, 0x06, 0x11, 0xf3, 0x01, 0x49, 0xbf, 0xb7, 0x1a, 0xf3, 0x41, 0x42, 0x33, 0x00, 0xb2, 0x26, 0x00, 0x04, 0xdd, 0x01, 0x01, 0xff, 0x06, - 0x43, 0xd0, 0x06, 0x44, 0xed, 0x06, 0x10, 0xf6, 0x41, 0x46, 0xe9, 0xcf, - 0x03, 0xfa, 0x81, 0xd3, 0x01, 0x4a, 0x83, 0xa1, 0x4a, 0xfa, 0x81, 0xc5, - 0x01, 0xab, 0x73, 0x44, 0xe6, 0xe6, 0x05, 0xfa, 0x81, 0x5b, 0x45, 0xca, - 0xb4, 0x01, 0xfa, 0x81, 0x43, 0x44, 0x36, 0xe7, 0x02, 0xfa, 0x81, 0x2b, - 0x07, 0x2d, 0x09, 0x01, 0xff, 0x46, 0xe9, 0xcf, 0x2d, 0xfa, 0x01, 0xab, - 0x12, 0x44, 0xe6, 0xe6, 0x2f, 0xfa, 0x01, 0x45, 0xca, 0xb4, 0x2b, 0xfa, - 0x01, 0x44, 0x36, 0xe7, 0x2c, 0xfa, 0x41, 0x43, 0xa1, 0x01, 0x2a, 0xfa, - 0x01, 0x45, 0x39, 0x94, 0x2e, 0xfa, 0x41, 0x09, 0x5c, 0x29, 0x01, 0xff, + 0x5f, 0xd0, 0x06, 0x44, 0xed, 0x06, 0x10, 0xf6, 0x41, 0x46, 0x05, 0xd0, + 0x03, 0xfa, 0x81, 0xd3, 0x01, 0x4a, 0x96, 0xa1, 0x4a, 0xfa, 0x81, 0xc5, + 0x01, 0xab, 0x73, 0x44, 0x02, 0xe7, 0x05, 0xfa, 0x81, 0x5b, 0x45, 0xe6, + 0xb4, 0x01, 0xfa, 0x81, 0x43, 0x44, 0x52, 0xe7, 0x02, 0xfa, 0x81, 0x2b, + 0x07, 0x2d, 0x09, 0x01, 0xff, 0x46, 0x05, 0xd0, 0x2d, 0xfa, 0x01, 0xab, + 0x12, 0x44, 0x02, 0xe7, 0x2f, 0xfa, 0x01, 0x45, 0xe6, 0xb4, 0x2b, 0xfa, + 0x01, 0x44, 0x52, 0xe7, 0x2c, 0xfa, 0x41, 0x43, 0xa1, 0x01, 0x2a, 0xfa, + 0x01, 0x45, 0x4c, 0x94, 0x2e, 0xfa, 0x41, 0x09, 0x5c, 0x29, 0x01, 0xff, 0x4e, 0x65, 0x29, 0x17, 0xfa, 0x01, 0x5b, 0x89, 0x1b, 0x41, 0xfa, 0x41, 0x09, 0x5c, 0x29, 0x01, 0xff, 0x4e, 0x65, 0x29, 0x16, 0xfa, 0x01, 0x5b, 0x89, 0x1b, 0x40, 0xfa, 0x41, 0x09, 0x5c, 0x29, 0x01, 0xff, 0x4e, 0x65, 0x29, 0x1a, 0xfa, 0x01, 0x5b, 0x89, 0x1b, 0x44, 0xfa, 0x41, 0x43, 0xa1, - 0x01, 0x00, 0xfa, 0x81, 0x38, 0x45, 0x39, 0x94, 0x04, 0xfa, 0xc1, 0x00, - 0x09, 0x5c, 0x29, 0x01, 0xff, 0x52, 0x37, 0x4c, 0x08, 0xfa, 0x01, 0x4e, + 0x01, 0x00, 0xfa, 0x81, 0x38, 0x45, 0x4c, 0x94, 0x04, 0xfa, 0xc1, 0x00, + 0x09, 0x5c, 0x29, 0x01, 0xff, 0x52, 0x4c, 0x4c, 0x08, 0xfa, 0x01, 0x4e, 0x65, 0x29, 0x19, 0xfa, 0x01, 0x5f, 0xe5, 0x0f, 0x1d, 0xfa, 0x01, 0xb4, 0x01, 0xff, 0x5c, 0x19, 0x16, 0x47, 0xfa, 0x01, 0x0b, 0x8a, 0x1b, 0x01, - 0xff, 0x4f, 0x95, 0x1b, 0x43, 0xfa, 0x01, 0x53, 0x6f, 0x48, 0x32, 0xfa, + 0xff, 0x4f, 0x95, 0x1b, 0x43, 0xfa, 0x01, 0x53, 0x84, 0x48, 0x32, 0xfa, 0x41, 0x09, 0x5c, 0x29, 0x01, 0xff, 0x4e, 0x65, 0x29, 0x15, 0xfa, 0x01, 0x5b, 0x89, 0x1b, 0x3f, 0xfa, 0x41, 0x57, 0x5c, 0x29, 0x4d, 0xfa, 0x41, 0x09, 0x5c, 0x29, 0x01, 0xff, 0x4e, 0x65, 0x29, 0x18, 0xfa, 0x01, 0x5b, - 0x89, 0x1b, 0x42, 0xfa, 0x41, 0x43, 0xc6, 0xcc, 0xdc, 0x2b, 0x00, 0xb4, - 0x01, 0xff, 0x4a, 0xe1, 0x9d, 0xba, 0xfa, 0x01, 0x49, 0x22, 0xb1, 0x86, - 0xfa, 0x41, 0x49, 0xac, 0x2a, 0xc9, 0x2b, 0x40, 0xa1, 0x35, 0x11, 0xa9, - 0x54, 0x1b, 0x0e, 0x96, 0x72, 0x01, 0xff, 0x03, 0x7b, 0x00, 0x06, 0x4c, + 0x89, 0x1b, 0x42, 0xfa, 0x41, 0x43, 0xe2, 0xcc, 0xdc, 0x2b, 0x00, 0xb4, + 0x01, 0xff, 0x4a, 0xf4, 0x9d, 0xba, 0xfa, 0x01, 0x49, 0x3e, 0xb1, 0x86, + 0xfa, 0x41, 0x49, 0xac, 0x2a, 0xc9, 0x2b, 0x40, 0xa1, 0x35, 0x11, 0xbe, + 0x54, 0x1b, 0x0e, 0xab, 0x72, 0x01, 0xff, 0x03, 0x7b, 0x00, 0x06, 0x4c, 0x87, 0x00, 0x78, 0x22, 0x40, 0x45, 0x75, 0x0b, 0x70, 0x22, 0x00, 0x4a, 0x96, 0x35, 0x74, 0x22, 0x40, 0x03, 0x7b, 0x00, 0x06, 0x49, 0xec, 0x00, 0x79, 0x22, 0x40, 0x45, 0x75, 0x0b, 0x71, 0x22, 0x00, 0x4a, 0x96, 0x35, 0x75, 0x22, 0x40, 0x03, 0x73, 0x05, 0x06, 0x62, 0x58, 0x0b, 0x47, 0x22, - 0x40, 0x54, 0x0c, 0x3c, 0x88, 0x22, 0x00, 0x56, 0x14, 0x32, 0x89, 0x22, + 0x40, 0x54, 0x21, 0x3c, 0x88, 0x22, 0x00, 0x56, 0x14, 0x32, 0x89, 0x22, 0x40, 0x6d, 0x38, 0x01, 0xaf, 0x22, 0x00, 0x04, 0xd7, 0x04, 0x01, 0xff, - 0x4b, 0x50, 0x4c, 0x15, 0x00, 0x00, 0x08, 0x59, 0x20, 0xb2, 0x01, 0x09, + 0x4b, 0x65, 0x4c, 0x15, 0x00, 0x00, 0x08, 0x59, 0x20, 0xb2, 0x01, 0x09, 0x2e, 0x23, 0x9b, 0x01, 0x08, 0xdb, 0x04, 0x01, 0xff, 0x42, 0x5c, 0x00, - 0x8e, 0xf1, 0x01, 0x4a, 0x61, 0xa0, 0x4e, 0x27, 0x00, 0x42, 0x36, 0x00, + 0x8e, 0xf1, 0x01, 0x4a, 0x74, 0xa0, 0x4e, 0x27, 0x00, 0x42, 0x36, 0x00, 0x8b, 0xf1, 0x01, 0x15, 0xe3, 0x04, 0x18, 0x42, 0xc1, 0x08, 0x8c, 0xf1, 0x01, 0x4d, 0xbd, 0x30, 0xc4, 0xfb, 0x01, 0x42, 0x45, 0x05, 0x8d, 0xf1, 0x01, 0x42, 0x94, 0x18, 0x8f, 0xf1, 0x41, 0xe1, 0x70, 0xf1, 0x01, 0xe2, @@ -6367,16 +6368,16 @@ static const unsigned char uname2c_tree[210697] = { 0x80, 0xf1, 0x01, 0xf2, 0x81, 0xf1, 0x01, 0xf3, 0x82, 0xf1, 0x01, 0xf4, 0x83, 0xf1, 0x01, 0xf5, 0x84, 0xf1, 0x01, 0xf6, 0x85, 0xf1, 0x01, 0xf7, 0x86, 0xf1, 0x01, 0xf8, 0x87, 0xf1, 0x01, 0xf9, 0x88, 0xf1, 0x01, 0xfa, - 0x89, 0xf1, 0x41, 0x45, 0x0d, 0x0f, 0xbd, 0xfb, 0x01, 0x47, 0x9d, 0x3f, - 0xbf, 0xfb, 0x01, 0x5c, 0xb0, 0x0d, 0xbe, 0xfb, 0x41, 0x4a, 0xc5, 0xa0, + 0x89, 0xf1, 0x41, 0x45, 0x0d, 0x0f, 0xbd, 0xfb, 0x01, 0x47, 0xb2, 0x3f, + 0xbf, 0xfb, 0x01, 0x5c, 0xb0, 0x0d, 0xbe, 0xfb, 0x41, 0x4a, 0xd8, 0xa0, 0xff, 0x24, 0x00, 0x15, 0xe3, 0x04, 0x5a, 0x07, 0xbf, 0x35, 0x0c, 0x46, 0xdb, 0x04, 0xd8, 0xf7, 0x01, 0x48, 0x01, 0x02, 0xd6, 0xf7, 0x41, 0xa5, - 0x3c, 0xa6, 0x2e, 0x48, 0x0b, 0x4e, 0xf3, 0x24, 0x00, 0xb3, 0x1a, 0xb4, - 0x01, 0xff, 0x47, 0xed, 0x54, 0xed, 0x24, 0x00, 0x02, 0x15, 0x01, 0x01, + 0x3c, 0xa6, 0x2e, 0x48, 0x20, 0x4e, 0xf3, 0x24, 0x00, 0xb3, 0x1a, 0xb4, + 0x01, 0xff, 0x47, 0x02, 0x55, 0xed, 0x24, 0x00, 0x02, 0x15, 0x01, 0x01, 0xff, 0x43, 0xb9, 0x28, 0xec, 0x24, 0x00, 0x43, 0x99, 0x1b, 0xf4, 0x24, - 0x40, 0x48, 0xef, 0x4b, 0xf1, 0x24, 0x00, 0x46, 0x83, 0x43, 0xf0, 0x24, - 0x40, 0x46, 0x27, 0x16, 0xef, 0x24, 0x00, 0x47, 0x0d, 0x57, 0xee, 0x24, - 0x40, 0x47, 0xb6, 0x22, 0xf2, 0x24, 0x00, 0x45, 0xdf, 0x68, 0xeb, 0x24, + 0x40, 0x48, 0x04, 0x4c, 0xf1, 0x24, 0x00, 0x46, 0x98, 0x43, 0xf0, 0x24, + 0x40, 0x46, 0x27, 0x16, 0xef, 0x24, 0x00, 0x47, 0x22, 0x57, 0xee, 0x24, + 0x40, 0x47, 0xb6, 0x22, 0xf2, 0x24, 0x00, 0x45, 0xf4, 0x68, 0xeb, 0x24, 0x40, 0xe1, 0x50, 0xf1, 0x01, 0xe2, 0x51, 0xf1, 0x01, 0xe3, 0x52, 0xf1, 0x01, 0xe4, 0x53, 0xf1, 0x01, 0xe5, 0x54, 0xf1, 0x01, 0xe6, 0x55, 0xf1, 0x01, 0xe7, 0x56, 0xf1, 0x01, 0xe8, 0x57, 0xf1, 0x01, 0xe9, 0x58, 0xf1, @@ -6386,28 +6387,28 @@ static const unsigned char uname2c_tree[210697] = { 0x01, 0xf3, 0x62, 0xf1, 0x01, 0xf4, 0x63, 0xf1, 0x01, 0xf5, 0x64, 0xf1, 0x01, 0xf6, 0x65, 0xf1, 0x01, 0xf7, 0x66, 0xf1, 0x01, 0xf8, 0x67, 0xf1, 0x01, 0xf9, 0x68, 0xf1, 0x01, 0xfa, 0x69, 0xf1, 0x41, 0xa2, 0xb5, 0x05, - 0x0a, 0xfb, 0xa1, 0xc6, 0x03, 0xa9, 0xb7, 0x03, 0x48, 0x5d, 0xbe, 0xdb, - 0xf4, 0x01, 0x42, 0x1b, 0x00, 0xbc, 0x22, 0x80, 0x22, 0x53, 0x3f, 0x47, - 0x2f, 0x20, 0x00, 0x07, 0xb4, 0x36, 0x0c, 0x4c, 0xa4, 0x8e, 0x22, 0xf9, - 0x01, 0x4a, 0xf7, 0xaa, 0xff, 0xf9, 0x41, 0x4c, 0xed, 0x5e, 0x6e, 0x20, - 0x00, 0x44, 0xd5, 0xab, 0xde, 0xf3, 0x41, 0x08, 0x2d, 0xbd, 0x01, 0xff, - 0x4a, 0xbf, 0x5a, 0xe3, 0x19, 0x01, 0x07, 0xf1, 0x04, 0x67, 0x05, 0xdb, - 0x02, 0x3e, 0x0b, 0x5b, 0x70, 0x01, 0xff, 0xa1, 0x2b, 0xe5, 0xda, 0x19, - 0x01, 0xe9, 0xd2, 0x19, 0x81, 0x1e, 0xef, 0xdc, 0x19, 0x01, 0x4f, 0x28, - 0x6b, 0xe4, 0x19, 0x01, 0xf5, 0xd4, 0x19, 0x81, 0x0b, 0x49, 0x76, 0xb7, + 0x0a, 0x0e, 0xa2, 0xc6, 0x03, 0xa9, 0xb7, 0x03, 0x48, 0x79, 0xbe, 0xdb, + 0xf4, 0x01, 0x42, 0x1b, 0x00, 0xbc, 0x22, 0x80, 0x22, 0x53, 0x54, 0x47, + 0x2f, 0x20, 0x00, 0x07, 0xb4, 0x36, 0x0c, 0x4c, 0xb7, 0x8e, 0x22, 0xf9, + 0x01, 0x4a, 0x0a, 0xab, 0xff, 0xf9, 0x41, 0x4c, 0x02, 0x5f, 0x6e, 0x20, + 0x00, 0x44, 0xe8, 0xab, 0xde, 0xf3, 0x41, 0x08, 0x49, 0xbd, 0x01, 0xff, + 0x4a, 0xd4, 0x5a, 0xe3, 0x19, 0x01, 0x07, 0xf1, 0x04, 0x67, 0x05, 0xdb, + 0x02, 0x3e, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xa1, 0x2b, 0xe5, 0xda, 0x19, + 0x01, 0xe9, 0xd2, 0x19, 0x81, 0x1e, 0xef, 0xdc, 0x19, 0x01, 0x4f, 0x3d, + 0x6b, 0xe4, 0x19, 0x01, 0xf5, 0xd4, 0x19, 0x81, 0x0b, 0x49, 0x92, 0xb7, 0xd6, 0x19, 0xc1, 0x00, 0xf2, 0xd7, 0x19, 0x41, 0xf5, 0xd5, 0x19, 0x41, 0xe9, 0xd3, 0x19, 0x41, 0xe1, 0xd1, 0x19, 0x01, 0xe9, 0xdb, 0x19, 0x01, - 0xf5, 0xdd, 0x19, 0x41, 0xa1, 0x17, 0x47, 0xa1, 0xcb, 0xe2, 0x19, 0x01, + 0xf5, 0xdd, 0x19, 0x41, 0xa1, 0x17, 0x47, 0xbd, 0xcb, 0xe2, 0x19, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x49, 0x21, 0xe0, 0x19, 0x01, 0x45, - 0x69, 0x46, 0xdf, 0x19, 0x41, 0x47, 0x5c, 0x14, 0xde, 0x19, 0x01, 0x47, - 0x3a, 0x81, 0xe1, 0x19, 0x41, 0xe1, 0xa0, 0x19, 0x81, 0x80, 0x02, 0xa2, + 0x7e, 0x46, 0xdf, 0x19, 0x41, 0x47, 0x5c, 0x14, 0xde, 0x19, 0x01, 0x47, + 0x41, 0x81, 0xe1, 0x19, 0x41, 0xe1, 0xa0, 0x19, 0x81, 0x80, 0x02, 0xa2, 0xf3, 0x01, 0xa3, 0xe6, 0x01, 0xa4, 0xcd, 0x01, 0xe5, 0xaa, 0x19, 0x01, 0xa7, 0xbc, 0x01, 0x42, 0x22, 0x00, 0xce, 0x19, 0x01, 0xe9, 0xa2, 0x19, 0x81, 0xac, 0x01, 0xaa, 0x9f, 0x01, 0xab, 0x92, 0x01, 0xac, 0x85, 0x01, 0x42, 0x6c, 0x00, 0xc6, 0x19, 0x01, 0xae, 0x67, 0xef, 0xac, 0x19, 0x01, 0xb0, 0x57, 0xb2, 0x4b, 0xb3, 0x39, 0xb4, 0x20, 0xf5, 0xa4, 0x19, 0x81, 0x17, 0xb6, 0x06, 0x42, 0x20, 0x20, 0xc7, 0x19, 0x41, 0xe1, 0xca, 0x19, - 0x01, 0x48, 0x77, 0xb7, 0xa6, 0x19, 0xc1, 0x00, 0xf2, 0xa7, 0x19, 0x41, + 0x01, 0x48, 0x93, 0xb7, 0xa6, 0x19, 0xc1, 0x00, 0xf2, 0xa7, 0x19, 0x41, 0xf5, 0xa5, 0x19, 0x41, 0xe1, 0xbd, 0x19, 0x01, 0x42, 0x22, 0x00, 0xbe, 0x19, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0xb8, 0x19, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x19, 0x41, 0xe1, 0xcd, 0x19, 0x01, 0x42, 0x22, 0x00, 0xcb, 0x19, @@ -6423,11 +6424,11 @@ static const unsigned char uname2c_tree[210697] = { 0x01, 0x42, 0x22, 0x00, 0xbb, 0x19, 0x41, 0xe1, 0xb3, 0x19, 0x01, 0x42, 0x22, 0x00, 0xb4, 0x19, 0x41, 0xe1, 0xc4, 0x19, 0x01, 0x42, 0x22, 0x00, 0xc5, 0x19, 0x41, 0xe1, 0xa1, 0x19, 0x01, 0xe9, 0xab, 0x19, 0x01, 0xf5, - 0xad, 0x19, 0x41, 0x48, 0xa5, 0xbd, 0x85, 0xf4, 0x01, 0x47, 0x6b, 0x7d, + 0xad, 0x19, 0x41, 0x48, 0xc1, 0xbd, 0x85, 0xf4, 0x01, 0x47, 0x72, 0x7d, 0xa6, 0x20, 0x40, 0x06, 0xf4, 0x05, 0xa3, 0x01, 0x07, 0xf1, 0x04, 0x23, - 0x05, 0xdb, 0x02, 0x01, 0xff, 0x44, 0x82, 0xe5, 0xee, 0xe4, 0x01, 0x45, - 0x09, 0xde, 0xec, 0xe4, 0x01, 0x44, 0xb6, 0xe6, 0xeb, 0xe4, 0x01, 0x45, - 0x4d, 0xe0, 0xef, 0xe4, 0x01, 0x45, 0x89, 0xe0, 0xed, 0xe4, 0x41, 0xe1, + 0x05, 0xdb, 0x02, 0x01, 0xff, 0x44, 0x9e, 0xe5, 0xee, 0xe4, 0x01, 0x45, + 0x25, 0xde, 0xec, 0xe4, 0x01, 0x44, 0xd2, 0xe6, 0xeb, 0xe4, 0x01, 0x45, + 0x69, 0xe0, 0xef, 0xe4, 0x01, 0x45, 0xa5, 0xe0, 0xed, 0xe4, 0x41, 0xe1, 0xd5, 0xe4, 0x81, 0x65, 0xe5, 0xe4, 0xe4, 0x81, 0x43, 0xe9, 0xda, 0xe4, 0x81, 0x2c, 0xef, 0xd0, 0xe4, 0x81, 0x15, 0xf5, 0xdf, 0xe4, 0xc1, 0x00, 0xe3, 0xe0, 0xe4, 0x01, 0xe4, 0xe1, 0xe4, 0x01, 0xeb, 0xe2, 0xe4, 0x01, @@ -6443,84 +6444,84 @@ static const unsigned char uname2c_tree[210697] = { 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xf0, 0xe4, 0x41, 0x44, 0x25, 0x01, 0xf3, 0xe4, 0x01, 0x42, 0x15, 0x02, 0xf2, 0xe4, 0x41, 0x44, 0x96, 0x1b, 0xf7, 0xe4, 0x01, 0x42, 0x30, 0x27, 0xf6, 0xe4, 0x41, 0x43, 0xd7, 0x04, - 0xf5, 0xe4, 0x01, 0x43, 0xfb, 0x05, 0xf4, 0xe4, 0x41, 0x07, 0x03, 0xc5, + 0xf5, 0xe4, 0x01, 0x43, 0xfb, 0x05, 0xf4, 0xe4, 0x41, 0x07, 0x1f, 0xc5, 0x06, 0x42, 0x74, 0x00, 0x07, 0x22, 0x40, 0x55, 0xb5, 0x35, 0xab, 0x08, 0x01, 0x07, 0xf1, 0x04, 0x3c, 0x07, 0xbf, 0x35, 0x01, 0xff, 0xa6, 0x29, 0x43, 0xcd, 0x09, 0xa7, 0x08, 0x81, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xad, 0x08, 0x01, 0x44, 0x25, 0x01, 0xa9, 0x08, 0x01, 0xb7, 0x01, 0xff, 0x44, 0x98, 0x1b, 0xae, 0x08, 0x01, 0xef, 0xa8, 0x08, 0x41, 0x48, 0xe8, 0x0f, 0xaf, 0x08, 0x41, 0x43, 0xd7, 0x04, 0xac, 0x08, 0x01, 0x43, - 0xfb, 0x05, 0xaa, 0x08, 0x41, 0xa1, 0xb9, 0x01, 0x44, 0x46, 0xe4, 0x83, - 0x08, 0x01, 0x46, 0x8d, 0x44, 0x85, 0x08, 0x01, 0x06, 0x97, 0x29, 0x73, - 0x45, 0x4b, 0xa2, 0x84, 0x08, 0x01, 0x42, 0xb0, 0x01, 0x87, 0x08, 0x81, - 0x60, 0x44, 0xba, 0xe5, 0x8f, 0x08, 0x01, 0x46, 0x1f, 0xd3, 0x91, 0x08, + 0xfb, 0x05, 0xaa, 0x08, 0x41, 0xa1, 0xb9, 0x01, 0x44, 0x62, 0xe4, 0x83, + 0x08, 0x01, 0x46, 0xa2, 0x44, 0x85, 0x08, 0x01, 0x06, 0x97, 0x29, 0x73, + 0x45, 0x5e, 0xa2, 0x84, 0x08, 0x01, 0x42, 0xb0, 0x01, 0x87, 0x08, 0x81, + 0x60, 0x44, 0xd6, 0xe5, 0x8f, 0x08, 0x01, 0x46, 0x3b, 0xd3, 0x91, 0x08, 0x01, 0x43, 0xb9, 0x04, 0x93, 0x08, 0x01, 0x43, 0x40, 0x20, 0x95, 0x08, - 0x01, 0x42, 0x6f, 0x02, 0x98, 0x08, 0x01, 0x44, 0x71, 0xbe, 0x9a, 0x08, - 0x01, 0x44, 0x29, 0x60, 0x9b, 0x08, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, - 0x08, 0x83, 0x88, 0x08, 0x01, 0x44, 0xf9, 0x4c, 0x8d, 0x08, 0x01, 0x45, - 0xf3, 0x4c, 0x89, 0x08, 0x41, 0x42, 0xaf, 0x3f, 0x9e, 0x08, 0x01, 0x43, + 0x01, 0x42, 0x6f, 0x02, 0x98, 0x08, 0x01, 0x44, 0x8d, 0xbe, 0x9a, 0x08, + 0x01, 0x44, 0x3e, 0x60, 0x9b, 0x08, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, + 0x0f, 0x83, 0x88, 0x08, 0x01, 0x44, 0x0e, 0x4d, 0x8d, 0x08, 0x01, 0x45, + 0x08, 0x4d, 0x89, 0x08, 0x41, 0x42, 0xc4, 0x3f, 0x9e, 0x08, 0x01, 0x43, 0x25, 0x23, 0x8b, 0x08, 0x41, 0xa1, 0x06, 0x43, 0x99, 0x14, 0x9d, 0x08, - 0x41, 0x43, 0xd7, 0xdf, 0x99, 0x08, 0x01, 0x44, 0x96, 0xd9, 0x96, 0x08, - 0x41, 0x42, 0x53, 0x00, 0x8a, 0x08, 0x41, 0x45, 0x02, 0xa5, 0x80, 0x08, - 0x01, 0x44, 0x46, 0xe4, 0x82, 0x08, 0x01, 0x42, 0xb0, 0x01, 0x86, 0x08, - 0x01, 0x44, 0xba, 0xe5, 0x8e, 0x08, 0x01, 0x46, 0x1f, 0xd3, 0x90, 0x08, + 0x41, 0x43, 0xf3, 0xdf, 0x99, 0x08, 0x01, 0x44, 0xb2, 0xd9, 0x96, 0x08, + 0x41, 0x42, 0x53, 0x00, 0x8a, 0x08, 0x41, 0x45, 0x15, 0xa5, 0x80, 0x08, + 0x01, 0x44, 0x62, 0xe4, 0x82, 0x08, 0x01, 0x42, 0xb0, 0x01, 0x86, 0x08, + 0x01, 0x44, 0xd6, 0xe5, 0x8e, 0x08, 0x01, 0x46, 0x3b, 0xd3, 0x90, 0x08, 0x01, 0x43, 0xb9, 0x04, 0x92, 0x08, 0x01, 0x43, 0x40, 0x20, 0x94, 0x08, - 0x01, 0x44, 0x06, 0x3f, 0x9c, 0x08, 0x01, 0x44, 0xf9, 0x4c, 0x8c, 0x08, - 0x41, 0x44, 0x99, 0x38, 0x81, 0x08, 0x01, 0x43, 0x4b, 0x18, 0x97, 0x08, + 0x01, 0x44, 0x1b, 0x3f, 0x9c, 0x08, 0x01, 0x44, 0x0e, 0x4d, 0x8c, 0x08, + 0x41, 0x44, 0xae, 0x38, 0x81, 0x08, 0x01, 0x43, 0x4b, 0x18, 0x97, 0x08, 0x41, 0xa3, 0x58, 0x4c, 0x68, 0x09, 0xc2, 0x22, 0x00, 0x08, 0xa9, 0x1f, - 0x42, 0x47, 0xe6, 0x0b, 0x0f, 0x22, 0x00, 0xb3, 0x24, 0x4e, 0x5c, 0x76, - 0x09, 0x2a, 0x00, 0x45, 0x6c, 0x15, 0xc3, 0x22, 0x80, 0x06, 0x52, 0xdb, - 0x50, 0xff, 0x2a, 0x40, 0x0f, 0x12, 0x63, 0x01, 0xff, 0x43, 0xc5, 0x06, + 0x42, 0x47, 0xe6, 0x0b, 0x0f, 0x22, 0x00, 0xb3, 0x24, 0x4e, 0x63, 0x76, + 0x09, 0x2a, 0x00, 0x45, 0x6c, 0x15, 0xc3, 0x22, 0x80, 0x06, 0x52, 0xf0, + 0x50, 0xff, 0x2a, 0x40, 0x0f, 0x27, 0x63, 0x01, 0xff, 0x43, 0xc5, 0x06, 0x03, 0x2a, 0x00, 0x44, 0x71, 0x25, 0x04, 0x2a, 0x40, 0x06, 0x20, 0x22, - 0x06, 0x48, 0x9a, 0x69, 0x11, 0x22, 0x40, 0x55, 0xd7, 0x37, 0x05, 0x2a, - 0x00, 0x4e, 0x12, 0x77, 0x06, 0x2a, 0x40, 0x43, 0x1a, 0x00, 0xc0, 0x22, + 0x06, 0x48, 0xaf, 0x69, 0x11, 0x22, 0x40, 0x55, 0xec, 0x37, 0x05, 0x2a, + 0x00, 0x4e, 0x19, 0x77, 0x06, 0x2a, 0x40, 0x43, 0x1a, 0x00, 0xc0, 0x22, 0x00, 0x42, 0x0c, 0x00, 0xc1, 0x22, 0x40, 0x07, 0x5a, 0x20, 0x06, 0x48, - 0xb0, 0x29, 0x10, 0x22, 0x40, 0x4c, 0x88, 0x86, 0x00, 0x2a, 0x00, 0x4d, - 0x16, 0x80, 0x01, 0x2a, 0x00, 0x4e, 0x5c, 0x76, 0x02, 0x2a, 0x40, 0xa1, + 0xb0, 0x29, 0x10, 0x22, 0x40, 0x4c, 0x8f, 0x86, 0x00, 0x2a, 0x00, 0x4d, + 0x1d, 0x80, 0x01, 0x2a, 0x00, 0x4e, 0x63, 0x76, 0x02, 0x2a, 0x40, 0xa1, 0x86, 0x64, 0xa5, 0xe3, 0x46, 0xa9, 0xa9, 0x3e, 0xaf, 0x93, 0x1f, 0x03, - 0xf7, 0x1b, 0x81, 0x1d, 0xb5, 0xe8, 0x0b, 0x07, 0x8b, 0xcd, 0x01, 0xff, + 0xf7, 0x1b, 0x81, 0x1d, 0xb5, 0xe8, 0x0b, 0x07, 0xa7, 0xcd, 0x01, 0xff, 0x0f, 0x54, 0x2f, 0xa3, 0x0b, 0x06, 0xf4, 0x05, 0xdc, 0x0a, 0xac, 0xdb, 0x04, 0x10, 0xf2, 0x0a, 0xca, 0x04, 0xb3, 0x8d, 0x02, 0xb4, 0xb3, 0x01, - 0x0b, 0x5b, 0x70, 0x01, 0xff, 0xa1, 0x97, 0x01, 0xe5, 0x31, 0x10, 0x80, - 0x8b, 0x01, 0x4c, 0xc0, 0x87, 0x71, 0x10, 0x00, 0xe9, 0x2d, 0x10, 0x80, - 0x7c, 0x06, 0xdd, 0xd2, 0x68, 0x04, 0x85, 0xbe, 0x5a, 0xb3, 0x36, 0x47, - 0xf5, 0xcb, 0x2b, 0x10, 0x00, 0xf5, 0x2f, 0x10, 0x80, 0x27, 0x08, 0x76, + 0x0b, 0x70, 0x70, 0x01, 0xff, 0xa1, 0x97, 0x01, 0xe5, 0x31, 0x10, 0x80, + 0x8b, 0x01, 0x4c, 0xc7, 0x87, 0x71, 0x10, 0x00, 0xe9, 0x2d, 0x10, 0x80, + 0x7c, 0x06, 0xf9, 0xd2, 0x68, 0x04, 0xa1, 0xbe, 0x5a, 0xb3, 0x36, 0x47, + 0x11, 0xcc, 0x2b, 0x10, 0x00, 0xf5, 0x2f, 0x10, 0x80, 0x27, 0x08, 0x92, 0xb7, 0x11, 0x12, 0xda, 0x2d, 0x01, 0xff, 0x42, 0x97, 0x02, 0x67, 0x10, 0x00, 0x42, 0x30, 0x12, 0x68, 0x10, 0x40, 0xec, 0x58, 0x10, 0x80, 0x09, 0xf2, 0x56, 0x10, 0xc0, 0x00, 0xf2, 0x57, 0x10, 0x40, 0xec, 0x59, 0x10, - 0x40, 0xf5, 0x30, 0x10, 0x40, 0x4c, 0xa8, 0x87, 0x62, 0x10, 0x00, 0x04, + 0x40, 0xf5, 0x30, 0x10, 0x40, 0x4c, 0xaf, 0x87, 0x62, 0x10, 0x00, 0x04, 0x90, 0x00, 0x01, 0xff, 0x42, 0xda, 0x10, 0x83, 0x10, 0x00, 0xe5, 0x84, - 0x10, 0x80, 0x06, 0x47, 0xfb, 0xc6, 0x86, 0x10, 0x40, 0x46, 0x5b, 0x00, + 0x10, 0x80, 0x06, 0x47, 0x17, 0xc7, 0x86, 0x10, 0x40, 0x46, 0x5b, 0x00, 0x85, 0x10, 0x40, 0x42, 0x6b, 0x25, 0x33, 0x10, 0x00, 0xef, 0x34, 0x10, - 0x40, 0x42, 0x27, 0x01, 0x74, 0x10, 0x00, 0x42, 0xca, 0x4b, 0x72, 0x10, + 0x40, 0x42, 0x27, 0x01, 0x74, 0x10, 0x00, 0x42, 0xdf, 0x4b, 0x72, 0x10, 0x00, 0xf5, 0x73, 0x10, 0x40, 0xe9, 0x2e, 0x10, 0x40, 0x46, 0x5b, 0x00, 0x35, 0x10, 0x40, 0xe1, 0x2c, 0x10, 0x00, 0xe9, 0x32, 0x10, 0xc0, 0x00, - 0x45, 0x7a, 0xe0, 0x9c, 0x10, 0xc0, 0x00, 0xe9, 0x9d, 0x10, 0x40, 0x0f, - 0x11, 0x64, 0x11, 0x14, 0xa4, 0x3f, 0x01, 0xff, 0x45, 0x2e, 0xdc, 0x63, - 0x10, 0x00, 0x46, 0xe3, 0xd2, 0x64, 0x10, 0x40, 0x45, 0xd1, 0x09, 0xf8, + 0x45, 0x96, 0xe0, 0x9c, 0x10, 0xc0, 0x00, 0xe9, 0x9d, 0x10, 0x40, 0x0f, + 0x26, 0x64, 0x11, 0x14, 0xb9, 0x3f, 0x01, 0xff, 0x45, 0x4a, 0xdc, 0x63, + 0x10, 0x00, 0x46, 0xff, 0xd2, 0x64, 0x10, 0x40, 0x45, 0xd1, 0x09, 0xf8, 0xa9, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0xf9, 0xa9, 0x00, 0x43, 0xcd, 0x09, 0xf1, 0xa9, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xf0, 0xa9, 0x40, 0x44, 0x25, 0x01, 0xf3, 0xa9, 0x00, 0x42, 0x15, 0x02, 0xf2, 0xa9, 0x40, 0x44, 0x96, 0x1b, 0xf7, 0xa9, 0x00, 0x42, 0x30, 0x27, 0xf6, 0xa9, 0x40, 0x43, 0xd7, 0x04, 0xf5, 0xa9, 0x00, 0x43, 0xfb, 0x05, 0xf4, - 0xa9, 0x40, 0x0a, 0x87, 0xa2, 0xf3, 0x01, 0x04, 0xdc, 0x02, 0x47, 0x06, - 0x7f, 0x14, 0x01, 0xff, 0xa1, 0x23, 0x49, 0x37, 0xae, 0x4d, 0x10, 0x00, - 0x48, 0xad, 0xbc, 0x4f, 0x10, 0x00, 0x48, 0xf5, 0xbd, 0x4c, 0x10, 0x00, - 0x05, 0x85, 0x4f, 0x01, 0xff, 0x4b, 0xad, 0x00, 0x9f, 0x10, 0x00, 0x43, - 0xcd, 0x09, 0x9e, 0x10, 0x40, 0x4d, 0xf9, 0x7b, 0x4e, 0x10, 0x00, 0x05, - 0xe2, 0xc7, 0x01, 0xff, 0x4b, 0xad, 0x00, 0x77, 0xaa, 0x00, 0x43, 0xcd, + 0xa9, 0x40, 0x0a, 0x9a, 0xa2, 0xf3, 0x01, 0x04, 0xdc, 0x02, 0x47, 0x06, + 0x7f, 0x14, 0x01, 0xff, 0xa1, 0x23, 0x49, 0x53, 0xae, 0x4d, 0x10, 0x00, + 0x48, 0xc9, 0xbc, 0x4f, 0x10, 0x00, 0x48, 0x11, 0xbe, 0x4c, 0x10, 0x00, + 0x05, 0x9a, 0x4f, 0x01, 0xff, 0x4b, 0xad, 0x00, 0x9f, 0x10, 0x00, 0x43, + 0xcd, 0x09, 0x9e, 0x10, 0x40, 0x4d, 0x00, 0x7c, 0x4e, 0x10, 0x00, 0x05, + 0xfe, 0xc7, 0x01, 0xff, 0x4b, 0xad, 0x00, 0x77, 0xaa, 0x00, 0x43, 0xcd, 0x09, 0x78, 0xaa, 0x00, 0x43, 0x25, 0x09, 0x79, 0xaa, 0x40, 0xa1, 0x99, - 0x01, 0x49, 0xf9, 0x10, 0x37, 0x10, 0x00, 0x0c, 0x1c, 0x89, 0x86, 0x01, - 0x4e, 0xdc, 0x72, 0x4a, 0x10, 0x00, 0x4e, 0x1e, 0x74, 0x7b, 0xaa, 0x00, - 0x54, 0x6c, 0x40, 0x8f, 0x10, 0x00, 0xb3, 0x35, 0x0f, 0xbd, 0x6c, 0x29, + 0x01, 0x49, 0xf9, 0x10, 0x37, 0x10, 0x00, 0x0c, 0x23, 0x89, 0x86, 0x01, + 0x4e, 0xf1, 0x72, 0x4a, 0x10, 0x00, 0x4e, 0x33, 0x74, 0x7b, 0xaa, 0x00, + 0x54, 0x81, 0x40, 0x8f, 0x10, 0x00, 0xb3, 0x35, 0x0f, 0xd2, 0x6c, 0x29, 0x02, 0x02, 0x00, 0x19, 0x17, 0xda, 0x2d, 0x01, 0xff, 0xd1, 0x69, 0x10, 0x00, 0xd2, 0x6a, 0x10, 0x00, 0xd3, 0x6b, 0x10, 0x00, 0xd4, 0x6c, 0x10, 0x00, 0xd5, 0x6d, 0x10, 0x40, 0x44, 0x49, 0x21, 0x39, 0x10, 0x00, 0x45, - 0x69, 0x46, 0x38, 0x10, 0x40, 0xd2, 0x7c, 0xaa, 0x00, 0xd5, 0x7d, 0xaa, + 0x7e, 0x46, 0x38, 0x10, 0x40, 0xd2, 0x7c, 0xaa, 0x00, 0xd5, 0x7d, 0xaa, 0x40, 0x46, 0x97, 0x08, 0x4b, 0x10, 0x00, 0x04, 0x90, 0x00, 0x01, 0xff, - 0x08, 0x1d, 0xbb, 0x1b, 0x43, 0xff, 0x4c, 0xe5, 0xa9, 0x00, 0x05, 0xec, + 0x08, 0x39, 0xbb, 0x1b, 0x43, 0x14, 0x4d, 0xe5, 0xa9, 0x00, 0x05, 0xec, 0x2d, 0x01, 0xff, 0xd2, 0x87, 0x10, 0x00, 0xd3, 0x88, 0x10, 0x00, 0xd5, - 0x89, 0x10, 0x00, 0xd6, 0x8a, 0x10, 0x40, 0x4d, 0x84, 0x7b, 0x8d, 0x10, + 0x89, 0x10, 0x00, 0xd6, 0x8a, 0x10, 0x40, 0x4d, 0x8b, 0x7b, 0x8d, 0x10, 0x00, 0x05, 0xec, 0x2d, 0x01, 0xff, 0xd2, 0x8b, 0x10, 0x00, 0xd3, 0x8c, 0x10, 0x40, 0xd1, 0x9a, 0x10, 0x00, 0xd3, 0x9b, 0x10, 0x40, 0x47, 0x5c, 0x14, 0x36, 0x10, 0x00, 0x43, 0x2a, 0x2a, 0x3a, 0x10, 0x40, 0x45, 0xd1, @@ -6529,23 +6530,23 @@ static const unsigned char uname2c_tree[210697] = { 0x1b, 0x90, 0x10, 0x40, 0x44, 0x25, 0x01, 0x93, 0x10, 0x00, 0x42, 0x15, 0x02, 0x92, 0x10, 0x40, 0x44, 0x96, 0x1b, 0x97, 0x10, 0x00, 0x42, 0x30, 0x27, 0x96, 0x10, 0x40, 0x43, 0xd7, 0x04, 0x95, 0x10, 0x00, 0x43, 0xfb, - 0x05, 0x94, 0x10, 0x40, 0x54, 0xdc, 0x3e, 0x70, 0xaa, 0x00, 0x52, 0x85, - 0x4f, 0xe6, 0xa9, 0x40, 0x06, 0xf2, 0x04, 0x17, 0x0f, 0x47, 0x6a, 0x01, - 0xff, 0x42, 0xa1, 0x09, 0x76, 0xaa, 0x00, 0x43, 0x45, 0xe9, 0x74, 0xaa, - 0x00, 0x42, 0x46, 0xc8, 0x75, 0xaa, 0x40, 0xe1, 0x21, 0x10, 0x80, 0xd3, + 0x05, 0x94, 0x10, 0x40, 0x54, 0xf1, 0x3e, 0x70, 0xaa, 0x00, 0x52, 0x9a, + 0x4f, 0xe6, 0xa9, 0x40, 0x06, 0xf2, 0x04, 0x17, 0x0f, 0x5c, 0x6a, 0x01, + 0xff, 0x42, 0xa1, 0x09, 0x76, 0xaa, 0x00, 0x43, 0x61, 0xe9, 0x74, 0xaa, + 0x00, 0x42, 0x62, 0xc8, 0x75, 0xaa, 0x40, 0xe1, 0x21, 0x10, 0x80, 0xd3, 0x05, 0xa2, 0xc6, 0x05, 0xa3, 0xb9, 0x05, 0xa4, 0xa0, 0x05, 0xe5, 0x27, 0x10, 0x80, 0x83, 0x05, 0xa7, 0xf0, 0x04, 0x42, 0x22, 0x00, 0x1f, 0x10, 0x00, 0xe9, 0x23, 0x10, 0x80, 0xe0, 0x04, 0xaa, 0xd3, 0x04, 0xab, 0xc4, 0x03, 0xac, 0xb7, 0x03, 0xad, 0x8f, 0x03, 0xae, 0xf0, 0x02, 0xef, 0x29, 0x10, 0x00, 0xb0, 0xdf, 0x02, 0xb2, 0xd2, 0x02, 0xb3, 0xb2, 0x01, 0xb4, - 0x3c, 0xf5, 0x25, 0x10, 0x80, 0x33, 0x08, 0x76, 0xb7, 0x1d, 0xb7, 0x06, + 0x3c, 0xf5, 0x25, 0x10, 0x80, 0x33, 0x08, 0x92, 0xb7, 0x1d, 0xb7, 0x06, 0x42, 0x20, 0x20, 0x1a, 0x10, 0x40, 0xe1, 0x1d, 0x10, 0x00, 0x11, 0xdb, 0x2d, 0x01, 0xff, 0x43, 0x51, 0x02, 0x66, 0x10, 0x00, 0x43, 0x8f, 0x00, 0x65, 0x10, 0x40, 0xec, 0x54, 0x10, 0x80, 0x09, 0xf2, 0x52, 0x10, 0xc0, 0x00, 0xf2, 0x53, 0x10, 0x40, 0xec, 0x55, 0x10, 0x40, 0xf5, 0x26, 0x10, 0x40, 0xe1, 0x10, 0x10, 0x80, 0x13, 0x42, 0x22, 0x00, 0x11, 0x10, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x0b, 0x10, 0x00, 0x42, 0x22, 0x00, 0x0c, 0x10, - 0x40, 0x08, 0x12, 0x64, 0x01, 0xff, 0xa2, 0x4b, 0xa4, 0x33, 0x42, 0xed, + 0x40, 0x08, 0x27, 0x64, 0x01, 0xff, 0xa2, 0x4b, 0xa4, 0x33, 0x42, 0xed, 0x06, 0xe8, 0xa9, 0x00, 0xa7, 0x21, 0xaa, 0x15, 0x43, 0x84, 0x0c, 0xfa, 0xa9, 0x00, 0xae, 0x01, 0xff, 0x42, 0x2f, 0x04, 0xef, 0xa9, 0x00, 0x42, 0x20, 0x20, 0xe7, 0xa9, 0x40, 0xe1, 0xeb, 0xa9, 0x00, 0x42, 0x22, 0x00, @@ -6553,12 +6554,12 @@ static const unsigned char uname2c_tree[210697] = { 0x40, 0xe1, 0xfb, 0xa9, 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xfc, 0xa9, 0x40, 0xe1, 0xed, 0xa9, 0x00, 0x42, 0x22, 0x00, 0xee, 0xa9, 0x40, 0xe1, 0xfd, 0xa9, 0x00, 0x42, 0x22, 0x00, 0xfe, 0xa9, 0x40, 0xe1, 0x1e, 0x10, - 0x00, 0x4d, 0x3a, 0x7c, 0x61, 0x10, 0x00, 0xa8, 0x06, 0x42, 0x45, 0x05, - 0x51, 0x10, 0x40, 0xe1, 0x50, 0x10, 0x80, 0x11, 0x0b, 0x89, 0x9c, 0x01, + 0x00, 0x4d, 0x41, 0x7c, 0x61, 0x10, 0x00, 0xa8, 0x06, 0x42, 0x45, 0x05, + 0x51, 0x10, 0x40, 0xe1, 0x50, 0x10, 0x80, 0x11, 0x0b, 0x9c, 0x9c, 0x01, 0xff, 0x43, 0x29, 0x1e, 0x7e, 0xaa, 0x00, 0x43, 0xa4, 0x02, 0x7f, 0xaa, 0x40, 0x02, 0x92, 0x00, 0x01, 0xff, 0xe1, 0x22, 0x10, 0x00, 0xa2, 0x60, 0xa3, 0x54, 0x42, 0x68, 0x0f, 0x7b, 0x10, 0x00, 0x42, 0xed, 0x06, 0x7e, - 0x10, 0x00, 0xa7, 0x3c, 0x42, 0x22, 0x00, 0x81, 0x10, 0x00, 0x43, 0x2d, + 0x10, 0x00, 0xa7, 0x3c, 0x42, 0x22, 0x00, 0x81, 0x10, 0x00, 0x43, 0x49, 0xe9, 0xe2, 0xa9, 0x00, 0xab, 0x24, 0xae, 0x12, 0x43, 0xcc, 0x1a, 0x7d, 0x10, 0x00, 0x43, 0x8f, 0x00, 0x80, 0x10, 0x00, 0x42, 0x59, 0x00, 0x79, 0x10, 0x40, 0xe1, 0x7c, 0x10, 0x00, 0x42, 0x2f, 0x04, 0xe3, 0xa9, 0x00, @@ -6566,15 +6567,15 @@ static const unsigned char uname2c_tree[210697] = { 0x00, 0x76, 0x10, 0x40, 0xe1, 0x77, 0x10, 0x00, 0x42, 0x22, 0x00, 0xe0, 0xa9, 0x40, 0xe1, 0x78, 0x10, 0x00, 0x42, 0x22, 0x00, 0xe1, 0xa9, 0x40, 0xe1, 0x7f, 0x10, 0x00, 0x42, 0x22, 0x00, 0xe4, 0xa9, 0x40, 0xe1, 0x1b, - 0x10, 0x00, 0x4f, 0x80, 0x6d, 0x8e, 0x10, 0x40, 0xe1, 0x15, 0x10, 0x00, + 0x10, 0x00, 0x4f, 0x95, 0x6d, 0x8e, 0x10, 0x40, 0xe1, 0x15, 0x10, 0x00, 0x42, 0x22, 0x00, 0x16, 0x10, 0x40, 0xe1, 0x14, 0x10, 0x00, 0x42, 0x24, 0x02, 0x04, 0x10, 0x00, 0xae, 0x06, 0x42, 0x20, 0x20, 0x09, 0x10, 0x40, 0xe1, 0x0f, 0x10, 0x00, 0x42, 0x20, 0x20, 0x0a, 0x10, 0x40, 0xe1, 0x19, 0x10, 0x00, 0x03, 0xb6, 0x00, 0x01, 0xff, 0x02, 0x7e, 0x24, 0x10, 0xe5, - 0x28, 0x10, 0x00, 0x43, 0x2d, 0xe9, 0x5b, 0x10, 0x00, 0x43, 0xdc, 0x42, + 0x28, 0x10, 0x00, 0x43, 0x49, 0xe9, 0x5b, 0x10, 0x00, 0x43, 0xf1, 0x42, 0x5a, 0x10, 0x40, 0xe1, 0x5c, 0x10, 0x00, 0xe5, 0x5d, 0x10, 0x40, 0xe1, 0x1c, 0x10, 0x00, 0x42, 0x74, 0x00, 0x20, 0x10, 0x40, 0xe1, 0x00, 0x10, - 0x00, 0x42, 0x22, 0x00, 0x01, 0x10, 0xc0, 0x00, 0x04, 0xdf, 0x3e, 0x01, + 0x00, 0x42, 0x22, 0x00, 0x01, 0x10, 0xc0, 0x00, 0x04, 0xf4, 0x3e, 0x01, 0xff, 0xa3, 0x70, 0xa4, 0x5c, 0x42, 0xed, 0x06, 0x6f, 0xaa, 0x00, 0x42, 0x24, 0x02, 0x60, 0xaa, 0x00, 0xa8, 0x44, 0xaa, 0x38, 0x43, 0x84, 0x0c, 0x6e, 0xaa, 0x00, 0xae, 0x26, 0x42, 0x71, 0x00, 0x73, 0xaa, 0x00, 0x42, @@ -6587,41 +6588,41 @@ static const unsigned char uname2c_tree[210697] = { 0x00, 0x42, 0x22, 0x00, 0x69, 0xaa, 0x40, 0xe1, 0x61, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x62, 0xaa, 0x40, 0xe1, 0x07, 0x10, 0x00, 0x42, 0x22, 0x00, 0x08, 0x10, 0x40, 0xe9, 0x24, 0x10, 0x40, 0xe1, 0x02, 0x10, 0x00, 0x42, - 0x22, 0x00, 0x03, 0x10, 0x00, 0x47, 0xc6, 0xbc, 0x3f, 0x10, 0x40, 0x11, - 0xab, 0x52, 0x01, 0xff, 0x44, 0xf2, 0xe4, 0x70, 0x10, 0x00, 0x43, 0xcd, - 0x40, 0x6e, 0x10, 0x00, 0x43, 0x1a, 0xe8, 0x6f, 0x10, 0x40, 0xe1, 0x12, + 0x22, 0x00, 0x03, 0x10, 0x00, 0x47, 0xe2, 0xbc, 0x3f, 0x10, 0x40, 0x11, + 0xc0, 0x52, 0x01, 0xff, 0x44, 0x0e, 0xe5, 0x70, 0x10, 0x00, 0x43, 0xe2, + 0x40, 0x6e, 0x10, 0x00, 0x43, 0x36, 0xe8, 0x6f, 0x10, 0x40, 0xe1, 0x12, 0x10, 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x13, 0x10, 0x40, 0xe1, 0x0d, 0x10, 0x00, 0x42, 0x22, 0x00, 0x0e, 0x10, 0x40, 0xe1, 0x05, 0x10, 0x00, 0x42, 0x22, 0x00, 0x06, 0x10, 0x40, 0xe1, 0x17, 0x10, 0x00, 0x42, 0x22, - 0x00, 0x18, 0x10, 0x40, 0x47, 0xe2, 0xc7, 0x7a, 0xaa, 0x00, 0xf5, 0x2a, + 0x00, 0x18, 0x10, 0x40, 0x47, 0xfe, 0xc7, 0x7a, 0xaa, 0x00, 0xf5, 0x2a, 0x10, 0x40, 0x45, 0xd1, 0x09, 0x48, 0x10, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x49, 0x10, 0x00, 0x43, 0xcd, 0x09, 0x41, 0x10, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x40, 0x10, 0x40, 0x44, 0x25, 0x01, 0x43, 0x10, 0x00, 0x42, 0x15, 0x02, 0x42, 0x10, 0x40, 0x44, 0x96, 0x1b, 0x47, 0x10, 0x00, 0x42, 0x30, 0x27, 0x46, 0x10, 0x40, 0x43, 0xd7, 0x04, 0x45, - 0x10, 0x00, 0x43, 0xfb, 0x05, 0x44, 0x10, 0x40, 0xad, 0x06, 0x4e, 0x44, - 0x75, 0x82, 0x10, 0x40, 0x06, 0x64, 0x2f, 0x17, 0x0a, 0x15, 0xa6, 0x01, + 0x10, 0x00, 0x43, 0xfb, 0x05, 0x44, 0x10, 0x40, 0xad, 0x06, 0x4e, 0x59, + 0x75, 0x82, 0x10, 0x40, 0x06, 0x64, 0x2f, 0x17, 0x0a, 0x28, 0xa6, 0x01, 0xff, 0x42, 0x74, 0x00, 0x60, 0x10, 0x00, 0x42, 0x6c, 0x00, 0x5f, 0x10, 0x00, 0x42, 0x2f, 0x04, 0x5e, 0x10, 0x40, 0x42, 0x22, 0x00, 0x3e, 0x10, 0x00, 0x42, 0x71, 0x00, 0x3c, 0x10, 0x00, 0x42, 0xa9, 0x01, 0x3d, 0x10, 0x00, 0x42, 0x20, 0x20, 0x3b, 0x10, 0x40, 0x03, 0x49, 0x1f, 0x85, 0x11, - 0x02, 0xbd, 0x03, 0xae, 0x0e, 0xb3, 0x01, 0xff, 0x45, 0x60, 0xdc, 0x44, + 0x02, 0xbd, 0x03, 0xae, 0x0e, 0xb3, 0x01, 0xff, 0x45, 0x7c, 0xdc, 0x44, 0xf3, 0x01, 0x02, 0x36, 0x00, 0x01, 0xff, 0x80, 0x8b, 0x0e, 0x03, 0x13, - 0x00, 0x01, 0xff, 0x48, 0x8b, 0xa0, 0xb9, 0xf3, 0x81, 0xf8, 0x0d, 0x44, - 0x22, 0x25, 0xb5, 0xf3, 0x01, 0xb3, 0x01, 0xff, 0x44, 0x6e, 0xe4, 0xbc, - 0xf3, 0x01, 0x06, 0x7f, 0x14, 0x01, 0xff, 0x0b, 0x3c, 0x91, 0xd3, 0x0d, + 0x00, 0x01, 0xff, 0x48, 0x9e, 0xa0, 0xb9, 0xf3, 0x81, 0xf8, 0x0d, 0x44, + 0x22, 0x25, 0xb5, 0xf3, 0x01, 0xb3, 0x01, 0xff, 0x44, 0x8a, 0xe4, 0xbc, + 0xf3, 0x01, 0x06, 0x7f, 0x14, 0x01, 0xff, 0x0b, 0x4f, 0x91, 0xd3, 0x0d, 0xa2, 0x86, 0x0d, 0xa3, 0xe0, 0x0a, 0xa4, 0x8b, 0x0a, 0xa5, 0xd5, 0x09, 0xa6, 0xd2, 0x08, 0xa7, 0x83, 0x08, 0x02, 0x22, 0x00, 0xe2, 0x07, 0x4d, - 0x3e, 0x7d, 0x98, 0xd1, 0x01, 0xab, 0x81, 0x07, 0xac, 0xe2, 0x06, 0xad, + 0x45, 0x7d, 0x98, 0xd1, 0x01, 0xab, 0x81, 0x07, 0xac, 0xe2, 0x06, 0xad, 0x9c, 0x06, 0xae, 0xf7, 0x05, 0xaf, 0x98, 0x05, 0xb0, 0xd5, 0x04, 0x02, 0x7c, 0x00, 0x9e, 0x04, 0xb2, 0xe9, 0x03, 0xb3, 0xa4, 0x02, 0xb4, 0x30, - 0xb6, 0x22, 0xb7, 0x0a, 0x4a, 0xef, 0x5d, 0x43, 0xd1, 0x01, 0xfa, 0x8e, - 0xd1, 0x41, 0x05, 0x8a, 0xaa, 0x06, 0x4f, 0x2b, 0x68, 0xb3, 0xd1, 0x41, + 0xb6, 0x22, 0xb7, 0x0a, 0x4a, 0x04, 0x5e, 0x43, 0xd1, 0x01, 0xfa, 0x8e, + 0xd1, 0x41, 0x05, 0x9d, 0xaa, 0x06, 0x4f, 0x40, 0x68, 0xb3, 0xd1, 0x41, 0x44, 0x22, 0x25, 0x5d, 0xd1, 0x01, 0x44, 0x8b, 0x2f, 0x3b, 0xd1, 0x41, - 0x44, 0x83, 0x06, 0xd3, 0xd1, 0x01, 0x4c, 0x68, 0x8b, 0x57, 0xd1, 0x41, - 0x06, 0xeb, 0xd0, 0xb3, 0x01, 0xa8, 0x9a, 0x01, 0x47, 0xbe, 0xc9, 0xd8, + 0x44, 0x83, 0x06, 0xd3, 0xd1, 0x01, 0x4c, 0x6f, 0x8b, 0x57, 0xd1, 0x41, + 0x06, 0x07, 0xd1, 0xb3, 0x01, 0xa8, 0x9a, 0x01, 0x47, 0xda, 0xc9, 0xd8, 0xd1, 0x81, 0x8c, 0x01, 0xf2, 0x96, 0xd1, 0x81, 0x1c, 0x43, 0x5d, 0x01, - 0x97, 0xd1, 0x81, 0x06, 0x4d, 0x2f, 0x83, 0x17, 0xd1, 0x41, 0x80, 0x01, + 0x97, 0xd1, 0x81, 0x06, 0x4d, 0x36, 0x83, 0x17, 0xd1, 0x41, 0x80, 0x01, 0xff, 0x45, 0xa0, 0x0c, 0x99, 0xd1, 0x01, 0x42, 0x50, 0x02, 0x9a, 0xd1, 0x41, 0x06, 0x03, 0x02, 0x01, 0xff, 0x0a, 0x95, 0x34, 0x11, 0x15, 0x8f, 0x34, 0x01, 0xff, 0x45, 0x1c, 0x07, 0x55, 0xd1, 0x01, 0x45, 0xad, 0x02, @@ -6632,141 +6633,141 @@ static const unsigned char uname2c_tree[210697] = { 0x45, 0x1c, 0x07, 0x4d, 0xd1, 0x01, 0x45, 0xad, 0x02, 0x4c, 0xd1, 0x41, 0x45, 0x1c, 0x07, 0x4b, 0xd1, 0x01, 0x45, 0xad, 0x02, 0x4a, 0xd1, 0x41, 0x45, 0x1c, 0x07, 0x4f, 0xd1, 0x01, 0x45, 0xad, 0x02, 0x4e, 0xd1, 0x41, - 0x4a, 0x9b, 0x9d, 0xdc, 0xd1, 0x41, 0x0c, 0xec, 0x88, 0x06, 0x4e, 0xc6, + 0x4a, 0xae, 0x9d, 0xdc, 0xd1, 0x41, 0x0c, 0xf3, 0x88, 0x06, 0x4e, 0xdb, 0x74, 0x18, 0xd1, 0x41, 0x44, 0x22, 0x25, 0x62, 0xd1, 0x01, 0x44, 0x8b, 0x2f, 0x40, 0xd1, 0x41, 0x1b, 0xd9, 0x19, 0x18, 0x19, 0xdb, 0x19, 0x01, - 0xff, 0x4a, 0xc2, 0x67, 0xc8, 0xd1, 0x01, 0x48, 0xc4, 0x67, 0xc7, 0xd1, - 0xc1, 0x00, 0x4d, 0x78, 0x78, 0xc9, 0xd1, 0x41, 0x4a, 0xc2, 0x67, 0xcb, - 0xd1, 0x81, 0x06, 0x48, 0xc4, 0x67, 0xca, 0xd1, 0x41, 0x0c, 0x78, 0x78, + 0xff, 0x4a, 0xd7, 0x67, 0xc8, 0xd1, 0x01, 0x48, 0xd9, 0x67, 0xc7, 0xd1, + 0xc1, 0x00, 0x4d, 0x7f, 0x78, 0xc9, 0xd1, 0x41, 0x4a, 0xd7, 0x67, 0xcb, + 0xd1, 0x81, 0x06, 0x48, 0xd9, 0x67, 0xca, 0xd1, 0x41, 0x0c, 0x7f, 0x78, 0x01, 0xff, 0xd1, 0xcc, 0xd1, 0x01, 0xd2, 0xcd, 0xd1, 0x01, 0xd3, 0xce, - 0xd1, 0x41, 0x48, 0xcd, 0xba, 0xd6, 0xd1, 0x81, 0xb4, 0x01, 0xa5, 0x7a, + 0xd1, 0x41, 0x48, 0xe9, 0xba, 0xd6, 0xd1, 0x81, 0xb4, 0x01, 0xa5, 0x7a, 0xa8, 0x62, 0xa9, 0x25, 0x43, 0x0c, 0x00, 0xe9, 0xd1, 0x01, 0x06, 0x20, - 0x22, 0x06, 0x45, 0xca, 0xe0, 0x8d, 0xd1, 0x41, 0xe2, 0xd2, 0xd1, 0x01, + 0x22, 0x06, 0x45, 0xe6, 0xe0, 0x8d, 0xd1, 0x41, 0xe2, 0xd2, 0xd1, 0x01, 0x09, 0x96, 0x34, 0x01, 0xff, 0x45, 0x1c, 0x07, 0x47, 0xd1, 0x01, 0x45, - 0xad, 0x02, 0x46, 0xd1, 0x41, 0x4c, 0x08, 0x8b, 0x00, 0xd1, 0x01, 0xb8, - 0x01, 0xff, 0x8d, 0x24, 0xb4, 0x01, 0xff, 0x06, 0x67, 0x6c, 0x11, 0x09, - 0xe2, 0xb7, 0x01, 0xff, 0x44, 0x22, 0x25, 0x63, 0xd1, 0x01, 0x44, 0x8b, + 0xad, 0x02, 0x46, 0xd1, 0x41, 0x4c, 0x0f, 0x8b, 0x00, 0xd1, 0x01, 0xb8, + 0x01, 0xff, 0x8d, 0x24, 0xb4, 0x01, 0xff, 0x06, 0x7c, 0x6c, 0x11, 0x09, + 0xfe, 0xb7, 0x01, 0xff, 0x44, 0x22, 0x25, 0x63, 0xd1, 0x01, 0x44, 0x8b, 0x2f, 0x41, 0xd1, 0x41, 0x44, 0x22, 0x25, 0x61, 0xd1, 0x01, 0x44, 0x8b, - 0x2f, 0x3f, 0xd1, 0x41, 0x4a, 0xca, 0x74, 0x1b, 0xd1, 0x01, 0x50, 0x39, - 0x61, 0x1c, 0xd1, 0x41, 0x04, 0x29, 0xa8, 0x06, 0x4b, 0xb6, 0x98, 0x05, + 0x2f, 0x3f, 0xd1, 0x41, 0x4a, 0xdf, 0x74, 0x1b, 0xd1, 0x01, 0x50, 0x4e, + 0x61, 0x1c, 0xd1, 0x41, 0x04, 0x3c, 0xa8, 0x06, 0x4b, 0xc9, 0x98, 0x05, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0x31, 0xd1, 0x01, 0x42, 0x50, 0x02, 0x30, 0xd1, 0x41, 0x43, 0x00, 0x1f, 0x0b, 0xd1, 0x01, 0x02, 0x7d, 0x02, 0x01, - 0xff, 0x07, 0x7a, 0xc5, 0x17, 0x07, 0x16, 0xc9, 0x01, 0xff, 0x45, 0x1c, + 0xff, 0x07, 0x96, 0xc5, 0x17, 0x07, 0x32, 0xc9, 0x01, 0xff, 0x45, 0x1c, 0x07, 0xbe, 0xd1, 0x01, 0x44, 0x8b, 0x2f, 0xc6, 0xd1, 0x01, 0x45, 0xad, 0x02, 0xbd, 0xd1, 0x41, 0x45, 0x1c, 0x07, 0xba, 0xd1, 0x01, 0x44, 0x8b, - 0x2f, 0xc4, 0xd1, 0x01, 0x45, 0xad, 0x02, 0xb9, 0xd1, 0x41, 0x47, 0x19, - 0xc3, 0xdb, 0xd1, 0x41, 0xa5, 0x0f, 0xa9, 0x01, 0xff, 0x4f, 0xf0, 0x66, - 0x07, 0xd1, 0x01, 0x49, 0xe4, 0xb2, 0x8c, 0xd1, 0x41, 0x04, 0x87, 0x64, - 0x06, 0x53, 0x2d, 0x49, 0x03, 0xd1, 0x41, 0x45, 0xc4, 0x06, 0x08, 0xd1, - 0x01, 0x0a, 0x15, 0xa1, 0x01, 0xff, 0xd1, 0x0d, 0xd1, 0x01, 0xd2, 0x0e, - 0xd1, 0x01, 0xd3, 0x0f, 0xd1, 0x41, 0x06, 0x12, 0x1b, 0x11, 0x0b, 0x72, - 0x95, 0x01, 0xff, 0x44, 0xfa, 0xe3, 0x38, 0xd1, 0x01, 0x45, 0xf4, 0xd9, + 0x2f, 0xc4, 0xd1, 0x01, 0x45, 0xad, 0x02, 0xb9, 0xd1, 0x41, 0x47, 0x35, + 0xc3, 0xdb, 0xd1, 0x41, 0xa5, 0x0f, 0xa9, 0x01, 0xff, 0x4f, 0x05, 0x67, + 0x07, 0xd1, 0x01, 0x49, 0x00, 0xb3, 0x8c, 0xd1, 0x41, 0x04, 0x9c, 0x64, + 0x06, 0x53, 0x42, 0x49, 0x03, 0xd1, 0x41, 0x45, 0xc4, 0x06, 0x08, 0xd1, + 0x01, 0x0a, 0x28, 0xa1, 0x01, 0xff, 0xd1, 0x0d, 0xd1, 0x01, 0xd2, 0x0e, + 0xd1, 0x01, 0xd3, 0x0f, 0xd1, 0x41, 0x06, 0x12, 0x1b, 0x11, 0x0b, 0x85, + 0x95, 0x01, 0xff, 0x44, 0x16, 0xe4, 0x38, 0xd1, 0x01, 0x45, 0x10, 0xda, 0x39, 0xd1, 0x41, 0x44, 0x22, 0x25, 0x5f, 0xd1, 0x01, 0x44, 0x8b, 0x2f, 0x3d, 0xd1, 0x01, 0x05, 0xdd, 0x29, 0x01, 0xff, 0x44, 0x05, 0x37, 0x33, - 0xd1, 0x01, 0x45, 0x27, 0xa8, 0x32, 0xd1, 0x41, 0x53, 0xde, 0x42, 0x56, - 0xd1, 0x01, 0xa5, 0x22, 0x44, 0x6a, 0xe5, 0x8f, 0xd1, 0x01, 0x4c, 0x00, - 0x8a, 0x44, 0xd1, 0x01, 0xaf, 0x01, 0xff, 0x45, 0xc1, 0xda, 0xd4, 0xd1, - 0x01, 0x47, 0x31, 0xcb, 0xd9, 0xd1, 0xc1, 0x00, 0x47, 0x19, 0xc3, 0xda, - 0xd1, 0x41, 0x04, 0xb7, 0xa6, 0x06, 0x4c, 0x3c, 0x8d, 0xdd, 0xd1, 0x41, - 0x44, 0xb9, 0x00, 0xae, 0xd1, 0x01, 0x47, 0x96, 0xcc, 0xaf, 0xd1, 0x41, - 0x02, 0xd2, 0x04, 0x42, 0x0f, 0x09, 0x6c, 0x11, 0x06, 0x97, 0xb8, 0x01, - 0xff, 0x44, 0xfa, 0xe3, 0x36, 0xd1, 0x01, 0x45, 0xf4, 0xd9, 0x37, 0xd1, + 0xd1, 0x01, 0x45, 0x3a, 0xa8, 0x32, 0xd1, 0x41, 0x53, 0xf3, 0x42, 0x56, + 0xd1, 0x01, 0xa5, 0x22, 0x44, 0x86, 0xe5, 0x8f, 0xd1, 0x01, 0x4c, 0x07, + 0x8a, 0x44, 0xd1, 0x01, 0xaf, 0x01, 0xff, 0x45, 0xdd, 0xda, 0xd4, 0xd1, + 0x01, 0x47, 0x4d, 0xcb, 0xd9, 0xd1, 0xc1, 0x00, 0x47, 0x35, 0xc3, 0xda, + 0xd1, 0x41, 0x04, 0xca, 0xa6, 0x06, 0x4c, 0x4f, 0x8d, 0xdd, 0xd1, 0x41, + 0x44, 0xb9, 0x00, 0xae, 0xd1, 0x01, 0x47, 0xb2, 0xcc, 0xaf, 0xd1, 0x41, + 0x02, 0xd2, 0x04, 0x42, 0x0f, 0x1e, 0x6c, 0x11, 0x06, 0xb3, 0xb8, 0x01, + 0xff, 0x44, 0x16, 0xe4, 0x36, 0xd1, 0x01, 0x45, 0x10, 0xda, 0x37, 0xd1, 0x41, 0xd1, 0x9b, 0xd1, 0x81, 0x20, 0xd2, 0x9c, 0xd1, 0x01, 0xd3, 0x9d, 0xd1, 0x01, 0xd4, 0x9e, 0xd1, 0x01, 0xd5, 0x9f, 0xd1, 0x01, 0xd6, 0xa0, 0xd1, 0x01, 0xd7, 0xa1, 0xd1, 0x01, 0xd8, 0xa2, 0xd1, 0x01, 0xd9, 0xa3, 0xd1, 0x41, 0xd0, 0xa4, 0xd1, 0x01, 0xd1, 0xa5, 0xd1, 0x41, 0x17, 0x2e, - 0x29, 0x06, 0x4b, 0xc9, 0x74, 0x16, 0xd1, 0x41, 0x44, 0x22, 0x25, 0x64, - 0xd1, 0x01, 0x44, 0x8b, 0x2f, 0x42, 0xd1, 0x41, 0x07, 0xcd, 0x8a, 0x12, - 0x4a, 0x0b, 0xa1, 0xa7, 0xd1, 0x01, 0x4d, 0xd5, 0x7f, 0x58, 0xd1, 0x01, - 0x4c, 0x74, 0x8e, 0x59, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0x2f, 0xd1, 0x01, - 0x42, 0x50, 0x02, 0x2e, 0xd1, 0x41, 0x45, 0x26, 0xc5, 0xb6, 0xd1, 0x01, - 0x44, 0xb6, 0xe4, 0x90, 0xd1, 0x01, 0x45, 0x17, 0xc9, 0xbb, 0xd1, 0x81, - 0x21, 0x0d, 0xbb, 0x7f, 0x11, 0x04, 0xbc, 0x03, 0x01, 0xff, 0x45, 0x84, - 0x5f, 0x3a, 0xd1, 0x01, 0x50, 0x79, 0x5f, 0x29, 0xd1, 0x41, 0x45, 0x1c, + 0x29, 0x06, 0x4b, 0xde, 0x74, 0x16, 0xd1, 0x41, 0x44, 0x22, 0x25, 0x64, + 0xd1, 0x01, 0x44, 0x8b, 0x2f, 0x42, 0xd1, 0x41, 0x07, 0xd4, 0x8a, 0x12, + 0x4a, 0x1e, 0xa1, 0xa7, 0xd1, 0x01, 0x4d, 0xdc, 0x7f, 0x58, 0xd1, 0x01, + 0x4c, 0x87, 0x8e, 0x59, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0x2f, 0xd1, 0x01, + 0x42, 0x50, 0x02, 0x2e, 0xd1, 0x41, 0x45, 0x42, 0xc5, 0xb6, 0xd1, 0x01, + 0x44, 0xd2, 0xe4, 0x90, 0xd1, 0x01, 0x45, 0x33, 0xc9, 0xbb, 0xd1, 0x81, + 0x21, 0x0d, 0xc2, 0x7f, 0x11, 0x04, 0xbc, 0x03, 0x01, 0xff, 0x45, 0x99, + 0x5f, 0x3a, 0xd1, 0x01, 0x50, 0x8e, 0x5f, 0x29, 0xd1, 0x41, 0x45, 0x1c, 0x07, 0x53, 0xd1, 0x01, 0x45, 0xad, 0x02, 0x52, 0xd1, 0x41, 0x80, 0x01, 0xff, 0x45, 0x1c, 0x07, 0xbc, 0xd1, 0x01, 0x44, 0x8b, 0x2f, 0xc5, 0xd1, - 0x41, 0x4f, 0x0f, 0x66, 0x06, 0xd1, 0x01, 0x44, 0x0c, 0x44, 0xb7, 0xd1, - 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4f, 0xc2, 0x67, 0xc2, 0xd1, 0x01, 0x4d, - 0xc4, 0x67, 0xc1, 0xd1, 0x41, 0x06, 0x5f, 0xd2, 0x06, 0x44, 0x94, 0x1a, - 0xea, 0xd1, 0x41, 0x46, 0x07, 0xd0, 0xde, 0xd1, 0x01, 0xa5, 0x30, 0xa6, - 0x22, 0x49, 0x0b, 0xb0, 0xe3, 0xd1, 0x01, 0x12, 0x07, 0x4f, 0x0c, 0x4f, - 0x91, 0x6b, 0xe1, 0xd1, 0x01, 0x4a, 0x89, 0xaa, 0xe2, 0xd1, 0x41, 0x44, + 0x41, 0x4f, 0x24, 0x66, 0x06, 0xd1, 0x01, 0x44, 0x21, 0x44, 0xb7, 0xd1, + 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4f, 0xd7, 0x67, 0xc2, 0xd1, 0x01, 0x4d, + 0xd9, 0x67, 0xc1, 0xd1, 0x41, 0x06, 0x7b, 0xd2, 0x06, 0x44, 0x94, 0x1a, + 0xea, 0xd1, 0x41, 0x46, 0x23, 0xd0, 0xde, 0xd1, 0x01, 0xa5, 0x30, 0xa6, + 0x22, 0x49, 0x27, 0xb0, 0xe3, 0xd1, 0x01, 0x12, 0x1c, 0x4f, 0x0c, 0x4f, + 0xa6, 0x6b, 0xe1, 0xd1, 0x01, 0x4a, 0x9c, 0xaa, 0xe2, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0xe4, 0xd1, 0x01, 0x42, 0x50, 0x02, 0xe5, 0xd1, 0x41, 0x49, - 0x07, 0xb1, 0xe0, 0xd1, 0x01, 0x48, 0xc4, 0xaf, 0xe8, 0xd1, 0x41, 0x10, - 0x89, 0x5d, 0x06, 0x4b, 0xcf, 0x97, 0xdf, 0xd1, 0x41, 0x44, 0xa5, 0x01, + 0x23, 0xb1, 0xe0, 0xd1, 0x01, 0x48, 0xe0, 0xaf, 0xe8, 0xd1, 0x41, 0x10, + 0x9e, 0x5d, 0x06, 0x4b, 0xe2, 0x97, 0xdf, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0xe6, 0xd1, 0x01, 0x42, 0x50, 0x02, 0xe7, 0xd1, 0x41, 0x03, 0x24, 0x00, - 0x06, 0x49, 0xcb, 0xb6, 0xa6, 0xd1, 0x41, 0x44, 0x22, 0x25, 0x5e, 0xd1, - 0x01, 0x4a, 0xb5, 0xa6, 0xb0, 0xd1, 0x01, 0x44, 0x8b, 0x2f, 0x3c, 0xd1, - 0x41, 0x45, 0x78, 0xb5, 0x1e, 0xd1, 0x81, 0x34, 0x09, 0x1e, 0xb2, 0x24, - 0xb2, 0x01, 0xff, 0x09, 0x87, 0xac, 0x11, 0x08, 0xcd, 0xbb, 0x01, 0xff, - 0x46, 0x07, 0xd0, 0xd0, 0xd1, 0x01, 0x46, 0x4b, 0xd1, 0xd1, 0xd1, 0x41, - 0x48, 0xf5, 0xbe, 0x95, 0xd1, 0x01, 0x45, 0xa0, 0x0c, 0x94, 0xd1, 0x41, + 0x06, 0x49, 0xe7, 0xb6, 0xa6, 0xd1, 0x41, 0x44, 0x22, 0x25, 0x5e, 0xd1, + 0x01, 0x4a, 0xc8, 0xa6, 0xb0, 0xd1, 0x01, 0x44, 0x8b, 0x2f, 0x3c, 0xd1, + 0x41, 0x45, 0x94, 0xb5, 0x1e, 0xd1, 0x81, 0x34, 0x09, 0x3a, 0xb2, 0x24, + 0xb2, 0x01, 0xff, 0x09, 0x9a, 0xac, 0x11, 0x08, 0xe9, 0xbb, 0x01, 0xff, + 0x46, 0x23, 0xd0, 0xd0, 0xd1, 0x01, 0x46, 0x67, 0xd1, 0xd1, 0xd1, 0x41, + 0x48, 0x11, 0xbf, 0x95, 0xd1, 0x01, 0x45, 0xa0, 0x0c, 0x94, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0xb2, 0xd1, 0x01, 0x42, 0x50, 0x02, 0xb1, 0xd1, 0x41, - 0x08, 0x95, 0xb8, 0x01, 0xff, 0x44, 0xfa, 0xe3, 0x1f, 0xd1, 0x01, 0x45, - 0xf4, 0xd9, 0x20, 0xd1, 0x41, 0x45, 0x78, 0xb5, 0x22, 0xd1, 0x81, 0x68, - 0x46, 0x09, 0xd1, 0x10, 0xd1, 0x81, 0x5b, 0xa9, 0x3a, 0x04, 0xc4, 0xaf, - 0x2a, 0xaf, 0x11, 0x04, 0xb6, 0xe7, 0x01, 0xff, 0x45, 0x1c, 0x07, 0xc0, + 0x08, 0xb1, 0xb8, 0x01, 0xff, 0x44, 0x16, 0xe4, 0x1f, 0xd1, 0x01, 0x45, + 0x10, 0xda, 0x20, 0xd1, 0x41, 0x45, 0x94, 0xb5, 0x22, 0xd1, 0x81, 0x68, + 0x46, 0x25, 0xd1, 0x10, 0xd1, 0x81, 0x5b, 0xa9, 0x3a, 0x04, 0xe0, 0xaf, + 0x2a, 0xaf, 0x11, 0x04, 0xd2, 0xe7, 0x01, 0xff, 0x45, 0x1c, 0x07, 0xc0, 0xd1, 0x01, 0x45, 0xad, 0x02, 0xbf, 0xd1, 0x41, 0x43, 0x2d, 0x01, 0x91, - 0xd1, 0x01, 0x03, 0xd4, 0xb6, 0x01, 0xff, 0x4a, 0xca, 0x74, 0x19, 0xd1, - 0x01, 0x50, 0x39, 0x61, 0x1d, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0x2d, 0xd1, - 0x01, 0x42, 0x50, 0x02, 0x2c, 0xd1, 0x41, 0xae, 0x06, 0x4d, 0x79, 0x82, - 0x1a, 0xd1, 0x41, 0x4a, 0x36, 0x49, 0x02, 0xd1, 0x01, 0x0e, 0x2a, 0x71, + 0xd1, 0x01, 0x03, 0xf0, 0xb6, 0x01, 0xff, 0x4a, 0xdf, 0x74, 0x19, 0xd1, + 0x01, 0x50, 0x4e, 0x61, 0x1d, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0x2d, 0xd1, + 0x01, 0x42, 0x50, 0x02, 0x2c, 0xd1, 0x41, 0xae, 0x06, 0x4d, 0x80, 0x82, + 0x1a, 0xd1, 0x41, 0x4a, 0x4b, 0x49, 0x02, 0xd1, 0x01, 0x0e, 0x3f, 0x71, 0x01, 0xff, 0xd1, 0x6a, 0xd1, 0x01, 0xd2, 0x6b, 0xd1, 0x01, 0xd3, 0x6c, - 0xd1, 0x41, 0x46, 0x24, 0x06, 0x11, 0xd1, 0x41, 0x08, 0x95, 0xb8, 0x01, - 0xff, 0x44, 0xfa, 0xe3, 0x23, 0xd1, 0x01, 0x45, 0xf4, 0xd9, 0x24, 0xd1, - 0x41, 0x06, 0xd2, 0x09, 0x23, 0x03, 0x1b, 0x00, 0x01, 0xff, 0x44, 0x52, - 0xd7, 0x74, 0xd1, 0x01, 0x49, 0x86, 0xb3, 0xa8, 0xd1, 0x01, 0x46, 0x82, - 0x31, 0x7a, 0xd1, 0x01, 0x44, 0x7e, 0xe7, 0x78, 0xd1, 0x01, 0x43, 0x23, + 0xd1, 0x41, 0x46, 0x24, 0x06, 0x11, 0xd1, 0x41, 0x08, 0xb1, 0xb8, 0x01, + 0xff, 0x44, 0x16, 0xe4, 0x23, 0xd1, 0x01, 0x45, 0x10, 0xda, 0x24, 0xd1, + 0x41, 0x06, 0xd2, 0x09, 0x23, 0x03, 0x1b, 0x00, 0x01, 0xff, 0x44, 0x6e, + 0xd7, 0x74, 0xd1, 0x01, 0x49, 0xa2, 0xb3, 0xa8, 0xd1, 0x01, 0x46, 0x82, + 0x31, 0x7a, 0xd1, 0x01, 0x44, 0x9a, 0xe7, 0x78, 0xd1, 0x01, 0x43, 0x23, 0x23, 0x76, 0xd1, 0x41, 0x44, 0x22, 0x25, 0x60, 0xd1, 0x01, 0x44, 0x8b, 0x2f, 0x3e, 0xd1, 0x41, 0xa1, 0x31, 0xa5, 0x23, 0x06, 0x3c, 0x01, 0x0d, - 0x09, 0x75, 0xb5, 0x01, 0xff, 0xd1, 0x25, 0xd1, 0x01, 0xd2, 0x26, 0xd1, - 0x41, 0x47, 0x39, 0x49, 0x01, 0xd1, 0x01, 0x44, 0x05, 0x37, 0x2b, 0xd1, - 0x01, 0x45, 0x27, 0xa8, 0x2a, 0xd1, 0x41, 0x49, 0x52, 0xae, 0x93, 0xd1, - 0x01, 0x4a, 0x5f, 0xa2, 0xa9, 0xd1, 0x41, 0x45, 0xfc, 0xd6, 0x0a, 0xd1, - 0x01, 0x47, 0x67, 0xc8, 0x09, 0xd1, 0x01, 0x42, 0xda, 0x19, 0xb4, 0xd1, - 0x81, 0x06, 0x4c, 0x6c, 0x8d, 0x04, 0xd1, 0x41, 0x44, 0x7b, 0x65, 0xb5, - 0xd1, 0x41, 0x45, 0x78, 0xb5, 0x21, 0xd1, 0x01, 0x46, 0x3b, 0xcf, 0x13, - 0xd1, 0x01, 0x50, 0xe9, 0x5d, 0x45, 0xd1, 0x01, 0xac, 0xef, 0x01, 0xaf, - 0x14, 0xb2, 0x06, 0x47, 0xce, 0xcc, 0x35, 0xd1, 0x41, 0x47, 0x54, 0xae, - 0x92, 0xd1, 0x01, 0x43, 0x48, 0xe9, 0xcf, 0xd1, 0x41, 0x42, 0x68, 0x0f, - 0x0c, 0xd1, 0x01, 0xad, 0x01, 0xff, 0x07, 0x54, 0x14, 0x06, 0x48, 0x85, - 0xbe, 0x34, 0xd1, 0x41, 0xa1, 0xb0, 0x01, 0x44, 0xae, 0x92, 0x89, 0xd1, - 0x01, 0x02, 0x3b, 0x01, 0x93, 0x01, 0x02, 0xda, 0x03, 0x71, 0x48, 0xed, - 0xbc, 0xac, 0xd1, 0x01, 0x45, 0x78, 0xdd, 0x82, 0xd1, 0x01, 0x47, 0xec, - 0xc8, 0x7f, 0xd1, 0x81, 0x58, 0x43, 0x7b, 0x05, 0x86, 0xd1, 0x01, 0xb3, - 0x27, 0xb4, 0x06, 0x46, 0x5b, 0xd6, 0xab, 0xd1, 0x41, 0x45, 0x75, 0x76, - 0x7d, 0xd1, 0x01, 0xb2, 0x01, 0xff, 0x06, 0x32, 0x71, 0x06, 0x4b, 0x7d, + 0x09, 0x91, 0xb5, 0x01, 0xff, 0xd1, 0x25, 0xd1, 0x01, 0xd2, 0x26, 0xd1, + 0x41, 0x47, 0x4e, 0x49, 0x01, 0xd1, 0x01, 0x44, 0x05, 0x37, 0x2b, 0xd1, + 0x01, 0x45, 0x3a, 0xa8, 0x2a, 0xd1, 0x41, 0x49, 0x6e, 0xae, 0x93, 0xd1, + 0x01, 0x4a, 0x72, 0xa2, 0xa9, 0xd1, 0x41, 0x45, 0x18, 0xd7, 0x0a, 0xd1, + 0x01, 0x47, 0x83, 0xc8, 0x09, 0xd1, 0x01, 0x42, 0xda, 0x19, 0xb4, 0xd1, + 0x81, 0x06, 0x4c, 0x7f, 0x8d, 0x04, 0xd1, 0x41, 0x44, 0x90, 0x65, 0xb5, + 0xd1, 0x41, 0x45, 0x94, 0xb5, 0x21, 0xd1, 0x01, 0x46, 0x57, 0xcf, 0x13, + 0xd1, 0x01, 0x50, 0xfe, 0x5d, 0x45, 0xd1, 0x01, 0xac, 0xef, 0x01, 0xaf, + 0x14, 0xb2, 0x06, 0x47, 0xea, 0xcc, 0x35, 0xd1, 0x41, 0x47, 0x70, 0xae, + 0x92, 0xd1, 0x01, 0x43, 0x64, 0xe9, 0xcf, 0xd1, 0x41, 0x42, 0x68, 0x0f, + 0x0c, 0xd1, 0x01, 0xad, 0x01, 0xff, 0x07, 0x54, 0x14, 0x06, 0x48, 0xa1, + 0xbe, 0x34, 0xd1, 0x41, 0xa1, 0xb0, 0x01, 0x44, 0xc1, 0x92, 0x89, 0xd1, + 0x01, 0x02, 0x3b, 0x01, 0x93, 0x01, 0x02, 0xda, 0x03, 0x71, 0x48, 0x09, + 0xbd, 0xac, 0xd1, 0x01, 0x45, 0x94, 0xdd, 0x82, 0xd1, 0x01, 0x47, 0x08, + 0xc9, 0x7f, 0xd1, 0x81, 0x58, 0x43, 0x7b, 0x05, 0x86, 0xd1, 0x01, 0xb3, + 0x27, 0xb4, 0x06, 0x46, 0x77, 0xd6, 0xab, 0xd1, 0x41, 0x45, 0x7c, 0x76, + 0x7d, 0xd1, 0x01, 0xb2, 0x01, 0xff, 0x06, 0x47, 0x71, 0x06, 0x4b, 0x90, 0x95, 0x8b, 0xd1, 0x41, 0xd1, 0x67, 0xd1, 0x01, 0xd2, 0x68, 0xd1, 0x01, - 0xd3, 0x69, 0xd1, 0x41, 0x44, 0xf6, 0xa0, 0x88, 0xd1, 0x01, 0x4d, 0xf8, - 0x7e, 0xad, 0xd1, 0x01, 0x50, 0xa9, 0x5f, 0x66, 0xd1, 0x01, 0xb4, 0x01, - 0xff, 0x05, 0x27, 0xac, 0x06, 0x42, 0xba, 0x04, 0x65, 0xd1, 0x41, 0x46, - 0xb3, 0xd2, 0x7e, 0xd1, 0x01, 0xef, 0x7c, 0xd1, 0x41, 0x49, 0x24, 0xac, - 0x80, 0xd1, 0x41, 0x03, 0xff, 0x51, 0x06, 0x42, 0xbf, 0x03, 0x87, 0xd1, + 0xd3, 0x69, 0xd1, 0x41, 0x44, 0x09, 0xa1, 0x88, 0xd1, 0x01, 0x4d, 0xff, + 0x7e, 0xad, 0xd1, 0x01, 0x50, 0xbe, 0x5f, 0x66, 0xd1, 0x01, 0xb4, 0x01, + 0xff, 0x05, 0x3a, 0xac, 0x06, 0x42, 0xba, 0x04, 0x65, 0xd1, 0x41, 0x46, + 0xcf, 0xd2, 0x7e, 0xd1, 0x01, 0xef, 0x7c, 0xd1, 0x41, 0x49, 0x37, 0xac, + 0x80, 0xd1, 0x41, 0x03, 0x14, 0x52, 0x06, 0x42, 0xbf, 0x03, 0x87, 0xd1, 0x41, 0xd1, 0x6e, 0xd1, 0x01, 0xd2, 0x6f, 0xd1, 0x01, 0xd3, 0x70, 0xd1, 0x01, 0xd4, 0x71, 0xd1, 0x01, 0xd5, 0x72, 0xd1, 0x41, 0x42, 0x52, 0x00, - 0x85, 0xd1, 0x01, 0x4b, 0xad, 0x9b, 0x8a, 0xd1, 0x01, 0x46, 0xa3, 0xd6, - 0xaa, 0xd1, 0x41, 0x45, 0xe0, 0x03, 0x7b, 0xd1, 0x81, 0x06, 0x4f, 0x62, - 0x6d, 0x6d, 0xd1, 0x41, 0x49, 0x24, 0xac, 0x81, 0xd1, 0x41, 0xa9, 0x11, - 0x0f, 0x9e, 0x6d, 0x01, 0xff, 0x45, 0x1c, 0x07, 0x5b, 0xd1, 0x01, 0x45, - 0xad, 0x02, 0x5a, 0xd1, 0x41, 0x45, 0x96, 0xdd, 0xd7, 0xd1, 0x01, 0x43, - 0xdb, 0x2e, 0xd5, 0xd1, 0x41, 0x05, 0x0a, 0x3b, 0x2e, 0xb2, 0x01, 0xff, - 0x02, 0xdf, 0x03, 0x1d, 0xa5, 0x01, 0xff, 0x48, 0x1d, 0xba, 0x12, 0xd1, + 0x85, 0xd1, 0x01, 0x4b, 0xc0, 0x9b, 0x8a, 0xd1, 0x01, 0x46, 0xbf, 0xd6, + 0xaa, 0xd1, 0x41, 0x45, 0xe0, 0x03, 0x7b, 0xd1, 0x81, 0x06, 0x4f, 0x77, + 0x6d, 0x6d, 0xd1, 0x41, 0x49, 0x37, 0xac, 0x81, 0xd1, 0x41, 0xa9, 0x11, + 0x0f, 0xb3, 0x6d, 0x01, 0xff, 0x45, 0x1c, 0x07, 0x5b, 0xd1, 0x01, 0x45, + 0xad, 0x02, 0x5a, 0xd1, 0x41, 0x45, 0xb2, 0xdd, 0xd7, 0xd1, 0x01, 0x43, + 0xdb, 0x2e, 0xd5, 0xd1, 0x41, 0x05, 0x1f, 0x3b, 0x2e, 0xb2, 0x01, 0xff, + 0x02, 0xdf, 0x03, 0x1d, 0xa5, 0x01, 0xff, 0x48, 0x39, 0xba, 0x12, 0xd1, 0x01, 0xb6, 0x01, 0xff, 0xe5, 0x5c, 0xd1, 0x01, 0x42, 0xe0, 0x02, 0xb8, - 0xd1, 0xc1, 0x00, 0x45, 0x84, 0x5f, 0xc3, 0xd1, 0x41, 0xe5, 0x14, 0xd1, - 0x01, 0x43, 0x49, 0x08, 0x15, 0xd1, 0x41, 0x44, 0x52, 0xd7, 0x73, 0xd1, - 0x01, 0x46, 0x82, 0x31, 0x79, 0xd1, 0x01, 0x44, 0x7e, 0xe7, 0x77, 0xd1, + 0xd1, 0xc1, 0x00, 0x45, 0x99, 0x5f, 0xc3, 0xd1, 0x41, 0xe5, 0x14, 0xd1, + 0x01, 0x43, 0x49, 0x08, 0x15, 0xd1, 0x41, 0x44, 0x6e, 0xd7, 0x73, 0xd1, + 0x01, 0x46, 0x82, 0x31, 0x79, 0xd1, 0x01, 0x44, 0x9a, 0xe7, 0x77, 0xd1, 0x01, 0x43, 0x23, 0x23, 0x75, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0x84, 0xd1, - 0x01, 0x42, 0x50, 0x02, 0x83, 0xd1, 0x41, 0x4b, 0x29, 0x90, 0x98, 0xf3, - 0x41, 0x49, 0xc3, 0xaf, 0x6d, 0x26, 0x00, 0x4c, 0xcc, 0x8a, 0x6e, 0x26, - 0x00, 0x4a, 0x27, 0xa8, 0x6f, 0x26, 0x40, 0x04, 0xf4, 0x93, 0x69, 0xa9, - 0x01, 0xff, 0x43, 0x65, 0x65, 0xb8, 0x22, 0x00, 0x02, 0xc0, 0x03, 0x16, + 0x01, 0x42, 0x50, 0x02, 0x83, 0xd1, 0x41, 0x4b, 0x3c, 0x90, 0x98, 0xf3, + 0x41, 0x49, 0xdf, 0xaf, 0x6d, 0x26, 0x00, 0x4c, 0xd3, 0x8a, 0x6e, 0x26, + 0x00, 0x4a, 0x3a, 0xa8, 0x6f, 0x26, 0x40, 0x04, 0x07, 0x94, 0x69, 0xa9, + 0x01, 0xff, 0x43, 0x7a, 0x65, 0xb8, 0x22, 0x00, 0x02, 0xc0, 0x03, 0x16, 0x43, 0xf6, 0x10, 0x8c, 0x22, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4e, 0x60, - 0x22, 0x8d, 0x22, 0x00, 0x45, 0x6c, 0x15, 0x8e, 0x22, 0x40, 0x4f, 0xf1, - 0x65, 0xb6, 0xf3, 0x01, 0x08, 0xc2, 0x03, 0x01, 0xff, 0x44, 0xdb, 0x02, + 0x22, 0x8d, 0x22, 0x00, 0x45, 0x6c, 0x15, 0x8e, 0x22, 0x40, 0x4f, 0x06, + 0x66, 0xb6, 0xf3, 0x01, 0x08, 0xc2, 0x03, 0x01, 0xff, 0x44, 0xdb, 0x02, 0xd7, 0x00, 0x80, 0x04, 0xf8, 0x15, 0x27, 0x40, 0x80, 0x01, 0xff, 0x03, 0xe6, 0x04, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0xec, 0x1b, 0x30, - 0x2a, 0x00, 0x48, 0x3b, 0x54, 0x31, 0x2a, 0x40, 0x4d, 0x02, 0x7b, 0x37, - 0x2a, 0x00, 0x50, 0x49, 0x5e, 0x34, 0x2a, 0x00, 0x51, 0xb7, 0x57, 0x35, + 0x2a, 0x00, 0x48, 0x50, 0x54, 0x31, 0x2a, 0x40, 0x4d, 0x09, 0x7b, 0x37, + 0x2a, 0x00, 0x50, 0x5e, 0x5e, 0x34, 0x2a, 0x00, 0x51, 0xcc, 0x57, 0x35, 0x2a, 0x00, 0x48, 0x01, 0x02, 0x3b, 0x2a, 0x40, 0x07, 0xf1, 0x04, 0x06, 0x4c, 0x11, 0x24, 0xa9, 0x12, 0x41, 0xe1, 0x80, 0x12, 0x01, 0xa2, 0xca, 0x01, 0xa3, 0xbd, 0x01, 0xa4, 0x9e, 0x01, 0xe5, 0x83, 0x12, 0x01, 0xa7, @@ -6794,48 +6795,48 @@ static const unsigned char uname2c_tree[210697] = { 0x22, 0x00, 0x80, 0x01, 0xab, 0x6e, 0x42, 0x74, 0x00, 0x5b, 0x6a, 0x81, 0x63, 0xad, 0x55, 0xae, 0x47, 0xef, 0x52, 0x6a, 0x81, 0x3a, 0xb0, 0x2e, 0xb2, 0x24, 0x43, 0x1d, 0x0b, 0x54, 0x6a, 0x01, 0xb4, 0x0c, 0x42, 0xa9, - 0x01, 0x57, 0x6a, 0x01, 0x42, 0x39, 0x42, 0x42, 0x6a, 0x41, 0xe1, 0x40, + 0x01, 0x57, 0x6a, 0x01, 0x42, 0x4e, 0x42, 0x42, 0x6a, 0x41, 0xe1, 0x40, 0x6a, 0x01, 0x42, 0xd8, 0x16, 0x5e, 0x6a, 0x01, 0x43, 0xe6, 0x01, 0x55, 0x6a, 0x41, 0xe9, 0x5d, 0x6a, 0x01, 0xef, 0x53, 0x6a, 0x41, 0xe1, 0x50, 0x6a, 0x01, 0x42, 0x49, 0x00, 0x47, 0x6a, 0x41, 0xec, 0x4d, 0x6a, 0x01, 0xef, 0x51, 0x6a, 0x41, 0x42, 0xf6, 0x05, 0x41, 0x6a, 0x01, 0x42, 0x9e, - 0x01, 0x4f, 0x6a, 0x41, 0x43, 0x06, 0x80, 0x4e, 0x6a, 0x01, 0x42, 0x29, - 0x02, 0x43, 0x6a, 0x41, 0xee, 0x5a, 0x6a, 0x41, 0x44, 0x9a, 0xe4, 0x4c, - 0x6a, 0x01, 0x43, 0x7f, 0x4c, 0x48, 0x6a, 0x01, 0xef, 0x59, 0x6a, 0x41, + 0x01, 0x4f, 0x6a, 0x41, 0x43, 0x0d, 0x80, 0x4e, 0x6a, 0x01, 0x42, 0x29, + 0x02, 0x43, 0x6a, 0x41, 0xee, 0x5a, 0x6a, 0x41, 0x44, 0xb6, 0xe4, 0x4c, + 0x6a, 0x01, 0x43, 0x94, 0x4c, 0x48, 0x6a, 0x01, 0xef, 0x59, 0x6a, 0x41, 0xe9, 0x5c, 0x6a, 0x01, 0xef, 0x49, 0x6a, 0x41, 0xe1, 0x56, 0x6a, 0x41, 0xe9, 0x4a, 0x6a, 0x41, 0x44, 0x0b, 0x1e, 0x6e, 0x6a, 0x01, 0x05, 0xf5, - 0x05, 0x06, 0x4b, 0xcc, 0x98, 0x6f, 0x6a, 0x41, 0x45, 0xd1, 0x09, 0x68, + 0x05, 0x06, 0x4b, 0xdf, 0x98, 0x6f, 0x6a, 0x41, 0x45, 0xd1, 0x09, 0x68, 0x6a, 0x01, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x69, 0x6a, 0x01, 0x43, 0xcd, 0x09, 0x61, 0x6a, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x60, 0x6a, 0x41, 0x44, 0x25, 0x01, 0x63, 0x6a, 0x01, 0x42, 0x15, 0x02, 0x62, 0x6a, 0x41, 0x44, 0x96, 0x1b, 0x67, 0x6a, 0x01, 0x42, 0x30, 0x27, 0x66, 0x6a, 0x41, 0x43, 0xd7, 0x04, 0x65, 0x6a, 0x01, 0x43, 0xfb, 0x05, 0x64, - 0x6a, 0x41, 0x4a, 0xcc, 0x45, 0xf1, 0xf4, 0x81, 0xfc, 0x1e, 0xa4, 0xc5, + 0x6a, 0x41, 0x4a, 0xe1, 0x45, 0xf1, 0xf4, 0x81, 0xfc, 0x1e, 0xa4, 0xc5, 0x0a, 0xae, 0xa4, 0x01, 0xaf, 0x85, 0x01, 0x03, 0xdb, 0x04, 0x77, 0xb4, - 0x50, 0xb5, 0x0c, 0x4a, 0x57, 0xaa, 0xa5, 0xf3, 0x01, 0x43, 0xa6, 0x71, + 0x50, 0xb5, 0x0c, 0x4a, 0x6a, 0xaa, 0xa5, 0xf3, 0x01, 0x43, 0xbb, 0x71, 0xff, 0xf5, 0x41, 0x02, 0x11, 0x00, 0x1c, 0x42, 0xc7, 0x02, 0x01, 0xf4, 0x81, 0x06, 0x42, 0x53, 0x00, 0x44, 0xf4, 0x41, 0x80, 0x01, 0xff, 0x44, - 0xed, 0x06, 0x2d, 0xf4, 0x01, 0x44, 0x13, 0xd6, 0xa4, 0xfa, 0x41, 0x45, - 0x10, 0xd7, 0xfb, 0xf5, 0x01, 0x43, 0x35, 0x06, 0xf0, 0x26, 0xc0, 0x00, - 0x80, 0x01, 0xff, 0x49, 0x95, 0xad, 0xb5, 0xf6, 0x01, 0x48, 0xbd, 0xba, - 0xa0, 0xf6, 0x01, 0x47, 0x03, 0x6b, 0x9e, 0xf6, 0x41, 0x4d, 0x25, 0x76, - 0x36, 0xf9, 0x01, 0x02, 0x0c, 0x00, 0x01, 0xff, 0x80, 0x0c, 0x4f, 0x3a, - 0x68, 0xbc, 0xf9, 0x01, 0x43, 0x9c, 0x1d, 0xe3, 0xf6, 0x41, 0x44, 0x6d, - 0xd2, 0xe5, 0xf6, 0x01, 0x47, 0x70, 0xcb, 0xf5, 0xf6, 0x41, 0xe5, 0x4c, - 0xf5, 0x01, 0x43, 0xba, 0x5b, 0x9f, 0xf9, 0x41, 0x48, 0x3d, 0xbb, 0xf0, + 0xed, 0x06, 0x2d, 0xf4, 0x01, 0x44, 0x2f, 0xd6, 0xa4, 0xfa, 0x41, 0x45, + 0x2c, 0xd7, 0xfb, 0xf5, 0x01, 0x43, 0x35, 0x06, 0xf0, 0x26, 0xc0, 0x00, + 0x80, 0x01, 0xff, 0x49, 0xa8, 0xad, 0xb5, 0xf6, 0x01, 0x48, 0xd9, 0xba, + 0xa0, 0xf6, 0x01, 0x47, 0x18, 0x6b, 0x9e, 0xf6, 0x41, 0x4d, 0x2c, 0x76, + 0x36, 0xf9, 0x01, 0x02, 0x0c, 0x00, 0x01, 0xff, 0x80, 0x0c, 0x4f, 0x4f, + 0x68, 0xbc, 0xf9, 0x01, 0x43, 0x9c, 0x1d, 0xe3, 0xf6, 0x41, 0x44, 0x89, + 0xd2, 0xe5, 0xf6, 0x01, 0x47, 0x8c, 0xcb, 0xf5, 0xf6, 0x41, 0xe5, 0x4c, + 0xf5, 0x01, 0x43, 0xcf, 0x5b, 0x9f, 0xf9, 0x41, 0x48, 0x59, 0xbb, 0xf0, 0xf5, 0x01, 0x02, 0x92, 0x00, 0x06, 0x42, 0xc7, 0x02, 0xce, 0xfa, 0x41, - 0x44, 0x18, 0x29, 0x6e, 0xf9, 0x01, 0x50, 0x19, 0x62, 0x91, 0xf3, 0x41, - 0x02, 0xae, 0x1a, 0x85, 0x09, 0x07, 0x2c, 0xc7, 0x35, 0x43, 0x6d, 0x21, - 0x12, 0xf4, 0x81, 0x28, 0xaf, 0x01, 0xff, 0x09, 0x2f, 0x8e, 0x0c, 0x44, - 0xe0, 0x46, 0x9d, 0xf6, 0x01, 0x4d, 0x75, 0x81, 0x8d, 0x23, 0x40, 0x45, - 0x8c, 0x6b, 0x00, 0xd3, 0x01, 0xb9, 0x01, 0xff, 0x43, 0x1c, 0x01, 0x8a, + 0x44, 0x18, 0x29, 0x6e, 0xf9, 0x01, 0x50, 0x2e, 0x62, 0x91, 0xf3, 0x41, + 0x02, 0xae, 0x1a, 0x85, 0x09, 0x07, 0x48, 0xc7, 0x35, 0x43, 0x6d, 0x21, + 0x12, 0xf4, 0x81, 0x28, 0xaf, 0x01, 0xff, 0x09, 0x42, 0x8e, 0x0c, 0x44, + 0xf5, 0x46, 0x9d, 0xf6, 0x01, 0x4d, 0x7c, 0x81, 0x8d, 0x23, 0x40, 0x45, + 0xa1, 0x6b, 0x00, 0xd3, 0x01, 0xb9, 0x01, 0xff, 0x43, 0x1c, 0x01, 0x8a, 0x26, 0x00, 0x42, 0x9e, 0x01, 0x8b, 0x26, 0x40, 0x45, 0xec, 0x06, 0x35, 0xf4, 0x41, 0x45, 0x82, 0x06, 0x00, 0x18, 0x80, 0xb3, 0x08, 0x02, 0x18, 0x04, 0xa2, 0x08, 0xa4, 0xd3, 0x07, 0x48, 0xcf, 0x26, 0x01, 0x18, 0x00, - 0xa6, 0x9f, 0x07, 0x4e, 0xe0, 0x71, 0x67, 0x16, 0x81, 0x91, 0x07, 0x07, - 0xf1, 0x04, 0x68, 0x07, 0xe5, 0xc8, 0x58, 0x46, 0xc7, 0xd3, 0x0a, 0x18, - 0x00, 0x4d, 0x98, 0x80, 0x61, 0x16, 0x81, 0x3a, 0xb3, 0x1a, 0xb4, 0x06, - 0x4f, 0xbc, 0x6d, 0x0e, 0x18, 0x40, 0x4f, 0x38, 0x6a, 0x06, 0x18, 0x00, + 0xa6, 0x9f, 0x07, 0x4e, 0xf5, 0x71, 0x67, 0x16, 0x81, 0x91, 0x07, 0x07, + 0xf1, 0x04, 0x68, 0x07, 0x01, 0xc9, 0x58, 0x46, 0xe3, 0xd3, 0x0a, 0x18, + 0x00, 0x4d, 0x9f, 0x80, 0x61, 0x16, 0x81, 0x3a, 0xb3, 0x1a, 0xb4, 0x06, + 0x4f, 0xd1, 0x6d, 0x0e, 0x18, 0x40, 0x4f, 0x4d, 0x6a, 0x06, 0x18, 0x00, 0x59, 0x41, 0x23, 0x63, 0x16, 0x01, 0x66, 0x76, 0x06, 0x6c, 0x16, 0x41, 0x5c, 0x35, 0x16, 0x07, 0x18, 0x00, 0x4a, 0x7d, 0x06, 0x69, 0x16, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4f, 0x8d, 0x06, 0x6b, 0x16, 0x01, @@ -6845,7 +6846,7 @@ static const unsigned char uname2c_tree[210697] = { 0x20, 0x18, 0x80, 0xef, 0x04, 0x42, 0x16, 0x00, 0x2a, 0x18, 0x00, 0x02, 0x98, 0x14, 0xd5, 0x04, 0x42, 0x68, 0x0f, 0x33, 0x18, 0x00, 0xe5, 0x21, 0x18, 0x80, 0xc5, 0x04, 0x42, 0xed, 0x06, 0x39, 0x18, 0x00, 0x42, 0x24, - 0x02, 0x2d, 0x18, 0x00, 0x43, 0x6b, 0x3c, 0x3e, 0x18, 0x00, 0xe9, 0x22, + 0x02, 0x2d, 0x18, 0x00, 0x43, 0x80, 0x3c, 0x3e, 0x18, 0x00, 0xe9, 0x22, 0x18, 0x00, 0x42, 0x77, 0x24, 0x35, 0x18, 0x00, 0xab, 0x9c, 0x04, 0xac, 0x8f, 0x04, 0x42, 0x6c, 0x00, 0x2e, 0x18, 0x80, 0x8b, 0x03, 0x42, 0x2f, 0x04, 0x28, 0x18, 0x00, 0xef, 0x23, 0x18, 0x80, 0xfb, 0x02, 0x42, 0xc1, @@ -6854,12 +6855,12 @@ static const unsigned char uname2c_tree[210697] = { 0x80, 0x1f, 0x42, 0xa9, 0x01, 0x38, 0x18, 0x00, 0x42, 0x20, 0x20, 0x36, 0x18, 0x00, 0xba, 0x01, 0xff, 0xe1, 0x3d, 0x18, 0x00, 0x42, 0x49, 0x00, 0x41, 0x18, 0x00, 0x42, 0x71, 0x00, 0x3f, 0x18, 0x40, 0xe5, 0x26, 0x18, - 0x40, 0xe1, 0x32, 0x18, 0x00, 0x04, 0x38, 0x6a, 0x06, 0x42, 0x45, 0x05, + 0x40, 0xe1, 0x32, 0x18, 0x00, 0x04, 0x4d, 0x6a, 0x06, 0x42, 0x45, 0x05, 0x3c, 0x18, 0x40, 0xa1, 0x8b, 0x01, 0x42, 0x16, 0x00, 0x4b, 0x18, 0x00, 0x43, 0x29, 0x1e, 0x52, 0x18, 0x00, 0xa4, 0x73, 0xe5, 0x44, 0x18, 0x00, - 0x42, 0x24, 0x02, 0x4e, 0x18, 0x80, 0x64, 0x43, 0x6b, 0x3c, 0x59, 0x18, + 0x42, 0x24, 0x02, 0x4e, 0x18, 0x80, 0x64, 0x43, 0x80, 0x3c, 0x59, 0x18, 0x00, 0xe9, 0x45, 0x18, 0x00, 0xaa, 0x4e, 0x42, 0x1b, 0x02, 0x57, 0x18, - 0x00, 0x4f, 0x1b, 0x69, 0x43, 0x18, 0x00, 0x42, 0x6c, 0x00, 0x4f, 0x18, + 0x00, 0x4f, 0x30, 0x69, 0x43, 0x18, 0x00, 0x42, 0x6c, 0x00, 0x4f, 0x18, 0x00, 0x43, 0x9b, 0x07, 0x5b, 0x18, 0x00, 0xef, 0x46, 0x18, 0x80, 0x2d, 0x42, 0xc1, 0x08, 0x4c, 0x18, 0x00, 0x42, 0x9d, 0x12, 0x4d, 0x18, 0x00, 0xb4, 0x15, 0xf5, 0x47, 0x18, 0x80, 0x0c, 0x42, 0xa9, 0x01, 0x56, 0x18, @@ -6867,49 +6868,49 @@ static const unsigned char uname2c_tree[210697] = { 0x50, 0x18, 0x00, 0x42, 0x45, 0x05, 0x54, 0x18, 0x40, 0xe5, 0x48, 0x18, 0x40, 0xe1, 0x53, 0x18, 0x00, 0x42, 0x1b, 0x01, 0x5a, 0x18, 0x40, 0xe1, 0x58, 0x18, 0x40, 0xe1, 0x51, 0x18, 0x00, 0x42, 0x59, 0x00, 0x5c, 0x18, - 0x40, 0x08, 0xe2, 0xac, 0x06, 0x42, 0x1d, 0x01, 0x4a, 0x18, 0x40, 0x42, - 0x12, 0x00, 0x98, 0x18, 0x00, 0x43, 0x1f, 0xb7, 0x99, 0x18, 0x40, 0xe1, + 0x40, 0x08, 0xf5, 0xac, 0x06, 0x42, 0x1d, 0x01, 0x4a, 0x18, 0x40, 0x42, + 0x12, 0x00, 0x98, 0x18, 0x00, 0x43, 0x3b, 0xb7, 0x99, 0x18, 0x40, 0xe1, 0x30, 0x18, 0x00, 0x42, 0x22, 0x00, 0x31, 0x18, 0x00, 0x04, 0x35, 0x16, 0x01, 0xff, 0x43, 0x1c, 0x01, 0x62, 0x18, 0x00, 0x43, 0x29, 0x1e, 0x71, 0x18, 0x00, 0x42, 0x68, 0x0f, 0x69, 0x18, 0x00, 0xe5, 0x5d, 0x18, 0x00, 0x42, 0xed, 0x06, 0x6b, 0x18, 0x00, 0x42, 0x24, 0x02, 0x64, 0x18, 0x80, 0x54, 0x42, 0x22, 0x00, 0x65, 0x18, 0x80, 0x49, 0xe9, 0x5e, 0x18, 0x80, 0x40, 0x42, 0x77, 0x24, 0x6a, 0x18, 0x00, 0x42, 0x1b, 0x02, 0x63, 0x18, - 0x00, 0x42, 0xc1, 0x08, 0x66, 0x18, 0x00, 0x43, 0x77, 0xa2, 0x70, 0x18, + 0x00, 0x42, 0xc1, 0x08, 0x66, 0x18, 0x00, 0x43, 0x8a, 0xa2, 0x70, 0x18, 0x00, 0x43, 0xa4, 0x02, 0x67, 0x18, 0x00, 0xb4, 0x16, 0xf5, 0x61, 0x18, 0x80, 0x0d, 0xba, 0x01, 0xff, 0xe1, 0x6f, 0x18, 0x00, 0x42, 0x22, 0x00, 0x72, 0x18, 0x40, 0xe5, 0x60, 0x18, 0x40, 0xe1, 0x68, 0x18, 0x00, 0x42, 0x45, 0x05, 0x6e, 0x18, 0x40, 0xf9, 0x5f, 0x18, 0x40, 0xe1, 0x6d, 0x18, - 0x40, 0xe1, 0x6c, 0x18, 0x40, 0xe5, 0x25, 0x18, 0x40, 0x05, 0xe7, 0xc8, - 0x01, 0xff, 0x09, 0xe1, 0xac, 0x1c, 0x42, 0xed, 0x06, 0x76, 0x18, 0x00, + 0x40, 0xe1, 0x6c, 0x18, 0x40, 0xe5, 0x25, 0x18, 0x40, 0x05, 0x03, 0xc9, + 0x01, 0xff, 0x09, 0xf4, 0xac, 0x1c, 0x42, 0xed, 0x06, 0x76, 0x18, 0x00, 0xe9, 0x73, 0x18, 0x00, 0x42, 0x1b, 0x02, 0x74, 0x18, 0x00, 0x42, 0x71, - 0x00, 0x75, 0x18, 0x00, 0x43, 0x1f, 0xb7, 0x77, 0x18, 0x40, 0x43, 0xc2, - 0x27, 0xa8, 0x18, 0x00, 0xa3, 0x45, 0xa4, 0x37, 0x43, 0xf2, 0x93, 0x9a, - 0x18, 0x00, 0x43, 0x2d, 0xe9, 0x9d, 0x18, 0x00, 0x43, 0x33, 0x44, 0xaa, - 0x18, 0x00, 0x43, 0xdc, 0x42, 0x9b, 0x18, 0x00, 0x43, 0x93, 0x1e, 0xa2, + 0x00, 0x75, 0x18, 0x00, 0x43, 0x3b, 0xb7, 0x77, 0x18, 0x40, 0x43, 0xc2, + 0x27, 0xa8, 0x18, 0x00, 0xa3, 0x45, 0xa4, 0x37, 0x43, 0x05, 0x94, 0x9a, + 0x18, 0x00, 0x43, 0x49, 0xe9, 0x9d, 0x18, 0x00, 0x43, 0x48, 0x44, 0xaa, + 0x18, 0x00, 0x43, 0xf1, 0x42, 0x9b, 0x18, 0x00, 0x43, 0x93, 0x1e, 0xa2, 0x18, 0x00, 0xb4, 0x0d, 0xba, 0x01, 0xff, 0xe1, 0xa5, 0x18, 0x00, 0x42, 0x22, 0x00, 0xa4, 0x18, 0x40, 0xe1, 0xa0, 0x18, 0x00, 0x42, 0x12, 0x00, - 0x9e, 0x18, 0x40, 0x43, 0x64, 0x46, 0x9f, 0x18, 0x00, 0x42, 0x22, 0x00, + 0x9e, 0x18, 0x40, 0x43, 0x79, 0x46, 0x9f, 0x18, 0x00, 0x42, 0x22, 0x00, 0xa1, 0x18, 0x40, 0xe1, 0x9c, 0x18, 0x00, 0x42, 0x20, 0x20, 0xa3, 0x18, 0x40, 0xe1, 0x2f, 0x18, 0x00, 0x42, 0x22, 0x00, 0x40, 0x18, 0x40, 0xe1, 0x3a, 0x18, 0x00, 0x42, 0x22, 0x00, 0x3b, 0x18, 0x40, 0xe5, 0x27, 0x18, 0x40, 0xe1, 0x34, 0x18, 0x80, 0x04, 0xe9, 0x42, 0x18, 0x40, 0x4e, 0xdf, - 0x17, 0x78, 0x18, 0x40, 0x08, 0xe2, 0xac, 0x06, 0x42, 0x1d, 0x01, 0x29, - 0x18, 0x40, 0xe1, 0x87, 0x18, 0x80, 0x96, 0x01, 0x46, 0xfe, 0x94, 0x85, + 0x17, 0x78, 0x18, 0x40, 0x08, 0xf5, 0xac, 0x06, 0x42, 0x1d, 0x01, 0x29, + 0x18, 0x40, 0xe1, 0x87, 0x18, 0x80, 0x96, 0x01, 0x46, 0x11, 0x95, 0x85, 0x18, 0x00, 0x42, 0x37, 0x00, 0x8b, 0x18, 0x00, 0xa4, 0x71, 0x05, 0x22, 0x00, 0x63, 0xe9, 0x88, 0x18, 0x80, 0x58, 0x42, 0x1b, 0x02, 0x89, 0x18, 0x00, 0xae, 0x44, 0xb0, 0x38, 0x43, 0x93, 0x1e, 0x94, 0x18, 0x00, 0xb4, - 0x19, 0x47, 0x22, 0x6a, 0x83, 0x18, 0x00, 0x4b, 0x68, 0x9c, 0x81, 0x18, + 0x19, 0x47, 0x37, 0x6a, 0x83, 0x18, 0x00, 0x4b, 0x7b, 0x9c, 0x81, 0x18, 0x00, 0xba, 0x01, 0xff, 0xe1, 0x96, 0x18, 0x00, 0x42, 0x22, 0x00, 0x95, - 0x18, 0x40, 0xe1, 0x90, 0x18, 0x00, 0x4b, 0xf9, 0x94, 0x86, 0x18, 0x00, + 0x18, 0x40, 0xe1, 0x90, 0x18, 0x00, 0x4b, 0x0c, 0x95, 0x86, 0x18, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x8c, 0x18, 0x00, 0x42, 0x22, 0x00, 0x8d, 0x18, 0x40, 0xe1, 0x92, 0x18, 0x00, 0x42, 0x22, 0x00, 0x93, 0x18, 0x40, 0x42, 0x24, 0x02, 0x8a, 0x18, 0x00, 0x42, 0x2f, 0x04, 0x8f, 0x18, 0x40, 0x4f, - 0x1a, 0x6a, 0x84, 0x18, 0x40, 0xf5, 0xa6, 0x18, 0x00, 0x42, 0x20, 0x20, + 0x2f, 0x6a, 0x84, 0x18, 0x40, 0xf5, 0xa6, 0x18, 0x00, 0x42, 0x20, 0x20, 0xa7, 0x18, 0x40, 0xe1, 0x91, 0x18, 0x80, 0x06, 0x42, 0x68, 0x0f, 0x8e, - 0x18, 0x40, 0x45, 0xca, 0xdb, 0xa9, 0x18, 0x00, 0x44, 0x0a, 0xe6, 0x82, - 0x18, 0x40, 0xe8, 0x97, 0x18, 0x00, 0x4b, 0x32, 0x98, 0x80, 0x18, 0x40, - 0x55, 0x87, 0x06, 0x68, 0x16, 0x41, 0x48, 0x76, 0x41, 0x05, 0x18, 0x00, + 0x18, 0x40, 0x45, 0xe6, 0xdb, 0xa9, 0x18, 0x00, 0x44, 0x26, 0xe6, 0x82, + 0x18, 0x40, 0xe8, 0x97, 0x18, 0x00, 0x4b, 0x45, 0x98, 0x80, 0x18, 0x40, + 0x55, 0x87, 0x06, 0x68, 0x16, 0x41, 0x48, 0x8b, 0x41, 0x05, 0x18, 0x00, 0x17, 0xc6, 0x2c, 0x06, 0x48, 0xa1, 0x14, 0x03, 0x18, 0x40, 0x44, 0xfa, 0x05, 0x0f, 0x18, 0x00, 0x43, 0xcd, 0x09, 0x0b, 0x18, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x0d, 0x18, 0x00, 0x42, 0x15, 0x02, 0x0c, 0x18, @@ -6922,23 +6923,23 @@ static const unsigned char uname2c_tree[210697] = { 0xfb, 0x05, 0x14, 0x18, 0x40, 0x43, 0xac, 0x10, 0x04, 0x18, 0x00, 0x43, 0x1a, 0x04, 0x02, 0x18, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4f, 0x8d, 0x06, 0x64, 0x16, 0x01, 0x48, 0x2d, 0x04, 0x60, 0x16, 0x41, 0x80, 0x06, - 0x4b, 0xde, 0x5d, 0x11, 0xf9, 0x41, 0x43, 0xac, 0x34, 0xb0, 0xf4, 0x01, - 0x4a, 0xb1, 0xaa, 0xb8, 0xf4, 0x41, 0xa5, 0xa5, 0x14, 0xa9, 0x06, 0x4b, - 0xd9, 0x9b, 0x0a, 0x2a, 0x40, 0x80, 0xb6, 0x10, 0x05, 0xf6, 0x0a, 0x01, + 0x4b, 0xf3, 0x5d, 0x11, 0xf9, 0x41, 0x43, 0xac, 0x34, 0xb0, 0xf4, 0x01, + 0x4a, 0xc4, 0xaa, 0xb8, 0xf4, 0x41, 0xa5, 0xa5, 0x14, 0xa9, 0x06, 0x4b, + 0xec, 0x9b, 0x0a, 0x2a, 0x40, 0x80, 0xb6, 0x10, 0x05, 0xf6, 0x0a, 0x01, 0xff, 0x59, 0xb7, 0x20, 0x5b, 0xab, 0x00, 0x07, 0xf1, 0x04, 0x01, 0xff, 0xa1, 0x91, 0x10, 0xa2, 0xf8, 0x0f, 0xa3, 0xa6, 0x0c, 0xa4, 0xe3, 0x0b, 0xa5, 0x8a, 0x0b, 0xa7, 0xee, 0x0a, 0xa8, 0xc4, 0x0a, 0xac, 0x9e, 0x09, - 0xad, 0xd1, 0x08, 0x4a, 0x3d, 0xa6, 0xfe, 0x02, 0x00, 0xb0, 0xbc, 0x08, + 0xad, 0xd1, 0x08, 0x4a, 0x50, 0xa6, 0xfe, 0x02, 0x00, 0xb0, 0xbc, 0x08, 0xb2, 0xda, 0x07, 0xb3, 0x47, 0xb4, 0x39, 0xb5, 0x1d, 0xb6, 0x0f, 0xb9, 0x01, 0xff, 0x57, 0xcf, 0x29, 0xeb, 0x02, 0x00, 0x56, 0x9e, 0x30, 0xea, - 0x02, 0x40, 0x4c, 0x39, 0x3a, 0xc8, 0x02, 0x00, 0x46, 0x1c, 0xcd, 0xec, - 0x02, 0x40, 0x4a, 0x89, 0xa5, 0xed, 0x02, 0x00, 0x02, 0x20, 0x00, 0x04, + 0x02, 0x40, 0x4c, 0x4e, 0x3a, 0xc8, 0x02, 0x00, 0x46, 0x38, 0xcd, 0xec, + 0x02, 0x40, 0x4a, 0x9c, 0xa5, 0xed, 0x02, 0x00, 0x02, 0x20, 0x00, 0x04, 0xf3, 0x70, 0xa7, 0x40, 0x49, 0xe1, 0x01, 0xc4, 0x02, 0x00, 0x44, 0xca, 0x34, 0xd4, 0x02, 0x40, 0x4f, 0x5f, 0x37, 0xd0, 0x02, 0x00, 0x4b, 0x2e, 0x09, 0xbb, 0x02, 0x40, 0xa8, 0x82, 0x07, 0x05, 0x3d, 0x06, 0x21, 0x0a, - 0x49, 0xa9, 0x11, 0x0b, 0x75, 0x05, 0x01, 0xff, 0x55, 0x59, 0x37, 0x82, - 0x07, 0x01, 0x50, 0x5e, 0x37, 0x81, 0x07, 0x41, 0x49, 0x14, 0x3e, 0x20, - 0xa7, 0x00, 0x48, 0x13, 0xac, 0x21, 0xa7, 0x40, 0xe1, 0x43, 0x1d, 0x80, + 0x5c, 0xa9, 0x11, 0x0b, 0x75, 0x05, 0x01, 0xff, 0x55, 0x59, 0x37, 0x82, + 0x07, 0x01, 0x50, 0x5e, 0x37, 0x81, 0x07, 0x41, 0x49, 0x29, 0x3e, 0x20, + 0xa7, 0x00, 0x48, 0x26, 0xac, 0x21, 0xa7, 0x40, 0xe1, 0x43, 0x1d, 0x80, 0xc7, 0x06, 0xe2, 0x47, 0x1d, 0x80, 0xa9, 0x06, 0xe3, 0x9c, 0x1d, 0x80, 0xb7, 0x05, 0xe4, 0x48, 0x1d, 0x80, 0xe7, 0x04, 0xe5, 0x49, 0x1d, 0x80, 0xc9, 0x04, 0xe6, 0xa0, 0x1d, 0x80, 0xbd, 0x04, 0xe7, 0x4d, 0x1d, 0x80, @@ -6952,140 +6953,140 @@ static const unsigned char uname2c_tree[210697] = { 0x00, 0xf8, 0xe3, 0x02, 0x00, 0xf9, 0xb8, 0x02, 0x00, 0xfa, 0xbb, 0x1d, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x88, 0x08, 0xbd, 0x1d, 0x00, 0x4e, 0xfa, 0x0c, 0xbc, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, - 0x44, 0x04, 0x0d, 0xb9, 0x1d, 0x00, 0x4a, 0x7d, 0xa7, 0xb0, 0x07, 0x41, + 0x44, 0x04, 0x0d, 0xb9, 0x1d, 0x00, 0x4a, 0x90, 0xa7, 0xb0, 0x07, 0x41, 0x80, 0x06, 0x46, 0xee, 0x13, 0xb7, 0x1d, 0x40, 0x43, 0x16, 0x00, 0xb6, - 0x1d, 0x00, 0x4e, 0xd6, 0x77, 0x5f, 0xab, 0x40, 0x06, 0x50, 0x00, 0x82, - 0x01, 0x53, 0x2a, 0x43, 0xab, 0x07, 0x01, 0x4b, 0xd0, 0x93, 0xae, 0x07, - 0x01, 0x44, 0xf1, 0x8d, 0xbf, 0x1d, 0x00, 0x49, 0xf2, 0xb3, 0x54, 0x1d, - 0x00, 0x49, 0x87, 0xb5, 0xac, 0x07, 0x81, 0x5d, 0x06, 0x76, 0x06, 0x01, + 0x1d, 0x00, 0x4e, 0xdd, 0x77, 0x5f, 0xab, 0x40, 0x06, 0x50, 0x00, 0x82, + 0x01, 0x53, 0x3f, 0x43, 0xab, 0x07, 0x01, 0x4b, 0xe3, 0x93, 0xae, 0x07, + 0x01, 0x44, 0x04, 0x8e, 0xbf, 0x1d, 0x00, 0x49, 0x0e, 0xb4, 0x54, 0x1d, + 0x00, 0x49, 0xa3, 0xb5, 0xac, 0x07, 0x81, 0x5d, 0x06, 0x76, 0x06, 0x01, 0xff, 0xe1, 0x44, 0x1d, 0x80, 0x49, 0xe8, 0xa3, 0x1d, 0x00, 0xe9, 0x4e, 0x1d, 0x00, 0xed, 0x5a, 0x1d, 0x80, 0x36, 0x46, 0x1f, 0x26, 0x4c, 0x1d, 0x00, 0xf2, 0xb4, 0x02, 0x80, 0x13, 0xf6, 0xba, 0x1d, 0x00, 0xf7, 0x69, - 0xab, 0x00, 0xf9, 0xa0, 0x07, 0xc1, 0x00, 0x4a, 0xd7, 0x9d, 0xa1, 0x07, + 0xab, 0x00, 0xf9, 0xa0, 0x07, 0xc1, 0x00, 0x4a, 0xea, 0x9d, 0xa1, 0x07, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x04, 0x0d, 0xb5, 0x02, 0x00, - 0x48, 0x90, 0x6e, 0xa6, 0x07, 0xc1, 0x00, 0x53, 0xe7, 0x41, 0xa7, 0x07, - 0x41, 0x4e, 0x8a, 0x6e, 0xad, 0x1d, 0x40, 0xe5, 0x46, 0x1d, 0x00, 0x44, - 0x91, 0xd9, 0x9b, 0x1d, 0x40, 0x54, 0xf4, 0x0c, 0xad, 0x07, 0x41, 0x4c, - 0x4b, 0x51, 0xb5, 0x1d, 0x00, 0x4e, 0xfa, 0x0c, 0xaf, 0x07, 0x41, 0x06, - 0x50, 0x00, 0x14, 0xa3, 0x06, 0x49, 0xb6, 0xb0, 0x59, 0x1d, 0x40, 0x43, - 0xed, 0x74, 0x4a, 0x1d, 0x00, 0x46, 0xbf, 0xc0, 0xa2, 0x1d, 0x40, 0x44, + 0x48, 0xa5, 0x6e, 0xa6, 0x07, 0xc1, 0x00, 0x53, 0xfc, 0x41, 0xa7, 0x07, + 0x41, 0x4e, 0x9f, 0x6e, 0xad, 0x1d, 0x40, 0xe5, 0x46, 0x1d, 0x00, 0x44, + 0xad, 0xd9, 0x9b, 0x1d, 0x40, 0x54, 0xf4, 0x0c, 0xad, 0x07, 0x41, 0x4c, + 0x60, 0x51, 0xb5, 0x1d, 0x00, 0x4e, 0xfa, 0x0c, 0xaf, 0x07, 0x41, 0x06, + 0x50, 0x00, 0x14, 0xa3, 0x06, 0x49, 0xd2, 0xb0, 0x59, 0x1d, 0x40, 0x43, + 0x02, 0x75, 0x4a, 0x1d, 0x00, 0x46, 0xdb, 0xc0, 0xa2, 0x1d, 0x40, 0x44, 0x88, 0x08, 0xba, 0x07, 0x01, 0x44, 0x04, 0x0d, 0xb3, 0x1d, 0x40, 0x06, - 0x50, 0x00, 0x1b, 0x48, 0x9d, 0xb9, 0x91, 0x07, 0x01, 0x08, 0x1a, 0x13, + 0x50, 0x00, 0x1b, 0x48, 0xb9, 0xb9, 0x91, 0x07, 0x01, 0x08, 0x1a, 0x13, 0x01, 0xff, 0xe5, 0x8e, 0x07, 0x01, 0x4c, 0xcf, 0x25, 0xe4, 0x02, 0x00, - 0x46, 0x1f, 0x26, 0x9f, 0x1d, 0x40, 0x48, 0x6b, 0x6b, 0xa9, 0x07, 0x01, + 0x46, 0x1f, 0x26, 0x9f, 0x1d, 0x40, 0x48, 0x80, 0x6b, 0xa9, 0x07, 0x01, 0x44, 0xae, 0x15, 0xa8, 0x07, 0x41, 0x42, 0x49, 0x00, 0xb2, 0x1d, 0x40, 0x4c, 0xdb, 0x25, 0xa2, 0x07, 0x01, 0x04, 0xfc, 0x03, 0x01, 0xff, 0xe5, - 0x4b, 0x1d, 0x00, 0xef, 0x53, 0x1d, 0x40, 0x49, 0x09, 0x52, 0xae, 0x1d, + 0x4b, 0x1d, 0x00, 0xef, 0x53, 0x1d, 0x40, 0x49, 0x1e, 0x52, 0xae, 0x1d, 0x00, 0x4e, 0xfa, 0x0c, 0xaf, 0x1d, 0x40, 0x4a, 0x0b, 0x22, 0xac, 0x1d, - 0x40, 0x06, 0x50, 0x00, 0x1f, 0x43, 0x00, 0xe9, 0x9e, 0x07, 0x81, 0x12, - 0x4a, 0x13, 0xa3, 0xf9, 0xa7, 0x00, 0x49, 0x87, 0xb5, 0x99, 0x07, 0x01, - 0x49, 0x0f, 0xb8, 0x9a, 0x07, 0x41, 0x54, 0xf4, 0x0c, 0x9f, 0x07, 0x41, - 0x44, 0xdd, 0x9d, 0x9b, 0x07, 0x01, 0x4f, 0xfe, 0x67, 0x5d, 0xab, 0x00, - 0x4c, 0x92, 0x20, 0x5e, 0xab, 0x00, 0x4c, 0x4b, 0x51, 0xaa, 0x1d, 0x00, - 0x4e, 0xfa, 0x0c, 0xa9, 0x1d, 0xc0, 0x00, 0x49, 0x1f, 0xab, 0x9d, 0x07, - 0x41, 0x52, 0x2d, 0x4a, 0xa8, 0x1d, 0x40, 0x4c, 0xdb, 0x25, 0xa4, 0x1d, + 0x40, 0x06, 0x50, 0x00, 0x1f, 0x43, 0x1c, 0xe9, 0x9e, 0x07, 0x81, 0x12, + 0x4a, 0x26, 0xa3, 0xf9, 0xa7, 0x00, 0x49, 0xa3, 0xb5, 0x99, 0x07, 0x01, + 0x49, 0x2b, 0xb8, 0x9a, 0x07, 0x41, 0x54, 0xf4, 0x0c, 0x9f, 0x07, 0x41, + 0x44, 0xf0, 0x9d, 0x9b, 0x07, 0x01, 0x4f, 0x13, 0x68, 0x5d, 0xab, 0x00, + 0x4c, 0x92, 0x20, 0x5e, 0xab, 0x00, 0x4c, 0x60, 0x51, 0xaa, 0x1d, 0x00, + 0x4e, 0xfa, 0x0c, 0xa9, 0x1d, 0xc0, 0x00, 0x49, 0x32, 0xab, 0x9d, 0x07, + 0x41, 0x52, 0x42, 0x4a, 0xa8, 0x1d, 0x40, 0x4c, 0xdb, 0x25, 0xa4, 0x1d, 0x00, 0x43, 0x20, 0x04, 0xa5, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x0d, 0x43, 0x59, 0x07, 0x5c, 0xab, 0xc0, 0x00, 0x4a, 0x0b, 0x22, 0x97, 0x07, 0x41, 0x44, 0x04, 0x0d, 0xb1, 0x02, 0x00, 0x46, 0x57, 0x04, 0x95, 0x07, 0x41, 0x4a, 0x0b, 0x22, 0x93, 0x07, 0x01, 0x44, 0x98, 0x1e, 0xe0, 0x02, 0x00, - 0x05, 0xfb, 0x2a, 0x01, 0xff, 0x45, 0x84, 0x52, 0x5e, 0x1d, 0x00, 0x43, - 0xeb, 0x1d, 0x60, 0x1d, 0x40, 0x4b, 0x99, 0x93, 0x90, 0x07, 0x41, 0x42, + 0x05, 0xfb, 0x2a, 0x01, 0xff, 0x45, 0x99, 0x52, 0x5e, 0x1d, 0x00, 0x43, + 0xeb, 0x1d, 0x60, 0x1d, 0x40, 0x4b, 0xac, 0x93, 0x90, 0x07, 0x41, 0x42, 0x1d, 0x01, 0x51, 0x1d, 0x00, 0x42, 0xa4, 0x02, 0xb4, 0x1d, 0x00, 0x42, 0x53, 0x00, 0x9e, 0x1d, 0x00, 0x42, 0x6d, 0x25, 0xbe, 0x1d, 0x40, 0x06, - 0x50, 0x00, 0x33, 0xa5, 0x25, 0x54, 0xb8, 0x3f, 0xa1, 0x1d, 0x80, 0x18, - 0x49, 0x0f, 0xb8, 0x87, 0x07, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, + 0x50, 0x00, 0x33, 0xa5, 0x25, 0x54, 0xcd, 0x3f, 0xa1, 0x1d, 0x80, 0x18, + 0x49, 0x2b, 0xb8, 0x87, 0x07, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x88, 0x08, 0x89, 0x07, 0x01, 0x4e, 0xfa, 0x0c, 0x88, 0x07, 0x41, - 0x49, 0x24, 0x21, 0x98, 0x07, 0x41, 0x43, 0xee, 0x8e, 0x5f, 0x1d, 0x00, - 0x4a, 0x0b, 0xab, 0x8a, 0x07, 0x41, 0x44, 0x04, 0x0d, 0x8c, 0x07, 0x81, - 0x06, 0x44, 0xae, 0x15, 0x8b, 0x07, 0x41, 0x49, 0x31, 0xab, 0x8d, 0x07, - 0x41, 0x4a, 0x33, 0x43, 0x9d, 0x1d, 0x00, 0x07, 0xea, 0x04, 0x17, 0x42, - 0x49, 0x00, 0x61, 0x1d, 0x00, 0x06, 0x48, 0x19, 0x01, 0xff, 0x45, 0x7e, - 0xa6, 0xa4, 0x07, 0x01, 0x4f, 0xaf, 0x6b, 0x8f, 0x07, 0x41, 0x42, 0xda, + 0x49, 0x24, 0x21, 0x98, 0x07, 0x41, 0x43, 0x01, 0x8f, 0x5f, 0x1d, 0x00, + 0x4a, 0x1e, 0xab, 0x8a, 0x07, 0x41, 0x44, 0x04, 0x0d, 0x8c, 0x07, 0x81, + 0x06, 0x44, 0xae, 0x15, 0x8b, 0x07, 0x41, 0x49, 0x44, 0xab, 0x8d, 0x07, + 0x41, 0x4a, 0x48, 0x43, 0x9d, 0x1d, 0x00, 0x07, 0xea, 0x04, 0x17, 0x42, + 0x49, 0x00, 0x61, 0x1d, 0x00, 0x06, 0x48, 0x19, 0x01, 0xff, 0x45, 0x91, + 0xa6, 0xa4, 0x07, 0x01, 0x4f, 0xc4, 0x6b, 0x8f, 0x07, 0x41, 0x42, 0xda, 0x10, 0x80, 0x07, 0x01, 0xe2, 0x84, 0x07, 0x01, 0xe7, 0x92, 0x07, 0x81, 0x36, 0xe8, 0x96, 0x07, 0x01, 0xe9, 0xa6, 0x1d, 0x80, 0x21, 0xec, 0xab, - 0x1d, 0x80, 0x16, 0xee, 0xb0, 0x1d, 0x00, 0x42, 0xca, 0x4b, 0xa3, 0x07, + 0x1d, 0x80, 0x16, 0xee, 0xb0, 0x1d, 0x00, 0x42, 0xdf, 0x4b, 0xa3, 0x07, 0x01, 0xf2, 0xaa, 0x07, 0x01, 0xf5, 0xb8, 0x1d, 0x00, 0xf9, 0xb2, 0x07, - 0x41, 0x4a, 0xd7, 0x9d, 0x9c, 0x07, 0x41, 0x4c, 0xdb, 0x25, 0xa7, 0x1d, - 0x00, 0x49, 0x6b, 0xb3, 0xb6, 0x02, 0x40, 0x4a, 0x0b, 0x22, 0x94, 0x07, - 0x41, 0x4a, 0x0b, 0x22, 0x85, 0x07, 0x01, 0x47, 0xe7, 0xc4, 0xb1, 0x1d, - 0x00, 0x43, 0xec, 0x0d, 0x5d, 0x1d, 0x00, 0x4c, 0xd4, 0x8b, 0x55, 0x1d, + 0x41, 0x4a, 0xea, 0x9d, 0x9c, 0x07, 0x41, 0x4c, 0xdb, 0x25, 0xa7, 0x1d, + 0x00, 0x49, 0x87, 0xb3, 0xb6, 0x02, 0x40, 0x4a, 0x0b, 0x22, 0x94, 0x07, + 0x41, 0x4a, 0x0b, 0x22, 0x85, 0x07, 0x01, 0x47, 0x03, 0xc5, 0xb1, 0x1d, + 0x00, 0x43, 0xec, 0x0d, 0x5d, 0x1d, 0x00, 0x4c, 0xdb, 0x8b, 0x55, 0x1d, 0x40, 0xe5, 0x83, 0x07, 0x01, 0x42, 0x9e, 0x01, 0x5c, 0x1d, 0x00, 0x44, - 0x91, 0xd9, 0x45, 0x1d, 0x40, 0x43, 0xba, 0x72, 0xfd, 0x02, 0x00, 0x4f, - 0xb0, 0x6a, 0x8a, 0xa7, 0x40, 0x06, 0x4a, 0x0f, 0x3d, 0xa5, 0x1d, 0x4a, - 0xaf, 0xa2, 0xde, 0x02, 0x00, 0x05, 0xc9, 0x00, 0x01, 0xff, 0x49, 0xe1, + 0xad, 0xd9, 0x45, 0x1d, 0x40, 0x43, 0xcf, 0x72, 0xfd, 0x02, 0x00, 0x4f, + 0xc5, 0x6a, 0x8a, 0xa7, 0x40, 0x06, 0x4a, 0x0f, 0x3d, 0xa5, 0x1d, 0x4a, + 0xc2, 0xa2, 0xde, 0x02, 0x00, 0x05, 0xc9, 0x00, 0x01, 0xff, 0x49, 0xe1, 0x01, 0xc3, 0x02, 0x00, 0x49, 0x58, 0x12, 0xbe, 0x02, 0x00, 0x44, 0xca, 0x34, 0x6b, 0xab, 0x40, 0x61, 0xe7, 0x0c, 0xb9, 0x07, 0x01, 0x07, 0x1b, 0x13, 0x01, 0xff, 0x45, 0x18, 0x04, 0xbd, 0x02, 0x00, 0x4c, 0xcf, 0x25, 0xc1, 0x02, 0xc0, 0x00, 0x4c, 0xdb, 0x25, 0xb4, 0x07, 0x41, 0x45, 0x69, - 0x37, 0xf8, 0x02, 0x00, 0x4a, 0xe8, 0x3c, 0x1c, 0xa7, 0x00, 0x50, 0xad, - 0x00, 0x1d, 0xa7, 0x00, 0x59, 0xca, 0x21, 0x1e, 0xa7, 0x00, 0x48, 0x6f, - 0x50, 0x1b, 0xa7, 0x40, 0x48, 0x1a, 0x6b, 0xd6, 0x02, 0x00, 0x44, 0xd3, - 0x18, 0xb9, 0x02, 0x40, 0x45, 0xd9, 0x69, 0xc9, 0x02, 0x00, 0xa9, 0x01, - 0xff, 0xa4, 0x06, 0x48, 0xf0, 0x67, 0xd7, 0x02, 0x40, 0x80, 0x1b, 0x04, + 0x37, 0xf8, 0x02, 0x00, 0x4a, 0xfd, 0x3c, 0x1c, 0xa7, 0x00, 0x50, 0xad, + 0x00, 0x1d, 0xa7, 0x00, 0x59, 0xca, 0x21, 0x1e, 0xa7, 0x00, 0x48, 0x84, + 0x50, 0x1b, 0xa7, 0x40, 0x48, 0x2f, 0x6b, 0xd6, 0x02, 0x00, 0x44, 0xd3, + 0x18, 0xb9, 0x02, 0x40, 0x45, 0xee, 0x69, 0xc9, 0x02, 0x00, 0xa9, 0x01, + 0xff, 0xa4, 0x06, 0x48, 0x05, 0x68, 0xd7, 0x02, 0x40, 0x80, 0x1b, 0x04, 0x80, 0x02, 0x01, 0xff, 0x07, 0x3b, 0x01, 0x06, 0x4c, 0x79, 0x20, 0xf4, - 0x02, 0x40, 0x4c, 0x78, 0x84, 0xf6, 0x02, 0x00, 0x4c, 0x79, 0x20, 0xf5, - 0x02, 0x40, 0x07, 0x48, 0x1d, 0x0c, 0x52, 0xc3, 0x4d, 0x14, 0xa7, 0x00, - 0x48, 0xcd, 0x4d, 0xe7, 0x02, 0x40, 0x52, 0xc3, 0x4d, 0x0f, 0xa7, 0x00, - 0x48, 0xcd, 0x4d, 0x0a, 0xa7, 0x40, 0x4c, 0xce, 0x7d, 0xb7, 0x07, 0x01, + 0x02, 0x40, 0x4c, 0x7f, 0x84, 0xf6, 0x02, 0x00, 0x4c, 0x79, 0x20, 0xf5, + 0x02, 0x40, 0x07, 0x48, 0x1d, 0x0c, 0x52, 0xd8, 0x4d, 0x14, 0xa7, 0x00, + 0x48, 0xe2, 0x4d, 0xe7, 0x02, 0x40, 0x52, 0xd8, 0x4d, 0x0f, 0xa7, 0x00, + 0x48, 0xe2, 0x4d, 0x0a, 0xa7, 0x40, 0x4c, 0xd5, 0x7d, 0xb7, 0x07, 0x01, 0x04, 0xc4, 0x00, 0x86, 0x01, 0x02, 0xd1, 0x00, 0x01, 0xff, 0x80, 0x06, - 0x55, 0xdb, 0x36, 0x1a, 0xa7, 0x40, 0x4c, 0x78, 0x84, 0xcf, 0x02, 0x00, + 0x55, 0xdb, 0x36, 0x1a, 0xa7, 0x40, 0x4c, 0x7f, 0x84, 0xcf, 0x02, 0x00, 0x51, 0xd4, 0x03, 0x88, 0xa7, 0x00, 0x02, 0x3b, 0x01, 0x53, 0x4c, 0x79, 0x20, 0xce, 0x02, 0x00, 0x59, 0xca, 0x21, 0x1f, 0xa7, 0x00, 0x04, 0xc3, - 0x00, 0x30, 0x46, 0xd8, 0x69, 0xcd, 0x02, 0x00, 0x02, 0x0d, 0x00, 0x1a, - 0xb4, 0x0c, 0x4c, 0x6f, 0x50, 0xf0, 0x02, 0x00, 0x4d, 0x38, 0x3a, 0xcc, - 0x02, 0x40, 0x44, 0x9a, 0x20, 0xf7, 0x02, 0x00, 0x47, 0xce, 0x4d, 0xe8, + 0x00, 0x30, 0x46, 0xed, 0x69, 0xcd, 0x02, 0x00, 0x02, 0x0d, 0x00, 0x1a, + 0xb4, 0x0c, 0x4c, 0x84, 0x50, 0xf0, 0x02, 0x00, 0x4d, 0x4d, 0x3a, 0xcc, + 0x02, 0x40, 0x44, 0x9a, 0x20, 0xf7, 0x02, 0x00, 0x47, 0xe3, 0x4d, 0xe8, 0x02, 0x40, 0x4d, 0x4f, 0x2e, 0xf2, 0x02, 0x00, 0x42, 0x1d, 0x01, 0xf3, - 0x02, 0x40, 0x46, 0xcd, 0x00, 0xff, 0x02, 0x80, 0x06, 0x4e, 0xc7, 0x4d, + 0x02, 0x40, 0x46, 0xcd, 0x00, 0xff, 0x02, 0x80, 0x06, 0x4e, 0xdc, 0x4d, 0x15, 0xa7, 0x40, 0x44, 0xe6, 0x01, 0xf1, 0x02, 0x40, 0x05, 0x4a, 0x1d, - 0x06, 0x4c, 0xea, 0x3c, 0xef, 0x02, 0x40, 0x52, 0xc3, 0x4d, 0x10, 0xa7, - 0x00, 0x48, 0xcd, 0x4d, 0x0b, 0xa7, 0x40, 0x49, 0xe1, 0x01, 0xc2, 0x02, + 0x06, 0x4c, 0xff, 0x3c, 0xef, 0x02, 0x40, 0x52, 0xd8, 0x4d, 0x10, 0xa7, + 0x00, 0x48, 0xe2, 0x4d, 0x0b, 0xa7, 0x40, 0x49, 0xe1, 0x01, 0xc2, 0x02, 0x00, 0x49, 0x58, 0x12, 0xbf, 0x02, 0x00, 0x44, 0xca, 0x34, 0x6a, 0xab, 0x40, 0x54, 0x5a, 0x37, 0xd1, 0x02, 0x00, 0x04, 0x2b, 0x0a, 0x01, 0xff, - 0x07, 0x48, 0x1d, 0x0c, 0x52, 0xc3, 0x4d, 0x13, 0xa7, 0x00, 0x48, 0xcd, - 0x4d, 0xe6, 0x02, 0x40, 0x52, 0xc3, 0x4d, 0x0e, 0xa7, 0x00, 0x48, 0xcd, - 0x4d, 0x09, 0xa7, 0x40, 0x4b, 0xaf, 0x93, 0xfc, 0x10, 0x00, 0x4b, 0xd0, + 0x07, 0x48, 0x1d, 0x0c, 0x52, 0xd8, 0x4d, 0x13, 0xa7, 0x00, 0x48, 0xe2, + 0x4d, 0xe6, 0x02, 0x40, 0x52, 0xd8, 0x4d, 0x0e, 0xa7, 0x00, 0x48, 0xe2, + 0x4d, 0x09, 0xa7, 0x40, 0x4b, 0xc2, 0x93, 0xfc, 0x10, 0x00, 0x4b, 0xd0, 0x25, 0xc0, 0x02, 0x80, 0x06, 0x4b, 0x7a, 0x20, 0xcb, 0x02, 0x40, 0x4c, - 0xdb, 0x25, 0xb3, 0x07, 0x41, 0x03, 0x1b, 0x00, 0x46, 0x05, 0x74, 0xe1, + 0xdb, 0x25, 0xb3, 0x07, 0x41, 0x03, 0x1b, 0x00, 0x46, 0x05, 0x90, 0xe1, 0x01, 0xff, 0x05, 0x2a, 0x0a, 0x21, 0x04, 0x0d, 0x04, 0x01, 0xff, 0x07, - 0x48, 0x1d, 0x0c, 0x52, 0xc3, 0x4d, 0x16, 0xa7, 0x00, 0x48, 0xcd, 0x4d, - 0xe9, 0x02, 0x40, 0x52, 0xc3, 0x4d, 0x11, 0xa7, 0x00, 0x48, 0xcd, 0x4d, - 0x0c, 0xa7, 0x40, 0x07, 0x48, 0x1d, 0x0c, 0x52, 0xc3, 0x4d, 0x12, 0xa7, - 0x00, 0x48, 0xcd, 0x4d, 0xe5, 0x02, 0x40, 0x52, 0xc3, 0x4d, 0x0d, 0xa7, - 0x00, 0x48, 0xcd, 0x4d, 0x08, 0xa7, 0x40, 0x49, 0x14, 0x3e, 0xfa, 0x02, - 0x00, 0x48, 0x13, 0xac, 0xfc, 0x02, 0x40, 0x4b, 0x59, 0x86, 0xb6, 0x07, + 0x48, 0x1d, 0x0c, 0x52, 0xd8, 0x4d, 0x16, 0xa7, 0x00, 0x48, 0xe2, 0x4d, + 0xe9, 0x02, 0x40, 0x52, 0xd8, 0x4d, 0x11, 0xa7, 0x00, 0x48, 0xe2, 0x4d, + 0x0c, 0xa7, 0x40, 0x07, 0x48, 0x1d, 0x0c, 0x52, 0xd8, 0x4d, 0x12, 0xa7, + 0x00, 0x48, 0xe2, 0x4d, 0xe5, 0x02, 0x40, 0x52, 0xd8, 0x4d, 0x0d, 0xa7, + 0x00, 0x48, 0xe2, 0x4d, 0x08, 0xa7, 0x40, 0x49, 0x29, 0x3e, 0xfa, 0x02, + 0x00, 0x48, 0x26, 0xac, 0xfc, 0x02, 0x40, 0x4b, 0x60, 0x86, 0xb6, 0x07, 0x01, 0xaf, 0x01, 0xff, 0x02, 0xc6, 0x00, 0x21, 0x05, 0x3d, 0x01, 0x11, 0x03, 0xdc, 0x12, 0x01, 0xff, 0x49, 0xe1, 0x01, 0xc5, 0x02, 0x00, 0x44, 0xca, 0x34, 0xd5, 0x02, 0x40, 0x4a, 0x4c, 0x32, 0xee, 0x02, 0x00, 0x45, 0xd2, 0x18, 0xba, 0x02, 0x40, 0x4e, 0x0b, 0x00, 0x19, 0xa7, 0x00, 0x45, 0xa0, 0x0c, 0x18, 0xa7, 0x00, 0x4c, 0x32, 0x00, 0x17, 0xa7, 0x40, 0x07, - 0xea, 0x04, 0xcc, 0x02, 0x07, 0x5f, 0x62, 0xbb, 0x02, 0x0d, 0xaf, 0x7c, + 0xea, 0x04, 0xcc, 0x02, 0x07, 0x74, 0x62, 0xbb, 0x02, 0x0d, 0xb6, 0x7c, 0xfd, 0x01, 0x50, 0xd5, 0x03, 0xc6, 0x02, 0x00, 0x44, 0xab, 0x10, 0x89, - 0xa7, 0x00, 0x4b, 0x16, 0x9a, 0xdf, 0x02, 0x00, 0x08, 0xdd, 0xc2, 0x01, - 0xff, 0x42, 0x92, 0x01, 0x78, 0x1d, 0x00, 0x49, 0x2f, 0xb0, 0x9c, 0xa6, - 0x00, 0xb3, 0x01, 0xff, 0x05, 0x3d, 0x06, 0x06, 0x48, 0x04, 0x87, 0x9d, + 0xa7, 0x00, 0x4b, 0x29, 0x9a, 0xdf, 0x02, 0x00, 0x08, 0xf9, 0xc2, 0x01, + 0xff, 0x42, 0x92, 0x01, 0x78, 0x1d, 0x00, 0x49, 0x4b, 0xb0, 0x9c, 0xa6, + 0x00, 0xb3, 0x01, 0xff, 0x05, 0x3d, 0x06, 0x06, 0x48, 0x0b, 0x87, 0x9d, 0xa6, 0x40, 0xe1, 0x30, 0xe0, 0x01, 0xa2, 0xb6, 0x01, 0x43, 0x21, 0x2c, 0x45, 0xe0, 0x01, 0xa4, 0xa3, 0x01, 0xe5, 0x48, 0xe0, 0x81, 0x82, 0x01, - 0x43, 0x1e, 0xc7, 0x33, 0xe0, 0x01, 0x42, 0x22, 0x00, 0x43, 0xe0, 0x01, + 0x43, 0x3a, 0xc7, 0x33, 0xe0, 0x01, 0x42, 0x22, 0x00, 0x43, 0xe0, 0x01, 0xe9, 0x38, 0xe0, 0x81, 0x6d, 0x42, 0x18, 0x1e, 0x4d, 0xe0, 0x01, 0x42, 0x1b, 0x02, 0x39, 0xe0, 0x01, 0xef, 0x3c, 0xe0, 0x01, 0xb0, 0x51, 0xb3, 0x36, 0xb4, 0x2a, 0xf5, 0x41, 0xe0, 0x01, 0x42, 0x32, 0x00, 0x32, 0xe0, 0x01, 0xb9, 0x0d, 0xba, 0x01, 0xff, 0xe5, 0x37, 0xe0, 0x01, 0x42, 0xb0, 0x01, 0x36, 0xe0, 0x41, 0x43, 0x6d, 0x28, 0x47, 0xe0, 0x81, 0x04, 0xf5, - 0x49, 0xe0, 0x41, 0x4e, 0x7c, 0x6e, 0x6c, 0xe0, 0x41, 0xe5, 0x40, 0xe0, - 0x01, 0x42, 0xc7, 0x02, 0x44, 0xe0, 0x41, 0x44, 0xec, 0x74, 0x4b, 0xe0, - 0x01, 0x42, 0x22, 0x00, 0x46, 0xe0, 0x01, 0x49, 0x56, 0xb6, 0x4f, 0xe0, - 0xc1, 0x00, 0x4c, 0xdb, 0x25, 0x6d, 0xe0, 0x41, 0x47, 0xee, 0xbf, 0x50, + 0x49, 0xe0, 0x41, 0x4e, 0x91, 0x6e, 0x6c, 0xe0, 0x41, 0xe5, 0x40, 0xe0, + 0x01, 0x42, 0xc7, 0x02, 0x44, 0xe0, 0x41, 0x44, 0x01, 0x75, 0x4b, 0xe0, + 0x01, 0x42, 0x22, 0x00, 0x46, 0xe0, 0x01, 0x49, 0x72, 0xb6, 0x4f, 0xe0, + 0xc1, 0x00, 0x4c, 0xdb, 0x25, 0x6d, 0xe0, 0x41, 0x47, 0x0a, 0xc0, 0x50, 0xe0, 0x01, 0xe5, 0x3d, 0xe0, 0x41, 0xe5, 0x35, 0xe0, 0x41, 0xe6, 0x42, 0xe0, 0x01, 0xec, 0x3a, 0xe0, 0x01, 0xed, 0x3b, 0xe0, 0x01, 0xf2, 0x3e, - 0xe0, 0x01, 0xf3, 0x3f, 0xe0, 0xc1, 0x00, 0x4f, 0x99, 0x63, 0x6b, 0xe0, - 0x41, 0xe5, 0x34, 0xe0, 0x01, 0x43, 0xb7, 0xe9, 0x4a, 0xe0, 0x41, 0x47, - 0xe7, 0xc4, 0x4e, 0xe0, 0x01, 0xe5, 0x31, 0xe0, 0x01, 0x57, 0x8a, 0x07, + 0xe0, 0x01, 0xf3, 0x3f, 0xe0, 0xc1, 0x00, 0x4f, 0xae, 0x63, 0x6b, 0xe0, + 0x41, 0xe5, 0x34, 0xe0, 0x01, 0x43, 0xd3, 0xe9, 0x4a, 0xe0, 0x41, 0x47, + 0x03, 0xc5, 0x4e, 0xe0, 0x01, 0xe5, 0x31, 0xe0, 0x01, 0x57, 0x8a, 0x07, 0x4c, 0xe0, 0x41, 0x04, 0x46, 0x14, 0x1d, 0x03, 0xe6, 0x04, 0x01, 0xff, 0x44, 0x5a, 0x2c, 0x00, 0xa7, 0x00, 0x42, 0x7c, 0x00, 0x04, 0xa7, 0x00, - 0x42, 0x3d, 0x00, 0x06, 0xa7, 0x00, 0x45, 0xf8, 0xdf, 0x02, 0xa7, 0x40, + 0x42, 0x3d, 0x00, 0x06, 0xa7, 0x00, 0x45, 0x14, 0xe0, 0x02, 0xa7, 0x40, 0x44, 0x5a, 0x2c, 0x01, 0xa7, 0x00, 0x42, 0x7c, 0x00, 0x05, 0xa7, 0x00, - 0x42, 0x3d, 0x00, 0x07, 0xa7, 0x00, 0x45, 0xf8, 0xdf, 0x03, 0xa7, 0x40, - 0x4e, 0x53, 0x12, 0xd3, 0x02, 0x00, 0x4f, 0xbe, 0x6b, 0xd2, 0x02, 0x40, + 0x42, 0x3d, 0x00, 0x07, 0xa7, 0x00, 0x45, 0x14, 0xe0, 0x03, 0xa7, 0x40, + 0x4e, 0x53, 0x12, 0xd3, 0x02, 0x00, 0x4f, 0xd3, 0x6b, 0xd2, 0x02, 0x40, 0xe1, 0x2c, 0x1d, 0x80, 0x75, 0xe2, 0x2e, 0x1d, 0x80, 0x6a, 0xe3, 0xf2, 0xa7, 0x00, 0xe4, 0x30, 0x1d, 0x00, 0xe5, 0x31, 0x1d, 0x00, 0xe6, 0xf3, 0xa7, 0x00, 0xe7, 0x33, 0x1d, 0x00, 0xe8, 0x34, 0x1d, 0x80, 0x4b, 0xe9, @@ -7095,21 +7096,21 @@ static const unsigned char uname2c_tree[210697] = { 0xf2, 0x3f, 0x1d, 0x80, 0x10, 0xf4, 0x40, 0x1d, 0x00, 0xf5, 0x41, 0x1d, 0x00, 0xf6, 0x7d, 0x2c, 0x00, 0xf7, 0x42, 0x1d, 0x40, 0x08, 0x1a, 0x13, 0x01, 0xff, 0xe5, 0x32, 0x1d, 0x00, 0xee, 0x3b, 0x1d, 0x40, 0xf5, 0x3d, - 0x1d, 0x40, 0x4c, 0xdb, 0x25, 0xf8, 0xa7, 0x40, 0x47, 0xe0, 0xc4, 0x2f, - 0x1d, 0x40, 0xe5, 0x2d, 0x1d, 0x40, 0x05, 0x0a, 0x3b, 0x06, 0x4d, 0xfd, - 0x7c, 0xb5, 0x07, 0x41, 0x49, 0x14, 0x3e, 0xf9, 0x02, 0x00, 0x48, 0x13, - 0xac, 0xfb, 0x02, 0x40, 0x4b, 0x79, 0x84, 0xca, 0x02, 0x00, 0x4d, 0x35, - 0x7e, 0xb8, 0x07, 0x01, 0x49, 0x4d, 0x32, 0xbc, 0x02, 0x40, 0x51, 0x34, + 0x1d, 0x40, 0x4c, 0xdb, 0x25, 0xf8, 0xa7, 0x40, 0x47, 0xfc, 0xc4, 0x2f, + 0x1d, 0x40, 0xe5, 0x2d, 0x1d, 0x40, 0x05, 0x1f, 0x3b, 0x06, 0x4d, 0x04, + 0x7d, 0xb5, 0x07, 0x41, 0x49, 0x29, 0x3e, 0xf9, 0x02, 0x00, 0x48, 0x26, + 0xac, 0xfb, 0x02, 0x40, 0x4b, 0x80, 0x84, 0xca, 0x02, 0x00, 0x4d, 0x3c, + 0x7e, 0xb8, 0x07, 0x01, 0x49, 0x4d, 0x32, 0xbc, 0x02, 0x40, 0x51, 0x49, 0x52, 0x43, 0x16, 0x01, 0xa4, 0x89, 0x03, 0x07, 0xf1, 0x04, 0x6d, 0x05, - 0xdb, 0x02, 0x44, 0x0b, 0x5b, 0x70, 0x01, 0xff, 0xa1, 0x31, 0xe5, 0x39, + 0xdb, 0x02, 0x44, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xa1, 0x31, 0xe5, 0x39, 0x16, 0x01, 0xe9, 0x31, 0x16, 0x81, 0x24, 0xef, 0x3b, 0x16, 0x01, 0xf5, - 0x33, 0x16, 0x81, 0x17, 0x08, 0x76, 0xb7, 0x01, 0xff, 0xec, 0x37, 0x16, + 0x33, 0x16, 0x81, 0x17, 0x08, 0x92, 0xb7, 0x01, 0xff, 0xec, 0x37, 0x16, 0x81, 0x09, 0xf2, 0x35, 0x16, 0xc1, 0x00, 0xf2, 0x36, 0x16, 0x41, 0xec, 0x38, 0x16, 0x41, 0xf5, 0x34, 0x16, 0x41, 0xe9, 0x32, 0x16, 0x41, 0xe1, 0x30, 0x16, 0x01, 0xe9, 0x3a, 0x16, 0x01, 0xf5, 0x3c, 0x16, 0x41, 0xa1, - 0x17, 0x44, 0x62, 0xe5, 0x44, 0x16, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, - 0x44, 0x49, 0x21, 0x3f, 0x16, 0x01, 0x45, 0x69, 0x46, 0x3e, 0x16, 0x41, - 0x47, 0x5c, 0x14, 0x3d, 0x16, 0x01, 0x4a, 0x2d, 0xa7, 0x40, 0x16, 0x41, + 0x17, 0x44, 0x7e, 0xe5, 0x44, 0x16, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, + 0x44, 0x49, 0x21, 0x3f, 0x16, 0x01, 0x45, 0x7e, 0x46, 0x3e, 0x16, 0x41, + 0x47, 0x5c, 0x14, 0x3d, 0x16, 0x01, 0x4a, 0x40, 0xa7, 0x40, 0x16, 0x41, 0xe1, 0x00, 0x16, 0x81, 0x86, 0x02, 0xa2, 0xf9, 0x01, 0xa3, 0xec, 0x01, 0xa4, 0xd3, 0x01, 0xe5, 0x0a, 0x16, 0x01, 0xa7, 0xc2, 0x01, 0x42, 0x22, 0x00, 0x2e, 0x16, 0x01, 0xe9, 0x02, 0x16, 0x81, 0xb2, 0x01, 0xaa, 0xa5, @@ -7117,7 +7118,7 @@ static const unsigned char uname2c_tree[210697] = { 0x01, 0xae, 0x6d, 0xef, 0x0c, 0x16, 0x01, 0xb0, 0x5d, 0x42, 0x71, 0x00, 0x28, 0x16, 0x01, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, 0x04, 0x16, 0x81, 0x23, 0xb6, 0x06, 0x42, 0x20, 0x20, 0x27, 0x16, 0x41, 0xe1, 0x2a, 0x16, 0x01, - 0x07, 0x77, 0xb7, 0x01, 0xff, 0xec, 0x08, 0x16, 0x81, 0x09, 0xf2, 0x06, + 0x07, 0x93, 0xb7, 0x01, 0xff, 0xec, 0x08, 0x16, 0x81, 0x09, 0xf2, 0x06, 0x16, 0xc1, 0x00, 0xf2, 0x07, 0x16, 0x41, 0xec, 0x09, 0x16, 0x41, 0xf5, 0x05, 0x16, 0x41, 0xe1, 0x1d, 0x16, 0x01, 0x42, 0x22, 0x00, 0x1e, 0x16, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x18, 0x16, 0x01, 0x42, 0x22, 0x00, 0x19, @@ -7134,37 +7135,37 @@ static const unsigned char uname2c_tree[210697] = { 0x42, 0x22, 0x00, 0x14, 0x16, 0x41, 0xe1, 0x24, 0x16, 0x01, 0x42, 0x22, 0x00, 0x25, 0x16, 0x41, 0xe1, 0x01, 0x16, 0x01, 0xe9, 0x0b, 0x16, 0x01, 0xf5, 0x0d, 0x16, 0x41, 0x44, 0x0b, 0x1e, 0x41, 0x16, 0x01, 0x05, 0xf5, - 0x05, 0x06, 0x4b, 0xcc, 0x98, 0x42, 0x16, 0x41, 0x45, 0xd1, 0x09, 0x58, + 0x05, 0x06, 0x4b, 0xdf, 0x98, 0x42, 0x16, 0x41, 0x45, 0xd1, 0x09, 0x58, 0x16, 0x01, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x59, 0x16, 0x01, 0x43, 0xcd, 0x09, 0x51, 0x16, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x50, 0x16, 0x41, 0x44, 0x25, 0x01, 0x53, 0x16, 0x01, 0x42, 0x15, 0x02, 0x52, 0x16, 0x41, 0x44, 0x96, 0x1b, 0x57, 0x16, 0x01, 0x42, 0x30, 0x27, 0x56, 0x16, 0x41, 0x43, 0xd7, 0x04, 0x55, 0x16, 0x01, 0x43, 0xfb, 0x05, 0x54, - 0x16, 0x41, 0x42, 0xfc, 0x06, 0xa7, 0x22, 0x00, 0x4d, 0x8b, 0x80, 0x3b, - 0xf9, 0x41, 0x80, 0x01, 0xff, 0x43, 0x22, 0x79, 0xf4, 0xf4, 0x01, 0x5d, - 0x00, 0x15, 0xf2, 0xf4, 0x41, 0x03, 0x1f, 0x74, 0xcb, 0x01, 0x02, 0x7a, - 0x05, 0x9d, 0x01, 0xa4, 0x84, 0x01, 0xac, 0x66, 0xae, 0x0d, 0x44, 0x34, + 0x16, 0x41, 0x42, 0xfc, 0x06, 0xa7, 0x22, 0x00, 0x4d, 0x92, 0x80, 0x3b, + 0xf9, 0x41, 0x80, 0x01, 0xff, 0x43, 0x29, 0x79, 0xf4, 0xf4, 0x01, 0x5d, + 0x00, 0x15, 0xf2, 0xf4, 0x41, 0x03, 0x34, 0x74, 0xcb, 0x01, 0x02, 0x7a, + 0x05, 0x9d, 0x01, 0xa4, 0x84, 0x01, 0xac, 0x66, 0xae, 0x0d, 0x44, 0x49, 0x4d, 0x9e, 0xfa, 0xc1, 0x00, 0x45, 0xb4, 0x1a, 0xa9, 0xfa, 0x41, 0xa9, 0x43, 0x02, 0xc6, 0x02, 0x04, 0xf9, 0xff, 0x29, 0x40, 0x80, 0x06, 0x4d, - 0x2e, 0x79, 0x13, 0x22, 0x40, 0x44, 0xdb, 0x02, 0x12, 0x22, 0x80, 0x06, + 0x35, 0x79, 0x13, 0x22, 0x40, 0x44, 0xdb, 0x02, 0x12, 0x22, 0x80, 0x06, 0x45, 0x99, 0x20, 0x42, 0x22, 0x40, 0x80, 0x01, 0xff, 0x4b, 0x7d, 0x1c, - 0x3a, 0x2a, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4b, 0xef, 0x58, 0x29, - 0x2a, 0x00, 0x49, 0xf9, 0x10, 0x2a, 0x2a, 0x00, 0x4c, 0x48, 0x87, 0x2b, - 0x2a, 0x00, 0x4b, 0xdf, 0x99, 0x2c, 0x2a, 0x40, 0x43, 0xaf, 0x24, 0x90, - 0xf6, 0x01, 0x44, 0xff, 0x5d, 0xbd, 0xf4, 0x01, 0x44, 0xc9, 0xd6, 0xd5, - 0xf5, 0x41, 0x06, 0x77, 0x56, 0x0c, 0x46, 0x0d, 0xd3, 0x0c, 0xf3, 0x01, - 0x46, 0xb4, 0x46, 0xa5, 0x20, 0x40, 0x46, 0x47, 0xb9, 0x96, 0xfa, 0x01, - 0x45, 0x7e, 0x6a, 0x96, 0xf3, 0x41, 0x04, 0x80, 0x02, 0x06, 0x58, 0xbf, + 0x3a, 0x2a, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4b, 0x04, 0x59, 0x29, + 0x2a, 0x00, 0x49, 0xf9, 0x10, 0x2a, 0x2a, 0x00, 0x4c, 0x4f, 0x87, 0x2b, + 0x2a, 0x00, 0x4b, 0xf2, 0x99, 0x2c, 0x2a, 0x40, 0x43, 0xaf, 0x24, 0x90, + 0xf6, 0x01, 0x44, 0x14, 0x5e, 0xbd, 0xf4, 0x01, 0x44, 0xe5, 0xd6, 0xd5, + 0xf5, 0x41, 0x06, 0x8c, 0x56, 0x0c, 0x46, 0x29, 0xd3, 0x0c, 0xf3, 0x01, + 0x46, 0xc9, 0x46, 0xa5, 0x20, 0x40, 0x46, 0x63, 0xb9, 0x96, 0xfa, 0x01, + 0x45, 0x93, 0x6a, 0x96, 0xf3, 0x41, 0x04, 0x80, 0x02, 0x06, 0x58, 0xbf, 0x26, 0xef, 0x22, 0x40, 0x43, 0xc5, 0x06, 0xb7, 0x00, 0x00, 0x60, 0xcc, 0x0e, 0xc2, 0xfb, 0x41, 0x80, 0x1b, 0xaf, 0x01, 0xff, 0x45, 0xda, 0x02, - 0xb5, 0x00, 0x00, 0x42, 0xbc, 0x04, 0xa0, 0xf9, 0x01, 0x45, 0x9b, 0x38, - 0xa4, 0xf3, 0x01, 0x45, 0x78, 0xc1, 0x2c, 0xf5, 0x41, 0x4b, 0xbd, 0x92, - 0x49, 0x24, 0x00, 0x4c, 0x8c, 0x8b, 0x48, 0x24, 0x40, 0x07, 0xf1, 0x04, + 0xb5, 0x00, 0x00, 0x42, 0xbc, 0x04, 0xa0, 0xf9, 0x01, 0x45, 0xb0, 0x38, + 0xa4, 0xf3, 0x01, 0x45, 0x94, 0xc1, 0x2c, 0xf5, 0x41, 0x4b, 0xd0, 0x92, + 0x49, 0x24, 0x00, 0x4c, 0x93, 0x8b, 0x48, 0x24, 0x40, 0x07, 0xf1, 0x04, 0xbc, 0x02, 0x05, 0xdb, 0x02, 0x9a, 0x02, 0x05, 0xdd, 0x29, 0xfd, 0x01, - 0x0b, 0x5b, 0x70, 0x01, 0xff, 0xe1, 0x54, 0x6f, 0x81, 0xce, 0x01, 0xe5, + 0x0b, 0x70, 0x70, 0x01, 0xff, 0xe1, 0x54, 0x6f, 0x81, 0xce, 0x01, 0xe5, 0x5d, 0x6f, 0x81, 0xae, 0x01, 0xe9, 0x61, 0x6f, 0x81, 0x7a, 0xee, 0x7d, - 0x6f, 0x81, 0x71, 0xef, 0x59, 0x6f, 0x81, 0x56, 0x4a, 0xcd, 0xa7, 0x78, - 0x6f, 0x81, 0x4b, 0xf5, 0x6a, 0x6f, 0x81, 0x1e, 0x42, 0xee, 0xe9, 0x83, + 0x6f, 0x81, 0x71, 0xef, 0x59, 0x6f, 0x81, 0x56, 0x4a, 0xe0, 0xa7, 0x78, + 0x6f, 0x81, 0x4b, 0xf5, 0x6a, 0x6f, 0x81, 0x1e, 0x42, 0x0a, 0xea, 0x83, 0x6f, 0x01, 0xf7, 0x5c, 0x6f, 0x81, 0x0f, 0xf9, 0x71, 0x6f, 0xc1, 0x00, 0xe9, 0x72, 0x6f, 0x01, 0x42, 0x3e, 0x00, 0x80, 0x6f, 0x41, 0xef, 0x5b, 0x6f, 0x41, 0xe1, 0x6b, 0x6f, 0x81, 0x1a, 0x42, 0xd1, 0x09, 0x6f, 0x6f, @@ -7179,25 +7180,25 @@ static const unsigned char uname2c_tree[210697] = { 0x6f, 0x41, 0xee, 0x63, 0x6f, 0xc1, 0x00, 0xe7, 0x64, 0x6f, 0x41, 0xe1, 0x85, 0x6f, 0x01, 0xe9, 0x7a, 0x6f, 0x01, 0xee, 0x5e, 0x6f, 0x81, 0x09, 0xf2, 0x77, 0x6f, 0xc1, 0x00, 0xf2, 0x75, 0x6f, 0x41, 0xe7, 0x5f, 0x6f, - 0x41, 0xe1, 0x55, 0x6f, 0x01, 0xe5, 0x73, 0x6f, 0x81, 0x17, 0x42, 0x46, + 0x41, 0xe1, 0x55, 0x6f, 0x01, 0xe5, 0x73, 0x6f, 0x81, 0x17, 0x42, 0x5b, 0x44, 0x56, 0x6f, 0x01, 0xe9, 0x79, 0x6f, 0x01, 0xee, 0x57, 0x6f, 0x81, 0x04, 0xf5, 0x7b, 0x6f, 0x41, 0xe7, 0x58, 0x6f, 0x41, 0xe5, 0x74, 0x6f, 0x41, 0x45, 0x5c, 0x00, 0x91, 0x6f, 0x01, 0x45, 0x25, 0x06, 0x92, 0x6f, - 0x01, 0x45, 0xc8, 0x00, 0x8f, 0x6f, 0x01, 0x49, 0x08, 0x6d, 0x90, 0x6f, - 0x41, 0x4a, 0x67, 0x9f, 0x51, 0x6f, 0x01, 0x56, 0x3e, 0x2f, 0x4f, 0x6f, - 0x01, 0x09, 0x1b, 0xb5, 0x01, 0xff, 0x4a, 0x67, 0x9f, 0x53, 0x6f, 0x01, - 0x47, 0x1b, 0xcd, 0x52, 0x6f, 0x41, 0xa1, 0x82, 0x04, 0xa2, 0xf5, 0x03, + 0x01, 0x45, 0xc8, 0x00, 0x8f, 0x6f, 0x01, 0x49, 0x1d, 0x6d, 0x90, 0x6f, + 0x41, 0x4a, 0x7a, 0x9f, 0x51, 0x6f, 0x01, 0x56, 0x3e, 0x2f, 0x4f, 0x6f, + 0x01, 0x09, 0x37, 0xb5, 0x01, 0xff, 0x4a, 0x7a, 0x9f, 0x53, 0x6f, 0x01, + 0x47, 0x37, 0xcd, 0x52, 0x6f, 0x41, 0xa1, 0x82, 0x04, 0xa2, 0xf5, 0x03, 0xa4, 0xc1, 0x03, 0x42, 0xed, 0x06, 0x07, 0x6f, 0x01, 0xa7, 0xa7, 0x03, 0xa8, 0x9a, 0x03, 0x42, 0x1b, 0x02, 0x1e, 0x6f, 0x01, 0xac, 0xfb, 0x02, 0xad, 0xee, 0x02, 0xae, 0xb5, 0x02, 0xb0, 0xa8, 0x02, 0xb1, 0x9b, 0x02, 0xb2, 0xec, 0x01, 0xb3, 0xd3, 0x01, 0xb4, 0x7f, 0xb6, 0x73, 0x42, 0xa9, - 0x01, 0x42, 0x6f, 0x01, 0x42, 0x06, 0x24, 0x27, 0x6f, 0x01, 0x03, 0x5b, + 0x01, 0x42, 0x6f, 0x01, 0x42, 0x06, 0x24, 0x27, 0x6f, 0x01, 0x03, 0x70, 0x73, 0x32, 0xba, 0x01, 0xff, 0xe1, 0x3b, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x35, 0x6f, 0x01, 0xb3, 0x19, 0xba, 0x01, 0xff, 0xe1, 0x3d, 0x6f, 0x01, 0xb3, 0x06, 0x42, 0x20, 0x20, 0x40, 0x6f, 0x41, 0xe1, 0x3e, 0x6f, 0x01, 0x42, 0x20, 0x20, 0x41, 0x6f, 0x41, 0xe1, 0x3c, 0x6f, 0x01, 0x42, 0x22, - 0x00, 0x36, 0x6f, 0x41, 0x44, 0x96, 0xe4, 0x31, 0x6f, 0x01, 0x42, 0x1b, - 0x02, 0x20, 0x6f, 0x01, 0x43, 0xcd, 0x40, 0x12, 0x6f, 0x01, 0x42, 0xc1, + 0x00, 0x36, 0x6f, 0x41, 0x44, 0xb2, 0xe4, 0x31, 0x6f, 0x01, 0x42, 0x1b, + 0x02, 0x20, 0x6f, 0x01, 0x43, 0xe2, 0x40, 0x12, 0x6f, 0x01, 0x42, 0xc1, 0x08, 0x02, 0x6f, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x0d, 0x6f, 0x01, 0xb3, 0x06, 0x42, 0x12, 0x00, 0x0c, 0x6f, 0x41, 0xe1, 0x39, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x30, 0x6f, 0x41, 0xe1, 0x08, 0x6f, 0x01, 0x42, 0xed, 0x06, @@ -7210,7 +7211,7 @@ static const unsigned char uname2c_tree[210697] = { 0x99, 0x6f, 0x41, 0xe1, 0x1a, 0x6f, 0x01, 0x42, 0x20, 0x20, 0x1c, 0x6f, 0x41, 0xe1, 0x3a, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x33, 0x6f, 0x01, 0x42, 0x45, 0x05, 0x34, 0x6f, 0x01, 0x42, 0x4b, 0x18, 0x46, 0x6f, 0x41, 0x09, - 0xfd, 0xae, 0x06, 0x42, 0x77, 0x00, 0x4a, 0x6f, 0x41, 0x04, 0x98, 0x1d, + 0x19, 0xaf, 0x06, 0x42, 0x77, 0x00, 0x4a, 0x6f, 0x41, 0x04, 0x98, 0x1d, 0x06, 0x43, 0xa4, 0x02, 0x32, 0x6f, 0x41, 0xd1, 0x9a, 0x6f, 0x01, 0xd2, 0x9b, 0x6f, 0x01, 0xd4, 0x9c, 0x6f, 0x01, 0xd5, 0x9d, 0x6f, 0x01, 0xd6, 0x9e, 0x6f, 0x01, 0xd8, 0x9f, 0x6f, 0x41, 0xe1, 0x21, 0x6f, 0x01, 0x42, @@ -7219,7 +7220,7 @@ static const unsigned char uname2c_tree[210697] = { 0x00, 0x11, 0x6f, 0x01, 0xae, 0x0d, 0xb9, 0x01, 0xff, 0xe1, 0x2c, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x2d, 0x6f, 0x41, 0xe1, 0x14, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x15, 0x6f, 0x41, 0xe1, 0x23, 0x6f, 0x01, 0x42, 0x22, 0x00, - 0x24, 0x6f, 0x41, 0x4a, 0x87, 0x56, 0x50, 0x6f, 0x41, 0xe1, 0x04, 0x6f, + 0x24, 0x6f, 0x41, 0x4a, 0x9c, 0x56, 0x50, 0x6f, 0x41, 0xe1, 0x04, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x05, 0x6f, 0x41, 0xe1, 0x16, 0x6f, 0x01, 0xa8, 0x06, 0x42, 0x20, 0x20, 0x17, 0x6f, 0x41, 0xe1, 0x18, 0x6f, 0x01, 0x42, 0x20, 0x20, 0x19, 0x6f, 0x41, 0xe1, 0x26, 0x6f, 0x01, 0x42, 0x22, 0x00, @@ -7230,73 +7231,73 @@ static const unsigned char uname2c_tree[210697] = { 0x4b, 0x18, 0x47, 0x6f, 0x01, 0x42, 0x59, 0x00, 0x2b, 0x6f, 0x41, 0xe1, 0x1b, 0x6f, 0x01, 0x42, 0x20, 0x20, 0x1d, 0x6f, 0x41, 0xe1, 0x01, 0x6f, 0x01, 0x42, 0x0d, 0x00, 0x45, 0x6f, 0x41, 0xe8, 0x43, 0x6f, 0x01, 0x07, - 0xa4, 0x79, 0x01, 0xff, 0x42, 0x6c, 0x00, 0x06, 0x6f, 0x01, 0xae, 0x06, - 0x43, 0xff, 0x91, 0x3f, 0x6f, 0x41, 0xe1, 0x13, 0x6f, 0x01, 0x42, 0x24, - 0x02, 0x25, 0x6f, 0x41, 0xa1, 0xb1, 0x1c, 0x09, 0x0a, 0xae, 0xa0, 0x1c, - 0xa4, 0xba, 0x16, 0x0b, 0xdb, 0x93, 0xa3, 0x12, 0xac, 0x94, 0x12, 0x42, - 0x08, 0x07, 0xdd, 0xf4, 0x01, 0xae, 0xa1, 0x07, 0xb2, 0x55, 0x4d, 0x68, + 0xab, 0x79, 0x01, 0xff, 0x42, 0x6c, 0x00, 0x06, 0x6f, 0x01, 0xae, 0x06, + 0x43, 0x12, 0x92, 0x3f, 0x6f, 0x41, 0xe1, 0x13, 0x6f, 0x01, 0x42, 0x24, + 0x02, 0x25, 0x6f, 0x41, 0xa1, 0xb1, 0x1c, 0x09, 0x26, 0xae, 0xa0, 0x1c, + 0xa4, 0xba, 0x16, 0x0b, 0xee, 0x93, 0xa3, 0x12, 0xac, 0x94, 0x12, 0x42, + 0x08, 0x07, 0xdd, 0xf4, 0x01, 0xae, 0xa1, 0x07, 0xb2, 0x55, 0x4d, 0x6f, 0x81, 0x95, 0x00, 0x00, 0x02, 0x19, 0x01, 0x01, 0xff, 0x05, 0x36, 0x00, 0x04, 0xef, 0x87, 0xf6, 0x41, 0x45, 0xb7, 0x20, 0xd1, 0x23, 0x00, 0x0a, - 0xad, 0xa4, 0x2c, 0x49, 0x82, 0xb4, 0xd9, 0x23, 0x00, 0x4f, 0x54, 0x6c, - 0xd3, 0x23, 0x00, 0xb4, 0x01, 0xff, 0x48, 0x3d, 0xbc, 0xd8, 0x23, 0x00, - 0x46, 0xff, 0xd4, 0xd7, 0x23, 0x00, 0x0a, 0xbb, 0xaa, 0x01, 0xff, 0x46, - 0x5c, 0x09, 0xd6, 0x23, 0x00, 0x49, 0x5a, 0x6c, 0xd5, 0x23, 0x40, 0x45, - 0x1c, 0x33, 0xd2, 0x23, 0x00, 0x4a, 0x67, 0xa9, 0xd4, 0x23, 0x40, 0x44, - 0xcb, 0x5c, 0x3f, 0x26, 0x00, 0x06, 0x39, 0xd4, 0x06, 0x46, 0xeb, 0x1a, - 0xdc, 0xf9, 0x41, 0x08, 0x35, 0xbb, 0xc2, 0x01, 0x0d, 0xa2, 0x7c, 0x01, - 0xff, 0x07, 0xf1, 0x04, 0x0d, 0x4b, 0xd1, 0x9a, 0x9e, 0x09, 0xc1, 0x00, - 0x42, 0x50, 0xe8, 0x9f, 0x09, 0x41, 0xe1, 0x80, 0x09, 0x01, 0x42, 0x16, + 0xc0, 0xa4, 0x2c, 0x49, 0x9e, 0xb4, 0xd9, 0x23, 0x00, 0x4f, 0x69, 0x6c, + 0xd3, 0x23, 0x00, 0xb4, 0x01, 0xff, 0x48, 0x59, 0xbc, 0xd8, 0x23, 0x00, + 0x46, 0x1b, 0xd5, 0xd7, 0x23, 0x00, 0x0a, 0xce, 0xaa, 0x01, 0xff, 0x46, + 0x5c, 0x09, 0xd6, 0x23, 0x00, 0x49, 0x6f, 0x6c, 0xd5, 0x23, 0x40, 0x45, + 0x1c, 0x33, 0xd2, 0x23, 0x00, 0x4a, 0x7a, 0xa9, 0xd4, 0x23, 0x40, 0x44, + 0xe0, 0x5c, 0x3f, 0x26, 0x00, 0x06, 0x55, 0xd4, 0x06, 0x46, 0xeb, 0x1a, + 0xdc, 0xf9, 0x41, 0x08, 0x51, 0xbb, 0xc2, 0x01, 0x0d, 0xa9, 0x7c, 0x01, + 0xff, 0x07, 0xf1, 0x04, 0x0d, 0x4b, 0xe4, 0x9a, 0x9e, 0x09, 0xc1, 0x00, + 0x42, 0x6c, 0xe8, 0x9f, 0x09, 0x41, 0xe1, 0x80, 0x09, 0x01, 0x42, 0x16, 0x00, 0x86, 0x09, 0x81, 0x9a, 0x01, 0x42, 0x68, 0x0f, 0x9d, 0x09, 0x01, - 0xe5, 0x81, 0x09, 0x01, 0x43, 0x7e, 0x4c, 0x92, 0x09, 0x01, 0xe9, 0x82, + 0xe5, 0x81, 0x09, 0x01, 0x43, 0x93, 0x4c, 0x92, 0x09, 0x01, 0xe9, 0x82, 0x09, 0x01, 0xab, 0x7a, 0x42, 0x74, 0x00, 0x90, 0x09, 0x01, 0x42, 0x6c, 0x00, 0x89, 0x09, 0x01, 0xae, 0x56, 0xef, 0x83, 0x09, 0x01, 0x42, 0xc1, 0x08, 0x88, 0x09, 0x01, 0x42, 0x9d, 0x12, 0x97, 0x09, 0x01, 0x42, 0x71, 0x00, 0x8e, 0x09, 0x81, 0x39, 0xb3, 0x28, 0xb4, 0x0c, 0x42, 0xa9, 0x01, 0x85, 0x09, 0x01, 0x42, 0x20, 0x20, 0x84, 0x09, 0x41, 0xe1, 0x98, 0x09, 0x81, 0x0f, 0xe5, 0x9a, 0x09, 0x81, 0x04, 0xef, 0x9c, 0x09, 0x41, 0x42, - 0x50, 0xe8, 0x9b, 0x09, 0x41, 0x42, 0x50, 0xe8, 0x99, 0x09, 0x41, 0xe1, - 0x93, 0x09, 0x81, 0x04, 0xe5, 0x95, 0x09, 0x41, 0x42, 0x50, 0xe8, 0x94, - 0x09, 0x41, 0x42, 0x50, 0xe8, 0x8f, 0x09, 0x41, 0xe1, 0x8a, 0x09, 0x81, - 0x0b, 0xe5, 0x8c, 0x09, 0xc1, 0x00, 0x42, 0x50, 0xe8, 0x8d, 0x09, 0x41, - 0x42, 0x50, 0xe8, 0x8b, 0x09, 0x41, 0xe1, 0x96, 0x09, 0x01, 0x42, 0x22, - 0x00, 0x91, 0x09, 0x41, 0x42, 0x50, 0xe8, 0x87, 0x09, 0x41, 0x09, 0x76, + 0x6c, 0xe8, 0x9b, 0x09, 0x41, 0x42, 0x6c, 0xe8, 0x99, 0x09, 0x41, 0xe1, + 0x93, 0x09, 0x81, 0x04, 0xe5, 0x95, 0x09, 0x41, 0x42, 0x6c, 0xe8, 0x94, + 0x09, 0x41, 0x42, 0x6c, 0xe8, 0x8f, 0x09, 0x41, 0xe1, 0x8a, 0x09, 0x81, + 0x0b, 0xe5, 0x8c, 0x09, 0xc1, 0x00, 0x42, 0x6c, 0xe8, 0x8d, 0x09, 0x41, + 0x42, 0x6c, 0xe8, 0x8b, 0x09, 0x41, 0xe1, 0x96, 0x09, 0x01, 0x42, 0x22, + 0x00, 0x91, 0x09, 0x41, 0x42, 0x6c, 0xe8, 0x87, 0x09, 0x41, 0x09, 0x8b, 0x54, 0x99, 0x04, 0xac, 0x80, 0x03, 0x07, 0xbf, 0x35, 0x01, 0xff, 0x45, 0xd1, 0x09, 0xc7, 0x09, 0x81, 0xd8, 0x02, 0xa6, 0xfc, 0x01, 0x44, 0xb8, 0x27, 0xc8, 0x09, 0x81, 0xd9, 0x01, 0x43, 0xcd, 0x09, 0xc0, 0x09, 0x81, 0xbb, 0x01, 0xb3, 0x67, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xc9, 0x09, 0x81, 0x57, 0xa8, 0x2b, 0xb7, 0x01, 0xff, 0x44, 0x98, 0x1b, 0xca, 0x09, 0x81, 0x1b, 0xef, 0xc1, 0x09, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0xe9, - 0x0f, 0xd3, 0x09, 0x81, 0x06, 0x48, 0x54, 0x58, 0xdc, 0x09, 0x41, 0x49, - 0x53, 0x58, 0xee, 0x09, 0x41, 0x49, 0x53, 0x58, 0xe5, 0x09, 0x41, 0x44, + 0x0f, 0xd3, 0x09, 0x81, 0x06, 0x48, 0x69, 0x58, 0xdc, 0x09, 0x41, 0x49, + 0x68, 0x58, 0xee, 0x09, 0x41, 0x49, 0x68, 0x58, 0xe5, 0x09, 0x41, 0x44, 0xf3, 0x0f, 0xcb, 0x09, 0x81, 0x1d, 0x43, 0x26, 0x01, 0xc2, 0x09, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, 0xd4, 0x09, 0x81, 0x06, 0x48, - 0x54, 0x58, 0xdd, 0x09, 0x41, 0x49, 0x53, 0x58, 0xef, 0x09, 0x41, 0x49, - 0x53, 0x58, 0xe6, 0x09, 0x41, 0x49, 0x53, 0x58, 0xe4, 0x09, 0x41, 0x44, + 0x69, 0x58, 0xdd, 0x09, 0x41, 0x49, 0x68, 0x58, 0xef, 0x09, 0x41, 0x49, + 0x68, 0x58, 0xe6, 0x09, 0x41, 0x49, 0x68, 0x58, 0xe4, 0x09, 0x41, 0x44, 0x96, 0x1b, 0xc6, 0x09, 0x81, 0x29, 0x42, 0x30, 0x27, 0xc5, 0x09, 0xc1, - 0x00, 0x80, 0x0d, 0x42, 0xf5, 0x0f, 0xce, 0x09, 0xc1, 0x00, 0x49, 0x53, + 0x00, 0x80, 0x0d, 0x42, 0xf5, 0x0f, 0xce, 0x09, 0xc1, 0x00, 0x49, 0x68, 0x58, 0xe9, 0x09, 0x41, 0x47, 0xe9, 0x0f, 0xd7, 0x09, 0x81, 0x06, 0x48, - 0x54, 0x58, 0xe0, 0x09, 0x41, 0x49, 0x53, 0x58, 0xf2, 0x09, 0x41, 0x80, - 0x0d, 0x42, 0xf5, 0x0f, 0xcf, 0x09, 0xc1, 0x00, 0x49, 0x53, 0x58, 0xea, - 0x09, 0x41, 0x47, 0xe9, 0x0f, 0xd8, 0x09, 0x81, 0x06, 0x48, 0x54, 0x58, - 0xe1, 0x09, 0x41, 0x49, 0x53, 0x58, 0xf3, 0x09, 0x41, 0x80, 0x01, 0xff, - 0x47, 0xe9, 0x0f, 0xd2, 0x09, 0x81, 0x06, 0x48, 0x54, 0x58, 0xdb, 0x09, - 0x41, 0x49, 0x53, 0x58, 0xed, 0x09, 0x41, 0x80, 0x06, 0x4b, 0xa2, 0x9b, - 0xec, 0x09, 0x41, 0x47, 0xe9, 0x0f, 0xda, 0x09, 0x81, 0x06, 0x48, 0x54, - 0x58, 0xe3, 0x09, 0x41, 0x49, 0x53, 0x58, 0xf5, 0x09, 0x41, 0xa9, 0x2d, + 0x69, 0x58, 0xe0, 0x09, 0x41, 0x49, 0x68, 0x58, 0xf2, 0x09, 0x41, 0x80, + 0x0d, 0x42, 0xf5, 0x0f, 0xcf, 0x09, 0xc1, 0x00, 0x49, 0x68, 0x58, 0xea, + 0x09, 0x41, 0x47, 0xe9, 0x0f, 0xd8, 0x09, 0x81, 0x06, 0x48, 0x69, 0x58, + 0xe1, 0x09, 0x41, 0x49, 0x68, 0x58, 0xf3, 0x09, 0x41, 0x80, 0x01, 0xff, + 0x47, 0xe9, 0x0f, 0xd2, 0x09, 0x81, 0x06, 0x48, 0x69, 0x58, 0xdb, 0x09, + 0x41, 0x49, 0x68, 0x58, 0xed, 0x09, 0x41, 0x80, 0x06, 0x4b, 0xb5, 0x9b, + 0xec, 0x09, 0x41, 0x47, 0xe9, 0x0f, 0xda, 0x09, 0x81, 0x06, 0x48, 0x69, + 0x58, 0xe3, 0x09, 0x41, 0x49, 0x68, 0x58, 0xf5, 0x09, 0x41, 0xa9, 0x2d, 0xaf, 0x01, 0xff, 0x43, 0xf4, 0x0f, 0xcc, 0x09, 0x81, 0x1d, 0x42, 0x42, 0x00, 0xc3, 0x09, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, 0xd5, - 0x09, 0x81, 0x06, 0x48, 0x54, 0x58, 0xde, 0x09, 0x41, 0x49, 0x53, 0x58, - 0xf0, 0x09, 0x41, 0x49, 0x53, 0x58, 0xe7, 0x09, 0x41, 0x43, 0xcf, 0x47, + 0x09, 0x81, 0x06, 0x48, 0x69, 0x58, 0xde, 0x09, 0x41, 0x49, 0x68, 0x58, + 0xf0, 0x09, 0x41, 0x49, 0x68, 0x58, 0xe7, 0x09, 0x41, 0x43, 0xe4, 0x47, 0xcd, 0x09, 0x81, 0x1d, 0x42, 0x32, 0x00, 0xc4, 0x09, 0xc1, 0x00, 0x80, - 0x01, 0xff, 0x47, 0xe9, 0x0f, 0xd6, 0x09, 0x81, 0x06, 0x48, 0x54, 0x58, - 0xdf, 0x09, 0x41, 0x49, 0x53, 0x58, 0xf1, 0x09, 0x41, 0x49, 0x53, 0x58, - 0xe8, 0x09, 0x41, 0x80, 0x06, 0x4a, 0xa3, 0x9b, 0xeb, 0x09, 0x41, 0x47, - 0xe9, 0x0f, 0xd9, 0x09, 0x81, 0x06, 0x48, 0x54, 0x58, 0xe2, 0x09, 0x41, - 0x49, 0x53, 0x58, 0xf4, 0x09, 0x41, 0x06, 0xf2, 0x04, 0x11, 0x08, 0x10, - 0x3b, 0x01, 0xff, 0x43, 0x21, 0xe9, 0xbf, 0x09, 0x01, 0x43, 0x3d, 0x58, + 0x01, 0xff, 0x47, 0xe9, 0x0f, 0xd6, 0x09, 0x81, 0x06, 0x48, 0x69, 0x58, + 0xdf, 0x09, 0x41, 0x49, 0x68, 0x58, 0xf1, 0x09, 0x41, 0x49, 0x68, 0x58, + 0xe8, 0x09, 0x41, 0x80, 0x06, 0x4a, 0xb6, 0x9b, 0xeb, 0x09, 0x41, 0x47, + 0xe9, 0x0f, 0xd9, 0x09, 0x81, 0x06, 0x48, 0x69, 0x58, 0xe2, 0x09, 0x41, + 0x49, 0x68, 0x58, 0xf4, 0x09, 0x41, 0x06, 0xf2, 0x04, 0x11, 0x08, 0x25, + 0x3b, 0x01, 0xff, 0x43, 0x3d, 0xe9, 0xbf, 0x09, 0x01, 0x43, 0x52, 0x58, 0xbe, 0x09, 0x41, 0xe1, 0xa0, 0x09, 0x81, 0x76, 0x42, 0x16, 0x00, 0xa6, 0x09, 0x01, 0x42, 0x68, 0x0f, 0xb7, 0x09, 0x01, 0xe5, 0xa1, 0x09, 0x01, - 0x43, 0x7e, 0x4c, 0xae, 0x09, 0x01, 0xe9, 0xa2, 0x09, 0x01, 0xab, 0x50, + 0x43, 0x93, 0x4c, 0xae, 0x09, 0x01, 0xe9, 0xa2, 0x09, 0x01, 0xab, 0x50, 0x42, 0x74, 0x00, 0xac, 0x09, 0x01, 0x42, 0x6c, 0x00, 0xa8, 0x09, 0x01, 0xae, 0x3a, 0xef, 0xa3, 0x09, 0x01, 0x42, 0xc1, 0x08, 0xa7, 0x09, 0x01, 0x42, 0x9d, 0x12, 0xb3, 0x09, 0x01, 0x42, 0x71, 0x00, 0xab, 0x09, 0x01, @@ -7304,162 +7305,162 @@ static const unsigned char uname2c_tree[210697] = { 0x20, 0xa4, 0x09, 0x41, 0xe1, 0xb4, 0x09, 0x01, 0xe5, 0xb5, 0x09, 0x01, 0xef, 0xb6, 0x09, 0x41, 0xe1, 0xaf, 0x09, 0x01, 0xe5, 0xb1, 0x09, 0x41, 0xe1, 0xa9, 0x09, 0x01, 0xe5, 0xaa, 0x09, 0x41, 0xe1, 0xb2, 0x09, 0x01, - 0x42, 0x22, 0x00, 0xad, 0x09, 0x41, 0x49, 0x88, 0x8c, 0xb0, 0x09, 0x41, - 0xa5, 0x47, 0xa6, 0x39, 0x4d, 0x12, 0x7f, 0xfe, 0x09, 0x01, 0x04, 0xcd, - 0x09, 0x23, 0xb3, 0x15, 0xb4, 0x01, 0xff, 0x4b, 0xb5, 0x72, 0xff, 0x09, - 0x01, 0x4d, 0xbc, 0x7c, 0xf8, 0x09, 0x01, 0x4b, 0xc0, 0x9c, 0xf7, 0x09, - 0x41, 0x4d, 0xb3, 0x72, 0xfc, 0x09, 0x01, 0x4b, 0xa9, 0x95, 0xfb, 0x09, - 0x41, 0x44, 0x22, 0x00, 0xbd, 0x09, 0x01, 0x47, 0xb8, 0x72, 0xf6, 0x09, - 0x41, 0x4c, 0xf8, 0x88, 0xfa, 0x09, 0x01, 0x4c, 0xf8, 0x8b, 0xf9, 0x09, - 0x41, 0x4d, 0xf0, 0x7c, 0xfd, 0x09, 0x01, 0x4e, 0xb2, 0x72, 0xbc, 0x09, - 0x41, 0x0b, 0xc8, 0x92, 0x0c, 0x57, 0x0e, 0x2c, 0x4e, 0xf5, 0x01, 0x48, - 0xf4, 0x45, 0xb9, 0xf6, 0x41, 0x11, 0x99, 0x53, 0xa3, 0x0a, 0x06, 0xf4, - 0x05, 0xe1, 0x09, 0x0a, 0xbd, 0xa8, 0x01, 0xff, 0x90, 0xeb, 0x04, 0x91, + 0x42, 0x22, 0x00, 0xad, 0x09, 0x41, 0x49, 0x8f, 0x8c, 0xb0, 0x09, 0x41, + 0xa5, 0x47, 0xa6, 0x39, 0x4d, 0x19, 0x7f, 0xfe, 0x09, 0x01, 0x04, 0xcd, + 0x09, 0x23, 0xb3, 0x15, 0xb4, 0x01, 0xff, 0x4b, 0xca, 0x72, 0xff, 0x09, + 0x01, 0x4d, 0xc3, 0x7c, 0xf8, 0x09, 0x01, 0x4b, 0xd3, 0x9c, 0xf7, 0x09, + 0x41, 0x4d, 0xc8, 0x72, 0xfc, 0x09, 0x01, 0x4b, 0xbc, 0x95, 0xfb, 0x09, + 0x41, 0x44, 0x22, 0x00, 0xbd, 0x09, 0x01, 0x47, 0xcd, 0x72, 0xf6, 0x09, + 0x41, 0x4c, 0xff, 0x88, 0xfa, 0x09, 0x01, 0x4c, 0xff, 0x8b, 0xf9, 0x09, + 0x41, 0x4d, 0xf7, 0x7c, 0xfd, 0x09, 0x01, 0x4e, 0xc7, 0x72, 0xbc, 0x09, + 0x41, 0x0b, 0xdb, 0x92, 0x0c, 0x57, 0x0e, 0x2c, 0x4e, 0xf5, 0x01, 0x48, + 0x09, 0x46, 0xb9, 0xf6, 0x41, 0x11, 0xae, 0x53, 0xa3, 0x0a, 0x06, 0xf4, + 0x05, 0xe1, 0x09, 0x0a, 0xd0, 0xa8, 0x01, 0xff, 0x90, 0xeb, 0x04, 0x91, 0x01, 0xff, 0x90, 0xa9, 0x04, 0x91, 0xea, 0x03, 0x92, 0xab, 0x03, 0x93, 0xec, 0x02, 0x94, 0xad, 0x02, 0x95, 0xee, 0x01, 0x96, 0xaf, 0x01, 0x97, - 0x71, 0x98, 0x33, 0x99, 0x01, 0xff, 0x45, 0x74, 0xd7, 0x86, 0xe8, 0x01, - 0x46, 0x57, 0xce, 0xb1, 0xe8, 0x01, 0x45, 0xe7, 0xd7, 0xb6, 0xe8, 0x01, - 0x45, 0x0f, 0xd8, 0x75, 0xe8, 0x01, 0x45, 0x69, 0xd8, 0x0f, 0xe8, 0x01, - 0x44, 0xd6, 0xe2, 0x2c, 0xe8, 0x01, 0x45, 0x96, 0xd8, 0x35, 0xe8, 0x01, - 0x45, 0xaf, 0xd8, 0x61, 0xe8, 0x41, 0x45, 0x65, 0xd7, 0x42, 0xe8, 0x01, - 0x44, 0x0a, 0xe2, 0x43, 0xe8, 0x01, 0x44, 0x6a, 0xe2, 0xb9, 0xe8, 0x01, - 0x4b, 0x97, 0x90, 0x82, 0xe8, 0x01, 0x46, 0x9f, 0xce, 0x89, 0xe8, 0x01, - 0x44, 0x12, 0xe3, 0xba, 0xe8, 0x01, 0x44, 0xc3, 0xce, 0x6a, 0xe8, 0x01, - 0x46, 0xe7, 0xce, 0x9b, 0xe8, 0x01, 0x46, 0xff, 0xce, 0x97, 0xe8, 0x01, - 0x46, 0x11, 0xcf, 0x1a, 0xe8, 0x41, 0x46, 0x39, 0xce, 0xc2, 0xe8, 0x01, - 0x44, 0x2e, 0xe2, 0xad, 0xe8, 0x01, 0x46, 0x69, 0xce, 0x99, 0xe8, 0x01, - 0x45, 0x1e, 0xd8, 0xbc, 0xe8, 0x01, 0x45, 0x4b, 0xd8, 0x9a, 0xe8, 0x01, - 0x49, 0x6c, 0xac, 0x52, 0xe8, 0x01, 0x44, 0x2e, 0xe3, 0x68, 0xe8, 0x01, - 0x47, 0x3f, 0xc4, 0x8b, 0xe8, 0x01, 0x44, 0x8e, 0xe3, 0x2d, 0xe8, 0x01, - 0x45, 0x0e, 0xd9, 0x07, 0xe8, 0x41, 0x45, 0x83, 0xd7, 0x50, 0xe8, 0x01, - 0x4a, 0x45, 0x9e, 0x9c, 0xe8, 0x01, 0x45, 0xf6, 0xd7, 0x31, 0xe8, 0x01, - 0x44, 0x76, 0xe2, 0x25, 0xe8, 0x01, 0x46, 0xab, 0xce, 0xc0, 0xe8, 0x01, - 0x44, 0x06, 0xe3, 0x27, 0xe8, 0x01, 0x46, 0xbd, 0xce, 0x87, 0xe8, 0x01, - 0x46, 0xd5, 0xce, 0x88, 0xe8, 0x01, 0x44, 0x96, 0xe3, 0x85, 0xe8, 0x01, - 0x45, 0x27, 0xd9, 0x67, 0xe8, 0x41, 0x45, 0x60, 0xd7, 0x1e, 0xe8, 0x01, - 0x44, 0x3e, 0xe2, 0xbb, 0xe8, 0x01, 0x45, 0xe2, 0xd7, 0xb5, 0xe8, 0x01, - 0x44, 0x97, 0x90, 0x3c, 0xe8, 0x01, 0x46, 0x99, 0xce, 0x19, 0xe8, 0x01, - 0x44, 0xee, 0xe2, 0x83, 0xe8, 0x01, 0x47, 0x31, 0xc4, 0x7c, 0xe8, 0x01, - 0x45, 0xbe, 0xd8, 0x4e, 0xe8, 0x01, 0x45, 0xeb, 0xd8, 0xa5, 0xe8, 0x01, - 0x47, 0x4d, 0xc4, 0x7e, 0xe8, 0x41, 0x44, 0xda, 0xe1, 0x6e, 0xe8, 0x01, - 0x45, 0xb5, 0xd7, 0x58, 0xe8, 0x01, 0x4a, 0x59, 0x9e, 0x9e, 0xe8, 0x01, - 0x45, 0x23, 0xd8, 0x10, 0xe8, 0x01, 0x45, 0x5f, 0xd8, 0xbe, 0xe8, 0x01, - 0x45, 0x78, 0xd8, 0x93, 0xe8, 0x01, 0x46, 0xc9, 0xce, 0x7b, 0xe8, 0x01, - 0x43, 0x97, 0xe8, 0x28, 0xe8, 0x01, 0x45, 0xe1, 0xd8, 0xa8, 0xe8, 0x01, - 0x46, 0x17, 0xcf, 0xb7, 0xe8, 0x41, 0x45, 0x79, 0xd7, 0x72, 0xe8, 0x01, - 0x44, 0x1a, 0xe2, 0x2a, 0xe8, 0x01, 0x45, 0xce, 0xd7, 0x9f, 0xe8, 0x01, - 0x45, 0x05, 0xd8, 0x5f, 0xe8, 0x01, 0x46, 0xa5, 0xce, 0xb8, 0xe8, 0x01, - 0x44, 0xf2, 0xe2, 0x2b, 0xe8, 0x01, 0x45, 0x9b, 0xd8, 0x33, 0xe8, 0x01, - 0x44, 0x66, 0xe3, 0x29, 0xe8, 0x01, 0x44, 0x86, 0xe3, 0x21, 0xe8, 0x01, - 0x45, 0x3b, 0xd9, 0x13, 0xe8, 0x41, 0x46, 0x2d, 0xce, 0x7d, 0xe8, 0x01, - 0x44, 0xb5, 0xd7, 0x59, 0xe8, 0x01, 0x45, 0xdd, 0xd7, 0x95, 0xe8, 0x01, - 0x45, 0x14, 0xd8, 0xae, 0xe8, 0x01, 0x45, 0x37, 0xd8, 0xa6, 0xe8, 0x01, - 0x45, 0x7d, 0xd8, 0xb0, 0xe8, 0x01, 0x45, 0xa5, 0xd8, 0x0b, 0xe8, 0x01, - 0x47, 0x38, 0xc4, 0x7f, 0xe8, 0x01, 0x46, 0xf9, 0xce, 0x70, 0xe8, 0x01, - 0x45, 0x1d, 0xd9, 0xaf, 0xe8, 0x41, 0x49, 0x2d, 0xac, 0x3d, 0xe8, 0x01, - 0x44, 0x12, 0xe2, 0x84, 0xe8, 0x01, 0x46, 0x63, 0xce, 0xa4, 0xe8, 0x01, - 0x44, 0x7a, 0xe2, 0x4f, 0xe8, 0x01, 0x45, 0x64, 0xd8, 0x0d, 0xe8, 0x01, - 0x47, 0x2a, 0xc4, 0x7a, 0xe8, 0x01, 0x44, 0x52, 0xe3, 0x32, 0xe8, 0x01, - 0x45, 0xc8, 0xd8, 0x66, 0xe8, 0x01, 0x44, 0xae, 0xe3, 0x0c, 0xe8, 0x01, - 0x45, 0x22, 0xd9, 0xb2, 0xe8, 0x41, 0x43, 0x3a, 0xe8, 0x26, 0xe8, 0x01, - 0x45, 0x9c, 0xd7, 0x62, 0xe8, 0x01, 0x45, 0xec, 0xd7, 0x91, 0xe8, 0x01, - 0x45, 0x00, 0xd8, 0x20, 0xe8, 0x01, 0x45, 0x5a, 0xd8, 0x49, 0xe8, 0x01, - 0x4b, 0xa2, 0x90, 0x9d, 0xe8, 0x01, 0x4c, 0x54, 0x84, 0x81, 0xe8, 0x01, - 0x45, 0xb4, 0xd8, 0xaa, 0xe8, 0x01, 0x45, 0xe6, 0xd8, 0xa3, 0xe8, 0x01, - 0x45, 0x40, 0xd9, 0x56, 0xe8, 0x41, 0x90, 0xb5, 0x04, 0x91, 0xf6, 0x03, + 0x71, 0x98, 0x33, 0x99, 0x01, 0xff, 0x45, 0x90, 0xd7, 0x86, 0xe8, 0x01, + 0x46, 0x73, 0xce, 0xb1, 0xe8, 0x01, 0x45, 0x03, 0xd8, 0xb6, 0xe8, 0x01, + 0x45, 0x2b, 0xd8, 0x75, 0xe8, 0x01, 0x45, 0x85, 0xd8, 0x0f, 0xe8, 0x01, + 0x44, 0xf2, 0xe2, 0x2c, 0xe8, 0x01, 0x45, 0xb2, 0xd8, 0x35, 0xe8, 0x01, + 0x45, 0xcb, 0xd8, 0x61, 0xe8, 0x41, 0x45, 0x81, 0xd7, 0x42, 0xe8, 0x01, + 0x44, 0x26, 0xe2, 0x43, 0xe8, 0x01, 0x44, 0x86, 0xe2, 0xb9, 0xe8, 0x01, + 0x4b, 0xaa, 0x90, 0x82, 0xe8, 0x01, 0x46, 0xbb, 0xce, 0x89, 0xe8, 0x01, + 0x44, 0x2e, 0xe3, 0xba, 0xe8, 0x01, 0x44, 0xdf, 0xce, 0x6a, 0xe8, 0x01, + 0x46, 0x03, 0xcf, 0x9b, 0xe8, 0x01, 0x46, 0x1b, 0xcf, 0x97, 0xe8, 0x01, + 0x46, 0x2d, 0xcf, 0x1a, 0xe8, 0x41, 0x46, 0x55, 0xce, 0xc2, 0xe8, 0x01, + 0x44, 0x4a, 0xe2, 0xad, 0xe8, 0x01, 0x46, 0x85, 0xce, 0x99, 0xe8, 0x01, + 0x45, 0x3a, 0xd8, 0xbc, 0xe8, 0x01, 0x45, 0x67, 0xd8, 0x9a, 0xe8, 0x01, + 0x49, 0x7f, 0xac, 0x52, 0xe8, 0x01, 0x44, 0x4a, 0xe3, 0x68, 0xe8, 0x01, + 0x47, 0x5b, 0xc4, 0x8b, 0xe8, 0x01, 0x44, 0xaa, 0xe3, 0x2d, 0xe8, 0x01, + 0x45, 0x2a, 0xd9, 0x07, 0xe8, 0x41, 0x45, 0x9f, 0xd7, 0x50, 0xe8, 0x01, + 0x4a, 0x58, 0x9e, 0x9c, 0xe8, 0x01, 0x45, 0x12, 0xd8, 0x31, 0xe8, 0x01, + 0x44, 0x92, 0xe2, 0x25, 0xe8, 0x01, 0x46, 0xc7, 0xce, 0xc0, 0xe8, 0x01, + 0x44, 0x22, 0xe3, 0x27, 0xe8, 0x01, 0x46, 0xd9, 0xce, 0x87, 0xe8, 0x01, + 0x46, 0xf1, 0xce, 0x88, 0xe8, 0x01, 0x44, 0xb2, 0xe3, 0x85, 0xe8, 0x01, + 0x45, 0x43, 0xd9, 0x67, 0xe8, 0x41, 0x45, 0x7c, 0xd7, 0x1e, 0xe8, 0x01, + 0x44, 0x5a, 0xe2, 0xbb, 0xe8, 0x01, 0x45, 0xfe, 0xd7, 0xb5, 0xe8, 0x01, + 0x44, 0xaa, 0x90, 0x3c, 0xe8, 0x01, 0x46, 0xb5, 0xce, 0x19, 0xe8, 0x01, + 0x44, 0x0a, 0xe3, 0x83, 0xe8, 0x01, 0x47, 0x4d, 0xc4, 0x7c, 0xe8, 0x01, + 0x45, 0xda, 0xd8, 0x4e, 0xe8, 0x01, 0x45, 0x07, 0xd9, 0xa5, 0xe8, 0x01, + 0x47, 0x69, 0xc4, 0x7e, 0xe8, 0x41, 0x44, 0xf6, 0xe1, 0x6e, 0xe8, 0x01, + 0x45, 0xd1, 0xd7, 0x58, 0xe8, 0x01, 0x4a, 0x6c, 0x9e, 0x9e, 0xe8, 0x01, + 0x45, 0x3f, 0xd8, 0x10, 0xe8, 0x01, 0x45, 0x7b, 0xd8, 0xbe, 0xe8, 0x01, + 0x45, 0x94, 0xd8, 0x93, 0xe8, 0x01, 0x46, 0xe5, 0xce, 0x7b, 0xe8, 0x01, + 0x43, 0xb3, 0xe8, 0x28, 0xe8, 0x01, 0x45, 0xfd, 0xd8, 0xa8, 0xe8, 0x01, + 0x46, 0x33, 0xcf, 0xb7, 0xe8, 0x41, 0x45, 0x95, 0xd7, 0x72, 0xe8, 0x01, + 0x44, 0x36, 0xe2, 0x2a, 0xe8, 0x01, 0x45, 0xea, 0xd7, 0x9f, 0xe8, 0x01, + 0x45, 0x21, 0xd8, 0x5f, 0xe8, 0x01, 0x46, 0xc1, 0xce, 0xb8, 0xe8, 0x01, + 0x44, 0x0e, 0xe3, 0x2b, 0xe8, 0x01, 0x45, 0xb7, 0xd8, 0x33, 0xe8, 0x01, + 0x44, 0x82, 0xe3, 0x29, 0xe8, 0x01, 0x44, 0xa2, 0xe3, 0x21, 0xe8, 0x01, + 0x45, 0x57, 0xd9, 0x13, 0xe8, 0x41, 0x46, 0x49, 0xce, 0x7d, 0xe8, 0x01, + 0x44, 0xd1, 0xd7, 0x59, 0xe8, 0x01, 0x45, 0xf9, 0xd7, 0x95, 0xe8, 0x01, + 0x45, 0x30, 0xd8, 0xae, 0xe8, 0x01, 0x45, 0x53, 0xd8, 0xa6, 0xe8, 0x01, + 0x45, 0x99, 0xd8, 0xb0, 0xe8, 0x01, 0x45, 0xc1, 0xd8, 0x0b, 0xe8, 0x01, + 0x47, 0x54, 0xc4, 0x7f, 0xe8, 0x01, 0x46, 0x15, 0xcf, 0x70, 0xe8, 0x01, + 0x45, 0x39, 0xd9, 0xaf, 0xe8, 0x41, 0x49, 0x40, 0xac, 0x3d, 0xe8, 0x01, + 0x44, 0x2e, 0xe2, 0x84, 0xe8, 0x01, 0x46, 0x7f, 0xce, 0xa4, 0xe8, 0x01, + 0x44, 0x96, 0xe2, 0x4f, 0xe8, 0x01, 0x45, 0x80, 0xd8, 0x0d, 0xe8, 0x01, + 0x47, 0x46, 0xc4, 0x7a, 0xe8, 0x01, 0x44, 0x6e, 0xe3, 0x32, 0xe8, 0x01, + 0x45, 0xe4, 0xd8, 0x66, 0xe8, 0x01, 0x44, 0xca, 0xe3, 0x0c, 0xe8, 0x01, + 0x45, 0x3e, 0xd9, 0xb2, 0xe8, 0x41, 0x43, 0x56, 0xe8, 0x26, 0xe8, 0x01, + 0x45, 0xb8, 0xd7, 0x62, 0xe8, 0x01, 0x45, 0x08, 0xd8, 0x91, 0xe8, 0x01, + 0x45, 0x1c, 0xd8, 0x20, 0xe8, 0x01, 0x45, 0x76, 0xd8, 0x49, 0xe8, 0x01, + 0x4b, 0xb5, 0x90, 0x9d, 0xe8, 0x01, 0x4c, 0x5b, 0x84, 0x81, 0xe8, 0x01, + 0x45, 0xd0, 0xd8, 0xaa, 0xe8, 0x01, 0x45, 0x02, 0xd9, 0xa3, 0xe8, 0x01, + 0x45, 0x5c, 0xd9, 0x56, 0xe8, 0x41, 0x90, 0xb5, 0x04, 0x91, 0xf6, 0x03, 0x92, 0xb7, 0x03, 0x93, 0xf8, 0x02, 0x94, 0xb9, 0x02, 0x95, 0xfa, 0x01, - 0x96, 0xbb, 0x01, 0x97, 0x7d, 0x98, 0x3f, 0x99, 0x01, 0xff, 0x46, 0x27, - 0xce, 0x77, 0xe8, 0x01, 0x45, 0xa6, 0xd7, 0x47, 0xe8, 0x01, 0x45, 0xc9, - 0xd7, 0xa0, 0xe8, 0x01, 0x46, 0x75, 0xce, 0xa9, 0xe8, 0x01, 0x45, 0x50, - 0xd8, 0x18, 0xe8, 0x01, 0x44, 0x73, 0xd8, 0x04, 0xe8, 0x01, 0x44, 0x2a, - 0xe3, 0x6c, 0xe8, 0x01, 0x44, 0x5a, 0xe3, 0x1f, 0xe8, 0x01, 0x46, 0x0b, - 0xcf, 0xc3, 0xe8, 0x01, 0x44, 0xb6, 0xe3, 0x8d, 0xe8, 0x41, 0x44, 0xfa, - 0xe1, 0x57, 0xe8, 0x01, 0x45, 0xa1, 0xd7, 0x8f, 0xe8, 0x01, 0x46, 0x6f, - 0xce, 0x79, 0xe8, 0x01, 0x46, 0x7b, 0xce, 0x6f, 0xe8, 0x01, 0x45, 0x41, - 0xd8, 0x39, 0xe8, 0x01, 0x44, 0x16, 0xe3, 0xbd, 0xe8, 0x01, 0x4b, 0xad, - 0x90, 0x80, 0xe8, 0x01, 0x45, 0xb9, 0xd8, 0x73, 0xe8, 0x01, 0x44, 0x92, - 0xe3, 0x60, 0xe8, 0x01, 0x45, 0x09, 0xd9, 0x41, 0xe8, 0x41, 0x45, 0x6f, - 0xd7, 0xac, 0xe8, 0x01, 0x46, 0x45, 0xce, 0xab, 0xe8, 0x01, 0x45, 0xd8, - 0xd7, 0x98, 0xe8, 0x01, 0x44, 0x8a, 0xe2, 0x3a, 0xe8, 0x01, 0x45, 0x3c, - 0xd8, 0xa1, 0xe8, 0x01, 0x44, 0xea, 0xe2, 0x5e, 0xe8, 0x01, 0x45, 0x8c, - 0xd8, 0x05, 0xe8, 0x01, 0x44, 0x7e, 0xe3, 0xbf, 0xe8, 0x01, 0x45, 0xdc, - 0xd8, 0x5d, 0xe8, 0x01, 0x44, 0xc6, 0xe3, 0x34, 0xe8, 0x41, 0x46, 0x33, - 0xce, 0xc4, 0xe8, 0x01, 0x45, 0xb0, 0xd7, 0x11, 0xe8, 0x01, 0x45, 0xd3, - 0xd7, 0x94, 0xe8, 0x01, 0x44, 0x7e, 0xe2, 0x51, 0xe8, 0x01, 0x45, 0x55, - 0xd8, 0xb4, 0xe8, 0x01, 0x45, 0x73, 0xd8, 0x03, 0xe8, 0x01, 0x44, 0x46, - 0xe3, 0x92, 0xe8, 0x01, 0x46, 0xed, 0xce, 0xb3, 0xe8, 0x01, 0x44, 0xa2, - 0xe3, 0x8c, 0xe8, 0x01, 0x44, 0xce, 0xe3, 0x4a, 0xe8, 0x41, 0x44, 0xea, - 0xe1, 0x8e, 0xe8, 0x01, 0x44, 0xa1, 0xd7, 0x90, 0xe8, 0x01, 0x45, 0xbf, - 0xd7, 0x74, 0xe8, 0x01, 0x45, 0x0a, 0xd8, 0x71, 0xe8, 0x01, 0x45, 0x46, - 0xd8, 0x3b, 0xe8, 0x01, 0x44, 0x0a, 0xe3, 0x48, 0xe8, 0x01, 0x45, 0x87, - 0xd8, 0xa7, 0xe8, 0x01, 0x46, 0xf3, 0xce, 0x8a, 0xe8, 0x01, 0x46, 0x05, - 0xcf, 0xc1, 0xe8, 0x01, 0x45, 0x13, 0xd9, 0x17, 0xe8, 0x41, 0x45, 0x7e, - 0xd7, 0x6b, 0xe8, 0x01, 0x44, 0x16, 0xe2, 0x69, 0xe8, 0x01, 0x45, 0xc4, - 0xd7, 0x6d, 0xe8, 0x01, 0x46, 0x81, 0xce, 0x78, 0xe8, 0x01, 0x46, 0x93, - 0xce, 0xa2, 0xe8, 0x01, 0x44, 0xb7, 0xce, 0x0e, 0xe8, 0x01, 0x46, 0xc3, - 0xce, 0x76, 0xe8, 0x01, 0x46, 0xe1, 0xce, 0x96, 0xe8, 0x01, 0x44, 0x9e, - 0xe3, 0x06, 0xe8, 0x01, 0x45, 0x36, 0xd9, 0x12, 0xe8, 0x41, 0x44, 0xde, - 0xe1, 0x4d, 0xe8, 0x01, 0x44, 0x42, 0xe2, 0x53, 0xe8, 0x01, 0x44, 0x6e, - 0xe2, 0x54, 0xe8, 0x01, 0x44, 0xa6, 0xe2, 0x55, 0xe8, 0x01, 0x44, 0xae, - 0xe2, 0x5a, 0xe8, 0x01, 0x44, 0xe6, 0xe2, 0x5b, 0xe8, 0x01, 0x44, 0x26, - 0xe3, 0x5c, 0xe8, 0x01, 0x45, 0xcd, 0xd8, 0x63, 0xe8, 0x01, 0x45, 0xf5, - 0xd8, 0x64, 0xe8, 0x01, 0x45, 0x2c, 0xd9, 0x65, 0xe8, 0x41, 0x44, 0xf2, - 0xe1, 0x2f, 0xe8, 0x01, 0x44, 0x3a, 0xe2, 0x30, 0xe8, 0x01, 0x44, 0xef, - 0x3d, 0x44, 0xe8, 0x01, 0x44, 0xa2, 0xe2, 0x45, 0xe8, 0x01, 0x44, 0xc2, - 0xe2, 0x46, 0xe8, 0x01, 0x44, 0xfa, 0xe2, 0x36, 0xe8, 0x01, 0x44, 0x3e, - 0xe3, 0x37, 0xe8, 0x01, 0x44, 0x72, 0xe3, 0x38, 0xe8, 0x01, 0x44, 0x9a, - 0xe3, 0x4b, 0xe8, 0x01, 0x44, 0xb2, 0xe3, 0x4c, 0xe8, 0x41, 0x44, 0xd6, - 0xe1, 0x1b, 0xe8, 0x01, 0x44, 0x3d, 0xb9, 0x1c, 0xe8, 0x01, 0x44, 0x4a, - 0xe2, 0x1d, 0xe8, 0x01, 0x43, 0x6d, 0xe8, 0x22, 0xe8, 0x01, 0x43, 0x32, - 0xd8, 0x23, 0xe8, 0x01, 0x43, 0x7f, 0xe8, 0x24, 0xe8, 0x01, 0x44, 0x22, - 0xe3, 0x3e, 0xe8, 0x01, 0x44, 0x5e, 0xe3, 0x3f, 0xe8, 0x01, 0x44, 0x8a, - 0xe3, 0x40, 0xe8, 0x01, 0x44, 0xc2, 0xe3, 0x2e, 0xe8, 0x41, 0x44, 0x1e, - 0xe2, 0x00, 0xe8, 0x01, 0x44, 0x4e, 0xe2, 0x01, 0xe8, 0x01, 0x44, 0x82, - 0xe2, 0x02, 0xe8, 0x01, 0x44, 0xca, 0xe2, 0x08, 0xe8, 0x01, 0x44, 0x1a, - 0xe3, 0x09, 0xe8, 0x01, 0x44, 0x56, 0xe3, 0x0a, 0xe8, 0x01, 0x45, 0xc3, - 0xd8, 0x14, 0xe8, 0x01, 0x45, 0xf0, 0xd8, 0x15, 0xe8, 0x01, 0x45, 0x18, + 0x96, 0xbb, 0x01, 0x97, 0x7d, 0x98, 0x3f, 0x99, 0x01, 0xff, 0x46, 0x43, + 0xce, 0x77, 0xe8, 0x01, 0x45, 0xc2, 0xd7, 0x47, 0xe8, 0x01, 0x45, 0xe5, + 0xd7, 0xa0, 0xe8, 0x01, 0x46, 0x91, 0xce, 0xa9, 0xe8, 0x01, 0x45, 0x6c, + 0xd8, 0x18, 0xe8, 0x01, 0x44, 0x8f, 0xd8, 0x04, 0xe8, 0x01, 0x44, 0x46, + 0xe3, 0x6c, 0xe8, 0x01, 0x44, 0x76, 0xe3, 0x1f, 0xe8, 0x01, 0x46, 0x27, + 0xcf, 0xc3, 0xe8, 0x01, 0x44, 0xd2, 0xe3, 0x8d, 0xe8, 0x41, 0x44, 0x16, + 0xe2, 0x57, 0xe8, 0x01, 0x45, 0xbd, 0xd7, 0x8f, 0xe8, 0x01, 0x46, 0x8b, + 0xce, 0x79, 0xe8, 0x01, 0x46, 0x97, 0xce, 0x6f, 0xe8, 0x01, 0x45, 0x5d, + 0xd8, 0x39, 0xe8, 0x01, 0x44, 0x32, 0xe3, 0xbd, 0xe8, 0x01, 0x4b, 0xc0, + 0x90, 0x80, 0xe8, 0x01, 0x45, 0xd5, 0xd8, 0x73, 0xe8, 0x01, 0x44, 0xae, + 0xe3, 0x60, 0xe8, 0x01, 0x45, 0x25, 0xd9, 0x41, 0xe8, 0x41, 0x45, 0x8b, + 0xd7, 0xac, 0xe8, 0x01, 0x46, 0x61, 0xce, 0xab, 0xe8, 0x01, 0x45, 0xf4, + 0xd7, 0x98, 0xe8, 0x01, 0x44, 0xa6, 0xe2, 0x3a, 0xe8, 0x01, 0x45, 0x58, + 0xd8, 0xa1, 0xe8, 0x01, 0x44, 0x06, 0xe3, 0x5e, 0xe8, 0x01, 0x45, 0xa8, + 0xd8, 0x05, 0xe8, 0x01, 0x44, 0x9a, 0xe3, 0xbf, 0xe8, 0x01, 0x45, 0xf8, + 0xd8, 0x5d, 0xe8, 0x01, 0x44, 0xe2, 0xe3, 0x34, 0xe8, 0x41, 0x46, 0x4f, + 0xce, 0xc4, 0xe8, 0x01, 0x45, 0xcc, 0xd7, 0x11, 0xe8, 0x01, 0x45, 0xef, + 0xd7, 0x94, 0xe8, 0x01, 0x44, 0x9a, 0xe2, 0x51, 0xe8, 0x01, 0x45, 0x71, + 0xd8, 0xb4, 0xe8, 0x01, 0x45, 0x8f, 0xd8, 0x03, 0xe8, 0x01, 0x44, 0x62, + 0xe3, 0x92, 0xe8, 0x01, 0x46, 0x09, 0xcf, 0xb3, 0xe8, 0x01, 0x44, 0xbe, + 0xe3, 0x8c, 0xe8, 0x01, 0x44, 0xea, 0xe3, 0x4a, 0xe8, 0x41, 0x44, 0x06, + 0xe2, 0x8e, 0xe8, 0x01, 0x44, 0xbd, 0xd7, 0x90, 0xe8, 0x01, 0x45, 0xdb, + 0xd7, 0x74, 0xe8, 0x01, 0x45, 0x26, 0xd8, 0x71, 0xe8, 0x01, 0x45, 0x62, + 0xd8, 0x3b, 0xe8, 0x01, 0x44, 0x26, 0xe3, 0x48, 0xe8, 0x01, 0x45, 0xa3, + 0xd8, 0xa7, 0xe8, 0x01, 0x46, 0x0f, 0xcf, 0x8a, 0xe8, 0x01, 0x46, 0x21, + 0xcf, 0xc1, 0xe8, 0x01, 0x45, 0x2f, 0xd9, 0x17, 0xe8, 0x41, 0x45, 0x9a, + 0xd7, 0x6b, 0xe8, 0x01, 0x44, 0x32, 0xe2, 0x69, 0xe8, 0x01, 0x45, 0xe0, + 0xd7, 0x6d, 0xe8, 0x01, 0x46, 0x9d, 0xce, 0x78, 0xe8, 0x01, 0x46, 0xaf, + 0xce, 0xa2, 0xe8, 0x01, 0x44, 0xd3, 0xce, 0x0e, 0xe8, 0x01, 0x46, 0xdf, + 0xce, 0x76, 0xe8, 0x01, 0x46, 0xfd, 0xce, 0x96, 0xe8, 0x01, 0x44, 0xba, + 0xe3, 0x06, 0xe8, 0x01, 0x45, 0x52, 0xd9, 0x12, 0xe8, 0x41, 0x44, 0xfa, + 0xe1, 0x4d, 0xe8, 0x01, 0x44, 0x5e, 0xe2, 0x53, 0xe8, 0x01, 0x44, 0x8a, + 0xe2, 0x54, 0xe8, 0x01, 0x44, 0xc2, 0xe2, 0x55, 0xe8, 0x01, 0x44, 0xca, + 0xe2, 0x5a, 0xe8, 0x01, 0x44, 0x02, 0xe3, 0x5b, 0xe8, 0x01, 0x44, 0x42, + 0xe3, 0x5c, 0xe8, 0x01, 0x45, 0xe9, 0xd8, 0x63, 0xe8, 0x01, 0x45, 0x11, + 0xd9, 0x64, 0xe8, 0x01, 0x45, 0x48, 0xd9, 0x65, 0xe8, 0x41, 0x44, 0x0e, + 0xe2, 0x2f, 0xe8, 0x01, 0x44, 0x56, 0xe2, 0x30, 0xe8, 0x01, 0x44, 0x04, + 0x3e, 0x44, 0xe8, 0x01, 0x44, 0xbe, 0xe2, 0x45, 0xe8, 0x01, 0x44, 0xde, + 0xe2, 0x46, 0xe8, 0x01, 0x44, 0x16, 0xe3, 0x36, 0xe8, 0x01, 0x44, 0x5a, + 0xe3, 0x37, 0xe8, 0x01, 0x44, 0x8e, 0xe3, 0x38, 0xe8, 0x01, 0x44, 0xb6, + 0xe3, 0x4b, 0xe8, 0x01, 0x44, 0xce, 0xe3, 0x4c, 0xe8, 0x41, 0x44, 0xf2, + 0xe1, 0x1b, 0xe8, 0x01, 0x44, 0x59, 0xb9, 0x1c, 0xe8, 0x01, 0x44, 0x66, + 0xe2, 0x1d, 0xe8, 0x01, 0x43, 0x89, 0xe8, 0x22, 0xe8, 0x01, 0x43, 0x4e, + 0xd8, 0x23, 0xe8, 0x01, 0x43, 0x9b, 0xe8, 0x24, 0xe8, 0x01, 0x44, 0x3e, + 0xe3, 0x3e, 0xe8, 0x01, 0x44, 0x7a, 0xe3, 0x3f, 0xe8, 0x01, 0x44, 0xa6, + 0xe3, 0x40, 0xe8, 0x01, 0x44, 0xde, 0xe3, 0x2e, 0xe8, 0x41, 0x44, 0x3a, + 0xe2, 0x00, 0xe8, 0x01, 0x44, 0x6a, 0xe2, 0x01, 0xe8, 0x01, 0x44, 0x9e, + 0xe2, 0x02, 0xe8, 0x01, 0x44, 0xe6, 0xe2, 0x08, 0xe8, 0x01, 0x44, 0x36, + 0xe3, 0x09, 0xe8, 0x01, 0x44, 0x72, 0xe3, 0x0a, 0xe8, 0x01, 0x45, 0xdf, + 0xd8, 0x14, 0xe8, 0x01, 0x45, 0x0c, 0xd9, 0x15, 0xe8, 0x01, 0x45, 0x34, 0xd9, 0x16, 0xe8, 0x41, 0x45, 0xd1, 0x09, 0xce, 0xe8, 0x01, 0xa6, 0x29, 0x44, 0xb8, 0x27, 0xcf, 0xe8, 0x01, 0x43, 0xcd, 0x09, 0xc7, 0xe8, 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xc9, 0xe8, 0x01, 0x42, 0x15, 0x02, 0xc8, 0xe8, 0x41, 0x44, 0x96, 0x1b, 0xcd, 0xe8, 0x01, 0x42, 0x30, 0x27, 0xcc, 0xe8, 0x41, 0x43, 0xd7, 0x04, 0xcb, 0xe8, 0x01, 0x43, - 0xfb, 0x05, 0xca, 0xe8, 0x41, 0x07, 0xe9, 0x0f, 0x24, 0x48, 0xb5, 0x37, - 0xd6, 0xe8, 0x01, 0xb4, 0x01, 0xff, 0xa5, 0x06, 0x48, 0xc7, 0x4c, 0xd3, - 0xe8, 0x41, 0x43, 0x1c, 0x53, 0xd0, 0xe8, 0x01, 0xae, 0x01, 0xff, 0x4a, - 0xb9, 0x9d, 0xd4, 0xe8, 0x01, 0xf3, 0xd1, 0xe8, 0x41, 0x4a, 0xb9, 0x9d, + 0xfb, 0x05, 0xca, 0xe8, 0x41, 0x07, 0xe9, 0x0f, 0x24, 0x48, 0xca, 0x37, + 0xd6, 0xe8, 0x01, 0xb4, 0x01, 0xff, 0xa5, 0x06, 0x48, 0xdc, 0x4c, 0xd3, + 0xe8, 0x41, 0x43, 0x31, 0x53, 0xd0, 0xe8, 0x01, 0xae, 0x01, 0xff, 0x4a, + 0xcc, 0x9d, 0xd4, 0xe8, 0x01, 0xf3, 0xd1, 0xe8, 0x41, 0x4a, 0xcc, 0x9d, 0xd5, 0xe8, 0x01, 0xf3, 0xd2, 0xe8, 0x41, 0x42, 0x10, 0x00, 0x48, 0xf3, - 0x01, 0x49, 0x2e, 0x26, 0xe0, 0xfa, 0x41, 0xa1, 0xfd, 0x03, 0x06, 0x37, + 0x01, 0x49, 0x2e, 0x26, 0xe0, 0xfa, 0x41, 0xa1, 0xfd, 0x03, 0x06, 0x53, 0xd0, 0xec, 0x03, 0x06, 0xf4, 0x05, 0xa5, 0x03, 0xac, 0x6b, 0x58, 0x0f, - 0x28, 0xf3, 0xaa, 0x00, 0xb6, 0x06, 0x54, 0x98, 0x41, 0xf4, 0xaa, 0x40, - 0x45, 0x48, 0x21, 0xf6, 0xaa, 0x00, 0x0a, 0x5c, 0x70, 0x01, 0xff, 0xa1, - 0x3c, 0x47, 0xb2, 0xc5, 0xe9, 0xab, 0x00, 0xa9, 0x2a, 0x44, 0x92, 0xe6, - 0xea, 0xab, 0x00, 0x44, 0xf7, 0x7e, 0xe3, 0xab, 0x00, 0x46, 0x59, 0xd5, - 0xe7, 0xab, 0x00, 0xb5, 0x0c, 0x47, 0x67, 0x46, 0xf5, 0xaa, 0x00, 0x45, - 0x8d, 0xe1, 0xe6, 0xab, 0x40, 0x43, 0xf8, 0x7e, 0xe8, 0xab, 0x00, 0xf5, - 0xec, 0xaa, 0x40, 0xe9, 0xeb, 0xaa, 0x00, 0x43, 0xf8, 0x7e, 0xe4, 0xab, - 0x40, 0xa1, 0x0a, 0x43, 0xf8, 0x7e, 0xe5, 0xab, 0x00, 0xf5, 0xee, 0xaa, + 0x28, 0xf3, 0xaa, 0x00, 0xb6, 0x06, 0x54, 0xad, 0x41, 0xf4, 0xaa, 0x40, + 0x45, 0x48, 0x21, 0xf6, 0xaa, 0x00, 0x0a, 0x71, 0x70, 0x01, 0xff, 0xa1, + 0x3c, 0x47, 0xce, 0xc5, 0xe9, 0xab, 0x00, 0xa9, 0x2a, 0x44, 0xae, 0xe6, + 0xea, 0xab, 0x00, 0x44, 0xfe, 0x7e, 0xe3, 0xab, 0x00, 0x46, 0x75, 0xd5, + 0xe7, 0xab, 0x00, 0xb5, 0x0c, 0x47, 0x7c, 0x46, 0xf5, 0xaa, 0x00, 0x45, + 0xa9, 0xe1, 0xe6, 0xab, 0x40, 0x43, 0xff, 0x7e, 0xe8, 0xab, 0x00, 0xf5, + 0xec, 0xaa, 0x40, 0xe9, 0xeb, 0xaa, 0x00, 0x43, 0xff, 0x7e, 0xe4, 0xab, + 0x40, 0xa1, 0x0a, 0x43, 0xff, 0x7e, 0xe5, 0xab, 0x00, 0xf5, 0xee, 0xaa, 0x40, 0xe9, 0xed, 0xaa, 0x00, 0xf5, 0xef, 0xaa, 0x40, 0x06, 0xf2, 0x04, - 0x06, 0x47, 0x81, 0xcc, 0xec, 0xab, 0x40, 0x45, 0xcc, 0xd9, 0xd1, 0xab, + 0x06, 0x47, 0x9d, 0xcc, 0xec, 0xab, 0x40, 0x45, 0xe8, 0xd9, 0xd1, 0xab, 0x00, 0xa2, 0x9b, 0x02, 0x02, 0x98, 0x14, 0x8c, 0x02, 0xa4, 0xf1, 0x01, - 0xe5, 0xe0, 0xaa, 0x00, 0xa7, 0xde, 0x01, 0x43, 0xe2, 0xd3, 0xcd, 0xab, + 0xe5, 0xe0, 0xaa, 0x00, 0xa7, 0xde, 0x01, 0x43, 0xfe, 0xd3, 0xcd, 0xab, 0x00, 0xe9, 0xcf, 0xab, 0x80, 0xcc, 0x01, 0xaa, 0xbd, 0x01, 0xab, 0xa7, 0x01, 0x43, 0x97, 0x0c, 0xc2, 0xab, 0x80, 0x99, 0x01, 0x43, 0xf7, 0x2b, 0xc3, 0xab, 0x80, 0x8b, 0x01, 0xae, 0x65, 0xef, 0xe1, 0xaa, 0x00, 0xb0, 0x4e, 0x43, 0x98, 0x07, 0xd4, 0xab, 0x00, 0xb3, 0x34, 0xb4, 0x12, 0x42, 0x24, 0x0a, 0xce, 0xab, 0x00, 0x43, 0x49, 0x0f, 0xcb, 0xab, 0x00, 0x44, - 0x73, 0xb4, 0xcc, 0xab, 0x40, 0x43, 0xca, 0x1b, 0xca, 0xab, 0x00, 0x42, + 0x8f, 0xb4, 0xcc, 0xab, 0x40, 0x43, 0xca, 0x1b, 0xca, 0xab, 0x00, 0x42, 0x62, 0x01, 0xc7, 0xab, 0x80, 0x0d, 0xb4, 0x01, 0xff, 0xe1, 0xe4, 0xaa, - 0x00, 0x42, 0x22, 0x00, 0xe5, 0xaa, 0x40, 0x47, 0x2e, 0xc3, 0xe0, 0xab, + 0x00, 0x42, 0x22, 0x00, 0xe5, 0xaa, 0x40, 0x47, 0x4a, 0xc3, 0xe0, 0xab, 0x40, 0x42, 0x57, 0x00, 0xc1, 0xab, 0x00, 0x42, 0x22, 0x00, 0xe9, 0xaa, 0x00, 0x42, 0x45, 0x05, 0xea, 0xaa, 0x40, 0xe1, 0xc4, 0xab, 0x80, 0x06, - 0x43, 0x56, 0x00, 0xd0, 0xab, 0x40, 0x47, 0x2e, 0xc3, 0xde, 0xab, 0x40, - 0xe1, 0xc5, 0xab, 0x80, 0x19, 0x43, 0x19, 0xaa, 0xc9, 0xab, 0x80, 0x0c, + 0x43, 0x56, 0x00, 0xd0, 0xab, 0x40, 0x47, 0x4a, 0xc3, 0xde, 0xab, 0x40, + 0xe1, 0xc5, 0xab, 0x80, 0x19, 0x43, 0x2c, 0xaa, 0xc9, 0xab, 0x80, 0x0c, 0x42, 0x2f, 0x04, 0xe8, 0xaa, 0x00, 0x42, 0x20, 0x20, 0xe3, 0xaa, 0x40, - 0x47, 0x2e, 0xc3, 0xe1, 0xab, 0x40, 0x47, 0x2e, 0xc3, 0xdf, 0xab, 0x40, - 0x47, 0x2e, 0xc3, 0xdd, 0xab, 0x40, 0x47, 0x2e, 0xc3, 0xdc, 0xab, 0x40, + 0x47, 0x4a, 0xc3, 0xe1, 0xab, 0x40, 0x47, 0x4a, 0xc3, 0xdf, 0xab, 0x40, + 0x47, 0x4a, 0xc3, 0xdd, 0xab, 0x40, 0x47, 0x4a, 0xc3, 0xdc, 0xab, 0x40, 0x43, 0xca, 0x1b, 0xc8, 0xab, 0x00, 0x42, 0x5a, 0x04, 0xc0, 0xab, 0xc0, - 0x00, 0x47, 0x2e, 0xc3, 0xdb, 0xab, 0x40, 0x43, 0x56, 0x00, 0xd3, 0xab, - 0x00, 0x42, 0x62, 0x01, 0xd6, 0xab, 0x40, 0x47, 0x2e, 0xc3, 0xe2, 0xab, + 0x00, 0x47, 0x4a, 0xc3, 0xdb, 0xab, 0x40, 0x43, 0x56, 0x00, 0xd3, 0xab, + 0x00, 0x42, 0x62, 0x01, 0xd6, 0xab, 0x40, 0x47, 0x4a, 0xc3, 0xe2, 0xab, 0x40, 0x43, 0xca, 0x1b, 0xd8, 0xab, 0x00, 0x42, 0x5a, 0x04, 0xd2, 0xab, 0x40, 0xa4, 0x0c, 0x43, 0xca, 0x1b, 0xd9, 0xab, 0x00, 0x42, 0x62, 0x01, 0xd7, 0xab, 0x40, 0xe1, 0xe6, 0xaa, 0x00, 0x42, 0x22, 0x00, 0xe7, 0xaa, @@ -7471,32 +7472,32 @@ static const unsigned char uname2c_tree[210697] = { 0xf2, 0xab, 0x40, 0x44, 0x96, 0x1b, 0xf7, 0xab, 0x00, 0x42, 0x30, 0x27, 0xf6, 0xab, 0x40, 0x43, 0xd7, 0x04, 0xf5, 0xab, 0x00, 0x43, 0xfb, 0x05, 0xf4, 0xab, 0x40, 0x42, 0x1a, 0x00, 0xf0, 0xaa, 0x00, 0x42, 0xd1, 0x09, - 0xeb, 0xab, 0x40, 0x4b, 0x8b, 0x94, 0xf1, 0xaa, 0x00, 0x43, 0xff, 0x7f, - 0xf2, 0xaa, 0x00, 0x48, 0x1d, 0xc0, 0xed, 0xab, 0x40, 0x09, 0xf4, 0xae, - 0xf0, 0x01, 0xa9, 0x01, 0xff, 0x05, 0x33, 0x41, 0xd6, 0x01, 0x03, 0x9f, + 0xeb, 0xab, 0x40, 0x4b, 0x9e, 0x94, 0xf1, 0xaa, 0x00, 0x43, 0x06, 0x80, + 0xf2, 0xaa, 0x00, 0x48, 0x39, 0xc0, 0xed, 0xab, 0x40, 0x09, 0x10, 0xaf, + 0xf0, 0x01, 0xa9, 0x01, 0xff, 0x05, 0x48, 0x41, 0xd6, 0x01, 0x03, 0x9f, 0x03, 0x01, 0xff, 0xa2, 0xc2, 0x01, 0x06, 0x8b, 0x12, 0xb1, 0x01, 0xa6, - 0x87, 0x01, 0x4b, 0x1e, 0x5b, 0xa3, 0xf7, 0x01, 0x04, 0xc3, 0x00, 0x69, - 0x52, 0xf9, 0x4d, 0x5f, 0x20, 0x00, 0x05, 0xc8, 0x00, 0x4b, 0xb3, 0x27, - 0x0e, 0x4e, 0x76, 0x17, 0x4c, 0x32, 0x00, 0x59, 0x27, 0x00, 0x06, 0xad, + 0x87, 0x01, 0x4b, 0x33, 0x5b, 0xa3, 0xf7, 0x01, 0x04, 0xc3, 0x00, 0x69, + 0x52, 0x0e, 0x4e, 0x5f, 0x20, 0x00, 0x05, 0xc8, 0x00, 0x4b, 0xb3, 0x27, + 0x0e, 0x55, 0x76, 0x17, 0x4c, 0x32, 0x00, 0x59, 0x27, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, 0x46, 0x00, 0x04, 0xaa, 0x26, 0x00, 0x46, 0xdb, 0x04, 0x8f, 0xf7, 0x41, 0x4a, 0xc5, 0x28, 0xc1, 0xf7, 0x01, 0x4d, 0x82, 0x11, 0xc3, 0xf7, 0x41, 0x46, 0x16, 0x17, 0xaa, 0xf7, 0x01, 0x44, 0xa3, 0x03, - 0x92, 0x25, 0x00, 0x03, 0x57, 0x4d, 0x06, 0x51, 0x30, 0x56, 0xac, 0x26, + 0x92, 0x25, 0x00, 0x03, 0x6c, 0x4d, 0x06, 0x51, 0x45, 0x56, 0xac, 0x26, 0x40, 0x52, 0xbd, 0x28, 0xcb, 0xf7, 0x01, 0x4f, 0xbd, 0x1a, 0xb6, 0xf7, 0x41, 0x80, 0x06, 0x60, 0x8c, 0x0d, 0x6d, 0x27, 0x40, 0x56, 0x6a, 0x2f, 0x75, 0x27, 0x00, 0x54, 0x70, 0x1f, 0x69, 0x27, 0x40, 0x80, 0x06, 0x60, 0x8c, 0x0d, 0x6c, 0x27, 0x40, 0x56, 0x6a, 0x2f, 0x74, 0x27, 0x00, 0x54, - 0x70, 0x1f, 0x68, 0x27, 0x40, 0x53, 0x75, 0x3d, 0xb0, 0xf7, 0x01, 0x09, + 0x70, 0x1f, 0x68, 0x27, 0x40, 0x53, 0x8a, 0x3d, 0xb0, 0xf7, 0x01, 0x09, 0x06, 0x37, 0x11, 0x0c, 0x76, 0x11, 0x01, 0xff, 0x4a, 0xc5, 0x28, 0xc5, 0xf7, 0x01, 0x4d, 0x82, 0x11, 0xc7, 0xf7, 0x41, 0x59, 0xe3, 0x21, 0x6a, 0x27, 0x00, 0x5a, 0x6a, 0x1f, 0x6b, 0x27, 0x40, 0x52, 0xbd, 0x28, 0xce, - 0xf7, 0x01, 0x4f, 0xbd, 0x1a, 0xbc, 0xf7, 0x41, 0x4b, 0x45, 0x85, 0xab, - 0x26, 0x00, 0x50, 0x39, 0x5f, 0x85, 0xf7, 0x41, 0x45, 0x18, 0x04, 0x4c, + 0xf7, 0x01, 0x4f, 0xbd, 0x1a, 0xbc, 0xf7, 0x41, 0x4b, 0x4c, 0x85, 0xab, + 0x26, 0x00, 0x50, 0x4e, 0x5f, 0x85, 0xf7, 0x41, 0x45, 0x18, 0x04, 0x4c, 0x2e, 0x00, 0x50, 0xad, 0x00, 0x53, 0x2e, 0x00, 0x4d, 0xbd, 0x30, 0x54, - 0x2e, 0x40, 0xa3, 0xd0, 0x02, 0x06, 0xf4, 0x05, 0xf4, 0x01, 0x4e, 0xc8, + 0x2e, 0x40, 0xa3, 0xd0, 0x02, 0x06, 0xf4, 0x05, 0xf4, 0x01, 0x4e, 0xdd, 0x70, 0x9a, 0x6e, 0x01, 0x49, 0xa0, 0x14, 0x98, 0x6e, 0x01, 0x07, 0xbf, - 0x35, 0x9e, 0x01, 0xb3, 0x01, 0xff, 0x0c, 0x7d, 0x07, 0x06, 0x4a, 0xed, - 0xaa, 0x99, 0x6e, 0x41, 0xe1, 0x6d, 0x6e, 0x81, 0x81, 0x01, 0xe2, 0x70, + 0x35, 0x9e, 0x01, 0xb3, 0x01, 0xff, 0x0c, 0x7d, 0x07, 0x06, 0x4a, 0x00, + 0xab, 0x99, 0x6e, 0x41, 0xe1, 0x6d, 0x6e, 0x81, 0x81, 0x01, 0xe2, 0x70, 0x6e, 0x01, 0xe3, 0x71, 0x6e, 0x01, 0xe4, 0x79, 0x6e, 0x01, 0xe5, 0x6f, 0x6e, 0x01, 0xe6, 0x6a, 0x6e, 0x01, 0xe7, 0x69, 0x6e, 0x01, 0xe8, 0x76, 0x6e, 0x81, 0x60, 0xe9, 0x6b, 0x6e, 0x01, 0xea, 0x6e, 0x6e, 0x01, 0xeb, @@ -7508,19 +7509,19 @@ static const unsigned char uname2c_tree[210697] = { 0x6e, 0x81, 0x04, 0xfa, 0x65, 0x6e, 0x41, 0xf5, 0x73, 0x6e, 0x41, 0xe5, 0x7a, 0x6e, 0x41, 0xe7, 0x77, 0x6e, 0x01, 0xf9, 0x77, 0x6e, 0x41, 0xf0, 0x66, 0x6e, 0x41, 0xf0, 0x76, 0x6e, 0x41, 0xe9, 0x7e, 0x6e, 0x01, 0x43, - 0x86, 0x81, 0x64, 0x6e, 0x41, 0xa5, 0x37, 0xa6, 0x29, 0x48, 0x0b, 0x4e, + 0x8d, 0x81, 0x64, 0x6e, 0x41, 0xa5, 0x37, 0xa6, 0x29, 0x48, 0x20, 0x4e, 0x93, 0x6e, 0x01, 0xb3, 0x15, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x8a, - 0x6e, 0x01, 0x47, 0xed, 0x54, 0x8d, 0x6e, 0x01, 0x45, 0xb7, 0x28, 0x8c, - 0x6e, 0x41, 0x48, 0xef, 0x4b, 0x91, 0x6e, 0x01, 0x46, 0x83, 0x43, 0x90, - 0x6e, 0x41, 0x46, 0x27, 0x16, 0x8f, 0x6e, 0x01, 0x47, 0x0d, 0x57, 0x8e, - 0x6e, 0x41, 0x47, 0xb6, 0x22, 0x92, 0x6e, 0x01, 0x45, 0xdf, 0x68, 0x8b, + 0x6e, 0x01, 0x47, 0x02, 0x55, 0x8d, 0x6e, 0x01, 0x45, 0xb7, 0x28, 0x8c, + 0x6e, 0x41, 0x48, 0x04, 0x4c, 0x91, 0x6e, 0x01, 0x46, 0x98, 0x43, 0x90, + 0x6e, 0x41, 0x46, 0x27, 0x16, 0x8f, 0x6e, 0x01, 0x47, 0x22, 0x57, 0x8e, + 0x6e, 0x41, 0x47, 0xb6, 0x22, 0x92, 0x6e, 0x01, 0x45, 0xf4, 0x68, 0x8b, 0x6e, 0x41, 0x45, 0xd1, 0x09, 0x88, 0x6e, 0x01, 0xa6, 0x43, 0x44, 0xb8, 0x27, 0x89, 0x6e, 0x01, 0x43, 0xcd, 0x09, 0x81, 0x6e, 0x81, 0x30, 0xb3, 0x22, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x80, 0x6e, 0x41, 0x44, 0x25, 0x01, 0x83, 0x6e, 0x81, 0x0d, 0x42, 0x15, 0x02, 0x82, 0x6e, 0xc1, 0x00, 0x4f, - 0xa9, 0x62, 0x95, 0x6e, 0x41, 0x4f, 0xa9, 0x62, 0x96, 0x6e, 0x41, 0x44, + 0xbe, 0x62, 0x95, 0x6e, 0x41, 0x4f, 0xbe, 0x62, 0x96, 0x6e, 0x41, 0x44, 0x96, 0x1b, 0x87, 0x6e, 0x01, 0x42, 0x30, 0x27, 0x86, 0x6e, 0x41, 0x4f, - 0xa9, 0x62, 0x94, 0x6e, 0x41, 0x43, 0xd7, 0x04, 0x85, 0x6e, 0x01, 0x43, + 0xbe, 0x62, 0x94, 0x6e, 0x41, 0x43, 0xd7, 0x04, 0x85, 0x6e, 0x01, 0x43, 0xfb, 0x05, 0x84, 0x6e, 0x41, 0x0e, 0xea, 0x04, 0x06, 0x44, 0x19, 0x04, 0x97, 0x6e, 0x41, 0xe1, 0x4d, 0x6e, 0x81, 0x81, 0x01, 0xe2, 0x50, 0x6e, 0x01, 0xe3, 0x51, 0x6e, 0x01, 0xe4, 0x59, 0x6e, 0x01, 0xe5, 0x4f, 0x6e, @@ -7533,38 +7534,38 @@ static const unsigned char uname2c_tree[210697] = { 0x01, 0xf7, 0x43, 0x6e, 0x01, 0xf8, 0x58, 0x6e, 0x01, 0xf9, 0x5f, 0x6e, 0x81, 0x04, 0xfa, 0x45, 0x6e, 0x41, 0xf5, 0x53, 0x6e, 0x41, 0xe5, 0x5a, 0x6e, 0x41, 0xe7, 0x57, 0x6e, 0x01, 0xf9, 0x57, 0x6e, 0x41, 0xf0, 0x46, - 0x6e, 0x41, 0xf0, 0x56, 0x6e, 0x41, 0xe9, 0x5e, 0x6e, 0x01, 0x43, 0x86, + 0x6e, 0x41, 0xf0, 0x56, 0x6e, 0x41, 0xe9, 0x5e, 0x6e, 0x01, 0x43, 0x8d, 0x81, 0x44, 0x6e, 0x41, 0x43, 0x03, 0x05, 0xbe, 0xf9, 0x01, 0x43, 0x77, - 0x34, 0xbf, 0xf9, 0x41, 0x06, 0xa1, 0xd5, 0x06, 0x49, 0xfc, 0xb5, 0x56, + 0x34, 0xbf, 0xf9, 0x41, 0x06, 0xbd, 0xd5, 0x06, 0x49, 0x18, 0xb6, 0x56, 0xf3, 0x41, 0x45, 0x04, 0x02, 0x21, 0x22, 0x80, 0x0c, 0x42, 0x08, 0x00, - 0x5e, 0x22, 0x00, 0x54, 0x30, 0x40, 0x9d, 0x29, 0x40, 0x80, 0x01, 0xff, - 0x4c, 0xa4, 0x8b, 0x9b, 0x29, 0x00, 0x27, 0xf9, 0x04, 0x01, 0xff, 0x09, - 0x89, 0x43, 0x31, 0x09, 0x40, 0x3f, 0x21, 0x0a, 0x09, 0x01, 0x11, 0x07, - 0xc7, 0x58, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xa9, 0x29, 0x00, 0x45, 0xc8, + 0x5e, 0x22, 0x00, 0x54, 0x45, 0x40, 0x9d, 0x29, 0x40, 0x80, 0x01, 0xff, + 0x4c, 0xab, 0x8b, 0x9b, 0x29, 0x00, 0x27, 0xf9, 0x04, 0x01, 0xff, 0x09, + 0x9e, 0x43, 0x31, 0x09, 0x55, 0x3f, 0x21, 0x0a, 0x09, 0x01, 0x11, 0x07, + 0xdc, 0x58, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xa9, 0x29, 0x00, 0x45, 0xc8, 0x00, 0xa8, 0x29, 0x40, 0x44, 0xa5, 0x01, 0xae, 0x29, 0x00, 0x42, 0x50, 0x02, 0xac, 0x29, 0x40, 0x44, 0xa5, 0x01, 0xaf, 0x29, 0x00, 0x42, 0x50, 0x02, 0xad, 0x29, 0x40, 0x44, 0xc3, 0x00, 0xab, 0x29, 0x00, 0x45, 0xc8, - 0x00, 0xaa, 0x29, 0x40, 0x44, 0xda, 0x69, 0xaf, 0x00, 0x00, 0xa7, 0xf6, - 0x42, 0xa8, 0x99, 0x3e, 0xab, 0xf7, 0x3c, 0xac, 0xe2, 0x36, 0x45, 0xf0, - 0xdd, 0xa3, 0xf9, 0x01, 0xee, 0x68, 0xf4, 0x81, 0x81, 0x32, 0xb0, 0xf2, - 0x31, 0xb2, 0xaf, 0x2e, 0xb3, 0xcd, 0x2a, 0xb4, 0x95, 0x01, 0x46, 0xc7, - 0xd6, 0xd6, 0xf5, 0x01, 0x0c, 0x28, 0x8f, 0x01, 0xff, 0xa5, 0x75, 0xa6, + 0x00, 0xaa, 0x29, 0x40, 0x44, 0xef, 0x69, 0xaf, 0x00, 0x00, 0xa7, 0xf6, + 0x42, 0xa8, 0x99, 0x3e, 0xab, 0xf7, 0x3c, 0xac, 0xe2, 0x36, 0x45, 0x0c, + 0xde, 0xa3, 0xf9, 0x01, 0xee, 0x68, 0xf4, 0x81, 0x81, 0x32, 0xb0, 0xf2, + 0x31, 0xb2, 0xaf, 0x2e, 0xb3, 0xcd, 0x2a, 0xb4, 0x95, 0x01, 0x46, 0xe3, + 0xd6, 0xd6, 0xf5, 0x01, 0x0c, 0x3b, 0x8f, 0x01, 0xff, 0xa5, 0x75, 0xa6, 0x58, 0x44, 0xb8, 0x27, 0xe9, 0xd2, 0x81, 0x4b, 0x43, 0xcd, 0x09, 0xe1, 0xd2, 0x01, 0xb3, 0x29, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xe0, 0xd2, 0x41, 0x42, 0x92, 0x01, 0xea, 0xd2, 0x01, 0xa8, 0x0d, 0xb7, 0x01, 0xff, 0x44, - 0xb8, 0x28, 0xec, 0xd2, 0x01, 0xef, 0xe2, 0xd2, 0x41, 0x46, 0xee, 0x54, + 0xb8, 0x28, 0xec, 0xd2, 0x01, 0xef, 0xe2, 0xd2, 0x41, 0x46, 0x03, 0x55, 0xed, 0xd2, 0x01, 0x43, 0x26, 0x01, 0xe3, 0xd2, 0x41, 0x44, 0x96, 0x1b, 0xe7, 0xd2, 0x81, 0x0d, 0x42, 0x30, 0x27, 0xe6, 0xd2, 0xc1, 0x00, 0x44, 0x29, 0x16, 0xf0, 0xd2, 0x41, 0x44, 0x29, 0x16, 0xf1, 0xd2, 0x41, 0x44, 0x29, 0x16, 0xf3, 0xd2, 0x41, 0xa9, 0x0d, 0x43, 0xfb, 0x05, 0xe4, 0xd2, 0xc1, 0x00, 0x44, 0x29, 0x16, 0xee, 0xd2, 0x41, 0x45, 0x28, 0x16, 0xef, 0xd2, 0x01, 0x42, 0x32, 0x00, 0xe5, 0xd2, 0x41, 0x44, 0xc9, 0x00, 0xe8, - 0xd2, 0x81, 0x06, 0x45, 0xdf, 0x68, 0xeb, 0xd2, 0x41, 0x43, 0xca, 0x08, - 0xf2, 0xd2, 0x41, 0x47, 0x6f, 0xc6, 0xc9, 0xf9, 0x01, 0x0a, 0xfc, 0x4d, - 0x01, 0xff, 0x05, 0x19, 0x5b, 0xb6, 0x1b, 0x0e, 0x2e, 0x70, 0xad, 0x19, - 0xa6, 0xda, 0x17, 0x07, 0xdb, 0xc7, 0xe0, 0x12, 0x05, 0xc3, 0x00, 0xb8, - 0x12, 0x0a, 0x4d, 0xa5, 0x93, 0x10, 0x02, 0x0d, 0x00, 0xe1, 0x0f, 0xb3, - 0x01, 0xff, 0x0a, 0xa5, 0x42, 0xb2, 0x01, 0x06, 0x7a, 0x05, 0x01, 0xff, + 0xd2, 0x81, 0x06, 0x45, 0xf4, 0x68, 0xeb, 0xd2, 0x41, 0x43, 0xca, 0x08, + 0xf2, 0xd2, 0x41, 0x47, 0x8b, 0xc6, 0xc9, 0xf9, 0x01, 0x0a, 0x11, 0x4e, + 0x01, 0xff, 0x05, 0x2e, 0x5b, 0xb6, 0x1b, 0x0e, 0x43, 0x70, 0xad, 0x19, + 0xa6, 0xda, 0x17, 0x07, 0xf7, 0xc7, 0xe0, 0x12, 0x05, 0xc3, 0x00, 0xb8, + 0x12, 0x0a, 0x60, 0xa5, 0x93, 0x10, 0x02, 0x0d, 0x00, 0xe1, 0x0f, 0xb3, + 0x01, 0xff, 0x0a, 0xba, 0x42, 0xb2, 0x01, 0x06, 0x7a, 0x05, 0x01, 0xff, 0x08, 0xe9, 0x04, 0x61, 0x06, 0x3c, 0x06, 0x01, 0xff, 0xe1, 0xb6, 0xd4, 0x01, 0xe2, 0xb7, 0xd4, 0x01, 0xe3, 0xb8, 0xd4, 0x01, 0xe4, 0xb9, 0xd4, 0x01, 0xe6, 0xbb, 0xd4, 0x01, 0xe8, 0xbd, 0xd4, 0x01, 0xe9, 0xbe, 0xd4, @@ -7579,8 +7580,8 @@ static const unsigned char uname2c_tree[210697] = { 0x01, 0xf0, 0xab, 0xd4, 0x01, 0xf1, 0xac, 0xd4, 0x01, 0xf3, 0xae, 0xd4, 0x01, 0xf4, 0xaf, 0xd4, 0x01, 0xf5, 0xb0, 0xd4, 0x01, 0xf6, 0xb1, 0xd4, 0x01, 0xf7, 0xb2, 0xd4, 0x01, 0xf8, 0xb3, 0xd4, 0x01, 0xf9, 0xb4, 0xd4, - 0x01, 0xfa, 0xb5, 0xd4, 0x41, 0x05, 0x19, 0x5b, 0xfe, 0x03, 0x08, 0xe9, - 0x04, 0x91, 0x03, 0x06, 0xf4, 0x05, 0xca, 0x02, 0x07, 0xdb, 0xc7, 0x6d, + 0x01, 0xfa, 0xb5, 0xd4, 0x41, 0x05, 0x2e, 0x5b, 0xfe, 0x03, 0x08, 0xe9, + 0x04, 0x91, 0x03, 0x06, 0xf4, 0x05, 0xca, 0x02, 0x07, 0xf7, 0xc7, 0x6d, 0x06, 0x3c, 0x06, 0x01, 0xff, 0xe1, 0xba, 0xd5, 0x01, 0xe2, 0xbb, 0xd5, 0x01, 0xe3, 0xbc, 0xd5, 0x01, 0xe4, 0xbd, 0xd5, 0x01, 0xe5, 0xbe, 0xd5, 0x01, 0xe6, 0xbf, 0xd5, 0x01, 0xe7, 0xc0, 0xd5, 0x01, 0xe8, 0xc1, 0xd5, @@ -7623,10 +7624,10 @@ static const unsigned char uname2c_tree[210697] = { 0xf4, 0xb3, 0xd5, 0x01, 0xf5, 0xb4, 0xd5, 0x01, 0xf6, 0xb5, 0xd5, 0x01, 0xf7, 0xb6, 0xd5, 0x01, 0xf8, 0xb7, 0xd5, 0x01, 0xf9, 0xb8, 0xd5, 0x01, 0xfa, 0xb9, 0xd5, 0x41, 0x08, 0xe9, 0x04, 0x87, 0x08, 0x06, 0xf4, 0x05, - 0xc0, 0x07, 0x4e, 0xed, 0x13, 0x8a, 0xd7, 0x01, 0x07, 0xdb, 0xc7, 0xc9, - 0x02, 0x4c, 0x10, 0x89, 0x8c, 0xd7, 0x01, 0x45, 0x18, 0xde, 0x6f, 0xd7, - 0x01, 0xb0, 0xa8, 0x02, 0x4a, 0x73, 0xa7, 0x8e, 0xd7, 0x01, 0x06, 0x3c, - 0x06, 0x06, 0x4c, 0xf0, 0x8d, 0x8b, 0xd7, 0x41, 0xe1, 0xee, 0xd5, 0x81, + 0xc0, 0x07, 0x4e, 0xed, 0x13, 0x8a, 0xd7, 0x01, 0x07, 0xf7, 0xc7, 0xc9, + 0x02, 0x4c, 0x17, 0x89, 0x8c, 0xd7, 0x01, 0x45, 0x34, 0xde, 0x6f, 0xd7, + 0x01, 0xb0, 0xa8, 0x02, 0x4a, 0x86, 0xa7, 0x8e, 0xd7, 0x01, 0x06, 0x3c, + 0x06, 0x06, 0x4c, 0x03, 0x8e, 0x8b, 0xd7, 0x41, 0xe1, 0xee, 0xd5, 0x81, 0x8c, 0x02, 0xe2, 0xef, 0xd5, 0x81, 0x80, 0x02, 0xe3, 0xf0, 0xd5, 0x81, 0xf4, 0x01, 0xe4, 0xf1, 0xd5, 0x81, 0xe8, 0x01, 0xe5, 0xf2, 0xd5, 0x81, 0xd6, 0x01, 0xe6, 0xf3, 0xd5, 0x81, 0xca, 0x01, 0xe7, 0xf4, 0xd5, 0x81, @@ -7639,22 +7640,22 @@ static const unsigned char uname2c_tree[210697] = { 0x20, 0xf6, 0x03, 0xd6, 0x01, 0xf7, 0x04, 0xd6, 0x01, 0xf8, 0x05, 0xd6, 0x81, 0x0f, 0xf9, 0x06, 0xd6, 0x01, 0xfa, 0x07, 0xd6, 0xc1, 0x00, 0x43, 0xec, 0x0d, 0x75, 0xd7, 0x41, 0xe9, 0x7d, 0xd7, 0x41, 0x46, 0xee, 0x13, - 0x84, 0xd7, 0x41, 0x42, 0xc3, 0x21, 0x83, 0xd7, 0x01, 0x44, 0xf1, 0x8d, + 0x84, 0xd7, 0x41, 0x42, 0xc3, 0x21, 0x83, 0xd7, 0x01, 0x44, 0x04, 0x8e, 0x77, 0xd7, 0x41, 0x44, 0x57, 0x1d, 0x82, 0xd7, 0x41, 0x42, 0x0b, 0x00, 0x80, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x85, 0xd7, 0x01, 0xe9, 0x7f, 0xd7, 0x01, 0x42, 0xdb, 0x02, 0x87, 0xd7, 0x41, 0xad, 0x01, 0xff, 0x43, 0xd3, - 0x04, 0x88, 0xd7, 0x01, 0x45, 0x88, 0xdc, 0x7e, 0xd7, 0x41, 0xf5, 0x7c, - 0xd7, 0x41, 0xf5, 0x7b, 0xd7, 0x41, 0x44, 0x4c, 0xdd, 0x7a, 0xd7, 0x41, - 0x44, 0x11, 0x89, 0x79, 0xd7, 0x41, 0x43, 0x20, 0x04, 0x78, 0xd7, 0x41, - 0x44, 0x98, 0x1e, 0x72, 0xd7, 0x41, 0x4a, 0xfd, 0x93, 0x81, 0xd7, 0x41, + 0x04, 0x88, 0xd7, 0x01, 0x45, 0xa4, 0xdc, 0x7e, 0xd7, 0x41, 0xf5, 0x7c, + 0xd7, 0x41, 0xf5, 0x7b, 0xd7, 0x41, 0x44, 0x68, 0xdd, 0x7a, 0xd7, 0x41, + 0x44, 0x18, 0x89, 0x79, 0xd7, 0x41, 0x43, 0x20, 0x04, 0x78, 0xd7, 0x41, + 0x44, 0x98, 0x1e, 0x72, 0xd7, 0x41, 0x4a, 0x10, 0x94, 0x81, 0xd7, 0x41, 0x46, 0xee, 0x13, 0x74, 0xd7, 0x01, 0x42, 0x12, 0x00, 0x76, 0xd7, 0x41, - 0x44, 0x01, 0xcc, 0x73, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x86, 0xd7, 0x41, - 0x43, 0xec, 0x0d, 0x71, 0xd7, 0x41, 0x44, 0x91, 0xd9, 0x70, 0xd7, 0x41, - 0x53, 0xf1, 0x42, 0x89, 0xd7, 0x01, 0x49, 0x41, 0xb0, 0x8d, 0xd7, 0x01, - 0x48, 0xbf, 0xa3, 0x8f, 0xd7, 0x41, 0x08, 0xe9, 0x04, 0xcf, 0x02, 0x4e, - 0xed, 0x13, 0xc4, 0xd7, 0x01, 0x4c, 0x10, 0x89, 0xc6, 0xd7, 0x01, 0x45, - 0x18, 0xde, 0xa9, 0xd7, 0x01, 0xb0, 0xa8, 0x02, 0x4a, 0x73, 0xa7, 0xc8, - 0xd7, 0x01, 0x06, 0x3c, 0x06, 0x06, 0x4c, 0xf0, 0x8d, 0xc5, 0xd7, 0x41, + 0x44, 0x1d, 0xcc, 0x73, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x86, 0xd7, 0x41, + 0x43, 0xec, 0x0d, 0x71, 0xd7, 0x41, 0x44, 0xad, 0xd9, 0x70, 0xd7, 0x41, + 0x53, 0x06, 0x43, 0x89, 0xd7, 0x01, 0x49, 0x5d, 0xb0, 0x8d, 0xd7, 0x01, + 0x48, 0xd2, 0xa3, 0x8f, 0xd7, 0x41, 0x08, 0xe9, 0x04, 0xcf, 0x02, 0x4e, + 0xed, 0x13, 0xc4, 0xd7, 0x01, 0x4c, 0x17, 0x89, 0xc6, 0xd7, 0x01, 0x45, + 0x34, 0xde, 0xa9, 0xd7, 0x01, 0xb0, 0xa8, 0x02, 0x4a, 0x86, 0xa7, 0xc8, + 0xd7, 0x01, 0x06, 0x3c, 0x06, 0x06, 0x4c, 0x03, 0x8e, 0xc5, 0xd7, 0x41, 0xe1, 0x56, 0xd6, 0x81, 0x8c, 0x02, 0xe2, 0x57, 0xd6, 0x81, 0x80, 0x02, 0xe3, 0x58, 0xd6, 0x81, 0xf4, 0x01, 0xe4, 0x59, 0xd6, 0x81, 0xe8, 0x01, 0xe5, 0x5a, 0xd6, 0x81, 0xd6, 0x01, 0xe6, 0x5b, 0xd6, 0x81, 0xca, 0x01, @@ -7668,18 +7669,18 @@ static const unsigned char uname2c_tree[210697] = { 0x01, 0xf8, 0x6d, 0xd6, 0x81, 0x0f, 0xf9, 0x6e, 0xd6, 0x01, 0xfa, 0x6f, 0xd6, 0xc1, 0x00, 0x43, 0xec, 0x0d, 0xaf, 0xd7, 0x41, 0xe9, 0xb7, 0xd7, 0x41, 0x46, 0xee, 0x13, 0xbe, 0xd7, 0x41, 0x42, 0xc3, 0x21, 0xbd, 0xd7, - 0x01, 0x44, 0xf1, 0x8d, 0xb1, 0xd7, 0x41, 0x44, 0x57, 0x1d, 0xbc, 0xd7, + 0x01, 0x44, 0x04, 0x8e, 0xb1, 0xd7, 0x41, 0x44, 0x57, 0x1d, 0xbc, 0xd7, 0x41, 0x42, 0x0b, 0x00, 0xba, 0xd7, 0x41, 0x42, 0x49, 0x00, 0xbf, 0xd7, 0x01, 0xe9, 0xb9, 0xd7, 0x01, 0x42, 0xdb, 0x02, 0xc1, 0xd7, 0x41, 0xad, - 0x01, 0xff, 0x43, 0xd3, 0x04, 0xc2, 0xd7, 0x01, 0x45, 0x88, 0xdc, 0xb8, - 0xd7, 0x41, 0xf5, 0xb6, 0xd7, 0x41, 0xf5, 0xb5, 0xd7, 0x41, 0x44, 0x4c, - 0xdd, 0xb4, 0xd7, 0x41, 0x44, 0x11, 0x89, 0xb3, 0xd7, 0x41, 0x43, 0x20, - 0x04, 0xb2, 0xd7, 0x41, 0x44, 0x98, 0x1e, 0xac, 0xd7, 0x41, 0x4a, 0xfd, - 0x93, 0xbb, 0xd7, 0x41, 0x46, 0xee, 0x13, 0xae, 0xd7, 0x01, 0x42, 0x12, - 0x00, 0xb0, 0xd7, 0x41, 0x44, 0x01, 0xcc, 0xad, 0xd7, 0x41, 0x42, 0x49, - 0x00, 0xc0, 0xd7, 0x41, 0x43, 0xec, 0x0d, 0xab, 0xd7, 0x41, 0x44, 0x91, - 0xd9, 0xaa, 0xd7, 0x41, 0x53, 0xf1, 0x42, 0xc3, 0xd7, 0x01, 0x49, 0x41, - 0xb0, 0xc7, 0xd7, 0x01, 0x48, 0xbf, 0xa3, 0xc9, 0xd7, 0x41, 0xe1, 0x3c, + 0x01, 0xff, 0x43, 0xd3, 0x04, 0xc2, 0xd7, 0x01, 0x45, 0xa4, 0xdc, 0xb8, + 0xd7, 0x41, 0xf5, 0xb6, 0xd7, 0x41, 0xf5, 0xb5, 0xd7, 0x41, 0x44, 0x68, + 0xdd, 0xb4, 0xd7, 0x41, 0x44, 0x18, 0x89, 0xb3, 0xd7, 0x41, 0x43, 0x20, + 0x04, 0xb2, 0xd7, 0x41, 0x44, 0x98, 0x1e, 0xac, 0xd7, 0x41, 0x4a, 0x10, + 0x94, 0xbb, 0xd7, 0x41, 0x46, 0xee, 0x13, 0xae, 0xd7, 0x01, 0x42, 0x12, + 0x00, 0xb0, 0xd7, 0x41, 0x44, 0x1d, 0xcc, 0xad, 0xd7, 0x41, 0x42, 0x49, + 0x00, 0xc0, 0xd7, 0x41, 0x43, 0xec, 0x0d, 0xab, 0xd7, 0x41, 0x44, 0xad, + 0xd9, 0xaa, 0xd7, 0x41, 0x53, 0x06, 0x43, 0xc3, 0xd7, 0x01, 0x49, 0x5d, + 0xb0, 0xc7, 0xd7, 0x01, 0x48, 0xd2, 0xa3, 0xc9, 0xd7, 0x41, 0xe1, 0x3c, 0xd6, 0x81, 0x8c, 0x02, 0xe2, 0x3d, 0xd6, 0x81, 0x80, 0x02, 0xe3, 0x3e, 0xd6, 0x81, 0xf4, 0x01, 0xe4, 0x3f, 0xd6, 0x81, 0xe8, 0x01, 0xe5, 0x40, 0xd6, 0x81, 0xd6, 0x01, 0xe6, 0x41, 0xd6, 0x01, 0xe7, 0x42, 0xd6, 0x81, @@ -7692,17 +7693,17 @@ static const unsigned char uname2c_tree[210697] = { 0x81, 0x20, 0xf6, 0x51, 0xd6, 0x01, 0xf7, 0x52, 0xd6, 0x01, 0xf8, 0x53, 0xd6, 0x81, 0x0f, 0xf9, 0x54, 0xd6, 0x01, 0xfa, 0x55, 0xd6, 0xc1, 0x00, 0x43, 0xec, 0x0d, 0x95, 0xd7, 0x41, 0xe9, 0x9d, 0xd7, 0x41, 0x46, 0xee, - 0x13, 0xa4, 0xd7, 0x41, 0x42, 0xc3, 0x21, 0xa3, 0xd7, 0x01, 0x44, 0xf1, - 0x8d, 0x97, 0xd7, 0xc1, 0x00, 0x47, 0xf6, 0x06, 0xa1, 0xd7, 0x41, 0x44, + 0x13, 0xa4, 0xd7, 0x41, 0x42, 0xc3, 0x21, 0xa3, 0xd7, 0x01, 0x44, 0x04, + 0x8e, 0x97, 0xd7, 0xc1, 0x00, 0x47, 0xf6, 0x06, 0xa1, 0xd7, 0x41, 0x44, 0x57, 0x1d, 0xa2, 0xd7, 0x41, 0x42, 0x0b, 0x00, 0xa0, 0xd7, 0x41, 0x42, 0x49, 0x00, 0xa5, 0xd7, 0x01, 0xe9, 0x9f, 0xd7, 0x01, 0x42, 0xdb, 0x02, 0xa7, 0xd7, 0x41, 0xad, 0x01, 0xff, 0x43, 0xd3, 0x04, 0xa8, 0xd7, 0x01, - 0x45, 0x88, 0xdc, 0x9e, 0xd7, 0x41, 0xf5, 0x9c, 0xd7, 0x41, 0xf5, 0x9b, - 0xd7, 0x41, 0x44, 0x4c, 0xdd, 0x9a, 0xd7, 0x41, 0x44, 0x11, 0x89, 0x99, + 0x45, 0xa4, 0xdc, 0x9e, 0xd7, 0x41, 0xf5, 0x9c, 0xd7, 0x41, 0xf5, 0x9b, + 0xd7, 0x41, 0x44, 0x68, 0xdd, 0x9a, 0xd7, 0x41, 0x44, 0x18, 0x89, 0x99, 0xd7, 0x41, 0x43, 0x20, 0x04, 0x98, 0xd7, 0x41, 0x44, 0x98, 0x1e, 0x92, 0xd7, 0x41, 0x46, 0xee, 0x13, 0x94, 0xd7, 0x01, 0x42, 0x12, 0x00, 0x96, - 0xd7, 0x41, 0x44, 0x01, 0xcc, 0x93, 0xd7, 0x41, 0x42, 0x49, 0x00, 0xa6, - 0xd7, 0x41, 0x43, 0xec, 0x0d, 0x91, 0xd7, 0x41, 0x44, 0x91, 0xd9, 0x90, + 0xd7, 0x41, 0x44, 0x1d, 0xcc, 0x93, 0xd7, 0x41, 0x42, 0x49, 0x00, 0xa6, + 0xd7, 0x41, 0x43, 0xec, 0x0d, 0x91, 0xd7, 0x41, 0x44, 0xad, 0xd9, 0x90, 0xd7, 0x41, 0x45, 0xd1, 0x09, 0xf4, 0xd7, 0x01, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0xf5, 0xd7, 0x01, 0x43, 0xcd, 0x09, 0xed, 0xd7, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xec, 0xd7, 0x41, 0x44, 0x25, 0x01, 0xef, @@ -7721,19 +7722,19 @@ static const unsigned char uname2c_tree[210697] = { 0xf6, 0xe9, 0xd5, 0x01, 0xf7, 0xea, 0xd5, 0x01, 0xf8, 0xeb, 0xd5, 0x81, 0x0f, 0xf9, 0xec, 0xd5, 0x01, 0xfa, 0xed, 0xd5, 0xc1, 0x00, 0x43, 0xec, 0x0d, 0x5b, 0xd7, 0x41, 0xe9, 0x63, 0xd7, 0x41, 0x46, 0xee, 0x13, 0x6a, - 0xd7, 0x41, 0x42, 0xc3, 0x21, 0x69, 0xd7, 0x01, 0x44, 0xf1, 0x8d, 0x5d, + 0xd7, 0x41, 0x42, 0xc3, 0x21, 0x69, 0xd7, 0x01, 0x44, 0x04, 0x8e, 0x5d, 0xd7, 0xc1, 0x00, 0x47, 0xf6, 0x06, 0x67, 0xd7, 0x41, 0x44, 0x57, 0x1d, 0x68, 0xd7, 0x41, 0x42, 0x0b, 0x00, 0x66, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x6b, 0xd7, 0x01, 0xe9, 0x65, 0xd7, 0x01, 0x42, 0xdb, 0x02, 0x6d, 0xd7, - 0x41, 0xad, 0x01, 0xff, 0x43, 0xd3, 0x04, 0x6e, 0xd7, 0x01, 0x45, 0x88, + 0x41, 0xad, 0x01, 0xff, 0x43, 0xd3, 0x04, 0x6e, 0xd7, 0x01, 0x45, 0xa4, 0xdc, 0x64, 0xd7, 0x41, 0xf5, 0x62, 0xd7, 0x41, 0xf5, 0x61, 0xd7, 0x41, - 0x44, 0x4c, 0xdd, 0x60, 0xd7, 0x41, 0x44, 0x11, 0x89, 0x5f, 0xd7, 0x41, + 0x44, 0x68, 0xdd, 0x60, 0xd7, 0x41, 0x44, 0x18, 0x89, 0x5f, 0xd7, 0x41, 0x43, 0x20, 0x04, 0x5e, 0xd7, 0x41, 0x44, 0x98, 0x1e, 0x58, 0xd7, 0x41, 0x46, 0xee, 0x13, 0x5a, 0xd7, 0x01, 0x42, 0x12, 0x00, 0x5c, 0xd7, 0x41, - 0x44, 0x01, 0xcc, 0x59, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x6c, 0xd7, 0x41, - 0x43, 0xec, 0x0d, 0x57, 0xd7, 0x41, 0x44, 0x91, 0xd9, 0x56, 0xd7, 0x41, + 0x44, 0x1d, 0xcc, 0x59, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x6c, 0xd7, 0x41, + 0x43, 0xec, 0x0d, 0x57, 0xd7, 0x41, 0x44, 0xad, 0xd9, 0x56, 0xd7, 0x41, 0x04, 0xca, 0x00, 0x06, 0x4d, 0x50, 0x2d, 0xcb, 0x27, 0x40, 0x4d, 0x96, - 0x0d, 0xe9, 0x27, 0x00, 0x54, 0xc0, 0x3c, 0xeb, 0x27, 0x00, 0x55, 0x05, + 0x0d, 0xe9, 0x27, 0x00, 0x54, 0xd5, 0x3c, 0xeb, 0x27, 0x00, 0x55, 0x05, 0x37, 0xef, 0x27, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, 0x4e, 0xe1, 0x23, 0xe7, 0x27, 0x00, 0x56, 0x36, 0x08, 0xed, 0x27, 0x40, 0x08, 0xe9, 0x04, 0xb3, 0x01, 0x06, 0xf4, 0x05, 0x6d, 0x06, 0x3c, 0x06, 0x01, 0xff, 0xe1, @@ -7760,12 +7761,12 @@ static const unsigned char uname2c_tree[210697] = { 0x01, 0xf3, 0x82, 0xd6, 0x01, 0xf4, 0x83, 0xd6, 0x01, 0xf5, 0x84, 0xd6, 0x01, 0xf6, 0x85, 0xd6, 0x01, 0xf7, 0x86, 0xd6, 0x01, 0xf8, 0x87, 0xd6, 0x01, 0xf9, 0x88, 0xd6, 0x01, 0xfa, 0x89, 0xd6, 0x41, 0x4d, 0x96, 0x0d, - 0xe8, 0x27, 0x00, 0x54, 0xc0, 0x3c, 0xea, 0x27, 0x00, 0x55, 0x05, 0x37, + 0xe8, 0x27, 0x00, 0x54, 0xd5, 0x3c, 0xea, 0x27, 0x00, 0x55, 0x05, 0x37, 0xee, 0x27, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, 0x4e, 0xe1, 0x23, 0xe6, 0x27, 0x00, 0x56, 0x36, 0x08, 0xec, 0x27, 0x40, 0x08, 0xe9, 0x04, 0xd8, - 0x02, 0x4e, 0xed, 0x13, 0x16, 0xd7, 0x01, 0x4c, 0x10, 0x89, 0x18, 0xd7, - 0x01, 0x45, 0x18, 0xde, 0xfb, 0xd6, 0x01, 0xb0, 0xb1, 0x02, 0x4a, 0x73, - 0xa7, 0x1a, 0xd7, 0x01, 0x06, 0x3c, 0x06, 0x06, 0x4c, 0xf0, 0x8d, 0x17, + 0x02, 0x4e, 0xed, 0x13, 0x16, 0xd7, 0x01, 0x4c, 0x17, 0x89, 0x18, 0xd7, + 0x01, 0x45, 0x34, 0xde, 0xfb, 0xd6, 0x01, 0xb0, 0xb1, 0x02, 0x4a, 0x86, + 0xa7, 0x1a, 0xd7, 0x01, 0x06, 0x3c, 0x06, 0x06, 0x4c, 0x03, 0x8e, 0x17, 0xd7, 0x41, 0xe1, 0x4e, 0xd4, 0x81, 0x95, 0x02, 0xe2, 0x4f, 0xd4, 0x81, 0x89, 0x02, 0xe3, 0x50, 0xd4, 0x81, 0xfd, 0x01, 0xe4, 0x51, 0xd4, 0x81, 0xe4, 0x01, 0xe5, 0x52, 0xd4, 0x81, 0xd2, 0x01, 0xe6, 0x53, 0xd4, 0x81, @@ -7779,19 +7780,19 @@ static const unsigned char uname2c_tree[210697] = { 0x65, 0xd4, 0x81, 0x0f, 0xf9, 0x66, 0xd4, 0x01, 0xfa, 0x67, 0xd4, 0xc1, 0x00, 0x43, 0xec, 0x0d, 0x01, 0xd7, 0x41, 0xe9, 0x09, 0xd7, 0x41, 0x46, 0xee, 0x13, 0x10, 0xd7, 0x41, 0x42, 0xc3, 0x21, 0x0f, 0xd7, 0x01, 0x44, - 0xf1, 0x8d, 0x03, 0xd7, 0x41, 0x44, 0x57, 0x1d, 0x0e, 0xd7, 0x41, 0x42, + 0x04, 0x8e, 0x03, 0xd7, 0x41, 0x44, 0x57, 0x1d, 0x0e, 0xd7, 0x41, 0x42, 0x0b, 0x00, 0x0c, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x11, 0xd7, 0x01, 0xe9, 0x0b, 0xd7, 0x01, 0x42, 0xdb, 0x02, 0x13, 0xd7, 0x41, 0xad, 0x01, 0xff, - 0x43, 0xd3, 0x04, 0x14, 0xd7, 0x01, 0x45, 0x88, 0xdc, 0x0a, 0xd7, 0x41, - 0xf5, 0x08, 0xd7, 0x41, 0xf5, 0x07, 0xd7, 0x41, 0x44, 0x4c, 0xdd, 0x06, - 0xd7, 0x41, 0x44, 0x11, 0x89, 0x05, 0xd7, 0x41, 0x43, 0x20, 0x04, 0x04, - 0xd7, 0x41, 0x44, 0x98, 0x1e, 0xfe, 0xd6, 0x41, 0x4a, 0xfd, 0x93, 0x0d, + 0x43, 0xd3, 0x04, 0x14, 0xd7, 0x01, 0x45, 0xa4, 0xdc, 0x0a, 0xd7, 0x41, + 0xf5, 0x08, 0xd7, 0x41, 0xf5, 0x07, 0xd7, 0x41, 0x44, 0x68, 0xdd, 0x06, + 0xd7, 0x41, 0x44, 0x18, 0x89, 0x05, 0xd7, 0x41, 0x43, 0x20, 0x04, 0x04, + 0xd7, 0x41, 0x44, 0x98, 0x1e, 0xfe, 0xd6, 0x41, 0x4a, 0x10, 0x94, 0x0d, 0xd7, 0x41, 0x46, 0xee, 0x13, 0x00, 0xd7, 0x01, 0x42, 0x12, 0x00, 0x02, - 0xd7, 0x41, 0x44, 0x01, 0xcc, 0xff, 0xd6, 0x01, 0x07, 0xad, 0x3c, 0x01, + 0xd7, 0x41, 0x44, 0x1d, 0xcc, 0xff, 0xd6, 0x01, 0x07, 0xc2, 0x3c, 0x01, 0xff, 0xe9, 0xa4, 0xd6, 0x01, 0xea, 0xa5, 0xd6, 0x41, 0x42, 0x49, 0x00, - 0x12, 0xd7, 0x41, 0x43, 0xec, 0x0d, 0xfd, 0xd6, 0x41, 0x44, 0x91, 0xd9, - 0xfc, 0xd6, 0x41, 0x53, 0xf1, 0x42, 0x15, 0xd7, 0x01, 0x49, 0x41, 0xb0, - 0x19, 0xd7, 0x01, 0x48, 0xbf, 0xa3, 0x1b, 0xd7, 0x41, 0xe1, 0x34, 0xd4, + 0x12, 0xd7, 0x41, 0x43, 0xec, 0x0d, 0xfd, 0xd6, 0x41, 0x44, 0xad, 0xd9, + 0xfc, 0xd6, 0x41, 0x53, 0x06, 0x43, 0x15, 0xd7, 0x01, 0x49, 0x5d, 0xb0, + 0x19, 0xd7, 0x01, 0x48, 0xd2, 0xa3, 0x1b, 0xd7, 0x41, 0xe1, 0x34, 0xd4, 0x81, 0x8c, 0x02, 0xe2, 0x35, 0xd4, 0x81, 0x80, 0x02, 0xe3, 0x36, 0xd4, 0x81, 0xf4, 0x01, 0xe4, 0x37, 0xd4, 0x81, 0xe8, 0x01, 0xe5, 0x38, 0xd4, 0x81, 0xd6, 0x01, 0xe6, 0x39, 0xd4, 0x01, 0xe7, 0x3a, 0xd4, 0x81, 0xc6, @@ -7804,18 +7805,18 @@ static const unsigned char uname2c_tree[210697] = { 0x20, 0xf6, 0x49, 0xd4, 0x01, 0xf7, 0x4a, 0xd4, 0x01, 0xf8, 0x4b, 0xd4, 0x81, 0x0f, 0xf9, 0x4c, 0xd4, 0x01, 0xfa, 0x4d, 0xd4, 0xc1, 0x00, 0x43, 0xec, 0x0d, 0xe7, 0xd6, 0x41, 0xe9, 0xef, 0xd6, 0x41, 0x46, 0xee, 0x13, - 0xf6, 0xd6, 0x41, 0x42, 0xc3, 0x21, 0xf5, 0xd6, 0x01, 0x44, 0xf1, 0x8d, + 0xf6, 0xd6, 0x41, 0x42, 0xc3, 0x21, 0xf5, 0xd6, 0x01, 0x44, 0x04, 0x8e, 0xe9, 0xd6, 0xc1, 0x00, 0x47, 0xf6, 0x06, 0xf3, 0xd6, 0x41, 0x44, 0x57, 0x1d, 0xf4, 0xd6, 0x41, 0x42, 0x0b, 0x00, 0xf2, 0xd6, 0x41, 0x42, 0x49, 0x00, 0xf7, 0xd6, 0x01, 0xe9, 0xf1, 0xd6, 0x01, 0x42, 0xdb, 0x02, 0xf9, 0xd6, 0x41, 0xad, 0x01, 0xff, 0x43, 0xd3, 0x04, 0xfa, 0xd6, 0x01, 0x45, - 0x88, 0xdc, 0xf0, 0xd6, 0x41, 0xf5, 0xee, 0xd6, 0x41, 0xf5, 0xed, 0xd6, - 0x41, 0x44, 0x4c, 0xdd, 0xec, 0xd6, 0x41, 0x44, 0x11, 0x89, 0xeb, 0xd6, + 0xa4, 0xdc, 0xf0, 0xd6, 0x41, 0xf5, 0xee, 0xd6, 0x41, 0xf5, 0xed, 0xd6, + 0x41, 0x44, 0x68, 0xdd, 0xec, 0xd6, 0x41, 0x44, 0x18, 0x89, 0xeb, 0xd6, 0x41, 0x43, 0x20, 0x04, 0xea, 0xd6, 0x41, 0x44, 0x98, 0x1e, 0xe4, 0xd6, 0x41, 0x46, 0xee, 0x13, 0xe6, 0xd6, 0x01, 0x42, 0x12, 0x00, 0xe8, 0xd6, - 0x41, 0x44, 0x01, 0xcc, 0xe5, 0xd6, 0x41, 0x42, 0x49, 0x00, 0xf8, 0xd6, - 0x41, 0x43, 0xec, 0x0d, 0xe3, 0xd6, 0x41, 0x44, 0x91, 0xd9, 0xe2, 0xd6, - 0x41, 0x4f, 0xf8, 0x34, 0xcd, 0x27, 0x00, 0x07, 0x8e, 0xbc, 0x01, 0xff, + 0x41, 0x44, 0x1d, 0xcc, 0xe5, 0xd6, 0x41, 0x42, 0x49, 0x00, 0xf8, 0xd6, + 0x41, 0x43, 0xec, 0x0d, 0xe3, 0xd6, 0x41, 0x44, 0xad, 0xd9, 0xe2, 0xd6, + 0x41, 0x4f, 0xf8, 0x34, 0xcd, 0x27, 0x00, 0x07, 0xaa, 0xbc, 0x01, 0xff, 0x08, 0xe9, 0x04, 0x6d, 0x06, 0x3c, 0x06, 0x01, 0xff, 0xe1, 0x1e, 0xd5, 0x01, 0xe2, 0x1f, 0xd5, 0x01, 0xe3, 0x20, 0xd5, 0x01, 0xe4, 0x21, 0xd5, 0x01, 0xe5, 0x22, 0xd5, 0x01, 0xe6, 0x23, 0xd5, 0x01, 0xe7, 0x24, 0xd5, @@ -7855,10 +7856,10 @@ static const unsigned char uname2c_tree[210697] = { 0x01, 0xf4, 0x4b, 0xd5, 0x01, 0xf5, 0x4c, 0xd5, 0x01, 0xf6, 0x4d, 0xd5, 0x01, 0xf7, 0x4e, 0xd5, 0x01, 0xf8, 0x4f, 0xd5, 0x01, 0xf9, 0x50, 0xd5, 0x41, 0x08, 0xe9, 0x04, 0xcc, 0x0b, 0x06, 0xf4, 0x05, 0x85, 0x0b, 0x4e, - 0xed, 0x13, 0xdc, 0xd6, 0x01, 0x08, 0x8d, 0xbc, 0xa1, 0x09, 0x07, 0xdb, - 0xc7, 0xb0, 0x04, 0x4c, 0x10, 0x89, 0xde, 0xd6, 0x01, 0x45, 0x18, 0xde, - 0xc1, 0xd6, 0x01, 0xb0, 0x8f, 0x04, 0x4a, 0x73, 0xa7, 0xe0, 0xd6, 0x01, - 0xb3, 0x06, 0x4c, 0xf0, 0x8d, 0xdd, 0xd6, 0x41, 0x06, 0x7a, 0x05, 0xa3, + 0xed, 0x13, 0xdc, 0xd6, 0x01, 0x08, 0xa9, 0xbc, 0xa1, 0x09, 0x07, 0xf7, + 0xc7, 0xb0, 0x04, 0x4c, 0x17, 0x89, 0xde, 0xd6, 0x01, 0x45, 0x34, 0xde, + 0xc1, 0xd6, 0x01, 0xb0, 0x8f, 0x04, 0x4a, 0x86, 0xa7, 0xe0, 0xd6, 0x01, + 0xb3, 0x06, 0x4c, 0x03, 0x8e, 0xdd, 0xd6, 0x41, 0x06, 0x7a, 0x05, 0xa3, 0x02, 0x05, 0x3d, 0x06, 0x01, 0xff, 0xe1, 0x1a, 0xd4, 0x81, 0x92, 0x02, 0xe2, 0x1b, 0xd4, 0x81, 0x86, 0x02, 0xe3, 0x1c, 0xd4, 0x81, 0xfa, 0x01, 0xe4, 0x1d, 0xd4, 0x81, 0xe8, 0x01, 0xe5, 0x1e, 0xd4, 0x81, 0xd6, 0x01, @@ -7872,17 +7873,17 @@ static const unsigned char uname2c_tree[210697] = { 0x2f, 0xd4, 0x01, 0xf7, 0x30, 0xd4, 0x01, 0xf8, 0x31, 0xd4, 0x81, 0x0f, 0xf9, 0x32, 0xd4, 0x01, 0xfa, 0x33, 0xd4, 0xc1, 0x00, 0x43, 0xec, 0x0d, 0xc7, 0xd6, 0x41, 0xe9, 0xcf, 0xd6, 0x41, 0x46, 0xee, 0x13, 0xd6, 0xd6, - 0x41, 0x42, 0xc3, 0x21, 0xd5, 0xd6, 0x01, 0x44, 0xf1, 0x8d, 0xc9, 0xd6, + 0x41, 0x42, 0xc3, 0x21, 0xd5, 0xd6, 0x01, 0x44, 0x04, 0x8e, 0xc9, 0xd6, 0x41, 0x44, 0x57, 0x1d, 0xd4, 0xd6, 0x41, 0x42, 0x0b, 0x00, 0xd2, 0xd6, 0x41, 0x42, 0x49, 0x00, 0xd7, 0xd6, 0x01, 0xe9, 0xd1, 0xd6, 0x01, 0x42, 0xdb, 0x02, 0xd9, 0xd6, 0x41, 0xad, 0x01, 0xff, 0x43, 0xd3, 0x04, 0xda, - 0xd6, 0x01, 0x45, 0x88, 0xdc, 0xd0, 0xd6, 0x41, 0xf5, 0xce, 0xd6, 0x41, - 0xf5, 0xcd, 0xd6, 0x41, 0x44, 0x4c, 0xdd, 0xcc, 0xd6, 0x41, 0x44, 0x11, + 0xd6, 0x01, 0x45, 0xa4, 0xdc, 0xd0, 0xd6, 0x41, 0xf5, 0xce, 0xd6, 0x41, + 0xf5, 0xcd, 0xd6, 0x41, 0x44, 0x68, 0xdd, 0xcc, 0xd6, 0x41, 0x44, 0x18, 0x89, 0xcb, 0xd6, 0x41, 0x43, 0x20, 0x04, 0xca, 0xd6, 0x41, 0x44, 0x98, - 0x1e, 0xc4, 0xd6, 0x41, 0x4a, 0xfd, 0x93, 0xd3, 0xd6, 0x41, 0x46, 0xee, - 0x13, 0xc6, 0xd6, 0x01, 0x42, 0x12, 0x00, 0xc8, 0xd6, 0x41, 0x44, 0x01, - 0xcc, 0xc5, 0xd6, 0x01, 0x46, 0x83, 0x52, 0xcb, 0xd7, 0x41, 0x42, 0x49, - 0x00, 0xd8, 0xd6, 0x41, 0x43, 0xec, 0x0d, 0xc3, 0xd6, 0x41, 0x44, 0x91, + 0x1e, 0xc4, 0xd6, 0x41, 0x4a, 0x10, 0x94, 0xd3, 0xd6, 0x41, 0x46, 0xee, + 0x13, 0xc6, 0xd6, 0x01, 0x42, 0x12, 0x00, 0xc8, 0xd6, 0x41, 0x44, 0x1d, + 0xcc, 0xc5, 0xd6, 0x01, 0x46, 0x98, 0x52, 0xcb, 0xd7, 0x41, 0x42, 0x49, + 0x00, 0xd8, 0xd6, 0x41, 0x43, 0xec, 0x0d, 0xc3, 0xd6, 0x41, 0x44, 0xad, 0xd9, 0xc2, 0xd6, 0x41, 0x08, 0xe9, 0x04, 0x6d, 0x06, 0x3c, 0x06, 0x01, 0xff, 0xe1, 0xea, 0xd4, 0x01, 0xe2, 0xeb, 0xd4, 0x01, 0xe3, 0xec, 0xd4, 0x01, 0xe4, 0xed, 0xd4, 0x01, 0xe5, 0xee, 0xd4, 0x01, 0xe6, 0xef, 0xd4, @@ -7901,12 +7902,12 @@ static const unsigned char uname2c_tree[210697] = { 0x01, 0xf1, 0xe0, 0xd4, 0x01, 0xf2, 0xe1, 0xd4, 0x01, 0xf3, 0xe2, 0xd4, 0x01, 0xf4, 0xe3, 0xd4, 0x01, 0xf5, 0xe4, 0xd4, 0x01, 0xf6, 0xe5, 0xd4, 0x01, 0xf7, 0xe6, 0xd4, 0x01, 0xf8, 0xe7, 0xd4, 0x01, 0xf9, 0xe8, 0xd4, - 0x01, 0xfa, 0xe9, 0xd4, 0x41, 0x53, 0xf1, 0x42, 0xdb, 0xd6, 0x01, 0x49, - 0x41, 0xb0, 0xdf, 0xd6, 0x01, 0x48, 0xbf, 0xa3, 0xe1, 0xd6, 0x41, 0x08, - 0xe9, 0x04, 0xcf, 0x02, 0x4e, 0xed, 0x13, 0x50, 0xd7, 0x01, 0x4c, 0x10, - 0x89, 0x52, 0xd7, 0x01, 0x45, 0x18, 0xde, 0x35, 0xd7, 0x01, 0xb0, 0xa8, - 0x02, 0x4a, 0x73, 0xa7, 0x54, 0xd7, 0x01, 0x06, 0x3c, 0x06, 0x06, 0x4c, - 0xf0, 0x8d, 0x51, 0xd7, 0x41, 0xe1, 0x82, 0xd4, 0x81, 0x8c, 0x02, 0xe2, + 0x01, 0xfa, 0xe9, 0xd4, 0x41, 0x53, 0x06, 0x43, 0xdb, 0xd6, 0x01, 0x49, + 0x5d, 0xb0, 0xdf, 0xd6, 0x01, 0x48, 0xd2, 0xa3, 0xe1, 0xd6, 0x41, 0x08, + 0xe9, 0x04, 0xcf, 0x02, 0x4e, 0xed, 0x13, 0x50, 0xd7, 0x01, 0x4c, 0x17, + 0x89, 0x52, 0xd7, 0x01, 0x45, 0x34, 0xde, 0x35, 0xd7, 0x01, 0xb0, 0xa8, + 0x02, 0x4a, 0x86, 0xa7, 0x54, 0xd7, 0x01, 0x06, 0x3c, 0x06, 0x06, 0x4c, + 0x03, 0x8e, 0x51, 0xd7, 0x41, 0xe1, 0x82, 0xd4, 0x81, 0x8c, 0x02, 0xe2, 0x83, 0xd4, 0x81, 0x80, 0x02, 0xe3, 0x84, 0xd4, 0x81, 0xf4, 0x01, 0xe4, 0x85, 0xd4, 0x81, 0xe8, 0x01, 0xe5, 0x86, 0xd4, 0x81, 0xd6, 0x01, 0xe6, 0x87, 0xd4, 0x81, 0xca, 0x01, 0xe7, 0x88, 0xd4, 0x81, 0xbe, 0x01, 0xe8, @@ -7919,18 +7920,18 @@ static const unsigned char uname2c_tree[210697] = { 0xd4, 0x01, 0xf7, 0x98, 0xd4, 0x01, 0xf8, 0x99, 0xd4, 0x81, 0x0f, 0xf9, 0x9a, 0xd4, 0x01, 0xfa, 0x9b, 0xd4, 0xc1, 0x00, 0x43, 0xec, 0x0d, 0x3b, 0xd7, 0x41, 0xe9, 0x43, 0xd7, 0x41, 0x46, 0xee, 0x13, 0x4a, 0xd7, 0x41, - 0x42, 0xc3, 0x21, 0x49, 0xd7, 0x01, 0x44, 0xf1, 0x8d, 0x3d, 0xd7, 0x41, + 0x42, 0xc3, 0x21, 0x49, 0xd7, 0x01, 0x44, 0x04, 0x8e, 0x3d, 0xd7, 0x41, 0x44, 0x57, 0x1d, 0x48, 0xd7, 0x41, 0x42, 0x0b, 0x00, 0x46, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x4b, 0xd7, 0x01, 0xe9, 0x45, 0xd7, 0x01, 0x42, 0xdb, 0x02, 0x4d, 0xd7, 0x41, 0xad, 0x01, 0xff, 0x43, 0xd3, 0x04, 0x4e, 0xd7, - 0x01, 0x45, 0x88, 0xdc, 0x44, 0xd7, 0x41, 0xf5, 0x42, 0xd7, 0x41, 0xf5, - 0x41, 0xd7, 0x41, 0x44, 0x4c, 0xdd, 0x40, 0xd7, 0x41, 0x44, 0x11, 0x89, + 0x01, 0x45, 0xa4, 0xdc, 0x44, 0xd7, 0x41, 0xf5, 0x42, 0xd7, 0x41, 0xf5, + 0x41, 0xd7, 0x41, 0x44, 0x68, 0xdd, 0x40, 0xd7, 0x41, 0x44, 0x18, 0x89, 0x3f, 0xd7, 0x41, 0x43, 0x20, 0x04, 0x3e, 0xd7, 0x41, 0x44, 0x98, 0x1e, - 0x38, 0xd7, 0x41, 0x4a, 0xfd, 0x93, 0x47, 0xd7, 0x41, 0x46, 0xee, 0x13, - 0x3a, 0xd7, 0x01, 0x42, 0x12, 0x00, 0x3c, 0xd7, 0x41, 0x44, 0x01, 0xcc, + 0x38, 0xd7, 0x41, 0x4a, 0x10, 0x94, 0x47, 0xd7, 0x41, 0x46, 0xee, 0x13, + 0x3a, 0xd7, 0x01, 0x42, 0x12, 0x00, 0x3c, 0xd7, 0x41, 0x44, 0x1d, 0xcc, 0x39, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x4c, 0xd7, 0x41, 0x43, 0xec, 0x0d, - 0x37, 0xd7, 0x41, 0x44, 0x91, 0xd9, 0x36, 0xd7, 0x41, 0x53, 0xf1, 0x42, - 0x4f, 0xd7, 0x01, 0x49, 0x41, 0xb0, 0x53, 0xd7, 0x01, 0x48, 0xbf, 0xa3, + 0x37, 0xd7, 0x41, 0x44, 0xad, 0xd9, 0x36, 0xd7, 0x41, 0x53, 0x06, 0x43, + 0x4f, 0xd7, 0x01, 0x49, 0x5d, 0xb0, 0x53, 0xd7, 0x01, 0x48, 0xd2, 0xa3, 0x55, 0xd7, 0x41, 0xe1, 0x68, 0xd4, 0x81, 0x8c, 0x02, 0xe2, 0x69, 0xd4, 0x81, 0x80, 0x02, 0xe3, 0x6a, 0xd4, 0x81, 0xf4, 0x01, 0xe4, 0x6b, 0xd4, 0x81, 0xe8, 0x01, 0xe5, 0x6c, 0xd4, 0x81, 0xd6, 0x01, 0xe6, 0x6d, 0xd4, @@ -7944,17 +7945,17 @@ static const unsigned char uname2c_tree[210697] = { 0x7e, 0xd4, 0x01, 0xf8, 0x7f, 0xd4, 0x81, 0x0f, 0xf9, 0x80, 0xd4, 0x01, 0xfa, 0x81, 0xd4, 0xc1, 0x00, 0x43, 0xec, 0x0d, 0x21, 0xd7, 0x41, 0xe9, 0x29, 0xd7, 0x41, 0x46, 0xee, 0x13, 0x30, 0xd7, 0x41, 0x42, 0xc3, 0x21, - 0x2f, 0xd7, 0x01, 0x44, 0xf1, 0x8d, 0x23, 0xd7, 0xc1, 0x00, 0x47, 0xf6, + 0x2f, 0xd7, 0x01, 0x44, 0x04, 0x8e, 0x23, 0xd7, 0xc1, 0x00, 0x47, 0xf6, 0x06, 0x2d, 0xd7, 0x41, 0x44, 0x57, 0x1d, 0x2e, 0xd7, 0x41, 0x42, 0x0b, 0x00, 0x2c, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x31, 0xd7, 0x01, 0xe9, 0x2b, 0xd7, 0x01, 0x42, 0xdb, 0x02, 0x33, 0xd7, 0x41, 0xad, 0x01, 0xff, 0x43, - 0xd3, 0x04, 0x34, 0xd7, 0x01, 0x45, 0x88, 0xdc, 0x2a, 0xd7, 0x41, 0xf5, - 0x28, 0xd7, 0x41, 0xf5, 0x27, 0xd7, 0x41, 0x44, 0x4c, 0xdd, 0x26, 0xd7, - 0x41, 0x44, 0x11, 0x89, 0x25, 0xd7, 0x41, 0x43, 0x20, 0x04, 0x24, 0xd7, + 0xd3, 0x04, 0x34, 0xd7, 0x01, 0x45, 0xa4, 0xdc, 0x2a, 0xd7, 0x41, 0xf5, + 0x28, 0xd7, 0x41, 0xf5, 0x27, 0xd7, 0x41, 0x44, 0x68, 0xdd, 0x26, 0xd7, + 0x41, 0x44, 0x18, 0x89, 0x25, 0xd7, 0x41, 0x43, 0x20, 0x04, 0x24, 0xd7, 0x41, 0x44, 0x98, 0x1e, 0x1e, 0xd7, 0x41, 0x46, 0xee, 0x13, 0x20, 0xd7, - 0x01, 0x42, 0x12, 0x00, 0x22, 0xd7, 0x41, 0x44, 0x01, 0xcc, 0x1f, 0xd7, + 0x01, 0x42, 0x12, 0x00, 0x22, 0xd7, 0x41, 0x44, 0x1d, 0xcc, 0x1f, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x32, 0xd7, 0x41, 0x43, 0xec, 0x0d, 0x1d, 0xd7, - 0x41, 0x44, 0x91, 0xd9, 0x1c, 0xd7, 0x41, 0x08, 0xe9, 0x04, 0x6d, 0x06, + 0x41, 0x44, 0xad, 0xd9, 0x1c, 0xd7, 0x41, 0x08, 0xe9, 0x04, 0x6d, 0x06, 0x3c, 0x06, 0x01, 0xff, 0xe1, 0x86, 0xd5, 0x01, 0xe2, 0x87, 0xd5, 0x01, 0xe3, 0x88, 0xd5, 0x01, 0xe4, 0x89, 0xd5, 0x01, 0xe5, 0x8a, 0xd5, 0x01, 0xe6, 0x8b, 0xd5, 0x01, 0xe7, 0x8c, 0xd5, 0x01, 0xe8, 0x8d, 0xd5, 0x01, @@ -7991,29 +7992,29 @@ static const unsigned char uname2c_tree[210697] = { 0xd4, 0x01, 0xf8, 0x17, 0xd4, 0x81, 0x0f, 0xf9, 0x18, 0xd4, 0x01, 0xfa, 0x19, 0xd4, 0xc1, 0x00, 0x43, 0xec, 0x0d, 0xad, 0xd6, 0x41, 0xe9, 0xb5, 0xd6, 0x41, 0x46, 0xee, 0x13, 0xbc, 0xd6, 0x41, 0x42, 0xc3, 0x21, 0xbb, - 0xd6, 0x01, 0x44, 0xf1, 0x8d, 0xaf, 0xd6, 0xc1, 0x00, 0x47, 0xf6, 0x06, + 0xd6, 0x01, 0x44, 0x04, 0x8e, 0xaf, 0xd6, 0xc1, 0x00, 0x47, 0xf6, 0x06, 0xb9, 0xd6, 0x41, 0x44, 0x57, 0x1d, 0xba, 0xd6, 0x41, 0x42, 0x0b, 0x00, 0xb8, 0xd6, 0x41, 0x42, 0x49, 0x00, 0xbd, 0xd6, 0x01, 0xe9, 0xb7, 0xd6, 0x01, 0x42, 0xdb, 0x02, 0xbf, 0xd6, 0x41, 0xad, 0x01, 0xff, 0x43, 0xd3, - 0x04, 0xc0, 0xd6, 0x01, 0x45, 0x88, 0xdc, 0xb6, 0xd6, 0x41, 0xf5, 0xb4, - 0xd6, 0x41, 0xf5, 0xb3, 0xd6, 0x41, 0x44, 0x4c, 0xdd, 0xb2, 0xd6, 0x41, - 0x44, 0x11, 0x89, 0xb1, 0xd6, 0x41, 0x43, 0x20, 0x04, 0xb0, 0xd6, 0x41, + 0x04, 0xc0, 0xd6, 0x01, 0x45, 0xa4, 0xdc, 0xb6, 0xd6, 0x41, 0xf5, 0xb4, + 0xd6, 0x41, 0xf5, 0xb3, 0xd6, 0x41, 0x44, 0x68, 0xdd, 0xb2, 0xd6, 0x41, + 0x44, 0x18, 0x89, 0xb1, 0xd6, 0x41, 0x43, 0x20, 0x04, 0xb0, 0xd6, 0x41, 0x44, 0x98, 0x1e, 0xaa, 0xd6, 0x41, 0x46, 0xee, 0x13, 0xac, 0xd6, 0x01, - 0x42, 0x12, 0x00, 0xae, 0xd6, 0x41, 0x44, 0x01, 0xcc, 0xab, 0xd6, 0x01, - 0x46, 0x83, 0x52, 0xca, 0xd7, 0x41, 0x42, 0x49, 0x00, 0xbe, 0xd6, 0x41, - 0x43, 0xec, 0x0d, 0xa9, 0xd6, 0x41, 0x44, 0x91, 0xd9, 0xa8, 0xd6, 0x41, - 0x0b, 0x1b, 0x91, 0x12, 0x58, 0xf7, 0x24, 0xba, 0x00, 0x00, 0x4d, 0xa6, - 0x7d, 0xad, 0xf1, 0x01, 0x46, 0x12, 0xc5, 0x3c, 0x30, 0x40, 0x06, 0xf4, + 0x42, 0x12, 0x00, 0xae, 0xd6, 0x41, 0x44, 0x1d, 0xcc, 0xab, 0xd6, 0x01, + 0x46, 0x98, 0x52, 0xca, 0xd7, 0x41, 0x42, 0x49, 0x00, 0xbe, 0xd6, 0x41, + 0x43, 0xec, 0x0d, 0xa9, 0xd6, 0x41, 0x44, 0xad, 0xd9, 0xa8, 0xd6, 0x41, + 0x0b, 0x2e, 0x91, 0x12, 0x58, 0xf7, 0x24, 0xba, 0x00, 0x00, 0x4d, 0xad, + 0x7d, 0xad, 0xf1, 0x01, 0x46, 0x2e, 0xc5, 0x3c, 0x30, 0x40, 0x06, 0xf4, 0x05, 0x82, 0x03, 0x07, 0xf1, 0x04, 0x6c, 0xb2, 0x5e, 0x05, 0xdb, 0x02, - 0x3c, 0xb6, 0x01, 0xff, 0x45, 0x48, 0x21, 0x45, 0x1d, 0x01, 0x0a, 0x5c, + 0x3c, 0xb6, 0x01, 0xff, 0x45, 0x48, 0x21, 0x45, 0x1d, 0x01, 0x0a, 0x71, 0x70, 0x01, 0xff, 0xa1, 0x20, 0xe5, 0x3a, 0x1d, 0x01, 0xe9, 0x32, 0x1d, 0x81, 0x13, 0xef, 0x3d, 0x1d, 0x01, 0xf5, 0x34, 0x1d, 0x81, 0x06, 0x49, - 0x76, 0xb7, 0x36, 0x1d, 0x41, 0xf5, 0x35, 0x1d, 0x41, 0xe9, 0x33, 0x1d, + 0x92, 0xb7, 0x36, 0x1d, 0x41, 0xf5, 0x35, 0x1d, 0x41, 0xe9, 0x33, 0x1d, 0x41, 0xe1, 0x31, 0x1d, 0x01, 0xe9, 0x3c, 0x1d, 0x01, 0xf5, 0x3f, 0x1d, 0x41, 0x48, 0x5b, 0x14, 0x40, 0x1d, 0x01, 0x46, 0x3b, 0x21, 0x43, 0x1d, - 0x01, 0x47, 0x41, 0xc7, 0x44, 0x1d, 0x01, 0x45, 0xab, 0x3a, 0x42, 0x1d, - 0x01, 0x47, 0x67, 0x46, 0x41, 0x1d, 0x41, 0x46, 0x23, 0xcf, 0x47, 0x1d, - 0x01, 0x44, 0xdf, 0xbb, 0x46, 0x1d, 0x41, 0xe1, 0x00, 0x1d, 0x81, 0x80, + 0x01, 0x47, 0x5d, 0xc7, 0x44, 0x1d, 0x01, 0x45, 0xc0, 0x3a, 0x42, 0x1d, + 0x01, 0x47, 0x7c, 0x46, 0x41, 0x1d, 0x41, 0x46, 0x3f, 0xcf, 0x47, 0x1d, + 0x01, 0x44, 0xfb, 0xbb, 0x46, 0x1d, 0x41, 0xe1, 0x00, 0x1d, 0x81, 0x80, 0x02, 0xa2, 0xf3, 0x01, 0xa3, 0xe6, 0x01, 0xa4, 0xcd, 0x01, 0xe5, 0x06, 0x1d, 0x01, 0xa7, 0xbc, 0x01, 0x42, 0x22, 0x00, 0x2c, 0x1d, 0x01, 0xe9, 0x02, 0x1d, 0x81, 0xac, 0x01, 0xaa, 0x99, 0x01, 0xab, 0x86, 0x01, 0xac, @@ -8042,13 +8043,13 @@ static const unsigned char uname2c_tree[210697] = { 0x25, 0x01, 0x53, 0x1d, 0x01, 0x42, 0x15, 0x02, 0x52, 0x1d, 0x41, 0x44, 0x96, 0x1b, 0x57, 0x1d, 0x01, 0x42, 0x30, 0x27, 0x56, 0x1d, 0x41, 0x43, 0xd7, 0x04, 0x55, 0x1d, 0x01, 0x43, 0xfb, 0x05, 0x54, 0x1d, 0x41, 0x44, - 0xe2, 0xe3, 0x87, 0xfa, 0x01, 0x05, 0xbc, 0x44, 0x0c, 0x4c, 0xb8, 0x8c, - 0xad, 0x26, 0x00, 0x51, 0x83, 0x58, 0x4b, 0xf9, 0x41, 0x49, 0x88, 0x19, - 0x70, 0x1c, 0x01, 0x07, 0xf1, 0x04, 0xe9, 0x01, 0x49, 0x93, 0xb2, 0x71, - 0x1c, 0x01, 0xb3, 0x1b, 0x0b, 0x5b, 0x70, 0x01, 0xff, 0x42, 0xda, 0x10, + 0xfe, 0xe3, 0x87, 0xfa, 0x01, 0x05, 0xd1, 0x44, 0x0c, 0x4c, 0xbf, 0x8c, + 0xad, 0x26, 0x00, 0x51, 0x98, 0x58, 0x4b, 0xf9, 0x41, 0x49, 0x88, 0x19, + 0x70, 0x1c, 0x01, 0x07, 0xf1, 0x04, 0xe9, 0x01, 0x49, 0xaf, 0xb2, 0x71, + 0x1c, 0x01, 0xb3, 0x1b, 0x0b, 0x70, 0x70, 0x01, 0xff, 0x42, 0xda, 0x10, 0xb0, 0x1c, 0x01, 0xe5, 0xb3, 0x1c, 0x01, 0xe9, 0xb1, 0x1c, 0x01, 0xef, 0xb4, 0x1c, 0x01, 0xf5, 0xb2, 0x1c, 0x41, 0x04, 0xdc, 0x02, 0xb5, 0x01, - 0x10, 0x79, 0x61, 0x01, 0xff, 0xe1, 0xaf, 0x1c, 0x01, 0x42, 0x16, 0x00, + 0x10, 0x8e, 0x61, 0x01, 0xff, 0xe1, 0xaf, 0x1c, 0x01, 0x42, 0x16, 0x00, 0xa0, 0x1c, 0x01, 0xa3, 0x99, 0x01, 0xa4, 0x8c, 0x01, 0x42, 0x24, 0x02, 0x94, 0x1c, 0x01, 0x42, 0x22, 0x00, 0xae, 0x1c, 0x01, 0x42, 0x77, 0x24, 0x98, 0x1c, 0x01, 0xab, 0x6e, 0x42, 0x74, 0x00, 0xab, 0x1c, 0x01, 0x42, @@ -8079,46 +8080,46 @@ static const unsigned char uname2c_tree[210697] = { 0x75, 0x1c, 0x01, 0x42, 0x20, 0x20, 0x79, 0x1c, 0x41, 0xe1, 0x72, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x73, 0x1c, 0x41, 0xe1, 0x7c, 0x1c, 0x01, 0x42, 0x59, 0x00, 0x84, 0x1c, 0x41, 0xe1, 0x76, 0x1c, 0x01, 0x42, 0x22, 0x00, - 0x77, 0x1c, 0x41, 0x56, 0x62, 0x2e, 0xef, 0x26, 0x00, 0x47, 0x91, 0xc8, - 0x41, 0xf3, 0x41, 0x80, 0xa5, 0x04, 0x47, 0x17, 0x66, 0xbc, 0x20, 0x00, - 0x05, 0xbc, 0xda, 0x87, 0x03, 0x42, 0x60, 0x12, 0x6d, 0xf9, 0x01, 0x08, - 0x15, 0xbd, 0x12, 0x46, 0x23, 0xd5, 0x5e, 0xf4, 0x01, 0x4e, 0xde, 0x75, - 0x70, 0xf5, 0x01, 0x4e, 0xda, 0x76, 0xbd, 0xf9, 0x41, 0x12, 0x63, 0x4a, + 0x77, 0x1c, 0x41, 0x56, 0x62, 0x2e, 0xef, 0x26, 0x00, 0x47, 0xad, 0xc8, + 0x41, 0xf3, 0x41, 0x80, 0xa5, 0x04, 0x47, 0x2c, 0x66, 0xbc, 0x20, 0x00, + 0x05, 0xd8, 0xda, 0x87, 0x03, 0x42, 0x60, 0x12, 0x6d, 0xf9, 0x01, 0x08, + 0x31, 0xbd, 0x12, 0x46, 0x3f, 0xd5, 0x5e, 0xf4, 0x01, 0x4e, 0xe5, 0x75, + 0x70, 0xf5, 0x01, 0x4e, 0xe1, 0x76, 0xbd, 0xf9, 0x41, 0x12, 0x78, 0x4a, 0xda, 0x02, 0x07, 0xf1, 0x04, 0x5d, 0x07, 0xbf, 0x35, 0x37, 0x0c, 0x8c, - 0x14, 0x06, 0x47, 0xa8, 0xcb, 0xc8, 0x0a, 0x41, 0x02, 0x3b, 0x01, 0x18, - 0x47, 0xd3, 0x32, 0xf1, 0x0a, 0x01, 0x4b, 0x9b, 0x96, 0xf6, 0x0a, 0x01, + 0x14, 0x06, 0x47, 0xc4, 0xcb, 0xc8, 0x0a, 0x41, 0x02, 0x3b, 0x01, 0x18, + 0x47, 0xd3, 0x32, 0xf1, 0x0a, 0x01, 0x4b, 0xae, 0x96, 0xf6, 0x0a, 0x01, 0x44, 0x8b, 0x11, 0xf0, 0x0a, 0x01, 0x48, 0x25, 0x09, 0xf5, 0x0a, 0x41, - 0xf4, 0xf4, 0x0a, 0x81, 0x06, 0x53, 0x82, 0x48, 0xf2, 0x0a, 0x41, 0x4b, - 0x8a, 0x48, 0xf3, 0x0a, 0x41, 0x44, 0xf8, 0x0f, 0xec, 0x0a, 0x01, 0x43, + 0xf4, 0xf4, 0x0a, 0x81, 0x06, 0x53, 0x97, 0x48, 0xf2, 0x0a, 0x41, 0x4b, + 0x9f, 0x48, 0xf3, 0x0a, 0x41, 0x44, 0xf8, 0x0f, 0xec, 0x0a, 0x01, 0x43, 0xcd, 0x09, 0xeb, 0x0a, 0x81, 0x0f, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xed, 0x0a, 0x01, 0x45, 0x38, 0x29, 0xee, 0x0a, 0x41, 0x48, 0xe8, 0x0f, 0xef, 0x0a, 0x41, 0xa1, 0xe4, 0x01, 0xa2, 0xd5, 0x01, 0xa4, 0xc6, 0x01, 0x42, 0x0f, 0x18, 0xdc, 0x0a, 0x01, 0xa7, 0xb1, 0x01, 0x42, 0xb0, 0x01, 0xc6, 0x0a, 0x81, 0xa3, 0x01, 0xaa, 0x94, 0x01, 0xab, 0x85, 0x01, 0x46, - 0x1f, 0xd3, 0xd3, 0x0a, 0x01, 0x43, 0xb9, 0x04, 0xd6, 0x0a, 0x01, 0x43, + 0x3b, 0xd3, 0xd3, 0x0a, 0x01, 0x43, 0xb9, 0x04, 0xd6, 0x0a, 0x01, 0x43, 0x40, 0x20, 0xd7, 0x0a, 0x01, 0x42, 0x6f, 0x02, 0xdb, 0x0a, 0x01, 0xb1, - 0x5f, 0x44, 0x29, 0x60, 0xe1, 0x0a, 0x01, 0xb3, 0x3d, 0xb4, 0x29, 0x43, - 0x08, 0x83, 0xc7, 0x0a, 0x01, 0xb8, 0x15, 0x44, 0xf9, 0x4c, 0xcf, 0x0a, - 0x01, 0xba, 0x01, 0xff, 0x44, 0x88, 0x44, 0xc9, 0x0a, 0x01, 0x45, 0x33, + 0x5f, 0x44, 0x3e, 0x60, 0xe1, 0x0a, 0x01, 0xb3, 0x3d, 0xb4, 0x29, 0x43, + 0x0f, 0x83, 0xc7, 0x0a, 0x01, 0xb8, 0x15, 0x44, 0x0e, 0x4d, 0xcf, 0x0a, + 0x01, 0xba, 0x01, 0xff, 0x44, 0x9d, 0x44, 0xc9, 0x0a, 0x01, 0x45, 0x4f, 0xdc, 0xca, 0x0a, 0x41, 0x43, 0xfb, 0x0e, 0xd1, 0x0a, 0x01, 0x43, 0x52, - 0x32, 0xdf, 0x0a, 0x41, 0x42, 0xaf, 0x3f, 0xe4, 0x0a, 0x01, 0x43, 0x25, - 0x23, 0xce, 0x0a, 0x01, 0x46, 0xe7, 0xd1, 0xd5, 0x0a, 0x41, 0xa1, 0x0c, - 0x43, 0x99, 0x14, 0xe2, 0x0a, 0x01, 0x44, 0x06, 0x3f, 0xe3, 0x0a, 0x41, - 0x43, 0xd7, 0xdf, 0xdd, 0x0a, 0x01, 0x44, 0x96, 0xd9, 0xd8, 0x0a, 0x41, - 0x44, 0x4e, 0xe5, 0xe0, 0x0a, 0x01, 0x43, 0x52, 0x32, 0xde, 0x0a, 0x41, - 0x43, 0xfb, 0x0e, 0xd0, 0x0a, 0x01, 0x44, 0x10, 0xdd, 0xd2, 0x0a, 0x41, - 0x44, 0x88, 0x44, 0xcb, 0x0a, 0x01, 0x45, 0x33, 0xdc, 0xcc, 0x0a, 0x41, - 0x42, 0x53, 0x00, 0xcd, 0x0a, 0x41, 0x45, 0x3d, 0xdc, 0xc4, 0x0a, 0x01, - 0x44, 0x4c, 0xa2, 0xc3, 0x0a, 0x41, 0x45, 0x8e, 0x44, 0xc5, 0x0a, 0x01, - 0x46, 0xe7, 0xd1, 0xd4, 0x0a, 0x41, 0x43, 0x25, 0x23, 0xc1, 0x0a, 0x01, - 0x44, 0xcf, 0xa1, 0xc2, 0x0a, 0x41, 0x44, 0x88, 0x44, 0xda, 0x0a, 0x01, - 0x44, 0x99, 0x38, 0xc0, 0x0a, 0x01, 0x43, 0x4b, 0x18, 0xd9, 0x0a, 0x41, + 0x32, 0xdf, 0x0a, 0x41, 0x42, 0xc4, 0x3f, 0xe4, 0x0a, 0x01, 0x43, 0x25, + 0x23, 0xce, 0x0a, 0x01, 0x46, 0x03, 0xd2, 0xd5, 0x0a, 0x41, 0xa1, 0x0c, + 0x43, 0x99, 0x14, 0xe2, 0x0a, 0x01, 0x44, 0x1b, 0x3f, 0xe3, 0x0a, 0x41, + 0x43, 0xf3, 0xdf, 0xdd, 0x0a, 0x01, 0x44, 0xb2, 0xd9, 0xd8, 0x0a, 0x41, + 0x44, 0x6a, 0xe5, 0xe0, 0x0a, 0x01, 0x43, 0x52, 0x32, 0xde, 0x0a, 0x41, + 0x43, 0xfb, 0x0e, 0xd0, 0x0a, 0x01, 0x44, 0x2c, 0xdd, 0xd2, 0x0a, 0x41, + 0x44, 0x9d, 0x44, 0xcb, 0x0a, 0x01, 0x45, 0x4f, 0xdc, 0xcc, 0x0a, 0x41, + 0x42, 0x53, 0x00, 0xcd, 0x0a, 0x41, 0x45, 0x59, 0xdc, 0xc4, 0x0a, 0x01, + 0x44, 0x5f, 0xa2, 0xc3, 0x0a, 0x41, 0x45, 0xa3, 0x44, 0xc5, 0x0a, 0x01, + 0x46, 0x03, 0xd2, 0xd4, 0x0a, 0x41, 0x43, 0x25, 0x23, 0xc1, 0x0a, 0x01, + 0x44, 0xe2, 0xa1, 0xc2, 0x0a, 0x41, 0x44, 0x9d, 0x44, 0xda, 0x0a, 0x01, + 0x44, 0xae, 0x38, 0xc0, 0x0a, 0x01, 0x43, 0x4b, 0x18, 0xd9, 0x0a, 0x41, 0x45, 0x5c, 0x00, 0xe5, 0x0a, 0x01, 0x45, 0x25, 0x06, 0xe6, 0x0a, 0x41, - 0x50, 0xd9, 0x5a, 0x59, 0x08, 0x00, 0x4f, 0xd2, 0x66, 0x5b, 0x08, 0x00, - 0x07, 0xf1, 0x04, 0x0c, 0x4b, 0xa3, 0x0a, 0x5e, 0x08, 0x00, 0x51, 0x71, - 0x59, 0x5a, 0x08, 0x40, 0xa1, 0x22, 0x48, 0x95, 0xbb, 0x56, 0x08, 0x00, - 0x45, 0x1f, 0xdc, 0x40, 0x08, 0x00, 0xa9, 0x0c, 0x43, 0x83, 0x9d, 0x57, - 0x08, 0x00, 0x47, 0x96, 0xbb, 0x45, 0x08, 0x40, 0xee, 0x4f, 0x08, 0x00, + 0x50, 0xee, 0x5a, 0x59, 0x08, 0x00, 0x4f, 0xe7, 0x66, 0x5b, 0x08, 0x00, + 0x07, 0xf1, 0x04, 0x0c, 0x4b, 0xa3, 0x0a, 0x5e, 0x08, 0x00, 0x51, 0x86, + 0x59, 0x5a, 0x08, 0x40, 0xa1, 0x22, 0x48, 0xb1, 0xbb, 0x56, 0x08, 0x00, + 0x45, 0x3b, 0xdc, 0x40, 0x08, 0x00, 0xa9, 0x0c, 0x43, 0x96, 0x9d, 0x57, + 0x08, 0x00, 0x47, 0xb2, 0xbb, 0x45, 0x08, 0x40, 0xee, 0x4f, 0x08, 0x00, 0xf4, 0x47, 0x08, 0x40, 0xe2, 0x41, 0x08, 0x00, 0xe4, 0x43, 0x08, 0x00, 0xe7, 0x42, 0x08, 0x00, 0xe8, 0x44, 0x08, 0x00, 0x42, 0x9e, 0x01, 0x58, 0x08, 0x00, 0xeb, 0x4a, 0x08, 0x80, 0x32, 0xec, 0x4b, 0x08, 0x00, 0xed, @@ -8126,38 +8127,38 @@ static const unsigned char uname2c_tree[210697] = { 0x52, 0x08, 0x00, 0xf2, 0x53, 0x08, 0x00, 0xf3, 0x4e, 0x08, 0x80, 0x0d, 0xf4, 0x55, 0x08, 0x80, 0x04, 0xfa, 0x46, 0x08, 0x40, 0xf4, 0x48, 0x08, 0x40, 0xe8, 0x54, 0x08, 0x00, 0xfa, 0x51, 0x08, 0x40, 0x42, 0x45, 0x05, - 0x49, 0x08, 0x40, 0x57, 0xb8, 0x29, 0x6b, 0xf4, 0x01, 0x47, 0x1b, 0xc6, + 0x49, 0x08, 0x40, 0x57, 0xb8, 0x29, 0x6b, 0xf4, 0x01, 0x47, 0x37, 0xc6, 0x7a, 0xf5, 0x01, 0x03, 0xe6, 0x04, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x4a, 0x69, 0xa2, 0x72, 0xf4, 0x01, 0x46, 0x1f, 0xd6, 0x73, 0xf4, 0x41, - 0x58, 0xaf, 0x24, 0x74, 0xf5, 0x01, 0x46, 0x25, 0xd6, 0x35, 0xf9, 0x41, - 0x07, 0xda, 0xac, 0x27, 0x02, 0x60, 0x00, 0x06, 0x4a, 0xf9, 0xa8, 0x20, + 0x4a, 0x7c, 0xa2, 0x72, 0xf4, 0x01, 0x46, 0x3b, 0xd6, 0x73, 0xf4, 0x41, + 0x58, 0xaf, 0x24, 0x74, 0xf5, 0x01, 0x46, 0x41, 0xd6, 0x35, 0xf9, 0x41, + 0x07, 0xed, 0xac, 0x27, 0x02, 0x60, 0x00, 0x06, 0x4a, 0x0c, 0xa9, 0x20, 0x27, 0x40, 0x4f, 0x28, 0x24, 0xa5, 0x26, 0x00, 0x44, 0xdb, 0x02, 0x42, - 0x26, 0x00, 0x0c, 0x5a, 0x38, 0x01, 0xff, 0x58, 0x1f, 0x24, 0xa7, 0x26, - 0x00, 0x44, 0xdb, 0x02, 0xa6, 0x26, 0x40, 0x4e, 0x24, 0x6f, 0x57, 0x0d, - 0x00, 0xa4, 0x91, 0x05, 0x09, 0x76, 0x54, 0xb0, 0x04, 0x07, 0xf1, 0x04, + 0x26, 0x00, 0x0c, 0x6f, 0x38, 0x01, 0xff, 0x58, 0x1f, 0x24, 0xa7, 0x26, + 0x00, 0x44, 0xdb, 0x02, 0xa6, 0x26, 0x40, 0x4e, 0x39, 0x6f, 0x57, 0x0d, + 0x00, 0xa4, 0x91, 0x05, 0x09, 0x8b, 0x54, 0xb0, 0x04, 0x07, 0xf1, 0x04, 0xad, 0x01, 0x07, 0xbf, 0x35, 0x92, 0x01, 0x05, 0xdb, 0x02, 0x4e, 0x0b, - 0x5b, 0x70, 0x01, 0xff, 0xa1, 0x3b, 0xe5, 0x46, 0x0d, 0x80, 0x32, 0xe9, + 0x70, 0x70, 0x01, 0xff, 0xa1, 0x3b, 0xe5, 0x46, 0x0d, 0x80, 0x32, 0xe9, 0x3f, 0x0d, 0x80, 0x29, 0xef, 0x4a, 0x0d, 0x80, 0x20, 0xf5, 0x41, 0x0d, - 0x80, 0x17, 0x08, 0x76, 0xb7, 0x01, 0xff, 0xec, 0x62, 0x0d, 0x80, 0x09, + 0x80, 0x17, 0x08, 0x92, 0xb7, 0x01, 0xff, 0xec, 0x62, 0x0d, 0x80, 0x09, 0xf2, 0x43, 0x0d, 0xc0, 0x00, 0xf2, 0x44, 0x0d, 0x40, 0xec, 0x63, 0x0d, 0x40, 0xf5, 0x42, 0x0d, 0x40, 0xef, 0x4b, 0x0d, 0x40, 0xe9, 0x40, 0x0d, 0x40, 0xe5, 0x47, 0x0d, 0x40, 0xe1, 0x3e, 0x0d, 0x00, 0xe9, 0x48, 0x0d, 0x00, 0xf5, 0x4c, 0x0d, 0x40, 0xa1, 0x32, 0xa3, 0x1e, 0x44, 0xf5, 0x0e, - 0x4f, 0x0d, 0x00, 0xb6, 0x01, 0xff, 0x52, 0xdd, 0x4b, 0x3b, 0x0d, 0x00, - 0xa9, 0x01, 0xff, 0x44, 0x49, 0x21, 0x4d, 0x0d, 0x00, 0x45, 0x69, 0x46, - 0x03, 0x0d, 0x40, 0x4a, 0x3c, 0x21, 0x01, 0x0d, 0x00, 0x4e, 0xfc, 0x71, + 0x4f, 0x0d, 0x00, 0xb6, 0x01, 0xff, 0x52, 0xf2, 0x4b, 0x3b, 0x0d, 0x00, + 0xa9, 0x01, 0xff, 0x44, 0x49, 0x21, 0x4d, 0x0d, 0x00, 0x45, 0x7e, 0x46, + 0x03, 0x0d, 0x40, 0x4a, 0x3c, 0x21, 0x01, 0x0d, 0x00, 0x4e, 0x11, 0x72, 0x3c, 0x0d, 0x00, 0x57, 0x52, 0x14, 0x00, 0x0d, 0x40, 0x47, 0x5c, 0x14, - 0x02, 0x0d, 0x00, 0x47, 0x3a, 0x81, 0x3d, 0x0d, 0x40, 0x04, 0xcd, 0x09, + 0x02, 0x0d, 0x00, 0x47, 0x41, 0x81, 0x3d, 0x0d, 0x40, 0x04, 0xcd, 0x09, 0x06, 0x43, 0xe0, 0x05, 0x70, 0x0d, 0x40, 0x47, 0xe9, 0x0f, 0x71, 0x0d, - 0x00, 0x48, 0x54, 0x58, 0x72, 0x0d, 0x40, 0xe1, 0x05, 0x0d, 0x80, 0xe6, + 0x00, 0x48, 0x69, 0x58, 0x72, 0x0d, 0x40, 0xe1, 0x05, 0x0d, 0x80, 0xe6, 0x02, 0xa2, 0xd9, 0x02, 0xa3, 0x9d, 0x02, 0xa4, 0xfe, 0x01, 0xe5, 0x0e, 0x0d, 0x80, 0xf4, 0x01, 0xa7, 0xe7, 0x01, 0x42, 0x22, 0x00, 0x39, 0x0d, 0x00, 0xe9, 0x07, 0x0d, 0x80, 0xd7, 0x01, 0xaa, 0xca, 0x01, 0xab, 0xbd, 0x01, 0xac, 0xa9, 0x01, 0x42, 0x6c, 0x00, 0x2e, 0x0d, 0x00, 0xae, 0x84, 0x01, 0xef, 0x12, 0x0d, 0x80, 0x7b, 0xb0, 0x6f, 0xb2, 0x63, 0xb3, 0x51, 0xb4, 0x32, 0xf5, 0x09, 0x0d, 0x80, 0x29, 0xb6, 0x06, 0x42, 0x20, 0x20, - 0x2f, 0x0d, 0x40, 0xe1, 0x35, 0x0d, 0x00, 0x4d, 0x5d, 0x7b, 0x04, 0x0d, - 0x00, 0x07, 0x77, 0xb7, 0x01, 0xff, 0xec, 0x0c, 0x0d, 0x80, 0x09, 0xf2, + 0x2f, 0x0d, 0x40, 0xe1, 0x35, 0x0d, 0x00, 0x4d, 0x64, 0x7b, 0x04, 0x0d, + 0x00, 0x07, 0x93, 0xb7, 0x01, 0xff, 0xec, 0x0c, 0x0d, 0x80, 0x09, 0xf2, 0x0b, 0x0d, 0xc0, 0x00, 0xf2, 0x60, 0x0d, 0x40, 0xec, 0x61, 0x0d, 0x40, 0xf5, 0x0a, 0x0d, 0x40, 0xe1, 0x24, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x25, 0x0d, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x1f, 0x0d, 0x00, 0x42, 0x22, 0x00, @@ -8173,32 +8174,32 @@ static const unsigned char uname2c_tree[210697] = { 0x42, 0x22, 0x00, 0x1d, 0x0d, 0x40, 0xe9, 0x08, 0x0d, 0x40, 0xe1, 0x17, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x18, 0x0d, 0x40, 0xe5, 0x0f, 0x0d, 0x40, 0xe1, 0x26, 0x0d, 0x00, 0xa4, 0x0c, 0x42, 0x22, 0x00, 0x27, 0x0d, 0x00, - 0x47, 0xe1, 0xc9, 0x4e, 0x0d, 0x40, 0xe1, 0x21, 0x0d, 0x00, 0x42, 0x22, + 0x47, 0xfd, 0xc9, 0x4e, 0x0d, 0x40, 0xe1, 0x21, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x22, 0x0d, 0x40, 0xe1, 0x1a, 0x0d, 0x00, 0xa8, 0x01, 0xff, 0xe1, - 0x1b, 0x0d, 0x00, 0x05, 0x81, 0xb8, 0x01, 0xff, 0xeb, 0x7f, 0x0d, 0x00, + 0x1b, 0x0d, 0x00, 0x05, 0x9d, 0xb8, 0x01, 0xff, 0xeb, 0x7f, 0x0d, 0x00, 0xec, 0x7d, 0x0d, 0x80, 0x17, 0xed, 0x54, 0x0d, 0x00, 0xee, 0x7b, 0x0d, 0x80, 0x0a, 0x42, 0xcf, 0x00, 0x7c, 0x0d, 0x00, 0xf9, 0x55, 0x0d, 0x40, 0xee, 0x7a, 0x0d, 0x40, 0xec, 0x7e, 0x0d, 0xc0, 0x00, 0xec, 0x56, 0x0d, 0x40, 0xe1, 0x2c, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x2d, 0x0d, 0x40, 0xe1, - 0x06, 0x0d, 0x00, 0xe9, 0x10, 0x0d, 0x00, 0x49, 0xe5, 0xb4, 0x5f, 0x0d, + 0x06, 0x0d, 0x00, 0xe9, 0x10, 0x0d, 0x00, 0x49, 0x01, 0xb5, 0x5f, 0x0d, 0x00, 0xf5, 0x14, 0x0d, 0x40, 0x04, 0xcd, 0x09, 0x1d, 0x06, 0x24, 0x01, - 0x01, 0xff, 0x4a, 0x47, 0xa1, 0x5a, 0x0d, 0x00, 0x48, 0x2a, 0x01, 0x75, - 0x0d, 0x00, 0x4a, 0x45, 0xa8, 0x78, 0x0d, 0x00, 0x4a, 0x5d, 0xa9, 0x5d, + 0x01, 0xff, 0x4a, 0x5a, 0xa1, 0x5a, 0x0d, 0x00, 0x48, 0x2a, 0x01, 0x75, + 0x0d, 0x00, 0x4a, 0x58, 0xa8, 0x78, 0x0d, 0x00, 0x4a, 0x70, 0xa9, 0x5d, 0x0d, 0x40, 0x46, 0xd1, 0x09, 0x77, 0x0d, 0x00, 0xa6, 0x27, 0x44, 0x22, 0x00, 0x74, 0x0d, 0x00, 0x58, 0x1f, 0x27, 0x58, 0x0d, 0x00, 0x47, 0x2a, - 0x01, 0x73, 0x0d, 0x00, 0x49, 0x63, 0x6c, 0x76, 0x0d, 0x00, 0xb4, 0x01, + 0x01, 0x73, 0x0d, 0x00, 0x49, 0x78, 0x6c, 0x76, 0x0d, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x6a, 0x19, 0x5c, 0x0d, 0x00, 0x48, 0x20, 0x23, 0x5b, 0x0d, - 0x40, 0x44, 0x88, 0xa6, 0x5e, 0x0d, 0x00, 0x47, 0xd3, 0xc9, 0x59, 0x0d, - 0x40, 0x48, 0x0d, 0xba, 0x79, 0x0d, 0x00, 0x05, 0xf5, 0x05, 0x01, 0xff, + 0x40, 0x44, 0x9b, 0xa6, 0x5e, 0x0d, 0x00, 0x47, 0xef, 0xc9, 0x59, 0x0d, + 0x40, 0x48, 0x29, 0xba, 0x79, 0x0d, 0x00, 0x05, 0xf5, 0x05, 0x01, 0xff, 0x45, 0xd1, 0x09, 0x6e, 0x0d, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x6f, 0x0d, 0x00, 0x43, 0xcd, 0x09, 0x67, 0x0d, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x66, 0x0d, 0x40, 0x44, 0x25, 0x01, 0x69, 0x0d, 0x00, 0x42, 0x15, 0x02, 0x68, 0x0d, 0x40, 0x44, 0x96, 0x1b, 0x6d, 0x0d, 0x00, 0x42, 0x30, 0x27, 0x6c, 0x0d, 0x40, 0x43, 0xd7, 0x04, 0x6b, 0x0d, 0x00, - 0x43, 0xfb, 0x05, 0x6a, 0x0d, 0x40, 0x05, 0xb8, 0xd9, 0x06, 0x45, 0x34, - 0xdb, 0x7c, 0xf7, 0x41, 0x45, 0x71, 0xcf, 0xf2, 0x1e, 0x01, 0x4e, 0x66, - 0x70, 0xf8, 0x1e, 0x01, 0x07, 0xf1, 0x04, 0x1b, 0x4a, 0xab, 0xa6, 0xf7, - 0x1e, 0x01, 0x0b, 0x5b, 0x70, 0x01, 0xff, 0xe5, 0xf5, 0x1e, 0x01, 0xe9, + 0x43, 0xfb, 0x05, 0x6a, 0x0d, 0x40, 0x05, 0xd4, 0xd9, 0x06, 0x45, 0x50, + 0xdb, 0x7c, 0xf7, 0x41, 0x45, 0x8d, 0xcf, 0xf2, 0x1e, 0x01, 0x4e, 0x7b, + 0x70, 0xf8, 0x1e, 0x01, 0x07, 0xf1, 0x04, 0x1b, 0x4a, 0xbe, 0xa6, 0xf7, + 0x1e, 0x01, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xe5, 0xf5, 0x1e, 0x01, 0xe9, 0xf3, 0x1e, 0x01, 0xef, 0xf6, 0x1e, 0x01, 0xf5, 0xf4, 0x1e, 0x41, 0xe1, 0xf1, 0x1e, 0x01, 0x42, 0x16, 0x00, 0xe4, 0x1e, 0x01, 0x42, 0x37, 0x00, 0xe9, 0x1e, 0x01, 0x42, 0x68, 0x0f, 0xe7, 0x1e, 0x01, 0x42, 0x24, 0x02, @@ -8208,40 +8209,40 @@ static const unsigned char uname2c_tree[210697] = { 0x71, 0x00, 0xed, 0x1e, 0x01, 0x42, 0x45, 0x05, 0xf0, 0x1e, 0x01, 0x42, 0x12, 0x00, 0xe6, 0x1e, 0x01, 0x42, 0xb4, 0x09, 0xef, 0x1e, 0x01, 0x42, 0x20, 0x20, 0xec, 0x1e, 0x41, 0xe1, 0xe8, 0x1e, 0x01, 0x42, 0x24, 0x02, - 0xe2, 0x1e, 0x01, 0x42, 0x20, 0x20, 0xeb, 0x1e, 0x41, 0x06, 0x59, 0xcf, - 0xe7, 0x02, 0x0a, 0x9f, 0xa3, 0x01, 0xff, 0x46, 0xbf, 0xcf, 0x28, 0xf0, - 0x01, 0x02, 0x16, 0x00, 0xcb, 0x02, 0x4d, 0x66, 0x7a, 0x25, 0xf0, 0x01, - 0xa5, 0xa2, 0x02, 0xa6, 0xec, 0x01, 0x4c, 0xcc, 0x87, 0x05, 0xf0, 0x01, - 0x45, 0x9a, 0x9c, 0x2a, 0xf0, 0x01, 0xae, 0xbe, 0x01, 0xaf, 0x9c, 0x01, - 0x44, 0x02, 0xe7, 0x22, 0xf0, 0x01, 0x4a, 0x41, 0xa7, 0x04, 0xf0, 0x01, - 0xb3, 0x4a, 0xb4, 0x15, 0xb7, 0x01, 0xff, 0x48, 0x25, 0xbc, 0x02, 0xf0, - 0x01, 0x4b, 0xcd, 0x94, 0x06, 0xf0, 0x01, 0x45, 0x68, 0x09, 0x29, 0xf0, - 0x41, 0x08, 0x05, 0xbd, 0x1a, 0x06, 0xaf, 0xd6, 0x01, 0xff, 0x47, 0x3b, - 0xc5, 0x11, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x26, 0xb0, 0x08, 0xf0, - 0x01, 0x46, 0xb4, 0x3e, 0x1a, 0xf0, 0x41, 0x47, 0x3b, 0xc5, 0x12, 0xf0, - 0x01, 0xa3, 0x01, 0xff, 0x49, 0x26, 0xb0, 0x09, 0xf0, 0x01, 0x46, 0xb4, - 0x3e, 0x1b, 0xf0, 0x41, 0x08, 0x4d, 0xbc, 0x2b, 0x06, 0xcb, 0xd2, 0x12, - 0x49, 0x28, 0xb4, 0x01, 0xf0, 0x01, 0x45, 0x22, 0x10, 0x26, 0xf0, 0x01, - 0x45, 0xe8, 0xe0, 0x27, 0xf0, 0x41, 0x47, 0x3b, 0xc5, 0x15, 0xf0, 0x01, - 0xa3, 0x01, 0xff, 0x49, 0x26, 0xb0, 0x0c, 0xf0, 0x01, 0x46, 0xb4, 0x3e, - 0x1e, 0xf0, 0x41, 0x47, 0x3b, 0xc5, 0x16, 0xf0, 0x01, 0xa3, 0x01, 0xff, - 0x49, 0x26, 0xb0, 0x0d, 0xf0, 0x01, 0x46, 0xb4, 0x3e, 0x1f, 0xf0, 0x41, - 0x06, 0xe7, 0xbe, 0x06, 0x45, 0x67, 0xdf, 0x23, 0xf0, 0x41, 0x47, 0x3b, - 0xc5, 0x10, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x26, 0xb0, 0x07, 0xf0, - 0x01, 0x46, 0xb4, 0x3e, 0x19, 0xf0, 0x41, 0x07, 0xe6, 0xbe, 0x06, 0x49, - 0x04, 0xb4, 0x03, 0xf0, 0x41, 0x47, 0x3b, 0xc5, 0x18, 0xf0, 0x01, 0xa3, - 0x01, 0xff, 0x49, 0x26, 0xb0, 0x0f, 0xf0, 0x01, 0x46, 0xb4, 0x3e, 0x21, - 0xf0, 0x41, 0x07, 0xe9, 0xc7, 0x1a, 0x07, 0xe8, 0xc9, 0x01, 0xff, 0x47, - 0x3b, 0xc5, 0x13, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x26, 0xb0, 0x0a, - 0xf0, 0x01, 0x46, 0xb4, 0x3e, 0x1c, 0xf0, 0x41, 0x47, 0x3b, 0xc5, 0x14, - 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x26, 0xb0, 0x0b, 0xf0, 0x01, 0x46, - 0xb4, 0x3e, 0x1d, 0xf0, 0x41, 0x48, 0xf5, 0xb9, 0x00, 0xf0, 0x01, 0x08, - 0x07, 0xaf, 0x01, 0xff, 0x47, 0x3b, 0xc5, 0x17, 0xf0, 0x01, 0xa3, 0x01, - 0xff, 0x49, 0x26, 0xb0, 0x0e, 0xf0, 0x01, 0x46, 0xb4, 0x3e, 0x20, 0xf0, - 0x41, 0x42, 0x36, 0x01, 0x2b, 0xf0, 0x01, 0x44, 0xa9, 0x90, 0x24, 0xf0, - 0x41, 0x51, 0x34, 0x52, 0x74, 0x11, 0x01, 0xac, 0x0f, 0xb3, 0x01, 0xff, - 0x4b, 0x12, 0x24, 0x75, 0x11, 0x01, 0x49, 0xd1, 0xb0, 0x73, 0x11, 0x41, - 0x06, 0xf2, 0x04, 0x06, 0x4c, 0x5c, 0x88, 0x76, 0x11, 0x41, 0xe1, 0x50, + 0xe2, 0x1e, 0x01, 0x42, 0x20, 0x20, 0xeb, 0x1e, 0x41, 0x06, 0x75, 0xcf, + 0xe7, 0x02, 0x0a, 0xb2, 0xa3, 0x01, 0xff, 0x46, 0xdb, 0xcf, 0x28, 0xf0, + 0x01, 0x02, 0x16, 0x00, 0xcb, 0x02, 0x4d, 0x6d, 0x7a, 0x25, 0xf0, 0x01, + 0xa5, 0xa2, 0x02, 0xa6, 0xec, 0x01, 0x4c, 0xd3, 0x87, 0x05, 0xf0, 0x01, + 0x45, 0xad, 0x9c, 0x2a, 0xf0, 0x01, 0xae, 0xbe, 0x01, 0xaf, 0x9c, 0x01, + 0x44, 0x1e, 0xe7, 0x22, 0xf0, 0x01, 0x4a, 0x54, 0xa7, 0x04, 0xf0, 0x01, + 0xb3, 0x4a, 0xb4, 0x15, 0xb7, 0x01, 0xff, 0x48, 0x41, 0xbc, 0x02, 0xf0, + 0x01, 0x4b, 0xe0, 0x94, 0x06, 0xf0, 0x01, 0x45, 0x68, 0x09, 0x29, 0xf0, + 0x41, 0x08, 0x21, 0xbd, 0x1a, 0x06, 0xcb, 0xd6, 0x01, 0xff, 0x47, 0x57, + 0xc5, 0x11, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x42, 0xb0, 0x08, 0xf0, + 0x01, 0x46, 0xc9, 0x3e, 0x1a, 0xf0, 0x41, 0x47, 0x57, 0xc5, 0x12, 0xf0, + 0x01, 0xa3, 0x01, 0xff, 0x49, 0x42, 0xb0, 0x09, 0xf0, 0x01, 0x46, 0xc9, + 0x3e, 0x1b, 0xf0, 0x41, 0x08, 0x69, 0xbc, 0x2b, 0x06, 0xe7, 0xd2, 0x12, + 0x49, 0x44, 0xb4, 0x01, 0xf0, 0x01, 0x45, 0x22, 0x10, 0x26, 0xf0, 0x01, + 0x45, 0x04, 0xe1, 0x27, 0xf0, 0x41, 0x47, 0x57, 0xc5, 0x15, 0xf0, 0x01, + 0xa3, 0x01, 0xff, 0x49, 0x42, 0xb0, 0x0c, 0xf0, 0x01, 0x46, 0xc9, 0x3e, + 0x1e, 0xf0, 0x41, 0x47, 0x57, 0xc5, 0x16, 0xf0, 0x01, 0xa3, 0x01, 0xff, + 0x49, 0x42, 0xb0, 0x0d, 0xf0, 0x01, 0x46, 0xc9, 0x3e, 0x1f, 0xf0, 0x41, + 0x06, 0x03, 0xbf, 0x06, 0x45, 0x83, 0xdf, 0x23, 0xf0, 0x41, 0x47, 0x57, + 0xc5, 0x10, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x42, 0xb0, 0x07, 0xf0, + 0x01, 0x46, 0xc9, 0x3e, 0x19, 0xf0, 0x41, 0x07, 0x02, 0xbf, 0x06, 0x49, + 0x20, 0xb4, 0x03, 0xf0, 0x41, 0x47, 0x57, 0xc5, 0x18, 0xf0, 0x01, 0xa3, + 0x01, 0xff, 0x49, 0x42, 0xb0, 0x0f, 0xf0, 0x01, 0x46, 0xc9, 0x3e, 0x21, + 0xf0, 0x41, 0x07, 0x05, 0xc8, 0x1a, 0x07, 0x04, 0xca, 0x01, 0xff, 0x47, + 0x57, 0xc5, 0x13, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x42, 0xb0, 0x0a, + 0xf0, 0x01, 0x46, 0xc9, 0x3e, 0x1c, 0xf0, 0x41, 0x47, 0x57, 0xc5, 0x14, + 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x42, 0xb0, 0x0b, 0xf0, 0x01, 0x46, + 0xc9, 0x3e, 0x1d, 0xf0, 0x41, 0x48, 0x11, 0xba, 0x00, 0xf0, 0x01, 0x08, + 0x23, 0xaf, 0x01, 0xff, 0x47, 0x57, 0xc5, 0x17, 0xf0, 0x01, 0xa3, 0x01, + 0xff, 0x49, 0x42, 0xb0, 0x0e, 0xf0, 0x01, 0x46, 0xc9, 0x3e, 0x20, 0xf0, + 0x41, 0x42, 0x36, 0x01, 0x2b, 0xf0, 0x01, 0x44, 0xbc, 0x90, 0x24, 0xf0, + 0x41, 0x51, 0x49, 0x52, 0x74, 0x11, 0x01, 0xac, 0x0f, 0xb3, 0x01, 0xff, + 0x4b, 0x12, 0x24, 0x75, 0x11, 0x01, 0x49, 0xed, 0xb0, 0x73, 0x11, 0x41, + 0x06, 0xf2, 0x04, 0x06, 0x4c, 0x63, 0x88, 0x76, 0x11, 0x41, 0xe1, 0x50, 0x11, 0x01, 0xa2, 0xbc, 0x01, 0xa3, 0xaf, 0x01, 0xa4, 0x96, 0x01, 0xe5, 0x53, 0x11, 0x01, 0xa7, 0x85, 0x01, 0x42, 0x22, 0x00, 0x71, 0x11, 0x01, 0xe9, 0x51, 0x11, 0x01, 0xaa, 0x6f, 0xab, 0x63, 0x42, 0x74, 0x00, 0x6e, @@ -8259,12 +8260,12 @@ static const unsigned char uname2c_tree[210697] = { 0x22, 0x00, 0x66, 0x11, 0x41, 0xe1, 0x60, 0x11, 0x01, 0x42, 0x22, 0x00, 0x61, 0x11, 0x41, 0xe1, 0x59, 0x11, 0x01, 0x42, 0x22, 0x00, 0x5a, 0x11, 0x41, 0xe1, 0x6a, 0x11, 0x01, 0x42, 0x22, 0x00, 0x6b, 0x11, 0x41, 0xe5, - 0xd9, 0xf9, 0x01, 0x47, 0x95, 0xc7, 0x84, 0xfa, 0x01, 0x43, 0x67, 0x29, - 0xf2, 0xf9, 0x41, 0x4d, 0x44, 0x78, 0x14, 0x21, 0x00, 0xa1, 0x9a, 0x3b, + 0xd9, 0xf9, 0x01, 0x47, 0xb1, 0xc7, 0x84, 0xfa, 0x01, 0x43, 0x67, 0x29, + 0xf2, 0xf9, 0x41, 0x4d, 0x4b, 0x78, 0x14, 0x21, 0x00, 0xa1, 0x9a, 0x3b, 0xa5, 0xb0, 0x27, 0xa9, 0xf3, 0x08, 0x44, 0xb0, 0x00, 0x99, 0xf9, 0x01, - 0xaf, 0x9d, 0x02, 0xb5, 0x85, 0x02, 0xb9, 0x01, 0xff, 0x0c, 0xd4, 0x85, - 0x82, 0x01, 0x05, 0xca, 0x5a, 0x06, 0x48, 0x2f, 0x26, 0x25, 0xf9, 0x41, - 0x07, 0xf1, 0x04, 0x06, 0x4f, 0x17, 0x6d, 0x3f, 0x09, 0x41, 0xe1, 0x20, + 0xaf, 0x9d, 0x02, 0xb5, 0x85, 0x02, 0xb9, 0x01, 0xff, 0x0c, 0xdb, 0x85, + 0x82, 0x01, 0x05, 0xdf, 0x5a, 0x06, 0x48, 0x2f, 0x26, 0x25, 0xf9, 0x41, + 0x07, 0xf1, 0x04, 0x06, 0x4f, 0x2c, 0x6d, 0x3f, 0x09, 0x41, 0xe1, 0x20, 0x09, 0x81, 0x65, 0xe2, 0x21, 0x09, 0x01, 0xe3, 0x39, 0x09, 0x01, 0xe4, 0x23, 0x09, 0x01, 0xe5, 0x24, 0x09, 0x81, 0x50, 0xe6, 0x31, 0x09, 0x01, 0xe7, 0x22, 0x09, 0x01, 0xe9, 0x26, 0x09, 0x01, 0xeb, 0x28, 0x09, 0x01, @@ -8284,83 +8285,83 @@ static const unsigned char uname2c_tree[210697] = { 0x9c, 0x02, 0x01, 0xfa, 0x88, 0x02, 0x41, 0xe8, 0x89, 0x02, 0x01, 0xf4, 0x98, 0x02, 0x41, 0xee, 0x91, 0x02, 0x41, 0xed, 0x90, 0x02, 0x41, 0xeb, 0x94, 0x02, 0x41, 0xee, 0x9a, 0x02, 0x41, 0xe8, 0x83, 0x02, 0x41, 0xee, - 0x99, 0x02, 0x41, 0x45, 0x50, 0xd6, 0xf3, 0xf9, 0x01, 0xae, 0x01, 0xff, - 0x4a, 0x5d, 0x9f, 0x76, 0xf7, 0x01, 0x42, 0x34, 0x10, 0xc1, 0xfa, 0x41, - 0x45, 0x26, 0xda, 0x9e, 0xf9, 0x01, 0x42, 0x36, 0x01, 0x12, 0xf5, 0x81, - 0xa8, 0x06, 0x06, 0xab, 0x1f, 0xae, 0x05, 0x46, 0x4f, 0xd3, 0x6d, 0xf3, - 0x01, 0x03, 0xa2, 0x01, 0x9e, 0x04, 0xb4, 0x89, 0x04, 0x50, 0x89, 0x61, + 0x99, 0x02, 0x41, 0x45, 0x6c, 0xd6, 0xf3, 0xf9, 0x01, 0xae, 0x01, 0xff, + 0x4a, 0x70, 0x9f, 0x76, 0xf7, 0x01, 0x42, 0x34, 0x10, 0xc1, 0xfa, 0x41, + 0x45, 0x42, 0xda, 0x9e, 0xf9, 0x01, 0x42, 0x36, 0x01, 0x12, 0xf5, 0x81, + 0xa8, 0x06, 0x06, 0xab, 0x1f, 0xae, 0x05, 0x46, 0x6b, 0xd3, 0x6d, 0xf3, + 0x01, 0x03, 0xa2, 0x01, 0x9e, 0x04, 0xb4, 0x89, 0x04, 0x50, 0x9e, 0x61, 0x2d, 0xf6, 0x01, 0x03, 0x5f, 0x00, 0xf2, 0x03, 0xb7, 0x0d, 0x45, 0x58, 0x07, 0xca, 0x25, 0xc0, 0x00, 0x5b, 0xf3, 0x17, 0xe0, 0x27, 0x40, 0x80, - 0xb3, 0x03, 0x03, 0x16, 0x01, 0x01, 0xff, 0x4e, 0x5c, 0x6f, 0x03, 0x27, - 0x00, 0x52, 0x13, 0x4c, 0x85, 0x25, 0x00, 0x05, 0x22, 0x00, 0x85, 0x03, + 0xb3, 0x03, 0x03, 0x16, 0x01, 0x01, 0xff, 0x4e, 0x71, 0x6f, 0x03, 0x27, + 0x00, 0x52, 0x28, 0x4c, 0x85, 0x25, 0x00, 0x05, 0x22, 0x00, 0x85, 0x03, 0x05, 0xc3, 0x00, 0xdc, 0x01, 0x04, 0xcd, 0x09, 0xcb, 0x01, 0x06, 0xc8, - 0x00, 0x1f, 0x53, 0x78, 0x47, 0x87, 0x25, 0x00, 0xb4, 0x01, 0xff, 0x05, - 0x25, 0x01, 0x06, 0x5b, 0x02, 0x1b, 0x6f, 0xfb, 0x41, 0x4d, 0x7e, 0x47, - 0x83, 0x25, 0x00, 0x4e, 0x2a, 0x01, 0x86, 0x25, 0x40, 0x0f, 0xe3, 0x64, - 0x42, 0x4f, 0x4c, 0x65, 0xd3, 0x27, 0x00, 0x5a, 0x7c, 0x1d, 0x4f, 0x27, - 0x00, 0x46, 0x8d, 0xd4, 0x0e, 0x27, 0x00, 0x55, 0x27, 0x39, 0xde, 0x25, + 0x00, 0x1f, 0x53, 0x8d, 0x47, 0x87, 0x25, 0x00, 0xb4, 0x01, 0xff, 0x05, + 0x25, 0x01, 0x06, 0x5b, 0x02, 0x1b, 0x6f, 0xfb, 0x41, 0x4d, 0x93, 0x47, + 0x83, 0x25, 0x00, 0x4e, 0x2a, 0x01, 0x86, 0x25, 0x40, 0x0f, 0xf8, 0x64, + 0x42, 0x4f, 0x61, 0x65, 0xd3, 0x27, 0x00, 0x5a, 0x7c, 0x1d, 0x4f, 0x27, + 0x00, 0x46, 0xa9, 0xd4, 0x0e, 0x27, 0x00, 0x55, 0x3c, 0x39, 0xde, 0x25, 0x00, 0xb3, 0x11, 0x06, 0x19, 0x01, 0x01, 0xff, 0x42, 0x68, 0x00, 0xff, - 0x25, 0x00, 0x51, 0xb6, 0x58, 0x9e, 0xfb, 0x41, 0x5b, 0x01, 0x19, 0x3e, + 0x25, 0x00, 0x51, 0xcb, 0x58, 0x9e, 0xfb, 0x41, 0x5b, 0x01, 0x19, 0x3e, 0x29, 0x00, 0x0e, 0xa5, 0x02, 0x01, 0xff, 0x46, 0x00, 0x04, 0x3e, 0xf5, 0x01, 0x46, 0xdb, 0x04, 0x51, 0x27, 0x40, 0x06, 0x13, 0x01, 0x11, 0x1b, 0xa4, 0x1b, 0x01, 0xff, 0x46, 0x73, 0x02, 0x41, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x42, 0xfb, 0x41, 0x0a, 0x73, 0x02, 0x32, 0x08, 0x84, 0x02, 0x17, 0x15, 0xaa, 0x1b, 0x01, 0xff, 0x46, 0x73, 0x02, 0x43, 0xfb, 0x01, 0x4c, 0xb0, 0x0d, 0x46, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x44, 0xfb, 0x41, 0x52, - 0xe7, 0x4d, 0x48, 0xfb, 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x46, 0x73, - 0x02, 0x45, 0xfb, 0x01, 0x4c, 0xb0, 0x0d, 0x4a, 0xfb, 0x41, 0x52, 0xe7, + 0xfc, 0x4d, 0x48, 0xfb, 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x46, 0x73, + 0x02, 0x45, 0xfb, 0x01, 0x4c, 0xb0, 0x0d, 0x4a, 0xfb, 0x41, 0x52, 0xfc, 0x4d, 0x47, 0xfb, 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x4c, 0xb0, 0x0d, 0x49, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x4b, 0xfb, 0x41, 0x4c, 0xd1, 0x09, 0x81, 0x25, 0x00, 0x4d, 0x10, 0x1b, 0x82, 0x25, 0x40, 0xa2, 0x37, 0x46, - 0x6d, 0xd0, 0x8d, 0xf5, 0x01, 0x4c, 0x90, 0x87, 0x8b, 0xf5, 0x01, 0xb0, - 0x1d, 0x55, 0x27, 0x39, 0xdf, 0x25, 0x00, 0x60, 0xac, 0x0e, 0x3f, 0x29, + 0x89, 0xd0, 0x8d, 0xf5, 0x01, 0x4c, 0x97, 0x87, 0x8b, 0xf5, 0x01, 0xb0, + 0x1d, 0x55, 0x3c, 0x39, 0xdf, 0x25, 0x00, 0x60, 0xac, 0x0e, 0x3f, 0x29, 0x00, 0x06, 0x19, 0x01, 0x01, 0xff, 0x42, 0x68, 0x00, 0xfa, 0x25, 0x00, - 0x51, 0xb6, 0x58, 0x9f, 0xfb, 0x41, 0x49, 0xb4, 0xac, 0x8c, 0xf5, 0x01, - 0x45, 0x8e, 0xd4, 0x89, 0xf5, 0x41, 0x4c, 0x90, 0x84, 0x8a, 0xf5, 0x01, - 0x0e, 0xe4, 0x64, 0x01, 0xff, 0x1b, 0x60, 0x1a, 0x50, 0x06, 0x6d, 0x02, + 0x51, 0xcb, 0x58, 0x9f, 0xfb, 0x41, 0x49, 0xc7, 0xac, 0x8c, 0xf5, 0x01, + 0x45, 0xaa, 0xd4, 0x89, 0xf5, 0x41, 0x4c, 0x97, 0x84, 0x8a, 0xf5, 0x01, + 0x0e, 0xf9, 0x64, 0x01, 0xff, 0x1b, 0x60, 0x1a, 0x50, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x0a, 0x73, 0x02, 0x31, 0x08, 0x84, 0x02, 0x17, 0x15, 0x7d, 0x02, 0x01, 0xff, 0x46, 0x73, 0x02, 0x3e, 0xfb, 0x01, 0x4c, 0xb0, 0x0d, 0x51, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x3f, 0xfb, 0x41, 0x06, 0x13, 0x01, - 0x06, 0x52, 0x81, 0x50, 0x4d, 0xfb, 0x41, 0x46, 0x73, 0x02, 0x40, 0xfb, + 0x06, 0x52, 0x96, 0x50, 0x4d, 0xfb, 0x41, 0x46, 0x73, 0x02, 0x40, 0xfb, 0x01, 0x4c, 0xb0, 0x0d, 0x4f, 0xfb, 0x41, 0x06, 0x13, 0x01, 0x06, 0x52, - 0x81, 0x50, 0x4c, 0xfb, 0x41, 0x4c, 0xb0, 0x0d, 0x4e, 0xfb, 0x01, 0x45, + 0x96, 0x50, 0x4c, 0xfb, 0x41, 0x4c, 0xb0, 0x0d, 0x4e, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x50, 0xfb, 0x41, 0x46, 0x73, 0x02, 0x3c, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x3d, 0xfb, 0x41, 0x45, 0x33, 0x01, 0x84, 0x25, 0x00, 0x46, - 0x00, 0x04, 0xe1, 0x25, 0x00, 0x54, 0x8c, 0x3e, 0xdb, 0x25, 0x00, 0x4c, + 0x00, 0x04, 0xe1, 0x25, 0x00, 0x54, 0xa1, 0x3e, 0xdb, 0x25, 0x00, 0x4c, 0x9b, 0x03, 0x8f, 0xfb, 0x41, 0x48, 0x94, 0x0b, 0x4e, 0x20, 0x00, 0xa2, - 0x19, 0x5b, 0xcb, 0x18, 0x1f, 0x30, 0x00, 0x46, 0x57, 0x4a, 0x47, 0x2e, + 0x19, 0x5b, 0xcb, 0x18, 0x1f, 0x30, 0x00, 0x46, 0x6c, 0x4a, 0x47, 0x2e, 0x80, 0x06, 0x44, 0xf0, 0x07, 0x5f, 0x00, 0x40, 0x49, 0x4a, 0x37, 0x48, - 0x2e, 0x40, 0x46, 0xb3, 0xcf, 0xab, 0xfa, 0x01, 0x50, 0x23, 0x53, 0x05, - 0xf5, 0x41, 0x45, 0x5b, 0xdc, 0xe9, 0xf3, 0x01, 0x46, 0xf1, 0x04, 0x8c, - 0xf4, 0x41, 0x4b, 0x84, 0x8f, 0x74, 0xf7, 0x01, 0x4a, 0x6d, 0xa3, 0xf4, + 0x2e, 0x40, 0x46, 0xcf, 0xcf, 0xab, 0xfa, 0x01, 0x50, 0x38, 0x53, 0x05, + 0xf5, 0x41, 0x45, 0x77, 0xdc, 0xe9, 0xf3, 0x01, 0x46, 0xf1, 0x04, 0x8c, + 0xf4, 0x41, 0x4b, 0x97, 0x8f, 0x74, 0xf7, 0x01, 0x4a, 0x80, 0xa3, 0xf4, 0xf9, 0x01, 0x42, 0xc6, 0x02, 0xb7, 0xfa, 0x41, 0xa4, 0x71, 0x04, 0xc3, 0x00, 0x30, 0x05, 0xc8, 0x00, 0x01, 0xff, 0x45, 0xc9, 0x34, 0xdd, 0x27, 0x00, 0x06, 0xa9, 0x01, 0x01, 0xff, 0x45, 0xce, 0x00, 0xf6, 0x27, 0x80, - 0x13, 0x4c, 0xa0, 0x86, 0xf9, 0x27, 0x80, 0x06, 0x4e, 0xb4, 0x75, 0xff, - 0x27, 0x40, 0x49, 0x4c, 0xab, 0xfe, 0x27, 0x40, 0x49, 0x4c, 0xab, 0xfc, + 0x13, 0x4c, 0xa7, 0x86, 0xf9, 0x27, 0x80, 0x06, 0x4e, 0xc9, 0x75, 0xff, + 0x27, 0x40, 0x49, 0x5f, 0xab, 0xfe, 0x27, 0x40, 0x49, 0x5f, 0xab, 0xfc, 0x27, 0x40, 0x80, 0x25, 0x06, 0xa9, 0x01, 0x01, 0xff, 0x45, 0xce, 0x00, - 0xf5, 0x27, 0x80, 0x13, 0x4c, 0xa0, 0x86, 0xf8, 0x27, 0x80, 0x06, 0x4e, - 0xb4, 0x75, 0x33, 0x2b, 0x40, 0x49, 0x4c, 0xab, 0xfd, 0x27, 0x40, 0x49, - 0x4c, 0xab, 0xfb, 0x27, 0x40, 0x06, 0xc8, 0x00, 0x06, 0x44, 0xca, 0x34, - 0xde, 0x27, 0x40, 0x45, 0xce, 0x00, 0xf7, 0x27, 0x00, 0x4c, 0xa0, 0x86, + 0xf5, 0x27, 0x80, 0x13, 0x4c, 0xa7, 0x86, 0xf8, 0x27, 0x80, 0x06, 0x4e, + 0xc9, 0x75, 0x33, 0x2b, 0x40, 0x49, 0x5f, 0xab, 0xfd, 0x27, 0x40, 0x49, + 0x5f, 0xab, 0xfb, 0x27, 0x40, 0x06, 0xc8, 0x00, 0x06, 0x44, 0xca, 0x34, + 0xde, 0x27, 0x40, 0x45, 0xce, 0x00, 0xf7, 0x27, 0x00, 0x4c, 0xa7, 0x86, 0xfa, 0x27, 0x40, 0x67, 0xab, 0x04, 0xe6, 0x2a, 0x00, 0x47, 0xda, 0x2e, 0xcc, 0x27, 0x00, 0x43, 0x55, 0x1b, 0x98, 0xfa, 0x41, 0x43, 0x1a, 0x00, 0x27, 0x22, 0x80, 0x3c, 0x42, 0x0c, 0x00, 0x28, 0x22, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x57, 0x53, 0x2c, 0x59, 0x2a, 0x00, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x02, 0x3b, 0x01, 0x0c, 0x4f, 0x4a, 0x67, 0x5d, 0x2a, 0x00, 0x4b, - 0x77, 0x97, 0x5b, 0x2a, 0x40, 0x47, 0xee, 0x1b, 0x52, 0x2a, 0x00, 0x05, - 0x3d, 0x01, 0x01, 0xff, 0x47, 0xf3, 0x78, 0x62, 0x2a, 0x00, 0x48, 0x3b, + 0xff, 0x02, 0x3b, 0x01, 0x0c, 0x4f, 0x5f, 0x67, 0x5d, 0x2a, 0x00, 0x4b, + 0x8a, 0x97, 0x5b, 0x2a, 0x40, 0x47, 0xee, 0x1b, 0x52, 0x2a, 0x00, 0x05, + 0x3d, 0x01, 0x01, 0xff, 0x47, 0xfa, 0x78, 0x62, 0x2a, 0x00, 0x48, 0x50, 0x54, 0x63, 0x2a, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x02, 0x3b, 0x01, - 0x12, 0x4f, 0x4a, 0x67, 0x5c, 0x2a, 0x00, 0x4b, 0x77, 0x97, 0x5a, 0x2a, - 0x00, 0x48, 0x3b, 0x54, 0x5f, 0x2a, 0x40, 0x47, 0xee, 0x1b, 0x51, 0x2a, - 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x47, 0xf3, 0x78, 0x5e, 0x2a, 0x00, - 0x48, 0x3b, 0x54, 0x60, 0x2a, 0x40, 0x4d, 0xd3, 0x78, 0x0f, 0xf5, 0x01, - 0x0a, 0x4f, 0xa3, 0x01, 0xff, 0x43, 0xcd, 0x09, 0x0e, 0x00, 0x00, 0x44, + 0x12, 0x4f, 0x5f, 0x67, 0x5c, 0x2a, 0x00, 0x4b, 0x8a, 0x97, 0x5a, 0x2a, + 0x00, 0x48, 0x50, 0x54, 0x5f, 0x2a, 0x40, 0x47, 0xee, 0x1b, 0x51, 0x2a, + 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x47, 0xfa, 0x78, 0x5e, 0x2a, 0x00, + 0x48, 0x50, 0x54, 0x60, 0x2a, 0x40, 0x4d, 0xda, 0x78, 0x0f, 0xf5, 0x01, + 0x0a, 0x62, 0xa3, 0x01, 0xff, 0x43, 0xcd, 0x09, 0x0e, 0x00, 0x00, 0x44, 0xf5, 0x1b, 0x0f, 0x00, 0x40, 0x43, 0x45, 0x08, 0x4e, 0x26, 0x00, 0xa7, - 0x93, 0x1d, 0xad, 0xd3, 0x19, 0xae, 0xdd, 0x02, 0x47, 0x9b, 0xc9, 0x81, - 0xf9, 0x01, 0x42, 0xee, 0x13, 0xe2, 0xf5, 0x81, 0xc9, 0x02, 0x47, 0x6b, - 0x7d, 0xa4, 0x20, 0x00, 0x03, 0xd1, 0x1f, 0x0c, 0x51, 0x82, 0x59, 0xb6, - 0x20, 0x00, 0x44, 0x5f, 0x8b, 0x8e, 0xf9, 0x41, 0x07, 0xf1, 0x04, 0x11, + 0x93, 0x1d, 0xad, 0xd3, 0x19, 0xae, 0xdd, 0x02, 0x47, 0xb7, 0xc9, 0x81, + 0xf9, 0x01, 0x42, 0xee, 0x13, 0xe2, 0xf5, 0x81, 0xc9, 0x02, 0x47, 0x72, + 0x7d, 0xa4, 0x20, 0x00, 0x03, 0xd1, 0x1f, 0x0c, 0x51, 0x97, 0x59, 0xb6, + 0x20, 0x00, 0x44, 0x66, 0x8b, 0x8e, 0xf9, 0x41, 0x07, 0xf1, 0x04, 0x11, 0x0c, 0x8c, 0x14, 0x01, 0xff, 0x45, 0x18, 0x04, 0xfe, 0xa4, 0x00, 0x49, 0xa0, 0x14, 0xff, 0xa4, 0x40, 0xe1, 0xee, 0xa4, 0x80, 0x94, 0x02, 0x42, 0x16, 0x00, 0xd0, 0xa4, 0x00, 0xa3, 0x81, 0x02, 0xa4, 0xf4, 0x01, 0xe5, @@ -8375,9 +8376,9 @@ static const unsigned char uname2c_tree[210697] = { 0x00, 0xb0, 0x1f, 0x41, 0xe5, 0xf5, 0xa4, 0x00, 0xe8, 0xf6, 0xa4, 0x40, 0xe1, 0xd4, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xd5, 0xa4, 0x00, 0x04, 0xcd, 0x09, 0x0d, 0xb3, 0x01, 0xff, 0xe1, 0xdd, 0xa4, 0x00, 0x42, 0x22, 0x00, - 0xde, 0xa4, 0x40, 0x04, 0x3c, 0x5c, 0x06, 0x45, 0x13, 0xde, 0xf9, 0xa4, - 0x40, 0x42, 0x5d, 0x00, 0xfb, 0xa4, 0x00, 0x43, 0xdc, 0xe8, 0xfa, 0xa4, - 0x00, 0x43, 0x2a, 0xe9, 0xfd, 0xa4, 0x00, 0x42, 0x2f, 0x04, 0xfc, 0xa4, + 0xde, 0xa4, 0x40, 0x04, 0x51, 0x5c, 0x06, 0x45, 0x2f, 0xde, 0xf9, 0xa4, + 0x40, 0x42, 0x5d, 0x00, 0xfb, 0xa4, 0x00, 0x43, 0xf8, 0xe8, 0xfa, 0xa4, + 0x00, 0x43, 0x46, 0xe9, 0xfd, 0xa4, 0x00, 0x42, 0x2f, 0x04, 0xfc, 0xa4, 0x00, 0x42, 0x35, 0x00, 0xf8, 0xa4, 0x40, 0xe1, 0xe2, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xeb, 0xa4, 0x40, 0xe1, 0xd1, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xd2, 0xa4, 0x40, 0xe5, 0xf7, 0xa4, 0x40, 0xe1, 0xe0, 0xa4, 0x00, 0x42, @@ -8387,62 +8388,62 @@ static const unsigned char uname2c_tree[210697] = { 0xf1, 0xa4, 0x40, 0xe1, 0xd3, 0xa4, 0x00, 0x42, 0x59, 0x00, 0xdc, 0xa4, 0x40, 0xe1, 0xda, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xdb, 0xa4, 0x40, 0xe5, 0xef, 0xa4, 0x40, 0x44, 0x72, 0x21, 0x84, 0xf4, 0x41, 0xa5, 0x0f, 0xab, - 0x01, 0xff, 0x47, 0xf6, 0x06, 0x17, 0xf5, 0x01, 0x4d, 0x50, 0x7b, 0x87, - 0xf5, 0x41, 0x80, 0xab, 0x16, 0x03, 0x17, 0x00, 0x01, 0xff, 0x08, 0x65, - 0xb9, 0xd5, 0x09, 0x02, 0x26, 0x02, 0x01, 0xff, 0x09, 0xad, 0xb0, 0xdd, - 0x04, 0x0a, 0x43, 0xa5, 0xae, 0x04, 0x02, 0xf7, 0x06, 0x01, 0xff, 0x09, - 0x39, 0xb2, 0x4e, 0x07, 0xfa, 0xc8, 0x01, 0xff, 0x91, 0x3f, 0x42, 0x55, - 0xe2, 0x52, 0x00, 0x01, 0x42, 0xc2, 0xe9, 0x53, 0x00, 0x01, 0x94, 0x29, - 0x42, 0x55, 0xb9, 0x56, 0x00, 0x01, 0x96, 0x19, 0x42, 0x58, 0x3b, 0x59, + 0x01, 0xff, 0x47, 0xf6, 0x06, 0x17, 0xf5, 0x01, 0x4d, 0x57, 0x7b, 0x87, + 0xf5, 0x41, 0x80, 0xab, 0x16, 0x03, 0x17, 0x00, 0x01, 0xff, 0x08, 0x81, + 0xb9, 0xd5, 0x09, 0x02, 0x26, 0x02, 0x01, 0xff, 0x09, 0xc9, 0xb0, 0xdd, + 0x04, 0x0a, 0x56, 0xa5, 0xae, 0x04, 0x02, 0xf7, 0x06, 0x01, 0xff, 0x09, + 0x55, 0xb2, 0x4e, 0x07, 0x16, 0xc9, 0x01, 0xff, 0x91, 0x3f, 0x42, 0x71, + 0xe2, 0x52, 0x00, 0x01, 0x42, 0xde, 0xe9, 0x53, 0x00, 0x01, 0x94, 0x29, + 0x42, 0x71, 0xb9, 0x56, 0x00, 0x01, 0x96, 0x19, 0x42, 0x6d, 0x3b, 0x59, 0x00, 0x01, 0x98, 0x01, 0xff, 0xd2, 0x5a, 0x00, 0x01, 0xd3, 0x5b, 0x00, 0x01, 0xd6, 0x5c, 0x00, 0x01, 0xd9, 0x5d, 0x00, 0x41, 0xd3, 0x57, 0x00, 0x01, 0xd4, 0x58, 0x00, 0x41, 0xd7, 0x54, 0x00, 0x01, 0xd9, 0x55, 0x00, 0x41, 0xd8, 0x50, 0x00, 0x01, 0xd9, 0x51, 0x00, 0x41, 0x90, 0x9e, 0x03, 0x91, 0xeb, 0x02, 0x92, 0xb2, 0x02, 0x93, 0xff, 0x01, 0x94, 0xcc, 0x01, 0x95, 0x93, 0x01, 0x96, 0x61, 0x97, 0x29, 0x98, 0x0f, 0x99, 0x01, 0xff, - 0x45, 0x6a, 0xd7, 0x44, 0x00, 0x01, 0x45, 0xab, 0xd7, 0x4d, 0x00, 0x41, - 0x44, 0x88, 0xd7, 0x14, 0x00, 0x01, 0x44, 0x22, 0xe2, 0x13, 0x00, 0x01, - 0x44, 0xda, 0xe2, 0x42, 0x00, 0x01, 0x45, 0xd2, 0xd8, 0x4c, 0x00, 0x41, - 0x44, 0xe2, 0xe1, 0x12, 0x00, 0x01, 0x45, 0x97, 0xd7, 0x43, 0x00, 0x01, - 0x44, 0x5a, 0xe2, 0x1f, 0x00, 0x01, 0x44, 0x92, 0xe2, 0x16, 0x00, 0x01, - 0x44, 0xce, 0xe2, 0x3d, 0x00, 0x01, 0x44, 0x1e, 0xe3, 0x38, 0x00, 0x01, - 0x45, 0x91, 0xd8, 0x48, 0x00, 0x01, 0x44, 0xdb, 0xce, 0x0f, 0x00, 0x01, - 0x44, 0xa6, 0xe3, 0x24, 0x00, 0x41, 0x44, 0xee, 0xe1, 0x28, 0x00, 0x01, - 0x43, 0xa6, 0x6e, 0x03, 0x00, 0x01, 0x45, 0xf1, 0xd7, 0x47, 0x00, 0x01, - 0x44, 0xf6, 0xe2, 0x0e, 0x00, 0x01, 0x45, 0xa0, 0xd8, 0x4b, 0x00, 0x01, - 0x44, 0x6e, 0xe3, 0x11, 0x00, 0x01, 0x45, 0xff, 0xd8, 0x4a, 0x00, 0x01, - 0x44, 0xd2, 0xe3, 0x36, 0x00, 0x41, 0x44, 0xea, 0xe1, 0x22, 0x00, 0x01, - 0x44, 0x0e, 0xe2, 0x09, 0x00, 0x01, 0x44, 0x56, 0xe2, 0x1c, 0x00, 0x01, - 0x44, 0x9e, 0xe2, 0x2a, 0x00, 0x01, 0x44, 0xc6, 0xe2, 0x37, 0x00, 0x01, - 0x44, 0x02, 0xe3, 0x1d, 0x00, 0x01, 0x44, 0x6a, 0xe3, 0x0a, 0x00, 0x01, - 0x44, 0xaa, 0xe3, 0x31, 0x00, 0x01, 0x44, 0xca, 0xe3, 0x32, 0x00, 0x41, - 0x44, 0xf6, 0xe1, 0x39, 0x00, 0x01, 0x44, 0x36, 0xe2, 0x2f, 0x00, 0x01, - 0x44, 0xeb, 0xc3, 0x3a, 0x00, 0x01, 0x44, 0x72, 0xe2, 0x41, 0x00, 0x01, - 0x44, 0xb2, 0xe2, 0x10, 0x00, 0x01, 0x44, 0xe2, 0xe2, 0x06, 0x00, 0x01, - 0x44, 0x32, 0xe3, 0x0b, 0x00, 0x01, 0x45, 0xfa, 0xd8, 0x45, 0x00, 0x41, - 0x44, 0xe6, 0xe1, 0x1b, 0x00, 0x01, 0x44, 0x32, 0xe2, 0x2d, 0x00, 0x01, - 0x44, 0x5e, 0xe2, 0x26, 0x00, 0x01, 0x45, 0x19, 0xd8, 0x49, 0x00, 0x01, - 0x44, 0x36, 0xe3, 0x0d, 0x00, 0x01, 0x44, 0x7a, 0xe3, 0x34, 0x00, 0x01, - 0x43, 0x8e, 0xe3, 0x01, 0x00, 0x01, 0x44, 0xba, 0xe3, 0x20, 0x00, 0x41, - 0x44, 0xfe, 0xe1, 0x3f, 0x00, 0x01, 0x44, 0x2a, 0xe2, 0x25, 0x00, 0x01, - 0x44, 0x96, 0xe2, 0x18, 0x00, 0x01, 0x44, 0xba, 0xe2, 0x1a, 0x00, 0x01, - 0x44, 0xd2, 0xe2, 0x40, 0x00, 0x01, 0x44, 0x4e, 0xe3, 0x2c, 0x00, 0x01, - 0x44, 0x76, 0xe3, 0x29, 0x00, 0x01, 0x43, 0xa0, 0xe8, 0x02, 0x00, 0x01, - 0x45, 0x31, 0xd9, 0x46, 0x00, 0x41, 0x43, 0x3d, 0xe8, 0x04, 0x00, 0x01, - 0x44, 0x26, 0xe2, 0x21, 0x00, 0x01, 0x44, 0x66, 0xe2, 0x30, 0x00, 0x01, - 0x44, 0x8e, 0xe2, 0x15, 0x00, 0x01, 0x44, 0xaa, 0xe2, 0x08, 0x00, 0x01, - 0x44, 0xfe, 0xe2, 0x17, 0x00, 0x01, 0x44, 0x4a, 0xe3, 0x23, 0x00, 0x01, - 0x44, 0x82, 0xe3, 0x3c, 0x00, 0x41, 0x44, 0x06, 0xe2, 0x05, 0x00, 0x01, - 0x44, 0x62, 0xe2, 0x2b, 0x00, 0x01, 0x44, 0x9a, 0xe2, 0x1e, 0x00, 0x01, - 0x44, 0xbe, 0xe2, 0x33, 0x00, 0x01, 0x44, 0x0e, 0xe3, 0x35, 0x00, 0x01, - 0x44, 0x42, 0xe3, 0x19, 0x00, 0x01, 0x44, 0x4a, 0xac, 0x07, 0x00, 0x01, - 0x43, 0x9d, 0xe8, 0x00, 0x00, 0x01, 0x44, 0xbe, 0xe3, 0x2e, 0x00, 0x41, - 0x91, 0x06, 0x49, 0x48, 0xac, 0xd2, 0x00, 0x41, 0x92, 0x14, 0x93, 0x06, - 0x48, 0x55, 0xb9, 0xa4, 0x00, 0x41, 0x47, 0xf9, 0xc3, 0x98, 0x00, 0x01, - 0x46, 0xb1, 0xce, 0x99, 0x00, 0x41, 0x46, 0xdb, 0xce, 0x93, 0x00, 0x01, - 0x48, 0x5d, 0xb9, 0x94, 0x00, 0x41, 0xa2, 0x87, 0x01, 0x08, 0x35, 0xc2, - 0x01, 0xff, 0x43, 0x58, 0xe8, 0xde, 0x00, 0x01, 0x92, 0x06, 0x43, 0x73, - 0xe8, 0xfa, 0x00, 0x41, 0x90, 0x4a, 0x91, 0x20, 0x92, 0x06, 0x42, 0x7a, + 0x45, 0x86, 0xd7, 0x44, 0x00, 0x01, 0x45, 0xc7, 0xd7, 0x4d, 0x00, 0x41, + 0x44, 0xa4, 0xd7, 0x14, 0x00, 0x01, 0x44, 0x3e, 0xe2, 0x13, 0x00, 0x01, + 0x44, 0xf6, 0xe2, 0x42, 0x00, 0x01, 0x45, 0xee, 0xd8, 0x4c, 0x00, 0x41, + 0x44, 0xfe, 0xe1, 0x12, 0x00, 0x01, 0x45, 0xb3, 0xd7, 0x43, 0x00, 0x01, + 0x44, 0x76, 0xe2, 0x1f, 0x00, 0x01, 0x44, 0xae, 0xe2, 0x16, 0x00, 0x01, + 0x44, 0xea, 0xe2, 0x3d, 0x00, 0x01, 0x44, 0x3a, 0xe3, 0x38, 0x00, 0x01, + 0x45, 0xad, 0xd8, 0x48, 0x00, 0x01, 0x44, 0xf7, 0xce, 0x0f, 0x00, 0x01, + 0x44, 0xc2, 0xe3, 0x24, 0x00, 0x41, 0x44, 0x0a, 0xe2, 0x28, 0x00, 0x01, + 0x43, 0xbb, 0x6e, 0x03, 0x00, 0x01, 0x45, 0x0d, 0xd8, 0x47, 0x00, 0x01, + 0x44, 0x12, 0xe3, 0x0e, 0x00, 0x01, 0x45, 0xbc, 0xd8, 0x4b, 0x00, 0x01, + 0x44, 0x8a, 0xe3, 0x11, 0x00, 0x01, 0x45, 0x1b, 0xd9, 0x4a, 0x00, 0x01, + 0x44, 0xee, 0xe3, 0x36, 0x00, 0x41, 0x44, 0x06, 0xe2, 0x22, 0x00, 0x01, + 0x44, 0x2a, 0xe2, 0x09, 0x00, 0x01, 0x44, 0x72, 0xe2, 0x1c, 0x00, 0x01, + 0x44, 0xba, 0xe2, 0x2a, 0x00, 0x01, 0x44, 0xe2, 0xe2, 0x37, 0x00, 0x01, + 0x44, 0x1e, 0xe3, 0x1d, 0x00, 0x01, 0x44, 0x86, 0xe3, 0x0a, 0x00, 0x01, + 0x44, 0xc6, 0xe3, 0x31, 0x00, 0x01, 0x44, 0xe6, 0xe3, 0x32, 0x00, 0x41, + 0x44, 0x12, 0xe2, 0x39, 0x00, 0x01, 0x44, 0x52, 0xe2, 0x2f, 0x00, 0x01, + 0x44, 0x07, 0xc4, 0x3a, 0x00, 0x01, 0x44, 0x8e, 0xe2, 0x41, 0x00, 0x01, + 0x44, 0xce, 0xe2, 0x10, 0x00, 0x01, 0x44, 0xfe, 0xe2, 0x06, 0x00, 0x01, + 0x44, 0x4e, 0xe3, 0x0b, 0x00, 0x01, 0x45, 0x16, 0xd9, 0x45, 0x00, 0x41, + 0x44, 0x02, 0xe2, 0x1b, 0x00, 0x01, 0x44, 0x4e, 0xe2, 0x2d, 0x00, 0x01, + 0x44, 0x7a, 0xe2, 0x26, 0x00, 0x01, 0x45, 0x35, 0xd8, 0x49, 0x00, 0x01, + 0x44, 0x52, 0xe3, 0x0d, 0x00, 0x01, 0x44, 0x96, 0xe3, 0x34, 0x00, 0x01, + 0x43, 0xaa, 0xe3, 0x01, 0x00, 0x01, 0x44, 0xd6, 0xe3, 0x20, 0x00, 0x41, + 0x44, 0x1a, 0xe2, 0x3f, 0x00, 0x01, 0x44, 0x46, 0xe2, 0x25, 0x00, 0x01, + 0x44, 0xb2, 0xe2, 0x18, 0x00, 0x01, 0x44, 0xd6, 0xe2, 0x1a, 0x00, 0x01, + 0x44, 0xee, 0xe2, 0x40, 0x00, 0x01, 0x44, 0x6a, 0xe3, 0x2c, 0x00, 0x01, + 0x44, 0x92, 0xe3, 0x29, 0x00, 0x01, 0x43, 0xbc, 0xe8, 0x02, 0x00, 0x01, + 0x45, 0x4d, 0xd9, 0x46, 0x00, 0x41, 0x43, 0x59, 0xe8, 0x04, 0x00, 0x01, + 0x44, 0x42, 0xe2, 0x21, 0x00, 0x01, 0x44, 0x82, 0xe2, 0x30, 0x00, 0x01, + 0x44, 0xaa, 0xe2, 0x15, 0x00, 0x01, 0x44, 0xc6, 0xe2, 0x08, 0x00, 0x01, + 0x44, 0x1a, 0xe3, 0x17, 0x00, 0x01, 0x44, 0x66, 0xe3, 0x23, 0x00, 0x01, + 0x44, 0x9e, 0xe3, 0x3c, 0x00, 0x41, 0x44, 0x22, 0xe2, 0x05, 0x00, 0x01, + 0x44, 0x7e, 0xe2, 0x2b, 0x00, 0x01, 0x44, 0xb6, 0xe2, 0x1e, 0x00, 0x01, + 0x44, 0xda, 0xe2, 0x33, 0x00, 0x01, 0x44, 0x2a, 0xe3, 0x35, 0x00, 0x01, + 0x44, 0x5e, 0xe3, 0x19, 0x00, 0x01, 0x44, 0x5d, 0xac, 0x07, 0x00, 0x01, + 0x43, 0xb9, 0xe8, 0x00, 0x00, 0x01, 0x44, 0xda, 0xe3, 0x2e, 0x00, 0x41, + 0x91, 0x06, 0x49, 0x5b, 0xac, 0xd2, 0x00, 0x41, 0x92, 0x14, 0x93, 0x06, + 0x48, 0x71, 0xb9, 0xa4, 0x00, 0x41, 0x47, 0x15, 0xc4, 0x98, 0x00, 0x01, + 0x46, 0xcd, 0xce, 0x99, 0x00, 0x41, 0x46, 0xf7, 0xce, 0x93, 0x00, 0x01, + 0x48, 0x79, 0xb9, 0x94, 0x00, 0x41, 0xa2, 0x87, 0x01, 0x08, 0x51, 0xc2, + 0x01, 0xff, 0x43, 0x74, 0xe8, 0xde, 0x00, 0x01, 0x92, 0x06, 0x43, 0x8f, + 0xe8, 0xfa, 0x00, 0x41, 0x90, 0x4a, 0x91, 0x20, 0x92, 0x06, 0x42, 0x96, 0xc8, 0xf9, 0x00, 0x41, 0xd1, 0xf3, 0x00, 0x01, 0xd2, 0xf4, 0x00, 0x01, 0xd6, 0xf5, 0x00, 0x01, 0xd7, 0xf6, 0x00, 0x01, 0xd8, 0xf7, 0x00, 0x01, 0xd9, 0xf8, 0x00, 0x41, 0xd0, 0xe9, 0x00, 0x01, 0xd1, 0xea, 0x00, 0x01, @@ -8454,50 +8455,50 @@ static const unsigned char uname2c_tree[210697] = { 0xd7, 0xe6, 0x00, 0x01, 0xd8, 0xe7, 0x00, 0x01, 0xd9, 0xe8, 0x00, 0x41, 0x91, 0x84, 0x01, 0x92, 0x01, 0xff, 0x92, 0x73, 0x93, 0x53, 0x94, 0x29, 0x95, 0x01, 0xff, 0xd1, 0xd5, 0x00, 0x01, 0xd2, 0xd6, 0x00, 0x01, 0xd3, - 0xd7, 0x00, 0x01, 0x46, 0x87, 0xce, 0xd8, 0x00, 0x01, 0xd5, 0xd9, 0x00, + 0xd7, 0x00, 0x01, 0x46, 0xa3, 0xce, 0xd8, 0x00, 0x01, 0xd5, 0xd9, 0x00, 0x01, 0xd6, 0xda, 0x00, 0x01, 0xd7, 0xdb, 0x00, 0x01, 0xd8, 0xdc, 0x00, - 0x01, 0xd9, 0xdd, 0x00, 0x41, 0x51, 0x12, 0x52, 0xcc, 0x00, 0x01, 0x49, - 0x36, 0xac, 0xcd, 0x00, 0x01, 0x4f, 0xf3, 0x63, 0xce, 0x00, 0x01, 0x47, - 0x23, 0xc4, 0xcf, 0x00, 0x01, 0xd5, 0xd0, 0x00, 0x01, 0xd6, 0xd1, 0x00, - 0x01, 0xd8, 0xd3, 0x00, 0x01, 0xd9, 0xd4, 0x00, 0x41, 0x47, 0xcf, 0xc3, - 0xc6, 0x00, 0x01, 0x47, 0xdd, 0xc3, 0xc7, 0x00, 0x01, 0xd2, 0xc8, 0x00, - 0x01, 0x47, 0x1c, 0xc4, 0xc9, 0x00, 0x01, 0xd4, 0xca, 0x00, 0x01, 0xd6, - 0xcb, 0x00, 0x41, 0x4b, 0x8c, 0x90, 0xc4, 0x00, 0x01, 0x49, 0x5a, 0xac, + 0x01, 0xd9, 0xdd, 0x00, 0x41, 0x51, 0x27, 0x52, 0xcc, 0x00, 0x01, 0x49, + 0x49, 0xac, 0xcd, 0x00, 0x01, 0x4f, 0x08, 0x64, 0xce, 0x00, 0x01, 0x47, + 0x3f, 0xc4, 0xcf, 0x00, 0x01, 0xd5, 0xd0, 0x00, 0x01, 0xd6, 0xd1, 0x00, + 0x01, 0xd8, 0xd3, 0x00, 0x01, 0xd9, 0xd4, 0x00, 0x41, 0x47, 0xeb, 0xc3, + 0xc6, 0x00, 0x01, 0x47, 0xf9, 0xc3, 0xc7, 0x00, 0x01, 0xd2, 0xc8, 0x00, + 0x01, 0x47, 0x38, 0xc4, 0xc9, 0x00, 0x01, 0xd4, 0xca, 0x00, 0x01, 0xd6, + 0xcb, 0x00, 0x41, 0x4b, 0x9f, 0x90, 0xc4, 0x00, 0x01, 0x49, 0x6d, 0xac, 0xc5, 0x00, 0x41, 0x90, 0xfb, 0x01, 0x92, 0xda, 0x01, 0x93, 0xc7, 0x01, 0x94, 0xaa, 0x01, 0x95, 0x83, 0x01, 0x96, 0x55, 0x97, 0x2b, 0x98, 0x0d, - 0x99, 0x01, 0xff, 0xd0, 0xc2, 0x00, 0x01, 0x48, 0x45, 0xb9, 0xc3, 0x00, + 0x99, 0x01, 0xff, 0xd0, 0xc2, 0x00, 0x01, 0x48, 0x61, 0xb9, 0xc3, 0x00, 0x41, 0xd0, 0xbb, 0x00, 0x01, 0xd1, 0xbc, 0x00, 0x01, 0xd2, 0xbd, 0x00, 0x01, 0xd3, 0xbe, 0x00, 0x01, 0xd4, 0xbf, 0x00, 0x01, 0xd5, 0xc0, 0x00, 0x01, 0xd9, 0xc1, 0x00, 0x41, 0xd0, 0xb2, 0x00, 0x01, 0xd1, 0xb3, 0x00, - 0x01, 0xd2, 0xb4, 0x00, 0x01, 0x47, 0x07, 0xc4, 0xb5, 0x00, 0x01, 0xd4, - 0xb6, 0x00, 0x01, 0x46, 0xcf, 0xce, 0xb7, 0x00, 0x01, 0xd7, 0xb8, 0x00, + 0x01, 0xd2, 0xb4, 0x00, 0x01, 0x47, 0x23, 0xc4, 0xb5, 0x00, 0x01, 0xd4, + 0xb6, 0x00, 0x01, 0x46, 0xeb, 0xce, 0xb7, 0x00, 0x01, 0xd7, 0xb8, 0x00, 0x01, 0xd8, 0xb9, 0x00, 0x01, 0xd9, 0xba, 0x00, 0x41, 0xd0, 0xa8, 0x00, - 0x01, 0xd1, 0xa9, 0x00, 0x01, 0x49, 0x3f, 0xac, 0xaa, 0x00, 0x01, 0x48, - 0x4d, 0xb9, 0xab, 0x00, 0x01, 0xd4, 0xac, 0x00, 0x01, 0xd5, 0xad, 0x00, + 0x01, 0xd1, 0xa9, 0x00, 0x01, 0x49, 0x52, 0xac, 0xaa, 0x00, 0x01, 0x48, + 0x69, 0xb9, 0xab, 0x00, 0x01, 0xd4, 0xac, 0x00, 0x01, 0xd5, 0xad, 0x00, 0x01, 0xd6, 0xae, 0x00, 0x01, 0xd7, 0xaf, 0x00, 0x01, 0xd8, 0xb0, 0x00, - 0x01, 0xd9, 0xb1, 0x00, 0x41, 0xd0, 0x9f, 0x00, 0x01, 0x46, 0x51, 0xce, + 0x01, 0xd9, 0xb1, 0x00, 0x41, 0xd0, 0x9f, 0x00, 0x01, 0x46, 0x6d, 0xce, 0xa0, 0x00, 0x01, 0xd2, 0xa1, 0x00, 0x01, 0xd3, 0xa2, 0x00, 0x01, 0xd4, 0xa3, 0x00, 0x01, 0xd7, 0xa5, 0x00, 0x01, 0xd8, 0xa6, 0x00, 0x01, 0x47, - 0x46, 0xc4, 0xa7, 0x00, 0x41, 0x48, 0x35, 0xb9, 0x9a, 0x00, 0x01, 0x46, - 0x4b, 0xce, 0x9b, 0x00, 0x01, 0xd2, 0x9c, 0x00, 0x01, 0x46, 0xb7, 0xce, - 0x9d, 0x00, 0x01, 0xd6, 0x9e, 0x00, 0x41, 0x45, 0x8d, 0xd7, 0x95, 0x00, - 0x01, 0x46, 0x5d, 0xce, 0x96, 0x00, 0x01, 0xd2, 0x97, 0x00, 0x41, 0x47, - 0xd6, 0xc3, 0x8e, 0x00, 0x01, 0x48, 0x3d, 0xb9, 0x8f, 0x00, 0x01, 0x47, - 0xe4, 0xc3, 0x90, 0x00, 0x01, 0x47, 0x15, 0xc4, 0x91, 0x00, 0x01, 0x49, - 0x63, 0xac, 0x92, 0x00, 0x41, 0x45, 0x88, 0xd7, 0x80, 0x00, 0x01, 0x47, - 0xeb, 0xc3, 0x81, 0x00, 0x01, 0x46, 0x8d, 0xce, 0x82, 0x00, 0x01, 0x95, - 0x39, 0x96, 0x2b, 0x97, 0x1d, 0x98, 0x0f, 0x99, 0x01, 0xff, 0x45, 0x8e, - 0xdb, 0x8c, 0x00, 0x01, 0x46, 0x61, 0xd3, 0x8d, 0x00, 0x41, 0x45, 0x98, - 0xdb, 0x8a, 0x00, 0x01, 0x46, 0x5b, 0xd3, 0x8b, 0x00, 0x41, 0x4a, 0xab, - 0xa1, 0x88, 0x00, 0x01, 0x49, 0x6f, 0xb2, 0x89, 0x00, 0x41, 0x45, 0x93, - 0xdb, 0x86, 0x00, 0x01, 0x45, 0x87, 0xdd, 0x87, 0x00, 0x41, 0x46, 0xcd, - 0xcd, 0x83, 0x00, 0x01, 0x46, 0x51, 0xd1, 0x84, 0x00, 0x01, 0x4a, 0xe9, - 0xa4, 0x85, 0x00, 0x41, 0x44, 0x02, 0xe2, 0x1b, 0x06, 0x01, 0x91, 0xb1, + 0x62, 0xc4, 0xa7, 0x00, 0x41, 0x48, 0x51, 0xb9, 0x9a, 0x00, 0x01, 0x46, + 0x67, 0xce, 0x9b, 0x00, 0x01, 0xd2, 0x9c, 0x00, 0x01, 0x46, 0xd3, 0xce, + 0x9d, 0x00, 0x01, 0xd6, 0x9e, 0x00, 0x41, 0x45, 0xa9, 0xd7, 0x95, 0x00, + 0x01, 0x46, 0x79, 0xce, 0x96, 0x00, 0x01, 0xd2, 0x97, 0x00, 0x41, 0x47, + 0xf2, 0xc3, 0x8e, 0x00, 0x01, 0x48, 0x59, 0xb9, 0x8f, 0x00, 0x01, 0x47, + 0x00, 0xc4, 0x90, 0x00, 0x01, 0x47, 0x31, 0xc4, 0x91, 0x00, 0x01, 0x49, + 0x76, 0xac, 0x92, 0x00, 0x41, 0x45, 0xa4, 0xd7, 0x80, 0x00, 0x01, 0x47, + 0x07, 0xc4, 0x81, 0x00, 0x01, 0x46, 0xa9, 0xce, 0x82, 0x00, 0x01, 0x95, + 0x39, 0x96, 0x2b, 0x97, 0x1d, 0x98, 0x0f, 0x99, 0x01, 0xff, 0x45, 0xaa, + 0xdb, 0x8c, 0x00, 0x01, 0x46, 0x7d, 0xd3, 0x8d, 0x00, 0x41, 0x45, 0xb4, + 0xdb, 0x8a, 0x00, 0x01, 0x46, 0x77, 0xd3, 0x8b, 0x00, 0x41, 0x4a, 0xbe, + 0xa1, 0x88, 0x00, 0x01, 0x49, 0x8b, 0xb2, 0x89, 0x00, 0x41, 0x45, 0xaf, + 0xdb, 0x86, 0x00, 0x01, 0x45, 0xa3, 0xdd, 0x87, 0x00, 0x41, 0x46, 0xe9, + 0xcd, 0x83, 0x00, 0x01, 0x46, 0x6d, 0xd1, 0x84, 0x00, 0x01, 0x4a, 0xfc, + 0xa4, 0x85, 0x00, 0x41, 0x44, 0x1e, 0xe2, 0x1b, 0x06, 0x01, 0x91, 0xb1, 0x0c, 0x93, 0xe8, 0x09, 0x94, 0xee, 0x08, 0x95, 0x90, 0x06, 0x96, 0xac, - 0x04, 0x97, 0x9b, 0x03, 0x02, 0xf5, 0xe8, 0xf6, 0x02, 0xa2, 0x01, 0xff, - 0x90, 0x3f, 0x91, 0x01, 0xff, 0x42, 0x68, 0xe1, 0x48, 0x06, 0x01, 0x92, - 0x28, 0x02, 0x67, 0xe1, 0x1c, 0x42, 0xd4, 0xe9, 0x50, 0x06, 0x01, 0x42, - 0xbd, 0xe9, 0x51, 0x06, 0x01, 0x98, 0x06, 0x42, 0x48, 0xe8, 0x54, 0x06, + 0x04, 0x97, 0x9b, 0x03, 0x02, 0x11, 0xe9, 0xf6, 0x02, 0xa2, 0x01, 0xff, + 0x90, 0x3f, 0x91, 0x01, 0xff, 0x42, 0x84, 0xe1, 0x48, 0x06, 0x01, 0x92, + 0x28, 0x02, 0x83, 0xe1, 0x1c, 0x42, 0xf0, 0xe9, 0x50, 0x06, 0x01, 0x42, + 0xd9, 0xe9, 0x51, 0x06, 0x01, 0x98, 0x06, 0x42, 0x64, 0xe8, 0x54, 0x06, 0x41, 0xd0, 0x52, 0x06, 0x01, 0xd8, 0x53, 0x06, 0x41, 0xe1, 0x4d, 0x06, 0x01, 0xe2, 0x4e, 0x06, 0x41, 0xd0, 0x49, 0x06, 0x01, 0xd2, 0x4b, 0x06, 0x01, 0xd3, 0x4c, 0x06, 0x41, 0x90, 0x8b, 0x02, 0x91, 0xf4, 0x01, 0x92, @@ -8529,18 +8530,18 @@ static const unsigned char uname2c_tree[210697] = { 0x60, 0x07, 0x01, 0xd1, 0x61, 0x07, 0x01, 0xd2, 0x62, 0x07, 0x01, 0xd3, 0x63, 0x07, 0x01, 0xd4, 0x64, 0x07, 0x01, 0xd5, 0x65, 0x07, 0x01, 0xd6, 0x66, 0x07, 0x01, 0xd7, 0x67, 0x07, 0x41, 0x90, 0x38, 0x91, 0x0c, 0x47, - 0xf2, 0xc3, 0x54, 0x07, 0x01, 0x45, 0x2d, 0xd8, 0x55, 0x07, 0x41, 0x43, - 0x12, 0x52, 0x4d, 0x07, 0x01, 0x43, 0x49, 0xe8, 0x4e, 0x07, 0x01, 0x43, - 0x6e, 0xe2, 0x4f, 0x07, 0x01, 0x47, 0x0e, 0xc4, 0x50, 0x07, 0x01, 0x45, - 0x32, 0xd8, 0x51, 0x07, 0x01, 0x44, 0xde, 0xe2, 0x52, 0x07, 0x01, 0x44, - 0x62, 0xe3, 0x53, 0x07, 0x41, 0x43, 0xdd, 0xc3, 0x40, 0x07, 0x01, 0x43, - 0x4a, 0xe2, 0x41, 0x07, 0x01, 0x43, 0x6a, 0xe8, 0x42, 0x07, 0x01, 0x43, - 0x79, 0xe8, 0x43, 0x07, 0x01, 0x43, 0xe6, 0xe2, 0x44, 0x07, 0x01, 0x43, - 0xc3, 0xce, 0x45, 0x07, 0x01, 0x43, 0xbe, 0xd8, 0x46, 0x07, 0x01, 0x43, - 0x5d, 0xb9, 0x47, 0x07, 0x01, 0x99, 0x01, 0xff, 0x42, 0x73, 0x00, 0x48, - 0x07, 0x01, 0x8d, 0x01, 0xff, 0x44, 0x52, 0xe2, 0x49, 0x07, 0x01, 0x44, - 0x86, 0xe2, 0x4a, 0x07, 0x01, 0x44, 0xb6, 0xe2, 0x4b, 0x07, 0x01, 0x44, - 0x3a, 0xe3, 0x4c, 0x07, 0x41, 0x90, 0xbe, 0x01, 0x91, 0x93, 0x01, 0x92, + 0x0e, 0xc4, 0x54, 0x07, 0x01, 0x45, 0x49, 0xd8, 0x55, 0x07, 0x41, 0x43, + 0x27, 0x52, 0x4d, 0x07, 0x01, 0x43, 0x65, 0xe8, 0x4e, 0x07, 0x01, 0x43, + 0x8a, 0xe2, 0x4f, 0x07, 0x01, 0x47, 0x2a, 0xc4, 0x50, 0x07, 0x01, 0x45, + 0x4e, 0xd8, 0x51, 0x07, 0x01, 0x44, 0xfa, 0xe2, 0x52, 0x07, 0x01, 0x44, + 0x7e, 0xe3, 0x53, 0x07, 0x41, 0x43, 0xf9, 0xc3, 0x40, 0x07, 0x01, 0x43, + 0x66, 0xe2, 0x41, 0x07, 0x01, 0x43, 0x86, 0xe8, 0x42, 0x07, 0x01, 0x43, + 0x95, 0xe8, 0x43, 0x07, 0x01, 0x43, 0x02, 0xe3, 0x44, 0x07, 0x01, 0x43, + 0xdf, 0xce, 0x45, 0x07, 0x01, 0x43, 0xda, 0xd8, 0x46, 0x07, 0x01, 0x43, + 0x79, 0xb9, 0x47, 0x07, 0x01, 0x99, 0x01, 0xff, 0x42, 0x73, 0x00, 0x48, + 0x07, 0x01, 0x8d, 0x01, 0xff, 0x44, 0x6e, 0xe2, 0x49, 0x07, 0x01, 0x44, + 0xa2, 0xe2, 0x4a, 0x07, 0x01, 0x44, 0xd2, 0xe2, 0x4b, 0x07, 0x01, 0x44, + 0x56, 0xe3, 0x4c, 0x07, 0x41, 0x90, 0xbe, 0x01, 0x91, 0x93, 0x01, 0x92, 0x6d, 0x93, 0x5f, 0x94, 0x3d, 0x95, 0x17, 0x96, 0x01, 0xff, 0xd0, 0x32, 0x07, 0x01, 0xd1, 0x33, 0x07, 0x01, 0xd2, 0x34, 0x07, 0x01, 0xd3, 0x35, 0x07, 0x01, 0xd4, 0x36, 0x07, 0x41, 0xd1, 0x29, 0x07, 0x01, 0xd2, 0x2a, @@ -8588,16 +8589,16 @@ static const unsigned char uname2c_tree[210697] = { 0x01, 0xd6, 0xc0, 0x06, 0x41, 0xd1, 0xb3, 0x06, 0x01, 0xd2, 0xb4, 0x06, 0x01, 0xd3, 0xb5, 0x06, 0x01, 0xd4, 0xb6, 0x06, 0x01, 0xd5, 0xb7, 0x06, 0x01, 0xd6, 0xb8, 0x06, 0x01, 0xd8, 0xb9, 0x06, 0x01, 0xd9, 0xba, 0x06, - 0x41, 0x90, 0x39, 0x91, 0x01, 0xff, 0x45, 0x92, 0xd7, 0xaa, 0x06, 0x01, - 0x45, 0xba, 0xd7, 0xab, 0x06, 0x01, 0x45, 0xfb, 0xd7, 0xac, 0x06, 0x01, - 0x45, 0x28, 0xd8, 0xad, 0x06, 0x01, 0x45, 0x6e, 0xd8, 0xae, 0x06, 0x01, - 0x45, 0x82, 0xd8, 0xaf, 0x06, 0x01, 0x45, 0xaa, 0xd8, 0xb0, 0x06, 0x01, - 0x45, 0xd7, 0xd8, 0xb1, 0x06, 0x01, 0x45, 0x04, 0xd9, 0xb2, 0x06, 0x41, - 0x45, 0x92, 0xd7, 0xa0, 0x06, 0x01, 0x45, 0xba, 0xd7, 0xa1, 0x06, 0x01, - 0x45, 0xfb, 0xd7, 0xa2, 0x06, 0x01, 0x45, 0x28, 0xd8, 0xa3, 0x06, 0x01, - 0x45, 0x6e, 0xd8, 0xa4, 0x06, 0x01, 0x45, 0x82, 0xd8, 0xa5, 0x06, 0x01, - 0x45, 0xaa, 0xd8, 0xa6, 0x06, 0x01, 0x45, 0xd7, 0xd8, 0xa7, 0x06, 0x01, - 0x45, 0x04, 0xd9, 0xa8, 0x06, 0x01, 0x45, 0x45, 0xd9, 0xa9, 0x06, 0x41, + 0x41, 0x90, 0x39, 0x91, 0x01, 0xff, 0x45, 0xae, 0xd7, 0xaa, 0x06, 0x01, + 0x45, 0xd6, 0xd7, 0xab, 0x06, 0x01, 0x45, 0x17, 0xd8, 0xac, 0x06, 0x01, + 0x45, 0x44, 0xd8, 0xad, 0x06, 0x01, 0x45, 0x8a, 0xd8, 0xae, 0x06, 0x01, + 0x45, 0x9e, 0xd8, 0xaf, 0x06, 0x01, 0x45, 0xc6, 0xd8, 0xb0, 0x06, 0x01, + 0x45, 0xf3, 0xd8, 0xb1, 0x06, 0x01, 0x45, 0x20, 0xd9, 0xb2, 0x06, 0x41, + 0x45, 0xae, 0xd7, 0xa0, 0x06, 0x01, 0x45, 0xd6, 0xd7, 0xa1, 0x06, 0x01, + 0x45, 0x17, 0xd8, 0xa2, 0x06, 0x01, 0x45, 0x44, 0xd8, 0xa3, 0x06, 0x01, + 0x45, 0x8a, 0xd8, 0xa4, 0x06, 0x01, 0x45, 0x9e, 0xd8, 0xa5, 0x06, 0x01, + 0x45, 0xc6, 0xd8, 0xa6, 0x06, 0x01, 0x45, 0xf3, 0xd8, 0xa7, 0x06, 0x01, + 0x45, 0x20, 0xd9, 0xa8, 0x06, 0x01, 0x45, 0x61, 0xd9, 0xa9, 0x06, 0x41, 0x90, 0x94, 0x02, 0x91, 0xdf, 0x01, 0x92, 0xb4, 0x01, 0x93, 0x89, 0x01, 0x94, 0x5f, 0x95, 0x35, 0x96, 0x0b, 0x97, 0x01, 0xff, 0xd0, 0x9e, 0x06, 0x01, 0xd1, 0x9f, 0x06, 0x41, 0xd0, 0x94, 0x06, 0x01, 0xd1, 0x95, 0x06, @@ -8625,29 +8626,29 @@ static const unsigned char uname2c_tree[210697] = { 0x57, 0x06, 0x01, 0xd4, 0x58, 0x06, 0x01, 0xd5, 0x59, 0x06, 0x01, 0xd6, 0x5a, 0x06, 0x01, 0xd7, 0x5b, 0x06, 0x01, 0xd8, 0x5c, 0x06, 0x01, 0x99, 0x01, 0xff, 0xe1, 0x5d, 0x06, 0x01, 0xe2, 0x5e, 0x06, 0x01, 0xe3, 0x5f, - 0x06, 0x41, 0x46, 0x3f, 0xce, 0x47, 0x06, 0x01, 0x43, 0x61, 0xe8, 0x4a, - 0x06, 0x01, 0x43, 0x76, 0xe8, 0x4f, 0x06, 0x41, 0x44, 0x6b, 0x1e, 0x0a, - 0x00, 0x00, 0x0c, 0xbc, 0x88, 0x13, 0x49, 0x70, 0x1e, 0x28, 0x20, 0x00, - 0x4a, 0xa3, 0x37, 0x0b, 0x00, 0xc0, 0x00, 0x44, 0x2f, 0xaf, 0x8a, 0x00, + 0x06, 0x41, 0x46, 0x5b, 0xce, 0x47, 0x06, 0x01, 0x43, 0x7d, 0xe8, 0x4a, + 0x06, 0x01, 0x43, 0x92, 0xe8, 0x4f, 0x06, 0x41, 0x44, 0x6b, 0x1e, 0x0a, + 0x00, 0x00, 0x0c, 0xc3, 0x88, 0x13, 0x49, 0x70, 0x1e, 0x28, 0x20, 0x00, + 0x4a, 0xb8, 0x37, 0x0b, 0x00, 0xc0, 0x00, 0x44, 0x4b, 0xaf, 0x8a, 0x00, 0x40, 0x56, 0xbc, 0x31, 0x14, 0x2a, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x5c, 0xf9, 0x16, 0x12, 0x2a, 0x00, 0x5d, 0xa9, 0x14, 0x13, 0x2a, 0x40, - 0x03, 0xaa, 0xbf, 0x06, 0x53, 0x18, 0x45, 0xcf, 0x32, 0x40, 0x06, 0xf4, + 0x03, 0xc6, 0xbf, 0x06, 0x53, 0x2d, 0x45, 0xcf, 0x32, 0x40, 0x06, 0xf4, 0x05, 0xec, 0x02, 0x50, 0xad, 0x00, 0x44, 0x19, 0x00, 0x07, 0xf1, 0x04, 0xab, 0x01, 0x4d, 0xbd, 0x30, 0x45, 0x19, 0x00, 0xb3, 0x36, 0x05, 0x11, - 0x35, 0x01, 0xff, 0x06, 0xda, 0x02, 0x06, 0x4f, 0xc6, 0x63, 0x00, 0x19, + 0x35, 0x01, 0xff, 0x06, 0xda, 0x02, 0x06, 0x4f, 0xdb, 0x63, 0x00, 0x19, 0x40, 0xe1, 0x20, 0x19, 0x80, 0x1a, 0xe5, 0x27, 0x19, 0x80, 0x11, 0xe9, 0x21, 0x19, 0x00, 0xef, 0x28, 0x19, 0x80, 0x04, 0xf5, 0x22, 0x19, 0x40, 0xef, 0x25, 0x19, 0x40, 0xe5, 0x23, 0x19, 0x40, 0xe9, 0x24, 0x19, 0x00, 0xf5, 0x26, 0x19, 0x40, 0x04, 0xdc, 0x02, 0x51, 0x0c, 0x7d, 0x07, 0x17, - 0x10, 0x79, 0x61, 0x01, 0xff, 0x42, 0x71, 0x00, 0x2a, 0x19, 0x00, 0x42, + 0x10, 0x8e, 0x61, 0x01, 0xff, 0x42, 0x71, 0x00, 0x2a, 0x19, 0x00, 0x42, 0xa9, 0x01, 0x2b, 0x19, 0x00, 0x42, 0x20, 0x20, 0x29, 0x19, 0x40, 0x48, 0x5b, 0x14, 0x32, 0x19, 0x00, 0x42, 0x1b, 0x02, 0x30, 0x19, 0x00, 0x42, 0x74, 0x00, 0x38, 0x19, 0x00, 0x42, 0x6c, 0x00, 0x36, 0x19, 0x00, 0xae, 0x12, 0x42, 0xc1, 0x08, 0x35, 0x19, 0x00, 0x42, 0x71, 0x00, 0x37, 0x19, 0x00, 0x42, 0x12, 0x00, 0x33, 0x19, 0x40, 0xe1, 0x34, 0x19, 0x00, 0x42, - 0x24, 0x02, 0x31, 0x19, 0x40, 0x49, 0xa9, 0xb1, 0x3a, 0x19, 0x00, 0x43, - 0xb8, 0x1a, 0x40, 0x19, 0x00, 0x49, 0xc0, 0xb2, 0x39, 0x19, 0x00, 0x44, - 0x5e, 0xe7, 0x3b, 0x19, 0x40, 0xa2, 0xa9, 0x01, 0xa3, 0x9c, 0x01, 0xa4, + 0x24, 0x02, 0x31, 0x19, 0x40, 0x49, 0xc5, 0xb1, 0x3a, 0x19, 0x00, 0x43, + 0xb8, 0x1a, 0x40, 0x19, 0x00, 0x49, 0xdc, 0xb2, 0x39, 0x19, 0x00, 0x44, + 0x7a, 0xe7, 0x3b, 0x19, 0x40, 0xa2, 0xa9, 0x01, 0xa3, 0x9c, 0x01, 0xa4, 0x8f, 0x01, 0xa7, 0x7d, 0x42, 0x22, 0x00, 0x1c, 0x19, 0x00, 0xaa, 0x6b, 0xab, 0x5f, 0x42, 0x74, 0x00, 0x17, 0x19, 0x00, 0x42, 0x6c, 0x00, 0x14, 0x19, 0x00, 0xae, 0x47, 0xb0, 0x3b, 0x42, 0x71, 0x00, 0x16, 0x19, 0x00, @@ -8669,49 +8670,49 @@ static const unsigned char uname2c_tree[210697] = { 0x40, 0x44, 0x96, 0x1b, 0x4d, 0x19, 0x00, 0x42, 0x30, 0x27, 0x4c, 0x19, 0x40, 0x43, 0xd7, 0x04, 0x4b, 0x19, 0x00, 0x43, 0xfb, 0x05, 0x4a, 0x19, 0x40, 0x56, 0x19, 0x26, 0x72, 0xf6, 0x01, 0x02, 0xcb, 0x00, 0x01, 0xff, - 0x80, 0x14, 0x44, 0x37, 0x06, 0x07, 0x26, 0xc0, 0x00, 0x45, 0x38, 0xd7, - 0xf2, 0xf5, 0xc1, 0x00, 0x47, 0xac, 0x75, 0xf1, 0xf5, 0x41, 0x4a, 0xc1, - 0x9f, 0x75, 0xfa, 0x01, 0x4a, 0x1b, 0xa0, 0xf8, 0xf5, 0x01, 0x55, 0x9c, - 0x36, 0xbb, 0xf7, 0x01, 0xa6, 0x48, 0x4b, 0x1e, 0x5b, 0xa2, 0xf7, 0x01, + 0x80, 0x14, 0x44, 0x37, 0x06, 0x07, 0x26, 0xc0, 0x00, 0x45, 0x54, 0xd7, + 0xf2, 0xf5, 0xc1, 0x00, 0x47, 0xc1, 0x75, 0xf1, 0xf5, 0x41, 0x4a, 0xd4, + 0x9f, 0x75, 0xfa, 0x01, 0x4a, 0x2e, 0xa0, 0xf8, 0xf5, 0x01, 0x55, 0x9c, + 0x36, 0xbb, 0xf7, 0x01, 0xa6, 0x48, 0x4b, 0x33, 0x5b, 0xa2, 0xf7, 0x01, 0x64, 0x55, 0x08, 0x72, 0x27, 0x00, 0xb2, 0x2e, 0xb3, 0x1a, 0xb4, 0x0c, 0x4c, 0x32, 0x00, 0x58, 0x27, 0x00, 0x4c, 0x8a, 0x1d, 0x8e, 0xf7, 0x41, 0x57, 0x28, 0x2b, 0xc0, 0xf7, 0x01, 0x58, 0xb7, 0x28, 0xd2, 0xf7, 0x41, 0x46, 0x16, 0x17, 0xa9, 0xf7, 0x01, 0x44, 0xa3, 0x03, 0x91, 0x25, 0x00, - 0x52, 0x57, 0x4d, 0xb5, 0xf7, 0x41, 0x43, 0xaf, 0x15, 0x88, 0xf6, 0x01, + 0x52, 0x6c, 0x4d, 0xb5, 0xf7, 0x41, 0x43, 0xaf, 0x15, 0x88, 0xf6, 0x01, 0x64, 0x31, 0x08, 0x73, 0x27, 0x40, 0x04, 0xd7, 0x04, 0x11, 0x12, 0x1f, 0x14, 0x01, 0xff, 0x44, 0x31, 0x14, 0xcc, 0x2b, 0x00, 0x44, 0x8b, 0x11, 0xc4, 0xf7, 0x41, 0x52, 0xbd, 0x28, 0xc9, 0xf7, 0x01, 0x4f, 0xbd, 0x1a, - 0xaf, 0xf7, 0x41, 0x02, 0x9e, 0x12, 0xd6, 0x13, 0x44, 0x8e, 0xe4, 0xd2, + 0xaf, 0xf7, 0x41, 0x02, 0x9e, 0x12, 0xd6, 0x13, 0x44, 0xaa, 0xe4, 0xd2, 0xf4, 0x01, 0x02, 0xc5, 0x00, 0xc6, 0x05, 0xe7, 0xb5, 0xf9, 0x01, 0x43, 0xc1, 0x16, 0x4b, 0xf3, 0x01, 0xef, 0x4c, 0x26, 0x80, 0xb0, 0x05, 0x05, - 0xf4, 0xde, 0xd4, 0x01, 0x08, 0xee, 0x00, 0x06, 0x4a, 0x43, 0xaa, 0x9a, - 0xf3, 0x41, 0xa1, 0x87, 0x01, 0x0b, 0x8b, 0x35, 0x77, 0x4f, 0x3d, 0x65, + 0x10, 0xdf, 0xd4, 0x01, 0x08, 0xee, 0x00, 0x06, 0x4a, 0x56, 0xaa, 0x9a, + 0xf3, 0x41, 0xa1, 0x87, 0x01, 0x0b, 0x8b, 0x35, 0x77, 0x4f, 0x52, 0x65, 0xa6, 0x2a, 0x80, 0x6a, 0x58, 0x87, 0x25, 0xda, 0x22, 0x00, 0xaf, 0x1d, 0x44, 0xdb, 0x02, 0x3c, 0x00, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4d, - 0x73, 0x7a, 0x79, 0x2a, 0x00, 0x43, 0xc5, 0x06, 0xd6, 0x22, 0x00, 0x53, - 0xcd, 0x46, 0x7b, 0x2a, 0x40, 0x02, 0x18, 0x00, 0x06, 0x4c, 0xd4, 0x8e, + 0x7a, 0x7a, 0x79, 0x2a, 0x00, 0x43, 0xc5, 0x06, 0xd6, 0x22, 0x00, 0x53, + 0xe2, 0x46, 0x7b, 0x2a, 0x40, 0x02, 0x18, 0x00, 0x06, 0x4c, 0xe7, 0x8e, 0x66, 0x22, 0x40, 0x4b, 0x62, 0x1c, 0x85, 0x2a, 0x00, 0x03, 0x7b, 0x00, - 0x25, 0x4c, 0x87, 0x00, 0x76, 0x22, 0x00, 0x50, 0xd9, 0x60, 0x7d, 0x2a, + 0x25, 0x4c, 0x87, 0x00, 0x76, 0x22, 0x00, 0x50, 0xee, 0x60, 0x7d, 0x2a, 0xc0, 0x00, 0x0a, 0x4a, 0x37, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x81, 0x2a, 0x80, 0x06, 0x46, 0x01, 0x12, 0x7f, 0x2a, 0x40, 0x46, 0xc7, 0x00, 0x83, 0x2a, 0x40, 0x45, 0x75, 0x0b, 0x64, 0x22, 0x00, 0x4a, 0x96, 0x35, 0x72, 0x22, 0x40, 0x54, 0x93, 0x00, 0xa8, 0x2a, 0x40, 0x45, 0x75, 0x0b, 0x68, 0x22, 0x00, 0x4a, 0x96, 0x35, 0xe6, 0x22, 0x40, 0x05, 0x5d, 0x00, 0x11, - 0x03, 0x1b, 0x00, 0x01, 0xff, 0x4f, 0x0b, 0x6a, 0x89, 0x2a, 0x00, 0x58, + 0x03, 0x1b, 0x00, 0x01, 0xff, 0x4f, 0x20, 0x6a, 0x89, 0x2a, 0x00, 0x58, 0xdf, 0x27, 0x87, 0x2a, 0x40, 0x64, 0xe9, 0x07, 0x8b, 0x2a, 0x00, 0x64, 0x0d, 0x08, 0x91, 0x2a, 0x00, 0x4f, 0x67, 0x06, 0x76, 0x29, 0x00, 0xb3, - 0x01, 0xff, 0x07, 0xc6, 0xc7, 0x06, 0x73, 0x74, 0x00, 0x93, 0x2a, 0x40, + 0x01, 0xff, 0x07, 0xe2, 0xc7, 0x06, 0x73, 0x74, 0x00, 0x93, 0x2a, 0x40, 0x52, 0x81, 0x00, 0x8f, 0x2a, 0x00, 0x48, 0xf4, 0x25, 0x8d, 0x2a, 0x40, 0x0f, 0x54, 0x2f, 0xa8, 0x03, 0x06, 0xf4, 0x05, 0xe1, 0x02, 0x07, 0xf1, - 0x04, 0x6e, 0x0c, 0x8c, 0x14, 0x48, 0xb3, 0x25, 0x0b, 0x5b, 0x70, 0x01, + 0x04, 0x6e, 0x0c, 0x8c, 0x14, 0x48, 0xb3, 0x25, 0x0b, 0x70, 0x70, 0x01, 0xff, 0x42, 0xda, 0x10, 0x26, 0x1c, 0x00, 0xe5, 0x2c, 0x1c, 0x00, 0xe9, 0x27, 0x1c, 0x00, 0xef, 0x28, 0x1c, 0x80, 0x09, 0xf5, 0x2a, 0x1c, 0xc0, 0x00, 0xf5, 0x2b, 0x1c, 0x40, 0xef, 0x29, 0x1c, 0x40, 0x04, 0xdc, 0x02, - 0x11, 0x10, 0x79, 0x61, 0x01, 0xff, 0x42, 0x71, 0x00, 0x25, 0x1c, 0x00, - 0x42, 0x20, 0x20, 0x24, 0x1c, 0x40, 0x45, 0xab, 0x3a, 0x37, 0x1c, 0x00, - 0x43, 0xd0, 0x02, 0x36, 0x1c, 0x40, 0x46, 0x0c, 0xc3, 0x3d, 0x1c, 0x00, - 0x52, 0x53, 0x4e, 0x3c, 0x1c, 0x00, 0xb4, 0x01, 0xff, 0x45, 0x60, 0x4e, - 0x3b, 0x1c, 0x00, 0x45, 0x11, 0xe0, 0x3f, 0x1c, 0xc0, 0x00, 0x47, 0x0b, + 0x11, 0x10, 0x8e, 0x61, 0x01, 0xff, 0x42, 0x71, 0x00, 0x25, 0x1c, 0x00, + 0x42, 0x20, 0x20, 0x24, 0x1c, 0x40, 0x45, 0xc0, 0x3a, 0x37, 0x1c, 0x00, + 0x43, 0xd0, 0x02, 0x36, 0x1c, 0x40, 0x46, 0x28, 0xc3, 0x3d, 0x1c, 0x00, + 0x52, 0x68, 0x4e, 0x3c, 0x1c, 0x00, 0xb4, 0x01, 0xff, 0x45, 0x75, 0x4e, + 0x3b, 0x1c, 0x00, 0x45, 0x2d, 0xe0, 0x3f, 0x1c, 0xc0, 0x00, 0x47, 0x27, 0xc3, 0x3e, 0x1c, 0x40, 0xe1, 0x23, 0x1c, 0x00, 0xa2, 0xde, 0x01, 0xa3, 0xd1, 0x01, 0xa4, 0xbe, 0x01, 0xa6, 0xb1, 0x01, 0xa7, 0xa4, 0x01, 0xa8, 0x97, 0x01, 0x42, 0x77, 0x24, 0x08, 0x1c, 0x00, 0xab, 0x7f, 0x42, 0x74, @@ -8740,173 +8741,173 @@ static const unsigned char uname2c_tree[210697] = { 0x45, 0x1c, 0x00, 0x43, 0xfb, 0x05, 0x44, 0x1c, 0x40, 0xeb, 0x2d, 0x1c, 0x80, 0x1f, 0xec, 0x2f, 0x1c, 0x00, 0xed, 0x2e, 0x1c, 0x00, 0xee, 0x30, 0x1c, 0x80, 0x0c, 0xf0, 0x31, 0x1c, 0x00, 0xf2, 0x32, 0x1c, 0x00, 0xf4, - 0x33, 0x1c, 0x40, 0x46, 0xd9, 0xd6, 0x34, 0x1c, 0x40, 0x43, 0x1c, 0x01, - 0x35, 0x1c, 0x40, 0x44, 0xe2, 0xe6, 0x06, 0xf4, 0x41, 0x80, 0xaf, 0x07, + 0x33, 0x1c, 0x40, 0x46, 0xf5, 0xd6, 0x34, 0x1c, 0x40, 0x43, 0x1c, 0x01, + 0x35, 0x1c, 0x40, 0x44, 0xfe, 0xe6, 0x06, 0xf4, 0x41, 0x80, 0xaf, 0x07, 0x8d, 0xc2, 0x06, 0x06, 0xa9, 0x01, 0x01, 0xff, 0x45, 0xce, 0x00, 0x90, - 0x21, 0x80, 0xb1, 0x04, 0xa2, 0x92, 0x04, 0x50, 0x59, 0x5b, 0x3c, 0xf8, + 0x21, 0x80, 0xb1, 0x04, 0xa2, 0x92, 0x04, 0x50, 0x6e, 0x5b, 0x3c, 0xf8, 0x01, 0xa4, 0xd2, 0x03, 0xa6, 0xc3, 0x03, 0xa8, 0xc2, 0x02, 0x57, 0xc9, - 0x2b, 0xa4, 0xf8, 0x01, 0x51, 0xfc, 0x56, 0xfd, 0x21, 0x00, 0xb0, 0xa7, - 0x02, 0x4f, 0x46, 0x6b, 0x45, 0x2b, 0x00, 0xb2, 0x92, 0x02, 0xb3, 0xf8, - 0x01, 0xb4, 0x16, 0xb7, 0x01, 0xff, 0x49, 0x68, 0xad, 0x9c, 0x21, 0x00, + 0x2b, 0xa4, 0xf8, 0x01, 0x51, 0x11, 0x57, 0xfd, 0x21, 0x00, 0xb0, 0xa7, + 0x02, 0x4f, 0x5b, 0x6b, 0x45, 0x2b, 0x00, 0xb2, 0x92, 0x02, 0xb3, 0xf8, + 0x01, 0xb4, 0x16, 0xb7, 0x01, 0xff, 0x49, 0x7b, 0xad, 0x9c, 0x21, 0x00, 0x4a, 0xa2, 0x0e, 0xe6, 0x21, 0xc0, 0x00, 0x5a, 0x78, 0x1c, 0x94, 0xf8, - 0x41, 0x55, 0xe8, 0x38, 0xa2, 0xf8, 0x01, 0x02, 0x0d, 0x00, 0x51, 0x02, - 0x15, 0x02, 0x01, 0xff, 0x4d, 0x92, 0x78, 0x9e, 0x21, 0x00, 0x08, 0x09, - 0x02, 0x01, 0xff, 0x06, 0xce, 0x00, 0x06, 0x51, 0xa5, 0x58, 0x37, 0x2b, - 0x40, 0x48, 0x4d, 0xab, 0x36, 0x2b, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, + 0x41, 0x55, 0xfd, 0x38, 0xa2, 0xf8, 0x01, 0x02, 0x0d, 0x00, 0x51, 0x02, + 0x15, 0x02, 0x01, 0xff, 0x4d, 0x99, 0x78, 0x9e, 0x21, 0x00, 0x08, 0x09, + 0x02, 0x01, 0xff, 0x06, 0xce, 0x00, 0x06, 0x51, 0xba, 0x58, 0x37, 0x2b, + 0x40, 0x48, 0x60, 0xab, 0x36, 0x2b, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x56, 0xac, 0x2f, 0x35, 0x2b, 0x00, 0xb4, 0x06, 0x4f, 0xb3, 0x2f, 0x34, 0x2b, 0x40, 0x43, 0xaf, 0x15, 0x3b, 0x2b, 0x80, 0x06, 0x52, 0x34, 0x05, 0xec, 0x2b, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x56, 0xac, 0x2f, 0x3d, 0x2b, 0x00, 0x4f, 0xb3, 0x2f, 0x3c, 0x2b, 0x40, 0x05, 0x04, 0x02, 0x11, 0x04, 0x3a, 0x1b, 0x01, 0xff, 0x45, 0xce, 0x00, 0xda, 0x21, 0x00, 0x4a, - 0xac, 0x58, 0x0e, 0x29, 0x40, 0x4a, 0xe0, 0x01, 0x90, 0xf8, 0x01, 0x08, + 0xc1, 0x58, 0x0e, 0x29, 0x40, 0x4a, 0xe0, 0x01, 0x90, 0xf8, 0x01, 0x08, 0x09, 0x02, 0x01, 0xff, 0x45, 0xce, 0x00, 0x60, 0x2b, 0x80, 0x0c, 0x4c, - 0x40, 0x86, 0x6a, 0x2b, 0x00, 0x4d, 0x09, 0x80, 0x84, 0x2b, 0x40, 0x80, + 0x47, 0x86, 0x6a, 0x2b, 0x00, 0x4d, 0x10, 0x80, 0x84, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x65, 0x32, 0x07, 0x80, 0x2b, 0x00, 0x46, 0x0d, 0x13, 0x70, - 0x2b, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0xcb, 0x9f, 0x28, 0xf8, - 0x01, 0x07, 0x3b, 0x01, 0x28, 0x4b, 0x0e, 0x62, 0x2c, 0xf8, 0x01, 0x09, - 0x54, 0xb2, 0x12, 0x4c, 0x54, 0x8a, 0x24, 0xf8, 0x01, 0x4c, 0xc0, 0x8a, - 0x20, 0xf8, 0x01, 0x50, 0x09, 0x62, 0x30, 0xf8, 0x41, 0x49, 0xa5, 0x01, + 0x2b, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0xde, 0x9f, 0x28, 0xf8, + 0x01, 0x07, 0x3b, 0x01, 0x28, 0x4b, 0x23, 0x62, 0x2c, 0xf8, 0x01, 0x09, + 0x70, 0xb2, 0x12, 0x4c, 0x5b, 0x8a, 0x24, 0xf8, 0x01, 0x4c, 0xc7, 0x8a, + 0x20, 0xf8, 0x01, 0x50, 0x1e, 0x62, 0x30, 0xf8, 0x41, 0x49, 0xa5, 0x01, 0xa6, 0x2b, 0x00, 0x47, 0x50, 0x02, 0xa4, 0x2b, 0x40, 0x51, 0x4c, 0x04, - 0x7a, 0x2b, 0x00, 0x4f, 0xb3, 0x2f, 0x7a, 0x2b, 0x40, 0x4f, 0x8a, 0x60, - 0x50, 0xf8, 0x01, 0x02, 0x7c, 0x00, 0x01, 0xff, 0x4a, 0x42, 0x8c, 0x38, - 0xf8, 0x01, 0x4b, 0xb7, 0x75, 0xdc, 0x21, 0x40, 0x57, 0x6d, 0x2b, 0xa6, - 0xf8, 0x01, 0x45, 0x0c, 0xd5, 0x6c, 0xf6, 0x41, 0x4c, 0x0a, 0x80, 0xc7, - 0x21, 0x00, 0x4b, 0x1b, 0x9c, 0xf7, 0xfa, 0x41, 0xa1, 0x11, 0x05, 0x8d, - 0x13, 0x01, 0xff, 0x45, 0xce, 0x00, 0x44, 0xf8, 0x01, 0x50, 0x59, 0x5b, + 0x7a, 0x2b, 0x00, 0x4f, 0xb3, 0x2f, 0x7a, 0x2b, 0x40, 0x4f, 0x9f, 0x60, + 0x50, 0xf8, 0x01, 0x02, 0x7c, 0x00, 0x01, 0xff, 0x4a, 0x49, 0x8c, 0x38, + 0xf8, 0x01, 0x4b, 0xcc, 0x75, 0xdc, 0x21, 0x40, 0x57, 0x6d, 0x2b, 0xa6, + 0xf8, 0x01, 0x45, 0x28, 0xd5, 0x6c, 0xf6, 0x41, 0x4c, 0x11, 0x80, 0xc7, + 0x21, 0x00, 0x4b, 0x2e, 0x9c, 0xf7, 0xfa, 0x41, 0xa1, 0x11, 0x05, 0x8d, + 0x13, 0x01, 0xff, 0x45, 0xce, 0x00, 0x44, 0xf8, 0x01, 0x50, 0x6e, 0x5b, 0x40, 0xf8, 0x41, 0x42, 0x1b, 0x00, 0xf2, 0xfa, 0x01, 0x06, 0x97, 0x04, 0x01, 0xff, 0x57, 0x3c, 0x2c, 0xcb, 0x21, 0x00, 0x0a, 0x9d, 0x04, 0x01, 0xff, 0x04, 0xa5, 0x01, 0x31, 0x02, 0x50, 0x02, 0x01, 0xff, 0x80, 0x06, - 0x45, 0xa9, 0x01, 0xbc, 0x21, 0x40, 0x06, 0x5c, 0x00, 0x0c, 0x48, 0x4d, + 0x45, 0xa9, 0x01, 0xbc, 0x21, 0x40, 0x06, 0x5c, 0x00, 0x0c, 0x48, 0x60, 0xab, 0x5a, 0x29, 0x00, 0x46, 0x0d, 0x13, 0x52, 0x29, 0x40, 0xac, 0x06, 0x5f, 0x04, 0x10, 0x66, 0x29, 0x40, 0x5f, 0x4d, 0x05, 0x62, 0x29, 0x00, - 0x48, 0xbd, 0x64, 0x6a, 0x29, 0x40, 0x80, 0x06, 0x45, 0xa9, 0x01, 0xbd, - 0x21, 0x40, 0x67, 0x84, 0x04, 0x67, 0x29, 0x00, 0x4f, 0xb6, 0x64, 0x6b, - 0x29, 0x00, 0x48, 0x4d, 0xab, 0x5e, 0x29, 0x00, 0x46, 0x0d, 0x13, 0x56, - 0x29, 0x40, 0x50, 0x55, 0x54, 0x34, 0xf8, 0x01, 0x60, 0x8c, 0x0e, 0xaa, - 0xf8, 0x41, 0x4b, 0x41, 0x86, 0xe0, 0x21, 0x00, 0x06, 0x3c, 0x01, 0x01, - 0xff, 0x45, 0xce, 0x00, 0xd0, 0x21, 0x80, 0x06, 0x4a, 0xac, 0x58, 0x0c, - 0x29, 0x40, 0x80, 0x06, 0x45, 0xad, 0x15, 0x1b, 0x29, 0x40, 0x48, 0x4d, + 0x48, 0xd2, 0x64, 0x6a, 0x29, 0x40, 0x80, 0x06, 0x45, 0xa9, 0x01, 0xbd, + 0x21, 0x40, 0x67, 0x84, 0x04, 0x67, 0x29, 0x00, 0x4f, 0xcb, 0x64, 0x6b, + 0x29, 0x00, 0x48, 0x60, 0xab, 0x5e, 0x29, 0x00, 0x46, 0x0d, 0x13, 0x56, + 0x29, 0x40, 0x50, 0x6a, 0x54, 0x34, 0xf8, 0x01, 0x60, 0x8c, 0x0e, 0xaa, + 0xf8, 0x41, 0x4b, 0x48, 0x86, 0xe0, 0x21, 0x00, 0x06, 0x3c, 0x01, 0x01, + 0xff, 0x45, 0xce, 0x00, 0xd0, 0x21, 0x80, 0x06, 0x4a, 0xc1, 0x58, 0x0c, + 0x29, 0x40, 0x80, 0x06, 0x45, 0xad, 0x15, 0x1b, 0x29, 0x40, 0x48, 0x60, 0xab, 0x06, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x46, 0x57, 0x04, 0xcd, 0x21, 0x00, 0x4f, 0xb3, 0x2f, 0x02, 0x29, 0x40, 0x5f, 0x2b, 0x0f, 0xa8, 0xf8, 0x01, 0x05, 0x1d, 0x07, 0x06, 0x58, 0x67, 0x27, 0xa0, 0xf8, - 0x41, 0x45, 0xce, 0x00, 0x05, 0x2b, 0x00, 0x53, 0x50, 0x43, 0x88, 0x2b, + 0x41, 0x45, 0xce, 0x00, 0x05, 0x2b, 0x00, 0x53, 0x65, 0x43, 0x88, 0x2b, 0x40, 0x80, 0x06, 0x45, 0xad, 0x15, 0x19, 0x29, 0x40, 0xa1, 0xcd, 0x01, - 0x48, 0x4d, 0xab, 0xa4, 0x21, 0x80, 0xbf, 0x01, 0x55, 0xf7, 0x12, 0xc6, + 0x48, 0x60, 0xab, 0xa4, 0x21, 0x80, 0xbf, 0x01, 0x55, 0xf7, 0x12, 0xc6, 0x21, 0x00, 0xb4, 0x8a, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0x02, 0x3b, 0x01, 0x75, 0x55, 0xd5, 0x01, 0x14, 0xf8, 0x01, 0x44, 0x04, 0x0d, 0xa9, - 0x21, 0x00, 0xac, 0x5b, 0x59, 0x47, 0x22, 0x04, 0xf8, 0x01, 0x4c, 0x38, - 0x8b, 0x98, 0xf8, 0x01, 0x4a, 0xbf, 0xa6, 0x46, 0x29, 0x00, 0xb3, 0x31, + 0x21, 0x00, 0xac, 0x5b, 0x59, 0x47, 0x22, 0x04, 0xf8, 0x01, 0x4c, 0x3f, + 0x8b, 0x98, 0xf8, 0x01, 0x4a, 0xd2, 0xa6, 0x46, 0x29, 0x00, 0xb3, 0x31, 0xb4, 0x06, 0x4f, 0xb3, 0x2f, 0xf7, 0x21, 0x40, 0x43, 0xaf, 0x15, 0xa2, 0x21, 0x80, 0x11, 0x03, 0xc4, 0x0a, 0x01, 0xff, 0x49, 0xa5, 0x01, 0x10, 0x2b, 0x00, 0x47, 0x50, 0x02, 0x11, 0x2b, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x56, 0xac, 0x2f, 0x3a, 0x2b, 0x00, 0x4f, 0xb3, 0x2f, 0x39, 0x2b, 0x40, 0x05, 0x3d, 0x06, 0x06, 0x45, 0x58, 0x04, 0x9a, 0x21, 0x40, 0x55, 0xd5, 0x01, 0x10, 0xf8, 0x01, 0x52, 0x33, 0x05, 0x00, 0xf8, 0x41, 0x57, - 0x78, 0x26, 0x08, 0xf8, 0x01, 0x43, 0x47, 0x46, 0xab, 0x21, 0x40, 0x49, - 0x71, 0xb6, 0x38, 0x2b, 0x00, 0x54, 0xae, 0x2f, 0xfa, 0x21, 0x40, 0x07, + 0x78, 0x26, 0x08, 0xf8, 0x01, 0x43, 0x5c, 0x46, 0xab, 0x21, 0x40, 0x49, + 0x8d, 0xb6, 0x38, 0x2b, 0x00, 0x54, 0xae, 0x2f, 0xfa, 0x21, 0x40, 0x07, 0xff, 0x27, 0x18, 0x03, 0x0e, 0x13, 0x01, 0xff, 0x42, 0x17, 0x00, 0xe4, - 0x21, 0x80, 0x06, 0x4c, 0xb1, 0x51, 0x1d, 0x29, 0x40, 0x5d, 0xf6, 0x12, + 0x21, 0x80, 0x06, 0x4c, 0xc6, 0x51, 0x1d, 0x29, 0x40, 0x5d, 0xf6, 0x12, 0xb9, 0x21, 0x40, 0x49, 0xec, 0x00, 0x77, 0x29, 0x00, 0x46, 0xf3, 0x10, - 0x7a, 0x29, 0x00, 0xf8, 0x3e, 0x2b, 0x40, 0x51, 0xac, 0x51, 0x1f, 0x29, + 0x7a, 0x29, 0x00, 0xf8, 0x3e, 0x2b, 0x40, 0x51, 0xc1, 0x51, 0x1f, 0x29, 0x40, 0x05, 0x5d, 0x00, 0x06, 0x63, 0xba, 0x09, 0xb5, 0xfb, 0x41, 0x4f, - 0x3e, 0x64, 0x4a, 0x2b, 0x00, 0x08, 0xa0, 0x6b, 0x0c, 0x56, 0x1c, 0x33, - 0x43, 0x29, 0x00, 0x4e, 0xf9, 0x39, 0x73, 0x29, 0x40, 0x4f, 0x3e, 0x64, - 0x42, 0x2b, 0x00, 0x4e, 0xf9, 0x39, 0x4b, 0x2b, 0x40, 0x07, 0x43, 0x54, + 0x53, 0x64, 0x4a, 0x2b, 0x00, 0x08, 0xb5, 0x6b, 0x0c, 0x56, 0x1c, 0x33, + 0x43, 0x29, 0x00, 0x4e, 0x0e, 0x3a, 0x73, 0x29, 0x40, 0x4f, 0x53, 0x64, + 0x42, 0x2b, 0x00, 0x4e, 0x0e, 0x3a, 0x4b, 0x2b, 0x40, 0x07, 0x58, 0x54, 0x4d, 0x5b, 0x6d, 0x19, 0xe6, 0x26, 0x00, 0x09, 0x9c, 0x01, 0x2b, 0xb3, - 0x1d, 0x09, 0x59, 0x3f, 0x01, 0xff, 0x49, 0x21, 0xaf, 0x2a, 0x20, 0x00, + 0x1d, 0x09, 0x6e, 0x3f, 0x01, 0xff, 0x49, 0x3d, 0xaf, 0x2a, 0x20, 0x00, 0x47, 0xe0, 0x02, 0x66, 0x20, 0x00, 0x44, 0xb9, 0x00, 0x0e, 0x20, 0x00, - 0x48, 0xd5, 0xbf, 0x2d, 0x20, 0x40, 0x5c, 0xfd, 0x15, 0xaa, 0x27, 0x00, + 0x48, 0xf1, 0xbf, 0x2d, 0x20, 0x40, 0x5c, 0xfd, 0x15, 0xaa, 0x27, 0x00, 0x5b, 0xa3, 0x19, 0x39, 0x29, 0x40, 0x4d, 0x96, 0x0d, 0x29, 0x23, 0x00, - 0x54, 0x98, 0x3c, 0xfc, 0x29, 0x00, 0x5b, 0xb0, 0x18, 0xab, 0x00, 0x00, - 0x50, 0xa9, 0x5e, 0x0d, 0xf5, 0x41, 0x56, 0xfc, 0x2e, 0x8e, 0x05, 0x00, - 0x44, 0xef, 0xc0, 0x1b, 0xf9, 0x01, 0x4b, 0xc6, 0x9a, 0xd6, 0x0f, 0xc0, - 0x00, 0x4a, 0x7e, 0x53, 0xd8, 0x0f, 0x40, 0xa1, 0xe0, 0x05, 0xa2, 0xa7, + 0x54, 0xad, 0x3c, 0xfc, 0x29, 0x00, 0x5b, 0xb0, 0x18, 0xab, 0x00, 0x00, + 0x50, 0xbe, 0x5e, 0x0d, 0xf5, 0x41, 0x56, 0xfc, 0x2e, 0x8e, 0x05, 0x00, + 0x44, 0x0b, 0xc1, 0x1b, 0xf9, 0x01, 0x4b, 0xd9, 0x9a, 0xd6, 0x0f, 0xc0, + 0x00, 0x4a, 0x93, 0x53, 0xd8, 0x0f, 0x40, 0xa1, 0xe0, 0x05, 0xa2, 0xa7, 0x05, 0xa3, 0xf6, 0x04, 0x02, 0x3b, 0x01, 0xce, 0x04, 0xa6, 0xb7, 0x04, - 0x02, 0x22, 0x00, 0xcf, 0x03, 0xac, 0xc0, 0x03, 0x48, 0x7a, 0x70, 0xdc, + 0x02, 0x22, 0x00, 0xcf, 0x03, 0xac, 0xc0, 0x03, 0x48, 0x8f, 0x70, 0xdc, 0x27, 0x00, 0x60, 0x2c, 0x0e, 0xc9, 0x22, 0x00, 0xaf, 0x9b, 0x03, 0x4b, 0x70, 0x1f, 0x28, 0x00, 0x80, 0xfe, 0x02, 0xb2, 0x8a, 0x02, 0xb3, 0x90, 0x01, 0xb4, 0x49, 0x0a, 0x32, 0x00, 0x39, 0xb7, 0x01, 0xff, 0x05, 0xae, - 0x02, 0x0c, 0x4b, 0x05, 0x8f, 0xd8, 0x29, 0x00, 0x4b, 0xea, 0x99, 0x8e, + 0x02, 0x0c, 0x4b, 0x18, 0x8f, 0xd8, 0x29, 0x00, 0x4b, 0xfd, 0x99, 0x8e, 0xf5, 0x41, 0xa3, 0x18, 0x52, 0x85, 0x24, 0x16, 0x30, 0x00, 0x4b, 0x70, 0x1f, 0x85, 0x29, 0x00, 0x4e, 0xe1, 0x23, 0x1a, 0x30, 0x00, 0x56, 0x36, - 0x08, 0x18, 0x30, 0x40, 0x4d, 0xe7, 0x62, 0x0e, 0x30, 0x00, 0x4c, 0x89, - 0x08, 0x83, 0x29, 0x40, 0x4d, 0x96, 0x79, 0x20, 0x2e, 0x00, 0x47, 0x19, + 0x08, 0x18, 0x30, 0x40, 0x4d, 0xfc, 0x62, 0x0e, 0x30, 0x00, 0x4c, 0x89, + 0x08, 0x83, 0x29, 0x40, 0x4d, 0x9d, 0x79, 0x20, 0x2e, 0x00, 0x47, 0x35, 0xca, 0xb8, 0x23, 0x40, 0x43, 0x1e, 0x07, 0xa3, 0x22, 0x00, 0xa8, 0x20, - 0x55, 0x37, 0x08, 0x14, 0x30, 0x00, 0xb2, 0x01, 0xff, 0x53, 0xb8, 0x42, + 0x55, 0x37, 0x08, 0x14, 0x30, 0x00, 0xb2, 0x01, 0xff, 0x53, 0xcd, 0x42, 0x09, 0x2e, 0x00, 0x04, 0x1b, 0x01, 0x01, 0xff, 0x56, 0x38, 0x31, 0xcf, 0x29, 0x00, 0x56, 0x07, 0x1b, 0x6c, 0xfb, 0x41, 0x5e, 0xce, 0x0e, 0xc1, - 0xfb, 0x01, 0x4c, 0xec, 0x8b, 0xec, 0xf5, 0x01, 0x04, 0x26, 0x01, 0x01, - 0xff, 0x4d, 0x7e, 0x47, 0x8d, 0x25, 0x00, 0x4e, 0x2a, 0x01, 0x8a, 0x25, + 0xfb, 0x01, 0x4c, 0xf3, 0x8b, 0xec, 0xf5, 0x01, 0x04, 0x26, 0x01, 0x01, + 0xff, 0x4d, 0x93, 0x47, 0x8d, 0x25, 0x00, 0x4e, 0x2a, 0x01, 0x8a, 0x25, 0x40, 0x55, 0xa4, 0x34, 0xc5, 0x27, 0x00, 0xa5, 0x63, 0xa9, 0x55, 0x4c, - 0xa7, 0x75, 0xe8, 0xf5, 0x01, 0x4d, 0xe2, 0x23, 0x5b, 0x00, 0x80, 0x06, - 0x53, 0xc4, 0x23, 0x02, 0x2e, 0x40, 0x80, 0x01, 0xff, 0x49, 0x19, 0x53, - 0xa2, 0x23, 0x00, 0x4c, 0xdc, 0x89, 0xa3, 0x23, 0x00, 0x4c, 0x98, 0x8e, - 0xa1, 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4d, 0x29, 0x7b, 0x57, - 0x2e, 0x00, 0x45, 0x9e, 0x79, 0x45, 0x20, 0x00, 0x46, 0x57, 0x04, 0x55, - 0x2e, 0x00, 0x08, 0x7d, 0xc1, 0x06, 0x48, 0x3b, 0x54, 0x8b, 0x29, 0x40, - 0x4d, 0x32, 0x7a, 0x8f, 0x29, 0x00, 0x4a, 0x35, 0xa9, 0x8d, 0x29, 0x40, - 0x50, 0xa9, 0x5b, 0x26, 0x2e, 0x00, 0x53, 0x56, 0x0a, 0x18, 0x20, 0x40, - 0x50, 0x3c, 0x0e, 0xcb, 0x22, 0x00, 0x51, 0x7a, 0x47, 0x89, 0x25, 0x40, + 0xbc, 0x75, 0xe8, 0xf5, 0x01, 0x4d, 0xe2, 0x23, 0x5b, 0x00, 0x80, 0x06, + 0x53, 0xc4, 0x23, 0x02, 0x2e, 0x40, 0x80, 0x01, 0xff, 0x49, 0x2e, 0x53, + 0xa2, 0x23, 0x00, 0x4c, 0xe3, 0x89, 0xa3, 0x23, 0x00, 0x4c, 0xab, 0x8e, + 0xa1, 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4d, 0x30, 0x7b, 0x57, + 0x2e, 0x00, 0x45, 0xa5, 0x79, 0x45, 0x20, 0x00, 0x46, 0x57, 0x04, 0x55, + 0x2e, 0x00, 0x08, 0x99, 0xc1, 0x06, 0x48, 0x50, 0x54, 0x8b, 0x29, 0x40, + 0x4d, 0x39, 0x7a, 0x8f, 0x29, 0x00, 0x4a, 0x48, 0xa9, 0x8d, 0x29, 0x40, + 0x50, 0xbe, 0x5b, 0x26, 0x2e, 0x00, 0x53, 0x56, 0x0a, 0x18, 0x20, 0x40, + 0x50, 0x3c, 0x0e, 0xcb, 0x22, 0x00, 0x51, 0x8f, 0x47, 0x89, 0x25, 0x40, 0x56, 0xb0, 0x2c, 0x0c, 0x2e, 0x00, 0x05, 0xc9, 0x00, 0x01, 0xff, 0x45, - 0xce, 0x00, 0x94, 0x21, 0x80, 0x3f, 0x4b, 0x9f, 0x91, 0x0c, 0x2b, 0x00, - 0x4c, 0xa0, 0x86, 0xd4, 0x21, 0x80, 0x21, 0x51, 0xfc, 0x56, 0xff, 0x21, - 0x00, 0x50, 0x89, 0x60, 0x58, 0xf8, 0x01, 0x55, 0x01, 0x02, 0x64, 0x2b, - 0x00, 0xb7, 0x01, 0xff, 0x49, 0x68, 0xad, 0xad, 0x21, 0x00, 0x4a, 0xa2, + 0xce, 0x00, 0x94, 0x21, 0x80, 0x3f, 0x4b, 0xb2, 0x91, 0x0c, 0x2b, 0x00, + 0x4c, 0xa7, 0x86, 0xd4, 0x21, 0x80, 0x21, 0x51, 0x11, 0x57, 0xff, 0x21, + 0x00, 0x50, 0x9e, 0x60, 0x58, 0xf8, 0x01, 0x55, 0x01, 0x02, 0x64, 0x2b, + 0x00, 0xb7, 0x01, 0xff, 0x49, 0x7b, 0xad, 0xad, 0x21, 0x00, 0x4a, 0xa2, 0x0e, 0x04, 0x2b, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x57, 0x04, 0xce, 0x21, 0x00, 0x4f, 0xb3, 0x2f, 0x04, 0x29, 0x40, 0x80, 0x01, 0xff, - 0x54, 0xe4, 0x40, 0x48, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x56, + 0x54, 0xf9, 0x40, 0x48, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x56, 0xac, 0x2f, 0xfc, 0x21, 0x00, 0x46, 0x57, 0x04, 0xae, 0x21, 0x00, 0x4f, - 0xb3, 0x2f, 0xf9, 0x21, 0x40, 0x80, 0x01, 0xff, 0x49, 0x19, 0x53, 0x9c, - 0x23, 0x00, 0x4a, 0xc1, 0xa4, 0x9d, 0x23, 0x00, 0x4a, 0xf3, 0xa9, 0x9b, - 0x23, 0x40, 0x03, 0xf2, 0x07, 0x06, 0x49, 0x98, 0xa6, 0xd5, 0x27, 0x40, + 0xb3, 0x2f, 0xf9, 0x21, 0x40, 0x80, 0x01, 0xff, 0x49, 0x2e, 0x53, 0x9c, + 0x23, 0x00, 0x4a, 0xd4, 0xa4, 0x9d, 0x23, 0x00, 0x4a, 0x06, 0xaa, 0x9b, + 0x23, 0x40, 0x03, 0xf2, 0x07, 0x06, 0x49, 0xab, 0xa6, 0xd5, 0x27, 0x40, 0x4c, 0xd1, 0x09, 0x8f, 0x25, 0x00, 0x4d, 0x10, 0x1b, 0x8e, 0x25, 0x40, - 0x55, 0x7b, 0x31, 0x1c, 0x2e, 0x00, 0x46, 0x4f, 0xd6, 0xc5, 0xf6, 0x41, - 0x03, 0x24, 0x00, 0x06, 0x55, 0x94, 0x38, 0x7b, 0xf5, 0x41, 0x02, 0x33, - 0x01, 0x3f, 0x46, 0x00, 0x04, 0x07, 0xf9, 0x81, 0x18, 0x46, 0x2b, 0xa3, + 0x55, 0x7b, 0x31, 0x1c, 0x2e, 0x00, 0x46, 0x6b, 0xd6, 0xc5, 0xf6, 0x41, + 0x03, 0x24, 0x00, 0x06, 0x55, 0xa9, 0x38, 0x7b, 0xf5, 0x41, 0x02, 0x33, + 0x01, 0x3f, 0x46, 0x00, 0x04, 0x07, 0xf9, 0x81, 0x18, 0x46, 0x3e, 0xa3, 0xb9, 0xfb, 0x01, 0x69, 0x93, 0x03, 0x94, 0xfb, 0x01, 0x4c, 0x9b, 0x03, - 0x8c, 0xfb, 0x01, 0x4b, 0x2c, 0x9a, 0xb2, 0xfb, 0x41, 0x06, 0x50, 0x00, - 0x01, 0xff, 0x43, 0xc5, 0x06, 0x06, 0xf9, 0x01, 0x49, 0x75, 0x41, 0x03, + 0x8c, 0xfb, 0x01, 0x4b, 0x3f, 0x9a, 0xb2, 0xfb, 0x41, 0x06, 0x50, 0x00, + 0x01, 0xff, 0x43, 0xc5, 0x06, 0x06, 0xf9, 0x01, 0x49, 0x8a, 0x41, 0x03, 0xf9, 0x01, 0xb4, 0x01, 0xff, 0x49, 0x83, 0x0e, 0x04, 0xf9, 0x01, 0x47, 0xc2, 0x06, 0x05, 0xf9, 0x41, 0x04, 0x1e, 0x07, 0x06, 0x43, 0x35, 0x01, 0x8c, 0x25, 0x40, 0x46, 0x00, 0x04, 0xd6, 0x25, 0x00, 0x44, 0x8b, 0x11, 0xe8, 0x2b, 0x40, 0xa9, 0x06, 0x44, 0xbd, 0x21, 0x0a, 0x23, 0x40, 0x47, - 0xbc, 0xaf, 0x7c, 0x29, 0x00, 0x50, 0x15, 0x4c, 0x8b, 0x25, 0x40, 0x59, + 0xd8, 0xaf, 0x7c, 0x29, 0x00, 0x50, 0x2a, 0x4c, 0x8b, 0x25, 0x40, 0x59, 0xbe, 0x23, 0x04, 0x2e, 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x4d, 0x96, 0x0d, 0x0a, 0x30, 0x00, 0x4b, 0x70, 0x1f, 0x28, 0x2e, 0x00, 0x4e, 0x1e, - 0x04, 0x1c, 0x20, 0x00, 0x4c, 0x04, 0x8f, 0xda, 0x29, 0x40, 0x46, 0xde, - 0xba, 0x08, 0x23, 0x00, 0x4b, 0xb1, 0x96, 0xdc, 0x26, 0x00, 0x4d, 0xe7, + 0x04, 0x1c, 0x20, 0x00, 0x4c, 0x17, 0x8f, 0xda, 0x29, 0x40, 0x46, 0xfa, + 0xba, 0x08, 0x23, 0x00, 0x4b, 0xc4, 0x96, 0xdc, 0x26, 0x00, 0x4d, 0xfc, 0x62, 0x0c, 0x30, 0x00, 0x4c, 0x89, 0x08, 0x7b, 0x00, 0xc0, 0x00, 0x80, - 0x01, 0xff, 0x4a, 0xc1, 0xa4, 0xa9, 0x23, 0x00, 0x4c, 0x6c, 0x8a, 0xa8, - 0x23, 0x00, 0x4a, 0xf3, 0xa9, 0xa7, 0x23, 0x40, 0x04, 0xa3, 0x04, 0x11, + 0x01, 0xff, 0x4a, 0xd4, 0xa4, 0xa9, 0x23, 0x00, 0x4c, 0x73, 0x8a, 0xa8, + 0x23, 0x00, 0x4a, 0x06, 0xaa, 0xa7, 0x23, 0x40, 0x04, 0xa3, 0x04, 0x11, 0x05, 0x1d, 0x07, 0x01, 0xff, 0x52, 0x85, 0x24, 0x10, 0x30, 0x00, 0x56, - 0x36, 0x08, 0x97, 0x29, 0x40, 0x10, 0x29, 0x5c, 0x11, 0x0e, 0x2e, 0x77, - 0x01, 0xff, 0x4c, 0xac, 0x86, 0x4a, 0x29, 0x00, 0x4a, 0xd5, 0xa9, 0x4e, - 0x29, 0x40, 0x4c, 0xac, 0x86, 0x50, 0x29, 0x00, 0x4a, 0xd5, 0xa9, 0x4b, + 0x36, 0x08, 0x97, 0x29, 0x40, 0x10, 0x3e, 0x5c, 0x11, 0x0e, 0x35, 0x77, + 0x01, 0xff, 0x4c, 0xb3, 0x86, 0x4a, 0x29, 0x00, 0x4a, 0xe8, 0xa9, 0x4e, + 0x29, 0x40, 0x4c, 0xb3, 0x86, 0x50, 0x29, 0x00, 0x4a, 0xe8, 0xa9, 0x4b, 0x29, 0x40, 0xae, 0x1a, 0xb2, 0x01, 0xff, 0x53, 0x25, 0x1b, 0x93, 0x29, - 0x00, 0x09, 0x2a, 0x05, 0x01, 0xff, 0x4c, 0xe0, 0x85, 0x32, 0x2b, 0x00, + 0x00, 0x09, 0x2a, 0x05, 0x01, 0xff, 0x4c, 0xe7, 0x85, 0x32, 0x2b, 0x00, 0x4c, 0x5e, 0x13, 0x30, 0x2b, 0x40, 0x02, 0x06, 0x00, 0x16, 0xa7, 0x01, - 0xff, 0x49, 0x3c, 0xaf, 0xee, 0xf5, 0x01, 0x4a, 0x99, 0x0d, 0x08, 0x30, + 0xff, 0x49, 0x58, 0xaf, 0xee, 0xf5, 0x01, 0x4a, 0x99, 0x0d, 0x08, 0x30, 0xc0, 0x00, 0x49, 0x4a, 0x37, 0x91, 0x29, 0x40, 0x06, 0x13, 0x01, 0x2a, 0x06, 0xc8, 0x00, 0x11, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x69, 0x6a, 0x03, - 0x6b, 0xfb, 0x01, 0x50, 0xcd, 0x09, 0x7d, 0xfb, 0x41, 0x50, 0x09, 0x5c, + 0x6b, 0xfb, 0x01, 0x50, 0xcd, 0x09, 0x7d, 0xfb, 0x41, 0x50, 0x1e, 0x5c, 0xda, 0x27, 0x00, 0xb4, 0x01, 0xff, 0x43, 0x1e, 0x07, 0xdb, 0x27, 0x00, - 0x54, 0x24, 0x3a, 0x9b, 0xfb, 0x41, 0x69, 0x6a, 0x03, 0x69, 0xfb, 0x01, - 0x50, 0xcd, 0x09, 0x7c, 0xfb, 0x41, 0x53, 0xfa, 0x41, 0x43, 0xf3, 0x01, - 0x47, 0x6f, 0xcd, 0x6c, 0xf9, 0x41, 0xa2, 0xea, 0x47, 0x55, 0xa0, 0x35, - 0x4d, 0xf9, 0x01, 0xa4, 0xd5, 0x47, 0x4a, 0xb1, 0xa5, 0x01, 0x00, 0x0e, - 0x02, 0x7b, 0x02, 0xf3, 0x42, 0xb2, 0x92, 0x41, 0x4f, 0x81, 0x6c, 0x3e, + 0x54, 0x39, 0x3a, 0x9b, 0xfb, 0x41, 0x69, 0x6a, 0x03, 0x69, 0xfb, 0x01, + 0x50, 0xcd, 0x09, 0x7c, 0xfb, 0x41, 0x53, 0x0f, 0x42, 0x43, 0xf3, 0x01, + 0x47, 0x8b, 0xcd, 0x6c, 0xf9, 0x41, 0xa2, 0xea, 0x47, 0x55, 0xa0, 0x35, + 0x4d, 0xf9, 0x01, 0xa4, 0xd5, 0x47, 0x4a, 0xc4, 0xa5, 0x01, 0x00, 0x0e, + 0x02, 0x7b, 0x02, 0xf3, 0x42, 0xb2, 0x92, 0x41, 0x4f, 0x96, 0x6c, 0x3e, 0x26, 0x80, 0xfb, 0x40, 0x04, 0xe5, 0x04, 0x01, 0xff, 0xa3, 0xbc, 0x28, - 0x12, 0xcb, 0x4b, 0x91, 0x28, 0x07, 0xf1, 0x04, 0xf0, 0x24, 0xb3, 0x01, + 0x12, 0xe0, 0x4b, 0x91, 0x28, 0x07, 0xf1, 0x04, 0xf0, 0x24, 0xb3, 0x01, 0xff, 0x05, 0x3d, 0x06, 0x50, 0x16, 0x8a, 0x33, 0x01, 0xff, 0xe1, 0x90, 0x20, 0x00, 0xe5, 0x91, 0x20, 0x00, 0xe8, 0x95, 0x20, 0x00, 0xe9, 0x62, 0x1d, 0x00, 0xea, 0x7c, 0x2c, 0x00, 0xeb, 0x96, 0x20, 0x00, 0xec, 0x97, 0x20, 0x00, 0xed, 0x98, 0x20, 0x00, 0xee, 0x99, 0x20, 0x00, 0xef, 0x92, 0x20, 0x00, 0xf0, 0x9a, 0x20, 0x00, 0xf2, 0x63, 0x1d, 0x00, 0xf3, 0x9b, 0x20, 0x80, 0x10, 0xf4, 0x9c, 0x20, 0x00, 0xf5, 0x64, 0x1d, 0x00, 0xf6, - 0x65, 0x1d, 0x00, 0xf8, 0x93, 0x20, 0x40, 0x44, 0xec, 0x74, 0x94, 0x20, + 0x65, 0x1d, 0x00, 0xf8, 0x93, 0x20, 0x40, 0x44, 0x01, 0x75, 0x94, 0x20, 0x40, 0x0f, 0xe9, 0x04, 0x88, 0x24, 0xac, 0x01, 0xff, 0x06, 0xf2, 0x04, - 0x34, 0x08, 0x35, 0x1d, 0x01, 0xff, 0xa6, 0x18, 0x42, 0x84, 0xbd, 0x33, - 0x01, 0x00, 0x48, 0x05, 0xbe, 0x05, 0xfb, 0x00, 0x42, 0xca, 0x4b, 0x53, + 0x34, 0x08, 0x35, 0x1d, 0x01, 0xff, 0xa6, 0x18, 0x42, 0xa0, 0xbd, 0x33, + 0x01, 0x00, 0x48, 0x21, 0xbe, 0x05, 0xfb, 0x00, 0x42, 0xdf, 0x4b, 0x53, 0x01, 0x00, 0x42, 0x60, 0x01, 0x06, 0xfb, 0x40, 0xe6, 0x00, 0xfb, 0x80, 0x08, 0xe9, 0x01, 0xfb, 0x00, 0xec, 0x02, 0xfb, 0x40, 0xe9, 0x03, 0xfb, 0x00, 0xec, 0x04, 0xfb, 0x40, 0xe1, 0x61, 0x00, 0x80, 0x90, 0x21, 0xe2, @@ -8924,380 +8925,380 @@ static const unsigned char uname2c_tree[210697] = { 0x78, 0x00, 0x80, 0xd7, 0x01, 0xf9, 0x79, 0x00, 0x80, 0x6a, 0xfa, 0x7a, 0x00, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0x7a, 0x01, 0x00, 0xa3, 0x46, 0xa4, 0x2d, 0x44, 0x04, 0x0d, 0x25, 0x02, 0x00, - 0x4a, 0xe6, 0x66, 0x95, 0x1e, 0x00, 0x4c, 0x92, 0x20, 0x76, 0x1d, 0x00, - 0x4c, 0x4b, 0x51, 0x8e, 0x1d, 0x00, 0x4e, 0xfa, 0x0c, 0x90, 0x02, 0x00, - 0xb3, 0x01, 0xff, 0x45, 0x58, 0x04, 0xb6, 0x01, 0x00, 0x49, 0x91, 0xb7, + 0x4a, 0xfb, 0x66, 0x95, 0x1e, 0x00, 0x4c, 0x92, 0x20, 0x76, 0x1d, 0x00, + 0x4c, 0x60, 0x51, 0x8e, 0x1d, 0x00, 0x4e, 0xfa, 0x0c, 0x90, 0x02, 0x00, + 0xb3, 0x01, 0xff, 0x45, 0x58, 0x04, 0xb6, 0x01, 0x00, 0x49, 0xad, 0xb7, 0x40, 0x02, 0x40, 0x48, 0x07, 0x28, 0x6c, 0x2c, 0x00, 0x03, 0xa0, 0x0a, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x7c, 0x01, 0x00, 0x45, 0x25, 0x06, 0x93, - 0x1e, 0x40, 0x44, 0x4e, 0x66, 0x7e, 0x01, 0x00, 0x49, 0xd5, 0x03, 0x91, + 0x1e, 0x40, 0x44, 0x63, 0x66, 0x7e, 0x01, 0x00, 0x49, 0xd5, 0x03, 0x91, 0x1e, 0x00, 0x43, 0x89, 0x08, 0x91, 0x02, 0x40, 0x06, 0x50, 0x00, 0x06, - 0x43, 0x8f, 0x4c, 0x1d, 0x02, 0x40, 0x45, 0xce, 0x34, 0xfd, 0x00, 0x00, + 0x43, 0xa4, 0x4c, 0x1d, 0x02, 0x40, 0x45, 0xce, 0x34, 0xfd, 0x00, 0x00, 0x4a, 0xd4, 0x03, 0x77, 0x01, 0x00, 0xa4, 0x39, 0x45, 0x79, 0x20, 0xf3, - 0x1e, 0x00, 0x44, 0x04, 0x0d, 0xb4, 0x01, 0x80, 0x26, 0x44, 0xeb, 0xb6, - 0xff, 0x1e, 0x00, 0x46, 0xd8, 0x69, 0x33, 0x02, 0x00, 0x4a, 0x91, 0xa7, + 0x1e, 0x00, 0x44, 0x04, 0x0d, 0xb4, 0x01, 0x80, 0x26, 0x44, 0x07, 0xb7, + 0xff, 0x1e, 0x00, 0x46, 0xed, 0x69, 0x33, 0x02, 0x00, 0x4a, 0xa4, 0xa7, 0x99, 0x1e, 0x00, 0xb3, 0x06, 0x45, 0x99, 0x20, 0xf9, 0x1e, 0x40, 0x4e, 0x6c, 0x34, 0x5a, 0xab, 0x00, 0x45, 0x58, 0x04, 0x4f, 0x02, 0x40, 0x46, 0x5b, 0x00, 0xf7, 0x1e, 0x40, 0x48, 0x1c, 0x21, 0xff, 0x00, 0x00, 0x03, 0xa0, 0x0a, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x8f, 0x1e, 0x00, 0x45, 0x25, 0x06, 0xf5, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, 0x26, 0x02, - 0x13, 0x01, 0x06, 0x4c, 0x4b, 0x51, 0x8d, 0x1d, 0x40, 0x4b, 0xda, 0x97, - 0x57, 0xab, 0x80, 0x06, 0x4c, 0x7b, 0x4a, 0x56, 0xab, 0x40, 0x80, 0x01, - 0xff, 0x52, 0x75, 0x4a, 0x58, 0xab, 0x00, 0x4a, 0x54, 0x26, 0x59, 0xab, + 0x13, 0x01, 0x06, 0x4c, 0x60, 0x51, 0x8d, 0x1d, 0x40, 0x4b, 0xed, 0x97, + 0x57, 0xab, 0x80, 0x06, 0x4c, 0x90, 0x4a, 0x56, 0xab, 0x40, 0x80, 0x01, + 0xff, 0x52, 0x8a, 0x4a, 0x58, 0xab, 0x00, 0x4a, 0x54, 0x26, 0x59, 0xab, 0x40, 0x48, 0x1c, 0x21, 0x8d, 0x1e, 0x00, 0x48, 0xed, 0x1b, 0x8b, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0x83, 0x1e, 0x00, 0x4a, 0xd4, 0x03, 0x75, 0x01, 0x00, 0xa4, 0x12, 0x45, 0x79, 0x20, 0x81, - 0x1e, 0x00, 0x44, 0x04, 0x0d, 0x73, 0x2c, 0x00, 0x4a, 0x91, 0xa7, 0x98, + 0x1e, 0x00, 0x44, 0x04, 0x0d, 0x73, 0x2c, 0x00, 0x4a, 0xa4, 0xa7, 0x98, 0x1e, 0x40, 0x48, 0x1c, 0x21, 0x85, 0x1e, 0x00, 0x03, 0xa0, 0x0a, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x87, 0x1e, 0x00, 0x45, 0x25, 0x06, 0x89, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x26, 0x43, 0x45, 0x04, 0x69, 0xa7, 0x00, 0x4b, - 0x93, 0x95, 0x63, 0xa7, 0x00, 0x07, 0x8d, 0xc9, 0x04, 0xf9, 0x61, 0xa7, - 0x40, 0x42, 0xeb, 0x0d, 0x9b, 0xa7, 0x00, 0x42, 0xca, 0x4b, 0x9d, 0xa7, + 0xa6, 0x95, 0x63, 0xa7, 0x00, 0x07, 0xa9, 0xc9, 0x04, 0xf9, 0x61, 0xa7, + 0x40, 0x42, 0xeb, 0x0d, 0x9b, 0xa7, 0x00, 0x42, 0xdf, 0x4b, 0x9d, 0xa7, 0x00, 0x42, 0x30, 0x12, 0x9f, 0xa7, 0x40, 0x44, 0x88, 0x08, 0x74, 0x2c, - 0x00, 0xa4, 0x18, 0x44, 0x04, 0x0d, 0x8b, 0x02, 0x00, 0x4c, 0x4b, 0x51, - 0x8c, 0x1d, 0x00, 0x4a, 0x7d, 0xa7, 0x71, 0x2c, 0x00, 0x45, 0x99, 0x20, - 0x7d, 0x1e, 0x40, 0x4e, 0xfa, 0x3a, 0x5f, 0xa7, 0x00, 0x48, 0xfa, 0x10, + 0x00, 0xa4, 0x18, 0x44, 0x04, 0x0d, 0x8b, 0x02, 0x00, 0x4c, 0x60, 0x51, + 0x8c, 0x1d, 0x00, 0x4a, 0x90, 0xa7, 0x71, 0x2c, 0x00, 0x45, 0x99, 0x20, + 0x7d, 0x1e, 0x40, 0x4e, 0x0f, 0x3b, 0x5f, 0xa7, 0x00, 0x48, 0xfa, 0x10, 0x7f, 0x1e, 0x40, 0x80, 0x1d, 0xe5, 0x6b, 0x1d, 0x00, 0xe9, 0x50, 0xab, 0x00, 0xed, 0x78, 0xa7, 0x00, 0xef, 0x63, 0xab, 0x00, 0x46, 0xee, 0x13, 0x8a, 0x02, 0xc0, 0x00, 0x4c, 0xdb, 0x25, 0x7f, 0x1d, 0x40, 0x43, 0x16, 0x00, 0x89, 0x02, 0x80, 0xfb, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0xfa, 0x00, 0x00, 0x45, 0xb7, 0x20, 0x6d, 0x01, 0x00, 0xa3, 0xd4, 0x01, 0xa4, 0x8b, 0x01, 0x45, 0x79, 0x20, 0xf9, 0x00, 0x00, 0x02, - 0x0b, 0x00, 0x51, 0x4e, 0xc2, 0x20, 0x17, 0x02, 0x00, 0x49, 0x09, 0x52, - 0x52, 0xab, 0x00, 0x46, 0xd8, 0x69, 0x6b, 0x01, 0x80, 0x38, 0x46, 0x33, + 0x0b, 0x00, 0x51, 0x4e, 0xc2, 0x20, 0x17, 0x02, 0x00, 0x49, 0x1e, 0x52, + 0x52, 0xab, 0x00, 0x46, 0xed, 0x69, 0x6b, 0x01, 0x80, 0x38, 0x46, 0x4f, 0xd4, 0x73, 0x01, 0x00, 0xb2, 0x24, 0xb3, 0x16, 0x45, 0x99, 0x20, 0x69, - 0x01, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x49, 0x24, 0x9d, 0x79, 0x1e, 0x00, + 0x01, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x49, 0x37, 0x9d, 0x79, 0x1e, 0x00, 0x45, 0x25, 0x06, 0x75, 0x1e, 0x40, 0x4e, 0x6c, 0x34, 0x4e, 0xab, 0x00, 0x45, 0x58, 0x04, 0xb9, 0xa7, 0x40, 0x4d, 0xfb, 0x0c, 0x99, 0x1d, 0x00, - 0x49, 0x92, 0xa7, 0x6f, 0x01, 0x40, 0x4e, 0x52, 0x6e, 0x7b, 0x1e, 0x40, - 0x48, 0xa7, 0xa2, 0xe7, 0x1e, 0x00, 0x42, 0x5e, 0x01, 0xb0, 0x01, 0xc0, + 0x49, 0xa5, 0xa7, 0x6f, 0x01, 0x40, 0x4e, 0x67, 0x6e, 0x7b, 0x1e, 0x40, + 0x48, 0xba, 0xa2, 0xe7, 0x1e, 0x00, 0x42, 0x5e, 0x01, 0xb0, 0x01, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0xe9, 0x1e, 0x00, 0x49, 0xf9, 0x10, 0xf1, 0x1e, 0x00, 0x45, 0x79, 0x20, 0xeb, 0x1e, 0x00, - 0x4a, 0xa5, 0xa2, 0xed, 0x1e, 0x00, 0x45, 0x99, 0x20, 0xef, 0x1e, 0x40, + 0x4a, 0xb8, 0xa2, 0xed, 0x1e, 0x00, 0x45, 0x99, 0x20, 0xef, 0x1e, 0x40, 0x48, 0x1c, 0x21, 0xfc, 0x00, 0x80, 0x1a, 0xaf, 0x01, 0xff, 0x47, 0xfb, 0x10, 0xe5, 0x1e, 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x45, 0xce, 0x34, 0x71, 0x01, 0x00, 0x45, 0x79, 0x20, 0x15, 0x02, 0x40, 0x80, 0x01, 0xff, 0x04, 0x1a, 0x00, 0x06, 0x45, 0x25, 0x06, 0x73, 0x1e, 0x40, 0x45, 0xce, - 0x34, 0xd8, 0x01, 0x00, 0x45, 0x03, 0x90, 0xda, 0x01, 0x00, 0x45, 0x79, - 0x20, 0xdc, 0x01, 0x00, 0x46, 0xd8, 0x69, 0xd6, 0x01, 0x40, 0x44, 0x4e, + 0x34, 0xd8, 0x01, 0x00, 0x45, 0x16, 0x90, 0xda, 0x01, 0x00, 0x45, 0x79, + 0x20, 0xdc, 0x01, 0x00, 0x46, 0xed, 0x69, 0xd6, 0x01, 0x40, 0x44, 0x63, 0x66, 0xd4, 0x01, 0x00, 0x49, 0xd5, 0x03, 0xfb, 0x00, 0xc0, 0x00, 0x46, 0x24, 0x06, 0x77, 0x1e, 0x40, 0x55, 0x65, 0x34, 0x4f, 0xab, 0x40, 0x06, - 0x50, 0x00, 0xd2, 0x02, 0x4b, 0x05, 0x91, 0x77, 0x2c, 0x00, 0x53, 0x2a, - 0x43, 0xa8, 0x02, 0x00, 0x4b, 0xd0, 0x93, 0xa7, 0x02, 0x80, 0xad, 0x02, - 0xa8, 0x90, 0x02, 0xaf, 0xf1, 0x01, 0x47, 0x07, 0xcb, 0x2b, 0xa7, 0x00, - 0x49, 0x87, 0xb5, 0xa6, 0x02, 0x80, 0xdd, 0x01, 0xb5, 0x04, 0xfa, 0x29, + 0x50, 0x00, 0xd2, 0x02, 0x4b, 0x18, 0x91, 0x77, 0x2c, 0x00, 0x53, 0x3f, + 0x43, 0xa8, 0x02, 0x00, 0x4b, 0xe3, 0x93, 0xa7, 0x02, 0x80, 0xad, 0x02, + 0xa8, 0x90, 0x02, 0xaf, 0xf1, 0x01, 0x47, 0x23, 0xcb, 0x2b, 0xa7, 0x00, + 0x49, 0xa3, 0xb5, 0xa6, 0x02, 0x80, 0xdd, 0x01, 0xb5, 0x04, 0xfa, 0x29, 0xa7, 0x40, 0xed, 0x77, 0xa7, 0x00, 0x05, 0x77, 0x06, 0x01, 0xff, 0xe1, - 0x50, 0x02, 0x80, 0xbe, 0x01, 0x45, 0xcb, 0xda, 0x8d, 0x01, 0x00, 0xe5, + 0x50, 0x02, 0x80, 0xbe, 0x01, 0x45, 0xe7, 0xda, 0x8d, 0x01, 0x00, 0xe5, 0xdd, 0x01, 0x00, 0xe7, 0x77, 0x1d, 0x00, 0xe8, 0x65, 0x02, 0x80, 0x9d, 0x01, 0xe9, 0x09, 0x1d, 0x80, 0x91, 0x01, 0xeb, 0x9e, 0x02, 0x00, 0xec, 0x81, 0xa7, 0x00, 0xed, 0x6f, 0x02, 0x80, 0x7e, 0xaf, 0x53, 0xf2, 0x79, 0x02, 0x80, 0x24, 0xf4, 0x87, 0x02, 0x80, 0x19, 0x42, 0x3e, 0x00, 0x51, 0xab, 0x00, 0xf6, 0x8c, 0x02, 0x00, 0xf7, 0x8d, 0x02, 0x00, 0xf9, 0x8e, - 0x02, 0xc0, 0x00, 0x4a, 0xd7, 0x9d, 0x06, 0xdf, 0x41, 0x4a, 0x33, 0x43, + 0x02, 0xc0, 0x00, 0x4a, 0xea, 0x9d, 0x06, 0xdf, 0x41, 0x4a, 0x48, 0x43, 0x0d, 0xdf, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x04, 0x0d, 0x7b, - 0x02, 0x00, 0x48, 0x90, 0x6e, 0x7a, 0x02, 0x80, 0x12, 0x4c, 0x92, 0x20, - 0x68, 0xab, 0x00, 0x4c, 0x4b, 0x51, 0x15, 0xdf, 0x01, 0x44, 0xae, 0x15, - 0x79, 0x2c, 0x40, 0x53, 0xe7, 0x41, 0x08, 0xdf, 0x41, 0x47, 0x58, 0xc3, + 0x02, 0x00, 0x48, 0xa5, 0x6e, 0x7a, 0x02, 0x80, 0x12, 0x4c, 0x92, 0x20, + 0x68, 0xab, 0x00, 0x4c, 0x60, 0x51, 0x15, 0xdf, 0x01, 0x44, 0xae, 0x15, + 0x79, 0x2c, 0x40, 0x53, 0xfc, 0x41, 0x08, 0xdf, 0x41, 0x47, 0x74, 0xc3, 0x43, 0xab, 0x80, 0x1c, 0xe5, 0x14, 0x1d, 0x80, 0x06, 0x45, 0x20, 0x26, 0x08, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x51, 0x4c, 0x04, 0x42, 0xab, 0x00, 0x46, 0x57, 0x04, 0x41, 0xab, 0x40, 0x4c, 0xdb, 0x25, 0x44, - 0xab, 0x40, 0x4e, 0x8a, 0x6e, 0x70, 0x02, 0x40, 0x48, 0x40, 0x69, 0x7f, - 0xa7, 0x40, 0x4e, 0x65, 0x6b, 0xae, 0x02, 0xc0, 0x00, 0x49, 0x31, 0xab, - 0xaf, 0x02, 0x40, 0xe5, 0x02, 0x1d, 0x00, 0x44, 0x91, 0xd9, 0x52, 0x02, + 0xab, 0x40, 0x4e, 0x9f, 0x6e, 0x70, 0x02, 0x40, 0x48, 0x55, 0x69, 0x7f, + 0xa7, 0x40, 0x4e, 0x7a, 0x6b, 0xae, 0x02, 0xc0, 0x00, 0x49, 0x44, 0xab, + 0xaf, 0x02, 0x40, 0xe5, 0x02, 0x1d, 0x00, 0x44, 0xad, 0xd9, 0x52, 0x02, 0x40, 0x54, 0xf4, 0x0c, 0x67, 0xab, 0x40, 0x03, 0xf2, 0x07, 0x06, 0x48, - 0xf3, 0xb3, 0x16, 0x1d, 0x40, 0x44, 0xf8, 0x0f, 0xbd, 0x01, 0x00, 0x43, + 0x0f, 0xb4, 0x16, 0x1d, 0x40, 0x44, 0xf8, 0x0f, 0xbd, 0x01, 0x00, 0x43, 0x2f, 0x27, 0x85, 0x01, 0x00, 0x43, 0x25, 0x09, 0xa8, 0x01, 0x40, 0x53, - 0x46, 0x42, 0x7a, 0x1d, 0x00, 0x43, 0x2d, 0x04, 0xfe, 0x00, 0xc0, 0x00, + 0x5b, 0x42, 0x7a, 0x1d, 0x00, 0x43, 0x2d, 0x04, 0xfe, 0x00, 0xc0, 0x00, 0x4c, 0xdb, 0x25, 0x65, 0xa7, 0xc0, 0x00, 0x52, 0xfd, 0x27, 0x67, 0xa7, - 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4c, 0x4b, 0x51, 0x17, 0xdf, 0x01, + 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4c, 0x60, 0x51, 0x17, 0xdf, 0x01, 0x4e, 0xfa, 0x0c, 0x1c, 0xdf, 0x41, 0xa3, 0x58, 0xa4, 0x35, 0x44, 0x04, - 0x0d, 0xad, 0x01, 0x80, 0x28, 0x4a, 0xe6, 0x66, 0x6f, 0x1e, 0x00, 0x03, - 0x7d, 0x02, 0x12, 0x4c, 0x4b, 0x51, 0xab, 0x01, 0x00, 0x4e, 0xfa, 0x0c, - 0x88, 0x02, 0x00, 0x46, 0x57, 0x04, 0x67, 0x01, 0x40, 0x51, 0x01, 0x52, - 0x2a, 0xdf, 0x01, 0x49, 0x95, 0x20, 0x75, 0x1d, 0x40, 0x53, 0xe7, 0x41, + 0x0d, 0xad, 0x01, 0x80, 0x28, 0x4a, 0xfb, 0x66, 0x6f, 0x1e, 0x00, 0x03, + 0x7d, 0x02, 0x12, 0x4c, 0x60, 0x51, 0xab, 0x01, 0x00, 0x4e, 0xfa, 0x0c, + 0x88, 0x02, 0x00, 0x46, 0x57, 0x04, 0x67, 0x01, 0x40, 0x51, 0x16, 0x52, + 0x2a, 0xdf, 0x01, 0x49, 0x95, 0x20, 0x75, 0x1d, 0x40, 0x53, 0xfc, 0x41, 0x09, 0xdf, 0x41, 0x02, 0x1b, 0x01, 0x11, 0x03, 0xa0, 0x0a, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x6b, 0x1e, 0x00, 0x45, 0x25, 0x06, 0x6d, 0x1e, 0x40, - 0x46, 0x1e, 0x21, 0x97, 0x1e, 0x00, 0x4c, 0xfc, 0x3a, 0x66, 0x2c, 0x40, - 0x44, 0x4e, 0x66, 0x65, 0x01, 0x00, 0x46, 0x57, 0xb8, 0x63, 0x01, 0x00, - 0x4f, 0x1c, 0x68, 0x71, 0x1e, 0x00, 0x4a, 0x0b, 0xa6, 0x1b, 0x02, 0x00, + 0x46, 0x1e, 0x21, 0x97, 0x1e, 0x00, 0x4c, 0x11, 0x3b, 0x66, 0x2c, 0x40, + 0x44, 0x63, 0x66, 0x65, 0x01, 0x00, 0x46, 0x73, 0xb8, 0x63, 0x01, 0x00, + 0x4f, 0x31, 0x68, 0x71, 0x1e, 0x00, 0x4a, 0x1e, 0xa6, 0x1b, 0x02, 0x00, 0x43, 0x89, 0x08, 0x36, 0x02, 0x40, 0x06, 0x50, 0x00, 0x82, 0x01, 0xa1, - 0x74, 0xa3, 0x3f, 0x46, 0x28, 0xa8, 0xdf, 0x00, 0x00, 0xa9, 0x0c, 0x51, - 0x84, 0x57, 0x85, 0x02, 0x00, 0x48, 0x85, 0xc1, 0x45, 0xab, 0x40, 0x07, - 0xbe, 0x40, 0x06, 0x47, 0x1e, 0xbd, 0xd9, 0xa7, 0x40, 0x4d, 0xdb, 0x7a, - 0x1e, 0x1d, 0x00, 0xef, 0x11, 0x1d, 0x80, 0x0a, 0x48, 0xc5, 0xc1, 0x1f, + 0x74, 0xa3, 0x3f, 0x46, 0x3b, 0xa8, 0xdf, 0x00, 0x00, 0xa9, 0x0c, 0x51, + 0x99, 0x57, 0x85, 0x02, 0x00, 0x48, 0xa1, 0xc1, 0x45, 0xab, 0x40, 0x07, + 0xd3, 0x40, 0x06, 0x47, 0x3a, 0xbd, 0xd9, 0xa7, 0x40, 0x4d, 0xe2, 0x7a, + 0x1e, 0x1d, 0x00, 0xef, 0x11, 0x1d, 0x80, 0x0a, 0x48, 0xe1, 0xc1, 0x1f, 0x1d, 0x00, 0xf5, 0x1d, 0x1d, 0x40, 0x4c, 0xdb, 0x25, 0x13, 0x1d, 0x00, - 0x45, 0x03, 0xdf, 0x12, 0x1d, 0x40, 0x43, 0xed, 0x74, 0x59, 0x02, 0x80, + 0x45, 0x1f, 0xdf, 0x12, 0x1d, 0x40, 0x43, 0x02, 0x75, 0x59, 0x02, 0x80, 0x1b, 0x05, 0x7b, 0x05, 0x01, 0xff, 0xe7, 0x61, 0x02, 0x80, 0x0b, 0xf2, - 0x4b, 0xab, 0xc0, 0x00, 0x4a, 0x13, 0x9e, 0x4c, 0xab, 0x40, 0x52, 0x2d, + 0x4b, 0xab, 0xc0, 0x00, 0x4a, 0x26, 0x9e, 0x4c, 0xab, 0x40, 0x52, 0x42, 0x4a, 0x36, 0xab, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x04, 0x0d, - 0x5a, 0x02, 0x00, 0x4e, 0xfa, 0x0c, 0x95, 0x1d, 0x40, 0x47, 0x2f, 0xc8, - 0x60, 0xab, 0x00, 0x46, 0x94, 0xc4, 0x8c, 0xa7, 0x40, 0x45, 0xce, 0x34, + 0x5a, 0x02, 0x00, 0x4e, 0xfa, 0x0c, 0x95, 0x1d, 0x40, 0x47, 0x4b, 0xc8, + 0x60, 0xab, 0x00, 0x46, 0xb0, 0xc4, 0x8c, 0xa7, 0x40, 0x45, 0xce, 0x34, 0x5b, 0x01, 0x80, 0x6f, 0xa3, 0x48, 0x04, 0x9f, 0x0a, 0x31, 0x44, 0x04, - 0x0d, 0x82, 0x02, 0x00, 0x03, 0x7d, 0x02, 0x1b, 0x4e, 0x6a, 0x3e, 0xa9, - 0xa7, 0x00, 0x4c, 0x4b, 0x51, 0x8a, 0x1d, 0x00, 0xb3, 0x01, 0xff, 0x53, - 0x5a, 0x44, 0xca, 0xa7, 0x00, 0x49, 0x91, 0xb7, 0x3f, 0x02, 0x40, 0x51, - 0x01, 0x52, 0x29, 0xdf, 0x01, 0x49, 0x95, 0x20, 0x74, 0x1d, 0x40, 0x45, + 0x0d, 0x82, 0x02, 0x00, 0x03, 0x7d, 0x02, 0x1b, 0x4e, 0x7f, 0x3e, 0xa9, + 0xa7, 0x00, 0x4c, 0x60, 0x51, 0x8a, 0x1d, 0x00, 0xb3, 0x01, 0xff, 0x53, + 0x6f, 0x44, 0xca, 0xa7, 0x00, 0x49, 0xad, 0xb7, 0x3f, 0x02, 0x40, 0x51, + 0x16, 0x52, 0x29, 0xdf, 0x01, 0x49, 0x95, 0x20, 0x74, 0x1d, 0x40, 0x45, 0x5c, 0x00, 0x61, 0x1e, 0x00, 0x45, 0x25, 0x06, 0x63, 0x1e, 0xc0, 0x00, - 0x4e, 0xe7, 0x1b, 0x69, 0x1e, 0x40, 0x44, 0x4e, 0x66, 0x61, 0x01, 0x80, - 0x18, 0x46, 0x57, 0xb8, 0x5f, 0x01, 0x00, 0x49, 0xd5, 0x03, 0x5d, 0x01, - 0x00, 0x4a, 0x0b, 0xa6, 0x19, 0x02, 0x00, 0x43, 0x89, 0x08, 0x1e, 0xdf, + 0x4e, 0xe7, 0x1b, 0x69, 0x1e, 0x40, 0x44, 0x63, 0x66, 0x61, 0x01, 0x80, + 0x18, 0x46, 0x73, 0xb8, 0x5f, 0x01, 0x00, 0x49, 0xd5, 0x03, 0x5d, 0x01, + 0x00, 0x4a, 0x1e, 0xa6, 0x19, 0x02, 0x00, 0x43, 0x89, 0x08, 0x1e, 0xdf, 0x41, 0x4e, 0xe7, 0x1b, 0x67, 0x1e, 0x40, 0x4e, 0xe7, 0x1b, 0x65, 0x1e, - 0x40, 0x80, 0x5b, 0x48, 0x9d, 0xb9, 0x64, 0x02, 0x00, 0x08, 0x1a, 0x13, - 0x0d, 0x42, 0x9f, 0x03, 0x75, 0xa7, 0xc0, 0x00, 0x48, 0xb9, 0xa9, 0x5d, + 0x40, 0x80, 0x5b, 0x48, 0xb9, 0xb9, 0x64, 0x02, 0x00, 0x08, 0x1a, 0x13, + 0x0d, 0x42, 0x9f, 0x03, 0x75, 0xa7, 0xc0, 0x00, 0x48, 0xcc, 0xa9, 0x5d, 0xa7, 0x40, 0xe3, 0x84, 0x21, 0x80, 0x39, 0xe5, 0x58, 0x02, 0x80, 0x2e, - 0x46, 0xdb, 0xd1, 0xf6, 0xa7, 0x00, 0xeb, 0x03, 0xdf, 0x01, 0x46, 0x1f, - 0x26, 0x5c, 0x02, 0x80, 0x0c, 0x4f, 0x64, 0x6b, 0x7f, 0x02, 0x00, 0x48, - 0xbd, 0xc0, 0x01, 0xdf, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x04, + 0x46, 0xf7, 0xd1, 0xf6, 0xa7, 0x00, 0xeb, 0x03, 0xdf, 0x01, 0x46, 0x1f, + 0x26, 0x5c, 0x02, 0x80, 0x0c, 0x4f, 0x79, 0x6b, 0x7f, 0x02, 0x00, 0x48, + 0xd9, 0xc0, 0x01, 0xdf, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x04, 0x0d, 0x5d, 0x02, 0x00, 0x4e, 0xfa, 0x0c, 0x94, 0x1d, 0x40, 0x42, 0x1d, - 0x01, 0x07, 0xdf, 0x41, 0x49, 0x4a, 0x37, 0x3f, 0xa7, 0x40, 0x47, 0xba, + 0x01, 0x07, 0xdf, 0x41, 0x49, 0x4a, 0x37, 0x3f, 0xa7, 0x40, 0x47, 0xcd, 0xa9, 0x5b, 0xa7, 0x00, 0x04, 0x51, 0x00, 0x01, 0xff, 0x80, 0x06, 0x4a, - 0x67, 0x4b, 0x47, 0xab, 0x40, 0x45, 0xce, 0x34, 0x55, 0x01, 0x00, 0xa3, - 0x75, 0x02, 0x3b, 0x01, 0x54, 0x48, 0x6b, 0x6b, 0x7e, 0x02, 0x80, 0x3c, + 0x7c, 0x4b, 0x47, 0xab, 0x40, 0x45, 0xce, 0x34, 0x55, 0x01, 0x00, 0xa3, + 0x75, 0x02, 0x3b, 0x01, 0x54, 0x48, 0x80, 0x6b, 0x7e, 0x02, 0x80, 0x3c, 0x4e, 0xc2, 0x20, 0x13, 0x02, 0x00, 0xac, 0x28, 0x03, 0x7d, 0x02, 0x18, - 0x4e, 0x6a, 0x3e, 0xa7, 0xa7, 0x00, 0x4c, 0x4b, 0x51, 0x89, 0x1d, 0x00, + 0x4e, 0x7f, 0x3e, 0xa7, 0xa7, 0x00, 0x4c, 0x60, 0x51, 0x89, 0x1d, 0x00, 0x46, 0x57, 0x04, 0x4d, 0x02, 0x00, 0x44, 0xae, 0x15, 0x7d, 0x02, 0x40, - 0x51, 0x01, 0x52, 0x28, 0xdf, 0x01, 0x49, 0x95, 0x20, 0x72, 0x1d, 0x40, - 0x49, 0xe7, 0x66, 0x5f, 0x1e, 0x00, 0x47, 0x91, 0x6e, 0x7c, 0x02, 0x40, + 0x51, 0x16, 0x52, 0x28, 0xdf, 0x01, 0x49, 0x95, 0x20, 0x72, 0x1d, 0x40, + 0x49, 0xfc, 0x66, 0x5f, 0x1e, 0x00, 0x47, 0xa6, 0x6e, 0x7c, 0x02, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4c, 0x92, 0x20, 0x73, 0x1d, 0x00, 0x4c, - 0x4b, 0x51, 0x16, 0xdf, 0x41, 0x02, 0xc6, 0x00, 0x06, 0x4a, 0x74, 0x20, + 0x60, 0x51, 0x16, 0xdf, 0x41, 0x02, 0xc6, 0x00, 0x06, 0x4a, 0x74, 0x20, 0x11, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x59, 0x1e, 0x00, 0x45, 0x25, 0x06, - 0x5b, 0x1e, 0xc0, 0x00, 0x4b, 0x58, 0x8f, 0x5d, 0x1e, 0x40, 0x44, 0x4e, - 0x66, 0x59, 0x01, 0x00, 0x46, 0x57, 0xb8, 0x57, 0x01, 0x00, 0x4b, 0x34, - 0x4a, 0x49, 0xab, 0x40, 0x06, 0x50, 0x00, 0x06, 0x49, 0x4c, 0xb4, 0x39, - 0x02, 0x40, 0x4f, 0xf9, 0x3a, 0x59, 0xa7, 0x00, 0x44, 0x04, 0x0d, 0xa0, - 0x02, 0x80, 0x06, 0x58, 0xf7, 0x27, 0x57, 0xa7, 0x40, 0x45, 0x67, 0x42, + 0x5b, 0x1e, 0xc0, 0x00, 0x4b, 0x6b, 0x8f, 0x5d, 0x1e, 0x40, 0x44, 0x63, + 0x66, 0x59, 0x01, 0x00, 0x46, 0x73, 0xb8, 0x57, 0x01, 0x00, 0x4b, 0x49, + 0x4a, 0x49, 0xab, 0x40, 0x06, 0x50, 0x00, 0x06, 0x49, 0x68, 0xb4, 0x39, + 0x02, 0x40, 0x4f, 0x0e, 0x3b, 0x59, 0xa7, 0x00, 0x44, 0x04, 0x0d, 0xa0, + 0x02, 0x80, 0x06, 0x58, 0xf7, 0x27, 0x57, 0xa7, 0x40, 0x45, 0x7c, 0x42, 0x4b, 0x02, 0x40, 0x06, 0x50, 0x00, 0x06, 0x42, 0x49, 0x00, 0x78, 0x02, 0x40, 0x45, 0xce, 0x34, 0x55, 0x1e, 0x00, 0x49, 0xec, 0x1b, 0x57, 0x1e, - 0x00, 0x48, 0x7d, 0xbc, 0x53, 0xa7, 0x00, 0x44, 0x04, 0x0d, 0xa5, 0x01, - 0x00, 0x4c, 0x92, 0x20, 0x71, 0x1d, 0x00, 0x4c, 0x4b, 0x51, 0x88, 0x1d, - 0x00, 0xb3, 0x01, 0xff, 0x4c, 0x58, 0x8c, 0x55, 0xa7, 0x00, 0x45, 0x58, + 0x00, 0x48, 0x99, 0xbc, 0x53, 0xa7, 0x00, 0x44, 0x04, 0x0d, 0xa5, 0x01, + 0x00, 0x4c, 0x92, 0x20, 0x71, 0x1d, 0x00, 0x4c, 0x60, 0x51, 0x88, 0x1d, + 0x00, 0xb3, 0x01, 0xff, 0x4c, 0x5f, 0x8c, 0x55, 0xa7, 0x00, 0x45, 0x58, 0x04, 0x7d, 0x1d, 0xc0, 0x00, 0x52, 0xfd, 0x27, 0x51, 0xa7, 0x40, 0x06, - 0x50, 0x00, 0x40, 0xe9, 0xa3, 0x01, 0x00, 0x4b, 0x38, 0x96, 0xc1, 0xa7, - 0x00, 0x44, 0x03, 0x75, 0xb7, 0xa7, 0x00, 0xef, 0x4f, 0xa7, 0x00, 0x04, + 0x50, 0x00, 0x40, 0xe9, 0xa3, 0x01, 0x00, 0x4b, 0x4b, 0x96, 0xc1, 0xa7, + 0x00, 0x44, 0x18, 0x75, 0xb7, 0xa7, 0x00, 0xef, 0x4f, 0xa7, 0x00, 0x04, 0xfc, 0x03, 0x04, 0xf5, 0x23, 0x02, 0x40, 0xe5, 0x5b, 0x02, 0x80, 0x19, 0xef, 0x54, 0x02, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x04, 0xe5, 0x62, 0xab, 0x40, 0x4e, 0xfa, 0x0c, 0x97, 0x1d, 0x00, 0x46, 0x57, 0x04, 0x3f, 0xab, 0x40, 0x54, 0xf4, 0x0c, 0x93, 0x1d, 0x40, 0x45, 0xce, 0x34, 0xf3, 0x00, 0x00, 0x45, 0xb7, 0x20, 0x4f, 0x01, 0x00, 0xa3, 0xe7, 0x01, 0xa4, 0xac, 0x01, 0x45, 0x79, 0x20, 0xf2, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x72, 0x4e, - 0xc2, 0x20, 0x0f, 0x02, 0x00, 0x02, 0x13, 0x01, 0x56, 0x46, 0xd8, 0x69, - 0x4d, 0x01, 0x80, 0x3e, 0x46, 0x33, 0xd4, 0xeb, 0x01, 0x80, 0x31, 0x4e, + 0xc2, 0x20, 0x0f, 0x02, 0x00, 0x02, 0x13, 0x01, 0x56, 0x46, 0xed, 0x69, + 0x4d, 0x01, 0x80, 0x3e, 0x46, 0x4f, 0xd4, 0xeb, 0x01, 0x80, 0x31, 0x4e, 0xfa, 0x0c, 0x1b, 0xdf, 0x01, 0x46, 0x57, 0x04, 0xf8, 0x00, 0x80, 0x1e, 0x45, 0x99, 0x20, 0xf5, 0x00, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0x4d, 0x1e, 0x00, 0x49, 0x1b, 0x21, 0x4f, 0x1e, 0x00, - 0x46, 0xd8, 0x69, 0x2d, 0x02, 0x40, 0x4a, 0x23, 0x9d, 0xff, 0x01, 0x40, - 0x4b, 0x58, 0x8f, 0xed, 0x01, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, + 0x46, 0xed, 0x69, 0x2d, 0x02, 0x40, 0x4a, 0x36, 0x9d, 0xff, 0x01, 0x40, + 0x4b, 0x6b, 0x8f, 0xed, 0x01, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0x53, 0x1e, 0x00, 0x45, 0x79, 0x20, 0x51, 0x1e, 0x40, 0x51, - 0xda, 0x56, 0x4b, 0xa7, 0x00, 0x42, 0x1f, 0x00, 0x4d, 0xa7, 0x00, 0x4d, - 0xe1, 0x82, 0x7a, 0x2c, 0x40, 0x48, 0xa7, 0xa2, 0xcf, 0x1e, 0x00, 0x42, + 0xef, 0x56, 0x4b, 0xa7, 0x00, 0x42, 0x1f, 0x00, 0x4d, 0xa7, 0x00, 0x4d, + 0xe8, 0x82, 0x7a, 0x2c, 0x40, 0x48, 0xba, 0xa2, 0xcf, 0x1e, 0x00, 0x42, 0x5e, 0x01, 0xa1, 0x01, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0xdb, 0x1e, 0x00, 0x49, 0xf9, 0x10, 0xe3, 0x1e, 0x00, 0x45, - 0x79, 0x20, 0xdd, 0x1e, 0x00, 0x4a, 0xa5, 0xa2, 0xdf, 0x1e, 0x00, 0x45, + 0x79, 0x20, 0xdd, 0x1e, 0x00, 0x4a, 0xb8, 0xa2, 0xdf, 0x1e, 0x00, 0x45, 0x99, 0x20, 0xe1, 0x1e, 0x40, 0x48, 0x1c, 0x21, 0xf6, 0x00, 0x80, 0x2b, 0xaf, 0x01, 0xff, 0x02, 0xc6, 0x00, 0x11, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x45, 0xce, 0x34, 0x51, 0x01, 0x00, 0x45, 0x79, 0x20, 0x0d, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x2f, 0x02, 0x80, 0x06, 0x45, 0x25, 0x06, 0xcd, 0x1e, - 0x40, 0x4b, 0x58, 0x8f, 0x31, 0x02, 0x40, 0x4b, 0x58, 0x8f, 0x2b, 0x02, - 0x40, 0x44, 0x4e, 0x66, 0xd2, 0x01, 0x00, 0x49, 0xd5, 0x03, 0xf4, 0x00, + 0x40, 0x4b, 0x6b, 0x8f, 0x31, 0x02, 0x40, 0x4b, 0x6b, 0x8f, 0x2b, 0x02, + 0x40, 0x44, 0x63, 0x66, 0xd2, 0x01, 0x00, 0x49, 0xd5, 0x03, 0xf4, 0x00, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0xd1, 0x1e, 0x00, 0x49, 0xf9, 0x10, 0xd9, 0x1e, 0x00, 0x45, 0x79, 0x20, 0xd3, 0x1e, - 0x00, 0x4a, 0xa5, 0xa2, 0xd5, 0x1e, 0x00, 0x45, 0x99, 0x20, 0xd7, 0x1e, + 0x00, 0x4a, 0xb8, 0xa2, 0xd5, 0x1e, 0x00, 0x45, 0x99, 0x20, 0xd7, 0x1e, 0x40, 0x80, 0x0a, 0xea, 0xcc, 0x01, 0x00, 0x42, 0x9f, 0x03, 0x74, 0xa7, 0x40, 0x56, 0x40, 0x32, 0x49, 0x01, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0x44, 0x01, 0x00, 0xa3, 0x5b, 0xa4, 0x42, 0x45, 0x79, - 0x20, 0xf9, 0x01, 0x00, 0xac, 0x28, 0x03, 0x7d, 0x02, 0x18, 0x4e, 0x6a, - 0x3e, 0xa5, 0xa7, 0x00, 0x4c, 0x4b, 0x51, 0x87, 0x1d, 0x00, 0x4e, 0xfa, - 0x0c, 0x73, 0x02, 0x00, 0x45, 0x99, 0x20, 0xf1, 0x00, 0x40, 0x51, 0x01, - 0x52, 0x27, 0xdf, 0x01, 0x49, 0x95, 0x20, 0x70, 0x1d, 0x40, 0x48, 0x0a, - 0x52, 0x72, 0x02, 0x00, 0x49, 0xe7, 0x66, 0x49, 0x1e, 0x00, 0x4d, 0x94, + 0x20, 0xf9, 0x01, 0x00, 0xac, 0x28, 0x03, 0x7d, 0x02, 0x18, 0x4e, 0x7f, + 0x3e, 0xa5, 0xa7, 0x00, 0x4c, 0x60, 0x51, 0x87, 0x1d, 0x00, 0x4e, 0xfa, + 0x0c, 0x73, 0x02, 0x00, 0x45, 0x99, 0x20, 0xf1, 0x00, 0x40, 0x51, 0x16, + 0x52, 0x27, 0xdf, 0x01, 0x49, 0x95, 0x20, 0x70, 0x1d, 0x40, 0x48, 0x1f, + 0x52, 0x72, 0x02, 0x00, 0x49, 0xfc, 0x66, 0x49, 0x1e, 0x00, 0x4d, 0x9b, 0x7f, 0x9e, 0x01, 0x40, 0x48, 0x07, 0x28, 0x91, 0xa7, 0x00, 0x03, 0xa0, 0x0a, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x45, 0x1e, 0x00, 0x45, 0x25, 0x06, - 0x47, 0x1e, 0x40, 0x44, 0x4e, 0x66, 0x48, 0x01, 0x00, 0x46, 0x57, 0xb8, - 0x46, 0x01, 0x00, 0x4f, 0x1c, 0x68, 0x4b, 0x1e, 0x00, 0x4b, 0x34, 0x4a, + 0x47, 0x1e, 0x40, 0x44, 0x63, 0x66, 0x48, 0x01, 0x00, 0x46, 0x73, 0xb8, + 0x46, 0x01, 0x00, 0x4f, 0x31, 0x68, 0x4b, 0x1e, 0x00, 0x4b, 0x49, 0x4a, 0x3b, 0xab, 0x00, 0x43, 0x89, 0x08, 0x35, 0x02, 0x40, 0x06, 0x50, 0x00, 0x1f, 0x05, 0x7e, 0x02, 0x06, 0x42, 0x9f, 0x03, 0x73, 0xa7, 0x40, 0x48, - 0xe5, 0xb8, 0xd7, 0xa7, 0x00, 0x07, 0xc8, 0xc3, 0x01, 0xff, 0x42, 0x3f, + 0x01, 0xb9, 0xd7, 0xa7, 0x00, 0x07, 0xe4, 0xc3, 0x01, 0xff, 0x42, 0x3f, 0x06, 0xfb, 0x1e, 0x00, 0xf6, 0xfd, 0x1e, 0x40, 0x45, 0xce, 0x34, 0x3f, - 0x1e, 0x00, 0x4c, 0x33, 0x4a, 0x3a, 0xab, 0x00, 0x04, 0x9f, 0x0a, 0x12, + 0x1e, 0x00, 0x4c, 0x48, 0x4a, 0x3a, 0xab, 0x00, 0x04, 0x9f, 0x0a, 0x12, 0x44, 0x04, 0x0d, 0x71, 0x02, 0x00, 0x4c, 0x92, 0x20, 0x6f, 0x1d, 0x00, - 0x4c, 0x4b, 0x51, 0x86, 0x1d, 0x40, 0x45, 0x5c, 0x00, 0x41, 0x1e, 0x00, - 0x45, 0x25, 0x06, 0x43, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x51, 0x51, 0x67, - 0x52, 0x9b, 0x01, 0x00, 0xa5, 0x36, 0xea, 0xc9, 0x01, 0x00, 0x45, 0xec, - 0xb2, 0x7f, 0x01, 0x80, 0x12, 0x49, 0x87, 0xb5, 0xaa, 0x02, 0x00, 0x42, - 0x9f, 0x03, 0x72, 0xa7, 0x00, 0x49, 0x0f, 0xb8, 0xab, 0x02, 0x40, 0x06, - 0x50, 0x00, 0x01, 0xff, 0xa4, 0x06, 0x4b, 0xc2, 0x94, 0x9d, 0x1e, 0x40, - 0x4e, 0xfa, 0x3a, 0x9c, 0x1e, 0x00, 0x48, 0xed, 0x1b, 0x9b, 0x1e, 0x40, - 0x45, 0x54, 0xde, 0x35, 0xab, 0x00, 0x42, 0x6d, 0x25, 0x6e, 0x02, 0xc0, + 0x4c, 0x60, 0x51, 0x86, 0x1d, 0x40, 0x45, 0x5c, 0x00, 0x41, 0x1e, 0x00, + 0x45, 0x25, 0x06, 0x43, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x51, 0x51, 0x7c, + 0x52, 0x9b, 0x01, 0x00, 0xa5, 0x36, 0xea, 0xc9, 0x01, 0x00, 0x45, 0x08, + 0xb3, 0x7f, 0x01, 0x80, 0x12, 0x49, 0xa3, 0xb5, 0xaa, 0x02, 0x00, 0x42, + 0x9f, 0x03, 0x72, 0xa7, 0x00, 0x49, 0x2b, 0xb8, 0xab, 0x02, 0x40, 0x06, + 0x50, 0x00, 0x01, 0xff, 0xa4, 0x06, 0x4b, 0xd5, 0x94, 0x9d, 0x1e, 0x40, + 0x4e, 0x0f, 0x3b, 0x9c, 0x1e, 0x00, 0x48, 0xed, 0x1b, 0x9b, 0x1e, 0x40, + 0x45, 0x70, 0xde, 0x35, 0xab, 0x00, 0x42, 0x6d, 0x25, 0x6e, 0x02, 0xc0, 0x00, 0x54, 0xf4, 0x0c, 0x05, 0xdf, 0x41, 0x45, 0xce, 0x34, 0x3a, 0x01, - 0x00, 0xa2, 0x8e, 0x01, 0xa3, 0x74, 0x02, 0x3b, 0x01, 0x52, 0x48, 0x6b, - 0x6b, 0x11, 0xdf, 0x01, 0x4b, 0xc2, 0x94, 0x49, 0xa7, 0x00, 0x4f, 0xfe, - 0x67, 0x37, 0xab, 0x00, 0x4a, 0xe6, 0x66, 0x3b, 0x1e, 0x00, 0x03, 0x7d, - 0x02, 0x19, 0x4c, 0x4b, 0x51, 0x85, 0x1d, 0x00, 0x4e, 0xfa, 0x0c, 0x6d, - 0x02, 0x80, 0x06, 0x46, 0x57, 0x04, 0x42, 0x01, 0x40, 0x49, 0x1f, 0xab, - 0x8e, 0xa7, 0x40, 0x51, 0x01, 0x52, 0x26, 0xdf, 0x01, 0x04, 0x80, 0x02, + 0x00, 0xa2, 0x8e, 0x01, 0xa3, 0x74, 0x02, 0x3b, 0x01, 0x52, 0x48, 0x80, + 0x6b, 0x11, 0xdf, 0x01, 0x4b, 0xd5, 0x94, 0x49, 0xa7, 0x00, 0x4f, 0x13, + 0x68, 0x37, 0xab, 0x00, 0x4a, 0xfb, 0x66, 0x3b, 0x1e, 0x00, 0x03, 0x7d, + 0x02, 0x19, 0x4c, 0x60, 0x51, 0x85, 0x1d, 0x00, 0x4e, 0xfa, 0x0c, 0x6d, + 0x02, 0x80, 0x06, 0x46, 0x57, 0x04, 0x42, 0x01, 0x40, 0x49, 0x32, 0xab, + 0x8e, 0xa7, 0x40, 0x51, 0x16, 0x52, 0x26, 0xdf, 0x01, 0x04, 0x80, 0x02, 0x01, 0xff, 0x43, 0xc5, 0x06, 0x40, 0x01, 0x00, 0x44, 0x03, 0x07, 0x39, 0xab, 0x00, 0x45, 0x99, 0x20, 0x6b, 0x02, 0x40, 0x47, 0xfb, 0x10, 0x37, 0x1e, 0x80, 0x11, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x43, 0x16, 0x00, 0x61, - 0x2c, 0x00, 0x4c, 0x92, 0x20, 0x38, 0xab, 0x40, 0x4b, 0x58, 0x8f, 0x39, - 0x1e, 0x40, 0x44, 0x4e, 0x66, 0x3e, 0x01, 0x00, 0x46, 0x57, 0xb8, 0x3c, - 0x01, 0x00, 0x4f, 0x1c, 0x68, 0x3d, 0x1e, 0x00, 0x43, 0x89, 0x08, 0x34, - 0x02, 0x40, 0x42, 0x17, 0x00, 0x9a, 0x01, 0x00, 0x43, 0x7f, 0x9b, 0x6c, - 0x02, 0xc0, 0x00, 0x51, 0x46, 0x51, 0x13, 0xdf, 0x41, 0x06, 0x50, 0x00, + 0x2c, 0x00, 0x4c, 0x92, 0x20, 0x38, 0xab, 0x40, 0x4b, 0x6b, 0x8f, 0x39, + 0x1e, 0x40, 0x44, 0x63, 0x66, 0x3e, 0x01, 0x00, 0x46, 0x73, 0xb8, 0x3c, + 0x01, 0x00, 0x4f, 0x31, 0x68, 0x3d, 0x1e, 0x00, 0x43, 0x89, 0x08, 0x34, + 0x02, 0x40, 0x42, 0x17, 0x00, 0x9a, 0x01, 0x00, 0x43, 0x92, 0x9b, 0x6c, + 0x02, 0xc0, 0x00, 0x51, 0x5b, 0x51, 0x13, 0xdf, 0x41, 0x06, 0x50, 0x00, 0x06, 0x42, 0x71, 0x00, 0x38, 0x01, 0x40, 0x45, 0xce, 0x34, 0x31, 0x1e, 0x00, 0xa3, 0x39, 0xa4, 0x25, 0x44, 0x04, 0x0d, 0x99, 0x01, 0x00, 0x4a, - 0xe6, 0x66, 0x35, 0x1e, 0x00, 0x4e, 0x6a, 0x3e, 0xa3, 0xa7, 0x00, 0x4c, - 0x4b, 0x51, 0x84, 0x1d, 0x00, 0x46, 0x57, 0x04, 0x41, 0xa7, 0xc0, 0x00, - 0x54, 0xf4, 0x3a, 0x45, 0xa7, 0x40, 0x48, 0x07, 0x28, 0x6a, 0x2c, 0x00, - 0x4e, 0xfa, 0x3a, 0x43, 0xa7, 0x00, 0x48, 0xfa, 0x10, 0x33, 0x1e, 0x40, - 0x44, 0x4e, 0x66, 0xe9, 0x01, 0x00, 0x46, 0x57, 0xb8, 0x37, 0x01, 0x40, + 0xfb, 0x66, 0x35, 0x1e, 0x00, 0x4e, 0x7f, 0x3e, 0xa3, 0xa7, 0x00, 0x4c, + 0x60, 0x51, 0x84, 0x1d, 0x00, 0x46, 0x57, 0x04, 0x41, 0xa7, 0xc0, 0x00, + 0x54, 0x09, 0x3b, 0x45, 0xa7, 0x40, 0x48, 0x07, 0x28, 0x6a, 0x2c, 0x00, + 0x4e, 0x0f, 0x3b, 0x43, 0xa7, 0x00, 0x48, 0xfa, 0x10, 0x33, 0x1e, 0x40, + 0x44, 0x63, 0x66, 0xe9, 0x01, 0x00, 0x46, 0x73, 0xb8, 0x37, 0x01, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa3, 0x06, 0x46, 0x57, 0x04, 0x49, 0x02, - 0x40, 0x44, 0x4e, 0x66, 0xf0, 0x01, 0x00, 0x49, 0xd5, 0x03, 0x35, 0x01, - 0x00, 0x4b, 0x34, 0x4a, 0x9d, 0x02, 0x40, 0x06, 0x50, 0x00, 0x48, 0xae, + 0x40, 0x44, 0x63, 0x66, 0xf0, 0x01, 0x00, 0x49, 0xd5, 0x03, 0x35, 0x01, + 0x00, 0x4b, 0x49, 0x4a, 0x9d, 0x02, 0x40, 0x06, 0x50, 0x00, 0x48, 0xae, 0x19, 0x02, 0x20, 0x04, 0x04, 0xf3, 0x6d, 0xa7, 0x40, 0xe1, 0x69, 0x02, - 0x80, 0x06, 0x47, 0xaa, 0xc7, 0x61, 0xab, 0x40, 0x4c, 0xdb, 0x25, 0x7c, - 0x1d, 0x40, 0x06, 0x41, 0x69, 0x11, 0x07, 0xc4, 0x20, 0x01, 0xff, 0x45, - 0x90, 0xd9, 0x64, 0xab, 0x00, 0x42, 0xca, 0x4b, 0x40, 0xab, 0x40, 0xe4, + 0x80, 0x06, 0x47, 0xc6, 0xc7, 0x61, 0xab, 0x40, 0x4c, 0xdb, 0x25, 0x7c, + 0x1d, 0x40, 0x06, 0x56, 0x69, 0x11, 0x07, 0xc4, 0x20, 0x01, 0xff, 0x45, + 0xac, 0xd9, 0x64, 0xab, 0x00, 0x42, 0xdf, 0x4b, 0x40, 0xab, 0x40, 0xe4, 0x7a, 0xa7, 0x00, 0xe6, 0x7c, 0xa7, 0x00, 0xe7, 0x79, 0x1d, 0x00, 0xf2, 0x83, 0xa7, 0x00, 0xf3, 0x85, 0xa7, 0x00, 0xf4, 0x87, 0xa7, 0x40, 0x45, 0xce, 0x34, 0xed, 0x00, 0x00, 0x45, 0xb7, 0x20, 0x2d, 0x01, 0x00, 0xa3, - 0x5c, 0xa4, 0x3e, 0x45, 0x79, 0x20, 0xec, 0x00, 0x00, 0x4a, 0xa5, 0xa2, - 0xc9, 0x1e, 0x00, 0x4e, 0xc2, 0x20, 0x0b, 0x02, 0x00, 0x46, 0xd8, 0x69, - 0x2b, 0x01, 0x00, 0x46, 0x33, 0xd4, 0x2f, 0x01, 0x00, 0x4e, 0xfa, 0x0c, + 0x5c, 0xa4, 0x3e, 0x45, 0x79, 0x20, 0xec, 0x00, 0x00, 0x4a, 0xb8, 0xa2, + 0xc9, 0x1e, 0x00, 0x4e, 0xc2, 0x20, 0x0b, 0x02, 0x00, 0x46, 0xed, 0x69, + 0x2b, 0x01, 0x00, 0x46, 0x4f, 0xd4, 0x2f, 0x01, 0x00, 0x4e, 0xfa, 0x0c, 0x96, 0x1d, 0x00, 0x46, 0x57, 0x04, 0x68, 0x02, 0x80, 0x0d, 0x45, 0x99, 0x20, 0x29, 0x01, 0xc0, 0x00, 0x46, 0x24, 0x06, 0x2d, 0x1e, 0x40, 0x53, - 0xe7, 0x41, 0x1a, 0xdf, 0x41, 0x48, 0x1c, 0x21, 0xef, 0x00, 0x80, 0x0f, + 0xfc, 0x41, 0x1a, 0xdf, 0x41, 0x48, 0x1c, 0x21, 0xef, 0x00, 0x80, 0x0f, 0xaf, 0x01, 0xff, 0x47, 0xfb, 0x10, 0xcb, 0x1e, 0x00, 0x4a, 0x74, 0x20, - 0x09, 0x02, 0x40, 0x4a, 0x23, 0x9d, 0x2f, 0x1e, 0x40, 0x44, 0x4e, 0x66, + 0x09, 0x02, 0x40, 0x4a, 0x36, 0x9d, 0x2f, 0x1e, 0x40, 0x44, 0x63, 0x66, 0xd0, 0x01, 0x00, 0x49, 0xd5, 0x03, 0xee, 0x00, 0x40, 0x06, 0x50, 0x00, - 0x17, 0x45, 0xdc, 0xd1, 0x76, 0x2c, 0x00, 0x43, 0x59, 0x07, 0x27, 0xa7, + 0x17, 0x45, 0xf8, 0xd1, 0x76, 0x2c, 0x00, 0x43, 0x59, 0x07, 0x27, 0xa7, 0x80, 0x04, 0xf6, 0x95, 0x01, 0x40, 0x4a, 0x0b, 0x22, 0x67, 0x02, 0x40, - 0x4b, 0xb5, 0x91, 0x2b, 0x1e, 0x00, 0xa3, 0x37, 0xa4, 0x18, 0x44, 0x04, - 0x0d, 0x66, 0x02, 0x00, 0x4a, 0xe6, 0x66, 0x96, 0x1e, 0x00, 0x4c, 0x4b, + 0x4b, 0xc8, 0x91, 0x2b, 0x1e, 0x00, 0xa3, 0x37, 0xa4, 0x18, 0x44, 0x04, + 0x0d, 0x66, 0x02, 0x00, 0x4a, 0xfb, 0x66, 0x96, 0x1e, 0x00, 0x4c, 0x60, 0x51, 0x95, 0xa7, 0x00, 0x46, 0x57, 0x04, 0x27, 0x01, 0x40, 0x48, 0x07, 0x28, 0x68, 0x2c, 0x00, 0x48, 0x1c, 0x21, 0x27, 0x1e, 0x00, 0x03, 0xa0, 0x0a, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x23, 0x1e, 0x00, 0x45, 0x25, 0x06, - 0x25, 0x1e, 0x40, 0x44, 0x4e, 0x66, 0x1f, 0x02, 0x00, 0x46, 0x57, 0xb8, + 0x25, 0x1e, 0x40, 0x44, 0x63, 0x66, 0x1f, 0x02, 0x00, 0x46, 0x73, 0xb8, 0x29, 0x1e, 0x00, 0x49, 0xd5, 0x03, 0x25, 0x01, 0x40, 0x06, 0x50, 0x00, 0x23, 0x44, 0x98, 0x1e, 0x63, 0x02, 0x00, 0x42, 0x22, 0x00, 0xa3, 0x01, 0x00, 0x07, 0xd0, 0x25, 0x01, 0xff, 0xe1, 0xbb, 0xa7, 0x00, 0xe9, 0xbd, 0xa7, 0x00, 0x44, 0xd6, 0x02, 0x42, 0x02, 0x00, 0xf5, 0xbf, 0xa7, 0x40, 0x45, 0xce, 0x34, 0xf5, 0x01, 0x00, 0x45, 0xb7, 0x20, 0x1f, 0x01, 0x00, 0xa3, 0x24, 0x49, 0xec, 0x1b, 0x21, 0x01, 0x00, 0x44, 0x04, 0x0d, 0x60, - 0x02, 0x00, 0x46, 0xd8, 0x69, 0x21, 0x1e, 0x00, 0x4e, 0x6a, 0x3e, 0xa1, - 0xa7, 0x00, 0x4c, 0x4b, 0x51, 0x83, 0x1d, 0x00, 0x46, 0x57, 0x04, 0xe5, - 0x01, 0x40, 0x44, 0x4e, 0x66, 0xe7, 0x01, 0x00, 0x46, 0x57, 0xb8, 0x23, + 0x02, 0x00, 0x46, 0xed, 0x69, 0x21, 0x1e, 0x00, 0x4e, 0x7f, 0x3e, 0xa1, + 0xa7, 0x00, 0x4c, 0x60, 0x51, 0x83, 0x1d, 0x00, 0x46, 0x57, 0x04, 0xe5, + 0x01, 0x40, 0x44, 0x63, 0x66, 0xe7, 0x01, 0x00, 0x46, 0x73, 0xb8, 0x23, 0x01, 0x00, 0x49, 0xd5, 0x03, 0x1d, 0x01, 0x40, 0x06, 0x50, 0x00, 0x0d, - 0x4b, 0x99, 0x93, 0xa9, 0x02, 0xc0, 0x00, 0x4b, 0x55, 0x90, 0x00, 0xdf, + 0x4b, 0xac, 0x93, 0xa9, 0x02, 0xc0, 0x00, 0x4b, 0x68, 0x90, 0x00, 0xdf, 0x41, 0x49, 0xec, 0x1b, 0x1f, 0x1e, 0x00, 0x44, 0x04, 0x0d, 0x92, 0x01, - 0x00, 0x4c, 0x92, 0x20, 0x6e, 0x1d, 0x00, 0x4c, 0x4b, 0x51, 0x82, 0x1d, + 0x00, 0x4c, 0x92, 0x20, 0x6e, 0x1d, 0x00, 0x4c, 0x60, 0x51, 0x82, 0x1d, 0x00, 0x46, 0x57, 0x04, 0x99, 0xa7, 0x40, 0x06, 0x50, 0x00, 0x92, 0x01, - 0x0e, 0x54, 0x71, 0x81, 0x01, 0x42, 0x1d, 0x01, 0x4b, 0x01, 0x80, 0x69, + 0x0e, 0x69, 0x71, 0x81, 0x01, 0x42, 0x1d, 0x01, 0x4b, 0x01, 0x80, 0x69, 0x42, 0xa4, 0x02, 0x83, 0x02, 0x80, 0x3e, 0xf4, 0x6b, 0xa7, 0x80, 0x35, 0x42, 0x6d, 0x25, 0x92, 0x02, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x48, 0xb2, 0x11, 0xb9, 0x01, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0xa3, 0x12, 0x4c, - 0x4b, 0x51, 0x18, 0xdf, 0x01, 0x4e, 0xfa, 0x0c, 0x9a, 0x1d, 0x00, 0x44, - 0xae, 0x15, 0xba, 0x01, 0x40, 0x44, 0x4e, 0x66, 0xef, 0x01, 0x00, 0x43, + 0x60, 0x51, 0x18, 0xdf, 0x01, 0x4e, 0xfa, 0x0c, 0x9a, 0x1d, 0x00, 0x44, + 0xae, 0x15, 0xba, 0x01, 0x40, 0x44, 0x63, 0x66, 0xef, 0x01, 0x00, 0x43, 0x89, 0x08, 0x93, 0x02, 0x40, 0xe8, 0xf0, 0x00, 0x40, 0x06, 0x50, 0x00, - 0x01, 0xff, 0x44, 0x88, 0x08, 0x86, 0x02, 0x00, 0x4a, 0xd9, 0xa0, 0x0b, - 0xdf, 0x81, 0x0c, 0x4c, 0x4b, 0x51, 0x8b, 0x1d, 0x00, 0x4e, 0xfa, 0x0c, - 0x98, 0x1d, 0x40, 0x49, 0x28, 0xab, 0x0c, 0xdf, 0x41, 0x06, 0x50, 0x00, - 0x01, 0xff, 0x4c, 0x33, 0x4a, 0x3c, 0xab, 0x00, 0x4c, 0x4b, 0x51, 0x14, + 0x01, 0xff, 0x44, 0x88, 0x08, 0x86, 0x02, 0x00, 0x4a, 0xec, 0xa0, 0x0b, + 0xdf, 0x81, 0x0c, 0x4c, 0x60, 0x51, 0x8b, 0x1d, 0x00, 0x4e, 0xfa, 0x0c, + 0x98, 0x1d, 0x40, 0x49, 0x3b, 0xab, 0x0c, 0xdf, 0x41, 0x06, 0x50, 0x00, + 0x01, 0xff, 0x4c, 0x48, 0x4a, 0x3c, 0xab, 0x00, 0x4c, 0x60, 0x51, 0x14, 0xdf, 0x41, 0x42, 0x9e, 0x01, 0x25, 0xa7, 0x00, 0x43, 0x68, 0x00, 0x23, 0xa7, 0x40, 0x45, 0xce, 0x34, 0xe9, 0x00, 0x00, 0x45, 0xb7, 0x20, 0x15, - 0x01, 0x00, 0xa3, 0x76, 0xa4, 0x55, 0x48, 0x7d, 0xbc, 0x34, 0xab, 0x00, - 0x45, 0x79, 0x20, 0xe8, 0x00, 0x00, 0x4a, 0xa5, 0xa2, 0xbb, 0x1e, 0x00, - 0x4e, 0xc2, 0x20, 0x07, 0x02, 0x00, 0x46, 0xd8, 0x69, 0x13, 0x01, 0x80, - 0x25, 0x45, 0x4a, 0x27, 0x78, 0x2c, 0x00, 0x46, 0x33, 0xd4, 0x19, 0x01, + 0x01, 0x00, 0xa3, 0x76, 0xa4, 0x55, 0x48, 0x99, 0xbc, 0x34, 0xab, 0x00, + 0x45, 0x79, 0x20, 0xe8, 0x00, 0x00, 0x4a, 0xb8, 0xa2, 0xbb, 0x1e, 0x00, + 0x4e, 0xc2, 0x20, 0x07, 0x02, 0x00, 0x46, 0xed, 0x69, 0x13, 0x01, 0x80, + 0x25, 0x45, 0x4a, 0x27, 0x78, 0x2c, 0x00, 0x46, 0x4f, 0xd4, 0x19, 0x01, 0x00, 0x4e, 0xfa, 0x0c, 0x92, 0x1d, 0x00, 0x46, 0x57, 0x04, 0x47, 0x02, 0x00, 0x45, 0x99, 0x20, 0xbd, 0x1e, 0xc0, 0x00, 0x46, 0x24, 0x06, 0x1b, 0x1e, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0x17, 0x1e, 0x00, 0x45, 0x79, 0x20, 0x15, 0x1e, 0x40, 0x48, 0x1c, 0x21, 0xeb, 0x00, 0x00, 0xaf, 0x01, 0xff, 0x02, 0xc6, 0x00, 0x06, 0x4a, 0x74, 0x20, 0x05, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x17, 0x01, 0x00, 0x45, 0x25, 0x06, 0xb9, - 0x1e, 0x40, 0x44, 0x4e, 0x66, 0x1b, 0x01, 0x00, 0x46, 0x57, 0xb8, 0x29, + 0x1e, 0x40, 0x44, 0x63, 0x66, 0x1b, 0x01, 0x00, 0x46, 0x73, 0xb8, 0x29, 0x02, 0x80, 0x32, 0x49, 0xd5, 0x03, 0xea, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x04, 0x1a, 0x00, 0x06, 0x45, 0x25, 0x06, 0x19, 0x1e, 0x40, 0x45, 0xce, 0x34, 0xbf, 0x1e, 0x00, 0x49, 0xf9, 0x10, 0xc7, 0x1e, 0x00, 0x45, - 0x79, 0x20, 0xc1, 0x1e, 0x00, 0x4a, 0xa5, 0xa2, 0xc3, 0x1e, 0x00, 0x45, - 0x99, 0x20, 0xc5, 0x1e, 0x40, 0x4a, 0x37, 0x9d, 0x1d, 0x1e, 0x40, 0x06, - 0x50, 0x00, 0x8a, 0x01, 0x49, 0x71, 0xad, 0x38, 0x02, 0x00, 0xa5, 0x64, + 0x79, 0x20, 0xc1, 0x1e, 0x00, 0x4a, 0xb8, 0xa2, 0xc3, 0x1e, 0x00, 0x45, + 0x99, 0x20, 0xc5, 0x1e, 0x40, 0x4a, 0x4a, 0x9d, 0x1d, 0x1e, 0x40, 0x06, + 0x50, 0x00, 0x8a, 0x01, 0x49, 0x84, 0xad, 0x38, 0x02, 0x00, 0xa5, 0x64, 0xaf, 0x2c, 0x42, 0x9f, 0x03, 0x71, 0xa7, 0x00, 0xfa, 0xf3, 0x01, 0xc0, - 0x00, 0x80, 0x01, 0xff, 0x47, 0x2c, 0x43, 0xa3, 0x02, 0x80, 0x06, 0x4a, - 0xfe, 0x8f, 0xc6, 0x01, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x88, - 0x08, 0xa5, 0x02, 0x00, 0x4e, 0xfa, 0x0c, 0x66, 0xab, 0x40, 0x06, 0xae, + 0x00, 0x80, 0x01, 0xff, 0x47, 0x41, 0x43, 0xa3, 0x02, 0x80, 0x06, 0x4a, + 0x11, 0x90, 0xc6, 0x01, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x88, + 0x08, 0xa5, 0x02, 0x00, 0x4e, 0xfa, 0x0c, 0x66, 0xab, 0x40, 0x06, 0xc3, 0x3c, 0x1c, 0x05, 0x3d, 0x01, 0x01, 0xff, 0xf2, 0x48, 0xab, 0x80, 0x0c, - 0x45, 0x7b, 0x44, 0xd3, 0xa7, 0x00, 0x44, 0xff, 0x9b, 0xd5, 0xa7, 0x40, - 0x52, 0x2d, 0x4a, 0x4a, 0xab, 0x40, 0xe9, 0x31, 0x01, 0x00, 0xea, 0x37, + 0x45, 0x90, 0x44, 0xd3, 0xa7, 0x00, 0x44, 0x12, 0x9c, 0xd5, 0xa7, 0x40, + 0x52, 0x42, 0x4a, 0x4a, 0xab, 0x40, 0xe9, 0x31, 0x01, 0x00, 0xea, 0x37, 0x02, 0xc0, 0x00, 0x4c, 0xdb, 0x25, 0x5f, 0x02, 0xc0, 0x00, 0x49, 0x24, - 0x21, 0x84, 0x02, 0x40, 0x43, 0xee, 0x8e, 0x9f, 0x1e, 0x00, 0x4a, 0x0b, - 0xab, 0xa4, 0x02, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4c, 0x4b, + 0x21, 0x84, 0x02, 0x40, 0x43, 0x01, 0x8f, 0x9f, 0x1e, 0x00, 0x4a, 0x1e, + 0xab, 0xa4, 0x02, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4c, 0x60, 0x51, 0x12, 0xdf, 0x01, 0x4e, 0xfa, 0x0c, 0x19, 0xdf, 0x41, 0xa3, 0x56, 0x04, 0x9f, 0x0a, 0x46, 0x44, 0x04, 0x0d, 0x57, 0x02, 0x80, 0x39, 0x4a, - 0xe6, 0x66, 0x0f, 0x1e, 0x00, 0x03, 0x7d, 0x02, 0x23, 0x4c, 0x4b, 0x51, + 0xfb, 0x66, 0x0f, 0x1e, 0x00, 0x03, 0x7d, 0x02, 0x23, 0x4c, 0x60, 0x51, 0x81, 0x1d, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x43, 0xaf, 0x15, 0x56, - 0x02, 0x00, 0x45, 0x0e, 0xd6, 0x8c, 0x01, 0x40, 0x53, 0x5a, 0x44, 0xc8, - 0xa7, 0x00, 0x45, 0x58, 0x04, 0x11, 0x01, 0x40, 0x51, 0x01, 0x52, 0x25, - 0xdf, 0x01, 0x49, 0x95, 0x20, 0x6d, 0x1d, 0x40, 0x49, 0x31, 0xab, 0x91, + 0x02, 0x00, 0x45, 0x2a, 0xd6, 0x8c, 0x01, 0x40, 0x53, 0x6f, 0x44, 0xc8, + 0xa7, 0x00, 0x45, 0x58, 0x04, 0x11, 0x01, 0x40, 0x51, 0x16, 0x52, 0x25, + 0xdf, 0x01, 0x49, 0x95, 0x20, 0x6d, 0x1d, 0x40, 0x49, 0x44, 0xab, 0x91, 0x1d, 0x40, 0x45, 0x5c, 0x00, 0x0b, 0x1e, 0x00, 0x45, 0x25, 0x06, 0x0d, - 0x1e, 0x40, 0x44, 0x4e, 0x66, 0x0f, 0x01, 0x00, 0x46, 0x57, 0xb8, 0x11, - 0x1e, 0x00, 0x4f, 0x1c, 0x68, 0x13, 0x1e, 0x00, 0x43, 0x89, 0x08, 0x21, + 0x1e, 0x40, 0x44, 0x63, 0x66, 0x0f, 0x01, 0x00, 0x46, 0x73, 0xb8, 0x11, + 0x1e, 0x00, 0x4f, 0x31, 0x68, 0x13, 0x1e, 0x00, 0x43, 0x89, 0x08, 0x21, 0x02, 0x40, 0x06, 0x50, 0x00, 0x49, 0x42, 0x49, 0x00, 0x53, 0xab, 0x80, 0x31, 0x06, 0x48, 0x19, 0x13, 0x42, 0x10, 0x00, 0x6f, 0xa7, 0x00, 0x48, - 0xd5, 0xc1, 0x2d, 0xa7, 0xc0, 0x00, 0x4b, 0x08, 0x90, 0x2f, 0xa7, 0x40, - 0x49, 0x3f, 0x69, 0xd1, 0xa7, 0x00, 0xaf, 0x06, 0x4f, 0xaf, 0x6b, 0x5e, - 0x02, 0x40, 0x44, 0x03, 0x75, 0x77, 0x02, 0x00, 0x45, 0x20, 0x26, 0x9a, - 0x02, 0x40, 0x0a, 0xeb, 0x9d, 0x01, 0xff, 0x4a, 0x21, 0xa4, 0x55, 0xab, - 0x00, 0x4a, 0x7d, 0x4a, 0x54, 0xab, 0x40, 0x45, 0xce, 0x34, 0x07, 0x01, + 0xf1, 0xc1, 0x2d, 0xa7, 0xc0, 0x00, 0x4b, 0x1b, 0x90, 0x2f, 0xa7, 0x40, + 0x49, 0x54, 0x69, 0xd1, 0xa7, 0x00, 0xaf, 0x06, 0x4f, 0xc4, 0x6b, 0x5e, + 0x02, 0x40, 0x44, 0x18, 0x75, 0x77, 0x02, 0x00, 0x45, 0x20, 0x26, 0x9a, + 0x02, 0x40, 0x0a, 0xfe, 0x9d, 0x01, 0xff, 0x4a, 0x34, 0xa4, 0x55, 0xab, + 0x00, 0x4a, 0x92, 0x4a, 0x54, 0xab, 0x40, 0x45, 0xce, 0x34, 0x07, 0x01, 0x00, 0x43, 0x16, 0x00, 0x93, 0xa7, 0x00, 0xa3, 0x1e, 0x49, 0xec, 0x1b, - 0x0b, 0x01, 0x00, 0x44, 0x04, 0x0d, 0x88, 0x01, 0x00, 0x4c, 0x4b, 0x51, + 0x0b, 0x01, 0x00, 0x44, 0x04, 0x0d, 0x88, 0x01, 0x00, 0x4c, 0x60, 0x51, 0x94, 0xa7, 0x00, 0x4e, 0xfa, 0x0c, 0x1d, 0xdf, 0x01, 0x46, 0x57, 0x04, - 0x3c, 0x02, 0x40, 0x44, 0x4e, 0x66, 0x0d, 0x01, 0x00, 0x46, 0x57, 0xb8, + 0x3c, 0x02, 0x40, 0x44, 0x63, 0x66, 0x0d, 0x01, 0x00, 0x46, 0x73, 0xb8, 0xe7, 0x00, 0x80, 0x0c, 0x49, 0xd5, 0x03, 0x09, 0x01, 0x00, 0x43, 0x89, - 0x08, 0x55, 0x02, 0x40, 0x4a, 0x23, 0x9d, 0x09, 0x1e, 0x40, 0x06, 0x50, - 0x00, 0x3f, 0xa1, 0x25, 0x43, 0xec, 0x0d, 0xb5, 0xa7, 0x00, 0x0b, 0x17, - 0x96, 0x0c, 0x4c, 0xd4, 0x8b, 0x17, 0x1d, 0x00, 0x47, 0x2a, 0xcb, 0x47, + 0x08, 0x55, 0x02, 0x40, 0x4a, 0x36, 0x9d, 0x09, 0x1e, 0x40, 0x06, 0x50, + 0x00, 0x3f, 0xa1, 0x25, 0x43, 0xec, 0x0d, 0xb5, 0xa7, 0x00, 0x0b, 0x2a, + 0x96, 0x0c, 0x4c, 0xdb, 0x8b, 0x17, 0x1d, 0x00, 0x47, 0x46, 0xcb, 0x47, 0xa7, 0x40, 0xe5, 0x32, 0xab, 0x00, 0xef, 0x3d, 0xab, 0xc0, 0x00, 0x4c, - 0xdb, 0x25, 0x3e, 0xab, 0x40, 0x05, 0xcb, 0x79, 0x06, 0x4a, 0x13, 0xa8, - 0x4d, 0xab, 0x40, 0x45, 0x90, 0xd9, 0x30, 0xab, 0x00, 0xe5, 0x33, 0xab, - 0x00, 0xef, 0x75, 0x02, 0x40, 0x04, 0x9f, 0x0a, 0x2a, 0x48, 0x7d, 0xbc, - 0x97, 0xa7, 0x00, 0x44, 0x04, 0x0d, 0x53, 0x02, 0x00, 0x4a, 0xe6, 0x66, - 0x07, 0x1e, 0x00, 0x4c, 0x92, 0x20, 0x6c, 0x1d, 0x00, 0x4c, 0x4b, 0x51, - 0x80, 0x1d, 0x00, 0x46, 0x57, 0x04, 0x80, 0x01, 0x00, 0x46, 0x0d, 0xd6, + 0xdb, 0x25, 0x3e, 0xab, 0x40, 0x05, 0xd2, 0x79, 0x06, 0x4a, 0x26, 0xa8, + 0x4d, 0xab, 0x40, 0x45, 0xac, 0xd9, 0x30, 0xab, 0x00, 0xe5, 0x33, 0xab, + 0x00, 0xef, 0x75, 0x02, 0x40, 0x04, 0x9f, 0x0a, 0x2a, 0x48, 0x99, 0xbc, + 0x97, 0xa7, 0x00, 0x44, 0x04, 0x0d, 0x53, 0x02, 0x00, 0x4a, 0xfb, 0x66, + 0x07, 0x1e, 0x00, 0x4c, 0x92, 0x20, 0x6c, 0x1d, 0x00, 0x4c, 0x60, 0x51, + 0x80, 0x1d, 0x00, 0x46, 0x57, 0x04, 0x80, 0x01, 0x00, 0x46, 0x29, 0xd6, 0x83, 0x01, 0x40, 0x45, 0x5c, 0x00, 0x03, 0x1e, 0x00, 0x45, 0x25, 0x06, 0x05, 0x1e, 0x40, 0x80, 0x44, 0xe1, 0x33, 0xa7, 0x00, 0xe5, 0xe6, 0x00, - 0x80, 0x2a, 0x44, 0x91, 0xd9, 0x51, 0x02, 0x80, 0x1d, 0x4a, 0xa7, 0xa5, + 0x80, 0x2a, 0x44, 0xad, 0xd9, 0x51, 0x02, 0x80, 0x1d, 0x4a, 0xba, 0xa5, 0xc3, 0xa7, 0x00, 0xef, 0x35, 0xa7, 0x00, 0xf5, 0x37, 0xa7, 0x00, 0xf6, - 0x39, 0xa7, 0x80, 0x04, 0xf9, 0x3d, 0xa7, 0x40, 0x54, 0x44, 0x3b, 0x3b, + 0x39, 0xa7, 0x80, 0x04, 0xf9, 0x3d, 0xa7, 0x40, 0x54, 0x59, 0x3b, 0x3b, 0xa7, 0x40, 0x54, 0xf4, 0x0c, 0x90, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x45, 0xce, 0x34, 0xfd, 0x01, 0x00, 0x46, 0xd8, 0x69, 0xe3, 0x01, - 0x40, 0x4e, 0xe2, 0x74, 0x31, 0xab, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, + 0xff, 0x45, 0xce, 0x34, 0xfd, 0x01, 0x00, 0x46, 0xed, 0x69, 0xe3, 0x01, + 0x40, 0x4e, 0xf7, 0x74, 0x31, 0xab, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0xe1, 0x00, 0x00, 0x45, 0xb7, 0x20, 0x03, 0x01, 0x80, 0xb5, 0x01, 0xa3, 0x82, 0x01, 0xa4, 0x53, 0x45, 0x79, 0x20, 0xe0, 0x00, - 0x00, 0x4a, 0xa5, 0xa2, 0xa3, 0x1e, 0x00, 0x4e, 0xc2, 0x20, 0x03, 0x02, - 0x00, 0x46, 0xd8, 0x69, 0x01, 0x01, 0x00, 0x46, 0x33, 0xd4, 0x05, 0x01, + 0x00, 0x4a, 0xb8, 0xa2, 0xa3, 0x1e, 0x00, 0x4e, 0xc2, 0x20, 0x03, 0x02, + 0x00, 0x46, 0xed, 0x69, 0x01, 0x01, 0x00, 0x46, 0x4f, 0xd4, 0x05, 0x01, 0x00, 0xb2, 0x0c, 0x46, 0x57, 0x04, 0x65, 0x2c, 0x00, 0x45, 0x99, 0x20, 0xe3, 0x00, 0x40, 0x4d, 0xfb, 0x0c, 0x8f, 0x1d, 0x00, 0xa9, 0x01, 0xff, - 0x4d, 0xc0, 0x6b, 0x9a, 0x1e, 0x00, 0x03, 0xa2, 0x01, 0x01, 0xff, 0x45, + 0x4d, 0xd5, 0x6b, 0x9a, 0x1e, 0x00, 0x03, 0xa2, 0x01, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xe5, 0x00, 0x80, 0x06, 0x45, 0x25, 0x06, 0x01, 0x1e, 0x40, - 0x4a, 0x23, 0x9d, 0xfb, 0x01, 0x40, 0x48, 0x1c, 0x21, 0xe4, 0x00, 0x80, + 0x4a, 0x36, 0x9d, 0xfb, 0x01, 0x40, 0x48, 0x1c, 0x21, 0xe4, 0x00, 0x80, 0x20, 0xaf, 0x01, 0xff, 0x02, 0xc6, 0x00, 0x06, 0x4a, 0x74, 0x20, 0x01, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x27, 0x02, 0x80, 0x06, 0x45, 0x25, 0x06, - 0xa1, 0x1e, 0x40, 0x4b, 0x58, 0x8f, 0xe1, 0x01, 0x40, 0x4b, 0x58, 0x8f, - 0xdf, 0x01, 0x40, 0x44, 0x4e, 0x66, 0xce, 0x01, 0x00, 0x49, 0xd5, 0x03, + 0xa1, 0x1e, 0x40, 0x4b, 0x6b, 0x8f, 0xe1, 0x01, 0x40, 0x4b, 0x6b, 0x8f, + 0xdf, 0x01, 0x40, 0x44, 0x63, 0x66, 0xce, 0x01, 0x00, 0x49, 0xd5, 0x03, 0xe2, 0x00, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0xa5, 0x1e, 0x00, 0x49, 0xf9, 0x10, 0xad, 0x1e, 0x00, 0x45, 0x79, 0x20, - 0xa7, 0x1e, 0x00, 0x4a, 0xa5, 0xa2, 0xa9, 0x1e, 0x00, 0x45, 0x99, 0x20, + 0xa7, 0x1e, 0x00, 0x4a, 0xb8, 0xa2, 0xa9, 0x1e, 0x00, 0x45, 0x99, 0x20, 0xab, 0x1e, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0xaf, 0x1e, 0x00, 0x49, 0xf9, 0x10, 0xb7, 0x1e, 0x00, 0x45, 0x79, 0x20, 0xb1, - 0x1e, 0x00, 0x4a, 0xa5, 0xa2, 0xb3, 0x1e, 0x00, 0x45, 0x99, 0x20, 0xb5, - 0x1e, 0x40, 0x4d, 0xc9, 0x7c, 0x7b, 0x1d, 0x00, 0x4d, 0xea, 0x81, 0x7e, - 0x1d, 0x40, 0xa1, 0x8d, 0x03, 0x02, 0xea, 0x05, 0xf1, 0x02, 0x4c, 0x58, + 0x1e, 0x00, 0x4a, 0xb8, 0xa2, 0xb3, 0x1e, 0x00, 0x45, 0x99, 0x20, 0xb5, + 0x1e, 0x40, 0x4d, 0xd0, 0x7c, 0x7b, 0x1d, 0x00, 0x4d, 0xf1, 0x81, 0x7e, + 0x1d, 0x40, 0xa1, 0x8d, 0x03, 0x02, 0xea, 0x05, 0xf1, 0x02, 0x4c, 0x5f, 0x86, 0xc0, 0x01, 0x00, 0x4c, 0xcf, 0x25, 0x94, 0x02, 0x80, 0xdd, 0x02, - 0x55, 0x01, 0x38, 0x96, 0x02, 0x80, 0xc4, 0x02, 0x4d, 0xcd, 0x7d, 0xc1, + 0x55, 0x16, 0x38, 0x96, 0x02, 0x80, 0xc4, 0x02, 0x4d, 0xd4, 0x7d, 0xc1, 0x01, 0x00, 0x5b, 0xcc, 0x1a, 0x95, 0x02, 0x00, 0x02, 0x88, 0x00, 0x95, - 0x02, 0xb3, 0x18, 0x4f, 0x35, 0x6d, 0xbb, 0x01, 0x00, 0x58, 0x9f, 0x28, - 0x24, 0x1d, 0x00, 0x44, 0xff, 0x9b, 0xbf, 0x01, 0x00, 0x42, 0x99, 0x22, - 0xa6, 0x01, 0x40, 0x4e, 0xc4, 0x71, 0x8f, 0xa7, 0x00, 0x0d, 0x48, 0x38, - 0x0d, 0x4a, 0x53, 0xa9, 0x97, 0x02, 0xc0, 0x00, 0x4a, 0x33, 0x43, 0x0f, + 0x02, 0xb3, 0x18, 0x4f, 0x4a, 0x6d, 0xbb, 0x01, 0x00, 0x58, 0x9f, 0x28, + 0x24, 0x1d, 0x00, 0x44, 0x12, 0x9c, 0xbf, 0x01, 0x00, 0x42, 0x99, 0x22, + 0xa6, 0x01, 0x40, 0x4e, 0xd9, 0x71, 0x8f, 0xa7, 0x00, 0x0d, 0x5d, 0x38, + 0x0d, 0x4a, 0x66, 0xa9, 0x97, 0x02, 0xc0, 0x00, 0x4a, 0x48, 0x43, 0x0f, 0xdf, 0x41, 0xe1, 0x00, 0x1d, 0x80, 0xda, 0x01, 0xe2, 0x99, 0x02, 0x80, 0xce, 0x01, 0xe3, 0x04, 0x1d, 0x00, 0xe4, 0x05, 0x1d, 0x00, 0xe5, 0x07, 0x1d, 0x80, 0xb4, 0x01, 0xe6, 0x30, 0xa7, 0x00, 0xe7, 0x62, 0x02, 0x80, @@ -9309,27 +9310,27 @@ static const unsigned char uname2c_tree[210697] = { 0xf5, 0x1c, 0x1d, 0x00, 0xf6, 0x20, 0x1d, 0x00, 0xf7, 0x21, 0x1d, 0x00, 0xf9, 0x8f, 0x02, 0x00, 0xfa, 0x22, 0x1d, 0x40, 0x06, 0x76, 0x06, 0x01, 0xff, 0xe5, 0x7b, 0x2c, 0x00, 0xe7, 0x02, 0xdf, 0x01, 0xeb, 0x10, 0xdf, - 0x01, 0xed, 0xfa, 0xa7, 0x00, 0xf2, 0x1a, 0x1d, 0x40, 0x4f, 0xb7, 0x63, + 0x01, 0xed, 0xfa, 0xa7, 0x00, 0xf2, 0x1a, 0x1d, 0x40, 0x4f, 0xcc, 0x63, 0x46, 0xab, 0x00, 0x08, 0x1a, 0x13, 0x06, 0x42, 0x9f, 0x03, 0x76, 0xa7, 0x40, 0xee, 0x0e, 0x1d, 0x00, 0xf2, 0x19, 0x1d, 0x40, 0xe5, 0x76, 0x02, - 0x00, 0x45, 0x03, 0xdf, 0x10, 0x1d, 0x00, 0xf5, 0x15, 0x1d, 0x40, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x44, 0xdd, 0x9d, 0x04, 0xdf, 0x01, 0x46, 0x57, - 0x04, 0x0c, 0x1d, 0x40, 0x49, 0x6b, 0xb3, 0x81, 0x02, 0x40, 0x4a, 0x0b, + 0x00, 0x45, 0x1f, 0xdf, 0x10, 0x1d, 0x00, 0xf5, 0x15, 0x1d, 0x40, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x44, 0xf0, 0x9d, 0x04, 0xdf, 0x01, 0x46, 0x57, + 0x04, 0x0c, 0x1d, 0x40, 0x49, 0x87, 0xb3, 0x81, 0x02, 0x40, 0x4a, 0x0b, 0x22, 0x9b, 0x02, 0x40, 0x42, 0x53, 0x00, 0x06, 0x1d, 0x00, 0x42, 0x6d, - 0x25, 0x23, 0x1d, 0x40, 0x47, 0xe0, 0xc4, 0x03, 0x1d, 0x40, 0xe5, 0x01, + 0x25, 0x23, 0x1d, 0x40, 0x47, 0xfc, 0xc4, 0x03, 0x1d, 0x40, 0xe5, 0x01, 0x1d, 0x40, 0x4d, 0xe7, 0x0c, 0xc3, 0x01, 0x80, 0x11, 0x07, 0x1b, 0x13, - 0x01, 0xff, 0x48, 0x1d, 0xbc, 0xaa, 0x01, 0x00, 0x58, 0xcf, 0x25, 0xa2, + 0x01, 0xff, 0x48, 0x39, 0xbc, 0xaa, 0x01, 0x00, 0x58, 0xcf, 0x25, 0xa2, 0x02, 0x40, 0x54, 0xf4, 0x0c, 0x0a, 0xdf, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x88, 0x08, 0x0e, 0xdf, 0x01, 0x46, 0x57, 0x04, 0xbe, 0x01, - 0x40, 0x4c, 0xdb, 0x25, 0xa1, 0x02, 0x40, 0x51, 0x10, 0x54, 0xad, 0x02, - 0x00, 0x07, 0xfe, 0x7c, 0x01, 0xff, 0x45, 0xef, 0x0c, 0x98, 0x02, 0x00, - 0x4a, 0x17, 0x54, 0xac, 0x02, 0x40, 0x42, 0x9e, 0x01, 0x25, 0x1d, 0x00, - 0x4d, 0x35, 0x7e, 0xc2, 0x01, 0x40, 0x49, 0x32, 0xad, 0xff, 0xa7, 0x00, - 0xa9, 0x12, 0x09, 0x19, 0x13, 0x06, 0x4a, 0x3b, 0xa8, 0xf7, 0xa7, 0x40, - 0xe6, 0xfb, 0xa7, 0x00, 0xf0, 0xfc, 0xa7, 0x40, 0x46, 0xe5, 0xcd, 0xfe, - 0xa7, 0x00, 0x49, 0x98, 0x55, 0xfd, 0xa7, 0x40, 0x08, 0xea, 0x04, 0x06, + 0x40, 0x4c, 0xdb, 0x25, 0xa1, 0x02, 0x40, 0x51, 0x25, 0x54, 0xad, 0x02, + 0x00, 0x07, 0x05, 0x7d, 0x01, 0xff, 0x45, 0xef, 0x0c, 0x98, 0x02, 0x00, + 0x4a, 0x2c, 0x54, 0xac, 0x02, 0x40, 0x42, 0x9e, 0x01, 0x25, 0x1d, 0x00, + 0x4d, 0x3c, 0x7e, 0xc2, 0x01, 0x40, 0x49, 0x45, 0xad, 0xff, 0xa7, 0x00, + 0xa9, 0x12, 0x09, 0x19, 0x13, 0x06, 0x4a, 0x4e, 0xa8, 0xf7, 0xa7, 0x40, + 0xe6, 0xfb, 0xa7, 0x00, 0xf0, 0xfc, 0xa7, 0x40, 0x46, 0x01, 0xce, 0xfe, + 0xa7, 0x00, 0x49, 0xad, 0x55, 0xfd, 0xa7, 0x40, 0x08, 0xea, 0x04, 0x06, 0x44, 0x0e, 0x0f, 0x1d, 0x27, 0x40, 0x06, 0xf2, 0x04, 0x11, 0x08, 0x35, - 0x1d, 0x01, 0xff, 0x42, 0x84, 0xbd, 0x32, 0x01, 0x00, 0x42, 0xca, 0x4b, + 0x1d, 0x01, 0xff, 0x42, 0xa0, 0xbd, 0x32, 0x01, 0x00, 0x42, 0xdf, 0x4b, 0x52, 0x01, 0x40, 0xe1, 0x41, 0x00, 0x80, 0xf8, 0x15, 0xe2, 0x42, 0x00, 0x80, 0xb4, 0x15, 0xe3, 0x43, 0x00, 0x80, 0xcc, 0x14, 0xe4, 0x44, 0x00, 0x80, 0xe6, 0x13, 0xe5, 0x45, 0x00, 0x80, 0xea, 0x11, 0xe6, 0x46, 0x00, @@ -9344,312 +9345,312 @@ static const unsigned char uname2c_tree[210697] = { 0x80, 0x8f, 0x02, 0xf7, 0x57, 0x00, 0x80, 0xce, 0x01, 0xf8, 0x58, 0x00, 0x80, 0xb7, 0x01, 0xf9, 0x59, 0x00, 0x80, 0x58, 0xfa, 0x5a, 0x00, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0x79, 0x01, 0x00, - 0xa3, 0x3a, 0xa4, 0x21, 0x44, 0x04, 0x0d, 0x24, 0x02, 0x00, 0x4a, 0xe6, - 0x66, 0x94, 0x1e, 0x00, 0x4c, 0x4b, 0x51, 0xc6, 0xa7, 0x00, 0xb3, 0x01, - 0xff, 0x45, 0x58, 0x04, 0xb5, 0x01, 0x00, 0x49, 0x91, 0xb7, 0x7f, 0x2c, + 0xa3, 0x3a, 0xa4, 0x21, 0x44, 0x04, 0x0d, 0x24, 0x02, 0x00, 0x4a, 0xfb, + 0x66, 0x94, 0x1e, 0x00, 0x4c, 0x60, 0x51, 0xc6, 0xa7, 0x00, 0xb3, 0x01, + 0xff, 0x45, 0x58, 0x04, 0xb5, 0x01, 0x00, 0x49, 0xad, 0xb7, 0x7f, 0x2c, 0x40, 0x48, 0x07, 0x28, 0x6b, 0x2c, 0x00, 0x03, 0xa0, 0x0a, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x7b, 0x01, 0x00, 0x45, 0x25, 0x06, 0x92, 0x1e, 0x40, - 0x44, 0x4e, 0x66, 0x7d, 0x01, 0x00, 0x49, 0xd5, 0x03, 0x90, 0x1e, 0x40, - 0x06, 0x50, 0x00, 0x06, 0x43, 0x8f, 0x4c, 0x1c, 0x02, 0x40, 0x45, 0xce, + 0x44, 0x63, 0x66, 0x7d, 0x01, 0x00, 0x49, 0xd5, 0x03, 0x90, 0x1e, 0x40, + 0x06, 0x50, 0x00, 0x06, 0x43, 0xa4, 0x4c, 0x1c, 0x02, 0x40, 0x45, 0xce, 0x34, 0xdd, 0x00, 0x00, 0x4a, 0xd4, 0x03, 0x76, 0x01, 0x00, 0xa4, 0x2b, 0x45, 0x79, 0x20, 0xf2, 0x1e, 0x00, 0x44, 0x04, 0x0d, 0xb3, 0x01, 0x80, - 0x18, 0x44, 0xeb, 0xb6, 0xfe, 0x1e, 0x00, 0x46, 0xd8, 0x69, 0x32, 0x02, + 0x18, 0x44, 0x07, 0xb7, 0xfe, 0x1e, 0x00, 0x46, 0xed, 0x69, 0x32, 0x02, 0x00, 0x46, 0x57, 0x04, 0x4e, 0x02, 0x00, 0x45, 0x99, 0x20, 0xf8, 0x1e, 0x40, 0x46, 0x5b, 0x00, 0xf6, 0x1e, 0x40, 0x48, 0x1c, 0x21, 0x78, 0x01, 0x00, 0x03, 0xa0, 0x0a, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x8e, 0x1e, 0x00, 0x45, 0x25, 0x06, 0xf4, 0x1e, 0x40, 0x07, 0x87, 0x06, 0x01, 0xff, 0x48, 0x1c, 0x21, 0x8c, 0x1e, 0x00, 0x48, 0xed, 0x1b, 0x8a, 0x1e, 0x40, 0x06, - 0x50, 0x00, 0x06, 0x43, 0x00, 0x9c, 0xf7, 0x01, 0x40, 0x45, 0xce, 0x34, + 0x50, 0x00, 0x06, 0x43, 0x13, 0x9c, 0xf7, 0x01, 0x40, 0x45, 0xce, 0x34, 0x82, 0x1e, 0x00, 0x4a, 0xd4, 0x03, 0x74, 0x01, 0x00, 0xa4, 0x0c, 0x45, 0x79, 0x20, 0x80, 0x1e, 0x00, 0x44, 0x04, 0x0d, 0x72, 0x2c, 0x40, 0x48, 0x1c, 0x21, 0x84, 0x1e, 0x00, 0x03, 0xa0, 0x0a, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x86, 0x1e, 0x00, 0x45, 0x25, 0x06, 0x88, 0x1e, 0x40, 0x06, 0x50, - 0x00, 0x26, 0x43, 0x45, 0x04, 0x68, 0xa7, 0x00, 0x4b, 0x93, 0x95, 0x62, - 0xa7, 0x00, 0x07, 0x8d, 0xc9, 0x04, 0xf9, 0x60, 0xa7, 0x40, 0x42, 0xeb, - 0x0d, 0x9a, 0xa7, 0x00, 0x42, 0xca, 0x4b, 0x9c, 0xa7, 0x00, 0x42, 0x30, + 0x00, 0x26, 0x43, 0x45, 0x04, 0x68, 0xa7, 0x00, 0x4b, 0xa6, 0x95, 0x62, + 0xa7, 0x00, 0x07, 0xa9, 0xc9, 0x04, 0xf9, 0x60, 0xa7, 0x40, 0x42, 0xeb, + 0x0d, 0x9a, 0xa7, 0x00, 0x42, 0xdf, 0x4b, 0x9c, 0xa7, 0x00, 0x42, 0x30, 0x12, 0x9e, 0xa7, 0x40, 0xa4, 0x0c, 0x44, 0x04, 0x0d, 0xb2, 0x01, 0x00, - 0x45, 0x99, 0x20, 0x7c, 0x1e, 0x40, 0x4e, 0xfa, 0x3a, 0x5e, 0xa7, 0x00, + 0x45, 0x99, 0x20, 0x7c, 0x1e, 0x40, 0x4e, 0x0f, 0x3b, 0x5e, 0xa7, 0x00, 0x48, 0xfa, 0x10, 0x7e, 0x1e, 0x40, 0x80, 0x06, 0x46, 0xee, 0x13, 0xb1, 0x01, 0x40, 0x43, 0x16, 0x00, 0x44, 0x02, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0xda, 0x00, 0x00, 0x45, 0xb7, 0x20, 0x6c, 0x01, 0x00, 0xa3, 0xbd, 0x01, 0xa4, 0x75, 0x45, 0x79, 0x20, 0xd9, 0x00, 0x00, - 0x02, 0x0b, 0x00, 0x3b, 0x4e, 0xc2, 0x20, 0x16, 0x02, 0x00, 0x46, 0xd8, - 0x69, 0x6a, 0x01, 0x80, 0x28, 0x46, 0x33, 0xd4, 0x72, 0x01, 0x00, 0x4a, - 0x91, 0xa7, 0x6e, 0x01, 0x00, 0x46, 0x57, 0x04, 0xb8, 0xa7, 0x00, 0x45, - 0x99, 0x20, 0x68, 0x01, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x49, 0x24, 0x9d, - 0x78, 0x1e, 0x00, 0x45, 0x25, 0x06, 0x74, 0x1e, 0x40, 0x4e, 0x52, 0x6e, - 0x7a, 0x1e, 0x40, 0x48, 0xa7, 0xa2, 0xe6, 0x1e, 0x00, 0x42, 0x5e, 0x01, + 0x02, 0x0b, 0x00, 0x3b, 0x4e, 0xc2, 0x20, 0x16, 0x02, 0x00, 0x46, 0xed, + 0x69, 0x6a, 0x01, 0x80, 0x28, 0x46, 0x4f, 0xd4, 0x72, 0x01, 0x00, 0x4a, + 0xa4, 0xa7, 0x6e, 0x01, 0x00, 0x46, 0x57, 0x04, 0xb8, 0xa7, 0x00, 0x45, + 0x99, 0x20, 0x68, 0x01, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x49, 0x37, 0x9d, + 0x78, 0x1e, 0x00, 0x45, 0x25, 0x06, 0x74, 0x1e, 0x40, 0x4e, 0x67, 0x6e, + 0x7a, 0x1e, 0x40, 0x48, 0xba, 0xa2, 0xe6, 0x1e, 0x00, 0x42, 0x5e, 0x01, 0xaf, 0x01, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0xe8, 0x1e, 0x00, 0x49, 0xf9, 0x10, 0xf0, 0x1e, 0x00, 0x45, 0x79, 0x20, - 0xea, 0x1e, 0x00, 0x4a, 0xa5, 0xa2, 0xec, 0x1e, 0x00, 0x45, 0x99, 0x20, + 0xea, 0x1e, 0x00, 0x4a, 0xb8, 0xa2, 0xec, 0x1e, 0x00, 0x45, 0x99, 0x20, 0xee, 0x1e, 0x40, 0x48, 0x1c, 0x21, 0xdc, 0x00, 0x80, 0x1a, 0xaf, 0x01, 0xff, 0x47, 0xfb, 0x10, 0xe4, 0x1e, 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x45, 0xce, 0x34, 0x70, 0x01, 0x00, 0x45, 0x79, 0x20, 0x14, 0x02, 0x40, 0x80, 0x01, 0xff, 0x04, 0x1a, 0x00, 0x06, 0x45, 0x25, 0x06, 0x72, 0x1e, - 0x40, 0x45, 0xce, 0x34, 0xd7, 0x01, 0x00, 0x45, 0x03, 0x90, 0xd9, 0x01, - 0x00, 0x45, 0x79, 0x20, 0xdb, 0x01, 0x00, 0x46, 0xd8, 0x69, 0xd5, 0x01, - 0x40, 0x44, 0x4e, 0x66, 0xd3, 0x01, 0x00, 0x49, 0xd5, 0x03, 0xdb, 0x00, + 0x40, 0x45, 0xce, 0x34, 0xd7, 0x01, 0x00, 0x45, 0x16, 0x90, 0xd9, 0x01, + 0x00, 0x45, 0x79, 0x20, 0xdb, 0x01, 0x00, 0x46, 0xed, 0x69, 0xd5, 0x01, + 0x40, 0x44, 0x63, 0x66, 0xd3, 0x01, 0x00, 0x49, 0xd5, 0x03, 0xdb, 0x00, 0xc0, 0x00, 0x46, 0x24, 0x06, 0x76, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x61, 0x44, 0x02, 0x2a, 0xde, 0x00, 0x80, 0x4d, 0x04, 0xcd, 0x09, 0x37, 0x47, - 0x07, 0xcb, 0x2a, 0xa7, 0x00, 0x06, 0x76, 0x06, 0x04, 0xfa, 0x28, 0xa7, - 0x40, 0xe1, 0x6f, 0x2c, 0x80, 0x1e, 0xe8, 0x8d, 0xa7, 0x00, 0x49, 0x3f, + 0x23, 0xcb, 0x2a, 0xa7, 0x00, 0x06, 0x76, 0x06, 0x04, 0xfa, 0x28, 0xa7, + 0x40, 0xe1, 0x6f, 0x2c, 0x80, 0x1e, 0xe8, 0x8d, 0xa7, 0x00, 0x49, 0x54, 0x69, 0x7e, 0xa7, 0x00, 0xeb, 0xb0, 0xa7, 0x00, 0xec, 0x80, 0xa7, 0x00, 0xed, 0x9c, 0x01, 0x00, 0xf4, 0xb1, 0xa7, 0x00, 0xf6, 0x45, 0x02, 0x40, - 0x44, 0x91, 0xd9, 0x70, 0x2c, 0x40, 0x44, 0xf8, 0x0f, 0xbc, 0x01, 0x00, + 0x44, 0xad, 0xd9, 0x70, 0x2c, 0x40, 0x44, 0xf8, 0x0f, 0xbc, 0x01, 0x00, 0x43, 0x2f, 0x27, 0x84, 0x01, 0x00, 0x43, 0x25, 0x09, 0xa7, 0x01, 0x40, 0x4c, 0xdb, 0x25, 0x64, 0xa7, 0xc0, 0x00, 0x52, 0xfd, 0x27, 0x66, 0xa7, 0x40, 0xa3, 0x31, 0xa4, 0x18, 0x44, 0x04, 0x0d, 0xac, 0x01, 0x00, 0x4a, - 0xe6, 0x66, 0x6e, 0x1e, 0x00, 0x4e, 0xfa, 0x0c, 0xae, 0x01, 0x00, 0x46, - 0x57, 0x04, 0x66, 0x01, 0x40, 0x4e, 0xfa, 0x3a, 0x3e, 0x02, 0x00, 0x03, + 0xfb, 0x66, 0x6e, 0x1e, 0x00, 0x4e, 0xfa, 0x0c, 0xae, 0x01, 0x00, 0x46, + 0x57, 0x04, 0x66, 0x01, 0x40, 0x4e, 0x0f, 0x3b, 0x3e, 0x02, 0x00, 0x03, 0xa0, 0x0a, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x6a, 0x1e, 0x00, 0x45, 0x25, - 0x06, 0x6c, 0x1e, 0x40, 0x44, 0x4e, 0x66, 0x64, 0x01, 0x00, 0x46, 0x57, - 0xb8, 0x62, 0x01, 0x00, 0x4f, 0x1c, 0x68, 0x70, 0x1e, 0x00, 0x4a, 0x0b, - 0xa6, 0x1a, 0x02, 0x40, 0x06, 0x50, 0x00, 0x31, 0x47, 0x93, 0xc4, 0x8b, - 0xa7, 0x00, 0xa3, 0x1d, 0x46, 0x28, 0xa8, 0x9e, 0x1e, 0x00, 0x48, 0x1d, - 0xbd, 0xd8, 0xa7, 0x00, 0x05, 0x3d, 0x06, 0x01, 0xff, 0x49, 0xef, 0xad, - 0xae, 0xa7, 0x00, 0x50, 0xb9, 0x5f, 0x4a, 0x02, 0x40, 0x43, 0xed, 0x74, - 0x8f, 0x01, 0x00, 0x46, 0xbf, 0xc0, 0xac, 0xa7, 0x40, 0x45, 0xce, 0x34, + 0x06, 0x6c, 0x1e, 0x40, 0x44, 0x63, 0x66, 0x64, 0x01, 0x00, 0x46, 0x73, + 0xb8, 0x62, 0x01, 0x00, 0x4f, 0x31, 0x68, 0x70, 0x1e, 0x00, 0x4a, 0x1e, + 0xa6, 0x1a, 0x02, 0x40, 0x06, 0x50, 0x00, 0x31, 0x47, 0xaf, 0xc4, 0x8b, + 0xa7, 0x00, 0xa3, 0x1d, 0x46, 0x3b, 0xa8, 0x9e, 0x1e, 0x00, 0x48, 0x39, + 0xbd, 0xd8, 0xa7, 0x00, 0x05, 0x3d, 0x06, 0x01, 0xff, 0x49, 0x0b, 0xae, + 0xae, 0xa7, 0x00, 0x50, 0xce, 0x5f, 0x4a, 0x02, 0x40, 0x43, 0x02, 0x75, + 0x8f, 0x01, 0x00, 0x46, 0xdb, 0xc0, 0xac, 0xa7, 0x40, 0x45, 0xce, 0x34, 0x5a, 0x01, 0x80, 0x53, 0xa3, 0x32, 0x04, 0x9f, 0x0a, 0x1b, 0x44, 0x04, - 0x0d, 0xc5, 0xa7, 0x00, 0x4e, 0x6a, 0x3e, 0xa8, 0xa7, 0x00, 0xb3, 0x01, - 0xff, 0x53, 0x5a, 0x44, 0xc9, 0xa7, 0x00, 0x49, 0x91, 0xb7, 0x7e, 0x2c, + 0x0d, 0xc5, 0xa7, 0x00, 0x4e, 0x7f, 0x3e, 0xa8, 0xa7, 0x00, 0xb3, 0x01, + 0xff, 0x53, 0x6f, 0x44, 0xc9, 0xa7, 0x00, 0x49, 0xad, 0xb7, 0x7e, 0x2c, 0x40, 0x45, 0x5c, 0x00, 0x60, 0x1e, 0x00, 0x45, 0x25, 0x06, 0x62, 0x1e, - 0xc0, 0x00, 0x4e, 0xe7, 0x1b, 0x68, 0x1e, 0x40, 0x44, 0x4e, 0x66, 0x60, - 0x01, 0x80, 0x12, 0x46, 0x57, 0xb8, 0x5e, 0x01, 0x00, 0x49, 0xd5, 0x03, - 0x5c, 0x01, 0x00, 0x4a, 0x0b, 0xa6, 0x18, 0x02, 0x40, 0x4e, 0xe7, 0x1b, + 0xc0, 0x00, 0x4e, 0xe7, 0x1b, 0x68, 0x1e, 0x40, 0x44, 0x63, 0x66, 0x60, + 0x01, 0x80, 0x12, 0x46, 0x73, 0xb8, 0x5e, 0x01, 0x00, 0x49, 0xd5, 0x03, + 0x5c, 0x01, 0x00, 0x4a, 0x1e, 0xa6, 0x18, 0x02, 0x40, 0x4e, 0xe7, 0x1b, 0x66, 0x1e, 0x40, 0x4e, 0xe7, 0x1b, 0x64, 0x1e, 0x40, 0x80, 0x20, 0x08, - 0x1a, 0x13, 0x06, 0x4a, 0xb7, 0xa9, 0x5c, 0xa7, 0x40, 0x4a, 0xe9, 0x9f, - 0x3e, 0xa7, 0x00, 0xe5, 0x8e, 0x01, 0x00, 0x46, 0xdb, 0xd1, 0xf5, 0xa7, - 0x00, 0x46, 0x1f, 0x26, 0xab, 0xa7, 0x40, 0x47, 0xba, 0xa9, 0x5a, 0xa7, + 0x1a, 0x13, 0x06, 0x4a, 0xca, 0xa9, 0x5c, 0xa7, 0x40, 0x4a, 0xfc, 0x9f, + 0x3e, 0xa7, 0x00, 0xe5, 0x8e, 0x01, 0x00, 0x46, 0xf7, 0xd1, 0xf5, 0xa7, + 0x00, 0x46, 0x1f, 0x26, 0xab, 0xa7, 0x40, 0x47, 0xcd, 0xa9, 0x5a, 0xa7, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0x54, 0x01, 0x00, 0xa3, 0x3f, 0x02, 0x3b, 0x01, 0x1e, 0x4e, 0xc2, 0x20, 0x12, 0x02, 0x00, - 0x4a, 0xe6, 0x66, 0x5e, 0x1e, 0x00, 0x4e, 0x6a, 0x3e, 0xa6, 0xa7, 0x00, + 0x4a, 0xfb, 0x66, 0x5e, 0x1e, 0x00, 0x4e, 0x7f, 0x3e, 0xa6, 0xa7, 0x00, 0x46, 0x57, 0x04, 0x4c, 0x02, 0x00, 0x44, 0xae, 0x15, 0x64, 0x2c, 0x40, 0x02, 0xc6, 0x00, 0x06, 0x4a, 0x74, 0x20, 0x10, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x58, 0x1e, 0x00, 0x45, 0x25, 0x06, 0x5a, 0x1e, 0xc0, 0x00, 0x4b, - 0x58, 0x8f, 0x5c, 0x1e, 0x40, 0x44, 0x4e, 0x66, 0x58, 0x01, 0x00, 0x46, - 0x57, 0xb8, 0x56, 0x01, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4f, 0xf9, - 0x3a, 0x58, 0xa7, 0x00, 0x58, 0xf7, 0x27, 0x56, 0xa7, 0x40, 0x06, 0x50, + 0x6b, 0x8f, 0x5c, 0x1e, 0x40, 0x44, 0x63, 0x66, 0x58, 0x01, 0x00, 0x46, + 0x73, 0xb8, 0x56, 0x01, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4f, 0x0e, + 0x3b, 0x58, 0xa7, 0x00, 0x58, 0xf7, 0x27, 0x56, 0xa7, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0x54, 0x1e, 0x00, 0x49, 0xec, 0x1b, - 0x56, 0x1e, 0x00, 0x48, 0x7d, 0xbc, 0x52, 0xa7, 0x00, 0x44, 0x04, 0x0d, - 0xa4, 0x01, 0x00, 0xb3, 0x01, 0xff, 0x4c, 0x58, 0x8c, 0x54, 0xa7, 0x00, + 0x56, 0x1e, 0x00, 0x48, 0x99, 0xbc, 0x52, 0xa7, 0x00, 0x44, 0x04, 0x0d, + 0xa4, 0x01, 0x00, 0xb3, 0x01, 0xff, 0x4c, 0x5f, 0x8c, 0x54, 0xa7, 0x00, 0x45, 0x58, 0x04, 0x63, 0x2c, 0xc0, 0x00, 0x52, 0xfd, 0x27, 0x50, 0xa7, - 0x40, 0x06, 0x50, 0x00, 0x24, 0xe9, 0xa2, 0x01, 0x00, 0x4b, 0x38, 0x96, - 0xc0, 0xa7, 0x00, 0x44, 0x03, 0x75, 0xb6, 0xa7, 0x00, 0xef, 0x4e, 0xa7, + 0x40, 0x06, 0x50, 0x00, 0x24, 0xe9, 0xa2, 0x01, 0x00, 0x4b, 0x4b, 0x96, + 0xc0, 0xa7, 0x00, 0x44, 0x18, 0x75, 0xb6, 0xa7, 0x00, 0xef, 0x4e, 0xa7, 0x00, 0x04, 0xfc, 0x03, 0x04, 0xf5, 0x22, 0x02, 0x40, 0xe5, 0x90, 0x01, 0x00, 0xef, 0x86, 0x01, 0x40, 0x45, 0xce, 0x34, 0xd3, 0x00, 0x00, 0x45, 0xb7, 0x20, 0x4e, 0x01, 0x00, 0xa3, 0xe3, 0x01, 0xa4, 0xa8, 0x01, 0x45, 0x79, 0x20, 0xd2, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x6e, 0x4e, 0xc2, 0x20, - 0x0e, 0x02, 0x00, 0x02, 0x13, 0x01, 0x58, 0xad, 0x38, 0x46, 0x33, 0xd4, + 0x0e, 0x02, 0x00, 0x02, 0x13, 0x01, 0x58, 0xad, 0x38, 0x46, 0x4f, 0xd4, 0xea, 0x01, 0x80, 0x2b, 0x46, 0x57, 0x04, 0xd8, 0x00, 0x80, 0x1e, 0x45, 0x99, 0x20, 0xd5, 0x00, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0x4c, 0x1e, 0x00, 0x49, 0x1b, 0x21, 0x4e, 0x1e, 0x00, 0x46, - 0xd8, 0x69, 0x2c, 0x02, 0x40, 0x4a, 0x23, 0x9d, 0xfe, 0x01, 0x40, 0x4b, - 0x58, 0x8f, 0xec, 0x01, 0x40, 0x45, 0xd9, 0x69, 0x4c, 0x01, 0x80, 0x06, + 0xed, 0x69, 0x2c, 0x02, 0x40, 0x4a, 0x36, 0x9d, 0xfe, 0x01, 0x40, 0x4b, + 0x6b, 0x8f, 0xec, 0x01, 0x40, 0x45, 0xee, 0x69, 0x4c, 0x01, 0x80, 0x06, 0x4b, 0x93, 0x20, 0x9f, 0x01, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0x52, 0x1e, 0x00, 0x45, 0x79, 0x20, 0x50, 0x1e, 0x40, 0x51, - 0xda, 0x56, 0x4a, 0xa7, 0x00, 0x42, 0x1f, 0x00, 0x4c, 0xa7, 0x40, 0x48, - 0xa7, 0xa2, 0xce, 0x1e, 0x00, 0x42, 0x5e, 0x01, 0xa0, 0x01, 0xc0, 0x00, + 0xef, 0x56, 0x4a, 0xa7, 0x00, 0x42, 0x1f, 0x00, 0x4c, 0xa7, 0x40, 0x48, + 0xba, 0xa2, 0xce, 0x1e, 0x00, 0x42, 0x5e, 0x01, 0xa0, 0x01, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0xda, 0x1e, 0x00, 0x49, 0xf9, 0x10, 0xe2, 0x1e, 0x00, 0x45, 0x79, 0x20, 0xdc, 0x1e, 0x00, 0x4a, - 0xa5, 0xa2, 0xde, 0x1e, 0x00, 0x45, 0x99, 0x20, 0xe0, 0x1e, 0x40, 0x48, + 0xb8, 0xa2, 0xde, 0x1e, 0x00, 0x45, 0x99, 0x20, 0xe0, 0x1e, 0x40, 0x48, 0x1c, 0x21, 0xd6, 0x00, 0x80, 0x2b, 0xaf, 0x01, 0xff, 0x02, 0xc6, 0x00, 0x11, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x45, 0xce, 0x34, 0x50, 0x01, 0x00, 0x45, 0x79, 0x20, 0x0c, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x2e, 0x02, 0x80, - 0x06, 0x45, 0x25, 0x06, 0xcc, 0x1e, 0x40, 0x4b, 0x58, 0x8f, 0x30, 0x02, - 0x40, 0x4b, 0x58, 0x8f, 0x2a, 0x02, 0x40, 0x44, 0x4e, 0x66, 0xd1, 0x01, + 0x06, 0x45, 0x25, 0x06, 0xcc, 0x1e, 0x40, 0x4b, 0x6b, 0x8f, 0x30, 0x02, + 0x40, 0x4b, 0x6b, 0x8f, 0x2a, 0x02, 0x40, 0x44, 0x63, 0x66, 0xd1, 0x01, 0x00, 0x49, 0xd5, 0x03, 0xd4, 0x00, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0xd0, 0x1e, 0x00, 0x49, 0xf9, 0x10, 0xd8, 0x1e, - 0x00, 0x45, 0x79, 0x20, 0xd2, 0x1e, 0x00, 0x4a, 0xa5, 0xa2, 0xd4, 0x1e, + 0x00, 0x45, 0x79, 0x20, 0xd2, 0x1e, 0x00, 0x4a, 0xb8, 0xa2, 0xd4, 0x1e, 0x00, 0x45, 0x99, 0x20, 0xd6, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x04, 0xea, 0xca, 0x01, 0x40, 0x45, 0xce, 0x34, 0x43, 0x01, 0x00, 0xa3, 0x45, 0xa4, - 0x2c, 0x45, 0x79, 0x20, 0xf8, 0x01, 0x00, 0xac, 0x12, 0x4e, 0x6a, 0x3e, - 0xa4, 0xa7, 0x00, 0x4e, 0x7c, 0x75, 0xcb, 0x01, 0x00, 0x45, 0x99, 0x20, - 0xd1, 0x00, 0x40, 0x48, 0x0a, 0x52, 0x9d, 0x01, 0x00, 0x49, 0xe7, 0x66, - 0x48, 0x1e, 0x00, 0x4d, 0x94, 0x7f, 0x20, 0x02, 0x40, 0x48, 0x07, 0x28, + 0x2c, 0x45, 0x79, 0x20, 0xf8, 0x01, 0x00, 0xac, 0x12, 0x4e, 0x7f, 0x3e, + 0xa4, 0xa7, 0x00, 0x4e, 0x91, 0x75, 0xcb, 0x01, 0x00, 0x45, 0x99, 0x20, + 0xd1, 0x00, 0x40, 0x48, 0x1f, 0x52, 0x9d, 0x01, 0x00, 0x49, 0xfc, 0x66, + 0x48, 0x1e, 0x00, 0x4d, 0x9b, 0x7f, 0x20, 0x02, 0x40, 0x48, 0x07, 0x28, 0x90, 0xa7, 0x00, 0x03, 0xa0, 0x0a, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x44, - 0x1e, 0x00, 0x45, 0x25, 0x06, 0x46, 0x1e, 0x40, 0x44, 0x4e, 0x66, 0x47, - 0x01, 0x00, 0x46, 0x57, 0xb8, 0x45, 0x01, 0x00, 0x4f, 0x1c, 0x68, 0x4a, + 0x1e, 0x00, 0x45, 0x25, 0x06, 0x46, 0x1e, 0x40, 0x44, 0x63, 0x66, 0x47, + 0x01, 0x00, 0x46, 0x73, 0xb8, 0x45, 0x01, 0x00, 0x4f, 0x31, 0x68, 0x4a, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x1a, 0x05, 0x7e, 0x02, 0x01, 0xff, 0x48, - 0xe5, 0xb8, 0xd6, 0xa7, 0x00, 0x07, 0xc8, 0xc3, 0x01, 0xff, 0x42, 0x3f, + 0x01, 0xb9, 0xd6, 0xa7, 0x00, 0x07, 0xe4, 0xc3, 0x01, 0xff, 0x42, 0x3f, 0x06, 0xfa, 0x1e, 0x00, 0xf6, 0xfc, 0x1e, 0x40, 0x45, 0xce, 0x34, 0x3e, 0x1e, 0x00, 0x04, 0x9f, 0x0a, 0x06, 0x44, 0x04, 0x0d, 0x6e, 0x2c, 0x40, 0x45, 0x5c, 0x00, 0x40, 0x1e, 0x00, 0x45, 0x25, 0x06, 0x42, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x04, 0xea, 0xc7, 0x01, 0x40, 0x45, 0xce, 0x34, 0x39, - 0x01, 0x00, 0xa2, 0x56, 0xa3, 0x42, 0x02, 0x3b, 0x01, 0x2b, 0x4b, 0xc2, - 0x94, 0x48, 0xa7, 0x00, 0x4a, 0xe6, 0x66, 0x3a, 0x1e, 0x00, 0x07, 0x7d, - 0x02, 0x0f, 0xb3, 0x01, 0xff, 0x4d, 0x7d, 0x75, 0xc8, 0x01, 0x00, 0x45, + 0x01, 0x00, 0xa2, 0x56, 0xa3, 0x42, 0x02, 0x3b, 0x01, 0x2b, 0x4b, 0xd5, + 0x94, 0x48, 0xa7, 0x00, 0x4a, 0xfb, 0x66, 0x3a, 0x1e, 0x00, 0x07, 0x7d, + 0x02, 0x0f, 0xb3, 0x01, 0xff, 0x4d, 0x92, 0x75, 0xc8, 0x01, 0x00, 0x45, 0x58, 0x04, 0x41, 0x01, 0x40, 0x43, 0xc5, 0x06, 0x3f, 0x01, 0x00, 0x45, 0x99, 0x20, 0x62, 0x2c, 0x40, 0x47, 0xfb, 0x10, 0x36, 0x1e, 0x80, 0x06, - 0x48, 0xdb, 0xa0, 0x60, 0x2c, 0x40, 0x4b, 0x58, 0x8f, 0x38, 0x1e, 0x40, - 0x44, 0x4e, 0x66, 0x3d, 0x01, 0x00, 0x46, 0x57, 0xb8, 0x3b, 0x01, 0x00, - 0x4f, 0x1c, 0x68, 0x3c, 0x1e, 0x40, 0x42, 0x17, 0x00, 0x3d, 0x02, 0x00, - 0x43, 0x7f, 0x9b, 0xad, 0xa7, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, + 0x48, 0xee, 0xa0, 0x60, 0x2c, 0x40, 0x4b, 0x6b, 0x8f, 0x38, 0x1e, 0x40, + 0x44, 0x63, 0x66, 0x3d, 0x01, 0x00, 0x46, 0x73, 0xb8, 0x3b, 0x01, 0x00, + 0x4f, 0x31, 0x68, 0x3c, 0x1e, 0x40, 0x42, 0x17, 0x00, 0x3d, 0x02, 0x00, + 0x43, 0x92, 0x9b, 0xad, 0xa7, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0x30, 0x1e, 0x00, 0xa3, 0x33, 0xa4, 0x1f, 0x44, 0x04, 0x0d, - 0x98, 0x01, 0x00, 0x4a, 0xe6, 0x66, 0x34, 0x1e, 0x00, 0x4e, 0x6a, 0x3e, - 0xa2, 0xa7, 0x00, 0x46, 0x57, 0x04, 0x40, 0xa7, 0xc0, 0x00, 0x54, 0xf4, - 0x3a, 0x44, 0xa7, 0x40, 0x48, 0x07, 0x28, 0x69, 0x2c, 0x00, 0x4e, 0xfa, - 0x3a, 0x42, 0xa7, 0x00, 0x48, 0xfa, 0x10, 0x32, 0x1e, 0x40, 0x44, 0x4e, - 0x66, 0xe8, 0x01, 0x00, 0x46, 0x57, 0xb8, 0x36, 0x01, 0x40, 0x06, 0x50, + 0x98, 0x01, 0x00, 0x4a, 0xfb, 0x66, 0x34, 0x1e, 0x00, 0x4e, 0x7f, 0x3e, + 0xa2, 0xa7, 0x00, 0x46, 0x57, 0x04, 0x40, 0xa7, 0xc0, 0x00, 0x54, 0x09, + 0x3b, 0x44, 0xa7, 0x40, 0x48, 0x07, 0x28, 0x69, 0x2c, 0x00, 0x4e, 0x0f, + 0x3b, 0x42, 0xa7, 0x00, 0x48, 0xfa, 0x10, 0x32, 0x1e, 0x40, 0x44, 0x63, + 0x66, 0xe8, 0x01, 0x00, 0x46, 0x73, 0xb8, 0x36, 0x01, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa3, 0x06, 0x46, 0x57, 0x04, 0x48, 0x02, 0x40, 0x49, - 0xd5, 0x03, 0x34, 0x01, 0x00, 0x4b, 0x34, 0x4a, 0xb2, 0xa7, 0x40, 0x06, - 0x50, 0x00, 0x26, 0x07, 0x40, 0x69, 0x0a, 0x43, 0x20, 0x04, 0x96, 0x01, + 0xd5, 0x03, 0x34, 0x01, 0x00, 0x4b, 0x49, 0x4a, 0xb2, 0xa7, 0x40, 0x06, + 0x50, 0x00, 0x26, 0x07, 0x55, 0x69, 0x0a, 0x43, 0x20, 0x04, 0x96, 0x01, 0x00, 0xf3, 0x6c, 0xa7, 0x40, 0xe4, 0x79, 0xa7, 0x00, 0xe6, 0x7b, 0xa7, 0x00, 0xe7, 0x7d, 0xa7, 0x00, 0xf2, 0x82, 0xa7, 0x00, 0xf3, 0x84, 0xa7, 0x00, 0xf4, 0x86, 0xa7, 0x40, 0x45, 0xce, 0x34, 0xcd, 0x00, 0x00, 0x45, 0xb7, 0x20, 0x2c, 0x01, 0x00, 0xa3, 0x59, 0xa4, 0x31, 0x45, 0x79, 0x20, - 0xcc, 0x00, 0x00, 0x4a, 0xa5, 0xa2, 0xc8, 0x1e, 0x00, 0x4e, 0xc2, 0x20, - 0x0a, 0x02, 0x00, 0x46, 0xd8, 0x69, 0x2a, 0x01, 0x00, 0x46, 0x33, 0xd4, + 0xcc, 0x00, 0x00, 0x4a, 0xb8, 0xa2, 0xc8, 0x1e, 0x00, 0x4e, 0xc2, 0x20, + 0x0a, 0x02, 0x00, 0x46, 0xed, 0x69, 0x2a, 0x01, 0x00, 0x46, 0x4f, 0xd4, 0x2e, 0x01, 0x00, 0x46, 0x57, 0x04, 0x97, 0x01, 0x00, 0x45, 0x99, 0x20, 0x28, 0x01, 0xc0, 0x00, 0x46, 0x24, 0x06, 0x2c, 0x1e, 0x40, 0x48, 0x1c, 0x21, 0xcf, 0x00, 0x80, 0x19, 0xaf, 0x01, 0xff, 0x02, 0xc6, 0x00, 0x06, 0x4a, 0x74, 0x20, 0x08, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x30, 0x01, 0x00, - 0x45, 0x25, 0x06, 0xca, 0x1e, 0x40, 0x4a, 0x23, 0x9d, 0x2e, 0x1e, 0x40, - 0x44, 0x4e, 0x66, 0xcf, 0x01, 0x00, 0x49, 0xd5, 0x03, 0xce, 0x00, 0x40, - 0x06, 0x50, 0x00, 0x12, 0x45, 0xdc, 0xd1, 0x75, 0x2c, 0x00, 0x43, 0x59, - 0x07, 0x26, 0xa7, 0x00, 0x44, 0xf2, 0xe7, 0xf6, 0x01, 0x40, 0x4b, 0xb5, + 0x45, 0x25, 0x06, 0xca, 0x1e, 0x40, 0x4a, 0x36, 0x9d, 0x2e, 0x1e, 0x40, + 0x44, 0x63, 0x66, 0xcf, 0x01, 0x00, 0x49, 0xd5, 0x03, 0xce, 0x00, 0x40, + 0x06, 0x50, 0x00, 0x12, 0x45, 0xf8, 0xd1, 0x75, 0x2c, 0x00, 0x43, 0x59, + 0x07, 0x26, 0xa7, 0x00, 0x44, 0x0e, 0xe8, 0xf6, 0x01, 0x40, 0x4b, 0xc8, 0x91, 0x2a, 0x1e, 0x00, 0xa3, 0x2b, 0xa4, 0x0c, 0x44, 0x04, 0x0d, 0xaa, 0xa7, 0x00, 0x46, 0x57, 0x04, 0x26, 0x01, 0x40, 0x48, 0x07, 0x28, 0x67, 0x2c, 0x00, 0x48, 0x1c, 0x21, 0x26, 0x1e, 0x00, 0x03, 0xa0, 0x0a, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x22, 0x1e, 0x00, 0x45, 0x25, 0x06, 0x24, 0x1e, - 0x40, 0x44, 0x4e, 0x66, 0x1e, 0x02, 0x00, 0x46, 0x57, 0xb8, 0x28, 0x1e, + 0x40, 0x44, 0x63, 0x66, 0x1e, 0x02, 0x00, 0x46, 0x73, 0xb8, 0x28, 0x1e, 0x00, 0x49, 0xd5, 0x03, 0x24, 0x01, 0x40, 0x06, 0x50, 0x00, 0x23, 0x44, 0x98, 0x1e, 0x94, 0x01, 0x00, 0x42, 0x22, 0x00, 0xa2, 0x01, 0x00, 0x07, 0xd0, 0x25, 0x01, 0xff, 0xe1, 0xba, 0xa7, 0x00, 0xe9, 0xbc, 0xa7, 0x00, 0x44, 0xd6, 0x02, 0x41, 0x02, 0x00, 0xf5, 0xbe, 0xa7, 0x40, 0x45, 0xce, 0x34, 0xf4, 0x01, 0x00, 0x45, 0xb7, 0x20, 0x1e, 0x01, 0x00, 0xa3, 0x1e, 0x49, 0xec, 0x1b, 0x20, 0x01, 0x00, 0x44, 0x04, 0x0d, 0x93, 0x01, 0x00, - 0x46, 0xd8, 0x69, 0x20, 0x1e, 0x00, 0x4e, 0x6a, 0x3e, 0xa0, 0xa7, 0x00, - 0x46, 0x57, 0x04, 0xe4, 0x01, 0x40, 0x44, 0x4e, 0x66, 0xe6, 0x01, 0x00, - 0x46, 0x57, 0xb8, 0x22, 0x01, 0x00, 0x49, 0xd5, 0x03, 0x1c, 0x01, 0x40, + 0x46, 0xed, 0x69, 0x20, 0x1e, 0x00, 0x4e, 0x7f, 0x3e, 0xa0, 0xa7, 0x00, + 0x46, 0x57, 0x04, 0xe4, 0x01, 0x40, 0x44, 0x63, 0x66, 0xe6, 0x01, 0x00, + 0x46, 0x73, 0xb8, 0x22, 0x01, 0x00, 0x49, 0xd5, 0x03, 0x1c, 0x01, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0xec, 0x1b, 0x1e, 0x1e, 0x00, 0x44, 0x04, 0x0d, 0x91, 0x01, 0x00, 0x46, 0x57, 0x04, 0x98, 0xa7, 0x40, 0x06, - 0x50, 0x00, 0x3b, 0x0e, 0x54, 0x71, 0x2b, 0x42, 0x1d, 0x01, 0x4a, 0x01, + 0x50, 0x00, 0x3b, 0x0e, 0x69, 0x71, 0x2b, 0x42, 0x1d, 0x01, 0x4a, 0x01, 0x00, 0x42, 0xa4, 0x02, 0xa9, 0x01, 0x00, 0xf4, 0x6a, 0xa7, 0x80, 0x16, 0x42, 0x6d, 0x25, 0xb7, 0x01, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x48, 0xb2, - 0x11, 0xb8, 0x01, 0x00, 0x4a, 0xfe, 0x8f, 0xee, 0x01, 0x40, 0xe8, 0xd0, + 0x11, 0xb8, 0x01, 0x00, 0x4a, 0x11, 0x90, 0xee, 0x01, 0x40, 0xe8, 0xd0, 0x00, 0x40, 0x42, 0x9e, 0x01, 0x24, 0xa7, 0x00, 0x43, 0x68, 0x00, 0x22, 0xa7, 0x40, 0x45, 0xce, 0x34, 0xc9, 0x00, 0x00, 0x45, 0xb7, 0x20, 0x14, 0x01, 0x00, 0xa3, 0x64, 0xa4, 0x43, 0x45, 0x79, 0x20, 0xc8, 0x00, 0x00, - 0x4a, 0xa5, 0xa2, 0xba, 0x1e, 0x00, 0x4e, 0xc2, 0x20, 0x06, 0x02, 0x00, - 0x46, 0xd8, 0x69, 0x12, 0x01, 0x80, 0x19, 0x46, 0x33, 0xd4, 0x18, 0x01, + 0x4a, 0xb8, 0xa2, 0xba, 0x1e, 0x00, 0x4e, 0xc2, 0x20, 0x06, 0x02, 0x00, + 0x46, 0xed, 0x69, 0x12, 0x01, 0x80, 0x19, 0x46, 0x4f, 0xd4, 0x18, 0x01, 0x00, 0x46, 0x57, 0x04, 0x46, 0x02, 0x00, 0x45, 0x99, 0x20, 0xbc, 0x1e, 0xc0, 0x00, 0x46, 0x24, 0x06, 0x1a, 0x1e, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0x16, 0x1e, 0x00, 0x45, 0x79, 0x20, 0x14, 0x1e, 0x40, 0x48, 0x1c, 0x21, 0xcb, 0x00, 0x00, 0xaf, 0x01, 0xff, 0x02, 0xc6, 0x00, 0x06, 0x4a, 0x74, 0x20, 0x04, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x16, - 0x01, 0x00, 0x45, 0x25, 0x06, 0xb8, 0x1e, 0x40, 0x44, 0x4e, 0x66, 0x1a, - 0x01, 0x00, 0x46, 0x57, 0xb8, 0x28, 0x02, 0x80, 0x32, 0x49, 0xd5, 0x03, + 0x01, 0x00, 0x45, 0x25, 0x06, 0xb8, 0x1e, 0x40, 0x44, 0x63, 0x66, 0x1a, + 0x01, 0x00, 0x46, 0x73, 0xb8, 0x28, 0x02, 0x80, 0x32, 0x49, 0xd5, 0x03, 0xca, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x04, 0x1a, 0x00, 0x06, 0x45, 0x25, 0x06, 0x18, 0x1e, 0x40, 0x45, 0xce, 0x34, 0xbe, 0x1e, 0x00, 0x49, 0xf9, 0x10, 0xc6, 0x1e, 0x00, 0x45, 0x79, 0x20, 0xc0, 0x1e, 0x00, 0x4a, - 0xa5, 0xa2, 0xc2, 0x1e, 0x00, 0x45, 0x99, 0x20, 0xc4, 0x1e, 0x40, 0x4a, - 0x37, 0x9d, 0x1c, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x0b, 0xfa, 0xf1, 0x01, - 0xc0, 0x00, 0x4b, 0xfd, 0x8f, 0xc4, 0x01, 0x40, 0xa3, 0x3d, 0x04, 0x9f, - 0x0a, 0x2d, 0x44, 0x04, 0x0d, 0x8a, 0x01, 0x00, 0x4a, 0xe6, 0x66, 0x0e, - 0x1e, 0x00, 0xb3, 0x06, 0x46, 0x0d, 0xd6, 0x8b, 0x01, 0x40, 0x53, 0x5a, - 0x44, 0xc7, 0xa7, 0x00, 0x4d, 0x4f, 0x7e, 0xf2, 0x01, 0x80, 0x06, 0x45, - 0x58, 0x04, 0x10, 0x01, 0x40, 0x4b, 0xfd, 0x8f, 0xc5, 0x01, 0x40, 0x45, + 0xb8, 0xa2, 0xc2, 0x1e, 0x00, 0x45, 0x99, 0x20, 0xc4, 0x1e, 0x40, 0x4a, + 0x4a, 0x9d, 0x1c, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x0b, 0xfa, 0xf1, 0x01, + 0xc0, 0x00, 0x4b, 0x10, 0x90, 0xc4, 0x01, 0x40, 0xa3, 0x3d, 0x04, 0x9f, + 0x0a, 0x2d, 0x44, 0x04, 0x0d, 0x8a, 0x01, 0x00, 0x4a, 0xfb, 0x66, 0x0e, + 0x1e, 0x00, 0xb3, 0x06, 0x46, 0x29, 0xd6, 0x8b, 0x01, 0x40, 0x53, 0x6f, + 0x44, 0xc7, 0xa7, 0x00, 0x4d, 0x56, 0x7e, 0xf2, 0x01, 0x80, 0x06, 0x45, + 0x58, 0x04, 0x10, 0x01, 0x40, 0x4b, 0x10, 0x90, 0xc5, 0x01, 0x40, 0x45, 0x5c, 0x00, 0x0a, 0x1e, 0x00, 0x45, 0x25, 0x06, 0x0c, 0x1e, 0x40, 0x44, - 0x4e, 0x66, 0x0e, 0x01, 0x00, 0x46, 0x57, 0xb8, 0x10, 0x1e, 0x00, 0x4f, - 0x1c, 0x68, 0x12, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x1f, 0x42, 0x49, 0x00, - 0xb3, 0xa7, 0x00, 0x4f, 0x39, 0x69, 0xd0, 0xa7, 0x00, 0x42, 0x10, 0x00, - 0x6e, 0xa7, 0x00, 0x48, 0xd5, 0xc1, 0x2c, 0xa7, 0xc0, 0x00, 0x4b, 0x08, + 0x63, 0x66, 0x0e, 0x01, 0x00, 0x46, 0x73, 0xb8, 0x10, 0x1e, 0x00, 0x4f, + 0x31, 0x68, 0x12, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x1f, 0x42, 0x49, 0x00, + 0xb3, 0xa7, 0x00, 0x4f, 0x4e, 0x69, 0xd0, 0xa7, 0x00, 0x42, 0x10, 0x00, + 0x6e, 0xa7, 0x00, 0x48, 0xf1, 0xc1, 0x2c, 0xa7, 0xc0, 0x00, 0x4b, 0x1b, 0x90, 0x2e, 0xa7, 0x40, 0x45, 0xce, 0x34, 0x06, 0x01, 0x00, 0x43, 0x16, 0x00, 0x92, 0xa7, 0x00, 0xa3, 0x18, 0x49, 0xec, 0x1b, 0x0a, 0x01, 0x00, - 0x44, 0x04, 0x0d, 0x87, 0x01, 0x00, 0x4c, 0x4b, 0x51, 0xc4, 0xa7, 0x00, - 0x46, 0x57, 0x04, 0x3b, 0x02, 0x40, 0x44, 0x4e, 0x66, 0x0c, 0x01, 0x00, - 0x46, 0x57, 0xb8, 0xc7, 0x00, 0x80, 0x06, 0x49, 0xd5, 0x03, 0x08, 0x01, - 0x40, 0x4a, 0x23, 0x9d, 0x08, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x0c, 0x43, - 0xec, 0x0d, 0xb4, 0xa7, 0x00, 0x47, 0x2a, 0xcb, 0x46, 0xa7, 0x40, 0x04, - 0x9f, 0x0a, 0x1e, 0x48, 0x7d, 0xbc, 0x96, 0xa7, 0x00, 0x44, 0x04, 0x0d, - 0x81, 0x01, 0x00, 0x4a, 0xe6, 0x66, 0x06, 0x1e, 0x00, 0x46, 0x57, 0x04, - 0x43, 0x02, 0x00, 0x46, 0x0d, 0xd6, 0x82, 0x01, 0x40, 0x45, 0x5c, 0x00, + 0x44, 0x04, 0x0d, 0x87, 0x01, 0x00, 0x4c, 0x60, 0x51, 0xc4, 0xa7, 0x00, + 0x46, 0x57, 0x04, 0x3b, 0x02, 0x40, 0x44, 0x63, 0x66, 0x0c, 0x01, 0x00, + 0x46, 0x73, 0xb8, 0xc7, 0x00, 0x80, 0x06, 0x49, 0xd5, 0x03, 0x08, 0x01, + 0x40, 0x4a, 0x36, 0x9d, 0x08, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x0c, 0x43, + 0xec, 0x0d, 0xb4, 0xa7, 0x00, 0x47, 0x46, 0xcb, 0x46, 0xa7, 0x40, 0x04, + 0x9f, 0x0a, 0x1e, 0x48, 0x99, 0xbc, 0x96, 0xa7, 0x00, 0x44, 0x04, 0x0d, + 0x81, 0x01, 0x00, 0x4a, 0xfb, 0x66, 0x06, 0x1e, 0x00, 0x46, 0x57, 0x04, + 0x43, 0x02, 0x00, 0x46, 0x29, 0xd6, 0x82, 0x01, 0x40, 0x45, 0x5c, 0x00, 0x02, 0x1e, 0x00, 0x45, 0x25, 0x06, 0x04, 0x1e, 0x40, 0x06, 0x50, 0x00, - 0x43, 0xe1, 0x32, 0xa7, 0x00, 0xe5, 0xc6, 0x00, 0x80, 0x29, 0x48, 0x95, - 0xbc, 0x89, 0x01, 0x00, 0x44, 0x91, 0xd9, 0x6d, 0x2c, 0x00, 0x4a, 0xa7, + 0x43, 0xe1, 0x32, 0xa7, 0x00, 0xe5, 0xc6, 0x00, 0x80, 0x29, 0x48, 0xb1, + 0xbc, 0x89, 0x01, 0x00, 0x44, 0xad, 0xd9, 0x6d, 0x2c, 0x00, 0x4a, 0xba, 0xa5, 0xc2, 0xa7, 0x00, 0xef, 0x34, 0xa7, 0x00, 0xf5, 0x36, 0xa7, 0x00, - 0xf6, 0x38, 0xa7, 0x80, 0x04, 0xf9, 0x3c, 0xa7, 0x40, 0x54, 0x44, 0x3b, + 0xf6, 0x38, 0xa7, 0x80, 0x04, 0xf9, 0x3c, 0xa7, 0x40, 0x54, 0x59, 0x3b, 0x3a, 0xa7, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0xfc, - 0x01, 0x00, 0x46, 0xd8, 0x69, 0xe2, 0x01, 0x40, 0x45, 0xce, 0x34, 0xc1, + 0x01, 0x00, 0x46, 0xed, 0x69, 0xe2, 0x01, 0x40, 0x45, 0xce, 0x34, 0xc1, 0x00, 0x00, 0x45, 0xb7, 0x20, 0x02, 0x01, 0x80, 0xa2, 0x01, 0xa3, 0x70, - 0xa4, 0x41, 0x45, 0x79, 0x20, 0xc0, 0x00, 0x00, 0x4a, 0xa5, 0xa2, 0xa2, - 0x1e, 0x00, 0x4e, 0xc2, 0x20, 0x02, 0x02, 0x00, 0x46, 0xd8, 0x69, 0x00, - 0x01, 0x00, 0x46, 0x33, 0xd4, 0x04, 0x01, 0x00, 0x05, 0x03, 0x07, 0x0c, + 0xa4, 0x41, 0x45, 0x79, 0x20, 0xc0, 0x00, 0x00, 0x4a, 0xb8, 0xa2, 0xa2, + 0x1e, 0x00, 0x4e, 0xc2, 0x20, 0x02, 0x02, 0x00, 0x46, 0xed, 0x69, 0x00, + 0x01, 0x00, 0x46, 0x4f, 0xd4, 0x04, 0x01, 0x00, 0x05, 0x03, 0x07, 0x0c, 0x46, 0x57, 0x04, 0x3a, 0x02, 0x00, 0x45, 0x99, 0x20, 0xc3, 0x00, 0x40, 0x45, 0x5c, 0x00, 0xc5, 0x00, 0x80, 0x06, 0x45, 0x25, 0x06, 0x00, 0x1e, - 0x40, 0x4a, 0x23, 0x9d, 0xfa, 0x01, 0x40, 0x48, 0x1c, 0x21, 0xc4, 0x00, + 0x40, 0x4a, 0x36, 0x9d, 0xfa, 0x01, 0x40, 0x48, 0x1c, 0x21, 0xc4, 0x00, 0x80, 0x20, 0xaf, 0x01, 0xff, 0x02, 0xc6, 0x00, 0x06, 0x4a, 0x74, 0x20, 0x00, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x26, 0x02, 0x80, 0x06, 0x45, 0x25, - 0x06, 0xa0, 0x1e, 0x40, 0x4b, 0x58, 0x8f, 0xe0, 0x01, 0x40, 0x4b, 0x58, - 0x8f, 0xde, 0x01, 0x40, 0x44, 0x4e, 0x66, 0xcd, 0x01, 0x00, 0x49, 0xd5, + 0x06, 0xa0, 0x1e, 0x40, 0x4b, 0x6b, 0x8f, 0xe0, 0x01, 0x40, 0x4b, 0x6b, + 0x8f, 0xde, 0x01, 0x40, 0x44, 0x63, 0x66, 0xcd, 0x01, 0x00, 0x49, 0xd5, 0x03, 0xc2, 0x00, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0xa4, 0x1e, 0x00, 0x49, 0xf9, 0x10, 0xac, 0x1e, 0x00, 0x45, 0x79, - 0x20, 0xa6, 0x1e, 0x00, 0x4a, 0xa5, 0xa2, 0xa8, 0x1e, 0x00, 0x45, 0x99, + 0x20, 0xa6, 0x1e, 0x00, 0x4a, 0xb8, 0xa2, 0xa8, 0x1e, 0x00, 0x45, 0x99, 0x20, 0xaa, 0x1e, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xce, 0x34, 0xae, 0x1e, 0x00, 0x49, 0xf9, 0x10, 0xb6, 0x1e, 0x00, 0x45, 0x79, 0x20, - 0xb0, 0x1e, 0x00, 0x4a, 0xa5, 0xa2, 0xb2, 0x1e, 0x00, 0x45, 0x99, 0x20, + 0xb0, 0x1e, 0x00, 0x4a, 0xb8, 0xa2, 0xb2, 0x1e, 0x00, 0x45, 0x99, 0x20, 0xb4, 0x1e, 0x40, 0x80, 0x01, 0xff, 0x46, 0xf7, 0x06, 0x17, 0xf3, 0x01, - 0x49, 0xa3, 0xb7, 0x1c, 0xf3, 0x41, 0x02, 0x5b, 0x07, 0x06, 0x46, 0xf6, - 0x93, 0xbe, 0x20, 0x40, 0x80, 0x0d, 0x46, 0xb6, 0xc6, 0xab, 0x2a, 0xc0, + 0x49, 0xbf, 0xb7, 0x1c, 0xf3, 0x41, 0x02, 0x5b, 0x07, 0x06, 0x46, 0x09, + 0x94, 0xbe, 0x20, 0x40, 0x80, 0x0d, 0x46, 0xd2, 0xc6, 0xab, 0x2a, 0xc0, 0x00, 0x4c, 0xf3, 0x25, 0xad, 0x2a, 0x40, 0xa2, 0x9b, 0x01, 0x46, 0x00, - 0x04, 0xef, 0x25, 0x00, 0x49, 0xc5, 0x34, 0xd9, 0x27, 0x00, 0x06, 0x96, - 0x82, 0x7f, 0x56, 0x4e, 0x31, 0x1e, 0x2a, 0x00, 0xaf, 0x50, 0x07, 0x9e, - 0xca, 0x40, 0x04, 0xdf, 0x04, 0x30, 0xb4, 0x17, 0x47, 0xab, 0xcc, 0xd8, - 0x27, 0x00, 0x07, 0x99, 0xcd, 0x01, 0xff, 0x46, 0x00, 0x04, 0xe1, 0xf7, + 0x04, 0xef, 0x25, 0x00, 0x49, 0xc5, 0x34, 0xd9, 0x27, 0x00, 0x06, 0x9d, + 0x82, 0x7f, 0x56, 0x4e, 0x31, 0x1e, 0x2a, 0x00, 0xaf, 0x50, 0x07, 0xba, + 0xca, 0x40, 0x04, 0xdf, 0x04, 0x30, 0xb4, 0x17, 0x47, 0xc7, 0xcc, 0xd8, + 0x27, 0x00, 0x07, 0xb5, 0xcd, 0x01, 0xff, 0x46, 0x00, 0x04, 0xe1, 0xf7, 0x01, 0x46, 0xdb, 0x04, 0xe8, 0xf7, 0x41, 0x5b, 0x38, 0x1b, 0xfc, 0x2a, 0x00, 0x03, 0xc2, 0x06, 0x01, 0xff, 0x5d, 0x91, 0x0a, 0x3c, 0x0b, 0x01, 0x5f, 0x42, 0x10, 0x3e, 0x0b, 0x41, 0x46, 0x00, 0x04, 0x34, 0xf5, 0x01, 0x46, 0xdb, 0x04, 0xe5, 0xf7, 0x41, 0x46, 0x00, 0x04, 0xe3, 0xf7, 0x01, 0x46, 0xdb, 0x04, 0xea, 0xf7, 0x41, 0x03, 0xf2, 0x07, 0x17, 0x06, 0x87, - 0x1a, 0x01, 0xff, 0x46, 0x00, 0x04, 0xe0, 0xf7, 0x01, 0x47, 0x9d, 0x3f, + 0x1a, 0x01, 0xff, 0x46, 0x00, 0x04, 0xe0, 0xf7, 0x01, 0x47, 0xb2, 0x3f, 0x36, 0xf5, 0x01, 0x46, 0xdb, 0x04, 0xe7, 0xf7, 0x41, 0x5d, 0x6a, 0x13, 0x3d, 0x0b, 0x01, 0x5f, 0x23, 0x10, 0x3f, 0x0b, 0x41, 0x46, 0x00, 0x04, - 0xe2, 0xf7, 0x01, 0x46, 0xdb, 0x04, 0xe9, 0xf7, 0x41, 0x04, 0x5d, 0x85, - 0x11, 0x05, 0xad, 0xdf, 0x01, 0xff, 0x46, 0x00, 0x04, 0xe4, 0xf7, 0x01, + 0xe2, 0xf7, 0x01, 0x46, 0xdb, 0x04, 0xe9, 0xf7, 0x41, 0x04, 0x64, 0x85, + 0x11, 0x05, 0xc9, 0xdf, 0x01, 0xff, 0x46, 0x00, 0x04, 0xe4, 0xf7, 0x01, 0x46, 0xdb, 0x04, 0xeb, 0xf7, 0x41, 0x46, 0x00, 0x04, 0x35, 0xf5, 0x01, - 0x47, 0x9d, 0x3f, 0x37, 0xf5, 0x01, 0x46, 0xdb, 0x04, 0xe6, 0xf7, 0x41, - 0x51, 0x55, 0x53, 0xcc, 0x0e, 0x00, 0x06, 0xf4, 0x05, 0x8a, 0x04, 0x48, - 0xcf, 0x26, 0xaf, 0x0e, 0x00, 0x03, 0x0e, 0x6b, 0xf3, 0x03, 0x45, 0x19, - 0xdd, 0xc6, 0x0e, 0x00, 0x07, 0xf1, 0x04, 0x92, 0x01, 0x49, 0x11, 0xb3, - 0xcd, 0x0e, 0x00, 0xb3, 0x74, 0x09, 0x4d, 0xb6, 0x57, 0x0b, 0x5b, 0x70, - 0x06, 0x48, 0xa5, 0xc2, 0xce, 0x0e, 0x40, 0xe1, 0xb0, 0x0e, 0x80, 0x38, - 0xe5, 0xc0, 0x0e, 0x80, 0x2f, 0xe9, 0xb4, 0x0e, 0x80, 0x26, 0x05, 0xa0, + 0x47, 0xb2, 0x3f, 0x37, 0xf5, 0x01, 0x46, 0xdb, 0x04, 0xe6, 0xf7, 0x41, + 0x51, 0x6a, 0x53, 0xcc, 0x0e, 0x00, 0x06, 0xf4, 0x05, 0x8a, 0x04, 0x48, + 0xcf, 0x26, 0xaf, 0x0e, 0x00, 0x03, 0x23, 0x6b, 0xf3, 0x03, 0x45, 0x35, + 0xdd, 0xc6, 0x0e, 0x00, 0x07, 0xf1, 0x04, 0x92, 0x01, 0x49, 0x2d, 0xb3, + 0xcd, 0x0e, 0x00, 0xb3, 0x74, 0x09, 0x69, 0xb6, 0x57, 0x0b, 0x70, 0x70, + 0x06, 0x48, 0xc1, 0xc2, 0xce, 0x0e, 0x40, 0xe1, 0xb0, 0x0e, 0x80, 0x38, + 0xe5, 0xc0, 0x0e, 0x80, 0x2f, 0xe9, 0xb4, 0x0e, 0x80, 0x26, 0x05, 0xbc, 0xdd, 0x16, 0xef, 0xc2, 0x0e, 0x00, 0xf5, 0xb8, 0x0e, 0x80, 0x09, 0xf9, 0xb6, 0x0e, 0xc0, 0x00, 0xf9, 0xb7, 0x0e, 0x40, 0xf5, 0xb9, 0x0e, 0x40, 0x42, 0x1a, 0x00, 0xb1, 0x0e, 0x00, 0x42, 0x10, 0x00, 0xbb, 0x0e, 0x40, 0xe9, 0xb5, 0x0e, 0x40, 0xe9, 0xc1, 0x0e, 0x40, 0xe1, 0xb2, 0x0e, 0x00, 0xe9, 0xc4, 0x0e, 0x00, 0xed, 0xb3, 0x0e, 0x00, 0xf9, 0xc3, 0x0e, 0x40, - 0x46, 0x1f, 0xd0, 0xcb, 0x0e, 0x00, 0x42, 0xd8, 0x16, 0xc8, 0x0e, 0x00, + 0x46, 0x3b, 0xd0, 0xcb, 0x0e, 0x00, 0x42, 0xd8, 0x16, 0xc8, 0x0e, 0x00, 0xb4, 0x01, 0xff, 0x42, 0x0b, 0x00, 0xc9, 0x0e, 0x00, 0xe9, 0xca, 0x0e, - 0x40, 0x0e, 0x58, 0x70, 0x06, 0x4f, 0xa4, 0x67, 0xba, 0x0e, 0x40, 0x42, - 0x13, 0x01, 0xbc, 0x0e, 0x00, 0x43, 0x65, 0x4e, 0xbd, 0x0e, 0x40, 0x42, + 0x40, 0x0e, 0x6d, 0x70, 0x06, 0x4f, 0xb9, 0x67, 0xba, 0x0e, 0x40, 0x42, + 0x13, 0x01, 0xbc, 0x0e, 0x00, 0x43, 0x7a, 0x4e, 0xbd, 0x0e, 0x40, 0x42, 0x5d, 0x00, 0x9a, 0x0e, 0x00, 0x42, 0x18, 0x04, 0x88, 0x0e, 0x00, 0x42, - 0x3b, 0x01, 0x94, 0x0e, 0x00, 0x03, 0x78, 0xca, 0xa5, 0x02, 0x03, 0x0e, + 0x3b, 0x01, 0x94, 0x0e, 0x00, 0x03, 0x94, 0xca, 0xa5, 0x02, 0x03, 0x23, 0x6b, 0x94, 0x02, 0xab, 0xea, 0x01, 0x42, 0x13, 0x01, 0xa5, 0x0e, 0x80, 0xd1, 0x01, 0x42, 0x08, 0x07, 0xa1, 0x0e, 0x00, 0xae, 0xb8, 0x01, 0xef, 0xad, 0x0e, 0x00, 0xb0, 0x4b, 0x42, 0xd0, 0x00, 0xa3, 0x0e, 0x00, 0xb3, - 0x22, 0xb4, 0x0c, 0x42, 0x15, 0x02, 0xa7, 0x0e, 0x00, 0x42, 0x39, 0x42, - 0xa2, 0x0e, 0x40, 0x03, 0x0e, 0x6b, 0x04, 0xef, 0x95, 0x0e, 0x40, 0x44, - 0xb8, 0xb6, 0x96, 0x0e, 0x00, 0x43, 0x3d, 0x2e, 0x97, 0x0e, 0x40, 0x09, - 0x0e, 0xad, 0x11, 0x02, 0x7b, 0x02, 0x01, 0xff, 0x44, 0xb8, 0xb6, 0xaa, + 0x22, 0xb4, 0x0c, 0x42, 0x15, 0x02, 0xa7, 0x0e, 0x00, 0x42, 0x4e, 0x42, + 0xa2, 0x0e, 0x40, 0x03, 0x23, 0x6b, 0x04, 0xef, 0x95, 0x0e, 0x40, 0x44, + 0xd4, 0xb6, 0x96, 0x0e, 0x00, 0x43, 0x3d, 0x2e, 0x97, 0x0e, 0x40, 0x09, + 0x21, 0xad, 0x11, 0x02, 0x7b, 0x02, 0x01, 0xff, 0x44, 0xd4, 0xb6, 0xaa, 0x0e, 0x00, 0x43, 0x3d, 0x2e, 0x8a, 0x0e, 0x40, 0x42, 0x22, 0x00, 0xa8, - 0x0e, 0x00, 0x42, 0x45, 0x05, 0xa9, 0x0e, 0x40, 0x04, 0xa9, 0x67, 0x14, - 0x03, 0x0e, 0x6b, 0x04, 0xef, 0x9b, 0x0e, 0x40, 0x44, 0xb8, 0xb6, 0x9c, + 0x0e, 0x00, 0x42, 0x45, 0x05, 0xa9, 0x0e, 0x40, 0x04, 0xbe, 0x67, 0x14, + 0x03, 0x23, 0x6b, 0x04, 0xef, 0x9b, 0x0e, 0x40, 0x44, 0xd4, 0xb6, 0x9c, 0x0e, 0x00, 0x43, 0x3d, 0x2e, 0x9e, 0x0e, 0x40, 0x43, 0xc2, 0x27, 0xa0, - 0x0e, 0x00, 0x43, 0x29, 0x1e, 0x89, 0x0e, 0x00, 0xa4, 0x2f, 0x43, 0xf2, - 0x93, 0x86, 0x0e, 0x00, 0x43, 0x2d, 0xe9, 0x8c, 0x0e, 0x00, 0x43, 0x84, + 0x0e, 0x00, 0x43, 0x29, 0x1e, 0x89, 0x0e, 0x00, 0xa4, 0x2f, 0x43, 0x05, + 0x94, 0x86, 0x0e, 0x00, 0x43, 0x49, 0xe9, 0x8c, 0x0e, 0x00, 0x43, 0x84, 0x0c, 0xac, 0x0e, 0x00, 0xae, 0x0f, 0x02, 0xf3, 0x04, 0x01, 0xff, 0xe1, 0x8f, 0x0e, 0x00, 0x42, 0x22, 0x00, 0x90, 0x0e, 0x40, 0x42, 0x2f, 0x04, 0x93, 0x0e, 0x00, 0x42, 0x20, 0x20, 0x8e, 0x0e, 0x40, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x98, 0x0e, 0x40, 0xe1, 0x91, 0x0e, 0x00, 0x42, 0x22, 0x00, 0x92, 0x0e, 0x40, 0x42, 0x60, 0x12, 0x87, 0x0e, 0x00, 0xef, 0x99, 0x0e, - 0x00, 0x42, 0x39, 0x42, 0x8d, 0x0e, 0x40, 0x02, 0x73, 0x00, 0x01, 0xff, - 0x43, 0xa1, 0x01, 0xa3, 0x0e, 0x00, 0x43, 0x35, 0x66, 0xa5, 0x0e, 0x40, - 0xa8, 0x04, 0xef, 0x81, 0x0e, 0x40, 0x03, 0xe9, 0x81, 0x11, 0x02, 0x7b, - 0x02, 0x01, 0xff, 0x44, 0xb8, 0xb6, 0x82, 0x0e, 0x00, 0x43, 0x3d, 0x2e, - 0x84, 0x0e, 0x40, 0x42, 0x60, 0x12, 0xde, 0x0e, 0x00, 0x43, 0x65, 0x4e, - 0xdf, 0x0e, 0x40, 0x44, 0xb8, 0xb6, 0xab, 0x0e, 0x00, 0x43, 0x3d, 0x2e, - 0xae, 0x0e, 0x40, 0xa6, 0x0c, 0x44, 0xb8, 0xb6, 0x9f, 0x0e, 0x00, 0x43, + 0x00, 0x42, 0x4e, 0x42, 0x8d, 0x0e, 0x40, 0x02, 0x73, 0x00, 0x01, 0xff, + 0x43, 0xa1, 0x01, 0xa3, 0x0e, 0x00, 0x43, 0x4a, 0x66, 0xa5, 0x0e, 0x40, + 0xa8, 0x04, 0xef, 0x81, 0x0e, 0x40, 0x03, 0xf0, 0x81, 0x11, 0x02, 0x7b, + 0x02, 0x01, 0xff, 0x44, 0xd4, 0xb6, 0x82, 0x0e, 0x00, 0x43, 0x3d, 0x2e, + 0x84, 0x0e, 0x40, 0x42, 0x60, 0x12, 0xde, 0x0e, 0x00, 0x43, 0x7a, 0x4e, + 0xdf, 0x0e, 0x40, 0x44, 0xd4, 0xb6, 0xab, 0x0e, 0x00, 0x43, 0x3d, 0x2e, + 0xae, 0x0e, 0x40, 0xa6, 0x0c, 0x44, 0xd4, 0xb6, 0x9f, 0x0e, 0x00, 0x43, 0x3d, 0x2e, 0x9d, 0x0e, 0x40, 0x42, 0x65, 0x0f, 0x9f, 0x0e, 0x00, 0x42, 0x10, 0x00, 0x9d, 0x0e, 0x40, 0x42, 0x08, 0x07, 0xdd, 0x0e, 0x00, 0x42, 0xb4, 0x01, 0xdc, 0x0e, 0x40, 0x45, 0xd1, 0x09, 0xd8, 0x0e, 0x00, 0xa6, @@ -9658,25 +9659,25 @@ static const unsigned char uname2c_tree[210697] = { 0x25, 0x01, 0xd3, 0x0e, 0x00, 0x42, 0x15, 0x02, 0xd2, 0x0e, 0x40, 0x44, 0x96, 0x1b, 0xd7, 0x0e, 0x00, 0x42, 0x30, 0x27, 0xd6, 0x0e, 0x40, 0x43, 0xd7, 0x04, 0xd5, 0x0e, 0x00, 0x43, 0xfb, 0x05, 0xd4, 0x0e, 0x40, 0x43, - 0xa2, 0x18, 0x9c, 0xfa, 0x01, 0x48, 0x95, 0xc2, 0x1e, 0xf4, 0x41, 0x45, - 0x06, 0xd7, 0x7c, 0xf9, 0x01, 0x42, 0xd8, 0x00, 0xf7, 0xf3, 0x41, 0xa1, + 0xa2, 0x18, 0x9c, 0xfa, 0x01, 0x48, 0xb1, 0xc2, 0x1e, 0xf4, 0x41, 0x45, + 0x22, 0xd7, 0x7c, 0xf9, 0x01, 0x42, 0xd8, 0x00, 0xf7, 0xf3, 0x41, 0xa1, 0x8e, 0x13, 0xa5, 0xed, 0x12, 0xa8, 0x6c, 0xa9, 0x22, 0xae, 0x14, 0xaf, - 0x06, 0x45, 0xa8, 0xdf, 0xe3, 0x2b, 0x40, 0x43, 0x4f, 0x17, 0x28, 0xf4, - 0x01, 0x54, 0x08, 0x40, 0x7f, 0x32, 0x40, 0x4d, 0x6a, 0x7b, 0xce, 0xf9, + 0x06, 0x45, 0xc4, 0xdf, 0xe3, 0x2b, 0x40, 0x43, 0x4f, 0x17, 0x28, 0xf4, + 0x01, 0x54, 0x1d, 0x40, 0x7f, 0x32, 0x40, 0x4d, 0x71, 0x7b, 0xce, 0xf9, 0x01, 0x42, 0x20, 0x04, 0xa2, 0xfa, 0x41, 0x44, 0xc1, 0x16, 0x58, 0xf4, 0x01, 0x46, 0xd9, 0x02, 0xad, 0x20, 0x00, 0x42, 0xee, 0x00, 0x8f, 0xf4, - 0x81, 0x0c, 0x42, 0x77, 0x00, 0x81, 0xfa, 0x01, 0x47, 0x3e, 0xcd, 0x5d, + 0x81, 0x0c, 0x42, 0x77, 0x00, 0x81, 0xfa, 0x01, 0x47, 0x5a, 0xcd, 0x5d, 0xf9, 0x41, 0x45, 0xb8, 0x00, 0x8b, 0xf4, 0x01, 0x04, 0xa1, 0x01, 0x01, 0xff, 0x59, 0xe9, 0x20, 0x3d, 0xf6, 0x01, 0x44, 0xed, 0x06, 0x17, 0xf6, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4b, 0xf7, 0x20, 0x1a, 0xf6, - 0x01, 0x4c, 0x08, 0x1d, 0x19, 0xf6, 0x41, 0xa1, 0xa3, 0x0e, 0x12, 0x45, - 0x4d, 0x92, 0x0e, 0x04, 0xd0, 0x33, 0xb3, 0x06, 0x05, 0xa4, 0xde, 0xa4, - 0x03, 0x08, 0xe5, 0xc1, 0x01, 0xff, 0x06, 0xf4, 0x05, 0xd8, 0x02, 0x07, - 0xf1, 0x04, 0x43, 0x05, 0xdb, 0x02, 0x2d, 0x0b, 0x5b, 0x70, 0x01, 0xff, + 0x01, 0x4c, 0x08, 0x1d, 0x19, 0xf6, 0x41, 0xa1, 0xa3, 0x0e, 0x12, 0x5a, + 0x4d, 0x92, 0x0e, 0x04, 0xd0, 0x33, 0xb3, 0x06, 0x05, 0xc0, 0xde, 0xa4, + 0x03, 0x08, 0x01, 0xc2, 0x01, 0xff, 0x06, 0xf4, 0x05, 0xd8, 0x02, 0x07, + 0xf1, 0x04, 0x43, 0x05, 0xdb, 0x02, 0x2d, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xa1, 0x1a, 0xe5, 0xe5, 0x12, 0x01, 0xe9, 0xe1, 0x12, 0x81, 0x0d, 0xef, 0xe7, 0x12, 0x01, 0xf5, 0xe3, 0x12, 0xc1, 0x00, 0xf5, 0xe4, 0x12, 0x41, 0xe9, 0xe2, 0x12, 0x41, 0xe1, 0xe0, 0x12, 0x01, 0xe9, 0xe6, 0x12, 0x01, - 0xf5, 0xe8, 0x12, 0x41, 0x48, 0x5b, 0x14, 0xdf, 0x12, 0x01, 0x45, 0xab, + 0xf5, 0xe8, 0x12, 0x41, 0x48, 0x5b, 0x14, 0xdf, 0x12, 0x01, 0x45, 0xc0, 0x3a, 0xe9, 0x12, 0x01, 0x46, 0x47, 0x21, 0xea, 0x12, 0x41, 0xe1, 0xb0, 0x12, 0x81, 0xff, 0x01, 0xa2, 0xec, 0x01, 0xa3, 0xdf, 0x01, 0xa4, 0xc0, 0x01, 0xe5, 0xb6, 0x12, 0x01, 0xa7, 0xa9, 0x01, 0x42, 0x22, 0x00, 0xde, @@ -9706,15 +9707,15 @@ static const unsigned char uname2c_tree[210697] = { 0x41, 0x44, 0x25, 0x01, 0xf3, 0x12, 0x01, 0x42, 0x15, 0x02, 0xf2, 0x12, 0x41, 0x44, 0x96, 0x1b, 0xf7, 0x12, 0x01, 0x42, 0x30, 0x27, 0xf6, 0x12, 0x41, 0x43, 0xd7, 0x04, 0xf5, 0x12, 0x01, 0x43, 0xfb, 0x05, 0xf4, 0x12, - 0x41, 0x51, 0x34, 0x52, 0x3d, 0x12, 0x01, 0xa4, 0xea, 0x02, 0x07, 0xf1, - 0x04, 0x60, 0xb3, 0x33, 0x0b, 0x5b, 0x70, 0x06, 0x4e, 0xe4, 0x77, 0x3a, + 0x41, 0x51, 0x49, 0x52, 0x3d, 0x12, 0x01, 0xa4, 0xea, 0x02, 0x07, 0xf1, + 0x04, 0x60, 0xb3, 0x33, 0x0b, 0x70, 0x70, 0x06, 0x4e, 0xeb, 0x77, 0x3a, 0x12, 0x41, 0xa1, 0x1b, 0xe5, 0x30, 0x12, 0x01, 0xe9, 0x2d, 0x12, 0x81, - 0x0e, 0xef, 0x32, 0x12, 0x01, 0xf5, 0x2f, 0x12, 0x01, 0x49, 0x76, 0xb7, + 0x0e, 0xef, 0x32, 0x12, 0x01, 0xf5, 0x2f, 0x12, 0x01, 0x49, 0x92, 0xb7, 0x41, 0x12, 0x41, 0xe9, 0x2e, 0x12, 0x41, 0xe1, 0x2c, 0x12, 0x01, 0xe9, 0x31, 0x12, 0x01, 0xf5, 0x33, 0x12, 0x41, 0x4b, 0x12, 0x24, 0x3b, 0x12, 0x01, 0x04, 0xdc, 0x02, 0x01, 0xff, 0x48, 0x5b, 0x14, 0x34, 0x12, 0x01, - 0x45, 0xab, 0x3a, 0x36, 0x12, 0x01, 0xb3, 0x06, 0x46, 0x47, 0x21, 0x35, - 0x12, 0x41, 0x45, 0x10, 0xdc, 0x37, 0x12, 0x01, 0x44, 0x44, 0xe0, 0x3e, + 0x45, 0xc0, 0x3a, 0x36, 0x12, 0x01, 0xb3, 0x06, 0x46, 0x47, 0x21, 0x35, + 0x12, 0x41, 0x45, 0x2c, 0xdc, 0x37, 0x12, 0x01, 0x44, 0x60, 0xe0, 0x3e, 0x12, 0x41, 0xe1, 0x00, 0x12, 0x81, 0xf4, 0x01, 0xa2, 0xe1, 0x01, 0xa3, 0xd4, 0x01, 0xa4, 0xb5, 0x01, 0xe5, 0x04, 0x12, 0x01, 0xa7, 0x9e, 0x01, 0x42, 0x22, 0x00, 0x2a, 0x12, 0x01, 0xe9, 0x02, 0x12, 0x01, 0xaa, 0x87, @@ -9724,7 +9725,7 @@ static const unsigned char uname2c_tree[210697] = { 0x03, 0x12, 0x01, 0x42, 0xb4, 0x09, 0x28, 0x12, 0x01, 0x42, 0x20, 0x20, 0x25, 0x12, 0x41, 0xe1, 0x19, 0x12, 0x01, 0x42, 0x22, 0x00, 0x1a, 0x12, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x14, 0x12, 0x01, 0x42, 0x22, 0x00, 0x15, - 0x12, 0x41, 0xe1, 0x29, 0x12, 0x01, 0x46, 0x2f, 0xd2, 0x40, 0x12, 0x41, + 0x12, 0x41, 0xe1, 0x29, 0x12, 0x01, 0x46, 0x4b, 0xd2, 0x40, 0x12, 0x41, 0xe1, 0x1f, 0x12, 0x01, 0x42, 0x22, 0x00, 0x20, 0x12, 0x41, 0xe1, 0x1e, 0x12, 0x01, 0x42, 0x24, 0x02, 0x0d, 0x12, 0x01, 0x42, 0x2f, 0x04, 0x18, 0x12, 0x01, 0x42, 0x20, 0x20, 0x13, 0x12, 0x41, 0xe1, 0x27, 0x12, 0x01, @@ -9738,10 +9739,10 @@ static const unsigned char uname2c_tree[210697] = { 0x42, 0x16, 0x00, 0x22, 0x12, 0x01, 0x42, 0x22, 0x00, 0x23, 0x12, 0x41, 0xe1, 0x01, 0x12, 0x01, 0xe9, 0x05, 0x12, 0x01, 0xf5, 0x07, 0x12, 0x41, 0x44, 0x0b, 0x1e, 0x38, 0x12, 0x01, 0x06, 0x3c, 0x01, 0x01, 0xff, 0x45, - 0x3f, 0x8e, 0x39, 0x12, 0x01, 0x4c, 0x11, 0x24, 0x3c, 0x12, 0x41, 0x54, - 0x84, 0x3c, 0xdb, 0x17, 0x00, 0x06, 0xf4, 0x05, 0x8d, 0x07, 0x12, 0x21, + 0x52, 0x8e, 0x39, 0x12, 0x01, 0x4c, 0x11, 0x24, 0x3c, 0x12, 0x41, 0x54, + 0x99, 0x3c, 0xdb, 0x17, 0x00, 0x06, 0xf4, 0x05, 0x8d, 0x07, 0x12, 0x36, 0x4d, 0xaf, 0x06, 0x07, 0xf1, 0x04, 0xe6, 0x04, 0xb3, 0x5d, 0x06, 0x11, - 0x35, 0x01, 0xff, 0x0a, 0x59, 0xa3, 0x4c, 0x05, 0xdb, 0x02, 0x01, 0xff, + 0x35, 0x01, 0xff, 0x0a, 0x6c, 0xa3, 0x4c, 0x05, 0xdb, 0x02, 0x01, 0xff, 0xa1, 0x35, 0xe5, 0xc1, 0x17, 0x00, 0xe9, 0xb7, 0x17, 0x80, 0x24, 0xaf, 0x1a, 0xf5, 0xbb, 0x17, 0x80, 0x0d, 0xf9, 0xb9, 0x17, 0xc0, 0x00, 0xe1, 0xbf, 0x17, 0x00, 0xf9, 0xba, 0x17, 0x40, 0xe1, 0xbd, 0x17, 0x00, 0xf5, @@ -9749,68 +9750,68 @@ static const unsigned char uname2c_tree[210697] = { 0xc0, 0x17, 0x00, 0xe9, 0xb8, 0x17, 0x40, 0xe1, 0xb6, 0x17, 0x00, 0xe5, 0xc2, 0x17, 0x00, 0xe9, 0xc3, 0x17, 0x00, 0xf5, 0xc5, 0x17, 0x40, 0xe1, 0xb5, 0x17, 0x00, 0xf1, 0xb4, 0x17, 0x40, 0x04, 0xdc, 0x02, 0xe9, 0x02, - 0x06, 0x7f, 0x14, 0x01, 0xff, 0xa2, 0xc0, 0x02, 0x03, 0x53, 0xe6, 0xd3, - 0x01, 0x0a, 0x35, 0xa4, 0x88, 0x01, 0x05, 0x0e, 0xde, 0x78, 0xb0, 0x06, - 0x49, 0x83, 0xb6, 0xf0, 0x19, 0x40, 0x49, 0x56, 0xad, 0xe0, 0x19, 0x00, - 0x03, 0xf3, 0x6e, 0x5a, 0x03, 0xc6, 0x16, 0x01, 0xff, 0x80, 0x47, 0x8d, - 0x01, 0xff, 0xa2, 0x21, 0x05, 0x0e, 0xde, 0x11, 0x04, 0xf2, 0x6e, 0x01, - 0xff, 0x44, 0xd6, 0xe5, 0xe7, 0x19, 0x00, 0x43, 0x8b, 0x41, 0xf7, 0x19, - 0x40, 0x44, 0xd6, 0xe5, 0xe6, 0x19, 0x00, 0x43, 0x8b, 0x41, 0xf6, 0x19, - 0x40, 0x03, 0x71, 0x30, 0x11, 0x04, 0xae, 0xe7, 0x01, 0xff, 0x44, 0xd6, - 0xe5, 0xe9, 0x19, 0x00, 0x43, 0x8b, 0x41, 0xf9, 0x19, 0x40, 0x44, 0xd6, - 0xe5, 0xe8, 0x19, 0x00, 0x43, 0x8b, 0x41, 0xf8, 0x19, 0x40, 0x44, 0xd6, - 0xe5, 0xe5, 0x19, 0x00, 0x43, 0x8b, 0x41, 0xf5, 0x19, 0x40, 0x44, 0xd6, - 0xe5, 0xe2, 0x19, 0x00, 0x43, 0x8b, 0x41, 0xf2, 0x19, 0x40, 0x44, 0xd6, - 0xe5, 0xe1, 0x19, 0x00, 0x43, 0x8b, 0x41, 0xf1, 0x19, 0x40, 0xa2, 0x38, - 0x44, 0x0e, 0xde, 0xf1, 0x17, 0x00, 0xb0, 0x06, 0x43, 0xee, 0x1a, 0xf0, + 0x06, 0x7f, 0x14, 0x01, 0xff, 0xa2, 0xc0, 0x02, 0x03, 0x6f, 0xe6, 0xd3, + 0x01, 0x0a, 0x48, 0xa4, 0x88, 0x01, 0x05, 0x2a, 0xde, 0x78, 0xb0, 0x06, + 0x49, 0x9f, 0xb6, 0xf0, 0x19, 0x40, 0x49, 0x69, 0xad, 0xe0, 0x19, 0x00, + 0x03, 0x08, 0x6f, 0x5a, 0x03, 0xc6, 0x16, 0x01, 0xff, 0x80, 0x47, 0x8d, + 0x01, 0xff, 0xa2, 0x21, 0x05, 0x2a, 0xde, 0x11, 0x04, 0x07, 0x6f, 0x01, + 0xff, 0x44, 0xf2, 0xe5, 0xe7, 0x19, 0x00, 0x43, 0xa0, 0x41, 0xf7, 0x19, + 0x40, 0x44, 0xf2, 0xe5, 0xe6, 0x19, 0x00, 0x43, 0xa0, 0x41, 0xf6, 0x19, + 0x40, 0x03, 0x71, 0x30, 0x11, 0x04, 0xca, 0xe7, 0x01, 0xff, 0x44, 0xf2, + 0xe5, 0xe9, 0x19, 0x00, 0x43, 0xa0, 0x41, 0xf9, 0x19, 0x40, 0x44, 0xf2, + 0xe5, 0xe8, 0x19, 0x00, 0x43, 0xa0, 0x41, 0xf8, 0x19, 0x40, 0x44, 0xf2, + 0xe5, 0xe5, 0x19, 0x00, 0x43, 0xa0, 0x41, 0xf5, 0x19, 0x40, 0x44, 0xf2, + 0xe5, 0xe2, 0x19, 0x00, 0x43, 0xa0, 0x41, 0xf2, 0x19, 0x40, 0x44, 0xf2, + 0xe5, 0xe1, 0x19, 0x00, 0x43, 0xa0, 0x41, 0xf1, 0x19, 0x40, 0xa2, 0x38, + 0x44, 0x2a, 0xde, 0xf1, 0x17, 0x00, 0xb0, 0x06, 0x43, 0xee, 0x1a, 0xf0, 0x17, 0x40, 0x42, 0x6b, 0x25, 0xf2, 0x17, 0x00, 0x43, 0xc6, 0x16, 0xf5, - 0x17, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xa2, 0x0c, 0x44, 0x0e, 0xde, 0xf6, - 0x17, 0x00, 0x43, 0xf2, 0x6e, 0xf7, 0x17, 0x40, 0x42, 0xd1, 0x09, 0xf8, - 0x17, 0x00, 0x43, 0xae, 0xe7, 0xf9, 0x17, 0x40, 0x42, 0xd1, 0x09, 0xf3, - 0x17, 0x00, 0x43, 0xae, 0xe7, 0xf4, 0x17, 0x40, 0x80, 0x5a, 0x8d, 0x01, - 0xff, 0xa2, 0x34, 0x05, 0x0e, 0xde, 0x24, 0xb0, 0x01, 0xff, 0x03, 0xf3, - 0x6e, 0x11, 0x04, 0xb4, 0x26, 0x01, 0xff, 0x44, 0xd6, 0xe5, 0xef, 0x19, - 0x00, 0x43, 0x8b, 0x41, 0xff, 0x19, 0x40, 0x44, 0xd6, 0xe5, 0xec, 0x19, - 0x00, 0x43, 0x8b, 0x41, 0xfc, 0x19, 0x40, 0x44, 0xd6, 0xe5, 0xeb, 0x19, - 0x00, 0x43, 0x8b, 0x41, 0xfb, 0x19, 0x40, 0x03, 0x71, 0x30, 0x11, 0x04, - 0xae, 0xe7, 0x01, 0xff, 0x44, 0xd6, 0xe5, 0xee, 0x19, 0x00, 0x43, 0x8b, - 0x41, 0xfe, 0x19, 0x40, 0x44, 0xd6, 0xe5, 0xed, 0x19, 0x00, 0x43, 0x8b, - 0x41, 0xfd, 0x19, 0x40, 0x44, 0xd6, 0xe5, 0xea, 0x19, 0x00, 0x43, 0x8b, - 0x41, 0xfa, 0x19, 0x40, 0x03, 0x71, 0x30, 0x11, 0x04, 0xae, 0xe7, 0x01, - 0xff, 0x44, 0xd6, 0xe5, 0xe4, 0x19, 0x00, 0x43, 0x8b, 0x41, 0xf4, 0x19, - 0x40, 0x44, 0xd6, 0xe5, 0xe3, 0x19, 0x00, 0x43, 0x8b, 0x41, 0xf3, 0x19, - 0x40, 0xa1, 0x84, 0x01, 0xa2, 0x68, 0xa3, 0x5a, 0xab, 0x46, 0x47, 0x98, - 0xc8, 0xd7, 0x17, 0x00, 0x4b, 0xa3, 0x97, 0xc9, 0x17, 0x00, 0x47, 0x4e, - 0xc9, 0xc6, 0x17, 0x00, 0x4b, 0x0e, 0x99, 0xd9, 0x17, 0x00, 0xb2, 0x20, - 0x4d, 0x00, 0x81, 0xd0, 0x17, 0x00, 0xb4, 0x0c, 0x46, 0x8b, 0xd6, 0xd1, - 0x17, 0x00, 0x4d, 0x56, 0x83, 0xc8, 0x17, 0x40, 0x4a, 0xe3, 0xa5, 0xcd, - 0x17, 0x00, 0x46, 0xf9, 0xd4, 0xca, 0x17, 0x40, 0x46, 0xc1, 0xd0, 0xc7, - 0x17, 0x00, 0x44, 0xa2, 0xe6, 0xcc, 0x17, 0x40, 0x46, 0x65, 0xcf, 0xce, - 0x17, 0x00, 0x43, 0x90, 0x00, 0xd4, 0x17, 0x00, 0x46, 0x4b, 0xd4, 0xda, - 0x17, 0x40, 0x4e, 0xec, 0x6e, 0xd6, 0x17, 0x00, 0x44, 0x39, 0xde, 0xd2, - 0x17, 0x40, 0xa1, 0x06, 0x45, 0x89, 0xdb, 0xd8, 0x17, 0x40, 0x44, 0x8e, - 0xe6, 0xcb, 0x17, 0x00, 0x48, 0x85, 0xc0, 0xd5, 0x17, 0x00, 0x48, 0x57, - 0xad, 0xd3, 0x17, 0x40, 0x44, 0x52, 0xe5, 0xcf, 0x17, 0x00, 0x47, 0x5e, - 0xcc, 0xdd, 0x17, 0x00, 0x4c, 0xc8, 0x8e, 0xdc, 0x17, 0x40, 0x42, 0x16, + 0x17, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xa2, 0x0c, 0x44, 0x2a, 0xde, 0xf6, + 0x17, 0x00, 0x43, 0x07, 0x6f, 0xf7, 0x17, 0x40, 0x42, 0xd1, 0x09, 0xf8, + 0x17, 0x00, 0x43, 0xca, 0xe7, 0xf9, 0x17, 0x40, 0x42, 0xd1, 0x09, 0xf3, + 0x17, 0x00, 0x43, 0xca, 0xe7, 0xf4, 0x17, 0x40, 0x80, 0x5a, 0x8d, 0x01, + 0xff, 0xa2, 0x34, 0x05, 0x2a, 0xde, 0x24, 0xb0, 0x01, 0xff, 0x03, 0x08, + 0x6f, 0x11, 0x04, 0xb4, 0x26, 0x01, 0xff, 0x44, 0xf2, 0xe5, 0xef, 0x19, + 0x00, 0x43, 0xa0, 0x41, 0xff, 0x19, 0x40, 0x44, 0xf2, 0xe5, 0xec, 0x19, + 0x00, 0x43, 0xa0, 0x41, 0xfc, 0x19, 0x40, 0x44, 0xf2, 0xe5, 0xeb, 0x19, + 0x00, 0x43, 0xa0, 0x41, 0xfb, 0x19, 0x40, 0x03, 0x71, 0x30, 0x11, 0x04, + 0xca, 0xe7, 0x01, 0xff, 0x44, 0xf2, 0xe5, 0xee, 0x19, 0x00, 0x43, 0xa0, + 0x41, 0xfe, 0x19, 0x40, 0x44, 0xf2, 0xe5, 0xed, 0x19, 0x00, 0x43, 0xa0, + 0x41, 0xfd, 0x19, 0x40, 0x44, 0xf2, 0xe5, 0xea, 0x19, 0x00, 0x43, 0xa0, + 0x41, 0xfa, 0x19, 0x40, 0x03, 0x71, 0x30, 0x11, 0x04, 0xca, 0xe7, 0x01, + 0xff, 0x44, 0xf2, 0xe5, 0xe4, 0x19, 0x00, 0x43, 0xa0, 0x41, 0xf4, 0x19, + 0x40, 0x44, 0xf2, 0xe5, 0xe3, 0x19, 0x00, 0x43, 0xa0, 0x41, 0xf3, 0x19, + 0x40, 0xa1, 0x84, 0x01, 0xa2, 0x68, 0xa3, 0x5a, 0xab, 0x46, 0x47, 0xb4, + 0xc8, 0xd7, 0x17, 0x00, 0x4b, 0xb6, 0x97, 0xc9, 0x17, 0x00, 0x47, 0x6a, + 0xc9, 0xc6, 0x17, 0x00, 0x4b, 0x21, 0x99, 0xd9, 0x17, 0x00, 0xb2, 0x20, + 0x4d, 0x07, 0x81, 0xd0, 0x17, 0x00, 0xb4, 0x0c, 0x46, 0xa7, 0xd6, 0xd1, + 0x17, 0x00, 0x4d, 0x5d, 0x83, 0xc8, 0x17, 0x40, 0x4a, 0xf6, 0xa5, 0xcd, + 0x17, 0x00, 0x46, 0x15, 0xd5, 0xca, 0x17, 0x40, 0x46, 0xdd, 0xd0, 0xc7, + 0x17, 0x00, 0x44, 0xbe, 0xe6, 0xcc, 0x17, 0x40, 0x46, 0x81, 0xcf, 0xce, + 0x17, 0x00, 0x43, 0x90, 0x00, 0xd4, 0x17, 0x00, 0x46, 0x67, 0xd4, 0xda, + 0x17, 0x40, 0x4e, 0x01, 0x6f, 0xd6, 0x17, 0x00, 0x44, 0x55, 0xde, 0xd2, + 0x17, 0x40, 0xa1, 0x06, 0x45, 0xa5, 0xdb, 0xd8, 0x17, 0x40, 0x44, 0xaa, + 0xe6, 0xcb, 0x17, 0x00, 0x48, 0xa1, 0xc0, 0xd5, 0x17, 0x00, 0x48, 0x6a, + 0xad, 0xd3, 0x17, 0x40, 0x44, 0x6e, 0xe5, 0xcf, 0x17, 0x00, 0x47, 0x7a, + 0xcc, 0xdd, 0x17, 0x00, 0x4c, 0xdb, 0x8e, 0xdc, 0x17, 0x40, 0x42, 0x16, 0x00, 0x94, 0x17, 0x00, 0xa3, 0xa9, 0x01, 0xa4, 0x9e, 0x01, 0x42, 0x22, 0x00, 0xa0, 0x17, 0x00, 0xab, 0x83, 0x01, 0xac, 0x79, 0x42, 0x08, 0x07, 0x98, 0x17, 0x00, 0xae, 0x5b, 0xb0, 0x4b, 0x42, 0x9d, 0x12, 0xa2, 0x17, 0x00, 0x42, 0xd0, 0x00, 0x9a, 0x17, 0x00, 0xb3, 0x2d, 0xb4, 0x0c, 0x42, - 0xd7, 0x1a, 0x9c, 0x17, 0x00, 0x42, 0x39, 0x42, 0x99, 0x17, 0x40, 0xe1, + 0xd7, 0x1a, 0x9c, 0x17, 0x00, 0x42, 0x4e, 0x42, 0x99, 0x17, 0x40, 0xe1, 0x8f, 0x17, 0x00, 0xa8, 0x11, 0xef, 0x91, 0x17, 0x00, 0x02, 0x53, 0x00, 0x01, 0xff, 0xe1, 0x8b, 0x17, 0x00, 0xef, 0x8d, 0x17, 0x40, 0xe1, 0x90, 0x17, 0x00, 0xef, 0x92, 0x17, 0x40, 0xe1, 0x9f, 0x17, 0x00, 0x42, 0x22, 0x00, 0x9d, 0x17, 0x00, 0x42, 0xe1, 0x02, 0x9e, 0x17, 0x40, 0xa8, 0x04, 0xef, 0x96, 0x17, 0x40, 0xe1, 0x95, 0x17, 0x00, 0xef, 0x97, 0x17, 0x40, 0x42, 0x60, 0x12, 0x84, 0x17, 0x00, 0x42, 0xb4, 0x01, 0x8e, 0x17, 0x00, - 0xef, 0x93, 0x17, 0x00, 0x42, 0x39, 0x42, 0x89, 0x17, 0x40, 0xe1, 0xa1, + 0xef, 0x93, 0x17, 0x00, 0x42, 0x4e, 0x42, 0x89, 0x17, 0x40, 0xe1, 0xa1, 0x17, 0x00, 0xef, 0x9b, 0x17, 0x40, 0xe1, 0x80, 0x17, 0x00, 0xa8, 0x04, 0xef, 0x82, 0x17, 0x40, 0xe1, 0x81, 0x17, 0x00, 0xef, 0x83, 0x17, 0x40, 0xe1, 0x8a, 0x17, 0x00, 0xef, 0x8c, 0x17, 0x40, 0xe1, 0x85, 0x17, 0x00, 0xa8, 0x04, 0xef, 0x87, 0x17, 0x40, 0xe1, 0x86, 0x17, 0x00, 0xef, 0x88, 0x17, 0x40, 0x42, 0xd2, 0x06, 0xad, 0x17, 0x80, 0x4e, 0xb1, 0x0b, 0x42, 0x48, 0x16, 0xab, 0x17, 0xc0, 0x00, 0xf9, 0xac, 0x17, 0x40, 0xa1, 0x2f, - 0xe5, 0xaf, 0x17, 0x00, 0xe9, 0xa5, 0x17, 0x80, 0x22, 0x08, 0x7d, 0xbf, + 0xe5, 0xaf, 0x17, 0x00, 0xe9, 0xa5, 0x17, 0x80, 0x22, 0x08, 0x99, 0xbf, 0x12, 0xf5, 0xa7, 0x17, 0xc0, 0x00, 0xeb, 0xa8, 0x17, 0x00, 0xf5, 0xa9, 0x17, 0xc0, 0x00, 0xf6, 0xaa, 0x17, 0x40, 0x43, 0xcd, 0x09, 0xb1, 0x17, 0x00, 0x43, 0x25, 0x09, 0xb2, 0x17, 0x40, 0xe9, 0xa6, 0x17, 0x40, 0xe1, @@ -9821,25 +9822,25 @@ static const unsigned char uname2c_tree[210697] = { 0x40, 0x44, 0x25, 0x01, 0xe3, 0x17, 0x00, 0x42, 0x15, 0x02, 0xe2, 0x17, 0x40, 0x44, 0x96, 0x1b, 0xe7, 0x17, 0x00, 0x42, 0x30, 0x27, 0xe6, 0x17, 0x40, 0x43, 0xd7, 0x04, 0xe5, 0x17, 0x00, 0x43, 0xfb, 0x05, 0xe4, 0x17, - 0x40, 0x4a, 0x11, 0xa0, 0x03, 0xd8, 0x00, 0x46, 0x9a, 0x7b, 0xe4, 0x6f, - 0x41, 0x43, 0x45, 0x16, 0xaf, 0xfa, 0x01, 0x08, 0x8d, 0xc0, 0x01, 0xff, - 0x06, 0xf4, 0x05, 0xae, 0x03, 0x51, 0x76, 0x54, 0x48, 0x0a, 0x01, 0x07, + 0x40, 0x4a, 0x24, 0xa0, 0x03, 0xd8, 0x00, 0x46, 0xa1, 0x7b, 0xe4, 0x6f, + 0x41, 0x43, 0x45, 0x16, 0xaf, 0xfa, 0x01, 0x08, 0xa9, 0xc0, 0x01, 0xff, + 0x06, 0xf4, 0x05, 0xae, 0x03, 0x51, 0x8b, 0x54, 0x48, 0x0a, 0x01, 0x07, 0xf1, 0x04, 0xc0, 0x01, 0x07, 0xbf, 0x35, 0x9c, 0x01, 0x0c, 0x8c, 0x14, 0x5b, 0x05, 0xdb, 0x02, 0x2f, 0xb6, 0x01, 0xff, 0x45, 0x48, 0x21, 0x3f, 0x0a, 0x01, 0x05, 0x12, 0x35, 0x01, 0xff, 0x4b, 0x17, 0x35, 0x0c, 0x0a, 0x01, 0x05, 0xdb, 0x02, 0x01, 0xff, 0xe5, 0x05, 0x0a, 0x01, 0xe9, 0x01, - 0x0a, 0x01, 0xef, 0x06, 0x0a, 0x01, 0xf5, 0x02, 0x0a, 0x01, 0x49, 0x76, + 0x0a, 0x01, 0xef, 0x06, 0x0a, 0x01, 0xf5, 0x02, 0x0a, 0x01, 0x49, 0x92, 0xb7, 0x03, 0x0a, 0x41, 0x48, 0x5b, 0x14, 0x0e, 0x0a, 0x01, 0x49, 0x12, - 0x2f, 0x38, 0x0a, 0x01, 0x45, 0x44, 0xda, 0x39, 0x0a, 0x01, 0x02, 0x3b, - 0x01, 0x06, 0x47, 0x67, 0x46, 0x0f, 0x0a, 0x41, 0x47, 0xfb, 0x10, 0x3a, - 0x0a, 0x01, 0x4f, 0x53, 0x6d, 0x0d, 0x0a, 0x41, 0xa3, 0x2f, 0xa4, 0x1a, - 0xac, 0x0c, 0x48, 0x4d, 0xbe, 0x54, 0x0a, 0x01, 0x4c, 0x5e, 0x13, 0x51, - 0x0a, 0x41, 0x44, 0xb2, 0x24, 0x58, 0x0a, 0x01, 0x44, 0xeb, 0x72, 0x55, + 0x2f, 0x38, 0x0a, 0x01, 0x45, 0x60, 0xda, 0x39, 0x0a, 0x01, 0x02, 0x3b, + 0x01, 0x06, 0x47, 0x7c, 0x46, 0x0f, 0x0a, 0x41, 0x47, 0xfb, 0x10, 0x3a, + 0x0a, 0x01, 0x4f, 0x68, 0x6d, 0x0d, 0x0a, 0x41, 0xa3, 0x2f, 0xa4, 0x1a, + 0xac, 0x0c, 0x48, 0x69, 0xbe, 0x54, 0x0a, 0x01, 0x4c, 0x5e, 0x13, 0x51, + 0x0a, 0x41, 0x44, 0xb2, 0x24, 0x58, 0x0a, 0x01, 0x44, 0x00, 0x73, 0x55, 0x0a, 0x41, 0x44, 0x0b, 0x1e, 0x56, 0x0a, 0x01, 0xaf, 0x01, 0xff, 0xf4, - 0x50, 0x0a, 0x01, 0x4a, 0xcd, 0x98, 0x57, 0x0a, 0x41, 0x45, 0x01, 0x04, - 0x52, 0x0a, 0x01, 0x4b, 0x05, 0x86, 0x53, 0x0a, 0x41, 0x04, 0xcd, 0x09, + 0x50, 0x0a, 0x01, 0x4a, 0xe0, 0x98, 0x57, 0x0a, 0x41, 0x45, 0x01, 0x04, + 0x52, 0x0a, 0x01, 0x4b, 0x0c, 0x86, 0x53, 0x0a, 0x41, 0x04, 0xcd, 0x09, 0x0f, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x44, 0x0a, 0x01, 0x45, 0x38, - 0x29, 0x45, 0x0a, 0x41, 0x47, 0xe9, 0x0f, 0x46, 0x0a, 0x01, 0x48, 0x54, + 0x29, 0x45, 0x0a, 0x41, 0x47, 0xe9, 0x0f, 0x46, 0x0a, 0x01, 0x48, 0x69, 0x58, 0x47, 0x0a, 0x41, 0xe1, 0x00, 0x0a, 0x01, 0xa2, 0xd2, 0x01, 0xa3, 0xc5, 0x01, 0xa4, 0xac, 0x01, 0xa7, 0x9f, 0x01, 0x42, 0x22, 0x00, 0x31, 0x0a, 0x01, 0x42, 0x77, 0x24, 0x17, 0x0a, 0x01, 0xab, 0x80, 0x01, 0x42, @@ -9861,18 +9862,18 @@ static const unsigned char uname2c_tree[210697] = { 0x22, 0x00, 0x16, 0x0a, 0x41, 0xe1, 0x26, 0x0a, 0x01, 0x42, 0x22, 0x00, 0x27, 0x0a, 0x41, 0x44, 0xfa, 0x05, 0x43, 0x0a, 0x01, 0x43, 0xcd, 0x09, 0x40, 0x0a, 0x01, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x42, 0x0a, 0x01, - 0x42, 0x15, 0x02, 0x41, 0x0a, 0x41, 0x49, 0x66, 0xb2, 0x2a, 0x21, 0x00, - 0xf9, 0x11, 0xf5, 0xc1, 0x00, 0x45, 0x44, 0x61, 0x28, 0x23, 0x80, 0x06, - 0x47, 0x9d, 0xc5, 0x1f, 0xf5, 0x41, 0x4a, 0x4b, 0x9d, 0xa6, 0xf5, 0x41, - 0x43, 0xf2, 0x4a, 0x4b, 0xf5, 0x01, 0x05, 0xd3, 0xdc, 0x8a, 0x1d, 0x0f, - 0x58, 0x68, 0xfb, 0x1b, 0xae, 0xec, 0x0b, 0x06, 0x59, 0x61, 0xd4, 0x06, - 0x03, 0x31, 0xd7, 0xb4, 0x02, 0x07, 0x84, 0xcd, 0x01, 0xff, 0x06, 0xf4, + 0x42, 0x15, 0x02, 0x41, 0x0a, 0x41, 0x49, 0x82, 0xb2, 0x2a, 0x21, 0x00, + 0xf9, 0x11, 0xf5, 0xc1, 0x00, 0x45, 0x59, 0x61, 0x28, 0x23, 0x80, 0x06, + 0x47, 0xb9, 0xc5, 0x1f, 0xf5, 0x41, 0x4a, 0x5e, 0x9d, 0xa6, 0xf5, 0x41, + 0x43, 0x07, 0x4b, 0x4b, 0xf5, 0x01, 0x05, 0xef, 0xdc, 0x8a, 0x1d, 0x0f, + 0x6d, 0x68, 0xfb, 0x1b, 0xae, 0xec, 0x0b, 0x06, 0x6e, 0x61, 0xd4, 0x06, + 0x03, 0x4d, 0xd7, 0xb4, 0x02, 0x07, 0xa0, 0xcd, 0x01, 0xff, 0x06, 0xf4, 0x05, 0xe8, 0x01, 0x07, 0xf1, 0x04, 0x42, 0x05, 0xdb, 0x02, 0x32, 0x05, 0xdd, 0x29, 0x1b, 0x06, 0x11, 0x35, 0x01, 0xff, 0xe5, 0x27, 0xa9, 0x80, 0x0d, 0xef, 0x2a, 0xa9, 0x00, 0xf5, 0x28, 0xa9, 0xc0, 0x00, 0xe5, 0x26, - 0xa9, 0x40, 0xe5, 0x29, 0xa9, 0x40, 0x45, 0x3a, 0xda, 0x2c, 0xa9, 0x80, - 0x06, 0x46, 0x60, 0xc3, 0x2b, 0xa9, 0x40, 0x47, 0x5f, 0xc3, 0x2d, 0xa9, - 0x40, 0x43, 0xd9, 0xe8, 0x2e, 0xa9, 0x00, 0x44, 0x71, 0xc7, 0x2f, 0xa9, + 0xa9, 0x40, 0xe5, 0x29, 0xa9, 0x40, 0x45, 0x56, 0xda, 0x2c, 0xa9, 0x80, + 0x06, 0x46, 0x7c, 0xc3, 0x2b, 0xa9, 0x40, 0x47, 0x7b, 0xc3, 0x2d, 0xa9, + 0x40, 0x43, 0xf5, 0xe8, 0x2e, 0xa9, 0x00, 0x44, 0x8d, 0xc7, 0x2f, 0xa9, 0x40, 0xe1, 0x22, 0xa9, 0x00, 0x42, 0x16, 0x00, 0x19, 0xa9, 0x00, 0x42, 0x37, 0x00, 0x21, 0xa9, 0x00, 0x42, 0x68, 0x0f, 0x18, 0xa9, 0x00, 0x42, 0x24, 0x02, 0x0c, 0xa9, 0x00, 0xa8, 0x7a, 0xe9, 0x24, 0xa9, 0x00, 0xab, @@ -9892,28 +9893,28 @@ static const unsigned char uname2c_tree[210697] = { 0x40, 0x44, 0x25, 0x01, 0x03, 0xa9, 0x00, 0x42, 0x15, 0x02, 0x02, 0xa9, 0x40, 0x44, 0x96, 0x1b, 0x07, 0xa9, 0x00, 0x42, 0x30, 0x27, 0x06, 0xa9, 0x40, 0x43, 0xd7, 0x04, 0x05, 0xa9, 0x00, 0x43, 0xfb, 0x05, 0x04, 0xa9, - 0x40, 0x49, 0x40, 0xae, 0x42, 0x1f, 0x01, 0xa4, 0xc0, 0x03, 0x07, 0xf1, + 0x40, 0x49, 0x5c, 0xae, 0x42, 0x1f, 0x01, 0xa4, 0xc0, 0x03, 0x07, 0xf1, 0x04, 0xa9, 0x01, 0x0c, 0x8c, 0x14, 0x58, 0x05, 0xdb, 0x02, 0x36, 0x0b, - 0x5b, 0x70, 0x01, 0xff, 0xa1, 0x21, 0xe5, 0x3e, 0x1f, 0x81, 0x18, 0xe9, - 0x36, 0x1f, 0x81, 0x0f, 0xf5, 0x38, 0x1f, 0x81, 0x06, 0x49, 0x76, 0xb7, + 0x70, 0x70, 0x01, 0xff, 0xa1, 0x21, 0xe5, 0x3e, 0x1f, 0x81, 0x18, 0xe9, + 0x36, 0x1f, 0x81, 0x0f, 0xf5, 0x38, 0x1f, 0x81, 0x06, 0x49, 0x92, 0xb7, 0x3a, 0x1f, 0x41, 0xf5, 0x39, 0x1f, 0x41, 0xe9, 0x37, 0x1f, 0x41, 0xf5, 0x40, 0x1f, 0x41, 0xe1, 0x34, 0x1f, 0x01, 0xe9, 0x3f, 0x1f, 0x01, 0x4b, - 0xe8, 0x96, 0x35, 0x1f, 0x41, 0x48, 0x5b, 0x14, 0x01, 0x1f, 0x01, 0x4b, - 0x3b, 0x21, 0x00, 0x1f, 0x01, 0x46, 0xef, 0xd2, 0x41, 0x1f, 0x01, 0x45, - 0x85, 0xdf, 0x02, 0x1f, 0x01, 0x47, 0x67, 0x46, 0x03, 0x1f, 0x41, 0x58, + 0xfb, 0x96, 0x35, 0x1f, 0x41, 0x48, 0x5b, 0x14, 0x01, 0x1f, 0x01, 0x4b, + 0x3b, 0x21, 0x00, 0x1f, 0x01, 0x46, 0x0b, 0xd3, 0x41, 0x1f, 0x01, 0x45, + 0xa1, 0xdf, 0x02, 0x1f, 0x01, 0x47, 0x7c, 0x46, 0x03, 0x1f, 0x41, 0x58, 0x07, 0x24, 0x46, 0x1f, 0x01, 0xa3, 0x39, 0x02, 0x3b, 0x01, 0x2b, 0xa6, 0x1d, 0xb3, 0x06, 0x4a, 0x83, 0x1f, 0x4b, 0x1f, 0x41, 0x4d, 0x12, 0x24, - 0x45, 0x1f, 0x01, 0xb0, 0x01, 0xff, 0x4a, 0xdb, 0x9e, 0x48, 0x1f, 0x01, - 0x44, 0x24, 0x7e, 0x4e, 0x1f, 0x41, 0x4c, 0x68, 0x88, 0x4d, 0x1f, 0x01, - 0x45, 0x13, 0x01, 0x47, 0x1f, 0x41, 0xf4, 0x49, 0x1f, 0x01, 0x48, 0xd6, - 0x3c, 0x4a, 0x1f, 0x41, 0x45, 0x01, 0x04, 0x4c, 0x1f, 0x01, 0x4d, 0x1b, + 0x45, 0x1f, 0x01, 0xb0, 0x01, 0xff, 0x4a, 0xee, 0x9e, 0x48, 0x1f, 0x01, + 0x44, 0x2b, 0x7e, 0x4e, 0x1f, 0x41, 0x4c, 0x6f, 0x88, 0x4d, 0x1f, 0x01, + 0x45, 0x13, 0x01, 0x47, 0x1f, 0x41, 0xf4, 0x49, 0x1f, 0x01, 0x48, 0xeb, + 0x3c, 0x4a, 0x1f, 0x41, 0x45, 0x01, 0x04, 0x4c, 0x1f, 0x01, 0x4d, 0x22, 0x7e, 0x4f, 0x1f, 0x41, 0xe1, 0x04, 0x1f, 0x81, 0x84, 0x02, 0xa2, 0xf7, 0x01, 0xa3, 0xea, 0x01, 0xa4, 0xd1, 0x01, 0xe5, 0x0e, 0x1f, 0x01, 0xa7, 0xc0, 0x01, 0x42, 0x22, 0x00, 0x32, 0x1f, 0x01, 0xe9, 0x06, 0x1f, 0x81, 0xb0, 0x01, 0xaa, 0x9d, 0x01, 0xab, 0x90, 0x01, 0x42, 0x74, 0x00, 0x2d, 0x1f, 0x01, 0x42, 0x6c, 0x00, 0x2a, 0x1f, 0x01, 0xae, 0x6c, 0xef, 0x10, 0x1f, 0x01, 0xb0, 0x5c, 0x42, 0x71, 0x00, 0x2c, 0x1f, 0x01, 0xb3, 0x44, - 0xb4, 0x2b, 0xf5, 0x08, 0x1f, 0x81, 0x22, 0x08, 0x76, 0xb7, 0x0c, 0x42, + 0xb4, 0x2b, 0xf5, 0x08, 0x1f, 0x81, 0x22, 0x08, 0x92, 0xb7, 0x0c, 0x42, 0xa9, 0x01, 0x2e, 0x1f, 0x01, 0x42, 0x20, 0x20, 0x2b, 0x1f, 0x41, 0xec, 0x0c, 0x1f, 0x81, 0x09, 0xf2, 0x0a, 0x1f, 0xc1, 0x00, 0xf2, 0x0b, 0x1f, 0x41, 0xec, 0x0d, 0x1f, 0x41, 0xf5, 0x09, 0x1f, 0x41, 0xe1, 0x21, 0x1f, @@ -9931,17 +9932,17 @@ static const unsigned char uname2c_tree[210697] = { 0x1f, 0x01, 0x42, 0x22, 0x00, 0x18, 0x1f, 0x41, 0xe1, 0x28, 0x1f, 0x01, 0x42, 0x22, 0x00, 0x29, 0x1f, 0x41, 0xe1, 0x05, 0x1f, 0x01, 0xe9, 0x0f, 0x1f, 0x41, 0x44, 0x0b, 0x1e, 0x43, 0x1f, 0x01, 0x05, 0xf5, 0x05, 0x06, - 0x4b, 0xcc, 0x98, 0x44, 0x1f, 0x41, 0x45, 0xd1, 0x09, 0x58, 0x1f, 0x01, + 0x4b, 0xdf, 0x98, 0x44, 0x1f, 0x41, 0x45, 0xd1, 0x09, 0x58, 0x1f, 0x01, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x59, 0x1f, 0x01, 0x43, 0xcd, 0x09, 0x51, 0x1f, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x50, 0x1f, 0x41, 0x44, 0x25, 0x01, 0x53, 0x1f, 0x01, 0x42, 0x15, 0x02, 0x52, 0x1f, 0x41, 0x44, 0x96, 0x1b, 0x57, 0x1f, 0x01, 0x42, 0x30, 0x27, 0x56, 0x1f, 0x41, 0x43, 0xd7, 0x04, 0x55, 0x1f, 0x01, 0x43, 0xfb, 0x05, 0x54, 0x1f, 0x41, - 0x80, 0x1d, 0x0a, 0x9f, 0x10, 0x01, 0xff, 0x4d, 0x0f, 0x7b, 0xa0, 0x30, + 0x80, 0x1d, 0x0a, 0x9f, 0x10, 0x01, 0xff, 0x4d, 0x16, 0x7b, 0xa0, 0x30, 0x00, 0x54, 0xa9, 0x10, 0xfc, 0x30, 0x00, 0x56, 0x06, 0x33, 0x9c, 0x30, - 0x00, 0x51, 0x0b, 0x33, 0x9b, 0x30, 0x40, 0x4c, 0x70, 0x86, 0xff, 0x30, + 0x00, 0x51, 0x0b, 0x33, 0x9b, 0x30, 0x40, 0x4c, 0x77, 0x86, 0xff, 0x30, 0x00, 0x4e, 0xf0, 0x1d, 0xfd, 0x30, 0x00, 0x07, 0xf1, 0x04, 0x0c, 0x4a, - 0xb2, 0x40, 0xfb, 0x30, 0x00, 0x55, 0x62, 0x3a, 0xfe, 0x30, 0x40, 0xe1, + 0xc7, 0x40, 0xfb, 0x30, 0x00, 0x55, 0x77, 0x3a, 0xfe, 0x30, 0x40, 0xe1, 0xa2, 0x30, 0x80, 0xb8, 0x04, 0xa2, 0xa1, 0x04, 0xa4, 0x8a, 0x04, 0xe5, 0xa8, 0x30, 0x00, 0xa7, 0xef, 0x03, 0xa8, 0xd8, 0x03, 0xe9, 0xa4, 0x30, 0x00, 0xab, 0xbd, 0x03, 0xad, 0xe3, 0x02, 0xee, 0xf3, 0x30, 0x80, 0xc9, @@ -9976,7 +9977,7 @@ static const unsigned char uname2c_tree[210697] = { 0x30, 0x00, 0xe9, 0xcb, 0x30, 0x00, 0xef, 0xce, 0x30, 0x00, 0xf5, 0xcc, 0x30, 0x40, 0xe1, 0xde, 0x30, 0x00, 0xe5, 0xe1, 0x30, 0x00, 0xe9, 0xdf, 0x30, 0x80, 0x08, 0xef, 0xe2, 0x30, 0x00, 0xf5, 0xe0, 0x30, 0x40, 0x05, - 0x59, 0xde, 0x01, 0xff, 0x0f, 0xb1, 0x69, 0x1d, 0x05, 0xec, 0x2d, 0x01, + 0x75, 0xde, 0x01, 0xff, 0x0f, 0xc6, 0x69, 0x1d, 0x05, 0xec, 0x2d, 0x01, 0xff, 0xd2, 0xf0, 0xaf, 0x01, 0xd3, 0xf1, 0xaf, 0x01, 0xd4, 0xf2, 0xaf, 0x01, 0xd5, 0xf3, 0xaf, 0x01, 0xd7, 0xf5, 0xaf, 0x01, 0xd8, 0xf6, 0xaf, 0x41, 0xd1, 0xf7, 0xaf, 0x01, 0xd2, 0xf8, 0xaf, 0x01, 0xd3, 0xf9, 0xaf, @@ -9989,24 +9990,24 @@ static const unsigned char uname2c_tree[210697] = { 0x00, 0xf5, 0xb0, 0x30, 0x40, 0xe1, 0xc0, 0x30, 0x00, 0xe5, 0xc7, 0x30, 0x00, 0xe9, 0xc2, 0x30, 0x00, 0xef, 0xc9, 0x30, 0x00, 0xf5, 0xc5, 0x30, 0x40, 0xe1, 0xd0, 0x30, 0x00, 0xe5, 0xd9, 0x30, 0x00, 0xe9, 0xd3, 0x30, - 0x00, 0xef, 0xdc, 0x30, 0x00, 0xf5, 0xd6, 0x30, 0x40, 0x07, 0xa4, 0x79, + 0x00, 0xef, 0xdc, 0x30, 0x00, 0xf5, 0xd6, 0x30, 0x40, 0x07, 0xab, 0x79, 0x01, 0xff, 0xe5, 0x00, 0xb0, 0x01, 0x42, 0x75, 0x06, 0x22, 0xb1, 0x01, 0xb9, 0x01, 0xff, 0xe5, 0x21, 0xb1, 0x01, 0xe9, 0x20, 0xb1, 0x41, 0xa7, - 0xbe, 0x04, 0x05, 0x1d, 0xde, 0x01, 0xff, 0x4e, 0xc2, 0x6e, 0xd6, 0x0c, + 0xbe, 0x04, 0x05, 0x39, 0xde, 0x01, 0xff, 0x4e, 0xd7, 0x6e, 0xd6, 0x0c, 0x00, 0x06, 0xf4, 0x05, 0xec, 0x03, 0x02, 0x68, 0x00, 0x9f, 0x01, 0x05, - 0xdb, 0x02, 0x4e, 0x0b, 0x5b, 0x70, 0x01, 0xff, 0xa1, 0x3b, 0xe5, 0xc6, + 0xdb, 0x02, 0x4e, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xa1, 0x3b, 0xe5, 0xc6, 0x0c, 0x80, 0x32, 0xe9, 0xbf, 0x0c, 0x80, 0x29, 0xef, 0xca, 0x0c, 0x80, - 0x20, 0xf5, 0xc1, 0x0c, 0x80, 0x17, 0x08, 0x76, 0xb7, 0x01, 0xff, 0xec, + 0x20, 0xf5, 0xc1, 0x0c, 0x80, 0x17, 0x08, 0x92, 0xb7, 0x01, 0xff, 0xec, 0xe2, 0x0c, 0x80, 0x09, 0xf2, 0xc3, 0x0c, 0xc0, 0x00, 0xf2, 0xc4, 0x0c, 0x40, 0xec, 0xe3, 0x0c, 0x40, 0xf5, 0xc2, 0x0c, 0x40, 0xef, 0xcb, 0x0c, 0x40, 0xe9, 0xc0, 0x0c, 0x40, 0xe5, 0xc7, 0x0c, 0x40, 0xe1, 0xbe, 0x0c, 0x00, 0xe9, 0xc8, 0x0c, 0x00, 0xf5, 0xcc, 0x0c, 0x40, 0xa1, 0x3f, 0xa3, - 0x31, 0x4b, 0xbf, 0x95, 0xf1, 0x0c, 0x00, 0x45, 0xab, 0x3a, 0xbc, 0x0c, - 0x00, 0xb3, 0x17, 0x4b, 0x05, 0x9c, 0xf2, 0x0c, 0x00, 0x02, 0x02, 0x00, - 0x01, 0xff, 0x44, 0x49, 0x21, 0xcd, 0x0c, 0x00, 0x45, 0x69, 0x46, 0x83, - 0x0c, 0x40, 0x46, 0xa2, 0xcb, 0x84, 0x0c, 0x00, 0x52, 0xd1, 0x4e, 0x80, + 0x31, 0x4b, 0xd2, 0x95, 0xf1, 0x0c, 0x00, 0x45, 0xc0, 0x3a, 0xbc, 0x0c, + 0x00, 0xb3, 0x17, 0x4b, 0x18, 0x9c, 0xf2, 0x0c, 0x00, 0x02, 0x02, 0x00, + 0x01, 0xff, 0x44, 0x49, 0x21, 0xcd, 0x0c, 0x00, 0x45, 0x7e, 0x46, 0x83, + 0x0c, 0x40, 0x46, 0xbe, 0xcb, 0x84, 0x0c, 0x00, 0x52, 0xe6, 0x4e, 0x80, 0x0c, 0x40, 0x4a, 0x3c, 0x21, 0x81, 0x0c, 0x00, 0x5d, 0x52, 0x14, 0xf3, - 0x0c, 0x40, 0x47, 0x5c, 0x14, 0x82, 0x0c, 0x00, 0x47, 0x3a, 0x81, 0xbd, + 0x0c, 0x40, 0x47, 0x5c, 0x14, 0x82, 0x0c, 0x00, 0x47, 0x41, 0x81, 0xbd, 0x0c, 0x40, 0x49, 0x19, 0x35, 0xd5, 0x0c, 0x00, 0x05, 0xf3, 0x04, 0x01, 0xff, 0xe1, 0x85, 0x0c, 0x80, 0xab, 0x02, 0xa2, 0x9e, 0x02, 0xa3, 0x91, 0x02, 0xa4, 0xf8, 0x01, 0xe5, 0x8e, 0x0c, 0x80, 0xee, 0x01, 0x42, 0xed, @@ -10015,7 +10016,7 @@ static const unsigned char uname2c_tree[210697] = { 0x01, 0xac, 0x9d, 0x01, 0x42, 0x6c, 0x00, 0xae, 0x0c, 0x00, 0xae, 0x78, 0xef, 0x92, 0x0c, 0x80, 0x6f, 0xb0, 0x63, 0xb2, 0x57, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, 0x89, 0x0c, 0x80, 0x23, 0xb6, 0x06, 0x42, 0x20, 0x20, 0xaf, - 0x0c, 0x40, 0xe1, 0xb5, 0x0c, 0x00, 0x07, 0x77, 0xb7, 0x01, 0xff, 0xec, + 0x0c, 0x40, 0xe1, 0xb5, 0x0c, 0x00, 0x07, 0x93, 0xb7, 0x01, 0xff, 0xec, 0x8c, 0x0c, 0x80, 0x09, 0xf2, 0x8b, 0x0c, 0xc0, 0x00, 0xf2, 0xe0, 0x0c, 0x40, 0xec, 0xe1, 0x0c, 0x40, 0xf5, 0x8a, 0x0c, 0x40, 0xe1, 0xa4, 0x0c, 0x00, 0x42, 0x22, 0x00, 0xa5, 0x0c, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x9f, @@ -10025,7 +10026,7 @@ static const unsigned char uname2c_tree[210697] = { 0x0c, 0x00, 0x42, 0x22, 0x00, 0xab, 0x0c, 0x40, 0xef, 0x93, 0x0c, 0x40, 0xe1, 0xa8, 0x0c, 0x80, 0x12, 0x42, 0x24, 0x02, 0x99, 0x0c, 0x00, 0x42, 0x2f, 0x04, 0xa3, 0x0c, 0x00, 0x42, 0x20, 0x20, 0x9e, 0x0c, 0x40, 0x4b, - 0xd5, 0x95, 0xdd, 0x0c, 0x40, 0xe1, 0xb2, 0x0c, 0x00, 0xac, 0x01, 0xff, + 0xe8, 0x95, 0xdd, 0x0c, 0x40, 0xe1, 0xb2, 0x0c, 0x00, 0xac, 0x01, 0xff, 0xe1, 0xb3, 0x0c, 0x00, 0x42, 0x74, 0x00, 0xde, 0x0c, 0x40, 0xe1, 0x95, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x96, 0x0c, 0x40, 0xe1, 0x9c, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x9d, 0x0c, 0x40, 0xe9, 0x88, 0x0c, 0x40, 0xe1, 0x97, @@ -10040,152 +10041,152 @@ static const unsigned char uname2c_tree[210697] = { 0x44, 0x25, 0x01, 0xe9, 0x0c, 0x00, 0x42, 0x15, 0x02, 0xe8, 0x0c, 0x40, 0x44, 0x96, 0x1b, 0xed, 0x0c, 0x00, 0x42, 0x30, 0x27, 0xec, 0x0c, 0x40, 0x43, 0xd7, 0x04, 0xeb, 0x0c, 0x00, 0x43, 0xfb, 0x05, 0xea, 0x0c, 0x40, - 0x44, 0x1a, 0xe4, 0x98, 0xf9, 0x01, 0x0b, 0xe1, 0x9c, 0x01, 0xff, 0xa1, + 0x44, 0x36, 0xe4, 0x98, 0xf9, 0x01, 0x0b, 0xf4, 0x9c, 0x01, 0xff, 0xa1, 0x9b, 0x0b, 0xa2, 0xab, 0x0a, 0xa3, 0xd1, 0x09, 0xa4, 0xdf, 0x08, 0xa5, 0x9e, 0x08, 0xa6, 0xc1, 0x07, 0xa7, 0x90, 0x07, 0xa8, 0xc1, 0x06, 0xa9, - 0xa9, 0x06, 0x02, 0x77, 0x24, 0x9a, 0x06, 0x45, 0x46, 0x9d, 0x11, 0x2f, + 0xa9, 0x06, 0x02, 0x77, 0x24, 0x9a, 0x06, 0x45, 0x59, 0x9d, 0x11, 0x2f, 0x00, 0xac, 0xca, 0x05, 0xad, 0xf9, 0x04, 0xae, 0xe3, 0x04, 0xaf, 0xbe, 0x04, 0xb0, 0x9a, 0x04, 0xb2, 0xe1, 0x03, 0xb3, 0xdf, 0x01, 0xb4, 0x76, - 0x43, 0xc6, 0x02, 0x64, 0x2f, 0x00, 0xb6, 0x62, 0xb7, 0x06, 0x46, 0x99, + 0x43, 0xc6, 0x02, 0x64, 0x2f, 0x00, 0xb6, 0x62, 0xb7, 0x06, 0x46, 0xb5, 0xcd, 0xc8, 0x2f, 0x40, 0xa1, 0x45, 0xa5, 0x37, 0xa8, 0x29, 0x02, 0x9e, 0x01, 0x1d, 0xaf, 0x0f, 0xb2, 0x01, 0xff, 0x42, 0xea, 0x04, 0x13, 0x2f, 0x00, 0x43, 0x0a, 0x0d, 0xae, 0x2f, 0x40, 0x43, 0x60, 0x16, 0x25, 0x2f, 0x00, 0x42, 0xbb, 0x00, 0x2f, 0x2f, 0x40, 0xe4, 0xb5, 0x2f, 0x00, 0xe5, 0xa3, 0x2f, 0x40, 0x43, 0x89, 0x00, 0xc6, 0x2f, 0x00, 0x43, 0xaf, 0x02, - 0x69, 0x2f, 0x40, 0x44, 0x0e, 0xe4, 0x4e, 0x2f, 0x00, 0x42, 0x60, 0x01, - 0x91, 0x2f, 0x40, 0x42, 0xb2, 0x7d, 0xa1, 0x2f, 0x80, 0x06, 0x43, 0x8b, - 0x00, 0x54, 0x2f, 0x40, 0x4a, 0x3f, 0x62, 0x8f, 0x2f, 0x40, 0x45, 0x81, - 0xd9, 0x95, 0x2f, 0x00, 0x46, 0x71, 0xd2, 0xa5, 0x2f, 0x40, 0xa1, 0x53, + 0x69, 0x2f, 0x40, 0x44, 0x2a, 0xe4, 0x4e, 0x2f, 0x00, 0x42, 0x60, 0x01, + 0x91, 0x2f, 0x40, 0x42, 0xb9, 0x7d, 0xa1, 0x2f, 0x80, 0x06, 0x43, 0x8b, + 0x00, 0x54, 0x2f, 0x40, 0x4a, 0x54, 0x62, 0x8f, 0x2f, 0x40, 0x45, 0x9d, + 0xd9, 0x95, 0x2f, 0x00, 0x46, 0x8d, 0xd2, 0xa5, 0x2f, 0x40, 0xa1, 0x53, 0x42, 0x92, 0x01, 0x17, 0x2f, 0x00, 0xa9, 0x3f, 0xaf, 0x31, 0xb2, 0x1d, 0x02, 0x42, 0x00, 0x0d, 0x42, 0x15, 0x02, 0x06, 0x2f, 0xc0, 0x00, 0x46, 0xd2, 0x0c, 0x36, 0x2f, 0x40, 0x43, 0x45, 0x14, 0x31, 0x2f, 0x00, 0x43, 0xbd, 0x01, 0xd4, 0x2f, 0x40, 0x43, 0x1e, 0x07, 0x71, 0x2f, 0x00, 0x42, - 0x27, 0x01, 0x4a, 0x2f, 0x00, 0x44, 0x92, 0xe5, 0xcd, 0x2f, 0x40, 0x44, - 0x55, 0x61, 0x86, 0x2f, 0x00, 0x43, 0xcf, 0x0c, 0xd2, 0x2f, 0x40, 0x43, + 0x27, 0x01, 0x4a, 0x2f, 0x00, 0x44, 0xae, 0xe5, 0xcd, 0x2f, 0x40, 0x44, + 0x6a, 0x61, 0x86, 0x2f, 0x00, 0x43, 0xcf, 0x0c, 0xd2, 0x2f, 0x40, 0x43, 0xe1, 0x08, 0x8c, 0x2f, 0x00, 0x42, 0x68, 0x00, 0x61, 0x2f, 0x40, 0x43, 0x3e, 0x01, 0x0f, 0x2f, 0x00, 0x42, 0x3f, 0x06, 0xbc, 0x2f, 0x00, 0x4c, - 0x7d, 0x79, 0xb1, 0x2f, 0x40, 0xa1, 0xec, 0x01, 0xa3, 0xdd, 0x01, 0xa5, + 0x84, 0x79, 0xb1, 0x2f, 0x40, 0xa1, 0xec, 0x01, 0xa3, 0xdd, 0x01, 0xa5, 0xc4, 0x01, 0xa8, 0x99, 0x01, 0xa9, 0x8a, 0x01, 0x43, 0x92, 0x03, 0x6a, - 0x2f, 0x00, 0xac, 0x6e, 0x44, 0x3d, 0x06, 0x29, 0x2f, 0x00, 0x44, 0xa0, + 0x2f, 0x00, 0xac, 0x6e, 0x44, 0x3d, 0x06, 0x29, 0x2f, 0x00, 0x44, 0xb3, 0xa6, 0x39, 0x2f, 0x00, 0x44, 0x23, 0x0a, 0xb3, 0x2f, 0x00, 0xb0, 0x3a, 0x45, 0xdc, 0x04, 0x45, 0x2f, 0x00, 0xb4, 0x0c, 0x42, 0x24, 0x0a, 0x47, - 0x2f, 0x00, 0x44, 0xa0, 0x4a, 0x62, 0x2f, 0x40, 0x43, 0x1a, 0x00, 0x74, + 0x2f, 0x00, 0x44, 0xb5, 0x4a, 0x62, 0x2f, 0x40, 0x43, 0x1a, 0x00, 0x74, 0x2f, 0x00, 0xa5, 0x14, 0xaf, 0x01, 0xff, 0x42, 0xd2, 0x04, 0x6f, 0x2f, 0x00, 0xf0, 0x4c, 0x2f, 0xc0, 0x00, 0x44, 0x5a, 0x2c, 0x89, 0x2f, 0x40, 0x42, 0x57, 0x00, 0x53, 0x2f, 0x00, 0xf0, 0x3b, 0x2f, 0x40, 0xa5, 0x12, - 0x44, 0xc8, 0xb5, 0x70, 0x2f, 0x00, 0x43, 0x99, 0x04, 0x14, 0x2f, 0x00, - 0x44, 0x3a, 0xe7, 0x2c, 0x2f, 0x40, 0x42, 0x17, 0x00, 0x6d, 0x2f, 0x00, - 0x43, 0x33, 0x3c, 0x94, 0x2f, 0x40, 0xa1, 0x06, 0x43, 0xd9, 0x1a, 0x5a, + 0x44, 0xe4, 0xb5, 0x70, 0x2f, 0x00, 0x43, 0x99, 0x04, 0x14, 0x2f, 0x00, + 0x44, 0x56, 0xe7, 0x2c, 0x2f, 0x40, 0x42, 0x17, 0x00, 0x6d, 0x2f, 0x00, + 0x43, 0x48, 0x3c, 0x94, 0x2f, 0x40, 0xa1, 0x06, 0x43, 0xd9, 0x1a, 0x5a, 0x2f, 0x40, 0x42, 0xa4, 0x02, 0x03, 0x2f, 0x00, 0x42, 0x32, 0x00, 0xaa, - 0x2f, 0x40, 0x46, 0x5b, 0xd0, 0x67, 0x2f, 0x00, 0x42, 0xb2, 0x7d, 0x77, + 0x2f, 0x40, 0x46, 0x77, 0xd0, 0x67, 0x2f, 0x00, 0x42, 0xb9, 0x7d, 0x77, 0x2f, 0x40, 0xa5, 0x1a, 0xaf, 0x01, 0xff, 0x42, 0x20, 0x04, 0x37, 0x2f, - 0x00, 0x04, 0x4a, 0xe7, 0x01, 0xff, 0x4a, 0x03, 0x9f, 0xab, 0x2f, 0x00, - 0x45, 0xfc, 0x95, 0x33, 0x2f, 0x40, 0x42, 0xaa, 0x09, 0x7a, 0x2f, 0x00, + 0x00, 0x04, 0x66, 0xe7, 0x01, 0xff, 0x4a, 0x16, 0x9f, 0xab, 0x2f, 0x00, + 0x45, 0x0f, 0x96, 0x33, 0x2f, 0x40, 0x42, 0xaa, 0x09, 0x7a, 0x2f, 0x00, 0x42, 0x3f, 0x06, 0x99, 0x2f, 0x40, 0x42, 0x13, 0x00, 0x19, 0x2f, 0x00, - 0x44, 0x1c, 0x75, 0x04, 0x2f, 0x00, 0xe5, 0x92, 0x2f, 0x00, 0x42, 0x24, - 0x00, 0x83, 0x2f, 0x40, 0x45, 0x56, 0xdc, 0x20, 0x2f, 0x00, 0x44, 0x7b, - 0x05, 0x42, 0x2f, 0x40, 0x4e, 0xa2, 0x6f, 0xbf, 0x2f, 0x00, 0x42, 0xbd, + 0x44, 0x31, 0x75, 0x04, 0x2f, 0x00, 0xe5, 0x92, 0x2f, 0x00, 0x42, 0x24, + 0x00, 0x83, 0x2f, 0x40, 0x45, 0x72, 0xdc, 0x20, 0x2f, 0x00, 0x44, 0x7b, + 0x05, 0x42, 0x2f, 0x40, 0x4e, 0xb7, 0x6f, 0xbf, 0x2f, 0x00, 0x42, 0xbd, 0x03, 0xc4, 0x2f, 0x00, 0xf9, 0x48, 0x2f, 0x40, 0xa1, 0x26, 0x42, 0x05, - 0x00, 0x9a, 0x2f, 0x00, 0xa9, 0x0c, 0x43, 0x1f, 0xbf, 0x27, 0x2f, 0x00, + 0x00, 0x9a, 0x2f, 0x00, 0xa9, 0x0c, 0x43, 0x3b, 0xbf, 0x27, 0x2f, 0x00, 0x42, 0x24, 0x0a, 0x9b, 0x2f, 0x40, 0x42, 0x73, 0x02, 0x76, 0x2f, 0x00, 0x4c, 0x1a, 0x37, 0x15, 0x2f, 0x00, 0x43, 0x32, 0x00, 0x2e, 0x2f, 0x40, 0x42, 0x9e, 0x01, 0xac, 0x2f, 0x00, 0xf0, 0x41, 0x2f, 0x00, 0xf4, 0xcf, 0x2f, 0x40, 0x42, 0x3f, 0x00, 0x97, 0x2f, 0x00, 0x43, 0x13, 0x01, 0x7e, 0x2f, 0x00, 0x44, 0x14, 0x01, 0x12, 0x2f, 0x00, 0xb2, 0x01, 0xff, 0x45, - 0x35, 0xcc, 0x1b, 0x2f, 0x00, 0x46, 0x2d, 0xd4, 0x5e, 0x2f, 0x40, 0x42, + 0x51, 0xcc, 0x1b, 0x2f, 0x00, 0x46, 0x49, 0xd4, 0x5e, 0x2f, 0x40, 0x42, 0xaf, 0x18, 0x7c, 0x2f, 0x00, 0x42, 0xd2, 0x04, 0x00, 0x2f, 0x80, 0x0f, - 0xb0, 0x01, 0xff, 0x46, 0x78, 0x36, 0x10, 0x2f, 0x00, 0x44, 0x24, 0x82, - 0x87, 0x2f, 0x40, 0x44, 0x6a, 0xe7, 0x30, 0x2f, 0x40, 0x42, 0xf2, 0x04, + 0xb0, 0x01, 0xff, 0x46, 0x78, 0x36, 0x10, 0x2f, 0x00, 0x44, 0x2b, 0x82, + 0x87, 0x2f, 0x40, 0x44, 0x86, 0xe7, 0x30, 0x2f, 0x40, 0x42, 0xf2, 0x04, 0x79, 0x2f, 0x00, 0xaf, 0x01, 0xff, 0x42, 0xc7, 0x02, 0xd0, 0x2f, 0x00, 0xf4, 0x46, 0x2f, 0x40, 0x42, 0x1a, 0x00, 0x08, 0x2f, 0x00, 0xa5, 0x3a, 0xa9, 0x2c, 0xaf, 0x01, 0xff, 0x42, 0x10, 0x00, 0x49, 0x2f, 0x00, 0xb2, 0x15, 0xb5, 0x01, 0xff, 0xae, 0x06, 0x42, 0x53, 0x00, 0x1d, 0x2f, 0x40, 0xe4, 0xa9, 0x2f, 0x00, 0x44, 0x34, 0x06, 0x2d, 0x2f, 0x40, 0x44, 0x37, 0x06, 0xa0, 0x2f, 0x00, 0x43, 0x8c, 0x11, 0x85, 0x2f, 0x40, 0x44, 0x66, - 0x1f, 0xc9, 0x2f, 0x00, 0x46, 0xcd, 0xd3, 0x82, 0x2f, 0x40, 0x42, 0x8a, + 0x1f, 0xc9, 0x2f, 0x00, 0x46, 0xe9, 0xd3, 0x82, 0x2f, 0x40, 0x42, 0x8a, 0x00, 0x81, 0x2f, 0x00, 0x43, 0xac, 0x10, 0x60, 0x2f, 0x40, 0xa1, 0x39, 0xa5, 0x1f, 0xa9, 0x0d, 0x43, 0x0a, 0x0d, 0xa7, 0x2f, 0xc0, 0x00, 0x47, - 0x7b, 0xc3, 0x35, 0x2f, 0x40, 0xe4, 0x07, 0x2f, 0x00, 0x42, 0x0f, 0x18, + 0x97, 0xc3, 0x35, 0x2f, 0x40, 0xe4, 0x07, 0x2f, 0x00, 0x42, 0x0f, 0x18, 0x63, 0x2f, 0x00, 0x42, 0xd2, 0x04, 0x01, 0x2f, 0x40, 0xa1, 0x0c, 0x42, 0xd8, 0x16, 0xb2, 0x2f, 0x00, 0x42, 0x34, 0x10, 0x09, 0x2f, 0x40, 0xe6, 0xb4, 0x2f, 0x00, 0x44, 0x12, 0x18, 0xb0, 0x2f, 0x40, 0x42, 0x36, 0x01, 0x4b, 0x2f, 0x00, 0x42, 0x2a, 0x02, 0x2a, 0x2f, 0x40, 0x42, 0x04, 0x00, 0x5f, 0x2f, 0x00, 0xf2, 0x78, 0x2f, 0x40, 0x42, 0x73, 0x02, 0x0e, 0x2f, 0x00, 0xae, 0x01, 0xff, 0x42, 0x98, 0x14, 0x28, 0x2f, 0x00, 0x44, 0x96, - 0x08, 0x8d, 0x2f, 0x40, 0xa1, 0x30, 0xa5, 0x1c, 0x4f, 0x95, 0x67, 0x16, + 0x08, 0x8d, 0x2f, 0x40, 0xa1, 0x30, 0xa5, 0x1c, 0x4f, 0xaa, 0x67, 0x16, 0x2f, 0x00, 0xaf, 0x01, 0xff, 0x42, 0x5a, 0x04, 0x05, 0x2f, 0x00, 0xb2, 0x01, 0xff, 0xee, 0x93, 0x2f, 0x00, 0x42, 0xc7, 0x02, 0xba, 0x2f, 0x40, 0xa1, 0x06, 0x42, 0xda, 0x19, 0xc7, 0x2f, 0x40, 0xe4, 0xb8, 0x2f, 0x00, 0x42, 0x34, 0x00, 0x3c, 0x2f, 0x40, 0x42, 0x46, 0x00, 0xbd, 0x2f, 0x00, - 0xac, 0x06, 0x42, 0x1b, 0x00, 0x3f, 0x2f, 0x40, 0x44, 0x42, 0xe4, 0x3d, - 0x2f, 0x00, 0x4c, 0xd2, 0x6e, 0x59, 0x2f, 0x40, 0x43, 0x8a, 0x00, 0xa8, - 0x2f, 0x00, 0x44, 0x05, 0x76, 0xc1, 0x2f, 0x00, 0xef, 0x21, 0x2f, 0x80, + 0xac, 0x06, 0x42, 0x1b, 0x00, 0x3f, 0x2f, 0x40, 0x44, 0x5e, 0xe4, 0x3d, + 0x2f, 0x00, 0x4c, 0xe7, 0x6e, 0x59, 0x2f, 0x40, 0x43, 0x8a, 0x00, 0xa8, + 0x2f, 0x00, 0x44, 0x0c, 0x76, 0xc1, 0x2f, 0x00, 0xef, 0x21, 0x2f, 0x80, 0x11, 0x02, 0x71, 0x00, 0x01, 0xff, 0x42, 0x9e, 0x01, 0x72, 0x2f, 0x00, - 0x42, 0xee, 0x00, 0x8b, 0x2f, 0x40, 0x47, 0x74, 0xc3, 0x22, 0x2f, 0x00, + 0x42, 0xee, 0x00, 0x8b, 0x2f, 0x40, 0x47, 0x90, 0xc3, 0x22, 0x2f, 0x00, 0x42, 0xaf, 0x18, 0xa6, 0x2f, 0x40, 0xa1, 0x46, 0x46, 0x10, 0x18, 0x7b, - 0x2f, 0x00, 0xa9, 0x26, 0xac, 0x1a, 0x43, 0x35, 0x66, 0x9c, 0x2f, 0x00, - 0xb2, 0x06, 0x42, 0x42, 0x00, 0x51, 0x2f, 0x40, 0x46, 0x4d, 0xcf, 0xb9, + 0x2f, 0x00, 0xa9, 0x26, 0xac, 0x1a, 0x43, 0x4a, 0x66, 0x9c, 0x2f, 0x00, + 0xb2, 0x06, 0x42, 0x42, 0x00, 0x51, 0x2f, 0x40, 0x46, 0x69, 0xcf, 0xb9, 0x2f, 0x00, 0x42, 0xc4, 0x16, 0xcc, 0x2f, 0x40, 0x43, 0xd0, 0x34, 0xd5, 0x2f, 0x00, 0xf9, 0xb6, 0x2f, 0x40, 0x43, 0x66, 0x21, 0x65, 0x2f, 0x00, 0x43, 0xca, 0x00, 0xbe, 0x2f, 0x00, 0x42, 0x88, 0x00, 0x55, 0x2f, 0x00, 0x42, 0xa4, 0x02, 0xc2, 0x2f, 0x40, 0x42, 0x73, 0x02, 0xaf, 0x2f, 0x00, 0x42, 0x1d, 0x01, 0x5b, 0x2f, 0x00, 0x44, 0x12, 0x18, 0x57, 0x2f, 0x40, - 0xa1, 0x2d, 0x44, 0xc9, 0x00, 0x0b, 0x2f, 0x00, 0x49, 0x9c, 0xb2, 0xcb, + 0xa1, 0x2d, 0x44, 0xc9, 0x00, 0x0b, 0x2f, 0x00, 0x49, 0xb8, 0xb2, 0xcb, 0x2f, 0x00, 0xae, 0x13, 0x43, 0x97, 0x1b, 0xd1, 0x2f, 0x80, 0x06, 0x42, 0x4d, 0x00, 0x6c, 0x2f, 0x40, 0x43, 0xa1, 0x01, 0x23, 0x2f, 0x40, 0x47, - 0x42, 0x62, 0x1e, 0x2f, 0x00, 0x43, 0x8b, 0x00, 0x0a, 0x2f, 0x40, 0xf2, + 0x57, 0x62, 0x1e, 0x2f, 0x00, 0x43, 0x8b, 0x00, 0x0a, 0x2f, 0x40, 0xf2, 0x7f, 0x2f, 0x80, 0x04, 0xf4, 0xb7, 0x2f, 0x40, 0x42, 0x53, 0x00, 0x1f, 0x2f, 0x40, 0xa5, 0x61, 0xa9, 0x47, 0xaf, 0x13, 0xb2, 0x01, 0xff, 0x44, 0x30, 0x23, 0xd3, 0x2f, 0x00, 0x42, 0x9f, 0x03, 0xce, 0x2f, 0x00, 0xf9, 0x32, 0x2f, 0x40, 0x44, 0x5d, 0x1b, 0x4f, 0x2f, 0x00, 0xe7, 0x5d, 0x2f, 0x00, 0x42, 0x0c, 0x00, 0x3e, 0x2f, 0x00, 0xf4, 0x02, 0x2f, 0x80, 0x0c, - 0x46, 0x3d, 0xd6, 0x58, 0x2f, 0x00, 0x46, 0xa9, 0xd6, 0x0c, 0x2f, 0x40, - 0x04, 0x77, 0x00, 0x01, 0xff, 0x45, 0x9e, 0xda, 0x34, 0x2f, 0x00, 0x44, - 0x32, 0xaf, 0x68, 0x2f, 0x40, 0x44, 0x6e, 0x02, 0x43, 0x2f, 0x00, 0xb3, - 0x06, 0x48, 0x7d, 0xb1, 0x18, 0x2f, 0x40, 0xe8, 0x6b, 0x2f, 0x00, 0x48, - 0xed, 0x9c, 0xa4, 0x2f, 0x40, 0x43, 0xcc, 0x0d, 0x4d, 0x2f, 0x00, 0x42, - 0x33, 0x00, 0xc5, 0x2f, 0x40, 0xa1, 0x43, 0x44, 0x92, 0x44, 0x26, 0x2f, + 0x46, 0x59, 0xd6, 0x58, 0x2f, 0x00, 0x46, 0xc5, 0xd6, 0x0c, 0x2f, 0x40, + 0x04, 0x77, 0x00, 0x01, 0xff, 0x45, 0xba, 0xda, 0x34, 0x2f, 0x00, 0x44, + 0x4e, 0xaf, 0x68, 0x2f, 0x40, 0x44, 0x6e, 0x02, 0x43, 0x2f, 0x00, 0xb3, + 0x06, 0x48, 0x99, 0xb1, 0x18, 0x2f, 0x40, 0xe8, 0x6b, 0x2f, 0x00, 0x48, + 0x00, 0x9d, 0xa4, 0x2f, 0x40, 0x43, 0xcc, 0x0d, 0x4d, 0x2f, 0x00, 0x42, + 0x33, 0x00, 0xc5, 0x2f, 0x40, 0xa1, 0x43, 0x44, 0xa7, 0x44, 0x26, 0x2f, 0x00, 0x43, 0xd1, 0x24, 0xa2, 0x2f, 0x00, 0xac, 0x1f, 0xaf, 0x01, 0xff, - 0x43, 0x8c, 0x07, 0x8a, 0x2f, 0x00, 0x45, 0xf5, 0xdd, 0x50, 0x2f, 0x00, - 0x44, 0x3e, 0xe7, 0x2b, 0x2f, 0x00, 0x43, 0x32, 0x00, 0x0d, 0x2f, 0x00, - 0xf7, 0x5c, 0x2f, 0x40, 0xa1, 0x0c, 0x43, 0xf9, 0x42, 0x1a, 0x2f, 0x00, - 0x45, 0xd4, 0x80, 0x90, 0x2f, 0x40, 0xee, 0x52, 0x2f, 0x00, 0xf7, 0x56, - 0x2f, 0x40, 0x42, 0x34, 0x00, 0x9e, 0x2f, 0x00, 0x46, 0x19, 0xc5, 0xc0, - 0x2f, 0x00, 0x42, 0x32, 0x00, 0x73, 0x2f, 0x40, 0xa1, 0x5f, 0x43, 0x09, + 0x43, 0x8c, 0x07, 0x8a, 0x2f, 0x00, 0x45, 0x11, 0xde, 0x50, 0x2f, 0x00, + 0x44, 0x5a, 0xe7, 0x2b, 0x2f, 0x00, 0x43, 0x32, 0x00, 0x0d, 0x2f, 0x00, + 0xf7, 0x5c, 0x2f, 0x40, 0xa1, 0x0c, 0x43, 0x0e, 0x43, 0x1a, 0x2f, 0x00, + 0x45, 0xdb, 0x80, 0x90, 0x2f, 0x40, 0xee, 0x52, 0x2f, 0x00, 0xf7, 0x56, + 0x2f, 0x40, 0x42, 0x34, 0x00, 0x9e, 0x2f, 0x00, 0x46, 0x35, 0xc5, 0xc0, + 0x2f, 0x00, 0x42, 0x32, 0x00, 0x73, 0x2f, 0x40, 0xa1, 0x5f, 0x43, 0x1e, 0x40, 0x96, 0x2f, 0x00, 0xa9, 0x47, 0xac, 0x33, 0xaf, 0x15, 0xb2, 0x01, - 0xff, 0x44, 0xf7, 0x22, 0x40, 0x2f, 0x00, 0x45, 0xce, 0xdc, 0x3a, 0x2f, - 0x00, 0x43, 0xcb, 0x7a, 0x80, 0x2f, 0x40, 0x42, 0x8a, 0x00, 0x88, 0x2f, - 0x00, 0x42, 0xa4, 0x0b, 0x9d, 0x2f, 0x00, 0x4b, 0xd2, 0x96, 0x66, 0x2f, + 0xff, 0x44, 0xf7, 0x22, 0x40, 0x2f, 0x00, 0x45, 0xea, 0xdc, 0x3a, 0x2f, + 0x00, 0x43, 0xd2, 0x7a, 0x80, 0x2f, 0x40, 0x42, 0x8a, 0x00, 0x88, 0x2f, + 0x00, 0x42, 0xa4, 0x0b, 0x9d, 0x2f, 0x00, 0x4b, 0xe5, 0x96, 0x66, 0x2f, 0x00, 0x42, 0xd2, 0x04, 0xbb, 0x2f, 0x00, 0xf7, 0x38, 0x2f, 0x40, 0x43, 0x1e, 0x07, 0xca, 0x2f, 0x00, 0x43, 0x56, 0x2a, 0x8e, 0x2f, 0x00, 0x42, 0x30, 0x12, 0xad, 0x2f, 0x40, 0xe7, 0x24, 0x2f, 0x00, 0x42, 0xab, 0x01, - 0xc3, 0x2f, 0x00, 0x44, 0xf3, 0x04, 0x9f, 0x2f, 0x40, 0x44, 0x8e, 0xe4, - 0x98, 0x2f, 0x00, 0x44, 0xa9, 0x90, 0x75, 0x2f, 0x40, 0x44, 0xb7, 0x45, + 0xc3, 0x2f, 0x00, 0x44, 0xf3, 0x04, 0x9f, 0x2f, 0x40, 0x44, 0xaa, 0xe4, + 0x98, 0x2f, 0x00, 0x44, 0xbc, 0x90, 0x75, 0x2f, 0x40, 0x44, 0xcc, 0x45, 0x1c, 0x2f, 0x00, 0x42, 0x1b, 0x00, 0x7d, 0x2f, 0x00, 0x02, 0xcf, 0x00, - 0x06, 0x42, 0x89, 0x3e, 0x44, 0x2f, 0x40, 0x43, 0xd7, 0x04, 0x84, 0x2f, + 0x06, 0x42, 0x9e, 0x3e, 0x44, 0x2f, 0x40, 0x43, 0xd7, 0x04, 0x84, 0x2f, 0x00, 0x42, 0xd1, 0x00, 0x6e, 0x2f, 0x40, 0xa5, 0x75, 0xa6, 0x58, 0x44, 0xb8, 0x27, 0xc9, 0xd2, 0x81, 0x4b, 0x43, 0xcd, 0x09, 0xc1, 0xd2, 0x01, 0xb3, 0x29, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xc0, 0xd2, 0x41, 0x42, 0x92, 0x01, 0xca, 0xd2, 0x01, 0xa8, 0x0d, 0xb7, 0x01, 0xff, 0x44, 0xb8, 0x28, - 0xcc, 0xd2, 0x01, 0xef, 0xc2, 0xd2, 0x41, 0x46, 0xee, 0x54, 0xcd, 0xd2, + 0xcc, 0xd2, 0x01, 0xef, 0xc2, 0xd2, 0x41, 0x46, 0x03, 0x55, 0xcd, 0xd2, 0x01, 0x43, 0x26, 0x01, 0xc3, 0xd2, 0x41, 0x44, 0x96, 0x1b, 0xc7, 0xd2, 0x81, 0x0d, 0x42, 0x30, 0x27, 0xc6, 0xd2, 0xc1, 0x00, 0x44, 0x29, 0x16, 0xd0, 0xd2, 0x41, 0x44, 0x29, 0x16, 0xd1, 0xd2, 0x41, 0x44, 0x29, 0x16, 0xd3, 0xd2, 0x41, 0xa9, 0x0d, 0x43, 0xfb, 0x05, 0xc4, 0xd2, 0xc1, 0x00, 0x44, 0x29, 0x16, 0xce, 0xd2, 0x41, 0x45, 0x28, 0x16, 0xcf, 0xd2, 0x01, 0x42, 0x32, 0x00, 0xc5, 0xd2, 0x41, 0x44, 0xc9, 0x00, 0xc8, 0xd2, 0x81, - 0x06, 0x45, 0xdf, 0x68, 0xcb, 0xd2, 0x41, 0x43, 0xca, 0x08, 0xd2, 0xd2, - 0x41, 0x51, 0x34, 0x52, 0xbb, 0x10, 0x01, 0xa4, 0x80, 0x03, 0x50, 0xa9, - 0x5c, 0xbc, 0x10, 0x01, 0x07, 0xf1, 0x04, 0x70, 0x4b, 0x11, 0x98, 0xbd, - 0x10, 0x81, 0x63, 0xb3, 0x33, 0x0b, 0x5b, 0x70, 0x01, 0xff, 0xa1, 0x20, + 0x06, 0x45, 0xf4, 0x68, 0xcb, 0xd2, 0x41, 0x43, 0xca, 0x08, 0xd2, 0xd2, + 0x41, 0x51, 0x49, 0x52, 0xbb, 0x10, 0x01, 0xa4, 0x80, 0x03, 0x50, 0xbe, + 0x5c, 0xbc, 0x10, 0x01, 0x07, 0xf1, 0x04, 0x70, 0x4b, 0x24, 0x98, 0xbd, + 0x10, 0x81, 0x63, 0xb3, 0x33, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xa1, 0x20, 0xe5, 0xb5, 0x10, 0x01, 0xe9, 0xb1, 0x10, 0x81, 0x13, 0xef, 0xb7, 0x10, - 0x01, 0xf5, 0xb3, 0x10, 0x81, 0x06, 0x49, 0x76, 0xb7, 0xc2, 0x10, 0x41, + 0x01, 0xf5, 0xb3, 0x10, 0x81, 0x06, 0x49, 0x92, 0xb7, 0xc2, 0x10, 0x41, 0xf5, 0xb4, 0x10, 0x41, 0xe9, 0xb2, 0x10, 0x41, 0xe1, 0xb0, 0x10, 0x01, 0xe9, 0xb6, 0x10, 0x01, 0xf5, 0xb8, 0x10, 0x41, 0x4b, 0x12, 0x24, 0xbe, 0x10, 0x01, 0x04, 0xdc, 0x02, 0x01, 0xff, 0x48, 0x5b, 0x14, 0x81, 0x10, - 0x01, 0x4b, 0x3b, 0x21, 0x80, 0x10, 0x01, 0x45, 0xab, 0x3a, 0xba, 0x10, + 0x01, 0x4b, 0x3b, 0x21, 0x80, 0x10, 0x01, 0x45, 0xc0, 0x3a, 0xba, 0x10, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x49, 0x21, 0xb9, 0x10, 0x01, - 0x45, 0x69, 0x46, 0x82, 0x10, 0x41, 0x46, 0x5b, 0x00, 0xcd, 0x10, 0x41, + 0x45, 0x7e, 0x46, 0x82, 0x10, 0x41, 0x46, 0x5b, 0x00, 0xcd, 0x10, 0x41, 0xe1, 0x83, 0x10, 0x81, 0xf4, 0x01, 0xa2, 0xe7, 0x01, 0xa3, 0xda, 0x01, 0xa4, 0xbb, 0x01, 0xe5, 0x89, 0x10, 0x01, 0xa7, 0xaa, 0x01, 0x42, 0x22, 0x00, 0xaf, 0x10, 0x01, 0xe9, 0x85, 0x10, 0x81, 0x9a, 0x01, 0xaa, 0x8d, @@ -10204,38 +10205,38 @@ static const unsigned char uname2c_tree[210697] = { 0x10, 0x01, 0x42, 0x22, 0x00, 0x95, 0x10, 0x41, 0xe9, 0x86, 0x10, 0x41, 0xe1, 0x8f, 0x10, 0x01, 0x42, 0x22, 0x00, 0x90, 0x10, 0x41, 0xe1, 0xa0, 0x10, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa1, 0x10, 0x41, 0xe1, 0x99, - 0x10, 0x01, 0x43, 0x64, 0x46, 0x9a, 0x10, 0x01, 0x42, 0x22, 0x00, 0x9b, + 0x10, 0x01, 0x43, 0x79, 0x46, 0x9a, 0x10, 0x01, 0x42, 0x22, 0x00, 0x9b, 0x10, 0x41, 0xe1, 0x92, 0x10, 0x01, 0x42, 0x22, 0x00, 0x93, 0x10, 0x41, 0xe1, 0xa5, 0x10, 0x01, 0x42, 0x22, 0x00, 0xa6, 0x10, 0x41, 0xe1, 0x84, 0x10, 0x01, 0xe9, 0x8a, 0x10, 0x01, 0xf5, 0x8c, 0x10, 0x41, 0x44, 0x0b, - 0x1e, 0xc0, 0x10, 0x01, 0x06, 0x3c, 0x01, 0x01, 0xff, 0x45, 0x3f, 0x8e, + 0x1e, 0xc0, 0x10, 0x01, 0x06, 0x3c, 0x01, 0x01, 0xff, 0x45, 0x52, 0x8e, 0xc1, 0x10, 0x01, 0x4c, 0x11, 0x24, 0xbf, 0x10, 0x41, 0xa1, 0x37, 0xa5, - 0x29, 0x52, 0xfd, 0x4c, 0xe9, 0xf9, 0x01, 0xaf, 0x15, 0xb5, 0x01, 0xff, - 0x46, 0x93, 0xd1, 0x39, 0xf9, 0x01, 0x42, 0xb4, 0x01, 0xb5, 0x26, 0x00, - 0x45, 0x17, 0xdf, 0x43, 0x26, 0x40, 0x42, 0x9e, 0x01, 0x1d, 0x2a, 0x00, - 0x46, 0xeb, 0xd6, 0x79, 0xf5, 0x41, 0x43, 0xfa, 0x40, 0x56, 0xf4, 0x01, - 0x47, 0xc9, 0xc8, 0xbc, 0xfa, 0x41, 0x4c, 0xf8, 0x85, 0x83, 0xf3, 0x01, - 0x07, 0x2e, 0xca, 0x83, 0x05, 0xf2, 0xd9, 0xfa, 0x01, 0x07, 0xdc, 0xcc, + 0x29, 0x52, 0x12, 0x4d, 0xe9, 0xf9, 0x01, 0xaf, 0x15, 0xb5, 0x01, 0xff, + 0x46, 0xaf, 0xd1, 0x39, 0xf9, 0x01, 0x42, 0xb4, 0x01, 0xb5, 0x26, 0x00, + 0x45, 0x33, 0xdf, 0x43, 0x26, 0x40, 0x42, 0x9e, 0x01, 0x1d, 0x2a, 0x00, + 0x46, 0x07, 0xd7, 0x79, 0xf5, 0x41, 0x43, 0x0f, 0x41, 0x56, 0xf4, 0x01, + 0x47, 0xe5, 0xc8, 0xbc, 0xfa, 0x41, 0x4c, 0xff, 0x85, 0x83, 0xf3, 0x01, + 0x07, 0x4a, 0xca, 0x83, 0x05, 0xf2, 0xd9, 0xfa, 0x01, 0x07, 0xf8, 0xcc, 0x01, 0xff, 0x0f, 0x54, 0x2f, 0xe3, 0x04, 0x06, 0xf4, 0x05, 0x9c, 0x04, - 0x02, 0x68, 0x00, 0xdb, 0x01, 0x02, 0xc1, 0x08, 0x70, 0x4f, 0xcd, 0x6b, - 0xc2, 0xa9, 0x00, 0x05, 0xdb, 0x02, 0x47, 0x53, 0x49, 0x48, 0xcd, 0xa9, - 0x00, 0x0b, 0x5b, 0x70, 0x01, 0xff, 0x4a, 0xcf, 0xa0, 0xbb, 0xa9, 0x00, - 0x45, 0x0d, 0xdf, 0xbc, 0xa9, 0x00, 0x44, 0xd2, 0xcb, 0xb8, 0xa9, 0x80, - 0x23, 0xb4, 0x0d, 0x44, 0xfe, 0xe7, 0xb6, 0xa9, 0xc0, 0x00, 0x46, 0xeb, - 0xcd, 0xb7, 0xa9, 0x40, 0xa1, 0x06, 0x45, 0xab, 0x10, 0xb5, 0xa9, 0x40, - 0x44, 0x11, 0x0a, 0xba, 0xa9, 0x00, 0x44, 0xec, 0xe0, 0xb4, 0xa9, 0x40, - 0x47, 0x3c, 0xc3, 0xb9, 0xa9, 0x40, 0x45, 0x58, 0xda, 0x81, 0xa9, 0x80, - 0x12, 0x45, 0x55, 0xdd, 0x82, 0xa9, 0x00, 0x49, 0x70, 0xb4, 0x80, 0xa9, - 0x00, 0x47, 0x45, 0xcd, 0x83, 0xa9, 0x40, 0x45, 0x47, 0xd7, 0xb3, 0xa9, - 0x40, 0x03, 0x46, 0x18, 0x11, 0x02, 0x1d, 0x01, 0x01, 0xff, 0x43, 0x4c, - 0x69, 0xc0, 0xa9, 0x00, 0x47, 0xcf, 0xca, 0xcf, 0xa9, 0x40, 0xa1, 0x3d, - 0x49, 0x61, 0xb1, 0xdf, 0xa9, 0x00, 0xac, 0x20, 0x45, 0x9b, 0xdd, 0xc4, - 0xa9, 0x00, 0xb0, 0x0c, 0x4d, 0xc3, 0x81, 0xde, 0xa9, 0x00, 0x45, 0x56, - 0xe1, 0xc6, 0xa9, 0x40, 0x46, 0x71, 0xcf, 0xc7, 0xa9, 0x00, 0x46, 0x56, - 0x48, 0xcc, 0xa9, 0x40, 0x45, 0xb0, 0xdc, 0xc8, 0xa9, 0x00, 0xb5, 0x01, - 0xff, 0x43, 0x41, 0x00, 0xc5, 0xa9, 0x00, 0x44, 0x61, 0x6c, 0xc9, 0xa9, - 0x40, 0x43, 0xfd, 0x0f, 0xca, 0xa9, 0x80, 0x06, 0x44, 0x52, 0xe6, 0xc3, - 0xa9, 0x40, 0x45, 0x8f, 0xac, 0xcb, 0xa9, 0x40, 0x4c, 0x9c, 0x87, 0xc1, + 0x02, 0x68, 0x00, 0xdb, 0x01, 0x02, 0xc1, 0x08, 0x70, 0x4f, 0xe2, 0x6b, + 0xc2, 0xa9, 0x00, 0x05, 0xdb, 0x02, 0x47, 0x53, 0x5e, 0x48, 0xcd, 0xa9, + 0x00, 0x0b, 0x70, 0x70, 0x01, 0xff, 0x4a, 0xe2, 0xa0, 0xbb, 0xa9, 0x00, + 0x45, 0x29, 0xdf, 0xbc, 0xa9, 0x00, 0x44, 0xee, 0xcb, 0xb8, 0xa9, 0x80, + 0x23, 0xb4, 0x0d, 0x44, 0x1a, 0xe8, 0xb6, 0xa9, 0xc0, 0x00, 0x46, 0x07, + 0xce, 0xb7, 0xa9, 0x40, 0xa1, 0x06, 0x45, 0xab, 0x10, 0xb5, 0xa9, 0x40, + 0x44, 0x11, 0x0a, 0xba, 0xa9, 0x00, 0x44, 0x08, 0xe1, 0xb4, 0xa9, 0x40, + 0x47, 0x58, 0xc3, 0xb9, 0xa9, 0x40, 0x45, 0x74, 0xda, 0x81, 0xa9, 0x80, + 0x12, 0x45, 0x71, 0xdd, 0x82, 0xa9, 0x00, 0x49, 0x8c, 0xb4, 0x80, 0xa9, + 0x00, 0x47, 0x61, 0xcd, 0x83, 0xa9, 0x40, 0x45, 0x63, 0xd7, 0xb3, 0xa9, + 0x40, 0x03, 0x46, 0x18, 0x11, 0x02, 0x1d, 0x01, 0x01, 0xff, 0x43, 0x61, + 0x69, 0xc0, 0xa9, 0x00, 0x47, 0xeb, 0xca, 0xcf, 0xa9, 0x40, 0xa1, 0x3d, + 0x49, 0x7d, 0xb1, 0xdf, 0xa9, 0x00, 0xac, 0x20, 0x45, 0xb7, 0xdd, 0xc4, + 0xa9, 0x00, 0xb0, 0x0c, 0x4d, 0xca, 0x81, 0xde, 0xa9, 0x00, 0x45, 0x72, + 0xe1, 0xc6, 0xa9, 0x40, 0x46, 0x8d, 0xcf, 0xc7, 0xa9, 0x00, 0x46, 0x6b, + 0x48, 0xcc, 0xa9, 0x40, 0x45, 0xcc, 0xdc, 0xc8, 0xa9, 0x00, 0xb5, 0x01, + 0xff, 0x43, 0x41, 0x00, 0xc5, 0xa9, 0x00, 0x44, 0x76, 0x6c, 0xc9, 0xa9, + 0x40, 0x43, 0xfd, 0x0f, 0xca, 0xa9, 0x80, 0x06, 0x44, 0x6e, 0xe6, 0xc3, + 0xa9, 0x40, 0x45, 0xa2, 0xac, 0xcb, 0xa9, 0x40, 0x4c, 0xa3, 0x87, 0xc1, 0xa9, 0x00, 0x05, 0xf3, 0x04, 0x01, 0xff, 0xe1, 0x84, 0xa9, 0x80, 0xa7, 0x02, 0x42, 0x16, 0x00, 0xa7, 0xa9, 0x80, 0x99, 0x02, 0x42, 0x37, 0x00, 0x95, 0xa9, 0x80, 0x8b, 0x02, 0xa4, 0xf0, 0x01, 0xe5, 0x8c, 0xa9, 0x00, @@ -10247,188 +10248,188 @@ static const unsigned char uname2c_tree[210697] = { 0x4f, 0x42, 0x71, 0x00, 0xab, 0xa9, 0x80, 0x42, 0x42, 0x45, 0x05, 0xb1, 0xa9, 0x80, 0x2a, 0xb4, 0x10, 0xf5, 0x88, 0xa9, 0x00, 0x42, 0xa9, 0x01, 0xae, 0xa9, 0x00, 0x42, 0x20, 0x20, 0xaa, 0xa9, 0x40, 0xe1, 0xa0, 0xa9, - 0x80, 0x0d, 0x42, 0x12, 0x00, 0x9b, 0xa9, 0xc0, 0x00, 0x4a, 0x89, 0x69, - 0x9c, 0xa9, 0x40, 0x46, 0xf1, 0xcd, 0xa1, 0xa9, 0x40, 0x02, 0x6b, 0x00, - 0x01, 0xff, 0x48, 0x8b, 0x69, 0xb0, 0xa9, 0x00, 0x44, 0x85, 0x69, 0xaf, - 0xa9, 0x40, 0x46, 0xb5, 0xcd, 0xac, 0xa9, 0x40, 0x80, 0x01, 0xff, 0x45, - 0x62, 0xda, 0x89, 0xa9, 0x00, 0x45, 0x84, 0x69, 0xa6, 0xa9, 0x40, 0xe1, + 0x80, 0x0d, 0x42, 0x12, 0x00, 0x9b, 0xa9, 0xc0, 0x00, 0x4a, 0x9e, 0x69, + 0x9c, 0xa9, 0x40, 0x46, 0x0d, 0xce, 0xa1, 0xa9, 0x40, 0x02, 0x6b, 0x00, + 0x01, 0xff, 0x48, 0xa0, 0x69, 0xb0, 0xa9, 0x00, 0x44, 0x9a, 0x69, 0xaf, + 0xa9, 0x40, 0x46, 0xd1, 0xcd, 0xac, 0xa9, 0x40, 0x80, 0x01, 0xff, 0x45, + 0x7e, 0xda, 0x89, 0xa9, 0x00, 0x45, 0x99, 0x69, 0xa6, 0xa9, 0x40, 0xe1, 0xa4, 0xa9, 0x80, 0x21, 0x42, 0x24, 0x02, 0x94, 0xa9, 0x80, 0x0d, 0x42, - 0x20, 0x20, 0x9a, 0xa9, 0xc0, 0x00, 0x46, 0xf1, 0xcd, 0x98, 0xa9, 0x40, - 0x46, 0xdf, 0xcd, 0x8a, 0xa9, 0xc0, 0x00, 0x48, 0xd5, 0xb8, 0x8b, 0xa9, - 0x40, 0x46, 0xf1, 0xcd, 0x9f, 0xa9, 0x40, 0x80, 0x01, 0xff, 0x45, 0x84, - 0x69, 0x91, 0xa9, 0x00, 0x45, 0xe2, 0x9a, 0x90, 0xa9, 0x40, 0x4a, 0x89, - 0x69, 0x99, 0xa9, 0x40, 0x45, 0x2e, 0xd7, 0x85, 0xa9, 0x00, 0xe9, 0x87, - 0xa9, 0x40, 0x46, 0xf1, 0xcd, 0x93, 0xa9, 0x40, 0xe1, 0xa2, 0xa9, 0x80, - 0x0d, 0x42, 0x68, 0x0f, 0x9d, 0xa9, 0xc0, 0x00, 0x4a, 0x89, 0x69, 0x9e, - 0xa9, 0x40, 0x4a, 0x89, 0x69, 0xa3, 0xa9, 0x40, 0x46, 0xf1, 0xcd, 0x96, - 0xa9, 0x40, 0x46, 0xf1, 0xcd, 0xa8, 0xa9, 0x40, 0xe9, 0x8d, 0xa9, 0x40, + 0x20, 0x20, 0x9a, 0xa9, 0xc0, 0x00, 0x46, 0x0d, 0xce, 0x98, 0xa9, 0x40, + 0x46, 0xfb, 0xcd, 0x8a, 0xa9, 0xc0, 0x00, 0x48, 0xf1, 0xb8, 0x8b, 0xa9, + 0x40, 0x46, 0x0d, 0xce, 0x9f, 0xa9, 0x40, 0x80, 0x01, 0xff, 0x45, 0x99, + 0x69, 0x91, 0xa9, 0x00, 0x45, 0xf5, 0x9a, 0x90, 0xa9, 0x40, 0x4a, 0x9e, + 0x69, 0x99, 0xa9, 0x40, 0x45, 0x4a, 0xd7, 0x85, 0xa9, 0x00, 0xe9, 0x87, + 0xa9, 0x40, 0x46, 0x0d, 0xce, 0x93, 0xa9, 0x40, 0xe1, 0xa2, 0xa9, 0x80, + 0x0d, 0x42, 0x68, 0x0f, 0x9d, 0xa9, 0xc0, 0x00, 0x4a, 0x9e, 0x69, 0x9e, + 0xa9, 0x40, 0x4a, 0x9e, 0x69, 0xa3, 0xa9, 0x40, 0x46, 0x0d, 0xce, 0x96, + 0xa9, 0x40, 0x46, 0x0d, 0xce, 0xa8, 0xa9, 0x40, 0xe9, 0x8d, 0xa9, 0x40, 0x45, 0xd1, 0x09, 0xd8, 0xa9, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0xd9, 0xa9, 0x00, 0x43, 0xcd, 0x09, 0xd1, 0xa9, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xd0, 0xa9, 0x40, 0x44, 0x25, 0x01, 0xd3, 0xa9, 0x00, 0x42, 0x15, 0x02, 0xd2, 0xa9, 0x40, 0x44, 0x96, 0x1b, 0xd7, 0xa9, 0x00, 0x42, 0x30, 0x27, 0xd6, 0xa9, 0x40, 0x43, 0xd7, 0x04, 0xd5, 0xa9, 0x00, - 0x43, 0xfb, 0x05, 0xd4, 0xa9, 0x40, 0x45, 0x35, 0xda, 0xbf, 0xa9, 0x00, - 0x45, 0x05, 0xdd, 0xbd, 0xa9, 0x00, 0x47, 0x58, 0xca, 0xbe, 0xa9, 0x40, - 0x4b, 0x7e, 0x91, 0xfb, 0x26, 0x00, 0x46, 0x19, 0xd0, 0xef, 0xf3, 0x01, - 0x45, 0x26, 0xb1, 0x8e, 0xf3, 0x01, 0x46, 0xbd, 0xd1, 0x7a, 0xf4, 0x01, - 0x5a, 0xfe, 0x1d, 0x04, 0x30, 0x00, 0x44, 0x24, 0xcb, 0x79, 0xf4, 0x01, - 0x4b, 0x24, 0x99, 0xe3, 0xf3, 0x01, 0x53, 0xd7, 0x47, 0x30, 0xf5, 0x41, - 0x53, 0x33, 0x42, 0x1f, 0xf9, 0x01, 0x03, 0xef, 0x06, 0x9d, 0x14, 0x02, - 0x04, 0x00, 0xa4, 0x0d, 0xad, 0xb5, 0x0b, 0xae, 0x06, 0x4e, 0x1c, 0x78, - 0xee, 0xf3, 0x41, 0x48, 0x9d, 0xba, 0xe5, 0xf4, 0x01, 0xa3, 0xf9, 0x0a, - 0xa4, 0xe3, 0x06, 0xa6, 0xa0, 0x06, 0x06, 0x11, 0xd2, 0x8f, 0x06, 0x0f, - 0x37, 0x6b, 0xe8, 0x05, 0xb3, 0xc9, 0x02, 0x02, 0x77, 0x00, 0x88, 0x01, - 0xb6, 0x01, 0xff, 0x02, 0x33, 0x00, 0x17, 0x07, 0xd4, 0xc7, 0x01, 0xff, + 0x43, 0xfb, 0x05, 0xd4, 0xa9, 0x40, 0x45, 0x51, 0xda, 0xbf, 0xa9, 0x00, + 0x45, 0x21, 0xdd, 0xbd, 0xa9, 0x00, 0x47, 0x74, 0xca, 0xbe, 0xa9, 0x40, + 0x4b, 0x91, 0x91, 0xfb, 0x26, 0x00, 0x46, 0x35, 0xd0, 0xef, 0xf3, 0x01, + 0x45, 0x42, 0xb1, 0x8e, 0xf3, 0x01, 0x46, 0xd9, 0xd1, 0x7a, 0xf4, 0x01, + 0x5a, 0xfe, 0x1d, 0x04, 0x30, 0x00, 0x44, 0x40, 0xcb, 0x79, 0xf4, 0x01, + 0x4b, 0x37, 0x99, 0xe3, 0xf3, 0x01, 0x53, 0xec, 0x47, 0x30, 0xf5, 0x41, + 0x53, 0x48, 0x42, 0x1f, 0xf9, 0x01, 0x03, 0xef, 0x06, 0xc5, 0x14, 0x02, + 0x04, 0x00, 0xa4, 0x0d, 0xad, 0xb5, 0x0b, 0xae, 0x06, 0x4e, 0x23, 0x78, + 0xee, 0xf3, 0x41, 0x48, 0xb9, 0xba, 0xe5, 0xf4, 0x01, 0xa3, 0xf9, 0x0a, + 0xa4, 0xe3, 0x06, 0xa6, 0xa0, 0x06, 0x06, 0x2d, 0xd2, 0x8f, 0x06, 0x0f, + 0x4c, 0x6b, 0xe8, 0x05, 0xb3, 0xc9, 0x02, 0x02, 0x77, 0x00, 0x88, 0x01, + 0xb6, 0x01, 0xff, 0x02, 0x33, 0x00, 0x17, 0x07, 0xf0, 0xc7, 0x01, 0xff, 0x44, 0x71, 0x25, 0x64, 0x20, 0x00, 0x49, 0x70, 0x1e, 0x63, 0x20, 0x00, 0x45, 0x28, 0x02, 0x62, 0x20, 0x40, 0x03, 0x98, 0x03, 0x3e, 0x04, 0x77, 0x00, 0x01, 0xff, 0x50, 0xad, 0x00, 0xa1, 0x00, 0x00, 0x4b, 0x3e, 0x14, - 0x18, 0x2e, 0x00, 0xac, 0x18, 0x48, 0x45, 0xbf, 0x27, 0x21, 0x00, 0x49, + 0x18, 0x2e, 0x00, 0xac, 0x18, 0x48, 0x61, 0xbf, 0x27, 0x21, 0x00, 0x49, 0x7f, 0x19, 0xe7, 0x26, 0x00, 0x4d, 0xbd, 0x30, 0xbf, 0x00, 0x00, 0x48, - 0x05, 0xc2, 0x54, 0x20, 0x40, 0x45, 0x08, 0x68, 0x3e, 0x22, 0x00, 0x49, - 0x43, 0xb4, 0x45, 0x2e, 0xc0, 0x00, 0x52, 0x51, 0x4a, 0x46, 0x2e, 0x40, - 0x46, 0x64, 0x1f, 0xd8, 0x25, 0x00, 0x05, 0x66, 0x64, 0x12, 0x62, 0xae, + 0x21, 0xc2, 0x54, 0x20, 0x40, 0x45, 0x1d, 0x68, 0x3e, 0x22, 0x00, 0x49, + 0x5f, 0xb4, 0x45, 0x2e, 0xc0, 0x00, 0x52, 0x66, 0x4a, 0x46, 0x2e, 0x40, + 0x46, 0x64, 0x1f, 0xd8, 0x25, 0x00, 0x05, 0x7b, 0x64, 0x12, 0x62, 0xae, 0x0a, 0xb4, 0xfb, 0x01, 0x4c, 0x9b, 0x03, 0x90, 0xfb, 0x01, 0x4c, 0xaa, - 0x0f, 0xd9, 0x25, 0x40, 0x45, 0xb8, 0x00, 0xb1, 0xfb, 0x01, 0x4d, 0x91, + 0x0f, 0xd9, 0x25, 0x40, 0x45, 0xb8, 0x00, 0xb1, 0xfb, 0x01, 0x4d, 0x98, 0x7b, 0x96, 0xfb, 0x41, 0x44, 0xb1, 0x23, 0x2b, 0x22, 0x80, 0x6a, 0xb2, - 0x01, 0xff, 0x46, 0x0d, 0xd0, 0xba, 0x22, 0x00, 0x4b, 0x78, 0x37, 0x3c, + 0x01, 0xff, 0x46, 0x29, 0xd0, 0xba, 0x22, 0x00, 0x4b, 0x78, 0x37, 0x3c, 0x2a, 0x00, 0xac, 0x3d, 0x46, 0x43, 0x14, 0x3d, 0x20, 0x00, 0x47, 0x96, 0x08, 0x29, 0x22, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x1d, 0x63, 0x51, 0x09, 0x4b, 0x2a, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x43, 0xc5, 0x06, 0x40, 0x2a, 0x00, 0x4b, 0x5f, 0x2c, 0x44, 0x2a, 0x00, 0x47, - 0xf3, 0x78, 0x43, 0x2a, 0x40, 0x4f, 0x98, 0x64, 0x49, 0x2a, 0x00, 0x45, - 0x6c, 0x15, 0x47, 0x2a, 0x40, 0x11, 0x64, 0x55, 0x06, 0x5a, 0xe8, 0x1e, - 0xa4, 0x26, 0x40, 0x46, 0x6b, 0xcf, 0xf9, 0xff, 0x00, 0x49, 0x70, 0x1e, - 0xfa, 0xff, 0x00, 0x4a, 0x08, 0x7f, 0xfb, 0xff, 0x40, 0x80, 0x01, 0xff, - 0xa1, 0x3a, 0x49, 0x19, 0x53, 0xae, 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x4d, 0x29, 0x7b, 0x0e, 0x2a, 0x00, 0x4c, 0x68, 0x09, 0x19, 0x2a, - 0x00, 0x59, 0xfc, 0x21, 0x17, 0x2a, 0x00, 0x47, 0xf3, 0x78, 0x1b, 0x2a, - 0x00, 0x4a, 0x21, 0xa9, 0x18, 0x2a, 0x00, 0x02, 0x24, 0x0a, 0x01, 0xff, - 0x46, 0x3d, 0x54, 0x1c, 0x2a, 0x00, 0x43, 0xb5, 0x00, 0x1a, 0x2a, 0x40, - 0x56, 0xda, 0x32, 0x15, 0x2a, 0x00, 0x51, 0x4f, 0x59, 0x0f, 0x2a, 0x40, - 0x0d, 0x9a, 0x7a, 0x06, 0x4d, 0x9e, 0x7b, 0x80, 0x23, 0x40, 0x06, 0x3f, - 0x6c, 0xd3, 0x01, 0x07, 0x38, 0xcb, 0x01, 0xff, 0x07, 0xf1, 0x04, 0x3d, + 0xfa, 0x78, 0x43, 0x2a, 0x40, 0x4f, 0xad, 0x64, 0x49, 0x2a, 0x00, 0x45, + 0x6c, 0x15, 0x47, 0x2a, 0x40, 0x11, 0x79, 0x55, 0x06, 0x5a, 0xe8, 0x1e, + 0xa4, 0x26, 0x40, 0x46, 0x87, 0xcf, 0xf9, 0xff, 0x00, 0x49, 0x70, 0x1e, + 0xfa, 0xff, 0x00, 0x4a, 0x0f, 0x7f, 0xfb, 0xff, 0x40, 0x80, 0x01, 0xff, + 0xa1, 0x3a, 0x49, 0x2e, 0x53, 0xae, 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x4d, 0x30, 0x7b, 0x0e, 0x2a, 0x00, 0x4c, 0x68, 0x09, 0x19, 0x2a, + 0x00, 0x59, 0xfc, 0x21, 0x17, 0x2a, 0x00, 0x47, 0xfa, 0x78, 0x1b, 0x2a, + 0x00, 0x4a, 0x34, 0xa9, 0x18, 0x2a, 0x00, 0x02, 0x24, 0x0a, 0x01, 0xff, + 0x46, 0x52, 0x54, 0x1c, 0x2a, 0x00, 0x43, 0xb5, 0x00, 0x1a, 0x2a, 0x40, + 0x56, 0xda, 0x32, 0x15, 0x2a, 0x00, 0x51, 0x64, 0x59, 0x0f, 0x2a, 0x40, + 0x0d, 0xa1, 0x7a, 0x06, 0x4d, 0xa5, 0x7b, 0x80, 0x23, 0x40, 0x06, 0x54, + 0x6c, 0xd3, 0x01, 0x07, 0x54, 0xcb, 0x01, 0xff, 0x07, 0xf1, 0x04, 0x3d, 0x07, 0xbf, 0x35, 0x01, 0xff, 0x44, 0xfa, 0x05, 0x5b, 0x0b, 0x01, 0x43, 0xcd, 0x09, 0x58, 0x0b, 0x81, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x5c, 0x0b, 0x01, 0x44, 0x25, 0x01, 0x5a, 0x0b, 0x01, 0xb7, 0x01, 0xff, 0x44, 0x98, 0x1b, 0x5d, 0x0b, 0x01, 0xef, 0x59, 0x0b, 0x41, 0x80, 0x01, - 0xff, 0x47, 0xe9, 0x0f, 0x5e, 0x0b, 0x01, 0x48, 0x54, 0x58, 0x5f, 0x0b, - 0x41, 0xa1, 0x7f, 0x44, 0x46, 0xe4, 0x41, 0x0b, 0x01, 0x46, 0x8d, 0x44, - 0x43, 0x0b, 0x01, 0x45, 0x4b, 0xa2, 0x42, 0x0b, 0x01, 0x42, 0xb0, 0x01, - 0x44, 0x0b, 0x81, 0x60, 0x44, 0xba, 0xe5, 0x4a, 0x0b, 0x01, 0x46, 0x1f, + 0xff, 0x47, 0xe9, 0x0f, 0x5e, 0x0b, 0x01, 0x48, 0x69, 0x58, 0x5f, 0x0b, + 0x41, 0xa1, 0x7f, 0x44, 0x62, 0xe4, 0x41, 0x0b, 0x01, 0x46, 0xa2, 0x44, + 0x43, 0x0b, 0x01, 0x45, 0x5e, 0xa2, 0x42, 0x0b, 0x01, 0x42, 0xb0, 0x01, + 0x44, 0x0b, 0x81, 0x60, 0x44, 0xd6, 0xe5, 0x4a, 0x0b, 0x01, 0x46, 0x3b, 0xd3, 0x4b, 0x0b, 0x01, 0x43, 0xb9, 0x04, 0x4c, 0x0b, 0x01, 0x43, 0x40, - 0x20, 0x4d, 0x0b, 0x01, 0x42, 0x6f, 0x02, 0x50, 0x0b, 0x01, 0x44, 0x71, - 0xbe, 0x52, 0x0b, 0x01, 0x44, 0x29, 0x60, 0x53, 0x0b, 0x01, 0xb3, 0x20, - 0xb4, 0x12, 0x43, 0x08, 0x83, 0x45, 0x0b, 0x01, 0x44, 0xf9, 0x4c, 0x49, - 0x0b, 0x01, 0x45, 0xf3, 0x4c, 0x46, 0x0b, 0x41, 0x42, 0xaf, 0x3f, 0x55, + 0x20, 0x4d, 0x0b, 0x01, 0x42, 0x6f, 0x02, 0x50, 0x0b, 0x01, 0x44, 0x8d, + 0xbe, 0x52, 0x0b, 0x01, 0x44, 0x3e, 0x60, 0x53, 0x0b, 0x01, 0xb3, 0x20, + 0xb4, 0x12, 0x43, 0x0f, 0x83, 0x45, 0x0b, 0x01, 0x44, 0x0e, 0x4d, 0x49, + 0x0b, 0x01, 0x45, 0x08, 0x4d, 0x46, 0x0b, 0x41, 0x42, 0xc4, 0x3f, 0x55, 0x0b, 0x01, 0x43, 0x25, 0x23, 0x48, 0x0b, 0x41, 0xa1, 0x06, 0x43, 0x99, - 0x14, 0x54, 0x0b, 0x41, 0x43, 0xd7, 0xdf, 0x51, 0x0b, 0x01, 0x44, 0x96, - 0xd9, 0x4e, 0x0b, 0x41, 0x42, 0x53, 0x00, 0x47, 0x0b, 0x41, 0x44, 0x99, + 0x14, 0x54, 0x0b, 0x41, 0x43, 0xf3, 0xdf, 0x51, 0x0b, 0x01, 0x44, 0xb2, + 0xd9, 0x4e, 0x0b, 0x41, 0x42, 0x53, 0x00, 0x47, 0x0b, 0x41, 0x44, 0xae, 0x38, 0x40, 0x0b, 0x01, 0x43, 0x4b, 0x18, 0x4f, 0x0b, 0x41, 0x07, 0xf1, 0x04, 0x3d, 0x07, 0xbf, 0x35, 0x01, 0xff, 0x44, 0xfa, 0x05, 0x7b, 0x0b, 0x01, 0x43, 0xcd, 0x09, 0x78, 0x0b, 0x81, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x7c, 0x0b, 0x01, 0x44, 0x25, 0x01, 0x7a, 0x0b, 0x01, 0xb7, 0x01, 0xff, 0x44, 0x98, 0x1b, 0x7d, 0x0b, 0x01, 0xef, 0x79, 0x0b, 0x41, - 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x7e, 0x0b, 0x01, 0x48, 0x54, 0x58, - 0x7f, 0x0b, 0x41, 0x45, 0x02, 0xa5, 0x60, 0x0b, 0x01, 0x44, 0x46, 0xe4, - 0x61, 0x0b, 0x01, 0x46, 0x8d, 0x44, 0x63, 0x0b, 0x01, 0x45, 0x4b, 0xa2, - 0x62, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x64, 0x0b, 0x81, 0x54, 0x44, 0xba, - 0xe5, 0x6a, 0x0b, 0x01, 0x46, 0x1f, 0xd3, 0x6b, 0x0b, 0x01, 0x48, 0x6d, + 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x7e, 0x0b, 0x01, 0x48, 0x69, 0x58, + 0x7f, 0x0b, 0x41, 0x45, 0x15, 0xa5, 0x60, 0x0b, 0x01, 0x44, 0x62, 0xe4, + 0x61, 0x0b, 0x01, 0x46, 0xa2, 0x44, 0x63, 0x0b, 0x01, 0x45, 0x5e, 0xa2, + 0x62, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x64, 0x0b, 0x81, 0x54, 0x44, 0xd6, + 0xe5, 0x6a, 0x0b, 0x01, 0x46, 0x3b, 0xd3, 0x6b, 0x0b, 0x01, 0x48, 0x89, 0xbe, 0x6c, 0x0b, 0x01, 0x43, 0x40, 0x20, 0x6d, 0x0b, 0x01, 0x42, 0x6f, - 0x02, 0x6f, 0x0b, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x4d, 0x08, 0x83, 0x65, - 0x0b, 0x01, 0x44, 0xf9, 0x4c, 0x69, 0x0b, 0x01, 0x45, 0xf3, 0x4c, 0x66, - 0x0b, 0x41, 0x42, 0xaf, 0x3f, 0x72, 0x0b, 0x01, 0x43, 0x25, 0x23, 0x68, - 0x0b, 0x41, 0xa1, 0x06, 0x43, 0x99, 0x14, 0x71, 0x0b, 0x41, 0x43, 0xd7, - 0xdf, 0x70, 0x0b, 0x01, 0x44, 0x96, 0xd9, 0x6e, 0x0b, 0x41, 0x42, 0x53, - 0x00, 0x67, 0x0b, 0x41, 0x06, 0xe3, 0x04, 0x0c, 0x47, 0x5c, 0xc9, 0x22, - 0xf5, 0x01, 0x47, 0xf7, 0x06, 0x23, 0xf5, 0x41, 0x4f, 0x10, 0x65, 0x20, - 0xf5, 0x01, 0x47, 0x18, 0x65, 0x24, 0xf5, 0x01, 0x4d, 0x5b, 0x81, 0x21, - 0xf5, 0x41, 0x53, 0xcb, 0x42, 0x6c, 0x20, 0x00, 0x52, 0xdf, 0x4f, 0x6a, - 0x20, 0x40, 0x45, 0x0a, 0x66, 0x1e, 0x22, 0x80, 0x33, 0x09, 0xcb, 0x56, - 0x01, 0xff, 0x4b, 0xde, 0x92, 0x81, 0xf4, 0x01, 0xb3, 0x01, 0xff, 0x09, - 0x71, 0x1e, 0x06, 0x45, 0xd5, 0x56, 0x39, 0x21, 0x40, 0x44, 0xfa, 0x05, + 0x02, 0x6f, 0x0b, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x4d, 0x0f, 0x83, 0x65, + 0x0b, 0x01, 0x44, 0x0e, 0x4d, 0x69, 0x0b, 0x01, 0x45, 0x08, 0x4d, 0x66, + 0x0b, 0x41, 0x42, 0xc4, 0x3f, 0x72, 0x0b, 0x01, 0x43, 0x25, 0x23, 0x68, + 0x0b, 0x41, 0xa1, 0x06, 0x43, 0x99, 0x14, 0x71, 0x0b, 0x41, 0x43, 0xf3, + 0xdf, 0x70, 0x0b, 0x01, 0x44, 0xb2, 0xd9, 0x6e, 0x0b, 0x41, 0x42, 0x53, + 0x00, 0x67, 0x0b, 0x41, 0x06, 0xe3, 0x04, 0x0c, 0x47, 0x78, 0xc9, 0x22, + 0xf5, 0x01, 0x47, 0xf7, 0x06, 0x23, 0xf5, 0x41, 0x4f, 0x25, 0x65, 0x20, + 0xf5, 0x01, 0x47, 0x2d, 0x65, 0x24, 0xf5, 0x01, 0x4d, 0x62, 0x81, 0x21, + 0xf5, 0x41, 0x53, 0xe0, 0x42, 0x6c, 0x20, 0x00, 0x52, 0xf4, 0x4f, 0x6a, + 0x20, 0x40, 0x45, 0x1f, 0x66, 0x1e, 0x22, 0x80, 0x33, 0x09, 0xe0, 0x56, + 0x01, 0xff, 0x4b, 0xf1, 0x92, 0x81, 0xf4, 0x01, 0xb3, 0x01, 0xff, 0x09, + 0x71, 0x1e, 0x06, 0x45, 0xea, 0x56, 0x39, 0x21, 0x40, 0x44, 0xfa, 0x05, 0x1c, 0x00, 0x00, 0x43, 0xcd, 0x09, 0x1f, 0x00, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x1d, 0x00, 0x00, 0x42, 0x15, 0x02, 0x1e, 0x00, 0x40, 0x5a, 0x44, 0x1c, 0xde, 0x29, 0x40, 0x42, 0xad, 0x00, 0x84, 0x00, 0x80, - 0x85, 0x04, 0xa9, 0x01, 0xff, 0x4d, 0x6f, 0x79, 0xb9, 0x20, 0x00, 0x08, - 0xb5, 0xba, 0x01, 0xff, 0x53, 0x92, 0x42, 0xb4, 0xec, 0x01, 0x09, 0x76, - 0x54, 0xd6, 0x03, 0x49, 0x9c, 0x42, 0xa0, 0xec, 0x01, 0x07, 0xbf, 0x35, - 0x0c, 0x4b, 0x69, 0x5f, 0xac, 0xec, 0x01, 0x4a, 0xeb, 0xa7, 0xb0, 0xec, + 0x85, 0x04, 0xa9, 0x01, 0xff, 0x4d, 0x76, 0x79, 0xb9, 0x20, 0x00, 0x08, + 0xd1, 0xba, 0x01, 0xff, 0x53, 0xa7, 0x42, 0xb4, 0xec, 0x01, 0x09, 0x8b, + 0x54, 0xd6, 0x03, 0x49, 0xb1, 0x42, 0xa0, 0xec, 0x01, 0x07, 0xbf, 0x35, + 0x0c, 0x4b, 0x7e, 0x5f, 0xac, 0xec, 0x01, 0x4a, 0xfe, 0xa7, 0xb0, 0xec, 0x41, 0x0a, 0x69, 0x10, 0xa6, 0x03, 0x45, 0xd1, 0x09, 0x78, 0xec, 0x81, - 0x85, 0x03, 0xa6, 0xb7, 0x02, 0x45, 0xfb, 0xdc, 0xa1, 0xec, 0x81, 0xa9, - 0x02, 0x44, 0x9c, 0x42, 0x9e, 0xec, 0x81, 0x9b, 0x02, 0x44, 0xb8, 0x27, + 0x85, 0x03, 0xa6, 0xb7, 0x02, 0x45, 0x17, 0xdd, 0xa1, 0xec, 0x81, 0xa9, + 0x02, 0x44, 0xb1, 0x42, 0x9e, 0xec, 0x81, 0x9b, 0x02, 0x44, 0xb8, 0x27, 0x79, 0xec, 0x81, 0xf8, 0x01, 0x43, 0xcd, 0x09, 0x71, 0xec, 0x81, 0xe1, - 0x01, 0x09, 0xa7, 0x46, 0x9f, 0x01, 0xb3, 0x59, 0xb4, 0x01, 0xff, 0x42, + 0x01, 0x09, 0xbc, 0x46, 0x9f, 0x01, 0xb3, 0x59, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x7a, 0xec, 0x81, 0x49, 0xa8, 0x24, 0xb7, 0x01, 0xff, 0x44, 0x98, 0x1b, 0x7b, 0xec, 0x81, 0x14, 0xef, 0x72, 0xec, 0xc1, 0x00, 0x80, - 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x84, 0xec, 0x01, 0x48, 0x54, 0x58, 0x8d, - 0xec, 0x41, 0x49, 0x53, 0x58, 0x96, 0xec, 0x41, 0x44, 0xf3, 0x0f, 0x7c, + 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x84, 0xec, 0x01, 0x48, 0x69, 0x58, 0x8d, + 0xec, 0x41, 0x49, 0x68, 0x58, 0x96, 0xec, 0x41, 0x44, 0xf3, 0x0f, 0x7c, 0xec, 0x81, 0x16, 0x43, 0x26, 0x01, 0x73, 0xec, 0xc1, 0x00, 0x80, 0x01, - 0xff, 0x47, 0xe9, 0x0f, 0x85, 0xec, 0x01, 0x48, 0x54, 0x58, 0x8e, 0xec, - 0x41, 0x49, 0x53, 0x58, 0x97, 0xec, 0x41, 0x49, 0x53, 0x58, 0x95, 0xec, + 0xff, 0x47, 0xe9, 0x0f, 0x85, 0xec, 0x01, 0x48, 0x69, 0x58, 0x8e, 0xec, + 0x41, 0x49, 0x68, 0x58, 0x97, 0xec, 0x41, 0x49, 0x68, 0x58, 0x95, 0xec, 0x41, 0x44, 0x96, 0x1b, 0x77, 0xec, 0x81, 0x22, 0x42, 0x30, 0x27, 0x76, 0xec, 0xc1, 0x00, 0x80, 0x0d, 0x42, 0xf5, 0x0f, 0x7f, 0xec, 0xc1, 0x00, - 0x49, 0x53, 0x58, 0x9a, 0xec, 0x41, 0x47, 0xe9, 0x0f, 0x88, 0xec, 0x01, - 0x48, 0x54, 0x58, 0x91, 0xec, 0x41, 0x80, 0x0d, 0x42, 0xf5, 0x0f, 0x80, - 0xec, 0xc1, 0x00, 0x49, 0x53, 0x58, 0x9b, 0xec, 0x41, 0x47, 0xe9, 0x0f, - 0x89, 0xec, 0x01, 0x48, 0x54, 0x58, 0x92, 0xec, 0x41, 0x45, 0xd1, 0x09, + 0x49, 0x68, 0x58, 0x9a, 0xec, 0x41, 0x47, 0xe9, 0x0f, 0x88, 0xec, 0x01, + 0x48, 0x69, 0x58, 0x91, 0xec, 0x41, 0x80, 0x0d, 0x42, 0xf5, 0x0f, 0x80, + 0xec, 0xc1, 0x00, 0x49, 0x68, 0x58, 0x9b, 0xec, 0x41, 0x47, 0xe9, 0x0f, + 0x89, 0xec, 0x01, 0x48, 0x69, 0x58, 0x92, 0xec, 0x41, 0x45, 0xd1, 0x09, 0xaa, 0xec, 0x01, 0xa6, 0x29, 0x44, 0xb8, 0x27, 0xab, 0xec, 0x01, 0x43, 0xcd, 0x09, 0xa3, 0xec, 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xa5, 0xec, 0x01, 0x42, 0x15, 0x02, 0xa4, 0xec, 0x41, 0x44, 0x96, 0x1b, 0xa9, 0xec, 0x01, 0x42, 0x30, 0x27, 0xa8, 0xec, 0x41, 0x43, 0xd7, 0x04, 0xa7, 0xec, 0x01, 0x43, 0xfb, 0x05, 0xa6, 0xec, 0x41, 0x80, 0x01, - 0xff, 0x47, 0xe9, 0x0f, 0x83, 0xec, 0x01, 0x48, 0x54, 0x58, 0x8c, 0xec, - 0x41, 0x80, 0x0d, 0x42, 0xf5, 0x0f, 0x82, 0xec, 0xc1, 0x00, 0x49, 0x53, - 0x58, 0x9d, 0xec, 0x41, 0x47, 0xe9, 0x0f, 0x8b, 0xec, 0x01, 0x48, 0x54, + 0xff, 0x47, 0xe9, 0x0f, 0x83, 0xec, 0x01, 0x48, 0x69, 0x58, 0x8c, 0xec, + 0x41, 0x80, 0x0d, 0x42, 0xf5, 0x0f, 0x82, 0xec, 0xc1, 0x00, 0x49, 0x68, + 0x58, 0x9d, 0xec, 0x41, 0x47, 0xe9, 0x0f, 0x8b, 0xec, 0x01, 0x48, 0x69, 0x58, 0x94, 0xec, 0x41, 0x42, 0x1a, 0x00, 0x9f, 0xec, 0x41, 0x42, 0x1a, 0x00, 0xa2, 0xec, 0x41, 0xa9, 0x26, 0xaf, 0x01, 0xff, 0x43, 0xf4, 0x0f, 0x7d, 0xec, 0x81, 0x16, 0x42, 0x42, 0x00, 0x74, 0xec, 0xc1, 0x00, 0x80, - 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x86, 0xec, 0x01, 0x48, 0x54, 0x58, 0x8f, - 0xec, 0x41, 0x49, 0x53, 0x58, 0x98, 0xec, 0x41, 0x43, 0xcf, 0x47, 0x7e, + 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x86, 0xec, 0x01, 0x48, 0x69, 0x58, 0x8f, + 0xec, 0x41, 0x49, 0x68, 0x58, 0x98, 0xec, 0x41, 0x43, 0xe4, 0x47, 0x7e, 0xec, 0x81, 0x16, 0x42, 0x32, 0x00, 0x75, 0xec, 0xc1, 0x00, 0x80, 0x01, - 0xff, 0x47, 0xe9, 0x0f, 0x87, 0xec, 0x01, 0x48, 0x54, 0x58, 0x90, 0xec, - 0x41, 0x49, 0x53, 0x58, 0x99, 0xec, 0x41, 0x80, 0x0b, 0xf9, 0x81, 0xec, - 0xc1, 0x00, 0x49, 0x53, 0x58, 0x9c, 0xec, 0x41, 0x47, 0xe9, 0x0f, 0x8a, - 0xec, 0x01, 0x48, 0x54, 0x58, 0x93, 0xec, 0x41, 0x43, 0xcd, 0x09, 0xb1, - 0xec, 0x01, 0xb4, 0x01, 0xff, 0x4b, 0x51, 0x58, 0xb3, 0xec, 0x01, 0x42, + 0xff, 0x47, 0xe9, 0x0f, 0x87, 0xec, 0x01, 0x48, 0x69, 0x58, 0x90, 0xec, + 0x41, 0x49, 0x68, 0x58, 0x99, 0xec, 0x41, 0x80, 0x0b, 0xf9, 0x81, 0xec, + 0xc1, 0x00, 0x49, 0x68, 0x58, 0x9c, 0xec, 0x41, 0x47, 0xe9, 0x0f, 0x8a, + 0xec, 0x01, 0x48, 0x69, 0x58, 0x93, 0xec, 0x41, 0x43, 0xcd, 0x09, 0xb1, + 0xec, 0x01, 0xb4, 0x01, 0xff, 0x4b, 0x66, 0x58, 0xb3, 0xec, 0x01, 0x42, 0x15, 0x02, 0xb2, 0xec, 0x41, 0x04, 0xcd, 0x09, 0x06, 0x4e, 0x24, 0x01, 0xaf, 0xec, 0x41, 0x44, 0x22, 0x00, 0xae, 0xec, 0x01, 0x47, 0x2a, 0x01, 0xad, 0xec, 0x41, 0x57, 0x45, 0x29, 0xf5, 0xfa, 0x41, 0x02, 0x19, 0x04, 0x1b, 0x02, 0x88, 0x00, 0x01, 0xff, 0x03, 0x85, 0x31, 0x06, 0x44, 0x31, 0x04, 0x06, 0x22, 0x40, 0x51, 0x87, 0x32, 0xda, 0xf5, 0x01, 0x44, 0x4e, - 0x03, 0xe1, 0x29, 0x40, 0x4c, 0x8c, 0x88, 0xe8, 0xf4, 0x01, 0x4e, 0x64, - 0x74, 0xdc, 0x29, 0x40, 0x46, 0x3e, 0x3e, 0xb7, 0x22, 0x80, 0xde, 0x01, - 0xf0, 0x7f, 0xf4, 0xc1, 0x00, 0x0e, 0x9e, 0x70, 0x01, 0xff, 0x07, 0xf1, - 0x04, 0x43, 0x07, 0xbf, 0x35, 0x06, 0x4c, 0x54, 0x8d, 0x57, 0x08, 0x41, + 0x03, 0xe1, 0x29, 0x40, 0x4c, 0x93, 0x88, 0xe8, 0xf4, 0x01, 0x4e, 0x79, + 0x74, 0xdc, 0x29, 0x40, 0x46, 0x53, 0x3e, 0xb7, 0x22, 0x80, 0xde, 0x01, + 0xf0, 0x7f, 0xf4, 0xc1, 0x00, 0x0e, 0xb3, 0x70, 0x01, 0xff, 0x07, 0xf1, + 0x04, 0x43, 0x07, 0xbf, 0x35, 0x06, 0x4c, 0x67, 0x8d, 0x57, 0x08, 0x41, 0x43, 0xcd, 0x09, 0x58, 0x08, 0x81, 0x23, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x5b, 0x08, 0x81, 0x13, 0x44, 0x25, 0x01, 0x5a, 0x08, 0x01, 0xb7, 0x01, 0xff, 0x44, 0x98, 0x1b, 0x5c, 0x08, 0x01, 0xef, 0x59, 0x08, 0x41, - 0x49, 0x53, 0x58, 0x5f, 0x08, 0x41, 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, - 0x5d, 0x08, 0x01, 0x48, 0x54, 0x58, 0x5e, 0x08, 0x41, 0xa1, 0x7f, 0x44, - 0x46, 0xe4, 0x41, 0x08, 0x01, 0x46, 0x8d, 0x44, 0x43, 0x08, 0x01, 0x45, - 0x4b, 0xa2, 0x42, 0x08, 0x01, 0x42, 0xb0, 0x01, 0x44, 0x08, 0x81, 0x60, - 0x44, 0xba, 0xe5, 0x4a, 0x08, 0x01, 0x46, 0x1f, 0xd3, 0x4b, 0x08, 0x01, + 0x49, 0x68, 0x58, 0x5f, 0x08, 0x41, 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, + 0x5d, 0x08, 0x01, 0x48, 0x69, 0x58, 0x5e, 0x08, 0x41, 0xa1, 0x7f, 0x44, + 0x62, 0xe4, 0x41, 0x08, 0x01, 0x46, 0xa2, 0x44, 0x43, 0x08, 0x01, 0x45, + 0x5e, 0xa2, 0x42, 0x08, 0x01, 0x42, 0xb0, 0x01, 0x44, 0x08, 0x81, 0x60, + 0x44, 0xd6, 0xe5, 0x4a, 0x08, 0x01, 0x46, 0x3b, 0xd3, 0x4b, 0x08, 0x01, 0x43, 0xb9, 0x04, 0x4c, 0x08, 0x01, 0x43, 0x40, 0x20, 0x4d, 0x08, 0x01, - 0x42, 0x6f, 0x02, 0x50, 0x08, 0x01, 0x44, 0x71, 0xbe, 0x52, 0x08, 0x01, - 0x44, 0x29, 0x60, 0x53, 0x08, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, 0x08, - 0x83, 0x45, 0x08, 0x01, 0x44, 0xf9, 0x4c, 0x49, 0x08, 0x01, 0x45, 0xf3, - 0x4c, 0x46, 0x08, 0x41, 0x42, 0xaf, 0x3f, 0x55, 0x08, 0x01, 0x43, 0x25, + 0x42, 0x6f, 0x02, 0x50, 0x08, 0x01, 0x44, 0x8d, 0xbe, 0x52, 0x08, 0x01, + 0x44, 0x3e, 0x60, 0x53, 0x08, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, 0x0f, + 0x83, 0x45, 0x08, 0x01, 0x44, 0x0e, 0x4d, 0x49, 0x08, 0x01, 0x45, 0x08, + 0x4d, 0x46, 0x08, 0x41, 0x42, 0xc4, 0x3f, 0x55, 0x08, 0x01, 0x43, 0x25, 0x23, 0x48, 0x08, 0x41, 0xa1, 0x06, 0x43, 0x99, 0x14, 0x54, 0x08, 0x41, - 0x43, 0xd7, 0xdf, 0x51, 0x08, 0x01, 0x44, 0x96, 0xd9, 0x4e, 0x08, 0x41, - 0x42, 0x53, 0x00, 0x47, 0x08, 0x41, 0x44, 0x99, 0x38, 0x40, 0x08, 0x01, + 0x43, 0xf3, 0xdf, 0x51, 0x08, 0x01, 0x44, 0xb2, 0xd9, 0x4e, 0x08, 0x41, + 0x42, 0x53, 0x00, 0x47, 0x08, 0x41, 0x44, 0xae, 0x38, 0x40, 0x08, 0x01, 0x43, 0x4b, 0x18, 0x4f, 0x08, 0x41, 0x5a, 0x5e, 0x1c, 0x53, 0x22, 0x40, - 0x03, 0x9f, 0x01, 0xd2, 0x06, 0x09, 0xe7, 0x1d, 0x01, 0xff, 0x0b, 0x6a, - 0x55, 0xda, 0x05, 0xa3, 0xcb, 0x05, 0x02, 0x04, 0x00, 0xdf, 0x04, 0x52, - 0xa7, 0x4b, 0x2d, 0x30, 0x00, 0x49, 0xa0, 0x14, 0x02, 0x30, 0x00, 0x4f, - 0x1d, 0x67, 0x3f, 0x30, 0x00, 0x4e, 0xf0, 0x1d, 0x05, 0x30, 0x00, 0x4f, - 0xd0, 0x68, 0x2a, 0x30, 0x00, 0x4b, 0x1c, 0x98, 0x07, 0x30, 0x00, 0x50, - 0x69, 0x60, 0x2b, 0x30, 0x00, 0x45, 0x4d, 0x47, 0x00, 0x30, 0x00, 0xb4, - 0x06, 0x53, 0xf4, 0x48, 0x3e, 0x30, 0x40, 0x0a, 0x35, 0x9f, 0xff, 0x03, - 0x09, 0x0f, 0xaf, 0x01, 0xff, 0x5a, 0x66, 0x1e, 0x37, 0x30, 0x00, 0x0b, - 0x0b, 0x1f, 0x01, 0xff, 0xa1, 0xe0, 0x03, 0xa4, 0xf3, 0x01, 0x48, 0x65, - 0xbc, 0xc1, 0x32, 0x00, 0x05, 0xe7, 0xc9, 0x37, 0xaa, 0x20, 0x02, 0x6c, - 0x00, 0x12, 0x48, 0x0d, 0xbf, 0xca, 0x32, 0x00, 0x47, 0x6a, 0xc9, 0xc9, - 0x32, 0x00, 0x49, 0x99, 0xb5, 0xc8, 0x32, 0x40, 0x43, 0x47, 0x3c, 0xc2, - 0x32, 0x00, 0xf9, 0xc4, 0x32, 0x40, 0x46, 0x7d, 0xcf, 0xc0, 0x32, 0x00, + 0x03, 0x9f, 0x01, 0xfa, 0x06, 0x09, 0xe7, 0x1d, 0x01, 0xff, 0x0b, 0x7f, + 0x55, 0x82, 0x06, 0xa3, 0xf3, 0x05, 0x02, 0x04, 0x00, 0xdf, 0x04, 0x52, + 0xbc, 0x4b, 0x2d, 0x30, 0x00, 0x49, 0xa0, 0x14, 0x02, 0x30, 0x00, 0x4f, + 0x32, 0x67, 0x3f, 0x30, 0x00, 0x4e, 0xf0, 0x1d, 0x05, 0x30, 0x00, 0x4f, + 0xe5, 0x68, 0x2a, 0x30, 0x00, 0x4b, 0x2f, 0x98, 0x07, 0x30, 0x00, 0x50, + 0x7e, 0x60, 0x2b, 0x30, 0x00, 0x45, 0x62, 0x47, 0x00, 0x30, 0x00, 0xb4, + 0x06, 0x53, 0x09, 0x49, 0x3e, 0x30, 0x40, 0x0a, 0x48, 0x9f, 0xff, 0x03, + 0x09, 0x2b, 0xaf, 0x01, 0xff, 0x5a, 0x66, 0x1e, 0x37, 0x30, 0x00, 0x0b, + 0x0b, 0x1f, 0x01, 0xff, 0xa1, 0xe0, 0x03, 0xa4, 0xf3, 0x01, 0x48, 0x81, + 0xbc, 0xc1, 0x32, 0x00, 0x05, 0x03, 0xca, 0x37, 0xaa, 0x20, 0x02, 0x6c, + 0x00, 0x12, 0x48, 0x29, 0xbf, 0xca, 0x32, 0x00, 0x47, 0x86, 0xc9, 0xc9, + 0x32, 0x00, 0x49, 0xb5, 0xb5, 0xc8, 0x32, 0x40, 0x43, 0x5c, 0x3c, 0xc2, + 0x32, 0x00, 0xf9, 0xc4, 0x32, 0x40, 0x46, 0x99, 0xcf, 0xc0, 0x32, 0x00, 0xb5, 0x01, 0xff, 0x42, 0xd2, 0x06, 0xc6, 0x32, 0x00, 0x42, 0xd2, 0x04, 0xc5, 0x32, 0x40, 0xa5, 0x9c, 0x01, 0xa6, 0x7f, 0x44, 0xb8, 0x27, 0x61, 0x33, 0x80, 0x72, 0x43, 0xcd, 0x09, 0x59, 0x33, 0x00, 0xb3, 0x50, 0xb4, @@ -10437,15 +10438,15 @@ static const unsigned char uname2c_tree[210697] = { 0x43, 0xb9, 0x28, 0x64, 0x33, 0x00, 0x43, 0x99, 0x1b, 0x6c, 0x33, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x44, 0xfa, 0x05, 0x70, 0x33, 0x00, 0x43, 0xcd, 0x09, 0x6d, 0x33, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x6f, 0x33, - 0x00, 0x42, 0x15, 0x02, 0x6e, 0x33, 0x40, 0x46, 0xee, 0x54, 0x65, 0x33, + 0x00, 0x42, 0x15, 0x02, 0x6e, 0x33, 0x40, 0x46, 0x03, 0x55, 0x65, 0x33, 0x00, 0x43, 0x26, 0x01, 0x5b, 0x33, 0x40, 0x44, 0x96, 0x1b, 0x5f, 0x33, 0x80, 0x0d, 0x42, 0x30, 0x27, 0x5e, 0x33, 0xc0, 0x00, 0x44, 0x29, 0x16, 0x68, 0x33, 0x40, 0x44, 0x29, 0x16, 0x69, 0x33, 0x40, 0x44, 0x29, 0x16, 0x6b, 0x33, 0x40, 0xa9, 0x0d, 0x43, 0xfb, 0x05, 0x5c, 0x33, 0xc0, 0x00, 0x44, 0x29, 0x16, 0x66, 0x33, 0x40, 0x45, 0x28, 0x16, 0x67, 0x33, 0x00, 0x42, 0x32, 0x00, 0x5d, 0x33, 0x40, 0x44, 0xc9, 0x00, 0x60, 0x33, 0x80, - 0x06, 0x45, 0xdf, 0x68, 0x63, 0x33, 0x40, 0x43, 0xca, 0x08, 0x6a, 0x33, - 0x40, 0x03, 0x9d, 0x1d, 0x06, 0x47, 0x8b, 0xc6, 0xcb, 0x32, 0x40, 0xa5, + 0x06, 0x45, 0xf4, 0x68, 0x63, 0x33, 0x40, 0x43, 0xca, 0x08, 0x6a, 0x33, + 0x40, 0x03, 0x9d, 0x1d, 0x06, 0x47, 0xa7, 0xc6, 0xcb, 0x32, 0x40, 0xa5, 0xca, 0x01, 0xa6, 0xac, 0x01, 0x44, 0xb8, 0x27, 0xe8, 0x33, 0x80, 0x9e, 0x01, 0x43, 0xcd, 0x09, 0xe0, 0x33, 0x00, 0xb3, 0x7c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xe9, 0x33, 0x00, 0xa8, 0x56, 0xb7, 0x01, 0xff, 0xa5, @@ -10457,7941 +10458,7944 @@ static const unsigned char uname2c_tree[210697] = { 0x1b, 0xfa, 0x33, 0x00, 0x42, 0x30, 0x27, 0xf9, 0x33, 0x40, 0x43, 0xd7, 0x04, 0xf8, 0x33, 0x00, 0x43, 0xfb, 0x05, 0xf7, 0x33, 0x40, 0x03, 0xf3, 0x0f, 0x06, 0x43, 0x26, 0x01, 0xe2, 0x33, 0x40, 0x43, 0xca, 0x08, 0xec, - 0x33, 0x00, 0xf9, 0xfd, 0x33, 0xc0, 0x00, 0x44, 0xcd, 0xb3, 0xfe, 0x33, + 0x33, 0x00, 0xf9, 0xfd, 0x33, 0xc0, 0x00, 0x44, 0xe9, 0xb3, 0xfe, 0x33, 0x40, 0x44, 0x96, 0x1b, 0xe6, 0x33, 0x80, 0x0d, 0x42, 0x30, 0x27, 0xe5, 0x33, 0xc0, 0x00, 0x44, 0x29, 0x16, 0xef, 0x33, 0x40, 0x44, 0x29, 0x16, 0xf0, 0x33, 0x40, 0x44, 0x29, 0x16, 0xf2, 0x33, 0x40, 0xa9, 0x0d, 0x43, 0xfb, 0x05, 0xe3, 0x33, 0xc0, 0x00, 0x44, 0x29, 0x16, 0xed, 0x33, 0x40, 0x45, 0x28, 0x16, 0xee, 0x33, 0x00, 0x42, 0x32, 0x00, 0xe4, 0x33, 0x40, - 0x44, 0xc9, 0x00, 0xe7, 0x33, 0x80, 0x06, 0x45, 0xdf, 0x68, 0xea, 0x33, - 0x40, 0x43, 0xca, 0x08, 0xf1, 0x33, 0x40, 0x44, 0x0a, 0xe7, 0xc3, 0x32, - 0x00, 0x45, 0xde, 0xe0, 0xc7, 0x32, 0x40, 0xa6, 0x15, 0x43, 0xcd, 0x09, + 0x44, 0xc9, 0x00, 0xe7, 0x33, 0x80, 0x06, 0x45, 0xf4, 0x68, 0xea, 0x33, + 0x40, 0x43, 0xca, 0x08, 0xf1, 0x33, 0x40, 0x44, 0x26, 0xe7, 0xc3, 0x32, + 0x00, 0x45, 0xfa, 0xe0, 0xc7, 0x32, 0x40, 0xa6, 0x15, 0x43, 0xcd, 0x09, 0x72, 0xd3, 0x01, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x74, 0xd3, 0x01, 0x42, 0x15, 0x02, 0x73, 0xd3, 0x41, 0x43, 0xd7, 0x04, 0x76, 0xd3, 0x01, 0x43, 0xfb, 0x05, 0x75, 0xd3, 0x41, 0x51, 0xd5, 0x29, 0x2c, 0x30, 0x00, - 0x14, 0x80, 0x40, 0x01, 0xff, 0x09, 0x7e, 0xac, 0x4c, 0x4d, 0x20, 0x7c, - 0xf4, 0x2f, 0x00, 0x08, 0x84, 0x02, 0x36, 0x48, 0x93, 0x0c, 0xfb, 0x2f, - 0x00, 0x0e, 0xd0, 0x75, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xf5, 0x2f, 0x00, - 0x45, 0x25, 0x06, 0xf6, 0x2f, 0x00, 0xac, 0x11, 0x06, 0x6d, 0x02, 0x01, - 0xff, 0x44, 0xc3, 0x00, 0xf8, 0x2f, 0x00, 0x45, 0xc8, 0x00, 0xf9, 0x2f, - 0x40, 0x43, 0xc4, 0x00, 0xf7, 0x2f, 0x00, 0x49, 0xe1, 0x09, 0xfa, 0x2f, - 0x40, 0x50, 0xd9, 0x5e, 0xf2, 0x2f, 0x00, 0x45, 0xc8, 0x00, 0xf0, 0x2f, - 0x40, 0x45, 0x25, 0x06, 0xf1, 0x2f, 0x00, 0x50, 0xc9, 0x5e, 0xf3, 0x2f, - 0x40, 0x4b, 0xbc, 0x96, 0x06, 0x30, 0x00, 0x44, 0x19, 0x04, 0x01, 0x30, - 0x40, 0x4b, 0xaa, 0x91, 0x98, 0x31, 0x00, 0x4a, 0x01, 0xa1, 0x9e, 0x31, - 0x00, 0xa6, 0x49, 0x4b, 0xac, 0x94, 0x9d, 0x31, 0x00, 0x4c, 0xb8, 0x89, - 0x90, 0x31, 0x00, 0xad, 0x2f, 0x48, 0xde, 0x29, 0x92, 0x31, 0x00, 0x4c, - 0xac, 0x8c, 0x91, 0x31, 0x00, 0x4b, 0x42, 0x9a, 0x9a, 0x31, 0x00, 0xb4, - 0x01, 0xff, 0xa8, 0x0c, 0x47, 0xb7, 0xc9, 0x96, 0x31, 0x00, 0x47, 0x53, - 0xcd, 0x93, 0x31, 0x40, 0x48, 0x4d, 0xbd, 0x9b, 0x31, 0x00, 0x48, 0x6d, - 0xc0, 0x94, 0x31, 0x40, 0x47, 0xa1, 0xc4, 0x9f, 0x31, 0x00, 0x4a, 0xeb, - 0xa2, 0x97, 0x31, 0x40, 0x49, 0x58, 0xb1, 0x99, 0x31, 0x00, 0x03, 0xfb, - 0x05, 0x01, 0xff, 0x45, 0xb8, 0x00, 0x95, 0x31, 0x00, 0x47, 0x1b, 0x35, - 0x9c, 0x31, 0x40, 0x04, 0x37, 0x00, 0x06, 0x4d, 0xc5, 0x7b, 0xaa, 0xfa, - 0x41, 0x42, 0x1e, 0x00, 0x61, 0x22, 0x80, 0x06, 0x4e, 0x4b, 0x37, 0x67, - 0x2a, 0x40, 0x55, 0x50, 0x34, 0xe5, 0x29, 0x40, 0xa3, 0x0c, 0x55, 0x83, - 0x37, 0xd2, 0xf3, 0x01, 0x45, 0x25, 0xe0, 0xf8, 0x26, 0x40, 0x44, 0x9a, - 0x5b, 0x68, 0xf3, 0x01, 0x43, 0xf7, 0x3b, 0xca, 0xf9, 0x41, 0xa1, 0x93, - 0x25, 0xa5, 0xa1, 0x07, 0xa9, 0x8e, 0x03, 0xaf, 0x5c, 0x4b, 0x37, 0x9a, - 0xb4, 0x20, 0x00, 0xb5, 0x3e, 0xb9, 0x01, 0xff, 0x46, 0x2f, 0xcf, 0xbb, - 0xfa, 0x01, 0x44, 0xfe, 0xe4, 0xda, 0x2b, 0x00, 0xb0, 0x06, 0x4f, 0x9f, - 0x6c, 0x8e, 0x23, 0x40, 0x43, 0xb0, 0x01, 0x10, 0x20, 0x80, 0x06, 0x49, - 0x7d, 0xb3, 0x12, 0x2e, 0x40, 0x80, 0x0c, 0x46, 0x4a, 0x88, 0x2d, 0x00, - 0x00, 0x4b, 0x5d, 0x91, 0x27, 0x20, 0x40, 0x46, 0x64, 0x1f, 0x43, 0x20, - 0x00, 0x4e, 0xa9, 0x63, 0x1a, 0x2e, 0x40, 0x4a, 0x2d, 0xa2, 0x17, 0xf9, - 0x01, 0x53, 0xe9, 0x45, 0xaf, 0xf4, 0x01, 0x49, 0x9b, 0x8b, 0x2f, 0xf6, - 0x01, 0xf4, 0xd6, 0xf6, 0x41, 0x43, 0x4d, 0x27, 0x2a, 0xf5, 0x01, 0xac, - 0x96, 0x02, 0x48, 0x30, 0x73, 0x3b, 0x22, 0x00, 0x03, 0x9e, 0x25, 0xff, - 0x01, 0x42, 0x5a, 0x04, 0x9d, 0xfa, 0x01, 0xb2, 0x53, 0x46, 0x6b, 0xd5, - 0xe5, 0xf3, 0x01, 0xb4, 0x2b, 0xb5, 0x01, 0xff, 0x46, 0xc1, 0xcc, 0x1b, - 0x23, 0x80, 0x1b, 0x42, 0xc7, 0x02, 0x02, 0x23, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x48, 0x5e, 0x39, 0xe0, 0xf3, 0x81, 0x06, 0x4b, 0xb5, 0x9c, 0xe1, - 0xf3, 0x41, 0xf3, 0xd8, 0xf3, 0x41, 0x52, 0x3f, 0x4a, 0xf3, 0x23, 0x40, - 0x80, 0x06, 0x42, 0xd8, 0x00, 0xe8, 0xf3, 0x41, 0x48, 0x55, 0xba, 0x15, - 0x26, 0x00, 0x43, 0x8e, 0xd0, 0x2d, 0xf3, 0x01, 0x46, 0x93, 0xd4, 0x36, - 0xf3, 0x01, 0x47, 0xbd, 0xcb, 0x68, 0x26, 0x40, 0x08, 0x0e, 0x00, 0x16, - 0x42, 0xc7, 0x02, 0x0e, 0xf4, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x44, 0xed, - 0x06, 0x34, 0xf4, 0x01, 0x46, 0xcf, 0xd4, 0xc7, 0xf3, 0x41, 0xa2, 0x71, - 0x48, 0xcf, 0x26, 0x26, 0x20, 0x00, 0x4e, 0xce, 0x72, 0xaf, 0x23, 0x00, - 0x55, 0x55, 0x38, 0xa9, 0x26, 0x00, 0x11, 0xeb, 0x56, 0x3d, 0x0a, 0xff, - 0xa7, 0x29, 0xb4, 0x01, 0xff, 0x02, 0x5c, 0x00, 0x06, 0x4c, 0x64, 0x8c, - 0xa5, 0xf6, 0x41, 0x44, 0x9d, 0x40, 0x7e, 0x2b, 0x00, 0x47, 0xa6, 0x37, - 0x09, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x43, 0xf6, 0x10, 0x88, 0x00, - 0x00, 0x52, 0xed, 0x50, 0x89, 0x00, 0x40, 0xd1, 0xba, 0x23, 0x00, 0xd3, - 0xbb, 0x23, 0x00, 0xd7, 0xbc, 0x23, 0x00, 0xd9, 0xbd, 0x23, 0x40, 0x44, - 0x46, 0xe2, 0x81, 0xfb, 0x01, 0xd2, 0x76, 0xfb, 0x01, 0xd3, 0x77, 0xfb, - 0x01, 0xd4, 0x78, 0xfb, 0x01, 0xd5, 0x79, 0xfb, 0x01, 0xd6, 0x7a, 0xfb, - 0x01, 0xd7, 0x7b, 0xfb, 0x41, 0x42, 0x17, 0x00, 0x15, 0x20, 0x00, 0x05, - 0x1d, 0x07, 0x01, 0xff, 0x47, 0x5d, 0xc7, 0x23, 0x2b, 0x00, 0x47, 0x63, - 0xc9, 0xc3, 0x2b, 0x40, 0x44, 0xa4, 0x4a, 0x6f, 0xf3, 0x01, 0x43, 0x83, - 0xad, 0x1d, 0xf4, 0x41, 0xe5, 0x73, 0xf5, 0x01, 0x59, 0x15, 0x22, 0x68, - 0xf6, 0xc1, 0x00, 0x50, 0xb6, 0x0f, 0x69, 0xf6, 0x41, 0x46, 0xe3, 0xcf, - 0x3a, 0xf3, 0x01, 0x02, 0x40, 0x00, 0xe1, 0x03, 0x49, 0xb2, 0xb1, 0x7e, - 0xf9, 0x01, 0x4a, 0x9d, 0xa5, 0xd5, 0xf6, 0x01, 0x4a, 0xf1, 0xa6, 0x9b, - 0xf9, 0x01, 0x07, 0xa2, 0x10, 0x06, 0x4b, 0xbb, 0x9a, 0xec, 0x26, 0x40, - 0x4c, 0x7c, 0x86, 0x9f, 0x30, 0x00, 0x4e, 0xf0, 0x1d, 0x9d, 0x30, 0x00, - 0x07, 0xf1, 0x04, 0x06, 0x55, 0x62, 0x3a, 0x9e, 0x30, 0x40, 0xe1, 0x42, - 0x30, 0x80, 0x98, 0x03, 0xa2, 0x81, 0x03, 0xa4, 0xea, 0x02, 0xe5, 0x48, - 0x30, 0x00, 0xa7, 0xcf, 0x02, 0xa8, 0xb8, 0x02, 0xe9, 0x44, 0x30, 0x00, - 0xab, 0x9d, 0x02, 0xad, 0x86, 0x02, 0xee, 0x93, 0x30, 0x80, 0xec, 0x01, - 0xef, 0x4a, 0x30, 0x00, 0xb0, 0xd1, 0x01, 0xb2, 0xba, 0x01, 0xb3, 0x57, - 0xb4, 0x41, 0xf5, 0x46, 0x30, 0x00, 0x42, 0x3a, 0x5c, 0x94, 0x30, 0x00, - 0xb7, 0x25, 0xb9, 0x17, 0xba, 0x01, 0xff, 0xe1, 0x56, 0x30, 0x00, 0xe5, - 0x5c, 0x30, 0x00, 0xe9, 0x58, 0x30, 0x00, 0xef, 0x5e, 0x30, 0x00, 0xf5, - 0x5a, 0x30, 0x40, 0xe1, 0x84, 0x30, 0x00, 0xef, 0x88, 0x30, 0x00, 0xf5, - 0x86, 0x30, 0x40, 0xe1, 0x8f, 0x30, 0x00, 0xe5, 0x91, 0x30, 0x00, 0xe9, - 0x90, 0x30, 0x00, 0xef, 0x92, 0x30, 0x40, 0xe1, 0x5f, 0x30, 0x00, 0xe5, - 0x66, 0x30, 0x00, 0xe9, 0x61, 0x30, 0x00, 0xef, 0x68, 0x30, 0x00, 0xf5, - 0x64, 0x30, 0x40, 0xe1, 0x55, 0x30, 0x00, 0xe5, 0x5b, 0x30, 0x00, 0xe9, - 0x57, 0x30, 0x00, 0x05, 0x3d, 0x06, 0x08, 0xef, 0x5d, 0x30, 0x00, 0xf5, - 0x59, 0x30, 0x40, 0xe1, 0x41, 0x30, 0x00, 0xe5, 0x47, 0x30, 0x00, 0xe9, - 0x43, 0x30, 0x00, 0xab, 0x2f, 0xef, 0x49, 0x30, 0x00, 0x42, 0x5c, 0x01, - 0x63, 0x30, 0x00, 0xf5, 0x45, 0x30, 0x00, 0xb7, 0x0f, 0xb9, 0x01, 0xff, - 0xe1, 0x83, 0x30, 0x00, 0xef, 0x87, 0x30, 0x00, 0xf5, 0x85, 0x30, 0x40, - 0xe1, 0x8e, 0x30, 0x00, 0xe5, 0x51, 0xb1, 0x01, 0xe9, 0x50, 0xb1, 0x01, - 0xef, 0x52, 0xb1, 0x41, 0xe1, 0x95, 0x30, 0x00, 0xe5, 0x96, 0x30, 0x00, - 0xef, 0x32, 0xb1, 0x41, 0xe1, 0x89, 0x30, 0x00, 0xe5, 0x8c, 0x30, 0x00, - 0xe9, 0x8a, 0x30, 0x00, 0xef, 0x8d, 0x30, 0x00, 0xf5, 0x8b, 0x30, 0x40, - 0xe1, 0x71, 0x30, 0x00, 0xe5, 0x7a, 0x30, 0x00, 0xe9, 0x74, 0x30, 0x00, - 0xef, 0x7d, 0x30, 0x00, 0xf5, 0x77, 0x30, 0x40, 0xe1, 0x6a, 0x30, 0x00, - 0xe5, 0x6d, 0x30, 0x00, 0xe9, 0x6b, 0x30, 0x00, 0xef, 0x6e, 0x30, 0x00, - 0xf5, 0x6c, 0x30, 0x40, 0xe1, 0x7e, 0x30, 0x00, 0xe5, 0x81, 0x30, 0x00, - 0xe9, 0x7f, 0x30, 0x00, 0xef, 0x82, 0x30, 0x00, 0xf5, 0x80, 0x30, 0x40, - 0xe1, 0x4b, 0x30, 0x00, 0xe5, 0x51, 0x30, 0x00, 0xe9, 0x4d, 0x30, 0x00, - 0xef, 0x53, 0x30, 0x00, 0xf5, 0x4f, 0x30, 0x40, 0xe1, 0x6f, 0x30, 0x00, - 0xe5, 0x78, 0x30, 0x00, 0xe9, 0x72, 0x30, 0x00, 0xef, 0x7b, 0x30, 0x00, - 0xf5, 0x75, 0x30, 0x40, 0xe1, 0x4c, 0x30, 0x00, 0xe5, 0x52, 0x30, 0x00, - 0xe9, 0x4e, 0x30, 0x00, 0xef, 0x54, 0x30, 0x00, 0xf5, 0x50, 0x30, 0x40, - 0xe1, 0x60, 0x30, 0x00, 0xe5, 0x67, 0x30, 0x00, 0xe9, 0x62, 0x30, 0x00, - 0xef, 0x69, 0x30, 0x00, 0xf5, 0x65, 0x30, 0x40, 0xe1, 0x70, 0x30, 0x00, - 0xe5, 0x79, 0x30, 0x00, 0xe9, 0x73, 0x30, 0x00, 0xef, 0x7c, 0x30, 0x00, - 0xf5, 0x76, 0x30, 0x40, 0x07, 0xa4, 0x79, 0x01, 0xff, 0x42, 0x75, 0x06, - 0x1f, 0xb1, 0x01, 0x42, 0x4d, 0x00, 0x01, 0xb0, 0x41, 0x80, 0x16, 0x8d, - 0x01, 0xff, 0x4b, 0xb7, 0x94, 0x60, 0xf4, 0x01, 0x4b, 0x84, 0x9a, 0x84, - 0xf6, 0xc1, 0x00, 0x51, 0xbd, 0x51, 0x85, 0xf6, 0x41, 0x51, 0x22, 0x53, - 0x06, 0xf5, 0x01, 0x4c, 0xec, 0x8e, 0xa1, 0x26, 0x40, 0xa1, 0x83, 0x17, - 0x05, 0x21, 0xda, 0x8f, 0x0f, 0x46, 0x97, 0xd0, 0x94, 0xf9, 0x01, 0xac, - 0xeb, 0x0e, 0x10, 0x09, 0x5f, 0xf0, 0x03, 0xb2, 0xe3, 0x03, 0x0b, 0xcb, - 0x9c, 0x01, 0xff, 0xa1, 0xc9, 0x03, 0xa2, 0xb4, 0x03, 0x02, 0x18, 0x04, - 0x9a, 0x03, 0xa4, 0xe9, 0x02, 0x4a, 0x6f, 0xa1, 0xcf, 0x4d, 0x00, 0xa6, - 0xd4, 0x02, 0xa7, 0xa1, 0x02, 0x50, 0x49, 0x5d, 0xc7, 0x4d, 0x00, 0x02, - 0x9e, 0x01, 0xfb, 0x01, 0x4a, 0x7b, 0xa4, 0xfb, 0x4d, 0x00, 0x02, 0x08, - 0x07, 0xe4, 0x01, 0xaf, 0xca, 0x01, 0xb0, 0xb5, 0x01, 0x02, 0x88, 0x00, - 0x9c, 0x01, 0xb3, 0x7e, 0xb4, 0x14, 0xb7, 0x06, 0x4e, 0x00, 0x78, 0xc3, - 0x4d, 0x40, 0x46, 0x6f, 0x81, 0xc4, 0x4d, 0x00, 0x52, 0x77, 0x4e, 0xd1, - 0x4d, 0x40, 0x03, 0x84, 0x0a, 0x06, 0x47, 0x73, 0x10, 0xc9, 0x4d, 0x40, - 0xa1, 0x47, 0xa3, 0x33, 0x46, 0x57, 0xd1, 0xe4, 0x4d, 0x00, 0x4b, 0x3e, - 0x94, 0xf8, 0x4d, 0x00, 0x4b, 0xca, 0x95, 0xf9, 0x4d, 0x00, 0x56, 0x0c, - 0x31, 0xf3, 0x4d, 0x00, 0x4f, 0x57, 0x69, 0xf5, 0x4d, 0x00, 0x4f, 0x82, - 0x6b, 0xc1, 0x4d, 0x00, 0xb7, 0x01, 0xff, 0x47, 0xaf, 0xc4, 0xf7, 0x4d, - 0x00, 0x43, 0x41, 0x08, 0xef, 0x4d, 0x40, 0x47, 0x18, 0xc5, 0xf1, 0x4d, - 0x00, 0x4c, 0xac, 0x89, 0xdd, 0x4d, 0x00, 0x4e, 0xb8, 0x74, 0xc0, 0x4d, - 0x40, 0x4c, 0x98, 0x85, 0xdc, 0x4d, 0x00, 0xb2, 0x01, 0xff, 0x42, 0xfb, - 0x52, 0xc6, 0x4d, 0x00, 0x4e, 0x02, 0x74, 0xf2, 0x4d, 0x40, 0x05, 0x3d, - 0x06, 0x0c, 0x4e, 0x72, 0x74, 0xd6, 0x4d, 0x00, 0x49, 0x17, 0xb6, 0xcb, - 0x4d, 0x40, 0x4d, 0x30, 0x80, 0xfd, 0x4d, 0x00, 0x46, 0xc5, 0xd5, 0xc8, - 0x4d, 0x40, 0xb4, 0x06, 0x48, 0x3d, 0xc2, 0xf0, 0x4d, 0x40, 0x44, 0x88, - 0x00, 0xe0, 0x4d, 0x00, 0x43, 0x5d, 0x01, 0xd7, 0x4d, 0x40, 0x44, 0x64, - 0x9c, 0xca, 0x4d, 0x00, 0x47, 0x23, 0xcb, 0xe2, 0x4d, 0x00, 0x4d, 0x5f, - 0x82, 0xed, 0x4d, 0x40, 0x4a, 0xdf, 0x9f, 0xe6, 0x4d, 0x00, 0x02, 0x6e, - 0x02, 0x01, 0xff, 0x47, 0x2c, 0x15, 0xe5, 0x4d, 0x00, 0x47, 0x52, 0x57, - 0xee, 0x4d, 0x40, 0x45, 0xda, 0xda, 0xce, 0x4d, 0x00, 0x4b, 0x26, 0x9c, - 0xda, 0x4d, 0x40, 0x46, 0x73, 0xd0, 0xe9, 0x4d, 0x00, 0x47, 0x02, 0xc7, - 0xde, 0x4d, 0x00, 0xae, 0x01, 0xff, 0x48, 0xfd, 0xbb, 0xfc, 0x4d, 0x00, - 0x46, 0x1b, 0xd4, 0xd8, 0x4d, 0x40, 0x51, 0xbc, 0x52, 0xec, 0x4d, 0x00, - 0xb2, 0x01, 0xff, 0x43, 0xee, 0x06, 0xd5, 0x4d, 0x00, 0x04, 0x0e, 0x3f, - 0x01, 0xff, 0xb0, 0x06, 0x46, 0xc5, 0xd5, 0xd9, 0x4d, 0x40, 0xaf, 0x06, - 0x4c, 0x31, 0x80, 0xdb, 0x4d, 0x40, 0x48, 0x14, 0x4d, 0xcd, 0x4d, 0x00, - 0x43, 0x15, 0x01, 0xe1, 0x4d, 0x40, 0x49, 0x18, 0xaf, 0xcc, 0x4d, 0x00, - 0x48, 0x4d, 0xbf, 0xd0, 0x4d, 0x40, 0x55, 0x37, 0x35, 0xe3, 0x4d, 0x00, - 0xa5, 0x14, 0xa9, 0x06, 0x47, 0xb2, 0xcc, 0xdf, 0x4d, 0x40, 0x59, 0x98, - 0x21, 0xc2, 0x4d, 0x00, 0x48, 0x1d, 0xc1, 0xfa, 0x4d, 0x40, 0x46, 0x73, - 0xd0, 0xe8, 0x4d, 0x00, 0x49, 0x30, 0xb2, 0xe7, 0x4d, 0x00, 0x49, 0x2e, - 0xb7, 0xf4, 0x4d, 0x40, 0x4c, 0x78, 0x8a, 0xeb, 0x4d, 0x00, 0xae, 0x01, - 0xff, 0x45, 0xb1, 0xdb, 0xc5, 0x4d, 0x00, 0x4a, 0xe5, 0xa8, 0xd3, 0x4d, - 0x40, 0x50, 0x69, 0x5c, 0xff, 0x4d, 0x00, 0x4d, 0x72, 0x7d, 0xd4, 0x4d, - 0x00, 0x4b, 0x92, 0x99, 0xea, 0x4d, 0x40, 0x48, 0xad, 0xba, 0xf6, 0x4d, - 0x00, 0x4f, 0xc3, 0x66, 0xfe, 0x4d, 0x00, 0x47, 0x82, 0xca, 0xd2, 0x4d, - 0x40, 0xe2, 0x3f, 0xf3, 0x01, 0x57, 0xf7, 0x2b, 0xb9, 0x22, 0x40, 0x02, - 0x61, 0x17, 0xdf, 0x0a, 0x02, 0x08, 0x02, 0xc2, 0x0a, 0xa8, 0x99, 0x09, - 0x02, 0x09, 0x33, 0x84, 0x09, 0xab, 0xd3, 0x07, 0xad, 0xcd, 0x06, 0xae, - 0xa4, 0x05, 0x02, 0x09, 0x2e, 0x93, 0x05, 0xb2, 0x8f, 0x04, 0xb3, 0xef, - 0x02, 0xb4, 0xd2, 0x01, 0x02, 0x7d, 0x35, 0xb9, 0x01, 0xb7, 0x52, 0xb9, - 0x01, 0xff, 0x02, 0x61, 0x17, 0x31, 0x02, 0x09, 0x2e, 0x15, 0x02, 0x7d, - 0x35, 0x01, 0xff, 0xd1, 0xe3, 0xb0, 0x01, 0xd2, 0xe4, 0xb0, 0x01, 0xd3, - 0xe5, 0xb0, 0x01, 0xd4, 0xe6, 0xb0, 0x41, 0xd1, 0xe7, 0xb0, 0x01, 0xd2, - 0xe8, 0xb0, 0x01, 0xd3, 0xe9, 0xb0, 0x01, 0xd4, 0xea, 0xb0, 0x01, 0xd5, - 0xeb, 0xb0, 0x01, 0xd6, 0xec, 0xb0, 0x41, 0xd1, 0xdd, 0xb0, 0x01, 0xd2, - 0xde, 0xb0, 0x01, 0xd3, 0xdf, 0xb0, 0x01, 0xd4, 0xe0, 0xb0, 0x01, 0xd5, - 0xe1, 0xb0, 0x01, 0x42, 0x39, 0x42, 0xe2, 0xb0, 0x41, 0x02, 0x61, 0x17, - 0x4d, 0x02, 0x08, 0x02, 0x39, 0x02, 0x09, 0x33, 0x21, 0x02, 0x09, 0x2e, - 0x01, 0xff, 0xd1, 0x16, 0xb1, 0x01, 0xd2, 0x17, 0xb1, 0x01, 0xd3, 0x18, - 0xb1, 0x01, 0xd4, 0x19, 0xb1, 0x01, 0xd5, 0x1a, 0xb1, 0x01, 0xd6, 0x1b, - 0xb1, 0x01, 0xd7, 0x1c, 0xb1, 0x41, 0xd1, 0x0d, 0xb1, 0x01, 0xd2, 0x0e, - 0xb1, 0x01, 0xd3, 0x0f, 0xb1, 0x01, 0xd4, 0x10, 0xb1, 0x01, 0xd5, 0x11, - 0xb1, 0x41, 0xd1, 0x12, 0xb1, 0x01, 0xd2, 0x13, 0xb1, 0x01, 0xd3, 0x14, - 0xb1, 0x01, 0xd4, 0x15, 0xb1, 0x41, 0xd1, 0x08, 0xb1, 0x01, 0xd2, 0x09, - 0xb1, 0x01, 0xd3, 0x0a, 0xb1, 0x01, 0xd4, 0x0b, 0xb1, 0x01, 0xd5, 0x0c, - 0xb1, 0x41, 0xd1, 0x0a, 0xb0, 0x01, 0xd2, 0x0b, 0xb0, 0x01, 0xd3, 0x0c, - 0xb0, 0x01, 0xd4, 0x0d, 0xb0, 0x01, 0xd5, 0x0e, 0xb0, 0x41, 0x02, 0x61, - 0x17, 0x85, 0x01, 0x02, 0x08, 0x02, 0x5d, 0x02, 0x09, 0x33, 0x3d, 0x02, - 0x09, 0x2e, 0x1b, 0x02, 0x7d, 0x35, 0x01, 0xff, 0xd1, 0x69, 0xb0, 0x01, - 0xd2, 0x6a, 0xb0, 0x01, 0xd3, 0x6b, 0xb0, 0x01, 0xd4, 0x6c, 0xb0, 0x01, - 0x42, 0x1e, 0x00, 0x6d, 0xb0, 0x41, 0xd1, 0x77, 0xb0, 0x01, 0xd2, 0x78, - 0xb0, 0x01, 0xd3, 0x79, 0xb0, 0x01, 0xd4, 0x7a, 0xb0, 0x01, 0xd5, 0x7b, - 0xb0, 0x01, 0xd6, 0x7c, 0xb0, 0x01, 0x42, 0x71, 0x00, 0x7d, 0xb0, 0x41, - 0xd1, 0x62, 0xb0, 0x01, 0xd2, 0x63, 0xb0, 0x01, 0xd3, 0x64, 0xb0, 0x01, - 0xd4, 0x65, 0xb0, 0x01, 0xd5, 0x66, 0xb0, 0x01, 0xd6, 0x67, 0xb0, 0x01, - 0xd7, 0x68, 0xb0, 0x41, 0xd1, 0x6e, 0xb0, 0x01, 0xd2, 0x6f, 0xb0, 0x01, - 0xd3, 0x70, 0xb0, 0x01, 0xd4, 0x71, 0xb0, 0x01, 0xd5, 0x72, 0xb0, 0x01, - 0xd6, 0x73, 0xb0, 0x01, 0xd7, 0x74, 0xb0, 0x01, 0xd8, 0x75, 0xb0, 0x01, - 0xd9, 0x76, 0xb0, 0x41, 0xd1, 0x5e, 0xb0, 0x01, 0xd2, 0x5f, 0xb0, 0x01, - 0xd3, 0x60, 0xb0, 0x01, 0xd4, 0x61, 0xb0, 0x41, 0x02, 0x61, 0x17, 0x79, - 0x02, 0x08, 0x02, 0x61, 0x02, 0x09, 0x33, 0x45, 0x02, 0x09, 0x2e, 0x25, - 0x02, 0x7d, 0x35, 0x01, 0xff, 0xd1, 0x4a, 0xb0, 0x01, 0xd2, 0x4b, 0xb0, - 0x01, 0xd3, 0x4c, 0xb0, 0x01, 0xd4, 0x4d, 0xb0, 0x01, 0xd5, 0x4e, 0xb0, - 0x01, 0xd6, 0x4f, 0xb0, 0x01, 0xd7, 0x50, 0xb0, 0x01, 0xd8, 0x51, 0xb0, - 0x41, 0xd1, 0x57, 0xb0, 0x01, 0xd2, 0x58, 0xb0, 0x01, 0xd3, 0x59, 0xb0, - 0x01, 0xd4, 0x5a, 0xb0, 0x01, 0xd5, 0x5b, 0xb0, 0x01, 0xd6, 0x5c, 0xb0, - 0x01, 0xd7, 0x5d, 0xb0, 0x41, 0xd1, 0x44, 0xb0, 0x01, 0xd2, 0x45, 0xb0, - 0x01, 0xd3, 0x46, 0xb0, 0x01, 0xd4, 0x47, 0xb0, 0x01, 0xd5, 0x48, 0xb0, - 0x01, 0xd6, 0x49, 0xb0, 0x41, 0xd1, 0x52, 0xb0, 0x01, 0xd2, 0x53, 0xb0, - 0x01, 0xd3, 0x54, 0xb0, 0x01, 0xd4, 0x55, 0xb0, 0x01, 0xd5, 0x56, 0xb0, - 0x41, 0xd1, 0x3c, 0xb0, 0x01, 0xd2, 0x3d, 0xb0, 0x01, 0xd3, 0x3e, 0xb0, - 0x01, 0xd4, 0x3f, 0xb0, 0x01, 0xd5, 0x40, 0xb0, 0x01, 0xd6, 0x41, 0xb0, - 0x01, 0xd7, 0x42, 0xb0, 0x01, 0xd8, 0x43, 0xb0, 0x41, 0x02, 0x61, 0x17, - 0x6d, 0x02, 0x08, 0x02, 0x59, 0x02, 0x09, 0x33, 0x39, 0x02, 0x09, 0x2e, - 0x1d, 0x02, 0x7d, 0x35, 0x01, 0xff, 0xd1, 0xf8, 0xb0, 0x01, 0xd2, 0xf9, - 0xb0, 0x01, 0xd3, 0xfa, 0xb0, 0x01, 0xd4, 0xfb, 0xb0, 0x01, 0xd5, 0xfc, - 0xb0, 0x01, 0xd6, 0xfd, 0xb0, 0x41, 0xd1, 0x02, 0xb1, 0x01, 0xd2, 0x03, - 0xb1, 0x01, 0xd3, 0x04, 0xb1, 0x01, 0xd4, 0x05, 0xb1, 0x01, 0xd5, 0x06, - 0xb1, 0x01, 0xd6, 0x07, 0xb1, 0x41, 0xd1, 0xf1, 0xb0, 0x01, 0xd2, 0xf2, - 0xb0, 0x01, 0xd3, 0xf3, 0xb0, 0x01, 0xd4, 0xf4, 0xb0, 0x01, 0xd5, 0xf5, - 0xb0, 0x01, 0xd6, 0xf6, 0xb0, 0x01, 0xd7, 0xf7, 0xb0, 0x41, 0xd1, 0xfe, - 0xb0, 0x01, 0xd2, 0xff, 0xb0, 0x01, 0xd3, 0x00, 0xb1, 0x01, 0xd4, 0x01, - 0xb1, 0x41, 0xd1, 0xed, 0xb0, 0x01, 0xd2, 0xee, 0xb0, 0x01, 0xd3, 0xef, - 0xb0, 0x01, 0xd4, 0xf0, 0xb0, 0x41, 0xd1, 0x14, 0xb0, 0x01, 0xd2, 0x15, - 0xb0, 0x01, 0xd3, 0x16, 0xb0, 0x41, 0x07, 0xac, 0xc3, 0x99, 0x01, 0x02, - 0x61, 0x17, 0x71, 0x02, 0x08, 0x02, 0x4f, 0x02, 0x09, 0x33, 0x29, 0x02, - 0x09, 0x2e, 0x11, 0x02, 0x7d, 0x35, 0x01, 0xff, 0xd1, 0x8f, 0xb0, 0x01, - 0xd2, 0x90, 0xb0, 0x01, 0xd3, 0x91, 0xb0, 0x41, 0xd1, 0x99, 0xb0, 0x01, - 0xd2, 0x9a, 0xb0, 0x01, 0xd3, 0x9b, 0xb0, 0x01, 0xd4, 0x9c, 0xb0, 0x01, - 0xd5, 0x9d, 0xb0, 0x41, 0xd1, 0x87, 0xb0, 0x01, 0xd2, 0x88, 0xb0, 0x01, - 0xd3, 0x89, 0xb0, 0x01, 0xd4, 0x8a, 0xb0, 0x01, 0xd5, 0x8b, 0xb0, 0x01, - 0xd6, 0x8c, 0xb0, 0x01, 0xd7, 0x8d, 0xb0, 0x01, 0x42, 0x77, 0x00, 0x8e, - 0xb0, 0x41, 0xd1, 0x92, 0xb0, 0x01, 0xd2, 0x93, 0xb0, 0x01, 0xd3, 0x94, - 0xb0, 0x01, 0xd4, 0x95, 0xb0, 0x01, 0xd5, 0x96, 0xb0, 0x01, 0xd6, 0x97, - 0xb0, 0x01, 0x42, 0xce, 0x02, 0x98, 0xb0, 0x41, 0xd1, 0x7e, 0xb0, 0x01, - 0xd2, 0x7f, 0xb0, 0x01, 0xd3, 0x80, 0xb0, 0x01, 0xd4, 0x81, 0xb0, 0x01, - 0xd5, 0x82, 0xb0, 0x01, 0xd6, 0x83, 0xb0, 0x01, 0xd7, 0x84, 0xb0, 0x01, - 0xd8, 0x85, 0xb0, 0x01, 0xd9, 0x86, 0xb0, 0x41, 0xd1, 0x1d, 0xb1, 0x01, - 0xd2, 0x1e, 0xb1, 0x41, 0x02, 0x61, 0x17, 0x63, 0x02, 0x08, 0x02, 0x51, - 0x02, 0x09, 0x33, 0x31, 0x02, 0x09, 0x2e, 0x15, 0x02, 0x7d, 0x35, 0x01, - 0xff, 0xd1, 0xd0, 0xb0, 0x01, 0xd2, 0xd1, 0xb0, 0x01, 0xd3, 0xd2, 0xb0, - 0x01, 0xd4, 0xd3, 0xb0, 0x41, 0xd1, 0xd7, 0xb0, 0x01, 0xd2, 0xd8, 0xb0, - 0x01, 0xd3, 0xd9, 0xb0, 0x01, 0xd4, 0xda, 0xb0, 0x01, 0xd5, 0xdb, 0xb0, - 0x01, 0xd6, 0xdc, 0xb0, 0x41, 0xd1, 0xc9, 0xb0, 0x01, 0xd2, 0xca, 0xb0, - 0x01, 0xd3, 0xcb, 0xb0, 0x01, 0xd4, 0xcc, 0xb0, 0x01, 0xd5, 0xcd, 0xb0, - 0x01, 0xd6, 0xce, 0xb0, 0x01, 0xd7, 0xcf, 0xb0, 0x41, 0xd1, 0xd4, 0xb0, - 0x01, 0xd2, 0xd5, 0xb0, 0x01, 0x42, 0x6c, 0x00, 0xd6, 0xb0, 0x41, 0xd1, - 0xc2, 0xb0, 0x01, 0xd2, 0xc3, 0xb0, 0x01, 0xd3, 0xc4, 0xb0, 0x01, 0xd4, - 0xc5, 0xb0, 0x01, 0xd5, 0xc6, 0xb0, 0x01, 0xd6, 0xc7, 0xb0, 0x01, 0xd7, - 0xc8, 0xb0, 0x41, 0x02, 0x61, 0x17, 0x77, 0x02, 0x08, 0x02, 0x5b, 0x02, - 0x09, 0x33, 0x37, 0x02, 0x09, 0x2e, 0x21, 0x02, 0x7d, 0x35, 0x01, 0xff, - 0xd1, 0x2b, 0xb0, 0x01, 0xd2, 0x2c, 0xb0, 0x01, 0xd3, 0x2d, 0xb0, 0x01, - 0xd4, 0x2e, 0xb0, 0x01, 0xd5, 0x2f, 0xb0, 0x01, 0xd6, 0x30, 0xb0, 0x01, - 0xd7, 0x31, 0xb0, 0x41, 0xd1, 0x38, 0xb0, 0x01, 0xd2, 0x39, 0xb0, 0x01, - 0xd3, 0x3a, 0xb0, 0x01, 0x42, 0x45, 0x00, 0x3b, 0xb0, 0x41, 0xd1, 0x23, - 0xb0, 0x01, 0xd2, 0x24, 0xb0, 0x01, 0xd3, 0x25, 0xb0, 0x01, 0xd4, 0x26, - 0xb0, 0x01, 0xd5, 0x27, 0xb0, 0x01, 0xd6, 0x28, 0xb0, 0x01, 0xd7, 0x29, - 0xb0, 0x01, 0xd8, 0x2a, 0xb0, 0x41, 0xd1, 0x32, 0xb0, 0x01, 0xd2, 0x33, - 0xb0, 0x01, 0xd3, 0x34, 0xb0, 0x01, 0xd4, 0x35, 0xb0, 0x01, 0xd5, 0x36, - 0xb0, 0x01, 0xd6, 0x37, 0xb0, 0x41, 0xd1, 0x17, 0xb0, 0x81, 0x26, 0xd2, - 0x18, 0xb0, 0x01, 0xd3, 0x19, 0xb0, 0x01, 0xd4, 0x1a, 0xb0, 0x01, 0xd5, - 0x1b, 0xb0, 0x01, 0xd6, 0x1c, 0xb0, 0x01, 0xd7, 0x1d, 0xb0, 0x01, 0xd8, - 0x1e, 0xb0, 0x01, 0xd9, 0x1f, 0xb0, 0x01, 0x42, 0x37, 0x01, 0x22, 0xb0, - 0x41, 0xd0, 0x20, 0xb0, 0x01, 0xd1, 0x21, 0xb0, 0x41, 0xd1, 0x06, 0xb0, - 0x01, 0xd2, 0x07, 0xb0, 0x01, 0xd3, 0x08, 0xb0, 0x01, 0xd4, 0x09, 0xb0, - 0x41, 0x02, 0x61, 0x17, 0x75, 0x02, 0x08, 0x02, 0x55, 0x02, 0x09, 0x33, - 0x35, 0x02, 0x09, 0x2e, 0x11, 0x02, 0x7d, 0x35, 0x01, 0xff, 0xd1, 0xb0, - 0xb0, 0x01, 0xd2, 0xb1, 0xb0, 0x01, 0xd3, 0xb2, 0xb0, 0x41, 0xd1, 0xba, - 0xb0, 0x01, 0xd2, 0xbb, 0xb0, 0x01, 0xd3, 0xbc, 0xb0, 0x01, 0xd4, 0xbd, - 0xb0, 0x01, 0xd5, 0xbe, 0xb0, 0x01, 0xd6, 0xbf, 0xb0, 0x01, 0xd7, 0xc0, - 0xb0, 0x01, 0xd8, 0xc1, 0xb0, 0x41, 0xd1, 0xa9, 0xb0, 0x01, 0xd2, 0xaa, - 0xb0, 0x01, 0xd3, 0xab, 0xb0, 0x01, 0xd4, 0xac, 0xb0, 0x01, 0xd5, 0xad, - 0xb0, 0x01, 0xd6, 0xae, 0xb0, 0x01, 0xd7, 0xaf, 0xb0, 0x41, 0xd1, 0xb3, - 0xb0, 0x01, 0xd2, 0xb4, 0xb0, 0x01, 0xd3, 0xb5, 0xb0, 0x01, 0xd4, 0xb6, - 0xb0, 0x01, 0xd5, 0xb7, 0xb0, 0x01, 0xd6, 0xb8, 0xb0, 0x01, 0xd7, 0xb9, - 0xb0, 0x41, 0xd1, 0x9e, 0xb0, 0x81, 0x20, 0xd2, 0x9f, 0xb0, 0x01, 0xd3, - 0xa0, 0xb0, 0x01, 0xd4, 0xa1, 0xb0, 0x01, 0xd5, 0xa2, 0xb0, 0x01, 0xd6, - 0xa3, 0xb0, 0x01, 0xd7, 0xa4, 0xb0, 0x01, 0xd8, 0xa5, 0xb0, 0x01, 0xd9, - 0xa6, 0xb0, 0x41, 0xd0, 0xa7, 0xb0, 0x01, 0xd1, 0xa8, 0xb0, 0x41, 0xd1, - 0x01, 0xb0, 0x01, 0xd2, 0x0f, 0xb0, 0x01, 0xd3, 0x10, 0xb0, 0x01, 0xd4, - 0x11, 0xb0, 0x01, 0xd5, 0x12, 0xb0, 0x01, 0xd6, 0x13, 0xb0, 0x41, 0xd1, - 0x02, 0xb0, 0x01, 0xd2, 0x03, 0xb0, 0x01, 0xd3, 0x04, 0xb0, 0x01, 0x42, - 0x15, 0x02, 0x05, 0xb0, 0x41, 0x47, 0x9c, 0xc7, 0x81, 0xf6, 0x01, 0x57, - 0xe0, 0x2b, 0xff, 0x2b, 0x00, 0xad, 0x01, 0xff, 0x47, 0xf6, 0x06, 0x88, - 0x23, 0x00, 0x53, 0xaf, 0x43, 0xd1, 0x26, 0x40, 0x07, 0x7f, 0x20, 0x8a, - 0x06, 0xac, 0xd0, 0x01, 0x05, 0xb9, 0x00, 0xb9, 0x01, 0xb0, 0x06, 0x4c, - 0x40, 0x8f, 0xef, 0x05, 0x40, 0x05, 0xe8, 0x15, 0x2d, 0x0b, 0x8d, 0x14, - 0x01, 0xff, 0x03, 0xe1, 0x08, 0x18, 0x45, 0xaf, 0xdd, 0xbe, 0x05, 0x00, - 0x4b, 0x27, 0x98, 0xc6, 0x05, 0x00, 0x45, 0xea, 0xde, 0xc0, 0x05, 0x00, - 0x49, 0xbd, 0xb5, 0xc3, 0x05, 0x40, 0x43, 0xeb, 0x54, 0xf3, 0x05, 0x00, - 0x46, 0x3b, 0xd5, 0xf4, 0x05, 0x40, 0x4f, 0x5b, 0x65, 0xbc, 0x05, 0x00, - 0xa8, 0x4f, 0x54, 0xc8, 0x3e, 0x1e, 0xfb, 0x00, 0x45, 0xcd, 0xdd, 0xbd, - 0x05, 0x00, 0x45, 0x51, 0x83, 0xb7, 0x05, 0x00, 0xb1, 0x28, 0x44, 0x1e, - 0xe7, 0xbf, 0x05, 0x00, 0xb3, 0x06, 0x45, 0xa7, 0xe0, 0xb5, 0x05, 0x40, - 0x44, 0xef, 0xdf, 0xb6, 0x05, 0x00, 0xa8, 0x06, 0x46, 0x8f, 0x48, 0xc2, - 0x05, 0x40, 0x43, 0x33, 0x41, 0xb0, 0x05, 0x00, 0x46, 0x8f, 0x48, 0xc1, - 0x05, 0x40, 0x45, 0xbe, 0xd4, 0xb8, 0x05, 0x80, 0x06, 0x45, 0xd4, 0xe0, - 0xbb, 0x05, 0x40, 0x46, 0xf7, 0xcd, 0xc7, 0x05, 0x40, 0x05, 0xc7, 0xd9, - 0x13, 0x44, 0x43, 0xdc, 0xb4, 0x05, 0x00, 0x44, 0x52, 0xdc, 0xb9, 0x05, - 0xc0, 0x00, 0x4e, 0x6e, 0x6e, 0xba, 0x05, 0x40, 0x45, 0x51, 0x83, 0xb2, - 0x05, 0x00, 0x46, 0xbd, 0xd4, 0xb3, 0x05, 0x00, 0x45, 0xee, 0xdf, 0xb1, - 0x05, 0x40, 0x49, 0x5d, 0xb2, 0xc5, 0x05, 0x00, 0x4d, 0x76, 0x7e, 0xaf, - 0x05, 0x00, 0x49, 0xc2, 0xb6, 0xc4, 0x05, 0x40, 0x06, 0xf2, 0x04, 0x2c, - 0x08, 0x35, 0x1d, 0x01, 0xff, 0x4a, 0x17, 0x9f, 0x4f, 0xfb, 0x00, 0x08, - 0xcd, 0xc2, 0x01, 0xff, 0x07, 0x3b, 0x01, 0x0c, 0x47, 0xea, 0xcc, 0xf1, - 0x05, 0x00, 0x4d, 0x49, 0x83, 0x1f, 0xfb, 0x40, 0x43, 0xd1, 0x0d, 0xf0, - 0x05, 0x00, 0x43, 0xf9, 0x4c, 0xf2, 0x05, 0x40, 0xa1, 0xcd, 0x03, 0x43, - 0xc6, 0x08, 0xd1, 0x05, 0x80, 0xb4, 0x03, 0x45, 0x8d, 0x44, 0xd3, 0x05, - 0x80, 0xa6, 0x03, 0x06, 0x97, 0x29, 0xf5, 0x02, 0x45, 0x4b, 0xa2, 0xd2, - 0x05, 0x80, 0xe7, 0x02, 0x42, 0xb0, 0x01, 0xd4, 0x05, 0x80, 0xd5, 0x02, - 0x43, 0x11, 0x4c, 0xdb, 0x05, 0x80, 0xbc, 0x02, 0x45, 0x1c, 0x9f, 0xdc, - 0x05, 0x80, 0xae, 0x02, 0x43, 0xb9, 0x04, 0xde, 0x05, 0x80, 0xa0, 0x02, - 0x43, 0x40, 0x20, 0xe0, 0x05, 0x80, 0x92, 0x02, 0x42, 0x6f, 0x02, 0xe4, - 0x05, 0x80, 0xf9, 0x01, 0x43, 0x5d, 0xe9, 0xe7, 0x05, 0x80, 0xeb, 0x01, - 0x44, 0x29, 0x60, 0xe8, 0x05, 0x80, 0xdd, 0x01, 0xb3, 0x9a, 0x01, 0xb4, - 0x71, 0x43, 0xd1, 0x0d, 0xd5, 0x05, 0x80, 0x59, 0x05, 0x51, 0xe1, 0x25, - 0x43, 0xf9, 0x4c, 0xd9, 0x05, 0x80, 0x0d, 0x45, 0xf3, 0x4c, 0xd6, 0x05, - 0xc0, 0x00, 0x4c, 0x00, 0x84, 0x36, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x46, 0x5b, 0x65, 0x39, 0xfb, 0x00, 0x45, 0x42, 0xdc, 0x1d, 0xfb, - 0x40, 0x44, 0x67, 0x00, 0x21, 0xfb, 0x00, 0x45, 0x8d, 0x44, 0x22, 0xfb, - 0x00, 0x49, 0x9f, 0xaf, 0x26, 0xfb, 0x00, 0x42, 0xb0, 0x01, 0x23, 0xfb, - 0x00, 0x43, 0x11, 0x4c, 0x24, 0xfb, 0x00, 0x45, 0x1c, 0x9f, 0x25, 0xfb, - 0x00, 0x44, 0x29, 0x60, 0x27, 0xfb, 0x00, 0x43, 0x08, 0x27, 0x28, 0xfb, - 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x5b, 0x65, 0x35, 0xfb, 0x00, - 0x45, 0x51, 0xdc, 0x4b, 0xfb, 0x40, 0x42, 0x10, 0x07, 0xea, 0x05, 0x80, - 0x1a, 0x42, 0xf2, 0x04, 0xd8, 0x05, 0x80, 0x0d, 0x44, 0x9e, 0xe0, 0xe6, - 0x05, 0xc0, 0x00, 0x4c, 0x00, 0x84, 0x46, 0xfb, 0x40, 0x4c, 0x00, 0x84, - 0x38, 0xfb, 0x40, 0x4c, 0x00, 0x84, 0x4a, 0xfb, 0x40, 0x45, 0x95, 0xd9, - 0xe1, 0x05, 0x80, 0x33, 0x43, 0x99, 0x14, 0xe9, 0x05, 0xc0, 0x00, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x46, 0x5b, 0x65, 0x49, 0xfb, 0x80, 0x0f, 0xb3, - 0x01, 0xff, 0x47, 0x8e, 0x48, 0x2a, 0xfb, 0x00, 0x46, 0x8f, 0x48, 0x2b, - 0xfb, 0x40, 0x06, 0xda, 0x06, 0x01, 0xff, 0x47, 0x8e, 0x48, 0x2c, 0xfb, - 0x00, 0x46, 0x8f, 0x48, 0x2d, 0xfb, 0x40, 0x4c, 0x00, 0x84, 0x41, 0xfb, - 0x40, 0x4c, 0x00, 0x84, 0x48, 0xfb, 0x40, 0x4c, 0x00, 0x84, 0x47, 0xfb, - 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x5b, 0x65, 0x44, 0xfb, 0x00, - 0x44, 0x1e, 0xe7, 0x4e, 0xfb, 0x40, 0x4c, 0x00, 0x84, 0x40, 0xfb, 0x40, - 0x4c, 0x00, 0x84, 0x3e, 0xfb, 0x40, 0x4c, 0x00, 0x84, 0x3c, 0xfb, 0x40, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x5b, 0x65, 0x3b, 0xfb, 0x00, 0x44, - 0x1e, 0xe7, 0x4d, 0xfb, 0x40, 0x4b, 0x34, 0x90, 0x34, 0xfb, 0x00, 0xf4, - 0xd7, 0x05, 0x40, 0x4c, 0x00, 0x84, 0x32, 0xfb, 0x40, 0x43, 0x11, 0x4c, - 0xda, 0x05, 0x80, 0x1f, 0x43, 0xb9, 0x04, 0xdd, 0x05, 0x00, 0x43, 0x40, - 0x20, 0xdf, 0x05, 0x00, 0x42, 0x6f, 0x02, 0xe3, 0x05, 0x80, 0x06, 0x45, - 0x9d, 0xe0, 0xe5, 0x05, 0x40, 0x4c, 0x00, 0x84, 0x43, 0xfb, 0x40, 0x4c, - 0x00, 0x84, 0x3a, 0xfb, 0x40, 0x4c, 0x00, 0x84, 0x33, 0xfb, 0x40, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x46, 0x5b, 0x65, 0x31, 0xfb, 0x00, 0x44, 0x1e, - 0xe7, 0x4c, 0xfb, 0x40, 0xac, 0x06, 0x43, 0x4b, 0x18, 0xe2, 0x05, 0x40, - 0x42, 0x69, 0x00, 0xd0, 0x05, 0x80, 0x11, 0x0a, 0xef, 0xa8, 0x01, 0xff, - 0x44, 0x88, 0x44, 0x20, 0xfb, 0x00, 0x49, 0x19, 0x6b, 0x29, 0xfb, 0x40, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x65, 0x65, 0x30, 0xfb, 0x00, 0x45, - 0x51, 0x83, 0x2e, 0xfb, 0x00, 0x46, 0xbd, 0xd4, 0x2f, 0xfb, 0x40, 0x4c, - 0xf0, 0x84, 0xa2, 0x05, 0x00, 0xa4, 0xcb, 0x01, 0x47, 0xca, 0xc6, 0x91, - 0x05, 0x00, 0x03, 0xe1, 0x08, 0xad, 0x01, 0x44, 0x86, 0xe5, 0xac, 0x05, - 0x00, 0xad, 0x8b, 0x01, 0x43, 0xf9, 0x13, 0xab, 0x05, 0x00, 0x02, 0xc1, - 0x08, 0x75, 0x02, 0x9d, 0x12, 0x65, 0x45, 0x66, 0x4a, 0x97, 0x05, 0x00, - 0xb3, 0x51, 0xb4, 0x31, 0x02, 0x4d, 0x00, 0x21, 0xba, 0x01, 0xff, 0xa1, - 0x06, 0x44, 0x8a, 0xe5, 0xae, 0x05, 0x40, 0x04, 0x12, 0xe7, 0x06, 0x43, - 0x9c, 0x12, 0x98, 0x05, 0x40, 0x45, 0xc5, 0xdb, 0x95, 0x05, 0x00, 0x45, - 0xf8, 0xcd, 0x94, 0x05, 0x40, 0x4c, 0x70, 0x8c, 0xaa, 0x05, 0x00, 0x43, - 0xd6, 0x04, 0x9a, 0x05, 0x40, 0xa5, 0x06, 0x45, 0xbf, 0xdc, 0x96, 0x05, - 0x40, 0x06, 0x43, 0xd3, 0x06, 0x43, 0x47, 0x21, 0x9b, 0x05, 0x40, 0x46, - 0x8d, 0xd1, 0xa0, 0x05, 0x00, 0x46, 0xc3, 0xd4, 0xa9, 0x05, 0x40, 0x44, - 0xef, 0xdf, 0x92, 0x05, 0x00, 0x49, 0x1d, 0xb0, 0x93, 0x05, 0x40, 0x43, - 0x9a, 0xac, 0xa8, 0x05, 0x00, 0x49, 0x36, 0xb5, 0x9f, 0x05, 0x40, 0x44, - 0x72, 0xe7, 0x99, 0x05, 0x00, 0x43, 0xf5, 0x1b, 0xa1, 0x05, 0x40, 0x47, - 0x7e, 0xc4, 0xa4, 0x05, 0x00, 0x45, 0x66, 0xdb, 0xa5, 0x05, 0x80, 0x06, - 0x44, 0x7c, 0xc4, 0xa3, 0x05, 0x40, 0x47, 0x27, 0xc3, 0xa6, 0x05, 0x40, - 0x43, 0xeb, 0x54, 0x9c, 0x05, 0x80, 0x06, 0x46, 0x3b, 0xd5, 0x9e, 0x05, - 0x40, 0x47, 0x4a, 0xc3, 0x9d, 0x05, 0x40, 0x44, 0x6a, 0x46, 0xa7, 0x05, - 0x00, 0x43, 0xa0, 0x57, 0xad, 0x05, 0x40, 0xa4, 0xd3, 0x06, 0xb2, 0xa2, - 0x06, 0x03, 0x8f, 0x13, 0x01, 0xff, 0xa1, 0xee, 0x05, 0xa2, 0xb1, 0x05, - 0xa3, 0xfb, 0x04, 0xa4, 0xc2, 0x04, 0xa5, 0x82, 0x04, 0xa6, 0xe9, 0x03, - 0x4b, 0x1e, 0x5b, 0x1a, 0x27, 0x00, 0xa8, 0xd4, 0x03, 0x54, 0x3e, 0x14, - 0x79, 0xf6, 0x01, 0xac, 0xf9, 0x02, 0xad, 0xea, 0x02, 0x06, 0xb4, 0x01, - 0xb9, 0x02, 0xaf, 0xa4, 0x02, 0x49, 0x19, 0x6b, 0x95, 0x27, 0x00, 0xb2, - 0xe9, 0x01, 0xb3, 0x7a, 0xb4, 0x46, 0x02, 0x50, 0x02, 0x2b, 0x4c, 0x32, - 0x00, 0x5a, 0x27, 0x00, 0xb7, 0x01, 0xff, 0x5c, 0xa9, 0x15, 0xbd, 0x27, - 0x00, 0x05, 0xae, 0x02, 0x06, 0x5b, 0xbe, 0x19, 0x94, 0x27, 0x40, 0x46, - 0x00, 0x04, 0x87, 0xf7, 0x01, 0x56, 0xd8, 0x2f, 0xdb, 0x26, 0x00, 0x46, - 0xdb, 0x04, 0x91, 0xf7, 0x41, 0x69, 0x9a, 0x02, 0xae, 0x27, 0x00, 0x11, - 0xb2, 0x0a, 0x01, 0xff, 0x55, 0xd5, 0x01, 0x19, 0xf8, 0x01, 0x5b, 0x0f, - 0x1a, 0x1d, 0xf8, 0x41, 0x09, 0x7b, 0x0b, 0x17, 0x5f, 0x99, 0x05, 0x9e, - 0x27, 0x00, 0x0e, 0xb7, 0x28, 0x01, 0xff, 0x4a, 0xc5, 0x28, 0xd3, 0xf7, - 0x01, 0x4d, 0x82, 0x11, 0xd4, 0xf7, 0x41, 0x57, 0x11, 0x2b, 0xbb, 0x27, - 0x00, 0x06, 0x84, 0x0b, 0x01, 0xff, 0x48, 0x94, 0x0b, 0x3d, 0x27, 0x00, - 0x51, 0x2f, 0x57, 0x43, 0x27, 0x40, 0xa1, 0x5f, 0x5a, 0x2e, 0x1d, 0x71, - 0xf6, 0x01, 0xa9, 0x36, 0x05, 0x3a, 0x1e, 0x06, 0x46, 0xd5, 0xab, 0x48, - 0x27, 0x40, 0x05, 0x11, 0x21, 0x11, 0x0e, 0xc9, 0x50, 0x01, 0xff, 0x43, - 0x5f, 0xc6, 0x65, 0xf6, 0x01, 0x49, 0x64, 0xb7, 0x5d, 0xf6, 0x41, 0x45, - 0xce, 0x00, 0x98, 0x27, 0x00, 0x09, 0x9c, 0x01, 0x01, 0xff, 0x43, 0x5f, - 0xc6, 0x67, 0xf6, 0x01, 0x49, 0x64, 0xb7, 0x5f, 0xf6, 0x41, 0x05, 0x37, - 0x05, 0x11, 0x02, 0xdd, 0x03, 0x01, 0xff, 0x52, 0xbd, 0x28, 0xcc, 0xf7, - 0x01, 0x4f, 0xbd, 0x1a, 0xb8, 0xf7, 0x41, 0x5d, 0x18, 0x04, 0x5c, 0x27, - 0x00, 0x64, 0x2d, 0x09, 0x5b, 0x27, 0x40, 0x45, 0x17, 0x17, 0xac, 0xf7, - 0x01, 0x5d, 0x35, 0x14, 0x7b, 0xf6, 0x41, 0x04, 0xc9, 0x00, 0x06, 0x5c, - 0xdd, 0x16, 0x9c, 0x27, 0x40, 0x10, 0x4b, 0x0a, 0x18, 0x4b, 0xb8, 0x02, - 0x99, 0x27, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x55, 0xd5, 0x01, - 0x1a, 0xf8, 0x01, 0x5b, 0x0f, 0x1a, 0x1e, 0xf8, 0x41, 0x50, 0x45, 0x08, - 0x71, 0x27, 0x00, 0x57, 0x1e, 0x04, 0x6f, 0x27, 0x40, 0x50, 0x59, 0x5f, - 0x1c, 0x27, 0x00, 0x52, 0x93, 0x50, 0x2e, 0x27, 0x00, 0x54, 0x34, 0x41, - 0x56, 0x2b, 0x40, 0x05, 0x11, 0x21, 0x11, 0x0e, 0xc9, 0x50, 0x01, 0xff, - 0x43, 0x5f, 0xc6, 0x64, 0xf6, 0x01, 0x49, 0x64, 0xb7, 0x5c, 0xf6, 0x41, - 0x45, 0xce, 0x00, 0x9a, 0x27, 0x00, 0x09, 0x9c, 0x01, 0x01, 0xff, 0x43, - 0x5f, 0xc6, 0x66, 0xf6, 0x01, 0x49, 0x64, 0xb7, 0x5e, 0xf6, 0x41, 0x49, - 0xef, 0x67, 0x96, 0x27, 0x00, 0x4f, 0x71, 0x6d, 0x16, 0x27, 0x40, 0xa1, - 0x44, 0x03, 0xc4, 0x00, 0x1f, 0x58, 0x17, 0x26, 0x73, 0xf6, 0x01, 0x02, - 0xd1, 0x00, 0x01, 0xff, 0x80, 0x06, 0x68, 0x9b, 0x02, 0xad, 0x27, 0x40, - 0x64, 0x11, 0x04, 0x60, 0x27, 0x00, 0x64, 0xe5, 0x08, 0x5f, 0x27, 0x40, - 0x10, 0x4b, 0x0a, 0x11, 0x11, 0xb2, 0x0a, 0x01, 0xff, 0x55, 0xd5, 0x01, - 0x18, 0xf8, 0x01, 0x5b, 0x0f, 0x1a, 0x1c, 0xf8, 0x41, 0x50, 0x45, 0x08, - 0x70, 0x27, 0x00, 0x57, 0x1e, 0x04, 0x6e, 0x27, 0x40, 0x4a, 0x5f, 0xa7, - 0x55, 0x2b, 0x00, 0x49, 0x24, 0x96, 0x47, 0xf5, 0x41, 0x5e, 0x35, 0x11, - 0x63, 0x27, 0x00, 0x4e, 0x5a, 0x67, 0x97, 0xfb, 0x41, 0x04, 0xd7, 0x04, - 0x06, 0x5b, 0xb1, 0x1a, 0x24, 0x27, 0x40, 0x52, 0xbd, 0x28, 0xca, 0xf7, - 0x01, 0x4f, 0xbd, 0x1a, 0xb2, 0xf7, 0x41, 0x05, 0xc9, 0x00, 0x17, 0x4a, - 0xa3, 0x11, 0xf0, 0xf7, 0x01, 0x10, 0xae, 0x00, 0x01, 0xff, 0x48, 0x2d, - 0x04, 0x62, 0x27, 0x00, 0x46, 0xf7, 0x06, 0x57, 0x27, 0x40, 0x08, 0x14, - 0x07, 0x0c, 0x4f, 0xbd, 0x1a, 0xbe, 0xf7, 0x01, 0x62, 0x7a, 0x0b, 0x4b, - 0x27, 0x40, 0x4a, 0xc5, 0x28, 0xcf, 0xf7, 0x01, 0x4d, 0x82, 0x11, 0xd1, - 0xf7, 0x01, 0x56, 0x98, 0x32, 0x38, 0x27, 0x40, 0x66, 0x92, 0x05, 0xa0, - 0x27, 0x00, 0x4c, 0xda, 0x2e, 0x97, 0x27, 0x00, 0xaf, 0x01, 0xff, 0x49, - 0x84, 0x0c, 0xb2, 0xf4, 0x01, 0x05, 0x3d, 0x01, 0x11, 0x13, 0xb0, 0x0a, - 0x01, 0xff, 0x55, 0xd5, 0x01, 0x1b, 0xf8, 0x01, 0x5b, 0x0f, 0x1a, 0x1f, - 0xf8, 0x41, 0x5d, 0x18, 0x04, 0x5e, 0x27, 0x00, 0x64, 0x2d, 0x09, 0x5d, - 0x27, 0x40, 0x02, 0xb0, 0x01, 0x23, 0x45, 0x01, 0x04, 0x58, 0x2b, 0x80, - 0x06, 0x65, 0x0d, 0x07, 0xa8, 0x27, 0x40, 0x06, 0x50, 0x00, 0x06, 0x49, - 0x6d, 0xae, 0x59, 0x2b, 0x40, 0x4d, 0x73, 0x7a, 0x57, 0x2b, 0x00, 0x59, - 0x73, 0x23, 0xe3, 0x26, 0x40, 0x47, 0x1e, 0xa0, 0x14, 0x27, 0x00, 0x4e, - 0xac, 0x77, 0x46, 0x27, 0x40, 0x47, 0x8c, 0xc4, 0x18, 0x27, 0x00, 0x04, - 0x1d, 0x07, 0x01, 0xff, 0x80, 0x17, 0x0b, 0x0e, 0x18, 0x01, 0xff, 0x50, - 0x0b, 0x21, 0xb9, 0x27, 0x00, 0x50, 0xb3, 0x02, 0xb8, 0x27, 0x00, 0x50, - 0xac, 0x3b, 0xb7, 0x27, 0x40, 0x07, 0x98, 0x3c, 0x06, 0x45, 0x5e, 0x1f, - 0x64, 0x27, 0x40, 0x5e, 0x17, 0x11, 0xa5, 0x27, 0x00, 0x5c, 0xa1, 0x17, - 0xa6, 0x27, 0x40, 0x51, 0x94, 0x39, 0x74, 0xf6, 0x01, 0x11, 0x88, 0x4a, - 0x06, 0x47, 0x95, 0x0b, 0x31, 0x27, 0x40, 0x43, 0xcd, 0x09, 0x9c, 0xf8, - 0x81, 0x06, 0x4a, 0x71, 0xa9, 0x9d, 0xf8, 0x41, 0x80, 0x01, 0xff, 0x44, - 0x22, 0x00, 0x9e, 0xf8, 0x01, 0x45, 0xcc, 0x0e, 0x9f, 0xf8, 0x41, 0x4f, - 0xd5, 0x63, 0x49, 0xf6, 0x01, 0x02, 0xc6, 0x00, 0x01, 0xff, 0x4a, 0x64, - 0x8f, 0x9f, 0xf4, 0x01, 0x45, 0xd3, 0x0c, 0xf6, 0xfa, 0x01, 0x05, 0x51, - 0x00, 0x01, 0xff, 0x45, 0xce, 0x00, 0x98, 0xf4, 0x01, 0x46, 0xb1, 0x7e, - 0x9d, 0xf4, 0x01, 0x4f, 0xf9, 0x6c, 0x94, 0xf3, 0x41, 0x45, 0x9b, 0x38, - 0xa7, 0xf3, 0x01, 0x45, 0x41, 0xb1, 0xa6, 0xfa, 0xc1, 0x00, 0x51, 0x57, - 0x51, 0xfc, 0x26, 0x40, 0x43, 0x0f, 0x25, 0xe1, 0x2b, 0x00, 0x02, 0x46, - 0x00, 0x93, 0x24, 0x08, 0xe5, 0xbd, 0xda, 0x1e, 0xad, 0xa6, 0x1e, 0xae, - 0xd1, 0x01, 0x5b, 0xe7, 0x1a, 0x4b, 0xf6, 0x01, 0x47, 0xe4, 0xca, 0xb4, - 0xf5, 0x01, 0xb4, 0x06, 0x44, 0xf5, 0xa0, 0x7b, 0xf7, 0x41, 0x4b, 0x18, - 0x92, 0x23, 0xf4, 0x01, 0x04, 0x0e, 0xc8, 0x01, 0xff, 0x07, 0xf1, 0x04, - 0x27, 0x07, 0xbf, 0x35, 0x01, 0xff, 0x44, 0xf8, 0x0f, 0xfc, 0x08, 0x01, - 0x43, 0xcd, 0x09, 0xfb, 0x08, 0x81, 0x0f, 0xb4, 0x01, 0xff, 0x42, 0x92, - 0x01, 0xfd, 0x08, 0x01, 0x45, 0x38, 0x29, 0xfe, 0x08, 0x41, 0x48, 0xe8, - 0x0f, 0xff, 0x08, 0x41, 0xa1, 0x79, 0x44, 0x46, 0xe4, 0xe1, 0x08, 0x01, - 0x4b, 0xb2, 0x92, 0xe3, 0x08, 0x01, 0x45, 0x4b, 0xa2, 0xe2, 0x08, 0x01, - 0x42, 0xb0, 0x01, 0xe4, 0x08, 0x81, 0x5a, 0x44, 0xba, 0xe5, 0xea, 0x08, - 0x01, 0x46, 0x1f, 0xd3, 0xeb, 0x08, 0x01, 0x43, 0xb9, 0x04, 0xec, 0x08, - 0x01, 0x43, 0x40, 0x20, 0xed, 0x08, 0x01, 0x42, 0x6f, 0x02, 0xf0, 0x08, - 0x01, 0x44, 0x71, 0xbe, 0xf2, 0x08, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, - 0x08, 0x83, 0xe5, 0x08, 0x01, 0x44, 0xf9, 0x4c, 0xe9, 0x08, 0x01, 0x44, - 0x22, 0xe8, 0xe6, 0x08, 0x41, 0x42, 0xaf, 0x3f, 0xf5, 0x08, 0x01, 0x43, - 0x25, 0x23, 0xe8, 0x08, 0x41, 0xa1, 0x06, 0x43, 0x99, 0x14, 0xf4, 0x08, - 0x41, 0x43, 0xd7, 0xdf, 0xf1, 0x08, 0x01, 0x44, 0x96, 0xd9, 0xee, 0x08, - 0x41, 0x42, 0x53, 0x00, 0xe7, 0x08, 0x41, 0x44, 0x99, 0x38, 0xe0, 0x08, - 0x01, 0x42, 0xd0, 0x1a, 0xef, 0x08, 0x41, 0xa4, 0xab, 0x1c, 0xa7, 0xce, - 0x03, 0x0d, 0xe3, 0x7c, 0x82, 0x01, 0x05, 0xf7, 0xe0, 0x01, 0xff, 0x07, - 0xf1, 0x04, 0x13, 0x4d, 0x41, 0x81, 0x34, 0x17, 0x00, 0x0b, 0x5b, 0x70, - 0x01, 0xff, 0xe9, 0x32, 0x17, 0x00, 0xf5, 0x33, 0x17, 0x40, 0xe1, 0x20, - 0x17, 0x00, 0x42, 0x16, 0x00, 0x2a, 0x17, 0x00, 0x42, 0x68, 0x0f, 0x27, - 0x17, 0x00, 0x42, 0x24, 0x02, 0x24, 0x17, 0x00, 0x42, 0x22, 0x00, 0x31, - 0x17, 0x00, 0xe9, 0x21, 0x17, 0x00, 0x42, 0x1b, 0x02, 0x23, 0x17, 0x00, - 0x42, 0x74, 0x00, 0x2e, 0x17, 0x00, 0x42, 0x6c, 0x00, 0x2b, 0x17, 0x00, - 0xae, 0x28, 0x42, 0xc1, 0x08, 0x29, 0x17, 0x00, 0x42, 0x71, 0x00, 0x2d, - 0x17, 0x00, 0x42, 0x45, 0x05, 0x30, 0x17, 0x00, 0x42, 0x12, 0x00, 0x26, - 0x17, 0x00, 0xf5, 0x22, 0x17, 0x00, 0x42, 0xa9, 0x01, 0x2f, 0x17, 0x00, - 0x42, 0x20, 0x20, 0x2c, 0x17, 0x40, 0xe1, 0x28, 0x17, 0x00, 0x42, 0x24, - 0x02, 0x25, 0x17, 0x40, 0x06, 0xf4, 0x05, 0x80, 0x02, 0x07, 0xf1, 0x04, - 0x4a, 0x05, 0xb9, 0x00, 0x3a, 0x05, 0xdb, 0x02, 0x19, 0x06, 0x11, 0x35, - 0x01, 0xff, 0xe1, 0x1d, 0x0d, 0x01, 0xe5, 0x20, 0x0d, 0x01, 0xe9, 0x1e, - 0x0d, 0x01, 0xef, 0x21, 0x0d, 0x01, 0xf5, 0x1f, 0x0d, 0x41, 0x48, 0xe5, - 0xbc, 0x24, 0x0d, 0x01, 0x02, 0x12, 0x00, 0x01, 0xff, 0x44, 0x17, 0x76, - 0x25, 0x0d, 0x01, 0x42, 0x2f, 0x04, 0x26, 0x0d, 0x01, 0x43, 0x90, 0x07, - 0x27, 0x0d, 0x41, 0x49, 0xc9, 0xb2, 0x23, 0x0d, 0x01, 0x45, 0xda, 0xdf, - 0x22, 0x0d, 0x41, 0xe1, 0x00, 0x0d, 0x01, 0x42, 0x16, 0x00, 0x01, 0x0d, - 0x01, 0x42, 0x37, 0x00, 0x06, 0x0d, 0x01, 0xa4, 0x95, 0x01, 0x42, 0xed, - 0x06, 0x09, 0x0d, 0x01, 0x42, 0x24, 0x02, 0x12, 0x0d, 0x01, 0x42, 0x22, - 0x00, 0x07, 0x0d, 0x01, 0x42, 0x77, 0x24, 0x05, 0x0d, 0x01, 0xab, 0x60, - 0x42, 0x74, 0x00, 0x13, 0x0d, 0x01, 0x42, 0x6c, 0x00, 0x14, 0x0d, 0x01, - 0xae, 0x42, 0x42, 0xc1, 0x08, 0x02, 0x0d, 0x01, 0xb2, 0x30, 0xb3, 0x24, - 0xb4, 0x18, 0x42, 0xb4, 0x09, 0x1c, 0x0d, 0x01, 0x42, 0xa9, 0x01, 0x16, - 0x0d, 0x01, 0x42, 0x20, 0x20, 0x18, 0x0d, 0x01, 0x42, 0x59, 0x00, 0x0e, - 0x0d, 0x41, 0xe1, 0x03, 0x0d, 0x01, 0x42, 0x12, 0x00, 0x04, 0x0d, 0x41, - 0xe1, 0x0f, 0x0d, 0x01, 0x42, 0x22, 0x00, 0x10, 0x0d, 0x41, 0xe1, 0x0c, - 0x0d, 0x01, 0x42, 0x71, 0x00, 0x0d, 0x0d, 0x41, 0xe1, 0x15, 0x0d, 0x01, - 0x42, 0x24, 0x02, 0x1a, 0x0d, 0x01, 0x42, 0x20, 0x20, 0x1b, 0x0d, 0x41, - 0xe1, 0x11, 0x0d, 0x01, 0x42, 0x22, 0x00, 0x08, 0x0d, 0x01, 0x05, 0xb5, - 0xdc, 0x01, 0xff, 0x42, 0xa9, 0x01, 0x17, 0x0d, 0x01, 0x42, 0x20, 0x20, - 0x19, 0x0d, 0x41, 0xe1, 0x0a, 0x0d, 0x01, 0x42, 0x68, 0x0f, 0x0b, 0x0d, - 0x41, 0x45, 0xd1, 0x09, 0x38, 0x0d, 0x01, 0xa6, 0x2e, 0x44, 0xb8, 0x27, - 0x39, 0x0d, 0x01, 0x43, 0xcd, 0x09, 0x31, 0x0d, 0x01, 0xb3, 0x14, 0xb4, - 0x06, 0x44, 0xf5, 0x1b, 0x30, 0x0d, 0x41, 0x44, 0x25, 0x01, 0x33, 0x0d, - 0x01, 0x42, 0x15, 0x02, 0x32, 0x0d, 0x41, 0x44, 0x96, 0x1b, 0x37, 0x0d, - 0x01, 0x42, 0x30, 0x27, 0x36, 0x0d, 0x41, 0x43, 0xd7, 0x04, 0x35, 0x0d, - 0x01, 0x43, 0xfb, 0x05, 0x34, 0x0d, 0x41, 0x03, 0xcf, 0x4f, 0x57, 0x0d, - 0x63, 0x83, 0x01, 0xff, 0x45, 0xd1, 0x09, 0x28, 0x30, 0x00, 0xa6, 0x3e, - 0x44, 0xb8, 0x27, 0x29, 0x30, 0x00, 0x43, 0xcd, 0x09, 0x21, 0x30, 0x00, - 0xb3, 0x24, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x38, 0x30, 0x00, 0xa8, - 0x0d, 0xb7, 0x01, 0xff, 0x44, 0x98, 0x1b, 0x39, 0x30, 0x00, 0xef, 0x22, - 0x30, 0x40, 0x44, 0xf3, 0x0f, 0x3a, 0x30, 0x00, 0x43, 0x26, 0x01, 0x23, - 0x30, 0x40, 0x44, 0x96, 0x1b, 0x27, 0x30, 0x00, 0x42, 0x30, 0x27, 0x26, - 0x30, 0x40, 0x43, 0xd7, 0x04, 0x25, 0x30, 0x00, 0x43, 0xfb, 0x05, 0x24, - 0x30, 0x40, 0x09, 0x1c, 0xae, 0xf4, 0x10, 0x54, 0xd4, 0x3c, 0x2f, 0x30, - 0x00, 0x46, 0x9a, 0x7b, 0x64, 0x31, 0x00, 0xaa, 0xef, 0x04, 0x07, 0xf1, - 0x04, 0x0f, 0xb3, 0x01, 0xff, 0x53, 0xdf, 0x44, 0x2e, 0x30, 0x00, 0x48, - 0x3a, 0x16, 0x00, 0xd8, 0x40, 0xe1, 0x4f, 0x31, 0x80, 0xc7, 0x04, 0xa3, - 0xb8, 0x04, 0xe5, 0x54, 0x31, 0x80, 0xaa, 0x04, 0x45, 0xfd, 0x9c, 0x4e, - 0x31, 0x00, 0xe9, 0x63, 0x31, 0x80, 0x98, 0x04, 0xab, 0xe4, 0x03, 0x45, - 0xdc, 0xdd, 0x41, 0x31, 0x80, 0xc5, 0x03, 0x45, 0x4a, 0xde, 0x34, 0x31, - 0x80, 0x9c, 0x03, 0xef, 0x57, 0x31, 0x80, 0x92, 0x03, 0xb0, 0xc8, 0x02, - 0x45, 0x94, 0xdf, 0x39, 0x31, 0x80, 0xef, 0x01, 0xb3, 0x8f, 0x01, 0xb4, - 0x80, 0x01, 0xf5, 0x5c, 0x31, 0x00, 0xb7, 0x64, 0xb9, 0x01, 0xff, 0xe1, - 0x51, 0x31, 0x80, 0x58, 0xe5, 0x56, 0x31, 0x80, 0x32, 0xe9, 0x62, 0x31, - 0x00, 0xef, 0x5b, 0x31, 0x80, 0x17, 0xf5, 0x60, 0x31, 0xc0, 0x00, 0x8d, - 0x01, 0xff, 0xe9, 0x8c, 0x31, 0x00, 0x42, 0x4d, 0x00, 0x8b, 0x31, 0xc0, - 0x00, 0xef, 0x8a, 0x31, 0x40, 0x8d, 0x01, 0xff, 0xe9, 0x89, 0x31, 0x00, - 0x42, 0x20, 0x20, 0x87, 0x31, 0xc0, 0x00, 0xe5, 0x88, 0x31, 0x40, 0xef, - 0x55, 0x31, 0x80, 0x16, 0x46, 0xc7, 0xc2, 0x81, 0x31, 0xc0, 0x00, 0x8d, - 0x01, 0xff, 0x47, 0x35, 0xca, 0x83, 0x31, 0x00, 0x44, 0xd4, 0xb5, 0x82, - 0x31, 0x40, 0x48, 0xfa, 0x9c, 0x86, 0x31, 0x40, 0xe5, 0x52, 0x31, 0x40, - 0xe1, 0x58, 0x31, 0x80, 0x0d, 0xe5, 0x5e, 0x31, 0x80, 0x04, 0xe9, 0x5f, - 0x31, 0x40, 0xef, 0x5d, 0x31, 0x40, 0xe5, 0x59, 0x31, 0x40, 0x46, 0x20, - 0xcc, 0x4c, 0x31, 0x00, 0x45, 0xc3, 0xc3, 0x37, 0x31, 0x40, 0x43, 0x3f, - 0x3d, 0x45, 0x31, 0x80, 0x35, 0x04, 0xce, 0x29, 0x01, 0xff, 0x45, 0x8f, - 0xda, 0x49, 0x31, 0x00, 0x45, 0xfd, 0x9c, 0x85, 0x31, 0x00, 0x45, 0x0b, - 0xc2, 0x80, 0x31, 0x00, 0x46, 0x9f, 0x9a, 0x32, 0x31, 0x00, 0x45, 0x4a, - 0xde, 0x65, 0x31, 0x00, 0x45, 0xbb, 0x7d, 0x43, 0x31, 0x00, 0x44, 0xd4, - 0xb5, 0x46, 0x31, 0x00, 0x46, 0xc2, 0xc3, 0x38, 0x31, 0x40, 0x8d, 0x01, - 0xff, 0x45, 0x8f, 0xda, 0x7e, 0x31, 0x00, 0x46, 0x9f, 0x9a, 0x7a, 0x31, - 0x00, 0x45, 0x4a, 0xde, 0x7b, 0x31, 0x00, 0x45, 0xbb, 0x7d, 0x7d, 0x31, - 0x00, 0x46, 0xc2, 0xc3, 0x7c, 0x31, 0x40, 0x8d, 0x01, 0xff, 0x45, 0xfd, - 0x9c, 0x40, 0x31, 0x00, 0x46, 0x9f, 0x9a, 0x3a, 0x31, 0x80, 0x3b, 0x45, - 0xdc, 0xdd, 0x3b, 0x31, 0x00, 0xb0, 0x1a, 0x44, 0xd4, 0xb5, 0x3d, 0x31, - 0x00, 0xb4, 0x06, 0x4b, 0xf7, 0x9c, 0x6d, 0x31, 0x40, 0x46, 0x20, 0xcc, - 0x3e, 0x31, 0x00, 0x45, 0xc3, 0xc3, 0x6a, 0x31, 0x40, 0x46, 0x36, 0xca, - 0x6c, 0x31, 0x00, 0x46, 0x27, 0xb9, 0x3f, 0x31, 0x00, 0x44, 0xbc, 0x7d, - 0x3c, 0x31, 0xc0, 0x00, 0x45, 0x5b, 0xd7, 0x6b, 0x31, 0x40, 0x45, 0x5b, - 0xd7, 0x69, 0x31, 0x40, 0x46, 0x36, 0xca, 0x7f, 0x31, 0x00, 0x46, 0x27, - 0xb9, 0x4d, 0x31, 0x00, 0x44, 0xbc, 0x7d, 0x42, 0x31, 0xc0, 0x00, 0x8d, - 0x01, 0xff, 0x45, 0x8f, 0xda, 0x76, 0x31, 0x00, 0x46, 0x9f, 0x9a, 0x72, - 0x31, 0x00, 0x44, 0xd4, 0xb5, 0x44, 0x31, 0x80, 0x0f, 0xb4, 0x01, 0xff, - 0x46, 0x20, 0xcc, 0x77, 0x31, 0x00, 0x45, 0xc3, 0xc3, 0x73, 0x31, 0x40, - 0x8d, 0x01, 0xff, 0x46, 0x9f, 0x9a, 0x74, 0x31, 0x00, 0x46, 0xc2, 0xc3, - 0x75, 0x31, 0x40, 0xe5, 0x5a, 0x31, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x8f, - 0xda, 0x35, 0x31, 0x00, 0x45, 0xfd, 0x9c, 0x36, 0x31, 0x00, 0x47, 0x35, - 0xca, 0x68, 0x31, 0x00, 0x44, 0xd4, 0xb5, 0x67, 0x31, 0x00, 0x46, 0xc2, - 0xc3, 0x66, 0x31, 0x40, 0x8d, 0x01, 0xff, 0xb0, 0x06, 0x44, 0xd4, 0xb5, - 0x6f, 0x31, 0x40, 0x46, 0x36, 0xca, 0x70, 0x31, 0x00, 0x44, 0xbc, 0x7d, - 0x6e, 0x31, 0x40, 0x07, 0xb4, 0x7d, 0x13, 0x46, 0x1f, 0xb9, 0x4b, 0x31, - 0x00, 0x45, 0xa0, 0x9a, 0x31, 0x31, 0xc0, 0x00, 0x45, 0x5b, 0xd7, 0x33, - 0x31, 0x40, 0x45, 0xdc, 0xdd, 0x71, 0x31, 0x00, 0xb0, 0x06, 0x4a, 0x81, - 0xa8, 0x79, 0x31, 0x40, 0x46, 0x27, 0xb9, 0x84, 0x31, 0x00, 0x44, 0xbc, - 0x7d, 0x78, 0x31, 0x40, 0x44, 0x0c, 0xc2, 0x47, 0x31, 0x40, 0xef, 0x53, - 0x31, 0x00, 0xf5, 0x61, 0x31, 0x40, 0x46, 0xc1, 0xc5, 0x4a, 0x31, 0x00, - 0x44, 0xc2, 0xc5, 0x48, 0x31, 0x40, 0xe5, 0x50, 0x31, 0x00, 0x44, 0x7d, - 0xa8, 0x8d, 0x31, 0xc0, 0x00, 0xe5, 0x8e, 0x31, 0x40, 0x09, 0xe0, 0xb3, - 0xfb, 0x03, 0x09, 0xb9, 0xb6, 0x01, 0xff, 0xe1, 0x61, 0x11, 0x80, 0xbd, - 0x03, 0xe5, 0x66, 0x11, 0x80, 0x80, 0x03, 0x46, 0x9a, 0x7b, 0x60, 0x11, - 0x00, 0xe9, 0x75, 0x11, 0x80, 0xaa, 0x02, 0xef, 0x69, 0x11, 0x80, 0xf1, - 0x01, 0x4a, 0x77, 0xa8, 0xa2, 0x11, 0x00, 0xf5, 0x6e, 0x11, 0x80, 0xbe, - 0x01, 0xb7, 0xa5, 0x01, 0xb9, 0x01, 0xff, 0xe1, 0x63, 0x11, 0x80, 0x88, - 0x01, 0xe5, 0x68, 0x11, 0x80, 0x6d, 0xe9, 0x74, 0x11, 0x80, 0x62, 0xef, - 0x6d, 0x11, 0x80, 0x31, 0xf5, 0x72, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, - 0xe1, 0x8e, 0x11, 0x80, 0x20, 0xe5, 0x90, 0x11, 0x80, 0x17, 0xe9, 0x94, - 0x11, 0x00, 0xef, 0xb8, 0xd7, 0x00, 0xf5, 0x93, 0x11, 0x00, 0x42, 0x4d, - 0x00, 0x92, 0x11, 0xc0, 0x00, 0xef, 0x91, 0x11, 0x40, 0xef, 0x8f, 0x11, - 0x40, 0xe5, 0xb7, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0xe1, 0xb2, 0xd7, 0x80, - 0x20, 0x42, 0x22, 0x0a, 0xb4, 0xd7, 0x00, 0xe9, 0x88, 0x11, 0x00, 0xef, - 0x87, 0x11, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x84, 0x11, 0x80, 0x06, 0x42, - 0x22, 0x0a, 0x86, 0x11, 0x40, 0xe5, 0x85, 0x11, 0x40, 0xe5, 0xb3, 0xd7, - 0x40, 0x42, 0x95, 0x07, 0x97, 0x11, 0x40, 0xef, 0x67, 0x11, 0xc0, 0x00, - 0x8d, 0x01, 0xff, 0xef, 0x7d, 0x11, 0x00, 0xf5, 0x7e, 0x11, 0x00, 0x42, - 0x20, 0x20, 0xa5, 0x11, 0x40, 0x8d, 0x04, 0xe5, 0x64, 0x11, 0x40, 0xef, - 0x78, 0x11, 0x00, 0xf5, 0xa4, 0x11, 0x00, 0x42, 0x39, 0x42, 0x79, 0x11, - 0x40, 0xe1, 0x6a, 0x11, 0x80, 0x0d, 0xe5, 0x70, 0x11, 0x80, 0x04, 0xe9, - 0x71, 0x11, 0x40, 0xef, 0x6f, 0x11, 0x40, 0xe5, 0x6b, 0x11, 0x40, 0x8d, - 0x01, 0xff, 0xe1, 0x89, 0x11, 0x80, 0x1b, 0x45, 0x57, 0xdb, 0x8b, 0x11, - 0x00, 0x43, 0x1e, 0xe9, 0xb6, 0xd7, 0x00, 0xf5, 0x8d, 0x11, 0x00, 0x42, - 0x4d, 0x00, 0x8c, 0x11, 0xc0, 0x00, 0xef, 0xb5, 0xd7, 0x40, 0xe5, 0x8a, - 0x11, 0x40, 0x8d, 0x04, 0xe5, 0x6c, 0x11, 0x40, 0xe5, 0x80, 0x11, 0x80, - 0x24, 0xef, 0x82, 0x11, 0x80, 0x19, 0xf5, 0x83, 0x11, 0x00, 0xb9, 0x01, - 0xff, 0xe1, 0xa6, 0x11, 0x80, 0x09, 0xe5, 0x81, 0x11, 0xc0, 0x00, 0xef, - 0xb0, 0xd7, 0x40, 0xe5, 0xa7, 0x11, 0x40, 0x42, 0xed, 0x05, 0xb1, 0xd7, - 0x40, 0xef, 0x7f, 0x11, 0x40, 0x8d, 0x01, 0xff, 0xe1, 0x98, 0x11, 0x80, - 0x3c, 0x42, 0x97, 0x02, 0x9c, 0x11, 0x00, 0xe9, 0xc4, 0xd7, 0x00, 0xef, - 0x9a, 0x11, 0x80, 0x27, 0xf5, 0x9b, 0x11, 0x00, 0xb9, 0x01, 0xff, 0xe1, - 0x99, 0x11, 0x80, 0x11, 0xe5, 0xc0, 0xd7, 0x80, 0x08, 0xef, 0xc2, 0xd7, - 0x00, 0xf5, 0xc3, 0xd7, 0x40, 0xef, 0xbf, 0xd7, 0x40, 0x42, 0xe7, 0x1e, - 0xbd, 0xd7, 0x00, 0xe5, 0xbe, 0xd7, 0x40, 0x42, 0xed, 0x05, 0xc1, 0xd7, - 0x40, 0x44, 0x7d, 0xa8, 0x9d, 0x11, 0x40, 0xef, 0x65, 0x11, 0x80, 0x21, - 0xf5, 0x73, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xe1, 0xb9, 0xd7, 0x00, - 0xe5, 0xbb, 0xd7, 0x80, 0x08, 0xef, 0xbc, 0xd7, 0x00, 0xf5, 0x95, 0x11, - 0x40, 0xef, 0xba, 0xd7, 0x00, 0xf5, 0x96, 0x11, 0x40, 0x8d, 0x01, 0xff, - 0x42, 0x97, 0x02, 0x7c, 0x11, 0x00, 0xef, 0x7a, 0x11, 0x00, 0xf5, 0x7b, - 0x11, 0x40, 0x8d, 0x23, 0xe5, 0x62, 0x11, 0x00, 0x44, 0x7d, 0xa8, 0x9e, - 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xe1, 0xc5, 0xd7, 0x00, 0xe5, 0xc6, - 0xd7, 0x80, 0x08, 0xe9, 0xa1, 0x11, 0x00, 0xf5, 0xa0, 0x11, 0x40, 0xef, - 0x9f, 0x11, 0x40, 0x42, 0x97, 0x02, 0xa3, 0x11, 0x00, 0xef, 0x76, 0x11, - 0x00, 0xf5, 0x77, 0x11, 0x40, 0xa3, 0xd7, 0x07, 0x45, 0xfd, 0x9c, 0xc2, - 0x11, 0x80, 0xb4, 0x07, 0x45, 0x0b, 0xc2, 0xbc, 0x11, 0x80, 0x95, 0x07, - 0xab, 0xb3, 0x06, 0x45, 0xdc, 0xdd, 0xb7, 0x11, 0x80, 0xd3, 0x05, 0x45, - 0x4a, 0xde, 0xab, 0x11, 0x80, 0x8d, 0x05, 0xb0, 0x8e, 0x04, 0x45, 0x94, - 0xdf, 0xaf, 0x11, 0x80, 0xc0, 0x02, 0xb3, 0x89, 0x01, 0xb4, 0x44, 0x02, - 0x4d, 0x00, 0x01, 0xff, 0x49, 0xf9, 0x9c, 0xf9, 0x11, 0x00, 0x46, 0xc7, - 0xc2, 0xf0, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x45, 0xfd, 0x9c, 0xf6, - 0xd7, 0x00, 0xab, 0x1b, 0x45, 0xdc, 0xdd, 0xf5, 0xd7, 0x00, 0x47, 0x35, - 0xca, 0xf2, 0x11, 0x00, 0xb3, 0x01, 0xff, 0x43, 0x3f, 0x3d, 0xf1, 0x11, - 0x00, 0x4a, 0x9b, 0x9a, 0xed, 0x11, 0x40, 0x46, 0x1f, 0xb9, 0xef, 0x11, - 0x00, 0x45, 0xa0, 0x9a, 0xec, 0x11, 0x40, 0x46, 0x20, 0xcc, 0xc0, 0x11, - 0x00, 0x45, 0xc3, 0xc3, 0xae, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xa3, - 0x25, 0x46, 0x9f, 0x9a, 0xca, 0x11, 0x00, 0x45, 0xbb, 0x7d, 0xcf, 0xd7, - 0x00, 0x45, 0x94, 0xdf, 0xcb, 0x11, 0x00, 0x44, 0xd4, 0xb5, 0xd0, 0xd7, - 0x80, 0x06, 0x47, 0x1f, 0xcc, 0xd4, 0xd7, 0x40, 0x47, 0x9e, 0xc3, 0xd1, - 0xd7, 0x40, 0x46, 0xc1, 0xc5, 0xd3, 0xd7, 0x00, 0x44, 0xc2, 0xc5, 0xd2, - 0xd7, 0x40, 0x43, 0x3f, 0x3d, 0xba, 0x11, 0x80, 0x5f, 0x04, 0xce, 0x29, - 0x01, 0xff, 0x45, 0x8f, 0xda, 0xf9, 0xd7, 0x00, 0x45, 0x0b, 0xc2, 0xee, - 0x11, 0x00, 0x46, 0x9f, 0x9a, 0xa9, 0x11, 0x00, 0x45, 0xdc, 0xdd, 0xe0, - 0xd7, 0x00, 0x45, 0x4a, 0xde, 0xff, 0x11, 0x00, 0x45, 0xbb, 0x7d, 0xe6, - 0xd7, 0x00, 0x45, 0x94, 0xdf, 0xd0, 0x11, 0x80, 0x29, 0x44, 0xd4, 0xb5, - 0xbb, 0x11, 0x80, 0x13, 0x46, 0xc2, 0xc3, 0xcd, 0xd7, 0x80, 0x06, 0x48, - 0xc5, 0xc2, 0xee, 0x11, 0x40, 0x46, 0x21, 0xce, 0xce, 0xd7, 0x40, 0x8d, - 0x01, 0xff, 0x46, 0x9f, 0x9a, 0xec, 0xd7, 0x00, 0x46, 0xc2, 0xc3, 0xed, - 0xd7, 0x40, 0x48, 0x1d, 0xb9, 0xd7, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0xa3, - 0x3d, 0x45, 0xfd, 0x9c, 0xf2, 0xd7, 0x00, 0xab, 0x29, 0x45, 0xdc, 0xdd, - 0xea, 0xd7, 0x00, 0xb0, 0x15, 0x45, 0x94, 0xdf, 0xe9, 0x11, 0x00, 0xb4, - 0x01, 0xff, 0x46, 0x20, 0xcc, 0xf1, 0xd7, 0x00, 0x45, 0xc3, 0xc3, 0xe8, - 0x11, 0x40, 0x46, 0x36, 0xca, 0xee, 0xd7, 0x00, 0x44, 0xbc, 0x7d, 0xea, - 0x11, 0x40, 0x4c, 0xb4, 0x7d, 0xeb, 0xd7, 0x00, 0x45, 0xa0, 0x9a, 0xe7, - 0x11, 0x40, 0x46, 0xc1, 0xc5, 0xf0, 0xd7, 0x00, 0x44, 0xc2, 0xc5, 0xef, - 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x45, 0xfd, 0x9c, 0xb6, 0x11, 0x00, 0xab, - 0x98, 0x01, 0x45, 0xdc, 0xdd, 0xb1, 0x11, 0x80, 0x7c, 0x45, 0x4a, 0xde, - 0xcd, 0x11, 0x00, 0xb0, 0x46, 0xb3, 0x2d, 0xb4, 0x18, 0x02, 0x4d, 0x00, - 0x01, 0xff, 0x49, 0xf9, 0x9c, 0xd9, 0x11, 0x80, 0x06, 0x46, 0xc7, 0xc2, - 0xdb, 0xd7, 0x40, 0x46, 0x15, 0xce, 0xdc, 0xd7, 0x40, 0x46, 0x20, 0xcc, - 0xb4, 0x11, 0x00, 0x45, 0xc3, 0xc3, 0xce, 0x11, 0xc0, 0x00, 0x46, 0x15, - 0xce, 0xcf, 0x11, 0x40, 0x43, 0x3f, 0x3d, 0xb3, 0x11, 0x00, 0x04, 0xce, - 0x29, 0x01, 0xff, 0x46, 0x9f, 0x9a, 0xd5, 0xd7, 0x00, 0x44, 0xd4, 0xb5, - 0xd6, 0x11, 0x40, 0x46, 0x36, 0xca, 0xd7, 0x11, 0x00, 0x46, 0x27, 0xb9, - 0xb5, 0x11, 0x00, 0x44, 0xbc, 0x7d, 0xb2, 0x11, 0xc0, 0x00, 0x8d, 0x01, - 0xff, 0x45, 0xfd, 0x9c, 0xd4, 0x11, 0x00, 0x47, 0x26, 0xb9, 0xda, 0xd7, - 0x00, 0x44, 0xd4, 0xb5, 0xd3, 0x11, 0x00, 0x46, 0xc2, 0xc3, 0xd9, 0xd7, - 0x40, 0x8d, 0x01, 0xff, 0x45, 0xfd, 0x9c, 0xd8, 0xd7, 0x00, 0x46, 0x9f, - 0x9a, 0xd1, 0x11, 0x00, 0x44, 0xd4, 0xb5, 0xd2, 0x11, 0x40, 0x4c, 0xb4, - 0x7d, 0xd5, 0x11, 0x00, 0x46, 0x1f, 0xb9, 0xd8, 0x11, 0x00, 0x45, 0xa0, - 0x9a, 0xb0, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x45, 0xfd, 0x9c, 0xd6, - 0xd7, 0x00, 0x44, 0xd4, 0xb5, 0xcc, 0x11, 0x40, 0x46, 0x36, 0xca, 0xeb, - 0x11, 0x80, 0x66, 0x46, 0x27, 0xb9, 0xc1, 0x11, 0x80, 0x4a, 0x44, 0xbc, - 0x7d, 0xb8, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xa3, 0x32, 0x45, 0xfd, - 0x9c, 0xe5, 0x11, 0x00, 0x45, 0xdc, 0xdd, 0xe5, 0xd7, 0x00, 0x47, 0x26, - 0xb9, 0xe4, 0x11, 0x00, 0x45, 0x94, 0xdf, 0xe3, 0x11, 0x80, 0x13, 0x44, - 0xd4, 0xb5, 0xb9, 0x11, 0x80, 0x06, 0x46, 0xc2, 0xc3, 0xe3, 0xd7, 0x40, - 0x47, 0xc1, 0xc3, 0xe7, 0xd7, 0x40, 0x48, 0x25, 0xb9, 0xe4, 0xd7, 0x40, - 0x46, 0xc1, 0xc5, 0xe9, 0xd7, 0x00, 0x44, 0xc2, 0xc5, 0xe8, 0xd7, 0x40, - 0x8d, 0x01, 0xff, 0x45, 0xbb, 0x7d, 0xf3, 0x11, 0x00, 0x44, 0xd4, 0xb5, - 0xfa, 0xd7, 0x00, 0x47, 0x1f, 0xcc, 0xfb, 0xd7, 0x40, 0x8d, 0x01, 0xff, - 0x4d, 0xb3, 0x7d, 0xf4, 0xd7, 0x00, 0x45, 0xbb, 0x7d, 0xf3, 0xd7, 0x40, - 0x8d, 0x01, 0xff, 0xa3, 0x2d, 0x45, 0xfd, 0x9c, 0xad, 0x11, 0x00, 0x46, - 0x9f, 0x9a, 0xc5, 0x11, 0x00, 0x47, 0x35, 0xca, 0xc8, 0x11, 0x00, 0x45, - 0x94, 0xdf, 0xcb, 0xd7, 0x00, 0x44, 0xd4, 0xb5, 0xc7, 0x11, 0x00, 0xb4, - 0x01, 0xff, 0x46, 0x20, 0xcc, 0xc9, 0x11, 0x00, 0x45, 0xc3, 0xc3, 0xc6, - 0x11, 0x40, 0x46, 0xc1, 0xc5, 0xcc, 0xd7, 0x00, 0x44, 0xc2, 0xc5, 0xac, - 0x11, 0x40, 0x8d, 0x01, 0xff, 0xa3, 0x47, 0x45, 0xfd, 0x9c, 0xe1, 0x11, - 0x00, 0x46, 0x9f, 0x9a, 0xda, 0x11, 0x00, 0x45, 0x4a, 0xde, 0xde, 0xd7, - 0x00, 0xb0, 0x20, 0x45, 0x94, 0xdf, 0xdb, 0x11, 0x00, 0xb3, 0x01, 0xff, - 0x43, 0x3f, 0x3d, 0xdd, 0x11, 0x00, 0x04, 0xce, 0x29, 0x01, 0xff, 0x45, - 0x4a, 0xde, 0xdf, 0xd7, 0x00, 0x44, 0xd4, 0xb5, 0xde, 0x11, 0x40, 0x46, - 0x36, 0xca, 0xdf, 0x11, 0x00, 0x44, 0xbc, 0x7d, 0xdc, 0x11, 0xc0, 0x00, - 0x45, 0x5b, 0xd7, 0xe1, 0xd7, 0x40, 0x46, 0xc1, 0xc5, 0xe0, 0x11, 0x00, - 0x44, 0xc2, 0xc5, 0xe2, 0xd7, 0x40, 0x07, 0xb4, 0x7d, 0x41, 0x46, 0x1f, - 0xb9, 0xbf, 0x11, 0x00, 0x45, 0xa0, 0x9a, 0xa8, 0x11, 0xc0, 0x00, 0x8d, - 0x01, 0xff, 0x47, 0xc0, 0xc5, 0xfc, 0x11, 0x00, 0x45, 0xfd, 0x9c, 0xfe, - 0x11, 0x00, 0x47, 0x1e, 0xb9, 0xfd, 0x11, 0x00, 0x45, 0x4a, 0xde, 0xfa, - 0x11, 0x00, 0x45, 0xbb, 0x7d, 0xfb, 0x11, 0x00, 0x45, 0x94, 0xdf, 0xc3, - 0x11, 0x00, 0x44, 0xd4, 0xb5, 0xaa, 0x11, 0xc0, 0x00, 0x47, 0x9e, 0xc3, - 0xc4, 0x11, 0x40, 0x45, 0xdc, 0xdd, 0xe2, 0x11, 0x00, 0xb0, 0x06, 0x45, - 0x94, 0xdf, 0xdd, 0xd7, 0x40, 0x46, 0x27, 0xb9, 0xf4, 0x11, 0x00, 0x44, - 0xbc, 0x7d, 0xe6, 0x11, 0x40, 0x8d, 0x01, 0xff, 0xab, 0x06, 0x4b, 0x9a, - 0x9a, 0xed, 0x11, 0x40, 0x46, 0x1f, 0xb9, 0xef, 0x11, 0x00, 0x45, 0xa0, - 0x9a, 0xec, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x45, 0xdc, 0xdd, 0xf7, 0x11, - 0x00, 0x45, 0x4a, 0xde, 0xf5, 0x11, 0x00, 0x45, 0xbb, 0x7d, 0xf8, 0x11, - 0x00, 0x45, 0x94, 0xdf, 0xf6, 0x11, 0x40, 0x46, 0xc1, 0xc5, 0xbe, 0x11, - 0x00, 0x44, 0xc2, 0xc5, 0xbd, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x45, - 0xbb, 0x7d, 0xf7, 0xd7, 0x00, 0x4a, 0x81, 0xa8, 0xf8, 0xd7, 0x40, 0xa3, - 0x83, 0x06, 0x46, 0x9a, 0x7b, 0x5f, 0x11, 0x00, 0x45, 0xfd, 0x9c, 0x12, - 0x11, 0x80, 0xef, 0x05, 0x45, 0x0b, 0xc2, 0x0b, 0x11, 0x80, 0x95, 0x05, - 0xab, 0xdb, 0x04, 0x45, 0xdc, 0xdd, 0x06, 0x11, 0x80, 0xb8, 0x04, 0x45, - 0x4a, 0xde, 0x02, 0x11, 0x80, 0x89, 0x04, 0xb0, 0xf0, 0x02, 0x45, 0x94, - 0xdf, 0x05, 0x11, 0x80, 0x8e, 0x02, 0xb3, 0x47, 0xb4, 0x11, 0x02, 0x4d, - 0x00, 0x01, 0xff, 0x49, 0xf9, 0x9c, 0x59, 0x11, 0x00, 0x46, 0xc7, 0xc2, - 0x4c, 0x11, 0x40, 0x46, 0x20, 0xcc, 0x10, 0x11, 0x00, 0x45, 0xc3, 0xc3, - 0x03, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x45, 0x8f, 0xda, 0x63, 0xa9, - 0x00, 0x46, 0x9f, 0x9a, 0x17, 0x11, 0x00, 0x45, 0xdc, 0xdd, 0x60, 0xa9, - 0x00, 0x45, 0xbb, 0x7d, 0x61, 0xa9, 0x00, 0x45, 0x94, 0xdf, 0x5e, 0x11, - 0x00, 0x44, 0xd4, 0xb5, 0x62, 0xa9, 0x40, 0x43, 0x3f, 0x3d, 0x09, 0x11, - 0x80, 0x57, 0x04, 0xce, 0x29, 0x01, 0xff, 0x45, 0x8f, 0xda, 0x0d, 0x11, - 0x80, 0x45, 0x45, 0xfd, 0x9c, 0x58, 0x11, 0x00, 0x45, 0x0b, 0xc2, 0x47, - 0x11, 0x00, 0x46, 0x9f, 0x9a, 0x01, 0x11, 0x00, 0x45, 0x4a, 0xde, 0x14, - 0x11, 0x00, 0x45, 0xbb, 0x7d, 0x08, 0x11, 0x00, 0x45, 0x94, 0xdf, 0x19, - 0x11, 0x00, 0x44, 0xd4, 0xb5, 0x0a, 0x11, 0x80, 0x14, 0xb4, 0x06, 0x4b, - 0xf7, 0x9c, 0x7c, 0xa9, 0x40, 0x46, 0x20, 0xcc, 0x79, 0xa9, 0x00, 0x45, - 0xc3, 0xc3, 0x04, 0x11, 0x40, 0x46, 0x21, 0xce, 0x75, 0xa9, 0x40, 0x46, - 0x15, 0xce, 0x78, 0xa9, 0x40, 0x8d, 0x01, 0xff, 0xa3, 0x56, 0x45, 0xfd, - 0x9c, 0x3b, 0x11, 0x00, 0x45, 0x0b, 0xc2, 0x35, 0x11, 0x00, 0xab, 0x3c, - 0x45, 0xdc, 0xdd, 0x31, 0x11, 0x00, 0x45, 0x4a, 0xde, 0x2e, 0x11, 0x00, - 0xb0, 0x1b, 0x45, 0x94, 0xdf, 0x30, 0x11, 0x00, 0x49, 0xcf, 0xb5, 0x34, - 0x11, 0x00, 0xb4, 0x01, 0xff, 0x46, 0x20, 0xcc, 0x39, 0x11, 0x00, 0x45, - 0xc3, 0xc3, 0x2f, 0x11, 0x40, 0x46, 0x27, 0xb9, 0x3a, 0x11, 0x00, 0x44, - 0xbc, 0x7d, 0x32, 0x11, 0xc0, 0x00, 0x47, 0x9e, 0xc3, 0x33, 0x11, 0x40, - 0x46, 0x1f, 0xb9, 0x38, 0x11, 0x00, 0x45, 0xa0, 0x9a, 0x2d, 0x11, 0x40, - 0x46, 0xc1, 0xc5, 0x37, 0x11, 0x00, 0x44, 0xc2, 0xc5, 0x36, 0x11, 0x40, - 0x8d, 0x01, 0xff, 0x45, 0x8f, 0xda, 0x6d, 0xa9, 0x00, 0x45, 0xfd, 0x9c, - 0x1a, 0x11, 0x00, 0xab, 0x37, 0x45, 0xdc, 0xdd, 0x68, 0xa9, 0x00, 0x45, - 0x4a, 0xde, 0x18, 0x11, 0x00, 0x45, 0xbb, 0x7d, 0x69, 0xa9, 0x00, 0xb3, - 0x06, 0x46, 0xc2, 0xc3, 0x66, 0xa9, 0x40, 0x43, 0x3f, 0x3d, 0x6c, 0xa9, - 0x00, 0x04, 0xce, 0x29, 0x01, 0xff, 0x46, 0x9f, 0x9a, 0x65, 0xa9, 0x00, - 0x45, 0xbb, 0x7d, 0x6a, 0xa9, 0x00, 0x46, 0xc2, 0xc3, 0x67, 0xa9, 0x40, - 0x4c, 0xb4, 0x7d, 0x6b, 0xa9, 0x00, 0x46, 0x1f, 0xb9, 0x6e, 0xa9, 0x00, - 0x45, 0xa0, 0x9a, 0x64, 0xa9, 0x40, 0x46, 0x36, 0xca, 0x40, 0x11, 0x00, - 0x46, 0x27, 0xb9, 0x11, 0x11, 0x80, 0x7a, 0x44, 0xbc, 0x7d, 0x07, 0x11, - 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xa3, 0x62, 0x45, 0xfd, 0x9c, 0x74, 0xa9, - 0x00, 0xab, 0x4e, 0x45, 0x4a, 0xde, 0x1f, 0x11, 0x00, 0x47, 0x26, 0xb9, - 0x2a, 0x11, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x46, 0x20, 0xcc, 0x29, - 0x11, 0x00, 0x45, 0xc3, 0xc3, 0x20, 0x11, 0x40, 0x43, 0x3f, 0x3d, 0x21, - 0x11, 0x80, 0x06, 0x48, 0xd0, 0xb5, 0x25, 0x11, 0x40, 0x8d, 0x01, 0xff, - 0x45, 0x8f, 0xda, 0x26, 0x11, 0x00, 0x46, 0x9f, 0x9a, 0x22, 0x11, 0x00, - 0x45, 0xbb, 0x7d, 0x24, 0x11, 0x00, 0xb4, 0x01, 0xff, 0x46, 0x20, 0xcc, - 0x72, 0xa9, 0x00, 0x45, 0xc3, 0xc3, 0x23, 0x11, 0x40, 0x46, 0x1f, 0xb9, - 0x73, 0xa9, 0x00, 0x45, 0xa0, 0x9a, 0x1e, 0x11, 0x40, 0x46, 0xc1, 0xc5, - 0x28, 0x11, 0x00, 0x44, 0xc2, 0xc5, 0x27, 0x11, 0x40, 0x8d, 0x01, 0xff, - 0x45, 0xfd, 0x9c, 0x7a, 0xa9, 0x00, 0x45, 0xbb, 0x7d, 0x56, 0x11, 0x40, - 0x8d, 0x01, 0xff, 0x45, 0x8f, 0xda, 0x5c, 0x11, 0x00, 0x45, 0xfd, 0x9c, - 0x5d, 0x11, 0x00, 0x46, 0x9f, 0x9a, 0x13, 0x11, 0x00, 0x45, 0xbb, 0x7d, - 0x16, 0x11, 0x00, 0x44, 0xd4, 0xb5, 0x5b, 0x11, 0x00, 0x46, 0xc2, 0xc3, - 0x15, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x46, 0x9f, 0x9a, 0x6f, 0xa9, 0x00, - 0x45, 0xbb, 0x7d, 0x1c, 0x11, 0x00, 0x44, 0xd4, 0xb5, 0x71, 0xa9, 0x00, - 0x46, 0xc2, 0xc3, 0x70, 0xa9, 0x40, 0x07, 0xb4, 0x7d, 0x13, 0x46, 0x1f, - 0xb9, 0x0f, 0x11, 0x00, 0x45, 0xa0, 0x9a, 0x00, 0x11, 0xc0, 0x00, 0x47, - 0xc1, 0xc3, 0x5a, 0x11, 0x40, 0x45, 0xdc, 0xdd, 0x1d, 0x11, 0x00, 0xb0, - 0x0c, 0x45, 0x94, 0xdf, 0x1b, 0x11, 0x00, 0x4a, 0x81, 0xa8, 0x2c, 0x11, - 0x40, 0x46, 0x27, 0xb9, 0x57, 0x11, 0x00, 0x44, 0xbc, 0x7d, 0x2b, 0x11, - 0x40, 0x8d, 0x01, 0xff, 0xa3, 0x41, 0x45, 0xfd, 0x9c, 0x77, 0xa9, 0x00, - 0x46, 0x9f, 0x9a, 0x41, 0x11, 0x00, 0x45, 0xdc, 0xdd, 0x43, 0x11, 0x00, - 0xb0, 0x1b, 0x45, 0x94, 0xdf, 0x76, 0xa9, 0x00, 0x44, 0xd4, 0xb5, 0x45, - 0x11, 0x00, 0xb4, 0x01, 0xff, 0x46, 0x20, 0xcc, 0x4a, 0x11, 0x00, 0x45, - 0xc3, 0xc3, 0x42, 0x11, 0x40, 0x46, 0x36, 0xca, 0x46, 0x11, 0x00, 0x46, - 0x27, 0xb9, 0x4b, 0x11, 0x00, 0x44, 0xbc, 0x7d, 0x44, 0x11, 0x40, 0x46, - 0xc1, 0xc5, 0x49, 0x11, 0x00, 0x44, 0xc2, 0xc5, 0x48, 0x11, 0x40, 0x45, - 0x5b, 0xd7, 0x7b, 0xa9, 0x40, 0x0a, 0x79, 0xa1, 0x54, 0x02, 0x49, 0x00, - 0x0d, 0x44, 0xc2, 0xc5, 0x0c, 0x11, 0xc0, 0x00, 0x46, 0x1b, 0xce, 0x4d, - 0x11, 0x40, 0x44, 0xc3, 0xc5, 0x0e, 0x11, 0x80, 0x2d, 0x05, 0xb6, 0xe0, - 0x01, 0xff, 0xa3, 0x1a, 0xb3, 0x01, 0xff, 0x43, 0x3f, 0x3d, 0x3c, 0x11, - 0x00, 0x04, 0xce, 0x29, 0x01, 0xff, 0x45, 0x8f, 0xda, 0x4f, 0x11, 0x00, - 0x44, 0xd4, 0xb5, 0x3d, 0x11, 0x40, 0x46, 0xc1, 0xc5, 0x54, 0x11, 0x00, - 0x44, 0xc2, 0xc5, 0x4e, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x45, 0xfd, 0x9c, - 0x53, 0x11, 0x00, 0x47, 0x1e, 0xb9, 0x52, 0x11, 0x40, 0xa3, 0x1a, 0xb3, - 0x01, 0xff, 0x43, 0x3f, 0x3d, 0x3e, 0x11, 0x00, 0x04, 0xce, 0x29, 0x01, - 0xff, 0x45, 0x8f, 0xda, 0x51, 0x11, 0x00, 0x44, 0xd4, 0xb5, 0x3f, 0x11, - 0x40, 0x46, 0xc1, 0xc5, 0x55, 0x11, 0x00, 0x44, 0xc2, 0xc5, 0x50, 0x11, - 0x40, 0x0c, 0x0c, 0x84, 0x14, 0x02, 0x16, 0x00, 0x06, 0x45, 0x6e, 0xc3, - 0x1d, 0xf9, 0x41, 0xe7, 0x5c, 0xf4, 0x01, 0x42, 0x3f, 0x06, 0x3e, 0xf9, - 0x41, 0x5a, 0xac, 0x1c, 0x1e, 0xf9, 0x01, 0x58, 0xb7, 0x25, 0xf0, 0xfa, - 0x41, 0x46, 0x01, 0xd0, 0x54, 0xf3, 0x01, 0x43, 0xd0, 0x33, 0x28, 0xf5, - 0x81, 0x0d, 0xb3, 0x01, 0xff, 0xe1, 0xac, 0xfa, 0x01, 0x48, 0x65, 0xc1, - 0x39, 0xf4, 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0x99, 0xd4, 0x92, - 0x26, 0x00, 0x46, 0x47, 0xd5, 0x2d, 0x26, 0x00, 0x46, 0xbb, 0xd6, 0xe0, - 0xf6, 0x41, 0x4c, 0xba, 0x0f, 0xed, 0xff, 0x00, 0x4f, 0xae, 0x0a, 0xec, - 0xff, 0x00, 0x54, 0x88, 0x3d, 0xe8, 0xff, 0x00, 0x07, 0x48, 0xc7, 0xda, - 0x02, 0x0c, 0xe4, 0x1d, 0xc9, 0x02, 0x08, 0x9d, 0xbd, 0x2c, 0x04, 0xc3, - 0x00, 0x1c, 0x05, 0xc8, 0x00, 0x0c, 0x4d, 0x59, 0x1e, 0xea, 0xff, 0x00, - 0x4c, 0xaa, 0x0f, 0xee, 0xff, 0x40, 0x4f, 0xe5, 0x62, 0x63, 0xff, 0x00, - 0x4b, 0xb8, 0x02, 0xeb, 0xff, 0x40, 0x4f, 0xe5, 0x62, 0x62, 0xff, 0x00, - 0x4b, 0xb8, 0x02, 0xe9, 0xff, 0x40, 0x80, 0x06, 0x5e, 0x9f, 0x10, 0x70, - 0xff, 0x40, 0x07, 0xf1, 0x04, 0x12, 0x4a, 0xb2, 0x40, 0x65, 0xff, 0x00, - 0x56, 0x06, 0x33, 0x9f, 0xff, 0x00, 0x51, 0x0b, 0x33, 0x9e, 0xff, 0x40, - 0xe1, 0x71, 0xff, 0x00, 0xe5, 0x74, 0xff, 0x00, 0xa8, 0xdc, 0x01, 0xe9, - 0x72, 0xff, 0x00, 0xab, 0xc1, 0x01, 0xad, 0xaa, 0x01, 0xee, 0x9d, 0xff, - 0x80, 0x90, 0x01, 0xef, 0x75, 0xff, 0x00, 0xb2, 0x76, 0xb3, 0x33, 0xb4, - 0x1d, 0xf5, 0x73, 0xff, 0x00, 0xb7, 0x0f, 0xb9, 0x01, 0xff, 0xe1, 0x94, - 0xff, 0x00, 0xef, 0x96, 0xff, 0x00, 0xf5, 0x95, 0xff, 0x40, 0xe1, 0x9c, - 0xff, 0x00, 0xef, 0x66, 0xff, 0x40, 0xe1, 0x80, 0xff, 0x00, 0xe5, 0x83, - 0xff, 0x00, 0xe9, 0x81, 0xff, 0x00, 0xef, 0x84, 0xff, 0x00, 0xf5, 0x82, - 0xff, 0x40, 0xe1, 0x7b, 0xff, 0x00, 0xe5, 0x7e, 0xff, 0x00, 0xe9, 0x7c, - 0xff, 0x00, 0x05, 0x3d, 0x06, 0x08, 0xef, 0x7f, 0xff, 0x00, 0xf5, 0x7d, - 0xff, 0x40, 0xe1, 0x67, 0xff, 0x00, 0xe5, 0x6a, 0xff, 0x00, 0xe9, 0x68, - 0xff, 0x00, 0xef, 0x6b, 0xff, 0x00, 0x42, 0x5c, 0x01, 0x6f, 0xff, 0x00, - 0xf5, 0x69, 0xff, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x6c, 0xff, 0x00, 0xef, - 0x6e, 0xff, 0x00, 0xf5, 0x6d, 0xff, 0x40, 0xe1, 0x97, 0xff, 0x00, 0xe5, - 0x9a, 0xff, 0x00, 0xe9, 0x98, 0xff, 0x00, 0xef, 0x9b, 0xff, 0x00, 0xf5, - 0x99, 0xff, 0x40, 0xe1, 0x85, 0xff, 0x00, 0xe5, 0x88, 0xff, 0x00, 0xe9, - 0x86, 0xff, 0x00, 0xef, 0x89, 0xff, 0x00, 0xf5, 0x87, 0xff, 0x40, 0xe1, - 0x8f, 0xff, 0x00, 0xe5, 0x92, 0xff, 0x00, 0xe9, 0x90, 0xff, 0x00, 0xef, - 0x93, 0xff, 0x00, 0xf5, 0x91, 0xff, 0x40, 0xe1, 0x76, 0xff, 0x00, 0xe5, - 0x79, 0xff, 0x00, 0xe9, 0x77, 0xff, 0x00, 0xef, 0x7a, 0xff, 0x00, 0xf5, - 0x78, 0xff, 0x40, 0xe1, 0x8a, 0xff, 0x00, 0xe5, 0x8d, 0xff, 0x00, 0xe9, - 0x8b, 0xff, 0x00, 0xef, 0x8e, 0xff, 0x00, 0xf5, 0x8c, 0xff, 0x40, 0x45, - 0x18, 0x04, 0x64, 0xff, 0x00, 0x49, 0xa0, 0x14, 0x61, 0xff, 0x40, 0x46, - 0x9a, 0x7b, 0xa0, 0xff, 0x00, 0x07, 0xf1, 0x04, 0x01, 0xff, 0xe1, 0xc2, - 0xff, 0x80, 0xae, 0x02, 0xa3, 0x9f, 0x02, 0xe5, 0xc7, 0xff, 0x80, 0x91, - 0x02, 0x45, 0xfd, 0x9c, 0xbe, 0xff, 0x00, 0xe9, 0xdc, 0xff, 0x80, 0xff, - 0x01, 0xab, 0xe9, 0x01, 0x45, 0xdc, 0xdd, 0xb1, 0xff, 0x00, 0x45, 0x4a, - 0xde, 0xa4, 0xff, 0x80, 0xcc, 0x01, 0xef, 0xcc, 0xff, 0x80, 0xc2, 0x01, - 0xb0, 0xac, 0x01, 0x45, 0x94, 0xdf, 0xa9, 0xff, 0x80, 0x76, 0xb3, 0x4b, - 0xb4, 0x3d, 0xf5, 0xd3, 0xff, 0x00, 0xb7, 0x21, 0xb9, 0x01, 0xff, 0xe1, - 0xc4, 0xff, 0x80, 0x15, 0xe5, 0xcb, 0xff, 0x80, 0x0c, 0xe9, 0xdb, 0xff, - 0x00, 0xef, 0xd2, 0xff, 0x00, 0xf5, 0xd7, 0xff, 0x40, 0xef, 0xca, 0xff, - 0x40, 0xe5, 0xc5, 0xff, 0x40, 0xe1, 0xcd, 0xff, 0x80, 0x0d, 0xe5, 0xd5, - 0xff, 0x80, 0x04, 0xe9, 0xd6, 0xff, 0x40, 0xef, 0xd4, 0xff, 0x40, 0xe5, - 0xce, 0xff, 0x40, 0x46, 0x20, 0xcc, 0xbc, 0xff, 0x00, 0x45, 0xc3, 0xc3, - 0xa7, 0xff, 0x40, 0x43, 0x3f, 0x3d, 0xb5, 0xff, 0x00, 0x04, 0xce, 0x29, - 0x01, 0xff, 0x45, 0x8f, 0xda, 0xb9, 0xff, 0x00, 0x46, 0x9f, 0x9a, 0xa2, - 0xff, 0x00, 0x45, 0xbb, 0x7d, 0xb3, 0xff, 0x00, 0x44, 0xd4, 0xb5, 0xb6, - 0xff, 0x00, 0x46, 0xc2, 0xc3, 0xa8, 0xff, 0x40, 0x8d, 0x01, 0xff, 0x45, - 0xfd, 0x9c, 0xb0, 0xff, 0x00, 0x46, 0x9f, 0x9a, 0xaa, 0xff, 0x00, 0x45, - 0xdc, 0xdd, 0xab, 0xff, 0x00, 0xb0, 0x0c, 0x44, 0xd4, 0xb5, 0xad, 0xff, - 0x00, 0x47, 0x1f, 0xcc, 0xae, 0xff, 0x40, 0x46, 0x27, 0xb9, 0xaf, 0xff, - 0x00, 0x44, 0xbc, 0x7d, 0xac, 0xff, 0x40, 0x46, 0x27, 0xb9, 0xbd, 0xff, - 0x00, 0x44, 0xbc, 0x7d, 0xb2, 0xff, 0xc0, 0x00, 0x45, 0x5b, 0xd7, 0xb4, - 0xff, 0x40, 0xe5, 0xcf, 0xff, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x8f, 0xda, - 0xa5, 0xff, 0x00, 0x45, 0xfd, 0x9c, 0xa6, 0xff, 0x40, 0x46, 0x1f, 0xb9, - 0xbb, 0xff, 0x00, 0x45, 0xa0, 0x9a, 0xa1, 0xff, 0xc0, 0x00, 0x45, 0x5b, - 0xd7, 0xa3, 0xff, 0x40, 0x44, 0x0c, 0xc2, 0xb7, 0xff, 0x40, 0xef, 0xc6, - 0xff, 0x00, 0xf5, 0xda, 0xff, 0x40, 0x46, 0xc1, 0xc5, 0xba, 0xff, 0x00, - 0x44, 0xc2, 0xc5, 0xb8, 0xff, 0x40, 0xe5, 0xc3, 0xff, 0x40, 0x80, 0x06, - 0x43, 0xe4, 0x24, 0x87, 0xf4, 0x41, 0x44, 0x99, 0xd4, 0xae, 0xfa, 0x01, - 0x45, 0x4d, 0x47, 0x0a, 0x20, 0x40, 0xa1, 0xdf, 0x3f, 0xa5, 0x83, 0x36, - 0x44, 0x05, 0x76, 0x7b, 0xf4, 0x01, 0xa9, 0xda, 0x35, 0xac, 0xa4, 0x30, - 0xaf, 0xbf, 0x2e, 0xb2, 0xe0, 0x0b, 0xb5, 0x01, 0xff, 0x02, 0x17, 0x00, - 0xcc, 0x0b, 0xa9, 0xbd, 0x0b, 0x07, 0xf7, 0xc7, 0x82, 0x07, 0x0c, 0x14, - 0x8b, 0xf8, 0x03, 0x07, 0x1c, 0xcb, 0x01, 0xff, 0xa1, 0xe4, 0x03, 0x06, - 0xf4, 0x05, 0x9d, 0x03, 0x48, 0xd5, 0xbb, 0x74, 0x0a, 0x00, 0x43, 0xa3, - 0x09, 0x72, 0x0a, 0x00, 0x07, 0xf1, 0x04, 0x6f, 0x05, 0xdb, 0x02, 0x3d, - 0x45, 0x6b, 0xe0, 0x70, 0x0a, 0x00, 0x43, 0x70, 0x00, 0x73, 0x0a, 0x00, - 0x0b, 0x5b, 0x70, 0x01, 0xff, 0xa1, 0x1e, 0x42, 0x27, 0x01, 0x47, 0x0a, - 0x00, 0xe9, 0x3f, 0x0a, 0x80, 0x0f, 0x42, 0x99, 0x04, 0x4b, 0x0a, 0x00, - 0xf5, 0x41, 0x0a, 0xc0, 0x00, 0xf5, 0x42, 0x0a, 0x40, 0xe9, 0x40, 0x0a, - 0x40, 0xe1, 0x3e, 0x0a, 0x00, 0xe9, 0x48, 0x0a, 0x00, 0xf5, 0x4c, 0x0a, - 0x40, 0x4a, 0xe5, 0x9e, 0x01, 0x0a, 0x00, 0x45, 0xd4, 0x64, 0x02, 0x0a, - 0x00, 0x45, 0xab, 0x3a, 0x3c, 0x0a, 0x00, 0x45, 0xd9, 0xe0, 0x51, 0x0a, - 0x00, 0x02, 0x02, 0x00, 0x06, 0x46, 0xd3, 0xd6, 0x75, 0x0a, 0x40, 0x44, - 0x49, 0x21, 0x4d, 0x0a, 0x00, 0x45, 0x69, 0x46, 0x03, 0x0a, 0x40, 0xe1, - 0x05, 0x0a, 0x80, 0x8c, 0x02, 0xa2, 0xff, 0x01, 0xa3, 0xf2, 0x01, 0xa4, - 0xd9, 0x01, 0x42, 0x27, 0x01, 0x0f, 0x0a, 0x00, 0x42, 0xed, 0x06, 0x5e, - 0x0a, 0x00, 0xa7, 0xb9, 0x01, 0x42, 0x22, 0x00, 0x39, 0x0a, 0x00, 0xe9, - 0x07, 0x0a, 0x80, 0xa9, 0x01, 0xaa, 0x9c, 0x01, 0xab, 0x88, 0x01, 0xac, - 0x7c, 0x42, 0x6c, 0x00, 0x2e, 0x0a, 0x00, 0xae, 0x5e, 0x42, 0x99, 0x04, - 0x13, 0x0a, 0x00, 0xb0, 0x4c, 0xb2, 0x40, 0xb3, 0x34, 0xb4, 0x1b, 0xf5, - 0x09, 0x0a, 0x80, 0x12, 0x42, 0xb4, 0x09, 0x35, 0x0a, 0x00, 0x42, 0x20, - 0x20, 0x2f, 0x0a, 0x00, 0x42, 0x59, 0x00, 0x5b, 0x0a, 0x40, 0xf5, 0x0a, - 0x0a, 0x40, 0xe1, 0x24, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x25, 0x0a, 0x00, - 0xb4, 0x01, 0xff, 0xe1, 0x1f, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x20, 0x0a, - 0x40, 0xe1, 0x38, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x36, 0x0a, 0x40, 0xe1, - 0x30, 0x0a, 0x00, 0x42, 0x71, 0x00, 0x5c, 0x0a, 0x40, 0xe1, 0x2a, 0x0a, - 0x00, 0x42, 0x22, 0x00, 0x2b, 0x0a, 0x40, 0xe1, 0x28, 0x0a, 0x00, 0x42, - 0x24, 0x02, 0x19, 0x0a, 0x00, 0x42, 0x2f, 0x04, 0x23, 0x0a, 0x00, 0x42, - 0x20, 0x20, 0x1e, 0x0a, 0x40, 0xe1, 0x32, 0x0a, 0x00, 0x42, 0x74, 0x00, - 0x33, 0x0a, 0x40, 0xe1, 0x15, 0x0a, 0x00, 0xa8, 0x01, 0xff, 0xe1, 0x16, - 0x0a, 0x00, 0x42, 0x22, 0x00, 0x59, 0x0a, 0x40, 0xe1, 0x1c, 0x0a, 0x00, - 0x42, 0x22, 0x00, 0x1d, 0x0a, 0x40, 0xe9, 0x08, 0x0a, 0x40, 0xe1, 0x17, - 0x0a, 0x00, 0xa8, 0x01, 0xff, 0xe1, 0x18, 0x0a, 0x00, 0x42, 0x22, 0x00, - 0x5a, 0x0a, 0x40, 0xe1, 0x26, 0x0a, 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, - 0x27, 0x0a, 0x40, 0xe1, 0x21, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x22, 0x0a, - 0x40, 0xe1, 0x1a, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x1b, 0x0a, 0x40, 0xe1, - 0x2c, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x2d, 0x0a, 0x40, 0xe1, 0x06, 0x0a, - 0x00, 0xe9, 0x10, 0x0a, 0x00, 0xf5, 0x14, 0x0a, 0x40, 0x45, 0xd1, 0x09, - 0x6e, 0x0a, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x6f, 0x0a, 0x00, 0x43, - 0xcd, 0x09, 0x67, 0x0a, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, - 0x66, 0x0a, 0x40, 0x44, 0x25, 0x01, 0x69, 0x0a, 0x00, 0x42, 0x15, 0x02, - 0x68, 0x0a, 0x40, 0x44, 0x96, 0x1b, 0x6d, 0x0a, 0x00, 0x42, 0x30, 0x27, - 0x6c, 0x0a, 0x40, 0x43, 0xd7, 0x04, 0x6b, 0x0a, 0x00, 0x43, 0xfb, 0x05, - 0x6a, 0x0a, 0x40, 0x50, 0x35, 0x52, 0x76, 0x0a, 0x00, 0x44, 0x82, 0xe4, - 0x71, 0x0a, 0x40, 0x06, 0xf4, 0x05, 0xbe, 0x02, 0x07, 0xf1, 0x04, 0x50, - 0x42, 0x19, 0x04, 0x98, 0x1d, 0x01, 0x05, 0xdb, 0x02, 0x3a, 0xb6, 0x01, - 0xff, 0x45, 0x48, 0x21, 0x97, 0x1d, 0x01, 0x0a, 0x5c, 0x70, 0x01, 0xff, - 0xa1, 0x1e, 0x42, 0x27, 0x01, 0x90, 0x1d, 0x01, 0xe9, 0x8b, 0x1d, 0x81, - 0x0f, 0x42, 0x99, 0x04, 0x93, 0x1d, 0x01, 0xf5, 0x8d, 0x1d, 0xc1, 0x00, - 0xf5, 0x8e, 0x1d, 0x41, 0xe9, 0x8c, 0x1d, 0x41, 0xe1, 0x8a, 0x1d, 0x01, - 0xe9, 0x91, 0x1d, 0x01, 0xf5, 0x94, 0x1d, 0x41, 0x48, 0x5b, 0x14, 0x95, - 0x1d, 0x01, 0x47, 0x67, 0x46, 0x96, 0x1d, 0x41, 0xe1, 0x60, 0x1d, 0x81, - 0xd8, 0x01, 0xa2, 0xcb, 0x01, 0xa3, 0xbe, 0x01, 0xa4, 0xa5, 0x01, 0x42, - 0x27, 0x01, 0x67, 0x1d, 0x01, 0xa7, 0x92, 0x01, 0x42, 0x22, 0x00, 0x87, - 0x1d, 0x01, 0xe9, 0x62, 0x1d, 0x81, 0x82, 0x01, 0xaa, 0x76, 0xab, 0x6a, - 0xac, 0x5e, 0x42, 0x6c, 0x00, 0x70, 0x1d, 0x01, 0xae, 0x4c, 0x42, 0x99, - 0x04, 0x6a, 0x1d, 0x01, 0xb0, 0x3a, 0x42, 0x71, 0x00, 0x88, 0x1d, 0x01, - 0x42, 0x45, 0x05, 0x89, 0x1d, 0x01, 0xb4, 0x15, 0xf5, 0x64, 0x1d, 0x81, - 0x0c, 0x42, 0xb4, 0x09, 0x6d, 0x1d, 0x01, 0x42, 0x20, 0x20, 0x6c, 0x1d, - 0x41, 0xf5, 0x65, 0x1d, 0x41, 0xe1, 0x73, 0x1d, 0x01, 0x42, 0x22, 0x00, - 0x74, 0x1d, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x7d, 0x1d, 0x01, 0x42, 0x22, - 0x00, 0x7e, 0x1d, 0x41, 0xe1, 0x85, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x86, - 0x1d, 0x41, 0xe1, 0x7a, 0x1d, 0x01, 0x42, 0x24, 0x02, 0x84, 0x1d, 0x41, - 0xe1, 0x75, 0x1d, 0x01, 0x42, 0x74, 0x00, 0x7f, 0x1d, 0x41, 0xe1, 0x71, - 0x1d, 0x01, 0x42, 0x22, 0x00, 0x72, 0x1d, 0x41, 0xe1, 0x80, 0x1d, 0x01, - 0x42, 0x22, 0x00, 0x81, 0x1d, 0x41, 0xe9, 0x63, 0x1d, 0x41, 0xe1, 0x76, - 0x1d, 0x01, 0x42, 0x22, 0x00, 0x77, 0x1d, 0x41, 0xe1, 0x78, 0x1d, 0x01, - 0xa4, 0x06, 0x42, 0x22, 0x00, 0x79, 0x1d, 0x41, 0xe1, 0x82, 0x1d, 0x01, - 0x42, 0x22, 0x00, 0x83, 0x1d, 0x41, 0xe1, 0x7b, 0x1d, 0x01, 0x42, 0x22, - 0x00, 0x7c, 0x1d, 0x41, 0xe1, 0x6e, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x6f, - 0x1d, 0x41, 0xe1, 0x61, 0x1d, 0x01, 0xe9, 0x68, 0x1d, 0x01, 0xf5, 0x6b, - 0x1d, 0x41, 0x45, 0xd1, 0x09, 0xa8, 0x1d, 0x01, 0xa6, 0x2e, 0x44, 0xb8, - 0x27, 0xa9, 0x1d, 0x01, 0x43, 0xcd, 0x09, 0xa1, 0x1d, 0x01, 0xb3, 0x14, - 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xa0, 0x1d, 0x41, 0x44, 0x25, 0x01, 0xa3, - 0x1d, 0x01, 0x42, 0x15, 0x02, 0xa2, 0x1d, 0x41, 0x44, 0x96, 0x1b, 0xa7, - 0x1d, 0x01, 0x42, 0x30, 0x27, 0xa6, 0x1d, 0x41, 0x43, 0xd7, 0x04, 0xa5, - 0x1d, 0x01, 0x43, 0xfb, 0x05, 0xa4, 0x1d, 0x41, 0x51, 0x34, 0x52, 0xf0, - 0x0a, 0x00, 0x06, 0xf4, 0x05, 0xe9, 0x03, 0x07, 0xf1, 0x04, 0xc6, 0x01, - 0x42, 0x19, 0x04, 0xd0, 0x0a, 0x00, 0x4a, 0x72, 0x79, 0xf1, 0x0a, 0x00, - 0x05, 0xdb, 0x02, 0x61, 0x06, 0x11, 0x35, 0x01, 0xff, 0x07, 0x96, 0xc5, - 0x50, 0x05, 0xdb, 0x02, 0x01, 0xff, 0xa1, 0x3d, 0x07, 0x96, 0xc5, 0x31, - 0xe5, 0xc7, 0x0a, 0x00, 0xe9, 0xbf, 0x0a, 0x80, 0x24, 0xef, 0xcb, 0x0a, - 0x00, 0xf5, 0xc1, 0x0a, 0x80, 0x17, 0x08, 0x76, 0xb7, 0x01, 0xff, 0xec, - 0xe2, 0x0a, 0x80, 0x09, 0xf2, 0xc3, 0x0a, 0xc0, 0x00, 0xf2, 0xc4, 0x0a, - 0x40, 0xec, 0xe3, 0x0a, 0x40, 0xf5, 0xc2, 0x0a, 0x40, 0xe9, 0xc0, 0x0a, - 0x40, 0xe5, 0xc5, 0x0a, 0x00, 0xef, 0xc9, 0x0a, 0x40, 0xe1, 0xbe, 0x0a, - 0x00, 0xe9, 0xc8, 0x0a, 0x00, 0xf5, 0xcc, 0x0a, 0x40, 0xe5, 0x8d, 0x0a, - 0x00, 0xef, 0x91, 0x0a, 0x40, 0xa1, 0x47, 0xa3, 0x39, 0x46, 0x67, 0xd3, - 0xfc, 0x0a, 0x00, 0x45, 0xab, 0x3a, 0xbc, 0x0a, 0x00, 0xb3, 0x1f, 0xb4, - 0x11, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x49, 0x21, 0xcd, 0x0a, 0x00, - 0x45, 0x69, 0x46, 0x83, 0x0a, 0x40, 0x54, 0x28, 0x3e, 0xfd, 0x0a, 0x00, - 0x55, 0xa1, 0x3a, 0xff, 0x0a, 0x40, 0x45, 0x10, 0xdc, 0xfb, 0x0a, 0x00, - 0x44, 0x44, 0xe0, 0xfa, 0x0a, 0x40, 0x4a, 0x3c, 0x21, 0x81, 0x0a, 0x00, - 0x51, 0xa5, 0x3a, 0xfe, 0x0a, 0x40, 0x47, 0x5c, 0x14, 0x82, 0x0a, 0x00, - 0x47, 0x3a, 0x81, 0xbd, 0x0a, 0x40, 0xe1, 0x85, 0x0a, 0x80, 0x8c, 0x02, - 0xa2, 0xff, 0x01, 0xa3, 0xf2, 0x01, 0xa4, 0xd9, 0x01, 0xe5, 0x8f, 0x0a, - 0x00, 0xa7, 0xc8, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x0a, 0x00, 0xe9, 0x87, - 0x0a, 0x80, 0xb8, 0x01, 0xaa, 0xab, 0x01, 0xab, 0x9e, 0x01, 0xac, 0x91, - 0x01, 0x42, 0x6c, 0x00, 0xae, 0x0a, 0x00, 0xae, 0x73, 0xef, 0x93, 0x0a, - 0x00, 0xb0, 0x63, 0x42, 0x71, 0x00, 0xb0, 0x0a, 0x00, 0xb3, 0x4b, 0xb4, - 0x32, 0xf5, 0x89, 0x0a, 0x80, 0x29, 0xb6, 0x0c, 0x42, 0x20, 0x20, 0xaf, - 0x0a, 0x00, 0x43, 0x1f, 0xb7, 0xf9, 0x0a, 0x40, 0xe1, 0xb5, 0x0a, 0x00, - 0x07, 0x77, 0xb7, 0x01, 0xff, 0xec, 0x8c, 0x0a, 0x80, 0x09, 0xf2, 0x8b, - 0x0a, 0xc0, 0x00, 0xf2, 0xe0, 0x0a, 0x40, 0xec, 0xe1, 0x0a, 0x40, 0xf5, - 0x8a, 0x0a, 0x40, 0xe1, 0xa4, 0x0a, 0x00, 0x42, 0x22, 0x00, 0xa5, 0x0a, - 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x9f, 0x0a, 0x00, 0x42, 0x22, 0x00, 0xa0, - 0x0a, 0x40, 0xe1, 0xb8, 0x0a, 0x00, 0x42, 0x22, 0x00, 0xb6, 0x0a, 0x00, - 0x42, 0x45, 0x05, 0xb7, 0x0a, 0x40, 0xe1, 0xaa, 0x0a, 0x00, 0x42, 0x22, - 0x00, 0xab, 0x0a, 0x40, 0xe1, 0xa8, 0x0a, 0x00, 0x42, 0x24, 0x02, 0x99, - 0x0a, 0x00, 0x42, 0x2f, 0x04, 0xa3, 0x0a, 0x00, 0x42, 0x20, 0x20, 0x9e, - 0x0a, 0x40, 0xe1, 0xb2, 0x0a, 0x00, 0x42, 0x74, 0x00, 0xb3, 0x0a, 0x40, - 0xe1, 0x95, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x96, 0x0a, 0x40, 0xe1, 0x9c, - 0x0a, 0x00, 0x42, 0x22, 0x00, 0x9d, 0x0a, 0x40, 0xe9, 0x88, 0x0a, 0x40, - 0xe1, 0x97, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x98, 0x0a, 0x40, 0xe1, 0xa6, - 0x0a, 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa7, 0x0a, 0x40, 0xe1, 0xa1, - 0x0a, 0x00, 0x42, 0x22, 0x00, 0xa2, 0x0a, 0x40, 0xe1, 0x9a, 0x0a, 0x00, - 0x42, 0x22, 0x00, 0x9b, 0x0a, 0x40, 0xe1, 0xac, 0x0a, 0x00, 0x42, 0x22, - 0x00, 0xad, 0x0a, 0x40, 0xe1, 0x86, 0x0a, 0x00, 0xe9, 0x90, 0x0a, 0x00, - 0xf5, 0x94, 0x0a, 0x40, 0x45, 0xd1, 0x09, 0xee, 0x0a, 0x00, 0xa6, 0x2e, - 0x44, 0xb8, 0x27, 0xef, 0x0a, 0x00, 0x43, 0xcd, 0x09, 0xe7, 0x0a, 0x00, - 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xe6, 0x0a, 0x40, 0x44, 0x25, - 0x01, 0xe9, 0x0a, 0x00, 0x42, 0x15, 0x02, 0xe8, 0x0a, 0x40, 0x44, 0x96, - 0x1b, 0xed, 0x0a, 0x00, 0x42, 0x30, 0x27, 0xec, 0x0a, 0x40, 0x43, 0xd7, - 0x04, 0xeb, 0x0a, 0x00, 0x43, 0xfb, 0x05, 0xea, 0x0a, 0x40, 0x46, 0x8b, - 0xd0, 0xae, 0xf9, 0x01, 0x43, 0x8c, 0x11, 0xb8, 0xf3, 0x41, 0x48, 0xf4, - 0x93, 0xb2, 0x20, 0x00, 0x45, 0xf3, 0xda, 0x82, 0xf4, 0x41, 0xa1, 0x81, - 0x1f, 0xa5, 0x4d, 0xa9, 0x19, 0xaf, 0x01, 0xff, 0x03, 0x9c, 0x13, 0x06, - 0x4a, 0x93, 0xaa, 0x97, 0xf4, 0x41, 0x44, 0xb9, 0x00, 0xd2, 0x2b, 0x00, - 0x49, 0x70, 0x1e, 0x1d, 0x00, 0x40, 0x4b, 0x14, 0x97, 0x2c, 0xf6, 0x01, - 0x06, 0x2e, 0x9a, 0x01, 0xff, 0x5a, 0xfa, 0x1c, 0x38, 0xf6, 0x01, 0x44, - 0xed, 0x06, 0x00, 0xf6, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x5b, - 0x96, 0x1a, 0x2a, 0xf9, 0x01, 0xb3, 0x01, 0xff, 0x4b, 0x09, 0x1d, 0x01, - 0xf6, 0x01, 0x48, 0x5d, 0xc1, 0x29, 0xf9, 0x41, 0x0a, 0x8a, 0x00, 0xce, - 0x1c, 0xa5, 0x06, 0x47, 0x76, 0xcd, 0x76, 0xfa, 0x41, 0x02, 0xbc, 0x00, - 0x1d, 0x02, 0x92, 0x00, 0x01, 0xff, 0x45, 0xa4, 0xd9, 0x4f, 0xf3, 0x01, - 0x44, 0x4a, 0xe4, 0xd7, 0xf4, 0x01, 0x45, 0x5e, 0x1f, 0x9a, 0xf4, 0x01, - 0x45, 0xdf, 0xdf, 0x57, 0xf9, 0x41, 0xa1, 0xde, 0x18, 0x4b, 0x94, 0x91, - 0xd0, 0x03, 0x00, 0x08, 0xe9, 0x04, 0xbe, 0x10, 0xa4, 0xf7, 0x0f, 0xa6, - 0xe8, 0x0f, 0x4b, 0x54, 0x94, 0x88, 0x01, 0x01, 0x02, 0x9e, 0x01, 0xb8, - 0x0e, 0xab, 0x9b, 0x0e, 0xac, 0xa9, 0x0d, 0xad, 0x9a, 0x0d, 0x4c, 0x23, - 0x57, 0x74, 0x03, 0x00, 0xaf, 0xe8, 0x0c, 0xb0, 0xaf, 0x0c, 0x4d, 0xbd, - 0x30, 0x7e, 0x03, 0x00, 0xb2, 0x8f, 0x0c, 0xb3, 0xf4, 0x01, 0xb4, 0xb5, - 0x01, 0x0d, 0x38, 0x82, 0x9e, 0x01, 0xb6, 0x1a, 0x4b, 0xd6, 0x9c, 0x85, - 0x01, 0x01, 0xb9, 0x06, 0x49, 0x33, 0xb8, 0x8a, 0x01, 0x41, 0x48, 0xf5, - 0xb7, 0x79, 0x01, 0x01, 0x4c, 0xa3, 0x49, 0x7a, 0x03, 0x40, 0x44, 0xcb, - 0x2c, 0xef, 0x1f, 0x00, 0x15, 0xbe, 0x38, 0x01, 0xff, 0xd1, 0x00, 0xd2, - 0x81, 0x4a, 0xd2, 0x01, 0xd2, 0x81, 0x31, 0xd3, 0x02, 0xd2, 0x01, 0xd4, - 0x03, 0xd2, 0x01, 0xd5, 0x04, 0xd2, 0x81, 0x10, 0xd6, 0x05, 0xd2, 0x01, - 0xd7, 0x06, 0xd2, 0x01, 0xd8, 0x07, 0xd2, 0x01, 0xd9, 0x08, 0xd2, 0x41, - 0xd0, 0x18, 0xd2, 0x01, 0xd1, 0x19, 0xd2, 0x01, 0xd2, 0x1a, 0xd2, 0x01, - 0xd3, 0x1b, 0xd2, 0x01, 0xd4, 0x1c, 0xd2, 0x41, 0xd0, 0x13, 0xd2, 0x01, - 0xd1, 0x14, 0xd2, 0x01, 0xd2, 0x15, 0xd2, 0x01, 0xd3, 0x16, 0xd2, 0x01, - 0xd4, 0x17, 0xd2, 0x41, 0xd0, 0x09, 0xd2, 0x01, 0xd1, 0x0a, 0xd2, 0x01, - 0xd2, 0x0b, 0xd2, 0x01, 0xd3, 0x0c, 0xd2, 0x01, 0xd4, 0x0d, 0xd2, 0x01, - 0xd5, 0x0e, 0xd2, 0x01, 0xd6, 0x0f, 0xd2, 0x01, 0xd7, 0x10, 0xd2, 0x01, - 0xd8, 0x11, 0xd2, 0x01, 0xd9, 0x12, 0xd2, 0x41, 0x55, 0xce, 0x34, 0xd3, - 0x03, 0x00, 0x59, 0x1b, 0x21, 0xd4, 0x03, 0x00, 0x4b, 0x29, 0x21, 0xd2, - 0x03, 0x40, 0x4a, 0x2b, 0x9f, 0x7a, 0x01, 0x01, 0xa8, 0x1d, 0x44, 0x93, - 0x65, 0x84, 0x03, 0x00, 0x51, 0xc8, 0x57, 0x89, 0x01, 0x01, 0x03, 0xc2, - 0x06, 0x01, 0xff, 0x4a, 0x46, 0x72, 0x7d, 0x01, 0x01, 0x4b, 0x1e, 0x9b, - 0x77, 0x01, 0x41, 0x4a, 0xf2, 0x8d, 0xd1, 0x03, 0x00, 0x04, 0x26, 0x01, - 0x01, 0xff, 0x4a, 0x46, 0x72, 0x7e, 0x01, 0x01, 0x4d, 0x3d, 0x80, 0x78, - 0x01, 0x41, 0x4c, 0xc8, 0x88, 0x8c, 0x01, 0x01, 0x05, 0x3d, 0x06, 0x28, - 0x16, 0x8a, 0x33, 0x06, 0x4d, 0x3c, 0x83, 0xa0, 0x01, 0x41, 0x44, 0x94, - 0x91, 0x66, 0x1d, 0x00, 0x43, 0x98, 0x14, 0x6a, 0x1d, 0x00, 0x45, 0x84, - 0x52, 0x67, 0x1d, 0x00, 0x43, 0xeb, 0x1d, 0x69, 0x1d, 0x00, 0x43, 0x59, - 0x44, 0x68, 0x1d, 0x40, 0x5a, 0x48, 0x1d, 0x7c, 0x03, 0x00, 0x07, 0xf1, - 0x04, 0x11, 0x09, 0x19, 0x13, 0x01, 0xff, 0x5a, 0x48, 0x1d, 0x7d, 0x03, - 0x00, 0x53, 0x4f, 0x1d, 0x7b, 0x03, 0x40, 0xa1, 0xf6, 0x07, 0x44, 0x94, - 0x91, 0xb2, 0x03, 0x00, 0x43, 0x98, 0x14, 0xc7, 0x03, 0x00, 0xa4, 0xdb, - 0x07, 0xa5, 0xd6, 0x05, 0x4b, 0xfc, 0x93, 0xc2, 0x03, 0x00, 0x45, 0x84, - 0x52, 0xb3, 0x03, 0x00, 0x44, 0xf1, 0x8d, 0x71, 0x03, 0x00, 0x44, 0x0d, - 0x2b, 0xb9, 0x03, 0x80, 0xac, 0x04, 0xab, 0x9d, 0x04, 0x45, 0x4b, 0xdd, - 0xbb, 0x03, 0x00, 0x42, 0xe2, 0x14, 0xbc, 0x03, 0x00, 0x42, 0x5c, 0x14, - 0xbd, 0x03, 0x00, 0x02, 0x19, 0x04, 0x85, 0x02, 0xb0, 0xec, 0x01, 0x43, - 0x59, 0x44, 0xc1, 0x03, 0x80, 0xd3, 0x01, 0xb3, 0xb2, 0x01, 0xb4, 0xa3, - 0x01, 0x47, 0x38, 0x82, 0xc5, 0x03, 0x80, 0x0c, 0x42, 0x5c, 0x0b, 0xbe, - 0x03, 0x00, 0x44, 0x2a, 0xe8, 0xb6, 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, - 0xff, 0xa4, 0x47, 0x46, 0xd8, 0x69, 0xe1, 0x1f, 0x00, 0x44, 0xde, 0xe6, - 0x7b, 0x1f, 0x00, 0xb0, 0x15, 0x45, 0x92, 0x65, 0xcd, 0x03, 0x00, 0xb6, - 0x01, 0xff, 0x44, 0xcb, 0x2c, 0x7a, 0x1f, 0x00, 0x45, 0x58, 0xdf, 0xe0, - 0x1f, 0x40, 0x4a, 0x04, 0x99, 0xe6, 0x1f, 0x00, 0x44, 0x4e, 0x81, 0x50, - 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xde, 0xe6, 0x54, - 0x1f, 0x00, 0x4b, 0x03, 0x99, 0x56, 0x1f, 0x00, 0x45, 0xca, 0x2c, 0x52, - 0x1f, 0x40, 0x44, 0x3a, 0x5b, 0x51, 0x1f, 0x80, 0x24, 0x48, 0x89, 0x65, - 0xcb, 0x03, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xde, 0xe6, - 0xe3, 0x1f, 0x00, 0x4b, 0x03, 0x99, 0xe7, 0x1f, 0x00, 0x45, 0x92, 0x65, - 0xb0, 0x03, 0x00, 0x45, 0xca, 0x2c, 0xe2, 0x1f, 0x40, 0x05, 0x19, 0x00, - 0x01, 0xff, 0x44, 0xde, 0xe6, 0x55, 0x1f, 0x00, 0x4b, 0x03, 0x99, 0x57, - 0x1f, 0x00, 0x45, 0xca, 0x2c, 0x53, 0x1f, 0x40, 0x42, 0xc3, 0x21, 0xc4, - 0x03, 0x00, 0x44, 0xf1, 0x8d, 0xb8, 0x03, 0x40, 0xa1, 0x12, 0x42, 0x0b, - 0x00, 0xf8, 0x03, 0x00, 0x44, 0x57, 0x1d, 0xc3, 0x03, 0x00, 0x45, 0x61, - 0xe0, 0xdb, 0x03, 0x40, 0x43, 0x91, 0x8c, 0xe1, 0x03, 0x00, 0xee, 0xfb, - 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xbe, 0x6f, 0xe5, 0x1f, - 0x00, 0x45, 0x3f, 0xdf, 0xe4, 0x1f, 0x40, 0x51, 0x78, 0x52, 0x77, 0x03, - 0x00, 0x42, 0x49, 0x00, 0xc6, 0x03, 0x00, 0xe9, 0xc0, 0x03, 0x00, 0x42, - 0xdb, 0x02, 0xc8, 0x03, 0x40, 0x43, 0xd3, 0x04, 0xc9, 0x03, 0x80, 0x4e, - 0x45, 0x88, 0xdc, 0xbf, 0x03, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, - 0x45, 0xbe, 0x6f, 0x41, 0x1f, 0x80, 0x2a, 0x44, 0xde, 0xe6, 0x79, 0x1f, - 0x00, 0x45, 0x3f, 0xdf, 0x40, 0x1f, 0x80, 0x0c, 0x45, 0x92, 0x65, 0xcc, - 0x03, 0x00, 0x45, 0xca, 0x2c, 0x78, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, - 0xff, 0x44, 0xde, 0xe6, 0x44, 0x1f, 0x00, 0x45, 0xca, 0x2c, 0x42, 0x1f, - 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xde, 0xe6, 0x45, 0x1f, 0x00, - 0x45, 0xca, 0x2c, 0x43, 0x1f, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, - 0xbe, 0x6f, 0x61, 0x1f, 0x80, 0x6e, 0x44, 0xde, 0xe6, 0x7d, 0x1f, 0x80, - 0x61, 0xb0, 0x19, 0x45, 0x92, 0x65, 0xce, 0x03, 0x00, 0x45, 0xca, 0x2c, - 0x7c, 0x1f, 0x80, 0x06, 0x4d, 0xa2, 0x49, 0xf3, 0x1f, 0x40, 0x52, 0x9d, - 0x49, 0xf2, 0x1f, 0x40, 0x4a, 0x04, 0x99, 0xf6, 0x1f, 0x80, 0x39, 0x44, - 0x4e, 0x81, 0x60, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, - 0xde, 0xe6, 0x64, 0x1f, 0x80, 0x20, 0x4b, 0x03, 0x99, 0x66, 0x1f, 0x80, - 0x13, 0x45, 0xca, 0x2c, 0x62, 0x1f, 0x80, 0x06, 0x4d, 0xa2, 0x49, 0xa0, - 0x1f, 0x40, 0x52, 0x9d, 0x49, 0xa2, 0x1f, 0x40, 0x52, 0x9d, 0x49, 0xa6, - 0x1f, 0x40, 0x52, 0x9d, 0x49, 0xa4, 0x1f, 0x40, 0x52, 0x9d, 0x49, 0xf7, - 0x1f, 0x40, 0x52, 0x9d, 0x49, 0xf4, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, - 0xff, 0x44, 0xde, 0xe6, 0x65, 0x1f, 0x80, 0x20, 0x4b, 0x03, 0x99, 0x67, - 0x1f, 0x80, 0x13, 0x45, 0xca, 0x2c, 0x63, 0x1f, 0x80, 0x06, 0x4d, 0xa2, - 0x49, 0xa1, 0x1f, 0x40, 0x52, 0x9d, 0x49, 0xa3, 0x1f, 0x40, 0x52, 0x9d, - 0x49, 0xa7, 0x1f, 0x40, 0x52, 0x9d, 0x49, 0xa5, 0x1f, 0x40, 0x44, 0x11, - 0x89, 0xba, 0x03, 0x00, 0x44, 0xac, 0x79, 0xdf, 0x03, 0x40, 0x06, 0x50, - 0x00, 0x01, 0xff, 0xa4, 0x47, 0x46, 0xd8, 0x69, 0xd1, 0x1f, 0x00, 0x44, - 0xde, 0xe6, 0x77, 0x1f, 0x00, 0xb0, 0x15, 0x45, 0x92, 0x65, 0xaf, 0x03, - 0x00, 0xb6, 0x01, 0xff, 0x44, 0xcb, 0x2c, 0x76, 0x1f, 0x00, 0x45, 0x58, - 0xdf, 0xd0, 0x1f, 0x40, 0x4a, 0x04, 0x99, 0xd6, 0x1f, 0x00, 0x44, 0x4e, - 0x81, 0x30, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xde, - 0xe6, 0x34, 0x1f, 0x00, 0x4b, 0x03, 0x99, 0x36, 0x1f, 0x00, 0x45, 0xca, - 0x2c, 0x32, 0x1f, 0x40, 0x44, 0x3a, 0x5b, 0x31, 0x1f, 0x80, 0x24, 0x48, - 0x89, 0x65, 0xca, 0x03, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, - 0xde, 0xe6, 0xd3, 0x1f, 0x00, 0x4b, 0x03, 0x99, 0xd7, 0x1f, 0x00, 0x45, - 0x92, 0x65, 0x90, 0x03, 0x00, 0x45, 0xca, 0x2c, 0xd2, 0x1f, 0x40, 0x05, - 0x19, 0x00, 0x01, 0xff, 0x44, 0xde, 0xe6, 0x35, 0x1f, 0x00, 0x4b, 0x03, - 0x99, 0x37, 0x1f, 0x00, 0x45, 0xca, 0x2c, 0x33, 0x1f, 0x40, 0x46, 0xee, - 0x13, 0xb5, 0x03, 0x80, 0xb3, 0x01, 0x42, 0x12, 0x00, 0xb7, 0x03, 0xc0, - 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xbe, 0x6f, 0x21, 0x1f, 0x80, - 0x6e, 0x44, 0xde, 0xe6, 0x75, 0x1f, 0x80, 0x61, 0xb0, 0x19, 0x45, 0x92, - 0x65, 0xae, 0x03, 0x00, 0x45, 0xca, 0x2c, 0x74, 0x1f, 0x80, 0x06, 0x4d, - 0xa2, 0x49, 0xc3, 0x1f, 0x40, 0x52, 0x9d, 0x49, 0xc2, 0x1f, 0x40, 0x4a, - 0x04, 0x99, 0xc6, 0x1f, 0x80, 0x39, 0x44, 0x4e, 0x81, 0x20, 0x1f, 0xc0, - 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xde, 0xe6, 0x24, 0x1f, 0x80, - 0x20, 0x4b, 0x03, 0x99, 0x26, 0x1f, 0x80, 0x13, 0x45, 0xca, 0x2c, 0x22, - 0x1f, 0x80, 0x06, 0x4d, 0xa2, 0x49, 0x90, 0x1f, 0x40, 0x52, 0x9d, 0x49, - 0x92, 0x1f, 0x40, 0x52, 0x9d, 0x49, 0x96, 0x1f, 0x40, 0x52, 0x9d, 0x49, - 0x94, 0x1f, 0x40, 0x52, 0x9d, 0x49, 0xc7, 0x1f, 0x40, 0x52, 0x9d, 0x49, - 0xc4, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xde, 0xe6, 0x25, - 0x1f, 0x80, 0x20, 0x4b, 0x03, 0x99, 0x27, 0x1f, 0x80, 0x13, 0x45, 0xca, - 0x2c, 0x23, 0x1f, 0x80, 0x06, 0x4d, 0xa2, 0x49, 0x91, 0x1f, 0x40, 0x52, - 0x9d, 0x49, 0x93, 0x1f, 0x40, 0x52, 0x9d, 0x49, 0x97, 0x1f, 0x40, 0x52, - 0x9d, 0x49, 0x95, 0x1f, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xbe, - 0x6f, 0x11, 0x1f, 0x80, 0x2a, 0x44, 0xde, 0xe6, 0x73, 0x1f, 0x00, 0x45, - 0x3f, 0xdf, 0x10, 0x1f, 0x80, 0x0c, 0x45, 0x92, 0x65, 0xad, 0x03, 0x00, - 0x45, 0xca, 0x2c, 0x72, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, - 0xde, 0xe6, 0x14, 0x1f, 0x00, 0x45, 0xca, 0x2c, 0x12, 0x1f, 0x40, 0x05, - 0x19, 0x00, 0x01, 0xff, 0x44, 0xde, 0xe6, 0x15, 0x1f, 0x00, 0x45, 0xca, - 0x2c, 0x13, 0x1f, 0x40, 0x44, 0x01, 0xcc, 0xb4, 0x03, 0x00, 0x46, 0x83, - 0x52, 0xdd, 0x03, 0x40, 0x44, 0x91, 0xd9, 0xb1, 0x03, 0x80, 0x11, 0x07, - 0xa4, 0x79, 0x01, 0xff, 0x45, 0xab, 0x79, 0xd9, 0x03, 0x00, 0x45, 0x8f, - 0x8c, 0x73, 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xbe, 0x6f, - 0x01, 0x1f, 0x80, 0x7c, 0x46, 0xd8, 0x69, 0xb1, 0x1f, 0x00, 0x44, 0xde, - 0xe6, 0x71, 0x1f, 0x80, 0x69, 0xb0, 0x21, 0x45, 0x92, 0x65, 0xac, 0x03, - 0x00, 0xb6, 0x06, 0x4d, 0xa2, 0x49, 0xb3, 0x1f, 0x40, 0x44, 0xcb, 0x2c, - 0x70, 0x1f, 0x80, 0x06, 0x45, 0x58, 0xdf, 0xb0, 0x1f, 0x40, 0x52, 0x9d, - 0x49, 0xb2, 0x1f, 0x40, 0x4a, 0x04, 0x99, 0xb6, 0x1f, 0x80, 0x39, 0x44, - 0x4e, 0x81, 0x00, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, - 0xde, 0xe6, 0x04, 0x1f, 0x80, 0x20, 0x4b, 0x03, 0x99, 0x06, 0x1f, 0x80, - 0x13, 0x45, 0xca, 0x2c, 0x02, 0x1f, 0x80, 0x06, 0x4d, 0xa2, 0x49, 0x80, - 0x1f, 0x40, 0x52, 0x9d, 0x49, 0x82, 0x1f, 0x40, 0x52, 0x9d, 0x49, 0x86, - 0x1f, 0x40, 0x52, 0x9d, 0x49, 0x84, 0x1f, 0x40, 0x52, 0x9d, 0x49, 0xb7, - 0x1f, 0x40, 0x52, 0x9d, 0x49, 0xb4, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, - 0xff, 0x44, 0xde, 0xe6, 0x05, 0x1f, 0x80, 0x20, 0x4b, 0x03, 0x99, 0x07, - 0x1f, 0x80, 0x13, 0x45, 0xca, 0x2c, 0x03, 0x1f, 0x80, 0x06, 0x4d, 0xa2, - 0x49, 0x81, 0x1f, 0x40, 0x52, 0x9d, 0x49, 0x83, 0x1f, 0x40, 0x52, 0x9d, - 0x49, 0x87, 0x1f, 0x40, 0x52, 0x9d, 0x49, 0x85, 0x1f, 0x40, 0x5d, 0xde, - 0x13, 0xf6, 0x03, 0x00, 0x03, 0x0e, 0x6b, 0x01, 0xff, 0x46, 0xf7, 0x06, - 0xf1, 0x03, 0x00, 0x52, 0xff, 0x50, 0xfc, 0x03, 0x40, 0x4a, 0x04, 0x99, - 0xc0, 0x1f, 0x00, 0x49, 0x41, 0xb0, 0xd5, 0x03, 0x00, 0x48, 0xbf, 0xa3, - 0xd6, 0x03, 0x00, 0x4d, 0xda, 0x41, 0xbe, 0x1f, 0x00, 0x44, 0x4e, 0x81, - 0xbf, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xde, 0xe6, - 0xce, 0x1f, 0x00, 0x4b, 0x03, 0x99, 0xcf, 0x1f, 0x00, 0x45, 0xca, 0x2c, - 0xcd, 0x1f, 0x40, 0x48, 0x8d, 0xba, 0x7c, 0x01, 0x01, 0x03, 0xf2, 0x07, - 0x0c, 0x4a, 0xcb, 0xa9, 0x84, 0x01, 0x01, 0x43, 0xd8, 0x45, 0xfd, 0x1f, - 0x40, 0x49, 0x14, 0xb0, 0x75, 0x01, 0x81, 0x06, 0x4c, 0x4c, 0x8c, 0x8b, - 0x01, 0x41, 0x4f, 0xa9, 0x62, 0x76, 0x01, 0x41, 0x4c, 0x30, 0x87, 0x81, - 0x01, 0x01, 0x4d, 0x6c, 0x82, 0x45, 0xd2, 0x41, 0x06, 0xf2, 0x04, 0x1d, - 0x49, 0x6a, 0xb1, 0x83, 0x01, 0x01, 0x51, 0x1e, 0x57, 0x75, 0x03, 0x00, - 0x06, 0xe7, 0x13, 0x01, 0xff, 0x4e, 0xed, 0x13, 0xf5, 0x03, 0x00, 0x4c, - 0x56, 0x1d, 0xf2, 0x03, 0x40, 0x4d, 0xa3, 0x79, 0xd8, 0x03, 0x00, 0x47, - 0x82, 0x52, 0xdc, 0x03, 0x00, 0x45, 0xab, 0x79, 0xde, 0x03, 0x00, 0xb3, - 0x06, 0x43, 0xa8, 0xe9, 0xf3, 0x03, 0x40, 0x44, 0x90, 0x8c, 0xe0, 0x03, - 0x00, 0x0d, 0x48, 0x38, 0x06, 0x45, 0x61, 0xe0, 0xda, 0x03, 0x40, 0x45, - 0x84, 0x52, 0x26, 0x1d, 0x00, 0x45, 0x4b, 0xdd, 0x27, 0x1d, 0x00, 0x45, - 0x7e, 0xa6, 0x65, 0xab, 0x00, 0xb0, 0x06, 0x43, 0x59, 0x44, 0x29, 0x1d, - 0x40, 0xe9, 0x28, 0x1d, 0x00, 0x42, 0xdb, 0x02, 0x2a, 0x1d, 0x40, 0xa1, - 0x0c, 0x46, 0xc3, 0x5b, 0xbd, 0x1f, 0x00, 0x50, 0x89, 0x62, 0x82, 0x01, - 0x41, 0x48, 0xbf, 0xa3, 0xd7, 0x03, 0x00, 0x4a, 0x12, 0x89, 0xf0, 0x03, - 0x40, 0x4c, 0x64, 0x86, 0x8d, 0x01, 0x01, 0x1b, 0x53, 0x1b, 0x01, 0xff, - 0xd1, 0x1d, 0xd2, 0x81, 0x79, 0xd2, 0x1e, 0xd2, 0x81, 0x5c, 0x93, 0x42, - 0xd4, 0x1f, 0xd2, 0x81, 0x21, 0xd5, 0x20, 0xd2, 0x81, 0x08, 0xd7, 0x21, - 0xd2, 0x01, 0xd8, 0x22, 0xd2, 0x41, 0xd0, 0x3d, 0xd2, 0x01, 0xd1, 0x3e, - 0xd2, 0x01, 0xd2, 0x3f, 0xd2, 0x01, 0xd3, 0x40, 0xd2, 0x01, 0xd4, 0x41, - 0xd2, 0x41, 0xd0, 0x36, 0xd2, 0x01, 0xd2, 0x37, 0xd2, 0x01, 0xd3, 0x38, - 0xd2, 0x01, 0xd5, 0x39, 0xd2, 0x01, 0xd7, 0x3a, 0xd2, 0x01, 0xd8, 0x3b, - 0xd2, 0x01, 0xd9, 0x3c, 0xd2, 0x41, 0xd0, 0x30, 0xd2, 0x01, 0xd2, 0x31, - 0xd2, 0x01, 0xd6, 0x32, 0xd2, 0x01, 0xd7, 0x33, 0xd2, 0x01, 0xd8, 0x34, - 0xd2, 0x01, 0xd9, 0x35, 0xd2, 0x41, 0xd3, 0x2a, 0xd2, 0x01, 0xd4, 0x2b, - 0xd2, 0x01, 0xd5, 0x2c, 0xd2, 0x01, 0xd6, 0x2d, 0xd2, 0x01, 0xd7, 0x2e, - 0xd2, 0x01, 0xd9, 0x2f, 0xd2, 0x41, 0xd1, 0x23, 0xd2, 0x01, 0xd2, 0x24, - 0xd2, 0x01, 0xd3, 0x25, 0xd2, 0x01, 0xd4, 0x26, 0xd2, 0x01, 0xd7, 0x27, - 0xd2, 0x01, 0xd8, 0x28, 0xd2, 0x01, 0xd9, 0x29, 0xd2, 0x41, 0x4e, 0x42, - 0x72, 0x80, 0x01, 0x01, 0x4e, 0xf4, 0x73, 0x7f, 0x01, 0x41, 0x44, 0x3a, - 0x5b, 0xfe, 0x1f, 0x80, 0x26, 0x09, 0x89, 0x65, 0x06, 0x4b, 0x5b, 0x99, - 0x7b, 0x01, 0x41, 0x04, 0x1a, 0x00, 0x06, 0x45, 0x92, 0x65, 0x85, 0x03, - 0x40, 0x44, 0xde, 0xe6, 0xee, 0x1f, 0x00, 0x4b, 0x03, 0x99, 0xc1, 0x1f, - 0x00, 0x45, 0xca, 0x2c, 0xed, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, - 0x44, 0xde, 0xe6, 0xde, 0x1f, 0x00, 0x4b, 0x03, 0x99, 0xdf, 0x1f, 0x00, - 0x45, 0xca, 0x2c, 0xdd, 0x1f, 0x40, 0x5a, 0x48, 0x1d, 0xfe, 0x03, 0x00, - 0x4a, 0xbd, 0xa3, 0xcf, 0x03, 0x00, 0xac, 0x16, 0x09, 0x19, 0x13, 0x06, - 0x4c, 0xf0, 0x8d, 0xf4, 0x03, 0x40, 0x5a, 0x48, 0x1d, 0xff, 0x03, 0x00, - 0x53, 0x4f, 0x1d, 0xfd, 0x03, 0x40, 0x06, 0xf2, 0x04, 0x06, 0x52, 0x50, - 0x1d, 0xf9, 0x03, 0x40, 0xa1, 0xb3, 0x06, 0x44, 0x94, 0x91, 0x92, 0x03, - 0x00, 0x43, 0x98, 0x14, 0xa7, 0x03, 0x00, 0x45, 0xcb, 0xda, 0x94, 0x03, - 0x00, 0xa5, 0xb3, 0x04, 0x45, 0x84, 0x52, 0x93, 0x03, 0x00, 0x44, 0xf1, - 0x8d, 0x70, 0x03, 0x00, 0x44, 0x0d, 0x2b, 0x99, 0x03, 0x80, 0xb5, 0x03, - 0x45, 0x10, 0x89, 0x9a, 0x03, 0x00, 0x45, 0x4b, 0xdd, 0x9b, 0x03, 0x00, - 0x42, 0xe2, 0x14, 0x9c, 0x03, 0x00, 0x42, 0x5c, 0x14, 0x9d, 0x03, 0x00, - 0x02, 0x19, 0x04, 0xae, 0x01, 0xb0, 0x95, 0x01, 0x43, 0x59, 0x44, 0xa1, - 0x03, 0x80, 0x87, 0x01, 0xb3, 0x73, 0xb4, 0x65, 0x47, 0x38, 0x82, 0xa5, - 0x03, 0x80, 0x12, 0x42, 0x5c, 0x0b, 0x9e, 0x03, 0x00, 0x43, 0xa8, 0xe9, - 0x7f, 0x03, 0x00, 0x44, 0x2a, 0xe8, 0x96, 0x03, 0x40, 0x06, 0x50, 0x00, - 0x01, 0xff, 0xa4, 0x21, 0x46, 0xd8, 0x69, 0xe9, 0x1f, 0x00, 0x44, 0xde, - 0xe6, 0xeb, 0x1f, 0x00, 0x45, 0x92, 0x65, 0x8e, 0x03, 0x00, 0xb6, 0x01, - 0xff, 0x44, 0xcb, 0x2c, 0xea, 0x1f, 0x00, 0x45, 0x58, 0xdf, 0xe8, 0x1f, - 0x40, 0x44, 0x3a, 0x5b, 0x59, 0x1f, 0x80, 0x06, 0x48, 0x89, 0x65, 0xab, - 0x03, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xde, 0xe6, 0x5d, 0x1f, - 0x00, 0x4b, 0x03, 0x99, 0x5f, 0x1f, 0x00, 0x45, 0xca, 0x2c, 0x5b, 0x1f, - 0x40, 0x42, 0xc3, 0x21, 0xa4, 0x03, 0x00, 0x44, 0xf1, 0x8d, 0x98, 0x03, - 0x40, 0x42, 0x1a, 0x00, 0xfa, 0x03, 0x00, 0x42, 0x0b, 0x00, 0xf7, 0x03, - 0x00, 0x44, 0x57, 0x1d, 0xa3, 0x03, 0x40, 0x4b, 0x13, 0x90, 0xec, 0x1f, - 0x40, 0x51, 0x78, 0x52, 0x76, 0x03, 0x00, 0x42, 0x49, 0x00, 0xa6, 0x03, - 0x00, 0xe9, 0xa0, 0x03, 0x00, 0x42, 0xdb, 0x02, 0xa8, 0x03, 0x40, 0x43, - 0xd3, 0x04, 0xa9, 0x03, 0x80, 0x4e, 0x45, 0x88, 0xdc, 0x9f, 0x03, 0xc0, - 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xbe, 0x6f, 0x49, 0x1f, 0x80, - 0x2a, 0x44, 0xde, 0xe6, 0xf9, 0x1f, 0x00, 0x45, 0x3f, 0xdf, 0x48, 0x1f, - 0x80, 0x0c, 0x45, 0x92, 0x65, 0x8c, 0x03, 0x00, 0x45, 0xca, 0x2c, 0xf8, - 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xde, 0xe6, 0x4c, 0x1f, - 0x00, 0x45, 0xca, 0x2c, 0x4a, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, - 0x44, 0xde, 0xe6, 0x4d, 0x1f, 0x00, 0x45, 0xca, 0x2c, 0x4b, 0x1f, 0x40, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xbe, 0x6f, 0x69, 0x1f, 0x80, 0x55, - 0x44, 0xde, 0xe6, 0xfb, 0x1f, 0x00, 0xb0, 0x0c, 0x45, 0x92, 0x65, 0x8f, - 0x03, 0x00, 0x45, 0xca, 0x2c, 0xfa, 0x1f, 0x40, 0x4d, 0xda, 0x41, 0xfc, - 0x1f, 0x00, 0x44, 0x4e, 0x81, 0x68, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, - 0x01, 0xff, 0x44, 0xde, 0xe6, 0x6c, 0x1f, 0x80, 0x22, 0xb0, 0x0d, 0x45, - 0xca, 0x2c, 0x6a, 0x1f, 0xc0, 0x00, 0x53, 0xd4, 0x41, 0xaa, 0x1f, 0x40, - 0x4a, 0x04, 0x99, 0x6e, 0x1f, 0x80, 0x06, 0x4d, 0xda, 0x41, 0xa8, 0x1f, - 0x40, 0x53, 0xd4, 0x41, 0xae, 0x1f, 0x40, 0x53, 0xd4, 0x41, 0xac, 0x1f, - 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xde, 0xe6, 0x6d, 0x1f, 0x80, - 0x22, 0xb0, 0x0d, 0x45, 0xca, 0x2c, 0x6b, 0x1f, 0xc0, 0x00, 0x53, 0xd4, - 0x41, 0xab, 0x1f, 0x40, 0x4a, 0x04, 0x99, 0x6f, 0x1f, 0x80, 0x06, 0x4d, - 0xda, 0x41, 0xa9, 0x1f, 0x40, 0x53, 0xd4, 0x41, 0xaf, 0x1f, 0x40, 0x53, - 0xd4, 0x41, 0xad, 0x1f, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, 0x3f, - 0x46, 0xd8, 0x69, 0xd9, 0x1f, 0x00, 0x44, 0xde, 0xe6, 0xdb, 0x1f, 0x00, - 0x45, 0x3f, 0xdf, 0x38, 0x1f, 0x80, 0x15, 0x45, 0x92, 0x65, 0x8a, 0x03, - 0x00, 0xb6, 0x01, 0xff, 0x44, 0xcb, 0x2c, 0xda, 0x1f, 0x00, 0x45, 0x58, - 0xdf, 0xd8, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xde, 0xe6, - 0x3c, 0x1f, 0x00, 0x4b, 0x03, 0x99, 0x3e, 0x1f, 0x00, 0x45, 0xca, 0x2c, - 0x3a, 0x1f, 0x40, 0x44, 0x3a, 0x5b, 0x39, 0x1f, 0x80, 0x06, 0x48, 0x89, - 0x65, 0xaa, 0x03, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xde, 0xe6, - 0x3d, 0x1f, 0x00, 0x4b, 0x03, 0x99, 0x3f, 0x1f, 0x00, 0x45, 0xca, 0x2c, - 0x3b, 0x1f, 0x40, 0x46, 0xee, 0x13, 0x95, 0x03, 0x80, 0x9c, 0x01, 0x42, - 0x12, 0x00, 0x97, 0x03, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, - 0xbe, 0x6f, 0x29, 0x1f, 0x80, 0x55, 0x44, 0xde, 0xe6, 0xcb, 0x1f, 0x00, - 0xb0, 0x0c, 0x45, 0x92, 0x65, 0x89, 0x03, 0x00, 0x45, 0xca, 0x2c, 0xca, - 0x1f, 0x40, 0x4d, 0xda, 0x41, 0xcc, 0x1f, 0x00, 0x44, 0x4e, 0x81, 0x28, - 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xde, 0xe6, 0x2c, - 0x1f, 0x80, 0x22, 0xb0, 0x0d, 0x45, 0xca, 0x2c, 0x2a, 0x1f, 0xc0, 0x00, - 0x53, 0xd4, 0x41, 0x9a, 0x1f, 0x40, 0x4a, 0x04, 0x99, 0x2e, 0x1f, 0x80, - 0x06, 0x4d, 0xda, 0x41, 0x98, 0x1f, 0x40, 0x53, 0xd4, 0x41, 0x9e, 0x1f, - 0x40, 0x53, 0xd4, 0x41, 0x9c, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, - 0x44, 0xde, 0xe6, 0x2d, 0x1f, 0x80, 0x22, 0xb0, 0x0d, 0x45, 0xca, 0x2c, - 0x2b, 0x1f, 0xc0, 0x00, 0x53, 0xd4, 0x41, 0x9b, 0x1f, 0x40, 0x4a, 0x04, - 0x99, 0x2f, 0x1f, 0x80, 0x06, 0x4d, 0xda, 0x41, 0x99, 0x1f, 0x40, 0x53, - 0xd4, 0x41, 0x9f, 0x1f, 0x40, 0x53, 0xd4, 0x41, 0x9d, 0x1f, 0x40, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x45, 0xbe, 0x6f, 0x19, 0x1f, 0x80, 0x2a, 0x44, - 0xde, 0xe6, 0xc9, 0x1f, 0x00, 0x45, 0x3f, 0xdf, 0x18, 0x1f, 0x80, 0x0c, - 0x45, 0x92, 0x65, 0x88, 0x03, 0x00, 0x45, 0xca, 0x2c, 0xc8, 0x1f, 0x40, - 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xde, 0xe6, 0x1c, 0x1f, 0x00, 0x45, - 0xca, 0x2c, 0x1a, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xde, - 0xe6, 0x1d, 0x1f, 0x00, 0x45, 0xca, 0x2c, 0x1b, 0x1f, 0x40, 0x44, 0x91, - 0xd9, 0x91, 0x03, 0x80, 0x06, 0x4c, 0x88, 0x8c, 0x72, 0x03, 0x40, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x45, 0xbe, 0x6f, 0x09, 0x1f, 0x80, 0x64, 0x46, - 0xd8, 0x69, 0xb9, 0x1f, 0x00, 0x44, 0xde, 0xe6, 0xbb, 0x1f, 0x00, 0xb0, - 0x15, 0x45, 0x92, 0x65, 0x86, 0x03, 0x00, 0xb6, 0x01, 0xff, 0x44, 0xcb, - 0x2c, 0xba, 0x1f, 0x00, 0x45, 0x58, 0xdf, 0xb8, 0x1f, 0x40, 0x4d, 0xda, - 0x41, 0xbc, 0x1f, 0x00, 0x44, 0x4e, 0x81, 0x08, 0x1f, 0xc0, 0x00, 0x05, - 0x19, 0x00, 0x01, 0xff, 0x44, 0xde, 0xe6, 0x0c, 0x1f, 0x80, 0x22, 0xb0, - 0x0d, 0x45, 0xca, 0x2c, 0x0a, 0x1f, 0xc0, 0x00, 0x53, 0xd4, 0x41, 0x8a, - 0x1f, 0x40, 0x4a, 0x04, 0x99, 0x0e, 0x1f, 0x80, 0x06, 0x4d, 0xda, 0x41, - 0x88, 0x1f, 0x40, 0x53, 0xd4, 0x41, 0x8e, 0x1f, 0x40, 0x53, 0xd4, 0x41, - 0x8c, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xde, 0xe6, 0x0d, - 0x1f, 0x80, 0x22, 0xb0, 0x0d, 0x45, 0xca, 0x2c, 0x0b, 0x1f, 0xc0, 0x00, - 0x53, 0xd4, 0x41, 0x8b, 0x1f, 0x40, 0x4a, 0x04, 0x99, 0x0f, 0x1f, 0x80, - 0x06, 0x4d, 0xda, 0x41, 0x89, 0x1f, 0x40, 0x53, 0xd4, 0x41, 0x8f, 0x1f, - 0x40, 0x53, 0xd4, 0x41, 0x8d, 0x1f, 0x40, 0x0a, 0x57, 0xa0, 0x15, 0x49, - 0x35, 0xb3, 0x87, 0x03, 0x00, 0xb2, 0x01, 0xff, 0x49, 0x16, 0xb4, 0x87, - 0x01, 0x01, 0x49, 0x05, 0xb6, 0x86, 0x01, 0x41, 0x06, 0xb9, 0xcf, 0xe6, - 0x01, 0xa3, 0xd7, 0x01, 0x51, 0xff, 0x53, 0x73, 0x01, 0x01, 0x0b, 0xba, - 0x93, 0xb9, 0x01, 0x03, 0x13, 0x18, 0x97, 0x01, 0x4d, 0x9d, 0x7e, 0x63, - 0x01, 0x01, 0x53, 0xd6, 0x45, 0x70, 0x01, 0x01, 0x53, 0xc4, 0x47, 0x74, - 0x01, 0x01, 0xb4, 0x01, 0xff, 0x08, 0xf5, 0xbc, 0x30, 0x0a, 0xb9, 0xa7, - 0x01, 0xff, 0x02, 0xde, 0x08, 0x0d, 0x43, 0xe0, 0x05, 0x60, 0x01, 0xc1, - 0x00, 0x4f, 0xa9, 0x62, 0x61, 0x01, 0x41, 0x43, 0xcf, 0x47, 0x66, 0x01, - 0x81, 0x0d, 0x42, 0x32, 0x00, 0x5f, 0x01, 0xc1, 0x00, 0x48, 0xe8, 0x0f, - 0x6d, 0x01, 0x41, 0x4f, 0xa9, 0x62, 0x67, 0x01, 0x41, 0x02, 0xde, 0x08, - 0x33, 0x43, 0xcd, 0x09, 0x59, 0x01, 0x81, 0x1d, 0xb4, 0x01, 0xff, 0x42, - 0x92, 0x01, 0x64, 0x01, 0x01, 0xa8, 0x06, 0x42, 0x15, 0x02, 0x5c, 0x01, - 0x41, 0x44, 0xf3, 0x0f, 0x65, 0x01, 0x01, 0x4b, 0x1a, 0x16, 0x6b, 0x01, - 0x41, 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x6a, 0x01, 0x01, 0x48, 0x54, - 0x58, 0x71, 0x01, 0x41, 0x43, 0xcf, 0x47, 0x69, 0x01, 0x01, 0x03, 0x5f, - 0x00, 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x6e, 0x01, 0x01, 0x48, 0x54, 0x58, - 0x72, 0x01, 0x41, 0x51, 0x45, 0x52, 0x58, 0x01, 0x01, 0x08, 0x75, 0xbe, - 0x01, 0xff, 0x45, 0xcd, 0x47, 0x68, 0x01, 0x01, 0x43, 0xcd, 0x09, 0x5a, - 0x01, 0x01, 0x43, 0xe0, 0x05, 0x62, 0x01, 0x41, 0x4c, 0x55, 0x35, 0x6c, - 0x01, 0x01, 0x43, 0x25, 0x09, 0x5b, 0x01, 0xc1, 0x00, 0x49, 0xcb, 0x41, - 0x5e, 0x01, 0x41, 0x55, 0x4c, 0x35, 0x6f, 0x01, 0x01, 0x54, 0xc0, 0x41, - 0x5d, 0x01, 0x41, 0x02, 0xde, 0x08, 0x5a, 0x04, 0xcd, 0x09, 0x20, 0x04, - 0x50, 0x58, 0x01, 0xff, 0x44, 0xd3, 0x47, 0x57, 0x01, 0x01, 0x47, 0x70, - 0x67, 0x50, 0x01, 0x01, 0xb4, 0x01, 0xff, 0x46, 0xf7, 0xb8, 0x49, 0x01, - 0x01, 0x4f, 0x68, 0x67, 0x55, 0x01, 0x41, 0x47, 0xcc, 0x41, 0x42, 0x01, - 0x01, 0xa8, 0x17, 0x47, 0x2a, 0x01, 0x40, 0x01, 0x01, 0x09, 0x54, 0x58, - 0x01, 0xff, 0x47, 0x70, 0x67, 0x54, 0x01, 0x01, 0x47, 0xf6, 0xb8, 0x4d, - 0x01, 0x41, 0x43, 0x23, 0x00, 0x41, 0x01, 0x01, 0x07, 0xea, 0x0f, 0x01, - 0xff, 0x47, 0x70, 0x67, 0x52, 0x01, 0x01, 0x47, 0xf6, 0xb8, 0x4b, 0x01, - 0x41, 0x43, 0xcf, 0x47, 0x44, 0x01, 0x81, 0x3c, 0x42, 0x32, 0x00, 0x43, - 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x45, 0x01, 0x81, - 0x1c, 0x47, 0x70, 0x67, 0x4f, 0x01, 0x01, 0xb4, 0x01, 0xff, 0x46, 0xf7, - 0xb8, 0x48, 0x01, 0x01, 0x47, 0xad, 0x37, 0x46, 0x01, 0xc1, 0x00, 0x48, - 0xf5, 0xb8, 0x4e, 0x01, 0x41, 0x80, 0x01, 0xff, 0x47, 0x70, 0x67, 0x53, - 0x01, 0x01, 0x47, 0xf6, 0xb8, 0x4c, 0x01, 0x41, 0x80, 0x01, 0xff, 0x47, - 0x70, 0x67, 0x51, 0x01, 0x01, 0xb4, 0x01, 0xff, 0x46, 0xf7, 0xb8, 0x4a, - 0x01, 0x01, 0x47, 0xad, 0x37, 0x47, 0x01, 0xc1, 0x00, 0x48, 0x6f, 0x67, - 0x56, 0x01, 0x41, 0xa1, 0x9c, 0x01, 0xa2, 0x82, 0x01, 0x4f, 0x3d, 0x65, - 0xa7, 0x2a, 0x80, 0x75, 0x55, 0xc6, 0x36, 0xdb, 0x22, 0x00, 0xaf, 0x1d, - 0x44, 0xdb, 0x02, 0x3e, 0x00, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4d, - 0x73, 0x7a, 0x7a, 0x2a, 0x00, 0x43, 0xc5, 0x06, 0xd7, 0x22, 0x00, 0x53, - 0xcd, 0x46, 0x7c, 0x2a, 0x40, 0x02, 0x18, 0x00, 0x11, 0x03, 0x32, 0x00, - 0x01, 0xff, 0x49, 0x71, 0x0b, 0x67, 0x22, 0x00, 0x51, 0xec, 0x55, 0xa4, - 0x2a, 0x40, 0x4b, 0x62, 0x1c, 0x86, 0x2a, 0x00, 0x03, 0x7b, 0x00, 0x25, - 0x49, 0xec, 0x00, 0x77, 0x22, 0x00, 0x50, 0xd9, 0x60, 0x7e, 0x2a, 0xc0, - 0x00, 0x0a, 0x4a, 0x37, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x82, 0x2a, 0x80, - 0x06, 0x46, 0x01, 0x12, 0x80, 0x2a, 0x40, 0x45, 0xc2, 0x00, 0x84, 0x2a, - 0x40, 0x45, 0x75, 0x0b, 0x65, 0x22, 0x00, 0x4a, 0x96, 0x35, 0x73, 0x22, - 0x40, 0x54, 0x93, 0x00, 0xa9, 0x2a, 0x40, 0x4f, 0x3c, 0x66, 0xa5, 0x2a, - 0x00, 0x0a, 0x8c, 0x35, 0x01, 0xff, 0x45, 0x75, 0x0b, 0x69, 0x22, 0x00, - 0x4a, 0x96, 0x35, 0xe7, 0x22, 0x40, 0x05, 0x5d, 0x00, 0x11, 0x03, 0x1b, - 0x00, 0x01, 0xff, 0x4f, 0x0b, 0x6a, 0x8a, 0x2a, 0x00, 0x58, 0xdf, 0x27, - 0x88, 0x2a, 0x40, 0x61, 0x00, 0x0c, 0x8c, 0x2a, 0x00, 0x61, 0x63, 0x0c, - 0x92, 0x2a, 0x00, 0x50, 0xb3, 0x02, 0x78, 0x29, 0x00, 0xb3, 0x01, 0xff, - 0x07, 0xc6, 0xc7, 0x06, 0x70, 0xd9, 0x00, 0x94, 0x2a, 0x40, 0x4f, 0xe6, - 0x00, 0x90, 0x2a, 0x00, 0x48, 0xf4, 0x25, 0x8e, 0x2a, 0x40, 0x4b, 0x41, - 0x93, 0x93, 0xf3, 0x01, 0x05, 0x6d, 0xde, 0x0c, 0x43, 0xf6, 0x5e, 0x47, - 0xf3, 0x01, 0x49, 0x7c, 0x20, 0x60, 0x00, 0x40, 0x4e, 0x24, 0x6f, 0x57, - 0x13, 0x01, 0x07, 0xf1, 0x04, 0x8b, 0x01, 0x42, 0x19, 0x04, 0x50, 0x13, - 0x01, 0x05, 0xdb, 0x02, 0x48, 0x0b, 0x5b, 0x70, 0x01, 0xff, 0xa1, 0x35, - 0x42, 0x27, 0x01, 0x47, 0x13, 0x01, 0xe9, 0x3f, 0x13, 0x81, 0x26, 0x42, - 0x99, 0x04, 0x4b, 0x13, 0x01, 0xf5, 0x41, 0x13, 0x81, 0x17, 0x08, 0x76, - 0xb7, 0x01, 0xff, 0xec, 0x62, 0x13, 0x81, 0x09, 0xf2, 0x43, 0x13, 0xc1, - 0x00, 0xf2, 0x44, 0x13, 0x41, 0xec, 0x63, 0x13, 0x41, 0xf5, 0x42, 0x13, - 0x41, 0xe9, 0x40, 0x13, 0x41, 0xe1, 0x3e, 0x13, 0x01, 0xe9, 0x48, 0x13, - 0x01, 0xf5, 0x4c, 0x13, 0x41, 0xa1, 0x2b, 0xa3, 0x1d, 0x45, 0xab, 0x3a, - 0x3c, 0x13, 0x01, 0x45, 0x21, 0xdf, 0x5d, 0x13, 0x01, 0x02, 0x02, 0x00, - 0x01, 0xff, 0x44, 0x49, 0x21, 0x4d, 0x13, 0x01, 0x45, 0x69, 0x46, 0x03, - 0x13, 0x41, 0x4a, 0x3c, 0x21, 0x01, 0x13, 0x01, 0x57, 0x52, 0x14, 0x00, - 0x13, 0x41, 0x47, 0x5c, 0x14, 0x02, 0x13, 0x01, 0x47, 0x3a, 0x81, 0x3d, - 0x13, 0x41, 0xe1, 0x05, 0x13, 0x81, 0x9a, 0x02, 0xa2, 0x8d, 0x02, 0xa3, - 0x80, 0x02, 0xa4, 0xe7, 0x01, 0x42, 0x27, 0x01, 0x0f, 0x13, 0x01, 0xa7, - 0xd4, 0x01, 0x42, 0x22, 0x00, 0x39, 0x13, 0x01, 0xe9, 0x07, 0x13, 0x81, - 0xc4, 0x01, 0xaa, 0xb7, 0x01, 0xab, 0xaa, 0x01, 0xac, 0x9d, 0x01, 0x42, - 0x6c, 0x00, 0x2e, 0x13, 0x01, 0xae, 0x7f, 0x42, 0x99, 0x04, 0x13, 0x13, - 0x01, 0xb0, 0x6d, 0x42, 0x71, 0x00, 0x30, 0x13, 0x01, 0xb3, 0x55, 0xb4, - 0x3c, 0xf5, 0x09, 0x13, 0x81, 0x33, 0xb6, 0x06, 0x42, 0x20, 0x20, 0x2f, - 0x13, 0x41, 0xe1, 0x35, 0x13, 0x01, 0x05, 0x99, 0x09, 0x17, 0x07, 0x77, - 0xb7, 0x01, 0xff, 0xec, 0x0c, 0x13, 0x81, 0x09, 0xf2, 0x0b, 0x13, 0xc1, - 0x00, 0xf2, 0x60, 0x13, 0x41, 0xec, 0x61, 0x13, 0x41, 0x48, 0x5b, 0x14, - 0x5e, 0x13, 0x01, 0x4f, 0x71, 0x15, 0x5f, 0x13, 0x41, 0xf5, 0x0a, 0x13, - 0x41, 0xe1, 0x24, 0x13, 0x01, 0x42, 0x22, 0x00, 0x25, 0x13, 0x01, 0xb4, - 0x01, 0xff, 0xe1, 0x1f, 0x13, 0x01, 0x42, 0x22, 0x00, 0x20, 0x13, 0x41, - 0xe1, 0x38, 0x13, 0x01, 0x42, 0x22, 0x00, 0x36, 0x13, 0x01, 0x42, 0x45, - 0x05, 0x37, 0x13, 0x41, 0xe1, 0x2a, 0x13, 0x01, 0x42, 0x22, 0x00, 0x2b, - 0x13, 0x41, 0xe1, 0x28, 0x13, 0x01, 0x42, 0x24, 0x02, 0x19, 0x13, 0x01, - 0x42, 0x2f, 0x04, 0x23, 0x13, 0x01, 0x42, 0x20, 0x20, 0x1e, 0x13, 0x41, - 0xe1, 0x32, 0x13, 0x01, 0x42, 0x74, 0x00, 0x33, 0x13, 0x41, 0xe1, 0x15, - 0x13, 0x01, 0x42, 0x22, 0x00, 0x16, 0x13, 0x41, 0xe1, 0x1c, 0x13, 0x01, - 0x42, 0x22, 0x00, 0x1d, 0x13, 0x41, 0xe9, 0x08, 0x13, 0x41, 0xe1, 0x17, - 0x13, 0x01, 0x42, 0x22, 0x00, 0x18, 0x13, 0x41, 0xe1, 0x26, 0x13, 0x01, - 0xa4, 0x06, 0x42, 0x22, 0x00, 0x27, 0x13, 0x41, 0xe1, 0x21, 0x13, 0x01, - 0x42, 0x22, 0x00, 0x22, 0x13, 0x41, 0xe1, 0x1a, 0x13, 0x01, 0x42, 0x22, - 0x00, 0x1b, 0x13, 0x41, 0xe1, 0x2c, 0x13, 0x01, 0x42, 0x22, 0x00, 0x2d, - 0x13, 0x41, 0xe1, 0x06, 0x13, 0x01, 0xe9, 0x10, 0x13, 0x01, 0xf5, 0x14, - 0x13, 0x41, 0xa1, 0xd5, 0x01, 0x45, 0x66, 0xd2, 0x7d, 0xf9, 0x01, 0x44, - 0xe6, 0xe5, 0xcc, 0xf3, 0x01, 0x46, 0xc1, 0xd3, 0x7d, 0xf7, 0x01, 0x43, - 0xfc, 0x0b, 0xbf, 0xfa, 0x01, 0x45, 0x99, 0xdf, 0x8d, 0xf9, 0x01, 0x0c, - 0xfc, 0x8d, 0x01, 0xff, 0xa1, 0xa3, 0x01, 0x47, 0x34, 0xc5, 0x31, 0x03, - 0x01, 0x44, 0x7a, 0xe4, 0x33, 0x03, 0x01, 0x43, 0x76, 0xa3, 0x39, 0x03, - 0x01, 0x45, 0xa2, 0xdb, 0x46, 0x03, 0x01, 0x44, 0xf6, 0xe4, 0x32, 0x03, - 0x01, 0xa8, 0x77, 0xa9, 0x69, 0x43, 0x85, 0xb1, 0x3e, 0x03, 0x01, 0x45, - 0x28, 0xdd, 0x3a, 0x03, 0x01, 0x45, 0x46, 0xdd, 0x3b, 0x03, 0x01, 0x45, - 0x30, 0x8a, 0x3c, 0x03, 0x01, 0xae, 0x38, 0x45, 0xdb, 0xde, 0x49, 0x03, - 0x01, 0x48, 0xdd, 0xbf, 0x40, 0x03, 0x01, 0x48, 0x2d, 0xc0, 0x35, 0x03, - 0x01, 0x45, 0x5d, 0xdf, 0x42, 0x03, 0x01, 0x45, 0xe9, 0xdf, 0x43, 0x03, - 0x01, 0xb4, 0x0c, 0x44, 0xb2, 0xe7, 0x3f, 0x03, 0x01, 0x45, 0x5b, 0xe1, - 0x45, 0x03, 0x41, 0x44, 0xb2, 0xe4, 0x44, 0x03, 0x01, 0x45, 0x4c, 0xdc, - 0x38, 0x03, 0x41, 0x45, 0xd1, 0xd9, 0x3d, 0x03, 0x01, 0x03, 0xf1, 0x07, - 0x01, 0xff, 0x48, 0xe8, 0x0f, 0x4a, 0x03, 0x01, 0x42, 0xf5, 0x0f, 0x41, - 0x03, 0x41, 0x44, 0xea, 0xe4, 0x47, 0x03, 0x01, 0x43, 0x51, 0xc1, 0x36, - 0x03, 0x41, 0x43, 0xf2, 0x89, 0x37, 0x03, 0x01, 0x44, 0xf2, 0xe7, 0x48, - 0x03, 0x41, 0x43, 0xd4, 0xd9, 0x30, 0x03, 0x01, 0x45, 0x8d, 0xdc, 0x34, - 0x03, 0x41, 0x45, 0x32, 0xdd, 0x45, 0xf9, 0x01, 0xf4, 0x10, 0xf4, 0x41, - 0xa1, 0x1b, 0x4a, 0x3d, 0xa1, 0xe6, 0x29, 0x00, 0xaf, 0x01, 0xff, 0x51, - 0xde, 0x52, 0x10, 0xf3, 0x01, 0x43, 0xb2, 0x45, 0xe4, 0xf9, 0x01, 0x49, - 0x9a, 0xb7, 0x1f, 0xf3, 0x41, 0x08, 0xcc, 0x55, 0x06, 0x4a, 0x6d, 0xa8, - 0x5b, 0xf9, 0x41, 0x0f, 0xe9, 0x04, 0xc6, 0x02, 0x0d, 0x7c, 0x07, 0x01, - 0xff, 0x43, 0xbe, 0xe8, 0x30, 0x2c, 0x00, 0xa2, 0xac, 0x02, 0xa3, 0x9d, - 0x02, 0xa4, 0x88, 0x02, 0xa6, 0xf9, 0x01, 0x47, 0x25, 0xc7, 0x33, 0x2c, - 0x00, 0x44, 0x2a, 0xe5, 0x48, 0x2c, 0x00, 0xe9, 0x3b, 0x2c, 0x80, 0xc2, - 0x01, 0x44, 0xb2, 0xe5, 0x3d, 0x2c, 0x00, 0xac, 0xad, 0x01, 0x47, 0x91, - 0x64, 0x3f, 0x2c, 0x00, 0x45, 0x22, 0xde, 0x40, 0x2c, 0x00, 0xaf, 0x92, - 0x01, 0xb0, 0x85, 0x01, 0x45, 0x9e, 0xdf, 0x43, 0x2c, 0x00, 0xb3, 0x51, - 0xb4, 0x3d, 0x43, 0xd3, 0xcb, 0x46, 0x2c, 0x00, 0x44, 0xc6, 0xe7, 0x32, - 0x2c, 0x00, 0xb9, 0x0f, 0xba, 0x01, 0xff, 0x45, 0x3e, 0xdb, 0x38, 0x2c, - 0x00, 0x46, 0x23, 0xd2, 0x36, 0x2c, 0x40, 0x43, 0xb3, 0x00, 0x51, 0x2c, - 0x00, 0xa5, 0x08, 0xef, 0x56, 0x2c, 0x00, 0xf5, 0x53, 0x2c, 0x40, 0xb2, - 0x06, 0x43, 0x2c, 0x09, 0x35, 0x2c, 0x40, 0xe9, 0x50, 0x2c, 0x00, 0xf5, - 0x4f, 0x2c, 0x40, 0x4b, 0xf5, 0x99, 0x5d, 0x2c, 0x00, 0x42, 0xdb, 0x02, - 0x4c, 0x2c, 0x00, 0x45, 0x2e, 0xe1, 0x45, 0x2c, 0x40, 0xa8, 0x19, 0x44, - 0xfe, 0xe5, 0x44, 0x2c, 0x00, 0x48, 0xb5, 0xb5, 0x54, 0x2c, 0x80, 0x06, - 0x49, 0x8b, 0xb4, 0x52, 0x2c, 0x40, 0x4a, 0x1d, 0x9e, 0x55, 0x2c, 0x40, - 0xe1, 0x4e, 0x2c, 0x00, 0x42, 0x12, 0x00, 0x4b, 0x2c, 0xc0, 0x00, 0x43, - 0x75, 0x83, 0x5c, 0x2c, 0x40, 0xe5, 0x4a, 0x2c, 0x00, 0x45, 0xa6, 0xd4, - 0x42, 0x2c, 0x40, 0x42, 0x5c, 0x14, 0x41, 0x2c, 0x00, 0x42, 0x5c, 0x01, - 0x49, 0x2c, 0x40, 0x4f, 0x89, 0x64, 0x5e, 0x2c, 0x00, 0x46, 0xc3, 0xc8, - 0x3e, 0x2c, 0x40, 0x4b, 0xf0, 0x97, 0x3a, 0x2c, 0x00, 0x07, 0x50, 0x1f, - 0x0f, 0x02, 0x6d, 0x25, 0x01, 0xff, 0xe5, 0x39, 0x2c, 0x00, 0x44, 0x99, - 0x7e, 0x5b, 0x2c, 0x40, 0x47, 0x57, 0xc5, 0x59, 0x2c, 0x00, 0x49, 0xb4, - 0xb5, 0x57, 0x2c, 0x40, 0x43, 0xec, 0x04, 0x5a, 0x2c, 0x00, 0x44, 0xc9, - 0xb5, 0x47, 0x2c, 0x40, 0x45, 0xe2, 0xdc, 0x3c, 0x2c, 0x00, 0x44, 0xa6, - 0xe6, 0x34, 0x2c, 0x00, 0x44, 0x26, 0xe8, 0x37, 0x2c, 0x40, 0x4d, 0xe4, - 0x79, 0x5f, 0x2c, 0x00, 0x45, 0xec, 0x79, 0x4d, 0x2c, 0x40, 0x46, 0x58, - 0xc5, 0x58, 0x2c, 0x00, 0x43, 0x5f, 0xc8, 0x31, 0x2c, 0x40, 0x43, 0xbe, - 0xe8, 0x00, 0x2c, 0x00, 0xa2, 0xac, 0x02, 0xa3, 0x9d, 0x02, 0xa4, 0x88, - 0x02, 0xa6, 0xf9, 0x01, 0x47, 0x25, 0xc7, 0x03, 0x2c, 0x00, 0x44, 0x2a, - 0xe5, 0x18, 0x2c, 0x00, 0xe9, 0x0b, 0x2c, 0x80, 0xc2, 0x01, 0x44, 0xb2, - 0xe5, 0x0d, 0x2c, 0x00, 0xac, 0xad, 0x01, 0x47, 0x91, 0x64, 0x0f, 0x2c, - 0x00, 0x45, 0x22, 0xde, 0x10, 0x2c, 0x00, 0xaf, 0x92, 0x01, 0xb0, 0x85, - 0x01, 0x45, 0x9e, 0xdf, 0x13, 0x2c, 0x00, 0xb3, 0x51, 0xb4, 0x3d, 0x43, - 0xd3, 0xcb, 0x16, 0x2c, 0x00, 0x44, 0xc6, 0xe7, 0x02, 0x2c, 0x00, 0xb9, - 0x0f, 0xba, 0x01, 0xff, 0x45, 0x3e, 0xdb, 0x08, 0x2c, 0x00, 0x46, 0x23, - 0xd2, 0x06, 0x2c, 0x40, 0x43, 0xb3, 0x00, 0x21, 0x2c, 0x00, 0xa5, 0x08, - 0xef, 0x26, 0x2c, 0x00, 0xf5, 0x23, 0x2c, 0x40, 0xb2, 0x06, 0x43, 0x2c, - 0x09, 0x05, 0x2c, 0x40, 0xe9, 0x20, 0x2c, 0x00, 0xf5, 0x1f, 0x2c, 0x40, - 0x4b, 0xf5, 0x99, 0x2d, 0x2c, 0x00, 0x42, 0xdb, 0x02, 0x1c, 0x2c, 0x00, - 0x45, 0x2e, 0xe1, 0x15, 0x2c, 0x40, 0xa8, 0x19, 0x44, 0xfe, 0xe5, 0x14, - 0x2c, 0x00, 0x48, 0xb5, 0xb5, 0x24, 0x2c, 0x80, 0x06, 0x49, 0x8b, 0xb4, - 0x22, 0x2c, 0x40, 0x4a, 0x1d, 0x9e, 0x25, 0x2c, 0x40, 0xe1, 0x1e, 0x2c, - 0x00, 0x42, 0x12, 0x00, 0x1b, 0x2c, 0xc0, 0x00, 0x43, 0x75, 0x83, 0x2c, - 0x2c, 0x40, 0xe5, 0x1a, 0x2c, 0x00, 0x45, 0xa6, 0xd4, 0x12, 0x2c, 0x40, - 0x42, 0x5c, 0x14, 0x11, 0x2c, 0x00, 0x42, 0x5c, 0x01, 0x19, 0x2c, 0x40, - 0x4f, 0x89, 0x64, 0x2e, 0x2c, 0x00, 0x46, 0xc3, 0xc8, 0x0e, 0x2c, 0x40, - 0x4b, 0xf0, 0x97, 0x0a, 0x2c, 0x00, 0x07, 0x50, 0x1f, 0x0f, 0x02, 0x6d, - 0x25, 0x01, 0xff, 0xe5, 0x09, 0x2c, 0x00, 0x44, 0x99, 0x7e, 0x2b, 0x2c, - 0x40, 0x47, 0x57, 0xc5, 0x29, 0x2c, 0x00, 0x49, 0xb4, 0xb5, 0x27, 0x2c, - 0x40, 0x43, 0xec, 0x04, 0x2a, 0x2c, 0x00, 0x44, 0xc9, 0xb5, 0x17, 0x2c, - 0x40, 0x45, 0xe2, 0xdc, 0x0c, 0x2c, 0x00, 0x44, 0xa6, 0xe6, 0x04, 0x2c, - 0x00, 0x44, 0x26, 0xe8, 0x07, 0x2c, 0x40, 0x4d, 0xe4, 0x79, 0x2f, 0x2c, - 0x00, 0x45, 0xec, 0x79, 0x1d, 0x2c, 0x40, 0x46, 0x58, 0xc5, 0x28, 0x2c, - 0x00, 0x43, 0x5f, 0xc8, 0x01, 0x2c, 0x40, 0x4a, 0x1b, 0xa5, 0x37, 0x21, - 0x00, 0x49, 0xf6, 0xb2, 0xda, 0xfa, 0x01, 0xb2, 0x01, 0xff, 0x49, 0xab, - 0xac, 0x92, 0xf9, 0x01, 0xec, 0x67, 0xf4, 0xc1, 0x00, 0x48, 0xf4, 0x45, - 0xca, 0xf6, 0x41, 0x42, 0x17, 0x00, 0x99, 0x26, 0x80, 0xc0, 0x09, 0xad, - 0xb1, 0x09, 0x43, 0x5a, 0x77, 0xde, 0xf9, 0x01, 0xaf, 0x0c, 0x4f, 0xfa, - 0x6b, 0xb0, 0x20, 0x00, 0x47, 0xe7, 0xcb, 0x13, 0x30, 0x40, 0x06, 0xe2, - 0x4f, 0x81, 0x09, 0x06, 0xb1, 0x93, 0x01, 0xff, 0x0f, 0xe9, 0x04, 0xf3, - 0x06, 0x07, 0xf1, 0x04, 0xc1, 0x04, 0x18, 0x07, 0x27, 0x8f, 0x02, 0x53, - 0x94, 0x46, 0xfb, 0x10, 0x00, 0x0d, 0x7c, 0x07, 0x01, 0xff, 0xa1, 0xf7, - 0x01, 0x43, 0x45, 0x14, 0x01, 0x2d, 0x00, 0xa3, 0xd4, 0x01, 0x43, 0xe4, - 0x0f, 0x03, 0x2d, 0x00, 0x42, 0x92, 0x01, 0x04, 0x2d, 0x00, 0xa7, 0xb9, - 0x01, 0xa8, 0x9c, 0x01, 0x42, 0x9e, 0x01, 0x08, 0x2d, 0x00, 0xaa, 0x87, - 0x01, 0xab, 0x79, 0x43, 0xa1, 0x0c, 0x0a, 0x2d, 0x00, 0x43, 0x60, 0x16, - 0x0b, 0x2d, 0x00, 0x43, 0x36, 0x24, 0x0c, 0x2d, 0x00, 0x42, 0x10, 0x00, - 0x0d, 0x2d, 0x00, 0xb0, 0x53, 0x43, 0x54, 0xe9, 0x17, 0x2d, 0x00, 0x43, - 0x68, 0x7b, 0x10, 0x2d, 0x00, 0xb3, 0x39, 0x02, 0x12, 0x00, 0x2d, 0x42, - 0x24, 0x0a, 0x13, 0x2d, 0x00, 0x43, 0xda, 0x27, 0x05, 0x2d, 0x00, 0x42, - 0x15, 0x01, 0x23, 0x2d, 0x00, 0x43, 0x05, 0xe4, 0x1e, 0x2d, 0x00, 0x42, - 0xd0, 0x1a, 0x27, 0x2d, 0x00, 0xba, 0x01, 0xff, 0x42, 0x92, 0x01, 0x06, - 0x2d, 0x00, 0x43, 0x95, 0x04, 0x0f, 0x2d, 0x40, 0xee, 0x07, 0x2d, 0x00, - 0xf2, 0x12, 0x2d, 0x40, 0x42, 0x1a, 0x00, 0x11, 0x2d, 0x00, 0x43, 0x99, - 0x14, 0x18, 0x2d, 0x40, 0x42, 0x17, 0x00, 0x0e, 0x2d, 0x00, 0x43, 0x95, - 0x04, 0x14, 0x2d, 0x40, 0x42, 0x1a, 0x00, 0x09, 0x2d, 0x00, 0x43, 0x95, - 0x04, 0x15, 0x2d, 0x40, 0x43, 0x90, 0x00, 0x1f, 0x2d, 0x00, 0x42, 0x62, - 0x01, 0x1b, 0x2d, 0x40, 0xa1, 0x10, 0xe5, 0x21, 0x2d, 0x00, 0x42, 0xf7, - 0x0a, 0x22, 0x2d, 0x00, 0x42, 0xca, 0x4b, 0x25, 0x2d, 0x40, 0xe5, 0x20, - 0x2d, 0x00, 0xf2, 0x24, 0x2d, 0x40, 0x42, 0x1a, 0x00, 0x02, 0x2d, 0x00, - 0x43, 0x90, 0x00, 0x16, 0x2d, 0x40, 0x42, 0x1a, 0x00, 0x1a, 0x2d, 0x00, - 0xa8, 0x06, 0x42, 0x62, 0x01, 0x1c, 0x2d, 0x40, 0x42, 0x17, 0x00, 0x1d, - 0x2d, 0x00, 0x42, 0x9e, 0x01, 0x19, 0x2d, 0x40, 0x42, 0x92, 0x01, 0x2d, - 0x2d, 0x00, 0xee, 0x00, 0x2d, 0x40, 0xa1, 0x9a, 0x02, 0x43, 0x45, 0x14, - 0x91, 0x1c, 0x00, 0xa3, 0xf7, 0x01, 0x43, 0xe4, 0x0f, 0x93, 0x1c, 0x00, - 0xa5, 0xe4, 0x01, 0x42, 0xde, 0x08, 0xb6, 0x1c, 0x00, 0xa7, 0xcf, 0x01, - 0xa8, 0xab, 0x01, 0x42, 0x9e, 0x01, 0x98, 0x1c, 0x00, 0xaa, 0x96, 0x01, - 0xab, 0x87, 0x01, 0x02, 0x74, 0x00, 0x79, 0x43, 0x60, 0x16, 0x9b, 0x1c, - 0x00, 0x43, 0x36, 0x24, 0x9c, 0x1c, 0x00, 0x42, 0x10, 0x00, 0x9d, 0x1c, - 0x00, 0xb0, 0x59, 0x43, 0x54, 0xe9, 0xa7, 0x1c, 0x00, 0x43, 0x68, 0x7b, - 0xa0, 0x1c, 0x00, 0xb3, 0x3f, 0xb4, 0x2d, 0x42, 0x24, 0x0a, 0xa3, 0x1c, - 0x00, 0x43, 0xda, 0x27, 0x95, 0x1c, 0x00, 0x42, 0x15, 0x01, 0xb3, 0x1c, - 0x00, 0x43, 0x05, 0xe4, 0xae, 0x1c, 0x00, 0x42, 0xd0, 0x1a, 0xb7, 0x1c, - 0x00, 0xba, 0x01, 0xff, 0x42, 0x92, 0x01, 0x96, 0x1c, 0x00, 0x43, 0x95, - 0x04, 0x9f, 0x1c, 0x40, 0xa1, 0x06, 0x49, 0xf8, 0xb6, 0xb9, 0x1c, 0x40, - 0xee, 0x97, 0x1c, 0x00, 0xf2, 0xa2, 0x1c, 0x40, 0x42, 0x1a, 0x00, 0xa1, - 0x1c, 0x00, 0x43, 0x99, 0x14, 0xa8, 0x1c, 0x40, 0x42, 0x17, 0x00, 0x9e, - 0x1c, 0x00, 0x43, 0x95, 0x04, 0xa4, 0x1c, 0x40, 0x49, 0x8c, 0xad, 0xbf, - 0x1c, 0x00, 0xf3, 0x9a, 0x1c, 0x40, 0x42, 0x1a, 0x00, 0x99, 0x1c, 0x00, - 0x43, 0x95, 0x04, 0xa5, 0x1c, 0x40, 0x43, 0x90, 0x00, 0xaf, 0x1c, 0x00, - 0x42, 0x62, 0x01, 0xab, 0x1c, 0x40, 0xa1, 0x10, 0xe5, 0xb1, 0x1c, 0x00, - 0x42, 0xf7, 0x0a, 0xb2, 0x1c, 0x00, 0x42, 0xca, 0x4b, 0xb5, 0x1c, 0x40, - 0xe5, 0xb0, 0x1c, 0x00, 0xf2, 0xb4, 0x1c, 0xc0, 0x00, 0x46, 0x40, 0x42, - 0xbe, 0x1c, 0x40, 0x42, 0x1a, 0x00, 0x92, 0x1c, 0x00, 0x43, 0x90, 0x00, - 0xa6, 0x1c, 0x40, 0x44, 0x4d, 0x84, 0xb8, 0x1c, 0x00, 0xee, 0x94, 0x1c, - 0x40, 0x42, 0x1a, 0x00, 0xaa, 0x1c, 0x00, 0xa8, 0x06, 0x42, 0x62, 0x01, - 0xac, 0x1c, 0x40, 0x42, 0x17, 0x00, 0xad, 0x1c, 0x00, 0x42, 0x9e, 0x01, - 0xa9, 0x1c, 0x40, 0x42, 0x92, 0x01, 0xbd, 0x1c, 0x00, 0x42, 0x9e, 0x01, - 0xba, 0x1c, 0x00, 0xee, 0x90, 0x1c, 0x40, 0xa1, 0x9a, 0x02, 0x43, 0x45, - 0x14, 0xd1, 0x10, 0x00, 0xa3, 0xf7, 0x01, 0x43, 0xe4, 0x0f, 0xd3, 0x10, - 0x00, 0xa5, 0xe4, 0x01, 0x42, 0xde, 0x08, 0xf6, 0x10, 0x00, 0xa7, 0xcf, - 0x01, 0xa8, 0xab, 0x01, 0x42, 0x9e, 0x01, 0xd8, 0x10, 0x00, 0xaa, 0x96, - 0x01, 0xab, 0x87, 0x01, 0x02, 0x74, 0x00, 0x79, 0x43, 0x60, 0x16, 0xdb, - 0x10, 0x00, 0x43, 0x36, 0x24, 0xdc, 0x10, 0x00, 0x42, 0x10, 0x00, 0xdd, - 0x10, 0x00, 0xb0, 0x59, 0x43, 0x54, 0xe9, 0xe7, 0x10, 0x00, 0x43, 0x68, - 0x7b, 0xe0, 0x10, 0x00, 0xb3, 0x3f, 0xb4, 0x2d, 0x42, 0x24, 0x0a, 0xe3, - 0x10, 0x00, 0x43, 0xda, 0x27, 0xd5, 0x10, 0x00, 0x42, 0x15, 0x01, 0xf3, - 0x10, 0x00, 0x43, 0x05, 0xe4, 0xee, 0x10, 0x00, 0x42, 0xd0, 0x1a, 0xf7, - 0x10, 0x00, 0xba, 0x01, 0xff, 0x42, 0x92, 0x01, 0xd6, 0x10, 0x00, 0x43, - 0x95, 0x04, 0xdf, 0x10, 0x40, 0xa1, 0x06, 0x49, 0xf8, 0xb6, 0xf9, 0x10, - 0x40, 0xee, 0xd7, 0x10, 0x00, 0xf2, 0xe2, 0x10, 0x40, 0x42, 0x1a, 0x00, - 0xe1, 0x10, 0x00, 0x43, 0x99, 0x14, 0xe8, 0x10, 0x40, 0x42, 0x17, 0x00, - 0xde, 0x10, 0x00, 0x43, 0x95, 0x04, 0xe4, 0x10, 0x40, 0x49, 0x8c, 0xad, - 0xff, 0x10, 0x00, 0xf3, 0xda, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xd9, 0x10, - 0x00, 0x43, 0x95, 0x04, 0xe5, 0x10, 0x40, 0x43, 0x90, 0x00, 0xef, 0x10, - 0x00, 0x42, 0x62, 0x01, 0xeb, 0x10, 0x40, 0xa1, 0x10, 0xe5, 0xf1, 0x10, - 0x00, 0x42, 0xf7, 0x0a, 0xf2, 0x10, 0x00, 0x42, 0xca, 0x4b, 0xf5, 0x10, - 0x40, 0xe5, 0xf0, 0x10, 0x00, 0xf2, 0xf4, 0x10, 0xc0, 0x00, 0x46, 0x40, - 0x42, 0xfe, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xd2, 0x10, 0x00, 0x43, 0x90, - 0x00, 0xe6, 0x10, 0x40, 0x44, 0x4d, 0x84, 0xf8, 0x10, 0x00, 0xee, 0xd4, - 0x10, 0x40, 0x42, 0x1a, 0x00, 0xea, 0x10, 0x00, 0xa8, 0x06, 0x42, 0x62, - 0x01, 0xec, 0x10, 0x40, 0x42, 0x17, 0x00, 0xed, 0x10, 0x00, 0x42, 0x9e, - 0x01, 0xe9, 0x10, 0x40, 0x42, 0x92, 0x01, 0xfd, 0x10, 0x00, 0x42, 0x9e, - 0x01, 0xfa, 0x10, 0x00, 0xee, 0xd0, 0x10, 0x40, 0xa1, 0xf7, 0x01, 0x43, - 0x45, 0x14, 0xa1, 0x10, 0x00, 0xa3, 0xd4, 0x01, 0x43, 0xe4, 0x0f, 0xa3, - 0x10, 0x00, 0x42, 0x92, 0x01, 0xa4, 0x10, 0x00, 0xa7, 0xb9, 0x01, 0xa8, - 0x9c, 0x01, 0x42, 0x9e, 0x01, 0xa8, 0x10, 0x00, 0xaa, 0x87, 0x01, 0xab, - 0x79, 0x43, 0xa1, 0x0c, 0xaa, 0x10, 0x00, 0x43, 0x60, 0x16, 0xab, 0x10, - 0x00, 0x43, 0x36, 0x24, 0xac, 0x10, 0x00, 0x42, 0x10, 0x00, 0xad, 0x10, - 0x00, 0xb0, 0x53, 0x43, 0x54, 0xe9, 0xb7, 0x10, 0x00, 0x43, 0x68, 0x7b, - 0xb0, 0x10, 0x00, 0xb3, 0x39, 0x02, 0x12, 0x00, 0x2d, 0x42, 0x24, 0x0a, - 0xb3, 0x10, 0x00, 0x43, 0xda, 0x27, 0xa5, 0x10, 0x00, 0x42, 0x15, 0x01, - 0xc3, 0x10, 0x00, 0x43, 0x05, 0xe4, 0xbe, 0x10, 0x00, 0x42, 0xd0, 0x1a, - 0xc7, 0x10, 0x00, 0xba, 0x01, 0xff, 0x42, 0x92, 0x01, 0xa6, 0x10, 0x00, - 0x43, 0x95, 0x04, 0xaf, 0x10, 0x40, 0xee, 0xa7, 0x10, 0x00, 0xf2, 0xb2, - 0x10, 0x40, 0x42, 0x1a, 0x00, 0xb1, 0x10, 0x00, 0x43, 0x99, 0x14, 0xb8, - 0x10, 0x40, 0x42, 0x17, 0x00, 0xae, 0x10, 0x00, 0x43, 0x95, 0x04, 0xb4, - 0x10, 0x40, 0x42, 0x1a, 0x00, 0xa9, 0x10, 0x00, 0x43, 0x95, 0x04, 0xb5, - 0x10, 0x40, 0x43, 0x90, 0x00, 0xbf, 0x10, 0x00, 0x42, 0x62, 0x01, 0xbb, - 0x10, 0x40, 0xa1, 0x10, 0xe5, 0xc1, 0x10, 0x00, 0x42, 0xf7, 0x0a, 0xc2, - 0x10, 0x00, 0x42, 0xca, 0x4b, 0xc5, 0x10, 0x40, 0xe5, 0xc0, 0x10, 0x00, - 0xf2, 0xc4, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xa2, 0x10, 0x00, 0x43, 0x90, - 0x00, 0xb6, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xba, 0x10, 0x00, 0xa8, 0x06, - 0x42, 0x62, 0x01, 0xbc, 0x10, 0x40, 0x42, 0x17, 0x00, 0xbd, 0x10, 0x00, - 0x42, 0x9e, 0x01, 0xb9, 0x10, 0x40, 0x42, 0x92, 0x01, 0xcd, 0x10, 0x00, - 0xee, 0xa0, 0x10, 0x40, 0x4b, 0xbb, 0x8f, 0x3a, 0x22, 0x00, 0x08, 0x6d, - 0x0b, 0x01, 0xff, 0x45, 0x75, 0x0b, 0x51, 0x22, 0x00, 0x4a, 0x96, 0x35, - 0x4e, 0x22, 0x40, 0x46, 0x40, 0xb1, 0x8e, 0xf4, 0x01, 0x43, 0x36, 0x06, - 0x4a, 0x26, 0x40, 0x05, 0x50, 0x00, 0x01, 0xff, 0x48, 0x65, 0xb8, 0xee, - 0x26, 0x00, 0x47, 0xef, 0xc9, 0xed, 0x26, 0x40, 0x46, 0x7f, 0xd3, 0xb2, - 0xf3, 0x01, 0x44, 0x2f, 0xbb, 0xc4, 0xf9, 0x41, 0xa1, 0xc9, 0x0a, 0xa5, - 0x95, 0x0a, 0xa9, 0xc8, 0x08, 0xac, 0xc4, 0x07, 0xaf, 0x86, 0x06, 0xb2, - 0x95, 0x05, 0xb5, 0x01, 0xff, 0x47, 0xa0, 0xc6, 0xfd, 0x26, 0x00, 0x02, - 0x3f, 0x06, 0x14, 0xae, 0x06, 0x42, 0xc7, 0x02, 0xdb, 0x23, 0x40, 0x51, - 0xee, 0x53, 0x61, 0x20, 0x00, 0x48, 0x05, 0xbc, 0xb1, 0x26, 0x40, 0x80, - 0xcf, 0x04, 0x06, 0x93, 0x4a, 0x01, 0xff, 0xa1, 0xb5, 0x04, 0x4a, 0xd5, - 0x9f, 0xe4, 0xff, 0x00, 0xa3, 0x88, 0x04, 0xa4, 0xb9, 0x03, 0xa5, 0xaa, - 0x03, 0x49, 0xa0, 0x14, 0x0e, 0xff, 0x00, 0x02, 0x87, 0x00, 0x93, 0x03, - 0x4c, 0x44, 0x88, 0x0d, 0xff, 0x00, 0xac, 0x83, 0x01, 0x46, 0xd8, 0x69, - 0xe3, 0xff, 0x00, 0xae, 0x6f, 0xb0, 0x5b, 0x02, 0x7c, 0x00, 0x4b, 0xb2, - 0x26, 0xb3, 0x18, 0x45, 0x99, 0x20, 0x5e, 0xff, 0x00, 0x4d, 0x38, 0x3a, - 0x5c, 0xff, 0x00, 0x48, 0x75, 0xc2, 0xe6, 0xff, 0x00, 0x48, 0x3c, 0x78, - 0xe5, 0xff, 0x40, 0x48, 0x32, 0x54, 0x1b, 0xff, 0x00, 0x46, 0x68, 0x2d, - 0x0f, 0xff, 0x40, 0x4e, 0xa1, 0x6b, 0x3c, 0xff, 0x00, 0x05, 0xc9, 0x00, - 0x01, 0xff, 0x4d, 0x88, 0x08, 0x5d, 0xff, 0x00, 0x4b, 0x70, 0x1f, 0x09, - 0xff, 0x00, 0x4e, 0xe1, 0x23, 0x3d, 0xff, 0x00, 0x51, 0x93, 0x59, 0x60, - 0xff, 0x40, 0x4b, 0xbf, 0x30, 0x1f, 0xff, 0x00, 0x4c, 0x20, 0x04, 0x02, - 0xff, 0x40, 0x4b, 0xc5, 0x93, 0x05, 0xff, 0x00, 0x48, 0x1a, 0x6b, 0x0b, - 0xff, 0x00, 0x49, 0xe8, 0xa6, 0xe1, 0xff, 0x40, 0x47, 0xb6, 0x6c, 0xe2, - 0xff, 0x00, 0x4a, 0xa9, 0x61, 0x03, 0xff, 0x40, 0x05, 0xe4, 0x04, 0x2a, - 0xa5, 0x06, 0x47, 0xf4, 0x82, 0x3f, 0xff, 0x40, 0x03, 0xc5, 0x00, 0x06, - 0x4c, 0xa8, 0x8d, 0x1c, 0xff, 0x40, 0x4d, 0x88, 0x08, 0x5b, 0xff, 0x00, - 0x4b, 0x70, 0x1f, 0x08, 0xff, 0x00, 0x4e, 0xe1, 0x23, 0x3b, 0xff, 0x00, - 0x51, 0x93, 0x59, 0x5f, 0xff, 0x40, 0x0f, 0xe9, 0x04, 0x6d, 0x0d, 0x7c, - 0x07, 0x01, 0xff, 0xe1, 0x41, 0xff, 0x00, 0xe2, 0x42, 0xff, 0x00, 0xe3, - 0x43, 0xff, 0x00, 0xe4, 0x44, 0xff, 0x00, 0xe5, 0x45, 0xff, 0x00, 0xe6, - 0x46, 0xff, 0x00, 0xe7, 0x47, 0xff, 0x00, 0xe8, 0x48, 0xff, 0x00, 0xe9, - 0x49, 0xff, 0x00, 0xea, 0x4a, 0xff, 0x00, 0xeb, 0x4b, 0xff, 0x00, 0xec, - 0x4c, 0xff, 0x00, 0xed, 0x4d, 0xff, 0x00, 0xee, 0x4e, 0xff, 0x00, 0xef, - 0x4f, 0xff, 0x00, 0xf0, 0x50, 0xff, 0x00, 0xf1, 0x51, 0xff, 0x00, 0xf2, - 0x52, 0xff, 0x00, 0xf3, 0x53, 0xff, 0x00, 0xf4, 0x54, 0xff, 0x00, 0xf5, - 0x55, 0xff, 0x00, 0xf6, 0x56, 0xff, 0x00, 0xf7, 0x57, 0xff, 0x00, 0xf8, - 0x58, 0xff, 0x00, 0xf9, 0x59, 0xff, 0x00, 0xfa, 0x5a, 0xff, 0x40, 0xe1, - 0x21, 0xff, 0x00, 0xe2, 0x22, 0xff, 0x00, 0xe3, 0x23, 0xff, 0x00, 0xe4, - 0x24, 0xff, 0x00, 0xe5, 0x25, 0xff, 0x00, 0xe6, 0x26, 0xff, 0x00, 0xe7, - 0x27, 0xff, 0x00, 0xe8, 0x28, 0xff, 0x00, 0xe9, 0x29, 0xff, 0x00, 0xea, - 0x2a, 0xff, 0x00, 0xeb, 0x2b, 0xff, 0x00, 0xec, 0x2c, 0xff, 0x00, 0xed, - 0x2d, 0xff, 0x00, 0xee, 0x2e, 0xff, 0x00, 0xef, 0x2f, 0xff, 0x00, 0xf0, - 0x30, 0xff, 0x00, 0xf1, 0x31, 0xff, 0x00, 0xf2, 0x32, 0xff, 0x00, 0xf3, - 0x33, 0xff, 0x00, 0xf4, 0x34, 0xff, 0x00, 0xf5, 0x35, 0xff, 0x00, 0xf6, - 0x36, 0xff, 0x00, 0xf7, 0x37, 0xff, 0x00, 0xf8, 0x38, 0xff, 0x00, 0xf9, - 0x39, 0xff, 0x00, 0xfa, 0x3a, 0xff, 0x40, 0x4a, 0x7b, 0x20, 0x40, 0xff, - 0x00, 0x4f, 0xbc, 0x54, 0x1e, 0xff, 0x40, 0x4a, 0xa3, 0x11, 0x1d, 0xff, - 0x00, 0x4f, 0xae, 0x00, 0x01, 0xff, 0x40, 0x05, 0xf5, 0x05, 0x06, 0x4a, - 0x00, 0x93, 0x04, 0xff, 0x40, 0x45, 0xd1, 0x09, 0x18, 0xff, 0x00, 0xa6, - 0x2e, 0x44, 0xb8, 0x27, 0x19, 0xff, 0x00, 0x43, 0xcd, 0x09, 0x11, 0xff, - 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x10, 0xff, 0x40, 0x44, - 0x25, 0x01, 0x13, 0xff, 0x00, 0x42, 0x15, 0x02, 0x12, 0xff, 0x40, 0x44, - 0x96, 0x1b, 0x17, 0xff, 0x00, 0x42, 0x30, 0x27, 0x16, 0xff, 0x40, 0x43, - 0xd7, 0x04, 0x15, 0xff, 0x00, 0x43, 0xfb, 0x05, 0x14, 0xff, 0x40, 0x48, - 0xc8, 0x93, 0xe0, 0xff, 0x00, 0x50, 0xd5, 0x03, 0x3e, 0xff, 0x00, 0xaf, - 0x01, 0xff, 0x43, 0xac, 0x10, 0x1a, 0xff, 0x00, 0x02, 0x1a, 0x04, 0x01, - 0xff, 0xe1, 0x0c, 0xff, 0x00, 0x49, 0x45, 0xaf, 0x20, 0xff, 0x40, 0x48, - 0x94, 0x39, 0x06, 0xff, 0x00, 0x49, 0x4d, 0x32, 0x07, 0xff, 0x00, 0x47, - 0x95, 0x0b, 0x0a, 0xff, 0x40, 0x45, 0x33, 0x01, 0x88, 0x25, 0x00, 0x05, - 0x97, 0x19, 0x0c, 0x4a, 0x97, 0xa6, 0xd7, 0x27, 0x00, 0x44, 0xd6, 0x02, - 0x2e, 0x00, 0x40, 0x46, 0xf7, 0x06, 0x15, 0xf3, 0x01, 0x49, 0xa3, 0xb7, - 0x1d, 0xf3, 0x41, 0xa1, 0x45, 0xa5, 0x2c, 0x4a, 0xff, 0xa2, 0x64, 0xf3, - 0x01, 0xaf, 0x01, 0xff, 0x46, 0x31, 0x26, 0x38, 0xf4, 0x01, 0x03, 0x8e, - 0x0e, 0x0d, 0x42, 0xa7, 0x01, 0x22, 0x23, 0xc0, 0x00, 0x58, 0x2f, 0x26, - 0x26, 0xf6, 0x41, 0x51, 0x43, 0x54, 0x25, 0xf4, 0x01, 0x66, 0x5e, 0x04, - 0xac, 0x27, 0x40, 0x4a, 0x84, 0x93, 0x76, 0xf9, 0x01, 0x06, 0xa9, 0xd3, - 0x01, 0xff, 0x48, 0xa5, 0xb9, 0xa3, 0x20, 0x00, 0x43, 0xed, 0x95, 0x5f, - 0xf3, 0x41, 0x06, 0x25, 0x15, 0x17, 0x08, 0x65, 0xbe, 0x01, 0xff, 0x44, - 0x02, 0xe4, 0xbe, 0xf5, 0x01, 0x47, 0x75, 0x83, 0xbc, 0xf5, 0x01, 0x45, - 0x88, 0xcb, 0xbd, 0xf5, 0x41, 0x4d, 0x39, 0x7f, 0x5f, 0x21, 0x00, 0x45, - 0xa0, 0x0c, 0x44, 0x20, 0x40, 0xe7, 0x2b, 0xf3, 0x81, 0xaf, 0x01, 0x02, - 0xaf, 0x18, 0x9e, 0x01, 0x44, 0x56, 0xe6, 0xd5, 0xfa, 0x01, 0x42, 0x20, - 0x04, 0xb6, 0xf9, 0x81, 0x8a, 0x01, 0xb2, 0x55, 0xb5, 0x06, 0x46, 0xc1, - 0xd6, 0x8a, 0xf9, 0x41, 0x45, 0x33, 0x06, 0xf2, 0x26, 0x00, 0xb2, 0x01, - 0xff, 0x80, 0x0c, 0x4d, 0x3b, 0x79, 0x05, 0x20, 0x00, 0x47, 0x16, 0x94, - 0x1c, 0x22, 0x40, 0x57, 0xb5, 0x1a, 0x23, 0x27, 0x00, 0xa3, 0x22, 0x04, - 0x9f, 0x0a, 0x12, 0x4b, 0x4e, 0x96, 0x40, 0xf3, 0x01, 0x52, 0xbd, 0x28, - 0xc6, 0xf7, 0x01, 0x58, 0x3f, 0x28, 0x22, 0x27, 0x40, 0x44, 0xb9, 0x00, - 0x5b, 0x20, 0x00, 0x4b, 0xa3, 0x0a, 0x58, 0x20, 0x40, 0x53, 0x9d, 0x45, - 0x25, 0x27, 0x00, 0x63, 0x00, 0x0a, 0x94, 0x2b, 0x40, 0x44, 0x7b, 0x65, - 0x00, 0x22, 0x00, 0x43, 0x6c, 0x75, 0xa9, 0x22, 0x00, 0xab, 0x0c, 0x46, - 0x8f, 0xbf, 0x0c, 0x00, 0x00, 0x4b, 0x8c, 0x9b, 0x60, 0xf9, 0x41, 0x4a, - 0x41, 0x9d, 0x74, 0xf3, 0x81, 0x0c, 0x4e, 0x29, 0x4c, 0x10, 0x2e, 0x00, - 0x43, 0xa1, 0x01, 0xdc, 0x2a, 0x40, 0x4b, 0x3f, 0x90, 0x7d, 0xf3, 0x41, - 0x46, 0x4f, 0xc2, 0x63, 0xf4, 0x41, 0x42, 0x33, 0x00, 0xc0, 0xf5, 0x01, - 0x4c, 0x98, 0x88, 0xad, 0xfa, 0x41, 0x42, 0xa2, 0x31, 0x01, 0xf3, 0x41, - 0xa1, 0x5e, 0xa5, 0x50, 0xaf, 0x2a, 0xb5, 0x1c, 0xf9, 0xb0, 0xfa, 0xc1, - 0x00, 0x04, 0xa1, 0x01, 0x01, 0xff, 0x44, 0xff, 0x5d, 0x4f, 0xf9, 0x01, - 0x48, 0x44, 0x2e, 0x85, 0xf5, 0x01, 0x46, 0x35, 0xd5, 0xf8, 0xf6, 0x41, - 0x49, 0x9b, 0x8b, 0x33, 0xf6, 0x01, 0x42, 0x77, 0x00, 0x88, 0xfa, 0x41, - 0x48, 0x2f, 0x35, 0xbe, 0xf4, 0x01, 0x49, 0x5a, 0x1f, 0x66, 0x27, 0x00, - 0x43, 0x15, 0x01, 0x98, 0x26, 0xc0, 0x00, 0x02, 0x9b, 0x01, 0x01, 0xff, - 0x4c, 0x64, 0x89, 0xb4, 0xf3, 0x01, 0x4f, 0x8f, 0x1f, 0x55, 0x20, 0x40, - 0x49, 0xd4, 0xb6, 0x9c, 0x26, 0x00, 0x4a, 0xc5, 0xaa, 0xaa, 0xf4, 0x41, - 0x49, 0xde, 0xaf, 0xf3, 0x26, 0x00, 0x45, 0xe6, 0xdd, 0xa9, 0xf9, 0x01, - 0xb4, 0x01, 0xff, 0x45, 0xd1, 0x8f, 0x7f, 0xf9, 0x01, 0x45, 0xfb, 0x70, - 0xd3, 0xfa, 0x01, 0x44, 0x86, 0x21, 0xe5, 0x23, 0x40, 0x59, 0x66, 0x21, - 0xd1, 0xf3, 0x01, 0x05, 0x01, 0xdc, 0xb3, 0x01, 0xac, 0x89, 0x01, 0x52, - 0x2f, 0x4e, 0x0d, 0x2a, 0x00, 0xb2, 0x30, 0xb3, 0x11, 0x07, 0xf8, 0xcc, - 0x01, 0xff, 0x44, 0xb9, 0x00, 0x2d, 0x2e, 0x00, 0x4b, 0xa3, 0x0a, 0x59, - 0x20, 0x40, 0xe8, 0x1f, 0xf4, 0x81, 0x06, 0x4d, 0xa9, 0x81, 0x4a, 0xf4, - 0x41, 0x57, 0x17, 0x29, 0x65, 0xf3, 0x01, 0x43, 0xae, 0x1a, 0xc9, 0x25, - 0x00, 0x51, 0x75, 0x55, 0xa3, 0xf3, 0x41, 0xe5, 0x25, 0xf5, 0x81, 0x27, - 0x03, 0x9b, 0x16, 0x01, 0xff, 0x4b, 0x78, 0x6a, 0x47, 0xf9, 0x01, 0x4c, - 0x84, 0x6c, 0x3d, 0x26, 0x80, 0x06, 0x4e, 0xc2, 0x75, 0x68, 0x20, 0x40, - 0x80, 0x01, 0xff, 0x46, 0xf7, 0x06, 0x13, 0xf3, 0x01, 0x49, 0xa3, 0xb7, - 0x1b, 0xf3, 0x41, 0x02, 0x7a, 0x00, 0x15, 0x47, 0xff, 0xc5, 0xe8, 0xf9, - 0x01, 0x04, 0x12, 0x46, 0x01, 0xff, 0x49, 0xd3, 0xab, 0x87, 0xf3, 0x01, - 0xf3, 0x86, 0xf3, 0x41, 0x45, 0x0d, 0x94, 0x92, 0xf6, 0x01, 0x4b, 0xec, - 0x9c, 0xef, 0xf9, 0x41, 0x02, 0x60, 0x00, 0x11, 0x02, 0xa0, 0x03, 0x01, - 0xff, 0x46, 0x75, 0xd1, 0x9e, 0xf3, 0x01, 0x49, 0xb8, 0xb4, 0xfd, 0xf4, - 0x41, 0x47, 0x8f, 0xc5, 0xc4, 0xf5, 0x01, 0x46, 0x2b, 0xa3, 0xc1, 0xf4, - 0x01, 0x49, 0x70, 0x1e, 0x1c, 0x00, 0x40, 0x44, 0xe9, 0x10, 0x12, 0x20, - 0x00, 0x45, 0x4d, 0x47, 0x07, 0x20, 0x40, 0xa1, 0x23, 0xad, 0x15, 0x44, - 0x4e, 0xe6, 0x3a, 0xf9, 0x01, 0x02, 0xcf, 0x00, 0x01, 0xff, 0x48, 0x5d, - 0xbd, 0xa1, 0xf3, 0x01, 0xf9, 0xf4, 0x26, 0x40, 0x48, 0xfa, 0x1e, 0x40, - 0x26, 0x00, 0x57, 0x84, 0x2b, 0xaa, 0x00, 0x40, 0x49, 0x24, 0xb5, 0x28, - 0xf6, 0x01, 0x44, 0x12, 0x18, 0xb6, 0xfa, 0x41, 0xa3, 0x55, 0x43, 0x08, - 0xd6, 0xda, 0xf9, 0x01, 0xac, 0x23, 0x44, 0x59, 0xd1, 0x6a, 0xf4, 0x01, - 0x4a, 0xd7, 0xa7, 0x2b, 0x26, 0x00, 0x4e, 0x24, 0x76, 0x85, 0xf3, 0x01, - 0x02, 0xdd, 0x03, 0x01, 0xff, 0x44, 0x20, 0xd7, 0xb7, 0xf5, 0x01, 0x47, - 0x10, 0x43, 0xe0, 0xf4, 0x41, 0x44, 0xe6, 0xe3, 0xc6, 0xf9, 0x01, 0xac, - 0x01, 0xff, 0x47, 0xa7, 0xc6, 0x42, 0xf3, 0x01, 0x0d, 0x51, 0x2d, 0x01, - 0xff, 0x09, 0x0d, 0x0f, 0x06, 0x5f, 0xa7, 0x0f, 0xde, 0x26, 0x40, 0x50, - 0x0b, 0x21, 0x2f, 0x29, 0x00, 0x4f, 0x7b, 0x39, 0x2c, 0x29, 0x40, 0x02, - 0x60, 0x00, 0x0c, 0x4b, 0x63, 0x9a, 0x3b, 0x21, 0x00, 0x44, 0xe3, 0x8e, - 0xed, 0xf3, 0x41, 0x52, 0xa3, 0x4c, 0x79, 0xf9, 0x01, 0x47, 0xf3, 0xc8, - 0x86, 0xf4, 0x01, 0x44, 0x00, 0x3c, 0x26, 0xf9, 0x01, 0xb3, 0xc5, 0x01, - 0x4f, 0xdb, 0x6c, 0x18, 0xf6, 0x01, 0x04, 0x51, 0x00, 0x01, 0xff, 0x80, - 0x06, 0x49, 0x1f, 0xb4, 0x36, 0xf6, 0x41, 0x02, 0x18, 0x04, 0xa1, 0x01, - 0x4e, 0xe8, 0x6f, 0xe4, 0xfa, 0x01, 0x5b, 0x37, 0x19, 0x2b, 0xf9, 0x01, - 0x4c, 0x20, 0x88, 0x15, 0xf9, 0x01, 0x4f, 0x2a, 0x69, 0x24, 0xf6, 0x01, - 0xad, 0x7b, 0x4f, 0xde, 0x69, 0x45, 0xf6, 0x01, 0xaf, 0x46, 0xb0, 0x32, - 0x4c, 0x18, 0x8d, 0x44, 0xf6, 0x01, 0x50, 0x49, 0x61, 0x1b, 0xf6, 0x81, - 0x14, 0xb4, 0x06, 0x5a, 0xec, 0x1f, 0x74, 0xf9, 0x41, 0x4b, 0xd9, 0x8d, - 0x02, 0xf6, 0x01, 0x4a, 0x9b, 0xa2, 0x12, 0xf9, 0x41, 0x05, 0x19, 0x00, - 0x01, 0xff, 0x53, 0x10, 0x48, 0x1d, 0xf6, 0x01, 0x4b, 0xaa, 0x9c, 0x1c, - 0xf6, 0x41, 0x57, 0xfd, 0x29, 0x73, 0xf9, 0x01, 0x4a, 0x33, 0xa1, 0xe3, - 0xfa, 0x01, 0x4c, 0x70, 0x89, 0x7a, 0xf9, 0x41, 0x49, 0x8e, 0xb1, 0x46, - 0xf6, 0x01, 0x51, 0xa7, 0x56, 0x28, 0xf9, 0x01, 0x04, 0xfc, 0x03, 0x01, - 0xff, 0x58, 0x9f, 0x25, 0xe2, 0xfa, 0x01, 0x45, 0x08, 0x07, 0x2e, 0xf6, - 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4e, 0xfa, 0x6e, 0x30, 0xf6, 0x01, 0x48, - 0x45, 0xc2, 0x2e, 0xf9, 0x41, 0x4b, 0x78, 0x93, 0x37, 0xf6, 0x01, 0x46, - 0x45, 0xd4, 0xd0, 0xf9, 0x41, 0x48, 0x00, 0x6f, 0x13, 0xf6, 0x01, 0x48, - 0x5d, 0xc2, 0x20, 0xf9, 0x41, 0x57, 0x42, 0x2a, 0x0b, 0xf6, 0x01, 0x50, - 0x99, 0x5b, 0x31, 0xf6, 0x41, 0x4c, 0x30, 0x84, 0xe7, 0xf4, 0x01, 0xa1, - 0xf5, 0x47, 0x50, 0xb9, 0x5b, 0x0e, 0x2e, 0x00, 0xa7, 0x83, 0x20, 0x04, - 0xc9, 0x00, 0xcb, 0x1f, 0x4b, 0xb4, 0x95, 0xcf, 0x23, 0x00, 0xac, 0xc1, - 0x1b, 0xad, 0x8d, 0x1a, 0xae, 0x86, 0x19, 0x02, 0x7c, 0x00, 0xd0, 0x17, - 0xb2, 0xfb, 0x16, 0xb3, 0xe3, 0x16, 0x08, 0x6d, 0xc1, 0xe6, 0x01, 0xb5, - 0xbb, 0x01, 0x4d, 0x93, 0x82, 0x32, 0xf3, 0x01, 0xb8, 0x11, 0x42, 0x4d, - 0x00, 0x41, 0xf4, 0xc1, 0x00, 0x47, 0xb2, 0xb6, 0x53, 0xf4, 0x01, 0xf3, - 0x40, 0xf4, 0x41, 0xa3, 0x88, 0x01, 0x51, 0x51, 0x57, 0x11, 0xf6, 0x01, - 0xb4, 0x01, 0xff, 0x19, 0xe1, 0x05, 0x39, 0xb2, 0x01, 0xff, 0x52, 0xbd, - 0x4a, 0x7d, 0xf4, 0x01, 0x0c, 0xf4, 0x86, 0x01, 0xff, 0x54, 0x74, 0x3d, - 0xb4, 0xf7, 0x01, 0x4b, 0x1e, 0x5b, 0xa7, 0xf7, 0x01, 0xb3, 0x11, 0x06, - 0xad, 0x02, 0x01, 0xff, 0x46, 0x00, 0x04, 0x89, 0xf7, 0x01, 0x46, 0xdb, - 0x04, 0x93, 0xf7, 0x41, 0x46, 0x16, 0x17, 0xae, 0xf7, 0x01, 0x52, 0x57, - 0x4d, 0xba, 0xf7, 0x41, 0x45, 0xd1, 0x09, 0xf8, 0x06, 0x00, 0xa6, 0x2e, - 0x44, 0xb8, 0x27, 0xf9, 0x06, 0x00, 0x43, 0xcd, 0x09, 0xf1, 0x06, 0x00, - 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xf0, 0x06, 0x40, 0x44, 0x25, - 0x01, 0xf3, 0x06, 0x00, 0x42, 0x15, 0x02, 0xf2, 0x06, 0x40, 0x44, 0x96, - 0x1b, 0xf7, 0x06, 0x00, 0x42, 0x30, 0x27, 0xf6, 0x06, 0x40, 0x43, 0xd7, - 0x04, 0xf5, 0x06, 0x00, 0x43, 0xfb, 0x05, 0xf4, 0x06, 0x40, 0x43, 0xed, - 0x00, 0x39, 0x22, 0x00, 0x09, 0xb0, 0x00, 0x01, 0xff, 0x44, 0xb9, 0x00, - 0x21, 0x00, 0x00, 0x4d, 0xbd, 0x30, 0x49, 0x20, 0x40, 0x4c, 0x88, 0x89, - 0x07, 0x21, 0x00, 0x02, 0xd0, 0x00, 0x01, 0xff, 0x45, 0xda, 0x02, 0xac, - 0x20, 0x00, 0x4e, 0x98, 0x6e, 0xa0, 0x20, 0x00, 0x05, 0xf9, 0xde, 0x01, - 0xff, 0x46, 0x19, 0xd0, 0xf0, 0xf3, 0x01, 0x4b, 0x24, 0x99, 0xe4, 0xf3, - 0x41, 0x02, 0x18, 0x04, 0xca, 0x14, 0x06, 0xf4, 0x05, 0x88, 0x14, 0x49, - 0xa0, 0x14, 0x62, 0x13, 0x00, 0x07, 0xbf, 0x35, 0xb3, 0x13, 0xb0, 0xa4, - 0x13, 0x4d, 0xbd, 0x30, 0x67, 0x13, 0x00, 0xb3, 0x4b, 0x0b, 0x4a, 0x9b, - 0x06, 0x49, 0xac, 0xb7, 0x61, 0x13, 0x40, 0x46, 0x49, 0xd0, 0x96, 0x13, - 0x00, 0xa4, 0x26, 0x45, 0x10, 0xce, 0x97, 0x13, 0x00, 0xab, 0x12, 0x46, - 0x7e, 0x8d, 0x92, 0x13, 0x00, 0x4c, 0x78, 0x8d, 0x93, 0x13, 0x00, 0x45, - 0x92, 0xe1, 0x90, 0x13, 0x40, 0x44, 0xcd, 0x4a, 0x95, 0x13, 0x00, 0x43, - 0x0e, 0x57, 0x99, 0x13, 0x40, 0x44, 0x8b, 0xa1, 0x91, 0x13, 0x80, 0x06, - 0x44, 0x72, 0xe5, 0x94, 0x13, 0x40, 0x46, 0x0f, 0xce, 0x98, 0x13, 0x40, - 0xa5, 0xc2, 0x12, 0x08, 0x3a, 0x16, 0x01, 0xff, 0xa2, 0xe3, 0x11, 0xa3, - 0xab, 0x10, 0xa4, 0x98, 0x0f, 0xa6, 0xde, 0x0e, 0xa7, 0x9c, 0x0c, 0xa8, - 0xa2, 0x0b, 0xaa, 0xf6, 0x0a, 0xab, 0xdc, 0x09, 0xac, 0xb0, 0x09, 0xad, - 0xf1, 0x08, 0xae, 0x99, 0x08, 0xb0, 0x91, 0x07, 0xb1, 0xf7, 0x05, 0xb2, - 0xc5, 0x05, 0xb3, 0x89, 0x04, 0xb4, 0xc4, 0x02, 0xb6, 0x9d, 0x02, 0xb7, - 0xf7, 0x01, 0xb8, 0x98, 0x01, 0xb9, 0x73, 0xba, 0x01, 0xff, 0xe1, 0xd8, - 0x12, 0x80, 0x67, 0xe5, 0xdd, 0x12, 0x80, 0x5e, 0xa8, 0x38, 0xe9, 0xda, - 0x12, 0x00, 0xef, 0xde, 0x12, 0x80, 0x2b, 0xf5, 0xd9, 0x12, 0x00, 0x42, - 0xa9, 0x01, 0xdf, 0x12, 0x00, 0xba, 0x01, 0xff, 0xe1, 0xb0, 0x2d, 0x80, - 0x15, 0xe5, 0xb5, 0x2d, 0x80, 0x0c, 0xe9, 0xb2, 0x2d, 0x00, 0xef, 0xb6, - 0x2d, 0x00, 0xf5, 0xb1, 0x2d, 0x40, 0xe5, 0xb4, 0x2d, 0x40, 0xe1, 0xb3, - 0x2d, 0x40, 0xe1, 0x8b, 0x2d, 0x40, 0xe1, 0xe0, 0x12, 0x80, 0x1b, 0xe5, - 0xe5, 0x12, 0x80, 0x12, 0xe9, 0xe2, 0x12, 0x00, 0xef, 0xe6, 0x12, 0x00, - 0xf5, 0xe1, 0x12, 0x00, 0x42, 0xa9, 0x01, 0xe7, 0x12, 0x40, 0xe5, 0xe4, - 0x12, 0x40, 0xe1, 0xe3, 0x12, 0x40, 0xe5, 0xdc, 0x12, 0x40, 0xe1, 0xdb, - 0x12, 0x40, 0xe1, 0xe8, 0x12, 0x80, 0x1a, 0xe5, 0xed, 0x12, 0x80, 0x11, - 0xe9, 0xea, 0x12, 0x00, 0xef, 0xee, 0x12, 0x80, 0x04, 0xf5, 0xe9, 0x12, - 0x40, 0xe1, 0xef, 0x12, 0x40, 0xe5, 0xec, 0x12, 0x40, 0xe1, 0xeb, 0x12, - 0x40, 0xe1, 0x80, 0x12, 0x80, 0x53, 0xe5, 0x85, 0x12, 0x80, 0x4a, 0xe9, - 0x82, 0x12, 0x00, 0xef, 0x86, 0x12, 0x80, 0x3d, 0xf5, 0x81, 0x12, 0x00, - 0xb7, 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xd0, 0x2d, 0x80, 0x15, 0xe5, 0xd5, - 0x2d, 0x80, 0x0c, 0xe9, 0xd2, 0x2d, 0x00, 0xef, 0xd6, 0x2d, 0x00, 0xf5, - 0xd1, 0x2d, 0x40, 0xe5, 0xd4, 0x2d, 0x40, 0xe1, 0xd3, 0x2d, 0x40, 0xe1, - 0x88, 0x12, 0x80, 0x0d, 0xe5, 0x8d, 0x12, 0x80, 0x04, 0xe9, 0x8a, 0x12, - 0x40, 0xe5, 0x8c, 0x12, 0x40, 0xe1, 0x8b, 0x12, 0x40, 0xe1, 0x87, 0x12, - 0x40, 0xe5, 0x84, 0x12, 0x40, 0xe1, 0x83, 0x12, 0x40, 0xe1, 0xc8, 0x12, - 0x80, 0x1a, 0xe5, 0xcd, 0x12, 0x80, 0x11, 0xe9, 0xca, 0x12, 0x00, 0xef, - 0xce, 0x12, 0x80, 0x04, 0xf5, 0xc9, 0x12, 0x40, 0xe1, 0xcf, 0x12, 0x40, - 0xe5, 0xcc, 0x12, 0x40, 0xe1, 0xcb, 0x12, 0x40, 0xe1, 0x68, 0x12, 0x80, - 0x1b, 0xe5, 0x6d, 0x12, 0x80, 0x12, 0xe9, 0x6a, 0x12, 0x00, 0xef, 0x6e, - 0x12, 0x00, 0xf5, 0x69, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x6f, 0x12, 0x40, - 0xe5, 0x6c, 0x12, 0x40, 0xe1, 0x6b, 0x12, 0x40, 0xe1, 0x70, 0x12, 0x80, - 0xb8, 0x01, 0xe5, 0x75, 0x12, 0x80, 0xae, 0x01, 0xa8, 0x82, 0x01, 0xe9, - 0x72, 0x12, 0x00, 0xef, 0x76, 0x12, 0x80, 0x75, 0xb3, 0x4f, 0x02, 0x53, - 0x00, 0x30, 0xf5, 0x71, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x77, 0x12, 0x00, - 0xba, 0x01, 0xff, 0xe1, 0x40, 0x13, 0x80, 0x1a, 0xe5, 0x45, 0x13, 0x80, - 0x11, 0xe9, 0x42, 0x13, 0x00, 0xef, 0x46, 0x13, 0x80, 0x04, 0xf5, 0x41, - 0x13, 0x40, 0xe1, 0x47, 0x13, 0x40, 0xe5, 0x44, 0x13, 0x40, 0xe1, 0x43, - 0x13, 0x40, 0x42, 0xda, 0x10, 0x03, 0xab, 0x00, 0xe5, 0x05, 0xab, 0x80, - 0x0c, 0xe9, 0x02, 0xab, 0x00, 0xef, 0x06, 0xab, 0x00, 0xf5, 0x01, 0xab, - 0x40, 0xe5, 0x04, 0xab, 0x40, 0xe1, 0x38, 0x13, 0x80, 0x1b, 0xe5, 0x3d, - 0x13, 0x80, 0x12, 0xe9, 0x3a, 0x13, 0x00, 0xef, 0x3e, 0x13, 0x00, 0xf5, - 0x39, 0x13, 0x00, 0x42, 0xa9, 0x01, 0x3f, 0x13, 0x40, 0xe5, 0x3c, 0x13, - 0x40, 0xe1, 0x3b, 0x13, 0x40, 0xe1, 0x86, 0x2d, 0x40, 0xe1, 0x20, 0x13, - 0x80, 0x20, 0xe5, 0x25, 0x13, 0x80, 0x17, 0xe9, 0x22, 0x13, 0x00, 0xef, - 0x26, 0x13, 0x80, 0x0a, 0xf5, 0x21, 0x13, 0x00, 0x42, 0xa9, 0x01, 0x27, - 0x13, 0x40, 0xe1, 0x8f, 0x2d, 0x40, 0xe5, 0x24, 0x13, 0x40, 0xe1, 0x23, - 0x13, 0x40, 0xe5, 0x74, 0x12, 0x40, 0xe1, 0x73, 0x12, 0x40, 0xe1, 0x30, - 0x12, 0x80, 0xaf, 0x01, 0xe5, 0x35, 0x12, 0x80, 0x89, 0x01, 0xa8, 0x5e, - 0xe9, 0x32, 0x12, 0x00, 0xef, 0x36, 0x12, 0x80, 0x51, 0xb3, 0x31, 0xf5, - 0x31, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x37, 0x12, 0x00, 0xba, 0x01, 0xff, - 0xe1, 0x20, 0x12, 0x80, 0x1b, 0xe5, 0x25, 0x12, 0x80, 0x12, 0xe9, 0x22, - 0x12, 0x00, 0xef, 0x26, 0x12, 0x00, 0xf5, 0x21, 0x12, 0x00, 0x42, 0xa9, - 0x01, 0x27, 0x12, 0x40, 0xe5, 0x24, 0x12, 0x40, 0xe1, 0x23, 0x12, 0x40, - 0xe1, 0xa0, 0x2d, 0x80, 0x15, 0xe5, 0xa5, 0x2d, 0x80, 0x0c, 0xe9, 0xa2, - 0x2d, 0x00, 0xef, 0xa6, 0x2d, 0x00, 0xf5, 0xa1, 0x2d, 0x40, 0xe5, 0xa4, - 0x2d, 0x40, 0xe1, 0xa3, 0x2d, 0x40, 0xe1, 0x83, 0x2d, 0x40, 0xe1, 0x38, - 0x12, 0x80, 0x20, 0xe5, 0x3d, 0x12, 0x80, 0x17, 0xe9, 0x3a, 0x12, 0x00, - 0xef, 0x3e, 0x12, 0x80, 0x0a, 0xf5, 0x39, 0x12, 0x00, 0x42, 0xa9, 0x01, - 0x3f, 0x12, 0x40, 0xe1, 0x84, 0x2d, 0x40, 0xe5, 0x3c, 0x12, 0x40, 0xe1, - 0x3b, 0x12, 0x40, 0x08, 0x45, 0xba, 0x04, 0xe5, 0x34, 0x12, 0x40, 0x43, - 0x15, 0xc8, 0x84, 0x13, 0x00, 0x43, 0xda, 0xe4, 0x88, 0x13, 0x00, 0x43, - 0xcc, 0x8c, 0x80, 0x13, 0x00, 0x43, 0x51, 0x02, 0x8c, 0x13, 0x40, 0xe1, - 0x33, 0x12, 0x40, 0xe1, 0x28, 0x12, 0x80, 0x26, 0xe5, 0x2d, 0x12, 0x80, - 0x1d, 0xe9, 0x2a, 0x12, 0x00, 0xef, 0x2e, 0x12, 0x80, 0x10, 0xf5, 0x29, - 0x12, 0x00, 0x42, 0xa9, 0x01, 0x2f, 0x12, 0x00, 0x42, 0x20, 0x20, 0x58, - 0x13, 0x40, 0xe1, 0x82, 0x2d, 0x40, 0xe5, 0x2c, 0x12, 0x40, 0xe1, 0x2b, - 0x12, 0x40, 0xe1, 0x40, 0x12, 0x80, 0x8d, 0x01, 0xe5, 0x45, 0x12, 0x80, - 0x83, 0x01, 0xa8, 0x4a, 0xe9, 0x42, 0x12, 0x00, 0xef, 0x46, 0x12, 0x80, - 0x3d, 0xf5, 0x41, 0x12, 0x00, 0xb7, 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xc0, - 0x2d, 0x80, 0x15, 0xe5, 0xc5, 0x2d, 0x80, 0x0c, 0xe9, 0xc2, 0x2d, 0x00, - 0xef, 0xc6, 0x2d, 0x00, 0xf5, 0xc1, 0x2d, 0x40, 0xe5, 0xc4, 0x2d, 0x40, - 0xe1, 0xc3, 0x2d, 0x40, 0xe1, 0x48, 0x12, 0x80, 0x0d, 0xe5, 0x4d, 0x12, - 0x80, 0x04, 0xe9, 0x4a, 0x12, 0x40, 0xe5, 0x4c, 0x12, 0x40, 0xe1, 0x4b, - 0x12, 0x40, 0xe1, 0x47, 0x12, 0x40, 0xe1, 0x50, 0x12, 0x80, 0x2e, 0xe5, - 0x55, 0x12, 0x80, 0x25, 0xe9, 0x52, 0x12, 0x00, 0xef, 0x56, 0x12, 0x00, - 0xf5, 0x51, 0x12, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x58, 0x12, 0x80, 0x0d, - 0xe5, 0x5d, 0x12, 0x80, 0x04, 0xe9, 0x5a, 0x12, 0x40, 0xe5, 0x5c, 0x12, - 0x40, 0xe1, 0x5b, 0x12, 0x40, 0xe5, 0x54, 0x12, 0x40, 0xe1, 0x53, 0x12, - 0x40, 0xe5, 0x44, 0x12, 0x40, 0xe1, 0x43, 0x12, 0x40, 0xe1, 0x50, 0x13, - 0x80, 0x7c, 0xe5, 0x55, 0x13, 0x80, 0x73, 0xa8, 0x25, 0xe9, 0x52, 0x13, - 0x00, 0xef, 0x56, 0x13, 0x80, 0x18, 0xf5, 0x51, 0x13, 0x00, 0xb7, 0x01, - 0xff, 0xe1, 0x57, 0x13, 0x00, 0xe5, 0x8f, 0x13, 0x80, 0x04, 0xe9, 0x8d, - 0x13, 0x40, 0xe5, 0x8e, 0x13, 0x40, 0xe1, 0x92, 0x2d, 0x40, 0xe1, 0x30, - 0x13, 0x80, 0x20, 0xe5, 0x35, 0x13, 0x80, 0x17, 0xe9, 0x32, 0x13, 0x00, - 0xef, 0x36, 0x13, 0x80, 0x0a, 0xf5, 0x31, 0x13, 0x00, 0x42, 0xa9, 0x01, - 0x37, 0x13, 0x40, 0xe1, 0x91, 0x2d, 0x40, 0xe5, 0x34, 0x13, 0x40, 0xe1, - 0x33, 0x13, 0x00, 0x08, 0xcf, 0x1a, 0x01, 0xff, 0xe1, 0xd0, 0x12, 0x80, - 0x15, 0xe5, 0xd5, 0x12, 0x80, 0x0c, 0xe9, 0xd2, 0x12, 0x00, 0xef, 0xd6, - 0x12, 0x00, 0xf5, 0xd1, 0x12, 0x40, 0xe5, 0xd4, 0x12, 0x40, 0xe1, 0xd3, - 0x12, 0x40, 0xe5, 0x54, 0x13, 0x40, 0xe1, 0x53, 0x13, 0x40, 0xe1, 0x90, - 0x12, 0x80, 0x4c, 0xe5, 0x95, 0x12, 0x80, 0x43, 0xe9, 0x92, 0x12, 0x00, - 0xef, 0x96, 0x12, 0x80, 0x36, 0xf5, 0x91, 0x12, 0x00, 0x42, 0xa9, 0x01, - 0x97, 0x12, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x98, 0x12, 0x80, 0x20, 0xe5, - 0x9d, 0x12, 0x80, 0x17, 0xe9, 0x9a, 0x12, 0x00, 0xef, 0x9e, 0x12, 0x80, - 0x0a, 0xf5, 0x99, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x9f, 0x12, 0x40, 0xe1, - 0x89, 0x2d, 0x40, 0xe5, 0x9c, 0x12, 0x40, 0xe1, 0x9b, 0x12, 0x40, 0xe1, - 0x88, 0x2d, 0x40, 0xe5, 0x94, 0x12, 0x40, 0xe1, 0x93, 0x12, 0x40, 0xe1, - 0x18, 0x12, 0x80, 0x33, 0xe5, 0x1d, 0x12, 0x80, 0x2a, 0xe9, 0x1a, 0x12, - 0x00, 0xef, 0x1e, 0x12, 0x80, 0x1d, 0xf5, 0x19, 0x12, 0x00, 0xb7, 0x06, - 0x42, 0x20, 0x20, 0x59, 0x13, 0x40, 0xe1, 0x1f, 0x12, 0x00, 0xe5, 0x83, - 0x13, 0x80, 0x04, 0xe9, 0x81, 0x13, 0x40, 0xe5, 0x82, 0x13, 0x40, 0xe1, - 0x81, 0x2d, 0x40, 0xe5, 0x1c, 0x12, 0x40, 0xe1, 0x1b, 0x12, 0x40, 0xe1, - 0x08, 0x12, 0x80, 0x20, 0xe5, 0x0d, 0x12, 0x80, 0x17, 0xe9, 0x0a, 0x12, - 0x00, 0xef, 0x0e, 0x12, 0x80, 0x0a, 0xf5, 0x09, 0x12, 0x00, 0x42, 0xa9, - 0x01, 0x0f, 0x12, 0x40, 0xe1, 0x80, 0x2d, 0x40, 0xe5, 0x0c, 0x12, 0x40, - 0xe1, 0x0b, 0x12, 0x40, 0xe1, 0xa8, 0x12, 0x80, 0x8d, 0x01, 0xe5, 0xad, - 0x12, 0x80, 0x83, 0x01, 0xe9, 0xaa, 0x12, 0x00, 0xef, 0xae, 0x12, 0x80, - 0x76, 0xf5, 0xa9, 0x12, 0x00, 0xb7, 0x5a, 0xb8, 0x21, 0xb9, 0x01, 0xff, - 0xe1, 0xc8, 0x2d, 0x80, 0x15, 0xe5, 0xcd, 0x2d, 0x80, 0x0c, 0xe9, 0xca, - 0x2d, 0x00, 0xef, 0xce, 0x2d, 0x00, 0xf5, 0xc9, 0x2d, 0x40, 0xe5, 0xcc, - 0x2d, 0x40, 0xe1, 0xcb, 0x2d, 0x40, 0xe1, 0xb8, 0x12, 0x80, 0x2e, 0xe5, - 0xbd, 0x12, 0x80, 0x25, 0xe9, 0xba, 0x12, 0x00, 0xef, 0xbe, 0x12, 0x00, - 0xf5, 0xb9, 0x12, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0xc0, 0x12, 0x80, 0x0d, - 0xe5, 0xc5, 0x12, 0x80, 0x04, 0xe9, 0xc2, 0x12, 0x40, 0xe5, 0xc4, 0x12, - 0x40, 0xe1, 0xc3, 0x12, 0x40, 0xe5, 0xbc, 0x12, 0x40, 0xe1, 0xbb, 0x12, - 0x40, 0xe1, 0xb0, 0x12, 0x80, 0x0d, 0xe5, 0xb5, 0x12, 0x80, 0x04, 0xe9, - 0xb2, 0x12, 0x40, 0xe5, 0xb4, 0x12, 0x40, 0xe1, 0xb3, 0x12, 0x40, 0xe1, - 0xaf, 0x12, 0x40, 0xe5, 0xac, 0x12, 0x40, 0xe1, 0xab, 0x12, 0x40, 0xe1, - 0x00, 0x13, 0x80, 0x20, 0xe5, 0x05, 0x13, 0x80, 0x17, 0xe9, 0x02, 0x13, - 0x00, 0xef, 0x06, 0x13, 0x80, 0x0a, 0xf5, 0x01, 0x13, 0x00, 0x42, 0xa9, - 0x01, 0x07, 0x13, 0x40, 0xe1, 0x8e, 0x2d, 0x40, 0xe5, 0x04, 0x13, 0x40, - 0xe1, 0x03, 0x13, 0x40, 0xe1, 0x00, 0x12, 0x80, 0x6e, 0xe5, 0x05, 0x12, - 0x80, 0x65, 0xa8, 0x11, 0xe9, 0x02, 0x12, 0x00, 0xef, 0x06, 0x12, 0x80, - 0x04, 0xf5, 0x01, 0x12, 0x40, 0xe1, 0x07, 0x12, 0x40, 0xe1, 0x10, 0x12, - 0x80, 0x49, 0xe5, 0x15, 0x12, 0x80, 0x40, 0xe9, 0x12, 0x12, 0x00, 0xef, - 0x16, 0x12, 0x00, 0xf5, 0x11, 0x12, 0x00, 0xb7, 0x21, 0xb9, 0x01, 0xff, - 0xe1, 0xe0, 0xe7, 0x81, 0x15, 0xe5, 0xe5, 0xe7, 0x81, 0x0c, 0xe9, 0xe2, - 0xe7, 0x01, 0xef, 0xe6, 0xe7, 0x01, 0xf5, 0xe1, 0xe7, 0x41, 0xe5, 0xe4, - 0xe7, 0x41, 0xe1, 0xe3, 0xe7, 0x41, 0xe1, 0x17, 0x12, 0x00, 0xe5, 0xeb, - 0xe7, 0x81, 0x04, 0xe9, 0xe9, 0xe7, 0x41, 0xe5, 0xea, 0xe7, 0x41, 0xe5, - 0x14, 0x12, 0x40, 0xe1, 0x13, 0x12, 0x40, 0xe5, 0x04, 0x12, 0x40, 0xe1, - 0x03, 0x12, 0x40, 0xe1, 0x08, 0x13, 0x80, 0xb5, 0x02, 0xe5, 0x0d, 0x13, - 0x80, 0xab, 0x02, 0xa7, 0xf1, 0x01, 0xe9, 0x0a, 0x13, 0x00, 0x07, 0xd0, - 0x25, 0xbf, 0x01, 0xef, 0x0e, 0x13, 0x80, 0xb5, 0x01, 0xf5, 0x09, 0x13, - 0x80, 0x39, 0xb7, 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xd8, 0x2d, 0x80, 0x15, - 0xe5, 0xdd, 0x2d, 0x80, 0x0c, 0xe9, 0xda, 0x2d, 0x00, 0xef, 0xde, 0x2d, - 0x00, 0xf5, 0xd9, 0x2d, 0x40, 0xe5, 0xdc, 0x2d, 0x40, 0xe1, 0xdb, 0x2d, - 0x40, 0xe1, 0x10, 0x13, 0x80, 0x0d, 0xe5, 0x15, 0x13, 0x80, 0x04, 0xe9, - 0x12, 0x13, 0x40, 0xe5, 0x14, 0x13, 0x40, 0xe1, 0x13, 0x13, 0x40, 0x05, - 0x51, 0x59, 0x01, 0xff, 0x02, 0x15, 0xc8, 0x64, 0x02, 0xda, 0x50, 0x56, - 0x02, 0x7e, 0xaa, 0x45, 0x44, 0x3a, 0xe5, 0xe8, 0xe7, 0x01, 0x02, 0x1e, - 0x0a, 0x2e, 0x02, 0xf7, 0x33, 0x20, 0x02, 0x51, 0x02, 0x12, 0x02, 0xe5, - 0xe7, 0x01, 0xff, 0xe5, 0xf2, 0xe7, 0x81, 0x04, 0xe9, 0xf0, 0xe7, 0x41, - 0xe5, 0xf1, 0xe7, 0x41, 0x42, 0x27, 0x01, 0xfe, 0xe7, 0x01, 0xe9, 0xfd, - 0xe7, 0x41, 0x42, 0x27, 0x01, 0xee, 0xe7, 0x01, 0xe9, 0xed, 0xe7, 0x41, - 0xe5, 0xf7, 0xe7, 0x81, 0x04, 0xe9, 0xf5, 0xe7, 0x41, 0xe5, 0xf6, 0xe7, - 0x41, 0xe5, 0xfa, 0xe7, 0x81, 0x04, 0xe9, 0xf8, 0xe7, 0x41, 0xe5, 0xf9, - 0xe7, 0x41, 0x42, 0x27, 0x01, 0xfc, 0xe7, 0x01, 0xe9, 0xfb, 0xe7, 0x41, - 0x42, 0x27, 0x01, 0xf4, 0xe7, 0x01, 0xe9, 0xf3, 0xe7, 0x41, 0xe1, 0x0f, - 0x13, 0x40, 0xe1, 0xa0, 0x12, 0x80, 0x20, 0xe5, 0xa5, 0x12, 0x80, 0x17, - 0xe9, 0xa2, 0x12, 0x00, 0xef, 0xa6, 0x12, 0x80, 0x0a, 0xf5, 0xa1, 0x12, - 0x00, 0x42, 0xa9, 0x01, 0xa7, 0x12, 0x40, 0xe1, 0x8a, 0x2d, 0x40, 0xe5, - 0xa4, 0x12, 0x40, 0xe1, 0xa3, 0x12, 0x40, 0xe1, 0x18, 0x13, 0x80, 0x2e, - 0xe5, 0x1d, 0x13, 0x80, 0x25, 0xe9, 0x1a, 0x13, 0x00, 0xef, 0x1e, 0x13, - 0x00, 0xf5, 0x19, 0x13, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x93, 0x2d, 0x80, - 0x0d, 0xe5, 0x96, 0x2d, 0x80, 0x04, 0xe9, 0x94, 0x2d, 0x40, 0xe5, 0x95, - 0x2d, 0x40, 0xe1, 0x1f, 0x13, 0x40, 0xe5, 0x1c, 0x13, 0x40, 0xe1, 0x1b, - 0x13, 0x40, 0xe5, 0x0c, 0x13, 0x40, 0xe1, 0x0b, 0x13, 0x40, 0xe1, 0x48, - 0x13, 0x80, 0x2e, 0xe5, 0x4d, 0x13, 0x80, 0x25, 0xe9, 0x4a, 0x13, 0x00, - 0xef, 0x4e, 0x13, 0x00, 0xf5, 0x49, 0x13, 0x00, 0xb7, 0x06, 0x42, 0x20, - 0x20, 0x5a, 0x13, 0x40, 0xe1, 0x4f, 0x13, 0x00, 0xe5, 0x8b, 0x13, 0x80, - 0x04, 0xe9, 0x89, 0x13, 0x40, 0xe5, 0x8a, 0x13, 0x40, 0xe5, 0x4c, 0x13, - 0x40, 0xe1, 0x4b, 0x13, 0x40, 0xe1, 0xf0, 0x12, 0x80, 0x86, 0x01, 0xa4, - 0x3e, 0xe5, 0xf5, 0x12, 0x80, 0x35, 0xe9, 0xf2, 0x12, 0x00, 0xef, 0xf6, - 0x12, 0x80, 0x28, 0xf5, 0xf1, 0x12, 0x00, 0x42, 0xa9, 0x01, 0xf7, 0x12, - 0x00, 0xba, 0x01, 0xff, 0x42, 0xda, 0x10, 0x13, 0xab, 0x00, 0xe5, 0x15, - 0xab, 0x80, 0x0c, 0xe9, 0x12, 0xab, 0x00, 0xef, 0x16, 0xab, 0x00, 0xf5, - 0x11, 0xab, 0x40, 0xe5, 0x14, 0xab, 0x40, 0xe1, 0x8c, 0x2d, 0x40, 0xe5, - 0xf4, 0x12, 0x40, 0xe1, 0xf8, 0x12, 0x80, 0x3d, 0xe5, 0xfd, 0x12, 0x80, - 0x34, 0xa8, 0x17, 0xe9, 0xfa, 0x12, 0x00, 0xef, 0xfe, 0x12, 0x80, 0x0a, - 0xf5, 0xf9, 0x12, 0x00, 0x42, 0xa9, 0x01, 0xff, 0x12, 0x40, 0xe1, 0x8d, - 0x2d, 0x40, 0x42, 0xda, 0x10, 0x0b, 0xab, 0x00, 0xe5, 0x0d, 0xab, 0x80, - 0x0c, 0xe9, 0x0a, 0xab, 0x00, 0xef, 0x0e, 0xab, 0x00, 0xf5, 0x09, 0xab, - 0x40, 0xe5, 0x0c, 0xab, 0x40, 0xe5, 0xfc, 0x12, 0x40, 0xe1, 0xfb, 0x12, - 0x40, 0xe1, 0xf3, 0x12, 0x40, 0xe1, 0x78, 0x12, 0x80, 0xab, 0x01, 0xa3, - 0x4b, 0xe5, 0x7d, 0x12, 0x80, 0x42, 0xa8, 0x17, 0xe9, 0x7a, 0x12, 0x00, - 0xef, 0x7e, 0x12, 0x80, 0x0a, 0xf5, 0x79, 0x12, 0x00, 0x42, 0xa9, 0x01, - 0x7f, 0x12, 0x40, 0xe1, 0x87, 0x2d, 0x40, 0xe1, 0x28, 0x13, 0x80, 0x20, - 0xe5, 0x2d, 0x13, 0x80, 0x17, 0xe9, 0x2a, 0x13, 0x00, 0xef, 0x2e, 0x13, - 0x80, 0x0a, 0xf5, 0x29, 0x13, 0x00, 0x42, 0xa9, 0x01, 0x2f, 0x13, 0x40, - 0xe1, 0x90, 0x2d, 0x40, 0xe5, 0x2c, 0x13, 0x40, 0xe1, 0x2b, 0x13, 0x40, - 0xe5, 0x7c, 0x12, 0x40, 0xe1, 0xa8, 0x2d, 0x80, 0x55, 0xe5, 0xad, 0x2d, - 0x80, 0x4c, 0xa8, 0x0c, 0xe9, 0xaa, 0x2d, 0x00, 0xef, 0xae, 0x2d, 0x00, - 0xf5, 0xa9, 0x2d, 0x40, 0xe1, 0xb8, 0x2d, 0x80, 0x35, 0xe5, 0xbd, 0x2d, - 0x80, 0x2c, 0xa8, 0x0c, 0xe9, 0xba, 0x2d, 0x00, 0xef, 0xbe, 0x2d, 0x00, - 0xf5, 0xb9, 0x2d, 0x40, 0xe1, 0x20, 0xab, 0x80, 0x15, 0xe5, 0x25, 0xab, - 0x80, 0x0c, 0xe9, 0x22, 0xab, 0x00, 0xef, 0x26, 0xab, 0x00, 0xf5, 0x21, - 0xab, 0x40, 0xe5, 0x24, 0xab, 0x40, 0xe1, 0x23, 0xab, 0x40, 0xe5, 0xbc, - 0x2d, 0x40, 0xe1, 0xbb, 0x2d, 0x40, 0xe5, 0xac, 0x2d, 0x40, 0xe1, 0xab, - 0x2d, 0x40, 0xe1, 0x7b, 0x12, 0x40, 0xe1, 0x60, 0x12, 0x80, 0x4e, 0xa2, - 0x2e, 0xe5, 0x65, 0x12, 0x80, 0x25, 0xe9, 0x62, 0x12, 0x00, 0xef, 0x66, - 0x12, 0x80, 0x18, 0xf5, 0x61, 0x12, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x67, - 0x12, 0x00, 0xe5, 0x87, 0x13, 0x80, 0x04, 0xe9, 0x85, 0x13, 0x40, 0xe5, - 0x86, 0x13, 0x40, 0xe1, 0x85, 0x2d, 0x40, 0xe5, 0x64, 0x12, 0x40, 0xe1, - 0x28, 0xab, 0x80, 0x15, 0xe5, 0x2d, 0xab, 0x80, 0x0c, 0xe9, 0x2a, 0xab, - 0x00, 0xef, 0x2e, 0xab, 0x00, 0xf5, 0x29, 0xab, 0x40, 0xe5, 0x2c, 0xab, - 0x40, 0xe1, 0x2b, 0xab, 0x40, 0xe1, 0x63, 0x12, 0x40, 0x4a, 0x13, 0x24, - 0x60, 0x13, 0x00, 0x47, 0x33, 0x54, 0x64, 0x13, 0x40, 0x52, 0x95, 0x46, - 0x68, 0x13, 0x00, 0x4c, 0x94, 0x8c, 0x66, 0x13, 0x40, 0x46, 0xd9, 0xd0, - 0x79, 0x13, 0x00, 0xa6, 0x36, 0x47, 0xe9, 0x0f, 0x7b, 0x13, 0x00, 0x46, - 0x65, 0x29, 0x7a, 0x13, 0x00, 0xb3, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, - 0x01, 0x72, 0x13, 0x80, 0x0c, 0x45, 0xf2, 0x0f, 0x74, 0x13, 0x00, 0x45, - 0x38, 0x29, 0x73, 0x13, 0x40, 0x49, 0x53, 0x58, 0x7c, 0x13, 0x40, 0x46, - 0x96, 0x1b, 0x78, 0x13, 0x00, 0x44, 0xd1, 0xd2, 0x77, 0x13, 0x40, 0x44, - 0xce, 0x47, 0x76, 0x13, 0x00, 0x44, 0x38, 0x4c, 0x75, 0x13, 0x40, 0x45, - 0xd1, 0x09, 0x70, 0x13, 0x00, 0xa6, 0x29, 0x44, 0xb8, 0x27, 0x71, 0x13, - 0x00, 0x43, 0xcd, 0x09, 0x69, 0x13, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, - 0x44, 0x25, 0x01, 0x6b, 0x13, 0x00, 0x42, 0x15, 0x02, 0x6a, 0x13, 0x40, - 0x44, 0x96, 0x1b, 0x6f, 0x13, 0x00, 0x42, 0x30, 0x27, 0x6e, 0x13, 0x40, - 0x43, 0xd7, 0x04, 0x6d, 0x13, 0x00, 0x43, 0xfb, 0x05, 0x6c, 0x13, 0x40, - 0x43, 0xac, 0x10, 0x65, 0x13, 0x00, 0xad, 0x01, 0xff, 0x07, 0x54, 0x14, - 0x06, 0x42, 0x6c, 0x00, 0x63, 0x13, 0x40, 0x0b, 0xd2, 0x66, 0x06, 0x51, - 0x11, 0x35, 0x5e, 0x13, 0x40, 0x55, 0x0d, 0x35, 0x5d, 0x13, 0x00, 0x44, - 0xb9, 0x00, 0x5f, 0x13, 0x40, 0x44, 0x85, 0x64, 0x1b, 0x00, 0x00, 0x06, - 0x01, 0xd6, 0x01, 0xff, 0x48, 0x10, 0x1e, 0x2e, 0x21, 0x00, 0xf3, 0x59, - 0x22, 0x40, 0x0b, 0x47, 0x91, 0x42, 0x08, 0x55, 0xbd, 0x32, 0x0b, 0x0b, - 0x9a, 0x01, 0xff, 0x06, 0x1c, 0x07, 0x17, 0x06, 0xad, 0x02, 0x01, 0xff, - 0x46, 0x00, 0x04, 0xf2, 0x29, 0x00, 0x47, 0x9d, 0x3f, 0xf0, 0x29, 0x00, - 0x46, 0xdb, 0x04, 0xee, 0x29, 0x40, 0x46, 0x00, 0x04, 0xf3, 0x29, 0x00, - 0x47, 0x9d, 0x3f, 0xf1, 0x29, 0x00, 0x46, 0xdb, 0x04, 0xef, 0x29, 0x40, - 0x43, 0xcd, 0x09, 0xf0, 0x2b, 0x00, 0x43, 0x25, 0x09, 0xf1, 0x2b, 0x40, - 0x44, 0xc3, 0x00, 0x2b, 0x23, 0x00, 0x45, 0xc8, 0x00, 0x26, 0x23, 0x40, - 0x02, 0x13, 0x00, 0x1a, 0xa9, 0x01, 0xff, 0x4a, 0x53, 0x9f, 0x5a, 0x22, - 0x00, 0x07, 0x97, 0x35, 0x01, 0xff, 0x42, 0x1e, 0x00, 0x4d, 0x22, 0x00, - 0x54, 0x70, 0x41, 0x78, 0x2a, 0x40, 0x80, 0x63, 0x02, 0x31, 0x01, 0x01, - 0xff, 0x45, 0x69, 0x37, 0x55, 0x22, 0x00, 0x44, 0xdb, 0x02, 0x3d, 0x00, - 0x80, 0x06, 0x4d, 0x15, 0x83, 0x6e, 0x2a, 0x40, 0x80, 0x01, 0xff, 0xa1, - 0x1d, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4b, 0xc0, 0x91, 0xae, 0x2a, 0x00, - 0x49, 0xf9, 0x10, 0x66, 0x2a, 0x00, 0x4e, 0xa8, 0x71, 0xf9, 0x2b, 0x00, - 0x61, 0x4a, 0x0d, 0x77, 0x2a, 0x40, 0x05, 0x5d, 0x00, 0x0d, 0x53, 0x52, - 0x34, 0xe3, 0x29, 0xc0, 0x00, 0x51, 0xdf, 0x51, 0xe4, 0x29, 0x40, 0x4f, - 0x67, 0x06, 0x40, 0x2b, 0x00, 0x49, 0x19, 0x6b, 0x71, 0x2a, 0x00, 0x50, - 0xb3, 0x02, 0x71, 0x29, 0x00, 0x4e, 0xf9, 0x39, 0x73, 0x2a, 0x40, 0x4f, - 0x6b, 0x64, 0xd5, 0x22, 0x00, 0x03, 0x7a, 0x02, 0x01, 0xff, 0x4d, 0x4c, - 0x7a, 0x5d, 0x22, 0x00, 0x03, 0x79, 0x08, 0x01, 0xff, 0x4c, 0x87, 0x00, - 0xdd, 0x22, 0x00, 0x49, 0xec, 0x00, 0xdc, 0x22, 0x00, 0x48, 0x05, 0xc0, - 0xde, 0x22, 0x00, 0x48, 0x2d, 0xc1, 0xdf, 0x22, 0x40, 0x80, 0x70, 0x02, - 0x06, 0x00, 0x24, 0x45, 0x4e, 0xdf, 0x05, 0x00, 0x00, 0x4a, 0xfe, 0x3f, - 0x86, 0x23, 0x00, 0x46, 0x46, 0x2e, 0x09, 0x27, 0xc0, 0x00, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x55, 0x48, 0x36, 0xe9, 0xf4, 0x01, 0x49, 0x0c, 0xb2, - 0x84, 0xf5, 0x41, 0x03, 0xf4, 0x01, 0x06, 0x5a, 0x06, 0x20, 0x1a, 0xf5, - 0x41, 0x4c, 0xe4, 0x87, 0x97, 0x00, 0x00, 0x44, 0xf0, 0x07, 0x0a, 0x00, - 0x00, 0x46, 0x9b, 0x03, 0x19, 0x00, 0x00, 0x03, 0x59, 0x0b, 0x1c, 0x4d, - 0x0d, 0x81, 0x87, 0x00, 0x00, 0xb4, 0x01, 0xff, 0x43, 0xde, 0x05, 0x03, - 0x00, 0x00, 0x4b, 0x7c, 0x99, 0x04, 0x00, 0xc0, 0x00, 0x46, 0x32, 0x01, - 0x17, 0x00, 0x40, 0x42, 0xf4, 0x01, 0x0e, 0x22, 0x00, 0x4b, 0x91, 0x74, - 0x97, 0x00, 0x40, 0x44, 0xe9, 0x10, 0x13, 0x20, 0x00, 0x44, 0xd1, 0x0b, - 0x00, 0x20, 0x00, 0x45, 0x4d, 0x47, 0x02, 0x20, 0x40, 0x80, 0x9c, 0x01, - 0x04, 0xb2, 0xe6, 0x61, 0xb0, 0x01, 0xff, 0x4c, 0x14, 0x88, 0x83, 0x23, - 0x00, 0x03, 0x9a, 0x1b, 0x01, 0xff, 0x48, 0x85, 0xbb, 0xcb, 0xf5, 0x01, - 0xae, 0x2f, 0x44, 0xfb, 0x9d, 0xcc, 0xf5, 0x81, 0x24, 0x43, 0xf6, 0x10, - 0x05, 0x22, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x50, 0x39, 0x5e, - 0xb4, 0x29, 0x00, 0x47, 0xf3, 0x78, 0xb1, 0x29, 0x00, 0x51, 0xc8, 0x00, - 0xb3, 0x29, 0x00, 0x52, 0xa9, 0x4f, 0xb2, 0x29, 0x40, 0xf3, 0xcd, 0xf5, - 0x41, 0x43, 0x8c, 0x18, 0xb9, 0xfa, 0x01, 0x43, 0x79, 0x0b, 0xc5, 0xf5, - 0xc1, 0x00, 0x03, 0x46, 0x0d, 0x01, 0xff, 0xe4, 0xc7, 0xf5, 0x01, 0x42, - 0x5b, 0x07, 0xc6, 0xf5, 0x41, 0x0a, 0x43, 0xa0, 0x1b, 0x1a, 0xce, 0x1e, - 0x01, 0xff, 0x43, 0x4f, 0xe8, 0xfb, 0xf3, 0x01, 0xd3, 0xfc, 0xf3, 0x01, - 0xd4, 0xfd, 0xf3, 0x01, 0xd5, 0xfe, 0xf3, 0x01, 0xd6, 0xff, 0xf3, 0x41, - 0x44, 0x32, 0xe4, 0xb2, 0xf9, 0x01, 0x4a, 0x75, 0xa0, 0xb1, 0xf9, 0x01, - 0x48, 0x65, 0xc0, 0xb0, 0xf9, 0x01, 0x4a, 0x7f, 0xaa, 0xb3, 0xf9, 0x41, - 0x44, 0xe9, 0x10, 0x14, 0x20, 0x00, 0x44, 0xd1, 0x0b, 0x01, 0x20, 0x00, - 0x45, 0x4d, 0x47, 0x03, 0x20, 0x40, 0x0d, 0x18, 0x7a, 0x96, 0x02, 0xa5, - 0xa0, 0x01, 0xe6, 0xdd, 0xf9, 0x01, 0x07, 0xa0, 0xcd, 0x01, 0xff, 0x06, - 0xf2, 0x04, 0x06, 0x52, 0xeb, 0x4c, 0xf6, 0x0f, 0x41, 0xa1, 0x7f, 0x44, - 0x46, 0xe4, 0xe1, 0x0f, 0x01, 0x46, 0x8d, 0x44, 0xe3, 0x0f, 0x01, 0x45, - 0x4b, 0xa2, 0xe2, 0x0f, 0x01, 0x42, 0xb0, 0x01, 0xe4, 0x0f, 0x81, 0x60, - 0x44, 0xba, 0xe5, 0xea, 0x0f, 0x01, 0x46, 0x1f, 0xd3, 0xeb, 0x0f, 0x01, - 0x43, 0xb9, 0x04, 0xec, 0x0f, 0x01, 0x43, 0x40, 0x20, 0xed, 0x0f, 0x01, - 0x42, 0x6f, 0x02, 0xf0, 0x0f, 0x01, 0x44, 0x71, 0xbe, 0xf2, 0x0f, 0x01, - 0x44, 0x29, 0x60, 0xf3, 0x0f, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, 0x08, - 0x83, 0xe5, 0x0f, 0x01, 0x44, 0xf9, 0x4c, 0xe9, 0x0f, 0x01, 0x45, 0xf3, - 0x4c, 0xe6, 0x0f, 0x41, 0x42, 0xaf, 0x3f, 0xf5, 0x0f, 0x01, 0x43, 0x25, - 0x23, 0xe8, 0x0f, 0x41, 0xa1, 0x06, 0x43, 0x99, 0x14, 0xf4, 0x0f, 0x41, - 0x43, 0xd7, 0xdf, 0xf1, 0x0f, 0x01, 0x44, 0x96, 0xd9, 0xee, 0x0f, 0x41, - 0x42, 0x53, 0x00, 0xe7, 0x0f, 0x41, 0x44, 0x99, 0x38, 0xe0, 0x0f, 0x01, - 0x43, 0x4b, 0x18, 0xef, 0x0f, 0x41, 0x05, 0xb2, 0xda, 0x4f, 0x47, 0xb9, - 0x8a, 0x08, 0x22, 0x80, 0x0c, 0x45, 0xe0, 0xbb, 0x18, 0xf4, 0x01, 0x45, - 0x1f, 0xe1, 0xd7, 0xf6, 0x41, 0x80, 0x01, 0xff, 0x08, 0x0e, 0x6f, 0x29, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0xec, 0x1b, 0xf5, 0x22, 0x00, 0x56, - 0x64, 0x31, 0xf2, 0x22, 0x00, 0x47, 0xf3, 0x78, 0xf6, 0x22, 0x00, 0x56, - 0x69, 0x0a, 0xf9, 0x22, 0x00, 0x48, 0x3b, 0x54, 0xf8, 0x22, 0x00, 0x68, - 0x35, 0x04, 0xf3, 0x22, 0x40, 0x49, 0xa5, 0x01, 0xd9, 0x2a, 0x00, 0x47, - 0x50, 0x02, 0xd2, 0x27, 0x40, 0x80, 0x06, 0x4f, 0xd4, 0x37, 0xe7, 0x23, - 0x40, 0x45, 0xce, 0x00, 0x01, 0x23, 0x00, 0x4a, 0x71, 0xa4, 0xa1, 0xf4, - 0x01, 0x44, 0xfe, 0xe6, 0x0c, 0xf5, 0x01, 0x45, 0x7f, 0xe0, 0x26, 0xf5, - 0x41, 0xe1, 0x00, 0x05, 0x01, 0x42, 0xbc, 0x04, 0x01, 0x05, 0x01, 0xa3, - 0xcf, 0x01, 0xa4, 0xc2, 0x01, 0xe5, 0x08, 0x05, 0x81, 0xb8, 0x01, 0x42, - 0x0f, 0x18, 0x09, 0x05, 0x01, 0xa7, 0x99, 0x01, 0x42, 0xb0, 0x01, 0x0c, - 0x05, 0x01, 0xe9, 0x0d, 0x05, 0x01, 0x42, 0x18, 0x1e, 0x0e, 0x05, 0x01, - 0xab, 0x7d, 0xac, 0x71, 0x42, 0x2a, 0x02, 0x12, 0x05, 0x01, 0xae, 0x55, - 0xef, 0x16, 0x05, 0x01, 0x42, 0x6f, 0x02, 0x17, 0x05, 0x01, 0x42, 0x5b, - 0x9a, 0x18, 0x05, 0x01, 0xb2, 0x39, 0xb3, 0x2d, 0xb4, 0x21, 0xf5, 0x1f, - 0x05, 0x01, 0x42, 0x32, 0x00, 0x20, 0x05, 0x01, 0x42, 0x89, 0x3e, 0x21, - 0x05, 0x01, 0xf9, 0x22, 0x05, 0x01, 0xba, 0x01, 0xff, 0xe5, 0x23, 0x05, - 0x01, 0x42, 0xb0, 0x01, 0x24, 0x05, 0x41, 0xe5, 0x1d, 0x05, 0x01, 0x42, - 0xb0, 0x01, 0x1e, 0x05, 0x41, 0xe5, 0x1b, 0x05, 0x01, 0x42, 0xb0, 0x01, - 0x1c, 0x05, 0x41, 0xe5, 0x19, 0x05, 0x01, 0x42, 0x88, 0x00, 0x1a, 0x05, - 0x41, 0xe1, 0x14, 0x05, 0x01, 0x42, 0x04, 0x00, 0x05, 0x05, 0x01, 0xe5, - 0x13, 0x05, 0x01, 0x42, 0x18, 0x1e, 0x15, 0x05, 0x41, 0xe5, 0x10, 0x05, - 0x01, 0x42, 0x68, 0x00, 0x11, 0x05, 0x41, 0xe5, 0x0f, 0x05, 0x01, 0x42, - 0xb0, 0x01, 0x27, 0x05, 0x41, 0xe5, 0x0a, 0x05, 0x01, 0xa8, 0x06, 0x42, - 0x18, 0x1e, 0x0b, 0x05, 0x41, 0x44, 0x98, 0x1e, 0x26, 0x05, 0x01, 0xe5, - 0x25, 0x05, 0x41, 0xe9, 0x07, 0x05, 0x41, 0xe5, 0x04, 0x05, 0x01, 0x42, - 0xb0, 0x01, 0x06, 0x05, 0x41, 0xe5, 0x02, 0x05, 0x01, 0x42, 0xb0, 0x01, - 0x03, 0x05, 0x41, 0x80, 0x06, 0x46, 0x8d, 0x5d, 0x6a, 0x26, 0x40, 0xb0, - 0x0c, 0x4f, 0xbd, 0x1a, 0x33, 0x27, 0x00, 0x62, 0x7a, 0x0b, 0x4a, 0x27, - 0x40, 0x5f, 0x88, 0x0f, 0x41, 0x27, 0x00, 0x07, 0x15, 0x07, 0x01, 0xff, - 0x4a, 0xc5, 0x28, 0x34, 0x27, 0x00, 0x4d, 0x82, 0x11, 0x35, 0x27, 0x00, - 0x56, 0x98, 0x32, 0x37, 0x27, 0x40, 0xe7, 0x5a, 0xf9, 0x01, 0x12, 0x23, - 0x51, 0x01, 0xff, 0xa1, 0xe6, 0x23, 0xa2, 0x9f, 0x23, 0x02, 0xde, 0xe9, - 0xa1, 0x22, 0x02, 0xe0, 0xe9, 0x8e, 0x1f, 0xa5, 0xb1, 0x1d, 0xa6, 0x88, - 0x1b, 0x02, 0xe2, 0xe9, 0xeb, 0x18, 0xa8, 0xa9, 0x18, 0xa9, 0x98, 0x17, - 0x03, 0x30, 0xe9, 0xf3, 0x16, 0xac, 0xbc, 0x16, 0xad, 0x9f, 0x13, 0xae, - 0xe7, 0x0f, 0xaf, 0x93, 0x0d, 0x02, 0x26, 0xce, 0xd3, 0x0c, 0x03, 0x51, - 0xe9, 0xb2, 0x0c, 0x02, 0xd5, 0xc3, 0x9a, 0x0b, 0x02, 0x5f, 0xd7, 0xaa, - 0x09, 0xb4, 0xdd, 0x07, 0x02, 0xe1, 0xe1, 0x8c, 0x06, 0xb6, 0xaf, 0x03, - 0xb7, 0x96, 0x02, 0x03, 0x96, 0xe9, 0xde, 0x01, 0x03, 0xa5, 0xe9, 0xb4, - 0x01, 0x02, 0xf0, 0xe9, 0x01, 0xff, 0x90, 0x65, 0x91, 0x01, 0xff, 0xd0, - 0xf5, 0x33, 0x01, 0xd1, 0xf6, 0x33, 0x01, 0xd2, 0xf7, 0x33, 0x01, 0xd3, - 0xf8, 0x33, 0x01, 0xd4, 0xf9, 0x33, 0x01, 0xd5, 0xfa, 0x33, 0x81, 0x25, - 0xd6, 0x04, 0x34, 0xc1, 0x00, 0xe1, 0x05, 0x34, 0x01, 0xe2, 0x06, 0x34, - 0x01, 0xe3, 0x07, 0x34, 0x01, 0xe4, 0x08, 0x34, 0x01, 0xe5, 0x09, 0x34, - 0x01, 0xe6, 0x0a, 0x34, 0x01, 0xe7, 0x0b, 0x34, 0x01, 0xe8, 0x0c, 0x34, - 0x41, 0xe1, 0xfb, 0x33, 0x01, 0xe2, 0xfc, 0x33, 0x01, 0xe3, 0xfd, 0x33, - 0x01, 0xe4, 0xfe, 0x33, 0x01, 0xe5, 0xff, 0x33, 0x01, 0xe6, 0x00, 0x34, - 0x01, 0xe7, 0x01, 0x34, 0x01, 0xe8, 0x02, 0x34, 0x01, 0xe9, 0x03, 0x34, - 0x41, 0xd1, 0xe4, 0x33, 0x01, 0xd2, 0xe5, 0x33, 0x81, 0x2f, 0xd3, 0xea, - 0x33, 0x81, 0x22, 0xd4, 0xed, 0x33, 0x81, 0x19, 0xd5, 0xef, 0x33, 0x81, - 0x10, 0xd6, 0xf1, 0x33, 0x01, 0xd7, 0xf2, 0x33, 0x01, 0xd8, 0xf3, 0x33, - 0x01, 0xd9, 0xf4, 0x33, 0x41, 0xe1, 0xf0, 0x33, 0x41, 0xe1, 0xee, 0x33, - 0x41, 0xe1, 0xeb, 0x33, 0x01, 0xe2, 0xec, 0x33, 0x41, 0xe1, 0xe6, 0x33, - 0x01, 0xe2, 0xe7, 0x33, 0x01, 0xe3, 0xe8, 0x33, 0x01, 0xe4, 0xe9, 0x33, - 0x41, 0xd1, 0xdb, 0x33, 0x81, 0x1c, 0xd2, 0xdd, 0x33, 0x01, 0xd3, 0xde, - 0x33, 0x01, 0xd4, 0xdf, 0x33, 0x01, 0xd5, 0xe0, 0x33, 0x01, 0xd6, 0xe1, - 0x33, 0x01, 0xd7, 0xe2, 0x33, 0x01, 0xd8, 0xe3, 0x33, 0x41, 0xe1, 0xdc, - 0x33, 0x41, 0xd1, 0xcf, 0x33, 0x01, 0xd2, 0xd0, 0x33, 0x01, 0xd3, 0xd1, - 0x33, 0x01, 0xd4, 0xd2, 0x33, 0x81, 0x1a, 0xd5, 0xd5, 0x33, 0x01, 0xd6, - 0xd6, 0x33, 0x81, 0x0d, 0xd7, 0xd8, 0x33, 0x01, 0xd8, 0xd9, 0x33, 0xc1, - 0x00, 0xe1, 0xda, 0x33, 0x41, 0xe1, 0xd7, 0x33, 0x41, 0xe1, 0xd3, 0x33, - 0x01, 0xe2, 0xd4, 0x33, 0x41, 0x90, 0x06, 0x4d, 0xd6, 0x7c, 0x46, 0x34, - 0x41, 0x90, 0x5e, 0x91, 0x20, 0x92, 0x01, 0xff, 0xd0, 0xc8, 0x33, 0x01, - 0xd1, 0xc9, 0x33, 0x01, 0xd2, 0xca, 0x33, 0x01, 0xd3, 0xcb, 0x33, 0x01, - 0xd4, 0xcc, 0x33, 0x81, 0x04, 0xd5, 0xce, 0x33, 0x41, 0xe1, 0xcd, 0x33, - 0x41, 0xd0, 0xba, 0x33, 0x81, 0x33, 0xd1, 0xbc, 0x33, 0x01, 0xd2, 0xbd, - 0x33, 0x01, 0xd3, 0xbe, 0x33, 0x01, 0xd4, 0xbf, 0x33, 0x81, 0x1e, 0xd5, - 0xc1, 0x33, 0x01, 0xd6, 0xc2, 0x33, 0x01, 0xd7, 0xc3, 0x33, 0x81, 0x0d, - 0xd8, 0xc5, 0x33, 0x81, 0x04, 0xd9, 0xc7, 0x33, 0x41, 0xe1, 0xc6, 0x33, - 0x41, 0xe1, 0xc4, 0x33, 0x41, 0xe1, 0xc0, 0x33, 0x41, 0xe1, 0xbb, 0x33, - 0x41, 0xd1, 0xaf, 0x33, 0x01, 0xd2, 0xb0, 0x33, 0x01, 0xd3, 0xb1, 0x33, - 0x81, 0x1d, 0xd4, 0xb3, 0x33, 0x01, 0xd5, 0xb4, 0x33, 0x01, 0xd6, 0xb5, - 0x33, 0x01, 0xd7, 0xb6, 0x33, 0x01, 0xd8, 0xb7, 0x33, 0x01, 0xd9, 0xb8, - 0x33, 0xc1, 0x00, 0xe1, 0xb9, 0x33, 0x41, 0xe1, 0xb2, 0x33, 0x41, 0x90, - 0x06, 0x4e, 0xba, 0x70, 0x30, 0x34, 0x41, 0x90, 0xf8, 0x01, 0x91, 0xb3, - 0x01, 0x92, 0x49, 0x93, 0x0b, 0x42, 0xca, 0xe9, 0xad, 0x33, 0xc1, 0x00, - 0xe1, 0xae, 0x33, 0x41, 0xd0, 0x9f, 0x33, 0x81, 0x33, 0xd1, 0xa1, 0x33, - 0x81, 0x2a, 0xd2, 0xa3, 0x33, 0x01, 0xd3, 0xa4, 0x33, 0x81, 0x1d, 0xd4, - 0xa6, 0x33, 0x01, 0xd5, 0xa7, 0x33, 0x01, 0xd6, 0xa8, 0x33, 0x01, 0xd7, - 0xa9, 0x33, 0x81, 0x08, 0xd8, 0xab, 0x33, 0x01, 0xd9, 0xac, 0x33, 0x41, - 0xe1, 0xaa, 0x33, 0x41, 0xe1, 0xa5, 0x33, 0x41, 0xe1, 0xa2, 0x33, 0x41, - 0xe1, 0xa0, 0x33, 0x41, 0xd0, 0x86, 0x33, 0x81, 0x33, 0xd1, 0x93, 0x33, - 0x01, 0xd2, 0x94, 0x33, 0x01, 0xd3, 0x95, 0x33, 0x81, 0x22, 0xd4, 0x97, - 0x33, 0x01, 0xd5, 0x98, 0x33, 0x01, 0xd6, 0x99, 0x33, 0x01, 0xd7, 0x9a, - 0x33, 0x01, 0xd8, 0x9b, 0x33, 0x81, 0x09, 0xd9, 0x9d, 0x33, 0xc1, 0x00, - 0xe1, 0x9e, 0x33, 0x41, 0xe1, 0x9c, 0x33, 0x41, 0xe1, 0x96, 0x33, 0x41, - 0xe1, 0x87, 0x33, 0x01, 0xe2, 0x88, 0x33, 0x01, 0xe3, 0x89, 0x33, 0x01, - 0xe4, 0x8a, 0x33, 0x01, 0xe5, 0x8b, 0x33, 0x01, 0xe6, 0x8c, 0x33, 0x01, - 0xe7, 0x8d, 0x33, 0x01, 0xe8, 0x8e, 0x33, 0x01, 0xe9, 0x8f, 0x33, 0x01, - 0xea, 0x90, 0x33, 0x01, 0xeb, 0x91, 0x33, 0x01, 0xec, 0x92, 0x33, 0x41, - 0xd0, 0x77, 0x33, 0x01, 0xd1, 0x78, 0x33, 0x81, 0x29, 0xd2, 0x7c, 0x33, - 0x81, 0x1c, 0xd3, 0x7f, 0x33, 0x01, 0xd4, 0x80, 0x33, 0x01, 0xd5, 0x81, - 0x33, 0x01, 0xd6, 0x82, 0x33, 0x01, 0xd7, 0x83, 0x33, 0x01, 0xd8, 0x84, - 0x33, 0x01, 0xd9, 0x85, 0x33, 0x41, 0xe1, 0x7d, 0x33, 0x01, 0xe2, 0x7e, - 0x33, 0x41, 0xe1, 0x79, 0x33, 0x01, 0xe2, 0x7a, 0x33, 0x01, 0xe3, 0x7b, - 0x33, 0x01, 0xe4, 0x2f, 0x34, 0x41, 0xd1, 0x62, 0x33, 0x81, 0x2e, 0xd2, - 0x6c, 0x33, 0x81, 0x25, 0xd3, 0x6e, 0x33, 0x01, 0xd4, 0x6f, 0x33, 0x01, - 0xd5, 0x70, 0x33, 0x01, 0xd6, 0x71, 0x33, 0x01, 0xd7, 0x72, 0x33, 0x81, - 0x08, 0xd8, 0x75, 0x33, 0x01, 0xd9, 0x76, 0x33, 0x41, 0xe1, 0x73, 0x33, - 0x01, 0xe2, 0x74, 0x33, 0x41, 0xe1, 0x6d, 0x33, 0x41, 0xe1, 0x63, 0x33, - 0x01, 0xe2, 0x64, 0x33, 0x01, 0xe3, 0x65, 0x33, 0x01, 0xe4, 0x66, 0x33, - 0x01, 0xe5, 0x67, 0x33, 0x01, 0xe6, 0x68, 0x33, 0x01, 0xe7, 0x69, 0x33, - 0x01, 0xe8, 0x6a, 0x33, 0x01, 0xe9, 0x6b, 0x33, 0x41, 0x90, 0x9c, 0x01, - 0x91, 0x72, 0x92, 0x3e, 0x93, 0x0f, 0x94, 0x01, 0xff, 0xd0, 0x5f, 0x33, - 0x01, 0xd1, 0x60, 0x33, 0x01, 0xd2, 0x61, 0x33, 0x41, 0xd0, 0x54, 0x33, - 0x01, 0xd1, 0x55, 0x33, 0x01, 0xd2, 0x56, 0x33, 0x81, 0x1c, 0xd3, 0x58, - 0x33, 0x01, 0xd4, 0x59, 0x33, 0x01, 0xd5, 0x5a, 0x33, 0x01, 0xd6, 0x5b, - 0x33, 0x01, 0xd7, 0x5c, 0x33, 0x01, 0xd8, 0x5d, 0x33, 0x01, 0xd9, 0x5e, - 0x33, 0x41, 0xe1, 0x57, 0x33, 0x41, 0xd0, 0x48, 0x33, 0x01, 0xd1, 0x49, - 0x33, 0x01, 0xd2, 0x4a, 0x33, 0x01, 0xd3, 0x4b, 0x33, 0x81, 0x1d, 0xd4, - 0x4d, 0x33, 0x01, 0xd5, 0x4e, 0x33, 0x01, 0xd6, 0x4f, 0x33, 0x01, 0xd7, - 0x50, 0x33, 0x01, 0xd8, 0x51, 0x33, 0x01, 0xd9, 0x52, 0x33, 0xc1, 0x00, - 0xe1, 0x53, 0x33, 0x41, 0xe1, 0x4c, 0x33, 0x41, 0xd0, 0x3e, 0x33, 0x01, - 0xd1, 0x3f, 0x33, 0x01, 0xd2, 0x40, 0x33, 0x01, 0xd3, 0x41, 0x33, 0x01, - 0xd4, 0x42, 0x33, 0x01, 0xd5, 0x43, 0x33, 0x01, 0xd6, 0x44, 0x33, 0x01, - 0xd7, 0x45, 0x33, 0x01, 0xd8, 0x46, 0x33, 0x01, 0xd9, 0x47, 0x33, 0x41, - 0xd1, 0x33, 0x33, 0x01, 0xd2, 0x34, 0x33, 0x01, 0xd3, 0x35, 0x33, 0x01, - 0xd4, 0x36, 0x33, 0x01, 0xd5, 0x37, 0x33, 0x01, 0xd6, 0x38, 0x33, 0x81, - 0x0c, 0xd7, 0x3b, 0x33, 0x01, 0xd8, 0x3c, 0x33, 0x01, 0xd9, 0x3d, 0x33, - 0x41, 0xe1, 0x39, 0x33, 0x01, 0xe2, 0x3a, 0x33, 0x41, 0x90, 0x06, 0x4d, - 0x55, 0x79, 0x45, 0x34, 0x41, 0x90, 0x87, 0x01, 0x91, 0x53, 0x92, 0x29, - 0x93, 0x01, 0xff, 0xd0, 0x2a, 0x33, 0x01, 0xd1, 0x2b, 0x33, 0x01, 0xd2, - 0x2c, 0x33, 0x81, 0x15, 0xd3, 0x2e, 0x33, 0x81, 0x0c, 0xd4, 0x30, 0x33, - 0x01, 0xd5, 0x31, 0x33, 0x01, 0xd6, 0x32, 0x33, 0x41, 0xe1, 0x2f, 0x33, - 0x41, 0xe1, 0x2d, 0x33, 0x41, 0xd0, 0x20, 0x33, 0x01, 0xd1, 0x21, 0x33, - 0x01, 0xd2, 0x22, 0x33, 0x01, 0xd3, 0x23, 0x33, 0x01, 0xd4, 0x24, 0x33, - 0x01, 0xd5, 0x25, 0x33, 0x01, 0xd6, 0x26, 0x33, 0x01, 0xd7, 0x27, 0x33, - 0x01, 0xd8, 0x28, 0x33, 0x01, 0xd9, 0x29, 0x33, 0x41, 0xd0, 0x14, 0x33, - 0x01, 0xd1, 0x15, 0x33, 0x81, 0x25, 0xd2, 0x17, 0x33, 0x01, 0xd3, 0x18, - 0x33, 0x01, 0xd4, 0x19, 0x33, 0x01, 0xd5, 0x1a, 0x33, 0x01, 0xd6, 0x1b, - 0x33, 0x81, 0x0c, 0xd7, 0x1d, 0x33, 0x01, 0xd8, 0x1e, 0x33, 0x01, 0xd9, - 0x1f, 0x33, 0x41, 0xe1, 0x1c, 0x33, 0x41, 0xe1, 0x16, 0x33, 0x41, 0xd1, - 0x07, 0x33, 0x01, 0xd2, 0x08, 0x33, 0x01, 0xd3, 0x09, 0x33, 0x81, 0x27, - 0xd4, 0x0b, 0x33, 0x01, 0xd5, 0x0c, 0x33, 0x01, 0xd6, 0x0d, 0x33, 0x01, - 0xd7, 0x0e, 0x33, 0x81, 0x12, 0xd8, 0x10, 0x33, 0x81, 0x09, 0xd9, 0x12, - 0x33, 0xc1, 0x00, 0xe1, 0x13, 0x33, 0x41, 0xe1, 0x11, 0x33, 0x41, 0xe1, - 0x0f, 0x33, 0x41, 0xe1, 0x0a, 0x33, 0x41, 0x90, 0xba, 0x01, 0x91, 0x81, - 0x01, 0x92, 0x4e, 0x93, 0x1f, 0x94, 0x01, 0xff, 0xd0, 0x00, 0x33, 0x01, - 0xd1, 0x01, 0x33, 0x01, 0xd2, 0x02, 0x33, 0x01, 0xd3, 0x03, 0x33, 0x01, - 0xd4, 0x04, 0x33, 0x01, 0xd5, 0x05, 0x33, 0x01, 0xd6, 0x06, 0x33, 0x41, - 0xd0, 0xf5, 0x32, 0x01, 0xd1, 0xf6, 0x32, 0x01, 0xd2, 0xf7, 0x32, 0x01, - 0xd3, 0xf8, 0x32, 0x01, 0xd4, 0xf9, 0x32, 0x01, 0xd5, 0xfa, 0x32, 0x81, - 0x10, 0xd6, 0xfc, 0x32, 0x01, 0xd7, 0xfd, 0x32, 0x01, 0xd8, 0xfe, 0x32, - 0x01, 0xd9, 0xff, 0x32, 0x41, 0xe1, 0xfb, 0x32, 0x41, 0xd0, 0xe9, 0x32, - 0x01, 0xd1, 0xea, 0x32, 0x01, 0xd2, 0xeb, 0x32, 0x01, 0xd3, 0xec, 0x32, - 0x01, 0xd4, 0xed, 0x32, 0x01, 0xd5, 0xee, 0x32, 0x01, 0xd6, 0xef, 0x32, - 0x81, 0x0c, 0xd7, 0xf2, 0x32, 0x01, 0xd8, 0xf3, 0x32, 0x01, 0xd9, 0xf4, - 0x32, 0x41, 0xe1, 0xf0, 0x32, 0x01, 0xe2, 0xf1, 0x32, 0x41, 0xd0, 0xdc, - 0x32, 0x01, 0xd1, 0xdd, 0x32, 0x01, 0xd2, 0xde, 0x32, 0x01, 0xd3, 0xdf, - 0x32, 0x01, 0xd4, 0xe0, 0x32, 0x81, 0x19, 0xd5, 0xe3, 0x32, 0x01, 0xd6, - 0xe4, 0x32, 0x01, 0xd7, 0xe5, 0x32, 0x81, 0x08, 0xd8, 0xe7, 0x32, 0x01, - 0xd9, 0xe8, 0x32, 0x41, 0xe1, 0xe6, 0x32, 0x41, 0xe1, 0xe1, 0x32, 0x01, - 0xe2, 0xe2, 0x32, 0x41, 0xd1, 0xd1, 0x32, 0x01, 0xd2, 0xd2, 0x32, 0x81, - 0x21, 0xd3, 0xd4, 0x32, 0x01, 0xd4, 0xd5, 0x32, 0x01, 0xd5, 0xd6, 0x32, - 0x01, 0xd6, 0xd7, 0x32, 0x81, 0x0c, 0xd7, 0xd9, 0x32, 0x01, 0xd8, 0xda, - 0x32, 0x01, 0xd9, 0xdb, 0x32, 0x41, 0xe1, 0xd8, 0x32, 0x41, 0xe1, 0xd3, - 0x32, 0x41, 0x90, 0x5f, 0x91, 0x2b, 0x92, 0x01, 0xff, 0xd0, 0xc7, 0x32, - 0x01, 0xd1, 0xc8, 0x32, 0x01, 0xd2, 0xc9, 0x32, 0x01, 0xd3, 0xca, 0x32, - 0x01, 0xd4, 0xcb, 0x32, 0x01, 0xd5, 0xcc, 0x32, 0x01, 0xd6, 0xcd, 0x32, - 0x01, 0xd7, 0xce, 0x32, 0x01, 0xd8, 0xcf, 0x32, 0x01, 0xd9, 0xd0, 0x32, - 0x41, 0xd0, 0xbb, 0x32, 0x81, 0x29, 0xd1, 0xbd, 0x32, 0x01, 0xd2, 0xbe, - 0x32, 0x01, 0xd3, 0xbf, 0x32, 0x01, 0xd4, 0xc0, 0x32, 0x01, 0xd5, 0xc1, - 0x32, 0x01, 0xd6, 0xc2, 0x32, 0x81, 0x0c, 0xd7, 0xc4, 0x32, 0x01, 0xd8, - 0xc5, 0x32, 0x01, 0xd9, 0xc6, 0x32, 0x41, 0xe1, 0xc3, 0x32, 0x41, 0xe1, - 0xbc, 0x32, 0x41, 0xd1, 0xaf, 0x32, 0x01, 0xd2, 0xb0, 0x32, 0x81, 0x25, - 0xd3, 0xb2, 0x32, 0x81, 0x18, 0xd4, 0xb5, 0x32, 0x01, 0xd5, 0xb6, 0x32, - 0x01, 0xd6, 0xb7, 0x32, 0x01, 0xd7, 0xb8, 0x32, 0x01, 0xd8, 0xb9, 0x32, - 0x01, 0xd9, 0xba, 0x32, 0x41, 0xe1, 0xb3, 0x32, 0x01, 0xe2, 0xb4, 0x32, - 0x41, 0xe1, 0xb1, 0x32, 0x41, 0xd1, 0xa8, 0x32, 0x01, 0xd2, 0xa9, 0x32, - 0x01, 0xd3, 0xaa, 0x32, 0x01, 0xd4, 0xab, 0x32, 0x01, 0xd5, 0xac, 0x32, - 0x01, 0xd6, 0xad, 0x32, 0x01, 0xd7, 0xae, 0x32, 0x41, 0x90, 0x0b, 0x91, - 0x01, 0xff, 0xd0, 0xa6, 0x32, 0x01, 0xd1, 0xa7, 0x32, 0x41, 0xd1, 0x9b, - 0x32, 0x81, 0x25, 0xd2, 0x9d, 0x32, 0x01, 0xd3, 0x9e, 0x32, 0x81, 0x18, - 0xd4, 0xa0, 0x32, 0x01, 0xd5, 0xa1, 0x32, 0x01, 0xd6, 0xa2, 0x32, 0x01, - 0xd7, 0xa3, 0x32, 0x01, 0xd8, 0xa4, 0x32, 0x01, 0xd9, 0xa5, 0x32, 0x41, - 0xe1, 0x9f, 0x32, 0x41, 0xe1, 0x9c, 0x32, 0x41, 0x90, 0x06, 0x4d, 0xa0, - 0x82, 0x36, 0x34, 0x41, 0x90, 0xff, 0x01, 0x91, 0xc2, 0x01, 0x92, 0x83, - 0x01, 0x93, 0x3e, 0x94, 0x14, 0x95, 0x01, 0xff, 0xd0, 0x97, 0x32, 0x81, - 0x04, 0xd1, 0x9a, 0x32, 0x41, 0xe1, 0x98, 0x32, 0x01, 0xe2, 0x99, 0x32, - 0x41, 0xd0, 0x8d, 0x32, 0x01, 0xd1, 0x8e, 0x32, 0x01, 0xd2, 0x8f, 0x32, - 0x01, 0xd3, 0x90, 0x32, 0x01, 0xd4, 0x91, 0x32, 0x01, 0xd5, 0x92, 0x32, - 0x01, 0xd6, 0x93, 0x32, 0x01, 0xd7, 0x94, 0x32, 0x01, 0xd8, 0x95, 0x32, - 0x01, 0xd9, 0x96, 0x32, 0x41, 0xd0, 0x7d, 0x32, 0x81, 0x3a, 0xd1, 0x7f, - 0x32, 0x01, 0xd2, 0x80, 0x32, 0x01, 0xd3, 0x81, 0x32, 0x81, 0x29, 0xd4, - 0x83, 0x32, 0x01, 0xd5, 0x84, 0x32, 0x01, 0xd6, 0x85, 0x32, 0x81, 0x0c, - 0xd7, 0x8a, 0x32, 0x01, 0xd8, 0x8b, 0x32, 0x01, 0xd9, 0x8c, 0x32, 0x41, - 0xe1, 0x86, 0x32, 0x01, 0xe2, 0x87, 0x32, 0x01, 0xe3, 0x88, 0x32, 0x01, - 0xe4, 0x89, 0x32, 0x41, 0xe1, 0x82, 0x32, 0x41, 0xe1, 0x7e, 0x32, 0x41, - 0xd0, 0x6f, 0x32, 0x81, 0x33, 0xd1, 0x71, 0x32, 0x01, 0xd2, 0x72, 0x32, - 0x01, 0xd3, 0x73, 0x32, 0x01, 0xd4, 0x74, 0x32, 0x81, 0x1e, 0xd5, 0x76, - 0x32, 0x81, 0x15, 0xd6, 0x78, 0x32, 0x01, 0xd7, 0x79, 0x32, 0x01, 0xd8, - 0x7a, 0x32, 0x01, 0xd9, 0x7b, 0x32, 0xc1, 0x00, 0xe1, 0x7c, 0x32, 0x41, - 0xe1, 0x77, 0x32, 0x41, 0xe1, 0x75, 0x32, 0x41, 0xe1, 0x70, 0x32, 0x41, - 0xd0, 0x61, 0x32, 0x81, 0x29, 0xd1, 0x65, 0x32, 0x01, 0xd2, 0x66, 0x32, - 0x01, 0xd3, 0x67, 0x32, 0x01, 0xd4, 0x68, 0x32, 0x01, 0xd5, 0x69, 0x32, - 0x01, 0xd6, 0x6a, 0x32, 0x01, 0xd7, 0x6b, 0x32, 0x01, 0xd8, 0x6c, 0x32, - 0x01, 0xd9, 0x6d, 0x32, 0xc1, 0x00, 0xe1, 0x6e, 0x32, 0x41, 0xe1, 0x62, - 0x32, 0x01, 0xe2, 0x63, 0x32, 0x01, 0xe3, 0x64, 0x32, 0x41, 0xd1, 0x50, - 0x32, 0x81, 0x3e, 0xd2, 0x52, 0x32, 0x01, 0xd3, 0x53, 0x32, 0x01, 0xd4, - 0x54, 0x32, 0x01, 0xd5, 0x55, 0x32, 0x81, 0x29, 0xd6, 0x57, 0x32, 0x81, - 0x0c, 0xd7, 0x5e, 0x32, 0x01, 0xd8, 0x5f, 0x32, 0x01, 0xd9, 0x60, 0x32, - 0x41, 0xe1, 0x58, 0x32, 0x01, 0xe2, 0x59, 0x32, 0x01, 0xe3, 0x5a, 0x32, - 0x01, 0xe4, 0x5b, 0x32, 0x01, 0xe5, 0x5c, 0x32, 0x01, 0xe6, 0x5d, 0x32, - 0x41, 0xe1, 0x56, 0x32, 0x41, 0xe1, 0x51, 0x32, 0x41, 0x90, 0xdc, 0x01, - 0x02, 0x8b, 0x90, 0x78, 0x02, 0xe1, 0xe1, 0x01, 0xff, 0x90, 0x4d, 0x91, - 0x14, 0x92, 0x01, 0xff, 0xd0, 0x4c, 0x32, 0x01, 0xd1, 0x4d, 0x32, 0x01, - 0xd2, 0x4e, 0x32, 0xc1, 0x00, 0xe1, 0x4f, 0x32, 0x41, 0xd0, 0x3f, 0x32, - 0x81, 0x2e, 0xd1, 0x41, 0x32, 0x81, 0x25, 0xd2, 0x43, 0x32, 0x01, 0xd3, - 0x44, 0x32, 0x01, 0xd4, 0x45, 0x32, 0x01, 0xd5, 0x46, 0x32, 0x01, 0xd6, - 0x47, 0x32, 0x01, 0xd7, 0x48, 0x32, 0x01, 0xd8, 0x49, 0x32, 0x81, 0x04, - 0xd9, 0x4b, 0x32, 0x41, 0xe1, 0x4a, 0x32, 0x41, 0xe1, 0x42, 0x32, 0x41, - 0xe1, 0x40, 0x32, 0x41, 0xd1, 0x36, 0x32, 0x01, 0xd2, 0x37, 0x32, 0x01, - 0xd3, 0x38, 0x32, 0x01, 0xd4, 0x39, 0x32, 0x01, 0xd5, 0x3a, 0x32, 0x01, - 0xd6, 0x3b, 0x32, 0x01, 0xd7, 0x3c, 0x32, 0x01, 0xd8, 0x3d, 0x32, 0x01, - 0xd9, 0x3e, 0x32, 0x41, 0x90, 0x35, 0x91, 0x06, 0x42, 0xf9, 0xdc, 0x35, - 0x32, 0x41, 0xd0, 0x2a, 0x32, 0x01, 0xd1, 0x2b, 0x32, 0x01, 0xd2, 0x2c, - 0x32, 0x01, 0xd3, 0x2d, 0x32, 0x01, 0xd4, 0x2e, 0x32, 0x01, 0xd5, 0x2f, - 0x32, 0x01, 0xd6, 0x30, 0x32, 0x01, 0xd7, 0x31, 0x32, 0x81, 0x08, 0xd8, - 0x33, 0x32, 0x01, 0xd9, 0x34, 0x32, 0x41, 0xe1, 0x32, 0x32, 0x41, 0xd1, - 0x20, 0x32, 0x01, 0xd2, 0x21, 0x32, 0x01, 0xd3, 0x22, 0x32, 0x01, 0xd4, - 0x23, 0x32, 0x01, 0xd5, 0x24, 0x32, 0x81, 0x10, 0xd6, 0x26, 0x32, 0x01, - 0xd7, 0x27, 0x32, 0x01, 0xd8, 0x28, 0x32, 0x01, 0xd9, 0x29, 0x32, 0x41, - 0xe1, 0x25, 0x32, 0x41, 0x90, 0xaf, 0x01, 0x91, 0x7c, 0x92, 0x4d, 0x93, - 0x0f, 0x94, 0x01, 0xff, 0xd0, 0x1d, 0x32, 0x01, 0xd1, 0x1e, 0x32, 0x01, - 0xd2, 0x1f, 0x32, 0x41, 0xd0, 0x0f, 0x32, 0x01, 0xd1, 0x10, 0x32, 0x01, - 0xd2, 0x11, 0x32, 0x01, 0xd3, 0x12, 0x32, 0x81, 0x27, 0xd4, 0x14, 0x32, - 0x81, 0x1e, 0xd5, 0x16, 0x32, 0x81, 0x15, 0xd6, 0x18, 0x32, 0x01, 0xd7, - 0x19, 0x32, 0x81, 0x08, 0xd8, 0x1b, 0x32, 0x01, 0xd9, 0x1c, 0x32, 0x41, - 0xe1, 0x1a, 0x32, 0x41, 0xe1, 0x17, 0x32, 0x41, 0xe1, 0x15, 0x32, 0x41, - 0xe1, 0x13, 0x32, 0x41, 0xd0, 0x04, 0x32, 0x01, 0xd1, 0x05, 0x32, 0x01, - 0xd2, 0x06, 0x32, 0x01, 0xd3, 0x07, 0x32, 0x01, 0xd4, 0x08, 0x32, 0x01, - 0xd5, 0x09, 0x32, 0x81, 0x10, 0xd6, 0x0b, 0x32, 0x01, 0xd7, 0x0c, 0x32, - 0x01, 0xd8, 0x0d, 0x32, 0x01, 0xd9, 0x0e, 0x32, 0x41, 0xe1, 0x0a, 0x32, - 0x41, 0xd0, 0xf8, 0x31, 0x01, 0xd1, 0xf9, 0x31, 0x01, 0xd2, 0xfa, 0x31, - 0x01, 0xd3, 0xfb, 0x31, 0x01, 0xd4, 0xfc, 0x31, 0x01, 0xd5, 0xfd, 0x31, - 0x01, 0xd6, 0xfe, 0x31, 0x01, 0xd7, 0xff, 0x31, 0x01, 0xd8, 0x00, 0x32, - 0x81, 0x04, 0xd9, 0x03, 0x32, 0x41, 0xe1, 0x01, 0x32, 0x01, 0xe2, 0x02, - 0x32, 0x41, 0xd1, 0xef, 0x31, 0x01, 0xd2, 0xf0, 0x31, 0x01, 0xd3, 0xf1, - 0x31, 0x01, 0xd4, 0xf2, 0x31, 0x01, 0xd5, 0xf3, 0x31, 0x01, 0xd6, 0xf4, - 0x31, 0x01, 0xd7, 0xf5, 0x31, 0x01, 0xd8, 0xf6, 0x31, 0x01, 0xd9, 0xf7, - 0x31, 0x41, 0x90, 0x76, 0x52, 0x33, 0x4d, 0x40, 0x34, 0x01, 0x4f, 0x29, - 0x6a, 0x55, 0x34, 0xc1, 0x00, 0x04, 0x41, 0x04, 0x01, 0xff, 0x46, 0x74, - 0x09, 0x50, 0x34, 0x81, 0x41, 0x43, 0x45, 0x04, 0x52, 0x34, 0x01, 0x45, - 0x34, 0xe0, 0x49, 0x34, 0x81, 0x23, 0x43, 0x1e, 0x00, 0x4b, 0x34, 0xc1, - 0x00, 0x80, 0x01, 0xff, 0x47, 0xa8, 0xc4, 0x53, 0x34, 0x01, 0x43, 0x45, - 0x04, 0x4a, 0x34, 0x01, 0x45, 0x34, 0xe0, 0x47, 0x34, 0xc1, 0x00, 0x4f, - 0xb8, 0x62, 0x4f, 0x34, 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, 0x46, 0x74, - 0x09, 0x51, 0x34, 0x01, 0x43, 0x1e, 0x00, 0x4d, 0x34, 0x41, 0x80, 0x01, - 0xff, 0x47, 0xa8, 0xc4, 0x54, 0x34, 0x01, 0x43, 0x45, 0x04, 0x4e, 0x34, - 0x01, 0x45, 0x34, 0xe0, 0x48, 0x34, 0xc1, 0x00, 0x4c, 0x7c, 0x83, 0x4c, - 0x34, 0x41, 0x90, 0xed, 0x01, 0x91, 0x8d, 0x01, 0x92, 0x54, 0x93, 0x1c, - 0x94, 0x01, 0xff, 0xd0, 0xe9, 0x31, 0x81, 0x10, 0xd1, 0xeb, 0x31, 0x01, - 0xd2, 0xec, 0x31, 0x01, 0xd3, 0xed, 0x31, 0x01, 0xd4, 0xee, 0x31, 0x41, - 0xe1, 0xea, 0x31, 0x41, 0xd0, 0xdc, 0x31, 0x01, 0xd1, 0xdd, 0x31, 0x81, - 0x29, 0xd2, 0xdf, 0x31, 0x01, 0xd3, 0xe0, 0x31, 0x81, 0x18, 0xd4, 0xe3, - 0x31, 0x01, 0xd5, 0xe4, 0x31, 0x01, 0xd6, 0xe5, 0x31, 0x01, 0xd7, 0xe6, - 0x31, 0x01, 0xd8, 0xe7, 0x31, 0x01, 0xd9, 0xe8, 0x31, 0x41, 0xe1, 0xe1, - 0x31, 0x01, 0xe2, 0xe2, 0x31, 0x41, 0xe1, 0xde, 0x31, 0x41, 0xd0, 0xcf, - 0x31, 0x01, 0xd1, 0xd0, 0x31, 0x01, 0xd2, 0xd1, 0x31, 0x81, 0x26, 0xd3, - 0xd3, 0x31, 0x01, 0xd4, 0xd4, 0x31, 0x81, 0x19, 0xd5, 0xd6, 0x31, 0x01, - 0xd6, 0xd7, 0x31, 0x01, 0xd7, 0xd8, 0x31, 0x01, 0xd8, 0xd9, 0x31, 0x81, - 0x04, 0xd9, 0xdb, 0x31, 0x41, 0xe1, 0xda, 0x31, 0x41, 0xe1, 0xd5, 0x31, - 0x41, 0xe1, 0xd2, 0x31, 0x41, 0xd0, 0xb9, 0x31, 0x81, 0x54, 0xd1, 0xbb, - 0x31, 0x01, 0xd2, 0xbc, 0x31, 0x81, 0x2b, 0xd3, 0xc5, 0x31, 0x01, 0xd4, - 0xc6, 0x31, 0x01, 0xd5, 0xc7, 0x31, 0x81, 0x1a, 0xd6, 0xc9, 0x31, 0x81, - 0x11, 0xd7, 0xcb, 0x31, 0x81, 0x08, 0xd8, 0xcd, 0x31, 0x01, 0xd9, 0xce, - 0x31, 0x41, 0xe1, 0xcc, 0x31, 0x41, 0xe1, 0xca, 0x31, 0x41, 0xe1, 0xc8, - 0x31, 0x41, 0xe1, 0xbd, 0x31, 0x01, 0xe2, 0xbe, 0x31, 0x01, 0xe3, 0xbf, - 0x31, 0x01, 0xe4, 0xc0, 0x31, 0x01, 0xe5, 0xc1, 0x31, 0x01, 0xe6, 0xc2, - 0x31, 0x01, 0xe7, 0xc3, 0x31, 0x01, 0xe8, 0xc4, 0x31, 0x41, 0xe1, 0xba, - 0x31, 0x41, 0xd1, 0xad, 0x31, 0x81, 0x25, 0xd2, 0xb0, 0x31, 0x01, 0xd3, - 0xb1, 0x31, 0x81, 0x18, 0xd4, 0xb3, 0x31, 0x01, 0xd5, 0xb4, 0x31, 0x01, - 0xd6, 0xb5, 0x31, 0x01, 0xd7, 0xb6, 0x31, 0x01, 0xd8, 0xb7, 0x31, 0x01, - 0xd9, 0xb8, 0x31, 0x41, 0xe1, 0xb2, 0x31, 0x41, 0xe1, 0xae, 0x31, 0x01, - 0xe2, 0xaf, 0x31, 0x41, 0x02, 0x3f, 0xce, 0x06, 0x48, 0x5a, 0x79, 0x43, - 0x34, 0x41, 0xd1, 0xa3, 0x31, 0x01, 0xd2, 0xa4, 0x31, 0x81, 0x1d, 0xd3, - 0xa6, 0x31, 0x01, 0xd4, 0xa7, 0x31, 0x01, 0xd5, 0xa8, 0x31, 0x01, 0xd6, - 0xa9, 0x31, 0x81, 0x08, 0xd7, 0xab, 0x31, 0x01, 0xd8, 0xac, 0x31, 0x41, - 0xe1, 0xaa, 0x31, 0x41, 0xe1, 0xa5, 0x31, 0x41, 0xd1, 0x9b, 0x31, 0x01, - 0xd2, 0x9c, 0x31, 0x01, 0xd3, 0x9d, 0x31, 0x01, 0xd4, 0x9e, 0x31, 0x01, - 0xd5, 0x9f, 0x31, 0x01, 0xd6, 0xa0, 0x31, 0x01, 0xd7, 0xa1, 0x31, 0x01, - 0xd8, 0xa2, 0x31, 0x41, 0x90, 0x37, 0x09, 0x3e, 0xb3, 0x01, 0xff, 0x46, - 0x74, 0x09, 0x3b, 0x34, 0x81, 0x1c, 0x46, 0x7d, 0x02, 0x39, 0x34, 0x01, - 0x43, 0x1e, 0x00, 0x3a, 0x34, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x43, 0x45, - 0x04, 0x34, 0x34, 0x01, 0x45, 0x34, 0xe0, 0x32, 0x34, 0x41, 0x80, 0x01, - 0xff, 0x43, 0x45, 0x04, 0x35, 0x34, 0x01, 0x45, 0x34, 0xe0, 0x33, 0x34, - 0x41, 0x90, 0x25, 0x91, 0x01, 0xff, 0xd0, 0x93, 0x31, 0x81, 0x19, 0xd1, - 0x95, 0x31, 0x81, 0x10, 0xd2, 0x97, 0x31, 0x01, 0xd3, 0x98, 0x31, 0x01, - 0xd4, 0x99, 0x31, 0x01, 0xd5, 0x9a, 0x31, 0x41, 0xe1, 0x96, 0x31, 0x41, - 0xe1, 0x94, 0x31, 0x41, 0xd1, 0x88, 0x31, 0x01, 0xd2, 0x89, 0x31, 0x01, - 0xd3, 0x8a, 0x31, 0x01, 0xd4, 0x8b, 0x31, 0x01, 0xd5, 0x8c, 0x31, 0x81, - 0x15, 0xd6, 0x8e, 0x31, 0x01, 0xd7, 0x8f, 0x31, 0x01, 0xd8, 0x90, 0x31, - 0x01, 0xd9, 0x91, 0x31, 0xc1, 0x00, 0xe1, 0x92, 0x31, 0x41, 0xe1, 0x8d, - 0x31, 0x41, 0x02, 0x3f, 0xce, 0x16, 0x04, 0x23, 0x00, 0x06, 0x50, 0x49, - 0x5f, 0x31, 0x34, 0x41, 0x45, 0xa2, 0xb6, 0x42, 0x34, 0x01, 0x49, 0x59, - 0x79, 0x44, 0x34, 0x41, 0xd1, 0x7f, 0x31, 0x01, 0xd2, 0x80, 0x31, 0x01, - 0xd3, 0x81, 0x31, 0x01, 0xd4, 0x82, 0x31, 0x01, 0xd5, 0x83, 0x31, 0x01, - 0xd6, 0x84, 0x31, 0x81, 0x08, 0xd7, 0x86, 0x31, 0x01, 0xd8, 0x87, 0x31, - 0x41, 0xe1, 0x85, 0x31, 0x41, 0x90, 0xe3, 0x01, 0x91, 0xb3, 0x01, 0x92, - 0x7f, 0x93, 0x4b, 0x94, 0x17, 0x95, 0x01, 0xff, 0xd0, 0x7a, 0x31, 0x01, - 0xd1, 0x7b, 0x31, 0x01, 0xd2, 0x7c, 0x31, 0x01, 0xd3, 0x7d, 0x31, 0x01, - 0xd4, 0x7e, 0x31, 0x41, 0xd0, 0x6e, 0x31, 0x01, 0xd1, 0x6f, 0x31, 0x01, - 0xd2, 0x70, 0x31, 0x01, 0xd3, 0x71, 0x31, 0x81, 0x1d, 0xd4, 0x73, 0x31, - 0x01, 0xd5, 0x74, 0x31, 0x81, 0x10, 0xd6, 0x76, 0x31, 0x01, 0xd7, 0x77, - 0x31, 0x01, 0xd8, 0x78, 0x31, 0x01, 0xd9, 0x79, 0x31, 0x41, 0xe1, 0x75, - 0x31, 0x41, 0xe1, 0x72, 0x31, 0x41, 0xd0, 0x62, 0x31, 0x01, 0xd1, 0x63, - 0x31, 0x01, 0xd2, 0x64, 0x31, 0x01, 0xd3, 0x65, 0x31, 0x01, 0xd4, 0x66, - 0x31, 0x01, 0xd5, 0x67, 0x31, 0x01, 0xd6, 0x68, 0x31, 0x81, 0x11, 0xd7, - 0x6a, 0x31, 0x81, 0x08, 0xd8, 0x6c, 0x31, 0x01, 0xd9, 0x6d, 0x31, 0x41, - 0xe1, 0x6b, 0x31, 0x41, 0xe1, 0x69, 0x31, 0x41, 0xd0, 0x56, 0x31, 0x81, - 0x29, 0xd1, 0x58, 0x31, 0x01, 0xd2, 0x59, 0x31, 0x01, 0xd3, 0x5a, 0x31, - 0x01, 0xd4, 0x5b, 0x31, 0x01, 0xd5, 0x5c, 0x31, 0x01, 0xd6, 0x5d, 0x31, - 0x81, 0x0c, 0xd7, 0x5f, 0x31, 0x01, 0xd8, 0x60, 0x31, 0x01, 0xd9, 0x61, - 0x31, 0x41, 0xe1, 0x5e, 0x31, 0x41, 0xe1, 0x57, 0x31, 0x41, 0xd0, 0x4b, - 0x31, 0x01, 0xd1, 0x4c, 0x31, 0x81, 0x20, 0xd2, 0x4e, 0x31, 0x01, 0xd3, - 0x4f, 0x31, 0x01, 0xd4, 0x50, 0x31, 0x01, 0xd5, 0x51, 0x31, 0x01, 0xd6, - 0x52, 0x31, 0x01, 0xd7, 0x53, 0x31, 0x01, 0xd8, 0x54, 0x31, 0x01, 0xd9, - 0x55, 0x31, 0x41, 0xe1, 0x4d, 0x31, 0x41, 0xd1, 0x3f, 0x31, 0x01, 0xd2, - 0x40, 0x31, 0x01, 0xd3, 0x41, 0x31, 0x01, 0xd4, 0x42, 0x31, 0x01, 0xd5, - 0x43, 0x31, 0x01, 0xd6, 0x44, 0x31, 0x81, 0x15, 0xd7, 0x46, 0x31, 0x81, - 0x08, 0xd8, 0x49, 0x31, 0x01, 0xd9, 0x4a, 0x31, 0x41, 0xe1, 0x47, 0x31, - 0x01, 0xe2, 0x48, 0x31, 0x41, 0xe1, 0x45, 0x31, 0x41, 0x90, 0x06, 0x49, - 0x9e, 0xb6, 0x41, 0x34, 0x41, 0x90, 0xf2, 0x01, 0x91, 0xc2, 0x01, 0x92, - 0x92, 0x01, 0x93, 0x59, 0x94, 0x20, 0x95, 0x01, 0xff, 0xd0, 0x38, 0x31, - 0x01, 0xd1, 0x39, 0x31, 0x81, 0x08, 0xd2, 0x3d, 0x31, 0x01, 0xd3, 0x3e, - 0x31, 0x41, 0xe1, 0x3a, 0x31, 0x01, 0xe2, 0x3b, 0x31, 0x01, 0xe3, 0x3c, - 0x31, 0x41, 0xd0, 0x2b, 0x31, 0x01, 0xd1, 0x2c, 0x31, 0x01, 0xd2, 0x2d, - 0x31, 0x01, 0xd3, 0x2e, 0x31, 0x01, 0xd4, 0x2f, 0x31, 0x01, 0xd5, 0x30, - 0x31, 0x81, 0x1a, 0xd6, 0x32, 0x31, 0x81, 0x11, 0xd7, 0x34, 0x31, 0x81, - 0x08, 0xd8, 0x36, 0x31, 0x01, 0xd9, 0x37, 0x31, 0x41, 0xe1, 0x35, 0x31, - 0x41, 0xe1, 0x33, 0x31, 0x41, 0xe1, 0x31, 0x31, 0x41, 0xd0, 0x1e, 0x31, - 0x01, 0xd1, 0x1f, 0x31, 0x81, 0x2a, 0xd2, 0x21, 0x31, 0x01, 0xd3, 0x22, - 0x31, 0x01, 0xd4, 0x23, 0x31, 0x01, 0xd5, 0x24, 0x31, 0x01, 0xd6, 0x25, - 0x31, 0x01, 0xd7, 0x26, 0x31, 0x81, 0x0d, 0xd8, 0x28, 0x31, 0x81, 0x04, - 0xd9, 0x2a, 0x31, 0x41, 0xe1, 0x29, 0x31, 0x41, 0xe1, 0x27, 0x31, 0x41, - 0xe1, 0x20, 0x31, 0x41, 0xd0, 0x13, 0x31, 0x01, 0xd1, 0x14, 0x31, 0x81, - 0x20, 0xd2, 0x16, 0x31, 0x01, 0xd3, 0x17, 0x31, 0x01, 0xd4, 0x18, 0x31, - 0x01, 0xd5, 0x19, 0x31, 0x01, 0xd6, 0x1a, 0x31, 0x01, 0xd7, 0x1b, 0x31, - 0x01, 0xd8, 0x1c, 0x31, 0x01, 0xd9, 0x1d, 0x31, 0x41, 0xe1, 0x15, 0x31, - 0x41, 0xd0, 0x08, 0x31, 0x01, 0xd1, 0x09, 0x31, 0x01, 0xd2, 0x0a, 0x31, - 0x01, 0xd3, 0x0b, 0x31, 0x81, 0x18, 0xd4, 0x0d, 0x31, 0x01, 0xd5, 0x0e, - 0x31, 0x01, 0xd6, 0x0f, 0x31, 0x01, 0xd7, 0x10, 0x31, 0x01, 0xd8, 0x11, - 0x31, 0x01, 0xd9, 0x12, 0x31, 0x41, 0xe1, 0x0c, 0x31, 0x41, 0xd1, 0xfe, - 0x30, 0x81, 0x20, 0xd2, 0x00, 0x31, 0x01, 0xd3, 0x01, 0x31, 0x01, 0xd4, - 0x02, 0x31, 0x01, 0xd5, 0x03, 0x31, 0x01, 0xd6, 0x04, 0x31, 0x01, 0xd7, - 0x05, 0x31, 0x01, 0xd8, 0x06, 0x31, 0x01, 0xd9, 0x07, 0x31, 0x41, 0xe1, - 0xff, 0x30, 0x41, 0x90, 0x17, 0x03, 0x1b, 0x00, 0x01, 0xff, 0x49, 0x40, - 0x62, 0x3d, 0x34, 0x01, 0x47, 0x77, 0xcb, 0x38, 0x34, 0x01, 0x50, 0x39, - 0x62, 0x3f, 0x34, 0x41, 0x90, 0x90, 0x01, 0x91, 0x5c, 0x92, 0x28, 0x93, - 0x01, 0xff, 0xd0, 0xf5, 0x30, 0x01, 0xd1, 0xf6, 0x30, 0x01, 0xd2, 0xf7, - 0x30, 0x01, 0xd3, 0xf8, 0x30, 0x01, 0xd4, 0xf9, 0x30, 0x81, 0x0c, 0xd6, - 0xfb, 0x30, 0x01, 0xd7, 0xfc, 0x30, 0x01, 0xd8, 0xfd, 0x30, 0x41, 0xe1, - 0xfa, 0x30, 0x41, 0xd0, 0xe9, 0x30, 0x81, 0x29, 0xd1, 0xeb, 0x30, 0x01, - 0xd2, 0xec, 0x30, 0x01, 0xd3, 0xed, 0x30, 0x01, 0xd4, 0xee, 0x30, 0x01, - 0xd5, 0xef, 0x30, 0x01, 0xd6, 0xf0, 0x30, 0x01, 0xd7, 0xf1, 0x30, 0x01, - 0xd8, 0xf2, 0x30, 0x81, 0x04, 0xd9, 0xf4, 0x30, 0x41, 0xe1, 0xf3, 0x30, - 0x41, 0xe1, 0xea, 0x30, 0x41, 0xd0, 0xdd, 0x30, 0x01, 0xd1, 0xde, 0x30, - 0x01, 0xd2, 0xdf, 0x30, 0x01, 0xd3, 0xe0, 0x30, 0x01, 0xd4, 0xe1, 0x30, - 0x01, 0xd5, 0xe2, 0x30, 0x01, 0xd6, 0xe3, 0x30, 0x81, 0x11, 0xd7, 0xe5, - 0x30, 0x81, 0x08, 0xd8, 0xe7, 0x30, 0x01, 0xd9, 0xe8, 0x30, 0x41, 0xe1, - 0xe6, 0x30, 0x41, 0xe1, 0xe4, 0x30, 0x41, 0xd1, 0xd2, 0x30, 0x01, 0xd2, - 0xd3, 0x30, 0x01, 0xd3, 0xd4, 0x30, 0x01, 0xd4, 0xd5, 0x30, 0x01, 0xd5, - 0xd6, 0x30, 0x01, 0xd6, 0xd7, 0x30, 0x01, 0xd7, 0xd8, 0x30, 0x01, 0xd8, - 0xd9, 0x30, 0x81, 0x09, 0xd9, 0xdb, 0x30, 0xc1, 0x00, 0xe1, 0xdc, 0x30, - 0x41, 0xe1, 0xda, 0x30, 0x41, 0x90, 0xe2, 0x02, 0x91, 0xb7, 0x02, 0x92, - 0x87, 0x02, 0x93, 0xd2, 0x01, 0x94, 0x9d, 0x01, 0x95, 0x44, 0x96, 0x01, - 0xff, 0xd0, 0xc2, 0x30, 0x01, 0xd1, 0xc3, 0x30, 0x01, 0xd2, 0xc4, 0x30, - 0x01, 0xd3, 0xc5, 0x30, 0x01, 0xd4, 0xc6, 0x30, 0x01, 0xd5, 0xc7, 0x30, - 0x01, 0xd6, 0xc8, 0x30, 0x01, 0xd7, 0xc9, 0x30, 0xc1, 0x00, 0xe1, 0xca, - 0x30, 0x01, 0xe2, 0xcb, 0x30, 0x01, 0xe3, 0xcc, 0x30, 0x01, 0xe4, 0xcd, - 0x30, 0x01, 0xe5, 0xce, 0x30, 0x01, 0xe6, 0xcf, 0x30, 0x01, 0xe7, 0xd0, - 0x30, 0x01, 0xe8, 0xd1, 0x30, 0x41, 0xd0, 0xad, 0x30, 0x81, 0x2e, 0xd1, - 0xb7, 0x30, 0x01, 0xd2, 0xb8, 0x30, 0x81, 0x21, 0xd3, 0xba, 0x30, 0x01, - 0xd4, 0xbb, 0x30, 0x81, 0x14, 0xd5, 0xbd, 0x30, 0x01, 0xd6, 0xbe, 0x30, - 0x01, 0xd7, 0xbf, 0x30, 0x01, 0xd8, 0xc0, 0x30, 0x01, 0xd9, 0xc1, 0x30, - 0x41, 0xe1, 0xbc, 0x30, 0x41, 0xe1, 0xb9, 0x30, 0x41, 0xe1, 0xae, 0x30, - 0x01, 0xe2, 0xaf, 0x30, 0x01, 0xe3, 0xb0, 0x30, 0x01, 0xe4, 0xb1, 0x30, - 0x01, 0xe5, 0xb2, 0x30, 0x01, 0xe6, 0xb3, 0x30, 0x01, 0xe7, 0xb4, 0x30, - 0x01, 0xe8, 0xb5, 0x30, 0x01, 0xe9, 0xb6, 0x30, 0x41, 0xd0, 0xa1, 0x30, - 0x01, 0xd1, 0xa2, 0x30, 0x01, 0xd2, 0xa3, 0x30, 0x01, 0xd3, 0xa4, 0x30, - 0x01, 0xd4, 0xa5, 0x30, 0x01, 0xd5, 0xa6, 0x30, 0x01, 0xd6, 0xa7, 0x30, - 0x81, 0x11, 0xd7, 0xa9, 0x30, 0x01, 0xd8, 0xaa, 0x30, 0x81, 0x04, 0xd9, - 0xac, 0x30, 0x41, 0xe1, 0xab, 0x30, 0x41, 0xe1, 0xa8, 0x30, 0x41, 0xd0, - 0x95, 0x30, 0x01, 0xd1, 0x96, 0x30, 0x81, 0x25, 0xd2, 0x98, 0x30, 0x01, - 0xd3, 0x99, 0x30, 0x01, 0xd4, 0x9a, 0x30, 0x81, 0x14, 0xd5, 0x9c, 0x30, - 0x01, 0xd6, 0x9d, 0x30, 0x01, 0xd7, 0x9e, 0x30, 0x01, 0xd8, 0x9f, 0x30, - 0x01, 0xd9, 0xa0, 0x30, 0x41, 0xe1, 0x9b, 0x30, 0x41, 0xe1, 0x97, 0x30, - 0x41, 0xd0, 0x8a, 0x30, 0x01, 0xd1, 0x8b, 0x30, 0x01, 0xd2, 0x8c, 0x30, - 0x01, 0xd3, 0x8d, 0x30, 0x01, 0xd4, 0x8e, 0x30, 0x01, 0xd5, 0x8f, 0x30, - 0x01, 0xd6, 0x90, 0x30, 0x01, 0xd7, 0x91, 0x30, 0x81, 0x08, 0xd8, 0x93, - 0x30, 0x01, 0xd9, 0x94, 0x30, 0x41, 0xe1, 0x92, 0x30, 0x41, 0xd0, 0x80, - 0x30, 0x01, 0xd1, 0x81, 0x30, 0x01, 0xd2, 0x82, 0x30, 0x01, 0xd3, 0x83, - 0x30, 0x01, 0xd4, 0x84, 0x30, 0x01, 0xd5, 0x85, 0x30, 0x01, 0xd6, 0x86, - 0x30, 0x01, 0xd7, 0x87, 0x30, 0x01, 0xd8, 0x88, 0x30, 0x01, 0xd9, 0x89, - 0x30, 0x41, 0xd1, 0x76, 0x30, 0x01, 0xd2, 0x77, 0x30, 0x01, 0xd3, 0x78, - 0x30, 0x01, 0xd4, 0x79, 0x30, 0x01, 0xd5, 0x7a, 0x30, 0x01, 0xd6, 0x7b, - 0x30, 0x01, 0xd7, 0x7c, 0x30, 0x01, 0xd8, 0x7d, 0x30, 0x81, 0x04, 0xd9, - 0x7f, 0x30, 0x41, 0xe1, 0x7e, 0x30, 0x41, 0x90, 0x46, 0x91, 0x17, 0x92, - 0x01, 0xff, 0xd0, 0x71, 0x30, 0x01, 0xd1, 0x72, 0x30, 0x01, 0xd2, 0x73, - 0x30, 0x01, 0xd3, 0x74, 0x30, 0x01, 0xd4, 0x75, 0x30, 0x41, 0xd0, 0x66, - 0x30, 0x81, 0x24, 0xd1, 0x68, 0x30, 0x01, 0xd2, 0x69, 0x30, 0x01, 0xd3, - 0x6a, 0x30, 0x01, 0xd4, 0x6b, 0x30, 0x01, 0xd5, 0x6c, 0x30, 0x01, 0xd6, - 0x6d, 0x30, 0x01, 0xd7, 0x6e, 0x30, 0x01, 0xd8, 0x6f, 0x30, 0x01, 0xd9, - 0x70, 0x30, 0x41, 0xe1, 0x67, 0x30, 0x41, 0xd1, 0x5a, 0x30, 0x01, 0xd2, - 0x5b, 0x30, 0x81, 0x1c, 0xd3, 0x5f, 0x30, 0x01, 0xd4, 0x60, 0x30, 0x01, - 0xd5, 0x61, 0x30, 0x01, 0xd6, 0x62, 0x30, 0x01, 0xd7, 0x63, 0x30, 0x01, - 0xd8, 0x64, 0x30, 0x01, 0xd9, 0x65, 0x30, 0x41, 0xe1, 0x5c, 0x30, 0x01, - 0xe2, 0x5d, 0x30, 0x01, 0xe3, 0x5e, 0x30, 0x41, 0x02, 0x3f, 0xce, 0x17, - 0x05, 0x0a, 0x3b, 0x01, 0xff, 0x49, 0x40, 0x62, 0x3c, 0x34, 0x01, 0x47, - 0x77, 0xcb, 0x37, 0x34, 0x01, 0x50, 0x39, 0x62, 0x3e, 0x34, 0x41, 0xd1, - 0x50, 0x30, 0x01, 0xd2, 0x51, 0x30, 0x01, 0xd3, 0x52, 0x30, 0x01, 0xd4, - 0x53, 0x30, 0x01, 0xd5, 0x54, 0x30, 0x81, 0x10, 0xd6, 0x56, 0x30, 0x01, - 0xd7, 0x57, 0x30, 0x01, 0xd8, 0x58, 0x30, 0x01, 0xd9, 0x59, 0x30, 0x41, - 0xe1, 0x55, 0x30, 0x41, 0x90, 0x97, 0x01, 0x02, 0xf1, 0xe1, 0x01, 0xff, - 0x90, 0x63, 0x91, 0x39, 0x92, 0x0f, 0x93, 0x01, 0xff, 0xd0, 0x2c, 0x34, - 0x01, 0xd1, 0x2d, 0x34, 0x01, 0xd2, 0x2e, 0x34, 0x41, 0xd0, 0x22, 0x34, - 0x01, 0xd1, 0x23, 0x34, 0x01, 0xd2, 0x24, 0x34, 0x01, 0xd3, 0x25, 0x34, - 0x01, 0xd4, 0x26, 0x34, 0x01, 0xd5, 0x27, 0x34, 0x01, 0xd6, 0x28, 0x34, - 0x01, 0xd7, 0x29, 0x34, 0x01, 0xd8, 0x2a, 0x34, 0x01, 0xd9, 0x2b, 0x34, - 0x41, 0xd0, 0x18, 0x34, 0x01, 0xd1, 0x19, 0x34, 0x01, 0xd2, 0x1a, 0x34, - 0x01, 0xd3, 0x1b, 0x34, 0x01, 0xd4, 0x1c, 0x34, 0x01, 0xd5, 0x1d, 0x34, - 0x01, 0xd6, 0x1e, 0x34, 0x01, 0xd7, 0x1f, 0x34, 0x01, 0xd8, 0x20, 0x34, - 0x01, 0xd9, 0x21, 0x34, 0x41, 0xd1, 0x0d, 0x34, 0x01, 0xd2, 0x0e, 0x34, - 0x01, 0xd3, 0x0f, 0x34, 0x01, 0xd4, 0x10, 0x34, 0x01, 0xd5, 0x11, 0x34, - 0x01, 0xd6, 0x12, 0x34, 0x01, 0xd7, 0x13, 0x34, 0x81, 0x08, 0xd8, 0x16, - 0x34, 0x01, 0xd9, 0x17, 0x34, 0x41, 0xe1, 0x14, 0x34, 0x01, 0xe2, 0x15, - 0x34, 0x41, 0x90, 0xa8, 0x02, 0x91, 0xf3, 0x01, 0x92, 0xc8, 0x01, 0x93, - 0x98, 0x01, 0x94, 0x5a, 0x95, 0x30, 0x96, 0x06, 0x42, 0xe3, 0xe8, 0x4f, - 0x30, 0x41, 0xd0, 0x45, 0x30, 0x01, 0xd1, 0x46, 0x30, 0x01, 0xd2, 0x47, - 0x30, 0x01, 0xd3, 0x48, 0x30, 0x01, 0xd4, 0x49, 0x30, 0x01, 0xd5, 0x4a, - 0x30, 0x01, 0xd6, 0x4b, 0x30, 0x01, 0xd7, 0x4c, 0x30, 0x01, 0xd8, 0x4d, - 0x30, 0x01, 0xd9, 0x4e, 0x30, 0x41, 0xd0, 0x3b, 0x30, 0x01, 0xd1, 0x3c, - 0x30, 0x01, 0xd2, 0x3d, 0x30, 0x01, 0xd3, 0x3e, 0x30, 0x01, 0xd4, 0x3f, - 0x30, 0x01, 0xd5, 0x40, 0x30, 0x01, 0xd6, 0x41, 0x30, 0x01, 0xd7, 0x42, - 0x30, 0x01, 0xd8, 0x43, 0x30, 0x01, 0xd9, 0x44, 0x30, 0x41, 0xd0, 0x2d, - 0x30, 0x81, 0x33, 0xd1, 0x2f, 0x30, 0x01, 0xd2, 0x30, 0x30, 0x81, 0x26, - 0xd3, 0x32, 0x30, 0x81, 0x1d, 0xd4, 0x34, 0x30, 0x01, 0xd5, 0x35, 0x30, - 0x81, 0x10, 0xd6, 0x37, 0x30, 0x01, 0xd7, 0x38, 0x30, 0x01, 0xd8, 0x39, - 0x30, 0x01, 0xd9, 0x3a, 0x30, 0x41, 0xe1, 0x36, 0x30, 0x41, 0xe1, 0x33, - 0x30, 0x41, 0xe1, 0x31, 0x30, 0x41, 0xe1, 0x2e, 0x30, 0x41, 0xd0, 0x22, - 0x30, 0x01, 0xd1, 0x23, 0x30, 0x01, 0xd2, 0x24, 0x30, 0x81, 0x1c, 0xd3, - 0x26, 0x30, 0x01, 0xd4, 0x27, 0x30, 0x01, 0xd5, 0x28, 0x30, 0x01, 0xd6, - 0x29, 0x30, 0x01, 0xd7, 0x2a, 0x30, 0x01, 0xd8, 0x2b, 0x30, 0x01, 0xd9, - 0x2c, 0x30, 0x41, 0xe1, 0x25, 0x30, 0x41, 0xd0, 0x18, 0x30, 0x01, 0xd1, - 0x19, 0x30, 0x01, 0xd2, 0x1a, 0x30, 0x01, 0xd3, 0x1b, 0x30, 0x01, 0xd4, - 0x1c, 0x30, 0x01, 0xd5, 0x1d, 0x30, 0x01, 0xd6, 0x1e, 0x30, 0x01, 0xd7, - 0x1f, 0x30, 0x01, 0xd8, 0x20, 0x30, 0x01, 0xd9, 0x21, 0x30, 0x41, 0xd0, - 0x0c, 0x30, 0x01, 0xd1, 0x0d, 0x30, 0x01, 0xd2, 0x0e, 0x30, 0x01, 0xd3, - 0x0f, 0x30, 0x01, 0xd4, 0x10, 0x30, 0x81, 0x19, 0xd5, 0x12, 0x30, 0x01, - 0xd6, 0x13, 0x30, 0x01, 0xd7, 0x14, 0x30, 0x81, 0x08, 0xd8, 0x16, 0x30, - 0x01, 0xd9, 0x17, 0x30, 0x41, 0xe1, 0x15, 0x30, 0x41, 0xe1, 0x11, 0x30, - 0x41, 0xd1, 0x00, 0x30, 0x01, 0xd2, 0x01, 0x30, 0x01, 0xd3, 0x02, 0x30, - 0x01, 0xd4, 0x03, 0x30, 0x01, 0xd5, 0x04, 0x30, 0x81, 0x19, 0xd6, 0x06, - 0x30, 0x81, 0x0c, 0xd7, 0x09, 0x30, 0x01, 0xd8, 0x0a, 0x30, 0x01, 0xd9, - 0x0b, 0x30, 0x41, 0xe1, 0x07, 0x30, 0x01, 0xe2, 0x08, 0x30, 0x41, 0xe1, - 0x05, 0x30, 0x41, 0x43, 0x06, 0x02, 0x85, 0xf9, 0x01, 0xf2, 0x42, 0xf4, - 0x81, 0x06, 0x4f, 0x90, 0x6c, 0x71, 0x26, 0x40, 0x80, 0x2a, 0x42, 0x53, - 0x00, 0x41, 0x26, 0xc0, 0x00, 0x02, 0x86, 0x00, 0x01, 0xff, 0x05, 0x69, - 0xdd, 0x06, 0x45, 0xbc, 0x14, 0xda, 0x23, 0x40, 0xa1, 0x06, 0x4d, 0xab, - 0x7b, 0x0d, 0xf3, 0x41, 0x47, 0x08, 0xc9, 0x0e, 0xf3, 0x01, 0x4d, 0x27, - 0x81, 0x0f, 0xf3, 0x41, 0x03, 0xf4, 0x01, 0x06, 0x50, 0x69, 0x62, 0xbb, - 0xf9, 0x41, 0x45, 0xa5, 0xdd, 0x3d, 0xf3, 0x01, 0x44, 0xdf, 0xaa, 0x3e, - 0xf3, 0x41, 0xa1, 0xd0, 0x30, 0xa5, 0x9a, 0x23, 0xa9, 0xad, 0x19, 0x4f, - 0xa2, 0x69, 0xec, 0xf9, 0x01, 0xaf, 0xb0, 0x07, 0xb2, 0xe3, 0x06, 0xb5, - 0x06, 0x42, 0xec, 0xe9, 0xc0, 0xf4, 0x41, 0x42, 0x36, 0x01, 0x86, 0xf9, - 0x01, 0x46, 0x8b, 0xd3, 0x5f, 0xf9, 0x01, 0x07, 0x6d, 0xca, 0x01, 0xff, - 0x06, 0x41, 0xcf, 0xe3, 0x04, 0x4b, 0x20, 0x93, 0x9e, 0xbc, 0x01, 0x07, - 0xf1, 0x04, 0x12, 0x5d, 0x8c, 0x14, 0x9f, 0xbc, 0x01, 0x51, 0xfb, 0x57, - 0x9c, 0xbc, 0x01, 0x55, 0xe4, 0x39, 0x9d, 0xbc, 0x41, 0xe1, 0x41, 0xbc, - 0x81, 0xbb, 0x04, 0xe2, 0x07, 0xbc, 0x01, 0xe4, 0x08, 0xbc, 0x81, 0xa7, - 0x04, 0xe5, 0x47, 0xbc, 0x81, 0x99, 0x04, 0xe6, 0x04, 0xbc, 0x81, 0x8d, - 0x04, 0xe7, 0x0a, 0xbc, 0x81, 0x81, 0x04, 0xe8, 0x00, 0xbc, 0x81, 0xf7, - 0x03, 0xe9, 0x46, 0xbc, 0x81, 0xed, 0x03, 0xea, 0x1b, 0xbc, 0x81, 0xb6, - 0x03, 0xeb, 0x05, 0xbc, 0x81, 0xa0, 0x03, 0xec, 0x06, 0xbc, 0x81, 0x89, - 0x03, 0xed, 0x19, 0xbc, 0x81, 0xeb, 0x02, 0xee, 0x1a, 0xbc, 0x81, 0xb9, - 0x02, 0xef, 0x44, 0xbc, 0x81, 0xa1, 0x02, 0xf0, 0x02, 0xbc, 0x81, 0x88, - 0x02, 0xf2, 0x0b, 0xbc, 0x81, 0xeb, 0x01, 0xf3, 0x1c, 0xbc, 0x81, 0x68, - 0xf4, 0x03, 0xbc, 0x81, 0x53, 0xf5, 0x51, 0xbc, 0x81, 0x40, 0xf6, 0x09, - 0xbc, 0x81, 0x35, 0xf7, 0x38, 0xbc, 0x81, 0x0f, 0xf8, 0x01, 0xbc, 0x81, - 0x06, 0x42, 0x4d, 0x00, 0x50, 0xbc, 0x41, 0xf7, 0x53, 0xbc, 0x41, 0x42, - 0xc7, 0x00, 0x3a, 0xbc, 0x01, 0xe1, 0x5c, 0xbc, 0x01, 0x42, 0xd1, 0x09, - 0x5f, 0xbc, 0x01, 0xe8, 0x39, 0xbc, 0x01, 0xe9, 0x5e, 0xbc, 0x01, 0xef, - 0x5d, 0xbc, 0xc1, 0x00, 0xf7, 0x60, 0xbc, 0x41, 0x48, 0x25, 0xbf, 0x6a, - 0xbc, 0x41, 0x42, 0xb3, 0x01, 0x54, 0xbc, 0x01, 0xe8, 0x57, 0xbc, 0x01, - 0xe9, 0x4a, 0xbc, 0x41, 0x80, 0x04, 0xe8, 0x11, 0xbc, 0x41, 0x43, 0x25, - 0x0b, 0x37, 0xbc, 0x01, 0xf3, 0x36, 0xbc, 0x41, 0x80, 0x37, 0x46, 0x2f, - 0xd2, 0x49, 0xbc, 0x01, 0x05, 0x64, 0xdd, 0x01, 0xff, 0x42, 0x1a, 0x00, - 0x68, 0xbc, 0x01, 0x42, 0x64, 0x46, 0x12, 0xbc, 0x01, 0xa5, 0x12, 0xea, - 0x15, 0xbc, 0x01, 0xaf, 0x04, 0xf5, 0x58, 0xbc, 0x41, 0xee, 0x69, 0xbc, - 0x01, 0xf7, 0x42, 0xbc, 0x41, 0xe5, 0x4e, 0xbc, 0x01, 0xe8, 0x4c, 0xbc, - 0x01, 0xee, 0x67, 0xbc, 0x41, 0xea, 0x20, 0xbc, 0x81, 0x3a, 0xeb, 0x3f, - 0xbc, 0x81, 0x2f, 0xed, 0x3c, 0xbc, 0x01, 0xee, 0x3b, 0xbc, 0x01, 0xf0, - 0x34, 0xbc, 0x81, 0x1c, 0xf3, 0x2a, 0xbc, 0x01, 0xf4, 0x32, 0xbc, 0x81, - 0x0d, 0x48, 0x4b, 0x37, 0x25, 0xbc, 0xc1, 0x00, 0x46, 0x24, 0x06, 0x26, - 0xbc, 0x41, 0x42, 0xc7, 0x00, 0x33, 0xbc, 0x41, 0x42, 0xc7, 0x00, 0x35, - 0xbc, 0x41, 0x42, 0xc7, 0x00, 0x40, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x2e, - 0xbc, 0x41, 0x42, 0x99, 0x00, 0x10, 0xbc, 0x01, 0xe8, 0x18, 0xbc, 0x01, - 0x08, 0x5d, 0xbf, 0x01, 0xff, 0xe9, 0x4d, 0xbc, 0x01, 0xf5, 0x56, 0xbc, - 0x41, 0x42, 0xb3, 0x01, 0x0c, 0xbc, 0x01, 0x07, 0xbc, 0xc6, 0x01, 0xff, - 0xed, 0x66, 0xbc, 0x01, 0xee, 0x65, 0xbc, 0x41, 0xe1, 0x43, 0xbc, 0x01, - 0x42, 0xfe, 0x25, 0x59, 0xbc, 0x01, 0xf5, 0x5b, 0xbc, 0x01, 0xf7, 0x5a, - 0xbc, 0x41, 0x80, 0x15, 0x05, 0xb1, 0x46, 0x01, 0xff, 0xe1, 0x64, 0xbc, - 0x01, 0xe9, 0x63, 0xbc, 0x01, 0xef, 0x62, 0xbc, 0x01, 0xf5, 0x61, 0xbc, - 0x41, 0xed, 0x1e, 0xbc, 0x81, 0x0a, 0xf3, 0x28, 0xbc, 0x01, 0x48, 0x4b, - 0x37, 0x22, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x2c, 0xbc, 0x41, 0x80, 0x01, - 0xff, 0xee, 0x1d, 0xbc, 0x81, 0x0a, 0xf3, 0x27, 0xbc, 0x01, 0x48, 0x4b, - 0x37, 0x21, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x2b, 0xbc, 0x41, 0xe8, 0x17, - 0xbc, 0x01, 0x04, 0x0a, 0x0d, 0x01, 0xff, 0xe9, 0x4f, 0xbc, 0x01, 0xf5, - 0x55, 0xbc, 0x41, 0x80, 0x04, 0xeb, 0x14, 0xbc, 0x41, 0xed, 0x0f, 0xbc, - 0x01, 0x43, 0x25, 0x0b, 0x3d, 0xbc, 0x41, 0x80, 0x01, 0xff, 0xed, 0x1f, - 0xbc, 0x81, 0x23, 0xee, 0x30, 0xbc, 0x81, 0x18, 0xf3, 0x29, 0xbc, 0x81, - 0x0d, 0x48, 0x4b, 0x37, 0x23, 0xbc, 0xc1, 0x00, 0x52, 0x3d, 0x4f, 0x24, - 0xbc, 0x41, 0x49, 0x4a, 0x37, 0x2f, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x31, - 0xbc, 0x41, 0x42, 0x99, 0x00, 0x2d, 0xbc, 0x41, 0xe5, 0x48, 0xbc, 0x41, - 0xec, 0x16, 0xbc, 0x41, 0x44, 0xc6, 0xe1, 0x3e, 0xbc, 0x41, 0x42, 0xb3, - 0x01, 0x0e, 0xbc, 0x41, 0xe5, 0x4b, 0xbc, 0x01, 0xf5, 0x52, 0xbc, 0x41, - 0x42, 0x99, 0x00, 0x0d, 0xbc, 0x01, 0xe8, 0x13, 0xbc, 0x41, 0x42, 0x3c, - 0x01, 0x45, 0xbc, 0x41, 0x09, 0x5f, 0xad, 0xad, 0x01, 0x05, 0x2a, 0x0a, - 0x6a, 0xac, 0x16, 0x04, 0x1c, 0xac, 0x06, 0x57, 0xf4, 0x2c, 0x72, 0xbc, - 0x41, 0x51, 0xfa, 0x2c, 0x71, 0xbc, 0x01, 0x4f, 0xad, 0x6d, 0x74, 0xbc, - 0x41, 0x55, 0x5d, 0x36, 0x70, 0xbc, 0x01, 0x03, 0xd1, 0x00, 0x01, 0xff, - 0xa1, 0x39, 0x46, 0x00, 0x04, 0x95, 0xbc, 0x01, 0x43, 0xc5, 0x06, 0x94, - 0xbc, 0x01, 0x45, 0x79, 0x20, 0x92, 0xbc, 0x01, 0xac, 0x19, 0x4b, 0x3f, - 0x9b, 0x91, 0xbc, 0x01, 0x48, 0x32, 0x00, 0x98, 0xbc, 0x81, 0x06, 0x44, - 0xda, 0x51, 0x97, 0xbc, 0x41, 0x47, 0x04, 0x2d, 0x73, 0xbc, 0x41, 0x43, - 0xf1, 0x07, 0x96, 0xbc, 0x01, 0x49, 0xd7, 0xb3, 0x93, 0xbc, 0x41, 0x44, - 0xcf, 0x34, 0x90, 0xbc, 0x01, 0x44, 0xcf, 0x00, 0x99, 0xbc, 0x41, 0x45, - 0xce, 0x34, 0x80, 0xbc, 0x01, 0x46, 0x00, 0x04, 0x85, 0xbc, 0x01, 0x43, - 0xc5, 0x06, 0x84, 0xbc, 0x01, 0x45, 0x79, 0x20, 0x82, 0xbc, 0x01, 0xac, - 0x19, 0x4b, 0x3f, 0x9b, 0x81, 0xbc, 0x01, 0x48, 0x32, 0x00, 0x88, 0xbc, - 0x81, 0x06, 0x44, 0xda, 0x51, 0x87, 0xbc, 0x41, 0x47, 0x04, 0x2d, 0x75, - 0xbc, 0x41, 0x43, 0xf1, 0x07, 0x86, 0xbc, 0x01, 0x49, 0xd7, 0xb3, 0x83, - 0xbc, 0x41, 0x46, 0x71, 0x97, 0x7a, 0xbc, 0x01, 0x46, 0x41, 0xd2, 0x7b, - 0xbc, 0x01, 0x54, 0x54, 0x3f, 0x77, 0xbc, 0x01, 0x46, 0x05, 0x2d, 0x76, - 0xbc, 0x01, 0x02, 0x12, 0x00, 0x01, 0xff, 0x42, 0x62, 0x01, 0x79, 0xbc, - 0x01, 0x45, 0x3b, 0xde, 0x78, 0xbc, 0xc1, 0x00, 0x45, 0x03, 0x0d, 0x7c, - 0xbc, 0x41, 0xa1, 0x2f, 0x43, 0xed, 0x00, 0x57, 0xf4, 0x01, 0x4d, 0x8c, - 0x7d, 0xda, 0x26, 0x00, 0xaf, 0x06, 0x52, 0x5d, 0x50, 0x41, 0xf9, 0x41, - 0x4c, 0x48, 0x8a, 0x2a, 0xf4, 0x01, 0x4a, 0xf7, 0xa5, 0x24, 0xf9, 0x01, - 0xb0, 0x01, 0xff, 0x49, 0x5e, 0xab, 0x78, 0xfa, 0x01, 0x43, 0xf1, 0x04, - 0xa7, 0xf4, 0x41, 0x49, 0x5d, 0x99, 0xaf, 0x20, 0x00, 0x5c, 0xe1, 0x15, - 0x9b, 0x27, 0x00, 0x43, 0x60, 0x12, 0x09, 0xf4, 0xc1, 0x00, 0x45, 0xec, - 0x06, 0x32, 0xf4, 0x41, 0x52, 0xc1, 0x49, 0xaf, 0xf6, 0x01, 0x46, 0x87, - 0xbb, 0xce, 0xf5, 0x81, 0xce, 0x11, 0x42, 0x3b, 0x01, 0xa4, 0xf9, 0x01, - 0x07, 0x22, 0x70, 0xf5, 0x10, 0xe7, 0x15, 0xf4, 0x81, 0x81, 0x0e, 0xac, - 0xf2, 0x0d, 0x0a, 0x2f, 0xa5, 0x85, 0x0a, 0xae, 0xf6, 0x09, 0x42, 0x0c, - 0x00, 0xaa, 0xf6, 0x01, 0xb4, 0x94, 0x09, 0xb5, 0xb9, 0x04, 0x4b, 0x5d, - 0x9c, 0x4a, 0xf5, 0x01, 0x02, 0xa7, 0x01, 0x01, 0xff, 0x80, 0x8c, 0x04, - 0x0a, 0x4b, 0x0a, 0xea, 0x03, 0x04, 0xa9, 0x01, 0x01, 0xff, 0x08, 0x5d, - 0xb8, 0xc6, 0x03, 0x02, 0x31, 0x01, 0x01, 0xff, 0xa1, 0xc6, 0x02, 0x06, - 0x1c, 0x07, 0xb5, 0x02, 0x50, 0x59, 0x5b, 0x3f, 0xf8, 0x01, 0xa4, 0xa0, - 0x02, 0x51, 0x54, 0x54, 0x37, 0xf8, 0x01, 0xa8, 0xc1, 0x01, 0x4d, 0x09, - 0x80, 0xca, 0x21, 0x00, 0x4f, 0x46, 0x6b, 0xf1, 0x27, 0x00, 0x46, 0x0b, - 0xd5, 0x6f, 0xf6, 0x01, 0xb3, 0xa0, 0x01, 0xb4, 0x13, 0x4b, 0xa1, 0x0e, - 0xe9, 0x21, 0x80, 0x06, 0x4c, 0xf8, 0x2f, 0xaf, 0x21, 0x40, 0x5a, 0x78, - 0x1c, 0x97, 0xf8, 0x41, 0x02, 0x0d, 0x00, 0x11, 0x02, 0x15, 0x02, 0x01, - 0xff, 0x4d, 0x92, 0x78, 0xa1, 0x21, 0x00, 0x66, 0x20, 0x05, 0xef, 0x2b, - 0x40, 0x05, 0x04, 0x02, 0x06, 0x49, 0x4c, 0x6b, 0x0b, 0x29, 0x40, 0x4a, - 0xe0, 0x01, 0x93, 0xf8, 0x01, 0x08, 0x09, 0x02, 0x01, 0xff, 0x45, 0xce, - 0x00, 0x63, 0x2b, 0x80, 0x12, 0x4c, 0x40, 0x86, 0x6d, 0x2b, 0x00, 0x4d, - 0x09, 0x80, 0x87, 0x2b, 0x00, 0x4c, 0xf8, 0x2f, 0x4d, 0x2b, 0x40, 0x80, - 0x01, 0xff, 0x6a, 0xed, 0x02, 0x83, 0x2b, 0x00, 0x46, 0x0d, 0x13, 0x73, - 0x2b, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0xcb, 0x9f, 0x2b, 0xf8, - 0x01, 0x58, 0x3f, 0x25, 0x7d, 0x2b, 0x00, 0x4b, 0x0e, 0x62, 0x2f, 0xf8, - 0x01, 0x09, 0x54, 0xb2, 0x12, 0x4c, 0x54, 0x8a, 0x27, 0xf8, 0x01, 0x4c, - 0xc0, 0x8a, 0x23, 0xf8, 0x01, 0x50, 0x09, 0x62, 0x33, 0xf8, 0x41, 0x49, - 0xea, 0x01, 0xa0, 0x2b, 0x00, 0x4a, 0xb3, 0x02, 0xa1, 0x2b, 0x40, 0x4f, - 0x8a, 0x60, 0x53, 0xf8, 0x01, 0x4c, 0x40, 0x8c, 0x3b, 0xf8, 0x41, 0x11, - 0x96, 0x04, 0x11, 0x05, 0x8d, 0x13, 0x01, 0xff, 0x45, 0xce, 0x00, 0x47, - 0xf8, 0x01, 0x50, 0x59, 0x5b, 0x43, 0xf8, 0x41, 0x04, 0xc3, 0x00, 0x19, - 0x05, 0xc8, 0x00, 0x01, 0xff, 0x80, 0x06, 0x45, 0xa9, 0x01, 0xc2, 0x21, - 0x40, 0x48, 0x4d, 0xab, 0x5d, 0x29, 0x00, 0x46, 0x0d, 0x13, 0x55, 0x29, - 0x40, 0x80, 0x06, 0x45, 0xa9, 0x01, 0xc3, 0x21, 0x40, 0x07, 0x51, 0x09, - 0x0c, 0x48, 0x4d, 0xab, 0x61, 0x29, 0x00, 0x46, 0x0d, 0x13, 0x59, 0x29, - 0x40, 0x61, 0x21, 0x0c, 0x65, 0x29, 0x00, 0x5f, 0x80, 0x10, 0x6f, 0x29, - 0x40, 0x4b, 0x41, 0x86, 0xe3, 0x21, 0x00, 0x4b, 0xa1, 0x86, 0xd3, 0x21, - 0x40, 0x45, 0xce, 0x00, 0x07, 0x2b, 0x00, 0x53, 0x50, 0x43, 0x8b, 0x2b, - 0x40, 0x45, 0x27, 0xde, 0x14, 0x2e, 0x00, 0x44, 0xcf, 0x00, 0x93, 0x21, - 0xc0, 0x00, 0x80, 0x01, 0xff, 0x5a, 0xc6, 0x1c, 0xb7, 0xfb, 0x01, 0x48, - 0x4d, 0xab, 0xa7, 0x21, 0x00, 0x5a, 0x4c, 0x1e, 0xf5, 0x21, 0x00, 0x46, - 0x0d, 0x13, 0x13, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x50, 0x89, - 0x5b, 0xb5, 0x21, 0x00, 0x4d, 0x29, 0x7b, 0xdf, 0x21, 0x00, 0x55, 0xd5, - 0x01, 0x17, 0xf8, 0x01, 0x51, 0x4c, 0x04, 0x08, 0x29, 0x00, 0x58, 0x77, - 0x26, 0x0b, 0xf8, 0x01, 0x59, 0x47, 0x22, 0x07, 0xf8, 0x01, 0x4c, 0x38, - 0x8b, 0x9b, 0xf8, 0x01, 0x06, 0x3c, 0x06, 0x11, 0x04, 0xc3, 0x0a, 0x01, - 0xff, 0x49, 0xea, 0x01, 0xb2, 0x21, 0x00, 0x4a, 0xb3, 0x02, 0xb3, 0x21, - 0x40, 0x55, 0xd5, 0x01, 0x13, 0xf8, 0x01, 0x52, 0x33, 0x05, 0x03, 0xf8, - 0x41, 0x44, 0x04, 0x0d, 0x08, 0xf9, 0x81, 0x0d, 0x4c, 0x2c, 0x8b, 0x09, - 0xf9, 0xc1, 0x00, 0x49, 0x4a, 0x37, 0x0b, 0xf9, 0x41, 0x49, 0x4a, 0x37, - 0x0a, 0xf9, 0x41, 0x4c, 0xc1, 0x4f, 0x3b, 0xf5, 0x01, 0x52, 0xbb, 0x4f, - 0x3d, 0xf5, 0x01, 0x0e, 0x94, 0x76, 0x01, 0xff, 0x4f, 0xa3, 0x68, 0xe8, - 0x29, 0x00, 0x50, 0x59, 0x60, 0xe9, 0x29, 0x40, 0x49, 0xe1, 0x01, 0x04, - 0x23, 0x00, 0x49, 0xba, 0xaf, 0x7f, 0x29, 0x00, 0x57, 0xdd, 0x2c, 0xf1, - 0x22, 0x00, 0x44, 0xca, 0x34, 0xa4, 0x22, 0xc0, 0x00, 0x52, 0x1b, 0x4a, - 0xf1, 0x2a, 0x40, 0x03, 0x3e, 0x01, 0x06, 0x45, 0xe8, 0xdb, 0x69, 0xf3, - 0x41, 0x80, 0xba, 0x01, 0x8d, 0x17, 0x02, 0x06, 0x00, 0x01, 0xff, 0x4b, - 0x2c, 0x24, 0xa2, 0x26, 0x00, 0x49, 0xf9, 0x1e, 0xa3, 0x26, 0x00, 0x46, - 0xf7, 0x06, 0xfc, 0x2b, 0x40, 0x4e, 0x74, 0x70, 0xdf, 0x29, 0x00, 0x05, - 0xf0, 0x07, 0x66, 0x07, 0x35, 0x70, 0x01, 0xff, 0x08, 0xe9, 0x04, 0x36, - 0x07, 0xdb, 0xc7, 0x17, 0x4f, 0x93, 0x69, 0x40, 0x21, 0x00, 0x06, 0x3c, - 0x06, 0x01, 0xff, 0x45, 0x84, 0x52, 0x3d, 0x21, 0x00, 0x42, 0xeb, 0x04, - 0x3c, 0x21, 0x40, 0x49, 0xe6, 0xad, 0x45, 0x21, 0x00, 0x06, 0x3c, 0x06, - 0x01, 0xff, 0xe4, 0x46, 0x21, 0x00, 0xe5, 0x47, 0x21, 0x00, 0xe9, 0x48, - 0x21, 0x00, 0xea, 0x49, 0x21, 0x40, 0xe3, 0x02, 0x21, 0x00, 0x45, 0x84, - 0x52, 0x3e, 0x21, 0x00, 0xe8, 0x0d, 0x21, 0x00, 0xee, 0x15, 0x21, 0x00, - 0xf0, 0x19, 0x21, 0x80, 0x0c, 0xf1, 0x1a, 0x21, 0x00, 0xf2, 0x1d, 0x21, - 0x00, 0xfa, 0x24, 0x21, 0x40, 0xe9, 0x3f, 0x21, 0x40, 0x0c, 0x87, 0x25, - 0x21, 0x08, 0x9a, 0x00, 0x01, 0xff, 0x0c, 0x87, 0x25, 0x0c, 0x58, 0xe7, - 0x25, 0xfa, 0x2a, 0x00, 0x55, 0x2b, 0x38, 0xf9, 0x2a, 0x40, 0x4c, 0x87, - 0x00, 0x9c, 0x2a, 0x00, 0x49, 0xec, 0x00, 0x9b, 0x2a, 0x40, 0x4c, 0x87, - 0x00, 0x9a, 0x2a, 0x00, 0x49, 0xec, 0x00, 0x99, 0x2a, 0x40, 0x4c, 0x78, - 0x84, 0xdd, 0x02, 0x00, 0xa3, 0xb1, 0x02, 0xa4, 0xa2, 0x02, 0x50, 0xad, - 0x00, 0x3c, 0x20, 0x00, 0xa8, 0x8d, 0x02, 0x04, 0x16, 0x07, 0xfc, 0x01, - 0xac, 0xc8, 0x01, 0x07, 0x40, 0xc9, 0xb0, 0x01, 0x4e, 0x68, 0x73, 0x17, - 0x2e, 0x00, 0xb0, 0x8b, 0x01, 0x4d, 0xbd, 0x30, 0x47, 0x20, 0x00, 0x5b, - 0x1d, 0x1b, 0x96, 0x29, 0x00, 0xb3, 0x3e, 0xb5, 0x30, 0x09, 0x32, 0x00, - 0x06, 0x4d, 0xfb, 0x82, 0x4c, 0xfe, 0x40, 0x43, 0x16, 0x00, 0xf8, 0x23, - 0x80, 0x06, 0x44, 0xf0, 0x07, 0x16, 0x20, 0x40, 0x80, 0x01, 0xff, 0x07, - 0x3b, 0x01, 0x06, 0x4e, 0x10, 0x36, 0xe3, 0x2a, 0x40, 0x4e, 0x10, 0x36, - 0xe5, 0x2a, 0x00, 0x4f, 0x56, 0x01, 0xab, 0x22, 0x40, 0x44, 0x6d, 0x15, - 0xd3, 0x22, 0x00, 0x46, 0xac, 0xcc, 0xeb, 0x2a, 0x40, 0x4f, 0x56, 0x6a, - 0xfd, 0x2a, 0x00, 0x06, 0x20, 0x22, 0x29, 0xb4, 0x1b, 0xb5, 0x01, 0xff, - 0x44, 0xf5, 0x10, 0xd0, 0x22, 0x00, 0x46, 0x2f, 0xc1, 0xbc, 0x2a, 0x00, - 0x46, 0x14, 0x32, 0xd1, 0x22, 0x00, 0x4d, 0x4b, 0x77, 0x44, 0x2e, 0x40, - 0x4b, 0xb8, 0x90, 0x49, 0x2e, 0x00, 0x4d, 0xb0, 0x6c, 0xec, 0x2a, 0x40, - 0x4c, 0x68, 0x09, 0x4e, 0x2a, 0x00, 0x45, 0x6c, 0x15, 0x4f, 0x2a, 0x40, - 0x43, 0x72, 0x25, 0xfa, 0x29, 0x00, 0xb2, 0x01, 0xff, 0x46, 0x07, 0xc0, - 0xbb, 0x2a, 0x00, 0x43, 0x29, 0x02, 0x33, 0x20, 0xc0, 0x00, 0x4f, 0x1d, - 0x04, 0x1e, 0x30, 0x40, 0x4c, 0x87, 0x00, 0xa2, 0x2a, 0x00, 0x49, 0xec, - 0x00, 0xa1, 0x2a, 0xc0, 0x00, 0x4e, 0x41, 0x59, 0xa3, 0x2a, 0x40, 0x5c, - 0xc5, 0x15, 0x95, 0x29, 0x00, 0xaf, 0x01, 0xff, 0x06, 0xab, 0x1f, 0x18, - 0xb7, 0x01, 0xff, 0x45, 0xd5, 0x2d, 0x17, 0x20, 0x00, 0x8d, 0x01, 0xff, - 0x50, 0xbb, 0x11, 0x1e, 0x20, 0x00, 0x59, 0xb2, 0x11, 0x42, 0x2e, 0x40, - 0x43, 0x1a, 0x00, 0x53, 0x2a, 0x00, 0x42, 0x0c, 0x00, 0x54, 0x2a, 0x40, - 0x44, 0xb1, 0x23, 0x2c, 0x22, 0x00, 0x48, 0x6c, 0x09, 0xd2, 0x22, 0x40, - 0x5d, 0xae, 0x11, 0x1f, 0x20, 0x00, 0x45, 0x5a, 0x5d, 0x40, 0x2e, 0x40, - 0x45, 0x86, 0xd0, 0x21, 0x20, 0x00, 0x48, 0xc6, 0x34, 0xea, 0x2a, 0x40, - 0x07, 0x5a, 0x20, 0x0c, 0x4a, 0x01, 0xa6, 0x74, 0x2a, 0x00, 0x49, 0xe6, - 0xb6, 0xbf, 0x27, 0x40, 0x06, 0xf4, 0x05, 0x06, 0x4a, 0xd9, 0xa5, 0xfe, - 0x24, 0x40, 0x45, 0xd1, 0x09, 0xfc, 0x24, 0x00, 0xa6, 0x29, 0x44, 0xb8, - 0x27, 0xfd, 0x24, 0x00, 0x43, 0xcd, 0x09, 0xf5, 0x24, 0x00, 0xb3, 0x0f, - 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xf7, 0x24, 0x00, 0x42, 0x15, 0x02, - 0xf6, 0x24, 0x40, 0x44, 0x96, 0x1b, 0xfb, 0x24, 0x00, 0x42, 0x30, 0x27, - 0xfa, 0x24, 0x40, 0x43, 0xd7, 0x04, 0xf9, 0x24, 0x00, 0x43, 0xfb, 0x05, - 0xf8, 0x24, 0x40, 0x80, 0x3f, 0x04, 0x77, 0x00, 0x01, 0xff, 0xa3, 0x2c, - 0x45, 0x0b, 0x8f, 0x99, 0x29, 0x00, 0x49, 0x15, 0xb2, 0xe5, 0xfa, 0x01, - 0x46, 0x15, 0xd4, 0x13, 0x2e, 0x00, 0x54, 0x46, 0x0a, 0x16, 0x2e, 0x00, - 0xb3, 0x06, 0x54, 0xf8, 0x40, 0x08, 0x2e, 0x40, 0x46, 0x68, 0x2d, 0x4a, - 0x2e, 0x00, 0x45, 0xdc, 0x04, 0x1a, 0x2b, 0x40, 0x45, 0x01, 0x04, 0xcc, - 0x25, 0x00, 0x44, 0x0e, 0x0f, 0x5c, 0x20, 0x40, 0x45, 0x5c, 0x00, 0xd9, - 0x02, 0x00, 0x45, 0x29, 0x1d, 0x38, 0x22, 0x00, 0x48, 0x4b, 0x1b, 0xc5, - 0x22, 0x00, 0x44, 0x71, 0x25, 0x14, 0x22, 0x40, 0x46, 0x2f, 0xb3, 0xab, - 0x20, 0x00, 0x43, 0x6d, 0x21, 0xcf, 0xfa, 0x41, 0x0a, 0x0b, 0x00, 0xf4, - 0x01, 0x08, 0x32, 0x00, 0x01, 0xff, 0x45, 0x9b, 0x0c, 0x62, 0xf0, 0x01, - 0x02, 0x63, 0x3b, 0x01, 0xff, 0x03, 0x40, 0xe8, 0xc3, 0x01, 0x03, 0x4c, - 0xe8, 0xa2, 0x01, 0x03, 0x5e, 0xe8, 0x81, 0x01, 0x03, 0x70, 0xe8, 0x61, - 0x03, 0x7c, 0xe8, 0x41, 0x03, 0x82, 0xe8, 0x21, 0x03, 0x8e, 0xe8, 0x01, - 0xff, 0xd0, 0x8d, 0xf0, 0x01, 0xd1, 0x8e, 0xf0, 0x01, 0xd2, 0x8f, 0xf0, - 0x01, 0xd3, 0x90, 0xf0, 0x01, 0xd4, 0x91, 0xf0, 0x01, 0xd5, 0x92, 0xf0, - 0x01, 0xd6, 0x93, 0xf0, 0x41, 0xd0, 0x86, 0xf0, 0x01, 0xd1, 0x87, 0xf0, - 0x01, 0xd2, 0x88, 0xf0, 0x01, 0xd3, 0x89, 0xf0, 0x01, 0xd4, 0x8a, 0xf0, - 0x01, 0xd5, 0x8b, 0xf0, 0x01, 0xd6, 0x8c, 0xf0, 0x41, 0xd0, 0x7f, 0xf0, - 0x01, 0xd1, 0x80, 0xf0, 0x01, 0xd2, 0x81, 0xf0, 0x01, 0xd3, 0x82, 0xf0, - 0x01, 0xd4, 0x83, 0xf0, 0x01, 0xd5, 0x84, 0xf0, 0x01, 0xd6, 0x85, 0xf0, - 0x41, 0xd0, 0x78, 0xf0, 0x01, 0xd1, 0x79, 0xf0, 0x01, 0xd2, 0x7a, 0xf0, - 0x01, 0xd3, 0x7b, 0xf0, 0x01, 0xd4, 0x7c, 0xf0, 0x01, 0xd5, 0x7d, 0xf0, - 0x01, 0xd6, 0x7e, 0xf0, 0x41, 0xd0, 0x71, 0xf0, 0x01, 0xd1, 0x72, 0xf0, - 0x01, 0xd2, 0x73, 0xf0, 0x01, 0xd3, 0x74, 0xf0, 0x01, 0xd4, 0x75, 0xf0, - 0x01, 0xd5, 0x76, 0xf0, 0x01, 0xd6, 0x77, 0xf0, 0x41, 0xd0, 0x6a, 0xf0, - 0x01, 0xd1, 0x6b, 0xf0, 0x01, 0xd2, 0x6c, 0xf0, 0x01, 0xd3, 0x6d, 0xf0, - 0x01, 0xd4, 0x6e, 0xf0, 0x01, 0xd5, 0x6f, 0xf0, 0x01, 0xd6, 0x70, 0xf0, - 0x41, 0xd0, 0x63, 0xf0, 0x01, 0xd1, 0x64, 0xf0, 0x01, 0xd2, 0x65, 0xf0, - 0x01, 0xd3, 0x66, 0xf0, 0x01, 0xd4, 0x67, 0xf0, 0x01, 0xd5, 0x68, 0xf0, - 0x01, 0xd6, 0x69, 0xf0, 0x41, 0x45, 0x9b, 0x0c, 0x30, 0xf0, 0x01, 0x02, - 0x63, 0x3b, 0x01, 0xff, 0x03, 0x40, 0xe8, 0xc3, 0x01, 0x03, 0x4c, 0xe8, - 0xa2, 0x01, 0x03, 0x5e, 0xe8, 0x81, 0x01, 0x03, 0x70, 0xe8, 0x61, 0x03, - 0x7c, 0xe8, 0x41, 0x03, 0x82, 0xe8, 0x21, 0x03, 0x8e, 0xe8, 0x01, 0xff, - 0xd0, 0x5b, 0xf0, 0x01, 0xd1, 0x5c, 0xf0, 0x01, 0xd2, 0x5d, 0xf0, 0x01, - 0xd3, 0x5e, 0xf0, 0x01, 0xd4, 0x5f, 0xf0, 0x01, 0xd5, 0x60, 0xf0, 0x01, - 0xd6, 0x61, 0xf0, 0x41, 0xd0, 0x54, 0xf0, 0x01, 0xd1, 0x55, 0xf0, 0x01, - 0xd2, 0x56, 0xf0, 0x01, 0xd3, 0x57, 0xf0, 0x01, 0xd4, 0x58, 0xf0, 0x01, - 0xd5, 0x59, 0xf0, 0x01, 0xd6, 0x5a, 0xf0, 0x41, 0xd0, 0x4d, 0xf0, 0x01, - 0xd1, 0x4e, 0xf0, 0x01, 0xd2, 0x4f, 0xf0, 0x01, 0xd3, 0x50, 0xf0, 0x01, - 0xd4, 0x51, 0xf0, 0x01, 0xd5, 0x52, 0xf0, 0x01, 0xd6, 0x53, 0xf0, 0x41, - 0xd0, 0x46, 0xf0, 0x01, 0xd1, 0x47, 0xf0, 0x01, 0xd2, 0x48, 0xf0, 0x01, - 0xd3, 0x49, 0xf0, 0x01, 0xd4, 0x4a, 0xf0, 0x01, 0xd5, 0x4b, 0xf0, 0x01, - 0xd6, 0x4c, 0xf0, 0x41, 0xd0, 0x3f, 0xf0, 0x01, 0xd1, 0x40, 0xf0, 0x01, - 0xd2, 0x41, 0xf0, 0x01, 0xd3, 0x42, 0xf0, 0x01, 0xd4, 0x43, 0xf0, 0x01, - 0xd5, 0x44, 0xf0, 0x01, 0xd6, 0x45, 0xf0, 0x41, 0xd0, 0x38, 0xf0, 0x01, - 0xd1, 0x39, 0xf0, 0x01, 0xd2, 0x3a, 0xf0, 0x01, 0xd3, 0x3b, 0xf0, 0x01, - 0xd4, 0x3c, 0xf0, 0x01, 0xd5, 0x3d, 0xf0, 0x01, 0xd6, 0x3e, 0xf0, 0x41, - 0xd0, 0x31, 0xf0, 0x01, 0xd1, 0x32, 0xf0, 0x01, 0xd2, 0x33, 0xf0, 0x01, - 0xd3, 0x34, 0xf0, 0x01, 0xd4, 0x35, 0xf0, 0x01, 0xd5, 0x36, 0xf0, 0x01, - 0xd6, 0x37, 0xf0, 0x41, 0x48, 0x85, 0x0c, 0x24, 0x00, 0x00, 0x44, 0xfa, - 0xe6, 0x2c, 0xf4, 0x41, 0x45, 0xec, 0x06, 0x36, 0xf4, 0x01, 0x03, 0x71, - 0x00, 0x01, 0xff, 0x51, 0x34, 0x52, 0x3b, 0x18, 0x01, 0x07, 0xf1, 0x04, - 0x59, 0x05, 0xdb, 0x02, 0x38, 0x0b, 0x5b, 0x70, 0x01, 0xff, 0xa1, 0x25, - 0xe5, 0x33, 0x18, 0x01, 0xe9, 0x2d, 0x18, 0x81, 0x18, 0xef, 0x35, 0x18, - 0x01, 0xf5, 0x2f, 0x18, 0x81, 0x0b, 0x49, 0x76, 0xb7, 0x31, 0x18, 0xc1, - 0x00, 0xf2, 0x32, 0x18, 0x41, 0xf5, 0x30, 0x18, 0x41, 0xe9, 0x2e, 0x18, - 0x41, 0xe1, 0x2c, 0x18, 0x01, 0xe9, 0x34, 0x18, 0x01, 0xf5, 0x36, 0x18, - 0x41, 0x48, 0x5b, 0x14, 0x37, 0x18, 0x01, 0x45, 0xab, 0x3a, 0x3a, 0x18, - 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x49, 0x21, 0x39, 0x18, 0x01, - 0x45, 0x69, 0x46, 0x38, 0x18, 0x41, 0xe1, 0x00, 0x18, 0x81, 0xee, 0x01, - 0xa2, 0xe1, 0x01, 0xa3, 0xd4, 0x01, 0xa4, 0xbb, 0x01, 0xe5, 0x06, 0x18, - 0x01, 0xa7, 0xaa, 0x01, 0x42, 0x22, 0x00, 0x2a, 0x18, 0x01, 0xe9, 0x02, - 0x18, 0x81, 0x9a, 0x01, 0xaa, 0x8d, 0x01, 0xab, 0x80, 0x01, 0x42, 0x74, - 0x00, 0x25, 0x18, 0x01, 0x42, 0x6c, 0x00, 0x22, 0x18, 0x01, 0xae, 0x5c, - 0xef, 0x08, 0x18, 0x01, 0xb0, 0x4c, 0xb2, 0x40, 0xb3, 0x2e, 0xb4, 0x15, - 0xf5, 0x04, 0x18, 0x81, 0x0c, 0x42, 0xb4, 0x09, 0x26, 0x18, 0x01, 0x42, - 0x20, 0x20, 0x23, 0x18, 0x41, 0xf5, 0x05, 0x18, 0x41, 0xe1, 0x19, 0x18, - 0x01, 0x42, 0x22, 0x00, 0x1a, 0x18, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x14, - 0x18, 0x01, 0x42, 0x22, 0x00, 0x15, 0x18, 0x41, 0xe1, 0x29, 0x18, 0x01, - 0x42, 0x22, 0x00, 0x27, 0x18, 0x01, 0x42, 0x45, 0x05, 0x28, 0x18, 0x41, - 0xe1, 0x24, 0x18, 0x01, 0x42, 0x71, 0x00, 0x2b, 0x18, 0x41, 0xe1, 0x1e, - 0x18, 0x01, 0x42, 0x22, 0x00, 0x1f, 0x18, 0x41, 0xe1, 0x1d, 0x18, 0x01, - 0x42, 0x24, 0x02, 0x0e, 0x18, 0x01, 0x42, 0x2f, 0x04, 0x18, 0x18, 0x01, - 0x42, 0x20, 0x20, 0x13, 0x18, 0x41, 0xe1, 0x0a, 0x18, 0x01, 0x42, 0x22, - 0x00, 0x0b, 0x18, 0x41, 0xe1, 0x11, 0x18, 0x01, 0x42, 0x22, 0x00, 0x12, - 0x18, 0x41, 0xe9, 0x03, 0x18, 0x41, 0xe1, 0x0c, 0x18, 0x01, 0x42, 0x22, - 0x00, 0x0d, 0x18, 0x41, 0xe1, 0x1b, 0x18, 0x01, 0xa4, 0x06, 0x42, 0x22, - 0x00, 0x1c, 0x18, 0x41, 0xe1, 0x16, 0x18, 0x01, 0x42, 0x22, 0x00, 0x17, - 0x18, 0x41, 0xe1, 0x0f, 0x18, 0x01, 0x42, 0x22, 0x00, 0x10, 0x18, 0x41, - 0xe1, 0x20, 0x18, 0x01, 0x42, 0x22, 0x00, 0x21, 0x18, 0x41, 0xe1, 0x01, - 0x18, 0x01, 0xe9, 0x07, 0x18, 0x01, 0xf5, 0x09, 0x18, 0x41, 0x0b, 0x44, - 0x92, 0x37, 0x46, 0x00, 0x00, 0x24, 0x22, 0x80, 0x2a, 0x45, 0xbb, 0xdb, - 0xae, 0x22, 0x00, 0x02, 0x59, 0x0b, 0x0d, 0x47, 0x2d, 0xc1, 0x81, 0x22, - 0xc0, 0x00, 0x49, 0xf3, 0x25, 0xe1, 0x22, 0x40, 0x45, 0x42, 0x32, 0x80, - 0x22, 0x80, 0x06, 0x43, 0x5e, 0x00, 0xac, 0x22, 0x40, 0x49, 0xf3, 0x25, - 0xe0, 0x22, 0x40, 0x5d, 0x13, 0x13, 0xee, 0x2a, 0x40, 0x46, 0xb9, 0x04, - 0x0c, 0x22, 0x00, 0x4f, 0x41, 0x4e, 0xeb, 0x22, 0xc0, 0x00, 0x49, 0xf3, - 0x25, 0xed, 0x22, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x47, 0x75, 0x83, - 0xbb, 0xf5, 0x01, 0x44, 0xab, 0x2c, 0xb9, 0xf5, 0xc1, 0x00, 0x4c, 0x70, - 0x83, 0xba, 0xf5, 0x41, 0xa1, 0xa4, 0x09, 0xa5, 0xff, 0x08, 0x50, 0x09, - 0x5d, 0x4f, 0x22, 0x00, 0xa7, 0xc1, 0x06, 0x4e, 0x14, 0x73, 0x31, 0x23, - 0x00, 0x06, 0xbb, 0xd3, 0xc8, 0x04, 0x05, 0xe1, 0x0b, 0xb7, 0x04, 0xb3, - 0x8f, 0x04, 0x48, 0xbd, 0xc1, 0x03, 0x30, 0x00, 0xb6, 0x17, 0x47, 0x7d, - 0xcd, 0x94, 0xfa, 0x01, 0x04, 0x36, 0xe8, 0x01, 0xff, 0x44, 0xed, 0x06, - 0x35, 0xf6, 0x01, 0x46, 0xf7, 0x06, 0xab, 0xf4, 0x41, 0x09, 0x57, 0xaf, - 0x2d, 0xa9, 0x06, 0x4b, 0xab, 0x98, 0xae, 0x26, 0x40, 0x43, 0x0f, 0x25, - 0x23, 0x22, 0x00, 0x47, 0x47, 0xc9, 0x3f, 0xf9, 0x01, 0x05, 0xba, 0x2c, - 0x01, 0xff, 0xb3, 0x06, 0x45, 0x28, 0x02, 0xc7, 0x22, 0x40, 0x43, 0xdc, - 0x02, 0xf7, 0x00, 0x00, 0x44, 0xa1, 0x0c, 0x15, 0x22, 0x40, 0xa4, 0xf0, - 0x02, 0x50, 0x89, 0x5c, 0x46, 0x19, 0x01, 0x4a, 0x1d, 0x94, 0x45, 0x19, - 0x01, 0x4a, 0x63, 0xa3, 0x41, 0x19, 0x01, 0x07, 0xf1, 0x04, 0x64, 0x07, - 0x63, 0x2f, 0x54, 0x53, 0xa7, 0x46, 0x3f, 0x19, 0x01, 0x05, 0xdb, 0x02, - 0x32, 0xb6, 0x01, 0xff, 0x45, 0x48, 0x21, 0x3e, 0x19, 0x01, 0x0a, 0x5c, - 0x70, 0x01, 0xff, 0xa1, 0x1a, 0xe5, 0x35, 0x19, 0x01, 0xe9, 0x31, 0x19, - 0x81, 0x0d, 0xef, 0x38, 0x19, 0x01, 0xf5, 0x33, 0x19, 0xc1, 0x00, 0xf5, - 0x34, 0x19, 0x41, 0xe9, 0x32, 0x19, 0x41, 0xe1, 0x30, 0x19, 0x01, 0xe9, - 0x37, 0x19, 0x41, 0x48, 0x5b, 0x14, 0x3b, 0x19, 0x01, 0x4b, 0x3b, 0x21, - 0x3c, 0x19, 0x01, 0x47, 0x41, 0xc7, 0x3d, 0x19, 0x01, 0x45, 0xab, 0x3a, - 0x43, 0x19, 0x41, 0x42, 0x71, 0x00, 0x42, 0x19, 0x01, 0x42, 0x20, 0x20, - 0x40, 0x19, 0x41, 0xe1, 0x00, 0x19, 0x81, 0xec, 0x01, 0xa2, 0xdf, 0x01, - 0xa3, 0xd2, 0x01, 0xa4, 0xb9, 0x01, 0xe5, 0x06, 0x19, 0x01, 0xa7, 0xa8, - 0x01, 0x42, 0x22, 0x00, 0x2d, 0x19, 0x01, 0xe9, 0x02, 0x19, 0x81, 0x98, - 0x01, 0x42, 0x77, 0x24, 0x13, 0x19, 0x01, 0xab, 0x85, 0x01, 0xac, 0x79, - 0x42, 0x6c, 0x00, 0x24, 0x19, 0x01, 0xae, 0x5b, 0xef, 0x09, 0x19, 0x01, - 0xb0, 0x4b, 0x42, 0x71, 0x00, 0x27, 0x19, 0x01, 0xb3, 0x33, 0xb4, 0x21, - 0xf5, 0x04, 0x19, 0x81, 0x18, 0x42, 0xb4, 0x09, 0x29, 0x19, 0x01, 0xb9, - 0x06, 0x42, 0x59, 0x00, 0x2f, 0x19, 0x41, 0xe1, 0x25, 0x19, 0x01, 0x42, - 0x20, 0x20, 0x26, 0x19, 0x41, 0xf5, 0x05, 0x19, 0x41, 0xe1, 0x1b, 0x19, - 0x01, 0x42, 0x22, 0x00, 0x1c, 0x19, 0x01, 0x42, 0x12, 0x00, 0x16, 0x19, - 0x41, 0xe1, 0x2c, 0x19, 0x01, 0x42, 0x22, 0x00, 0x2a, 0x19, 0x01, 0x42, - 0x45, 0x05, 0x2b, 0x19, 0x41, 0xe1, 0x20, 0x19, 0x01, 0x42, 0x22, 0x00, - 0x21, 0x19, 0x41, 0xe1, 0x1f, 0x19, 0x01, 0x42, 0x24, 0x02, 0x10, 0x19, - 0x01, 0x42, 0x2f, 0x04, 0x1a, 0x19, 0x01, 0x42, 0x20, 0x20, 0x15, 0x19, - 0x41, 0xe1, 0x28, 0x19, 0x01, 0x42, 0x74, 0x00, 0x2e, 0x19, 0x41, 0xe1, - 0x0c, 0x19, 0x01, 0x42, 0x22, 0x00, 0x0d, 0x19, 0x41, 0xe9, 0x03, 0x19, - 0x41, 0xe1, 0x0e, 0x19, 0x01, 0x42, 0x22, 0x00, 0x0f, 0x19, 0x41, 0xe1, - 0x1d, 0x19, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x1e, 0x19, 0x41, 0xe1, - 0x18, 0x19, 0x01, 0x42, 0x22, 0x00, 0x19, 0x19, 0x41, 0xe1, 0x11, 0x19, - 0x01, 0x42, 0x22, 0x00, 0x12, 0x19, 0x41, 0xe1, 0x22, 0x19, 0x01, 0x42, - 0x22, 0x00, 0x23, 0x19, 0x41, 0xe1, 0x01, 0x19, 0x41, 0x05, 0xf5, 0x05, - 0x06, 0x4b, 0xcc, 0x98, 0x44, 0x19, 0x41, 0x45, 0xd1, 0x09, 0x58, 0x19, - 0x01, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x59, 0x19, 0x01, 0x43, 0xcd, 0x09, - 0x51, 0x19, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x50, 0x19, - 0x41, 0x44, 0x25, 0x01, 0x53, 0x19, 0x01, 0x42, 0x15, 0x02, 0x52, 0x19, - 0x41, 0x44, 0x96, 0x1b, 0x57, 0x19, 0x01, 0x42, 0x30, 0x27, 0x56, 0x19, - 0x41, 0x43, 0xd7, 0x04, 0x55, 0x19, 0x01, 0x43, 0xfb, 0x05, 0x54, 0x19, - 0x41, 0xa1, 0x0c, 0x5b, 0x95, 0x18, 0x82, 0x23, 0x00, 0x4b, 0x75, 0x94, - 0x78, 0xf9, 0x41, 0x48, 0x7d, 0xba, 0xcd, 0x26, 0x00, 0x09, 0xa6, 0xb4, - 0x01, 0xff, 0x51, 0x33, 0x53, 0x25, 0xf6, 0x01, 0x44, 0xed, 0x06, 0x1e, - 0xf6, 0x41, 0x57, 0x9e, 0x2a, 0x93, 0x23, 0x00, 0x43, 0xae, 0x02, 0xaf, - 0xf3, 0x41, 0x13, 0x3d, 0x43, 0x9d, 0x01, 0x11, 0xb8, 0x56, 0x01, 0xff, - 0x06, 0xf4, 0x05, 0x57, 0x4a, 0xd9, 0xa5, 0x7f, 0x27, 0x00, 0x0b, 0x45, - 0x43, 0x01, 0xff, 0x06, 0xf4, 0x05, 0x06, 0x4a, 0xd9, 0xa5, 0x93, 0x27, - 0x40, 0x45, 0xd1, 0x09, 0x91, 0x27, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, - 0x92, 0x27, 0x00, 0x43, 0xcd, 0x09, 0x8a, 0x27, 0x00, 0xb3, 0x14, 0xb4, - 0x06, 0x44, 0xf5, 0x1b, 0x0c, 0xf1, 0x41, 0x44, 0x25, 0x01, 0x8c, 0x27, - 0x00, 0x42, 0x15, 0x02, 0x8b, 0x27, 0x40, 0x44, 0x96, 0x1b, 0x90, 0x27, - 0x00, 0x42, 0x30, 0x27, 0x8f, 0x27, 0x40, 0x43, 0xd7, 0x04, 0x8e, 0x27, - 0x00, 0x43, 0xfb, 0x05, 0x8d, 0x27, 0x40, 0x45, 0xd1, 0x09, 0x7d, 0x27, - 0x00, 0xa6, 0x29, 0x44, 0xb8, 0x27, 0x7e, 0x27, 0x00, 0x43, 0xcd, 0x09, - 0x76, 0x27, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x78, - 0x27, 0x00, 0x42, 0x15, 0x02, 0x77, 0x27, 0x40, 0x44, 0x96, 0x1b, 0x7c, - 0x27, 0x00, 0x42, 0x30, 0x27, 0x7b, 0x27, 0x40, 0x43, 0xd7, 0x04, 0x7a, - 0x27, 0x00, 0x43, 0xfb, 0x05, 0x79, 0x27, 0x40, 0x06, 0xf4, 0x05, 0x06, - 0x4a, 0xd9, 0xa5, 0x89, 0x27, 0x40, 0x45, 0xd1, 0x09, 0x87, 0x27, 0x00, - 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x88, 0x27, 0x00, 0x43, 0xcd, 0x09, 0x80, - 0x27, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x0b, 0xf1, 0x41, - 0x44, 0x25, 0x01, 0x82, 0x27, 0x00, 0x42, 0x15, 0x02, 0x81, 0x27, 0x40, - 0x44, 0x96, 0x1b, 0x86, 0x27, 0x00, 0x42, 0x30, 0x27, 0x85, 0x27, 0x40, - 0x43, 0xd7, 0x04, 0x84, 0x27, 0x00, 0x43, 0xfb, 0x05, 0x83, 0x27, 0x40, - 0x03, 0xf7, 0x05, 0x4c, 0x08, 0x30, 0x8e, 0x01, 0xff, 0x45, 0x8c, 0x6b, - 0x05, 0xd3, 0x81, 0x2f, 0x09, 0xf0, 0xaf, 0x1f, 0xa8, 0x11, 0x08, 0xd5, - 0xbd, 0x01, 0xff, 0x43, 0x1c, 0x01, 0x8e, 0x26, 0x00, 0x42, 0x9e, 0x01, - 0x8d, 0x26, 0x40, 0x4d, 0x43, 0x7b, 0x01, 0xd3, 0x01, 0x4a, 0xc1, 0xa9, - 0x02, 0xd3, 0x41, 0x43, 0x1c, 0x01, 0x8c, 0x26, 0x00, 0x42, 0x9e, 0x01, - 0x8f, 0x26, 0x40, 0x04, 0xf7, 0x86, 0x01, 0xff, 0x45, 0xc1, 0x74, 0x03, - 0xd3, 0x01, 0x44, 0xe4, 0x9b, 0x04, 0xd3, 0x41, 0x45, 0xd1, 0x09, 0x38, - 0x00, 0x80, 0xce, 0x01, 0xa6, 0x9f, 0x01, 0x44, 0xb8, 0x27, 0x39, 0x00, - 0x80, 0x88, 0x01, 0x43, 0xcd, 0x09, 0x31, 0x00, 0x80, 0x72, 0xb3, 0x44, - 0xb4, 0x16, 0x44, 0xf5, 0x1b, 0x30, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, - 0x45, 0x18, 0x04, 0x01, 0xf1, 0x01, 0x49, 0xa0, 0x14, 0x00, 0xf1, 0x41, - 0x44, 0x25, 0x01, 0x33, 0x00, 0x80, 0x16, 0x42, 0x15, 0x02, 0x32, 0x00, - 0xc0, 0x00, 0x80, 0x01, 0xff, 0x45, 0x18, 0x04, 0x03, 0xf1, 0x01, 0x49, - 0xa0, 0x14, 0x89, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0x18, 0x04, 0x04, - 0xf1, 0x01, 0x49, 0xa0, 0x14, 0x8a, 0x24, 0x40, 0x44, 0x96, 0x1b, 0x37, - 0x00, 0x80, 0x16, 0x42, 0x30, 0x27, 0x36, 0x00, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x45, 0x18, 0x04, 0x07, 0xf1, 0x01, 0x49, 0xa0, 0x14, 0x8d, 0x24, - 0x40, 0x80, 0x01, 0xff, 0x45, 0x18, 0x04, 0x08, 0xf1, 0x01, 0x49, 0xa0, - 0x14, 0x8e, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0x18, 0x04, 0x02, 0xf1, - 0x01, 0x49, 0xa0, 0x14, 0x88, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0x18, - 0x04, 0x0a, 0xf1, 0x01, 0x49, 0xa0, 0x14, 0x90, 0x24, 0x40, 0x43, 0xd7, - 0x04, 0x35, 0x00, 0x80, 0x16, 0x43, 0xfb, 0x05, 0x34, 0x00, 0xc0, 0x00, - 0x80, 0x01, 0xff, 0x45, 0x18, 0x04, 0x05, 0xf1, 0x01, 0x49, 0xa0, 0x14, - 0x8b, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0x18, 0x04, 0x06, 0xf1, 0x01, - 0x49, 0xa0, 0x14, 0x8c, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0x18, 0x04, - 0x09, 0xf1, 0x01, 0x49, 0xa0, 0x14, 0x8f, 0x24, 0x40, 0x06, 0xd3, 0xcd, - 0x06, 0x4e, 0x28, 0x75, 0xf2, 0xf6, 0x41, 0xd1, 0x80, 0x26, 0x00, 0xd2, - 0x81, 0x26, 0x00, 0xd3, 0x82, 0x26, 0x00, 0xd4, 0x83, 0x26, 0x00, 0xd5, - 0x84, 0x26, 0x00, 0xd6, 0x85, 0x26, 0x40, 0x46, 0x1e, 0x21, 0xa8, 0x00, - 0x00, 0xad, 0x01, 0xff, 0x49, 0x69, 0xaf, 0x00, 0x23, 0x00, 0x04, 0xba, - 0x51, 0x01, 0xff, 0x48, 0x4b, 0x1b, 0xc4, 0x22, 0x00, 0x57, 0x39, 0x2d, - 0xa0, 0xf4, 0x01, 0x46, 0xcb, 0xd5, 0x9c, 0xf7, 0x01, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x51, 0x00, 0x53, 0x19, 0x2b, 0x00, 0x4f, 0xa3, 0x68, 0x16, - 0x2b, 0x00, 0x50, 0x59, 0x60, 0x17, 0x2b, 0x00, 0x4e, 0x78, 0x76, 0x18, - 0x2b, 0x40, 0x49, 0xa2, 0xac, 0xcf, 0xf9, 0x01, 0xa3, 0x8b, 0x0d, 0x42, - 0x33, 0x00, 0x8c, 0xf9, 0x01, 0x05, 0x5f, 0xa2, 0xee, 0x0c, 0xac, 0xd9, - 0x0c, 0x15, 0xa9, 0x38, 0xd8, 0x0b, 0x4e, 0x3a, 0x74, 0xec, 0xf3, 0x01, - 0x55, 0x51, 0x39, 0xda, 0xf3, 0x01, 0xb3, 0xe5, 0x07, 0xb6, 0x01, 0xff, - 0x08, 0x26, 0xb7, 0x26, 0x0c, 0xc8, 0x82, 0x01, 0xff, 0x44, 0xfa, 0x05, - 0x14, 0x00, 0x00, 0x43, 0xcd, 0x09, 0x11, 0x00, 0x00, 0x46, 0x39, 0x61, - 0x90, 0x00, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x13, 0x00, 0x00, - 0x42, 0x15, 0x02, 0x12, 0x00, 0x40, 0xa1, 0xa9, 0x07, 0x45, 0xe1, 0x91, - 0xfa, 0xa8, 0x00, 0xa4, 0xce, 0x06, 0xa7, 0xbf, 0x06, 0x04, 0xe6, 0x01, - 0xa7, 0x06, 0x47, 0xf0, 0xc7, 0xfd, 0xa8, 0x00, 0x07, 0xf1, 0x04, 0xc9, - 0x02, 0x42, 0x19, 0x04, 0x50, 0x09, 0x00, 0xb3, 0x84, 0x01, 0x0b, 0x5b, - 0x70, 0x01, 0xff, 0xa1, 0x69, 0x07, 0x96, 0xc5, 0x57, 0xe5, 0x47, 0x09, - 0x00, 0xe9, 0x3f, 0x09, 0x80, 0x4a, 0xef, 0x4b, 0x09, 0x80, 0x3b, 0x4f, - 0x28, 0x6b, 0x4e, 0x09, 0x00, 0x06, 0x1c, 0x33, 0x29, 0xf5, 0x41, 0x09, - 0x80, 0x17, 0x08, 0x76, 0xb7, 0x01, 0xff, 0xec, 0x62, 0x09, 0x80, 0x09, - 0xf2, 0x43, 0x09, 0xc0, 0x00, 0xf2, 0x44, 0x09, 0x40, 0xec, 0x63, 0x09, - 0x40, 0xe5, 0x56, 0x09, 0x00, 0xf5, 0x42, 0x09, 0xc0, 0x00, 0xe5, 0x57, - 0x09, 0x40, 0xe5, 0x46, 0x09, 0x00, 0xef, 0x4a, 0x09, 0x40, 0xe5, 0x3a, - 0x09, 0x00, 0x42, 0xca, 0x4b, 0x3b, 0x09, 0x40, 0xe9, 0x40, 0x09, 0x40, - 0xe5, 0x45, 0x09, 0x00, 0x46, 0x55, 0xd3, 0x55, 0x09, 0x00, 0xef, 0x49, - 0x09, 0x40, 0xe1, 0x3e, 0x09, 0x00, 0xe9, 0x48, 0x09, 0x00, 0xf5, 0x4c, - 0x09, 0x00, 0xf7, 0x4f, 0x09, 0x00, 0xf9, 0xff, 0xa8, 0x40, 0x04, 0xdc, - 0x02, 0x11, 0x0b, 0x60, 0x9b, 0x01, 0xff, 0x48, 0x0e, 0x76, 0x52, 0x09, - 0x00, 0x46, 0x10, 0x76, 0x51, 0x09, 0x40, 0xa1, 0x98, 0x01, 0x45, 0xc2, - 0x27, 0x02, 0x1b, 0x81, 0x8a, 0x01, 0x4b, 0x3b, 0x21, 0x01, 0x09, 0x80, - 0x66, 0x59, 0x34, 0x21, 0xf4, 0xa8, 0x00, 0x4e, 0xd6, 0x70, 0x04, 0x1b, - 0x81, 0x53, 0x50, 0x29, 0x5d, 0x71, 0x09, 0x00, 0x54, 0xa0, 0x3e, 0x00, - 0x09, 0x00, 0x45, 0xe1, 0xdd, 0x09, 0x1b, 0x01, 0x45, 0xab, 0x3a, 0x3c, - 0x09, 0x00, 0x48, 0x25, 0xc0, 0xf8, 0xa8, 0x00, 0x58, 0xaf, 0x27, 0x08, - 0x1b, 0x01, 0xb3, 0x21, 0x02, 0x02, 0x00, 0x11, 0x08, 0xda, 0x2d, 0x01, - 0xff, 0x4f, 0x78, 0x66, 0x06, 0x1b, 0x01, 0x4f, 0xb8, 0x27, 0x07, 0x1b, - 0x41, 0x44, 0x49, 0x21, 0x4d, 0x09, 0x00, 0x45, 0x69, 0x46, 0x03, 0x09, - 0x40, 0x46, 0xa2, 0xcb, 0xfc, 0xa8, 0x00, 0x52, 0xd1, 0x4e, 0xf2, 0xa8, - 0x40, 0x4a, 0x0b, 0x22, 0x05, 0x1b, 0x41, 0x80, 0x01, 0xff, 0x48, 0x39, - 0x81, 0xf7, 0xa8, 0x00, 0xb4, 0x06, 0x46, 0x47, 0x21, 0xf3, 0xa8, 0x40, - 0x44, 0x25, 0x01, 0xf6, 0xa8, 0x00, 0x42, 0x15, 0x02, 0xf5, 0xa8, 0x40, - 0x4a, 0x0b, 0x22, 0x03, 0x1b, 0x41, 0x47, 0x5c, 0x14, 0x02, 0x09, 0x00, - 0x47, 0x3a, 0x81, 0x3d, 0x09, 0x40, 0xe1, 0x05, 0x09, 0x80, 0xb9, 0x03, - 0xa2, 0xa6, 0x03, 0xa3, 0x87, 0x03, 0xa4, 0xe2, 0x02, 0xe5, 0x0f, 0x09, - 0x00, 0x42, 0xed, 0x06, 0x5e, 0x09, 0x00, 0xa7, 0xb9, 0x02, 0xa8, 0xac, - 0x02, 0xe9, 0x07, 0x09, 0x80, 0xa2, 0x02, 0xaa, 0x8f, 0x02, 0xab, 0xfb, - 0x01, 0xac, 0xe7, 0x01, 0x42, 0x6c, 0x00, 0x2e, 0x09, 0x80, 0xd9, 0x01, - 0xae, 0xba, 0x01, 0xef, 0x13, 0x09, 0x80, 0xaa, 0x01, 0xb0, 0x9d, 0x01, - 0x42, 0x9d, 0x12, 0x58, 0x09, 0x00, 0xb2, 0x84, 0x01, 0xb3, 0x61, 0xb4, - 0x48, 0xf5, 0x09, 0x09, 0x80, 0x36, 0xb6, 0x19, 0xb9, 0x0d, 0xba, 0x01, - 0xff, 0xe1, 0x5b, 0x09, 0x00, 0x42, 0x22, 0x00, 0x79, 0x09, 0x40, 0xe1, - 0x2f, 0x09, 0x00, 0x42, 0x20, 0x20, 0x5f, 0x09, 0x40, 0xe1, 0x35, 0x09, - 0x00, 0x07, 0x77, 0xb7, 0x01, 0xff, 0xec, 0x0c, 0x09, 0x80, 0x09, 0xf2, - 0x0b, 0x09, 0xc0, 0x00, 0xf2, 0x60, 0x09, 0x40, 0xec, 0x61, 0x09, 0x40, - 0xe5, 0x76, 0x09, 0x00, 0xf5, 0x0a, 0x09, 0xc0, 0x00, 0xe5, 0x77, 0x09, - 0x40, 0xe1, 0x24, 0x09, 0x00, 0x42, 0x22, 0x00, 0x25, 0x09, 0x00, 0xb4, - 0x01, 0xff, 0xe1, 0x1f, 0x09, 0x00, 0x42, 0x22, 0x00, 0x20, 0x09, 0x40, - 0xe1, 0x38, 0x09, 0x00, 0xa8, 0x06, 0x42, 0x45, 0x05, 0x37, 0x09, 0x40, - 0xe1, 0x36, 0x09, 0x00, 0x04, 0x5d, 0x30, 0x01, 0xff, 0xe1, 0x04, 0x09, - 0x00, 0xe5, 0x0e, 0x09, 0x00, 0xef, 0x12, 0x09, 0x40, 0xe1, 0x30, 0x09, - 0x00, 0x42, 0x22, 0x00, 0x5d, 0x09, 0x00, 0x42, 0x71, 0x00, 0x31, 0x09, - 0x40, 0xe1, 0x2a, 0x09, 0x00, 0x42, 0x22, 0x00, 0x2b, 0x09, 0x40, 0xe5, - 0x73, 0x09, 0x00, 0x42, 0xca, 0x4b, 0x74, 0x09, 0x40, 0xe1, 0x28, 0x09, - 0x00, 0x42, 0x24, 0x02, 0x19, 0x09, 0x00, 0xae, 0x06, 0x42, 0x20, 0x20, - 0x1e, 0x09, 0x40, 0xe1, 0x23, 0x09, 0x00, 0x42, 0x2f, 0x04, 0x29, 0x09, - 0x40, 0x49, 0x7e, 0xb5, 0x78, 0x09, 0x40, 0xe1, 0x32, 0x09, 0x00, 0xac, - 0x01, 0xff, 0xe1, 0x33, 0x09, 0x00, 0x42, 0x74, 0x00, 0x34, 0x09, 0x40, - 0xe1, 0x15, 0x09, 0x00, 0xa8, 0x01, 0xff, 0xe1, 0x16, 0x09, 0x00, 0x42, - 0x22, 0x00, 0x59, 0x09, 0x40, 0xe1, 0x1c, 0x09, 0x00, 0x42, 0x22, 0x00, - 0x1d, 0x09, 0x00, 0x42, 0x77, 0x24, 0x7c, 0x09, 0x40, 0xe9, 0x08, 0x09, - 0x40, 0xe1, 0x39, 0x09, 0x00, 0x47, 0x84, 0xc6, 0x7a, 0x09, 0x40, 0xe1, - 0x17, 0x09, 0x00, 0x42, 0x24, 0x02, 0x7b, 0x09, 0x00, 0xa8, 0x06, 0x4b, - 0xd0, 0x25, 0x7d, 0x09, 0x40, 0xe1, 0x18, 0x09, 0x00, 0x42, 0x22, 0x00, - 0x5a, 0x09, 0x40, 0xe1, 0x26, 0x09, 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, - 0x27, 0x09, 0x40, 0xe1, 0x21, 0x09, 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, - 0x22, 0x09, 0x40, 0xe1, 0x7e, 0x09, 0x00, 0x42, 0x22, 0x00, 0x5c, 0x09, - 0x40, 0xe1, 0x1a, 0x09, 0x80, 0x06, 0x42, 0x22, 0x00, 0x1b, 0x09, 0x40, - 0x05, 0x98, 0xc5, 0x01, 0xff, 0xe1, 0x72, 0x09, 0x00, 0xe5, 0x0d, 0x09, - 0x00, 0xef, 0x11, 0x09, 0x40, 0xe1, 0x2c, 0x09, 0x00, 0x42, 0x16, 0x00, - 0x7f, 0x09, 0x00, 0x42, 0x22, 0x00, 0x2d, 0x09, 0x40, 0xe1, 0x06, 0x09, - 0x00, 0xe9, 0x10, 0x09, 0x00, 0xf5, 0x14, 0x09, 0x00, 0xf7, 0x75, 0x09, - 0x00, 0xf9, 0xfe, 0xa8, 0x40, 0x45, 0xb8, 0x00, 0x00, 0x1b, 0x81, 0x06, - 0x46, 0x57, 0x04, 0xfb, 0xa8, 0x40, 0x50, 0xb9, 0x5a, 0x01, 0x1b, 0x41, - 0x49, 0x1e, 0x94, 0xf9, 0xa8, 0x00, 0x4b, 0x7a, 0x20, 0x53, 0x09, 0x40, - 0x44, 0x0b, 0x1e, 0x64, 0x09, 0x00, 0x05, 0xf5, 0x05, 0x06, 0x4b, 0xcc, - 0x98, 0x65, 0x09, 0x40, 0x45, 0xd1, 0x09, 0x6e, 0x09, 0x00, 0xa6, 0x2e, - 0x44, 0xb8, 0x27, 0x6f, 0x09, 0x00, 0x43, 0xcd, 0x09, 0x67, 0x09, 0x00, - 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x66, 0x09, 0x40, 0x44, 0x25, - 0x01, 0x69, 0x09, 0x00, 0x42, 0x15, 0x02, 0x68, 0x09, 0x40, 0x44, 0x96, - 0x1b, 0x6d, 0x09, 0x00, 0x42, 0x30, 0x27, 0x6c, 0x09, 0x40, 0x43, 0xd7, - 0x04, 0x6b, 0x09, 0x00, 0x43, 0xfb, 0x05, 0x6a, 0x09, 0x40, 0x50, 0x35, - 0x52, 0x70, 0x09, 0x00, 0x4b, 0x79, 0x84, 0x54, 0x09, 0x40, 0x4c, 0xbc, - 0x85, 0x0b, 0x26, 0x00, 0x02, 0x33, 0x00, 0x11, 0x05, 0x1e, 0xdd, 0x01, - 0xff, 0x48, 0x19, 0x46, 0xa5, 0xf5, 0x01, 0x46, 0x9d, 0xd6, 0xd4, 0xf5, - 0x41, 0x03, 0x4a, 0x08, 0x0b, 0xf4, 0xdc, 0xf3, 0xc1, 0x00, 0x47, 0x20, - 0xc3, 0xdd, 0xf3, 0x41, 0x0f, 0xe9, 0x04, 0xdd, 0x01, 0x0d, 0x7c, 0x07, - 0x01, 0xff, 0x42, 0x65, 0x0f, 0x34, 0x04, 0x01, 0x43, 0x83, 0xad, 0x3a, - 0x04, 0x01, 0x44, 0xbe, 0x45, 0x3d, 0x04, 0x01, 0x43, 0x46, 0x7a, 0x3c, - 0x04, 0x01, 0xa5, 0x91, 0x01, 0x43, 0x28, 0x94, 0x40, 0x04, 0x01, 0xe8, - 0x38, 0x04, 0x01, 0x43, 0x13, 0x34, 0x3e, 0x04, 0x01, 0x43, 0x1e, 0x78, - 0x3f, 0x04, 0x01, 0x05, 0x4f, 0x30, 0x5d, 0xaf, 0x53, 0x43, 0xa7, 0x75, - 0x39, 0x04, 0x01, 0x06, 0x1c, 0x33, 0x2f, 0xb4, 0x21, 0x43, 0x02, 0x06, - 0x42, 0x04, 0x01, 0x42, 0x75, 0x06, 0x36, 0x04, 0x01, 0x43, 0x3b, 0xa1, - 0x37, 0x04, 0x01, 0xba, 0x01, 0xff, 0x42, 0x27, 0x01, 0x46, 0x04, 0x01, - 0x43, 0x86, 0x11, 0x48, 0x04, 0x41, 0x42, 0x27, 0x01, 0x3b, 0x04, 0x01, - 0x43, 0x86, 0x11, 0x44, 0x04, 0x41, 0xe1, 0x30, 0x04, 0x81, 0x11, 0xe5, - 0x2f, 0x04, 0x01, 0xe9, 0x2e, 0x04, 0x01, 0xef, 0x32, 0x04, 0xc1, 0x00, - 0xef, 0x33, 0x04, 0x41, 0xe8, 0x31, 0x04, 0x41, 0xe9, 0x4e, 0x04, 0x01, - 0xf7, 0x35, 0x04, 0x41, 0xe1, 0x2a, 0x04, 0x81, 0x11, 0xe5, 0x29, 0x04, - 0x01, 0xe9, 0x28, 0x04, 0x01, 0xef, 0x2c, 0x04, 0xc1, 0x00, 0xef, 0x2d, - 0x04, 0x41, 0xe8, 0x2b, 0x04, 0x41, 0xe6, 0x41, 0x04, 0x01, 0xec, 0x4a, - 0x04, 0x01, 0xed, 0x4b, 0x04, 0x01, 0xee, 0x4c, 0x04, 0x81, 0x17, 0xf2, - 0x49, 0x04, 0x01, 0xf3, 0x45, 0x04, 0x81, 0x0a, 0x42, 0x53, 0x00, 0x43, - 0x04, 0x01, 0xf7, 0x4f, 0x04, 0x41, 0xe8, 0x47, 0x04, 0x41, 0xe7, 0x4d, - 0x04, 0x41, 0x42, 0x65, 0x0f, 0x0c, 0x04, 0x01, 0x43, 0x83, 0xad, 0x12, - 0x04, 0x01, 0x44, 0xbe, 0x45, 0x15, 0x04, 0x01, 0x43, 0x46, 0x7a, 0x14, - 0x04, 0x01, 0xa5, 0x91, 0x01, 0x43, 0x28, 0x94, 0x18, 0x04, 0x01, 0xe8, - 0x10, 0x04, 0x01, 0x43, 0x13, 0x34, 0x16, 0x04, 0x01, 0x43, 0x1e, 0x78, - 0x17, 0x04, 0x01, 0x05, 0x4f, 0x30, 0x5d, 0xaf, 0x53, 0x43, 0xa7, 0x75, - 0x11, 0x04, 0x01, 0x06, 0x1c, 0x33, 0x2f, 0xb4, 0x21, 0x43, 0x02, 0x06, - 0x1a, 0x04, 0x01, 0x42, 0x75, 0x06, 0x0e, 0x04, 0x01, 0x43, 0x3b, 0xa1, - 0x0f, 0x04, 0x01, 0xba, 0x01, 0xff, 0x42, 0x27, 0x01, 0x1e, 0x04, 0x01, - 0x43, 0x86, 0x11, 0x20, 0x04, 0x41, 0x42, 0x27, 0x01, 0x13, 0x04, 0x01, - 0x43, 0x86, 0x11, 0x1c, 0x04, 0x41, 0xe1, 0x08, 0x04, 0x81, 0x11, 0xe5, - 0x07, 0x04, 0x01, 0xe9, 0x06, 0x04, 0x01, 0xef, 0x0a, 0x04, 0xc1, 0x00, - 0xef, 0x0b, 0x04, 0x41, 0xe8, 0x09, 0x04, 0x41, 0xe9, 0x26, 0x04, 0x01, - 0xf7, 0x0d, 0x04, 0x41, 0xe1, 0x02, 0x04, 0x81, 0x11, 0xe5, 0x01, 0x04, - 0x01, 0xe9, 0x00, 0x04, 0x01, 0xef, 0x04, 0x04, 0xc1, 0x00, 0xef, 0x05, - 0x04, 0x41, 0xe8, 0x03, 0x04, 0x41, 0xe6, 0x19, 0x04, 0x01, 0xec, 0x22, - 0x04, 0x01, 0xed, 0x23, 0x04, 0x01, 0xee, 0x24, 0x04, 0x81, 0x17, 0xf2, - 0x21, 0x04, 0x01, 0xf3, 0x1d, 0x04, 0x81, 0x0a, 0x42, 0x53, 0x00, 0x1b, - 0x04, 0x01, 0xf7, 0x27, 0x04, 0x41, 0xe8, 0x1f, 0x04, 0x41, 0xe7, 0x25, - 0x04, 0x41, 0x53, 0x89, 0x43, 0xc9, 0x23, 0x80, 0x5e, 0x51, 0xc7, 0x58, - 0xca, 0x23, 0x80, 0x40, 0x09, 0x32, 0x00, 0x01, 0xff, 0x04, 0x1a, 0x00, - 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x46, 0x00, 0x04, 0xc0, 0x23, 0x00, - 0x48, 0x01, 0x02, 0xc3, 0x23, 0x40, 0x07, 0xf3, 0x0b, 0x16, 0x04, 0x1e, - 0x00, 0x06, 0x44, 0xda, 0x51, 0xc6, 0x23, 0x40, 0x44, 0xc3, 0x00, 0xcb, - 0x23, 0x00, 0x45, 0xc8, 0x00, 0xbe, 0x23, 0x40, 0x44, 0xc3, 0x00, 0xcc, - 0x23, 0x00, 0x45, 0xc8, 0x00, 0xbf, 0x23, 0x40, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x46, 0x00, 0x04, 0xc2, 0x23, 0x00, 0x48, 0x01, 0x02, 0xc5, 0x23, - 0x00, 0x44, 0xda, 0x51, 0xc8, 0x23, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, - 0x46, 0x00, 0x04, 0xc1, 0x23, 0x00, 0x48, 0x01, 0x02, 0xc4, 0x23, 0x00, - 0x44, 0xda, 0x51, 0xc7, 0x23, 0x40, 0x43, 0x34, 0x2d, 0x7f, 0x00, 0x00, - 0x4b, 0x9e, 0x95, 0x9a, 0xf6, 0x01, 0x4b, 0xe7, 0x9a, 0x5c, 0x22, 0x40, - 0x47, 0xab, 0xc5, 0x03, 0x21, 0x00, 0x4a, 0xb5, 0xa1, 0x09, 0x21, 0x00, - 0x44, 0xdb, 0x02, 0xb0, 0x00, 0x40, 0xa9, 0x06, 0x56, 0x82, 0x32, 0xdb, - 0xf5, 0x41, 0x4a, 0xe3, 0xa0, 0x33, 0xf3, 0x01, 0x04, 0x2f, 0x0e, 0x01, - 0xff, 0x4f, 0x69, 0x66, 0xe8, 0x23, 0x00, 0x54, 0x94, 0x40, 0x96, 0x23, - 0x40, 0x44, 0x87, 0xd0, 0x20, 0x20, 0x80, 0x53, 0x4a, 0x49, 0xa4, 0x38, - 0x21, 0x00, 0xae, 0x3f, 0x04, 0xaa, 0x3f, 0x2f, 0x02, 0xa4, 0x02, 0x06, - 0x4e, 0x7b, 0x64, 0x10, 0x00, 0x40, 0x80, 0x17, 0x03, 0x05, 0x00, 0x01, - 0xff, 0x48, 0xf3, 0x82, 0x4d, 0xfe, 0x00, 0x48, 0x00, 0x83, 0x49, 0xfe, - 0x00, 0x60, 0x98, 0x05, 0x9f, 0x27, 0x40, 0x46, 0xf7, 0x06, 0xa8, 0xf4, - 0x01, 0x50, 0x79, 0x62, 0x43, 0x2e, 0x40, 0x44, 0xa3, 0x03, 0x93, 0x25, - 0x00, 0x49, 0xb0, 0xb6, 0x76, 0xf5, 0x41, 0x43, 0xaf, 0x1d, 0x83, 0xf4, - 0x01, 0x42, 0x60, 0x12, 0x61, 0xf3, 0x41, 0x80, 0x01, 0xff, 0x45, 0x46, - 0x9d, 0xe1, 0xf5, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0x03, 0xa4, - 0x36, 0x2e, 0x00, 0x4b, 0xa8, 0x99, 0x37, 0x2e, 0x40, 0xa1, 0xe8, 0xac, - 0x01, 0xa5, 0xa2, 0xac, 0x01, 0xa8, 0xa2, 0x9b, 0x01, 0xa9, 0xef, 0x8b, - 0x01, 0x03, 0x29, 0x2f, 0xc1, 0x83, 0x01, 0xac, 0xc4, 0x7f, 0xaf, 0xf3, - 0x5b, 0xb2, 0xba, 0x5a, 0xb5, 0xa3, 0x1b, 0xb9, 0x01, 0xff, 0x45, 0xa3, - 0xda, 0x00, 0xf3, 0x01, 0x4a, 0x85, 0xa4, 0x2d, 0x23, 0x00, 0x02, 0x59, - 0x0b, 0xd4, 0x15, 0x07, 0xde, 0xc2, 0x01, 0xff, 0x09, 0xe9, 0x04, 0xec, - 0x0b, 0x46, 0x57, 0x4a, 0x7e, 0xa6, 0x00, 0x07, 0xf1, 0x04, 0xcf, 0x0b, - 0x47, 0x43, 0xca, 0x7f, 0xa6, 0x00, 0xb3, 0x06, 0x4e, 0x40, 0x76, 0x82, - 0x04, 0x40, 0x06, 0x70, 0x07, 0x99, 0x01, 0x16, 0x8a, 0x33, 0x01, 0xff, - 0xe1, 0x51, 0xe0, 0x01, 0xa2, 0x83, 0x01, 0x43, 0x21, 0x2c, 0x63, 0xe0, - 0x01, 0xa4, 0x6a, 0xa5, 0x5c, 0x43, 0x1e, 0xc7, 0x54, 0xe0, 0x81, 0x4f, - 0x42, 0x22, 0x00, 0x61, 0xe0, 0x81, 0x42, 0xe9, 0x59, 0xe0, 0x81, 0x39, - 0x42, 0x1b, 0x02, 0x5a, 0xe0, 0x01, 0xef, 0x5c, 0xe0, 0x01, 0x42, 0x6f, - 0x02, 0x5d, 0xe0, 0x01, 0x43, 0xa4, 0x02, 0x64, 0xe0, 0x01, 0x43, 0xe9, - 0x57, 0x62, 0xe0, 0x01, 0xf5, 0x5f, 0xe0, 0x01, 0x42, 0x32, 0x00, 0x53, - 0xe0, 0x01, 0x44, 0xca, 0xcc, 0x66, 0xe0, 0x01, 0xba, 0x01, 0xff, 0xe5, - 0x58, 0xe0, 0x01, 0x42, 0xb0, 0x01, 0x57, 0xe0, 0x41, 0xe5, 0x56, 0xe0, - 0x41, 0x47, 0x61, 0x8b, 0x65, 0xe0, 0x41, 0x4c, 0x18, 0x84, 0x67, 0xe0, - 0x41, 0xe6, 0x60, 0xe0, 0x01, 0xec, 0x5b, 0xe0, 0x01, 0xf3, 0x5e, 0xe0, - 0x41, 0xe5, 0x55, 0xe0, 0x01, 0xba, 0x01, 0xff, 0xe5, 0x69, 0xe0, 0x01, - 0x42, 0xb0, 0x01, 0x6a, 0xe0, 0x41, 0xe5, 0x52, 0xe0, 0x01, 0x57, 0x8a, - 0x07, 0x68, 0xe0, 0x41, 0x06, 0xf2, 0x04, 0x17, 0x08, 0x35, 0x1d, 0x01, - 0xff, 0x44, 0xd6, 0xe3, 0xd5, 0x04, 0x00, 0x46, 0xf1, 0xd0, 0xa5, 0x04, - 0x00, 0x46, 0xdd, 0xd5, 0xb5, 0x04, 0x40, 0xe1, 0x30, 0x04, 0x80, 0xcf, - 0x09, 0xa2, 0x93, 0x09, 0xa3, 0xde, 0x08, 0xa4, 0x89, 0x08, 0xe5, 0x4d, - 0x04, 0x80, 0x8e, 0x07, 0x44, 0xd6, 0xe4, 0x73, 0x04, 0x00, 0xa7, 0xd4, - 0x06, 0xa8, 0xaa, 0x06, 0xe9, 0x38, 0x04, 0x80, 0xba, 0x05, 0x42, 0x18, - 0x1e, 0x58, 0x04, 0x00, 0xab, 0xc1, 0x04, 0xac, 0xa6, 0x04, 0x04, 0xc1, - 0x16, 0x95, 0x04, 0xae, 0x80, 0x04, 0xef, 0x3e, 0x04, 0x80, 0xe3, 0x03, - 0xb0, 0xbe, 0x03, 0x42, 0x9d, 0x12, 0x1b, 0x05, 0x00, 0xb2, 0x82, 0x03, - 0xb3, 0x93, 0x02, 0xb4, 0xba, 0x01, 0xf5, 0x43, 0x04, 0x80, 0x8b, 0x01, - 0x42, 0x32, 0x00, 0x32, 0x04, 0x00, 0xb7, 0x79, 0xb9, 0x46, 0xba, 0x01, - 0xff, 0xe5, 0x37, 0x04, 0x80, 0x28, 0xa8, 0x01, 0xff, 0xe5, 0x36, 0x04, - 0x80, 0x06, 0x42, 0x15, 0x01, 0x85, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x45, 0xb7, 0x20, 0xc2, 0x04, 0x00, 0xa4, 0x01, 0xff, 0x48, 0x07, - 0x28, 0x97, 0x04, 0x00, 0x48, 0x1c, 0x21, 0xdd, 0x04, 0x40, 0x07, 0x87, - 0x06, 0x06, 0x44, 0x22, 0xe6, 0x41, 0xa6, 0x40, 0x48, 0x07, 0x28, 0x99, - 0x04, 0x00, 0x48, 0x1c, 0x21, 0xdf, 0x04, 0x40, 0xe1, 0x4f, 0x04, 0x80, - 0x24, 0x43, 0x6d, 0x28, 0x4b, 0x04, 0x80, 0x0c, 0xe9, 0x57, 0x04, 0x00, - 0xee, 0x5f, 0xa6, 0x00, 0xf5, 0x4e, 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x48, 0x82, 0x6e, 0x51, 0xa6, 0x00, 0x49, 0x1b, 0x21, 0xf9, 0x04, - 0x40, 0xe5, 0x19, 0x05, 0x00, 0xf4, 0x63, 0x04, 0x40, 0xe5, 0x1d, 0x05, - 0x00, 0x46, 0x59, 0xd2, 0x83, 0x1c, 0x40, 0x06, 0x50, 0x00, 0x11, 0xeb, - 0x79, 0x04, 0x80, 0x06, 0x4b, 0xb9, 0x97, 0x88, 0x1c, 0x40, 0x4a, 0xe1, - 0x95, 0x54, 0x04, 0x40, 0xa4, 0x06, 0x46, 0xd8, 0x69, 0xef, 0x04, 0x40, - 0x48, 0x1c, 0x21, 0xf1, 0x04, 0x00, 0x4b, 0xc1, 0x98, 0xf3, 0x04, 0x40, - 0x04, 0x3e, 0x06, 0x40, 0x43, 0x21, 0x2c, 0x93, 0xa6, 0x00, 0xe5, 0x42, - 0x04, 0x80, 0x24, 0x4e, 0x7e, 0x71, 0x85, 0x1c, 0x00, 0xb3, 0x06, 0x42, - 0x15, 0x01, 0x8d, 0xa6, 0x40, 0xe5, 0x46, 0x04, 0x00, 0x42, 0xb0, 0x01, - 0x5b, 0x04, 0x00, 0x42, 0xc7, 0x02, 0x91, 0xa6, 0x00, 0x42, 0x15, 0x01, - 0x8f, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x06, 0x28, 0xad, - 0x04, 0x00, 0x4b, 0x6c, 0x97, 0x8b, 0xa6, 0x40, 0x49, 0x2f, 0xb0, 0x86, - 0x1c, 0x00, 0x42, 0x77, 0x00, 0x84, 0x1c, 0x00, 0x43, 0xb4, 0x2e, 0x87, - 0x1c, 0x40, 0x44, 0xec, 0x74, 0xd9, 0x04, 0x80, 0x5f, 0x4c, 0x00, 0x87, - 0x8d, 0x04, 0x00, 0xa8, 0x27, 0x04, 0x3d, 0x6a, 0x0d, 0x49, 0x56, 0xb6, - 0xaf, 0x04, 0xc0, 0x00, 0x4c, 0xdb, 0x25, 0xb1, 0x04, 0x40, 0x42, 0x04, - 0x00, 0x63, 0xa6, 0x00, 0xa5, 0x06, 0x44, 0xdb, 0x02, 0x4c, 0x04, 0x40, - 0xec, 0x65, 0xa6, 0x00, 0xed, 0x67, 0xa6, 0x40, 0xe1, 0x48, 0x04, 0x00, - 0x43, 0x29, 0x1e, 0x49, 0x04, 0x00, 0x42, 0x22, 0x00, 0xbb, 0x04, 0x80, - 0x19, 0x04, 0x5d, 0x30, 0x06, 0x42, 0x15, 0x01, 0x97, 0xa6, 0x40, 0xe9, - 0x39, 0x04, 0x80, 0x04, 0xf5, 0x5e, 0x04, 0x40, 0x4a, 0x1d, 0x9e, 0x8b, - 0x04, 0x40, 0x4f, 0x99, 0x63, 0x27, 0x05, 0x40, 0x4f, 0xa8, 0x63, 0xdb, - 0x04, 0x40, 0x08, 0x1a, 0x13, 0x17, 0x42, 0x22, 0x00, 0x17, 0x05, 0x00, - 0x04, 0x23, 0x0a, 0x01, 0xff, 0x46, 0x7d, 0xa6, 0x7b, 0x04, 0x00, 0x45, - 0x48, 0x15, 0x80, 0x1c, 0x40, 0x43, 0xf1, 0xe8, 0x45, 0xa6, 0x00, 0x43, - 0xe9, 0x57, 0x61, 0xa6, 0x00, 0x42, 0xa7, 0x48, 0x55, 0xa6, 0x00, 0x42, - 0x58, 0x07, 0x11, 0x05, 0x40, 0x47, 0xee, 0xbf, 0xcf, 0x04, 0x00, 0xe5, - 0x3f, 0x04, 0x80, 0x06, 0x42, 0xdb, 0x02, 0x71, 0x04, 0x40, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x49, 0x06, 0x28, 0x25, 0x05, 0x00, 0x4b, 0x6c, 0x97, - 0xa7, 0x04, 0x40, 0x4f, 0xa8, 0x63, 0xe7, 0x04, 0x00, 0x44, 0x03, 0x75, - 0x61, 0x04, 0x80, 0x04, 0xf4, 0x7f, 0x04, 0x40, 0x4b, 0x4a, 0x90, 0x7d, - 0x04, 0x40, 0x47, 0x3c, 0x03, 0x82, 0x1c, 0x00, 0x4a, 0x97, 0xa1, 0x4f, - 0xa6, 0x00, 0x42, 0x18, 0x1e, 0x5a, 0x04, 0x40, 0x47, 0xf1, 0x7e, 0x69, - 0xa6, 0x00, 0x48, 0x88, 0x8a, 0x4b, 0xa6, 0x40, 0x42, 0x22, 0x00, 0x15, - 0x05, 0x00, 0x49, 0x90, 0x53, 0x67, 0x04, 0x00, 0x42, 0x18, 0x1e, 0x59, - 0x04, 0x00, 0x4d, 0xa1, 0x7f, 0x81, 0x1c, 0x40, 0xe1, 0x3a, 0x04, 0x80, - 0x4e, 0x4d, 0x7b, 0x7c, 0xcc, 0x04, 0x00, 0x42, 0x18, 0x1e, 0x5c, 0x04, - 0x00, 0xaf, 0x06, 0x42, 0xdb, 0x02, 0x6f, 0x04, 0x40, 0x03, 0x7f, 0xc7, - 0x06, 0x43, 0xad, 0x79, 0x81, 0x04, 0x40, 0xa4, 0x1e, 0x43, 0x17, 0x1e, - 0x09, 0x05, 0x00, 0x43, 0x98, 0x7d, 0x0b, 0x05, 0x00, 0x43, 0xb3, 0x95, - 0x0d, 0x05, 0x00, 0x43, 0x6c, 0xe9, 0x0f, 0x05, 0x00, 0x43, 0xab, 0xe9, - 0x05, 0x05, 0x40, 0xe5, 0x01, 0x05, 0x00, 0x42, 0x18, 0x1e, 0x03, 0x05, - 0x00, 0x43, 0xab, 0xe9, 0x07, 0x05, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, - 0x49, 0x06, 0x28, 0x9b, 0x04, 0x00, 0x44, 0x04, 0x0d, 0xc4, 0x04, 0x00, - 0x46, 0x57, 0x04, 0x9f, 0x04, 0x00, 0x4f, 0xb3, 0x2f, 0x9d, 0x04, 0x40, - 0x06, 0x50, 0x00, 0x54, 0xe5, 0x35, 0x04, 0x80, 0x3e, 0xef, 0x51, 0x04, - 0x80, 0x0d, 0x46, 0xf1, 0xd6, 0x75, 0x04, 0xc0, 0x00, 0x59, 0x6c, 0x20, - 0x77, 0x04, 0x40, 0xb4, 0x01, 0xff, 0xe1, 0x47, 0xa6, 0x00, 0x06, 0x2e, - 0x2f, 0x01, 0xff, 0xe1, 0x57, 0xa6, 0x00, 0x47, 0x57, 0xc5, 0x6d, 0x04, - 0x00, 0x51, 0x88, 0x53, 0x5d, 0xa6, 0x00, 0xe5, 0x65, 0x04, 0x00, 0x4a, - 0x8f, 0x53, 0x69, 0x04, 0x00, 0x43, 0xb4, 0x2e, 0x53, 0xa6, 0x40, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x45, 0xb7, 0x20, 0xd7, 0x04, 0x00, 0x45, 0x79, - 0x20, 0x50, 0x04, 0x40, 0x49, 0x1b, 0x21, 0xe5, 0x04, 0x00, 0x45, 0x79, - 0x20, 0x5d, 0x04, 0x00, 0x46, 0xd8, 0x69, 0xe3, 0x04, 0x40, 0xe1, 0x45, - 0x04, 0x80, 0x06, 0x42, 0x15, 0x01, 0x95, 0xa6, 0x40, 0x06, 0x50, 0x00, - 0x06, 0x47, 0x61, 0x8b, 0x4a, 0x04, 0x40, 0x49, 0x06, 0x28, 0xb3, 0x04, - 0x00, 0x44, 0x04, 0x0d, 0xfd, 0x04, 0x00, 0x46, 0x57, 0x04, 0xff, 0x04, - 0x40, 0x42, 0xb0, 0x01, 0x33, 0x04, 0x80, 0x06, 0x42, 0x18, 0x1e, 0x53, - 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x06, 0x28, 0xf7, 0x04, - 0x00, 0x4b, 0x6c, 0x97, 0x95, 0x04, 0x00, 0x46, 0x57, 0x04, 0x93, 0x04, - 0x80, 0x06, 0x46, 0x83, 0x62, 0x91, 0x04, 0x40, 0x49, 0x24, 0x21, 0xfb, - 0x04, 0x40, 0x4f, 0xa8, 0x63, 0xed, 0x04, 0x00, 0xe6, 0x44, 0x04, 0x00, - 0xec, 0x3b, 0x04, 0x80, 0x49, 0xed, 0x3c, 0x04, 0x80, 0x3e, 0xee, 0x3d, - 0x04, 0x80, 0x16, 0xf2, 0x40, 0x04, 0x80, 0x0b, 0xf3, 0x41, 0x04, 0xc0, - 0x00, 0x4f, 0x99, 0x63, 0xab, 0x04, 0x40, 0x4a, 0x27, 0x9e, 0x8f, 0x04, - 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x06, 0x28, 0xa3, 0x04, 0x00, - 0x44, 0x04, 0x0d, 0xc8, 0x04, 0x00, 0x49, 0x09, 0x52, 0x29, 0x05, 0x00, - 0x4b, 0x6c, 0x97, 0x23, 0x05, 0x00, 0x44, 0xae, 0x15, 0xca, 0x04, 0x40, - 0x4a, 0x1d, 0x9e, 0xce, 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, - 0x06, 0x28, 0x2f, 0x05, 0x00, 0x44, 0x04, 0x0d, 0x13, 0x05, 0x00, 0x4b, - 0x6c, 0x97, 0x21, 0x05, 0x00, 0x44, 0xae, 0x15, 0xc6, 0x04, 0x40, 0x43, - 0x21, 0x2c, 0x2d, 0x05, 0x00, 0xe5, 0x34, 0x04, 0x00, 0x42, 0x18, 0x1e, - 0x52, 0x04, 0x80, 0x3b, 0x06, 0x3c, 0x01, 0x2d, 0x42, 0x15, 0x01, 0x81, - 0xa6, 0x00, 0xba, 0x01, 0xff, 0xe5, 0x55, 0x04, 0x80, 0x19, 0x42, 0xb0, - 0x01, 0x5f, 0x04, 0x00, 0x42, 0x15, 0x01, 0x83, 0xa6, 0x00, 0xba, 0x01, - 0xff, 0xe5, 0x89, 0xa6, 0x00, 0x42, 0xb0, 0x01, 0x2b, 0x05, 0x40, 0x42, - 0x13, 0x01, 0x43, 0xa6, 0x40, 0x4b, 0x82, 0x97, 0x6d, 0xa6, 0x00, 0xef, - 0x99, 0xa6, 0x40, 0x42, 0xd0, 0x0d, 0x49, 0xa6, 0x40, 0x43, 0x21, 0x2c, - 0x87, 0xa6, 0x00, 0x42, 0xb0, 0x01, 0x47, 0x04, 0x80, 0x0c, 0x50, 0x89, - 0x53, 0x59, 0xa6, 0x00, 0x48, 0x95, 0xc0, 0x9b, 0xa6, 0x40, 0x06, 0x50, - 0x00, 0x01, 0xff, 0xa4, 0x06, 0x4f, 0xb3, 0x2f, 0xb9, 0x04, 0x40, 0x48, - 0x07, 0x28, 0xb7, 0x04, 0x00, 0x48, 0x1c, 0x21, 0xf5, 0x04, 0x40, 0xa1, - 0x24, 0xe5, 0x31, 0x04, 0x00, 0xa9, 0x12, 0x4a, 0x3f, 0xa4, 0x5b, 0xa6, - 0x00, 0x4a, 0xaf, 0xa7, 0x4d, 0xa6, 0x00, 0x57, 0x8a, 0x07, 0x56, 0x04, - 0x40, 0x45, 0x59, 0xc5, 0x6b, 0x04, 0x00, 0x49, 0x84, 0x97, 0x6b, 0xa6, - 0x40, 0x46, 0xe8, 0xc4, 0xe9, 0x04, 0x80, 0x06, 0x48, 0xd5, 0xc0, 0xa1, - 0x04, 0x40, 0x4f, 0xa8, 0x63, 0xeb, 0x04, 0x40, 0x06, 0x50, 0x00, 0x23, - 0x09, 0xb0, 0xad, 0x06, 0x47, 0xa6, 0xc8, 0x1f, 0x05, 0x40, 0x43, 0x21, - 0x2c, 0xbd, 0x04, 0x80, 0x0c, 0x43, 0xf1, 0xe8, 0xe1, 0x04, 0x00, 0x42, - 0x22, 0x00, 0xa9, 0x04, 0x40, 0x4f, 0x99, 0x63, 0xbf, 0x04, 0x40, 0x45, - 0xb7, 0x20, 0xd1, 0x04, 0x00, 0x49, 0x1b, 0x21, 0xd3, 0x04, 0x40, 0x4d, - 0xeb, 0x7e, 0x6e, 0xa6, 0x00, 0x48, 0xed, 0xbf, 0xc0, 0x04, 0x00, 0x50, - 0xe9, 0x60, 0x2b, 0x1d, 0x40, 0x06, 0xf2, 0x04, 0x17, 0x08, 0x35, 0x1d, - 0x01, 0xff, 0x44, 0xd6, 0xe3, 0xd4, 0x04, 0x00, 0x46, 0xf1, 0xd0, 0xa4, - 0x04, 0x00, 0x46, 0xdd, 0xd5, 0xb4, 0x04, 0x40, 0xe1, 0x10, 0x04, 0x80, - 0x8a, 0x09, 0xa2, 0xce, 0x08, 0xa3, 0x99, 0x08, 0xa4, 0xc4, 0x07, 0xe5, - 0x2d, 0x04, 0x80, 0xc9, 0x06, 0x44, 0xd6, 0xe4, 0x72, 0x04, 0x00, 0xa7, - 0x8f, 0x06, 0xa8, 0xe5, 0x05, 0xe9, 0x18, 0x04, 0x80, 0xf5, 0x04, 0x42, - 0x18, 0x1e, 0x08, 0x04, 0x00, 0xab, 0xfc, 0x03, 0xac, 0xe7, 0x03, 0x04, - 0xc1, 0x16, 0xd6, 0x03, 0xae, 0xc7, 0x03, 0xef, 0x1e, 0x04, 0x80, 0xaa, - 0x03, 0xb0, 0x8b, 0x03, 0x42, 0x9d, 0x12, 0x1a, 0x05, 0x00, 0xb2, 0xda, - 0x02, 0xb3, 0xeb, 0x01, 0xb4, 0xae, 0x01, 0xf5, 0x23, 0x04, 0x80, 0x85, - 0x01, 0x42, 0x32, 0x00, 0x12, 0x04, 0x00, 0x42, 0x15, 0x01, 0x1c, 0x05, - 0x00, 0xb9, 0x46, 0xba, 0x01, 0xff, 0xe5, 0x17, 0x04, 0x80, 0x28, 0xa8, - 0x01, 0xff, 0xe5, 0x16, 0x04, 0x80, 0x06, 0x42, 0x15, 0x01, 0x84, 0xa6, - 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xb7, 0x20, 0xc1, 0x04, 0x00, - 0xa4, 0x01, 0xff, 0x48, 0x07, 0x28, 0x96, 0x04, 0x00, 0x48, 0x1c, 0x21, - 0xdc, 0x04, 0x40, 0x07, 0x87, 0x06, 0x06, 0x44, 0x22, 0xe6, 0x40, 0xa6, - 0x40, 0x48, 0x07, 0x28, 0x98, 0x04, 0x00, 0x48, 0x1c, 0x21, 0xde, 0x04, - 0x40, 0xe1, 0x2f, 0x04, 0x80, 0x24, 0x43, 0x6d, 0x28, 0x2b, 0x04, 0x80, - 0x0c, 0xe9, 0x07, 0x04, 0x00, 0xee, 0x5e, 0xa6, 0x00, 0xf5, 0x2e, 0x04, - 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x48, 0x82, 0x6e, 0x50, 0xa6, 0x00, - 0x49, 0x1b, 0x21, 0xf8, 0x04, 0x40, 0xe5, 0x18, 0x05, 0x00, 0xf4, 0x62, - 0x04, 0x40, 0x06, 0x50, 0x00, 0x0b, 0xeb, 0x78, 0x04, 0xc0, 0x00, 0x4a, - 0xe1, 0x95, 0x04, 0x04, 0x40, 0xa4, 0x06, 0x46, 0xd8, 0x69, 0xee, 0x04, - 0x40, 0x48, 0x1c, 0x21, 0xf0, 0x04, 0x00, 0x4b, 0xc1, 0x98, 0xf2, 0x04, - 0x40, 0x43, 0x21, 0x2c, 0x92, 0xa6, 0x00, 0xe5, 0x22, 0x04, 0x80, 0x1e, - 0xb3, 0x06, 0x42, 0x15, 0x01, 0x8c, 0xa6, 0x40, 0xe5, 0x26, 0x04, 0x00, - 0x42, 0xb0, 0x01, 0x0b, 0x04, 0x00, 0x42, 0xc7, 0x02, 0x90, 0xa6, 0x00, - 0x42, 0x15, 0x01, 0x8e, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, - 0x06, 0x28, 0xac, 0x04, 0x00, 0x4b, 0x6c, 0x97, 0x8a, 0xa6, 0x40, 0x44, - 0xec, 0x74, 0xd8, 0x04, 0x80, 0x5f, 0x4c, 0x00, 0x87, 0x8c, 0x04, 0x00, - 0xa8, 0x27, 0x04, 0x3d, 0x6a, 0x0d, 0x49, 0x56, 0xb6, 0xae, 0x04, 0xc0, - 0x00, 0x4c, 0xdb, 0x25, 0xb0, 0x04, 0x40, 0x42, 0x04, 0x00, 0x62, 0xa6, - 0x00, 0xa5, 0x06, 0x44, 0xdb, 0x02, 0x2c, 0x04, 0x40, 0xec, 0x64, 0xa6, - 0x00, 0xed, 0x66, 0xa6, 0x40, 0xe1, 0x28, 0x04, 0x00, 0x43, 0x29, 0x1e, - 0x29, 0x04, 0x00, 0x42, 0x22, 0x00, 0xba, 0x04, 0x80, 0x19, 0x04, 0x5d, - 0x30, 0x06, 0x42, 0x15, 0x01, 0x96, 0xa6, 0x40, 0xe9, 0x19, 0x04, 0x80, - 0x04, 0xf5, 0x0e, 0x04, 0x40, 0x4a, 0x1d, 0x9e, 0x8a, 0x04, 0x40, 0x4f, - 0x99, 0x63, 0x26, 0x05, 0x40, 0x4f, 0xa8, 0x63, 0xda, 0x04, 0x40, 0x08, - 0x1a, 0x13, 0x0c, 0x42, 0x22, 0x00, 0x16, 0x05, 0x00, 0x4a, 0x79, 0xa6, - 0x7a, 0x04, 0x40, 0x43, 0xf1, 0xe8, 0x44, 0xa6, 0x00, 0x43, 0xe9, 0x57, - 0x60, 0xa6, 0x00, 0x42, 0xa7, 0x48, 0x54, 0xa6, 0x00, 0x42, 0x58, 0x07, - 0x10, 0x05, 0x40, 0xe5, 0x1f, 0x04, 0x80, 0x06, 0x42, 0xdb, 0x02, 0x70, - 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x06, 0x28, 0x24, 0x05, - 0x00, 0x4b, 0x6c, 0x97, 0xa6, 0x04, 0x40, 0x4f, 0xa8, 0x63, 0xe6, 0x04, - 0x00, 0x44, 0x03, 0x75, 0x60, 0x04, 0x80, 0x04, 0xf4, 0x7e, 0x04, 0x40, - 0x4b, 0x4a, 0x90, 0x7c, 0x04, 0x40, 0x4a, 0x97, 0xa1, 0x4e, 0xa6, 0x00, - 0x42, 0x18, 0x1e, 0x0a, 0x04, 0x40, 0x47, 0xf1, 0x7e, 0x68, 0xa6, 0x00, - 0x48, 0x88, 0x8a, 0x4a, 0xa6, 0x40, 0x42, 0x22, 0x00, 0x14, 0x05, 0x00, - 0x49, 0x90, 0x53, 0x66, 0x04, 0x00, 0x42, 0x18, 0x1e, 0x09, 0x04, 0x40, - 0xe1, 0x1a, 0x04, 0x80, 0x4e, 0x4d, 0x7b, 0x7c, 0xcb, 0x04, 0x00, 0x42, - 0x18, 0x1e, 0x0c, 0x04, 0x00, 0xaf, 0x06, 0x42, 0xdb, 0x02, 0x6e, 0x04, - 0x40, 0x03, 0x7f, 0xc7, 0x06, 0x43, 0xad, 0x79, 0x80, 0x04, 0x40, 0xa4, - 0x1e, 0x43, 0x17, 0x1e, 0x08, 0x05, 0x00, 0x43, 0x98, 0x7d, 0x0a, 0x05, - 0x00, 0x43, 0xb3, 0x95, 0x0c, 0x05, 0x00, 0x43, 0x6c, 0xe9, 0x0e, 0x05, - 0x00, 0x43, 0xab, 0xe9, 0x04, 0x05, 0x40, 0xe5, 0x00, 0x05, 0x00, 0x42, - 0x18, 0x1e, 0x02, 0x05, 0x00, 0x43, 0xab, 0xe9, 0x06, 0x05, 0x40, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x49, 0x06, 0x28, 0x9a, 0x04, 0x00, 0x44, 0x04, - 0x0d, 0xc3, 0x04, 0x00, 0x46, 0x57, 0x04, 0x9e, 0x04, 0x00, 0x4f, 0xb3, - 0x2f, 0x9c, 0x04, 0x40, 0x06, 0x50, 0x00, 0x54, 0xe5, 0x15, 0x04, 0x80, - 0x3e, 0xef, 0x01, 0x04, 0x80, 0x0d, 0x46, 0xf1, 0xd6, 0x74, 0x04, 0xc0, - 0x00, 0x59, 0x6c, 0x20, 0x76, 0x04, 0x40, 0xb4, 0x01, 0xff, 0xe1, 0x46, - 0xa6, 0x00, 0x06, 0x2e, 0x2f, 0x01, 0xff, 0xe1, 0x56, 0xa6, 0x00, 0x47, - 0x57, 0xc5, 0x6c, 0x04, 0x00, 0x51, 0x88, 0x53, 0x5c, 0xa6, 0x00, 0xe5, - 0x64, 0x04, 0x00, 0x4a, 0x8f, 0x53, 0x68, 0x04, 0x00, 0x43, 0xb4, 0x2e, - 0x52, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xb7, 0x20, 0xd6, - 0x04, 0x00, 0x45, 0x79, 0x20, 0x00, 0x04, 0x40, 0x49, 0x1b, 0x21, 0xe4, - 0x04, 0x00, 0x45, 0x79, 0x20, 0x0d, 0x04, 0x00, 0x46, 0xd8, 0x69, 0xe2, - 0x04, 0x40, 0xe1, 0x25, 0x04, 0x80, 0x06, 0x42, 0x15, 0x01, 0x94, 0xa6, - 0x40, 0x06, 0x50, 0x00, 0x06, 0x47, 0x61, 0x8b, 0x2a, 0x04, 0x40, 0x49, - 0x06, 0x28, 0xb2, 0x04, 0x00, 0x44, 0x04, 0x0d, 0xfc, 0x04, 0x00, 0x46, - 0x57, 0x04, 0xfe, 0x04, 0x40, 0x42, 0xb0, 0x01, 0x13, 0x04, 0x80, 0x06, - 0x42, 0x18, 0x1e, 0x03, 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, - 0x06, 0x28, 0xf6, 0x04, 0x00, 0x4b, 0x6c, 0x97, 0x94, 0x04, 0x00, 0x46, - 0x57, 0x04, 0x92, 0x04, 0x80, 0x06, 0x46, 0x83, 0x62, 0x90, 0x04, 0x40, - 0x49, 0x24, 0x21, 0xfa, 0x04, 0x40, 0x4f, 0xa8, 0x63, 0xec, 0x04, 0x00, - 0xe6, 0x24, 0x04, 0x00, 0xec, 0x1b, 0x04, 0x80, 0x49, 0xed, 0x1c, 0x04, - 0x80, 0x3e, 0xee, 0x1d, 0x04, 0x80, 0x16, 0xf2, 0x20, 0x04, 0x80, 0x0b, - 0xf3, 0x21, 0x04, 0xc0, 0x00, 0x4f, 0x99, 0x63, 0xaa, 0x04, 0x40, 0x4a, - 0x27, 0x9e, 0x8e, 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x06, - 0x28, 0xa2, 0x04, 0x00, 0x44, 0x04, 0x0d, 0xc7, 0x04, 0x00, 0x49, 0x09, - 0x52, 0x28, 0x05, 0x00, 0x4b, 0x6c, 0x97, 0x22, 0x05, 0x00, 0x44, 0xae, - 0x15, 0xc9, 0x04, 0x40, 0x4a, 0x1d, 0x9e, 0xcd, 0x04, 0x40, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x49, 0x06, 0x28, 0x2e, 0x05, 0x00, 0x44, 0x04, 0x0d, - 0x12, 0x05, 0x00, 0x4b, 0x6c, 0x97, 0x20, 0x05, 0x00, 0x44, 0xae, 0x15, - 0xc5, 0x04, 0x40, 0x43, 0x21, 0x2c, 0x2c, 0x05, 0x00, 0xe5, 0x14, 0x04, - 0x00, 0x42, 0x18, 0x1e, 0x02, 0x04, 0x80, 0x3b, 0x06, 0x3c, 0x01, 0x2d, - 0x42, 0x15, 0x01, 0x80, 0xa6, 0x00, 0xba, 0x01, 0xff, 0xe5, 0x05, 0x04, - 0x80, 0x19, 0x42, 0xb0, 0x01, 0x0f, 0x04, 0x00, 0x42, 0x15, 0x01, 0x82, - 0xa6, 0x00, 0xba, 0x01, 0xff, 0xe5, 0x88, 0xa6, 0x00, 0x42, 0xb0, 0x01, - 0x2a, 0x05, 0x40, 0x42, 0x13, 0x01, 0x42, 0xa6, 0x40, 0x4b, 0x82, 0x97, - 0x6c, 0xa6, 0x00, 0xef, 0x98, 0xa6, 0x40, 0x42, 0xd0, 0x0d, 0x48, 0xa6, - 0x40, 0x43, 0x21, 0x2c, 0x86, 0xa6, 0x00, 0x42, 0xb0, 0x01, 0x27, 0x04, - 0x80, 0x0c, 0x50, 0x89, 0x53, 0x58, 0xa6, 0x00, 0x48, 0x95, 0xc0, 0x9a, + 0x14, 0x95, 0x40, 0x01, 0xff, 0x09, 0x91, 0xac, 0x74, 0x4d, 0x27, 0x7c, + 0xf4, 0x2f, 0x00, 0x55, 0x98, 0x37, 0xfe, 0x2f, 0x00, 0x08, 0x84, 0x02, + 0x58, 0x48, 0x93, 0x0c, 0xfb, 0x2f, 0x00, 0x48, 0x85, 0x5a, 0xff, 0x2f, + 0x00, 0x02, 0x6f, 0x00, 0x01, 0xff, 0x49, 0xf0, 0xad, 0xef, 0x31, 0x00, + 0x0c, 0x37, 0x8d, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xf5, 0x2f, 0x00, 0x45, + 0x25, 0x06, 0xf6, 0x2f, 0x00, 0xac, 0x17, 0x45, 0xc8, 0x00, 0xfc, 0x2f, + 0x00, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xf8, 0x2f, 0x00, + 0x45, 0xc8, 0x00, 0xf9, 0x2f, 0x40, 0x43, 0xc4, 0x00, 0xf7, 0x2f, 0x00, + 0x05, 0x14, 0x01, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xfa, 0x2f, 0x00, 0x45, + 0xc8, 0x00, 0xfd, 0x2f, 0x40, 0x50, 0xee, 0x5e, 0xf2, 0x2f, 0x00, 0x45, + 0xc8, 0x00, 0xf0, 0x2f, 0x40, 0x45, 0x25, 0x06, 0xf1, 0x2f, 0x00, 0x50, + 0xde, 0x5e, 0xf3, 0x2f, 0x40, 0x4b, 0xcf, 0x96, 0x06, 0x30, 0x00, 0x44, + 0x19, 0x04, 0x01, 0x30, 0x40, 0x4b, 0xbd, 0x91, 0x98, 0x31, 0x00, 0x4a, + 0x14, 0xa1, 0x9e, 0x31, 0x00, 0xa6, 0x49, 0x4b, 0xbf, 0x94, 0x9d, 0x31, + 0x00, 0x4c, 0xbf, 0x89, 0x90, 0x31, 0x00, 0xad, 0x2f, 0x48, 0xde, 0x29, + 0x92, 0x31, 0x00, 0x4c, 0xb3, 0x8c, 0x91, 0x31, 0x00, 0x4b, 0x55, 0x9a, + 0x9a, 0x31, 0x00, 0xb4, 0x01, 0xff, 0xa8, 0x0c, 0x47, 0xd3, 0xc9, 0x96, + 0x31, 0x00, 0x47, 0x6f, 0xcd, 0x93, 0x31, 0x40, 0x48, 0x69, 0xbd, 0x9b, + 0x31, 0x00, 0x48, 0x89, 0xc0, 0x94, 0x31, 0x40, 0x47, 0xbd, 0xc4, 0x9f, + 0x31, 0x00, 0x4a, 0xfe, 0xa2, 0x97, 0x31, 0x40, 0x49, 0x74, 0xb1, 0x99, + 0x31, 0x00, 0x03, 0xfb, 0x05, 0x01, 0xff, 0x45, 0xb8, 0x00, 0x95, 0x31, + 0x00, 0x47, 0x1b, 0x35, 0x9c, 0x31, 0x40, 0x04, 0x37, 0x00, 0x06, 0x4d, + 0xcc, 0x7b, 0xaa, 0xfa, 0x41, 0x42, 0x1e, 0x00, 0x61, 0x22, 0x80, 0x06, + 0x4e, 0x4b, 0x37, 0x67, 0x2a, 0x40, 0x55, 0x50, 0x34, 0xe5, 0x29, 0x40, + 0xa3, 0x0c, 0x55, 0x83, 0x37, 0xd2, 0xf3, 0x01, 0x45, 0x41, 0xe0, 0xf8, + 0x26, 0x40, 0x44, 0xaf, 0x5b, 0x68, 0xf3, 0x01, 0x43, 0x0c, 0x3c, 0xca, + 0xf9, 0x41, 0xa1, 0x93, 0x25, 0xa5, 0xa1, 0x07, 0xa9, 0x8e, 0x03, 0xaf, + 0x5c, 0x4b, 0x4a, 0x9a, 0xb4, 0x20, 0x00, 0xb5, 0x3e, 0xb9, 0x01, 0xff, + 0x46, 0x4b, 0xcf, 0xbb, 0xfa, 0x01, 0x44, 0x1a, 0xe5, 0xda, 0x2b, 0x00, + 0xb0, 0x06, 0x4f, 0xb4, 0x6c, 0x8e, 0x23, 0x40, 0x43, 0xb0, 0x01, 0x10, + 0x20, 0x80, 0x06, 0x49, 0x99, 0xb3, 0x12, 0x2e, 0x40, 0x80, 0x0c, 0x46, + 0x51, 0x88, 0x2d, 0x00, 0x00, 0x4b, 0x70, 0x91, 0x27, 0x20, 0x40, 0x46, + 0x64, 0x1f, 0x43, 0x20, 0x00, 0x4e, 0xbe, 0x63, 0x1a, 0x2e, 0x40, 0x4a, + 0x40, 0xa2, 0x17, 0xf9, 0x01, 0x53, 0xfe, 0x45, 0xaf, 0xf4, 0x01, 0x49, + 0xa2, 0x8b, 0x2f, 0xf6, 0x01, 0xf4, 0xd6, 0xf6, 0x41, 0x43, 0x4d, 0x27, + 0x2a, 0xf5, 0x01, 0xac, 0x96, 0x02, 0x48, 0x45, 0x73, 0x3b, 0x22, 0x00, + 0x03, 0x9e, 0x25, 0xff, 0x01, 0x42, 0x5a, 0x04, 0x9d, 0xfa, 0x01, 0xb2, + 0x53, 0x46, 0x87, 0xd5, 0xe5, 0xf3, 0x01, 0xb4, 0x2b, 0xb5, 0x01, 0xff, + 0x46, 0xdd, 0xcc, 0x1b, 0x23, 0x80, 0x1b, 0x42, 0xc7, 0x02, 0x02, 0x23, + 0xc0, 0x00, 0x80, 0x01, 0xff, 0x48, 0x73, 0x39, 0xe0, 0xf3, 0x81, 0x06, + 0x4b, 0xc8, 0x9c, 0xe1, 0xf3, 0x41, 0xf3, 0xd8, 0xf3, 0x41, 0x52, 0x54, + 0x4a, 0xf3, 0x23, 0x40, 0x80, 0x06, 0x42, 0xd8, 0x00, 0xe8, 0xf3, 0x41, + 0x48, 0x71, 0xba, 0x15, 0x26, 0x00, 0x43, 0xaa, 0xd0, 0x2d, 0xf3, 0x01, + 0x46, 0xaf, 0xd4, 0x36, 0xf3, 0x01, 0x47, 0xd9, 0xcb, 0x68, 0x26, 0x40, + 0x08, 0x0e, 0x00, 0x16, 0x42, 0xc7, 0x02, 0x0e, 0xf4, 0xc1, 0x00, 0x80, + 0x01, 0xff, 0x44, 0xed, 0x06, 0x34, 0xf4, 0x01, 0x46, 0xeb, 0xd4, 0xc7, + 0xf3, 0x41, 0xa2, 0x71, 0x48, 0xcf, 0x26, 0x26, 0x20, 0x00, 0x4e, 0xe3, + 0x72, 0xaf, 0x23, 0x00, 0x55, 0x6a, 0x38, 0xa9, 0x26, 0x00, 0x11, 0x00, + 0x57, 0x3d, 0x0a, 0x12, 0xa8, 0x29, 0xb4, 0x01, 0xff, 0x02, 0x5c, 0x00, + 0x06, 0x4c, 0x6b, 0x8c, 0xa5, 0xf6, 0x41, 0x44, 0xb2, 0x40, 0x7e, 0x2b, + 0x00, 0x47, 0xbb, 0x37, 0x09, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x43, + 0xf6, 0x10, 0x88, 0x00, 0x00, 0x52, 0x02, 0x51, 0x89, 0x00, 0x40, 0xd1, + 0xba, 0x23, 0x00, 0xd3, 0xbb, 0x23, 0x00, 0xd7, 0xbc, 0x23, 0x00, 0xd9, + 0xbd, 0x23, 0x40, 0x44, 0x62, 0xe2, 0x81, 0xfb, 0x01, 0xd2, 0x76, 0xfb, + 0x01, 0xd3, 0x77, 0xfb, 0x01, 0xd4, 0x78, 0xfb, 0x01, 0xd5, 0x79, 0xfb, + 0x01, 0xd6, 0x7a, 0xfb, 0x01, 0xd7, 0x7b, 0xfb, 0x41, 0x42, 0x17, 0x00, + 0x15, 0x20, 0x00, 0x05, 0x1d, 0x07, 0x01, 0xff, 0x47, 0x79, 0xc7, 0x23, + 0x2b, 0x00, 0x47, 0x7f, 0xc9, 0xc3, 0x2b, 0x40, 0x44, 0xb9, 0x4a, 0x6f, + 0xf3, 0x01, 0x43, 0x96, 0xad, 0x1d, 0xf4, 0x41, 0xe5, 0x73, 0xf5, 0x01, + 0x59, 0x15, 0x22, 0x68, 0xf6, 0xc1, 0x00, 0x50, 0xb6, 0x0f, 0x69, 0xf6, + 0x41, 0x46, 0xff, 0xcf, 0x3a, 0xf3, 0x01, 0x02, 0x40, 0x00, 0xe1, 0x03, + 0x49, 0xce, 0xb1, 0x7e, 0xf9, 0x01, 0x4a, 0xb0, 0xa5, 0xd5, 0xf6, 0x01, + 0x4a, 0x04, 0xa7, 0x9b, 0xf9, 0x01, 0x07, 0xa2, 0x10, 0x06, 0x4b, 0xce, + 0x9a, 0xec, 0x26, 0x40, 0x4c, 0x83, 0x86, 0x9f, 0x30, 0x00, 0x4e, 0xf0, + 0x1d, 0x9d, 0x30, 0x00, 0x07, 0xf1, 0x04, 0x06, 0x55, 0x77, 0x3a, 0x9e, + 0x30, 0x40, 0xe1, 0x42, 0x30, 0x80, 0x98, 0x03, 0xa2, 0x81, 0x03, 0xa4, + 0xea, 0x02, 0xe5, 0x48, 0x30, 0x00, 0xa7, 0xcf, 0x02, 0xa8, 0xb8, 0x02, + 0xe9, 0x44, 0x30, 0x00, 0xab, 0x9d, 0x02, 0xad, 0x86, 0x02, 0xee, 0x93, + 0x30, 0x80, 0xec, 0x01, 0xef, 0x4a, 0x30, 0x00, 0xb0, 0xd1, 0x01, 0xb2, + 0xba, 0x01, 0xb3, 0x57, 0xb4, 0x41, 0xf5, 0x46, 0x30, 0x00, 0x42, 0x4f, + 0x5c, 0x94, 0x30, 0x00, 0xb7, 0x25, 0xb9, 0x17, 0xba, 0x01, 0xff, 0xe1, + 0x56, 0x30, 0x00, 0xe5, 0x5c, 0x30, 0x00, 0xe9, 0x58, 0x30, 0x00, 0xef, + 0x5e, 0x30, 0x00, 0xf5, 0x5a, 0x30, 0x40, 0xe1, 0x84, 0x30, 0x00, 0xef, + 0x88, 0x30, 0x00, 0xf5, 0x86, 0x30, 0x40, 0xe1, 0x8f, 0x30, 0x00, 0xe5, + 0x91, 0x30, 0x00, 0xe9, 0x90, 0x30, 0x00, 0xef, 0x92, 0x30, 0x40, 0xe1, + 0x5f, 0x30, 0x00, 0xe5, 0x66, 0x30, 0x00, 0xe9, 0x61, 0x30, 0x00, 0xef, + 0x68, 0x30, 0x00, 0xf5, 0x64, 0x30, 0x40, 0xe1, 0x55, 0x30, 0x00, 0xe5, + 0x5b, 0x30, 0x00, 0xe9, 0x57, 0x30, 0x00, 0x05, 0x3d, 0x06, 0x08, 0xef, + 0x5d, 0x30, 0x00, 0xf5, 0x59, 0x30, 0x40, 0xe1, 0x41, 0x30, 0x00, 0xe5, + 0x47, 0x30, 0x00, 0xe9, 0x43, 0x30, 0x00, 0xab, 0x2f, 0xef, 0x49, 0x30, + 0x00, 0x42, 0x5c, 0x01, 0x63, 0x30, 0x00, 0xf5, 0x45, 0x30, 0x00, 0xb7, + 0x0f, 0xb9, 0x01, 0xff, 0xe1, 0x83, 0x30, 0x00, 0xef, 0x87, 0x30, 0x00, + 0xf5, 0x85, 0x30, 0x40, 0xe1, 0x8e, 0x30, 0x00, 0xe5, 0x51, 0xb1, 0x01, + 0xe9, 0x50, 0xb1, 0x01, 0xef, 0x52, 0xb1, 0x41, 0xe1, 0x95, 0x30, 0x00, + 0xe5, 0x96, 0x30, 0x00, 0xef, 0x32, 0xb1, 0x41, 0xe1, 0x89, 0x30, 0x00, + 0xe5, 0x8c, 0x30, 0x00, 0xe9, 0x8a, 0x30, 0x00, 0xef, 0x8d, 0x30, 0x00, + 0xf5, 0x8b, 0x30, 0x40, 0xe1, 0x71, 0x30, 0x00, 0xe5, 0x7a, 0x30, 0x00, + 0xe9, 0x74, 0x30, 0x00, 0xef, 0x7d, 0x30, 0x00, 0xf5, 0x77, 0x30, 0x40, + 0xe1, 0x6a, 0x30, 0x00, 0xe5, 0x6d, 0x30, 0x00, 0xe9, 0x6b, 0x30, 0x00, + 0xef, 0x6e, 0x30, 0x00, 0xf5, 0x6c, 0x30, 0x40, 0xe1, 0x7e, 0x30, 0x00, + 0xe5, 0x81, 0x30, 0x00, 0xe9, 0x7f, 0x30, 0x00, 0xef, 0x82, 0x30, 0x00, + 0xf5, 0x80, 0x30, 0x40, 0xe1, 0x4b, 0x30, 0x00, 0xe5, 0x51, 0x30, 0x00, + 0xe9, 0x4d, 0x30, 0x00, 0xef, 0x53, 0x30, 0x00, 0xf5, 0x4f, 0x30, 0x40, + 0xe1, 0x6f, 0x30, 0x00, 0xe5, 0x78, 0x30, 0x00, 0xe9, 0x72, 0x30, 0x00, + 0xef, 0x7b, 0x30, 0x00, 0xf5, 0x75, 0x30, 0x40, 0xe1, 0x4c, 0x30, 0x00, + 0xe5, 0x52, 0x30, 0x00, 0xe9, 0x4e, 0x30, 0x00, 0xef, 0x54, 0x30, 0x00, + 0xf5, 0x50, 0x30, 0x40, 0xe1, 0x60, 0x30, 0x00, 0xe5, 0x67, 0x30, 0x00, + 0xe9, 0x62, 0x30, 0x00, 0xef, 0x69, 0x30, 0x00, 0xf5, 0x65, 0x30, 0x40, + 0xe1, 0x70, 0x30, 0x00, 0xe5, 0x79, 0x30, 0x00, 0xe9, 0x73, 0x30, 0x00, + 0xef, 0x7c, 0x30, 0x00, 0xf5, 0x76, 0x30, 0x40, 0x07, 0xab, 0x79, 0x01, + 0xff, 0x42, 0x75, 0x06, 0x1f, 0xb1, 0x01, 0x42, 0x4d, 0x00, 0x01, 0xb0, + 0x41, 0x80, 0x16, 0x8d, 0x01, 0xff, 0x4b, 0xca, 0x94, 0x60, 0xf4, 0x01, + 0x4b, 0x97, 0x9a, 0x84, 0xf6, 0xc1, 0x00, 0x51, 0xd2, 0x51, 0x85, 0xf6, + 0x41, 0x51, 0x37, 0x53, 0x06, 0xf5, 0x01, 0x4c, 0xff, 0x8e, 0xa1, 0x26, + 0x40, 0xa1, 0x83, 0x17, 0x05, 0x3d, 0xda, 0x8f, 0x0f, 0x46, 0xb3, 0xd0, + 0x94, 0xf9, 0x01, 0xac, 0xeb, 0x0e, 0x10, 0x1e, 0x5f, 0xf0, 0x03, 0xb2, + 0xe3, 0x03, 0x0b, 0xde, 0x9c, 0x01, 0xff, 0xa1, 0xc9, 0x03, 0xa2, 0xb4, + 0x03, 0x02, 0x18, 0x04, 0x9a, 0x03, 0xa4, 0xe9, 0x02, 0x4a, 0x82, 0xa1, + 0xcf, 0x4d, 0x00, 0xa6, 0xd4, 0x02, 0xa7, 0xa1, 0x02, 0x50, 0x5e, 0x5d, + 0xc7, 0x4d, 0x00, 0x02, 0x9e, 0x01, 0xfb, 0x01, 0x4a, 0x8e, 0xa4, 0xfb, + 0x4d, 0x00, 0x02, 0x08, 0x07, 0xe4, 0x01, 0xaf, 0xca, 0x01, 0xb0, 0xb5, + 0x01, 0x02, 0x88, 0x00, 0x9c, 0x01, 0xb3, 0x7e, 0xb4, 0x14, 0xb7, 0x06, + 0x4e, 0x07, 0x78, 0xc3, 0x4d, 0x40, 0x46, 0x76, 0x81, 0xc4, 0x4d, 0x00, + 0x52, 0x8c, 0x4e, 0xd1, 0x4d, 0x40, 0x03, 0x84, 0x0a, 0x06, 0x47, 0x73, + 0x10, 0xc9, 0x4d, 0x40, 0xa1, 0x47, 0xa3, 0x33, 0x46, 0x73, 0xd1, 0xe4, + 0x4d, 0x00, 0x4b, 0x51, 0x94, 0xf8, 0x4d, 0x00, 0x4b, 0xdd, 0x95, 0xf9, + 0x4d, 0x00, 0x56, 0x0c, 0x31, 0xf3, 0x4d, 0x00, 0x4f, 0x6c, 0x69, 0xf5, + 0x4d, 0x00, 0x4f, 0x97, 0x6b, 0xc1, 0x4d, 0x00, 0xb7, 0x01, 0xff, 0x47, + 0xcb, 0xc4, 0xf7, 0x4d, 0x00, 0x43, 0x41, 0x08, 0xef, 0x4d, 0x40, 0x47, + 0x34, 0xc5, 0xf1, 0x4d, 0x00, 0x4c, 0xb3, 0x89, 0xdd, 0x4d, 0x00, 0x4e, + 0xcd, 0x74, 0xc0, 0x4d, 0x40, 0x4c, 0x9f, 0x85, 0xdc, 0x4d, 0x00, 0xb2, + 0x01, 0xff, 0x42, 0x10, 0x53, 0xc6, 0x4d, 0x00, 0x4e, 0x17, 0x74, 0xf2, + 0x4d, 0x40, 0x05, 0x3d, 0x06, 0x0c, 0x4e, 0x87, 0x74, 0xd6, 0x4d, 0x00, + 0x49, 0x33, 0xb6, 0xcb, 0x4d, 0x40, 0x4d, 0x37, 0x80, 0xfd, 0x4d, 0x00, + 0x46, 0xe1, 0xd5, 0xc8, 0x4d, 0x40, 0xb4, 0x06, 0x48, 0x59, 0xc2, 0xf0, + 0x4d, 0x40, 0x44, 0x88, 0x00, 0xe0, 0x4d, 0x00, 0x43, 0x5d, 0x01, 0xd7, + 0x4d, 0x40, 0x44, 0x77, 0x9c, 0xca, 0x4d, 0x00, 0x47, 0x3f, 0xcb, 0xe2, + 0x4d, 0x00, 0x4d, 0x66, 0x82, 0xed, 0x4d, 0x40, 0x4a, 0xf2, 0x9f, 0xe6, + 0x4d, 0x00, 0x02, 0x6e, 0x02, 0x01, 0xff, 0x47, 0x2c, 0x15, 0xe5, 0x4d, + 0x00, 0x47, 0x67, 0x57, 0xee, 0x4d, 0x40, 0x45, 0xf6, 0xda, 0xce, 0x4d, + 0x00, 0x4b, 0x39, 0x9c, 0xda, 0x4d, 0x40, 0x46, 0x8f, 0xd0, 0xe9, 0x4d, + 0x00, 0x47, 0x1e, 0xc7, 0xde, 0x4d, 0x00, 0xae, 0x01, 0xff, 0x48, 0x19, + 0xbc, 0xfc, 0x4d, 0x00, 0x46, 0x37, 0xd4, 0xd8, 0x4d, 0x40, 0x51, 0xd1, + 0x52, 0xec, 0x4d, 0x00, 0xb2, 0x01, 0xff, 0x43, 0xee, 0x06, 0xd5, 0x4d, + 0x00, 0x04, 0x23, 0x3f, 0x01, 0xff, 0xb0, 0x06, 0x46, 0xe1, 0xd5, 0xd9, + 0x4d, 0x40, 0xaf, 0x06, 0x4c, 0x38, 0x80, 0xdb, 0x4d, 0x40, 0x48, 0x29, + 0x4d, 0xcd, 0x4d, 0x00, 0x43, 0x15, 0x01, 0xe1, 0x4d, 0x40, 0x49, 0x34, + 0xaf, 0xcc, 0x4d, 0x00, 0x48, 0x69, 0xbf, 0xd0, 0x4d, 0x40, 0x55, 0x37, + 0x35, 0xe3, 0x4d, 0x00, 0xa5, 0x14, 0xa9, 0x06, 0x47, 0xce, 0xcc, 0xdf, + 0x4d, 0x40, 0x59, 0x98, 0x21, 0xc2, 0x4d, 0x00, 0x48, 0x39, 0xc1, 0xfa, + 0x4d, 0x40, 0x46, 0x8f, 0xd0, 0xe8, 0x4d, 0x00, 0x49, 0x4c, 0xb2, 0xe7, + 0x4d, 0x00, 0x49, 0x4a, 0xb7, 0xf4, 0x4d, 0x40, 0x4c, 0x7f, 0x8a, 0xeb, + 0x4d, 0x00, 0xae, 0x01, 0xff, 0x45, 0xcd, 0xdb, 0xc5, 0x4d, 0x00, 0x4a, + 0xf8, 0xa8, 0xd3, 0x4d, 0x40, 0x50, 0x7e, 0x5c, 0xff, 0x4d, 0x00, 0x4d, + 0x79, 0x7d, 0xd4, 0x4d, 0x00, 0x4b, 0xa5, 0x99, 0xea, 0x4d, 0x40, 0x48, + 0xc9, 0xba, 0xf6, 0x4d, 0x00, 0x4f, 0xd8, 0x66, 0xfe, 0x4d, 0x00, 0x47, + 0x9e, 0xca, 0xd2, 0x4d, 0x40, 0xe2, 0x3f, 0xf3, 0x01, 0x57, 0xf7, 0x2b, + 0xb9, 0x22, 0x40, 0x02, 0x61, 0x17, 0xdf, 0x0a, 0x02, 0x08, 0x02, 0xc2, + 0x0a, 0xa8, 0x99, 0x09, 0x02, 0x09, 0x33, 0x84, 0x09, 0xab, 0xd3, 0x07, + 0xad, 0xcd, 0x06, 0xae, 0xa4, 0x05, 0x02, 0x09, 0x2e, 0x93, 0x05, 0xb2, + 0x8f, 0x04, 0xb3, 0xef, 0x02, 0xb4, 0xd2, 0x01, 0x02, 0x7d, 0x35, 0xb9, + 0x01, 0xb7, 0x52, 0xb9, 0x01, 0xff, 0x02, 0x61, 0x17, 0x31, 0x02, 0x09, + 0x2e, 0x15, 0x02, 0x7d, 0x35, 0x01, 0xff, 0xd1, 0xe3, 0xb0, 0x01, 0xd2, + 0xe4, 0xb0, 0x01, 0xd3, 0xe5, 0xb0, 0x01, 0xd4, 0xe6, 0xb0, 0x41, 0xd1, + 0xe7, 0xb0, 0x01, 0xd2, 0xe8, 0xb0, 0x01, 0xd3, 0xe9, 0xb0, 0x01, 0xd4, + 0xea, 0xb0, 0x01, 0xd5, 0xeb, 0xb0, 0x01, 0xd6, 0xec, 0xb0, 0x41, 0xd1, + 0xdd, 0xb0, 0x01, 0xd2, 0xde, 0xb0, 0x01, 0xd3, 0xdf, 0xb0, 0x01, 0xd4, + 0xe0, 0xb0, 0x01, 0xd5, 0xe1, 0xb0, 0x01, 0x42, 0x4e, 0x42, 0xe2, 0xb0, + 0x41, 0x02, 0x61, 0x17, 0x4d, 0x02, 0x08, 0x02, 0x39, 0x02, 0x09, 0x33, + 0x21, 0x02, 0x09, 0x2e, 0x01, 0xff, 0xd1, 0x16, 0xb1, 0x01, 0xd2, 0x17, + 0xb1, 0x01, 0xd3, 0x18, 0xb1, 0x01, 0xd4, 0x19, 0xb1, 0x01, 0xd5, 0x1a, + 0xb1, 0x01, 0xd6, 0x1b, 0xb1, 0x01, 0xd7, 0x1c, 0xb1, 0x41, 0xd1, 0x0d, + 0xb1, 0x01, 0xd2, 0x0e, 0xb1, 0x01, 0xd3, 0x0f, 0xb1, 0x01, 0xd4, 0x10, + 0xb1, 0x01, 0xd5, 0x11, 0xb1, 0x41, 0xd1, 0x12, 0xb1, 0x01, 0xd2, 0x13, + 0xb1, 0x01, 0xd3, 0x14, 0xb1, 0x01, 0xd4, 0x15, 0xb1, 0x41, 0xd1, 0x08, + 0xb1, 0x01, 0xd2, 0x09, 0xb1, 0x01, 0xd3, 0x0a, 0xb1, 0x01, 0xd4, 0x0b, + 0xb1, 0x01, 0xd5, 0x0c, 0xb1, 0x41, 0xd1, 0x0a, 0xb0, 0x01, 0xd2, 0x0b, + 0xb0, 0x01, 0xd3, 0x0c, 0xb0, 0x01, 0xd4, 0x0d, 0xb0, 0x01, 0xd5, 0x0e, + 0xb0, 0x41, 0x02, 0x61, 0x17, 0x85, 0x01, 0x02, 0x08, 0x02, 0x5d, 0x02, + 0x09, 0x33, 0x3d, 0x02, 0x09, 0x2e, 0x1b, 0x02, 0x7d, 0x35, 0x01, 0xff, + 0xd1, 0x69, 0xb0, 0x01, 0xd2, 0x6a, 0xb0, 0x01, 0xd3, 0x6b, 0xb0, 0x01, + 0xd4, 0x6c, 0xb0, 0x01, 0x42, 0x1e, 0x00, 0x6d, 0xb0, 0x41, 0xd1, 0x77, + 0xb0, 0x01, 0xd2, 0x78, 0xb0, 0x01, 0xd3, 0x79, 0xb0, 0x01, 0xd4, 0x7a, + 0xb0, 0x01, 0xd5, 0x7b, 0xb0, 0x01, 0xd6, 0x7c, 0xb0, 0x01, 0x42, 0x71, + 0x00, 0x7d, 0xb0, 0x41, 0xd1, 0x62, 0xb0, 0x01, 0xd2, 0x63, 0xb0, 0x01, + 0xd3, 0x64, 0xb0, 0x01, 0xd4, 0x65, 0xb0, 0x01, 0xd5, 0x66, 0xb0, 0x01, + 0xd6, 0x67, 0xb0, 0x01, 0xd7, 0x68, 0xb0, 0x41, 0xd1, 0x6e, 0xb0, 0x01, + 0xd2, 0x6f, 0xb0, 0x01, 0xd3, 0x70, 0xb0, 0x01, 0xd4, 0x71, 0xb0, 0x01, + 0xd5, 0x72, 0xb0, 0x01, 0xd6, 0x73, 0xb0, 0x01, 0xd7, 0x74, 0xb0, 0x01, + 0xd8, 0x75, 0xb0, 0x01, 0xd9, 0x76, 0xb0, 0x41, 0xd1, 0x5e, 0xb0, 0x01, + 0xd2, 0x5f, 0xb0, 0x01, 0xd3, 0x60, 0xb0, 0x01, 0xd4, 0x61, 0xb0, 0x41, + 0x02, 0x61, 0x17, 0x79, 0x02, 0x08, 0x02, 0x61, 0x02, 0x09, 0x33, 0x45, + 0x02, 0x09, 0x2e, 0x25, 0x02, 0x7d, 0x35, 0x01, 0xff, 0xd1, 0x4a, 0xb0, + 0x01, 0xd2, 0x4b, 0xb0, 0x01, 0xd3, 0x4c, 0xb0, 0x01, 0xd4, 0x4d, 0xb0, + 0x01, 0xd5, 0x4e, 0xb0, 0x01, 0xd6, 0x4f, 0xb0, 0x01, 0xd7, 0x50, 0xb0, + 0x01, 0xd8, 0x51, 0xb0, 0x41, 0xd1, 0x57, 0xb0, 0x01, 0xd2, 0x58, 0xb0, + 0x01, 0xd3, 0x59, 0xb0, 0x01, 0xd4, 0x5a, 0xb0, 0x01, 0xd5, 0x5b, 0xb0, + 0x01, 0xd6, 0x5c, 0xb0, 0x01, 0xd7, 0x5d, 0xb0, 0x41, 0xd1, 0x44, 0xb0, + 0x01, 0xd2, 0x45, 0xb0, 0x01, 0xd3, 0x46, 0xb0, 0x01, 0xd4, 0x47, 0xb0, + 0x01, 0xd5, 0x48, 0xb0, 0x01, 0xd6, 0x49, 0xb0, 0x41, 0xd1, 0x52, 0xb0, + 0x01, 0xd2, 0x53, 0xb0, 0x01, 0xd3, 0x54, 0xb0, 0x01, 0xd4, 0x55, 0xb0, + 0x01, 0xd5, 0x56, 0xb0, 0x41, 0xd1, 0x3c, 0xb0, 0x01, 0xd2, 0x3d, 0xb0, + 0x01, 0xd3, 0x3e, 0xb0, 0x01, 0xd4, 0x3f, 0xb0, 0x01, 0xd5, 0x40, 0xb0, + 0x01, 0xd6, 0x41, 0xb0, 0x01, 0xd7, 0x42, 0xb0, 0x01, 0xd8, 0x43, 0xb0, + 0x41, 0x02, 0x61, 0x17, 0x6d, 0x02, 0x08, 0x02, 0x59, 0x02, 0x09, 0x33, + 0x39, 0x02, 0x09, 0x2e, 0x1d, 0x02, 0x7d, 0x35, 0x01, 0xff, 0xd1, 0xf8, + 0xb0, 0x01, 0xd2, 0xf9, 0xb0, 0x01, 0xd3, 0xfa, 0xb0, 0x01, 0xd4, 0xfb, + 0xb0, 0x01, 0xd5, 0xfc, 0xb0, 0x01, 0xd6, 0xfd, 0xb0, 0x41, 0xd1, 0x02, + 0xb1, 0x01, 0xd2, 0x03, 0xb1, 0x01, 0xd3, 0x04, 0xb1, 0x01, 0xd4, 0x05, + 0xb1, 0x01, 0xd5, 0x06, 0xb1, 0x01, 0xd6, 0x07, 0xb1, 0x41, 0xd1, 0xf1, + 0xb0, 0x01, 0xd2, 0xf2, 0xb0, 0x01, 0xd3, 0xf3, 0xb0, 0x01, 0xd4, 0xf4, + 0xb0, 0x01, 0xd5, 0xf5, 0xb0, 0x01, 0xd6, 0xf6, 0xb0, 0x01, 0xd7, 0xf7, + 0xb0, 0x41, 0xd1, 0xfe, 0xb0, 0x01, 0xd2, 0xff, 0xb0, 0x01, 0xd3, 0x00, + 0xb1, 0x01, 0xd4, 0x01, 0xb1, 0x41, 0xd1, 0xed, 0xb0, 0x01, 0xd2, 0xee, + 0xb0, 0x01, 0xd3, 0xef, 0xb0, 0x01, 0xd4, 0xf0, 0xb0, 0x41, 0xd1, 0x14, + 0xb0, 0x01, 0xd2, 0x15, 0xb0, 0x01, 0xd3, 0x16, 0xb0, 0x41, 0x07, 0xc8, + 0xc3, 0x99, 0x01, 0x02, 0x61, 0x17, 0x71, 0x02, 0x08, 0x02, 0x4f, 0x02, + 0x09, 0x33, 0x29, 0x02, 0x09, 0x2e, 0x11, 0x02, 0x7d, 0x35, 0x01, 0xff, + 0xd1, 0x8f, 0xb0, 0x01, 0xd2, 0x90, 0xb0, 0x01, 0xd3, 0x91, 0xb0, 0x41, + 0xd1, 0x99, 0xb0, 0x01, 0xd2, 0x9a, 0xb0, 0x01, 0xd3, 0x9b, 0xb0, 0x01, + 0xd4, 0x9c, 0xb0, 0x01, 0xd5, 0x9d, 0xb0, 0x41, 0xd1, 0x87, 0xb0, 0x01, + 0xd2, 0x88, 0xb0, 0x01, 0xd3, 0x89, 0xb0, 0x01, 0xd4, 0x8a, 0xb0, 0x01, + 0xd5, 0x8b, 0xb0, 0x01, 0xd6, 0x8c, 0xb0, 0x01, 0xd7, 0x8d, 0xb0, 0x01, + 0x42, 0x77, 0x00, 0x8e, 0xb0, 0x41, 0xd1, 0x92, 0xb0, 0x01, 0xd2, 0x93, + 0xb0, 0x01, 0xd3, 0x94, 0xb0, 0x01, 0xd4, 0x95, 0xb0, 0x01, 0xd5, 0x96, + 0xb0, 0x01, 0xd6, 0x97, 0xb0, 0x01, 0x42, 0xce, 0x02, 0x98, 0xb0, 0x41, + 0xd1, 0x7e, 0xb0, 0x01, 0xd2, 0x7f, 0xb0, 0x01, 0xd3, 0x80, 0xb0, 0x01, + 0xd4, 0x81, 0xb0, 0x01, 0xd5, 0x82, 0xb0, 0x01, 0xd6, 0x83, 0xb0, 0x01, + 0xd7, 0x84, 0xb0, 0x01, 0xd8, 0x85, 0xb0, 0x01, 0xd9, 0x86, 0xb0, 0x41, + 0xd1, 0x1d, 0xb1, 0x01, 0xd2, 0x1e, 0xb1, 0x41, 0x02, 0x61, 0x17, 0x63, + 0x02, 0x08, 0x02, 0x51, 0x02, 0x09, 0x33, 0x31, 0x02, 0x09, 0x2e, 0x15, + 0x02, 0x7d, 0x35, 0x01, 0xff, 0xd1, 0xd0, 0xb0, 0x01, 0xd2, 0xd1, 0xb0, + 0x01, 0xd3, 0xd2, 0xb0, 0x01, 0xd4, 0xd3, 0xb0, 0x41, 0xd1, 0xd7, 0xb0, + 0x01, 0xd2, 0xd8, 0xb0, 0x01, 0xd3, 0xd9, 0xb0, 0x01, 0xd4, 0xda, 0xb0, + 0x01, 0xd5, 0xdb, 0xb0, 0x01, 0xd6, 0xdc, 0xb0, 0x41, 0xd1, 0xc9, 0xb0, + 0x01, 0xd2, 0xca, 0xb0, 0x01, 0xd3, 0xcb, 0xb0, 0x01, 0xd4, 0xcc, 0xb0, + 0x01, 0xd5, 0xcd, 0xb0, 0x01, 0xd6, 0xce, 0xb0, 0x01, 0xd7, 0xcf, 0xb0, + 0x41, 0xd1, 0xd4, 0xb0, 0x01, 0xd2, 0xd5, 0xb0, 0x01, 0x42, 0x6c, 0x00, + 0xd6, 0xb0, 0x41, 0xd1, 0xc2, 0xb0, 0x01, 0xd2, 0xc3, 0xb0, 0x01, 0xd3, + 0xc4, 0xb0, 0x01, 0xd4, 0xc5, 0xb0, 0x01, 0xd5, 0xc6, 0xb0, 0x01, 0xd6, + 0xc7, 0xb0, 0x01, 0xd7, 0xc8, 0xb0, 0x41, 0x02, 0x61, 0x17, 0x77, 0x02, + 0x08, 0x02, 0x5b, 0x02, 0x09, 0x33, 0x37, 0x02, 0x09, 0x2e, 0x21, 0x02, + 0x7d, 0x35, 0x01, 0xff, 0xd1, 0x2b, 0xb0, 0x01, 0xd2, 0x2c, 0xb0, 0x01, + 0xd3, 0x2d, 0xb0, 0x01, 0xd4, 0x2e, 0xb0, 0x01, 0xd5, 0x2f, 0xb0, 0x01, + 0xd6, 0x30, 0xb0, 0x01, 0xd7, 0x31, 0xb0, 0x41, 0xd1, 0x38, 0xb0, 0x01, + 0xd2, 0x39, 0xb0, 0x01, 0xd3, 0x3a, 0xb0, 0x01, 0x42, 0x45, 0x00, 0x3b, + 0xb0, 0x41, 0xd1, 0x23, 0xb0, 0x01, 0xd2, 0x24, 0xb0, 0x01, 0xd3, 0x25, + 0xb0, 0x01, 0xd4, 0x26, 0xb0, 0x01, 0xd5, 0x27, 0xb0, 0x01, 0xd6, 0x28, + 0xb0, 0x01, 0xd7, 0x29, 0xb0, 0x01, 0xd8, 0x2a, 0xb0, 0x41, 0xd1, 0x32, + 0xb0, 0x01, 0xd2, 0x33, 0xb0, 0x01, 0xd3, 0x34, 0xb0, 0x01, 0xd4, 0x35, + 0xb0, 0x01, 0xd5, 0x36, 0xb0, 0x01, 0xd6, 0x37, 0xb0, 0x41, 0xd1, 0x17, + 0xb0, 0x81, 0x26, 0xd2, 0x18, 0xb0, 0x01, 0xd3, 0x19, 0xb0, 0x01, 0xd4, + 0x1a, 0xb0, 0x01, 0xd5, 0x1b, 0xb0, 0x01, 0xd6, 0x1c, 0xb0, 0x01, 0xd7, + 0x1d, 0xb0, 0x01, 0xd8, 0x1e, 0xb0, 0x01, 0xd9, 0x1f, 0xb0, 0x01, 0x42, + 0x37, 0x01, 0x22, 0xb0, 0x41, 0xd0, 0x20, 0xb0, 0x01, 0xd1, 0x21, 0xb0, + 0x41, 0xd1, 0x06, 0xb0, 0x01, 0xd2, 0x07, 0xb0, 0x01, 0xd3, 0x08, 0xb0, + 0x01, 0xd4, 0x09, 0xb0, 0x41, 0x02, 0x61, 0x17, 0x75, 0x02, 0x08, 0x02, + 0x55, 0x02, 0x09, 0x33, 0x35, 0x02, 0x09, 0x2e, 0x11, 0x02, 0x7d, 0x35, + 0x01, 0xff, 0xd1, 0xb0, 0xb0, 0x01, 0xd2, 0xb1, 0xb0, 0x01, 0xd3, 0xb2, + 0xb0, 0x41, 0xd1, 0xba, 0xb0, 0x01, 0xd2, 0xbb, 0xb0, 0x01, 0xd3, 0xbc, + 0xb0, 0x01, 0xd4, 0xbd, 0xb0, 0x01, 0xd5, 0xbe, 0xb0, 0x01, 0xd6, 0xbf, + 0xb0, 0x01, 0xd7, 0xc0, 0xb0, 0x01, 0xd8, 0xc1, 0xb0, 0x41, 0xd1, 0xa9, + 0xb0, 0x01, 0xd2, 0xaa, 0xb0, 0x01, 0xd3, 0xab, 0xb0, 0x01, 0xd4, 0xac, + 0xb0, 0x01, 0xd5, 0xad, 0xb0, 0x01, 0xd6, 0xae, 0xb0, 0x01, 0xd7, 0xaf, + 0xb0, 0x41, 0xd1, 0xb3, 0xb0, 0x01, 0xd2, 0xb4, 0xb0, 0x01, 0xd3, 0xb5, + 0xb0, 0x01, 0xd4, 0xb6, 0xb0, 0x01, 0xd5, 0xb7, 0xb0, 0x01, 0xd6, 0xb8, + 0xb0, 0x01, 0xd7, 0xb9, 0xb0, 0x41, 0xd1, 0x9e, 0xb0, 0x81, 0x20, 0xd2, + 0x9f, 0xb0, 0x01, 0xd3, 0xa0, 0xb0, 0x01, 0xd4, 0xa1, 0xb0, 0x01, 0xd5, + 0xa2, 0xb0, 0x01, 0xd6, 0xa3, 0xb0, 0x01, 0xd7, 0xa4, 0xb0, 0x01, 0xd8, + 0xa5, 0xb0, 0x01, 0xd9, 0xa6, 0xb0, 0x41, 0xd0, 0xa7, 0xb0, 0x01, 0xd1, + 0xa8, 0xb0, 0x41, 0xd1, 0x01, 0xb0, 0x01, 0xd2, 0x0f, 0xb0, 0x01, 0xd3, + 0x10, 0xb0, 0x01, 0xd4, 0x11, 0xb0, 0x01, 0xd5, 0x12, 0xb0, 0x01, 0xd6, + 0x13, 0xb0, 0x41, 0xd1, 0x02, 0xb0, 0x01, 0xd2, 0x03, 0xb0, 0x01, 0xd3, + 0x04, 0xb0, 0x01, 0x42, 0x15, 0x02, 0x05, 0xb0, 0x41, 0x47, 0xb8, 0xc7, + 0x81, 0xf6, 0x01, 0x57, 0xe0, 0x2b, 0xff, 0x2b, 0x00, 0xad, 0x01, 0xff, + 0x47, 0xf6, 0x06, 0x88, 0x23, 0x00, 0x53, 0xc4, 0x43, 0xd1, 0x26, 0x40, + 0x07, 0x7f, 0x20, 0x8a, 0x06, 0xac, 0xd0, 0x01, 0x05, 0xb9, 0x00, 0xb9, + 0x01, 0xb0, 0x06, 0x4c, 0x53, 0x8f, 0xef, 0x05, 0x40, 0x05, 0xe8, 0x15, + 0x2d, 0x0b, 0x8d, 0x14, 0x01, 0xff, 0x03, 0xe1, 0x08, 0x18, 0x45, 0xcb, + 0xdd, 0xbe, 0x05, 0x00, 0x4b, 0x3a, 0x98, 0xc6, 0x05, 0x00, 0x45, 0x06, + 0xdf, 0xc0, 0x05, 0x00, 0x49, 0xd9, 0xb5, 0xc3, 0x05, 0x40, 0x43, 0x00, + 0x55, 0xf3, 0x05, 0x00, 0x46, 0x57, 0xd5, 0xf4, 0x05, 0x40, 0x4f, 0x70, + 0x65, 0xbc, 0x05, 0x00, 0xa8, 0x4f, 0x54, 0xdd, 0x3e, 0x1e, 0xfb, 0x00, + 0x45, 0xe9, 0xdd, 0xbd, 0x05, 0x00, 0x45, 0x58, 0x83, 0xb7, 0x05, 0x00, + 0xb1, 0x28, 0x44, 0x3a, 0xe7, 0xbf, 0x05, 0x00, 0xb3, 0x06, 0x45, 0xc3, + 0xe0, 0xb5, 0x05, 0x40, 0x44, 0x0b, 0xe0, 0xb6, 0x05, 0x00, 0xa8, 0x06, + 0x46, 0xa4, 0x48, 0xc2, 0x05, 0x40, 0x43, 0x48, 0x41, 0xb0, 0x05, 0x00, + 0x46, 0xa4, 0x48, 0xc1, 0x05, 0x40, 0x45, 0xda, 0xd4, 0xb8, 0x05, 0x80, + 0x06, 0x45, 0xf0, 0xe0, 0xbb, 0x05, 0x40, 0x46, 0x13, 0xce, 0xc7, 0x05, + 0x40, 0x05, 0xe3, 0xd9, 0x13, 0x44, 0x5f, 0xdc, 0xb4, 0x05, 0x00, 0x44, + 0x6e, 0xdc, 0xb9, 0x05, 0xc0, 0x00, 0x4e, 0x83, 0x6e, 0xba, 0x05, 0x40, + 0x45, 0x58, 0x83, 0xb2, 0x05, 0x00, 0x46, 0xd9, 0xd4, 0xb3, 0x05, 0x00, + 0x45, 0x0a, 0xe0, 0xb1, 0x05, 0x40, 0x49, 0x79, 0xb2, 0xc5, 0x05, 0x00, + 0x4d, 0x7d, 0x7e, 0xaf, 0x05, 0x00, 0x49, 0xde, 0xb6, 0xc4, 0x05, 0x40, + 0x06, 0xf2, 0x04, 0x2c, 0x08, 0x35, 0x1d, 0x01, 0xff, 0x4a, 0x2a, 0x9f, + 0x4f, 0xfb, 0x00, 0x08, 0xe9, 0xc2, 0x01, 0xff, 0x07, 0x3b, 0x01, 0x0c, + 0x47, 0x06, 0xcd, 0xf1, 0x05, 0x00, 0x4d, 0x50, 0x83, 0x1f, 0xfb, 0x40, + 0x43, 0xd1, 0x0d, 0xf0, 0x05, 0x00, 0x43, 0x0e, 0x4d, 0xf2, 0x05, 0x40, + 0xa1, 0xcd, 0x03, 0x43, 0xc6, 0x08, 0xd1, 0x05, 0x80, 0xb4, 0x03, 0x45, + 0xa2, 0x44, 0xd3, 0x05, 0x80, 0xa6, 0x03, 0x06, 0x97, 0x29, 0xf5, 0x02, + 0x45, 0x5e, 0xa2, 0xd2, 0x05, 0x80, 0xe7, 0x02, 0x42, 0xb0, 0x01, 0xd4, + 0x05, 0x80, 0xd5, 0x02, 0x43, 0x26, 0x4c, 0xdb, 0x05, 0x80, 0xbc, 0x02, + 0x45, 0x2f, 0x9f, 0xdc, 0x05, 0x80, 0xae, 0x02, 0x43, 0xb9, 0x04, 0xde, + 0x05, 0x80, 0xa0, 0x02, 0x43, 0x40, 0x20, 0xe0, 0x05, 0x80, 0x92, 0x02, + 0x42, 0x6f, 0x02, 0xe4, 0x05, 0x80, 0xf9, 0x01, 0x43, 0x79, 0xe9, 0xe7, + 0x05, 0x80, 0xeb, 0x01, 0x44, 0x3e, 0x60, 0xe8, 0x05, 0x80, 0xdd, 0x01, + 0xb3, 0x9a, 0x01, 0xb4, 0x71, 0x43, 0xd1, 0x0d, 0xd5, 0x05, 0x80, 0x59, + 0x05, 0x6d, 0xe1, 0x25, 0x43, 0x0e, 0x4d, 0xd9, 0x05, 0x80, 0x0d, 0x45, + 0x08, 0x4d, 0xd6, 0x05, 0xc0, 0x00, 0x4c, 0x07, 0x84, 0x36, 0xfb, 0x40, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x70, 0x65, 0x39, 0xfb, 0x00, 0x45, + 0x5e, 0xdc, 0x1d, 0xfb, 0x40, 0x44, 0x67, 0x00, 0x21, 0xfb, 0x00, 0x45, + 0xa2, 0x44, 0x22, 0xfb, 0x00, 0x49, 0xbb, 0xaf, 0x26, 0xfb, 0x00, 0x42, + 0xb0, 0x01, 0x23, 0xfb, 0x00, 0x43, 0x26, 0x4c, 0x24, 0xfb, 0x00, 0x45, + 0x2f, 0x9f, 0x25, 0xfb, 0x00, 0x44, 0x3e, 0x60, 0x27, 0xfb, 0x00, 0x43, + 0x08, 0x27, 0x28, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x70, + 0x65, 0x35, 0xfb, 0x00, 0x45, 0x6d, 0xdc, 0x4b, 0xfb, 0x40, 0x42, 0x10, + 0x07, 0xea, 0x05, 0x80, 0x1a, 0x42, 0xf2, 0x04, 0xd8, 0x05, 0x80, 0x0d, + 0x44, 0xba, 0xe0, 0xe6, 0x05, 0xc0, 0x00, 0x4c, 0x07, 0x84, 0x46, 0xfb, + 0x40, 0x4c, 0x07, 0x84, 0x38, 0xfb, 0x40, 0x4c, 0x07, 0x84, 0x4a, 0xfb, + 0x40, 0x45, 0xb1, 0xd9, 0xe1, 0x05, 0x80, 0x33, 0x43, 0x99, 0x14, 0xe9, + 0x05, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x70, 0x65, 0x49, + 0xfb, 0x80, 0x0f, 0xb3, 0x01, 0xff, 0x47, 0xa3, 0x48, 0x2a, 0xfb, 0x00, + 0x46, 0xa4, 0x48, 0x2b, 0xfb, 0x40, 0x06, 0xda, 0x06, 0x01, 0xff, 0x47, + 0xa3, 0x48, 0x2c, 0xfb, 0x00, 0x46, 0xa4, 0x48, 0x2d, 0xfb, 0x40, 0x4c, + 0x07, 0x84, 0x41, 0xfb, 0x40, 0x4c, 0x07, 0x84, 0x48, 0xfb, 0x40, 0x4c, + 0x07, 0x84, 0x47, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x70, + 0x65, 0x44, 0xfb, 0x00, 0x44, 0x3a, 0xe7, 0x4e, 0xfb, 0x40, 0x4c, 0x07, + 0x84, 0x40, 0xfb, 0x40, 0x4c, 0x07, 0x84, 0x3e, 0xfb, 0x40, 0x4c, 0x07, + 0x84, 0x3c, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x70, 0x65, + 0x3b, 0xfb, 0x00, 0x44, 0x3a, 0xe7, 0x4d, 0xfb, 0x40, 0x4b, 0x47, 0x90, + 0x34, 0xfb, 0x00, 0xf4, 0xd7, 0x05, 0x40, 0x4c, 0x07, 0x84, 0x32, 0xfb, + 0x40, 0x43, 0x26, 0x4c, 0xda, 0x05, 0x80, 0x1f, 0x43, 0xb9, 0x04, 0xdd, + 0x05, 0x00, 0x43, 0x40, 0x20, 0xdf, 0x05, 0x00, 0x42, 0x6f, 0x02, 0xe3, + 0x05, 0x80, 0x06, 0x45, 0xb9, 0xe0, 0xe5, 0x05, 0x40, 0x4c, 0x07, 0x84, + 0x43, 0xfb, 0x40, 0x4c, 0x07, 0x84, 0x3a, 0xfb, 0x40, 0x4c, 0x07, 0x84, + 0x33, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x70, 0x65, 0x31, + 0xfb, 0x00, 0x44, 0x3a, 0xe7, 0x4c, 0xfb, 0x40, 0xac, 0x06, 0x43, 0x4b, + 0x18, 0xe2, 0x05, 0x40, 0x42, 0x69, 0x00, 0xd0, 0x05, 0x80, 0x11, 0x0a, + 0x02, 0xa9, 0x01, 0xff, 0x44, 0x9d, 0x44, 0x20, 0xfb, 0x00, 0x49, 0x2e, + 0x6b, 0x29, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x7a, 0x65, + 0x30, 0xfb, 0x00, 0x45, 0x58, 0x83, 0x2e, 0xfb, 0x00, 0x46, 0xd9, 0xd4, + 0x2f, 0xfb, 0x40, 0x4c, 0xf7, 0x84, 0xa2, 0x05, 0x00, 0xa4, 0xcb, 0x01, + 0x47, 0xe6, 0xc6, 0x91, 0x05, 0x00, 0x03, 0xe1, 0x08, 0xad, 0x01, 0x44, + 0xa2, 0xe5, 0xac, 0x05, 0x00, 0xad, 0x8b, 0x01, 0x43, 0xf9, 0x13, 0xab, + 0x05, 0x00, 0x02, 0xc1, 0x08, 0x75, 0x02, 0x9d, 0x12, 0x65, 0x45, 0x7b, + 0x4a, 0x97, 0x05, 0x00, 0xb3, 0x51, 0xb4, 0x31, 0x02, 0x4d, 0x00, 0x21, + 0xba, 0x01, 0xff, 0xa1, 0x06, 0x44, 0xa6, 0xe5, 0xae, 0x05, 0x40, 0x04, + 0x2e, 0xe7, 0x06, 0x43, 0x9c, 0x12, 0x98, 0x05, 0x40, 0x45, 0xe1, 0xdb, + 0x95, 0x05, 0x00, 0x45, 0x14, 0xce, 0x94, 0x05, 0x40, 0x4c, 0x77, 0x8c, + 0xaa, 0x05, 0x00, 0x43, 0xd6, 0x04, 0x9a, 0x05, 0x40, 0xa5, 0x06, 0x45, + 0xdb, 0xdc, 0x96, 0x05, 0x40, 0x06, 0x5f, 0xd3, 0x06, 0x43, 0x47, 0x21, + 0x9b, 0x05, 0x40, 0x46, 0xa9, 0xd1, 0xa0, 0x05, 0x00, 0x46, 0xdf, 0xd4, + 0xa9, 0x05, 0x40, 0x44, 0x0b, 0xe0, 0x92, 0x05, 0x00, 0x49, 0x39, 0xb0, + 0x93, 0x05, 0x40, 0x43, 0xad, 0xac, 0xa8, 0x05, 0x00, 0x49, 0x52, 0xb5, + 0x9f, 0x05, 0x40, 0x44, 0x8e, 0xe7, 0x99, 0x05, 0x00, 0x43, 0xf5, 0x1b, + 0xa1, 0x05, 0x40, 0x47, 0x9a, 0xc4, 0xa4, 0x05, 0x00, 0x45, 0x82, 0xdb, + 0xa5, 0x05, 0x80, 0x06, 0x44, 0x98, 0xc4, 0xa3, 0x05, 0x40, 0x47, 0x43, + 0xc3, 0xa6, 0x05, 0x40, 0x43, 0x00, 0x55, 0x9c, 0x05, 0x80, 0x06, 0x46, + 0x57, 0xd5, 0x9e, 0x05, 0x40, 0x47, 0x66, 0xc3, 0x9d, 0x05, 0x40, 0x44, + 0x7f, 0x46, 0xa7, 0x05, 0x00, 0x43, 0xb5, 0x57, 0xad, 0x05, 0x40, 0xa4, + 0xd3, 0x06, 0xb2, 0xa2, 0x06, 0x03, 0x8f, 0x13, 0x01, 0xff, 0xa1, 0xee, + 0x05, 0xa2, 0xb1, 0x05, 0xa3, 0xfb, 0x04, 0xa4, 0xc2, 0x04, 0xa5, 0x82, + 0x04, 0xa6, 0xe9, 0x03, 0x4b, 0x33, 0x5b, 0x1a, 0x27, 0x00, 0xa8, 0xd4, + 0x03, 0x54, 0x3e, 0x14, 0x79, 0xf6, 0x01, 0xac, 0xf9, 0x02, 0xad, 0xea, + 0x02, 0x06, 0xb4, 0x01, 0xb9, 0x02, 0xaf, 0xa4, 0x02, 0x49, 0x2e, 0x6b, + 0x95, 0x27, 0x00, 0xb2, 0xe9, 0x01, 0xb3, 0x7a, 0xb4, 0x46, 0x02, 0x50, + 0x02, 0x2b, 0x4c, 0x32, 0x00, 0x5a, 0x27, 0x00, 0xb7, 0x01, 0xff, 0x5c, + 0xa9, 0x15, 0xbd, 0x27, 0x00, 0x05, 0xae, 0x02, 0x06, 0x5b, 0xbe, 0x19, + 0x94, 0x27, 0x40, 0x46, 0x00, 0x04, 0x87, 0xf7, 0x01, 0x56, 0xd8, 0x2f, + 0xdb, 0x26, 0x00, 0x46, 0xdb, 0x04, 0x91, 0xf7, 0x41, 0x69, 0x9a, 0x02, + 0xae, 0x27, 0x00, 0x11, 0xb2, 0x0a, 0x01, 0xff, 0x55, 0xd5, 0x01, 0x19, + 0xf8, 0x01, 0x5b, 0x0f, 0x1a, 0x1d, 0xf8, 0x41, 0x09, 0x7b, 0x0b, 0x17, + 0x5f, 0x99, 0x05, 0x9e, 0x27, 0x00, 0x0e, 0xb7, 0x28, 0x01, 0xff, 0x4a, + 0xc5, 0x28, 0xd3, 0xf7, 0x01, 0x4d, 0x82, 0x11, 0xd4, 0xf7, 0x41, 0x57, + 0x11, 0x2b, 0xbb, 0x27, 0x00, 0x06, 0x84, 0x0b, 0x01, 0xff, 0x48, 0x94, + 0x0b, 0x3d, 0x27, 0x00, 0x51, 0x44, 0x57, 0x43, 0x27, 0x40, 0xa1, 0x5f, + 0x5a, 0x2e, 0x1d, 0x71, 0xf6, 0x01, 0xa9, 0x36, 0x05, 0x3a, 0x1e, 0x06, + 0x46, 0xe8, 0xab, 0x48, 0x27, 0x40, 0x05, 0x11, 0x21, 0x11, 0x0e, 0xde, + 0x50, 0x01, 0xff, 0x43, 0x7b, 0xc6, 0x65, 0xf6, 0x01, 0x49, 0x80, 0xb7, + 0x5d, 0xf6, 0x41, 0x45, 0xce, 0x00, 0x98, 0x27, 0x00, 0x09, 0x9c, 0x01, + 0x01, 0xff, 0x43, 0x7b, 0xc6, 0x67, 0xf6, 0x01, 0x49, 0x80, 0xb7, 0x5f, + 0xf6, 0x41, 0x05, 0x37, 0x05, 0x11, 0x02, 0xdd, 0x03, 0x01, 0xff, 0x52, + 0xbd, 0x28, 0xcc, 0xf7, 0x01, 0x4f, 0xbd, 0x1a, 0xb8, 0xf7, 0x41, 0x5d, + 0x18, 0x04, 0x5c, 0x27, 0x00, 0x64, 0x2d, 0x09, 0x5b, 0x27, 0x40, 0x45, + 0x17, 0x17, 0xac, 0xf7, 0x01, 0x5d, 0x35, 0x14, 0x7b, 0xf6, 0x41, 0x04, + 0xc9, 0x00, 0x06, 0x5c, 0xdd, 0x16, 0x9c, 0x27, 0x40, 0x10, 0x4b, 0x0a, + 0x18, 0x4b, 0xb8, 0x02, 0x99, 0x27, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, + 0xff, 0x55, 0xd5, 0x01, 0x1a, 0xf8, 0x01, 0x5b, 0x0f, 0x1a, 0x1e, 0xf8, + 0x41, 0x50, 0x45, 0x08, 0x71, 0x27, 0x00, 0x57, 0x1e, 0x04, 0x6f, 0x27, + 0x40, 0x50, 0x6e, 0x5f, 0x1c, 0x27, 0x00, 0x52, 0xa8, 0x50, 0x2e, 0x27, + 0x00, 0x54, 0x49, 0x41, 0x56, 0x2b, 0x40, 0x05, 0x11, 0x21, 0x11, 0x0e, + 0xde, 0x50, 0x01, 0xff, 0x43, 0x7b, 0xc6, 0x64, 0xf6, 0x01, 0x49, 0x80, + 0xb7, 0x5c, 0xf6, 0x41, 0x45, 0xce, 0x00, 0x9a, 0x27, 0x00, 0x09, 0x9c, + 0x01, 0x01, 0xff, 0x43, 0x7b, 0xc6, 0x66, 0xf6, 0x01, 0x49, 0x80, 0xb7, + 0x5e, 0xf6, 0x41, 0x49, 0x04, 0x68, 0x96, 0x27, 0x00, 0x4f, 0x86, 0x6d, + 0x16, 0x27, 0x40, 0xa1, 0x44, 0x03, 0xc4, 0x00, 0x1f, 0x58, 0x17, 0x26, + 0x73, 0xf6, 0x01, 0x02, 0xd1, 0x00, 0x01, 0xff, 0x80, 0x06, 0x68, 0x9b, + 0x02, 0xad, 0x27, 0x40, 0x64, 0x11, 0x04, 0x60, 0x27, 0x00, 0x64, 0xe5, + 0x08, 0x5f, 0x27, 0x40, 0x10, 0x4b, 0x0a, 0x11, 0x11, 0xb2, 0x0a, 0x01, + 0xff, 0x55, 0xd5, 0x01, 0x18, 0xf8, 0x01, 0x5b, 0x0f, 0x1a, 0x1c, 0xf8, + 0x41, 0x50, 0x45, 0x08, 0x70, 0x27, 0x00, 0x57, 0x1e, 0x04, 0x6e, 0x27, + 0x40, 0x4a, 0x72, 0xa7, 0x55, 0x2b, 0x00, 0x49, 0x37, 0x96, 0x47, 0xf5, + 0x41, 0x5e, 0x35, 0x11, 0x63, 0x27, 0x00, 0x4e, 0x6f, 0x67, 0x97, 0xfb, + 0x41, 0x04, 0xd7, 0x04, 0x06, 0x5b, 0xb1, 0x1a, 0x24, 0x27, 0x40, 0x52, + 0xbd, 0x28, 0xca, 0xf7, 0x01, 0x4f, 0xbd, 0x1a, 0xb2, 0xf7, 0x41, 0x05, + 0xc9, 0x00, 0x17, 0x4a, 0xa3, 0x11, 0xf0, 0xf7, 0x01, 0x10, 0xae, 0x00, + 0x01, 0xff, 0x48, 0x2d, 0x04, 0x62, 0x27, 0x00, 0x46, 0xf7, 0x06, 0x57, + 0x27, 0x40, 0x08, 0x14, 0x07, 0x0c, 0x4f, 0xbd, 0x1a, 0xbe, 0xf7, 0x01, + 0x62, 0x7a, 0x0b, 0x4b, 0x27, 0x40, 0x4a, 0xc5, 0x28, 0xcf, 0xf7, 0x01, + 0x4d, 0x82, 0x11, 0xd1, 0xf7, 0x01, 0x56, 0x98, 0x32, 0x38, 0x27, 0x40, + 0x66, 0x92, 0x05, 0xa0, 0x27, 0x00, 0x4c, 0xda, 0x2e, 0x97, 0x27, 0x00, + 0xaf, 0x01, 0xff, 0x49, 0x84, 0x0c, 0xb2, 0xf4, 0x01, 0x05, 0x3d, 0x01, + 0x11, 0x13, 0xb0, 0x0a, 0x01, 0xff, 0x55, 0xd5, 0x01, 0x1b, 0xf8, 0x01, + 0x5b, 0x0f, 0x1a, 0x1f, 0xf8, 0x41, 0x5d, 0x18, 0x04, 0x5e, 0x27, 0x00, + 0x64, 0x2d, 0x09, 0x5d, 0x27, 0x40, 0x02, 0xb0, 0x01, 0x23, 0x45, 0x01, + 0x04, 0x58, 0x2b, 0x80, 0x06, 0x65, 0x0d, 0x07, 0xa8, 0x27, 0x40, 0x06, + 0x50, 0x00, 0x06, 0x49, 0x89, 0xae, 0x59, 0x2b, 0x40, 0x4d, 0x7a, 0x7a, + 0x57, 0x2b, 0x00, 0x59, 0x73, 0x23, 0xe3, 0x26, 0x40, 0x47, 0x31, 0xa0, + 0x14, 0x27, 0x00, 0x4e, 0xb3, 0x77, 0x46, 0x27, 0x40, 0x47, 0xa8, 0xc4, + 0x18, 0x27, 0x00, 0x04, 0x1d, 0x07, 0x01, 0xff, 0x80, 0x17, 0x0b, 0x0e, + 0x18, 0x01, 0xff, 0x50, 0x0b, 0x21, 0xb9, 0x27, 0x00, 0x50, 0xb3, 0x02, + 0xb8, 0x27, 0x00, 0x50, 0xc1, 0x3b, 0xb7, 0x27, 0x40, 0x07, 0xad, 0x3c, + 0x06, 0x45, 0x5e, 0x1f, 0x64, 0x27, 0x40, 0x5e, 0x17, 0x11, 0xa5, 0x27, + 0x00, 0x5c, 0xa1, 0x17, 0xa6, 0x27, 0x40, 0x51, 0xa9, 0x39, 0x74, 0xf6, + 0x01, 0x11, 0x9d, 0x4a, 0x06, 0x47, 0x95, 0x0b, 0x31, 0x27, 0x40, 0x43, + 0xcd, 0x09, 0x9c, 0xf8, 0x81, 0x06, 0x4a, 0x84, 0xa9, 0x9d, 0xf8, 0x41, + 0x80, 0x01, 0xff, 0x44, 0x22, 0x00, 0x9e, 0xf8, 0x01, 0x45, 0xcc, 0x0e, + 0x9f, 0xf8, 0x41, 0x4f, 0xea, 0x63, 0x49, 0xf6, 0x01, 0x02, 0xc6, 0x00, + 0x01, 0xff, 0x4a, 0x77, 0x8f, 0x9f, 0xf4, 0x01, 0x45, 0xd3, 0x0c, 0xf6, + 0xfa, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0x45, 0xce, 0x00, 0x98, 0xf4, + 0x01, 0x46, 0xb8, 0x7e, 0x9d, 0xf4, 0x01, 0x4f, 0x0e, 0x6d, 0x94, 0xf3, + 0x41, 0x45, 0xb0, 0x38, 0xa7, 0xf3, 0x01, 0x45, 0x5d, 0xb1, 0xa6, 0xfa, + 0xc1, 0x00, 0x51, 0x6c, 0x51, 0xfc, 0x26, 0x40, 0x43, 0x0f, 0x25, 0xe1, + 0x2b, 0x00, 0x02, 0x46, 0x00, 0x93, 0x24, 0x08, 0x01, 0xbe, 0xda, 0x1e, + 0xad, 0xa6, 0x1e, 0xae, 0xd1, 0x01, 0x5b, 0xe7, 0x1a, 0x4b, 0xf6, 0x01, + 0x47, 0x00, 0xcb, 0xb4, 0xf5, 0x01, 0xb4, 0x06, 0x44, 0x08, 0xa1, 0x7b, + 0xf7, 0x41, 0x4b, 0x2b, 0x92, 0x23, 0xf4, 0x01, 0x04, 0x2a, 0xc8, 0x01, + 0xff, 0x07, 0xf1, 0x04, 0x27, 0x07, 0xbf, 0x35, 0x01, 0xff, 0x44, 0xf8, + 0x0f, 0xfc, 0x08, 0x01, 0x43, 0xcd, 0x09, 0xfb, 0x08, 0x81, 0x0f, 0xb4, + 0x01, 0xff, 0x42, 0x92, 0x01, 0xfd, 0x08, 0x01, 0x45, 0x38, 0x29, 0xfe, + 0x08, 0x41, 0x48, 0xe8, 0x0f, 0xff, 0x08, 0x41, 0xa1, 0x79, 0x44, 0x62, + 0xe4, 0xe1, 0x08, 0x01, 0x4b, 0xc5, 0x92, 0xe3, 0x08, 0x01, 0x45, 0x5e, + 0xa2, 0xe2, 0x08, 0x01, 0x42, 0xb0, 0x01, 0xe4, 0x08, 0x81, 0x5a, 0x44, + 0xd6, 0xe5, 0xea, 0x08, 0x01, 0x46, 0x3b, 0xd3, 0xeb, 0x08, 0x01, 0x43, + 0xb9, 0x04, 0xec, 0x08, 0x01, 0x43, 0x40, 0x20, 0xed, 0x08, 0x01, 0x42, + 0x6f, 0x02, 0xf0, 0x08, 0x01, 0x44, 0x8d, 0xbe, 0xf2, 0x08, 0x01, 0xb3, + 0x20, 0xb4, 0x12, 0x43, 0x0f, 0x83, 0xe5, 0x08, 0x01, 0x44, 0x0e, 0x4d, + 0xe9, 0x08, 0x01, 0x44, 0x3e, 0xe8, 0xe6, 0x08, 0x41, 0x42, 0xc4, 0x3f, + 0xf5, 0x08, 0x01, 0x43, 0x25, 0x23, 0xe8, 0x08, 0x41, 0xa1, 0x06, 0x43, + 0x99, 0x14, 0xf4, 0x08, 0x41, 0x43, 0xf3, 0xdf, 0xf1, 0x08, 0x01, 0x44, + 0xb2, 0xd9, 0xee, 0x08, 0x41, 0x42, 0x53, 0x00, 0xe7, 0x08, 0x41, 0x44, + 0xae, 0x38, 0xe0, 0x08, 0x01, 0x42, 0xd0, 0x1a, 0xef, 0x08, 0x41, 0xa4, + 0xab, 0x1c, 0xa7, 0xce, 0x03, 0x0d, 0xea, 0x7c, 0x82, 0x01, 0x05, 0x13, + 0xe1, 0x01, 0xff, 0x07, 0xf1, 0x04, 0x13, 0x4d, 0x48, 0x81, 0x34, 0x17, + 0x00, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xe9, 0x32, 0x17, 0x00, 0xf5, 0x33, + 0x17, 0x40, 0xe1, 0x20, 0x17, 0x00, 0x42, 0x16, 0x00, 0x2a, 0x17, 0x00, + 0x42, 0x68, 0x0f, 0x27, 0x17, 0x00, 0x42, 0x24, 0x02, 0x24, 0x17, 0x00, + 0x42, 0x22, 0x00, 0x31, 0x17, 0x00, 0xe9, 0x21, 0x17, 0x00, 0x42, 0x1b, + 0x02, 0x23, 0x17, 0x00, 0x42, 0x74, 0x00, 0x2e, 0x17, 0x00, 0x42, 0x6c, + 0x00, 0x2b, 0x17, 0x00, 0xae, 0x28, 0x42, 0xc1, 0x08, 0x29, 0x17, 0x00, + 0x42, 0x71, 0x00, 0x2d, 0x17, 0x00, 0x42, 0x45, 0x05, 0x30, 0x17, 0x00, + 0x42, 0x12, 0x00, 0x26, 0x17, 0x00, 0xf5, 0x22, 0x17, 0x00, 0x42, 0xa9, + 0x01, 0x2f, 0x17, 0x00, 0x42, 0x20, 0x20, 0x2c, 0x17, 0x40, 0xe1, 0x28, + 0x17, 0x00, 0x42, 0x24, 0x02, 0x25, 0x17, 0x40, 0x06, 0xf4, 0x05, 0x80, + 0x02, 0x07, 0xf1, 0x04, 0x4a, 0x05, 0xb9, 0x00, 0x3a, 0x05, 0xdb, 0x02, + 0x19, 0x06, 0x11, 0x35, 0x01, 0xff, 0xe1, 0x1d, 0x0d, 0x01, 0xe5, 0x20, + 0x0d, 0x01, 0xe9, 0x1e, 0x0d, 0x01, 0xef, 0x21, 0x0d, 0x01, 0xf5, 0x1f, + 0x0d, 0x41, 0x48, 0x01, 0xbd, 0x24, 0x0d, 0x01, 0x02, 0x12, 0x00, 0x01, + 0xff, 0x44, 0x1e, 0x76, 0x25, 0x0d, 0x01, 0x42, 0x2f, 0x04, 0x26, 0x0d, + 0x01, 0x43, 0x90, 0x07, 0x27, 0x0d, 0x41, 0x49, 0xe5, 0xb2, 0x23, 0x0d, + 0x01, 0x45, 0xf6, 0xdf, 0x22, 0x0d, 0x41, 0xe1, 0x00, 0x0d, 0x01, 0x42, + 0x16, 0x00, 0x01, 0x0d, 0x01, 0x42, 0x37, 0x00, 0x06, 0x0d, 0x01, 0xa4, + 0x95, 0x01, 0x42, 0xed, 0x06, 0x09, 0x0d, 0x01, 0x42, 0x24, 0x02, 0x12, + 0x0d, 0x01, 0x42, 0x22, 0x00, 0x07, 0x0d, 0x01, 0x42, 0x77, 0x24, 0x05, + 0x0d, 0x01, 0xab, 0x60, 0x42, 0x74, 0x00, 0x13, 0x0d, 0x01, 0x42, 0x6c, + 0x00, 0x14, 0x0d, 0x01, 0xae, 0x42, 0x42, 0xc1, 0x08, 0x02, 0x0d, 0x01, + 0xb2, 0x30, 0xb3, 0x24, 0xb4, 0x18, 0x42, 0xb4, 0x09, 0x1c, 0x0d, 0x01, + 0x42, 0xa9, 0x01, 0x16, 0x0d, 0x01, 0x42, 0x20, 0x20, 0x18, 0x0d, 0x01, + 0x42, 0x59, 0x00, 0x0e, 0x0d, 0x41, 0xe1, 0x03, 0x0d, 0x01, 0x42, 0x12, + 0x00, 0x04, 0x0d, 0x41, 0xe1, 0x0f, 0x0d, 0x01, 0x42, 0x22, 0x00, 0x10, + 0x0d, 0x41, 0xe1, 0x0c, 0x0d, 0x01, 0x42, 0x71, 0x00, 0x0d, 0x0d, 0x41, + 0xe1, 0x15, 0x0d, 0x01, 0x42, 0x24, 0x02, 0x1a, 0x0d, 0x01, 0x42, 0x20, + 0x20, 0x1b, 0x0d, 0x41, 0xe1, 0x11, 0x0d, 0x01, 0x42, 0x22, 0x00, 0x08, + 0x0d, 0x01, 0x05, 0xd1, 0xdc, 0x01, 0xff, 0x42, 0xa9, 0x01, 0x17, 0x0d, + 0x01, 0x42, 0x20, 0x20, 0x19, 0x0d, 0x41, 0xe1, 0x0a, 0x0d, 0x01, 0x42, + 0x68, 0x0f, 0x0b, 0x0d, 0x41, 0x45, 0xd1, 0x09, 0x38, 0x0d, 0x01, 0xa6, + 0x2e, 0x44, 0xb8, 0x27, 0x39, 0x0d, 0x01, 0x43, 0xcd, 0x09, 0x31, 0x0d, + 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x30, 0x0d, 0x41, 0x44, + 0x25, 0x01, 0x33, 0x0d, 0x01, 0x42, 0x15, 0x02, 0x32, 0x0d, 0x41, 0x44, + 0x96, 0x1b, 0x37, 0x0d, 0x01, 0x42, 0x30, 0x27, 0x36, 0x0d, 0x41, 0x43, + 0xd7, 0x04, 0x35, 0x0d, 0x01, 0x43, 0xfb, 0x05, 0x34, 0x0d, 0x41, 0x03, + 0xe4, 0x4f, 0x57, 0x0d, 0x6a, 0x83, 0x01, 0xff, 0x45, 0xd1, 0x09, 0x28, + 0x30, 0x00, 0xa6, 0x3e, 0x44, 0xb8, 0x27, 0x29, 0x30, 0x00, 0x43, 0xcd, + 0x09, 0x21, 0x30, 0x00, 0xb3, 0x24, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, + 0x38, 0x30, 0x00, 0xa8, 0x0d, 0xb7, 0x01, 0xff, 0x44, 0x98, 0x1b, 0x39, + 0x30, 0x00, 0xef, 0x22, 0x30, 0x40, 0x44, 0xf3, 0x0f, 0x3a, 0x30, 0x00, + 0x43, 0x26, 0x01, 0x23, 0x30, 0x40, 0x44, 0x96, 0x1b, 0x27, 0x30, 0x00, + 0x42, 0x30, 0x27, 0x26, 0x30, 0x40, 0x43, 0xd7, 0x04, 0x25, 0x30, 0x00, + 0x43, 0xfb, 0x05, 0x24, 0x30, 0x40, 0x09, 0x38, 0xae, 0xf4, 0x10, 0x54, + 0xe9, 0x3c, 0x2f, 0x30, 0x00, 0x46, 0xa1, 0x7b, 0x64, 0x31, 0x00, 0xaa, + 0xef, 0x04, 0x07, 0xf1, 0x04, 0x0f, 0xb3, 0x01, 0xff, 0x53, 0xf4, 0x44, + 0x2e, 0x30, 0x00, 0x48, 0x3a, 0x16, 0x00, 0xd8, 0x40, 0xe1, 0x4f, 0x31, + 0x80, 0xc7, 0x04, 0xa3, 0xb8, 0x04, 0xe5, 0x54, 0x31, 0x80, 0xaa, 0x04, + 0x45, 0x10, 0x9d, 0x4e, 0x31, 0x00, 0xe9, 0x63, 0x31, 0x80, 0x98, 0x04, + 0xab, 0xe4, 0x03, 0x45, 0xf8, 0xdd, 0x41, 0x31, 0x80, 0xc5, 0x03, 0x45, + 0x66, 0xde, 0x34, 0x31, 0x80, 0x9c, 0x03, 0xef, 0x57, 0x31, 0x80, 0x92, + 0x03, 0xb0, 0xc8, 0x02, 0x45, 0xb0, 0xdf, 0x39, 0x31, 0x80, 0xef, 0x01, + 0xb3, 0x8f, 0x01, 0xb4, 0x80, 0x01, 0xf5, 0x5c, 0x31, 0x00, 0xb7, 0x64, + 0xb9, 0x01, 0xff, 0xe1, 0x51, 0x31, 0x80, 0x58, 0xe5, 0x56, 0x31, 0x80, + 0x32, 0xe9, 0x62, 0x31, 0x00, 0xef, 0x5b, 0x31, 0x80, 0x17, 0xf5, 0x60, + 0x31, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xe9, 0x8c, 0x31, 0x00, 0x42, 0x4d, + 0x00, 0x8b, 0x31, 0xc0, 0x00, 0xef, 0x8a, 0x31, 0x40, 0x8d, 0x01, 0xff, + 0xe9, 0x89, 0x31, 0x00, 0x42, 0x20, 0x20, 0x87, 0x31, 0xc0, 0x00, 0xe5, + 0x88, 0x31, 0x40, 0xef, 0x55, 0x31, 0x80, 0x16, 0x46, 0xe3, 0xc2, 0x81, + 0x31, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x47, 0x51, 0xca, 0x83, 0x31, 0x00, + 0x44, 0xf0, 0xb5, 0x82, 0x31, 0x40, 0x48, 0x0d, 0x9d, 0x86, 0x31, 0x40, + 0xe5, 0x52, 0x31, 0x40, 0xe1, 0x58, 0x31, 0x80, 0x0d, 0xe5, 0x5e, 0x31, + 0x80, 0x04, 0xe9, 0x5f, 0x31, 0x40, 0xef, 0x5d, 0x31, 0x40, 0xe5, 0x59, + 0x31, 0x40, 0x46, 0x3c, 0xcc, 0x4c, 0x31, 0x00, 0x45, 0xdf, 0xc3, 0x37, + 0x31, 0x40, 0x43, 0x54, 0x3d, 0x45, 0x31, 0x80, 0x35, 0x04, 0xce, 0x29, + 0x01, 0xff, 0x45, 0xab, 0xda, 0x49, 0x31, 0x00, 0x45, 0x10, 0x9d, 0x85, + 0x31, 0x00, 0x45, 0x27, 0xc2, 0x80, 0x31, 0x00, 0x46, 0xb2, 0x9a, 0x32, + 0x31, 0x00, 0x45, 0x66, 0xde, 0x65, 0x31, 0x00, 0x45, 0xc2, 0x7d, 0x43, + 0x31, 0x00, 0x44, 0xf0, 0xb5, 0x46, 0x31, 0x00, 0x46, 0xde, 0xc3, 0x38, + 0x31, 0x40, 0x8d, 0x01, 0xff, 0x45, 0xab, 0xda, 0x7e, 0x31, 0x00, 0x46, + 0xb2, 0x9a, 0x7a, 0x31, 0x00, 0x45, 0x66, 0xde, 0x7b, 0x31, 0x00, 0x45, + 0xc2, 0x7d, 0x7d, 0x31, 0x00, 0x46, 0xde, 0xc3, 0x7c, 0x31, 0x40, 0x8d, + 0x01, 0xff, 0x45, 0x10, 0x9d, 0x40, 0x31, 0x00, 0x46, 0xb2, 0x9a, 0x3a, + 0x31, 0x80, 0x3b, 0x45, 0xf8, 0xdd, 0x3b, 0x31, 0x00, 0xb0, 0x1a, 0x44, + 0xf0, 0xb5, 0x3d, 0x31, 0x00, 0xb4, 0x06, 0x4b, 0x0a, 0x9d, 0x6d, 0x31, + 0x40, 0x46, 0x3c, 0xcc, 0x3e, 0x31, 0x00, 0x45, 0xdf, 0xc3, 0x6a, 0x31, + 0x40, 0x46, 0x52, 0xca, 0x6c, 0x31, 0x00, 0x46, 0x43, 0xb9, 0x3f, 0x31, + 0x00, 0x44, 0xc3, 0x7d, 0x3c, 0x31, 0xc0, 0x00, 0x45, 0x77, 0xd7, 0x6b, + 0x31, 0x40, 0x45, 0x77, 0xd7, 0x69, 0x31, 0x40, 0x46, 0x52, 0xca, 0x7f, + 0x31, 0x00, 0x46, 0x43, 0xb9, 0x4d, 0x31, 0x00, 0x44, 0xc3, 0x7d, 0x42, + 0x31, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x45, 0xab, 0xda, 0x76, 0x31, 0x00, + 0x46, 0xb2, 0x9a, 0x72, 0x31, 0x00, 0x44, 0xf0, 0xb5, 0x44, 0x31, 0x80, + 0x0f, 0xb4, 0x01, 0xff, 0x46, 0x3c, 0xcc, 0x77, 0x31, 0x00, 0x45, 0xdf, + 0xc3, 0x73, 0x31, 0x40, 0x8d, 0x01, 0xff, 0x46, 0xb2, 0x9a, 0x74, 0x31, + 0x00, 0x46, 0xde, 0xc3, 0x75, 0x31, 0x40, 0xe5, 0x5a, 0x31, 0x40, 0x8d, + 0x01, 0xff, 0x45, 0xab, 0xda, 0x35, 0x31, 0x00, 0x45, 0x10, 0x9d, 0x36, + 0x31, 0x00, 0x47, 0x51, 0xca, 0x68, 0x31, 0x00, 0x44, 0xf0, 0xb5, 0x67, + 0x31, 0x00, 0x46, 0xde, 0xc3, 0x66, 0x31, 0x40, 0x8d, 0x01, 0xff, 0xb0, + 0x06, 0x44, 0xf0, 0xb5, 0x6f, 0x31, 0x40, 0x46, 0x52, 0xca, 0x70, 0x31, + 0x00, 0x44, 0xc3, 0x7d, 0x6e, 0x31, 0x40, 0x07, 0xbb, 0x7d, 0x13, 0x46, + 0x3b, 0xb9, 0x4b, 0x31, 0x00, 0x45, 0xb3, 0x9a, 0x31, 0x31, 0xc0, 0x00, + 0x45, 0x77, 0xd7, 0x33, 0x31, 0x40, 0x45, 0xf8, 0xdd, 0x71, 0x31, 0x00, + 0xb0, 0x06, 0x4a, 0x94, 0xa8, 0x79, 0x31, 0x40, 0x46, 0x43, 0xb9, 0x84, + 0x31, 0x00, 0x44, 0xc3, 0x7d, 0x78, 0x31, 0x40, 0x44, 0x28, 0xc2, 0x47, + 0x31, 0x40, 0xef, 0x53, 0x31, 0x00, 0xf5, 0x61, 0x31, 0x40, 0x46, 0xdd, + 0xc5, 0x4a, 0x31, 0x00, 0x44, 0xde, 0xc5, 0x48, 0x31, 0x40, 0xe5, 0x50, + 0x31, 0x00, 0x44, 0x90, 0xa8, 0x8d, 0x31, 0xc0, 0x00, 0xe5, 0x8e, 0x31, + 0x40, 0x09, 0xfc, 0xb3, 0xfb, 0x03, 0x09, 0xd5, 0xb6, 0x01, 0xff, 0xe1, + 0x61, 0x11, 0x80, 0xbd, 0x03, 0xe5, 0x66, 0x11, 0x80, 0x80, 0x03, 0x46, + 0xa1, 0x7b, 0x60, 0x11, 0x00, 0xe9, 0x75, 0x11, 0x80, 0xaa, 0x02, 0xef, + 0x69, 0x11, 0x80, 0xf1, 0x01, 0x4a, 0x8a, 0xa8, 0xa2, 0x11, 0x00, 0xf5, + 0x6e, 0x11, 0x80, 0xbe, 0x01, 0xb7, 0xa5, 0x01, 0xb9, 0x01, 0xff, 0xe1, + 0x63, 0x11, 0x80, 0x88, 0x01, 0xe5, 0x68, 0x11, 0x80, 0x6d, 0xe9, 0x74, + 0x11, 0x80, 0x62, 0xef, 0x6d, 0x11, 0x80, 0x31, 0xf5, 0x72, 0x11, 0xc0, + 0x00, 0x8d, 0x01, 0xff, 0xe1, 0x8e, 0x11, 0x80, 0x20, 0xe5, 0x90, 0x11, + 0x80, 0x17, 0xe9, 0x94, 0x11, 0x00, 0xef, 0xb8, 0xd7, 0x00, 0xf5, 0x93, + 0x11, 0x00, 0x42, 0x4d, 0x00, 0x92, 0x11, 0xc0, 0x00, 0xef, 0x91, 0x11, + 0x40, 0xef, 0x8f, 0x11, 0x40, 0xe5, 0xb7, 0xd7, 0x40, 0x8d, 0x01, 0xff, + 0xe1, 0xb2, 0xd7, 0x80, 0x20, 0x42, 0x22, 0x0a, 0xb4, 0xd7, 0x00, 0xe9, + 0x88, 0x11, 0x00, 0xef, 0x87, 0x11, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x84, + 0x11, 0x80, 0x06, 0x42, 0x22, 0x0a, 0x86, 0x11, 0x40, 0xe5, 0x85, 0x11, + 0x40, 0xe5, 0xb3, 0xd7, 0x40, 0x42, 0x95, 0x07, 0x97, 0x11, 0x40, 0xef, + 0x67, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xef, 0x7d, 0x11, 0x00, 0xf5, + 0x7e, 0x11, 0x00, 0x42, 0x20, 0x20, 0xa5, 0x11, 0x40, 0x8d, 0x04, 0xe5, + 0x64, 0x11, 0x40, 0xef, 0x78, 0x11, 0x00, 0xf5, 0xa4, 0x11, 0x00, 0x42, + 0x4e, 0x42, 0x79, 0x11, 0x40, 0xe1, 0x6a, 0x11, 0x80, 0x0d, 0xe5, 0x70, + 0x11, 0x80, 0x04, 0xe9, 0x71, 0x11, 0x40, 0xef, 0x6f, 0x11, 0x40, 0xe5, + 0x6b, 0x11, 0x40, 0x8d, 0x01, 0xff, 0xe1, 0x89, 0x11, 0x80, 0x1b, 0x45, + 0x73, 0xdb, 0x8b, 0x11, 0x00, 0x43, 0x3a, 0xe9, 0xb6, 0xd7, 0x00, 0xf5, + 0x8d, 0x11, 0x00, 0x42, 0x4d, 0x00, 0x8c, 0x11, 0xc0, 0x00, 0xef, 0xb5, + 0xd7, 0x40, 0xe5, 0x8a, 0x11, 0x40, 0x8d, 0x04, 0xe5, 0x6c, 0x11, 0x40, + 0xe5, 0x80, 0x11, 0x80, 0x24, 0xef, 0x82, 0x11, 0x80, 0x19, 0xf5, 0x83, + 0x11, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0xa6, 0x11, 0x80, 0x09, 0xe5, 0x81, + 0x11, 0xc0, 0x00, 0xef, 0xb0, 0xd7, 0x40, 0xe5, 0xa7, 0x11, 0x40, 0x42, + 0xed, 0x05, 0xb1, 0xd7, 0x40, 0xef, 0x7f, 0x11, 0x40, 0x8d, 0x01, 0xff, + 0xe1, 0x98, 0x11, 0x80, 0x3c, 0x42, 0x97, 0x02, 0x9c, 0x11, 0x00, 0xe9, + 0xc4, 0xd7, 0x00, 0xef, 0x9a, 0x11, 0x80, 0x27, 0xf5, 0x9b, 0x11, 0x00, + 0xb9, 0x01, 0xff, 0xe1, 0x99, 0x11, 0x80, 0x11, 0xe5, 0xc0, 0xd7, 0x80, + 0x08, 0xef, 0xc2, 0xd7, 0x00, 0xf5, 0xc3, 0xd7, 0x40, 0xef, 0xbf, 0xd7, + 0x40, 0x42, 0xe7, 0x1e, 0xbd, 0xd7, 0x00, 0xe5, 0xbe, 0xd7, 0x40, 0x42, + 0xed, 0x05, 0xc1, 0xd7, 0x40, 0x44, 0x90, 0xa8, 0x9d, 0x11, 0x40, 0xef, + 0x65, 0x11, 0x80, 0x21, 0xf5, 0x73, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, + 0xe1, 0xb9, 0xd7, 0x00, 0xe5, 0xbb, 0xd7, 0x80, 0x08, 0xef, 0xbc, 0xd7, + 0x00, 0xf5, 0x95, 0x11, 0x40, 0xef, 0xba, 0xd7, 0x00, 0xf5, 0x96, 0x11, + 0x40, 0x8d, 0x01, 0xff, 0x42, 0x97, 0x02, 0x7c, 0x11, 0x00, 0xef, 0x7a, + 0x11, 0x00, 0xf5, 0x7b, 0x11, 0x40, 0x8d, 0x23, 0xe5, 0x62, 0x11, 0x00, + 0x44, 0x90, 0xa8, 0x9e, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xe1, 0xc5, + 0xd7, 0x00, 0xe5, 0xc6, 0xd7, 0x80, 0x08, 0xe9, 0xa1, 0x11, 0x00, 0xf5, + 0xa0, 0x11, 0x40, 0xef, 0x9f, 0x11, 0x40, 0x42, 0x97, 0x02, 0xa3, 0x11, + 0x00, 0xef, 0x76, 0x11, 0x00, 0xf5, 0x77, 0x11, 0x40, 0xa3, 0xd7, 0x07, + 0x45, 0x10, 0x9d, 0xc2, 0x11, 0x80, 0xb4, 0x07, 0x45, 0x27, 0xc2, 0xbc, + 0x11, 0x80, 0x95, 0x07, 0xab, 0xb3, 0x06, 0x45, 0xf8, 0xdd, 0xb7, 0x11, + 0x80, 0xd3, 0x05, 0x45, 0x66, 0xde, 0xab, 0x11, 0x80, 0x8d, 0x05, 0xb0, + 0x8e, 0x04, 0x45, 0xb0, 0xdf, 0xaf, 0x11, 0x80, 0xc0, 0x02, 0xb3, 0x89, + 0x01, 0xb4, 0x44, 0x02, 0x4d, 0x00, 0x01, 0xff, 0x49, 0x0c, 0x9d, 0xf9, + 0x11, 0x00, 0x46, 0xe3, 0xc2, 0xf0, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, + 0x45, 0x10, 0x9d, 0xf6, 0xd7, 0x00, 0xab, 0x1b, 0x45, 0xf8, 0xdd, 0xf5, + 0xd7, 0x00, 0x47, 0x51, 0xca, 0xf2, 0x11, 0x00, 0xb3, 0x01, 0xff, 0x43, + 0x54, 0x3d, 0xf1, 0x11, 0x00, 0x4a, 0xae, 0x9a, 0xed, 0x11, 0x40, 0x46, + 0x3b, 0xb9, 0xef, 0x11, 0x00, 0x45, 0xb3, 0x9a, 0xec, 0x11, 0x40, 0x46, + 0x3c, 0xcc, 0xc0, 0x11, 0x00, 0x45, 0xdf, 0xc3, 0xae, 0x11, 0xc0, 0x00, + 0x8d, 0x01, 0xff, 0xa3, 0x25, 0x46, 0xb2, 0x9a, 0xca, 0x11, 0x00, 0x45, + 0xc2, 0x7d, 0xcf, 0xd7, 0x00, 0x45, 0xb0, 0xdf, 0xcb, 0x11, 0x00, 0x44, + 0xf0, 0xb5, 0xd0, 0xd7, 0x80, 0x06, 0x47, 0x3b, 0xcc, 0xd4, 0xd7, 0x40, + 0x47, 0xba, 0xc3, 0xd1, 0xd7, 0x40, 0x46, 0xdd, 0xc5, 0xd3, 0xd7, 0x00, + 0x44, 0xde, 0xc5, 0xd2, 0xd7, 0x40, 0x43, 0x54, 0x3d, 0xba, 0x11, 0x80, + 0x5f, 0x04, 0xce, 0x29, 0x01, 0xff, 0x45, 0xab, 0xda, 0xf9, 0xd7, 0x00, + 0x45, 0x27, 0xc2, 0xee, 0x11, 0x00, 0x46, 0xb2, 0x9a, 0xa9, 0x11, 0x00, + 0x45, 0xf8, 0xdd, 0xe0, 0xd7, 0x00, 0x45, 0x66, 0xde, 0xff, 0x11, 0x00, + 0x45, 0xc2, 0x7d, 0xe6, 0xd7, 0x00, 0x45, 0xb0, 0xdf, 0xd0, 0x11, 0x80, + 0x29, 0x44, 0xf0, 0xb5, 0xbb, 0x11, 0x80, 0x13, 0x46, 0xde, 0xc3, 0xcd, + 0xd7, 0x80, 0x06, 0x48, 0xe1, 0xc2, 0xee, 0x11, 0x40, 0x46, 0x3d, 0xce, + 0xce, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x46, 0xb2, 0x9a, 0xec, 0xd7, 0x00, + 0x46, 0xde, 0xc3, 0xed, 0xd7, 0x40, 0x48, 0x39, 0xb9, 0xd7, 0xd7, 0x40, + 0x8d, 0x01, 0xff, 0xa3, 0x3d, 0x45, 0x10, 0x9d, 0xf2, 0xd7, 0x00, 0xab, + 0x29, 0x45, 0xf8, 0xdd, 0xea, 0xd7, 0x00, 0xb0, 0x15, 0x45, 0xb0, 0xdf, + 0xe9, 0x11, 0x00, 0xb4, 0x01, 0xff, 0x46, 0x3c, 0xcc, 0xf1, 0xd7, 0x00, + 0x45, 0xdf, 0xc3, 0xe8, 0x11, 0x40, 0x46, 0x52, 0xca, 0xee, 0xd7, 0x00, + 0x44, 0xc3, 0x7d, 0xea, 0x11, 0x40, 0x4c, 0xbb, 0x7d, 0xeb, 0xd7, 0x00, + 0x45, 0xb3, 0x9a, 0xe7, 0x11, 0x40, 0x46, 0xdd, 0xc5, 0xf0, 0xd7, 0x00, + 0x44, 0xde, 0xc5, 0xef, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x10, 0x9d, + 0xb6, 0x11, 0x00, 0xab, 0x98, 0x01, 0x45, 0xf8, 0xdd, 0xb1, 0x11, 0x80, + 0x7c, 0x45, 0x66, 0xde, 0xcd, 0x11, 0x00, 0xb0, 0x46, 0xb3, 0x2d, 0xb4, + 0x18, 0x02, 0x4d, 0x00, 0x01, 0xff, 0x49, 0x0c, 0x9d, 0xd9, 0x11, 0x80, + 0x06, 0x46, 0xe3, 0xc2, 0xdb, 0xd7, 0x40, 0x46, 0x31, 0xce, 0xdc, 0xd7, + 0x40, 0x46, 0x3c, 0xcc, 0xb4, 0x11, 0x00, 0x45, 0xdf, 0xc3, 0xce, 0x11, + 0xc0, 0x00, 0x46, 0x31, 0xce, 0xcf, 0x11, 0x40, 0x43, 0x54, 0x3d, 0xb3, + 0x11, 0x00, 0x04, 0xce, 0x29, 0x01, 0xff, 0x46, 0xb2, 0x9a, 0xd5, 0xd7, + 0x00, 0x44, 0xf0, 0xb5, 0xd6, 0x11, 0x40, 0x46, 0x52, 0xca, 0xd7, 0x11, + 0x00, 0x46, 0x43, 0xb9, 0xb5, 0x11, 0x00, 0x44, 0xc3, 0x7d, 0xb2, 0x11, + 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x45, 0x10, 0x9d, 0xd4, 0x11, 0x00, 0x47, + 0x42, 0xb9, 0xda, 0xd7, 0x00, 0x44, 0xf0, 0xb5, 0xd3, 0x11, 0x00, 0x46, + 0xde, 0xc3, 0xd9, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x10, 0x9d, 0xd8, + 0xd7, 0x00, 0x46, 0xb2, 0x9a, 0xd1, 0x11, 0x00, 0x44, 0xf0, 0xb5, 0xd2, + 0x11, 0x40, 0x4c, 0xbb, 0x7d, 0xd5, 0x11, 0x00, 0x46, 0x3b, 0xb9, 0xd8, + 0x11, 0x00, 0x45, 0xb3, 0x9a, 0xb0, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, + 0x45, 0x10, 0x9d, 0xd6, 0xd7, 0x00, 0x44, 0xf0, 0xb5, 0xcc, 0x11, 0x40, + 0x46, 0x52, 0xca, 0xeb, 0x11, 0x80, 0x66, 0x46, 0x43, 0xb9, 0xc1, 0x11, + 0x80, 0x4a, 0x44, 0xc3, 0x7d, 0xb8, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, + 0xa3, 0x32, 0x45, 0x10, 0x9d, 0xe5, 0x11, 0x00, 0x45, 0xf8, 0xdd, 0xe5, + 0xd7, 0x00, 0x47, 0x42, 0xb9, 0xe4, 0x11, 0x00, 0x45, 0xb0, 0xdf, 0xe3, + 0x11, 0x80, 0x13, 0x44, 0xf0, 0xb5, 0xb9, 0x11, 0x80, 0x06, 0x46, 0xde, + 0xc3, 0xe3, 0xd7, 0x40, 0x47, 0xdd, 0xc3, 0xe7, 0xd7, 0x40, 0x48, 0x41, + 0xb9, 0xe4, 0xd7, 0x40, 0x46, 0xdd, 0xc5, 0xe9, 0xd7, 0x00, 0x44, 0xde, + 0xc5, 0xe8, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x45, 0xc2, 0x7d, 0xf3, 0x11, + 0x00, 0x44, 0xf0, 0xb5, 0xfa, 0xd7, 0x00, 0x47, 0x3b, 0xcc, 0xfb, 0xd7, + 0x40, 0x8d, 0x01, 0xff, 0x4d, 0xba, 0x7d, 0xf4, 0xd7, 0x00, 0x45, 0xc2, + 0x7d, 0xf3, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0xa3, 0x2d, 0x45, 0x10, 0x9d, + 0xad, 0x11, 0x00, 0x46, 0xb2, 0x9a, 0xc5, 0x11, 0x00, 0x47, 0x51, 0xca, + 0xc8, 0x11, 0x00, 0x45, 0xb0, 0xdf, 0xcb, 0xd7, 0x00, 0x44, 0xf0, 0xb5, + 0xc7, 0x11, 0x00, 0xb4, 0x01, 0xff, 0x46, 0x3c, 0xcc, 0xc9, 0x11, 0x00, + 0x45, 0xdf, 0xc3, 0xc6, 0x11, 0x40, 0x46, 0xdd, 0xc5, 0xcc, 0xd7, 0x00, + 0x44, 0xde, 0xc5, 0xac, 0x11, 0x40, 0x8d, 0x01, 0xff, 0xa3, 0x47, 0x45, + 0x10, 0x9d, 0xe1, 0x11, 0x00, 0x46, 0xb2, 0x9a, 0xda, 0x11, 0x00, 0x45, + 0x66, 0xde, 0xde, 0xd7, 0x00, 0xb0, 0x20, 0x45, 0xb0, 0xdf, 0xdb, 0x11, + 0x00, 0xb3, 0x01, 0xff, 0x43, 0x54, 0x3d, 0xdd, 0x11, 0x00, 0x04, 0xce, + 0x29, 0x01, 0xff, 0x45, 0x66, 0xde, 0xdf, 0xd7, 0x00, 0x44, 0xf0, 0xb5, + 0xde, 0x11, 0x40, 0x46, 0x52, 0xca, 0xdf, 0x11, 0x00, 0x44, 0xc3, 0x7d, + 0xdc, 0x11, 0xc0, 0x00, 0x45, 0x77, 0xd7, 0xe1, 0xd7, 0x40, 0x46, 0xdd, + 0xc5, 0xe0, 0x11, 0x00, 0x44, 0xde, 0xc5, 0xe2, 0xd7, 0x40, 0x07, 0xbb, + 0x7d, 0x41, 0x46, 0x3b, 0xb9, 0xbf, 0x11, 0x00, 0x45, 0xb3, 0x9a, 0xa8, + 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x47, 0xdc, 0xc5, 0xfc, 0x11, 0x00, + 0x45, 0x10, 0x9d, 0xfe, 0x11, 0x00, 0x47, 0x3a, 0xb9, 0xfd, 0x11, 0x00, + 0x45, 0x66, 0xde, 0xfa, 0x11, 0x00, 0x45, 0xc2, 0x7d, 0xfb, 0x11, 0x00, + 0x45, 0xb0, 0xdf, 0xc3, 0x11, 0x00, 0x44, 0xf0, 0xb5, 0xaa, 0x11, 0xc0, + 0x00, 0x47, 0xba, 0xc3, 0xc4, 0x11, 0x40, 0x45, 0xf8, 0xdd, 0xe2, 0x11, + 0x00, 0xb0, 0x06, 0x45, 0xb0, 0xdf, 0xdd, 0xd7, 0x40, 0x46, 0x43, 0xb9, + 0xf4, 0x11, 0x00, 0x44, 0xc3, 0x7d, 0xe6, 0x11, 0x40, 0x8d, 0x01, 0xff, + 0xab, 0x06, 0x4b, 0xad, 0x9a, 0xed, 0x11, 0x40, 0x46, 0x3b, 0xb9, 0xef, + 0x11, 0x00, 0x45, 0xb3, 0x9a, 0xec, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x45, + 0xf8, 0xdd, 0xf7, 0x11, 0x00, 0x45, 0x66, 0xde, 0xf5, 0x11, 0x00, 0x45, + 0xc2, 0x7d, 0xf8, 0x11, 0x00, 0x45, 0xb0, 0xdf, 0xf6, 0x11, 0x40, 0x46, + 0xdd, 0xc5, 0xbe, 0x11, 0x00, 0x44, 0xde, 0xc5, 0xbd, 0x11, 0xc0, 0x00, + 0x8d, 0x01, 0xff, 0x45, 0xc2, 0x7d, 0xf7, 0xd7, 0x00, 0x4a, 0x94, 0xa8, + 0xf8, 0xd7, 0x40, 0xa3, 0x83, 0x06, 0x46, 0xa1, 0x7b, 0x5f, 0x11, 0x00, + 0x45, 0x10, 0x9d, 0x12, 0x11, 0x80, 0xef, 0x05, 0x45, 0x27, 0xc2, 0x0b, + 0x11, 0x80, 0x95, 0x05, 0xab, 0xdb, 0x04, 0x45, 0xf8, 0xdd, 0x06, 0x11, + 0x80, 0xb8, 0x04, 0x45, 0x66, 0xde, 0x02, 0x11, 0x80, 0x89, 0x04, 0xb0, + 0xf0, 0x02, 0x45, 0xb0, 0xdf, 0x05, 0x11, 0x80, 0x8e, 0x02, 0xb3, 0x47, + 0xb4, 0x11, 0x02, 0x4d, 0x00, 0x01, 0xff, 0x49, 0x0c, 0x9d, 0x59, 0x11, + 0x00, 0x46, 0xe3, 0xc2, 0x4c, 0x11, 0x40, 0x46, 0x3c, 0xcc, 0x10, 0x11, + 0x00, 0x45, 0xdf, 0xc3, 0x03, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x45, + 0xab, 0xda, 0x63, 0xa9, 0x00, 0x46, 0xb2, 0x9a, 0x17, 0x11, 0x00, 0x45, + 0xf8, 0xdd, 0x60, 0xa9, 0x00, 0x45, 0xc2, 0x7d, 0x61, 0xa9, 0x00, 0x45, + 0xb0, 0xdf, 0x5e, 0x11, 0x00, 0x44, 0xf0, 0xb5, 0x62, 0xa9, 0x40, 0x43, + 0x54, 0x3d, 0x09, 0x11, 0x80, 0x57, 0x04, 0xce, 0x29, 0x01, 0xff, 0x45, + 0xab, 0xda, 0x0d, 0x11, 0x80, 0x45, 0x45, 0x10, 0x9d, 0x58, 0x11, 0x00, + 0x45, 0x27, 0xc2, 0x47, 0x11, 0x00, 0x46, 0xb2, 0x9a, 0x01, 0x11, 0x00, + 0x45, 0x66, 0xde, 0x14, 0x11, 0x00, 0x45, 0xc2, 0x7d, 0x08, 0x11, 0x00, + 0x45, 0xb0, 0xdf, 0x19, 0x11, 0x00, 0x44, 0xf0, 0xb5, 0x0a, 0x11, 0x80, + 0x14, 0xb4, 0x06, 0x4b, 0x0a, 0x9d, 0x7c, 0xa9, 0x40, 0x46, 0x3c, 0xcc, + 0x79, 0xa9, 0x00, 0x45, 0xdf, 0xc3, 0x04, 0x11, 0x40, 0x46, 0x3d, 0xce, + 0x75, 0xa9, 0x40, 0x46, 0x31, 0xce, 0x78, 0xa9, 0x40, 0x8d, 0x01, 0xff, + 0xa3, 0x56, 0x45, 0x10, 0x9d, 0x3b, 0x11, 0x00, 0x45, 0x27, 0xc2, 0x35, + 0x11, 0x00, 0xab, 0x3c, 0x45, 0xf8, 0xdd, 0x31, 0x11, 0x00, 0x45, 0x66, + 0xde, 0x2e, 0x11, 0x00, 0xb0, 0x1b, 0x45, 0xb0, 0xdf, 0x30, 0x11, 0x00, + 0x49, 0xeb, 0xb5, 0x34, 0x11, 0x00, 0xb4, 0x01, 0xff, 0x46, 0x3c, 0xcc, + 0x39, 0x11, 0x00, 0x45, 0xdf, 0xc3, 0x2f, 0x11, 0x40, 0x46, 0x43, 0xb9, + 0x3a, 0x11, 0x00, 0x44, 0xc3, 0x7d, 0x32, 0x11, 0xc0, 0x00, 0x47, 0xba, + 0xc3, 0x33, 0x11, 0x40, 0x46, 0x3b, 0xb9, 0x38, 0x11, 0x00, 0x45, 0xb3, + 0x9a, 0x2d, 0x11, 0x40, 0x46, 0xdd, 0xc5, 0x37, 0x11, 0x00, 0x44, 0xde, + 0xc5, 0x36, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x45, 0xab, 0xda, 0x6d, 0xa9, + 0x00, 0x45, 0x10, 0x9d, 0x1a, 0x11, 0x00, 0xab, 0x37, 0x45, 0xf8, 0xdd, + 0x68, 0xa9, 0x00, 0x45, 0x66, 0xde, 0x18, 0x11, 0x00, 0x45, 0xc2, 0x7d, + 0x69, 0xa9, 0x00, 0xb3, 0x06, 0x46, 0xde, 0xc3, 0x66, 0xa9, 0x40, 0x43, + 0x54, 0x3d, 0x6c, 0xa9, 0x00, 0x04, 0xce, 0x29, 0x01, 0xff, 0x46, 0xb2, + 0x9a, 0x65, 0xa9, 0x00, 0x45, 0xc2, 0x7d, 0x6a, 0xa9, 0x00, 0x46, 0xde, + 0xc3, 0x67, 0xa9, 0x40, 0x4c, 0xbb, 0x7d, 0x6b, 0xa9, 0x00, 0x46, 0x3b, + 0xb9, 0x6e, 0xa9, 0x00, 0x45, 0xb3, 0x9a, 0x64, 0xa9, 0x40, 0x46, 0x52, + 0xca, 0x40, 0x11, 0x00, 0x46, 0x43, 0xb9, 0x11, 0x11, 0x80, 0x7a, 0x44, + 0xc3, 0x7d, 0x07, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xa3, 0x62, 0x45, + 0x10, 0x9d, 0x74, 0xa9, 0x00, 0xab, 0x4e, 0x45, 0x66, 0xde, 0x1f, 0x11, + 0x00, 0x47, 0x42, 0xb9, 0x2a, 0x11, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, + 0x46, 0x3c, 0xcc, 0x29, 0x11, 0x00, 0x45, 0xdf, 0xc3, 0x20, 0x11, 0x40, + 0x43, 0x54, 0x3d, 0x21, 0x11, 0x80, 0x06, 0x48, 0xec, 0xb5, 0x25, 0x11, + 0x40, 0x8d, 0x01, 0xff, 0x45, 0xab, 0xda, 0x26, 0x11, 0x00, 0x46, 0xb2, + 0x9a, 0x22, 0x11, 0x00, 0x45, 0xc2, 0x7d, 0x24, 0x11, 0x00, 0xb4, 0x01, + 0xff, 0x46, 0x3c, 0xcc, 0x72, 0xa9, 0x00, 0x45, 0xdf, 0xc3, 0x23, 0x11, + 0x40, 0x46, 0x3b, 0xb9, 0x73, 0xa9, 0x00, 0x45, 0xb3, 0x9a, 0x1e, 0x11, + 0x40, 0x46, 0xdd, 0xc5, 0x28, 0x11, 0x00, 0x44, 0xde, 0xc5, 0x27, 0x11, + 0x40, 0x8d, 0x01, 0xff, 0x45, 0x10, 0x9d, 0x7a, 0xa9, 0x00, 0x45, 0xc2, + 0x7d, 0x56, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x45, 0xab, 0xda, 0x5c, 0x11, + 0x00, 0x45, 0x10, 0x9d, 0x5d, 0x11, 0x00, 0x46, 0xb2, 0x9a, 0x13, 0x11, + 0x00, 0x45, 0xc2, 0x7d, 0x16, 0x11, 0x00, 0x44, 0xf0, 0xb5, 0x5b, 0x11, + 0x00, 0x46, 0xde, 0xc3, 0x15, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x46, 0xb2, + 0x9a, 0x6f, 0xa9, 0x00, 0x45, 0xc2, 0x7d, 0x1c, 0x11, 0x00, 0x44, 0xf0, + 0xb5, 0x71, 0xa9, 0x00, 0x46, 0xde, 0xc3, 0x70, 0xa9, 0x40, 0x07, 0xbb, + 0x7d, 0x13, 0x46, 0x3b, 0xb9, 0x0f, 0x11, 0x00, 0x45, 0xb3, 0x9a, 0x00, + 0x11, 0xc0, 0x00, 0x47, 0xdd, 0xc3, 0x5a, 0x11, 0x40, 0x45, 0xf8, 0xdd, + 0x1d, 0x11, 0x00, 0xb0, 0x0c, 0x45, 0xb0, 0xdf, 0x1b, 0x11, 0x00, 0x4a, + 0x94, 0xa8, 0x2c, 0x11, 0x40, 0x46, 0x43, 0xb9, 0x57, 0x11, 0x00, 0x44, + 0xc3, 0x7d, 0x2b, 0x11, 0x40, 0x8d, 0x01, 0xff, 0xa3, 0x41, 0x45, 0x10, + 0x9d, 0x77, 0xa9, 0x00, 0x46, 0xb2, 0x9a, 0x41, 0x11, 0x00, 0x45, 0xf8, + 0xdd, 0x43, 0x11, 0x00, 0xb0, 0x1b, 0x45, 0xb0, 0xdf, 0x76, 0xa9, 0x00, + 0x44, 0xf0, 0xb5, 0x45, 0x11, 0x00, 0xb4, 0x01, 0xff, 0x46, 0x3c, 0xcc, + 0x4a, 0x11, 0x00, 0x45, 0xdf, 0xc3, 0x42, 0x11, 0x40, 0x46, 0x52, 0xca, + 0x46, 0x11, 0x00, 0x46, 0x43, 0xb9, 0x4b, 0x11, 0x00, 0x44, 0xc3, 0x7d, + 0x44, 0x11, 0x40, 0x46, 0xdd, 0xc5, 0x49, 0x11, 0x00, 0x44, 0xde, 0xc5, + 0x48, 0x11, 0x40, 0x45, 0x77, 0xd7, 0x7b, 0xa9, 0x40, 0x0a, 0x8c, 0xa1, + 0x54, 0x02, 0x49, 0x00, 0x0d, 0x44, 0xde, 0xc5, 0x0c, 0x11, 0xc0, 0x00, + 0x46, 0x37, 0xce, 0x4d, 0x11, 0x40, 0x44, 0xdf, 0xc5, 0x0e, 0x11, 0x80, + 0x2d, 0x05, 0xd2, 0xe0, 0x01, 0xff, 0xa3, 0x1a, 0xb3, 0x01, 0xff, 0x43, + 0x54, 0x3d, 0x3c, 0x11, 0x00, 0x04, 0xce, 0x29, 0x01, 0xff, 0x45, 0xab, + 0xda, 0x4f, 0x11, 0x00, 0x44, 0xf0, 0xb5, 0x3d, 0x11, 0x40, 0x46, 0xdd, + 0xc5, 0x54, 0x11, 0x00, 0x44, 0xde, 0xc5, 0x4e, 0x11, 0x40, 0x8d, 0x01, + 0xff, 0x45, 0x10, 0x9d, 0x53, 0x11, 0x00, 0x47, 0x3a, 0xb9, 0x52, 0x11, + 0x40, 0xa3, 0x1a, 0xb3, 0x01, 0xff, 0x43, 0x54, 0x3d, 0x3e, 0x11, 0x00, + 0x04, 0xce, 0x29, 0x01, 0xff, 0x45, 0xab, 0xda, 0x51, 0x11, 0x00, 0x44, + 0xf0, 0xb5, 0x3f, 0x11, 0x40, 0x46, 0xdd, 0xc5, 0x55, 0x11, 0x00, 0x44, + 0xde, 0xc5, 0x50, 0x11, 0x40, 0x0c, 0x13, 0x84, 0x14, 0x02, 0x16, 0x00, + 0x06, 0x45, 0x8a, 0xc3, 0x1d, 0xf9, 0x41, 0xe7, 0x5c, 0xf4, 0x01, 0x42, + 0x3f, 0x06, 0x3e, 0xf9, 0x41, 0x5a, 0xac, 0x1c, 0x1e, 0xf9, 0x01, 0x58, + 0xb7, 0x25, 0xf0, 0xfa, 0x41, 0x46, 0x1d, 0xd0, 0x54, 0xf3, 0x01, 0x43, + 0xd0, 0x33, 0x28, 0xf5, 0x81, 0x0d, 0xb3, 0x01, 0xff, 0xe1, 0xac, 0xfa, + 0x01, 0x48, 0x81, 0xc1, 0x39, 0xf4, 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, + 0x44, 0xb5, 0xd4, 0x92, 0x26, 0x00, 0x46, 0x63, 0xd5, 0x2d, 0x26, 0x00, + 0x46, 0xd7, 0xd6, 0xe0, 0xf6, 0x41, 0x4c, 0xba, 0x0f, 0xed, 0xff, 0x00, + 0x4f, 0xae, 0x0a, 0xec, 0xff, 0x00, 0x54, 0x9d, 0x3d, 0xe8, 0xff, 0x00, + 0x07, 0x64, 0xc7, 0xda, 0x02, 0x0c, 0xe4, 0x1d, 0xc9, 0x02, 0x08, 0xb9, + 0xbd, 0x2c, 0x04, 0xc3, 0x00, 0x1c, 0x05, 0xc8, 0x00, 0x0c, 0x4d, 0x59, + 0x1e, 0xea, 0xff, 0x00, 0x4c, 0xaa, 0x0f, 0xee, 0xff, 0x40, 0x4f, 0xfa, + 0x62, 0x63, 0xff, 0x00, 0x4b, 0xb8, 0x02, 0xeb, 0xff, 0x40, 0x4f, 0xfa, + 0x62, 0x62, 0xff, 0x00, 0x4b, 0xb8, 0x02, 0xe9, 0xff, 0x40, 0x80, 0x06, + 0x5e, 0x9f, 0x10, 0x70, 0xff, 0x40, 0x07, 0xf1, 0x04, 0x12, 0x4a, 0xc7, + 0x40, 0x65, 0xff, 0x00, 0x56, 0x06, 0x33, 0x9f, 0xff, 0x00, 0x51, 0x0b, + 0x33, 0x9e, 0xff, 0x40, 0xe1, 0x71, 0xff, 0x00, 0xe5, 0x74, 0xff, 0x00, + 0xa8, 0xdc, 0x01, 0xe9, 0x72, 0xff, 0x00, 0xab, 0xc1, 0x01, 0xad, 0xaa, + 0x01, 0xee, 0x9d, 0xff, 0x80, 0x90, 0x01, 0xef, 0x75, 0xff, 0x00, 0xb2, + 0x76, 0xb3, 0x33, 0xb4, 0x1d, 0xf5, 0x73, 0xff, 0x00, 0xb7, 0x0f, 0xb9, + 0x01, 0xff, 0xe1, 0x94, 0xff, 0x00, 0xef, 0x96, 0xff, 0x00, 0xf5, 0x95, + 0xff, 0x40, 0xe1, 0x9c, 0xff, 0x00, 0xef, 0x66, 0xff, 0x40, 0xe1, 0x80, + 0xff, 0x00, 0xe5, 0x83, 0xff, 0x00, 0xe9, 0x81, 0xff, 0x00, 0xef, 0x84, + 0xff, 0x00, 0xf5, 0x82, 0xff, 0x40, 0xe1, 0x7b, 0xff, 0x00, 0xe5, 0x7e, + 0xff, 0x00, 0xe9, 0x7c, 0xff, 0x00, 0x05, 0x3d, 0x06, 0x08, 0xef, 0x7f, + 0xff, 0x00, 0xf5, 0x7d, 0xff, 0x40, 0xe1, 0x67, 0xff, 0x00, 0xe5, 0x6a, + 0xff, 0x00, 0xe9, 0x68, 0xff, 0x00, 0xef, 0x6b, 0xff, 0x00, 0x42, 0x5c, + 0x01, 0x6f, 0xff, 0x00, 0xf5, 0x69, 0xff, 0x00, 0xb9, 0x01, 0xff, 0xe1, + 0x6c, 0xff, 0x00, 0xef, 0x6e, 0xff, 0x00, 0xf5, 0x6d, 0xff, 0x40, 0xe1, + 0x97, 0xff, 0x00, 0xe5, 0x9a, 0xff, 0x00, 0xe9, 0x98, 0xff, 0x00, 0xef, + 0x9b, 0xff, 0x00, 0xf5, 0x99, 0xff, 0x40, 0xe1, 0x85, 0xff, 0x00, 0xe5, + 0x88, 0xff, 0x00, 0xe9, 0x86, 0xff, 0x00, 0xef, 0x89, 0xff, 0x00, 0xf5, + 0x87, 0xff, 0x40, 0xe1, 0x8f, 0xff, 0x00, 0xe5, 0x92, 0xff, 0x00, 0xe9, + 0x90, 0xff, 0x00, 0xef, 0x93, 0xff, 0x00, 0xf5, 0x91, 0xff, 0x40, 0xe1, + 0x76, 0xff, 0x00, 0xe5, 0x79, 0xff, 0x00, 0xe9, 0x77, 0xff, 0x00, 0xef, + 0x7a, 0xff, 0x00, 0xf5, 0x78, 0xff, 0x40, 0xe1, 0x8a, 0xff, 0x00, 0xe5, + 0x8d, 0xff, 0x00, 0xe9, 0x8b, 0xff, 0x00, 0xef, 0x8e, 0xff, 0x00, 0xf5, + 0x8c, 0xff, 0x40, 0x45, 0x18, 0x04, 0x64, 0xff, 0x00, 0x49, 0xa0, 0x14, + 0x61, 0xff, 0x40, 0x46, 0xa1, 0x7b, 0xa0, 0xff, 0x00, 0x07, 0xf1, 0x04, + 0x01, 0xff, 0xe1, 0xc2, 0xff, 0x80, 0xae, 0x02, 0xa3, 0x9f, 0x02, 0xe5, + 0xc7, 0xff, 0x80, 0x91, 0x02, 0x45, 0x10, 0x9d, 0xbe, 0xff, 0x00, 0xe9, + 0xdc, 0xff, 0x80, 0xff, 0x01, 0xab, 0xe9, 0x01, 0x45, 0xf8, 0xdd, 0xb1, + 0xff, 0x00, 0x45, 0x66, 0xde, 0xa4, 0xff, 0x80, 0xcc, 0x01, 0xef, 0xcc, + 0xff, 0x80, 0xc2, 0x01, 0xb0, 0xac, 0x01, 0x45, 0xb0, 0xdf, 0xa9, 0xff, + 0x80, 0x76, 0xb3, 0x4b, 0xb4, 0x3d, 0xf5, 0xd3, 0xff, 0x00, 0xb7, 0x21, + 0xb9, 0x01, 0xff, 0xe1, 0xc4, 0xff, 0x80, 0x15, 0xe5, 0xcb, 0xff, 0x80, + 0x0c, 0xe9, 0xdb, 0xff, 0x00, 0xef, 0xd2, 0xff, 0x00, 0xf5, 0xd7, 0xff, + 0x40, 0xef, 0xca, 0xff, 0x40, 0xe5, 0xc5, 0xff, 0x40, 0xe1, 0xcd, 0xff, + 0x80, 0x0d, 0xe5, 0xd5, 0xff, 0x80, 0x04, 0xe9, 0xd6, 0xff, 0x40, 0xef, + 0xd4, 0xff, 0x40, 0xe5, 0xce, 0xff, 0x40, 0x46, 0x3c, 0xcc, 0xbc, 0xff, + 0x00, 0x45, 0xdf, 0xc3, 0xa7, 0xff, 0x40, 0x43, 0x54, 0x3d, 0xb5, 0xff, + 0x00, 0x04, 0xce, 0x29, 0x01, 0xff, 0x45, 0xab, 0xda, 0xb9, 0xff, 0x00, + 0x46, 0xb2, 0x9a, 0xa2, 0xff, 0x00, 0x45, 0xc2, 0x7d, 0xb3, 0xff, 0x00, + 0x44, 0xf0, 0xb5, 0xb6, 0xff, 0x00, 0x46, 0xde, 0xc3, 0xa8, 0xff, 0x40, + 0x8d, 0x01, 0xff, 0x45, 0x10, 0x9d, 0xb0, 0xff, 0x00, 0x46, 0xb2, 0x9a, + 0xaa, 0xff, 0x00, 0x45, 0xf8, 0xdd, 0xab, 0xff, 0x00, 0xb0, 0x0c, 0x44, + 0xf0, 0xb5, 0xad, 0xff, 0x00, 0x47, 0x3b, 0xcc, 0xae, 0xff, 0x40, 0x46, + 0x43, 0xb9, 0xaf, 0xff, 0x00, 0x44, 0xc3, 0x7d, 0xac, 0xff, 0x40, 0x46, + 0x43, 0xb9, 0xbd, 0xff, 0x00, 0x44, 0xc3, 0x7d, 0xb2, 0xff, 0xc0, 0x00, + 0x45, 0x77, 0xd7, 0xb4, 0xff, 0x40, 0xe5, 0xcf, 0xff, 0x40, 0x8d, 0x01, + 0xff, 0x45, 0xab, 0xda, 0xa5, 0xff, 0x00, 0x45, 0x10, 0x9d, 0xa6, 0xff, + 0x40, 0x46, 0x3b, 0xb9, 0xbb, 0xff, 0x00, 0x45, 0xb3, 0x9a, 0xa1, 0xff, + 0xc0, 0x00, 0x45, 0x77, 0xd7, 0xa3, 0xff, 0x40, 0x44, 0x28, 0xc2, 0xb7, + 0xff, 0x40, 0xef, 0xc6, 0xff, 0x00, 0xf5, 0xda, 0xff, 0x40, 0x46, 0xdd, + 0xc5, 0xba, 0xff, 0x00, 0x44, 0xde, 0xc5, 0xb8, 0xff, 0x40, 0xe5, 0xc3, + 0xff, 0x40, 0x80, 0x06, 0x43, 0xe4, 0x24, 0x87, 0xf4, 0x41, 0x44, 0xb5, + 0xd4, 0xae, 0xfa, 0x01, 0x45, 0x62, 0x47, 0x0a, 0x20, 0x40, 0xa1, 0xdf, + 0x3f, 0xa5, 0x83, 0x36, 0x44, 0x0c, 0x76, 0x7b, 0xf4, 0x01, 0xa9, 0xda, + 0x35, 0xac, 0xa4, 0x30, 0xaf, 0xbf, 0x2e, 0xb2, 0xe0, 0x0b, 0xb5, 0x01, + 0xff, 0x02, 0x17, 0x00, 0xcc, 0x0b, 0xa9, 0xbd, 0x0b, 0x07, 0x13, 0xc8, + 0x82, 0x07, 0x0c, 0x1b, 0x8b, 0xf8, 0x03, 0x07, 0x38, 0xcb, 0x01, 0xff, + 0xa1, 0xe4, 0x03, 0x06, 0xf4, 0x05, 0x9d, 0x03, 0x48, 0xf1, 0xbb, 0x74, + 0x0a, 0x00, 0x43, 0xa3, 0x09, 0x72, 0x0a, 0x00, 0x07, 0xf1, 0x04, 0x6f, + 0x05, 0xdb, 0x02, 0x3d, 0x45, 0x87, 0xe0, 0x70, 0x0a, 0x00, 0x43, 0x70, + 0x00, 0x73, 0x0a, 0x00, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xa1, 0x1e, 0x42, + 0x27, 0x01, 0x47, 0x0a, 0x00, 0xe9, 0x3f, 0x0a, 0x80, 0x0f, 0x42, 0x99, + 0x04, 0x4b, 0x0a, 0x00, 0xf5, 0x41, 0x0a, 0xc0, 0x00, 0xf5, 0x42, 0x0a, + 0x40, 0xe9, 0x40, 0x0a, 0x40, 0xe1, 0x3e, 0x0a, 0x00, 0xe9, 0x48, 0x0a, + 0x00, 0xf5, 0x4c, 0x0a, 0x40, 0x4a, 0xf8, 0x9e, 0x01, 0x0a, 0x00, 0x45, + 0xe9, 0x64, 0x02, 0x0a, 0x00, 0x45, 0xc0, 0x3a, 0x3c, 0x0a, 0x00, 0x45, + 0xf5, 0xe0, 0x51, 0x0a, 0x00, 0x02, 0x02, 0x00, 0x06, 0x46, 0xef, 0xd6, + 0x75, 0x0a, 0x40, 0x44, 0x49, 0x21, 0x4d, 0x0a, 0x00, 0x45, 0x7e, 0x46, + 0x03, 0x0a, 0x40, 0xe1, 0x05, 0x0a, 0x80, 0x8c, 0x02, 0xa2, 0xff, 0x01, + 0xa3, 0xf2, 0x01, 0xa4, 0xd9, 0x01, 0x42, 0x27, 0x01, 0x0f, 0x0a, 0x00, + 0x42, 0xed, 0x06, 0x5e, 0x0a, 0x00, 0xa7, 0xb9, 0x01, 0x42, 0x22, 0x00, + 0x39, 0x0a, 0x00, 0xe9, 0x07, 0x0a, 0x80, 0xa9, 0x01, 0xaa, 0x9c, 0x01, + 0xab, 0x88, 0x01, 0xac, 0x7c, 0x42, 0x6c, 0x00, 0x2e, 0x0a, 0x00, 0xae, + 0x5e, 0x42, 0x99, 0x04, 0x13, 0x0a, 0x00, 0xb0, 0x4c, 0xb2, 0x40, 0xb3, + 0x34, 0xb4, 0x1b, 0xf5, 0x09, 0x0a, 0x80, 0x12, 0x42, 0xb4, 0x09, 0x35, + 0x0a, 0x00, 0x42, 0x20, 0x20, 0x2f, 0x0a, 0x00, 0x42, 0x59, 0x00, 0x5b, + 0x0a, 0x40, 0xf5, 0x0a, 0x0a, 0x40, 0xe1, 0x24, 0x0a, 0x00, 0x42, 0x22, + 0x00, 0x25, 0x0a, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x1f, 0x0a, 0x00, 0x42, + 0x22, 0x00, 0x20, 0x0a, 0x40, 0xe1, 0x38, 0x0a, 0x00, 0x42, 0x22, 0x00, + 0x36, 0x0a, 0x40, 0xe1, 0x30, 0x0a, 0x00, 0x42, 0x71, 0x00, 0x5c, 0x0a, + 0x40, 0xe1, 0x2a, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x2b, 0x0a, 0x40, 0xe1, + 0x28, 0x0a, 0x00, 0x42, 0x24, 0x02, 0x19, 0x0a, 0x00, 0x42, 0x2f, 0x04, + 0x23, 0x0a, 0x00, 0x42, 0x20, 0x20, 0x1e, 0x0a, 0x40, 0xe1, 0x32, 0x0a, + 0x00, 0x42, 0x74, 0x00, 0x33, 0x0a, 0x40, 0xe1, 0x15, 0x0a, 0x00, 0xa8, + 0x01, 0xff, 0xe1, 0x16, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x59, 0x0a, 0x40, + 0xe1, 0x1c, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x1d, 0x0a, 0x40, 0xe9, 0x08, + 0x0a, 0x40, 0xe1, 0x17, 0x0a, 0x00, 0xa8, 0x01, 0xff, 0xe1, 0x18, 0x0a, + 0x00, 0x42, 0x22, 0x00, 0x5a, 0x0a, 0x40, 0xe1, 0x26, 0x0a, 0x00, 0xa4, + 0x06, 0x42, 0x22, 0x00, 0x27, 0x0a, 0x40, 0xe1, 0x21, 0x0a, 0x00, 0x42, + 0x22, 0x00, 0x22, 0x0a, 0x40, 0xe1, 0x1a, 0x0a, 0x00, 0x42, 0x22, 0x00, + 0x1b, 0x0a, 0x40, 0xe1, 0x2c, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x2d, 0x0a, + 0x40, 0xe1, 0x06, 0x0a, 0x00, 0xe9, 0x10, 0x0a, 0x00, 0xf5, 0x14, 0x0a, + 0x40, 0x45, 0xd1, 0x09, 0x6e, 0x0a, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, + 0x6f, 0x0a, 0x00, 0x43, 0xcd, 0x09, 0x67, 0x0a, 0x00, 0xb3, 0x14, 0xb4, + 0x06, 0x44, 0xf5, 0x1b, 0x66, 0x0a, 0x40, 0x44, 0x25, 0x01, 0x69, 0x0a, + 0x00, 0x42, 0x15, 0x02, 0x68, 0x0a, 0x40, 0x44, 0x96, 0x1b, 0x6d, 0x0a, + 0x00, 0x42, 0x30, 0x27, 0x6c, 0x0a, 0x40, 0x43, 0xd7, 0x04, 0x6b, 0x0a, + 0x00, 0x43, 0xfb, 0x05, 0x6a, 0x0a, 0x40, 0x50, 0x4a, 0x52, 0x76, 0x0a, + 0x00, 0x44, 0x9e, 0xe4, 0x71, 0x0a, 0x40, 0x06, 0xf4, 0x05, 0xbe, 0x02, + 0x07, 0xf1, 0x04, 0x50, 0x42, 0x19, 0x04, 0x98, 0x1d, 0x01, 0x05, 0xdb, + 0x02, 0x3a, 0xb6, 0x01, 0xff, 0x45, 0x48, 0x21, 0x97, 0x1d, 0x01, 0x0a, + 0x71, 0x70, 0x01, 0xff, 0xa1, 0x1e, 0x42, 0x27, 0x01, 0x90, 0x1d, 0x01, + 0xe9, 0x8b, 0x1d, 0x81, 0x0f, 0x42, 0x99, 0x04, 0x93, 0x1d, 0x01, 0xf5, + 0x8d, 0x1d, 0xc1, 0x00, 0xf5, 0x8e, 0x1d, 0x41, 0xe9, 0x8c, 0x1d, 0x41, + 0xe1, 0x8a, 0x1d, 0x01, 0xe9, 0x91, 0x1d, 0x01, 0xf5, 0x94, 0x1d, 0x41, + 0x48, 0x5b, 0x14, 0x95, 0x1d, 0x01, 0x47, 0x7c, 0x46, 0x96, 0x1d, 0x41, + 0xe1, 0x60, 0x1d, 0x81, 0xd8, 0x01, 0xa2, 0xcb, 0x01, 0xa3, 0xbe, 0x01, + 0xa4, 0xa5, 0x01, 0x42, 0x27, 0x01, 0x67, 0x1d, 0x01, 0xa7, 0x92, 0x01, + 0x42, 0x22, 0x00, 0x87, 0x1d, 0x01, 0xe9, 0x62, 0x1d, 0x81, 0x82, 0x01, + 0xaa, 0x76, 0xab, 0x6a, 0xac, 0x5e, 0x42, 0x6c, 0x00, 0x70, 0x1d, 0x01, + 0xae, 0x4c, 0x42, 0x99, 0x04, 0x6a, 0x1d, 0x01, 0xb0, 0x3a, 0x42, 0x71, + 0x00, 0x88, 0x1d, 0x01, 0x42, 0x45, 0x05, 0x89, 0x1d, 0x01, 0xb4, 0x15, + 0xf5, 0x64, 0x1d, 0x81, 0x0c, 0x42, 0xb4, 0x09, 0x6d, 0x1d, 0x01, 0x42, + 0x20, 0x20, 0x6c, 0x1d, 0x41, 0xf5, 0x65, 0x1d, 0x41, 0xe1, 0x73, 0x1d, + 0x01, 0x42, 0x22, 0x00, 0x74, 0x1d, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x7d, + 0x1d, 0x01, 0x42, 0x22, 0x00, 0x7e, 0x1d, 0x41, 0xe1, 0x85, 0x1d, 0x01, + 0x42, 0x22, 0x00, 0x86, 0x1d, 0x41, 0xe1, 0x7a, 0x1d, 0x01, 0x42, 0x24, + 0x02, 0x84, 0x1d, 0x41, 0xe1, 0x75, 0x1d, 0x01, 0x42, 0x74, 0x00, 0x7f, + 0x1d, 0x41, 0xe1, 0x71, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x72, 0x1d, 0x41, + 0xe1, 0x80, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x81, 0x1d, 0x41, 0xe9, 0x63, + 0x1d, 0x41, 0xe1, 0x76, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x77, 0x1d, 0x41, + 0xe1, 0x78, 0x1d, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x79, 0x1d, 0x41, + 0xe1, 0x82, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x83, 0x1d, 0x41, 0xe1, 0x7b, + 0x1d, 0x01, 0x42, 0x22, 0x00, 0x7c, 0x1d, 0x41, 0xe1, 0x6e, 0x1d, 0x01, + 0x42, 0x22, 0x00, 0x6f, 0x1d, 0x41, 0xe1, 0x61, 0x1d, 0x01, 0xe9, 0x68, + 0x1d, 0x01, 0xf5, 0x6b, 0x1d, 0x41, 0x45, 0xd1, 0x09, 0xa8, 0x1d, 0x01, + 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0xa9, 0x1d, 0x01, 0x43, 0xcd, 0x09, 0xa1, + 0x1d, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xa0, 0x1d, 0x41, + 0x44, 0x25, 0x01, 0xa3, 0x1d, 0x01, 0x42, 0x15, 0x02, 0xa2, 0x1d, 0x41, + 0x44, 0x96, 0x1b, 0xa7, 0x1d, 0x01, 0x42, 0x30, 0x27, 0xa6, 0x1d, 0x41, + 0x43, 0xd7, 0x04, 0xa5, 0x1d, 0x01, 0x43, 0xfb, 0x05, 0xa4, 0x1d, 0x41, + 0x51, 0x49, 0x52, 0xf0, 0x0a, 0x00, 0x06, 0xf4, 0x05, 0xe9, 0x03, 0x07, + 0xf1, 0x04, 0xc6, 0x01, 0x42, 0x19, 0x04, 0xd0, 0x0a, 0x00, 0x4a, 0x79, + 0x79, 0xf1, 0x0a, 0x00, 0x05, 0xdb, 0x02, 0x61, 0x06, 0x11, 0x35, 0x01, + 0xff, 0x07, 0xb2, 0xc5, 0x50, 0x05, 0xdb, 0x02, 0x01, 0xff, 0xa1, 0x3d, + 0x07, 0xb2, 0xc5, 0x31, 0xe5, 0xc7, 0x0a, 0x00, 0xe9, 0xbf, 0x0a, 0x80, + 0x24, 0xef, 0xcb, 0x0a, 0x00, 0xf5, 0xc1, 0x0a, 0x80, 0x17, 0x08, 0x92, + 0xb7, 0x01, 0xff, 0xec, 0xe2, 0x0a, 0x80, 0x09, 0xf2, 0xc3, 0x0a, 0xc0, + 0x00, 0xf2, 0xc4, 0x0a, 0x40, 0xec, 0xe3, 0x0a, 0x40, 0xf5, 0xc2, 0x0a, + 0x40, 0xe9, 0xc0, 0x0a, 0x40, 0xe5, 0xc5, 0x0a, 0x00, 0xef, 0xc9, 0x0a, + 0x40, 0xe1, 0xbe, 0x0a, 0x00, 0xe9, 0xc8, 0x0a, 0x00, 0xf5, 0xcc, 0x0a, + 0x40, 0xe5, 0x8d, 0x0a, 0x00, 0xef, 0x91, 0x0a, 0x40, 0xa1, 0x47, 0xa3, + 0x39, 0x46, 0x83, 0xd3, 0xfc, 0x0a, 0x00, 0x45, 0xc0, 0x3a, 0xbc, 0x0a, + 0x00, 0xb3, 0x1f, 0xb4, 0x11, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x49, + 0x21, 0xcd, 0x0a, 0x00, 0x45, 0x7e, 0x46, 0x83, 0x0a, 0x40, 0x54, 0x3d, + 0x3e, 0xfd, 0x0a, 0x00, 0x55, 0xb6, 0x3a, 0xff, 0x0a, 0x40, 0x45, 0x2c, + 0xdc, 0xfb, 0x0a, 0x00, 0x44, 0x60, 0xe0, 0xfa, 0x0a, 0x40, 0x4a, 0x3c, + 0x21, 0x81, 0x0a, 0x00, 0x51, 0xba, 0x3a, 0xfe, 0x0a, 0x40, 0x47, 0x5c, + 0x14, 0x82, 0x0a, 0x00, 0x47, 0x41, 0x81, 0xbd, 0x0a, 0x40, 0xe1, 0x85, + 0x0a, 0x80, 0x8c, 0x02, 0xa2, 0xff, 0x01, 0xa3, 0xf2, 0x01, 0xa4, 0xd9, + 0x01, 0xe5, 0x8f, 0x0a, 0x00, 0xa7, 0xc8, 0x01, 0x42, 0x22, 0x00, 0xb9, + 0x0a, 0x00, 0xe9, 0x87, 0x0a, 0x80, 0xb8, 0x01, 0xaa, 0xab, 0x01, 0xab, + 0x9e, 0x01, 0xac, 0x91, 0x01, 0x42, 0x6c, 0x00, 0xae, 0x0a, 0x00, 0xae, + 0x73, 0xef, 0x93, 0x0a, 0x00, 0xb0, 0x63, 0x42, 0x71, 0x00, 0xb0, 0x0a, + 0x00, 0xb3, 0x4b, 0xb4, 0x32, 0xf5, 0x89, 0x0a, 0x80, 0x29, 0xb6, 0x0c, + 0x42, 0x20, 0x20, 0xaf, 0x0a, 0x00, 0x43, 0x3b, 0xb7, 0xf9, 0x0a, 0x40, + 0xe1, 0xb5, 0x0a, 0x00, 0x07, 0x93, 0xb7, 0x01, 0xff, 0xec, 0x8c, 0x0a, + 0x80, 0x09, 0xf2, 0x8b, 0x0a, 0xc0, 0x00, 0xf2, 0xe0, 0x0a, 0x40, 0xec, + 0xe1, 0x0a, 0x40, 0xf5, 0x8a, 0x0a, 0x40, 0xe1, 0xa4, 0x0a, 0x00, 0x42, + 0x22, 0x00, 0xa5, 0x0a, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x9f, 0x0a, 0x00, + 0x42, 0x22, 0x00, 0xa0, 0x0a, 0x40, 0xe1, 0xb8, 0x0a, 0x00, 0x42, 0x22, + 0x00, 0xb6, 0x0a, 0x00, 0x42, 0x45, 0x05, 0xb7, 0x0a, 0x40, 0xe1, 0xaa, + 0x0a, 0x00, 0x42, 0x22, 0x00, 0xab, 0x0a, 0x40, 0xe1, 0xa8, 0x0a, 0x00, + 0x42, 0x24, 0x02, 0x99, 0x0a, 0x00, 0x42, 0x2f, 0x04, 0xa3, 0x0a, 0x00, + 0x42, 0x20, 0x20, 0x9e, 0x0a, 0x40, 0xe1, 0xb2, 0x0a, 0x00, 0x42, 0x74, + 0x00, 0xb3, 0x0a, 0x40, 0xe1, 0x95, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x96, + 0x0a, 0x40, 0xe1, 0x9c, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x9d, 0x0a, 0x40, + 0xe9, 0x88, 0x0a, 0x40, 0xe1, 0x97, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x98, + 0x0a, 0x40, 0xe1, 0xa6, 0x0a, 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa7, + 0x0a, 0x40, 0xe1, 0xa1, 0x0a, 0x00, 0x42, 0x22, 0x00, 0xa2, 0x0a, 0x40, + 0xe1, 0x9a, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x9b, 0x0a, 0x40, 0xe1, 0xac, + 0x0a, 0x00, 0x42, 0x22, 0x00, 0xad, 0x0a, 0x40, 0xe1, 0x86, 0x0a, 0x00, + 0xe9, 0x90, 0x0a, 0x00, 0xf5, 0x94, 0x0a, 0x40, 0x45, 0xd1, 0x09, 0xee, + 0x0a, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0xef, 0x0a, 0x00, 0x43, 0xcd, + 0x09, 0xe7, 0x0a, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xe6, + 0x0a, 0x40, 0x44, 0x25, 0x01, 0xe9, 0x0a, 0x00, 0x42, 0x15, 0x02, 0xe8, + 0x0a, 0x40, 0x44, 0x96, 0x1b, 0xed, 0x0a, 0x00, 0x42, 0x30, 0x27, 0xec, + 0x0a, 0x40, 0x43, 0xd7, 0x04, 0xeb, 0x0a, 0x00, 0x43, 0xfb, 0x05, 0xea, + 0x0a, 0x40, 0x46, 0xa7, 0xd0, 0xae, 0xf9, 0x01, 0x43, 0x8c, 0x11, 0xb8, + 0xf3, 0x41, 0x48, 0x07, 0x94, 0xb2, 0x20, 0x00, 0x45, 0x0f, 0xdb, 0x82, + 0xf4, 0x41, 0xa1, 0x81, 0x1f, 0xa5, 0x4d, 0xa9, 0x19, 0xaf, 0x01, 0xff, + 0x03, 0x9c, 0x13, 0x06, 0x4a, 0xa6, 0xaa, 0x97, 0xf4, 0x41, 0x44, 0xb9, + 0x00, 0xd2, 0x2b, 0x00, 0x49, 0x70, 0x1e, 0x1d, 0x00, 0x40, 0x4b, 0x27, + 0x97, 0x2c, 0xf6, 0x01, 0x06, 0x41, 0x9a, 0x01, 0xff, 0x5a, 0xfa, 0x1c, + 0x38, 0xf6, 0x01, 0x44, 0xed, 0x06, 0x00, 0xf6, 0xc1, 0x00, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x5b, 0x96, 0x1a, 0x2a, 0xf9, 0x01, 0xb3, 0x01, 0xff, + 0x4b, 0x09, 0x1d, 0x01, 0xf6, 0x01, 0x48, 0x79, 0xc1, 0x29, 0xf9, 0x41, + 0x0a, 0x8a, 0x00, 0xce, 0x1c, 0xa5, 0x06, 0x47, 0x92, 0xcd, 0x76, 0xfa, + 0x41, 0x02, 0xbc, 0x00, 0x1d, 0x02, 0x92, 0x00, 0x01, 0xff, 0x45, 0xc0, + 0xd9, 0x4f, 0xf3, 0x01, 0x44, 0x66, 0xe4, 0xd7, 0xf4, 0x01, 0x45, 0x5e, + 0x1f, 0x9a, 0xf4, 0x01, 0x45, 0xfb, 0xdf, 0x57, 0xf9, 0x41, 0xa1, 0xde, + 0x18, 0x4b, 0xa7, 0x91, 0xd0, 0x03, 0x00, 0x08, 0xe9, 0x04, 0xbe, 0x10, + 0xa4, 0xf7, 0x0f, 0xa6, 0xe8, 0x0f, 0x4b, 0x67, 0x94, 0x88, 0x01, 0x01, + 0x02, 0x9e, 0x01, 0xb8, 0x0e, 0xab, 0x9b, 0x0e, 0xac, 0xa9, 0x0d, 0xad, + 0x9a, 0x0d, 0x4c, 0x38, 0x57, 0x74, 0x03, 0x00, 0xaf, 0xe8, 0x0c, 0xb0, + 0xaf, 0x0c, 0x4d, 0xbd, 0x30, 0x7e, 0x03, 0x00, 0xb2, 0x8f, 0x0c, 0xb3, + 0xf4, 0x01, 0xb4, 0xb5, 0x01, 0x0d, 0x3f, 0x82, 0x9e, 0x01, 0xb6, 0x1a, + 0x4b, 0xe9, 0x9c, 0x85, 0x01, 0x01, 0xb9, 0x06, 0x49, 0x4f, 0xb8, 0x8a, + 0x01, 0x41, 0x48, 0x11, 0xb8, 0x79, 0x01, 0x01, 0x4c, 0xb8, 0x49, 0x7a, + 0x03, 0x40, 0x44, 0xcb, 0x2c, 0xef, 0x1f, 0x00, 0x15, 0xd3, 0x38, 0x01, + 0xff, 0xd1, 0x00, 0xd2, 0x81, 0x4a, 0xd2, 0x01, 0xd2, 0x81, 0x31, 0xd3, + 0x02, 0xd2, 0x01, 0xd4, 0x03, 0xd2, 0x01, 0xd5, 0x04, 0xd2, 0x81, 0x10, + 0xd6, 0x05, 0xd2, 0x01, 0xd7, 0x06, 0xd2, 0x01, 0xd8, 0x07, 0xd2, 0x01, + 0xd9, 0x08, 0xd2, 0x41, 0xd0, 0x18, 0xd2, 0x01, 0xd1, 0x19, 0xd2, 0x01, + 0xd2, 0x1a, 0xd2, 0x01, 0xd3, 0x1b, 0xd2, 0x01, 0xd4, 0x1c, 0xd2, 0x41, + 0xd0, 0x13, 0xd2, 0x01, 0xd1, 0x14, 0xd2, 0x01, 0xd2, 0x15, 0xd2, 0x01, + 0xd3, 0x16, 0xd2, 0x01, 0xd4, 0x17, 0xd2, 0x41, 0xd0, 0x09, 0xd2, 0x01, + 0xd1, 0x0a, 0xd2, 0x01, 0xd2, 0x0b, 0xd2, 0x01, 0xd3, 0x0c, 0xd2, 0x01, + 0xd4, 0x0d, 0xd2, 0x01, 0xd5, 0x0e, 0xd2, 0x01, 0xd6, 0x0f, 0xd2, 0x01, + 0xd7, 0x10, 0xd2, 0x01, 0xd8, 0x11, 0xd2, 0x01, 0xd9, 0x12, 0xd2, 0x41, + 0x55, 0xce, 0x34, 0xd3, 0x03, 0x00, 0x59, 0x1b, 0x21, 0xd4, 0x03, 0x00, + 0x4b, 0x29, 0x21, 0xd2, 0x03, 0x40, 0x4a, 0x3e, 0x9f, 0x7a, 0x01, 0x01, + 0xa8, 0x1d, 0x44, 0xa8, 0x65, 0x84, 0x03, 0x00, 0x51, 0xdd, 0x57, 0x89, + 0x01, 0x01, 0x03, 0xc2, 0x06, 0x01, 0xff, 0x4a, 0x5b, 0x72, 0x7d, 0x01, + 0x01, 0x4b, 0x31, 0x9b, 0x77, 0x01, 0x41, 0x4a, 0x05, 0x8e, 0xd1, 0x03, + 0x00, 0x04, 0x26, 0x01, 0x01, 0xff, 0x4a, 0x5b, 0x72, 0x7e, 0x01, 0x01, + 0x4d, 0x44, 0x80, 0x78, 0x01, 0x41, 0x4c, 0xcf, 0x88, 0x8c, 0x01, 0x01, + 0x05, 0x3d, 0x06, 0x28, 0x16, 0x8a, 0x33, 0x06, 0x4d, 0x43, 0x83, 0xa0, + 0x01, 0x41, 0x44, 0xa7, 0x91, 0x66, 0x1d, 0x00, 0x43, 0x98, 0x14, 0x6a, + 0x1d, 0x00, 0x45, 0x99, 0x52, 0x67, 0x1d, 0x00, 0x43, 0xeb, 0x1d, 0x69, + 0x1d, 0x00, 0x43, 0x6e, 0x44, 0x68, 0x1d, 0x40, 0x5a, 0x48, 0x1d, 0x7c, + 0x03, 0x00, 0x07, 0xf1, 0x04, 0x11, 0x09, 0x19, 0x13, 0x01, 0xff, 0x5a, + 0x48, 0x1d, 0x7d, 0x03, 0x00, 0x53, 0x4f, 0x1d, 0x7b, 0x03, 0x40, 0xa1, + 0xf6, 0x07, 0x44, 0xa7, 0x91, 0xb2, 0x03, 0x00, 0x43, 0x98, 0x14, 0xc7, + 0x03, 0x00, 0xa4, 0xdb, 0x07, 0xa5, 0xd6, 0x05, 0x4b, 0x0f, 0x94, 0xc2, + 0x03, 0x00, 0x45, 0x99, 0x52, 0xb3, 0x03, 0x00, 0x44, 0x04, 0x8e, 0x71, + 0x03, 0x00, 0x44, 0x0d, 0x2b, 0xb9, 0x03, 0x80, 0xac, 0x04, 0xab, 0x9d, + 0x04, 0x45, 0x67, 0xdd, 0xbb, 0x03, 0x00, 0x42, 0xe2, 0x14, 0xbc, 0x03, + 0x00, 0x42, 0x5c, 0x14, 0xbd, 0x03, 0x00, 0x02, 0x19, 0x04, 0x85, 0x02, + 0xb0, 0xec, 0x01, 0x43, 0x6e, 0x44, 0xc1, 0x03, 0x80, 0xd3, 0x01, 0xb3, + 0xb2, 0x01, 0xb4, 0xa3, 0x01, 0x47, 0x3f, 0x82, 0xc5, 0x03, 0x80, 0x0c, + 0x42, 0x5c, 0x0b, 0xbe, 0x03, 0x00, 0x44, 0x46, 0xe8, 0xb6, 0x03, 0x40, + 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, 0x47, 0x46, 0xed, 0x69, 0xe1, 0x1f, + 0x00, 0x44, 0xfa, 0xe6, 0x7b, 0x1f, 0x00, 0xb0, 0x15, 0x45, 0xa7, 0x65, + 0xcd, 0x03, 0x00, 0xb6, 0x01, 0xff, 0x44, 0xcb, 0x2c, 0x7a, 0x1f, 0x00, + 0x45, 0x74, 0xdf, 0xe0, 0x1f, 0x40, 0x4a, 0x17, 0x99, 0xe6, 0x1f, 0x00, + 0x44, 0x55, 0x81, 0x50, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, + 0x44, 0xfa, 0xe6, 0x54, 0x1f, 0x00, 0x4b, 0x16, 0x99, 0x56, 0x1f, 0x00, + 0x45, 0xca, 0x2c, 0x52, 0x1f, 0x40, 0x44, 0x4f, 0x5b, 0x51, 0x1f, 0x80, + 0x24, 0x48, 0x9e, 0x65, 0xcb, 0x03, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, + 0xff, 0x44, 0xfa, 0xe6, 0xe3, 0x1f, 0x00, 0x4b, 0x16, 0x99, 0xe7, 0x1f, + 0x00, 0x45, 0xa7, 0x65, 0xb0, 0x03, 0x00, 0x45, 0xca, 0x2c, 0xe2, 0x1f, + 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xfa, 0xe6, 0x55, 0x1f, 0x00, + 0x4b, 0x16, 0x99, 0x57, 0x1f, 0x00, 0x45, 0xca, 0x2c, 0x53, 0x1f, 0x40, + 0x42, 0xc3, 0x21, 0xc4, 0x03, 0x00, 0x44, 0x04, 0x8e, 0xb8, 0x03, 0x40, + 0xa1, 0x12, 0x42, 0x0b, 0x00, 0xf8, 0x03, 0x00, 0x44, 0x57, 0x1d, 0xc3, + 0x03, 0x00, 0x45, 0x7d, 0xe0, 0xdb, 0x03, 0x40, 0x43, 0x98, 0x8c, 0xe1, + 0x03, 0x00, 0xee, 0xfb, 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, + 0xd3, 0x6f, 0xe5, 0x1f, 0x00, 0x45, 0x5b, 0xdf, 0xe4, 0x1f, 0x40, 0x51, + 0x8d, 0x52, 0x77, 0x03, 0x00, 0x42, 0x49, 0x00, 0xc6, 0x03, 0x00, 0xe9, + 0xc0, 0x03, 0x00, 0x42, 0xdb, 0x02, 0xc8, 0x03, 0x40, 0x43, 0xd3, 0x04, + 0xc9, 0x03, 0x80, 0x4e, 0x45, 0xa4, 0xdc, 0xbf, 0x03, 0xc0, 0x00, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x45, 0xd3, 0x6f, 0x41, 0x1f, 0x80, 0x2a, 0x44, + 0xfa, 0xe6, 0x79, 0x1f, 0x00, 0x45, 0x5b, 0xdf, 0x40, 0x1f, 0x80, 0x0c, + 0x45, 0xa7, 0x65, 0xcc, 0x03, 0x00, 0x45, 0xca, 0x2c, 0x78, 0x1f, 0x40, + 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xfa, 0xe6, 0x44, 0x1f, 0x00, 0x45, + 0xca, 0x2c, 0x42, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xfa, + 0xe6, 0x45, 0x1f, 0x00, 0x45, 0xca, 0x2c, 0x43, 0x1f, 0x40, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x45, 0xd3, 0x6f, 0x61, 0x1f, 0x80, 0x6e, 0x44, 0xfa, + 0xe6, 0x7d, 0x1f, 0x80, 0x61, 0xb0, 0x19, 0x45, 0xa7, 0x65, 0xce, 0x03, + 0x00, 0x45, 0xca, 0x2c, 0x7c, 0x1f, 0x80, 0x06, 0x4d, 0xb7, 0x49, 0xf3, + 0x1f, 0x40, 0x52, 0xb2, 0x49, 0xf2, 0x1f, 0x40, 0x4a, 0x17, 0x99, 0xf6, + 0x1f, 0x80, 0x39, 0x44, 0x55, 0x81, 0x60, 0x1f, 0xc0, 0x00, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x44, 0xfa, 0xe6, 0x64, 0x1f, 0x80, 0x20, 0x4b, 0x16, + 0x99, 0x66, 0x1f, 0x80, 0x13, 0x45, 0xca, 0x2c, 0x62, 0x1f, 0x80, 0x06, + 0x4d, 0xb7, 0x49, 0xa0, 0x1f, 0x40, 0x52, 0xb2, 0x49, 0xa2, 0x1f, 0x40, + 0x52, 0xb2, 0x49, 0xa6, 0x1f, 0x40, 0x52, 0xb2, 0x49, 0xa4, 0x1f, 0x40, + 0x52, 0xb2, 0x49, 0xf7, 0x1f, 0x40, 0x52, 0xb2, 0x49, 0xf4, 0x1f, 0x40, + 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xfa, 0xe6, 0x65, 0x1f, 0x80, 0x20, + 0x4b, 0x16, 0x99, 0x67, 0x1f, 0x80, 0x13, 0x45, 0xca, 0x2c, 0x63, 0x1f, + 0x80, 0x06, 0x4d, 0xb7, 0x49, 0xa1, 0x1f, 0x40, 0x52, 0xb2, 0x49, 0xa3, + 0x1f, 0x40, 0x52, 0xb2, 0x49, 0xa7, 0x1f, 0x40, 0x52, 0xb2, 0x49, 0xa5, + 0x1f, 0x40, 0x44, 0x18, 0x89, 0xba, 0x03, 0x00, 0x44, 0xb3, 0x79, 0xdf, + 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, 0x47, 0x46, 0xed, 0x69, + 0xd1, 0x1f, 0x00, 0x44, 0xfa, 0xe6, 0x77, 0x1f, 0x00, 0xb0, 0x15, 0x45, + 0xa7, 0x65, 0xaf, 0x03, 0x00, 0xb6, 0x01, 0xff, 0x44, 0xcb, 0x2c, 0x76, + 0x1f, 0x00, 0x45, 0x74, 0xdf, 0xd0, 0x1f, 0x40, 0x4a, 0x17, 0x99, 0xd6, + 0x1f, 0x00, 0x44, 0x55, 0x81, 0x30, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, + 0x01, 0xff, 0x44, 0xfa, 0xe6, 0x34, 0x1f, 0x00, 0x4b, 0x16, 0x99, 0x36, + 0x1f, 0x00, 0x45, 0xca, 0x2c, 0x32, 0x1f, 0x40, 0x44, 0x4f, 0x5b, 0x31, + 0x1f, 0x80, 0x24, 0x48, 0x9e, 0x65, 0xca, 0x03, 0xc0, 0x00, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x44, 0xfa, 0xe6, 0xd3, 0x1f, 0x00, 0x4b, 0x16, 0x99, + 0xd7, 0x1f, 0x00, 0x45, 0xa7, 0x65, 0x90, 0x03, 0x00, 0x45, 0xca, 0x2c, + 0xd2, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xfa, 0xe6, 0x35, + 0x1f, 0x00, 0x4b, 0x16, 0x99, 0x37, 0x1f, 0x00, 0x45, 0xca, 0x2c, 0x33, + 0x1f, 0x40, 0x46, 0xee, 0x13, 0xb5, 0x03, 0x80, 0xb3, 0x01, 0x42, 0x12, + 0x00, 0xb7, 0x03, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xd3, + 0x6f, 0x21, 0x1f, 0x80, 0x6e, 0x44, 0xfa, 0xe6, 0x75, 0x1f, 0x80, 0x61, + 0xb0, 0x19, 0x45, 0xa7, 0x65, 0xae, 0x03, 0x00, 0x45, 0xca, 0x2c, 0x74, + 0x1f, 0x80, 0x06, 0x4d, 0xb7, 0x49, 0xc3, 0x1f, 0x40, 0x52, 0xb2, 0x49, + 0xc2, 0x1f, 0x40, 0x4a, 0x17, 0x99, 0xc6, 0x1f, 0x80, 0x39, 0x44, 0x55, + 0x81, 0x20, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xfa, + 0xe6, 0x24, 0x1f, 0x80, 0x20, 0x4b, 0x16, 0x99, 0x26, 0x1f, 0x80, 0x13, + 0x45, 0xca, 0x2c, 0x22, 0x1f, 0x80, 0x06, 0x4d, 0xb7, 0x49, 0x90, 0x1f, + 0x40, 0x52, 0xb2, 0x49, 0x92, 0x1f, 0x40, 0x52, 0xb2, 0x49, 0x96, 0x1f, + 0x40, 0x52, 0xb2, 0x49, 0x94, 0x1f, 0x40, 0x52, 0xb2, 0x49, 0xc7, 0x1f, + 0x40, 0x52, 0xb2, 0x49, 0xc4, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, + 0x44, 0xfa, 0xe6, 0x25, 0x1f, 0x80, 0x20, 0x4b, 0x16, 0x99, 0x27, 0x1f, + 0x80, 0x13, 0x45, 0xca, 0x2c, 0x23, 0x1f, 0x80, 0x06, 0x4d, 0xb7, 0x49, + 0x91, 0x1f, 0x40, 0x52, 0xb2, 0x49, 0x93, 0x1f, 0x40, 0x52, 0xb2, 0x49, + 0x97, 0x1f, 0x40, 0x52, 0xb2, 0x49, 0x95, 0x1f, 0x40, 0x06, 0x50, 0x00, + 0x01, 0xff, 0x45, 0xd3, 0x6f, 0x11, 0x1f, 0x80, 0x2a, 0x44, 0xfa, 0xe6, + 0x73, 0x1f, 0x00, 0x45, 0x5b, 0xdf, 0x10, 0x1f, 0x80, 0x0c, 0x45, 0xa7, + 0x65, 0xad, 0x03, 0x00, 0x45, 0xca, 0x2c, 0x72, 0x1f, 0x40, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x44, 0xfa, 0xe6, 0x14, 0x1f, 0x00, 0x45, 0xca, 0x2c, + 0x12, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xfa, 0xe6, 0x15, + 0x1f, 0x00, 0x45, 0xca, 0x2c, 0x13, 0x1f, 0x40, 0x44, 0x1d, 0xcc, 0xb4, + 0x03, 0x00, 0x46, 0x98, 0x52, 0xdd, 0x03, 0x40, 0x44, 0xad, 0xd9, 0xb1, + 0x03, 0x80, 0x11, 0x07, 0xab, 0x79, 0x01, 0xff, 0x45, 0xb2, 0x79, 0xd9, + 0x03, 0x00, 0x45, 0x96, 0x8c, 0x73, 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, + 0xff, 0x45, 0xd3, 0x6f, 0x01, 0x1f, 0x80, 0x7c, 0x46, 0xed, 0x69, 0xb1, + 0x1f, 0x00, 0x44, 0xfa, 0xe6, 0x71, 0x1f, 0x80, 0x69, 0xb0, 0x21, 0x45, + 0xa7, 0x65, 0xac, 0x03, 0x00, 0xb6, 0x06, 0x4d, 0xb7, 0x49, 0xb3, 0x1f, + 0x40, 0x44, 0xcb, 0x2c, 0x70, 0x1f, 0x80, 0x06, 0x45, 0x74, 0xdf, 0xb0, + 0x1f, 0x40, 0x52, 0xb2, 0x49, 0xb2, 0x1f, 0x40, 0x4a, 0x17, 0x99, 0xb6, + 0x1f, 0x80, 0x39, 0x44, 0x55, 0x81, 0x00, 0x1f, 0xc0, 0x00, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x44, 0xfa, 0xe6, 0x04, 0x1f, 0x80, 0x20, 0x4b, 0x16, + 0x99, 0x06, 0x1f, 0x80, 0x13, 0x45, 0xca, 0x2c, 0x02, 0x1f, 0x80, 0x06, + 0x4d, 0xb7, 0x49, 0x80, 0x1f, 0x40, 0x52, 0xb2, 0x49, 0x82, 0x1f, 0x40, + 0x52, 0xb2, 0x49, 0x86, 0x1f, 0x40, 0x52, 0xb2, 0x49, 0x84, 0x1f, 0x40, + 0x52, 0xb2, 0x49, 0xb7, 0x1f, 0x40, 0x52, 0xb2, 0x49, 0xb4, 0x1f, 0x40, + 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xfa, 0xe6, 0x05, 0x1f, 0x80, 0x20, + 0x4b, 0x16, 0x99, 0x07, 0x1f, 0x80, 0x13, 0x45, 0xca, 0x2c, 0x03, 0x1f, + 0x80, 0x06, 0x4d, 0xb7, 0x49, 0x81, 0x1f, 0x40, 0x52, 0xb2, 0x49, 0x83, + 0x1f, 0x40, 0x52, 0xb2, 0x49, 0x87, 0x1f, 0x40, 0x52, 0xb2, 0x49, 0x85, + 0x1f, 0x40, 0x5d, 0xde, 0x13, 0xf6, 0x03, 0x00, 0x03, 0x23, 0x6b, 0x01, + 0xff, 0x46, 0xf7, 0x06, 0xf1, 0x03, 0x00, 0x52, 0x14, 0x51, 0xfc, 0x03, + 0x40, 0x4a, 0x17, 0x99, 0xc0, 0x1f, 0x00, 0x49, 0x5d, 0xb0, 0xd5, 0x03, + 0x00, 0x48, 0xd2, 0xa3, 0xd6, 0x03, 0x00, 0x4d, 0xef, 0x41, 0xbe, 0x1f, + 0x00, 0x44, 0x55, 0x81, 0xbf, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, + 0xff, 0x44, 0xfa, 0xe6, 0xce, 0x1f, 0x00, 0x4b, 0x16, 0x99, 0xcf, 0x1f, + 0x00, 0x45, 0xca, 0x2c, 0xcd, 0x1f, 0x40, 0x48, 0xa9, 0xba, 0x7c, 0x01, + 0x01, 0x03, 0xf2, 0x07, 0x0c, 0x4a, 0xde, 0xa9, 0x84, 0x01, 0x01, 0x43, + 0xed, 0x45, 0xfd, 0x1f, 0x40, 0x49, 0x30, 0xb0, 0x75, 0x01, 0x81, 0x06, + 0x4c, 0x53, 0x8c, 0x8b, 0x01, 0x41, 0x4f, 0xbe, 0x62, 0x76, 0x01, 0x41, + 0x4c, 0x37, 0x87, 0x81, 0x01, 0x01, 0x4d, 0x73, 0x82, 0x45, 0xd2, 0x41, + 0x06, 0xf2, 0x04, 0x1d, 0x49, 0x86, 0xb1, 0x83, 0x01, 0x01, 0x51, 0x33, + 0x57, 0x75, 0x03, 0x00, 0x06, 0xe7, 0x13, 0x01, 0xff, 0x4e, 0xed, 0x13, + 0xf5, 0x03, 0x00, 0x4c, 0x56, 0x1d, 0xf2, 0x03, 0x40, 0x4d, 0xaa, 0x79, + 0xd8, 0x03, 0x00, 0x47, 0x97, 0x52, 0xdc, 0x03, 0x00, 0x45, 0xb2, 0x79, + 0xde, 0x03, 0x00, 0xb3, 0x06, 0x43, 0xc4, 0xe9, 0xf3, 0x03, 0x40, 0x44, + 0x97, 0x8c, 0xe0, 0x03, 0x00, 0x0d, 0x5d, 0x38, 0x06, 0x45, 0x7d, 0xe0, + 0xda, 0x03, 0x40, 0x45, 0x99, 0x52, 0x26, 0x1d, 0x00, 0x45, 0x67, 0xdd, + 0x27, 0x1d, 0x00, 0x45, 0x91, 0xa6, 0x65, 0xab, 0x00, 0xb0, 0x06, 0x43, + 0x6e, 0x44, 0x29, 0x1d, 0x40, 0xe9, 0x28, 0x1d, 0x00, 0x42, 0xdb, 0x02, + 0x2a, 0x1d, 0x40, 0xa1, 0x0c, 0x46, 0xd8, 0x5b, 0xbd, 0x1f, 0x00, 0x50, + 0x9e, 0x62, 0x82, 0x01, 0x41, 0x48, 0xd2, 0xa3, 0xd7, 0x03, 0x00, 0x4a, + 0x19, 0x89, 0xf0, 0x03, 0x40, 0x4c, 0x6b, 0x86, 0x8d, 0x01, 0x01, 0x1b, + 0x53, 0x1b, 0x01, 0xff, 0xd1, 0x1d, 0xd2, 0x81, 0x79, 0xd2, 0x1e, 0xd2, + 0x81, 0x5c, 0x93, 0x42, 0xd4, 0x1f, 0xd2, 0x81, 0x21, 0xd5, 0x20, 0xd2, + 0x81, 0x08, 0xd7, 0x21, 0xd2, 0x01, 0xd8, 0x22, 0xd2, 0x41, 0xd0, 0x3d, + 0xd2, 0x01, 0xd1, 0x3e, 0xd2, 0x01, 0xd2, 0x3f, 0xd2, 0x01, 0xd3, 0x40, + 0xd2, 0x01, 0xd4, 0x41, 0xd2, 0x41, 0xd0, 0x36, 0xd2, 0x01, 0xd2, 0x37, + 0xd2, 0x01, 0xd3, 0x38, 0xd2, 0x01, 0xd5, 0x39, 0xd2, 0x01, 0xd7, 0x3a, + 0xd2, 0x01, 0xd8, 0x3b, 0xd2, 0x01, 0xd9, 0x3c, 0xd2, 0x41, 0xd0, 0x30, + 0xd2, 0x01, 0xd2, 0x31, 0xd2, 0x01, 0xd6, 0x32, 0xd2, 0x01, 0xd7, 0x33, + 0xd2, 0x01, 0xd8, 0x34, 0xd2, 0x01, 0xd9, 0x35, 0xd2, 0x41, 0xd3, 0x2a, + 0xd2, 0x01, 0xd4, 0x2b, 0xd2, 0x01, 0xd5, 0x2c, 0xd2, 0x01, 0xd6, 0x2d, + 0xd2, 0x01, 0xd7, 0x2e, 0xd2, 0x01, 0xd9, 0x2f, 0xd2, 0x41, 0xd1, 0x23, + 0xd2, 0x01, 0xd2, 0x24, 0xd2, 0x01, 0xd3, 0x25, 0xd2, 0x01, 0xd4, 0x26, + 0xd2, 0x01, 0xd7, 0x27, 0xd2, 0x01, 0xd8, 0x28, 0xd2, 0x01, 0xd9, 0x29, + 0xd2, 0x41, 0x4e, 0x57, 0x72, 0x80, 0x01, 0x01, 0x4e, 0x09, 0x74, 0x7f, + 0x01, 0x41, 0x44, 0x4f, 0x5b, 0xfe, 0x1f, 0x80, 0x26, 0x09, 0x9e, 0x65, + 0x06, 0x4b, 0x6e, 0x99, 0x7b, 0x01, 0x41, 0x04, 0x1a, 0x00, 0x06, 0x45, + 0xa7, 0x65, 0x85, 0x03, 0x40, 0x44, 0xfa, 0xe6, 0xee, 0x1f, 0x00, 0x4b, + 0x16, 0x99, 0xc1, 0x1f, 0x00, 0x45, 0xca, 0x2c, 0xed, 0x1f, 0x40, 0x05, + 0x19, 0x00, 0x01, 0xff, 0x44, 0xfa, 0xe6, 0xde, 0x1f, 0x00, 0x4b, 0x16, + 0x99, 0xdf, 0x1f, 0x00, 0x45, 0xca, 0x2c, 0xdd, 0x1f, 0x40, 0x5a, 0x48, + 0x1d, 0xfe, 0x03, 0x00, 0x4a, 0xd0, 0xa3, 0xcf, 0x03, 0x00, 0xac, 0x16, + 0x09, 0x19, 0x13, 0x06, 0x4c, 0x03, 0x8e, 0xf4, 0x03, 0x40, 0x5a, 0x48, + 0x1d, 0xff, 0x03, 0x00, 0x53, 0x4f, 0x1d, 0xfd, 0x03, 0x40, 0x06, 0xf2, + 0x04, 0x06, 0x52, 0x50, 0x1d, 0xf9, 0x03, 0x40, 0xa1, 0xb3, 0x06, 0x44, + 0xa7, 0x91, 0x92, 0x03, 0x00, 0x43, 0x98, 0x14, 0xa7, 0x03, 0x00, 0x45, + 0xe7, 0xda, 0x94, 0x03, 0x00, 0xa5, 0xb3, 0x04, 0x45, 0x99, 0x52, 0x93, + 0x03, 0x00, 0x44, 0x04, 0x8e, 0x70, 0x03, 0x00, 0x44, 0x0d, 0x2b, 0x99, + 0x03, 0x80, 0xb5, 0x03, 0x45, 0x17, 0x89, 0x9a, 0x03, 0x00, 0x45, 0x67, + 0xdd, 0x9b, 0x03, 0x00, 0x42, 0xe2, 0x14, 0x9c, 0x03, 0x00, 0x42, 0x5c, + 0x14, 0x9d, 0x03, 0x00, 0x02, 0x19, 0x04, 0xae, 0x01, 0xb0, 0x95, 0x01, + 0x43, 0x6e, 0x44, 0xa1, 0x03, 0x80, 0x87, 0x01, 0xb3, 0x73, 0xb4, 0x65, + 0x47, 0x3f, 0x82, 0xa5, 0x03, 0x80, 0x12, 0x42, 0x5c, 0x0b, 0x9e, 0x03, + 0x00, 0x43, 0xc4, 0xe9, 0x7f, 0x03, 0x00, 0x44, 0x46, 0xe8, 0x96, 0x03, + 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, 0x21, 0x46, 0xed, 0x69, 0xe9, + 0x1f, 0x00, 0x44, 0xfa, 0xe6, 0xeb, 0x1f, 0x00, 0x45, 0xa7, 0x65, 0x8e, + 0x03, 0x00, 0xb6, 0x01, 0xff, 0x44, 0xcb, 0x2c, 0xea, 0x1f, 0x00, 0x45, + 0x74, 0xdf, 0xe8, 0x1f, 0x40, 0x44, 0x4f, 0x5b, 0x59, 0x1f, 0x80, 0x06, + 0x48, 0x9e, 0x65, 0xab, 0x03, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, + 0xfa, 0xe6, 0x5d, 0x1f, 0x00, 0x4b, 0x16, 0x99, 0x5f, 0x1f, 0x00, 0x45, + 0xca, 0x2c, 0x5b, 0x1f, 0x40, 0x42, 0xc3, 0x21, 0xa4, 0x03, 0x00, 0x44, + 0x04, 0x8e, 0x98, 0x03, 0x40, 0x42, 0x1a, 0x00, 0xfa, 0x03, 0x00, 0x42, + 0x0b, 0x00, 0xf7, 0x03, 0x00, 0x44, 0x57, 0x1d, 0xa3, 0x03, 0x40, 0x4b, + 0x26, 0x90, 0xec, 0x1f, 0x40, 0x51, 0x8d, 0x52, 0x76, 0x03, 0x00, 0x42, + 0x49, 0x00, 0xa6, 0x03, 0x00, 0xe9, 0xa0, 0x03, 0x00, 0x42, 0xdb, 0x02, + 0xa8, 0x03, 0x40, 0x43, 0xd3, 0x04, 0xa9, 0x03, 0x80, 0x4e, 0x45, 0xa4, + 0xdc, 0x9f, 0x03, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xd3, + 0x6f, 0x49, 0x1f, 0x80, 0x2a, 0x44, 0xfa, 0xe6, 0xf9, 0x1f, 0x00, 0x45, + 0x5b, 0xdf, 0x48, 0x1f, 0x80, 0x0c, 0x45, 0xa7, 0x65, 0x8c, 0x03, 0x00, + 0x45, 0xca, 0x2c, 0xf8, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, + 0xfa, 0xe6, 0x4c, 0x1f, 0x00, 0x45, 0xca, 0x2c, 0x4a, 0x1f, 0x40, 0x05, + 0x19, 0x00, 0x01, 0xff, 0x44, 0xfa, 0xe6, 0x4d, 0x1f, 0x00, 0x45, 0xca, + 0x2c, 0x4b, 0x1f, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xd3, 0x6f, + 0x69, 0x1f, 0x80, 0x55, 0x44, 0xfa, 0xe6, 0xfb, 0x1f, 0x00, 0xb0, 0x0c, + 0x45, 0xa7, 0x65, 0x8f, 0x03, 0x00, 0x45, 0xca, 0x2c, 0xfa, 0x1f, 0x40, + 0x4d, 0xef, 0x41, 0xfc, 0x1f, 0x00, 0x44, 0x55, 0x81, 0x68, 0x1f, 0xc0, + 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xfa, 0xe6, 0x6c, 0x1f, 0x80, + 0x22, 0xb0, 0x0d, 0x45, 0xca, 0x2c, 0x6a, 0x1f, 0xc0, 0x00, 0x53, 0xe9, + 0x41, 0xaa, 0x1f, 0x40, 0x4a, 0x17, 0x99, 0x6e, 0x1f, 0x80, 0x06, 0x4d, + 0xef, 0x41, 0xa8, 0x1f, 0x40, 0x53, 0xe9, 0x41, 0xae, 0x1f, 0x40, 0x53, + 0xe9, 0x41, 0xac, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xfa, + 0xe6, 0x6d, 0x1f, 0x80, 0x22, 0xb0, 0x0d, 0x45, 0xca, 0x2c, 0x6b, 0x1f, + 0xc0, 0x00, 0x53, 0xe9, 0x41, 0xab, 0x1f, 0x40, 0x4a, 0x17, 0x99, 0x6f, + 0x1f, 0x80, 0x06, 0x4d, 0xef, 0x41, 0xa9, 0x1f, 0x40, 0x53, 0xe9, 0x41, + 0xaf, 0x1f, 0x40, 0x53, 0xe9, 0x41, 0xad, 0x1f, 0x40, 0x06, 0x50, 0x00, + 0x01, 0xff, 0xa4, 0x3f, 0x46, 0xed, 0x69, 0xd9, 0x1f, 0x00, 0x44, 0xfa, + 0xe6, 0xdb, 0x1f, 0x00, 0x45, 0x5b, 0xdf, 0x38, 0x1f, 0x80, 0x15, 0x45, + 0xa7, 0x65, 0x8a, 0x03, 0x00, 0xb6, 0x01, 0xff, 0x44, 0xcb, 0x2c, 0xda, + 0x1f, 0x00, 0x45, 0x74, 0xdf, 0xd8, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, + 0xff, 0x44, 0xfa, 0xe6, 0x3c, 0x1f, 0x00, 0x4b, 0x16, 0x99, 0x3e, 0x1f, + 0x00, 0x45, 0xca, 0x2c, 0x3a, 0x1f, 0x40, 0x44, 0x4f, 0x5b, 0x39, 0x1f, + 0x80, 0x06, 0x48, 0x9e, 0x65, 0xaa, 0x03, 0x40, 0x05, 0x19, 0x00, 0x01, + 0xff, 0x44, 0xfa, 0xe6, 0x3d, 0x1f, 0x00, 0x4b, 0x16, 0x99, 0x3f, 0x1f, + 0x00, 0x45, 0xca, 0x2c, 0x3b, 0x1f, 0x40, 0x46, 0xee, 0x13, 0x95, 0x03, + 0x80, 0x9c, 0x01, 0x42, 0x12, 0x00, 0x97, 0x03, 0xc0, 0x00, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x45, 0xd3, 0x6f, 0x29, 0x1f, 0x80, 0x55, 0x44, 0xfa, + 0xe6, 0xcb, 0x1f, 0x00, 0xb0, 0x0c, 0x45, 0xa7, 0x65, 0x89, 0x03, 0x00, + 0x45, 0xca, 0x2c, 0xca, 0x1f, 0x40, 0x4d, 0xef, 0x41, 0xcc, 0x1f, 0x00, + 0x44, 0x55, 0x81, 0x28, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, + 0x44, 0xfa, 0xe6, 0x2c, 0x1f, 0x80, 0x22, 0xb0, 0x0d, 0x45, 0xca, 0x2c, + 0x2a, 0x1f, 0xc0, 0x00, 0x53, 0xe9, 0x41, 0x9a, 0x1f, 0x40, 0x4a, 0x17, + 0x99, 0x2e, 0x1f, 0x80, 0x06, 0x4d, 0xef, 0x41, 0x98, 0x1f, 0x40, 0x53, + 0xe9, 0x41, 0x9e, 0x1f, 0x40, 0x53, 0xe9, 0x41, 0x9c, 0x1f, 0x40, 0x05, + 0x19, 0x00, 0x01, 0xff, 0x44, 0xfa, 0xe6, 0x2d, 0x1f, 0x80, 0x22, 0xb0, + 0x0d, 0x45, 0xca, 0x2c, 0x2b, 0x1f, 0xc0, 0x00, 0x53, 0xe9, 0x41, 0x9b, + 0x1f, 0x40, 0x4a, 0x17, 0x99, 0x2f, 0x1f, 0x80, 0x06, 0x4d, 0xef, 0x41, + 0x99, 0x1f, 0x40, 0x53, 0xe9, 0x41, 0x9f, 0x1f, 0x40, 0x53, 0xe9, 0x41, + 0x9d, 0x1f, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xd3, 0x6f, 0x19, + 0x1f, 0x80, 0x2a, 0x44, 0xfa, 0xe6, 0xc9, 0x1f, 0x00, 0x45, 0x5b, 0xdf, + 0x18, 0x1f, 0x80, 0x0c, 0x45, 0xa7, 0x65, 0x88, 0x03, 0x00, 0x45, 0xca, + 0x2c, 0xc8, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xfa, 0xe6, + 0x1c, 0x1f, 0x00, 0x45, 0xca, 0x2c, 0x1a, 0x1f, 0x40, 0x05, 0x19, 0x00, + 0x01, 0xff, 0x44, 0xfa, 0xe6, 0x1d, 0x1f, 0x00, 0x45, 0xca, 0x2c, 0x1b, + 0x1f, 0x40, 0x44, 0xad, 0xd9, 0x91, 0x03, 0x80, 0x06, 0x4c, 0x8f, 0x8c, + 0x72, 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xd3, 0x6f, 0x09, + 0x1f, 0x80, 0x64, 0x46, 0xed, 0x69, 0xb9, 0x1f, 0x00, 0x44, 0xfa, 0xe6, + 0xbb, 0x1f, 0x00, 0xb0, 0x15, 0x45, 0xa7, 0x65, 0x86, 0x03, 0x00, 0xb6, + 0x01, 0xff, 0x44, 0xcb, 0x2c, 0xba, 0x1f, 0x00, 0x45, 0x74, 0xdf, 0xb8, + 0x1f, 0x40, 0x4d, 0xef, 0x41, 0xbc, 0x1f, 0x00, 0x44, 0x55, 0x81, 0x08, + 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xfa, 0xe6, 0x0c, + 0x1f, 0x80, 0x22, 0xb0, 0x0d, 0x45, 0xca, 0x2c, 0x0a, 0x1f, 0xc0, 0x00, + 0x53, 0xe9, 0x41, 0x8a, 0x1f, 0x40, 0x4a, 0x17, 0x99, 0x0e, 0x1f, 0x80, + 0x06, 0x4d, 0xef, 0x41, 0x88, 0x1f, 0x40, 0x53, 0xe9, 0x41, 0x8e, 0x1f, + 0x40, 0x53, 0xe9, 0x41, 0x8c, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, + 0x44, 0xfa, 0xe6, 0x0d, 0x1f, 0x80, 0x22, 0xb0, 0x0d, 0x45, 0xca, 0x2c, + 0x0b, 0x1f, 0xc0, 0x00, 0x53, 0xe9, 0x41, 0x8b, 0x1f, 0x40, 0x4a, 0x17, + 0x99, 0x0f, 0x1f, 0x80, 0x06, 0x4d, 0xef, 0x41, 0x89, 0x1f, 0x40, 0x53, + 0xe9, 0x41, 0x8f, 0x1f, 0x40, 0x53, 0xe9, 0x41, 0x8d, 0x1f, 0x40, 0x0a, + 0x6a, 0xa0, 0x15, 0x49, 0x51, 0xb3, 0x87, 0x03, 0x00, 0xb2, 0x01, 0xff, + 0x49, 0x32, 0xb4, 0x87, 0x01, 0x01, 0x49, 0x21, 0xb6, 0x86, 0x01, 0x41, + 0x06, 0xd5, 0xcf, 0xe6, 0x01, 0xa3, 0xd7, 0x01, 0x51, 0x14, 0x54, 0x73, + 0x01, 0x01, 0x0b, 0xcd, 0x93, 0xb9, 0x01, 0x03, 0x13, 0x18, 0x97, 0x01, + 0x4d, 0xa4, 0x7e, 0x63, 0x01, 0x01, 0x53, 0xeb, 0x45, 0x70, 0x01, 0x01, + 0x53, 0xd9, 0x47, 0x74, 0x01, 0x01, 0xb4, 0x01, 0xff, 0x08, 0x11, 0xbd, + 0x30, 0x0a, 0xcc, 0xa7, 0x01, 0xff, 0x02, 0xde, 0x08, 0x0d, 0x43, 0xe0, + 0x05, 0x60, 0x01, 0xc1, 0x00, 0x4f, 0xbe, 0x62, 0x61, 0x01, 0x41, 0x43, + 0xe4, 0x47, 0x66, 0x01, 0x81, 0x0d, 0x42, 0x32, 0x00, 0x5f, 0x01, 0xc1, + 0x00, 0x48, 0xe8, 0x0f, 0x6d, 0x01, 0x41, 0x4f, 0xbe, 0x62, 0x67, 0x01, + 0x41, 0x02, 0xde, 0x08, 0x33, 0x43, 0xcd, 0x09, 0x59, 0x01, 0x81, 0x1d, + 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x64, 0x01, 0x01, 0xa8, 0x06, 0x42, + 0x15, 0x02, 0x5c, 0x01, 0x41, 0x44, 0xf3, 0x0f, 0x65, 0x01, 0x01, 0x4b, + 0x1a, 0x16, 0x6b, 0x01, 0x41, 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x6a, + 0x01, 0x01, 0x48, 0x69, 0x58, 0x71, 0x01, 0x41, 0x43, 0xe4, 0x47, 0x69, + 0x01, 0x01, 0x03, 0x5f, 0x00, 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x6e, 0x01, + 0x01, 0x48, 0x69, 0x58, 0x72, 0x01, 0x41, 0x51, 0x5a, 0x52, 0x58, 0x01, + 0x01, 0x08, 0x91, 0xbe, 0x01, 0xff, 0x45, 0xe2, 0x47, 0x68, 0x01, 0x01, + 0x43, 0xcd, 0x09, 0x5a, 0x01, 0x01, 0x43, 0xe0, 0x05, 0x62, 0x01, 0x41, + 0x4c, 0x55, 0x35, 0x6c, 0x01, 0x01, 0x43, 0x25, 0x09, 0x5b, 0x01, 0xc1, + 0x00, 0x49, 0xe0, 0x41, 0x5e, 0x01, 0x41, 0x55, 0x4c, 0x35, 0x6f, 0x01, + 0x01, 0x54, 0xd5, 0x41, 0x5d, 0x01, 0x41, 0x02, 0xde, 0x08, 0x5a, 0x04, + 0xcd, 0x09, 0x20, 0x04, 0x65, 0x58, 0x01, 0xff, 0x44, 0xe8, 0x47, 0x57, + 0x01, 0x01, 0x47, 0x85, 0x67, 0x50, 0x01, 0x01, 0xb4, 0x01, 0xff, 0x46, + 0x13, 0xb9, 0x49, 0x01, 0x01, 0x4f, 0x7d, 0x67, 0x55, 0x01, 0x41, 0x47, + 0xe1, 0x41, 0x42, 0x01, 0x01, 0xa8, 0x17, 0x47, 0x2a, 0x01, 0x40, 0x01, + 0x01, 0x09, 0x69, 0x58, 0x01, 0xff, 0x47, 0x85, 0x67, 0x54, 0x01, 0x01, + 0x47, 0x12, 0xb9, 0x4d, 0x01, 0x41, 0x43, 0x23, 0x00, 0x41, 0x01, 0x01, + 0x07, 0xea, 0x0f, 0x01, 0xff, 0x47, 0x85, 0x67, 0x52, 0x01, 0x01, 0x47, + 0x12, 0xb9, 0x4b, 0x01, 0x41, 0x43, 0xe4, 0x47, 0x44, 0x01, 0x81, 0x3c, + 0x42, 0x32, 0x00, 0x43, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0xe9, + 0x0f, 0x45, 0x01, 0x81, 0x1c, 0x47, 0x85, 0x67, 0x4f, 0x01, 0x01, 0xb4, + 0x01, 0xff, 0x46, 0x13, 0xb9, 0x48, 0x01, 0x01, 0x47, 0xc2, 0x37, 0x46, + 0x01, 0xc1, 0x00, 0x48, 0x11, 0xb9, 0x4e, 0x01, 0x41, 0x80, 0x01, 0xff, + 0x47, 0x85, 0x67, 0x53, 0x01, 0x01, 0x47, 0x12, 0xb9, 0x4c, 0x01, 0x41, + 0x80, 0x01, 0xff, 0x47, 0x85, 0x67, 0x51, 0x01, 0x01, 0xb4, 0x01, 0xff, + 0x46, 0x13, 0xb9, 0x4a, 0x01, 0x01, 0x47, 0xc2, 0x37, 0x47, 0x01, 0xc1, + 0x00, 0x48, 0x84, 0x67, 0x56, 0x01, 0x41, 0xa1, 0x9c, 0x01, 0xa2, 0x82, + 0x01, 0x4f, 0x52, 0x65, 0xa7, 0x2a, 0x80, 0x75, 0x55, 0xc6, 0x36, 0xdb, + 0x22, 0x00, 0xaf, 0x1d, 0x44, 0xdb, 0x02, 0x3e, 0x00, 0x00, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x4d, 0x7a, 0x7a, 0x7a, 0x2a, 0x00, 0x43, 0xc5, 0x06, + 0xd7, 0x22, 0x00, 0x53, 0xe2, 0x46, 0x7c, 0x2a, 0x40, 0x02, 0x18, 0x00, + 0x11, 0x03, 0x32, 0x00, 0x01, 0xff, 0x49, 0x71, 0x0b, 0x67, 0x22, 0x00, + 0x51, 0x01, 0x56, 0xa4, 0x2a, 0x40, 0x4b, 0x62, 0x1c, 0x86, 0x2a, 0x00, + 0x03, 0x7b, 0x00, 0x25, 0x49, 0xec, 0x00, 0x77, 0x22, 0x00, 0x50, 0xee, + 0x60, 0x7e, 0x2a, 0xc0, 0x00, 0x0a, 0x4a, 0x37, 0x01, 0xff, 0x45, 0x5c, + 0x00, 0x82, 0x2a, 0x80, 0x06, 0x46, 0x01, 0x12, 0x80, 0x2a, 0x40, 0x45, + 0xc2, 0x00, 0x84, 0x2a, 0x40, 0x45, 0x75, 0x0b, 0x65, 0x22, 0x00, 0x4a, + 0x96, 0x35, 0x73, 0x22, 0x40, 0x54, 0x93, 0x00, 0xa9, 0x2a, 0x40, 0x4f, + 0x51, 0x66, 0xa5, 0x2a, 0x00, 0x0a, 0x8c, 0x35, 0x01, 0xff, 0x45, 0x75, + 0x0b, 0x69, 0x22, 0x00, 0x4a, 0x96, 0x35, 0xe7, 0x22, 0x40, 0x05, 0x5d, + 0x00, 0x11, 0x03, 0x1b, 0x00, 0x01, 0xff, 0x4f, 0x20, 0x6a, 0x8a, 0x2a, + 0x00, 0x58, 0xdf, 0x27, 0x88, 0x2a, 0x40, 0x61, 0x00, 0x0c, 0x8c, 0x2a, + 0x00, 0x61, 0x63, 0x0c, 0x92, 0x2a, 0x00, 0x50, 0xb3, 0x02, 0x78, 0x29, + 0x00, 0xb3, 0x01, 0xff, 0x07, 0xe2, 0xc7, 0x06, 0x70, 0xd9, 0x00, 0x94, + 0x2a, 0x40, 0x4f, 0xe6, 0x00, 0x90, 0x2a, 0x00, 0x48, 0xf4, 0x25, 0x8e, + 0x2a, 0x40, 0x4b, 0x54, 0x93, 0x93, 0xf3, 0x01, 0x05, 0x89, 0xde, 0x0c, + 0x43, 0x0b, 0x5f, 0x47, 0xf3, 0x01, 0x49, 0x7c, 0x20, 0x60, 0x00, 0x40, + 0x4e, 0x39, 0x6f, 0x57, 0x13, 0x01, 0x07, 0xf1, 0x04, 0x8b, 0x01, 0x42, + 0x19, 0x04, 0x50, 0x13, 0x01, 0x05, 0xdb, 0x02, 0x48, 0x0b, 0x70, 0x70, + 0x01, 0xff, 0xa1, 0x35, 0x42, 0x27, 0x01, 0x47, 0x13, 0x01, 0xe9, 0x3f, + 0x13, 0x81, 0x26, 0x42, 0x99, 0x04, 0x4b, 0x13, 0x01, 0xf5, 0x41, 0x13, + 0x81, 0x17, 0x08, 0x92, 0xb7, 0x01, 0xff, 0xec, 0x62, 0x13, 0x81, 0x09, + 0xf2, 0x43, 0x13, 0xc1, 0x00, 0xf2, 0x44, 0x13, 0x41, 0xec, 0x63, 0x13, + 0x41, 0xf5, 0x42, 0x13, 0x41, 0xe9, 0x40, 0x13, 0x41, 0xe1, 0x3e, 0x13, + 0x01, 0xe9, 0x48, 0x13, 0x01, 0xf5, 0x4c, 0x13, 0x41, 0xa1, 0x2b, 0xa3, + 0x1d, 0x45, 0xc0, 0x3a, 0x3c, 0x13, 0x01, 0x45, 0x3d, 0xdf, 0x5d, 0x13, + 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x49, 0x21, 0x4d, 0x13, 0x01, + 0x45, 0x7e, 0x46, 0x03, 0x13, 0x41, 0x4a, 0x3c, 0x21, 0x01, 0x13, 0x01, + 0x57, 0x52, 0x14, 0x00, 0x13, 0x41, 0x47, 0x5c, 0x14, 0x02, 0x13, 0x01, + 0x47, 0x41, 0x81, 0x3d, 0x13, 0x41, 0xe1, 0x05, 0x13, 0x81, 0x9a, 0x02, + 0xa2, 0x8d, 0x02, 0xa3, 0x80, 0x02, 0xa4, 0xe7, 0x01, 0x42, 0x27, 0x01, + 0x0f, 0x13, 0x01, 0xa7, 0xd4, 0x01, 0x42, 0x22, 0x00, 0x39, 0x13, 0x01, + 0xe9, 0x07, 0x13, 0x81, 0xc4, 0x01, 0xaa, 0xb7, 0x01, 0xab, 0xaa, 0x01, + 0xac, 0x9d, 0x01, 0x42, 0x6c, 0x00, 0x2e, 0x13, 0x01, 0xae, 0x7f, 0x42, + 0x99, 0x04, 0x13, 0x13, 0x01, 0xb0, 0x6d, 0x42, 0x71, 0x00, 0x30, 0x13, + 0x01, 0xb3, 0x55, 0xb4, 0x3c, 0xf5, 0x09, 0x13, 0x81, 0x33, 0xb6, 0x06, + 0x42, 0x20, 0x20, 0x2f, 0x13, 0x41, 0xe1, 0x35, 0x13, 0x01, 0x05, 0x99, + 0x09, 0x17, 0x07, 0x93, 0xb7, 0x01, 0xff, 0xec, 0x0c, 0x13, 0x81, 0x09, + 0xf2, 0x0b, 0x13, 0xc1, 0x00, 0xf2, 0x60, 0x13, 0x41, 0xec, 0x61, 0x13, + 0x41, 0x48, 0x5b, 0x14, 0x5e, 0x13, 0x01, 0x4f, 0x71, 0x15, 0x5f, 0x13, + 0x41, 0xf5, 0x0a, 0x13, 0x41, 0xe1, 0x24, 0x13, 0x01, 0x42, 0x22, 0x00, + 0x25, 0x13, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x1f, 0x13, 0x01, 0x42, 0x22, + 0x00, 0x20, 0x13, 0x41, 0xe1, 0x38, 0x13, 0x01, 0x42, 0x22, 0x00, 0x36, + 0x13, 0x01, 0x42, 0x45, 0x05, 0x37, 0x13, 0x41, 0xe1, 0x2a, 0x13, 0x01, + 0x42, 0x22, 0x00, 0x2b, 0x13, 0x41, 0xe1, 0x28, 0x13, 0x01, 0x42, 0x24, + 0x02, 0x19, 0x13, 0x01, 0x42, 0x2f, 0x04, 0x23, 0x13, 0x01, 0x42, 0x20, + 0x20, 0x1e, 0x13, 0x41, 0xe1, 0x32, 0x13, 0x01, 0x42, 0x74, 0x00, 0x33, + 0x13, 0x41, 0xe1, 0x15, 0x13, 0x01, 0x42, 0x22, 0x00, 0x16, 0x13, 0x41, + 0xe1, 0x1c, 0x13, 0x01, 0x42, 0x22, 0x00, 0x1d, 0x13, 0x41, 0xe9, 0x08, + 0x13, 0x41, 0xe1, 0x17, 0x13, 0x01, 0x42, 0x22, 0x00, 0x18, 0x13, 0x41, + 0xe1, 0x26, 0x13, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x27, 0x13, 0x41, + 0xe1, 0x21, 0x13, 0x01, 0x42, 0x22, 0x00, 0x22, 0x13, 0x41, 0xe1, 0x1a, + 0x13, 0x01, 0x42, 0x22, 0x00, 0x1b, 0x13, 0x41, 0xe1, 0x2c, 0x13, 0x01, + 0x42, 0x22, 0x00, 0x2d, 0x13, 0x41, 0xe1, 0x06, 0x13, 0x01, 0xe9, 0x10, + 0x13, 0x01, 0xf5, 0x14, 0x13, 0x41, 0xa1, 0xd5, 0x01, 0x45, 0x82, 0xd2, + 0x7d, 0xf9, 0x01, 0x44, 0x02, 0xe6, 0xcc, 0xf3, 0x01, 0x46, 0xdd, 0xd3, + 0x7d, 0xf7, 0x01, 0x43, 0xfc, 0x0b, 0xbf, 0xfa, 0x01, 0x45, 0xb5, 0xdf, + 0x8d, 0xf9, 0x01, 0x0c, 0x0f, 0x8e, 0x01, 0xff, 0xa1, 0xa3, 0x01, 0x47, + 0x50, 0xc5, 0x31, 0x03, 0x01, 0x44, 0x96, 0xe4, 0x33, 0x03, 0x01, 0x43, + 0x89, 0xa3, 0x39, 0x03, 0x01, 0x45, 0xbe, 0xdb, 0x46, 0x03, 0x01, 0x44, + 0x12, 0xe5, 0x32, 0x03, 0x01, 0xa8, 0x77, 0xa9, 0x69, 0x43, 0xa1, 0xb1, + 0x3e, 0x03, 0x01, 0x45, 0x44, 0xdd, 0x3a, 0x03, 0x01, 0x45, 0x62, 0xdd, + 0x3b, 0x03, 0x01, 0x45, 0x37, 0x8a, 0x3c, 0x03, 0x01, 0xae, 0x38, 0x45, + 0xf7, 0xde, 0x49, 0x03, 0x01, 0x48, 0xf9, 0xbf, 0x40, 0x03, 0x01, 0x48, + 0x49, 0xc0, 0x35, 0x03, 0x01, 0x45, 0x79, 0xdf, 0x42, 0x03, 0x01, 0x45, + 0x05, 0xe0, 0x43, 0x03, 0x01, 0xb4, 0x0c, 0x44, 0xce, 0xe7, 0x3f, 0x03, + 0x01, 0x45, 0x77, 0xe1, 0x45, 0x03, 0x41, 0x44, 0xce, 0xe4, 0x44, 0x03, + 0x01, 0x45, 0x68, 0xdc, 0x38, 0x03, 0x41, 0x45, 0xed, 0xd9, 0x3d, 0x03, + 0x01, 0x03, 0xf1, 0x07, 0x01, 0xff, 0x48, 0xe8, 0x0f, 0x4a, 0x03, 0x01, + 0x42, 0xf5, 0x0f, 0x41, 0x03, 0x41, 0x44, 0x06, 0xe5, 0x47, 0x03, 0x01, + 0x43, 0x6d, 0xc1, 0x36, 0x03, 0x41, 0x43, 0xf9, 0x89, 0x37, 0x03, 0x01, + 0x44, 0x0e, 0xe8, 0x48, 0x03, 0x41, 0x43, 0xf0, 0xd9, 0x30, 0x03, 0x01, + 0x45, 0xa9, 0xdc, 0x34, 0x03, 0x41, 0x45, 0x4e, 0xdd, 0x45, 0xf9, 0x01, + 0xf4, 0x10, 0xf4, 0x41, 0xa1, 0x1b, 0x4a, 0x50, 0xa1, 0xe6, 0x29, 0x00, + 0xaf, 0x01, 0xff, 0x51, 0xf3, 0x52, 0x10, 0xf3, 0x01, 0x43, 0xc7, 0x45, + 0xe4, 0xf9, 0x01, 0x49, 0xb6, 0xb7, 0x1f, 0xf3, 0x41, 0x08, 0xe1, 0x55, + 0x06, 0x4a, 0x80, 0xa8, 0x5b, 0xf9, 0x41, 0x0f, 0xe9, 0x04, 0xc6, 0x02, + 0x0d, 0x7c, 0x07, 0x01, 0xff, 0x43, 0xda, 0xe8, 0x30, 0x2c, 0x00, 0xa2, + 0xac, 0x02, 0xa3, 0x9d, 0x02, 0xa4, 0x88, 0x02, 0xa6, 0xf9, 0x01, 0x47, + 0x41, 0xc7, 0x33, 0x2c, 0x00, 0x44, 0x46, 0xe5, 0x48, 0x2c, 0x00, 0xe9, + 0x3b, 0x2c, 0x80, 0xc2, 0x01, 0x44, 0xce, 0xe5, 0x3d, 0x2c, 0x00, 0xac, + 0xad, 0x01, 0x47, 0xa6, 0x64, 0x3f, 0x2c, 0x00, 0x45, 0x3e, 0xde, 0x40, + 0x2c, 0x00, 0xaf, 0x92, 0x01, 0xb0, 0x85, 0x01, 0x45, 0xba, 0xdf, 0x43, + 0x2c, 0x00, 0xb3, 0x51, 0xb4, 0x3d, 0x43, 0xef, 0xcb, 0x46, 0x2c, 0x00, + 0x44, 0xe2, 0xe7, 0x32, 0x2c, 0x00, 0xb9, 0x0f, 0xba, 0x01, 0xff, 0x45, + 0x5a, 0xdb, 0x38, 0x2c, 0x00, 0x46, 0x3f, 0xd2, 0x36, 0x2c, 0x40, 0x43, + 0xb3, 0x00, 0x51, 0x2c, 0x00, 0xa5, 0x08, 0xef, 0x56, 0x2c, 0x00, 0xf5, + 0x53, 0x2c, 0x40, 0xb2, 0x06, 0x43, 0x2c, 0x09, 0x35, 0x2c, 0x40, 0xe9, + 0x50, 0x2c, 0x00, 0xf5, 0x4f, 0x2c, 0x40, 0x4b, 0x08, 0x9a, 0x5d, 0x2c, + 0x00, 0x42, 0xdb, 0x02, 0x4c, 0x2c, 0x00, 0x45, 0x4a, 0xe1, 0x45, 0x2c, + 0x40, 0xa8, 0x19, 0x44, 0x1a, 0xe6, 0x44, 0x2c, 0x00, 0x48, 0xd1, 0xb5, + 0x54, 0x2c, 0x80, 0x06, 0x49, 0xa7, 0xb4, 0x52, 0x2c, 0x40, 0x4a, 0x30, + 0x9e, 0x55, 0x2c, 0x40, 0xe1, 0x4e, 0x2c, 0x00, 0x42, 0x12, 0x00, 0x4b, + 0x2c, 0xc0, 0x00, 0x43, 0x7c, 0x83, 0x5c, 0x2c, 0x40, 0xe5, 0x4a, 0x2c, + 0x00, 0x45, 0xc2, 0xd4, 0x42, 0x2c, 0x40, 0x42, 0x5c, 0x14, 0x41, 0x2c, + 0x00, 0x42, 0x5c, 0x01, 0x49, 0x2c, 0x40, 0x4f, 0x9e, 0x64, 0x5e, 0x2c, + 0x00, 0x46, 0xdf, 0xc8, 0x3e, 0x2c, 0x40, 0x4b, 0x03, 0x98, 0x3a, 0x2c, + 0x00, 0x07, 0x50, 0x1f, 0x0f, 0x02, 0x6d, 0x25, 0x01, 0xff, 0xe5, 0x39, + 0x2c, 0x00, 0x44, 0xa0, 0x7e, 0x5b, 0x2c, 0x40, 0x47, 0x73, 0xc5, 0x59, + 0x2c, 0x00, 0x49, 0xd0, 0xb5, 0x57, 0x2c, 0x40, 0x43, 0xec, 0x04, 0x5a, + 0x2c, 0x00, 0x44, 0xe5, 0xb5, 0x47, 0x2c, 0x40, 0x45, 0xfe, 0xdc, 0x3c, + 0x2c, 0x00, 0x44, 0xc2, 0xe6, 0x34, 0x2c, 0x00, 0x44, 0x42, 0xe8, 0x37, + 0x2c, 0x40, 0x4d, 0xeb, 0x79, 0x5f, 0x2c, 0x00, 0x45, 0xf3, 0x79, 0x4d, + 0x2c, 0x40, 0x46, 0x74, 0xc5, 0x58, 0x2c, 0x00, 0x43, 0x7b, 0xc8, 0x31, + 0x2c, 0x40, 0x43, 0xda, 0xe8, 0x00, 0x2c, 0x00, 0xa2, 0xac, 0x02, 0xa3, + 0x9d, 0x02, 0xa4, 0x88, 0x02, 0xa6, 0xf9, 0x01, 0x47, 0x41, 0xc7, 0x03, + 0x2c, 0x00, 0x44, 0x46, 0xe5, 0x18, 0x2c, 0x00, 0xe9, 0x0b, 0x2c, 0x80, + 0xc2, 0x01, 0x44, 0xce, 0xe5, 0x0d, 0x2c, 0x00, 0xac, 0xad, 0x01, 0x47, + 0xa6, 0x64, 0x0f, 0x2c, 0x00, 0x45, 0x3e, 0xde, 0x10, 0x2c, 0x00, 0xaf, + 0x92, 0x01, 0xb0, 0x85, 0x01, 0x45, 0xba, 0xdf, 0x13, 0x2c, 0x00, 0xb3, + 0x51, 0xb4, 0x3d, 0x43, 0xef, 0xcb, 0x16, 0x2c, 0x00, 0x44, 0xe2, 0xe7, + 0x02, 0x2c, 0x00, 0xb9, 0x0f, 0xba, 0x01, 0xff, 0x45, 0x5a, 0xdb, 0x08, + 0x2c, 0x00, 0x46, 0x3f, 0xd2, 0x06, 0x2c, 0x40, 0x43, 0xb3, 0x00, 0x21, + 0x2c, 0x00, 0xa5, 0x08, 0xef, 0x26, 0x2c, 0x00, 0xf5, 0x23, 0x2c, 0x40, + 0xb2, 0x06, 0x43, 0x2c, 0x09, 0x05, 0x2c, 0x40, 0xe9, 0x20, 0x2c, 0x00, + 0xf5, 0x1f, 0x2c, 0x40, 0x4b, 0x08, 0x9a, 0x2d, 0x2c, 0x00, 0x42, 0xdb, + 0x02, 0x1c, 0x2c, 0x00, 0x45, 0x4a, 0xe1, 0x15, 0x2c, 0x40, 0xa8, 0x19, + 0x44, 0x1a, 0xe6, 0x14, 0x2c, 0x00, 0x48, 0xd1, 0xb5, 0x24, 0x2c, 0x80, + 0x06, 0x49, 0xa7, 0xb4, 0x22, 0x2c, 0x40, 0x4a, 0x30, 0x9e, 0x25, 0x2c, + 0x40, 0xe1, 0x1e, 0x2c, 0x00, 0x42, 0x12, 0x00, 0x1b, 0x2c, 0xc0, 0x00, + 0x43, 0x7c, 0x83, 0x2c, 0x2c, 0x40, 0xe5, 0x1a, 0x2c, 0x00, 0x45, 0xc2, + 0xd4, 0x12, 0x2c, 0x40, 0x42, 0x5c, 0x14, 0x11, 0x2c, 0x00, 0x42, 0x5c, + 0x01, 0x19, 0x2c, 0x40, 0x4f, 0x9e, 0x64, 0x2e, 0x2c, 0x00, 0x46, 0xdf, + 0xc8, 0x0e, 0x2c, 0x40, 0x4b, 0x03, 0x98, 0x0a, 0x2c, 0x00, 0x07, 0x50, + 0x1f, 0x0f, 0x02, 0x6d, 0x25, 0x01, 0xff, 0xe5, 0x09, 0x2c, 0x00, 0x44, + 0xa0, 0x7e, 0x2b, 0x2c, 0x40, 0x47, 0x73, 0xc5, 0x29, 0x2c, 0x00, 0x49, + 0xd0, 0xb5, 0x27, 0x2c, 0x40, 0x43, 0xec, 0x04, 0x2a, 0x2c, 0x00, 0x44, + 0xe5, 0xb5, 0x17, 0x2c, 0x40, 0x45, 0xfe, 0xdc, 0x0c, 0x2c, 0x00, 0x44, + 0xc2, 0xe6, 0x04, 0x2c, 0x00, 0x44, 0x42, 0xe8, 0x07, 0x2c, 0x40, 0x4d, + 0xeb, 0x79, 0x2f, 0x2c, 0x00, 0x45, 0xf3, 0x79, 0x1d, 0x2c, 0x40, 0x46, + 0x74, 0xc5, 0x28, 0x2c, 0x00, 0x43, 0x7b, 0xc8, 0x01, 0x2c, 0x40, 0x4a, + 0x2e, 0xa5, 0x37, 0x21, 0x00, 0x49, 0x12, 0xb3, 0xda, 0xfa, 0x01, 0xb2, + 0x01, 0xff, 0x49, 0xbe, 0xac, 0x92, 0xf9, 0x01, 0xec, 0x67, 0xf4, 0xc1, + 0x00, 0x48, 0x09, 0x46, 0xca, 0xf6, 0x41, 0x42, 0x17, 0x00, 0x99, 0x26, + 0x80, 0xc0, 0x09, 0xad, 0xb1, 0x09, 0x43, 0x61, 0x77, 0xde, 0xf9, 0x01, + 0xaf, 0x0c, 0x4f, 0x0f, 0x6c, 0xb0, 0x20, 0x00, 0x47, 0x03, 0xcc, 0x13, + 0x30, 0x40, 0x06, 0xf7, 0x4f, 0x81, 0x09, 0x06, 0xc4, 0x93, 0x01, 0xff, + 0x0f, 0xe9, 0x04, 0xf3, 0x06, 0x07, 0xf1, 0x04, 0xc1, 0x04, 0x18, 0x07, + 0x27, 0x8f, 0x02, 0x53, 0xa9, 0x46, 0xfb, 0x10, 0x00, 0x0d, 0x7c, 0x07, + 0x01, 0xff, 0xa1, 0xf7, 0x01, 0x43, 0x45, 0x14, 0x01, 0x2d, 0x00, 0xa3, + 0xd4, 0x01, 0x43, 0xe4, 0x0f, 0x03, 0x2d, 0x00, 0x42, 0x92, 0x01, 0x04, + 0x2d, 0x00, 0xa7, 0xb9, 0x01, 0xa8, 0x9c, 0x01, 0x42, 0x9e, 0x01, 0x08, + 0x2d, 0x00, 0xaa, 0x87, 0x01, 0xab, 0x79, 0x43, 0xa1, 0x0c, 0x0a, 0x2d, + 0x00, 0x43, 0x60, 0x16, 0x0b, 0x2d, 0x00, 0x43, 0x36, 0x24, 0x0c, 0x2d, + 0x00, 0x42, 0x10, 0x00, 0x0d, 0x2d, 0x00, 0xb0, 0x53, 0x43, 0x70, 0xe9, + 0x17, 0x2d, 0x00, 0x43, 0x6f, 0x7b, 0x10, 0x2d, 0x00, 0xb3, 0x39, 0x02, + 0x12, 0x00, 0x2d, 0x42, 0x24, 0x0a, 0x13, 0x2d, 0x00, 0x43, 0xda, 0x27, + 0x05, 0x2d, 0x00, 0x42, 0x15, 0x01, 0x23, 0x2d, 0x00, 0x43, 0x21, 0xe4, + 0x1e, 0x2d, 0x00, 0x42, 0xd0, 0x1a, 0x27, 0x2d, 0x00, 0xba, 0x01, 0xff, + 0x42, 0x92, 0x01, 0x06, 0x2d, 0x00, 0x43, 0x95, 0x04, 0x0f, 0x2d, 0x40, + 0xee, 0x07, 0x2d, 0x00, 0xf2, 0x12, 0x2d, 0x40, 0x42, 0x1a, 0x00, 0x11, + 0x2d, 0x00, 0x43, 0x99, 0x14, 0x18, 0x2d, 0x40, 0x42, 0x17, 0x00, 0x0e, + 0x2d, 0x00, 0x43, 0x95, 0x04, 0x14, 0x2d, 0x40, 0x42, 0x1a, 0x00, 0x09, + 0x2d, 0x00, 0x43, 0x95, 0x04, 0x15, 0x2d, 0x40, 0x43, 0x90, 0x00, 0x1f, + 0x2d, 0x00, 0x42, 0x62, 0x01, 0x1b, 0x2d, 0x40, 0xa1, 0x10, 0xe5, 0x21, + 0x2d, 0x00, 0x42, 0xf7, 0x0a, 0x22, 0x2d, 0x00, 0x42, 0xdf, 0x4b, 0x25, + 0x2d, 0x40, 0xe5, 0x20, 0x2d, 0x00, 0xf2, 0x24, 0x2d, 0x40, 0x42, 0x1a, + 0x00, 0x02, 0x2d, 0x00, 0x43, 0x90, 0x00, 0x16, 0x2d, 0x40, 0x42, 0x1a, + 0x00, 0x1a, 0x2d, 0x00, 0xa8, 0x06, 0x42, 0x62, 0x01, 0x1c, 0x2d, 0x40, + 0x42, 0x17, 0x00, 0x1d, 0x2d, 0x00, 0x42, 0x9e, 0x01, 0x19, 0x2d, 0x40, + 0x42, 0x92, 0x01, 0x2d, 0x2d, 0x00, 0xee, 0x00, 0x2d, 0x40, 0xa1, 0x9a, + 0x02, 0x43, 0x45, 0x14, 0x91, 0x1c, 0x00, 0xa3, 0xf7, 0x01, 0x43, 0xe4, + 0x0f, 0x93, 0x1c, 0x00, 0xa5, 0xe4, 0x01, 0x42, 0xde, 0x08, 0xb6, 0x1c, + 0x00, 0xa7, 0xcf, 0x01, 0xa8, 0xab, 0x01, 0x42, 0x9e, 0x01, 0x98, 0x1c, + 0x00, 0xaa, 0x96, 0x01, 0xab, 0x87, 0x01, 0x02, 0x74, 0x00, 0x79, 0x43, + 0x60, 0x16, 0x9b, 0x1c, 0x00, 0x43, 0x36, 0x24, 0x9c, 0x1c, 0x00, 0x42, + 0x10, 0x00, 0x9d, 0x1c, 0x00, 0xb0, 0x59, 0x43, 0x70, 0xe9, 0xa7, 0x1c, + 0x00, 0x43, 0x6f, 0x7b, 0xa0, 0x1c, 0x00, 0xb3, 0x3f, 0xb4, 0x2d, 0x42, + 0x24, 0x0a, 0xa3, 0x1c, 0x00, 0x43, 0xda, 0x27, 0x95, 0x1c, 0x00, 0x42, + 0x15, 0x01, 0xb3, 0x1c, 0x00, 0x43, 0x21, 0xe4, 0xae, 0x1c, 0x00, 0x42, + 0xd0, 0x1a, 0xb7, 0x1c, 0x00, 0xba, 0x01, 0xff, 0x42, 0x92, 0x01, 0x96, + 0x1c, 0x00, 0x43, 0x95, 0x04, 0x9f, 0x1c, 0x40, 0xa1, 0x06, 0x49, 0x14, + 0xb7, 0xb9, 0x1c, 0x40, 0xee, 0x97, 0x1c, 0x00, 0xf2, 0xa2, 0x1c, 0x40, + 0x42, 0x1a, 0x00, 0xa1, 0x1c, 0x00, 0x43, 0x99, 0x14, 0xa8, 0x1c, 0x40, + 0x42, 0x17, 0x00, 0x9e, 0x1c, 0x00, 0x43, 0x95, 0x04, 0xa4, 0x1c, 0x40, + 0x49, 0x9f, 0xad, 0xbf, 0x1c, 0x00, 0xf3, 0x9a, 0x1c, 0x40, 0x42, 0x1a, + 0x00, 0x99, 0x1c, 0x00, 0x43, 0x95, 0x04, 0xa5, 0x1c, 0x40, 0x43, 0x90, + 0x00, 0xaf, 0x1c, 0x00, 0x42, 0x62, 0x01, 0xab, 0x1c, 0x40, 0xa1, 0x10, + 0xe5, 0xb1, 0x1c, 0x00, 0x42, 0xf7, 0x0a, 0xb2, 0x1c, 0x00, 0x42, 0xdf, + 0x4b, 0xb5, 0x1c, 0x40, 0xe5, 0xb0, 0x1c, 0x00, 0xf2, 0xb4, 0x1c, 0xc0, + 0x00, 0x46, 0x55, 0x42, 0xbe, 0x1c, 0x40, 0x42, 0x1a, 0x00, 0x92, 0x1c, + 0x00, 0x43, 0x90, 0x00, 0xa6, 0x1c, 0x40, 0x44, 0x54, 0x84, 0xb8, 0x1c, + 0x00, 0xee, 0x94, 0x1c, 0x40, 0x42, 0x1a, 0x00, 0xaa, 0x1c, 0x00, 0xa8, + 0x06, 0x42, 0x62, 0x01, 0xac, 0x1c, 0x40, 0x42, 0x17, 0x00, 0xad, 0x1c, + 0x00, 0x42, 0x9e, 0x01, 0xa9, 0x1c, 0x40, 0x42, 0x92, 0x01, 0xbd, 0x1c, + 0x00, 0x42, 0x9e, 0x01, 0xba, 0x1c, 0x00, 0xee, 0x90, 0x1c, 0x40, 0xa1, + 0x9a, 0x02, 0x43, 0x45, 0x14, 0xd1, 0x10, 0x00, 0xa3, 0xf7, 0x01, 0x43, + 0xe4, 0x0f, 0xd3, 0x10, 0x00, 0xa5, 0xe4, 0x01, 0x42, 0xde, 0x08, 0xf6, + 0x10, 0x00, 0xa7, 0xcf, 0x01, 0xa8, 0xab, 0x01, 0x42, 0x9e, 0x01, 0xd8, + 0x10, 0x00, 0xaa, 0x96, 0x01, 0xab, 0x87, 0x01, 0x02, 0x74, 0x00, 0x79, + 0x43, 0x60, 0x16, 0xdb, 0x10, 0x00, 0x43, 0x36, 0x24, 0xdc, 0x10, 0x00, + 0x42, 0x10, 0x00, 0xdd, 0x10, 0x00, 0xb0, 0x59, 0x43, 0x70, 0xe9, 0xe7, + 0x10, 0x00, 0x43, 0x6f, 0x7b, 0xe0, 0x10, 0x00, 0xb3, 0x3f, 0xb4, 0x2d, + 0x42, 0x24, 0x0a, 0xe3, 0x10, 0x00, 0x43, 0xda, 0x27, 0xd5, 0x10, 0x00, + 0x42, 0x15, 0x01, 0xf3, 0x10, 0x00, 0x43, 0x21, 0xe4, 0xee, 0x10, 0x00, + 0x42, 0xd0, 0x1a, 0xf7, 0x10, 0x00, 0xba, 0x01, 0xff, 0x42, 0x92, 0x01, + 0xd6, 0x10, 0x00, 0x43, 0x95, 0x04, 0xdf, 0x10, 0x40, 0xa1, 0x06, 0x49, + 0x14, 0xb7, 0xf9, 0x10, 0x40, 0xee, 0xd7, 0x10, 0x00, 0xf2, 0xe2, 0x10, + 0x40, 0x42, 0x1a, 0x00, 0xe1, 0x10, 0x00, 0x43, 0x99, 0x14, 0xe8, 0x10, + 0x40, 0x42, 0x17, 0x00, 0xde, 0x10, 0x00, 0x43, 0x95, 0x04, 0xe4, 0x10, + 0x40, 0x49, 0x9f, 0xad, 0xff, 0x10, 0x00, 0xf3, 0xda, 0x10, 0x40, 0x42, + 0x1a, 0x00, 0xd9, 0x10, 0x00, 0x43, 0x95, 0x04, 0xe5, 0x10, 0x40, 0x43, + 0x90, 0x00, 0xef, 0x10, 0x00, 0x42, 0x62, 0x01, 0xeb, 0x10, 0x40, 0xa1, + 0x10, 0xe5, 0xf1, 0x10, 0x00, 0x42, 0xf7, 0x0a, 0xf2, 0x10, 0x00, 0x42, + 0xdf, 0x4b, 0xf5, 0x10, 0x40, 0xe5, 0xf0, 0x10, 0x00, 0xf2, 0xf4, 0x10, + 0xc0, 0x00, 0x46, 0x55, 0x42, 0xfe, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xd2, + 0x10, 0x00, 0x43, 0x90, 0x00, 0xe6, 0x10, 0x40, 0x44, 0x54, 0x84, 0xf8, + 0x10, 0x00, 0xee, 0xd4, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xea, 0x10, 0x00, + 0xa8, 0x06, 0x42, 0x62, 0x01, 0xec, 0x10, 0x40, 0x42, 0x17, 0x00, 0xed, + 0x10, 0x00, 0x42, 0x9e, 0x01, 0xe9, 0x10, 0x40, 0x42, 0x92, 0x01, 0xfd, + 0x10, 0x00, 0x42, 0x9e, 0x01, 0xfa, 0x10, 0x00, 0xee, 0xd0, 0x10, 0x40, + 0xa1, 0xf7, 0x01, 0x43, 0x45, 0x14, 0xa1, 0x10, 0x00, 0xa3, 0xd4, 0x01, + 0x43, 0xe4, 0x0f, 0xa3, 0x10, 0x00, 0x42, 0x92, 0x01, 0xa4, 0x10, 0x00, + 0xa7, 0xb9, 0x01, 0xa8, 0x9c, 0x01, 0x42, 0x9e, 0x01, 0xa8, 0x10, 0x00, + 0xaa, 0x87, 0x01, 0xab, 0x79, 0x43, 0xa1, 0x0c, 0xaa, 0x10, 0x00, 0x43, + 0x60, 0x16, 0xab, 0x10, 0x00, 0x43, 0x36, 0x24, 0xac, 0x10, 0x00, 0x42, + 0x10, 0x00, 0xad, 0x10, 0x00, 0xb0, 0x53, 0x43, 0x70, 0xe9, 0xb7, 0x10, + 0x00, 0x43, 0x6f, 0x7b, 0xb0, 0x10, 0x00, 0xb3, 0x39, 0x02, 0x12, 0x00, + 0x2d, 0x42, 0x24, 0x0a, 0xb3, 0x10, 0x00, 0x43, 0xda, 0x27, 0xa5, 0x10, + 0x00, 0x42, 0x15, 0x01, 0xc3, 0x10, 0x00, 0x43, 0x21, 0xe4, 0xbe, 0x10, + 0x00, 0x42, 0xd0, 0x1a, 0xc7, 0x10, 0x00, 0xba, 0x01, 0xff, 0x42, 0x92, + 0x01, 0xa6, 0x10, 0x00, 0x43, 0x95, 0x04, 0xaf, 0x10, 0x40, 0xee, 0xa7, + 0x10, 0x00, 0xf2, 0xb2, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xb1, 0x10, 0x00, + 0x43, 0x99, 0x14, 0xb8, 0x10, 0x40, 0x42, 0x17, 0x00, 0xae, 0x10, 0x00, + 0x43, 0x95, 0x04, 0xb4, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xa9, 0x10, 0x00, + 0x43, 0x95, 0x04, 0xb5, 0x10, 0x40, 0x43, 0x90, 0x00, 0xbf, 0x10, 0x00, + 0x42, 0x62, 0x01, 0xbb, 0x10, 0x40, 0xa1, 0x10, 0xe5, 0xc1, 0x10, 0x00, + 0x42, 0xf7, 0x0a, 0xc2, 0x10, 0x00, 0x42, 0xdf, 0x4b, 0xc5, 0x10, 0x40, + 0xe5, 0xc0, 0x10, 0x00, 0xf2, 0xc4, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xa2, + 0x10, 0x00, 0x43, 0x90, 0x00, 0xb6, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xba, + 0x10, 0x00, 0xa8, 0x06, 0x42, 0x62, 0x01, 0xbc, 0x10, 0x40, 0x42, 0x17, + 0x00, 0xbd, 0x10, 0x00, 0x42, 0x9e, 0x01, 0xb9, 0x10, 0x40, 0x42, 0x92, + 0x01, 0xcd, 0x10, 0x00, 0xee, 0xa0, 0x10, 0x40, 0x4b, 0xce, 0x8f, 0x3a, + 0x22, 0x00, 0x08, 0x6d, 0x0b, 0x01, 0xff, 0x45, 0x75, 0x0b, 0x51, 0x22, + 0x00, 0x4a, 0x96, 0x35, 0x4e, 0x22, 0x40, 0x46, 0x5c, 0xb1, 0x8e, 0xf4, + 0x01, 0x43, 0x36, 0x06, 0x4a, 0x26, 0x40, 0x05, 0x50, 0x00, 0x01, 0xff, + 0x48, 0x81, 0xb8, 0xee, 0x26, 0x00, 0x47, 0x0b, 0xca, 0xed, 0x26, 0x40, + 0x46, 0x9b, 0xd3, 0xb2, 0xf3, 0x01, 0x44, 0x4b, 0xbb, 0xc4, 0xf9, 0x41, + 0xa1, 0xc9, 0x0a, 0xa5, 0x95, 0x0a, 0xa9, 0xc8, 0x08, 0xac, 0xc4, 0x07, + 0xaf, 0x86, 0x06, 0xb2, 0x95, 0x05, 0xb5, 0x01, 0xff, 0x47, 0xbc, 0xc6, + 0xfd, 0x26, 0x00, 0x02, 0x3f, 0x06, 0x14, 0xae, 0x06, 0x42, 0xc7, 0x02, + 0xdb, 0x23, 0x40, 0x51, 0x03, 0x54, 0x61, 0x20, 0x00, 0x48, 0x21, 0xbc, + 0xb1, 0x26, 0x40, 0x80, 0xcf, 0x04, 0x06, 0xa8, 0x4a, 0x01, 0xff, 0xa1, + 0xb5, 0x04, 0x4a, 0xe8, 0x9f, 0xe4, 0xff, 0x00, 0xa3, 0x88, 0x04, 0xa4, + 0xb9, 0x03, 0xa5, 0xaa, 0x03, 0x49, 0xa0, 0x14, 0x0e, 0xff, 0x00, 0x02, + 0x87, 0x00, 0x93, 0x03, 0x4c, 0x4b, 0x88, 0x0d, 0xff, 0x00, 0xac, 0x83, + 0x01, 0x46, 0xed, 0x69, 0xe3, 0xff, 0x00, 0xae, 0x6f, 0xb0, 0x5b, 0x02, + 0x7c, 0x00, 0x4b, 0xb2, 0x26, 0xb3, 0x18, 0x45, 0x99, 0x20, 0x5e, 0xff, + 0x00, 0x4d, 0x4d, 0x3a, 0x5c, 0xff, 0x00, 0x48, 0x91, 0xc2, 0xe6, 0xff, + 0x00, 0x48, 0x43, 0x78, 0xe5, 0xff, 0x40, 0x48, 0x47, 0x54, 0x1b, 0xff, + 0x00, 0x46, 0x68, 0x2d, 0x0f, 0xff, 0x40, 0x4e, 0xb6, 0x6b, 0x3c, 0xff, + 0x00, 0x05, 0xc9, 0x00, 0x01, 0xff, 0x4d, 0x88, 0x08, 0x5d, 0xff, 0x00, + 0x4b, 0x70, 0x1f, 0x09, 0xff, 0x00, 0x4e, 0xe1, 0x23, 0x3d, 0xff, 0x00, + 0x51, 0xa8, 0x59, 0x60, 0xff, 0x40, 0x4b, 0xbf, 0x30, 0x1f, 0xff, 0x00, + 0x4c, 0x20, 0x04, 0x02, 0xff, 0x40, 0x4b, 0xd8, 0x93, 0x05, 0xff, 0x00, + 0x48, 0x2f, 0x6b, 0x0b, 0xff, 0x00, 0x49, 0xfb, 0xa6, 0xe1, 0xff, 0x40, + 0x47, 0xcb, 0x6c, 0xe2, 0xff, 0x00, 0x4a, 0xbe, 0x61, 0x03, 0xff, 0x40, + 0x05, 0xe4, 0x04, 0x2a, 0xa5, 0x06, 0x47, 0xfb, 0x82, 0x3f, 0xff, 0x40, + 0x03, 0xc5, 0x00, 0x06, 0x4c, 0xbb, 0x8d, 0x1c, 0xff, 0x40, 0x4d, 0x88, + 0x08, 0x5b, 0xff, 0x00, 0x4b, 0x70, 0x1f, 0x08, 0xff, 0x00, 0x4e, 0xe1, + 0x23, 0x3b, 0xff, 0x00, 0x51, 0xa8, 0x59, 0x5f, 0xff, 0x40, 0x0f, 0xe9, + 0x04, 0x6d, 0x0d, 0x7c, 0x07, 0x01, 0xff, 0xe1, 0x41, 0xff, 0x00, 0xe2, + 0x42, 0xff, 0x00, 0xe3, 0x43, 0xff, 0x00, 0xe4, 0x44, 0xff, 0x00, 0xe5, + 0x45, 0xff, 0x00, 0xe6, 0x46, 0xff, 0x00, 0xe7, 0x47, 0xff, 0x00, 0xe8, + 0x48, 0xff, 0x00, 0xe9, 0x49, 0xff, 0x00, 0xea, 0x4a, 0xff, 0x00, 0xeb, + 0x4b, 0xff, 0x00, 0xec, 0x4c, 0xff, 0x00, 0xed, 0x4d, 0xff, 0x00, 0xee, + 0x4e, 0xff, 0x00, 0xef, 0x4f, 0xff, 0x00, 0xf0, 0x50, 0xff, 0x00, 0xf1, + 0x51, 0xff, 0x00, 0xf2, 0x52, 0xff, 0x00, 0xf3, 0x53, 0xff, 0x00, 0xf4, + 0x54, 0xff, 0x00, 0xf5, 0x55, 0xff, 0x00, 0xf6, 0x56, 0xff, 0x00, 0xf7, + 0x57, 0xff, 0x00, 0xf8, 0x58, 0xff, 0x00, 0xf9, 0x59, 0xff, 0x00, 0xfa, + 0x5a, 0xff, 0x40, 0xe1, 0x21, 0xff, 0x00, 0xe2, 0x22, 0xff, 0x00, 0xe3, + 0x23, 0xff, 0x00, 0xe4, 0x24, 0xff, 0x00, 0xe5, 0x25, 0xff, 0x00, 0xe6, + 0x26, 0xff, 0x00, 0xe7, 0x27, 0xff, 0x00, 0xe8, 0x28, 0xff, 0x00, 0xe9, + 0x29, 0xff, 0x00, 0xea, 0x2a, 0xff, 0x00, 0xeb, 0x2b, 0xff, 0x00, 0xec, + 0x2c, 0xff, 0x00, 0xed, 0x2d, 0xff, 0x00, 0xee, 0x2e, 0xff, 0x00, 0xef, + 0x2f, 0xff, 0x00, 0xf0, 0x30, 0xff, 0x00, 0xf1, 0x31, 0xff, 0x00, 0xf2, + 0x32, 0xff, 0x00, 0xf3, 0x33, 0xff, 0x00, 0xf4, 0x34, 0xff, 0x00, 0xf5, + 0x35, 0xff, 0x00, 0xf6, 0x36, 0xff, 0x00, 0xf7, 0x37, 0xff, 0x00, 0xf8, + 0x38, 0xff, 0x00, 0xf9, 0x39, 0xff, 0x00, 0xfa, 0x3a, 0xff, 0x40, 0x4a, + 0x7b, 0x20, 0x40, 0xff, 0x00, 0x4f, 0xd1, 0x54, 0x1e, 0xff, 0x40, 0x4a, + 0xa3, 0x11, 0x1d, 0xff, 0x00, 0x4f, 0xae, 0x00, 0x01, 0xff, 0x40, 0x05, + 0xf5, 0x05, 0x06, 0x4a, 0x13, 0x93, 0x04, 0xff, 0x40, 0x45, 0xd1, 0x09, + 0x18, 0xff, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x19, 0xff, 0x00, 0x43, + 0xcd, 0x09, 0x11, 0xff, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, + 0x10, 0xff, 0x40, 0x44, 0x25, 0x01, 0x13, 0xff, 0x00, 0x42, 0x15, 0x02, + 0x12, 0xff, 0x40, 0x44, 0x96, 0x1b, 0x17, 0xff, 0x00, 0x42, 0x30, 0x27, + 0x16, 0xff, 0x40, 0x43, 0xd7, 0x04, 0x15, 0xff, 0x00, 0x43, 0xfb, 0x05, + 0x14, 0xff, 0x40, 0x48, 0xdb, 0x93, 0xe0, 0xff, 0x00, 0x50, 0xd5, 0x03, + 0x3e, 0xff, 0x00, 0xaf, 0x01, 0xff, 0x43, 0xac, 0x10, 0x1a, 0xff, 0x00, + 0x02, 0x1a, 0x04, 0x01, 0xff, 0xe1, 0x0c, 0xff, 0x00, 0x49, 0x61, 0xaf, + 0x20, 0xff, 0x40, 0x48, 0xa9, 0x39, 0x06, 0xff, 0x00, 0x49, 0x4d, 0x32, + 0x07, 0xff, 0x00, 0x47, 0x95, 0x0b, 0x0a, 0xff, 0x40, 0x45, 0x33, 0x01, + 0x88, 0x25, 0x00, 0x05, 0x97, 0x19, 0x0c, 0x4a, 0xaa, 0xa6, 0xd7, 0x27, + 0x00, 0x44, 0xd6, 0x02, 0x2e, 0x00, 0x40, 0x46, 0xf7, 0x06, 0x15, 0xf3, + 0x01, 0x49, 0xbf, 0xb7, 0x1d, 0xf3, 0x41, 0xa1, 0x45, 0xa5, 0x2c, 0x4a, + 0x12, 0xa3, 0x64, 0xf3, 0x01, 0xaf, 0x01, 0xff, 0x46, 0x31, 0x26, 0x38, + 0xf4, 0x01, 0x03, 0x8e, 0x0e, 0x0d, 0x42, 0xa7, 0x01, 0x22, 0x23, 0xc0, + 0x00, 0x58, 0x2f, 0x26, 0x26, 0xf6, 0x41, 0x51, 0x58, 0x54, 0x25, 0xf4, + 0x01, 0x66, 0x5e, 0x04, 0xac, 0x27, 0x40, 0x4a, 0x97, 0x93, 0x76, 0xf9, + 0x01, 0x06, 0xc5, 0xd3, 0x01, 0xff, 0x48, 0xc1, 0xb9, 0xa3, 0x20, 0x00, + 0x43, 0x00, 0x96, 0x5f, 0xf3, 0x41, 0x06, 0x25, 0x15, 0x17, 0x08, 0x81, + 0xbe, 0x01, 0xff, 0x44, 0x1e, 0xe4, 0xbe, 0xf5, 0x01, 0x47, 0x7c, 0x83, + 0xbc, 0xf5, 0x01, 0x45, 0xa4, 0xcb, 0xbd, 0xf5, 0x41, 0x4d, 0x40, 0x7f, + 0x5f, 0x21, 0x00, 0x45, 0xa0, 0x0c, 0x44, 0x20, 0x40, 0xe7, 0x2b, 0xf3, + 0x81, 0xaf, 0x01, 0x02, 0xaf, 0x18, 0x9e, 0x01, 0x44, 0x72, 0xe6, 0xd5, + 0xfa, 0x01, 0x42, 0x20, 0x04, 0xb6, 0xf9, 0x81, 0x8a, 0x01, 0xb2, 0x55, + 0xb5, 0x06, 0x46, 0xdd, 0xd6, 0x8a, 0xf9, 0x41, 0x45, 0x33, 0x06, 0xf2, + 0x26, 0x00, 0xb2, 0x01, 0xff, 0x80, 0x0c, 0x4d, 0x42, 0x79, 0x05, 0x20, + 0x00, 0x47, 0x29, 0x94, 0x1c, 0x22, 0x40, 0x57, 0xb5, 0x1a, 0x23, 0x27, + 0x00, 0xa3, 0x22, 0x04, 0x9f, 0x0a, 0x12, 0x4b, 0x61, 0x96, 0x40, 0xf3, + 0x01, 0x52, 0xbd, 0x28, 0xc6, 0xf7, 0x01, 0x58, 0x3f, 0x28, 0x22, 0x27, + 0x40, 0x44, 0xb9, 0x00, 0x5b, 0x20, 0x00, 0x4b, 0xa3, 0x0a, 0x58, 0x20, + 0x40, 0x53, 0xb2, 0x45, 0x25, 0x27, 0x00, 0x63, 0x00, 0x0a, 0x94, 0x2b, + 0x40, 0x44, 0x90, 0x65, 0x00, 0x22, 0x00, 0x43, 0x81, 0x75, 0xa9, 0x22, + 0x00, 0xab, 0x0c, 0x46, 0xab, 0xbf, 0x0c, 0x00, 0x00, 0x4b, 0x9f, 0x9b, + 0x60, 0xf9, 0x41, 0x4a, 0x54, 0x9d, 0x74, 0xf3, 0x81, 0x0c, 0x4e, 0x3e, + 0x4c, 0x10, 0x2e, 0x00, 0x43, 0xa1, 0x01, 0xdc, 0x2a, 0x40, 0x4b, 0x52, + 0x90, 0x7d, 0xf3, 0x41, 0x46, 0x6b, 0xc2, 0x63, 0xf4, 0x41, 0x42, 0x33, + 0x00, 0xc0, 0xf5, 0x01, 0x4c, 0x9f, 0x88, 0xad, 0xfa, 0x41, 0x42, 0xa2, + 0x31, 0x01, 0xf3, 0x41, 0xa1, 0x5e, 0xa5, 0x50, 0xaf, 0x2a, 0xb5, 0x1c, + 0xf9, 0xb0, 0xfa, 0xc1, 0x00, 0x04, 0xa1, 0x01, 0x01, 0xff, 0x44, 0x14, + 0x5e, 0x4f, 0xf9, 0x01, 0x48, 0x44, 0x2e, 0x85, 0xf5, 0x01, 0x46, 0x51, + 0xd5, 0xf8, 0xf6, 0x41, 0x49, 0xa2, 0x8b, 0x33, 0xf6, 0x01, 0x42, 0x77, + 0x00, 0x88, 0xfa, 0x41, 0x48, 0x2f, 0x35, 0xbe, 0xf4, 0x01, 0x49, 0x5a, + 0x1f, 0x66, 0x27, 0x00, 0x43, 0x15, 0x01, 0x98, 0x26, 0xc0, 0x00, 0x02, + 0x9b, 0x01, 0x01, 0xff, 0x4c, 0x6b, 0x89, 0xb4, 0xf3, 0x01, 0x4f, 0x8f, + 0x1f, 0x55, 0x20, 0x40, 0x49, 0xf0, 0xb6, 0x9c, 0x26, 0x00, 0x4a, 0xd8, + 0xaa, 0xaa, 0xf4, 0x41, 0x49, 0xfa, 0xaf, 0xf3, 0x26, 0x00, 0x45, 0x02, + 0xde, 0xa9, 0xf9, 0x01, 0xb4, 0x01, 0xff, 0x45, 0xe4, 0x8f, 0x7f, 0xf9, + 0x01, 0x45, 0x10, 0x71, 0xd3, 0xfa, 0x01, 0x44, 0x86, 0x21, 0xe5, 0x23, + 0x40, 0x59, 0x66, 0x21, 0xd1, 0xf3, 0x01, 0x05, 0x1d, 0xdc, 0xb3, 0x01, + 0xac, 0x89, 0x01, 0x52, 0x44, 0x4e, 0x0d, 0x2a, 0x00, 0xb2, 0x30, 0xb3, + 0x11, 0x07, 0x14, 0xcd, 0x01, 0xff, 0x44, 0xb9, 0x00, 0x2d, 0x2e, 0x00, + 0x4b, 0xa3, 0x0a, 0x59, 0x20, 0x40, 0xe8, 0x1f, 0xf4, 0x81, 0x06, 0x4d, + 0xb0, 0x81, 0x4a, 0xf4, 0x41, 0x57, 0x17, 0x29, 0x65, 0xf3, 0x01, 0x43, + 0xae, 0x1a, 0xc9, 0x25, 0x00, 0x51, 0x8a, 0x55, 0xa3, 0xf3, 0x41, 0xe5, + 0x25, 0xf5, 0x81, 0x27, 0x03, 0x9b, 0x16, 0x01, 0xff, 0x4b, 0x8d, 0x6a, + 0x47, 0xf9, 0x01, 0x4c, 0x99, 0x6c, 0x3d, 0x26, 0x80, 0x06, 0x4e, 0xd7, + 0x75, 0x68, 0x20, 0x40, 0x80, 0x01, 0xff, 0x46, 0xf7, 0x06, 0x13, 0xf3, + 0x01, 0x49, 0xbf, 0xb7, 0x1b, 0xf3, 0x41, 0x02, 0x7a, 0x00, 0x15, 0x47, + 0x1b, 0xc6, 0xe8, 0xf9, 0x01, 0x04, 0x27, 0x46, 0x01, 0xff, 0x49, 0xe6, + 0xab, 0x87, 0xf3, 0x01, 0xf3, 0x86, 0xf3, 0x41, 0x45, 0x20, 0x94, 0x92, + 0xf6, 0x01, 0x4b, 0xff, 0x9c, 0xef, 0xf9, 0x41, 0x02, 0x60, 0x00, 0x11, + 0x02, 0xa0, 0x03, 0x01, 0xff, 0x46, 0x91, 0xd1, 0x9e, 0xf3, 0x01, 0x49, + 0xd4, 0xb4, 0xfd, 0xf4, 0x41, 0x47, 0xab, 0xc5, 0xc4, 0xf5, 0x01, 0x46, + 0x3e, 0xa3, 0xc1, 0xf4, 0x01, 0x49, 0x70, 0x1e, 0x1c, 0x00, 0x40, 0x44, + 0xe9, 0x10, 0x12, 0x20, 0x00, 0x45, 0x62, 0x47, 0x07, 0x20, 0x40, 0xa1, + 0x23, 0xad, 0x15, 0x44, 0x6a, 0xe6, 0x3a, 0xf9, 0x01, 0x02, 0xcf, 0x00, + 0x01, 0xff, 0x48, 0x79, 0xbd, 0xa1, 0xf3, 0x01, 0xf9, 0xf4, 0x26, 0x40, + 0x48, 0xfa, 0x1e, 0x40, 0x26, 0x00, 0x57, 0x84, 0x2b, 0xaa, 0x00, 0x40, + 0x49, 0x40, 0xb5, 0x28, 0xf6, 0x01, 0x44, 0x12, 0x18, 0xb6, 0xfa, 0x41, + 0xa3, 0x55, 0x43, 0x24, 0xd6, 0xda, 0xf9, 0x01, 0xac, 0x23, 0x44, 0x75, + 0xd1, 0x6a, 0xf4, 0x01, 0x4a, 0xea, 0xa7, 0x2b, 0x26, 0x00, 0x4e, 0x2b, + 0x76, 0x85, 0xf3, 0x01, 0x02, 0xdd, 0x03, 0x01, 0xff, 0x44, 0x3c, 0xd7, + 0xb7, 0xf5, 0x01, 0x47, 0x25, 0x43, 0xe0, 0xf4, 0x41, 0x44, 0x02, 0xe4, + 0xc6, 0xf9, 0x01, 0xac, 0x01, 0xff, 0x47, 0xc3, 0xc6, 0x42, 0xf3, 0x01, + 0x0d, 0x51, 0x2d, 0x01, 0xff, 0x09, 0x0d, 0x0f, 0x06, 0x5f, 0xa7, 0x0f, + 0xde, 0x26, 0x40, 0x50, 0x0b, 0x21, 0x2f, 0x29, 0x00, 0x4f, 0x90, 0x39, + 0x2c, 0x29, 0x40, 0x02, 0x60, 0x00, 0x0c, 0x4b, 0x76, 0x9a, 0x3b, 0x21, + 0x00, 0x44, 0xf6, 0x8e, 0xed, 0xf3, 0x41, 0x52, 0xb8, 0x4c, 0x79, 0xf9, + 0x01, 0x47, 0x0f, 0xc9, 0x86, 0xf4, 0x01, 0x44, 0x15, 0x3c, 0x26, 0xf9, + 0x01, 0xb3, 0xc5, 0x01, 0x4f, 0xf0, 0x6c, 0x18, 0xf6, 0x01, 0x04, 0x51, + 0x00, 0x01, 0xff, 0x80, 0x06, 0x49, 0x3b, 0xb4, 0x36, 0xf6, 0x41, 0x02, + 0x18, 0x04, 0xa1, 0x01, 0x4e, 0xfd, 0x6f, 0xe4, 0xfa, 0x01, 0x5b, 0x37, + 0x19, 0x2b, 0xf9, 0x01, 0x4c, 0x27, 0x88, 0x15, 0xf9, 0x01, 0x4f, 0x3f, + 0x69, 0x24, 0xf6, 0x01, 0xad, 0x7b, 0x4f, 0xf3, 0x69, 0x45, 0xf6, 0x01, + 0xaf, 0x46, 0xb0, 0x32, 0x4c, 0x1f, 0x8d, 0x44, 0xf6, 0x01, 0x50, 0x5e, + 0x61, 0x1b, 0xf6, 0x81, 0x14, 0xb4, 0x06, 0x5a, 0xec, 0x1f, 0x74, 0xf9, + 0x41, 0x4b, 0xec, 0x8d, 0x02, 0xf6, 0x01, 0x4a, 0xae, 0xa2, 0x12, 0xf9, + 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, 0x53, 0x25, 0x48, 0x1d, 0xf6, 0x01, + 0x4b, 0xbd, 0x9c, 0x1c, 0xf6, 0x41, 0x57, 0xfd, 0x29, 0x73, 0xf9, 0x01, + 0x4a, 0x46, 0xa1, 0xe3, 0xfa, 0x01, 0x4c, 0x77, 0x89, 0x7a, 0xf9, 0x41, + 0x49, 0xaa, 0xb1, 0x46, 0xf6, 0x01, 0x51, 0xbc, 0x56, 0x28, 0xf9, 0x01, + 0x04, 0xfc, 0x03, 0x01, 0xff, 0x58, 0x9f, 0x25, 0xe2, 0xfa, 0x01, 0x45, + 0x08, 0x07, 0x2e, 0xf6, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4e, 0x0f, 0x6f, + 0x30, 0xf6, 0x01, 0x48, 0x61, 0xc2, 0x2e, 0xf9, 0x41, 0x4b, 0x8b, 0x93, + 0x37, 0xf6, 0x01, 0x46, 0x61, 0xd4, 0xd0, 0xf9, 0x41, 0x48, 0x15, 0x6f, + 0x13, 0xf6, 0x01, 0x48, 0x79, 0xc2, 0x20, 0xf9, 0x41, 0x57, 0x42, 0x2a, + 0x0b, 0xf6, 0x01, 0x50, 0xae, 0x5b, 0x31, 0xf6, 0x41, 0x4c, 0x37, 0x84, + 0xe7, 0xf4, 0x01, 0xa1, 0xf5, 0x47, 0x50, 0xce, 0x5b, 0x0e, 0x2e, 0x00, + 0xa7, 0x83, 0x20, 0x04, 0xc9, 0x00, 0xcb, 0x1f, 0x4b, 0xc7, 0x95, 0xcf, + 0x23, 0x00, 0xac, 0xc1, 0x1b, 0xad, 0x8d, 0x1a, 0xae, 0x86, 0x19, 0x02, + 0x7c, 0x00, 0xd0, 0x17, 0xb2, 0xfb, 0x16, 0xb3, 0xe3, 0x16, 0x08, 0x89, + 0xc1, 0xe6, 0x01, 0xb5, 0xbb, 0x01, 0x4d, 0x9a, 0x82, 0x32, 0xf3, 0x01, + 0xb8, 0x11, 0x42, 0x4d, 0x00, 0x41, 0xf4, 0xc1, 0x00, 0x47, 0xce, 0xb6, + 0x53, 0xf4, 0x01, 0xf3, 0x40, 0xf4, 0x41, 0xa3, 0x88, 0x01, 0x51, 0x66, + 0x57, 0x11, 0xf6, 0x01, 0xb4, 0x01, 0xff, 0x19, 0xe1, 0x05, 0x39, 0xb2, + 0x01, 0xff, 0x52, 0xd2, 0x4a, 0x7d, 0xf4, 0x01, 0x0c, 0xfb, 0x86, 0x01, + 0xff, 0x54, 0x89, 0x3d, 0xb4, 0xf7, 0x01, 0x4b, 0x33, 0x5b, 0xa7, 0xf7, + 0x01, 0xb3, 0x11, 0x06, 0xad, 0x02, 0x01, 0xff, 0x46, 0x00, 0x04, 0x89, + 0xf7, 0x01, 0x46, 0xdb, 0x04, 0x93, 0xf7, 0x41, 0x46, 0x16, 0x17, 0xae, + 0xf7, 0x01, 0x52, 0x6c, 0x4d, 0xba, 0xf7, 0x41, 0x45, 0xd1, 0x09, 0xf8, + 0x06, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0xf9, 0x06, 0x00, 0x43, 0xcd, + 0x09, 0xf1, 0x06, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xf0, + 0x06, 0x40, 0x44, 0x25, 0x01, 0xf3, 0x06, 0x00, 0x42, 0x15, 0x02, 0xf2, + 0x06, 0x40, 0x44, 0x96, 0x1b, 0xf7, 0x06, 0x00, 0x42, 0x30, 0x27, 0xf6, + 0x06, 0x40, 0x43, 0xd7, 0x04, 0xf5, 0x06, 0x00, 0x43, 0xfb, 0x05, 0xf4, + 0x06, 0x40, 0x43, 0xed, 0x00, 0x39, 0x22, 0x00, 0x09, 0xb0, 0x00, 0x01, + 0xff, 0x44, 0xb9, 0x00, 0x21, 0x00, 0x00, 0x4d, 0xbd, 0x30, 0x49, 0x20, + 0x40, 0x4c, 0x8f, 0x89, 0x07, 0x21, 0x00, 0x02, 0xd0, 0x00, 0x01, 0xff, + 0x45, 0xda, 0x02, 0xac, 0x20, 0x00, 0x4e, 0xad, 0x6e, 0xa0, 0x20, 0x00, + 0x05, 0x15, 0xdf, 0x01, 0xff, 0x46, 0x35, 0xd0, 0xf0, 0xf3, 0x01, 0x4b, + 0x37, 0x99, 0xe4, 0xf3, 0x41, 0x02, 0x18, 0x04, 0xca, 0x14, 0x06, 0xf4, + 0x05, 0x88, 0x14, 0x49, 0xa0, 0x14, 0x62, 0x13, 0x00, 0x07, 0xbf, 0x35, + 0xb3, 0x13, 0xb0, 0xa4, 0x13, 0x4d, 0xbd, 0x30, 0x67, 0x13, 0x00, 0xb3, + 0x4b, 0x0b, 0x5d, 0x9b, 0x06, 0x49, 0xc8, 0xb7, 0x61, 0x13, 0x40, 0x46, + 0x65, 0xd0, 0x96, 0x13, 0x00, 0xa4, 0x26, 0x45, 0x2c, 0xce, 0x97, 0x13, + 0x00, 0xab, 0x12, 0x46, 0x91, 0x8d, 0x92, 0x13, 0x00, 0x4c, 0x8b, 0x8d, + 0x93, 0x13, 0x00, 0x45, 0xae, 0xe1, 0x90, 0x13, 0x40, 0x44, 0xe2, 0x4a, + 0x95, 0x13, 0x00, 0x43, 0x23, 0x57, 0x99, 0x13, 0x40, 0x44, 0x9e, 0xa1, + 0x91, 0x13, 0x80, 0x06, 0x44, 0x8e, 0xe5, 0x94, 0x13, 0x40, 0x46, 0x2b, + 0xce, 0x98, 0x13, 0x40, 0xa5, 0xc2, 0x12, 0x08, 0x3a, 0x16, 0x01, 0xff, + 0xa2, 0xe3, 0x11, 0xa3, 0xab, 0x10, 0xa4, 0x98, 0x0f, 0xa6, 0xde, 0x0e, + 0xa7, 0x9c, 0x0c, 0xa8, 0xa2, 0x0b, 0xaa, 0xf6, 0x0a, 0xab, 0xdc, 0x09, + 0xac, 0xb0, 0x09, 0xad, 0xf1, 0x08, 0xae, 0x99, 0x08, 0xb0, 0x91, 0x07, + 0xb1, 0xf7, 0x05, 0xb2, 0xc5, 0x05, 0xb3, 0x89, 0x04, 0xb4, 0xc4, 0x02, + 0xb6, 0x9d, 0x02, 0xb7, 0xf7, 0x01, 0xb8, 0x98, 0x01, 0xb9, 0x73, 0xba, + 0x01, 0xff, 0xe1, 0xd8, 0x12, 0x80, 0x67, 0xe5, 0xdd, 0x12, 0x80, 0x5e, + 0xa8, 0x38, 0xe9, 0xda, 0x12, 0x00, 0xef, 0xde, 0x12, 0x80, 0x2b, 0xf5, + 0xd9, 0x12, 0x00, 0x42, 0xa9, 0x01, 0xdf, 0x12, 0x00, 0xba, 0x01, 0xff, + 0xe1, 0xb0, 0x2d, 0x80, 0x15, 0xe5, 0xb5, 0x2d, 0x80, 0x0c, 0xe9, 0xb2, + 0x2d, 0x00, 0xef, 0xb6, 0x2d, 0x00, 0xf5, 0xb1, 0x2d, 0x40, 0xe5, 0xb4, + 0x2d, 0x40, 0xe1, 0xb3, 0x2d, 0x40, 0xe1, 0x8b, 0x2d, 0x40, 0xe1, 0xe0, + 0x12, 0x80, 0x1b, 0xe5, 0xe5, 0x12, 0x80, 0x12, 0xe9, 0xe2, 0x12, 0x00, + 0xef, 0xe6, 0x12, 0x00, 0xf5, 0xe1, 0x12, 0x00, 0x42, 0xa9, 0x01, 0xe7, + 0x12, 0x40, 0xe5, 0xe4, 0x12, 0x40, 0xe1, 0xe3, 0x12, 0x40, 0xe5, 0xdc, + 0x12, 0x40, 0xe1, 0xdb, 0x12, 0x40, 0xe1, 0xe8, 0x12, 0x80, 0x1a, 0xe5, + 0xed, 0x12, 0x80, 0x11, 0xe9, 0xea, 0x12, 0x00, 0xef, 0xee, 0x12, 0x80, + 0x04, 0xf5, 0xe9, 0x12, 0x40, 0xe1, 0xef, 0x12, 0x40, 0xe5, 0xec, 0x12, + 0x40, 0xe1, 0xeb, 0x12, 0x40, 0xe1, 0x80, 0x12, 0x80, 0x53, 0xe5, 0x85, + 0x12, 0x80, 0x4a, 0xe9, 0x82, 0x12, 0x00, 0xef, 0x86, 0x12, 0x80, 0x3d, + 0xf5, 0x81, 0x12, 0x00, 0xb7, 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xd0, 0x2d, + 0x80, 0x15, 0xe5, 0xd5, 0x2d, 0x80, 0x0c, 0xe9, 0xd2, 0x2d, 0x00, 0xef, + 0xd6, 0x2d, 0x00, 0xf5, 0xd1, 0x2d, 0x40, 0xe5, 0xd4, 0x2d, 0x40, 0xe1, + 0xd3, 0x2d, 0x40, 0xe1, 0x88, 0x12, 0x80, 0x0d, 0xe5, 0x8d, 0x12, 0x80, + 0x04, 0xe9, 0x8a, 0x12, 0x40, 0xe5, 0x8c, 0x12, 0x40, 0xe1, 0x8b, 0x12, + 0x40, 0xe1, 0x87, 0x12, 0x40, 0xe5, 0x84, 0x12, 0x40, 0xe1, 0x83, 0x12, + 0x40, 0xe1, 0xc8, 0x12, 0x80, 0x1a, 0xe5, 0xcd, 0x12, 0x80, 0x11, 0xe9, + 0xca, 0x12, 0x00, 0xef, 0xce, 0x12, 0x80, 0x04, 0xf5, 0xc9, 0x12, 0x40, + 0xe1, 0xcf, 0x12, 0x40, 0xe5, 0xcc, 0x12, 0x40, 0xe1, 0xcb, 0x12, 0x40, + 0xe1, 0x68, 0x12, 0x80, 0x1b, 0xe5, 0x6d, 0x12, 0x80, 0x12, 0xe9, 0x6a, + 0x12, 0x00, 0xef, 0x6e, 0x12, 0x00, 0xf5, 0x69, 0x12, 0x00, 0x42, 0xa9, + 0x01, 0x6f, 0x12, 0x40, 0xe5, 0x6c, 0x12, 0x40, 0xe1, 0x6b, 0x12, 0x40, + 0xe1, 0x70, 0x12, 0x80, 0xb8, 0x01, 0xe5, 0x75, 0x12, 0x80, 0xae, 0x01, + 0xa8, 0x82, 0x01, 0xe9, 0x72, 0x12, 0x00, 0xef, 0x76, 0x12, 0x80, 0x75, + 0xb3, 0x4f, 0x02, 0x53, 0x00, 0x30, 0xf5, 0x71, 0x12, 0x00, 0x42, 0xa9, + 0x01, 0x77, 0x12, 0x00, 0xba, 0x01, 0xff, 0xe1, 0x40, 0x13, 0x80, 0x1a, + 0xe5, 0x45, 0x13, 0x80, 0x11, 0xe9, 0x42, 0x13, 0x00, 0xef, 0x46, 0x13, + 0x80, 0x04, 0xf5, 0x41, 0x13, 0x40, 0xe1, 0x47, 0x13, 0x40, 0xe5, 0x44, + 0x13, 0x40, 0xe1, 0x43, 0x13, 0x40, 0x42, 0xda, 0x10, 0x03, 0xab, 0x00, + 0xe5, 0x05, 0xab, 0x80, 0x0c, 0xe9, 0x02, 0xab, 0x00, 0xef, 0x06, 0xab, + 0x00, 0xf5, 0x01, 0xab, 0x40, 0xe5, 0x04, 0xab, 0x40, 0xe1, 0x38, 0x13, + 0x80, 0x1b, 0xe5, 0x3d, 0x13, 0x80, 0x12, 0xe9, 0x3a, 0x13, 0x00, 0xef, + 0x3e, 0x13, 0x00, 0xf5, 0x39, 0x13, 0x00, 0x42, 0xa9, 0x01, 0x3f, 0x13, + 0x40, 0xe5, 0x3c, 0x13, 0x40, 0xe1, 0x3b, 0x13, 0x40, 0xe1, 0x86, 0x2d, + 0x40, 0xe1, 0x20, 0x13, 0x80, 0x20, 0xe5, 0x25, 0x13, 0x80, 0x17, 0xe9, + 0x22, 0x13, 0x00, 0xef, 0x26, 0x13, 0x80, 0x0a, 0xf5, 0x21, 0x13, 0x00, + 0x42, 0xa9, 0x01, 0x27, 0x13, 0x40, 0xe1, 0x8f, 0x2d, 0x40, 0xe5, 0x24, + 0x13, 0x40, 0xe1, 0x23, 0x13, 0x40, 0xe5, 0x74, 0x12, 0x40, 0xe1, 0x73, + 0x12, 0x40, 0xe1, 0x30, 0x12, 0x80, 0xaf, 0x01, 0xe5, 0x35, 0x12, 0x80, + 0x89, 0x01, 0xa8, 0x5e, 0xe9, 0x32, 0x12, 0x00, 0xef, 0x36, 0x12, 0x80, + 0x51, 0xb3, 0x31, 0xf5, 0x31, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x37, 0x12, + 0x00, 0xba, 0x01, 0xff, 0xe1, 0x20, 0x12, 0x80, 0x1b, 0xe5, 0x25, 0x12, + 0x80, 0x12, 0xe9, 0x22, 0x12, 0x00, 0xef, 0x26, 0x12, 0x00, 0xf5, 0x21, + 0x12, 0x00, 0x42, 0xa9, 0x01, 0x27, 0x12, 0x40, 0xe5, 0x24, 0x12, 0x40, + 0xe1, 0x23, 0x12, 0x40, 0xe1, 0xa0, 0x2d, 0x80, 0x15, 0xe5, 0xa5, 0x2d, + 0x80, 0x0c, 0xe9, 0xa2, 0x2d, 0x00, 0xef, 0xa6, 0x2d, 0x00, 0xf5, 0xa1, + 0x2d, 0x40, 0xe5, 0xa4, 0x2d, 0x40, 0xe1, 0xa3, 0x2d, 0x40, 0xe1, 0x83, + 0x2d, 0x40, 0xe1, 0x38, 0x12, 0x80, 0x20, 0xe5, 0x3d, 0x12, 0x80, 0x17, + 0xe9, 0x3a, 0x12, 0x00, 0xef, 0x3e, 0x12, 0x80, 0x0a, 0xf5, 0x39, 0x12, + 0x00, 0x42, 0xa9, 0x01, 0x3f, 0x12, 0x40, 0xe1, 0x84, 0x2d, 0x40, 0xe5, + 0x3c, 0x12, 0x40, 0xe1, 0x3b, 0x12, 0x40, 0x08, 0x61, 0xba, 0x04, 0xe5, + 0x34, 0x12, 0x40, 0x43, 0x31, 0xc8, 0x84, 0x13, 0x00, 0x43, 0xf6, 0xe4, + 0x88, 0x13, 0x00, 0x43, 0xd3, 0x8c, 0x80, 0x13, 0x00, 0x43, 0x51, 0x02, + 0x8c, 0x13, 0x40, 0xe1, 0x33, 0x12, 0x40, 0xe1, 0x28, 0x12, 0x80, 0x26, + 0xe5, 0x2d, 0x12, 0x80, 0x1d, 0xe9, 0x2a, 0x12, 0x00, 0xef, 0x2e, 0x12, + 0x80, 0x10, 0xf5, 0x29, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x2f, 0x12, 0x00, + 0x42, 0x20, 0x20, 0x58, 0x13, 0x40, 0xe1, 0x82, 0x2d, 0x40, 0xe5, 0x2c, + 0x12, 0x40, 0xe1, 0x2b, 0x12, 0x40, 0xe1, 0x40, 0x12, 0x80, 0x8d, 0x01, + 0xe5, 0x45, 0x12, 0x80, 0x83, 0x01, 0xa8, 0x4a, 0xe9, 0x42, 0x12, 0x00, + 0xef, 0x46, 0x12, 0x80, 0x3d, 0xf5, 0x41, 0x12, 0x00, 0xb7, 0x21, 0xb9, + 0x01, 0xff, 0xe1, 0xc0, 0x2d, 0x80, 0x15, 0xe5, 0xc5, 0x2d, 0x80, 0x0c, + 0xe9, 0xc2, 0x2d, 0x00, 0xef, 0xc6, 0x2d, 0x00, 0xf5, 0xc1, 0x2d, 0x40, + 0xe5, 0xc4, 0x2d, 0x40, 0xe1, 0xc3, 0x2d, 0x40, 0xe1, 0x48, 0x12, 0x80, + 0x0d, 0xe5, 0x4d, 0x12, 0x80, 0x04, 0xe9, 0x4a, 0x12, 0x40, 0xe5, 0x4c, + 0x12, 0x40, 0xe1, 0x4b, 0x12, 0x40, 0xe1, 0x47, 0x12, 0x40, 0xe1, 0x50, + 0x12, 0x80, 0x2e, 0xe5, 0x55, 0x12, 0x80, 0x25, 0xe9, 0x52, 0x12, 0x00, + 0xef, 0x56, 0x12, 0x00, 0xf5, 0x51, 0x12, 0x00, 0xb7, 0x01, 0xff, 0xe1, + 0x58, 0x12, 0x80, 0x0d, 0xe5, 0x5d, 0x12, 0x80, 0x04, 0xe9, 0x5a, 0x12, + 0x40, 0xe5, 0x5c, 0x12, 0x40, 0xe1, 0x5b, 0x12, 0x40, 0xe5, 0x54, 0x12, + 0x40, 0xe1, 0x53, 0x12, 0x40, 0xe5, 0x44, 0x12, 0x40, 0xe1, 0x43, 0x12, + 0x40, 0xe1, 0x50, 0x13, 0x80, 0x7c, 0xe5, 0x55, 0x13, 0x80, 0x73, 0xa8, + 0x25, 0xe9, 0x52, 0x13, 0x00, 0xef, 0x56, 0x13, 0x80, 0x18, 0xf5, 0x51, + 0x13, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x57, 0x13, 0x00, 0xe5, 0x8f, 0x13, + 0x80, 0x04, 0xe9, 0x8d, 0x13, 0x40, 0xe5, 0x8e, 0x13, 0x40, 0xe1, 0x92, + 0x2d, 0x40, 0xe1, 0x30, 0x13, 0x80, 0x20, 0xe5, 0x35, 0x13, 0x80, 0x17, + 0xe9, 0x32, 0x13, 0x00, 0xef, 0x36, 0x13, 0x80, 0x0a, 0xf5, 0x31, 0x13, + 0x00, 0x42, 0xa9, 0x01, 0x37, 0x13, 0x40, 0xe1, 0x91, 0x2d, 0x40, 0xe5, + 0x34, 0x13, 0x40, 0xe1, 0x33, 0x13, 0x00, 0x08, 0xcf, 0x1a, 0x01, 0xff, + 0xe1, 0xd0, 0x12, 0x80, 0x15, 0xe5, 0xd5, 0x12, 0x80, 0x0c, 0xe9, 0xd2, + 0x12, 0x00, 0xef, 0xd6, 0x12, 0x00, 0xf5, 0xd1, 0x12, 0x40, 0xe5, 0xd4, + 0x12, 0x40, 0xe1, 0xd3, 0x12, 0x40, 0xe5, 0x54, 0x13, 0x40, 0xe1, 0x53, + 0x13, 0x40, 0xe1, 0x90, 0x12, 0x80, 0x4c, 0xe5, 0x95, 0x12, 0x80, 0x43, + 0xe9, 0x92, 0x12, 0x00, 0xef, 0x96, 0x12, 0x80, 0x36, 0xf5, 0x91, 0x12, + 0x00, 0x42, 0xa9, 0x01, 0x97, 0x12, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x98, + 0x12, 0x80, 0x20, 0xe5, 0x9d, 0x12, 0x80, 0x17, 0xe9, 0x9a, 0x12, 0x00, + 0xef, 0x9e, 0x12, 0x80, 0x0a, 0xf5, 0x99, 0x12, 0x00, 0x42, 0xa9, 0x01, + 0x9f, 0x12, 0x40, 0xe1, 0x89, 0x2d, 0x40, 0xe5, 0x9c, 0x12, 0x40, 0xe1, + 0x9b, 0x12, 0x40, 0xe1, 0x88, 0x2d, 0x40, 0xe5, 0x94, 0x12, 0x40, 0xe1, + 0x93, 0x12, 0x40, 0xe1, 0x18, 0x12, 0x80, 0x33, 0xe5, 0x1d, 0x12, 0x80, + 0x2a, 0xe9, 0x1a, 0x12, 0x00, 0xef, 0x1e, 0x12, 0x80, 0x1d, 0xf5, 0x19, + 0x12, 0x00, 0xb7, 0x06, 0x42, 0x20, 0x20, 0x59, 0x13, 0x40, 0xe1, 0x1f, + 0x12, 0x00, 0xe5, 0x83, 0x13, 0x80, 0x04, 0xe9, 0x81, 0x13, 0x40, 0xe5, + 0x82, 0x13, 0x40, 0xe1, 0x81, 0x2d, 0x40, 0xe5, 0x1c, 0x12, 0x40, 0xe1, + 0x1b, 0x12, 0x40, 0xe1, 0x08, 0x12, 0x80, 0x20, 0xe5, 0x0d, 0x12, 0x80, + 0x17, 0xe9, 0x0a, 0x12, 0x00, 0xef, 0x0e, 0x12, 0x80, 0x0a, 0xf5, 0x09, + 0x12, 0x00, 0x42, 0xa9, 0x01, 0x0f, 0x12, 0x40, 0xe1, 0x80, 0x2d, 0x40, + 0xe5, 0x0c, 0x12, 0x40, 0xe1, 0x0b, 0x12, 0x40, 0xe1, 0xa8, 0x12, 0x80, + 0x8d, 0x01, 0xe5, 0xad, 0x12, 0x80, 0x83, 0x01, 0xe9, 0xaa, 0x12, 0x00, + 0xef, 0xae, 0x12, 0x80, 0x76, 0xf5, 0xa9, 0x12, 0x00, 0xb7, 0x5a, 0xb8, + 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xc8, 0x2d, 0x80, 0x15, 0xe5, 0xcd, 0x2d, + 0x80, 0x0c, 0xe9, 0xca, 0x2d, 0x00, 0xef, 0xce, 0x2d, 0x00, 0xf5, 0xc9, + 0x2d, 0x40, 0xe5, 0xcc, 0x2d, 0x40, 0xe1, 0xcb, 0x2d, 0x40, 0xe1, 0xb8, + 0x12, 0x80, 0x2e, 0xe5, 0xbd, 0x12, 0x80, 0x25, 0xe9, 0xba, 0x12, 0x00, + 0xef, 0xbe, 0x12, 0x00, 0xf5, 0xb9, 0x12, 0x00, 0xb7, 0x01, 0xff, 0xe1, + 0xc0, 0x12, 0x80, 0x0d, 0xe5, 0xc5, 0x12, 0x80, 0x04, 0xe9, 0xc2, 0x12, + 0x40, 0xe5, 0xc4, 0x12, 0x40, 0xe1, 0xc3, 0x12, 0x40, 0xe5, 0xbc, 0x12, + 0x40, 0xe1, 0xbb, 0x12, 0x40, 0xe1, 0xb0, 0x12, 0x80, 0x0d, 0xe5, 0xb5, + 0x12, 0x80, 0x04, 0xe9, 0xb2, 0x12, 0x40, 0xe5, 0xb4, 0x12, 0x40, 0xe1, + 0xb3, 0x12, 0x40, 0xe1, 0xaf, 0x12, 0x40, 0xe5, 0xac, 0x12, 0x40, 0xe1, + 0xab, 0x12, 0x40, 0xe1, 0x00, 0x13, 0x80, 0x20, 0xe5, 0x05, 0x13, 0x80, + 0x17, 0xe9, 0x02, 0x13, 0x00, 0xef, 0x06, 0x13, 0x80, 0x0a, 0xf5, 0x01, + 0x13, 0x00, 0x42, 0xa9, 0x01, 0x07, 0x13, 0x40, 0xe1, 0x8e, 0x2d, 0x40, + 0xe5, 0x04, 0x13, 0x40, 0xe1, 0x03, 0x13, 0x40, 0xe1, 0x00, 0x12, 0x80, + 0x6e, 0xe5, 0x05, 0x12, 0x80, 0x65, 0xa8, 0x11, 0xe9, 0x02, 0x12, 0x00, + 0xef, 0x06, 0x12, 0x80, 0x04, 0xf5, 0x01, 0x12, 0x40, 0xe1, 0x07, 0x12, + 0x40, 0xe1, 0x10, 0x12, 0x80, 0x49, 0xe5, 0x15, 0x12, 0x80, 0x40, 0xe9, + 0x12, 0x12, 0x00, 0xef, 0x16, 0x12, 0x00, 0xf5, 0x11, 0x12, 0x00, 0xb7, + 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xe0, 0xe7, 0x81, 0x15, 0xe5, 0xe5, 0xe7, + 0x81, 0x0c, 0xe9, 0xe2, 0xe7, 0x01, 0xef, 0xe6, 0xe7, 0x01, 0xf5, 0xe1, + 0xe7, 0x41, 0xe5, 0xe4, 0xe7, 0x41, 0xe1, 0xe3, 0xe7, 0x41, 0xe1, 0x17, + 0x12, 0x00, 0xe5, 0xeb, 0xe7, 0x81, 0x04, 0xe9, 0xe9, 0xe7, 0x41, 0xe5, + 0xea, 0xe7, 0x41, 0xe5, 0x14, 0x12, 0x40, 0xe1, 0x13, 0x12, 0x40, 0xe5, + 0x04, 0x12, 0x40, 0xe1, 0x03, 0x12, 0x40, 0xe1, 0x08, 0x13, 0x80, 0xb5, + 0x02, 0xe5, 0x0d, 0x13, 0x80, 0xab, 0x02, 0xa7, 0xf1, 0x01, 0xe9, 0x0a, + 0x13, 0x00, 0x07, 0xd0, 0x25, 0xbf, 0x01, 0xef, 0x0e, 0x13, 0x80, 0xb5, + 0x01, 0xf5, 0x09, 0x13, 0x80, 0x39, 0xb7, 0x21, 0xb9, 0x01, 0xff, 0xe1, + 0xd8, 0x2d, 0x80, 0x15, 0xe5, 0xdd, 0x2d, 0x80, 0x0c, 0xe9, 0xda, 0x2d, + 0x00, 0xef, 0xde, 0x2d, 0x00, 0xf5, 0xd9, 0x2d, 0x40, 0xe5, 0xdc, 0x2d, + 0x40, 0xe1, 0xdb, 0x2d, 0x40, 0xe1, 0x10, 0x13, 0x80, 0x0d, 0xe5, 0x15, + 0x13, 0x80, 0x04, 0xe9, 0x12, 0x13, 0x40, 0xe5, 0x14, 0x13, 0x40, 0xe1, + 0x13, 0x13, 0x40, 0x05, 0x66, 0x59, 0x01, 0xff, 0x02, 0x31, 0xc8, 0x64, + 0x02, 0xef, 0x50, 0x56, 0x02, 0x91, 0xaa, 0x45, 0x44, 0x56, 0xe5, 0xe8, + 0xe7, 0x01, 0x02, 0x1e, 0x0a, 0x2e, 0x02, 0xf7, 0x33, 0x20, 0x02, 0x51, + 0x02, 0x12, 0x02, 0x01, 0xe8, 0x01, 0xff, 0xe5, 0xf2, 0xe7, 0x81, 0x04, + 0xe9, 0xf0, 0xe7, 0x41, 0xe5, 0xf1, 0xe7, 0x41, 0x42, 0x27, 0x01, 0xfe, + 0xe7, 0x01, 0xe9, 0xfd, 0xe7, 0x41, 0x42, 0x27, 0x01, 0xee, 0xe7, 0x01, + 0xe9, 0xed, 0xe7, 0x41, 0xe5, 0xf7, 0xe7, 0x81, 0x04, 0xe9, 0xf5, 0xe7, + 0x41, 0xe5, 0xf6, 0xe7, 0x41, 0xe5, 0xfa, 0xe7, 0x81, 0x04, 0xe9, 0xf8, + 0xe7, 0x41, 0xe5, 0xf9, 0xe7, 0x41, 0x42, 0x27, 0x01, 0xfc, 0xe7, 0x01, + 0xe9, 0xfb, 0xe7, 0x41, 0x42, 0x27, 0x01, 0xf4, 0xe7, 0x01, 0xe9, 0xf3, + 0xe7, 0x41, 0xe1, 0x0f, 0x13, 0x40, 0xe1, 0xa0, 0x12, 0x80, 0x20, 0xe5, + 0xa5, 0x12, 0x80, 0x17, 0xe9, 0xa2, 0x12, 0x00, 0xef, 0xa6, 0x12, 0x80, + 0x0a, 0xf5, 0xa1, 0x12, 0x00, 0x42, 0xa9, 0x01, 0xa7, 0x12, 0x40, 0xe1, + 0x8a, 0x2d, 0x40, 0xe5, 0xa4, 0x12, 0x40, 0xe1, 0xa3, 0x12, 0x40, 0xe1, + 0x18, 0x13, 0x80, 0x2e, 0xe5, 0x1d, 0x13, 0x80, 0x25, 0xe9, 0x1a, 0x13, + 0x00, 0xef, 0x1e, 0x13, 0x00, 0xf5, 0x19, 0x13, 0x00, 0xb7, 0x01, 0xff, + 0xe1, 0x93, 0x2d, 0x80, 0x0d, 0xe5, 0x96, 0x2d, 0x80, 0x04, 0xe9, 0x94, + 0x2d, 0x40, 0xe5, 0x95, 0x2d, 0x40, 0xe1, 0x1f, 0x13, 0x40, 0xe5, 0x1c, + 0x13, 0x40, 0xe1, 0x1b, 0x13, 0x40, 0xe5, 0x0c, 0x13, 0x40, 0xe1, 0x0b, + 0x13, 0x40, 0xe1, 0x48, 0x13, 0x80, 0x2e, 0xe5, 0x4d, 0x13, 0x80, 0x25, + 0xe9, 0x4a, 0x13, 0x00, 0xef, 0x4e, 0x13, 0x00, 0xf5, 0x49, 0x13, 0x00, + 0xb7, 0x06, 0x42, 0x20, 0x20, 0x5a, 0x13, 0x40, 0xe1, 0x4f, 0x13, 0x00, + 0xe5, 0x8b, 0x13, 0x80, 0x04, 0xe9, 0x89, 0x13, 0x40, 0xe5, 0x8a, 0x13, + 0x40, 0xe5, 0x4c, 0x13, 0x40, 0xe1, 0x4b, 0x13, 0x40, 0xe1, 0xf0, 0x12, + 0x80, 0x86, 0x01, 0xa4, 0x3e, 0xe5, 0xf5, 0x12, 0x80, 0x35, 0xe9, 0xf2, + 0x12, 0x00, 0xef, 0xf6, 0x12, 0x80, 0x28, 0xf5, 0xf1, 0x12, 0x00, 0x42, + 0xa9, 0x01, 0xf7, 0x12, 0x00, 0xba, 0x01, 0xff, 0x42, 0xda, 0x10, 0x13, + 0xab, 0x00, 0xe5, 0x15, 0xab, 0x80, 0x0c, 0xe9, 0x12, 0xab, 0x00, 0xef, + 0x16, 0xab, 0x00, 0xf5, 0x11, 0xab, 0x40, 0xe5, 0x14, 0xab, 0x40, 0xe1, + 0x8c, 0x2d, 0x40, 0xe5, 0xf4, 0x12, 0x40, 0xe1, 0xf8, 0x12, 0x80, 0x3d, + 0xe5, 0xfd, 0x12, 0x80, 0x34, 0xa8, 0x17, 0xe9, 0xfa, 0x12, 0x00, 0xef, + 0xfe, 0x12, 0x80, 0x0a, 0xf5, 0xf9, 0x12, 0x00, 0x42, 0xa9, 0x01, 0xff, + 0x12, 0x40, 0xe1, 0x8d, 0x2d, 0x40, 0x42, 0xda, 0x10, 0x0b, 0xab, 0x00, + 0xe5, 0x0d, 0xab, 0x80, 0x0c, 0xe9, 0x0a, 0xab, 0x00, 0xef, 0x0e, 0xab, + 0x00, 0xf5, 0x09, 0xab, 0x40, 0xe5, 0x0c, 0xab, 0x40, 0xe5, 0xfc, 0x12, + 0x40, 0xe1, 0xfb, 0x12, 0x40, 0xe1, 0xf3, 0x12, 0x40, 0xe1, 0x78, 0x12, + 0x80, 0xab, 0x01, 0xa3, 0x4b, 0xe5, 0x7d, 0x12, 0x80, 0x42, 0xa8, 0x17, + 0xe9, 0x7a, 0x12, 0x00, 0xef, 0x7e, 0x12, 0x80, 0x0a, 0xf5, 0x79, 0x12, + 0x00, 0x42, 0xa9, 0x01, 0x7f, 0x12, 0x40, 0xe1, 0x87, 0x2d, 0x40, 0xe1, + 0x28, 0x13, 0x80, 0x20, 0xe5, 0x2d, 0x13, 0x80, 0x17, 0xe9, 0x2a, 0x13, + 0x00, 0xef, 0x2e, 0x13, 0x80, 0x0a, 0xf5, 0x29, 0x13, 0x00, 0x42, 0xa9, + 0x01, 0x2f, 0x13, 0x40, 0xe1, 0x90, 0x2d, 0x40, 0xe5, 0x2c, 0x13, 0x40, + 0xe1, 0x2b, 0x13, 0x40, 0xe5, 0x7c, 0x12, 0x40, 0xe1, 0xa8, 0x2d, 0x80, + 0x55, 0xe5, 0xad, 0x2d, 0x80, 0x4c, 0xa8, 0x0c, 0xe9, 0xaa, 0x2d, 0x00, + 0xef, 0xae, 0x2d, 0x00, 0xf5, 0xa9, 0x2d, 0x40, 0xe1, 0xb8, 0x2d, 0x80, + 0x35, 0xe5, 0xbd, 0x2d, 0x80, 0x2c, 0xa8, 0x0c, 0xe9, 0xba, 0x2d, 0x00, + 0xef, 0xbe, 0x2d, 0x00, 0xf5, 0xb9, 0x2d, 0x40, 0xe1, 0x20, 0xab, 0x80, + 0x15, 0xe5, 0x25, 0xab, 0x80, 0x0c, 0xe9, 0x22, 0xab, 0x00, 0xef, 0x26, + 0xab, 0x00, 0xf5, 0x21, 0xab, 0x40, 0xe5, 0x24, 0xab, 0x40, 0xe1, 0x23, + 0xab, 0x40, 0xe5, 0xbc, 0x2d, 0x40, 0xe1, 0xbb, 0x2d, 0x40, 0xe5, 0xac, + 0x2d, 0x40, 0xe1, 0xab, 0x2d, 0x40, 0xe1, 0x7b, 0x12, 0x40, 0xe1, 0x60, + 0x12, 0x80, 0x4e, 0xa2, 0x2e, 0xe5, 0x65, 0x12, 0x80, 0x25, 0xe9, 0x62, + 0x12, 0x00, 0xef, 0x66, 0x12, 0x80, 0x18, 0xf5, 0x61, 0x12, 0x00, 0xb7, + 0x01, 0xff, 0xe1, 0x67, 0x12, 0x00, 0xe5, 0x87, 0x13, 0x80, 0x04, 0xe9, + 0x85, 0x13, 0x40, 0xe5, 0x86, 0x13, 0x40, 0xe1, 0x85, 0x2d, 0x40, 0xe5, + 0x64, 0x12, 0x40, 0xe1, 0x28, 0xab, 0x80, 0x15, 0xe5, 0x2d, 0xab, 0x80, + 0x0c, 0xe9, 0x2a, 0xab, 0x00, 0xef, 0x2e, 0xab, 0x00, 0xf5, 0x29, 0xab, + 0x40, 0xe5, 0x2c, 0xab, 0x40, 0xe1, 0x2b, 0xab, 0x40, 0xe1, 0x63, 0x12, + 0x40, 0x4a, 0x13, 0x24, 0x60, 0x13, 0x00, 0x47, 0x48, 0x54, 0x64, 0x13, + 0x40, 0x52, 0xaa, 0x46, 0x68, 0x13, 0x00, 0x4c, 0x9b, 0x8c, 0x66, 0x13, + 0x40, 0x46, 0xf5, 0xd0, 0x79, 0x13, 0x00, 0xa6, 0x36, 0x47, 0xe9, 0x0f, + 0x7b, 0x13, 0x00, 0x46, 0x65, 0x29, 0x7a, 0x13, 0x00, 0xb3, 0x1c, 0xb4, + 0x01, 0xff, 0x42, 0x92, 0x01, 0x72, 0x13, 0x80, 0x0c, 0x45, 0xf2, 0x0f, + 0x74, 0x13, 0x00, 0x45, 0x38, 0x29, 0x73, 0x13, 0x40, 0x49, 0x68, 0x58, + 0x7c, 0x13, 0x40, 0x46, 0x96, 0x1b, 0x78, 0x13, 0x00, 0x44, 0xed, 0xd2, + 0x77, 0x13, 0x40, 0x44, 0xe3, 0x47, 0x76, 0x13, 0x00, 0x44, 0x4d, 0x4c, + 0x75, 0x13, 0x40, 0x45, 0xd1, 0x09, 0x70, 0x13, 0x00, 0xa6, 0x29, 0x44, + 0xb8, 0x27, 0x71, 0x13, 0x00, 0x43, 0xcd, 0x09, 0x69, 0x13, 0x00, 0xb3, + 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x6b, 0x13, 0x00, 0x42, 0x15, + 0x02, 0x6a, 0x13, 0x40, 0x44, 0x96, 0x1b, 0x6f, 0x13, 0x00, 0x42, 0x30, + 0x27, 0x6e, 0x13, 0x40, 0x43, 0xd7, 0x04, 0x6d, 0x13, 0x00, 0x43, 0xfb, + 0x05, 0x6c, 0x13, 0x40, 0x43, 0xac, 0x10, 0x65, 0x13, 0x00, 0xad, 0x01, + 0xff, 0x07, 0x54, 0x14, 0x06, 0x42, 0x6c, 0x00, 0x63, 0x13, 0x40, 0x0b, + 0xe7, 0x66, 0x06, 0x51, 0x11, 0x35, 0x5e, 0x13, 0x40, 0x55, 0x0d, 0x35, + 0x5d, 0x13, 0x00, 0x44, 0xb9, 0x00, 0x5f, 0x13, 0x40, 0x44, 0x9a, 0x64, + 0x1b, 0x00, 0x00, 0x06, 0x1d, 0xd6, 0x01, 0xff, 0x48, 0x10, 0x1e, 0x2e, + 0x21, 0x00, 0xf3, 0x59, 0x22, 0x40, 0x0b, 0x5a, 0x91, 0x42, 0x08, 0x71, + 0xbd, 0x32, 0x0b, 0x1e, 0x9a, 0x01, 0xff, 0x06, 0x1c, 0x07, 0x17, 0x06, + 0xad, 0x02, 0x01, 0xff, 0x46, 0x00, 0x04, 0xf2, 0x29, 0x00, 0x47, 0xb2, + 0x3f, 0xf0, 0x29, 0x00, 0x46, 0xdb, 0x04, 0xee, 0x29, 0x40, 0x46, 0x00, + 0x04, 0xf3, 0x29, 0x00, 0x47, 0xb2, 0x3f, 0xf1, 0x29, 0x00, 0x46, 0xdb, + 0x04, 0xef, 0x29, 0x40, 0x43, 0xcd, 0x09, 0xf0, 0x2b, 0x00, 0x43, 0x25, + 0x09, 0xf1, 0x2b, 0x40, 0x44, 0xc3, 0x00, 0x2b, 0x23, 0x00, 0x45, 0xc8, + 0x00, 0x26, 0x23, 0x40, 0x02, 0x13, 0x00, 0x1a, 0xa9, 0x01, 0xff, 0x4a, + 0x66, 0x9f, 0x5a, 0x22, 0x00, 0x07, 0x97, 0x35, 0x01, 0xff, 0x42, 0x1e, + 0x00, 0x4d, 0x22, 0x00, 0x54, 0x85, 0x41, 0x78, 0x2a, 0x40, 0x80, 0x63, + 0x02, 0x31, 0x01, 0x01, 0xff, 0x45, 0x69, 0x37, 0x55, 0x22, 0x00, 0x44, + 0xdb, 0x02, 0x3d, 0x00, 0x80, 0x06, 0x4d, 0x1c, 0x83, 0x6e, 0x2a, 0x40, + 0x80, 0x01, 0xff, 0xa1, 0x1d, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4b, 0xd3, + 0x91, 0xae, 0x2a, 0x00, 0x49, 0xf9, 0x10, 0x66, 0x2a, 0x00, 0x4e, 0xbd, + 0x71, 0xf9, 0x2b, 0x00, 0x61, 0x4a, 0x0d, 0x77, 0x2a, 0x40, 0x05, 0x5d, + 0x00, 0x0d, 0x53, 0x52, 0x34, 0xe3, 0x29, 0xc0, 0x00, 0x51, 0xf4, 0x51, + 0xe4, 0x29, 0x40, 0x4f, 0x67, 0x06, 0x40, 0x2b, 0x00, 0x49, 0x2e, 0x6b, + 0x71, 0x2a, 0x00, 0x50, 0xb3, 0x02, 0x71, 0x29, 0x00, 0x4e, 0x0e, 0x3a, + 0x73, 0x2a, 0x40, 0x4f, 0x80, 0x64, 0xd5, 0x22, 0x00, 0x03, 0x7a, 0x02, + 0x01, 0xff, 0x4d, 0x53, 0x7a, 0x5d, 0x22, 0x00, 0x03, 0x79, 0x08, 0x01, + 0xff, 0x4c, 0x87, 0x00, 0xdd, 0x22, 0x00, 0x49, 0xec, 0x00, 0xdc, 0x22, + 0x00, 0x48, 0x21, 0xc0, 0xde, 0x22, 0x00, 0x48, 0x49, 0xc1, 0xdf, 0x22, + 0x40, 0x80, 0x70, 0x02, 0x06, 0x00, 0x24, 0x45, 0x6a, 0xdf, 0x05, 0x00, + 0x00, 0x4a, 0x13, 0x40, 0x86, 0x23, 0x00, 0x46, 0x46, 0x2e, 0x09, 0x27, + 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x55, 0x48, 0x36, 0xe9, 0xf4, + 0x01, 0x49, 0x28, 0xb2, 0x84, 0xf5, 0x41, 0x03, 0xf4, 0x01, 0x06, 0x5a, + 0x06, 0x20, 0x1a, 0xf5, 0x41, 0x4c, 0xeb, 0x87, 0x97, 0x00, 0x00, 0x44, + 0xf0, 0x07, 0x0a, 0x00, 0x00, 0x46, 0x9b, 0x03, 0x19, 0x00, 0x00, 0x03, + 0x59, 0x0b, 0x1c, 0x4d, 0x14, 0x81, 0x87, 0x00, 0x00, 0xb4, 0x01, 0xff, + 0x43, 0xde, 0x05, 0x03, 0x00, 0x00, 0x4b, 0x8f, 0x99, 0x04, 0x00, 0xc0, + 0x00, 0x46, 0x32, 0x01, 0x17, 0x00, 0x40, 0x42, 0xf4, 0x01, 0x0e, 0x22, + 0x00, 0x4b, 0xa6, 0x74, 0x97, 0x00, 0x40, 0x44, 0xe9, 0x10, 0x13, 0x20, + 0x00, 0x44, 0xd1, 0x0b, 0x00, 0x20, 0x00, 0x45, 0x62, 0x47, 0x02, 0x20, + 0x40, 0x80, 0x9c, 0x01, 0x04, 0xce, 0xe6, 0x61, 0xb0, 0x01, 0xff, 0x4c, + 0x1b, 0x88, 0x83, 0x23, 0x00, 0x03, 0x9a, 0x1b, 0x01, 0xff, 0x48, 0xa1, + 0xbb, 0xcb, 0xf5, 0x01, 0xae, 0x2f, 0x44, 0x0e, 0x9e, 0xcc, 0xf5, 0x81, + 0x24, 0x43, 0xf6, 0x10, 0x05, 0x22, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, + 0xff, 0x50, 0x4e, 0x5e, 0xb4, 0x29, 0x00, 0x47, 0xfa, 0x78, 0xb1, 0x29, + 0x00, 0x51, 0xc8, 0x00, 0xb3, 0x29, 0x00, 0x52, 0xbe, 0x4f, 0xb2, 0x29, + 0x40, 0xf3, 0xcd, 0xf5, 0x41, 0x43, 0x8c, 0x18, 0xb9, 0xfa, 0x01, 0x43, + 0x79, 0x0b, 0xc5, 0xf5, 0xc1, 0x00, 0x03, 0x46, 0x0d, 0x01, 0xff, 0xe4, + 0xc7, 0xf5, 0x01, 0x42, 0x5b, 0x07, 0xc6, 0xf5, 0x41, 0x0a, 0x56, 0xa0, + 0x1b, 0x1a, 0xce, 0x1e, 0x01, 0xff, 0x43, 0x6b, 0xe8, 0xfb, 0xf3, 0x01, + 0xd3, 0xfc, 0xf3, 0x01, 0xd4, 0xfd, 0xf3, 0x01, 0xd5, 0xfe, 0xf3, 0x01, + 0xd6, 0xff, 0xf3, 0x41, 0x44, 0x4e, 0xe4, 0xb2, 0xf9, 0x01, 0x4a, 0x88, + 0xa0, 0xb1, 0xf9, 0x01, 0x48, 0x81, 0xc0, 0xb0, 0xf9, 0x01, 0x4a, 0x92, + 0xaa, 0xb3, 0xf9, 0x41, 0x44, 0xe9, 0x10, 0x14, 0x20, 0x00, 0x44, 0xd1, + 0x0b, 0x01, 0x20, 0x00, 0x45, 0x62, 0x47, 0x03, 0x20, 0x40, 0x0d, 0x1f, + 0x7a, 0x96, 0x02, 0xa5, 0xa0, 0x01, 0xe6, 0xdd, 0xf9, 0x01, 0x07, 0xbc, + 0xcd, 0x01, 0xff, 0x06, 0xf2, 0x04, 0x06, 0x52, 0x00, 0x4d, 0xf6, 0x0f, + 0x41, 0xa1, 0x7f, 0x44, 0x62, 0xe4, 0xe1, 0x0f, 0x01, 0x46, 0xa2, 0x44, + 0xe3, 0x0f, 0x01, 0x45, 0x5e, 0xa2, 0xe2, 0x0f, 0x01, 0x42, 0xb0, 0x01, + 0xe4, 0x0f, 0x81, 0x60, 0x44, 0xd6, 0xe5, 0xea, 0x0f, 0x01, 0x46, 0x3b, + 0xd3, 0xeb, 0x0f, 0x01, 0x43, 0xb9, 0x04, 0xec, 0x0f, 0x01, 0x43, 0x40, + 0x20, 0xed, 0x0f, 0x01, 0x42, 0x6f, 0x02, 0xf0, 0x0f, 0x01, 0x44, 0x8d, + 0xbe, 0xf2, 0x0f, 0x01, 0x44, 0x3e, 0x60, 0xf3, 0x0f, 0x01, 0xb3, 0x20, + 0xb4, 0x12, 0x43, 0x0f, 0x83, 0xe5, 0x0f, 0x01, 0x44, 0x0e, 0x4d, 0xe9, + 0x0f, 0x01, 0x45, 0x08, 0x4d, 0xe6, 0x0f, 0x41, 0x42, 0xc4, 0x3f, 0xf5, + 0x0f, 0x01, 0x43, 0x25, 0x23, 0xe8, 0x0f, 0x41, 0xa1, 0x06, 0x43, 0x99, + 0x14, 0xf4, 0x0f, 0x41, 0x43, 0xf3, 0xdf, 0xf1, 0x0f, 0x01, 0x44, 0xb2, + 0xd9, 0xee, 0x0f, 0x41, 0x42, 0x53, 0x00, 0xe7, 0x0f, 0x41, 0x44, 0xae, + 0x38, 0xe0, 0x0f, 0x01, 0x43, 0x4b, 0x18, 0xef, 0x0f, 0x41, 0x05, 0xce, + 0xda, 0x4f, 0x47, 0xc0, 0x8a, 0x08, 0x22, 0x80, 0x0c, 0x45, 0xfc, 0xbb, + 0x18, 0xf4, 0x01, 0x45, 0x3b, 0xe1, 0xd7, 0xf6, 0x41, 0x80, 0x01, 0xff, + 0x08, 0x23, 0x6f, 0x29, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0xec, 0x1b, + 0xf5, 0x22, 0x00, 0x56, 0x64, 0x31, 0xf2, 0x22, 0x00, 0x47, 0xfa, 0x78, + 0xf6, 0x22, 0x00, 0x56, 0x69, 0x0a, 0xf9, 0x22, 0x00, 0x48, 0x50, 0x54, + 0xf8, 0x22, 0x00, 0x68, 0x35, 0x04, 0xf3, 0x22, 0x40, 0x49, 0xa5, 0x01, + 0xd9, 0x2a, 0x00, 0x47, 0x50, 0x02, 0xd2, 0x27, 0x40, 0x80, 0x06, 0x4f, + 0xe9, 0x37, 0xe7, 0x23, 0x40, 0x45, 0xce, 0x00, 0x01, 0x23, 0x00, 0x4a, + 0x84, 0xa4, 0xa1, 0xf4, 0x01, 0x44, 0x1a, 0xe7, 0x0c, 0xf5, 0x01, 0x45, + 0x9b, 0xe0, 0x26, 0xf5, 0x41, 0xe1, 0x00, 0x05, 0x01, 0x42, 0xbc, 0x04, + 0x01, 0x05, 0x01, 0xa3, 0xcf, 0x01, 0xa4, 0xc2, 0x01, 0xe5, 0x08, 0x05, + 0x81, 0xb8, 0x01, 0x42, 0x0f, 0x18, 0x09, 0x05, 0x01, 0xa7, 0x99, 0x01, + 0x42, 0xb0, 0x01, 0x0c, 0x05, 0x01, 0xe9, 0x0d, 0x05, 0x01, 0x42, 0x18, + 0x1e, 0x0e, 0x05, 0x01, 0xab, 0x7d, 0xac, 0x71, 0x42, 0x2a, 0x02, 0x12, + 0x05, 0x01, 0xae, 0x55, 0xef, 0x16, 0x05, 0x01, 0x42, 0x6f, 0x02, 0x17, + 0x05, 0x01, 0x42, 0x6e, 0x9a, 0x18, 0x05, 0x01, 0xb2, 0x39, 0xb3, 0x2d, + 0xb4, 0x21, 0xf5, 0x1f, 0x05, 0x01, 0x42, 0x32, 0x00, 0x20, 0x05, 0x01, + 0x42, 0x9e, 0x3e, 0x21, 0x05, 0x01, 0xf9, 0x22, 0x05, 0x01, 0xba, 0x01, + 0xff, 0xe5, 0x23, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x24, 0x05, 0x41, 0xe5, + 0x1d, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x1e, 0x05, 0x41, 0xe5, 0x1b, 0x05, + 0x01, 0x42, 0xb0, 0x01, 0x1c, 0x05, 0x41, 0xe5, 0x19, 0x05, 0x01, 0x42, + 0x88, 0x00, 0x1a, 0x05, 0x41, 0xe1, 0x14, 0x05, 0x01, 0x42, 0x04, 0x00, + 0x05, 0x05, 0x01, 0xe5, 0x13, 0x05, 0x01, 0x42, 0x18, 0x1e, 0x15, 0x05, + 0x41, 0xe5, 0x10, 0x05, 0x01, 0x42, 0x68, 0x00, 0x11, 0x05, 0x41, 0xe5, + 0x0f, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x27, 0x05, 0x41, 0xe5, 0x0a, 0x05, + 0x01, 0xa8, 0x06, 0x42, 0x18, 0x1e, 0x0b, 0x05, 0x41, 0x44, 0x98, 0x1e, + 0x26, 0x05, 0x01, 0xe5, 0x25, 0x05, 0x41, 0xe9, 0x07, 0x05, 0x41, 0xe5, + 0x04, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x06, 0x05, 0x41, 0xe5, 0x02, 0x05, + 0x01, 0x42, 0xb0, 0x01, 0x03, 0x05, 0x41, 0x80, 0x06, 0x46, 0xa2, 0x5d, + 0x6a, 0x26, 0x40, 0xb0, 0x0c, 0x4f, 0xbd, 0x1a, 0x33, 0x27, 0x00, 0x62, + 0x7a, 0x0b, 0x4a, 0x27, 0x40, 0x5f, 0x88, 0x0f, 0x41, 0x27, 0x00, 0x07, + 0x15, 0x07, 0x01, 0xff, 0x4a, 0xc5, 0x28, 0x34, 0x27, 0x00, 0x4d, 0x82, + 0x11, 0x35, 0x27, 0x00, 0x56, 0x98, 0x32, 0x37, 0x27, 0x40, 0xe7, 0x5a, + 0xf9, 0x01, 0x12, 0x38, 0x51, 0x01, 0xff, 0xa1, 0xe6, 0x23, 0xa2, 0x9f, + 0x23, 0x02, 0xfa, 0xe9, 0xa1, 0x22, 0x02, 0xfc, 0xe9, 0x8e, 0x1f, 0xa5, + 0xb1, 0x1d, 0xa6, 0x88, 0x1b, 0x02, 0xfe, 0xe9, 0xeb, 0x18, 0xa8, 0xa9, + 0x18, 0xa9, 0x98, 0x17, 0x03, 0x4c, 0xe9, 0xf3, 0x16, 0xac, 0xbc, 0x16, + 0xad, 0x9f, 0x13, 0xae, 0xe7, 0x0f, 0xaf, 0x93, 0x0d, 0x02, 0x42, 0xce, + 0xd3, 0x0c, 0x03, 0x6d, 0xe9, 0xb2, 0x0c, 0x02, 0xf1, 0xc3, 0x9a, 0x0b, + 0x02, 0x7b, 0xd7, 0xaa, 0x09, 0xb4, 0xdd, 0x07, 0x02, 0xfd, 0xe1, 0x8c, + 0x06, 0xb6, 0xaf, 0x03, 0xb7, 0x96, 0x02, 0x03, 0xb2, 0xe9, 0xde, 0x01, + 0x03, 0xc1, 0xe9, 0xb4, 0x01, 0x02, 0x0c, 0xea, 0x01, 0xff, 0x90, 0x65, + 0x91, 0x01, 0xff, 0xd0, 0xf5, 0x33, 0x01, 0xd1, 0xf6, 0x33, 0x01, 0xd2, + 0xf7, 0x33, 0x01, 0xd3, 0xf8, 0x33, 0x01, 0xd4, 0xf9, 0x33, 0x01, 0xd5, + 0xfa, 0x33, 0x81, 0x25, 0xd6, 0x04, 0x34, 0xc1, 0x00, 0xe1, 0x05, 0x34, + 0x01, 0xe2, 0x06, 0x34, 0x01, 0xe3, 0x07, 0x34, 0x01, 0xe4, 0x08, 0x34, + 0x01, 0xe5, 0x09, 0x34, 0x01, 0xe6, 0x0a, 0x34, 0x01, 0xe7, 0x0b, 0x34, + 0x01, 0xe8, 0x0c, 0x34, 0x41, 0xe1, 0xfb, 0x33, 0x01, 0xe2, 0xfc, 0x33, + 0x01, 0xe3, 0xfd, 0x33, 0x01, 0xe4, 0xfe, 0x33, 0x01, 0xe5, 0xff, 0x33, + 0x01, 0xe6, 0x00, 0x34, 0x01, 0xe7, 0x01, 0x34, 0x01, 0xe8, 0x02, 0x34, + 0x01, 0xe9, 0x03, 0x34, 0x41, 0xd1, 0xe4, 0x33, 0x01, 0xd2, 0xe5, 0x33, + 0x81, 0x2f, 0xd3, 0xea, 0x33, 0x81, 0x22, 0xd4, 0xed, 0x33, 0x81, 0x19, + 0xd5, 0xef, 0x33, 0x81, 0x10, 0xd6, 0xf1, 0x33, 0x01, 0xd7, 0xf2, 0x33, + 0x01, 0xd8, 0xf3, 0x33, 0x01, 0xd9, 0xf4, 0x33, 0x41, 0xe1, 0xf0, 0x33, + 0x41, 0xe1, 0xee, 0x33, 0x41, 0xe1, 0xeb, 0x33, 0x01, 0xe2, 0xec, 0x33, + 0x41, 0xe1, 0xe6, 0x33, 0x01, 0xe2, 0xe7, 0x33, 0x01, 0xe3, 0xe8, 0x33, + 0x01, 0xe4, 0xe9, 0x33, 0x41, 0xd1, 0xdb, 0x33, 0x81, 0x1c, 0xd2, 0xdd, + 0x33, 0x01, 0xd3, 0xde, 0x33, 0x01, 0xd4, 0xdf, 0x33, 0x01, 0xd5, 0xe0, + 0x33, 0x01, 0xd6, 0xe1, 0x33, 0x01, 0xd7, 0xe2, 0x33, 0x01, 0xd8, 0xe3, + 0x33, 0x41, 0xe1, 0xdc, 0x33, 0x41, 0xd1, 0xcf, 0x33, 0x01, 0xd2, 0xd0, + 0x33, 0x01, 0xd3, 0xd1, 0x33, 0x01, 0xd4, 0xd2, 0x33, 0x81, 0x1a, 0xd5, + 0xd5, 0x33, 0x01, 0xd6, 0xd6, 0x33, 0x81, 0x0d, 0xd7, 0xd8, 0x33, 0x01, + 0xd8, 0xd9, 0x33, 0xc1, 0x00, 0xe1, 0xda, 0x33, 0x41, 0xe1, 0xd7, 0x33, + 0x41, 0xe1, 0xd3, 0x33, 0x01, 0xe2, 0xd4, 0x33, 0x41, 0x90, 0x06, 0x4d, + 0xdd, 0x7c, 0x46, 0x34, 0x41, 0x90, 0x5e, 0x91, 0x20, 0x92, 0x01, 0xff, + 0xd0, 0xc8, 0x33, 0x01, 0xd1, 0xc9, 0x33, 0x01, 0xd2, 0xca, 0x33, 0x01, + 0xd3, 0xcb, 0x33, 0x01, 0xd4, 0xcc, 0x33, 0x81, 0x04, 0xd5, 0xce, 0x33, + 0x41, 0xe1, 0xcd, 0x33, 0x41, 0xd0, 0xba, 0x33, 0x81, 0x33, 0xd1, 0xbc, + 0x33, 0x01, 0xd2, 0xbd, 0x33, 0x01, 0xd3, 0xbe, 0x33, 0x01, 0xd4, 0xbf, + 0x33, 0x81, 0x1e, 0xd5, 0xc1, 0x33, 0x01, 0xd6, 0xc2, 0x33, 0x01, 0xd7, + 0xc3, 0x33, 0x81, 0x0d, 0xd8, 0xc5, 0x33, 0x81, 0x04, 0xd9, 0xc7, 0x33, + 0x41, 0xe1, 0xc6, 0x33, 0x41, 0xe1, 0xc4, 0x33, 0x41, 0xe1, 0xc0, 0x33, + 0x41, 0xe1, 0xbb, 0x33, 0x41, 0xd1, 0xaf, 0x33, 0x01, 0xd2, 0xb0, 0x33, + 0x01, 0xd3, 0xb1, 0x33, 0x81, 0x1d, 0xd4, 0xb3, 0x33, 0x01, 0xd5, 0xb4, + 0x33, 0x01, 0xd6, 0xb5, 0x33, 0x01, 0xd7, 0xb6, 0x33, 0x01, 0xd8, 0xb7, + 0x33, 0x01, 0xd9, 0xb8, 0x33, 0xc1, 0x00, 0xe1, 0xb9, 0x33, 0x41, 0xe1, + 0xb2, 0x33, 0x41, 0x90, 0x06, 0x4e, 0xcf, 0x70, 0x30, 0x34, 0x41, 0x90, + 0xf8, 0x01, 0x91, 0xb3, 0x01, 0x92, 0x49, 0x93, 0x0b, 0x42, 0xe6, 0xe9, + 0xad, 0x33, 0xc1, 0x00, 0xe1, 0xae, 0x33, 0x41, 0xd0, 0x9f, 0x33, 0x81, + 0x33, 0xd1, 0xa1, 0x33, 0x81, 0x2a, 0xd2, 0xa3, 0x33, 0x01, 0xd3, 0xa4, + 0x33, 0x81, 0x1d, 0xd4, 0xa6, 0x33, 0x01, 0xd5, 0xa7, 0x33, 0x01, 0xd6, + 0xa8, 0x33, 0x01, 0xd7, 0xa9, 0x33, 0x81, 0x08, 0xd8, 0xab, 0x33, 0x01, + 0xd9, 0xac, 0x33, 0x41, 0xe1, 0xaa, 0x33, 0x41, 0xe1, 0xa5, 0x33, 0x41, + 0xe1, 0xa2, 0x33, 0x41, 0xe1, 0xa0, 0x33, 0x41, 0xd0, 0x86, 0x33, 0x81, + 0x33, 0xd1, 0x93, 0x33, 0x01, 0xd2, 0x94, 0x33, 0x01, 0xd3, 0x95, 0x33, + 0x81, 0x22, 0xd4, 0x97, 0x33, 0x01, 0xd5, 0x98, 0x33, 0x01, 0xd6, 0x99, + 0x33, 0x01, 0xd7, 0x9a, 0x33, 0x01, 0xd8, 0x9b, 0x33, 0x81, 0x09, 0xd9, + 0x9d, 0x33, 0xc1, 0x00, 0xe1, 0x9e, 0x33, 0x41, 0xe1, 0x9c, 0x33, 0x41, + 0xe1, 0x96, 0x33, 0x41, 0xe1, 0x87, 0x33, 0x01, 0xe2, 0x88, 0x33, 0x01, + 0xe3, 0x89, 0x33, 0x01, 0xe4, 0x8a, 0x33, 0x01, 0xe5, 0x8b, 0x33, 0x01, + 0xe6, 0x8c, 0x33, 0x01, 0xe7, 0x8d, 0x33, 0x01, 0xe8, 0x8e, 0x33, 0x01, + 0xe9, 0x8f, 0x33, 0x01, 0xea, 0x90, 0x33, 0x01, 0xeb, 0x91, 0x33, 0x01, + 0xec, 0x92, 0x33, 0x41, 0xd0, 0x77, 0x33, 0x01, 0xd1, 0x78, 0x33, 0x81, + 0x29, 0xd2, 0x7c, 0x33, 0x81, 0x1c, 0xd3, 0x7f, 0x33, 0x01, 0xd4, 0x80, + 0x33, 0x01, 0xd5, 0x81, 0x33, 0x01, 0xd6, 0x82, 0x33, 0x01, 0xd7, 0x83, + 0x33, 0x01, 0xd8, 0x84, 0x33, 0x01, 0xd9, 0x85, 0x33, 0x41, 0xe1, 0x7d, + 0x33, 0x01, 0xe2, 0x7e, 0x33, 0x41, 0xe1, 0x79, 0x33, 0x01, 0xe2, 0x7a, + 0x33, 0x01, 0xe3, 0x7b, 0x33, 0x01, 0xe4, 0x2f, 0x34, 0x41, 0xd1, 0x62, + 0x33, 0x81, 0x2e, 0xd2, 0x6c, 0x33, 0x81, 0x25, 0xd3, 0x6e, 0x33, 0x01, + 0xd4, 0x6f, 0x33, 0x01, 0xd5, 0x70, 0x33, 0x01, 0xd6, 0x71, 0x33, 0x01, + 0xd7, 0x72, 0x33, 0x81, 0x08, 0xd8, 0x75, 0x33, 0x01, 0xd9, 0x76, 0x33, + 0x41, 0xe1, 0x73, 0x33, 0x01, 0xe2, 0x74, 0x33, 0x41, 0xe1, 0x6d, 0x33, + 0x41, 0xe1, 0x63, 0x33, 0x01, 0xe2, 0x64, 0x33, 0x01, 0xe3, 0x65, 0x33, + 0x01, 0xe4, 0x66, 0x33, 0x01, 0xe5, 0x67, 0x33, 0x01, 0xe6, 0x68, 0x33, + 0x01, 0xe7, 0x69, 0x33, 0x01, 0xe8, 0x6a, 0x33, 0x01, 0xe9, 0x6b, 0x33, + 0x41, 0x90, 0x9c, 0x01, 0x91, 0x72, 0x92, 0x3e, 0x93, 0x0f, 0x94, 0x01, + 0xff, 0xd0, 0x5f, 0x33, 0x01, 0xd1, 0x60, 0x33, 0x01, 0xd2, 0x61, 0x33, + 0x41, 0xd0, 0x54, 0x33, 0x01, 0xd1, 0x55, 0x33, 0x01, 0xd2, 0x56, 0x33, + 0x81, 0x1c, 0xd3, 0x58, 0x33, 0x01, 0xd4, 0x59, 0x33, 0x01, 0xd5, 0x5a, + 0x33, 0x01, 0xd6, 0x5b, 0x33, 0x01, 0xd7, 0x5c, 0x33, 0x01, 0xd8, 0x5d, + 0x33, 0x01, 0xd9, 0x5e, 0x33, 0x41, 0xe1, 0x57, 0x33, 0x41, 0xd0, 0x48, + 0x33, 0x01, 0xd1, 0x49, 0x33, 0x01, 0xd2, 0x4a, 0x33, 0x01, 0xd3, 0x4b, + 0x33, 0x81, 0x1d, 0xd4, 0x4d, 0x33, 0x01, 0xd5, 0x4e, 0x33, 0x01, 0xd6, + 0x4f, 0x33, 0x01, 0xd7, 0x50, 0x33, 0x01, 0xd8, 0x51, 0x33, 0x01, 0xd9, + 0x52, 0x33, 0xc1, 0x00, 0xe1, 0x53, 0x33, 0x41, 0xe1, 0x4c, 0x33, 0x41, + 0xd0, 0x3e, 0x33, 0x01, 0xd1, 0x3f, 0x33, 0x01, 0xd2, 0x40, 0x33, 0x01, + 0xd3, 0x41, 0x33, 0x01, 0xd4, 0x42, 0x33, 0x01, 0xd5, 0x43, 0x33, 0x01, + 0xd6, 0x44, 0x33, 0x01, 0xd7, 0x45, 0x33, 0x01, 0xd8, 0x46, 0x33, 0x01, + 0xd9, 0x47, 0x33, 0x41, 0xd1, 0x33, 0x33, 0x01, 0xd2, 0x34, 0x33, 0x01, + 0xd3, 0x35, 0x33, 0x01, 0xd4, 0x36, 0x33, 0x01, 0xd5, 0x37, 0x33, 0x01, + 0xd6, 0x38, 0x33, 0x81, 0x0c, 0xd7, 0x3b, 0x33, 0x01, 0xd8, 0x3c, 0x33, + 0x01, 0xd9, 0x3d, 0x33, 0x41, 0xe1, 0x39, 0x33, 0x01, 0xe2, 0x3a, 0x33, + 0x41, 0x90, 0x06, 0x4d, 0x5c, 0x79, 0x45, 0x34, 0x41, 0x90, 0x87, 0x01, + 0x91, 0x53, 0x92, 0x29, 0x93, 0x01, 0xff, 0xd0, 0x2a, 0x33, 0x01, 0xd1, + 0x2b, 0x33, 0x01, 0xd2, 0x2c, 0x33, 0x81, 0x15, 0xd3, 0x2e, 0x33, 0x81, + 0x0c, 0xd4, 0x30, 0x33, 0x01, 0xd5, 0x31, 0x33, 0x01, 0xd6, 0x32, 0x33, + 0x41, 0xe1, 0x2f, 0x33, 0x41, 0xe1, 0x2d, 0x33, 0x41, 0xd0, 0x20, 0x33, + 0x01, 0xd1, 0x21, 0x33, 0x01, 0xd2, 0x22, 0x33, 0x01, 0xd3, 0x23, 0x33, + 0x01, 0xd4, 0x24, 0x33, 0x01, 0xd5, 0x25, 0x33, 0x01, 0xd6, 0x26, 0x33, + 0x01, 0xd7, 0x27, 0x33, 0x01, 0xd8, 0x28, 0x33, 0x01, 0xd9, 0x29, 0x33, + 0x41, 0xd0, 0x14, 0x33, 0x01, 0xd1, 0x15, 0x33, 0x81, 0x25, 0xd2, 0x17, + 0x33, 0x01, 0xd3, 0x18, 0x33, 0x01, 0xd4, 0x19, 0x33, 0x01, 0xd5, 0x1a, + 0x33, 0x01, 0xd6, 0x1b, 0x33, 0x81, 0x0c, 0xd7, 0x1d, 0x33, 0x01, 0xd8, + 0x1e, 0x33, 0x01, 0xd9, 0x1f, 0x33, 0x41, 0xe1, 0x1c, 0x33, 0x41, 0xe1, + 0x16, 0x33, 0x41, 0xd1, 0x07, 0x33, 0x01, 0xd2, 0x08, 0x33, 0x01, 0xd3, + 0x09, 0x33, 0x81, 0x27, 0xd4, 0x0b, 0x33, 0x01, 0xd5, 0x0c, 0x33, 0x01, + 0xd6, 0x0d, 0x33, 0x01, 0xd7, 0x0e, 0x33, 0x81, 0x12, 0xd8, 0x10, 0x33, + 0x81, 0x09, 0xd9, 0x12, 0x33, 0xc1, 0x00, 0xe1, 0x13, 0x33, 0x41, 0xe1, + 0x11, 0x33, 0x41, 0xe1, 0x0f, 0x33, 0x41, 0xe1, 0x0a, 0x33, 0x41, 0x90, + 0xba, 0x01, 0x91, 0x81, 0x01, 0x92, 0x4e, 0x93, 0x1f, 0x94, 0x01, 0xff, + 0xd0, 0x00, 0x33, 0x01, 0xd1, 0x01, 0x33, 0x01, 0xd2, 0x02, 0x33, 0x01, + 0xd3, 0x03, 0x33, 0x01, 0xd4, 0x04, 0x33, 0x01, 0xd5, 0x05, 0x33, 0x01, + 0xd6, 0x06, 0x33, 0x41, 0xd0, 0xf5, 0x32, 0x01, 0xd1, 0xf6, 0x32, 0x01, + 0xd2, 0xf7, 0x32, 0x01, 0xd3, 0xf8, 0x32, 0x01, 0xd4, 0xf9, 0x32, 0x01, + 0xd5, 0xfa, 0x32, 0x81, 0x10, 0xd6, 0xfc, 0x32, 0x01, 0xd7, 0xfd, 0x32, + 0x01, 0xd8, 0xfe, 0x32, 0x01, 0xd9, 0xff, 0x32, 0x41, 0xe1, 0xfb, 0x32, + 0x41, 0xd0, 0xe9, 0x32, 0x01, 0xd1, 0xea, 0x32, 0x01, 0xd2, 0xeb, 0x32, + 0x01, 0xd3, 0xec, 0x32, 0x01, 0xd4, 0xed, 0x32, 0x01, 0xd5, 0xee, 0x32, + 0x01, 0xd6, 0xef, 0x32, 0x81, 0x0c, 0xd7, 0xf2, 0x32, 0x01, 0xd8, 0xf3, + 0x32, 0x01, 0xd9, 0xf4, 0x32, 0x41, 0xe1, 0xf0, 0x32, 0x01, 0xe2, 0xf1, + 0x32, 0x41, 0xd0, 0xdc, 0x32, 0x01, 0xd1, 0xdd, 0x32, 0x01, 0xd2, 0xde, + 0x32, 0x01, 0xd3, 0xdf, 0x32, 0x01, 0xd4, 0xe0, 0x32, 0x81, 0x19, 0xd5, + 0xe3, 0x32, 0x01, 0xd6, 0xe4, 0x32, 0x01, 0xd7, 0xe5, 0x32, 0x81, 0x08, + 0xd8, 0xe7, 0x32, 0x01, 0xd9, 0xe8, 0x32, 0x41, 0xe1, 0xe6, 0x32, 0x41, + 0xe1, 0xe1, 0x32, 0x01, 0xe2, 0xe2, 0x32, 0x41, 0xd1, 0xd1, 0x32, 0x01, + 0xd2, 0xd2, 0x32, 0x81, 0x21, 0xd3, 0xd4, 0x32, 0x01, 0xd4, 0xd5, 0x32, + 0x01, 0xd5, 0xd6, 0x32, 0x01, 0xd6, 0xd7, 0x32, 0x81, 0x0c, 0xd7, 0xd9, + 0x32, 0x01, 0xd8, 0xda, 0x32, 0x01, 0xd9, 0xdb, 0x32, 0x41, 0xe1, 0xd8, + 0x32, 0x41, 0xe1, 0xd3, 0x32, 0x41, 0x90, 0x5f, 0x91, 0x2b, 0x92, 0x01, + 0xff, 0xd0, 0xc7, 0x32, 0x01, 0xd1, 0xc8, 0x32, 0x01, 0xd2, 0xc9, 0x32, + 0x01, 0xd3, 0xca, 0x32, 0x01, 0xd4, 0xcb, 0x32, 0x01, 0xd5, 0xcc, 0x32, + 0x01, 0xd6, 0xcd, 0x32, 0x01, 0xd7, 0xce, 0x32, 0x01, 0xd8, 0xcf, 0x32, + 0x01, 0xd9, 0xd0, 0x32, 0x41, 0xd0, 0xbb, 0x32, 0x81, 0x29, 0xd1, 0xbd, + 0x32, 0x01, 0xd2, 0xbe, 0x32, 0x01, 0xd3, 0xbf, 0x32, 0x01, 0xd4, 0xc0, + 0x32, 0x01, 0xd5, 0xc1, 0x32, 0x01, 0xd6, 0xc2, 0x32, 0x81, 0x0c, 0xd7, + 0xc4, 0x32, 0x01, 0xd8, 0xc5, 0x32, 0x01, 0xd9, 0xc6, 0x32, 0x41, 0xe1, + 0xc3, 0x32, 0x41, 0xe1, 0xbc, 0x32, 0x41, 0xd1, 0xaf, 0x32, 0x01, 0xd2, + 0xb0, 0x32, 0x81, 0x25, 0xd3, 0xb2, 0x32, 0x81, 0x18, 0xd4, 0xb5, 0x32, + 0x01, 0xd5, 0xb6, 0x32, 0x01, 0xd6, 0xb7, 0x32, 0x01, 0xd7, 0xb8, 0x32, + 0x01, 0xd8, 0xb9, 0x32, 0x01, 0xd9, 0xba, 0x32, 0x41, 0xe1, 0xb3, 0x32, + 0x01, 0xe2, 0xb4, 0x32, 0x41, 0xe1, 0xb1, 0x32, 0x41, 0xd1, 0xa8, 0x32, + 0x01, 0xd2, 0xa9, 0x32, 0x01, 0xd3, 0xaa, 0x32, 0x01, 0xd4, 0xab, 0x32, + 0x01, 0xd5, 0xac, 0x32, 0x01, 0xd6, 0xad, 0x32, 0x01, 0xd7, 0xae, 0x32, + 0x41, 0x90, 0x0b, 0x91, 0x01, 0xff, 0xd0, 0xa6, 0x32, 0x01, 0xd1, 0xa7, + 0x32, 0x41, 0xd1, 0x9b, 0x32, 0x81, 0x25, 0xd2, 0x9d, 0x32, 0x01, 0xd3, + 0x9e, 0x32, 0x81, 0x18, 0xd4, 0xa0, 0x32, 0x01, 0xd5, 0xa1, 0x32, 0x01, + 0xd6, 0xa2, 0x32, 0x01, 0xd7, 0xa3, 0x32, 0x01, 0xd8, 0xa4, 0x32, 0x01, + 0xd9, 0xa5, 0x32, 0x41, 0xe1, 0x9f, 0x32, 0x41, 0xe1, 0x9c, 0x32, 0x41, + 0x90, 0x06, 0x4d, 0xa7, 0x82, 0x36, 0x34, 0x41, 0x90, 0xff, 0x01, 0x91, + 0xc2, 0x01, 0x92, 0x83, 0x01, 0x93, 0x3e, 0x94, 0x14, 0x95, 0x01, 0xff, + 0xd0, 0x97, 0x32, 0x81, 0x04, 0xd1, 0x9a, 0x32, 0x41, 0xe1, 0x98, 0x32, + 0x01, 0xe2, 0x99, 0x32, 0x41, 0xd0, 0x8d, 0x32, 0x01, 0xd1, 0x8e, 0x32, + 0x01, 0xd2, 0x8f, 0x32, 0x01, 0xd3, 0x90, 0x32, 0x01, 0xd4, 0x91, 0x32, + 0x01, 0xd5, 0x92, 0x32, 0x01, 0xd6, 0x93, 0x32, 0x01, 0xd7, 0x94, 0x32, + 0x01, 0xd8, 0x95, 0x32, 0x01, 0xd9, 0x96, 0x32, 0x41, 0xd0, 0x7d, 0x32, + 0x81, 0x3a, 0xd1, 0x7f, 0x32, 0x01, 0xd2, 0x80, 0x32, 0x01, 0xd3, 0x81, + 0x32, 0x81, 0x29, 0xd4, 0x83, 0x32, 0x01, 0xd5, 0x84, 0x32, 0x01, 0xd6, + 0x85, 0x32, 0x81, 0x0c, 0xd7, 0x8a, 0x32, 0x01, 0xd8, 0x8b, 0x32, 0x01, + 0xd9, 0x8c, 0x32, 0x41, 0xe1, 0x86, 0x32, 0x01, 0xe2, 0x87, 0x32, 0x01, + 0xe3, 0x88, 0x32, 0x01, 0xe4, 0x89, 0x32, 0x41, 0xe1, 0x82, 0x32, 0x41, + 0xe1, 0x7e, 0x32, 0x41, 0xd0, 0x6f, 0x32, 0x81, 0x33, 0xd1, 0x71, 0x32, + 0x01, 0xd2, 0x72, 0x32, 0x01, 0xd3, 0x73, 0x32, 0x01, 0xd4, 0x74, 0x32, + 0x81, 0x1e, 0xd5, 0x76, 0x32, 0x81, 0x15, 0xd6, 0x78, 0x32, 0x01, 0xd7, + 0x79, 0x32, 0x01, 0xd8, 0x7a, 0x32, 0x01, 0xd9, 0x7b, 0x32, 0xc1, 0x00, + 0xe1, 0x7c, 0x32, 0x41, 0xe1, 0x77, 0x32, 0x41, 0xe1, 0x75, 0x32, 0x41, + 0xe1, 0x70, 0x32, 0x41, 0xd0, 0x61, 0x32, 0x81, 0x29, 0xd1, 0x65, 0x32, + 0x01, 0xd2, 0x66, 0x32, 0x01, 0xd3, 0x67, 0x32, 0x01, 0xd4, 0x68, 0x32, + 0x01, 0xd5, 0x69, 0x32, 0x01, 0xd6, 0x6a, 0x32, 0x01, 0xd7, 0x6b, 0x32, + 0x01, 0xd8, 0x6c, 0x32, 0x01, 0xd9, 0x6d, 0x32, 0xc1, 0x00, 0xe1, 0x6e, + 0x32, 0x41, 0xe1, 0x62, 0x32, 0x01, 0xe2, 0x63, 0x32, 0x01, 0xe3, 0x64, + 0x32, 0x41, 0xd1, 0x50, 0x32, 0x81, 0x3e, 0xd2, 0x52, 0x32, 0x01, 0xd3, + 0x53, 0x32, 0x01, 0xd4, 0x54, 0x32, 0x01, 0xd5, 0x55, 0x32, 0x81, 0x29, + 0xd6, 0x57, 0x32, 0x81, 0x0c, 0xd7, 0x5e, 0x32, 0x01, 0xd8, 0x5f, 0x32, + 0x01, 0xd9, 0x60, 0x32, 0x41, 0xe1, 0x58, 0x32, 0x01, 0xe2, 0x59, 0x32, + 0x01, 0xe3, 0x5a, 0x32, 0x01, 0xe4, 0x5b, 0x32, 0x01, 0xe5, 0x5c, 0x32, + 0x01, 0xe6, 0x5d, 0x32, 0x41, 0xe1, 0x56, 0x32, 0x41, 0xe1, 0x51, 0x32, + 0x41, 0x90, 0xdc, 0x01, 0x02, 0x9e, 0x90, 0x78, 0x02, 0xfd, 0xe1, 0x01, + 0xff, 0x90, 0x4d, 0x91, 0x14, 0x92, 0x01, 0xff, 0xd0, 0x4c, 0x32, 0x01, + 0xd1, 0x4d, 0x32, 0x01, 0xd2, 0x4e, 0x32, 0xc1, 0x00, 0xe1, 0x4f, 0x32, + 0x41, 0xd0, 0x3f, 0x32, 0x81, 0x2e, 0xd1, 0x41, 0x32, 0x81, 0x25, 0xd2, + 0x43, 0x32, 0x01, 0xd3, 0x44, 0x32, 0x01, 0xd4, 0x45, 0x32, 0x01, 0xd5, + 0x46, 0x32, 0x01, 0xd6, 0x47, 0x32, 0x01, 0xd7, 0x48, 0x32, 0x01, 0xd8, + 0x49, 0x32, 0x81, 0x04, 0xd9, 0x4b, 0x32, 0x41, 0xe1, 0x4a, 0x32, 0x41, + 0xe1, 0x42, 0x32, 0x41, 0xe1, 0x40, 0x32, 0x41, 0xd1, 0x36, 0x32, 0x01, + 0xd2, 0x37, 0x32, 0x01, 0xd3, 0x38, 0x32, 0x01, 0xd4, 0x39, 0x32, 0x01, + 0xd5, 0x3a, 0x32, 0x01, 0xd6, 0x3b, 0x32, 0x01, 0xd7, 0x3c, 0x32, 0x01, + 0xd8, 0x3d, 0x32, 0x01, 0xd9, 0x3e, 0x32, 0x41, 0x90, 0x35, 0x91, 0x06, + 0x42, 0x15, 0xdd, 0x35, 0x32, 0x41, 0xd0, 0x2a, 0x32, 0x01, 0xd1, 0x2b, + 0x32, 0x01, 0xd2, 0x2c, 0x32, 0x01, 0xd3, 0x2d, 0x32, 0x01, 0xd4, 0x2e, + 0x32, 0x01, 0xd5, 0x2f, 0x32, 0x01, 0xd6, 0x30, 0x32, 0x01, 0xd7, 0x31, + 0x32, 0x81, 0x08, 0xd8, 0x33, 0x32, 0x01, 0xd9, 0x34, 0x32, 0x41, 0xe1, + 0x32, 0x32, 0x41, 0xd1, 0x20, 0x32, 0x01, 0xd2, 0x21, 0x32, 0x01, 0xd3, + 0x22, 0x32, 0x01, 0xd4, 0x23, 0x32, 0x01, 0xd5, 0x24, 0x32, 0x81, 0x10, + 0xd6, 0x26, 0x32, 0x01, 0xd7, 0x27, 0x32, 0x01, 0xd8, 0x28, 0x32, 0x01, + 0xd9, 0x29, 0x32, 0x41, 0xe1, 0x25, 0x32, 0x41, 0x90, 0xaf, 0x01, 0x91, + 0x7c, 0x92, 0x4d, 0x93, 0x0f, 0x94, 0x01, 0xff, 0xd0, 0x1d, 0x32, 0x01, + 0xd1, 0x1e, 0x32, 0x01, 0xd2, 0x1f, 0x32, 0x41, 0xd0, 0x0f, 0x32, 0x01, + 0xd1, 0x10, 0x32, 0x01, 0xd2, 0x11, 0x32, 0x01, 0xd3, 0x12, 0x32, 0x81, + 0x27, 0xd4, 0x14, 0x32, 0x81, 0x1e, 0xd5, 0x16, 0x32, 0x81, 0x15, 0xd6, + 0x18, 0x32, 0x01, 0xd7, 0x19, 0x32, 0x81, 0x08, 0xd8, 0x1b, 0x32, 0x01, + 0xd9, 0x1c, 0x32, 0x41, 0xe1, 0x1a, 0x32, 0x41, 0xe1, 0x17, 0x32, 0x41, + 0xe1, 0x15, 0x32, 0x41, 0xe1, 0x13, 0x32, 0x41, 0xd0, 0x04, 0x32, 0x01, + 0xd1, 0x05, 0x32, 0x01, 0xd2, 0x06, 0x32, 0x01, 0xd3, 0x07, 0x32, 0x01, + 0xd4, 0x08, 0x32, 0x01, 0xd5, 0x09, 0x32, 0x81, 0x10, 0xd6, 0x0b, 0x32, + 0x01, 0xd7, 0x0c, 0x32, 0x01, 0xd8, 0x0d, 0x32, 0x01, 0xd9, 0x0e, 0x32, + 0x41, 0xe1, 0x0a, 0x32, 0x41, 0xd0, 0xf8, 0x31, 0x01, 0xd1, 0xf9, 0x31, + 0x01, 0xd2, 0xfa, 0x31, 0x01, 0xd3, 0xfb, 0x31, 0x01, 0xd4, 0xfc, 0x31, + 0x01, 0xd5, 0xfd, 0x31, 0x01, 0xd6, 0xfe, 0x31, 0x01, 0xd7, 0xff, 0x31, + 0x01, 0xd8, 0x00, 0x32, 0x81, 0x04, 0xd9, 0x03, 0x32, 0x41, 0xe1, 0x01, + 0x32, 0x01, 0xe2, 0x02, 0x32, 0x41, 0xd1, 0xef, 0x31, 0x01, 0xd2, 0xf0, + 0x31, 0x01, 0xd3, 0xf1, 0x31, 0x01, 0xd4, 0xf2, 0x31, 0x01, 0xd5, 0xf3, + 0x31, 0x01, 0xd6, 0xf4, 0x31, 0x01, 0xd7, 0xf5, 0x31, 0x01, 0xd8, 0xf6, + 0x31, 0x01, 0xd9, 0xf7, 0x31, 0x41, 0x90, 0x76, 0x52, 0x48, 0x4d, 0x40, + 0x34, 0x01, 0x4f, 0x3e, 0x6a, 0x55, 0x34, 0xc1, 0x00, 0x04, 0x41, 0x04, + 0x01, 0xff, 0x46, 0x74, 0x09, 0x50, 0x34, 0x81, 0x41, 0x43, 0x45, 0x04, + 0x52, 0x34, 0x01, 0x45, 0x50, 0xe0, 0x49, 0x34, 0x81, 0x23, 0x43, 0x1e, + 0x00, 0x4b, 0x34, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0xc4, 0xc4, 0x53, + 0x34, 0x01, 0x43, 0x45, 0x04, 0x4a, 0x34, 0x01, 0x45, 0x50, 0xe0, 0x47, + 0x34, 0xc1, 0x00, 0x4f, 0xcd, 0x62, 0x4f, 0x34, 0x41, 0x05, 0x19, 0x00, + 0x01, 0xff, 0x46, 0x74, 0x09, 0x51, 0x34, 0x01, 0x43, 0x1e, 0x00, 0x4d, + 0x34, 0x41, 0x80, 0x01, 0xff, 0x47, 0xc4, 0xc4, 0x54, 0x34, 0x01, 0x43, + 0x45, 0x04, 0x4e, 0x34, 0x01, 0x45, 0x50, 0xe0, 0x48, 0x34, 0xc1, 0x00, + 0x4c, 0x83, 0x83, 0x4c, 0x34, 0x41, 0x90, 0xed, 0x01, 0x91, 0x8d, 0x01, + 0x92, 0x54, 0x93, 0x1c, 0x94, 0x01, 0xff, 0xd0, 0xe9, 0x31, 0x81, 0x10, + 0xd1, 0xeb, 0x31, 0x01, 0xd2, 0xec, 0x31, 0x01, 0xd3, 0xed, 0x31, 0x01, + 0xd4, 0xee, 0x31, 0x41, 0xe1, 0xea, 0x31, 0x41, 0xd0, 0xdc, 0x31, 0x01, + 0xd1, 0xdd, 0x31, 0x81, 0x29, 0xd2, 0xdf, 0x31, 0x01, 0xd3, 0xe0, 0x31, + 0x81, 0x18, 0xd4, 0xe3, 0x31, 0x01, 0xd5, 0xe4, 0x31, 0x01, 0xd6, 0xe5, + 0x31, 0x01, 0xd7, 0xe6, 0x31, 0x01, 0xd8, 0xe7, 0x31, 0x01, 0xd9, 0xe8, + 0x31, 0x41, 0xe1, 0xe1, 0x31, 0x01, 0xe2, 0xe2, 0x31, 0x41, 0xe1, 0xde, + 0x31, 0x41, 0xd0, 0xcf, 0x31, 0x01, 0xd1, 0xd0, 0x31, 0x01, 0xd2, 0xd1, + 0x31, 0x81, 0x26, 0xd3, 0xd3, 0x31, 0x01, 0xd4, 0xd4, 0x31, 0x81, 0x19, + 0xd5, 0xd6, 0x31, 0x01, 0xd6, 0xd7, 0x31, 0x01, 0xd7, 0xd8, 0x31, 0x01, + 0xd8, 0xd9, 0x31, 0x81, 0x04, 0xd9, 0xdb, 0x31, 0x41, 0xe1, 0xda, 0x31, + 0x41, 0xe1, 0xd5, 0x31, 0x41, 0xe1, 0xd2, 0x31, 0x41, 0xd0, 0xb9, 0x31, + 0x81, 0x54, 0xd1, 0xbb, 0x31, 0x01, 0xd2, 0xbc, 0x31, 0x81, 0x2b, 0xd3, + 0xc5, 0x31, 0x01, 0xd4, 0xc6, 0x31, 0x01, 0xd5, 0xc7, 0x31, 0x81, 0x1a, + 0xd6, 0xc9, 0x31, 0x81, 0x11, 0xd7, 0xcb, 0x31, 0x81, 0x08, 0xd8, 0xcd, + 0x31, 0x01, 0xd9, 0xce, 0x31, 0x41, 0xe1, 0xcc, 0x31, 0x41, 0xe1, 0xca, + 0x31, 0x41, 0xe1, 0xc8, 0x31, 0x41, 0xe1, 0xbd, 0x31, 0x01, 0xe2, 0xbe, + 0x31, 0x01, 0xe3, 0xbf, 0x31, 0x01, 0xe4, 0xc0, 0x31, 0x01, 0xe5, 0xc1, + 0x31, 0x01, 0xe6, 0xc2, 0x31, 0x01, 0xe7, 0xc3, 0x31, 0x01, 0xe8, 0xc4, + 0x31, 0x41, 0xe1, 0xba, 0x31, 0x41, 0xd1, 0xad, 0x31, 0x81, 0x25, 0xd2, + 0xb0, 0x31, 0x01, 0xd3, 0xb1, 0x31, 0x81, 0x18, 0xd4, 0xb3, 0x31, 0x01, + 0xd5, 0xb4, 0x31, 0x01, 0xd6, 0xb5, 0x31, 0x01, 0xd7, 0xb6, 0x31, 0x01, + 0xd8, 0xb7, 0x31, 0x01, 0xd9, 0xb8, 0x31, 0x41, 0xe1, 0xb2, 0x31, 0x41, + 0xe1, 0xae, 0x31, 0x01, 0xe2, 0xaf, 0x31, 0x41, 0x02, 0x5b, 0xce, 0x06, + 0x48, 0x61, 0x79, 0x43, 0x34, 0x41, 0xd1, 0xa3, 0x31, 0x01, 0xd2, 0xa4, + 0x31, 0x81, 0x1d, 0xd3, 0xa6, 0x31, 0x01, 0xd4, 0xa7, 0x31, 0x01, 0xd5, + 0xa8, 0x31, 0x01, 0xd6, 0xa9, 0x31, 0x81, 0x08, 0xd7, 0xab, 0x31, 0x01, + 0xd8, 0xac, 0x31, 0x41, 0xe1, 0xaa, 0x31, 0x41, 0xe1, 0xa5, 0x31, 0x41, + 0xd1, 0x9b, 0x31, 0x01, 0xd2, 0x9c, 0x31, 0x01, 0xd3, 0x9d, 0x31, 0x01, + 0xd4, 0x9e, 0x31, 0x01, 0xd5, 0x9f, 0x31, 0x01, 0xd6, 0xa0, 0x31, 0x01, + 0xd7, 0xa1, 0x31, 0x01, 0xd8, 0xa2, 0x31, 0x41, 0x90, 0x37, 0x09, 0x5a, + 0xb3, 0x01, 0xff, 0x46, 0x74, 0x09, 0x3b, 0x34, 0x81, 0x1c, 0x46, 0x7d, + 0x02, 0x39, 0x34, 0x01, 0x43, 0x1e, 0x00, 0x3a, 0x34, 0xc1, 0x00, 0x80, + 0x01, 0xff, 0x43, 0x45, 0x04, 0x34, 0x34, 0x01, 0x45, 0x50, 0xe0, 0x32, + 0x34, 0x41, 0x80, 0x01, 0xff, 0x43, 0x45, 0x04, 0x35, 0x34, 0x01, 0x45, + 0x50, 0xe0, 0x33, 0x34, 0x41, 0x90, 0x25, 0x91, 0x01, 0xff, 0xd0, 0x93, + 0x31, 0x81, 0x19, 0xd1, 0x95, 0x31, 0x81, 0x10, 0xd2, 0x97, 0x31, 0x01, + 0xd3, 0x98, 0x31, 0x01, 0xd4, 0x99, 0x31, 0x01, 0xd5, 0x9a, 0x31, 0x41, + 0xe1, 0x96, 0x31, 0x41, 0xe1, 0x94, 0x31, 0x41, 0xd1, 0x88, 0x31, 0x01, + 0xd2, 0x89, 0x31, 0x01, 0xd3, 0x8a, 0x31, 0x01, 0xd4, 0x8b, 0x31, 0x01, + 0xd5, 0x8c, 0x31, 0x81, 0x15, 0xd6, 0x8e, 0x31, 0x01, 0xd7, 0x8f, 0x31, + 0x01, 0xd8, 0x90, 0x31, 0x01, 0xd9, 0x91, 0x31, 0xc1, 0x00, 0xe1, 0x92, + 0x31, 0x41, 0xe1, 0x8d, 0x31, 0x41, 0x02, 0x5b, 0xce, 0x16, 0x04, 0x23, + 0x00, 0x06, 0x50, 0x5e, 0x5f, 0x31, 0x34, 0x41, 0x45, 0xbe, 0xb6, 0x42, + 0x34, 0x01, 0x49, 0x60, 0x79, 0x44, 0x34, 0x41, 0xd1, 0x7f, 0x31, 0x01, + 0xd2, 0x80, 0x31, 0x01, 0xd3, 0x81, 0x31, 0x01, 0xd4, 0x82, 0x31, 0x01, + 0xd5, 0x83, 0x31, 0x01, 0xd6, 0x84, 0x31, 0x81, 0x08, 0xd7, 0x86, 0x31, + 0x01, 0xd8, 0x87, 0x31, 0x41, 0xe1, 0x85, 0x31, 0x41, 0x90, 0xe3, 0x01, + 0x91, 0xb3, 0x01, 0x92, 0x7f, 0x93, 0x4b, 0x94, 0x17, 0x95, 0x01, 0xff, + 0xd0, 0x7a, 0x31, 0x01, 0xd1, 0x7b, 0x31, 0x01, 0xd2, 0x7c, 0x31, 0x01, + 0xd3, 0x7d, 0x31, 0x01, 0xd4, 0x7e, 0x31, 0x41, 0xd0, 0x6e, 0x31, 0x01, + 0xd1, 0x6f, 0x31, 0x01, 0xd2, 0x70, 0x31, 0x01, 0xd3, 0x71, 0x31, 0x81, + 0x1d, 0xd4, 0x73, 0x31, 0x01, 0xd5, 0x74, 0x31, 0x81, 0x10, 0xd6, 0x76, + 0x31, 0x01, 0xd7, 0x77, 0x31, 0x01, 0xd8, 0x78, 0x31, 0x01, 0xd9, 0x79, + 0x31, 0x41, 0xe1, 0x75, 0x31, 0x41, 0xe1, 0x72, 0x31, 0x41, 0xd0, 0x62, + 0x31, 0x01, 0xd1, 0x63, 0x31, 0x01, 0xd2, 0x64, 0x31, 0x01, 0xd3, 0x65, + 0x31, 0x01, 0xd4, 0x66, 0x31, 0x01, 0xd5, 0x67, 0x31, 0x01, 0xd6, 0x68, + 0x31, 0x81, 0x11, 0xd7, 0x6a, 0x31, 0x81, 0x08, 0xd8, 0x6c, 0x31, 0x01, + 0xd9, 0x6d, 0x31, 0x41, 0xe1, 0x6b, 0x31, 0x41, 0xe1, 0x69, 0x31, 0x41, + 0xd0, 0x56, 0x31, 0x81, 0x29, 0xd1, 0x58, 0x31, 0x01, 0xd2, 0x59, 0x31, + 0x01, 0xd3, 0x5a, 0x31, 0x01, 0xd4, 0x5b, 0x31, 0x01, 0xd5, 0x5c, 0x31, + 0x01, 0xd6, 0x5d, 0x31, 0x81, 0x0c, 0xd7, 0x5f, 0x31, 0x01, 0xd8, 0x60, + 0x31, 0x01, 0xd9, 0x61, 0x31, 0x41, 0xe1, 0x5e, 0x31, 0x41, 0xe1, 0x57, + 0x31, 0x41, 0xd0, 0x4b, 0x31, 0x01, 0xd1, 0x4c, 0x31, 0x81, 0x20, 0xd2, + 0x4e, 0x31, 0x01, 0xd3, 0x4f, 0x31, 0x01, 0xd4, 0x50, 0x31, 0x01, 0xd5, + 0x51, 0x31, 0x01, 0xd6, 0x52, 0x31, 0x01, 0xd7, 0x53, 0x31, 0x01, 0xd8, + 0x54, 0x31, 0x01, 0xd9, 0x55, 0x31, 0x41, 0xe1, 0x4d, 0x31, 0x41, 0xd1, + 0x3f, 0x31, 0x01, 0xd2, 0x40, 0x31, 0x01, 0xd3, 0x41, 0x31, 0x01, 0xd4, + 0x42, 0x31, 0x01, 0xd5, 0x43, 0x31, 0x01, 0xd6, 0x44, 0x31, 0x81, 0x15, + 0xd7, 0x46, 0x31, 0x81, 0x08, 0xd8, 0x49, 0x31, 0x01, 0xd9, 0x4a, 0x31, + 0x41, 0xe1, 0x47, 0x31, 0x01, 0xe2, 0x48, 0x31, 0x41, 0xe1, 0x45, 0x31, + 0x41, 0x90, 0x06, 0x49, 0xba, 0xb6, 0x41, 0x34, 0x41, 0x90, 0xf2, 0x01, + 0x91, 0xc2, 0x01, 0x92, 0x92, 0x01, 0x93, 0x59, 0x94, 0x20, 0x95, 0x01, + 0xff, 0xd0, 0x38, 0x31, 0x01, 0xd1, 0x39, 0x31, 0x81, 0x08, 0xd2, 0x3d, + 0x31, 0x01, 0xd3, 0x3e, 0x31, 0x41, 0xe1, 0x3a, 0x31, 0x01, 0xe2, 0x3b, + 0x31, 0x01, 0xe3, 0x3c, 0x31, 0x41, 0xd0, 0x2b, 0x31, 0x01, 0xd1, 0x2c, + 0x31, 0x01, 0xd2, 0x2d, 0x31, 0x01, 0xd3, 0x2e, 0x31, 0x01, 0xd4, 0x2f, + 0x31, 0x01, 0xd5, 0x30, 0x31, 0x81, 0x1a, 0xd6, 0x32, 0x31, 0x81, 0x11, + 0xd7, 0x34, 0x31, 0x81, 0x08, 0xd8, 0x36, 0x31, 0x01, 0xd9, 0x37, 0x31, + 0x41, 0xe1, 0x35, 0x31, 0x41, 0xe1, 0x33, 0x31, 0x41, 0xe1, 0x31, 0x31, + 0x41, 0xd0, 0x1e, 0x31, 0x01, 0xd1, 0x1f, 0x31, 0x81, 0x2a, 0xd2, 0x21, + 0x31, 0x01, 0xd3, 0x22, 0x31, 0x01, 0xd4, 0x23, 0x31, 0x01, 0xd5, 0x24, + 0x31, 0x01, 0xd6, 0x25, 0x31, 0x01, 0xd7, 0x26, 0x31, 0x81, 0x0d, 0xd8, + 0x28, 0x31, 0x81, 0x04, 0xd9, 0x2a, 0x31, 0x41, 0xe1, 0x29, 0x31, 0x41, + 0xe1, 0x27, 0x31, 0x41, 0xe1, 0x20, 0x31, 0x41, 0xd0, 0x13, 0x31, 0x01, + 0xd1, 0x14, 0x31, 0x81, 0x20, 0xd2, 0x16, 0x31, 0x01, 0xd3, 0x17, 0x31, + 0x01, 0xd4, 0x18, 0x31, 0x01, 0xd5, 0x19, 0x31, 0x01, 0xd6, 0x1a, 0x31, + 0x01, 0xd7, 0x1b, 0x31, 0x01, 0xd8, 0x1c, 0x31, 0x01, 0xd9, 0x1d, 0x31, + 0x41, 0xe1, 0x15, 0x31, 0x41, 0xd0, 0x08, 0x31, 0x01, 0xd1, 0x09, 0x31, + 0x01, 0xd2, 0x0a, 0x31, 0x01, 0xd3, 0x0b, 0x31, 0x81, 0x18, 0xd4, 0x0d, + 0x31, 0x01, 0xd5, 0x0e, 0x31, 0x01, 0xd6, 0x0f, 0x31, 0x01, 0xd7, 0x10, + 0x31, 0x01, 0xd8, 0x11, 0x31, 0x01, 0xd9, 0x12, 0x31, 0x41, 0xe1, 0x0c, + 0x31, 0x41, 0xd1, 0xfe, 0x30, 0x81, 0x20, 0xd2, 0x00, 0x31, 0x01, 0xd3, + 0x01, 0x31, 0x01, 0xd4, 0x02, 0x31, 0x01, 0xd5, 0x03, 0x31, 0x01, 0xd6, + 0x04, 0x31, 0x01, 0xd7, 0x05, 0x31, 0x01, 0xd8, 0x06, 0x31, 0x01, 0xd9, + 0x07, 0x31, 0x41, 0xe1, 0xff, 0x30, 0x41, 0x90, 0x17, 0x03, 0x1b, 0x00, + 0x01, 0xff, 0x49, 0x55, 0x62, 0x3d, 0x34, 0x01, 0x47, 0x93, 0xcb, 0x38, + 0x34, 0x01, 0x50, 0x4e, 0x62, 0x3f, 0x34, 0x41, 0x90, 0x90, 0x01, 0x91, + 0x5c, 0x92, 0x28, 0x93, 0x01, 0xff, 0xd0, 0xf5, 0x30, 0x01, 0xd1, 0xf6, + 0x30, 0x01, 0xd2, 0xf7, 0x30, 0x01, 0xd3, 0xf8, 0x30, 0x01, 0xd4, 0xf9, + 0x30, 0x81, 0x0c, 0xd6, 0xfb, 0x30, 0x01, 0xd7, 0xfc, 0x30, 0x01, 0xd8, + 0xfd, 0x30, 0x41, 0xe1, 0xfa, 0x30, 0x41, 0xd0, 0xe9, 0x30, 0x81, 0x29, + 0xd1, 0xeb, 0x30, 0x01, 0xd2, 0xec, 0x30, 0x01, 0xd3, 0xed, 0x30, 0x01, + 0xd4, 0xee, 0x30, 0x01, 0xd5, 0xef, 0x30, 0x01, 0xd6, 0xf0, 0x30, 0x01, + 0xd7, 0xf1, 0x30, 0x01, 0xd8, 0xf2, 0x30, 0x81, 0x04, 0xd9, 0xf4, 0x30, + 0x41, 0xe1, 0xf3, 0x30, 0x41, 0xe1, 0xea, 0x30, 0x41, 0xd0, 0xdd, 0x30, + 0x01, 0xd1, 0xde, 0x30, 0x01, 0xd2, 0xdf, 0x30, 0x01, 0xd3, 0xe0, 0x30, + 0x01, 0xd4, 0xe1, 0x30, 0x01, 0xd5, 0xe2, 0x30, 0x01, 0xd6, 0xe3, 0x30, + 0x81, 0x11, 0xd7, 0xe5, 0x30, 0x81, 0x08, 0xd8, 0xe7, 0x30, 0x01, 0xd9, + 0xe8, 0x30, 0x41, 0xe1, 0xe6, 0x30, 0x41, 0xe1, 0xe4, 0x30, 0x41, 0xd1, + 0xd2, 0x30, 0x01, 0xd2, 0xd3, 0x30, 0x01, 0xd3, 0xd4, 0x30, 0x01, 0xd4, + 0xd5, 0x30, 0x01, 0xd5, 0xd6, 0x30, 0x01, 0xd6, 0xd7, 0x30, 0x01, 0xd7, + 0xd8, 0x30, 0x01, 0xd8, 0xd9, 0x30, 0x81, 0x09, 0xd9, 0xdb, 0x30, 0xc1, + 0x00, 0xe1, 0xdc, 0x30, 0x41, 0xe1, 0xda, 0x30, 0x41, 0x90, 0xe2, 0x02, + 0x91, 0xb7, 0x02, 0x92, 0x87, 0x02, 0x93, 0xd2, 0x01, 0x94, 0x9d, 0x01, + 0x95, 0x44, 0x96, 0x01, 0xff, 0xd0, 0xc2, 0x30, 0x01, 0xd1, 0xc3, 0x30, + 0x01, 0xd2, 0xc4, 0x30, 0x01, 0xd3, 0xc5, 0x30, 0x01, 0xd4, 0xc6, 0x30, + 0x01, 0xd5, 0xc7, 0x30, 0x01, 0xd6, 0xc8, 0x30, 0x01, 0xd7, 0xc9, 0x30, + 0xc1, 0x00, 0xe1, 0xca, 0x30, 0x01, 0xe2, 0xcb, 0x30, 0x01, 0xe3, 0xcc, + 0x30, 0x01, 0xe4, 0xcd, 0x30, 0x01, 0xe5, 0xce, 0x30, 0x01, 0xe6, 0xcf, + 0x30, 0x01, 0xe7, 0xd0, 0x30, 0x01, 0xe8, 0xd1, 0x30, 0x41, 0xd0, 0xad, + 0x30, 0x81, 0x2e, 0xd1, 0xb7, 0x30, 0x01, 0xd2, 0xb8, 0x30, 0x81, 0x21, + 0xd3, 0xba, 0x30, 0x01, 0xd4, 0xbb, 0x30, 0x81, 0x14, 0xd5, 0xbd, 0x30, + 0x01, 0xd6, 0xbe, 0x30, 0x01, 0xd7, 0xbf, 0x30, 0x01, 0xd8, 0xc0, 0x30, + 0x01, 0xd9, 0xc1, 0x30, 0x41, 0xe1, 0xbc, 0x30, 0x41, 0xe1, 0xb9, 0x30, + 0x41, 0xe1, 0xae, 0x30, 0x01, 0xe2, 0xaf, 0x30, 0x01, 0xe3, 0xb0, 0x30, + 0x01, 0xe4, 0xb1, 0x30, 0x01, 0xe5, 0xb2, 0x30, 0x01, 0xe6, 0xb3, 0x30, + 0x01, 0xe7, 0xb4, 0x30, 0x01, 0xe8, 0xb5, 0x30, 0x01, 0xe9, 0xb6, 0x30, + 0x41, 0xd0, 0xa1, 0x30, 0x01, 0xd1, 0xa2, 0x30, 0x01, 0xd2, 0xa3, 0x30, + 0x01, 0xd3, 0xa4, 0x30, 0x01, 0xd4, 0xa5, 0x30, 0x01, 0xd5, 0xa6, 0x30, + 0x01, 0xd6, 0xa7, 0x30, 0x81, 0x11, 0xd7, 0xa9, 0x30, 0x01, 0xd8, 0xaa, + 0x30, 0x81, 0x04, 0xd9, 0xac, 0x30, 0x41, 0xe1, 0xab, 0x30, 0x41, 0xe1, + 0xa8, 0x30, 0x41, 0xd0, 0x95, 0x30, 0x01, 0xd1, 0x96, 0x30, 0x81, 0x25, + 0xd2, 0x98, 0x30, 0x01, 0xd3, 0x99, 0x30, 0x01, 0xd4, 0x9a, 0x30, 0x81, + 0x14, 0xd5, 0x9c, 0x30, 0x01, 0xd6, 0x9d, 0x30, 0x01, 0xd7, 0x9e, 0x30, + 0x01, 0xd8, 0x9f, 0x30, 0x01, 0xd9, 0xa0, 0x30, 0x41, 0xe1, 0x9b, 0x30, + 0x41, 0xe1, 0x97, 0x30, 0x41, 0xd0, 0x8a, 0x30, 0x01, 0xd1, 0x8b, 0x30, + 0x01, 0xd2, 0x8c, 0x30, 0x01, 0xd3, 0x8d, 0x30, 0x01, 0xd4, 0x8e, 0x30, + 0x01, 0xd5, 0x8f, 0x30, 0x01, 0xd6, 0x90, 0x30, 0x01, 0xd7, 0x91, 0x30, + 0x81, 0x08, 0xd8, 0x93, 0x30, 0x01, 0xd9, 0x94, 0x30, 0x41, 0xe1, 0x92, + 0x30, 0x41, 0xd0, 0x80, 0x30, 0x01, 0xd1, 0x81, 0x30, 0x01, 0xd2, 0x82, + 0x30, 0x01, 0xd3, 0x83, 0x30, 0x01, 0xd4, 0x84, 0x30, 0x01, 0xd5, 0x85, + 0x30, 0x01, 0xd6, 0x86, 0x30, 0x01, 0xd7, 0x87, 0x30, 0x01, 0xd8, 0x88, + 0x30, 0x01, 0xd9, 0x89, 0x30, 0x41, 0xd1, 0x76, 0x30, 0x01, 0xd2, 0x77, + 0x30, 0x01, 0xd3, 0x78, 0x30, 0x01, 0xd4, 0x79, 0x30, 0x01, 0xd5, 0x7a, + 0x30, 0x01, 0xd6, 0x7b, 0x30, 0x01, 0xd7, 0x7c, 0x30, 0x01, 0xd8, 0x7d, + 0x30, 0x81, 0x04, 0xd9, 0x7f, 0x30, 0x41, 0xe1, 0x7e, 0x30, 0x41, 0x90, + 0x46, 0x91, 0x17, 0x92, 0x01, 0xff, 0xd0, 0x71, 0x30, 0x01, 0xd1, 0x72, + 0x30, 0x01, 0xd2, 0x73, 0x30, 0x01, 0xd3, 0x74, 0x30, 0x01, 0xd4, 0x75, + 0x30, 0x41, 0xd0, 0x66, 0x30, 0x81, 0x24, 0xd1, 0x68, 0x30, 0x01, 0xd2, + 0x69, 0x30, 0x01, 0xd3, 0x6a, 0x30, 0x01, 0xd4, 0x6b, 0x30, 0x01, 0xd5, + 0x6c, 0x30, 0x01, 0xd6, 0x6d, 0x30, 0x01, 0xd7, 0x6e, 0x30, 0x01, 0xd8, + 0x6f, 0x30, 0x01, 0xd9, 0x70, 0x30, 0x41, 0xe1, 0x67, 0x30, 0x41, 0xd1, + 0x5a, 0x30, 0x01, 0xd2, 0x5b, 0x30, 0x81, 0x1c, 0xd3, 0x5f, 0x30, 0x01, + 0xd4, 0x60, 0x30, 0x01, 0xd5, 0x61, 0x30, 0x01, 0xd6, 0x62, 0x30, 0x01, + 0xd7, 0x63, 0x30, 0x01, 0xd8, 0x64, 0x30, 0x01, 0xd9, 0x65, 0x30, 0x41, + 0xe1, 0x5c, 0x30, 0x01, 0xe2, 0x5d, 0x30, 0x01, 0xe3, 0x5e, 0x30, 0x41, + 0x02, 0x5b, 0xce, 0x17, 0x05, 0x1f, 0x3b, 0x01, 0xff, 0x49, 0x55, 0x62, + 0x3c, 0x34, 0x01, 0x47, 0x93, 0xcb, 0x37, 0x34, 0x01, 0x50, 0x4e, 0x62, + 0x3e, 0x34, 0x41, 0xd1, 0x50, 0x30, 0x01, 0xd2, 0x51, 0x30, 0x01, 0xd3, + 0x52, 0x30, 0x01, 0xd4, 0x53, 0x30, 0x01, 0xd5, 0x54, 0x30, 0x81, 0x10, + 0xd6, 0x56, 0x30, 0x01, 0xd7, 0x57, 0x30, 0x01, 0xd8, 0x58, 0x30, 0x01, + 0xd9, 0x59, 0x30, 0x41, 0xe1, 0x55, 0x30, 0x41, 0x90, 0x97, 0x01, 0x02, + 0x0d, 0xe2, 0x01, 0xff, 0x90, 0x63, 0x91, 0x39, 0x92, 0x0f, 0x93, 0x01, + 0xff, 0xd0, 0x2c, 0x34, 0x01, 0xd1, 0x2d, 0x34, 0x01, 0xd2, 0x2e, 0x34, + 0x41, 0xd0, 0x22, 0x34, 0x01, 0xd1, 0x23, 0x34, 0x01, 0xd2, 0x24, 0x34, + 0x01, 0xd3, 0x25, 0x34, 0x01, 0xd4, 0x26, 0x34, 0x01, 0xd5, 0x27, 0x34, + 0x01, 0xd6, 0x28, 0x34, 0x01, 0xd7, 0x29, 0x34, 0x01, 0xd8, 0x2a, 0x34, + 0x01, 0xd9, 0x2b, 0x34, 0x41, 0xd0, 0x18, 0x34, 0x01, 0xd1, 0x19, 0x34, + 0x01, 0xd2, 0x1a, 0x34, 0x01, 0xd3, 0x1b, 0x34, 0x01, 0xd4, 0x1c, 0x34, + 0x01, 0xd5, 0x1d, 0x34, 0x01, 0xd6, 0x1e, 0x34, 0x01, 0xd7, 0x1f, 0x34, + 0x01, 0xd8, 0x20, 0x34, 0x01, 0xd9, 0x21, 0x34, 0x41, 0xd1, 0x0d, 0x34, + 0x01, 0xd2, 0x0e, 0x34, 0x01, 0xd3, 0x0f, 0x34, 0x01, 0xd4, 0x10, 0x34, + 0x01, 0xd5, 0x11, 0x34, 0x01, 0xd6, 0x12, 0x34, 0x01, 0xd7, 0x13, 0x34, + 0x81, 0x08, 0xd8, 0x16, 0x34, 0x01, 0xd9, 0x17, 0x34, 0x41, 0xe1, 0x14, + 0x34, 0x01, 0xe2, 0x15, 0x34, 0x41, 0x90, 0xa8, 0x02, 0x91, 0xf3, 0x01, + 0x92, 0xc8, 0x01, 0x93, 0x98, 0x01, 0x94, 0x5a, 0x95, 0x30, 0x96, 0x06, + 0x42, 0xff, 0xe8, 0x4f, 0x30, 0x41, 0xd0, 0x45, 0x30, 0x01, 0xd1, 0x46, + 0x30, 0x01, 0xd2, 0x47, 0x30, 0x01, 0xd3, 0x48, 0x30, 0x01, 0xd4, 0x49, + 0x30, 0x01, 0xd5, 0x4a, 0x30, 0x01, 0xd6, 0x4b, 0x30, 0x01, 0xd7, 0x4c, + 0x30, 0x01, 0xd8, 0x4d, 0x30, 0x01, 0xd9, 0x4e, 0x30, 0x41, 0xd0, 0x3b, + 0x30, 0x01, 0xd1, 0x3c, 0x30, 0x01, 0xd2, 0x3d, 0x30, 0x01, 0xd3, 0x3e, + 0x30, 0x01, 0xd4, 0x3f, 0x30, 0x01, 0xd5, 0x40, 0x30, 0x01, 0xd6, 0x41, + 0x30, 0x01, 0xd7, 0x42, 0x30, 0x01, 0xd8, 0x43, 0x30, 0x01, 0xd9, 0x44, + 0x30, 0x41, 0xd0, 0x2d, 0x30, 0x81, 0x33, 0xd1, 0x2f, 0x30, 0x01, 0xd2, + 0x30, 0x30, 0x81, 0x26, 0xd3, 0x32, 0x30, 0x81, 0x1d, 0xd4, 0x34, 0x30, + 0x01, 0xd5, 0x35, 0x30, 0x81, 0x10, 0xd6, 0x37, 0x30, 0x01, 0xd7, 0x38, + 0x30, 0x01, 0xd8, 0x39, 0x30, 0x01, 0xd9, 0x3a, 0x30, 0x41, 0xe1, 0x36, + 0x30, 0x41, 0xe1, 0x33, 0x30, 0x41, 0xe1, 0x31, 0x30, 0x41, 0xe1, 0x2e, + 0x30, 0x41, 0xd0, 0x22, 0x30, 0x01, 0xd1, 0x23, 0x30, 0x01, 0xd2, 0x24, + 0x30, 0x81, 0x1c, 0xd3, 0x26, 0x30, 0x01, 0xd4, 0x27, 0x30, 0x01, 0xd5, + 0x28, 0x30, 0x01, 0xd6, 0x29, 0x30, 0x01, 0xd7, 0x2a, 0x30, 0x01, 0xd8, + 0x2b, 0x30, 0x01, 0xd9, 0x2c, 0x30, 0x41, 0xe1, 0x25, 0x30, 0x41, 0xd0, + 0x18, 0x30, 0x01, 0xd1, 0x19, 0x30, 0x01, 0xd2, 0x1a, 0x30, 0x01, 0xd3, + 0x1b, 0x30, 0x01, 0xd4, 0x1c, 0x30, 0x01, 0xd5, 0x1d, 0x30, 0x01, 0xd6, + 0x1e, 0x30, 0x01, 0xd7, 0x1f, 0x30, 0x01, 0xd8, 0x20, 0x30, 0x01, 0xd9, + 0x21, 0x30, 0x41, 0xd0, 0x0c, 0x30, 0x01, 0xd1, 0x0d, 0x30, 0x01, 0xd2, + 0x0e, 0x30, 0x01, 0xd3, 0x0f, 0x30, 0x01, 0xd4, 0x10, 0x30, 0x81, 0x19, + 0xd5, 0x12, 0x30, 0x01, 0xd6, 0x13, 0x30, 0x01, 0xd7, 0x14, 0x30, 0x81, + 0x08, 0xd8, 0x16, 0x30, 0x01, 0xd9, 0x17, 0x30, 0x41, 0xe1, 0x15, 0x30, + 0x41, 0xe1, 0x11, 0x30, 0x41, 0xd1, 0x00, 0x30, 0x01, 0xd2, 0x01, 0x30, + 0x01, 0xd3, 0x02, 0x30, 0x01, 0xd4, 0x03, 0x30, 0x01, 0xd5, 0x04, 0x30, + 0x81, 0x19, 0xd6, 0x06, 0x30, 0x81, 0x0c, 0xd7, 0x09, 0x30, 0x01, 0xd8, + 0x0a, 0x30, 0x01, 0xd9, 0x0b, 0x30, 0x41, 0xe1, 0x07, 0x30, 0x01, 0xe2, + 0x08, 0x30, 0x41, 0xe1, 0x05, 0x30, 0x41, 0x43, 0x06, 0x02, 0x85, 0xf9, + 0x01, 0xf2, 0x42, 0xf4, 0x81, 0x06, 0x4f, 0xa5, 0x6c, 0x71, 0x26, 0x40, + 0x80, 0x2a, 0x42, 0x53, 0x00, 0x41, 0x26, 0xc0, 0x00, 0x02, 0x86, 0x00, + 0x01, 0xff, 0x05, 0x85, 0xdd, 0x06, 0x45, 0xbc, 0x14, 0xda, 0x23, 0x40, + 0xa1, 0x06, 0x4d, 0xb2, 0x7b, 0x0d, 0xf3, 0x41, 0x47, 0x24, 0xc9, 0x0e, + 0xf3, 0x01, 0x4d, 0x2e, 0x81, 0x0f, 0xf3, 0x41, 0x03, 0xf4, 0x01, 0x06, + 0x50, 0x7e, 0x62, 0xbb, 0xf9, 0x41, 0x45, 0xc1, 0xdd, 0x3d, 0xf3, 0x01, + 0x44, 0xf2, 0xaa, 0x3e, 0xf3, 0x41, 0xa1, 0xd0, 0x30, 0xa5, 0x9a, 0x23, + 0xa9, 0xad, 0x19, 0x4f, 0xb7, 0x69, 0xec, 0xf9, 0x01, 0xaf, 0xb0, 0x07, + 0xb2, 0xe3, 0x06, 0xb5, 0x06, 0x42, 0x08, 0xea, 0xc0, 0xf4, 0x41, 0x42, + 0x36, 0x01, 0x86, 0xf9, 0x01, 0x46, 0xa7, 0xd3, 0x5f, 0xf9, 0x01, 0x07, + 0x89, 0xca, 0x01, 0xff, 0x06, 0x5d, 0xcf, 0xe3, 0x04, 0x4b, 0x33, 0x93, + 0x9e, 0xbc, 0x01, 0x07, 0xf1, 0x04, 0x12, 0x5d, 0x8c, 0x14, 0x9f, 0xbc, + 0x01, 0x51, 0x10, 0x58, 0x9c, 0xbc, 0x01, 0x55, 0xf9, 0x39, 0x9d, 0xbc, + 0x41, 0xe1, 0x41, 0xbc, 0x81, 0xbb, 0x04, 0xe2, 0x07, 0xbc, 0x01, 0xe4, + 0x08, 0xbc, 0x81, 0xa7, 0x04, 0xe5, 0x47, 0xbc, 0x81, 0x99, 0x04, 0xe6, + 0x04, 0xbc, 0x81, 0x8d, 0x04, 0xe7, 0x0a, 0xbc, 0x81, 0x81, 0x04, 0xe8, + 0x00, 0xbc, 0x81, 0xf7, 0x03, 0xe9, 0x46, 0xbc, 0x81, 0xed, 0x03, 0xea, + 0x1b, 0xbc, 0x81, 0xb6, 0x03, 0xeb, 0x05, 0xbc, 0x81, 0xa0, 0x03, 0xec, + 0x06, 0xbc, 0x81, 0x89, 0x03, 0xed, 0x19, 0xbc, 0x81, 0xeb, 0x02, 0xee, + 0x1a, 0xbc, 0x81, 0xb9, 0x02, 0xef, 0x44, 0xbc, 0x81, 0xa1, 0x02, 0xf0, + 0x02, 0xbc, 0x81, 0x88, 0x02, 0xf2, 0x0b, 0xbc, 0x81, 0xeb, 0x01, 0xf3, + 0x1c, 0xbc, 0x81, 0x68, 0xf4, 0x03, 0xbc, 0x81, 0x53, 0xf5, 0x51, 0xbc, + 0x81, 0x40, 0xf6, 0x09, 0xbc, 0x81, 0x35, 0xf7, 0x38, 0xbc, 0x81, 0x0f, + 0xf8, 0x01, 0xbc, 0x81, 0x06, 0x42, 0x4d, 0x00, 0x50, 0xbc, 0x41, 0xf7, + 0x53, 0xbc, 0x41, 0x42, 0xc7, 0x00, 0x3a, 0xbc, 0x01, 0xe1, 0x5c, 0xbc, + 0x01, 0x42, 0xd1, 0x09, 0x5f, 0xbc, 0x01, 0xe8, 0x39, 0xbc, 0x01, 0xe9, + 0x5e, 0xbc, 0x01, 0xef, 0x5d, 0xbc, 0xc1, 0x00, 0xf7, 0x60, 0xbc, 0x41, + 0x48, 0x41, 0xbf, 0x6a, 0xbc, 0x41, 0x42, 0xb3, 0x01, 0x54, 0xbc, 0x01, + 0xe8, 0x57, 0xbc, 0x01, 0xe9, 0x4a, 0xbc, 0x41, 0x80, 0x04, 0xe8, 0x11, + 0xbc, 0x41, 0x43, 0x25, 0x0b, 0x37, 0xbc, 0x01, 0xf3, 0x36, 0xbc, 0x41, + 0x80, 0x37, 0x46, 0x4b, 0xd2, 0x49, 0xbc, 0x01, 0x05, 0x80, 0xdd, 0x01, + 0xff, 0x42, 0x1a, 0x00, 0x68, 0xbc, 0x01, 0x42, 0x79, 0x46, 0x12, 0xbc, + 0x01, 0xa5, 0x12, 0xea, 0x15, 0xbc, 0x01, 0xaf, 0x04, 0xf5, 0x58, 0xbc, + 0x41, 0xee, 0x69, 0xbc, 0x01, 0xf7, 0x42, 0xbc, 0x41, 0xe5, 0x4e, 0xbc, + 0x01, 0xe8, 0x4c, 0xbc, 0x01, 0xee, 0x67, 0xbc, 0x41, 0xea, 0x20, 0xbc, + 0x81, 0x3a, 0xeb, 0x3f, 0xbc, 0x81, 0x2f, 0xed, 0x3c, 0xbc, 0x01, 0xee, + 0x3b, 0xbc, 0x01, 0xf0, 0x34, 0xbc, 0x81, 0x1c, 0xf3, 0x2a, 0xbc, 0x01, + 0xf4, 0x32, 0xbc, 0x81, 0x0d, 0x48, 0x4b, 0x37, 0x25, 0xbc, 0xc1, 0x00, + 0x46, 0x24, 0x06, 0x26, 0xbc, 0x41, 0x42, 0xc7, 0x00, 0x33, 0xbc, 0x41, + 0x42, 0xc7, 0x00, 0x35, 0xbc, 0x41, 0x42, 0xc7, 0x00, 0x40, 0xbc, 0x41, + 0x42, 0x99, 0x00, 0x2e, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x10, 0xbc, 0x01, + 0xe8, 0x18, 0xbc, 0x01, 0x08, 0x79, 0xbf, 0x01, 0xff, 0xe9, 0x4d, 0xbc, + 0x01, 0xf5, 0x56, 0xbc, 0x41, 0x42, 0xb3, 0x01, 0x0c, 0xbc, 0x01, 0x07, + 0xd8, 0xc6, 0x01, 0xff, 0xed, 0x66, 0xbc, 0x01, 0xee, 0x65, 0xbc, 0x41, + 0xe1, 0x43, 0xbc, 0x01, 0x42, 0xfe, 0x25, 0x59, 0xbc, 0x01, 0xf5, 0x5b, + 0xbc, 0x01, 0xf7, 0x5a, 0xbc, 0x41, 0x80, 0x15, 0x05, 0xc6, 0x46, 0x01, + 0xff, 0xe1, 0x64, 0xbc, 0x01, 0xe9, 0x63, 0xbc, 0x01, 0xef, 0x62, 0xbc, + 0x01, 0xf5, 0x61, 0xbc, 0x41, 0xed, 0x1e, 0xbc, 0x81, 0x0a, 0xf3, 0x28, + 0xbc, 0x01, 0x48, 0x4b, 0x37, 0x22, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x2c, + 0xbc, 0x41, 0x80, 0x01, 0xff, 0xee, 0x1d, 0xbc, 0x81, 0x0a, 0xf3, 0x27, + 0xbc, 0x01, 0x48, 0x4b, 0x37, 0x21, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x2b, + 0xbc, 0x41, 0xe8, 0x17, 0xbc, 0x01, 0x04, 0x0a, 0x0d, 0x01, 0xff, 0xe9, + 0x4f, 0xbc, 0x01, 0xf5, 0x55, 0xbc, 0x41, 0x80, 0x04, 0xeb, 0x14, 0xbc, + 0x41, 0xed, 0x0f, 0xbc, 0x01, 0x43, 0x25, 0x0b, 0x3d, 0xbc, 0x41, 0x80, + 0x01, 0xff, 0xed, 0x1f, 0xbc, 0x81, 0x23, 0xee, 0x30, 0xbc, 0x81, 0x18, + 0xf3, 0x29, 0xbc, 0x81, 0x0d, 0x48, 0x4b, 0x37, 0x23, 0xbc, 0xc1, 0x00, + 0x52, 0x52, 0x4f, 0x24, 0xbc, 0x41, 0x49, 0x4a, 0x37, 0x2f, 0xbc, 0x41, + 0x42, 0x99, 0x00, 0x31, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x2d, 0xbc, 0x41, + 0xe5, 0x48, 0xbc, 0x41, 0xec, 0x16, 0xbc, 0x41, 0x44, 0xe2, 0xe1, 0x3e, + 0xbc, 0x41, 0x42, 0xb3, 0x01, 0x0e, 0xbc, 0x41, 0xe5, 0x4b, 0xbc, 0x01, + 0xf5, 0x52, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x0d, 0xbc, 0x01, 0xe8, 0x13, + 0xbc, 0x41, 0x42, 0x3c, 0x01, 0x45, 0xbc, 0x41, 0x09, 0x72, 0xad, 0xad, + 0x01, 0x05, 0x2a, 0x0a, 0x6a, 0xac, 0x16, 0x04, 0x2f, 0xac, 0x06, 0x57, + 0xf4, 0x2c, 0x72, 0xbc, 0x41, 0x51, 0xfa, 0x2c, 0x71, 0xbc, 0x01, 0x4f, + 0xc2, 0x6d, 0x74, 0xbc, 0x41, 0x55, 0x5d, 0x36, 0x70, 0xbc, 0x01, 0x03, + 0xd1, 0x00, 0x01, 0xff, 0xa1, 0x39, 0x46, 0x00, 0x04, 0x95, 0xbc, 0x01, + 0x43, 0xc5, 0x06, 0x94, 0xbc, 0x01, 0x45, 0x79, 0x20, 0x92, 0xbc, 0x01, + 0xac, 0x19, 0x4b, 0x52, 0x9b, 0x91, 0xbc, 0x01, 0x48, 0x32, 0x00, 0x98, + 0xbc, 0x81, 0x06, 0x44, 0xef, 0x51, 0x97, 0xbc, 0x41, 0x47, 0x04, 0x2d, + 0x73, 0xbc, 0x41, 0x43, 0xf1, 0x07, 0x96, 0xbc, 0x01, 0x49, 0xf3, 0xb3, + 0x93, 0xbc, 0x41, 0x44, 0xcf, 0x34, 0x90, 0xbc, 0x01, 0x44, 0xcf, 0x00, + 0x99, 0xbc, 0x41, 0x45, 0xce, 0x34, 0x80, 0xbc, 0x01, 0x46, 0x00, 0x04, + 0x85, 0xbc, 0x01, 0x43, 0xc5, 0x06, 0x84, 0xbc, 0x01, 0x45, 0x79, 0x20, + 0x82, 0xbc, 0x01, 0xac, 0x19, 0x4b, 0x52, 0x9b, 0x81, 0xbc, 0x01, 0x48, + 0x32, 0x00, 0x88, 0xbc, 0x81, 0x06, 0x44, 0xef, 0x51, 0x87, 0xbc, 0x41, + 0x47, 0x04, 0x2d, 0x75, 0xbc, 0x41, 0x43, 0xf1, 0x07, 0x86, 0xbc, 0x01, + 0x49, 0xf3, 0xb3, 0x83, 0xbc, 0x41, 0x46, 0x84, 0x97, 0x7a, 0xbc, 0x01, + 0x46, 0x5d, 0xd2, 0x7b, 0xbc, 0x01, 0x54, 0x69, 0x3f, 0x77, 0xbc, 0x01, + 0x46, 0x05, 0x2d, 0x76, 0xbc, 0x01, 0x02, 0x12, 0x00, 0x01, 0xff, 0x42, + 0x62, 0x01, 0x79, 0xbc, 0x01, 0x45, 0x57, 0xde, 0x78, 0xbc, 0xc1, 0x00, + 0x45, 0x03, 0x0d, 0x7c, 0xbc, 0x41, 0xa1, 0x2f, 0x43, 0xed, 0x00, 0x57, + 0xf4, 0x01, 0x4d, 0x93, 0x7d, 0xda, 0x26, 0x00, 0xaf, 0x06, 0x52, 0x72, + 0x50, 0x41, 0xf9, 0x41, 0x4c, 0x4f, 0x8a, 0x2a, 0xf4, 0x01, 0x4a, 0x0a, + 0xa6, 0x24, 0xf9, 0x01, 0xb0, 0x01, 0xff, 0x49, 0x71, 0xab, 0x78, 0xfa, + 0x01, 0x43, 0xf1, 0x04, 0xa7, 0xf4, 0x41, 0x49, 0x70, 0x99, 0xaf, 0x20, + 0x00, 0x5c, 0xe1, 0x15, 0x9b, 0x27, 0x00, 0x43, 0x60, 0x12, 0x09, 0xf4, + 0xc1, 0x00, 0x45, 0xec, 0x06, 0x32, 0xf4, 0x41, 0x52, 0xd6, 0x49, 0xaf, + 0xf6, 0x01, 0x46, 0xa3, 0xbb, 0xce, 0xf5, 0x81, 0xce, 0x11, 0x42, 0x3b, + 0x01, 0xa4, 0xf9, 0x01, 0x07, 0x37, 0x70, 0xf5, 0x10, 0xe7, 0x15, 0xf4, + 0x81, 0x81, 0x0e, 0xac, 0xf2, 0x0d, 0x0a, 0x42, 0xa5, 0x85, 0x0a, 0xae, + 0xf6, 0x09, 0x42, 0x0c, 0x00, 0xaa, 0xf6, 0x01, 0xb4, 0x94, 0x09, 0xb5, + 0xb9, 0x04, 0x4b, 0x70, 0x9c, 0x4a, 0xf5, 0x01, 0x02, 0xa7, 0x01, 0x01, + 0xff, 0x80, 0x8c, 0x04, 0x0a, 0x4b, 0x0a, 0xea, 0x03, 0x04, 0xa9, 0x01, + 0x01, 0xff, 0x08, 0x79, 0xb8, 0xc6, 0x03, 0x02, 0x31, 0x01, 0x01, 0xff, + 0xa1, 0xc6, 0x02, 0x06, 0x1c, 0x07, 0xb5, 0x02, 0x50, 0x6e, 0x5b, 0x3f, + 0xf8, 0x01, 0xa4, 0xa0, 0x02, 0x51, 0x69, 0x54, 0x37, 0xf8, 0x01, 0xa8, + 0xc1, 0x01, 0x4d, 0x10, 0x80, 0xca, 0x21, 0x00, 0x4f, 0x5b, 0x6b, 0xf1, + 0x27, 0x00, 0x46, 0x27, 0xd5, 0x6f, 0xf6, 0x01, 0xb3, 0xa0, 0x01, 0xb4, + 0x13, 0x4b, 0xa1, 0x0e, 0xe9, 0x21, 0x80, 0x06, 0x4c, 0xf8, 0x2f, 0xaf, + 0x21, 0x40, 0x5a, 0x78, 0x1c, 0x97, 0xf8, 0x41, 0x02, 0x0d, 0x00, 0x11, + 0x02, 0x15, 0x02, 0x01, 0xff, 0x4d, 0x99, 0x78, 0xa1, 0x21, 0x00, 0x66, + 0x20, 0x05, 0xef, 0x2b, 0x40, 0x05, 0x04, 0x02, 0x06, 0x49, 0x61, 0x6b, + 0x0b, 0x29, 0x40, 0x4a, 0xe0, 0x01, 0x93, 0xf8, 0x01, 0x08, 0x09, 0x02, + 0x01, 0xff, 0x45, 0xce, 0x00, 0x63, 0x2b, 0x80, 0x12, 0x4c, 0x47, 0x86, + 0x6d, 0x2b, 0x00, 0x4d, 0x10, 0x80, 0x87, 0x2b, 0x00, 0x4c, 0xf8, 0x2f, + 0x4d, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x6a, 0xed, 0x02, 0x83, 0x2b, 0x00, + 0x46, 0x0d, 0x13, 0x73, 0x2b, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, + 0xde, 0x9f, 0x2b, 0xf8, 0x01, 0x58, 0x3f, 0x25, 0x7d, 0x2b, 0x00, 0x4b, + 0x23, 0x62, 0x2f, 0xf8, 0x01, 0x09, 0x70, 0xb2, 0x12, 0x4c, 0x5b, 0x8a, + 0x27, 0xf8, 0x01, 0x4c, 0xc7, 0x8a, 0x23, 0xf8, 0x01, 0x50, 0x1e, 0x62, + 0x33, 0xf8, 0x41, 0x49, 0xea, 0x01, 0xa0, 0x2b, 0x00, 0x4a, 0xb3, 0x02, + 0xa1, 0x2b, 0x40, 0x4f, 0x9f, 0x60, 0x53, 0xf8, 0x01, 0x4c, 0x47, 0x8c, + 0x3b, 0xf8, 0x41, 0x11, 0x96, 0x04, 0x11, 0x05, 0x8d, 0x13, 0x01, 0xff, + 0x45, 0xce, 0x00, 0x47, 0xf8, 0x01, 0x50, 0x6e, 0x5b, 0x43, 0xf8, 0x41, + 0x04, 0xc3, 0x00, 0x19, 0x05, 0xc8, 0x00, 0x01, 0xff, 0x80, 0x06, 0x45, + 0xa9, 0x01, 0xc2, 0x21, 0x40, 0x48, 0x60, 0xab, 0x5d, 0x29, 0x00, 0x46, + 0x0d, 0x13, 0x55, 0x29, 0x40, 0x80, 0x06, 0x45, 0xa9, 0x01, 0xc3, 0x21, + 0x40, 0x07, 0x51, 0x09, 0x0c, 0x48, 0x60, 0xab, 0x61, 0x29, 0x00, 0x46, + 0x0d, 0x13, 0x59, 0x29, 0x40, 0x61, 0x21, 0x0c, 0x65, 0x29, 0x00, 0x5f, + 0x80, 0x10, 0x6f, 0x29, 0x40, 0x4b, 0x48, 0x86, 0xe3, 0x21, 0x00, 0x4b, + 0xa8, 0x86, 0xd3, 0x21, 0x40, 0x45, 0xce, 0x00, 0x07, 0x2b, 0x00, 0x53, + 0x65, 0x43, 0x8b, 0x2b, 0x40, 0x45, 0x43, 0xde, 0x14, 0x2e, 0x00, 0x44, + 0xcf, 0x00, 0x93, 0x21, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x5a, 0xc6, 0x1c, + 0xb7, 0xfb, 0x01, 0x48, 0x60, 0xab, 0xa7, 0x21, 0x00, 0x5a, 0x4c, 0x1e, + 0xf5, 0x21, 0x00, 0x46, 0x0d, 0x13, 0x13, 0x29, 0x00, 0x05, 0x51, 0x00, + 0x01, 0xff, 0x50, 0x9e, 0x5b, 0xb5, 0x21, 0x00, 0x4d, 0x30, 0x7b, 0xdf, + 0x21, 0x00, 0x55, 0xd5, 0x01, 0x17, 0xf8, 0x01, 0x51, 0x4c, 0x04, 0x08, + 0x29, 0x00, 0x58, 0x77, 0x26, 0x0b, 0xf8, 0x01, 0x59, 0x47, 0x22, 0x07, + 0xf8, 0x01, 0x4c, 0x3f, 0x8b, 0x9b, 0xf8, 0x01, 0x06, 0x3c, 0x06, 0x11, + 0x04, 0xc3, 0x0a, 0x01, 0xff, 0x49, 0xea, 0x01, 0xb2, 0x21, 0x00, 0x4a, + 0xb3, 0x02, 0xb3, 0x21, 0x40, 0x55, 0xd5, 0x01, 0x13, 0xf8, 0x01, 0x52, + 0x33, 0x05, 0x03, 0xf8, 0x41, 0x44, 0x04, 0x0d, 0x08, 0xf9, 0x81, 0x0d, + 0x4c, 0x33, 0x8b, 0x09, 0xf9, 0xc1, 0x00, 0x49, 0x4a, 0x37, 0x0b, 0xf9, + 0x41, 0x49, 0x4a, 0x37, 0x0a, 0xf9, 0x41, 0x4c, 0xd6, 0x4f, 0x3b, 0xf5, + 0x01, 0x52, 0xd0, 0x4f, 0x3d, 0xf5, 0x01, 0x0e, 0x9b, 0x76, 0x01, 0xff, + 0x4f, 0xb8, 0x68, 0xe8, 0x29, 0x00, 0x50, 0x6e, 0x60, 0xe9, 0x29, 0x40, + 0x49, 0xe1, 0x01, 0x04, 0x23, 0x00, 0x49, 0xd6, 0xaf, 0x7f, 0x29, 0x00, + 0x57, 0xdd, 0x2c, 0xf1, 0x22, 0x00, 0x44, 0xca, 0x34, 0xa4, 0x22, 0xc0, + 0x00, 0x52, 0x30, 0x4a, 0xf1, 0x2a, 0x40, 0x03, 0x3e, 0x01, 0x06, 0x45, + 0x04, 0xdc, 0x69, 0xf3, 0x41, 0x80, 0xba, 0x01, 0x8d, 0x17, 0x02, 0x06, + 0x00, 0x01, 0xff, 0x4b, 0x2c, 0x24, 0xa2, 0x26, 0x00, 0x49, 0xf9, 0x1e, + 0xa3, 0x26, 0x00, 0x46, 0xf7, 0x06, 0xfc, 0x2b, 0x40, 0x4e, 0x89, 0x70, + 0xdf, 0x29, 0x00, 0x05, 0xf0, 0x07, 0x66, 0x07, 0x4a, 0x70, 0x01, 0xff, + 0x08, 0xe9, 0x04, 0x36, 0x07, 0xf7, 0xc7, 0x17, 0x4f, 0xa8, 0x69, 0x40, + 0x21, 0x00, 0x06, 0x3c, 0x06, 0x01, 0xff, 0x45, 0x99, 0x52, 0x3d, 0x21, + 0x00, 0x42, 0xeb, 0x04, 0x3c, 0x21, 0x40, 0x49, 0x02, 0xae, 0x45, 0x21, + 0x00, 0x06, 0x3c, 0x06, 0x01, 0xff, 0xe4, 0x46, 0x21, 0x00, 0xe5, 0x47, + 0x21, 0x00, 0xe9, 0x48, 0x21, 0x00, 0xea, 0x49, 0x21, 0x40, 0xe3, 0x02, + 0x21, 0x00, 0x45, 0x99, 0x52, 0x3e, 0x21, 0x00, 0xe8, 0x0d, 0x21, 0x00, + 0xee, 0x15, 0x21, 0x00, 0xf0, 0x19, 0x21, 0x80, 0x0c, 0xf1, 0x1a, 0x21, + 0x00, 0xf2, 0x1d, 0x21, 0x00, 0xfa, 0x24, 0x21, 0x40, 0xe9, 0x3f, 0x21, + 0x40, 0x0c, 0x87, 0x25, 0x21, 0x08, 0x9a, 0x00, 0x01, 0xff, 0x0c, 0x87, + 0x25, 0x0c, 0x58, 0xe7, 0x25, 0xfa, 0x2a, 0x00, 0x55, 0x40, 0x38, 0xf9, + 0x2a, 0x40, 0x4c, 0x87, 0x00, 0x9c, 0x2a, 0x00, 0x49, 0xec, 0x00, 0x9b, + 0x2a, 0x40, 0x4c, 0x87, 0x00, 0x9a, 0x2a, 0x00, 0x49, 0xec, 0x00, 0x99, + 0x2a, 0x40, 0x4c, 0x7f, 0x84, 0xdd, 0x02, 0x00, 0xa3, 0xb1, 0x02, 0xa4, + 0xa2, 0x02, 0x50, 0xad, 0x00, 0x3c, 0x20, 0x00, 0xa8, 0x8d, 0x02, 0x04, + 0x16, 0x07, 0xfc, 0x01, 0xac, 0xc8, 0x01, 0x07, 0x5c, 0xc9, 0xb0, 0x01, + 0x4e, 0x7d, 0x73, 0x17, 0x2e, 0x00, 0xb0, 0x8b, 0x01, 0x4d, 0xbd, 0x30, + 0x47, 0x20, 0x00, 0x5b, 0x1d, 0x1b, 0x96, 0x29, 0x00, 0xb3, 0x3e, 0xb5, + 0x30, 0x09, 0x32, 0x00, 0x06, 0x4d, 0x02, 0x83, 0x4c, 0xfe, 0x40, 0x43, + 0x16, 0x00, 0xf8, 0x23, 0x80, 0x06, 0x44, 0xf0, 0x07, 0x16, 0x20, 0x40, + 0x80, 0x01, 0xff, 0x07, 0x3b, 0x01, 0x06, 0x4e, 0x10, 0x36, 0xe3, 0x2a, + 0x40, 0x4e, 0x10, 0x36, 0xe5, 0x2a, 0x00, 0x4f, 0x56, 0x01, 0xab, 0x22, + 0x40, 0x44, 0x6d, 0x15, 0xd3, 0x22, 0x00, 0x46, 0xc8, 0xcc, 0xeb, 0x2a, + 0x40, 0x4f, 0x6b, 0x6a, 0xfd, 0x2a, 0x00, 0x06, 0x20, 0x22, 0x29, 0xb4, + 0x1b, 0xb5, 0x01, 0xff, 0x44, 0xf5, 0x10, 0xd0, 0x22, 0x00, 0x46, 0x4b, + 0xc1, 0xbc, 0x2a, 0x00, 0x46, 0x14, 0x32, 0xd1, 0x22, 0x00, 0x4d, 0x52, + 0x77, 0x44, 0x2e, 0x40, 0x4b, 0xcb, 0x90, 0x49, 0x2e, 0x00, 0x4d, 0xc5, + 0x6c, 0xec, 0x2a, 0x40, 0x4c, 0x68, 0x09, 0x4e, 0x2a, 0x00, 0x45, 0x6c, + 0x15, 0x4f, 0x2a, 0x40, 0x43, 0x72, 0x25, 0xfa, 0x29, 0x00, 0xb2, 0x01, + 0xff, 0x46, 0x23, 0xc0, 0xbb, 0x2a, 0x00, 0x43, 0x29, 0x02, 0x33, 0x20, + 0xc0, 0x00, 0x4f, 0x1d, 0x04, 0x1e, 0x30, 0x40, 0x4c, 0x87, 0x00, 0xa2, + 0x2a, 0x00, 0x49, 0xec, 0x00, 0xa1, 0x2a, 0xc0, 0x00, 0x4e, 0x56, 0x59, + 0xa3, 0x2a, 0x40, 0x5c, 0xc5, 0x15, 0x95, 0x29, 0x00, 0xaf, 0x01, 0xff, + 0x06, 0xab, 0x1f, 0x18, 0xb7, 0x01, 0xff, 0x45, 0xd5, 0x2d, 0x17, 0x20, + 0x00, 0x8d, 0x01, 0xff, 0x50, 0xbb, 0x11, 0x1e, 0x20, 0x00, 0x59, 0xb2, + 0x11, 0x42, 0x2e, 0x40, 0x43, 0x1a, 0x00, 0x53, 0x2a, 0x00, 0x42, 0x0c, + 0x00, 0x54, 0x2a, 0x40, 0x44, 0xb1, 0x23, 0x2c, 0x22, 0x00, 0x48, 0x6c, + 0x09, 0xd2, 0x22, 0x40, 0x5d, 0xae, 0x11, 0x1f, 0x20, 0x00, 0x45, 0x6f, + 0x5d, 0x40, 0x2e, 0x40, 0x45, 0xa2, 0xd0, 0x21, 0x20, 0x00, 0x48, 0xc6, + 0x34, 0xea, 0x2a, 0x40, 0x07, 0x5a, 0x20, 0x0c, 0x4a, 0x14, 0xa6, 0x74, + 0x2a, 0x00, 0x49, 0x02, 0xb7, 0xbf, 0x27, 0x40, 0x06, 0xf4, 0x05, 0x06, + 0x4a, 0xec, 0xa5, 0xfe, 0x24, 0x40, 0x45, 0xd1, 0x09, 0xfc, 0x24, 0x00, + 0xa6, 0x29, 0x44, 0xb8, 0x27, 0xfd, 0x24, 0x00, 0x43, 0xcd, 0x09, 0xf5, + 0x24, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xf7, 0x24, + 0x00, 0x42, 0x15, 0x02, 0xf6, 0x24, 0x40, 0x44, 0x96, 0x1b, 0xfb, 0x24, + 0x00, 0x42, 0x30, 0x27, 0xfa, 0x24, 0x40, 0x43, 0xd7, 0x04, 0xf9, 0x24, + 0x00, 0x43, 0xfb, 0x05, 0xf8, 0x24, 0x40, 0x80, 0x3f, 0x04, 0x77, 0x00, + 0x01, 0xff, 0xa3, 0x2c, 0x45, 0x1e, 0x8f, 0x99, 0x29, 0x00, 0x49, 0x31, + 0xb2, 0xe5, 0xfa, 0x01, 0x46, 0x31, 0xd4, 0x13, 0x2e, 0x00, 0x54, 0x46, + 0x0a, 0x16, 0x2e, 0x00, 0xb3, 0x06, 0x54, 0x0d, 0x41, 0x08, 0x2e, 0x40, + 0x46, 0x68, 0x2d, 0x4a, 0x2e, 0x00, 0x45, 0xdc, 0x04, 0x1a, 0x2b, 0x40, + 0x45, 0x01, 0x04, 0xcc, 0x25, 0x00, 0x44, 0x0e, 0x0f, 0x5c, 0x20, 0x40, + 0x45, 0x5c, 0x00, 0xd9, 0x02, 0x00, 0x45, 0x29, 0x1d, 0x38, 0x22, 0x00, + 0x48, 0x4b, 0x1b, 0xc5, 0x22, 0x00, 0x44, 0x71, 0x25, 0x14, 0x22, 0x40, + 0x46, 0x4b, 0xb3, 0xab, 0x20, 0x00, 0x43, 0x6d, 0x21, 0xcf, 0xfa, 0x41, + 0x0a, 0x0b, 0x00, 0xf4, 0x01, 0x08, 0x32, 0x00, 0x01, 0xff, 0x45, 0x9b, + 0x0c, 0x62, 0xf0, 0x01, 0x02, 0x78, 0x3b, 0x01, 0xff, 0x03, 0x5c, 0xe8, + 0xc3, 0x01, 0x03, 0x68, 0xe8, 0xa2, 0x01, 0x03, 0x7a, 0xe8, 0x81, 0x01, + 0x03, 0x8c, 0xe8, 0x61, 0x03, 0x98, 0xe8, 0x41, 0x03, 0x9e, 0xe8, 0x21, + 0x03, 0xaa, 0xe8, 0x01, 0xff, 0xd0, 0x8d, 0xf0, 0x01, 0xd1, 0x8e, 0xf0, + 0x01, 0xd2, 0x8f, 0xf0, 0x01, 0xd3, 0x90, 0xf0, 0x01, 0xd4, 0x91, 0xf0, + 0x01, 0xd5, 0x92, 0xf0, 0x01, 0xd6, 0x93, 0xf0, 0x41, 0xd0, 0x86, 0xf0, + 0x01, 0xd1, 0x87, 0xf0, 0x01, 0xd2, 0x88, 0xf0, 0x01, 0xd3, 0x89, 0xf0, + 0x01, 0xd4, 0x8a, 0xf0, 0x01, 0xd5, 0x8b, 0xf0, 0x01, 0xd6, 0x8c, 0xf0, + 0x41, 0xd0, 0x7f, 0xf0, 0x01, 0xd1, 0x80, 0xf0, 0x01, 0xd2, 0x81, 0xf0, + 0x01, 0xd3, 0x82, 0xf0, 0x01, 0xd4, 0x83, 0xf0, 0x01, 0xd5, 0x84, 0xf0, + 0x01, 0xd6, 0x85, 0xf0, 0x41, 0xd0, 0x78, 0xf0, 0x01, 0xd1, 0x79, 0xf0, + 0x01, 0xd2, 0x7a, 0xf0, 0x01, 0xd3, 0x7b, 0xf0, 0x01, 0xd4, 0x7c, 0xf0, + 0x01, 0xd5, 0x7d, 0xf0, 0x01, 0xd6, 0x7e, 0xf0, 0x41, 0xd0, 0x71, 0xf0, + 0x01, 0xd1, 0x72, 0xf0, 0x01, 0xd2, 0x73, 0xf0, 0x01, 0xd3, 0x74, 0xf0, + 0x01, 0xd4, 0x75, 0xf0, 0x01, 0xd5, 0x76, 0xf0, 0x01, 0xd6, 0x77, 0xf0, + 0x41, 0xd0, 0x6a, 0xf0, 0x01, 0xd1, 0x6b, 0xf0, 0x01, 0xd2, 0x6c, 0xf0, + 0x01, 0xd3, 0x6d, 0xf0, 0x01, 0xd4, 0x6e, 0xf0, 0x01, 0xd5, 0x6f, 0xf0, + 0x01, 0xd6, 0x70, 0xf0, 0x41, 0xd0, 0x63, 0xf0, 0x01, 0xd1, 0x64, 0xf0, + 0x01, 0xd2, 0x65, 0xf0, 0x01, 0xd3, 0x66, 0xf0, 0x01, 0xd4, 0x67, 0xf0, + 0x01, 0xd5, 0x68, 0xf0, 0x01, 0xd6, 0x69, 0xf0, 0x41, 0x45, 0x9b, 0x0c, + 0x30, 0xf0, 0x01, 0x02, 0x78, 0x3b, 0x01, 0xff, 0x03, 0x5c, 0xe8, 0xc3, + 0x01, 0x03, 0x68, 0xe8, 0xa2, 0x01, 0x03, 0x7a, 0xe8, 0x81, 0x01, 0x03, + 0x8c, 0xe8, 0x61, 0x03, 0x98, 0xe8, 0x41, 0x03, 0x9e, 0xe8, 0x21, 0x03, + 0xaa, 0xe8, 0x01, 0xff, 0xd0, 0x5b, 0xf0, 0x01, 0xd1, 0x5c, 0xf0, 0x01, + 0xd2, 0x5d, 0xf0, 0x01, 0xd3, 0x5e, 0xf0, 0x01, 0xd4, 0x5f, 0xf0, 0x01, + 0xd5, 0x60, 0xf0, 0x01, 0xd6, 0x61, 0xf0, 0x41, 0xd0, 0x54, 0xf0, 0x01, + 0xd1, 0x55, 0xf0, 0x01, 0xd2, 0x56, 0xf0, 0x01, 0xd3, 0x57, 0xf0, 0x01, + 0xd4, 0x58, 0xf0, 0x01, 0xd5, 0x59, 0xf0, 0x01, 0xd6, 0x5a, 0xf0, 0x41, + 0xd0, 0x4d, 0xf0, 0x01, 0xd1, 0x4e, 0xf0, 0x01, 0xd2, 0x4f, 0xf0, 0x01, + 0xd3, 0x50, 0xf0, 0x01, 0xd4, 0x51, 0xf0, 0x01, 0xd5, 0x52, 0xf0, 0x01, + 0xd6, 0x53, 0xf0, 0x41, 0xd0, 0x46, 0xf0, 0x01, 0xd1, 0x47, 0xf0, 0x01, + 0xd2, 0x48, 0xf0, 0x01, 0xd3, 0x49, 0xf0, 0x01, 0xd4, 0x4a, 0xf0, 0x01, + 0xd5, 0x4b, 0xf0, 0x01, 0xd6, 0x4c, 0xf0, 0x41, 0xd0, 0x3f, 0xf0, 0x01, + 0xd1, 0x40, 0xf0, 0x01, 0xd2, 0x41, 0xf0, 0x01, 0xd3, 0x42, 0xf0, 0x01, + 0xd4, 0x43, 0xf0, 0x01, 0xd5, 0x44, 0xf0, 0x01, 0xd6, 0x45, 0xf0, 0x41, + 0xd0, 0x38, 0xf0, 0x01, 0xd1, 0x39, 0xf0, 0x01, 0xd2, 0x3a, 0xf0, 0x01, + 0xd3, 0x3b, 0xf0, 0x01, 0xd4, 0x3c, 0xf0, 0x01, 0xd5, 0x3d, 0xf0, 0x01, + 0xd6, 0x3e, 0xf0, 0x41, 0xd0, 0x31, 0xf0, 0x01, 0xd1, 0x32, 0xf0, 0x01, + 0xd2, 0x33, 0xf0, 0x01, 0xd3, 0x34, 0xf0, 0x01, 0xd4, 0x35, 0xf0, 0x01, + 0xd5, 0x36, 0xf0, 0x01, 0xd6, 0x37, 0xf0, 0x41, 0x48, 0x85, 0x0c, 0x24, + 0x00, 0x00, 0x44, 0x16, 0xe7, 0x2c, 0xf4, 0x41, 0x45, 0xec, 0x06, 0x36, + 0xf4, 0x01, 0x03, 0x71, 0x00, 0x01, 0xff, 0x51, 0x49, 0x52, 0x3b, 0x18, + 0x01, 0x07, 0xf1, 0x04, 0x59, 0x05, 0xdb, 0x02, 0x38, 0x0b, 0x70, 0x70, + 0x01, 0xff, 0xa1, 0x25, 0xe5, 0x33, 0x18, 0x01, 0xe9, 0x2d, 0x18, 0x81, + 0x18, 0xef, 0x35, 0x18, 0x01, 0xf5, 0x2f, 0x18, 0x81, 0x0b, 0x49, 0x92, + 0xb7, 0x31, 0x18, 0xc1, 0x00, 0xf2, 0x32, 0x18, 0x41, 0xf5, 0x30, 0x18, + 0x41, 0xe9, 0x2e, 0x18, 0x41, 0xe1, 0x2c, 0x18, 0x01, 0xe9, 0x34, 0x18, + 0x01, 0xf5, 0x36, 0x18, 0x41, 0x48, 0x5b, 0x14, 0x37, 0x18, 0x01, 0x45, + 0xc0, 0x3a, 0x3a, 0x18, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x49, + 0x21, 0x39, 0x18, 0x01, 0x45, 0x7e, 0x46, 0x38, 0x18, 0x41, 0xe1, 0x00, + 0x18, 0x81, 0xee, 0x01, 0xa2, 0xe1, 0x01, 0xa3, 0xd4, 0x01, 0xa4, 0xbb, + 0x01, 0xe5, 0x06, 0x18, 0x01, 0xa7, 0xaa, 0x01, 0x42, 0x22, 0x00, 0x2a, + 0x18, 0x01, 0xe9, 0x02, 0x18, 0x81, 0x9a, 0x01, 0xaa, 0x8d, 0x01, 0xab, + 0x80, 0x01, 0x42, 0x74, 0x00, 0x25, 0x18, 0x01, 0x42, 0x6c, 0x00, 0x22, + 0x18, 0x01, 0xae, 0x5c, 0xef, 0x08, 0x18, 0x01, 0xb0, 0x4c, 0xb2, 0x40, + 0xb3, 0x2e, 0xb4, 0x15, 0xf5, 0x04, 0x18, 0x81, 0x0c, 0x42, 0xb4, 0x09, + 0x26, 0x18, 0x01, 0x42, 0x20, 0x20, 0x23, 0x18, 0x41, 0xf5, 0x05, 0x18, + 0x41, 0xe1, 0x19, 0x18, 0x01, 0x42, 0x22, 0x00, 0x1a, 0x18, 0x01, 0xb4, + 0x01, 0xff, 0xe1, 0x14, 0x18, 0x01, 0x42, 0x22, 0x00, 0x15, 0x18, 0x41, + 0xe1, 0x29, 0x18, 0x01, 0x42, 0x22, 0x00, 0x27, 0x18, 0x01, 0x42, 0x45, + 0x05, 0x28, 0x18, 0x41, 0xe1, 0x24, 0x18, 0x01, 0x42, 0x71, 0x00, 0x2b, + 0x18, 0x41, 0xe1, 0x1e, 0x18, 0x01, 0x42, 0x22, 0x00, 0x1f, 0x18, 0x41, + 0xe1, 0x1d, 0x18, 0x01, 0x42, 0x24, 0x02, 0x0e, 0x18, 0x01, 0x42, 0x2f, + 0x04, 0x18, 0x18, 0x01, 0x42, 0x20, 0x20, 0x13, 0x18, 0x41, 0xe1, 0x0a, + 0x18, 0x01, 0x42, 0x22, 0x00, 0x0b, 0x18, 0x41, 0xe1, 0x11, 0x18, 0x01, + 0x42, 0x22, 0x00, 0x12, 0x18, 0x41, 0xe9, 0x03, 0x18, 0x41, 0xe1, 0x0c, + 0x18, 0x01, 0x42, 0x22, 0x00, 0x0d, 0x18, 0x41, 0xe1, 0x1b, 0x18, 0x01, + 0xa4, 0x06, 0x42, 0x22, 0x00, 0x1c, 0x18, 0x41, 0xe1, 0x16, 0x18, 0x01, + 0x42, 0x22, 0x00, 0x17, 0x18, 0x41, 0xe1, 0x0f, 0x18, 0x01, 0x42, 0x22, + 0x00, 0x10, 0x18, 0x41, 0xe1, 0x20, 0x18, 0x01, 0x42, 0x22, 0x00, 0x21, + 0x18, 0x41, 0xe1, 0x01, 0x18, 0x01, 0xe9, 0x07, 0x18, 0x01, 0xf5, 0x09, + 0x18, 0x41, 0x0b, 0x57, 0x92, 0x37, 0x46, 0x00, 0x00, 0x24, 0x22, 0x80, + 0x2a, 0x45, 0xd7, 0xdb, 0xae, 0x22, 0x00, 0x02, 0x59, 0x0b, 0x0d, 0x47, + 0x49, 0xc1, 0x81, 0x22, 0xc0, 0x00, 0x49, 0xf3, 0x25, 0xe1, 0x22, 0x40, + 0x45, 0x42, 0x32, 0x80, 0x22, 0x80, 0x06, 0x43, 0x5e, 0x00, 0xac, 0x22, + 0x40, 0x49, 0xf3, 0x25, 0xe0, 0x22, 0x40, 0x5d, 0x13, 0x13, 0xee, 0x2a, + 0x40, 0x46, 0xb9, 0x04, 0x0c, 0x22, 0x00, 0x4f, 0x56, 0x4e, 0xeb, 0x22, + 0xc0, 0x00, 0x49, 0xf3, 0x25, 0xed, 0x22, 0x40, 0x06, 0x50, 0x00, 0x01, + 0xff, 0x47, 0x7c, 0x83, 0xbb, 0xf5, 0x01, 0x44, 0xab, 0x2c, 0xb9, 0xf5, + 0xc1, 0x00, 0x4c, 0x77, 0x83, 0xba, 0xf5, 0x41, 0xa1, 0xa4, 0x09, 0xa5, + 0xff, 0x08, 0x50, 0x1e, 0x5d, 0x4f, 0x22, 0x00, 0xa7, 0xc1, 0x06, 0x4e, + 0x29, 0x73, 0x31, 0x23, 0x00, 0x06, 0xd7, 0xd3, 0xc8, 0x04, 0x05, 0xe1, + 0x0b, 0xb7, 0x04, 0xb3, 0x8f, 0x04, 0x48, 0xd9, 0xc1, 0x03, 0x30, 0x00, + 0xb6, 0x17, 0x47, 0x99, 0xcd, 0x94, 0xfa, 0x01, 0x04, 0x52, 0xe8, 0x01, + 0xff, 0x44, 0xed, 0x06, 0x35, 0xf6, 0x01, 0x46, 0xf7, 0x06, 0xab, 0xf4, + 0x41, 0x09, 0x73, 0xaf, 0x2d, 0xa9, 0x06, 0x4b, 0xbe, 0x98, 0xae, 0x26, + 0x40, 0x43, 0x0f, 0x25, 0x23, 0x22, 0x00, 0x47, 0x63, 0xc9, 0x3f, 0xf9, + 0x01, 0x05, 0xba, 0x2c, 0x01, 0xff, 0xb3, 0x06, 0x45, 0x28, 0x02, 0xc7, + 0x22, 0x40, 0x43, 0xdc, 0x02, 0xf7, 0x00, 0x00, 0x44, 0xa1, 0x0c, 0x15, + 0x22, 0x40, 0xa4, 0xf0, 0x02, 0x50, 0x9e, 0x5c, 0x46, 0x19, 0x01, 0x4a, + 0x30, 0x94, 0x45, 0x19, 0x01, 0x4a, 0x76, 0xa3, 0x41, 0x19, 0x01, 0x07, + 0xf1, 0x04, 0x64, 0x07, 0x63, 0x2f, 0x54, 0x53, 0xbc, 0x46, 0x3f, 0x19, + 0x01, 0x05, 0xdb, 0x02, 0x32, 0xb6, 0x01, 0xff, 0x45, 0x48, 0x21, 0x3e, + 0x19, 0x01, 0x0a, 0x71, 0x70, 0x01, 0xff, 0xa1, 0x1a, 0xe5, 0x35, 0x19, + 0x01, 0xe9, 0x31, 0x19, 0x81, 0x0d, 0xef, 0x38, 0x19, 0x01, 0xf5, 0x33, + 0x19, 0xc1, 0x00, 0xf5, 0x34, 0x19, 0x41, 0xe9, 0x32, 0x19, 0x41, 0xe1, + 0x30, 0x19, 0x01, 0xe9, 0x37, 0x19, 0x41, 0x48, 0x5b, 0x14, 0x3b, 0x19, + 0x01, 0x4b, 0x3b, 0x21, 0x3c, 0x19, 0x01, 0x47, 0x5d, 0xc7, 0x3d, 0x19, + 0x01, 0x45, 0xc0, 0x3a, 0x43, 0x19, 0x41, 0x42, 0x71, 0x00, 0x42, 0x19, + 0x01, 0x42, 0x20, 0x20, 0x40, 0x19, 0x41, 0xe1, 0x00, 0x19, 0x81, 0xec, + 0x01, 0xa2, 0xdf, 0x01, 0xa3, 0xd2, 0x01, 0xa4, 0xb9, 0x01, 0xe5, 0x06, + 0x19, 0x01, 0xa7, 0xa8, 0x01, 0x42, 0x22, 0x00, 0x2d, 0x19, 0x01, 0xe9, + 0x02, 0x19, 0x81, 0x98, 0x01, 0x42, 0x77, 0x24, 0x13, 0x19, 0x01, 0xab, + 0x85, 0x01, 0xac, 0x79, 0x42, 0x6c, 0x00, 0x24, 0x19, 0x01, 0xae, 0x5b, + 0xef, 0x09, 0x19, 0x01, 0xb0, 0x4b, 0x42, 0x71, 0x00, 0x27, 0x19, 0x01, + 0xb3, 0x33, 0xb4, 0x21, 0xf5, 0x04, 0x19, 0x81, 0x18, 0x42, 0xb4, 0x09, + 0x29, 0x19, 0x01, 0xb9, 0x06, 0x42, 0x59, 0x00, 0x2f, 0x19, 0x41, 0xe1, + 0x25, 0x19, 0x01, 0x42, 0x20, 0x20, 0x26, 0x19, 0x41, 0xf5, 0x05, 0x19, + 0x41, 0xe1, 0x1b, 0x19, 0x01, 0x42, 0x22, 0x00, 0x1c, 0x19, 0x01, 0x42, + 0x12, 0x00, 0x16, 0x19, 0x41, 0xe1, 0x2c, 0x19, 0x01, 0x42, 0x22, 0x00, + 0x2a, 0x19, 0x01, 0x42, 0x45, 0x05, 0x2b, 0x19, 0x41, 0xe1, 0x20, 0x19, + 0x01, 0x42, 0x22, 0x00, 0x21, 0x19, 0x41, 0xe1, 0x1f, 0x19, 0x01, 0x42, + 0x24, 0x02, 0x10, 0x19, 0x01, 0x42, 0x2f, 0x04, 0x1a, 0x19, 0x01, 0x42, + 0x20, 0x20, 0x15, 0x19, 0x41, 0xe1, 0x28, 0x19, 0x01, 0x42, 0x74, 0x00, + 0x2e, 0x19, 0x41, 0xe1, 0x0c, 0x19, 0x01, 0x42, 0x22, 0x00, 0x0d, 0x19, + 0x41, 0xe9, 0x03, 0x19, 0x41, 0xe1, 0x0e, 0x19, 0x01, 0x42, 0x22, 0x00, + 0x0f, 0x19, 0x41, 0xe1, 0x1d, 0x19, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, + 0x1e, 0x19, 0x41, 0xe1, 0x18, 0x19, 0x01, 0x42, 0x22, 0x00, 0x19, 0x19, + 0x41, 0xe1, 0x11, 0x19, 0x01, 0x42, 0x22, 0x00, 0x12, 0x19, 0x41, 0xe1, + 0x22, 0x19, 0x01, 0x42, 0x22, 0x00, 0x23, 0x19, 0x41, 0xe1, 0x01, 0x19, + 0x41, 0x05, 0xf5, 0x05, 0x06, 0x4b, 0xdf, 0x98, 0x44, 0x19, 0x41, 0x45, + 0xd1, 0x09, 0x58, 0x19, 0x01, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x59, 0x19, + 0x01, 0x43, 0xcd, 0x09, 0x51, 0x19, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, + 0xf5, 0x1b, 0x50, 0x19, 0x41, 0x44, 0x25, 0x01, 0x53, 0x19, 0x01, 0x42, + 0x15, 0x02, 0x52, 0x19, 0x41, 0x44, 0x96, 0x1b, 0x57, 0x19, 0x01, 0x42, + 0x30, 0x27, 0x56, 0x19, 0x41, 0x43, 0xd7, 0x04, 0x55, 0x19, 0x01, 0x43, + 0xfb, 0x05, 0x54, 0x19, 0x41, 0xa1, 0x0c, 0x5b, 0x95, 0x18, 0x82, 0x23, + 0x00, 0x4b, 0x88, 0x94, 0x78, 0xf9, 0x41, 0x48, 0x99, 0xba, 0xcd, 0x26, + 0x00, 0x09, 0xc2, 0xb4, 0x01, 0xff, 0x51, 0x48, 0x53, 0x25, 0xf6, 0x01, + 0x44, 0xed, 0x06, 0x1e, 0xf6, 0x41, 0x57, 0x9e, 0x2a, 0x93, 0x23, 0x00, + 0x43, 0xae, 0x02, 0xaf, 0xf3, 0x41, 0x13, 0x52, 0x43, 0x9d, 0x01, 0x11, + 0xcd, 0x56, 0x01, 0xff, 0x06, 0xf4, 0x05, 0x57, 0x4a, 0xec, 0xa5, 0x7f, + 0x27, 0x00, 0x0b, 0x5a, 0x43, 0x01, 0xff, 0x06, 0xf4, 0x05, 0x06, 0x4a, + 0xec, 0xa5, 0x93, 0x27, 0x40, 0x45, 0xd1, 0x09, 0x91, 0x27, 0x00, 0xa6, + 0x2e, 0x44, 0xb8, 0x27, 0x92, 0x27, 0x00, 0x43, 0xcd, 0x09, 0x8a, 0x27, + 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x0c, 0xf1, 0x41, 0x44, + 0x25, 0x01, 0x8c, 0x27, 0x00, 0x42, 0x15, 0x02, 0x8b, 0x27, 0x40, 0x44, + 0x96, 0x1b, 0x90, 0x27, 0x00, 0x42, 0x30, 0x27, 0x8f, 0x27, 0x40, 0x43, + 0xd7, 0x04, 0x8e, 0x27, 0x00, 0x43, 0xfb, 0x05, 0x8d, 0x27, 0x40, 0x45, + 0xd1, 0x09, 0x7d, 0x27, 0x00, 0xa6, 0x29, 0x44, 0xb8, 0x27, 0x7e, 0x27, + 0x00, 0x43, 0xcd, 0x09, 0x76, 0x27, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, + 0x44, 0x25, 0x01, 0x78, 0x27, 0x00, 0x42, 0x15, 0x02, 0x77, 0x27, 0x40, + 0x44, 0x96, 0x1b, 0x7c, 0x27, 0x00, 0x42, 0x30, 0x27, 0x7b, 0x27, 0x40, + 0x43, 0xd7, 0x04, 0x7a, 0x27, 0x00, 0x43, 0xfb, 0x05, 0x79, 0x27, 0x40, + 0x06, 0xf4, 0x05, 0x06, 0x4a, 0xec, 0xa5, 0x89, 0x27, 0x40, 0x45, 0xd1, + 0x09, 0x87, 0x27, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x88, 0x27, 0x00, + 0x43, 0xcd, 0x09, 0x80, 0x27, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, + 0x1b, 0x0b, 0xf1, 0x41, 0x44, 0x25, 0x01, 0x82, 0x27, 0x00, 0x42, 0x15, + 0x02, 0x81, 0x27, 0x40, 0x44, 0x96, 0x1b, 0x86, 0x27, 0x00, 0x42, 0x30, + 0x27, 0x85, 0x27, 0x40, 0x43, 0xd7, 0x04, 0x84, 0x27, 0x00, 0x43, 0xfb, + 0x05, 0x83, 0x27, 0x40, 0x03, 0xf7, 0x05, 0x4c, 0x08, 0x43, 0x8e, 0x01, + 0xff, 0x45, 0xa1, 0x6b, 0x05, 0xd3, 0x81, 0x2f, 0x09, 0x0c, 0xb0, 0x1f, + 0xa8, 0x11, 0x08, 0xf1, 0xbd, 0x01, 0xff, 0x43, 0x1c, 0x01, 0x8e, 0x26, + 0x00, 0x42, 0x9e, 0x01, 0x8d, 0x26, 0x40, 0x4d, 0x4a, 0x7b, 0x01, 0xd3, + 0x01, 0x4a, 0xd4, 0xa9, 0x02, 0xd3, 0x41, 0x43, 0x1c, 0x01, 0x8c, 0x26, + 0x00, 0x42, 0x9e, 0x01, 0x8f, 0x26, 0x40, 0x04, 0xfe, 0x86, 0x01, 0xff, + 0x45, 0xd6, 0x74, 0x03, 0xd3, 0x01, 0x44, 0xf7, 0x9b, 0x04, 0xd3, 0x41, + 0x45, 0xd1, 0x09, 0x38, 0x00, 0x80, 0xce, 0x01, 0xa6, 0x9f, 0x01, 0x44, + 0xb8, 0x27, 0x39, 0x00, 0x80, 0x88, 0x01, 0x43, 0xcd, 0x09, 0x31, 0x00, + 0x80, 0x72, 0xb3, 0x44, 0xb4, 0x16, 0x44, 0xf5, 0x1b, 0x30, 0x00, 0xc0, + 0x00, 0x80, 0x01, 0xff, 0x45, 0x18, 0x04, 0x01, 0xf1, 0x01, 0x49, 0xa0, + 0x14, 0x00, 0xf1, 0x41, 0x44, 0x25, 0x01, 0x33, 0x00, 0x80, 0x16, 0x42, + 0x15, 0x02, 0x32, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x45, 0x18, 0x04, + 0x03, 0xf1, 0x01, 0x49, 0xa0, 0x14, 0x89, 0x24, 0x40, 0x80, 0x01, 0xff, + 0x45, 0x18, 0x04, 0x04, 0xf1, 0x01, 0x49, 0xa0, 0x14, 0x8a, 0x24, 0x40, + 0x44, 0x96, 0x1b, 0x37, 0x00, 0x80, 0x16, 0x42, 0x30, 0x27, 0x36, 0x00, + 0xc0, 0x00, 0x80, 0x01, 0xff, 0x45, 0x18, 0x04, 0x07, 0xf1, 0x01, 0x49, + 0xa0, 0x14, 0x8d, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0x18, 0x04, 0x08, + 0xf1, 0x01, 0x49, 0xa0, 0x14, 0x8e, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, + 0x18, 0x04, 0x02, 0xf1, 0x01, 0x49, 0xa0, 0x14, 0x88, 0x24, 0x40, 0x80, + 0x01, 0xff, 0x45, 0x18, 0x04, 0x0a, 0xf1, 0x01, 0x49, 0xa0, 0x14, 0x90, + 0x24, 0x40, 0x43, 0xd7, 0x04, 0x35, 0x00, 0x80, 0x16, 0x43, 0xfb, 0x05, + 0x34, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x45, 0x18, 0x04, 0x05, 0xf1, + 0x01, 0x49, 0xa0, 0x14, 0x8b, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0x18, + 0x04, 0x06, 0xf1, 0x01, 0x49, 0xa0, 0x14, 0x8c, 0x24, 0x40, 0x80, 0x01, + 0xff, 0x45, 0x18, 0x04, 0x09, 0xf1, 0x01, 0x49, 0xa0, 0x14, 0x8f, 0x24, + 0x40, 0x06, 0xef, 0xcd, 0x06, 0x4e, 0x3d, 0x75, 0xf2, 0xf6, 0x41, 0xd1, + 0x80, 0x26, 0x00, 0xd2, 0x81, 0x26, 0x00, 0xd3, 0x82, 0x26, 0x00, 0xd4, + 0x83, 0x26, 0x00, 0xd5, 0x84, 0x26, 0x00, 0xd6, 0x85, 0x26, 0x40, 0x46, + 0x1e, 0x21, 0xa8, 0x00, 0x00, 0xad, 0x01, 0xff, 0x49, 0x85, 0xaf, 0x00, + 0x23, 0x00, 0x04, 0xcf, 0x51, 0x01, 0xff, 0x48, 0x4b, 0x1b, 0xc4, 0x22, + 0x00, 0x57, 0x39, 0x2d, 0xa0, 0xf4, 0x01, 0x46, 0xe7, 0xd5, 0x9c, 0xf7, + 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, 0x15, 0x53, 0x19, 0x2b, 0x00, + 0x4f, 0xb8, 0x68, 0x16, 0x2b, 0x00, 0x50, 0x6e, 0x60, 0x17, 0x2b, 0x00, + 0x4e, 0x7f, 0x76, 0x18, 0x2b, 0x40, 0x49, 0xb5, 0xac, 0xcf, 0xf9, 0x01, + 0xa3, 0x8b, 0x0d, 0x42, 0x33, 0x00, 0x8c, 0xf9, 0x01, 0x05, 0x72, 0xa2, + 0xee, 0x0c, 0xac, 0xd9, 0x0c, 0x15, 0xbe, 0x38, 0xd8, 0x0b, 0x4e, 0x4f, + 0x74, 0xec, 0xf3, 0x01, 0x55, 0x66, 0x39, 0xda, 0xf3, 0x01, 0xb3, 0xe5, + 0x07, 0xb6, 0x01, 0xff, 0x08, 0x42, 0xb7, 0x26, 0x0c, 0xcf, 0x82, 0x01, + 0xff, 0x44, 0xfa, 0x05, 0x14, 0x00, 0x00, 0x43, 0xcd, 0x09, 0x11, 0x00, + 0x00, 0x46, 0x4e, 0x61, 0x90, 0x00, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, + 0x01, 0x13, 0x00, 0x00, 0x42, 0x15, 0x02, 0x12, 0x00, 0x40, 0xa1, 0xa9, + 0x07, 0x45, 0xf4, 0x91, 0xfa, 0xa8, 0x00, 0xa4, 0xce, 0x06, 0xa7, 0xbf, + 0x06, 0x04, 0xe6, 0x01, 0xa7, 0x06, 0x47, 0x0c, 0xc8, 0xfd, 0xa8, 0x00, + 0x07, 0xf1, 0x04, 0xc9, 0x02, 0x42, 0x19, 0x04, 0x50, 0x09, 0x00, 0xb3, + 0x84, 0x01, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xa1, 0x69, 0x07, 0xb2, 0xc5, + 0x57, 0xe5, 0x47, 0x09, 0x00, 0xe9, 0x3f, 0x09, 0x80, 0x4a, 0xef, 0x4b, + 0x09, 0x80, 0x3b, 0x4f, 0x3d, 0x6b, 0x4e, 0x09, 0x00, 0x06, 0x1c, 0x33, + 0x29, 0xf5, 0x41, 0x09, 0x80, 0x17, 0x08, 0x92, 0xb7, 0x01, 0xff, 0xec, + 0x62, 0x09, 0x80, 0x09, 0xf2, 0x43, 0x09, 0xc0, 0x00, 0xf2, 0x44, 0x09, + 0x40, 0xec, 0x63, 0x09, 0x40, 0xe5, 0x56, 0x09, 0x00, 0xf5, 0x42, 0x09, + 0xc0, 0x00, 0xe5, 0x57, 0x09, 0x40, 0xe5, 0x46, 0x09, 0x00, 0xef, 0x4a, + 0x09, 0x40, 0xe5, 0x3a, 0x09, 0x00, 0x42, 0xdf, 0x4b, 0x3b, 0x09, 0x40, + 0xe9, 0x40, 0x09, 0x40, 0xe5, 0x45, 0x09, 0x00, 0x46, 0x71, 0xd3, 0x55, + 0x09, 0x00, 0xef, 0x49, 0x09, 0x40, 0xe1, 0x3e, 0x09, 0x00, 0xe9, 0x48, + 0x09, 0x00, 0xf5, 0x4c, 0x09, 0x00, 0xf7, 0x4f, 0x09, 0x00, 0xf9, 0xff, + 0xa8, 0x40, 0x04, 0xdc, 0x02, 0x11, 0x0b, 0x73, 0x9b, 0x01, 0xff, 0x48, + 0x15, 0x76, 0x52, 0x09, 0x00, 0x46, 0x17, 0x76, 0x51, 0x09, 0x40, 0xa1, + 0x98, 0x01, 0x45, 0xc2, 0x27, 0x02, 0x1b, 0x81, 0x8a, 0x01, 0x4b, 0x3b, + 0x21, 0x01, 0x09, 0x80, 0x66, 0x59, 0x34, 0x21, 0xf4, 0xa8, 0x00, 0x4e, + 0xeb, 0x70, 0x04, 0x1b, 0x81, 0x53, 0x50, 0x3e, 0x5d, 0x71, 0x09, 0x00, + 0x54, 0xb5, 0x3e, 0x00, 0x09, 0x00, 0x45, 0xfd, 0xdd, 0x09, 0x1b, 0x01, + 0x45, 0xc0, 0x3a, 0x3c, 0x09, 0x00, 0x48, 0x41, 0xc0, 0xf8, 0xa8, 0x00, + 0x58, 0xaf, 0x27, 0x08, 0x1b, 0x01, 0xb3, 0x21, 0x02, 0x02, 0x00, 0x11, + 0x08, 0xda, 0x2d, 0x01, 0xff, 0x4f, 0x8d, 0x66, 0x06, 0x1b, 0x01, 0x4f, + 0xb8, 0x27, 0x07, 0x1b, 0x41, 0x44, 0x49, 0x21, 0x4d, 0x09, 0x00, 0x45, + 0x7e, 0x46, 0x03, 0x09, 0x40, 0x46, 0xbe, 0xcb, 0xfc, 0xa8, 0x00, 0x52, + 0xe6, 0x4e, 0xf2, 0xa8, 0x40, 0x4a, 0x0b, 0x22, 0x05, 0x1b, 0x41, 0x80, + 0x01, 0xff, 0x48, 0x40, 0x81, 0xf7, 0xa8, 0x00, 0xb4, 0x06, 0x46, 0x47, + 0x21, 0xf3, 0xa8, 0x40, 0x44, 0x25, 0x01, 0xf6, 0xa8, 0x00, 0x42, 0x15, + 0x02, 0xf5, 0xa8, 0x40, 0x4a, 0x0b, 0x22, 0x03, 0x1b, 0x41, 0x47, 0x5c, + 0x14, 0x02, 0x09, 0x00, 0x47, 0x41, 0x81, 0x3d, 0x09, 0x40, 0xe1, 0x05, + 0x09, 0x80, 0xb9, 0x03, 0xa2, 0xa6, 0x03, 0xa3, 0x87, 0x03, 0xa4, 0xe2, + 0x02, 0xe5, 0x0f, 0x09, 0x00, 0x42, 0xed, 0x06, 0x5e, 0x09, 0x00, 0xa7, + 0xb9, 0x02, 0xa8, 0xac, 0x02, 0xe9, 0x07, 0x09, 0x80, 0xa2, 0x02, 0xaa, + 0x8f, 0x02, 0xab, 0xfb, 0x01, 0xac, 0xe7, 0x01, 0x42, 0x6c, 0x00, 0x2e, + 0x09, 0x80, 0xd9, 0x01, 0xae, 0xba, 0x01, 0xef, 0x13, 0x09, 0x80, 0xaa, + 0x01, 0xb0, 0x9d, 0x01, 0x42, 0x9d, 0x12, 0x58, 0x09, 0x00, 0xb2, 0x84, + 0x01, 0xb3, 0x61, 0xb4, 0x48, 0xf5, 0x09, 0x09, 0x80, 0x36, 0xb6, 0x19, + 0xb9, 0x0d, 0xba, 0x01, 0xff, 0xe1, 0x5b, 0x09, 0x00, 0x42, 0x22, 0x00, + 0x79, 0x09, 0x40, 0xe1, 0x2f, 0x09, 0x00, 0x42, 0x20, 0x20, 0x5f, 0x09, + 0x40, 0xe1, 0x35, 0x09, 0x00, 0x07, 0x93, 0xb7, 0x01, 0xff, 0xec, 0x0c, + 0x09, 0x80, 0x09, 0xf2, 0x0b, 0x09, 0xc0, 0x00, 0xf2, 0x60, 0x09, 0x40, + 0xec, 0x61, 0x09, 0x40, 0xe5, 0x76, 0x09, 0x00, 0xf5, 0x0a, 0x09, 0xc0, + 0x00, 0xe5, 0x77, 0x09, 0x40, 0xe1, 0x24, 0x09, 0x00, 0x42, 0x22, 0x00, + 0x25, 0x09, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x1f, 0x09, 0x00, 0x42, 0x22, + 0x00, 0x20, 0x09, 0x40, 0xe1, 0x38, 0x09, 0x00, 0xa8, 0x06, 0x42, 0x45, + 0x05, 0x37, 0x09, 0x40, 0xe1, 0x36, 0x09, 0x00, 0x04, 0x5d, 0x30, 0x01, + 0xff, 0xe1, 0x04, 0x09, 0x00, 0xe5, 0x0e, 0x09, 0x00, 0xef, 0x12, 0x09, + 0x40, 0xe1, 0x30, 0x09, 0x00, 0x42, 0x22, 0x00, 0x5d, 0x09, 0x00, 0x42, + 0x71, 0x00, 0x31, 0x09, 0x40, 0xe1, 0x2a, 0x09, 0x00, 0x42, 0x22, 0x00, + 0x2b, 0x09, 0x40, 0xe5, 0x73, 0x09, 0x00, 0x42, 0xdf, 0x4b, 0x74, 0x09, + 0x40, 0xe1, 0x28, 0x09, 0x00, 0x42, 0x24, 0x02, 0x19, 0x09, 0x00, 0xae, + 0x06, 0x42, 0x20, 0x20, 0x1e, 0x09, 0x40, 0xe1, 0x23, 0x09, 0x00, 0x42, + 0x2f, 0x04, 0x29, 0x09, 0x40, 0x49, 0x9a, 0xb5, 0x78, 0x09, 0x40, 0xe1, + 0x32, 0x09, 0x00, 0xac, 0x01, 0xff, 0xe1, 0x33, 0x09, 0x00, 0x42, 0x74, + 0x00, 0x34, 0x09, 0x40, 0xe1, 0x15, 0x09, 0x00, 0xa8, 0x01, 0xff, 0xe1, + 0x16, 0x09, 0x00, 0x42, 0x22, 0x00, 0x59, 0x09, 0x40, 0xe1, 0x1c, 0x09, + 0x00, 0x42, 0x22, 0x00, 0x1d, 0x09, 0x00, 0x42, 0x77, 0x24, 0x7c, 0x09, + 0x40, 0xe9, 0x08, 0x09, 0x40, 0xe1, 0x39, 0x09, 0x00, 0x47, 0xa0, 0xc6, + 0x7a, 0x09, 0x40, 0xe1, 0x17, 0x09, 0x00, 0x42, 0x24, 0x02, 0x7b, 0x09, + 0x00, 0xa8, 0x06, 0x4b, 0xd0, 0x25, 0x7d, 0x09, 0x40, 0xe1, 0x18, 0x09, + 0x00, 0x42, 0x22, 0x00, 0x5a, 0x09, 0x40, 0xe1, 0x26, 0x09, 0x00, 0xa4, + 0x06, 0x42, 0x22, 0x00, 0x27, 0x09, 0x40, 0xe1, 0x21, 0x09, 0x00, 0xa4, + 0x06, 0x42, 0x22, 0x00, 0x22, 0x09, 0x40, 0xe1, 0x7e, 0x09, 0x00, 0x42, + 0x22, 0x00, 0x5c, 0x09, 0x40, 0xe1, 0x1a, 0x09, 0x80, 0x06, 0x42, 0x22, + 0x00, 0x1b, 0x09, 0x40, 0x05, 0xb4, 0xc5, 0x01, 0xff, 0xe1, 0x72, 0x09, + 0x00, 0xe5, 0x0d, 0x09, 0x00, 0xef, 0x11, 0x09, 0x40, 0xe1, 0x2c, 0x09, + 0x00, 0x42, 0x16, 0x00, 0x7f, 0x09, 0x00, 0x42, 0x22, 0x00, 0x2d, 0x09, + 0x40, 0xe1, 0x06, 0x09, 0x00, 0xe9, 0x10, 0x09, 0x00, 0xf5, 0x14, 0x09, + 0x00, 0xf7, 0x75, 0x09, 0x00, 0xf9, 0xfe, 0xa8, 0x40, 0x45, 0xb8, 0x00, + 0x00, 0x1b, 0x81, 0x06, 0x46, 0x57, 0x04, 0xfb, 0xa8, 0x40, 0x50, 0xce, + 0x5a, 0x01, 0x1b, 0x41, 0x49, 0x31, 0x94, 0xf9, 0xa8, 0x00, 0x4b, 0x7a, + 0x20, 0x53, 0x09, 0x40, 0x44, 0x0b, 0x1e, 0x64, 0x09, 0x00, 0x05, 0xf5, + 0x05, 0x06, 0x4b, 0xdf, 0x98, 0x65, 0x09, 0x40, 0x45, 0xd1, 0x09, 0x6e, + 0x09, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x6f, 0x09, 0x00, 0x43, 0xcd, + 0x09, 0x67, 0x09, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x66, + 0x09, 0x40, 0x44, 0x25, 0x01, 0x69, 0x09, 0x00, 0x42, 0x15, 0x02, 0x68, + 0x09, 0x40, 0x44, 0x96, 0x1b, 0x6d, 0x09, 0x00, 0x42, 0x30, 0x27, 0x6c, + 0x09, 0x40, 0x43, 0xd7, 0x04, 0x6b, 0x09, 0x00, 0x43, 0xfb, 0x05, 0x6a, + 0x09, 0x40, 0x50, 0x4a, 0x52, 0x70, 0x09, 0x00, 0x4b, 0x80, 0x84, 0x54, + 0x09, 0x40, 0x4c, 0xc3, 0x85, 0x0b, 0x26, 0x00, 0x02, 0x33, 0x00, 0x11, + 0x05, 0x3a, 0xdd, 0x01, 0xff, 0x48, 0x2e, 0x46, 0xa5, 0xf5, 0x01, 0x46, + 0xb9, 0xd6, 0xd4, 0xf5, 0x41, 0x03, 0x4a, 0x08, 0x0b, 0xf4, 0xdc, 0xf3, + 0xc1, 0x00, 0x47, 0x3c, 0xc3, 0xdd, 0xf3, 0x41, 0x0f, 0xe9, 0x04, 0xdd, + 0x01, 0x0d, 0x7c, 0x07, 0x01, 0xff, 0x42, 0x65, 0x0f, 0x34, 0x04, 0x01, + 0x43, 0x96, 0xad, 0x3a, 0x04, 0x01, 0x44, 0xd3, 0x45, 0x3d, 0x04, 0x01, + 0x43, 0x4d, 0x7a, 0x3c, 0x04, 0x01, 0xa5, 0x91, 0x01, 0x43, 0x3b, 0x94, + 0x40, 0x04, 0x01, 0xe8, 0x38, 0x04, 0x01, 0x43, 0x13, 0x34, 0x3e, 0x04, + 0x01, 0x43, 0x25, 0x78, 0x3f, 0x04, 0x01, 0x05, 0x4f, 0x30, 0x5d, 0xaf, + 0x53, 0x43, 0xbc, 0x75, 0x39, 0x04, 0x01, 0x06, 0x1c, 0x33, 0x2f, 0xb4, + 0x21, 0x43, 0x02, 0x06, 0x42, 0x04, 0x01, 0x42, 0x75, 0x06, 0x36, 0x04, + 0x01, 0x43, 0x4e, 0xa1, 0x37, 0x04, 0x01, 0xba, 0x01, 0xff, 0x42, 0x27, + 0x01, 0x46, 0x04, 0x01, 0x43, 0x86, 0x11, 0x48, 0x04, 0x41, 0x42, 0x27, + 0x01, 0x3b, 0x04, 0x01, 0x43, 0x86, 0x11, 0x44, 0x04, 0x41, 0xe1, 0x30, + 0x04, 0x81, 0x11, 0xe5, 0x2f, 0x04, 0x01, 0xe9, 0x2e, 0x04, 0x01, 0xef, + 0x32, 0x04, 0xc1, 0x00, 0xef, 0x33, 0x04, 0x41, 0xe8, 0x31, 0x04, 0x41, + 0xe9, 0x4e, 0x04, 0x01, 0xf7, 0x35, 0x04, 0x41, 0xe1, 0x2a, 0x04, 0x81, + 0x11, 0xe5, 0x29, 0x04, 0x01, 0xe9, 0x28, 0x04, 0x01, 0xef, 0x2c, 0x04, + 0xc1, 0x00, 0xef, 0x2d, 0x04, 0x41, 0xe8, 0x2b, 0x04, 0x41, 0xe6, 0x41, + 0x04, 0x01, 0xec, 0x4a, 0x04, 0x01, 0xed, 0x4b, 0x04, 0x01, 0xee, 0x4c, + 0x04, 0x81, 0x17, 0xf2, 0x49, 0x04, 0x01, 0xf3, 0x45, 0x04, 0x81, 0x0a, + 0x42, 0x53, 0x00, 0x43, 0x04, 0x01, 0xf7, 0x4f, 0x04, 0x41, 0xe8, 0x47, + 0x04, 0x41, 0xe7, 0x4d, 0x04, 0x41, 0x42, 0x65, 0x0f, 0x0c, 0x04, 0x01, + 0x43, 0x96, 0xad, 0x12, 0x04, 0x01, 0x44, 0xd3, 0x45, 0x15, 0x04, 0x01, + 0x43, 0x4d, 0x7a, 0x14, 0x04, 0x01, 0xa5, 0x91, 0x01, 0x43, 0x3b, 0x94, + 0x18, 0x04, 0x01, 0xe8, 0x10, 0x04, 0x01, 0x43, 0x13, 0x34, 0x16, 0x04, + 0x01, 0x43, 0x25, 0x78, 0x17, 0x04, 0x01, 0x05, 0x4f, 0x30, 0x5d, 0xaf, + 0x53, 0x43, 0xbc, 0x75, 0x11, 0x04, 0x01, 0x06, 0x1c, 0x33, 0x2f, 0xb4, + 0x21, 0x43, 0x02, 0x06, 0x1a, 0x04, 0x01, 0x42, 0x75, 0x06, 0x0e, 0x04, + 0x01, 0x43, 0x4e, 0xa1, 0x0f, 0x04, 0x01, 0xba, 0x01, 0xff, 0x42, 0x27, + 0x01, 0x1e, 0x04, 0x01, 0x43, 0x86, 0x11, 0x20, 0x04, 0x41, 0x42, 0x27, + 0x01, 0x13, 0x04, 0x01, 0x43, 0x86, 0x11, 0x1c, 0x04, 0x41, 0xe1, 0x08, + 0x04, 0x81, 0x11, 0xe5, 0x07, 0x04, 0x01, 0xe9, 0x06, 0x04, 0x01, 0xef, + 0x0a, 0x04, 0xc1, 0x00, 0xef, 0x0b, 0x04, 0x41, 0xe8, 0x09, 0x04, 0x41, + 0xe9, 0x26, 0x04, 0x01, 0xf7, 0x0d, 0x04, 0x41, 0xe1, 0x02, 0x04, 0x81, + 0x11, 0xe5, 0x01, 0x04, 0x01, 0xe9, 0x00, 0x04, 0x01, 0xef, 0x04, 0x04, + 0xc1, 0x00, 0xef, 0x05, 0x04, 0x41, 0xe8, 0x03, 0x04, 0x41, 0xe6, 0x19, + 0x04, 0x01, 0xec, 0x22, 0x04, 0x01, 0xed, 0x23, 0x04, 0x01, 0xee, 0x24, + 0x04, 0x81, 0x17, 0xf2, 0x21, 0x04, 0x01, 0xf3, 0x1d, 0x04, 0x81, 0x0a, + 0x42, 0x53, 0x00, 0x1b, 0x04, 0x01, 0xf7, 0x27, 0x04, 0x41, 0xe8, 0x1f, + 0x04, 0x41, 0xe7, 0x25, 0x04, 0x41, 0x53, 0x9e, 0x43, 0xc9, 0x23, 0x80, + 0x5e, 0x51, 0xdc, 0x58, 0xca, 0x23, 0x80, 0x40, 0x09, 0x32, 0x00, 0x01, + 0xff, 0x04, 0x1a, 0x00, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x46, 0x00, + 0x04, 0xc0, 0x23, 0x00, 0x48, 0x01, 0x02, 0xc3, 0x23, 0x40, 0x07, 0xf3, + 0x0b, 0x16, 0x04, 0x1e, 0x00, 0x06, 0x44, 0xef, 0x51, 0xc6, 0x23, 0x40, + 0x44, 0xc3, 0x00, 0xcb, 0x23, 0x00, 0x45, 0xc8, 0x00, 0xbe, 0x23, 0x40, + 0x44, 0xc3, 0x00, 0xcc, 0x23, 0x00, 0x45, 0xc8, 0x00, 0xbf, 0x23, 0x40, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x00, 0x04, 0xc2, 0x23, 0x00, 0x48, + 0x01, 0x02, 0xc5, 0x23, 0x00, 0x44, 0xef, 0x51, 0xc8, 0x23, 0x40, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x46, 0x00, 0x04, 0xc1, 0x23, 0x00, 0x48, 0x01, + 0x02, 0xc4, 0x23, 0x00, 0x44, 0xef, 0x51, 0xc7, 0x23, 0x40, 0x43, 0x34, + 0x2d, 0x7f, 0x00, 0x00, 0x4b, 0xb1, 0x95, 0x9a, 0xf6, 0x01, 0x4b, 0xfa, + 0x9a, 0x5c, 0x22, 0x40, 0x47, 0xc7, 0xc5, 0x03, 0x21, 0x00, 0x4a, 0xc8, + 0xa1, 0x09, 0x21, 0x00, 0x44, 0xdb, 0x02, 0xb0, 0x00, 0x40, 0xa9, 0x06, + 0x56, 0x82, 0x32, 0xdb, 0xf5, 0x41, 0x4a, 0xf6, 0xa0, 0x33, 0xf3, 0x01, + 0x04, 0x2f, 0x0e, 0x01, 0xff, 0x4f, 0x7e, 0x66, 0xe8, 0x23, 0x00, 0x54, + 0xa9, 0x40, 0x96, 0x23, 0x40, 0x44, 0xa3, 0xd0, 0x20, 0x20, 0x80, 0x53, + 0x4a, 0x5c, 0xa4, 0x38, 0x21, 0x00, 0xae, 0x3f, 0x04, 0xbf, 0x3f, 0x2f, + 0x02, 0xa4, 0x02, 0x06, 0x4e, 0x90, 0x64, 0x10, 0x00, 0x40, 0x80, 0x17, + 0x03, 0x05, 0x00, 0x01, 0xff, 0x48, 0xfa, 0x82, 0x4d, 0xfe, 0x00, 0x48, + 0x07, 0x83, 0x49, 0xfe, 0x00, 0x60, 0x98, 0x05, 0x9f, 0x27, 0x40, 0x46, + 0xf7, 0x06, 0xa8, 0xf4, 0x01, 0x50, 0x8e, 0x62, 0x43, 0x2e, 0x40, 0x44, + 0xa3, 0x03, 0x93, 0x25, 0x00, 0x49, 0xcc, 0xb6, 0x76, 0xf5, 0x41, 0x43, + 0xaf, 0x1d, 0x83, 0xf4, 0x01, 0x42, 0x60, 0x12, 0x61, 0xf3, 0x41, 0x80, + 0x01, 0xff, 0x45, 0x59, 0x9d, 0xe1, 0xf5, 0x01, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x4a, 0x16, 0xa4, 0x36, 0x2e, 0x00, 0x4b, 0xbb, 0x99, 0x37, 0x2e, + 0x40, 0xa1, 0xe8, 0xac, 0x01, 0xa5, 0xa2, 0xac, 0x01, 0xa8, 0xa2, 0x9b, + 0x01, 0xa9, 0xef, 0x8b, 0x01, 0x03, 0x29, 0x2f, 0xc1, 0x83, 0x01, 0xac, + 0xc4, 0x7f, 0xaf, 0xf3, 0x5b, 0xb2, 0xba, 0x5a, 0xb5, 0xa3, 0x1b, 0xb9, + 0x01, 0xff, 0x45, 0xbf, 0xda, 0x00, 0xf3, 0x01, 0x4a, 0x98, 0xa4, 0x2d, + 0x23, 0x00, 0x02, 0x59, 0x0b, 0xd4, 0x15, 0x07, 0xfa, 0xc2, 0x01, 0xff, + 0x09, 0xe9, 0x04, 0xec, 0x0b, 0x46, 0x6c, 0x4a, 0x7e, 0xa6, 0x00, 0x07, + 0xf1, 0x04, 0xcf, 0x0b, 0x47, 0x5f, 0xca, 0x7f, 0xa6, 0x00, 0xb3, 0x06, + 0x4e, 0x47, 0x76, 0x82, 0x04, 0x40, 0x06, 0x70, 0x07, 0x99, 0x01, 0x16, + 0x8a, 0x33, 0x01, 0xff, 0xe1, 0x51, 0xe0, 0x01, 0xa2, 0x83, 0x01, 0x43, + 0x21, 0x2c, 0x63, 0xe0, 0x01, 0xa4, 0x6a, 0xa5, 0x5c, 0x43, 0x3a, 0xc7, + 0x54, 0xe0, 0x81, 0x4f, 0x42, 0x22, 0x00, 0x61, 0xe0, 0x81, 0x42, 0xe9, + 0x59, 0xe0, 0x81, 0x39, 0x42, 0x1b, 0x02, 0x5a, 0xe0, 0x01, 0xef, 0x5c, + 0xe0, 0x01, 0x42, 0x6f, 0x02, 0x5d, 0xe0, 0x01, 0x43, 0xa4, 0x02, 0x64, + 0xe0, 0x01, 0x43, 0xfe, 0x57, 0x62, 0xe0, 0x01, 0xf5, 0x5f, 0xe0, 0x01, + 0x42, 0x32, 0x00, 0x53, 0xe0, 0x01, 0x44, 0xe6, 0xcc, 0x66, 0xe0, 0x01, + 0xba, 0x01, 0xff, 0xe5, 0x58, 0xe0, 0x01, 0x42, 0xb0, 0x01, 0x57, 0xe0, + 0x41, 0xe5, 0x56, 0xe0, 0x41, 0x47, 0x68, 0x8b, 0x65, 0xe0, 0x41, 0x4c, + 0x1f, 0x84, 0x67, 0xe0, 0x41, 0xe6, 0x60, 0xe0, 0x01, 0xec, 0x5b, 0xe0, + 0x01, 0xf3, 0x5e, 0xe0, 0x41, 0xe5, 0x55, 0xe0, 0x01, 0xba, 0x01, 0xff, + 0xe5, 0x69, 0xe0, 0x01, 0x42, 0xb0, 0x01, 0x6a, 0xe0, 0x41, 0xe5, 0x52, + 0xe0, 0x01, 0x57, 0x8a, 0x07, 0x68, 0xe0, 0x41, 0x06, 0xf2, 0x04, 0x17, + 0x08, 0x35, 0x1d, 0x01, 0xff, 0x44, 0xf2, 0xe3, 0xd5, 0x04, 0x00, 0x46, + 0x0d, 0xd1, 0xa5, 0x04, 0x00, 0x46, 0xf9, 0xd5, 0xb5, 0x04, 0x40, 0xe1, + 0x30, 0x04, 0x80, 0xcf, 0x09, 0xa2, 0x93, 0x09, 0xa3, 0xde, 0x08, 0xa4, + 0x89, 0x08, 0xe5, 0x4d, 0x04, 0x80, 0x8e, 0x07, 0x44, 0xf2, 0xe4, 0x73, + 0x04, 0x00, 0xa7, 0xd4, 0x06, 0xa8, 0xaa, 0x06, 0xe9, 0x38, 0x04, 0x80, + 0xba, 0x05, 0x42, 0x18, 0x1e, 0x58, 0x04, 0x00, 0xab, 0xc1, 0x04, 0xac, + 0xa6, 0x04, 0x04, 0xc1, 0x16, 0x95, 0x04, 0xae, 0x80, 0x04, 0xef, 0x3e, + 0x04, 0x80, 0xe3, 0x03, 0xb0, 0xbe, 0x03, 0x42, 0x9d, 0x12, 0x1b, 0x05, + 0x00, 0xb2, 0x82, 0x03, 0xb3, 0x93, 0x02, 0xb4, 0xba, 0x01, 0xf5, 0x43, + 0x04, 0x80, 0x8b, 0x01, 0x42, 0x32, 0x00, 0x32, 0x04, 0x00, 0xb7, 0x79, + 0xb9, 0x46, 0xba, 0x01, 0xff, 0xe5, 0x37, 0x04, 0x80, 0x28, 0xa8, 0x01, + 0xff, 0xe5, 0x36, 0x04, 0x80, 0x06, 0x42, 0x15, 0x01, 0x85, 0xa6, 0x40, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xb7, 0x20, 0xc2, 0x04, 0x00, 0xa4, + 0x01, 0xff, 0x48, 0x07, 0x28, 0x97, 0x04, 0x00, 0x48, 0x1c, 0x21, 0xdd, + 0x04, 0x40, 0x07, 0x87, 0x06, 0x06, 0x44, 0x3e, 0xe6, 0x41, 0xa6, 0x40, + 0x48, 0x07, 0x28, 0x99, 0x04, 0x00, 0x48, 0x1c, 0x21, 0xdf, 0x04, 0x40, + 0xe1, 0x4f, 0x04, 0x80, 0x24, 0x43, 0x6d, 0x28, 0x4b, 0x04, 0x80, 0x0c, + 0xe9, 0x57, 0x04, 0x00, 0xee, 0x5f, 0xa6, 0x00, 0xf5, 0x4e, 0x04, 0x40, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x48, 0x97, 0x6e, 0x51, 0xa6, 0x00, 0x49, + 0x1b, 0x21, 0xf9, 0x04, 0x40, 0xe5, 0x19, 0x05, 0x00, 0xf4, 0x63, 0x04, + 0x40, 0xe5, 0x1d, 0x05, 0x00, 0x46, 0x75, 0xd2, 0x83, 0x1c, 0x40, 0x06, + 0x50, 0x00, 0x11, 0xeb, 0x79, 0x04, 0x80, 0x06, 0x4b, 0xcc, 0x97, 0x88, + 0x1c, 0x40, 0x4a, 0xf4, 0x95, 0x54, 0x04, 0x40, 0xa4, 0x06, 0x46, 0xed, + 0x69, 0xef, 0x04, 0x40, 0x48, 0x1c, 0x21, 0xf1, 0x04, 0x00, 0x4b, 0xd4, + 0x98, 0xf3, 0x04, 0x40, 0x04, 0x3e, 0x06, 0x40, 0x43, 0x21, 0x2c, 0x93, + 0xa6, 0x00, 0xe5, 0x42, 0x04, 0x80, 0x24, 0x4e, 0x93, 0x71, 0x85, 0x1c, + 0x00, 0xb3, 0x06, 0x42, 0x15, 0x01, 0x8d, 0xa6, 0x40, 0xe5, 0x46, 0x04, + 0x00, 0x42, 0xb0, 0x01, 0x5b, 0x04, 0x00, 0x42, 0xc7, 0x02, 0x91, 0xa6, + 0x00, 0x42, 0x15, 0x01, 0x8f, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, + 0x49, 0x06, 0x28, 0xad, 0x04, 0x00, 0x4b, 0x7f, 0x97, 0x8b, 0xa6, 0x40, + 0x49, 0x4b, 0xb0, 0x86, 0x1c, 0x00, 0x42, 0x77, 0x00, 0x84, 0x1c, 0x00, + 0x43, 0xb4, 0x2e, 0x87, 0x1c, 0x40, 0x44, 0x01, 0x75, 0xd9, 0x04, 0x80, + 0x5f, 0x4c, 0x07, 0x87, 0x8d, 0x04, 0x00, 0xa8, 0x27, 0x04, 0x52, 0x6a, + 0x0d, 0x49, 0x72, 0xb6, 0xaf, 0x04, 0xc0, 0x00, 0x4c, 0xdb, 0x25, 0xb1, + 0x04, 0x40, 0x42, 0x04, 0x00, 0x63, 0xa6, 0x00, 0xa5, 0x06, 0x44, 0xdb, + 0x02, 0x4c, 0x04, 0x40, 0xec, 0x65, 0xa6, 0x00, 0xed, 0x67, 0xa6, 0x40, + 0xe1, 0x48, 0x04, 0x00, 0x43, 0x29, 0x1e, 0x49, 0x04, 0x00, 0x42, 0x22, + 0x00, 0xbb, 0x04, 0x80, 0x19, 0x04, 0x5d, 0x30, 0x06, 0x42, 0x15, 0x01, + 0x97, 0xa6, 0x40, 0xe9, 0x39, 0x04, 0x80, 0x04, 0xf5, 0x5e, 0x04, 0x40, + 0x4a, 0x30, 0x9e, 0x8b, 0x04, 0x40, 0x4f, 0xae, 0x63, 0x27, 0x05, 0x40, + 0x4f, 0xbd, 0x63, 0xdb, 0x04, 0x40, 0x08, 0x1a, 0x13, 0x17, 0x42, 0x22, + 0x00, 0x17, 0x05, 0x00, 0x04, 0x23, 0x0a, 0x01, 0xff, 0x46, 0x90, 0xa6, + 0x7b, 0x04, 0x00, 0x45, 0x48, 0x15, 0x80, 0x1c, 0x40, 0x43, 0x0d, 0xe9, + 0x45, 0xa6, 0x00, 0x43, 0xfe, 0x57, 0x61, 0xa6, 0x00, 0x42, 0xbc, 0x48, + 0x55, 0xa6, 0x00, 0x42, 0x58, 0x07, 0x11, 0x05, 0x40, 0x47, 0x0a, 0xc0, + 0xcf, 0x04, 0x00, 0xe5, 0x3f, 0x04, 0x80, 0x06, 0x42, 0xdb, 0x02, 0x71, + 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x06, 0x28, 0x25, 0x05, + 0x00, 0x4b, 0x7f, 0x97, 0xa7, 0x04, 0x40, 0x4f, 0xbd, 0x63, 0xe7, 0x04, + 0x00, 0x44, 0x18, 0x75, 0x61, 0x04, 0x80, 0x04, 0xf4, 0x7f, 0x04, 0x40, + 0x4b, 0x5d, 0x90, 0x7d, 0x04, 0x40, 0x47, 0x3c, 0x03, 0x82, 0x1c, 0x00, + 0x4a, 0xaa, 0xa1, 0x4f, 0xa6, 0x00, 0x42, 0x18, 0x1e, 0x5a, 0x04, 0x40, + 0x47, 0xf8, 0x7e, 0x69, 0xa6, 0x00, 0x48, 0x8f, 0x8a, 0x4b, 0xa6, 0x40, + 0x42, 0x22, 0x00, 0x15, 0x05, 0x00, 0x49, 0xa5, 0x53, 0x67, 0x04, 0x00, + 0x42, 0x18, 0x1e, 0x59, 0x04, 0x00, 0x4d, 0xa8, 0x7f, 0x81, 0x1c, 0x40, + 0xe1, 0x3a, 0x04, 0x80, 0x4e, 0x4d, 0x82, 0x7c, 0xcc, 0x04, 0x00, 0x42, + 0x18, 0x1e, 0x5c, 0x04, 0x00, 0xaf, 0x06, 0x42, 0xdb, 0x02, 0x6f, 0x04, + 0x40, 0x03, 0x9b, 0xc7, 0x06, 0x43, 0xb4, 0x79, 0x81, 0x04, 0x40, 0xa4, + 0x1e, 0x43, 0x17, 0x1e, 0x09, 0x05, 0x00, 0x43, 0x9f, 0x7d, 0x0b, 0x05, + 0x00, 0x43, 0xc6, 0x95, 0x0d, 0x05, 0x00, 0x43, 0x88, 0xe9, 0x0f, 0x05, + 0x00, 0x43, 0xc7, 0xe9, 0x05, 0x05, 0x40, 0xe5, 0x01, 0x05, 0x00, 0x42, + 0x18, 0x1e, 0x03, 0x05, 0x00, 0x43, 0xc7, 0xe9, 0x07, 0x05, 0x40, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x49, 0x06, 0x28, 0x9b, 0x04, 0x00, 0x44, 0x04, + 0x0d, 0xc4, 0x04, 0x00, 0x46, 0x57, 0x04, 0x9f, 0x04, 0x00, 0x4f, 0xb3, + 0x2f, 0x9d, 0x04, 0x40, 0x06, 0x50, 0x00, 0x54, 0xe5, 0x35, 0x04, 0x80, + 0x3e, 0xef, 0x51, 0x04, 0x80, 0x0d, 0x46, 0x0d, 0xd7, 0x75, 0x04, 0xc0, + 0x00, 0x59, 0x6c, 0x20, 0x77, 0x04, 0x40, 0xb4, 0x01, 0xff, 0xe1, 0x47, + 0xa6, 0x00, 0x06, 0x2e, 0x2f, 0x01, 0xff, 0xe1, 0x57, 0xa6, 0x00, 0x47, + 0x73, 0xc5, 0x6d, 0x04, 0x00, 0x51, 0x9d, 0x53, 0x5d, 0xa6, 0x00, 0xe5, + 0x65, 0x04, 0x00, 0x4a, 0xa4, 0x53, 0x69, 0x04, 0x00, 0x43, 0xb4, 0x2e, + 0x53, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xb7, 0x20, 0xd7, + 0x04, 0x00, 0x45, 0x79, 0x20, 0x50, 0x04, 0x40, 0x49, 0x1b, 0x21, 0xe5, + 0x04, 0x00, 0x45, 0x79, 0x20, 0x5d, 0x04, 0x00, 0x46, 0xed, 0x69, 0xe3, + 0x04, 0x40, 0xe1, 0x45, 0x04, 0x80, 0x06, 0x42, 0x15, 0x01, 0x95, 0xa6, + 0x40, 0x06, 0x50, 0x00, 0x06, 0x47, 0x68, 0x8b, 0x4a, 0x04, 0x40, 0x49, + 0x06, 0x28, 0xb3, 0x04, 0x00, 0x44, 0x04, 0x0d, 0xfd, 0x04, 0x00, 0x46, + 0x57, 0x04, 0xff, 0x04, 0x40, 0x42, 0xb0, 0x01, 0x33, 0x04, 0x80, 0x06, + 0x42, 0x18, 0x1e, 0x53, 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, + 0x06, 0x28, 0xf7, 0x04, 0x00, 0x4b, 0x7f, 0x97, 0x95, 0x04, 0x00, 0x46, + 0x57, 0x04, 0x93, 0x04, 0x80, 0x06, 0x46, 0x98, 0x62, 0x91, 0x04, 0x40, + 0x49, 0x24, 0x21, 0xfb, 0x04, 0x40, 0x4f, 0xbd, 0x63, 0xed, 0x04, 0x00, + 0xe6, 0x44, 0x04, 0x00, 0xec, 0x3b, 0x04, 0x80, 0x49, 0xed, 0x3c, 0x04, + 0x80, 0x3e, 0xee, 0x3d, 0x04, 0x80, 0x16, 0xf2, 0x40, 0x04, 0x80, 0x0b, + 0xf3, 0x41, 0x04, 0xc0, 0x00, 0x4f, 0xae, 0x63, 0xab, 0x04, 0x40, 0x4a, + 0x3a, 0x9e, 0x8f, 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x06, + 0x28, 0xa3, 0x04, 0x00, 0x44, 0x04, 0x0d, 0xc8, 0x04, 0x00, 0x49, 0x1e, + 0x52, 0x29, 0x05, 0x00, 0x4b, 0x7f, 0x97, 0x23, 0x05, 0x00, 0x44, 0xae, + 0x15, 0xca, 0x04, 0x40, 0x4a, 0x30, 0x9e, 0xce, 0x04, 0x40, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x49, 0x06, 0x28, 0x2f, 0x05, 0x00, 0x44, 0x04, 0x0d, + 0x13, 0x05, 0x00, 0x4b, 0x7f, 0x97, 0x21, 0x05, 0x00, 0x44, 0xae, 0x15, + 0xc6, 0x04, 0x40, 0x43, 0x21, 0x2c, 0x2d, 0x05, 0x00, 0xe5, 0x34, 0x04, + 0x00, 0x42, 0x18, 0x1e, 0x52, 0x04, 0x80, 0x3b, 0x06, 0x3c, 0x01, 0x2d, + 0x42, 0x15, 0x01, 0x81, 0xa6, 0x00, 0xba, 0x01, 0xff, 0xe5, 0x55, 0x04, + 0x80, 0x19, 0x42, 0xb0, 0x01, 0x5f, 0x04, 0x00, 0x42, 0x15, 0x01, 0x83, + 0xa6, 0x00, 0xba, 0x01, 0xff, 0xe5, 0x89, 0xa6, 0x00, 0x42, 0xb0, 0x01, + 0x2b, 0x05, 0x40, 0x42, 0x13, 0x01, 0x43, 0xa6, 0x40, 0x4b, 0x95, 0x97, + 0x6d, 0xa6, 0x00, 0xef, 0x99, 0xa6, 0x40, 0x42, 0xd0, 0x0d, 0x49, 0xa6, + 0x40, 0x43, 0x21, 0x2c, 0x87, 0xa6, 0x00, 0x42, 0xb0, 0x01, 0x47, 0x04, + 0x80, 0x0c, 0x50, 0x9e, 0x53, 0x59, 0xa6, 0x00, 0x48, 0xb1, 0xc0, 0x9b, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, 0x06, 0x4f, 0xb3, 0x2f, - 0xb8, 0x04, 0x40, 0x48, 0x07, 0x28, 0xb6, 0x04, 0x00, 0x48, 0x1c, 0x21, - 0xf4, 0x04, 0x40, 0xa1, 0x24, 0xe5, 0x11, 0x04, 0x00, 0xa9, 0x12, 0x4a, - 0x3f, 0xa4, 0x5a, 0xa6, 0x00, 0x4a, 0xaf, 0xa7, 0x4c, 0xa6, 0x00, 0x57, - 0x8a, 0x07, 0x06, 0x04, 0x40, 0x45, 0x59, 0xc5, 0x6a, 0x04, 0x00, 0x49, - 0x84, 0x97, 0x6a, 0xa6, 0x40, 0x46, 0xe8, 0xc4, 0xe8, 0x04, 0x80, 0x06, - 0x48, 0xd5, 0xc0, 0xa0, 0x04, 0x40, 0x4f, 0xa8, 0x63, 0xea, 0x04, 0x40, - 0x06, 0x50, 0x00, 0x23, 0x09, 0xb0, 0xad, 0x06, 0x47, 0xa6, 0xc8, 0x1e, - 0x05, 0x40, 0x43, 0x21, 0x2c, 0xbc, 0x04, 0x80, 0x0c, 0x43, 0xf1, 0xe8, - 0xe0, 0x04, 0x00, 0x42, 0x22, 0x00, 0xa8, 0x04, 0x40, 0x4f, 0x99, 0x63, - 0xbe, 0x04, 0x40, 0x45, 0xb7, 0x20, 0xd0, 0x04, 0x00, 0x49, 0x1b, 0x21, - 0xd2, 0x04, 0x40, 0x0d, 0x4b, 0x7d, 0xbc, 0x03, 0x10, 0x19, 0x5f, 0x01, - 0xff, 0x90, 0x44, 0x91, 0x0d, 0x02, 0x73, 0xe8, 0x01, 0xff, 0xd1, 0xf1, - 0x2f, 0x01, 0xd2, 0xf2, 0x2f, 0x41, 0x90, 0x0f, 0x91, 0x01, 0xff, 0xd0, - 0xee, 0x2f, 0x01, 0xd2, 0xef, 0x2f, 0x01, 0xd4, 0xf0, 0x2f, 0x41, 0xd0, - 0xe5, 0x2f, 0x01, 0xd1, 0xe6, 0x2f, 0x01, 0xd2, 0xe7, 0x2f, 0x01, 0xd3, - 0xe8, 0x2f, 0x01, 0xd4, 0xe9, 0x2f, 0x01, 0xd5, 0xea, 0x2f, 0x01, 0xd7, - 0xeb, 0x2f, 0x01, 0xd8, 0xec, 0x2f, 0x01, 0xd9, 0xed, 0x2f, 0x41, 0x90, - 0xce, 0x02, 0x91, 0xaa, 0x02, 0x92, 0x87, 0x02, 0x93, 0xe4, 0x01, 0x94, - 0xc9, 0x01, 0x95, 0xa2, 0x01, 0x96, 0x7c, 0x97, 0x51, 0x98, 0x27, 0x99, - 0x01, 0xff, 0xd0, 0xdc, 0x2f, 0x01, 0xd1, 0xdd, 0x2f, 0x01, 0xd2, 0xde, - 0x2f, 0x01, 0xd4, 0xdf, 0x2f, 0x01, 0xd5, 0xe0, 0x2f, 0x01, 0xd6, 0xe1, - 0x2f, 0x01, 0xd7, 0xe2, 0x2f, 0x01, 0xd8, 0xe3, 0x2f, 0x01, 0xd9, 0xe4, - 0x2f, 0x41, 0xd0, 0xd2, 0x2f, 0x01, 0xd1, 0xd3, 0x2f, 0x01, 0xd2, 0xd4, - 0x2f, 0x01, 0xd3, 0xd5, 0x2f, 0x01, 0xd4, 0xd6, 0x2f, 0x01, 0xd5, 0xd7, - 0x2f, 0x01, 0xd6, 0xd8, 0x2f, 0x01, 0xd7, 0xd9, 0x2f, 0x01, 0xd8, 0xda, - 0x2f, 0x01, 0xd9, 0xdb, 0x2f, 0x41, 0xd0, 0xc8, 0x2f, 0x01, 0xd1, 0xc9, - 0x2f, 0x01, 0xd2, 0xca, 0x2f, 0x01, 0xd3, 0xcb, 0x2f, 0x01, 0xd4, 0xcc, - 0x2f, 0x01, 0xd5, 0xcd, 0x2f, 0x81, 0x0c, 0xd6, 0xcf, 0x2f, 0x01, 0xd8, - 0xd0, 0x2f, 0x01, 0xd9, 0xd1, 0x2f, 0x41, 0xe2, 0xce, 0x2f, 0x41, 0xd0, - 0xbf, 0x2f, 0x01, 0xd1, 0xc0, 0x2f, 0x01, 0xd2, 0xc1, 0x2f, 0x01, 0xd3, - 0xc2, 0x2f, 0x01, 0xd4, 0xc3, 0x2f, 0x01, 0xd6, 0xc4, 0x2f, 0x01, 0xd7, - 0xc5, 0x2f, 0x01, 0xd8, 0xc6, 0x2f, 0x01, 0xd9, 0xc7, 0x2f, 0x41, 0xd0, - 0xb6, 0x2f, 0x01, 0xd1, 0xb7, 0x2f, 0x01, 0xd2, 0xb8, 0x2f, 0x01, 0xd3, - 0xb9, 0x2f, 0x01, 0xd4, 0xba, 0x2f, 0x01, 0xd5, 0xbb, 0x2f, 0x01, 0xd6, - 0xbc, 0x2f, 0x01, 0xd8, 0xbd, 0x2f, 0x01, 0xd9, 0xbe, 0x2f, 0x41, 0xd0, - 0xb0, 0x2f, 0x01, 0xd1, 0xb1, 0x2f, 0x01, 0xd4, 0xb2, 0x2f, 0x01, 0xd6, - 0xb3, 0x2f, 0x01, 0xd7, 0xb4, 0x2f, 0x01, 0xd9, 0xb5, 0x2f, 0x41, 0xd0, - 0xa8, 0x2f, 0x01, 0xd3, 0xa9, 0x2f, 0x01, 0xd4, 0xaa, 0x2f, 0x01, 0xd5, - 0xab, 0x2f, 0x01, 0xd6, 0xac, 0x2f, 0x01, 0xd7, 0xad, 0x2f, 0x01, 0xd8, - 0xae, 0x2f, 0x01, 0xd9, 0xaf, 0x2f, 0x41, 0xd1, 0xa0, 0x2f, 0x01, 0xd3, - 0xa1, 0x2f, 0x01, 0xd4, 0xa2, 0x2f, 0x01, 0xd5, 0xa3, 0x2f, 0x01, 0xd6, - 0xa4, 0x2f, 0x01, 0xd7, 0xa5, 0x2f, 0x01, 0xd8, 0xa6, 0x2f, 0x01, 0xd9, - 0xa7, 0x2f, 0x41, 0xd0, 0x98, 0x2f, 0x01, 0xd1, 0x99, 0x2f, 0x01, 0xd2, - 0x9a, 0x2f, 0x81, 0x10, 0xd3, 0x9c, 0x2f, 0x01, 0xd5, 0x9d, 0x2f, 0x01, - 0xd7, 0x9e, 0x2f, 0x01, 0xd9, 0x9f, 0x2f, 0x41, 0xe2, 0x9b, 0x2f, 0x41, - 0xd1, 0x90, 0x2f, 0x01, 0xd2, 0x91, 0x2f, 0x01, 0xd4, 0x92, 0x2f, 0x01, - 0xd5, 0x93, 0x2f, 0x01, 0xd6, 0x94, 0x2f, 0x01, 0xd7, 0x95, 0x2f, 0x01, - 0xd8, 0x96, 0x2f, 0x01, 0xd9, 0x97, 0x2f, 0x41, 0xe1, 0x00, 0x08, 0x01, - 0xe5, 0x01, 0x08, 0x01, 0xe9, 0x02, 0x08, 0x01, 0xaa, 0xe3, 0x01, 0xab, - 0xcc, 0x01, 0xac, 0xb5, 0x01, 0xad, 0x9e, 0x01, 0xae, 0x87, 0x01, 0xef, - 0x03, 0x08, 0x01, 0xb0, 0x6d, 0xb2, 0x57, 0xb3, 0x41, 0xb4, 0x2b, 0xf5, - 0x04, 0x08, 0x01, 0xb7, 0x15, 0xb8, 0x0b, 0xba, 0x01, 0xff, 0xe1, 0x3c, - 0x08, 0x01, 0xef, 0x3f, 0x08, 0x41, 0xe1, 0x37, 0x08, 0x01, 0xe5, 0x38, - 0x08, 0x41, 0xe1, 0x32, 0x08, 0x01, 0xe5, 0x33, 0x08, 0x01, 0xe9, 0x34, - 0x08, 0x01, 0xef, 0x35, 0x08, 0x41, 0xe1, 0x2d, 0x08, 0x01, 0xe5, 0x2e, - 0x08, 0x01, 0xe9, 0x2f, 0x08, 0x01, 0xef, 0x30, 0x08, 0x01, 0xf5, 0x31, - 0x08, 0x41, 0xe1, 0x28, 0x08, 0x01, 0xe5, 0x29, 0x08, 0x01, 0xe9, 0x2a, - 0x08, 0x01, 0xef, 0x2b, 0x08, 0x01, 0xf5, 0x2c, 0x08, 0x41, 0xe1, 0x23, - 0x08, 0x01, 0xe5, 0x24, 0x08, 0x01, 0xe9, 0x25, 0x08, 0x01, 0xef, 0x26, - 0x08, 0x01, 0xf5, 0x27, 0x08, 0x41, 0xe1, 0x1e, 0x08, 0x01, 0xe5, 0x1f, - 0x08, 0x01, 0xe9, 0x20, 0x08, 0x01, 0xef, 0x21, 0x08, 0x01, 0xf5, 0x22, - 0x08, 0x41, 0xe1, 0x19, 0x08, 0x01, 0xe5, 0x1a, 0x08, 0x01, 0xe9, 0x1b, - 0x08, 0x01, 0xef, 0x1c, 0x08, 0x01, 0xf5, 0x1d, 0x08, 0x41, 0xe1, 0x14, - 0x08, 0x01, 0xe5, 0x15, 0x08, 0x01, 0xe9, 0x16, 0x08, 0x01, 0xef, 0x17, - 0x08, 0x01, 0xf5, 0x18, 0x08, 0x41, 0xe1, 0x0f, 0x08, 0x01, 0xe5, 0x10, - 0x08, 0x01, 0xe9, 0x11, 0x08, 0x01, 0xef, 0x12, 0x08, 0x01, 0xf5, 0x13, - 0x08, 0x41, 0xe1, 0x0a, 0x08, 0x01, 0xe5, 0x0b, 0x08, 0x01, 0xe9, 0x0c, - 0x08, 0x01, 0xef, 0x0d, 0x08, 0x01, 0xf5, 0x0e, 0x08, 0x41, 0xe1, 0x05, - 0x08, 0x01, 0xef, 0x08, 0x08, 0x41, 0x47, 0x5d, 0xae, 0x1b, 0x22, 0x00, - 0x46, 0x79, 0xd0, 0x52, 0xf9, 0x01, 0x08, 0xc5, 0xbe, 0x80, 0x01, 0xb0, - 0x64, 0xb2, 0x16, 0x02, 0x60, 0x01, 0x06, 0x49, 0xf3, 0xb5, 0x69, 0xf9, - 0x41, 0x43, 0xaa, 0x01, 0x6e, 0xf3, 0x01, 0x43, 0xa7, 0x60, 0xc3, 0xf6, - 0x41, 0xac, 0x1e, 0xb2, 0x06, 0x60, 0xec, 0x0e, 0x61, 0x27, 0x40, 0x05, - 0x88, 0x3c, 0x06, 0x4a, 0xd9, 0xaa, 0x5b, 0xf3, 0x41, 0x48, 0x5d, 0xbc, - 0xb1, 0xf4, 0x01, 0x44, 0xdb, 0x02, 0xa4, 0x00, 0x40, 0x49, 0x3d, 0xb1, - 0x4c, 0xf9, 0x01, 0x02, 0x09, 0x00, 0x01, 0xff, 0x51, 0x11, 0x53, 0xaa, - 0x23, 0x00, 0x02, 0x13, 0x01, 0x01, 0xff, 0x06, 0xab, 0x1f, 0x06, 0x42, - 0x1f, 0x00, 0xb0, 0x27, 0x40, 0x43, 0x1a, 0x00, 0xcf, 0x22, 0x00, 0x42, - 0x0c, 0x00, 0xce, 0x22, 0x40, 0x80, 0x0c, 0x44, 0x18, 0x29, 0xc1, 0xf9, - 0x01, 0x43, 0xeb, 0x5f, 0xe0, 0x2b, 0x40, 0x4f, 0xd9, 0x59, 0xfe, 0x26, - 0x00, 0x4a, 0xa7, 0xaa, 0x64, 0xf9, 0x41, 0x0d, 0x46, 0x7f, 0xf5, 0x37, - 0x11, 0x73, 0x57, 0xce, 0x37, 0x05, 0xdb, 0x02, 0x01, 0xff, 0xe1, 0x00, - 0x20, 0x81, 0xf3, 0x33, 0xa2, 0xcc, 0x32, 0xa4, 0x96, 0x2e, 0xe5, 0x8a, - 0x20, 0x81, 0x9a, 0x2b, 0xa7, 0xdc, 0x23, 0xa8, 0xbd, 0x22, 0xe9, 0x3f, - 0x21, 0x81, 0xae, 0x21, 0xab, 0xad, 0x1c, 0xac, 0x86, 0x13, 0xad, 0xab, - 0x11, 0xae, 0xaa, 0x0d, 0xb0, 0xa0, 0x0c, 0xb2, 0x8c, 0x0c, 0xb3, 0x95, - 0x07, 0xb4, 0xb2, 0x05, 0xf5, 0x0b, 0x23, 0x81, 0x77, 0xba, 0x01, 0xff, - 0xe1, 0x5d, 0x23, 0x81, 0x53, 0x42, 0x62, 0x93, 0x62, 0x23, 0x01, 0xe9, - 0x63, 0x23, 0x81, 0x29, 0xf5, 0x6a, 0x23, 0xc1, 0x00, 0x51, 0x8a, 0x51, - 0x42, 0x25, 0x01, 0xd5, 0x6b, 0x23, 0x81, 0x0a, 0x43, 0xf2, 0x31, 0x6d, - 0x23, 0x01, 0xed, 0x6e, 0x23, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, - 0x6c, 0x23, 0x01, 0x4f, 0xcc, 0x6c, 0x43, 0x25, 0x41, 0x48, 0xad, 0xb8, - 0x64, 0x23, 0x01, 0xd3, 0x65, 0x23, 0x01, 0xe2, 0x66, 0x23, 0x81, 0x0a, - 0xe7, 0x68, 0x23, 0x01, 0x42, 0x34, 0xe8, 0x69, 0x23, 0x41, 0x4a, 0x5f, - 0x9d, 0x67, 0x23, 0x41, 0x80, 0x0e, 0xd7, 0x41, 0x25, 0x01, 0xe7, 0x60, - 0x23, 0x01, 0x42, 0x79, 0xe9, 0x61, 0x23, 0x41, 0x51, 0x0c, 0x58, 0x5f, - 0x23, 0x01, 0x44, 0x85, 0x5a, 0x5e, 0x23, 0x41, 0x80, 0x8c, 0x04, 0xd2, - 0x11, 0x23, 0x01, 0xe2, 0x12, 0x23, 0x01, 0xe4, 0x13, 0x23, 0x81, 0xbf, - 0x03, 0xed, 0x1d, 0x23, 0x81, 0xfa, 0x02, 0xee, 0x26, 0x23, 0x81, 0xee, - 0x02, 0xf2, 0x28, 0x23, 0x81, 0x46, 0x42, 0xa4, 0x02, 0x51, 0x23, 0x81, - 0x18, 0x44, 0x92, 0xe7, 0x59, 0x23, 0x01, 0xba, 0x01, 0xff, 0xd3, 0x5a, - 0x23, 0x81, 0x04, 0xf5, 0x5c, 0x23, 0x41, 0x4d, 0xb9, 0x78, 0x5b, 0x23, - 0x41, 0x07, 0x27, 0x02, 0x0e, 0xd2, 0x57, 0x23, 0x01, 0x43, 0x78, 0xe9, - 0x58, 0x23, 0x01, 0xf8, 0x56, 0x23, 0x41, 0xe1, 0x52, 0x23, 0x01, 0x42, - 0x55, 0x03, 0x53, 0x23, 0x81, 0x06, 0x44, 0xf0, 0x3f, 0x55, 0x23, 0x41, - 0xf2, 0x54, 0x23, 0x41, 0x80, 0x94, 0x02, 0xd2, 0x2b, 0x23, 0x81, 0xc1, - 0x01, 0xd4, 0x34, 0x23, 0x01, 0xe9, 0x35, 0x23, 0x81, 0xb3, 0x01, 0xf5, - 0x37, 0x23, 0xc1, 0x00, 0x07, 0x27, 0x02, 0x0d, 0x42, 0x68, 0x0f, 0x4f, - 0x23, 0xc1, 0x00, 0x48, 0x27, 0x02, 0x50, 0x23, 0x41, 0xe1, 0x38, 0x23, - 0x81, 0x91, 0x01, 0x43, 0x16, 0x00, 0x3a, 0x23, 0x01, 0xa4, 0x7d, 0xa7, - 0x64, 0x42, 0x22, 0x00, 0x41, 0x23, 0x01, 0xa9, 0x4c, 0x42, 0x45, 0x00, - 0x45, 0x23, 0x01, 0xac, 0x33, 0x43, 0x25, 0x12, 0x47, 0x23, 0x01, 0x42, - 0xc1, 0x08, 0x48, 0x23, 0x01, 0xb3, 0x19, 0x42, 0x5c, 0x01, 0x4b, 0x23, - 0x01, 0xb5, 0x01, 0xff, 0x49, 0x8b, 0xab, 0x4c, 0x23, 0x01, 0xe4, 0x4d, - 0x23, 0x01, 0x44, 0xe4, 0xc1, 0x4e, 0x23, 0x41, 0x42, 0xb0, 0x01, 0x49, - 0x23, 0x01, 0x43, 0x37, 0x63, 0x4a, 0x23, 0x41, 0x46, 0x5f, 0xcf, 0x3f, - 0x25, 0x01, 0xb5, 0x01, 0xff, 0xd3, 0x40, 0x25, 0x01, 0xed, 0x46, 0x23, - 0x41, 0x42, 0xf6, 0x05, 0x42, 0x23, 0x01, 0xed, 0x43, 0x23, 0x01, 0x42, - 0xa4, 0x02, 0x44, 0x23, 0x41, 0xe1, 0x3c, 0x23, 0x81, 0x04, 0xf5, 0x40, - 0x23, 0x41, 0xec, 0x3d, 0x23, 0x01, 0x47, 0x92, 0x5a, 0x3e, 0x23, 0x01, - 0xf2, 0x3f, 0x23, 0x41, 0x44, 0x12, 0xe4, 0x3e, 0x25, 0x01, 0x42, 0x24, - 0x0a, 0x3b, 0x23, 0x41, 0x45, 0xa8, 0xcf, 0x39, 0x23, 0x41, 0xd3, 0x36, - 0x23, 0x41, 0x80, 0x01, 0xff, 0x48, 0xc2, 0x20, 0x3c, 0x25, 0x01, 0x06, - 0x28, 0x02, 0x01, 0xff, 0xa1, 0x29, 0x42, 0x22, 0x00, 0x2f, 0x23, 0x01, - 0x43, 0x40, 0x20, 0x30, 0x23, 0x01, 0xb5, 0x01, 0xff, 0xd2, 0x31, 0x23, - 0x81, 0x04, 0xe4, 0x3d, 0x25, 0x41, 0x06, 0x70, 0x25, 0x01, 0xff, 0x43, - 0x50, 0x03, 0x32, 0x23, 0x01, 0x42, 0xea, 0x05, 0x33, 0x23, 0x41, 0x06, - 0x70, 0x25, 0x04, 0xec, 0x2e, 0x23, 0x41, 0x42, 0x22, 0x00, 0x2c, 0x23, - 0x01, 0x42, 0x2f, 0x04, 0x2d, 0x23, 0x41, 0x4b, 0x86, 0x92, 0x29, 0x23, - 0x01, 0x47, 0x52, 0x75, 0x2a, 0x23, 0x41, 0x45, 0x27, 0x3b, 0x27, 0x23, - 0x41, 0x07, 0x27, 0x02, 0x1e, 0x43, 0x54, 0x14, 0x22, 0x23, 0x01, 0x42, - 0x9f, 0x03, 0x23, 0x23, 0xc1, 0x00, 0x07, 0x27, 0x02, 0x01, 0xff, 0x46, - 0x1b, 0x02, 0x24, 0x23, 0x01, 0x42, 0xc1, 0x08, 0x25, 0x23, 0x41, 0x45, - 0x22, 0x02, 0x1e, 0x23, 0x01, 0x42, 0x2a, 0x02, 0x98, 0x23, 0x81, 0x0a, - 0x44, 0xa1, 0x51, 0x20, 0x23, 0x01, 0xf5, 0x21, 0x23, 0x41, 0x48, 0x2c, - 0x52, 0x1f, 0x23, 0x41, 0x80, 0x06, 0x42, 0x2a, 0x0d, 0x1c, 0x23, 0x41, - 0x44, 0x28, 0x3b, 0x19, 0x23, 0x01, 0x46, 0x07, 0xd3, 0x14, 0x23, 0x01, - 0x47, 0x52, 0x75, 0x1a, 0x23, 0x81, 0x1e, 0x06, 0x28, 0x02, 0x01, 0xff, - 0x43, 0x23, 0x6a, 0x15, 0x23, 0x01, 0x42, 0x7d, 0x02, 0x16, 0x23, 0x01, - 0x4f, 0x44, 0x6d, 0x17, 0x23, 0xc1, 0x00, 0x45, 0x27, 0x3b, 0x18, 0x23, - 0x41, 0x4a, 0x05, 0x95, 0x1b, 0x23, 0x41, 0x43, 0x15, 0x74, 0x0c, 0x23, - 0x01, 0x07, 0xdd, 0x1f, 0x0b, 0xf5, 0x99, 0x23, 0xc1, 0x00, 0x42, 0x2d, - 0x02, 0x0d, 0x23, 0x41, 0x57, 0x81, 0x2c, 0x0e, 0x23, 0x01, 0x4c, 0xb4, - 0x8d, 0x0f, 0x23, 0x01, 0x5a, 0xd2, 0x1f, 0x10, 0x23, 0x41, 0xe1, 0xeb, - 0x22, 0x81, 0x69, 0xe5, 0xfc, 0x22, 0x81, 0x5e, 0xe9, 0xfe, 0x22, 0x81, - 0x30, 0xf5, 0x05, 0x23, 0xc1, 0x00, 0x42, 0x2b, 0x0d, 0x06, 0x23, 0x01, - 0xeb, 0x07, 0x23, 0x01, 0xed, 0x08, 0x23, 0x81, 0x0b, 0xf2, 0x09, 0x23, - 0xc1, 0x00, 0x54, 0x30, 0x3b, 0x0a, 0x23, 0x41, 0x07, 0x27, 0x02, 0x01, - 0xff, 0x49, 0x90, 0x5a, 0x3a, 0x25, 0x01, 0x4a, 0xcc, 0x6c, 0x3b, 0x25, - 0x41, 0x45, 0x84, 0x5a, 0xff, 0x22, 0x01, 0xd2, 0x97, 0x23, 0x01, 0xec, - 0x00, 0x23, 0x01, 0xf2, 0x01, 0x23, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x48, - 0xcd, 0xbf, 0x03, 0x23, 0x81, 0x06, 0x4a, 0xea, 0x3f, 0x02, 0x23, 0x41, - 0x5a, 0x10, 0x1c, 0x04, 0x23, 0x41, 0x45, 0x27, 0x3b, 0xfd, 0x22, 0x41, - 0x80, 0x53, 0xe2, 0xf0, 0x22, 0x81, 0x3f, 0xe7, 0xf3, 0x22, 0x81, 0x11, - 0x42, 0xf2, 0x3f, 0xfa, 0x22, 0x81, 0x04, 0xf2, 0xfb, 0x22, 0x41, 0x49, - 0xa6, 0xab, 0x39, 0x25, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x42, 0xea, - 0x05, 0xf4, 0x22, 0x01, 0x43, 0x15, 0x74, 0xf5, 0x22, 0x01, 0x02, 0xa4, - 0x02, 0x0c, 0x44, 0x29, 0x0d, 0xf8, 0x22, 0x01, 0x42, 0x2c, 0x0b, 0xf9, - 0x22, 0x41, 0xe5, 0xf6, 0x22, 0x01, 0xf5, 0xf7, 0x22, 0x41, 0x80, 0x01, - 0xff, 0x62, 0x36, 0x0b, 0xf1, 0x22, 0x01, 0x47, 0xdb, 0x04, 0xf2, 0x22, - 0x41, 0x48, 0x94, 0x0b, 0xec, 0x22, 0x01, 0x44, 0x28, 0x3b, 0xef, 0x22, - 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0x42, 0x49, 0x00, 0xed, 0x22, 0x01, - 0x42, 0x7d, 0x02, 0xee, 0x22, 0x41, 0xe1, 0x93, 0x22, 0x81, 0xb3, 0x03, - 0xa8, 0x5d, 0xe9, 0xdb, 0x22, 0x81, 0x2e, 0xf5, 0xe2, 0x22, 0xc1, 0x00, - 0x48, 0xb7, 0x8d, 0xe3, 0x22, 0x01, 0xe4, 0xe4, 0x22, 0x81, 0x1a, 0x43, - 0x41, 0x00, 0xe6, 0x22, 0x01, 0xed, 0xe7, 0x22, 0x81, 0x09, 0xf2, 0xe9, - 0x22, 0xc1, 0x00, 0xd9, 0xea, 0x22, 0x41, 0x43, 0x50, 0x03, 0xe8, 0x22, - 0x41, 0xd2, 0xe5, 0x22, 0x41, 0x80, 0x1c, 0xe7, 0xdd, 0x22, 0x81, 0x0c, - 0x42, 0xa9, 0xa3, 0xe0, 0x22, 0x01, 0x43, 0x22, 0xe0, 0xe1, 0x22, 0x41, - 0xd4, 0xde, 0x22, 0xc1, 0x00, 0x4f, 0x30, 0x63, 0xdf, 0x22, 0x41, 0x44, - 0x28, 0x3b, 0xdc, 0x22, 0x01, 0x4a, 0xea, 0x3f, 0x38, 0x25, 0x41, 0xe1, - 0xad, 0x22, 0x81, 0x80, 0x02, 0xe5, 0xba, 0x22, 0x81, 0xaa, 0x01, 0xa9, - 0x27, 0xf5, 0xd7, 0x22, 0xc1, 0x00, 0x52, 0xd3, 0x49, 0xd8, 0x22, 0x01, - 0xd2, 0xd9, 0x22, 0x81, 0x06, 0x43, 0xf2, 0x31, 0xda, 0x22, 0x41, 0x06, - 0x70, 0x25, 0x01, 0xff, 0x4c, 0xc4, 0x86, 0x36, 0x25, 0x01, 0x4b, 0x62, - 0x93, 0x37, 0x25, 0x41, 0xe4, 0xc3, 0x22, 0x81, 0x6d, 0xed, 0xc6, 0x22, - 0x81, 0x20, 0x43, 0x87, 0x30, 0xd2, 0x22, 0x01, 0xf2, 0xd3, 0x22, 0x81, - 0x06, 0x42, 0x12, 0x00, 0xd6, 0x22, 0x41, 0x80, 0x01, 0xff, 0x56, 0xfe, - 0x31, 0xd5, 0x22, 0x01, 0x44, 0x85, 0x5a, 0xd4, 0x22, 0x41, 0x07, 0x27, - 0x02, 0x01, 0xff, 0xe1, 0xc7, 0x22, 0x01, 0xa2, 0x31, 0x43, 0x09, 0x05, - 0xca, 0x22, 0x01, 0x43, 0x1e, 0x1c, 0xcb, 0x22, 0x01, 0x43, 0xf5, 0x05, - 0xcc, 0x22, 0x81, 0x18, 0x46, 0x07, 0xd3, 0xce, 0x22, 0x01, 0x43, 0x3f, - 0xe9, 0xcf, 0x22, 0x01, 0x43, 0x88, 0xad, 0xd0, 0x22, 0x01, 0x43, 0xbd, - 0x0b, 0xd1, 0x22, 0x41, 0x45, 0x27, 0x3b, 0xcd, 0x22, 0x41, 0x42, 0x13, - 0x00, 0xc8, 0x22, 0x01, 0x44, 0x96, 0x8f, 0xc9, 0x22, 0x41, 0x07, 0x27, - 0x02, 0x01, 0xff, 0xe1, 0xc4, 0x22, 0x01, 0x42, 0x29, 0x02, 0xc5, 0x22, - 0x41, 0x80, 0x1b, 0x42, 0xe6, 0xe9, 0xbe, 0x22, 0x01, 0xee, 0xbf, 0x22, - 0x01, 0x42, 0xa4, 0x02, 0xc0, 0x22, 0xc1, 0x00, 0xd2, 0xc1, 0x22, 0x01, - 0x43, 0xb0, 0x00, 0xc2, 0x22, 0x41, 0x42, 0x41, 0x00, 0xbb, 0x22, 0x01, - 0x48, 0xc5, 0xbf, 0x32, 0x25, 0x81, 0x17, 0x05, 0x71, 0x25, 0x01, 0xff, - 0x44, 0x5a, 0xe5, 0x33, 0x25, 0x01, 0x44, 0x46, 0xe6, 0x34, 0x25, 0x01, - 0x43, 0x69, 0x46, 0x35, 0x25, 0x41, 0x80, 0x01, 0xff, 0x59, 0x11, 0x1c, - 0xbc, 0x22, 0x01, 0x59, 0x8c, 0x23, 0xbd, 0x22, 0x41, 0xd3, 0xae, 0x22, - 0x81, 0x17, 0xd6, 0xb7, 0x22, 0x81, 0x0c, 0x42, 0x8c, 0xe8, 0xb8, 0x22, - 0x01, 0x42, 0xee, 0x3d, 0xb9, 0x22, 0x41, 0x45, 0x84, 0x5a, 0x31, 0x25, - 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, 0xaf, 0x22, 0x01, 0x43, 0x23, - 0x6a, 0xb0, 0x22, 0x01, 0x44, 0xe5, 0x3f, 0xb1, 0x22, 0x01, 0x42, 0xd2, - 0x04, 0xb2, 0x22, 0x01, 0x44, 0xa9, 0x60, 0xb3, 0x22, 0x01, 0x43, 0x5c, - 0x01, 0xb4, 0x22, 0x01, 0xf5, 0xb5, 0x22, 0xc1, 0x00, 0x47, 0x70, 0x25, - 0xb6, 0x22, 0x41, 0xe7, 0x95, 0x22, 0x81, 0x15, 0xec, 0xa9, 0x22, 0x81, - 0x0a, 0x44, 0x66, 0xe6, 0xab, 0x22, 0x01, 0xf2, 0xac, 0x22, 0x41, 0x51, - 0x68, 0x51, 0xaa, 0x22, 0x41, 0x80, 0x01, 0xff, 0x44, 0x28, 0x3b, 0xa8, - 0x22, 0x81, 0x90, 0x01, 0x47, 0x7e, 0xb8, 0x94, 0x22, 0x01, 0x48, 0xbd, - 0xbf, 0xa7, 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, 0x96, 0x22, - 0x01, 0x42, 0x6c, 0x02, 0x97, 0x22, 0x81, 0x70, 0x42, 0x92, 0x01, 0x2e, - 0x25, 0x01, 0x42, 0x22, 0x00, 0x99, 0x22, 0x01, 0x48, 0x82, 0x63, 0x96, - 0x23, 0x01, 0xab, 0x50, 0x43, 0x7f, 0xab, 0x9c, 0x22, 0x01, 0x42, 0x7d, - 0x02, 0x9d, 0x22, 0x01, 0x43, 0x40, 0x20, 0x9e, 0x22, 0x01, 0xb3, 0x27, - 0x02, 0x12, 0x00, 0x19, 0xb5, 0x01, 0xff, 0xd2, 0xa2, 0x22, 0x01, 0xe2, - 0xa3, 0x22, 0x01, 0xed, 0xa4, 0x22, 0x01, 0xf2, 0xa5, 0x22, 0x01, 0x42, - 0xa4, 0x02, 0xa6, 0x22, 0x41, 0xe2, 0xa1, 0x22, 0x01, 0x42, 0xf2, 0x3f, - 0x30, 0x25, 0x41, 0x42, 0x13, 0x00, 0x9f, 0x22, 0x01, 0xa8, 0x01, 0xff, - 0x49, 0xbe, 0xae, 0x2f, 0x25, 0x01, 0x42, 0x03, 0x00, 0xa0, 0x22, 0x41, - 0x42, 0x6d, 0x00, 0x9a, 0x22, 0x01, 0x42, 0x42, 0x00, 0x9b, 0x22, 0x41, - 0xe2, 0x98, 0x22, 0x41, 0x49, 0xe5, 0xab, 0x2d, 0x25, 0x41, 0xe1, 0x8f, - 0x22, 0x81, 0x08, 0xe9, 0x91, 0x22, 0x01, 0xf5, 0x92, 0x22, 0x41, 0xe2, - 0x90, 0x22, 0x41, 0xe1, 0x7a, 0x22, 0x81, 0x76, 0x44, 0x6a, 0x6e, 0x7e, - 0x22, 0x81, 0x69, 0xe9, 0x7f, 0x22, 0xc1, 0x00, 0x80, 0x2e, 0xb2, 0x01, - 0xff, 0xd2, 0x95, 0x23, 0x01, 0x42, 0x3f, 0x00, 0x8a, 0x22, 0xc1, 0x00, - 0x80, 0x01, 0xff, 0x4e, 0xa0, 0x73, 0x8e, 0x22, 0x01, 0x06, 0x28, 0x02, - 0x01, 0xff, 0x43, 0x1e, 0x02, 0x8b, 0x22, 0x01, 0x42, 0x2c, 0x0b, 0x8c, - 0x22, 0x01, 0x42, 0x59, 0x00, 0x8d, 0x22, 0x41, 0x4b, 0x7b, 0x92, 0x89, - 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, 0x80, 0x22, 0x81, 0x20, - 0xa2, 0x16, 0xe5, 0x84, 0x22, 0x01, 0xe9, 0x85, 0x22, 0x81, 0x09, 0xf5, - 0x87, 0x22, 0xc1, 0x00, 0xd2, 0x88, 0x22, 0x41, 0xe2, 0x86, 0x22, 0x41, - 0xe9, 0x82, 0x22, 0x01, 0xf5, 0x83, 0x22, 0x41, 0xe2, 0x81, 0x22, 0x41, - 0x49, 0x93, 0x0b, 0x94, 0x23, 0x41, 0xe4, 0x7b, 0x22, 0x01, 0xee, 0x7c, - 0x22, 0x01, 0xf0, 0x7d, 0x22, 0x41, 0xe1, 0x3e, 0x22, 0x81, 0xc2, 0x03, - 0xe5, 0x48, 0x22, 0x81, 0xa4, 0x03, 0xe9, 0x4c, 0x22, 0x81, 0xbc, 0x01, - 0xf5, 0x61, 0x22, 0xc1, 0x00, 0x42, 0xef, 0x31, 0x62, 0x22, 0x81, 0x9a, - 0x01, 0xee, 0x63, 0x22, 0xc1, 0x00, 0x80, 0x57, 0x42, 0x04, 0x4d, 0x6d, - 0x22, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x0a, 0xc7, 0x9e, 0x0d, 0x4f, 0x49, - 0x68, 0x78, 0x22, 0xc1, 0x00, 0x42, 0x2d, 0x02, 0x79, 0x22, 0x41, 0x46, - 0xa7, 0xcf, 0x6e, 0x22, 0x01, 0x42, 0xea, 0x05, 0x6f, 0x22, 0x01, 0x43, - 0xc4, 0x86, 0x70, 0x22, 0x01, 0x43, 0x15, 0x74, 0x71, 0x22, 0x01, 0x48, - 0x82, 0x63, 0x72, 0x22, 0x01, 0x44, 0xae, 0xe5, 0x73, 0x22, 0x01, 0x42, - 0x74, 0x00, 0x74, 0x22, 0x01, 0x42, 0xd2, 0x04, 0x75, 0x22, 0x01, 0x45, - 0x20, 0xe0, 0x76, 0x22, 0x01, 0x42, 0xab, 0x60, 0x77, 0x22, 0x41, 0x4c, - 0x34, 0x86, 0x6b, 0x22, 0x81, 0x2f, 0x0c, 0x44, 0x20, 0x0c, 0x48, 0x3b, - 0x20, 0x6a, 0x22, 0x01, 0x44, 0x85, 0x5a, 0x69, 0x22, 0x41, 0x43, 0x1e, - 0x1c, 0x64, 0x22, 0x01, 0x44, 0x91, 0x05, 0x65, 0x22, 0x01, 0x43, 0xbd, - 0x0b, 0x66, 0x22, 0x81, 0x06, 0x43, 0xcb, 0x7a, 0x68, 0x22, 0x41, 0x59, - 0x3a, 0x20, 0x67, 0x22, 0x41, 0x51, 0x79, 0x51, 0x6c, 0x22, 0x41, 0x80, - 0x01, 0xff, 0x56, 0xe8, 0x31, 0xd5, 0x22, 0x01, 0x56, 0x5d, 0x29, 0x93, - 0x23, 0x01, 0x44, 0x85, 0x5a, 0xd4, 0x22, 0x41, 0x48, 0xe7, 0x8f, 0x4d, - 0x22, 0x01, 0xd2, 0x4e, 0x22, 0x01, 0xed, 0x4f, 0x22, 0x81, 0xc1, 0x01, - 0xee, 0x8f, 0x23, 0x81, 0x06, 0x43, 0x69, 0x81, 0x60, 0x22, 0x41, 0xd9, - 0x90, 0x23, 0x01, 0x43, 0xe5, 0xe8, 0x52, 0x22, 0xc1, 0x00, 0x07, 0x27, - 0x02, 0x01, 0xff, 0xa1, 0x92, 0x01, 0x43, 0xb5, 0x1a, 0x91, 0x23, 0x01, - 0x48, 0x75, 0xbb, 0x22, 0x25, 0x01, 0xa7, 0x6e, 0x42, 0x49, 0x00, 0x25, - 0x25, 0x01, 0x45, 0x0a, 0xdd, 0x26, 0x25, 0x01, 0x47, 0x75, 0xc8, 0x27, - 0x25, 0x01, 0xad, 0x4e, 0xae, 0x42, 0x4c, 0x12, 0x39, 0x29, 0x25, 0x01, - 0x43, 0x93, 0x05, 0x5a, 0x22, 0x81, 0x1d, 0xf5, 0x2a, 0x25, 0xc1, 0x00, - 0x47, 0x45, 0x6d, 0x2b, 0x25, 0x01, 0x4a, 0x6d, 0x9e, 0x5e, 0x22, 0x01, - 0x44, 0xe4, 0xc1, 0x2c, 0x25, 0x01, 0x42, 0xa4, 0x02, 0x5f, 0x22, 0x41, - 0x07, 0x70, 0x25, 0x01, 0xff, 0x43, 0x19, 0x00, 0x5b, 0x22, 0x01, 0x42, - 0xa4, 0x02, 0x5c, 0x22, 0xc1, 0x00, 0x49, 0x95, 0x47, 0x5d, 0x22, 0x41, - 0xe5, 0x58, 0x22, 0x01, 0x42, 0x24, 0x0a, 0x59, 0x22, 0x41, 0x43, 0x50, - 0x03, 0x28, 0x25, 0x01, 0x50, 0x49, 0x5c, 0x57, 0x22, 0x41, 0xe9, 0x92, - 0x23, 0x81, 0x0b, 0xb5, 0x01, 0xff, 0xe4, 0x56, 0x22, 0x01, 0xec, 0x24, - 0x25, 0x41, 0x42, 0xa4, 0x02, 0x23, 0x25, 0x41, 0xee, 0x53, 0x22, 0x01, - 0x42, 0xa4, 0x02, 0x54, 0x22, 0xc1, 0x00, 0x49, 0x95, 0x47, 0x55, 0x22, - 0x41, 0x09, 0xf0, 0x3d, 0x01, 0xff, 0x47, 0x92, 0x5a, 0x50, 0x22, 0x01, - 0x50, 0xd9, 0x5f, 0x51, 0x22, 0x41, 0x80, 0x01, 0xff, 0x47, 0x52, 0x75, - 0x4b, 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, 0x49, 0x22, 0x01, - 0x42, 0x2c, 0x0b, 0x4a, 0x22, 0x41, 0xd2, 0x3f, 0x22, 0x01, 0xd4, 0x8e, - 0x23, 0x01, 0x42, 0x24, 0x02, 0x40, 0x22, 0x81, 0x0f, 0xed, 0x46, 0x22, - 0xc1, 0x00, 0x48, 0x7d, 0xb8, 0x45, 0x22, 0x01, 0xd2, 0x47, 0x22, 0x41, - 0x80, 0x04, 0xf2, 0x44, 0x22, 0x41, 0x48, 0xc2, 0x20, 0x41, 0x22, 0x01, - 0x4d, 0xc8, 0x7f, 0x43, 0x22, 0x01, 0x4e, 0x6a, 0x76, 0x42, 0x22, 0x41, - 0xe1, 0x20, 0x22, 0x81, 0xad, 0x01, 0xe5, 0x28, 0x22, 0x81, 0x9e, 0x01, - 0xe9, 0x2a, 0x22, 0x81, 0x8e, 0x01, 0xf5, 0x2c, 0x22, 0xc1, 0x00, 0x48, - 0xa5, 0xb8, 0x2d, 0x22, 0x01, 0xe7, 0x2e, 0x22, 0x81, 0x78, 0x44, 0x86, - 0xe6, 0x30, 0x22, 0x01, 0x44, 0x26, 0xe7, 0x31, 0x22, 0x01, 0x42, 0xa4, - 0x02, 0x32, 0x22, 0xc1, 0x00, 0x80, 0x2a, 0xd3, 0x39, 0x22, 0xc1, 0x00, - 0x80, 0x01, 0xff, 0x44, 0x28, 0x3b, 0x3d, 0x22, 0x01, 0x06, 0x28, 0x02, - 0x01, 0xff, 0xe1, 0x3a, 0x22, 0x81, 0x0c, 0x42, 0x00, 0x00, 0x3c, 0x22, - 0x01, 0x42, 0x59, 0x00, 0x8d, 0x23, 0x41, 0x48, 0xb5, 0xb8, 0x3b, 0x22, - 0x41, 0x4d, 0xc1, 0x7a, 0x38, 0x22, 0x01, 0x49, 0x3a, 0xb4, 0x36, 0x22, - 0x81, 0x15, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, 0x33, 0x22, 0x01, 0x43, - 0x1a, 0x58, 0x34, 0x22, 0x01, 0x42, 0x59, 0x00, 0x35, 0x22, 0x41, 0x07, - 0x27, 0x02, 0x01, 0xff, 0x49, 0x75, 0xac, 0x37, 0x22, 0x01, 0x42, 0x24, - 0x02, 0x20, 0x25, 0x01, 0x43, 0xda, 0x3e, 0x21, 0x25, 0x41, 0x45, 0x27, - 0x3b, 0x2f, 0x22, 0x41, 0x49, 0xb8, 0xab, 0x1f, 0x25, 0x01, 0xee, 0x2b, - 0x22, 0x41, 0xf3, 0x29, 0x22, 0xc1, 0x00, 0xe8, 0x8c, 0x23, 0x41, 0x80, - 0x17, 0xd2, 0x23, 0x22, 0x01, 0xe8, 0x24, 0x22, 0x01, 0xf2, 0x25, 0x22, - 0x01, 0x42, 0xa4, 0x02, 0x26, 0x22, 0xc1, 0x00, 0xd2, 0x27, 0x22, 0x41, - 0x44, 0x28, 0x3b, 0x22, 0x22, 0x01, 0x4a, 0xea, 0x3f, 0x21, 0x22, 0x41, - 0xe1, 0xb7, 0x21, 0x81, 0xca, 0x02, 0xe9, 0xf7, 0x21, 0x81, 0xb4, 0x02, - 0xf5, 0xfb, 0x21, 0xc1, 0x00, 0x4a, 0x05, 0x95, 0xfc, 0x21, 0x01, 0xd2, - 0xfd, 0x21, 0x81, 0x3c, 0xd3, 0x16, 0x22, 0x01, 0x43, 0xf7, 0x3d, 0x17, - 0x22, 0x81, 0x1a, 0xe8, 0x1b, 0x22, 0x01, 0xec, 0x1c, 0x22, 0x01, 0xed, - 0x1d, 0x22, 0xc1, 0x00, 0x49, 0x79, 0xab, 0x1e, 0x22, 0xc1, 0x00, 0x4d, - 0x1d, 0x1c, 0x1f, 0x22, 0x41, 0x80, 0x01, 0xff, 0xaf, 0x06, 0x47, 0x52, - 0x75, 0x1a, 0x22, 0x41, 0x4d, 0x23, 0x80, 0x19, 0x22, 0x01, 0x49, 0x37, - 0xb7, 0x18, 0x22, 0x41, 0x80, 0x01, 0xff, 0x4c, 0x28, 0x86, 0x12, 0x22, - 0x01, 0x4e, 0x46, 0x71, 0x19, 0x25, 0x01, 0x4c, 0xbc, 0x8b, 0x13, 0x22, - 0x01, 0xb3, 0xbd, 0x01, 0xb4, 0x01, 0xff, 0x43, 0x86, 0x5a, 0x11, 0x22, - 0x01, 0x05, 0x29, 0x02, 0x01, 0xff, 0x42, 0x13, 0x00, 0xfe, 0x21, 0x01, - 0x43, 0x23, 0x6a, 0xff, 0x21, 0x01, 0x44, 0x4a, 0x0b, 0x1a, 0x25, 0x01, - 0x44, 0x6a, 0x6e, 0x00, 0x22, 0x81, 0x86, 0x01, 0x49, 0x90, 0x5a, 0x02, - 0x22, 0x01, 0xa8, 0x72, 0x42, 0x29, 0x02, 0x04, 0x22, 0x01, 0xab, 0x53, - 0x02, 0x74, 0x00, 0x43, 0x4a, 0x07, 0xa5, 0x0b, 0x22, 0x01, 0xae, 0x33, - 0x43, 0x47, 0x0d, 0x1c, 0x25, 0x81, 0x26, 0xb3, 0x0f, 0xb4, 0x01, 0xff, - 0x43, 0xf1, 0x3f, 0x1e, 0x25, 0x01, 0x43, 0x2a, 0x0d, 0x10, 0x22, 0x41, - 0x42, 0x41, 0x00, 0x8b, 0x23, 0x01, 0xa9, 0x01, 0xff, 0x49, 0x95, 0x47, - 0x0e, 0x22, 0x01, 0x4a, 0xa9, 0xa3, 0x0f, 0x22, 0x41, 0x52, 0x15, 0x39, - 0x1d, 0x25, 0x41, 0xe5, 0x0c, 0x22, 0x01, 0xf5, 0x0d, 0x22, 0x41, 0x49, - 0x95, 0x47, 0x09, 0x22, 0x01, 0x43, 0x24, 0x02, 0x0a, 0x22, 0x41, 0x02, - 0xe8, 0x01, 0x04, 0xe9, 0x08, 0x22, 0x41, 0xd2, 0x05, 0x22, 0x01, 0xd3, - 0x06, 0x22, 0xc1, 0x00, 0x49, 0x95, 0x47, 0x07, 0x22, 0x41, 0x42, 0x13, - 0x00, 0x1b, 0x25, 0x01, 0x4b, 0x04, 0x95, 0x03, 0x22, 0x41, 0x80, 0x01, - 0xff, 0x48, 0x9e, 0xab, 0x8a, 0x23, 0x01, 0x44, 0x85, 0x5a, 0x01, 0x22, - 0x41, 0x46, 0x53, 0x75, 0x15, 0x22, 0x81, 0x06, 0x46, 0xdc, 0x04, 0x14, - 0x22, 0x41, 0x4a, 0x05, 0x95, 0x89, 0x23, 0x41, 0xec, 0xf8, 0x21, 0x01, - 0x44, 0x26, 0xe6, 0xf9, 0x21, 0x01, 0x42, 0xa4, 0x02, 0xfa, 0x21, 0x41, - 0x02, 0x24, 0x02, 0xd0, 0x03, 0x44, 0x56, 0xe5, 0xf1, 0x21, 0x01, 0x02, - 0x2d, 0x0f, 0x1d, 0xec, 0xf2, 0x21, 0x81, 0x12, 0xed, 0xf4, 0x21, 0xc1, - 0x00, 0x4a, 0x13, 0x58, 0xf5, 0x21, 0xc1, 0x00, 0x48, 0xc5, 0xb8, 0xf6, - 0x21, 0x41, 0x4a, 0x02, 0x96, 0xf3, 0x21, 0x41, 0x90, 0xe8, 0x02, 0x91, - 0xd9, 0x02, 0x92, 0xad, 0x02, 0x93, 0x8c, 0x02, 0x94, 0xae, 0x01, 0x43, - 0x85, 0xe8, 0xff, 0x24, 0x01, 0x96, 0x0f, 0x97, 0x01, 0xff, 0x42, 0x48, - 0xac, 0x17, 0x25, 0x01, 0x42, 0xce, 0xe9, 0x18, 0x25, 0x41, 0x42, 0xb1, - 0x6e, 0x00, 0x25, 0x01, 0x42, 0xbc, 0xe9, 0x01, 0x25, 0x81, 0x4a, 0x42, - 0xc4, 0xe9, 0x0c, 0x25, 0x01, 0x42, 0xcc, 0xe9, 0x0d, 0x25, 0xc1, 0x00, - 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0xac, 0x9b, 0x0e, 0x25, 0x01, 0x42, - 0x24, 0x02, 0x0f, 0x25, 0x01, 0x43, 0xf5, 0x05, 0x10, 0x25, 0x81, 0x1f, - 0x42, 0xd2, 0x02, 0x12, 0x25, 0x01, 0x55, 0x12, 0x39, 0x13, 0x25, 0x01, - 0x4d, 0x1a, 0x81, 0x14, 0x25, 0x01, 0xb5, 0x01, 0xff, 0xe4, 0x15, 0x25, - 0x01, 0x44, 0xe4, 0xc1, 0x16, 0x25, 0x41, 0x45, 0x27, 0x3b, 0x11, 0x25, - 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0x50, 0x03, 0x02, 0x25, 0x01, - 0x43, 0x23, 0x6a, 0x03, 0x25, 0x01, 0x4e, 0x3c, 0x70, 0x04, 0x25, 0x01, - 0x43, 0x9a, 0xab, 0x05, 0x25, 0x01, 0x42, 0x74, 0x00, 0x06, 0x25, 0x01, - 0xb4, 0x11, 0xb5, 0x01, 0xff, 0xd2, 0x09, 0x25, 0x01, 0xe4, 0x0a, 0x25, - 0x01, 0x44, 0xe4, 0xc1, 0x0b, 0x25, 0x41, 0x42, 0x17, 0x00, 0x07, 0x25, - 0x01, 0xe5, 0x08, 0x25, 0x41, 0x94, 0x29, 0x95, 0x1f, 0x42, 0xe3, 0xe8, - 0xf9, 0x24, 0x01, 0x42, 0xc7, 0xe9, 0xfa, 0x24, 0x01, 0x99, 0x01, 0xff, - 0xd0, 0xfb, 0x24, 0x01, 0xd2, 0xfc, 0x24, 0x01, 0xd3, 0xfd, 0x24, 0x01, - 0xd5, 0xfe, 0x24, 0x41, 0xd0, 0xf7, 0x24, 0x01, 0xd7, 0xf8, 0x24, 0x41, - 0xd1, 0xf0, 0x24, 0x01, 0xd9, 0xf1, 0x24, 0xc1, 0x00, 0x07, 0x27, 0x02, - 0x01, 0xff, 0x42, 0x1e, 0x01, 0xf2, 0x24, 0x01, 0x43, 0xf5, 0x05, 0xf3, - 0x24, 0x01, 0x09, 0x12, 0x39, 0x06, 0x4a, 0x8f, 0xa9, 0xf6, 0x24, 0x41, - 0x43, 0x24, 0x39, 0xf4, 0x24, 0x01, 0x4c, 0x1b, 0x39, 0xf5, 0x24, 0x41, - 0x94, 0x10, 0x98, 0x06, 0x42, 0xd6, 0xe9, 0xef, 0x24, 0x41, 0xd3, 0xed, - 0x24, 0x01, 0xd4, 0xee, 0x24, 0x41, 0xd3, 0xea, 0x24, 0x01, 0xd7, 0xeb, - 0x24, 0x01, 0xd8, 0xec, 0x24, 0x41, 0x91, 0x1f, 0x92, 0x11, 0x42, 0xc6, - 0xe9, 0xe7, 0x24, 0x01, 0x96, 0x01, 0xff, 0xd5, 0xe8, 0x24, 0x01, 0xd6, - 0xe9, 0x24, 0x41, 0xd0, 0xe4, 0x24, 0x01, 0xd5, 0xe5, 0x24, 0x01, 0xd8, - 0xe6, 0x24, 0x41, 0xd0, 0xe2, 0x24, 0x01, 0xd9, 0xe3, 0x24, 0x41, 0x42, - 0x73, 0xe8, 0xe0, 0x24, 0x01, 0x42, 0xe0, 0xe8, 0xe1, 0x24, 0x41, 0x42, - 0x72, 0xe8, 0xd5, 0x24, 0x01, 0x92, 0x2e, 0x42, 0x73, 0xe8, 0xd8, 0x24, - 0x01, 0x95, 0x1e, 0x42, 0x91, 0xe8, 0xdb, 0x24, 0x01, 0x54, 0x58, 0x3b, - 0xdc, 0x24, 0x01, 0x98, 0x06, 0x42, 0xd8, 0xe9, 0xdf, 0x24, 0x41, 0xd0, - 0xdd, 0x24, 0x01, 0x4e, 0xa6, 0x6e, 0xde, 0x24, 0x41, 0xd0, 0xd9, 0x24, - 0x01, 0xd1, 0xda, 0x24, 0x41, 0xd1, 0xd6, 0x24, 0x01, 0xd5, 0xd7, 0x24, - 0x41, 0xe2, 0xb8, 0x21, 0x81, 0x22, 0xf2, 0xec, 0x21, 0xc1, 0x00, 0x80, - 0x01, 0xff, 0x44, 0x28, 0x3b, 0xef, 0x21, 0x81, 0x0d, 0x49, 0xc4, 0x9d, - 0xed, 0x21, 0xc1, 0x00, 0x49, 0xee, 0xa0, 0xee, 0x21, 0x41, 0x54, 0x1c, - 0x3b, 0xf0, 0x21, 0x41, 0x80, 0x01, 0xff, 0x47, 0xdb, 0x04, 0xeb, 0x21, - 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, 0xb9, 0x21, 0x81, 0xa0, 0x02, - 0xa2, 0x93, 0x02, 0x43, 0x46, 0x16, 0xc2, 0x21, 0x01, 0x42, 0x92, 0x01, - 0xc3, 0x21, 0x01, 0xa7, 0xea, 0x01, 0xa8, 0xd8, 0x01, 0xa9, 0xb9, 0x01, - 0xab, 0x9b, 0x01, 0xac, 0x83, 0x01, 0xad, 0x70, 0x42, 0xd2, 0x04, 0xdb, - 0x21, 0x01, 0xb3, 0x3d, 0xb4, 0x29, 0xf5, 0xe5, 0x21, 0x81, 0x06, 0x4a, - 0x15, 0xab, 0xd4, 0x24, 0x41, 0x06, 0x70, 0x25, 0x10, 0x4a, 0x6d, 0x9e, - 0xe8, 0x21, 0x01, 0xe4, 0xe9, 0x21, 0x01, 0x42, 0xa4, 0x02, 0xea, 0x21, - 0x41, 0xe1, 0xe6, 0x21, 0x01, 0x48, 0x44, 0x6d, 0xe7, 0x21, 0x41, 0xa1, - 0x06, 0x58, 0x6f, 0x25, 0xe4, 0x21, 0x41, 0xe7, 0xe2, 0x21, 0x01, 0x42, - 0xf2, 0x3f, 0xe3, 0x21, 0x41, 0xa8, 0x06, 0x42, 0x9f, 0x03, 0xe1, 0x21, - 0x41, 0x4a, 0xed, 0xa0, 0xdc, 0x21, 0x01, 0x0e, 0x26, 0x72, 0x0d, 0x42, - 0xab, 0x60, 0xdf, 0x21, 0xc1, 0x00, 0x4a, 0x87, 0x9d, 0xe0, 0x21, 0x41, - 0x4a, 0xc9, 0xa6, 0xdd, 0x21, 0x01, 0x44, 0x85, 0x5a, 0xde, 0x21, 0x41, - 0xe5, 0xd8, 0x21, 0x81, 0x06, 0x43, 0xcb, 0x7a, 0xda, 0x21, 0x41, 0x48, - 0x09, 0xa5, 0xd9, 0x21, 0x41, 0x44, 0x23, 0x02, 0xd4, 0x21, 0x01, 0x43, - 0x4b, 0x0b, 0xd5, 0x21, 0x01, 0xf5, 0xd6, 0x21, 0xc1, 0x00, 0xec, 0xd7, - 0x21, 0x41, 0xe9, 0xcf, 0x21, 0x81, 0x12, 0xb5, 0x01, 0xff, 0xd3, 0xd1, - 0x21, 0x01, 0xec, 0xd2, 0x21, 0xc1, 0x00, 0x4f, 0x4e, 0x63, 0xd3, 0x21, - 0x41, 0xee, 0xd0, 0x21, 0x41, 0x47, 0x83, 0x63, 0xcb, 0x21, 0x01, 0xed, - 0xcc, 0x21, 0xc1, 0x00, 0x06, 0x70, 0x25, 0x01, 0xff, 0x42, 0x22, 0x00, - 0xcd, 0x21, 0x01, 0x42, 0xe6, 0x13, 0xce, 0x21, 0x41, 0xe1, 0xc8, 0x21, - 0x81, 0x06, 0x4b, 0x0f, 0x95, 0xca, 0x21, 0x41, 0xec, 0xc9, 0x21, 0x41, - 0xe1, 0xc4, 0x21, 0x81, 0x11, 0xe9, 0x88, 0x23, 0x01, 0x42, 0x2c, 0x0b, - 0xc6, 0x21, 0xc1, 0x00, 0x49, 0x8b, 0xab, 0xc7, 0x21, 0x41, 0xf2, 0xc5, - 0x21, 0x41, 0x42, 0xe8, 0x01, 0xc0, 0x21, 0x01, 0xe9, 0xc1, 0x21, 0x41, - 0x06, 0x70, 0x25, 0x0e, 0xec, 0xbd, 0x21, 0x01, 0xee, 0xbe, 0x21, 0x01, - 0x4c, 0x60, 0x8d, 0xbf, 0x21, 0x41, 0x4a, 0x9d, 0xa0, 0xba, 0x21, 0x01, - 0x43, 0x1e, 0x1c, 0xbb, 0x21, 0x01, 0x43, 0x81, 0x1e, 0xbc, 0x21, 0x41, - 0xe1, 0x57, 0x21, 0x81, 0x84, 0x01, 0x44, 0x6a, 0x6e, 0x9f, 0x21, 0x01, - 0xe9, 0xa0, 0x21, 0x81, 0x44, 0xf5, 0xaa, 0x21, 0x81, 0x06, 0x45, 0x65, - 0xe1, 0xb6, 0x21, 0x41, 0x69, 0x41, 0x03, 0xab, 0x21, 0x01, 0xd3, 0xac, - 0x21, 0x01, 0xd4, 0xad, 0x21, 0x81, 0x24, 0xd7, 0xaf, 0x21, 0x01, 0xec, - 0xb0, 0x21, 0x81, 0x15, 0xee, 0xb2, 0x21, 0x01, 0xf2, 0xb3, 0x21, 0x81, - 0x06, 0x44, 0xa9, 0x60, 0xb5, 0x21, 0x41, 0x4d, 0xac, 0x78, 0xb4, 0x21, - 0x41, 0x45, 0x27, 0x3b, 0xb1, 0x21, 0x41, 0x4d, 0xc6, 0x78, 0xae, 0x21, - 0x41, 0x07, 0x27, 0x02, 0x22, 0xe4, 0xa4, 0x21, 0x01, 0xee, 0xa5, 0x21, - 0x01, 0xb3, 0x01, 0xff, 0x42, 0x13, 0x00, 0xa6, 0x21, 0x01, 0xe8, 0xa7, - 0x21, 0x01, 0x43, 0x4c, 0x68, 0xa8, 0x21, 0xc1, 0x00, 0x4c, 0xd0, 0x83, - 0xa9, 0x21, 0x41, 0x43, 0x23, 0x6a, 0xa1, 0x21, 0x01, 0xf5, 0xa2, 0x21, - 0xc1, 0x00, 0xe4, 0xa3, 0x21, 0x41, 0x07, 0x27, 0x02, 0x6d, 0xd2, 0x8d, - 0x21, 0x81, 0x62, 0xe2, 0x8f, 0x21, 0x01, 0xa4, 0x45, 0xeb, 0x95, 0x21, - 0x81, 0x3a, 0xec, 0x97, 0x21, 0x81, 0x26, 0xad, 0x1c, 0x49, 0x55, 0xb4, - 0x6f, 0x23, 0x01, 0x44, 0x1d, 0x02, 0x9c, 0x21, 0xc1, 0x00, 0x80, 0x01, - 0xff, 0x60, 0x22, 0x02, 0x9d, 0x21, 0x01, 0x6c, 0x16, 0x02, 0x9e, 0x21, - 0x41, 0xd2, 0x9a, 0x21, 0x01, 0xd4, 0x9b, 0x21, 0x41, 0x80, 0x01, 0xff, - 0x4c, 0x1c, 0x86, 0x99, 0x21, 0x01, 0x49, 0x06, 0x95, 0x98, 0x21, 0x41, - 0x4f, 0x7b, 0x63, 0x96, 0x21, 0x41, 0xd2, 0x90, 0x21, 0x01, 0xd3, 0x91, - 0x21, 0x01, 0xd4, 0x92, 0x21, 0x01, 0xd5, 0x93, 0x21, 0xc1, 0x00, 0x4a, - 0x7d, 0x9d, 0x94, 0x21, 0x41, 0x4d, 0x6b, 0x78, 0x8e, 0x21, 0x41, 0xe1, - 0x58, 0x21, 0x81, 0xdf, 0x02, 0xa2, 0xc4, 0x02, 0xa5, 0xb5, 0x02, 0xa7, - 0xe8, 0x01, 0x4d, 0x47, 0x03, 0x82, 0x23, 0x01, 0xa9, 0xd5, 0x01, 0xab, - 0xc0, 0x01, 0xac, 0xb0, 0x01, 0xad, 0x86, 0x01, 0xae, 0x7a, 0xb0, 0x70, - 0x42, 0x3d, 0x00, 0x7d, 0x21, 0x01, 0xb3, 0x3a, 0xb4, 0x2e, 0xf5, 0x87, - 0x21, 0x81, 0x06, 0x42, 0xf8, 0x2f, 0x8c, 0x21, 0x41, 0x44, 0xc6, 0xe0, - 0xd2, 0x24, 0x01, 0xd2, 0x88, 0x21, 0x01, 0xe4, 0x89, 0x21, 0x01, 0x4c, - 0xa8, 0x8a, 0x8a, 0x21, 0x01, 0xf2, 0xd3, 0x24, 0x81, 0x06, 0x42, 0xa4, - 0x02, 0x8b, 0x21, 0x41, 0xd2, 0x87, 0x23, 0x41, 0x42, 0x17, 0x00, 0x86, - 0x21, 0x01, 0xf5, 0x86, 0x23, 0x41, 0xe1, 0x7e, 0x21, 0x81, 0x25, 0xa8, - 0x0c, 0x42, 0x3f, 0x00, 0x84, 0x21, 0x01, 0x44, 0xa2, 0xe7, 0x85, 0x21, - 0x41, 0xe1, 0x80, 0x21, 0x01, 0xe5, 0x81, 0x21, 0x01, 0x42, 0x03, 0x00, - 0x82, 0x21, 0x01, 0xf5, 0x83, 0x21, 0xc1, 0x00, 0xec, 0x85, 0x23, 0x41, - 0xf2, 0x7f, 0x21, 0x41, 0xe1, 0x84, 0x23, 0x01, 0xe9, 0x7c, 0x21, 0x41, - 0xe5, 0x7a, 0x21, 0x01, 0x42, 0x24, 0x0a, 0x7b, 0x21, 0x41, 0xe5, 0x74, - 0x21, 0x81, 0x0b, 0xe9, 0x78, 0x21, 0xc1, 0x00, 0x4b, 0xb0, 0x8f, 0x79, - 0x21, 0x41, 0x06, 0x70, 0x25, 0x01, 0xff, 0x42, 0x6c, 0x02, 0x75, 0x21, - 0x01, 0x42, 0xf6, 0x05, 0x76, 0x21, 0x01, 0x42, 0x77, 0x00, 0x77, 0x21, - 0x41, 0xe9, 0x72, 0x21, 0x01, 0xf5, 0x73, 0x21, 0xc1, 0x00, 0xed, 0x83, - 0x23, 0x41, 0xe1, 0xd1, 0x24, 0x81, 0x09, 0xe9, 0x70, 0x21, 0xc1, 0x00, - 0xe4, 0x71, 0x21, 0x41, 0xeb, 0x6f, 0x21, 0x41, 0x42, 0xf6, 0x05, 0x6d, - 0x21, 0x01, 0xed, 0x6e, 0x21, 0x41, 0xe1, 0x62, 0x21, 0x81, 0x30, 0xe9, - 0x67, 0x21, 0x81, 0x0f, 0xf5, 0x6b, 0x21, 0xc1, 0x00, 0xe4, 0x81, 0x23, - 0x01, 0x42, 0x57, 0x3b, 0x6c, 0x21, 0x41, 0x42, 0xee, 0x3d, 0x68, 0x21, - 0x01, 0x42, 0xa4, 0x02, 0x80, 0x23, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4d, - 0x72, 0x4c, 0x6a, 0x21, 0x01, 0x48, 0x93, 0x51, 0x69, 0x21, 0x41, 0xec, - 0x63, 0x21, 0x01, 0x47, 0x92, 0x5a, 0x64, 0x21, 0x01, 0xf2, 0x65, 0x21, - 0xc1, 0x00, 0x51, 0x9b, 0x51, 0x66, 0x21, 0x41, 0x44, 0xcf, 0xa6, 0x60, - 0x21, 0x01, 0x43, 0x51, 0x03, 0x61, 0x21, 0x41, 0xa1, 0x08, 0xe9, 0x5f, - 0x21, 0x01, 0xf5, 0xd0, 0x24, 0x41, 0xe4, 0x5c, 0x21, 0x01, 0x43, 0x22, - 0x02, 0x5d, 0x21, 0x01, 0xf2, 0x5e, 0x21, 0x41, 0xe4, 0x59, 0x21, 0x81, - 0x13, 0x44, 0x82, 0xe6, 0x7e, 0x23, 0x01, 0x02, 0xa4, 0x02, 0x01, 0xff, - 0xd2, 0x5b, 0x21, 0x01, 0xd3, 0x7f, 0x23, 0x41, 0x49, 0x94, 0xab, 0x5a, - 0x21, 0x41, 0x42, 0x19, 0x00, 0x40, 0x21, 0x01, 0xe2, 0x41, 0x21, 0x01, - 0x43, 0x79, 0x78, 0x42, 0x21, 0x81, 0x67, 0xe7, 0x45, 0x21, 0x81, 0x42, - 0xec, 0x4b, 0x21, 0x81, 0x33, 0xed, 0x4e, 0x21, 0x81, 0x0e, 0xee, 0x54, - 0x21, 0x01, 0xf2, 0x55, 0x21, 0x01, 0x42, 0xa4, 0x02, 0x56, 0x21, 0x41, - 0x80, 0x06, 0x42, 0x9e, 0x01, 0x53, 0x21, 0x41, 0x4b, 0x70, 0x92, 0x50, - 0x21, 0x01, 0x4b, 0x95, 0x98, 0x51, 0x21, 0x01, 0x47, 0xdb, 0x04, 0x52, - 0x21, 0x01, 0x4a, 0xea, 0x3f, 0x4f, 0x21, 0x41, 0x50, 0x89, 0x5a, 0x4c, - 0x21, 0x01, 0xd2, 0x4d, 0x21, 0x41, 0xe9, 0x46, 0x21, 0xc1, 0x00, 0x80, - 0x01, 0xff, 0x43, 0xeb, 0xe8, 0x47, 0x21, 0x01, 0x44, 0x28, 0x3b, 0x4a, - 0x21, 0x01, 0x62, 0x14, 0x0b, 0x49, 0x21, 0x01, 0x42, 0x0d, 0x00, 0x48, - 0x21, 0x41, 0x0b, 0x9a, 0x8f, 0x01, 0xff, 0x43, 0xf2, 0x31, 0x43, 0x21, - 0x01, 0x47, 0xdb, 0x04, 0x44, 0x21, 0x41, 0xe1, 0x29, 0x21, 0x81, 0x7e, - 0xe9, 0x2d, 0x21, 0x81, 0x3b, 0xf5, 0x37, 0x21, 0xc1, 0x00, 0x42, 0x09, - 0x5b, 0x38, 0x21, 0x81, 0x0c, 0x42, 0x54, 0xe2, 0x3e, 0x21, 0x01, 0x42, - 0xa4, 0x02, 0x7d, 0x23, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x42, 0x1a, - 0x00, 0x39, 0x21, 0x01, 0x43, 0x22, 0x00, 0x3a, 0x21, 0x01, 0x46, 0x1b, - 0x02, 0x3b, 0x21, 0x01, 0x44, 0x40, 0x8a, 0x3c, 0x21, 0x01, 0x42, 0x2c, - 0x0b, 0x3d, 0x21, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0x50, 0x03, - 0x2e, 0x21, 0x81, 0x28, 0x43, 0x23, 0x6a, 0x30, 0x21, 0x01, 0x44, 0x4a, - 0x0b, 0x31, 0x21, 0x01, 0x43, 0x11, 0x1c, 0x32, 0x21, 0x01, 0x43, 0x92, - 0x03, 0x33, 0x21, 0x01, 0x43, 0x40, 0x20, 0x34, 0x21, 0x01, 0x43, 0x93, - 0x05, 0x35, 0x21, 0x01, 0xf5, 0x36, 0x21, 0x41, 0x52, 0x41, 0x03, 0xcf, - 0x24, 0x01, 0xd2, 0x2f, 0x21, 0x41, 0x80, 0x04, 0xec, 0x2c, 0x21, 0x41, - 0x44, 0x28, 0x3b, 0x2b, 0x21, 0x01, 0x44, 0x85, 0x5a, 0x2a, 0x21, 0xc1, - 0x00, 0x45, 0x27, 0x3b, 0xce, 0x24, 0x41, 0xe1, 0xb5, 0x20, 0x81, 0xcc, - 0x02, 0xa5, 0xad, 0x02, 0xe9, 0x00, 0x21, 0x81, 0x87, 0x01, 0xf5, 0x16, - 0x21, 0xc1, 0x00, 0x4c, 0x88, 0x83, 0x17, 0x21, 0x01, 0xd2, 0x18, 0x21, - 0x81, 0x4a, 0xe4, 0x1e, 0x21, 0x81, 0x25, 0xec, 0x22, 0x21, 0x01, 0xed, - 0x23, 0x21, 0x81, 0x16, 0xf2, 0x25, 0x21, 0xc1, 0x00, 0xd7, 0x26, 0x21, - 0x01, 0xb5, 0x01, 0xff, 0xee, 0x27, 0x21, 0x01, 0x42, 0xa4, 0x02, 0x28, - 0x21, 0x41, 0x4a, 0xc3, 0x9d, 0x24, 0x21, 0x41, 0x80, 0x01, 0xff, 0x4e, - 0x10, 0x74, 0x21, 0x21, 0x01, 0x54, 0xe0, 0x3f, 0xcd, 0x24, 0x01, 0x06, - 0x28, 0x02, 0x01, 0xff, 0x4a, 0xb3, 0x9e, 0x1f, 0x21, 0x01, 0x43, 0x1a, - 0x58, 0x20, 0x21, 0x41, 0x80, 0x01, 0xff, 0x44, 0x28, 0x3b, 0x1d, 0x21, - 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0x48, 0x82, 0x63, 0xcc, 0x24, 0x01, - 0x43, 0xda, 0x3e, 0x19, 0x21, 0x81, 0x0c, 0x43, 0x40, 0x20, 0x1b, 0x21, - 0x01, 0x4d, 0xf3, 0x80, 0x1c, 0x21, 0x41, 0x4f, 0x7b, 0x63, 0x1a, 0x21, - 0x41, 0x80, 0x8a, 0x01, 0xd4, 0x04, 0x21, 0x81, 0x76, 0x43, 0x79, 0x78, - 0x07, 0x21, 0x01, 0xe7, 0x7c, 0x23, 0x01, 0xb2, 0x37, 0xb3, 0x01, 0xff, - 0x42, 0x13, 0x00, 0x10, 0x21, 0x01, 0xe8, 0x11, 0x21, 0xc1, 0x00, 0x80, - 0x01, 0xff, 0x4d, 0x72, 0x4c, 0x12, 0x21, 0x01, 0xb4, 0x01, 0xff, 0x43, - 0x86, 0x5a, 0x15, 0x21, 0x01, 0x05, 0x29, 0x02, 0x01, 0xff, 0x43, 0x23, - 0x6a, 0x13, 0x21, 0x01, 0x52, 0x6d, 0x4c, 0xcb, 0x24, 0x01, 0x44, 0xf0, - 0x3f, 0x14, 0x21, 0x41, 0xd2, 0x08, 0x21, 0x81, 0x28, 0xd3, 0x0a, 0x21, - 0xc1, 0x00, 0x07, 0x27, 0x02, 0x01, 0xff, 0x4a, 0xa9, 0x9e, 0x0b, 0x21, - 0x01, 0x49, 0x90, 0x5a, 0x0c, 0x21, 0x01, 0x43, 0xf5, 0x05, 0x0d, 0x21, - 0x01, 0x4b, 0xfe, 0x96, 0x0e, 0x21, 0x01, 0x42, 0xc1, 0x08, 0x0f, 0x21, - 0x41, 0x45, 0x27, 0x3b, 0x09, 0x21, 0x41, 0x80, 0x01, 0xff, 0x4c, 0x10, - 0x86, 0x06, 0x21, 0x01, 0x48, 0xb5, 0xbf, 0x05, 0x21, 0x41, 0x4b, 0x72, - 0x4c, 0x03, 0x21, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe5, 0x01, 0x21, - 0x01, 0xf5, 0x02, 0x21, 0x41, 0x42, 0x55, 0xe2, 0x7b, 0x23, 0x01, 0x45, - 0x16, 0xe0, 0xfe, 0x20, 0xc1, 0x00, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, - 0x1a, 0x58, 0xff, 0x20, 0x01, 0xf5, 0xca, 0x24, 0x41, 0x45, 0x27, 0x3b, - 0xb6, 0x20, 0x01, 0xd2, 0xb7, 0x20, 0x81, 0x64, 0x42, 0x16, 0x00, 0xee, - 0x20, 0x81, 0x4e, 0xe4, 0xf0, 0x20, 0x81, 0x43, 0xec, 0xf2, 0x20, 0x81, - 0x32, 0xed, 0xf5, 0x20, 0x01, 0xee, 0xf6, 0x20, 0x81, 0x0f, 0xf2, 0xfb, - 0x20, 0x81, 0x06, 0x44, 0x0b, 0x35, 0xfd, 0x20, 0x41, 0xd3, 0xfc, 0x20, - 0x41, 0xd2, 0xf7, 0x20, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4d, 0xb4, 0x7a, - 0xfa, 0x20, 0x01, 0x49, 0x31, 0xb4, 0xf9, 0x20, 0x01, 0x44, 0x85, 0x5a, - 0xf8, 0x20, 0x41, 0x5a, 0x10, 0x1c, 0xf3, 0x20, 0x01, 0x42, 0x57, 0x00, - 0xf4, 0x20, 0x41, 0x56, 0x14, 0x1c, 0xf1, 0x20, 0x41, 0x80, 0x01, 0xff, - 0x4d, 0xa7, 0x7a, 0xef, 0x20, 0x01, 0x56, 0x5d, 0x29, 0xc9, 0x24, 0x41, - 0x80, 0x01, 0xff, 0x48, 0xad, 0xbf, 0xed, 0x20, 0x01, 0x06, 0x28, 0x02, - 0x01, 0xff, 0xa1, 0xb0, 0x03, 0xa2, 0x8e, 0x03, 0xa4, 0xd9, 0x02, 0xa5, - 0xba, 0x02, 0xa7, 0x80, 0x02, 0xa8, 0xd6, 0x01, 0xa9, 0xc7, 0x01, 0xab, - 0x9c, 0x01, 0xac, 0x83, 0x01, 0xad, 0x71, 0xae, 0x4c, 0x42, 0xc1, 0x08, - 0xe2, 0x20, 0x01, 0xb3, 0x1c, 0x44, 0xf0, 0x3f, 0xe9, 0x20, 0x01, 0xf5, - 0xea, 0x20, 0x81, 0x06, 0x44, 0x32, 0xe8, 0xc8, 0x24, 0x41, 0xe4, 0xeb, - 0x20, 0xc1, 0x00, 0x48, 0xbd, 0xb8, 0xec, 0x20, 0x41, 0xa1, 0x1e, 0xa8, - 0x06, 0x42, 0x9f, 0x03, 0xe8, 0x20, 0x41, 0xe5, 0xe5, 0x20, 0x81, 0x0b, - 0xa9, 0x01, 0xff, 0xe4, 0xe7, 0x20, 0x01, 0xed, 0xc7, 0x24, 0x41, 0x49, - 0xaf, 0xab, 0xe6, 0x20, 0x41, 0xec, 0xe3, 0x20, 0x01, 0xf2, 0xe4, 0x20, - 0x41, 0xe5, 0xc4, 0x24, 0x81, 0x0d, 0x42, 0x24, 0x0a, 0xe0, 0x20, 0xc1, - 0x00, 0x49, 0x3a, 0x20, 0xe1, 0x20, 0x41, 0x06, 0x70, 0x25, 0x01, 0xff, - 0x42, 0x62, 0x93, 0xc5, 0x24, 0x01, 0x42, 0xf6, 0x05, 0xc6, 0x24, 0x41, - 0x49, 0x08, 0xa5, 0xde, 0x20, 0x01, 0xe9, 0xdf, 0x20, 0x01, 0x43, 0xcb, - 0x7a, 0xc3, 0x24, 0x41, 0xe1, 0xdd, 0x20, 0x81, 0x06, 0x42, 0xe8, 0x6e, - 0xc2, 0x24, 0x41, 0xed, 0xc0, 0x24, 0xc1, 0x00, 0x4a, 0x13, 0x58, 0xc1, - 0x24, 0x41, 0xa1, 0x1c, 0x42, 0x03, 0x00, 0xda, 0x20, 0x81, 0x0f, 0xb5, - 0x01, 0xff, 0x49, 0x51, 0xac, 0xdc, 0x20, 0x01, 0x50, 0xa9, 0x60, 0xbf, - 0x24, 0x41, 0x49, 0x9d, 0xab, 0xdb, 0x20, 0x41, 0xeb, 0xd8, 0x20, 0x01, - 0x44, 0x1d, 0x02, 0xd9, 0x20, 0x41, 0x47, 0x83, 0x63, 0xd6, 0x20, 0x01, - 0x53, 0x8b, 0x47, 0xd7, 0x20, 0x41, 0xa1, 0x0c, 0x49, 0x89, 0xb0, 0xd4, - 0x20, 0x01, 0x43, 0x5b, 0xe5, 0xd5, 0x20, 0x41, 0x06, 0x70, 0x25, 0x0b, - 0xec, 0xd2, 0x20, 0xc1, 0x00, 0x48, 0x9d, 0xab, 0xd3, 0x20, 0x41, 0xe1, - 0xbe, 0x24, 0x01, 0x4c, 0xf4, 0x89, 0xd1, 0x20, 0x41, 0xe1, 0xbb, 0x24, - 0x81, 0x16, 0xe9, 0xcd, 0x20, 0xc1, 0x00, 0xd4, 0xce, 0x20, 0x81, 0x06, - 0x4a, 0x0f, 0xa7, 0xd0, 0x20, 0x41, 0x47, 0x70, 0x25, 0xcf, 0x20, 0x41, - 0x47, 0x92, 0x5a, 0xcb, 0x20, 0x01, 0xf2, 0xcc, 0x20, 0xc1, 0x00, 0x06, - 0x70, 0x25, 0x01, 0xff, 0x42, 0x00, 0x00, 0xbc, 0x24, 0x01, 0x42, 0xd2, - 0x04, 0xbd, 0x24, 0x41, 0xec, 0xc7, 0x20, 0x81, 0x11, 0xee, 0xc9, 0x20, - 0x81, 0x06, 0x43, 0x72, 0x1f, 0xba, 0x24, 0x41, 0x50, 0x89, 0x5a, 0xca, - 0x20, 0x41, 0x48, 0x9d, 0xab, 0xc8, 0x20, 0x41, 0xe1, 0xc3, 0x20, 0x01, - 0xe9, 0xc4, 0x20, 0x81, 0x18, 0xb5, 0x01, 0xff, 0xe2, 0xc6, 0x20, 0x01, - 0x08, 0x58, 0x75, 0x01, 0xff, 0x48, 0x82, 0x63, 0xb8, 0x24, 0x01, 0x46, - 0x1b, 0x02, 0xb9, 0x24, 0x41, 0x02, 0xa0, 0x03, 0x01, 0xff, 0x44, 0x28, - 0x3b, 0xb7, 0x24, 0x01, 0x49, 0xc4, 0x9d, 0xc5, 0x20, 0x41, 0xa1, 0x0d, - 0x42, 0x42, 0x00, 0xc1, 0x20, 0xc1, 0x00, 0x48, 0xdd, 0xb4, 0xc2, 0x20, - 0x41, 0xe4, 0xbf, 0x20, 0x01, 0x44, 0xec, 0x3d, 0xb6, 0x24, 0x01, 0x49, - 0xdc, 0xb4, 0xc0, 0x20, 0x41, 0x06, 0x70, 0x25, 0x23, 0x50, 0x09, 0x5b, - 0xbb, 0x20, 0x01, 0xee, 0xbc, 0x20, 0x81, 0x12, 0x42, 0xa4, 0x02, 0xbd, - 0x20, 0xc1, 0x00, 0xd2, 0x7a, 0x23, 0xc1, 0x00, 0x49, 0x82, 0xab, 0xbe, - 0x20, 0x41, 0x50, 0x59, 0x5a, 0x79, 0x23, 0x41, 0x4a, 0x9d, 0xa0, 0xb8, - 0x20, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x20, 0x01, 0x43, 0xf5, 0x05, 0xba, - 0x20, 0x41, 0x80, 0xe7, 0x02, 0xd2, 0x8d, 0x20, 0x81, 0xac, 0x02, 0x43, - 0x09, 0x05, 0x94, 0x20, 0x01, 0x43, 0xc8, 0xdc, 0x95, 0x20, 0x01, 0xec, - 0x96, 0x20, 0x01, 0xee, 0x97, 0x20, 0x81, 0xe9, 0x01, 0xb2, 0xd3, 0x01, - 0x43, 0x51, 0x03, 0xa0, 0x20, 0x81, 0xc5, 0x01, 0x43, 0x58, 0x07, 0xa1, - 0x20, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x0e, 0x52, 0x75, 0x88, 0x01, 0x06, - 0x28, 0x02, 0x01, 0xff, 0xe1, 0xa2, 0x20, 0x81, 0x6d, 0x43, 0x23, 0x6a, - 0xa6, 0x20, 0x01, 0x49, 0x3c, 0x70, 0xa7, 0x20, 0x81, 0x5a, 0x43, 0x15, - 0x74, 0x77, 0x23, 0x01, 0x42, 0x22, 0x00, 0xa9, 0x20, 0x81, 0x47, 0x48, - 0x82, 0x63, 0xab, 0x20, 0x01, 0xab, 0x2c, 0xac, 0x17, 0xb3, 0x0b, 0xb5, - 0x01, 0xff, 0xd2, 0xb3, 0x20, 0x01, 0xe4, 0xb4, 0x20, 0x41, 0x42, 0xb0, - 0x01, 0x78, 0x23, 0x01, 0xf5, 0xb5, 0x24, 0x41, 0xe1, 0xaf, 0x20, 0x81, - 0x08, 0xe9, 0xb1, 0x20, 0x01, 0xf5, 0xb2, 0x20, 0x41, 0x4b, 0x01, 0x96, - 0xb0, 0x20, 0x41, 0x45, 0x1c, 0x02, 0xac, 0x20, 0x81, 0x06, 0x42, 0x25, - 0x39, 0xae, 0x20, 0x41, 0x48, 0xda, 0x04, 0xad, 0x20, 0x41, 0x45, 0x27, - 0x3b, 0xaa, 0x20, 0x41, 0x45, 0x27, 0x3b, 0xa8, 0x20, 0x41, 0x49, 0x9d, - 0xab, 0xa3, 0x20, 0x81, 0x04, 0xee, 0xa5, 0x20, 0x41, 0x4a, 0x02, 0x96, - 0xa4, 0x20, 0x41, 0x43, 0x50, 0x03, 0xad, 0x24, 0x01, 0x42, 0x49, 0x00, - 0xae, 0x24, 0x01, 0x48, 0x82, 0x63, 0xaf, 0x24, 0x01, 0x42, 0x74, 0x00, - 0xb0, 0x24, 0x81, 0x11, 0x42, 0x2a, 0x02, 0xb2, 0x24, 0x81, 0x06, 0x42, - 0x6f, 0x00, 0xb4, 0x24, 0x41, 0xf3, 0xb3, 0x24, 0x41, 0xec, 0xb1, 0x24, - 0x41, 0x4e, 0x60, 0x6e, 0xac, 0x24, 0x41, 0x42, 0x92, 0x01, 0x9e, 0x20, - 0x01, 0x43, 0xd0, 0xa6, 0x9f, 0x20, 0xc1, 0x00, 0x42, 0xee, 0x5d, 0xab, - 0x24, 0x41, 0x80, 0x01, 0xff, 0x4b, 0x65, 0x92, 0x9b, 0x20, 0x01, 0x4b, - 0x8a, 0x98, 0x9c, 0x20, 0x01, 0x47, 0xdb, 0x04, 0x9d, 0x20, 0x01, 0x06, - 0x28, 0x02, 0x01, 0xff, 0x44, 0x90, 0x5a, 0x98, 0x20, 0x81, 0x06, 0x42, - 0x2a, 0x02, 0x9a, 0x20, 0x41, 0x45, 0x84, 0x5a, 0x99, 0x20, 0x41, 0x07, - 0x27, 0x02, 0x01, 0xff, 0x51, 0x23, 0x52, 0x8e, 0x20, 0x01, 0x43, 0x1e, - 0x1c, 0x8f, 0x20, 0x01, 0x43, 0x1a, 0x58, 0xa9, 0x24, 0x01, 0x42, 0x7d, - 0x02, 0x90, 0x20, 0x01, 0x43, 0x47, 0x0d, 0xaa, 0x24, 0x01, 0xb3, 0x04, - 0xf5, 0x93, 0x20, 0x41, 0x42, 0x13, 0x00, 0x91, 0x20, 0x01, 0x42, 0xb0, - 0x01, 0x92, 0x20, 0x41, 0x53, 0x6e, 0x46, 0x8c, 0x20, 0x01, 0x49, 0x3b, - 0xb6, 0x8b, 0x20, 0x41, 0xe1, 0x55, 0x20, 0x81, 0xe6, 0x02, 0xe9, 0x72, - 0x20, 0x81, 0x9e, 0x02, 0xf5, 0x7a, 0x20, 0xc1, 0x00, 0x80, 0x84, 0x02, - 0xe2, 0x7e, 0x20, 0x81, 0xea, 0x01, 0xe7, 0x81, 0x20, 0x81, 0x25, 0xe8, - 0x83, 0x20, 0x01, 0xee, 0x84, 0x20, 0x81, 0x06, 0x42, 0xee, 0x3d, 0x89, - 0x20, 0x41, 0xd3, 0x85, 0x20, 0x81, 0x04, 0xd4, 0x88, 0x20, 0x41, 0x45, - 0x27, 0x3b, 0x86, 0x20, 0xc1, 0x00, 0x45, 0x27, 0x3b, 0x87, 0x20, 0x41, - 0x07, 0x27, 0x02, 0x06, 0x42, 0x2c, 0x0b, 0x82, 0x20, 0x41, 0xa1, 0xa0, - 0x01, 0xa4, 0x91, 0x01, 0x45, 0xce, 0xa6, 0x92, 0x24, 0x01, 0xa7, 0x74, - 0xa8, 0x6a, 0x48, 0x82, 0x63, 0x99, 0x24, 0x01, 0xab, 0x48, 0xac, 0x2d, - 0xad, 0x1b, 0x42, 0xd2, 0x02, 0xa5, 0x24, 0x01, 0x42, 0xeb, 0x04, 0xa6, - 0x24, 0x01, 0xb3, 0x01, 0xff, 0x42, 0xb0, 0x01, 0xa7, 0x24, 0x01, 0x46, - 0x84, 0x63, 0xa8, 0x24, 0x41, 0x43, 0x50, 0x03, 0xa2, 0x24, 0x01, 0x42, - 0xed, 0x00, 0xa3, 0x24, 0x01, 0xe9, 0xa4, 0x24, 0x41, 0xa1, 0x06, 0x4c, - 0x68, 0x8e, 0xa1, 0x24, 0x41, 0x45, 0xf6, 0xdc, 0x9e, 0x24, 0x01, 0xed, - 0x9f, 0x24, 0xc1, 0x00, 0x4a, 0x13, 0x58, 0xa0, 0x24, 0x41, 0x45, 0x1c, - 0x02, 0x9a, 0x24, 0x01, 0xb5, 0x01, 0xff, 0xf2, 0x9b, 0x24, 0x01, 0x44, - 0xa9, 0x60, 0x9c, 0x24, 0xc1, 0x00, 0x4c, 0xad, 0x60, 0x9d, 0x24, 0x41, - 0xe1, 0x97, 0x24, 0x01, 0xe9, 0x98, 0x24, 0x41, 0xe1, 0x93, 0x24, 0x01, - 0xe9, 0x94, 0x24, 0xc1, 0x00, 0x47, 0xba, 0xca, 0x95, 0x24, 0x01, 0x42, - 0xa4, 0x02, 0x96, 0x24, 0x41, 0x42, 0x9e, 0x01, 0x90, 0x24, 0x01, 0x42, - 0x24, 0x0a, 0x91, 0x24, 0x41, 0x44, 0x82, 0xe6, 0x8d, 0x24, 0x01, 0x42, - 0xa4, 0x02, 0x8e, 0x24, 0xc1, 0x00, 0x48, 0x15, 0x15, 0x8f, 0x24, 0x41, - 0x07, 0x27, 0x02, 0x04, 0xd2, 0x80, 0x20, 0x41, 0x44, 0x6a, 0x6e, 0x7f, - 0x20, 0x01, 0x43, 0x93, 0x05, 0x76, 0x23, 0x41, 0x44, 0x28, 0x3b, 0x7c, - 0x20, 0x01, 0x47, 0xfd, 0xc9, 0x7b, 0x20, 0x01, 0x47, 0x52, 0x75, 0x7d, - 0x20, 0x41, 0xe2, 0x73, 0x20, 0x01, 0xed, 0x74, 0x20, 0x81, 0x18, 0xee, - 0x77, 0x20, 0x81, 0x0d, 0x42, 0xa4, 0x02, 0x79, 0x20, 0xc1, 0x00, 0x49, - 0x87, 0x9d, 0x75, 0x23, 0x41, 0x53, 0x20, 0x42, 0x78, 0x20, 0x41, 0x07, - 0x27, 0x02, 0x0b, 0xd2, 0x76, 0x20, 0xc1, 0x00, 0x49, 0xee, 0xab, 0x8c, - 0x24, 0x41, 0x43, 0xf5, 0x05, 0x8a, 0x24, 0x01, 0x43, 0x93, 0x05, 0x75, - 0x20, 0x01, 0x45, 0xc5, 0xe0, 0x8b, 0x24, 0x41, 0x4b, 0xe9, 0x3f, 0x88, - 0x24, 0x01, 0xe7, 0x56, 0x20, 0x81, 0x14, 0xed, 0x6e, 0x20, 0x01, 0xf2, - 0x6f, 0x20, 0xc1, 0x00, 0xa1, 0x01, 0xff, 0xd3, 0x70, 0x20, 0x01, 0xd4, - 0x71, 0x20, 0x41, 0x80, 0x04, 0xd3, 0x74, 0x23, 0x41, 0x0d, 0x49, 0x68, - 0x06, 0x49, 0x14, 0x58, 0x89, 0x24, 0x41, 0xa1, 0x89, 0x01, 0xa2, 0x7d, - 0xa7, 0x5f, 0x42, 0x22, 0x00, 0x60, 0x20, 0x01, 0x42, 0x46, 0x00, 0x61, - 0x20, 0x81, 0x4c, 0x43, 0xda, 0x3e, 0x63, 0x20, 0x01, 0xac, 0x31, 0x42, - 0xd2, 0x04, 0x68, 0x20, 0x01, 0x4c, 0x12, 0x39, 0x69, 0x20, 0x01, 0x42, - 0xdb, 0x02, 0x6a, 0x20, 0x01, 0x44, 0xf0, 0x3f, 0x6b, 0x20, 0x01, 0xb5, - 0x01, 0xff, 0x07, 0xac, 0x60, 0x06, 0x42, 0xa4, 0x02, 0x6d, 0x20, 0x41, - 0x44, 0x02, 0xe5, 0x6c, 0x20, 0x01, 0x44, 0x91, 0x05, 0x73, 0x23, 0x41, - 0xe1, 0x64, 0x20, 0x01, 0xf5, 0x65, 0x20, 0xc1, 0x00, 0x4b, 0xa5, 0x8f, - 0x66, 0x20, 0x01, 0xed, 0x67, 0x20, 0x41, 0x48, 0x1e, 0x39, 0x62, 0x20, - 0x41, 0xe1, 0x5b, 0x20, 0x81, 0x11, 0xe9, 0x5d, 0x20, 0x81, 0x06, 0x42, - 0x2c, 0x0b, 0x5f, 0x20, 0x41, 0x42, 0xee, 0x3d, 0x5e, 0x20, 0x41, 0x4a, - 0xa5, 0x8f, 0x5c, 0x20, 0x41, 0x44, 0xeb, 0xd9, 0x59, 0x20, 0x01, 0xe9, - 0x5a, 0x20, 0x41, 0x4a, 0xa5, 0x8f, 0x57, 0x20, 0x01, 0x43, 0xb9, 0x00, - 0x58, 0x20, 0x41, 0xe1, 0x40, 0x20, 0x81, 0x54, 0xe9, 0x49, 0x20, 0x81, - 0x3a, 0xf5, 0x4d, 0x20, 0xc1, 0x00, 0x80, 0x16, 0x43, 0x19, 0x74, 0x51, - 0x20, 0x81, 0x09, 0xf2, 0x53, 0x20, 0xc1, 0x00, 0xd2, 0x54, 0x20, 0x41, - 0x4b, 0x8f, 0x8f, 0x52, 0x20, 0x41, 0x4b, 0x5a, 0x92, 0x50, 0x20, 0x01, - 0x08, 0xa5, 0xbf, 0x01, 0xff, 0x42, 0x5c, 0x00, 0x4e, 0x20, 0x01, 0x49, - 0x32, 0xb6, 0x87, 0x24, 0x01, 0x42, 0x24, 0x0a, 0x4f, 0x20, 0x41, 0x07, - 0x27, 0x02, 0x01, 0xff, 0xe1, 0x4a, 0x20, 0x01, 0x43, 0x1e, 0x1c, 0x4b, - 0x20, 0x01, 0x48, 0x82, 0x63, 0x4c, 0x20, 0x41, 0xe4, 0x41, 0x20, 0x81, - 0x40, 0x42, 0xe4, 0xe9, 0x42, 0x20, 0x01, 0x44, 0xec, 0x3d, 0x43, 0x20, - 0x81, 0x1c, 0xec, 0x44, 0x20, 0x81, 0x0b, 0xf2, 0x47, 0x20, 0xc1, 0x00, - 0x42, 0x76, 0x78, 0x48, 0x20, 0x41, 0x49, 0x70, 0xab, 0x45, 0x20, 0x01, - 0x42, 0x23, 0x02, 0x46, 0x20, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, - 0xc7, 0x9e, 0x84, 0x24, 0x01, 0x42, 0xd2, 0x02, 0x85, 0x24, 0x01, 0x42, - 0x59, 0x00, 0x86, 0x24, 0x41, 0x50, 0x79, 0x5a, 0x83, 0x24, 0x41, 0x07, - 0x27, 0x02, 0x9d, 0x03, 0xd2, 0x09, 0x20, 0x01, 0xe2, 0x0a, 0x20, 0x81, - 0x83, 0x02, 0xe4, 0x1c, 0x20, 0x81, 0xf7, 0x01, 0xeb, 0x1d, 0x20, 0x81, - 0xe0, 0x01, 0xec, 0x20, 0x20, 0x81, 0x9a, 0x01, 0x43, 0xb9, 0x00, 0x2b, - 0x20, 0x81, 0x81, 0x01, 0xee, 0x2d, 0x20, 0x81, 0x58, 0x43, 0x82, 0x11, - 0x33, 0x20, 0x01, 0xb2, 0x3d, 0xb3, 0x01, 0xff, 0x43, 0xb2, 0xe8, 0x37, - 0x20, 0x01, 0xe8, 0x38, 0x20, 0xc1, 0x00, 0x80, 0x0a, 0xd2, 0x3e, 0x20, - 0x01, 0x43, 0x24, 0x02, 0x3f, 0x20, 0x41, 0x49, 0x60, 0x9d, 0x3a, 0x20, - 0x01, 0x09, 0x1a, 0x0f, 0x06, 0x49, 0x63, 0x8d, 0x39, 0x20, 0x41, 0x48, - 0x1a, 0x0f, 0x3c, 0x20, 0x81, 0x06, 0x61, 0x29, 0x0d, 0x3b, 0x20, 0x41, - 0x5f, 0x0c, 0x0f, 0x3d, 0x20, 0x41, 0x42, 0xe8, 0x01, 0x34, 0x20, 0x81, - 0x06, 0x43, 0xf3, 0x95, 0x36, 0x20, 0x41, 0x4a, 0x13, 0x58, 0x35, 0x20, - 0x41, 0x80, 0x06, 0x43, 0x93, 0x05, 0x32, 0x20, 0x41, 0x47, 0xf6, 0xc9, - 0x2e, 0x20, 0x01, 0x0a, 0xd3, 0xa6, 0x06, 0x4b, 0x29, 0x9b, 0x2f, 0x20, - 0x41, 0x55, 0xfd, 0x38, 0x30, 0x20, 0x01, 0x47, 0xdb, 0x04, 0x31, 0x20, - 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0x36, 0xe9, 0x72, 0x23, 0x01, - 0x43, 0x93, 0x05, 0x2c, 0x20, 0x41, 0x07, 0x27, 0x02, 0x0c, 0x42, 0x1a, - 0x00, 0x29, 0x20, 0x01, 0x43, 0x9a, 0x38, 0x2a, 0x20, 0x41, 0x42, 0x13, - 0x00, 0x21, 0x20, 0x01, 0x44, 0x92, 0xe4, 0x22, 0x20, 0x01, 0x44, 0xe5, - 0x3f, 0x23, 0x20, 0x01, 0x42, 0x22, 0x00, 0x24, 0x20, 0x01, 0xab, 0x0c, - 0x43, 0x93, 0x05, 0x27, 0x20, 0x01, 0x43, 0xcb, 0x7a, 0x28, 0x20, 0x41, - 0x43, 0xaf, 0xe5, 0x25, 0x20, 0x01, 0xe9, 0x26, 0x20, 0x41, 0x07, 0x27, - 0x02, 0x01, 0xff, 0x45, 0xce, 0xa6, 0x1e, 0x20, 0x01, 0x4f, 0x45, 0x6c, - 0x1f, 0x20, 0x41, 0x4b, 0xe7, 0x8f, 0x82, 0x24, 0x41, 0x80, 0x2c, 0xd2, - 0x16, 0x20, 0xc1, 0x00, 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, 0x71, 0x23, - 0x01, 0x45, 0xea, 0xd9, 0x17, 0x20, 0x01, 0x49, 0x90, 0x5a, 0x18, 0x20, - 0x01, 0x4a, 0x07, 0xa5, 0x19, 0x20, 0x01, 0x44, 0xa1, 0x51, 0x1a, 0x20, - 0x01, 0x44, 0xf0, 0x3f, 0x1b, 0x20, 0x41, 0x44, 0x28, 0x3b, 0x15, 0x20, - 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0x44, 0x50, 0x03, 0x0b, 0x20, 0x01, - 0x49, 0x3c, 0x70, 0x0c, 0x20, 0x01, 0x02, 0x24, 0x02, 0x3d, 0x42, 0x22, - 0x00, 0x0f, 0x20, 0x01, 0xa9, 0x29, 0x45, 0x22, 0x02, 0x12, 0x20, 0x01, - 0x43, 0x40, 0x20, 0x70, 0x23, 0x81, 0x16, 0x02, 0xa4, 0x02, 0x06, 0x4f, - 0x44, 0x6d, 0x14, 0x20, 0x41, 0x43, 0xeb, 0x54, 0x13, 0x20, 0x01, 0x42, - 0xab, 0x60, 0x81, 0x24, 0x41, 0x45, 0x84, 0x5a, 0x80, 0x24, 0x41, 0x47, - 0x83, 0x63, 0x10, 0x20, 0x01, 0x43, 0x25, 0x12, 0x11, 0x20, 0x41, 0xec, - 0x0d, 0x20, 0x01, 0x47, 0x92, 0x5a, 0x0e, 0x20, 0x41, 0xe1, 0x01, 0x20, - 0x01, 0x43, 0x23, 0x6a, 0x02, 0x20, 0x01, 0x49, 0x90, 0x5a, 0x03, 0x20, - 0x01, 0x42, 0x22, 0x00, 0x04, 0x20, 0x01, 0x43, 0xf5, 0x05, 0x05, 0x20, - 0x01, 0x4a, 0x22, 0x3b, 0x06, 0x20, 0x01, 0x44, 0xca, 0x7a, 0x07, 0x20, - 0x01, 0x43, 0x69, 0x81, 0x08, 0x20, 0x41, 0x09, 0x2e, 0x23, 0x0c, 0x59, - 0x92, 0x22, 0x70, 0x24, 0x01, 0x4e, 0x74, 0x77, 0x71, 0x24, 0x41, 0x45, - 0x69, 0x37, 0x72, 0x24, 0x01, 0x49, 0xc1, 0xb4, 0x74, 0x24, 0x01, 0x48, - 0xad, 0xc1, 0x73, 0x24, 0x41, 0xa5, 0xb5, 0x05, 0xa6, 0xf6, 0x03, 0x02, - 0xd2, 0x02, 0xa4, 0x03, 0xaf, 0xb7, 0x02, 0xb3, 0xb5, 0x01, 0xb4, 0x01, - 0xff, 0x05, 0x25, 0x01, 0x4f, 0x03, 0xc2, 0x06, 0x01, 0xff, 0x43, 0x50, - 0x03, 0x00, 0x24, 0x81, 0x3d, 0xa2, 0x2f, 0x45, 0x6b, 0xdb, 0x59, 0x24, - 0x01, 0x04, 0x5d, 0x65, 0x1d, 0x04, 0x27, 0xa8, 0x11, 0x07, 0x1e, 0x9b, - 0x01, 0xff, 0x44, 0x4a, 0x0b, 0x5b, 0x24, 0x01, 0x4e, 0x0b, 0x59, 0x5e, - 0x24, 0x41, 0xd2, 0x23, 0x24, 0x01, 0xf5, 0x2d, 0x24, 0x41, 0xd2, 0x16, - 0x24, 0x01, 0xf5, 0x1f, 0x24, 0x41, 0x43, 0x91, 0x5a, 0x50, 0x24, 0x01, - 0x43, 0x27, 0xa2, 0x35, 0x24, 0x41, 0x45, 0x84, 0x5a, 0x4a, 0x24, 0x41, - 0x43, 0x50, 0x03, 0x01, 0x24, 0x81, 0x52, 0xa2, 0x3d, 0x44, 0x4a, 0x0b, - 0x08, 0x24, 0x01, 0x04, 0x5d, 0x65, 0x2b, 0x04, 0x27, 0xa8, 0x11, 0x10, - 0xf9, 0x61, 0x01, 0xff, 0x42, 0xba, 0xe9, 0x3a, 0x24, 0x01, 0x42, 0x44, - 0xce, 0x3b, 0x24, 0x41, 0xd2, 0x24, 0x24, 0x81, 0x0b, 0xf5, 0x2e, 0x24, - 0xc1, 0x00, 0x4d, 0xc6, 0x78, 0x2f, 0x24, 0x41, 0x4d, 0xc6, 0x78, 0x25, - 0x24, 0x41, 0xd2, 0x17, 0x24, 0x01, 0xf5, 0x20, 0x24, 0x41, 0x43, 0x91, - 0x5a, 0x51, 0x24, 0x01, 0x43, 0x27, 0xa2, 0x36, 0x24, 0xc1, 0x00, 0x4d, - 0xc6, 0x78, 0x37, 0x24, 0x41, 0x45, 0x84, 0x5a, 0x4b, 0x24, 0x41, 0x05, - 0xee, 0x1f, 0x45, 0x14, 0xec, 0x3d, 0x35, 0x03, 0x57, 0x4d, 0x01, 0xff, - 0x43, 0x50, 0x03, 0x04, 0x24, 0x81, 0x23, 0x44, 0x4a, 0x0b, 0x0b, 0x24, - 0x01, 0x45, 0xe3, 0xdb, 0x1a, 0x24, 0x01, 0x45, 0xfd, 0xdf, 0x28, 0x24, - 0x01, 0xf5, 0x11, 0x24, 0x81, 0x06, 0x51, 0x0b, 0x59, 0x40, 0x24, 0x41, - 0x4d, 0xc6, 0x78, 0x6b, 0x24, 0x41, 0x45, 0x84, 0x5a, 0x4e, 0x24, 0x41, - 0x44, 0x4a, 0x0b, 0x32, 0x24, 0x01, 0x43, 0x25, 0x12, 0x33, 0x24, 0x41, - 0x43, 0x50, 0x03, 0x05, 0x24, 0x01, 0x44, 0x4a, 0x0b, 0x0c, 0x24, 0x01, - 0x45, 0xe3, 0xdb, 0x1b, 0x24, 0x01, 0x45, 0xfd, 0xdf, 0x29, 0x24, 0x01, - 0xf5, 0x12, 0x24, 0x81, 0x13, 0x11, 0x1c, 0x59, 0x01, 0xff, 0x80, 0x04, - 0xd3, 0x41, 0x24, 0x41, 0xe1, 0x42, 0x24, 0x01, 0xe2, 0x43, 0x24, 0x41, - 0x4d, 0xc6, 0x78, 0x6c, 0x24, 0x41, 0x10, 0x29, 0x5e, 0x5a, 0x03, 0xf2, - 0x07, 0x01, 0xff, 0xa2, 0x47, 0xa5, 0x39, 0x04, 0x5d, 0x65, 0x2d, 0x48, - 0xd5, 0xbc, 0x64, 0x24, 0x01, 0x08, 0x10, 0x1b, 0x17, 0x45, 0x07, 0xe0, - 0x2c, 0x24, 0x01, 0x06, 0xcc, 0x0e, 0x01, 0xff, 0x44, 0x4a, 0x0b, 0x5a, - 0x24, 0x01, 0x4e, 0x0b, 0x59, 0x5d, 0x24, 0x41, 0x43, 0x50, 0x03, 0x60, - 0x24, 0x01, 0x43, 0xeb, 0x9b, 0x63, 0x24, 0x41, 0xd2, 0x15, 0x24, 0x01, - 0xf5, 0x1e, 0x24, 0x41, 0x49, 0xc8, 0xb0, 0x5f, 0x24, 0x01, 0x44, 0x6c, - 0xdb, 0x58, 0x24, 0x41, 0x43, 0x91, 0x5a, 0x4f, 0x24, 0x01, 0x43, 0x27, - 0xa2, 0x34, 0x24, 0x41, 0x47, 0x2a, 0x01, 0x62, 0x24, 0x01, 0x45, 0x4d, - 0xd5, 0x61, 0x24, 0x41, 0x04, 0xfa, 0xe4, 0x3d, 0x03, 0xf2, 0x07, 0x01, - 0xff, 0x43, 0x50, 0x03, 0x07, 0x24, 0x01, 0x44, 0x4a, 0x0b, 0x0e, 0x24, - 0x01, 0x45, 0xe3, 0xdb, 0x1d, 0x24, 0x01, 0x45, 0xfd, 0xdf, 0x2b, 0x24, - 0x01, 0xf5, 0x14, 0x24, 0x81, 0x15, 0x53, 0xce, 0x48, 0x46, 0x24, 0xc1, - 0x00, 0x42, 0x19, 0x00, 0x49, 0x24, 0x01, 0xd3, 0x47, 0x24, 0x01, 0xd4, - 0x48, 0x24, 0x41, 0x4d, 0xc6, 0x78, 0x6e, 0x24, 0x41, 0x43, 0xeb, 0x54, - 0x57, 0x24, 0x01, 0x43, 0x25, 0x12, 0x56, 0x24, 0x41, 0x04, 0xd7, 0x04, - 0x65, 0x04, 0xfb, 0x05, 0x01, 0xff, 0x43, 0x50, 0x03, 0x02, 0x24, 0x81, - 0x53, 0xa2, 0x3e, 0x44, 0x4a, 0x0b, 0x09, 0x24, 0x01, 0x04, 0x5d, 0x65, - 0x2c, 0x04, 0x27, 0xa8, 0x20, 0xf5, 0x0f, 0x24, 0x81, 0x15, 0x52, 0xa5, - 0x50, 0x3c, 0x24, 0xc1, 0x00, 0x80, 0x04, 0xd4, 0x3d, 0x24, 0x41, 0xe1, - 0x3e, 0x24, 0x01, 0xe2, 0x3f, 0x24, 0x41, 0x4d, 0xc6, 0x78, 0x69, 0x24, - 0x41, 0xd2, 0x26, 0x24, 0x01, 0xf5, 0x30, 0x24, 0x41, 0xd2, 0x18, 0x24, - 0x01, 0xf5, 0x21, 0x24, 0x41, 0x43, 0x91, 0x5a, 0x52, 0x24, 0x81, 0x06, - 0x43, 0x27, 0xa2, 0x38, 0x24, 0x41, 0x4d, 0xc6, 0x78, 0x53, 0x24, 0x41, - 0x45, 0x84, 0x5a, 0x4c, 0x24, 0x41, 0x43, 0x50, 0x03, 0x03, 0x24, 0x81, - 0x46, 0xa2, 0x31, 0x44, 0x4a, 0x0b, 0x0a, 0x24, 0x01, 0x04, 0x5d, 0x65, - 0x1f, 0xb3, 0x0b, 0xf5, 0x10, 0x24, 0xc1, 0x00, 0x4d, 0xc6, 0x78, 0x6a, - 0x24, 0x41, 0x03, 0x95, 0x04, 0x06, 0x4a, 0x95, 0xa3, 0x5c, 0x24, 0x41, - 0xd2, 0x27, 0x24, 0x01, 0xf5, 0x31, 0x24, 0x41, 0xd2, 0x19, 0x24, 0x01, - 0xf5, 0x22, 0x24, 0x41, 0x43, 0x91, 0x5a, 0x54, 0x24, 0x81, 0x06, 0x43, - 0x27, 0xa2, 0x39, 0x24, 0x41, 0x4d, 0xc6, 0x78, 0x55, 0x24, 0x41, 0x45, - 0x84, 0x5a, 0x4d, 0x24, 0x41, 0x05, 0xc9, 0x00, 0x1f, 0x07, 0x7c, 0xc8, - 0x01, 0xff, 0xa6, 0x0c, 0x49, 0xce, 0xb3, 0x65, 0x24, 0x01, 0x4a, 0x71, - 0xa9, 0x66, 0x24, 0x41, 0x44, 0xce, 0x47, 0x68, 0x24, 0x01, 0x44, 0x38, - 0x4c, 0x67, 0x24, 0x41, 0x43, 0x50, 0x03, 0x06, 0x24, 0x01, 0x44, 0x4a, - 0x0b, 0x0d, 0x24, 0x01, 0x45, 0xe3, 0xdb, 0x1c, 0x24, 0x01, 0x45, 0xfd, - 0xdf, 0x2a, 0x24, 0x01, 0xf5, 0x13, 0x24, 0x81, 0x0b, 0x51, 0x2d, 0x59, - 0x44, 0x24, 0xc1, 0x00, 0xd3, 0x45, 0x24, 0x41, 0x4d, 0xc6, 0x78, 0x6d, - 0x24, 0x41, 0x42, 0x5c, 0x00, 0x80, 0xf9, 0x01, 0xa5, 0xa1, 0x01, 0x45, - 0x20, 0x72, 0x97, 0xf9, 0x81, 0x93, 0x01, 0xaf, 0x27, 0xb5, 0x19, 0xb9, - 0x01, 0xff, 0x04, 0xa1, 0x01, 0x06, 0x49, 0xd8, 0xb5, 0x2e, 0xf5, 0x41, - 0x48, 0xfa, 0x1c, 0x3f, 0xf6, 0x01, 0x44, 0xed, 0x06, 0x22, 0xf6, 0x41, - 0x43, 0x48, 0x1f, 0x7c, 0xfa, 0x01, 0x4a, 0x01, 0xab, 0xa2, 0x20, 0x40, - 0x46, 0x67, 0xd0, 0x0a, 0xf4, 0x01, 0x46, 0xa7, 0xd2, 0x50, 0xf9, 0x01, - 0x02, 0xee, 0x00, 0x06, 0x42, 0xa7, 0x01, 0x51, 0xf4, 0x41, 0x80, 0x1c, - 0x03, 0x05, 0x00, 0x06, 0x49, 0x34, 0xb1, 0xcc, 0x26, 0x40, 0x45, 0xac, - 0xdb, 0x8c, 0xf3, 0x01, 0x67, 0xd2, 0x04, 0x8a, 0xf1, 0x01, 0x46, 0xa7, - 0xd5, 0x94, 0x26, 0x40, 0x44, 0xb9, 0x00, 0x4c, 0x27, 0x00, 0x03, 0xf4, - 0x01, 0x20, 0xb0, 0x01, 0xff, 0x0a, 0x85, 0x9f, 0x0d, 0x45, 0xac, 0xd4, - 0x42, 0xf5, 0xc1, 0x00, 0x57, 0x73, 0x29, 0x41, 0xf5, 0x41, 0x4d, 0xda, - 0x7d, 0x51, 0x2e, 0x00, 0x4e, 0xf0, 0x74, 0x50, 0x2e, 0x40, 0x49, 0x85, - 0xb1, 0x29, 0x26, 0x00, 0x48, 0x0d, 0xbe, 0x28, 0x26, 0x40, 0x4d, 0x51, - 0x78, 0xcf, 0xf3, 0x41, 0x48, 0x7d, 0xbb, 0xb3, 0xf4, 0x01, 0x4a, 0x73, - 0x3c, 0x19, 0xf3, 0x41, 0x42, 0x8a, 0x00, 0xe5, 0xf9, 0x01, 0xa3, 0xb1, - 0x23, 0x44, 0xce, 0xe4, 0xb0, 0x26, 0x00, 0x42, 0x9e, 0x01, 0x99, 0xfa, - 0x01, 0xac, 0x86, 0x23, 0xad, 0xbd, 0x0c, 0xae, 0xad, 0x0b, 0x02, 0x5a, - 0x04, 0x95, 0x0b, 0xb0, 0xcb, 0x01, 0xb2, 0xb6, 0x01, 0xb5, 0x0b, 0xf7, - 0x04, 0xf4, 0xc1, 0x00, 0x45, 0xec, 0x06, 0x2e, 0xf4, 0x41, 0x4b, 0x0d, - 0x92, 0xcb, 0xf6, 0x01, 0x02, 0x11, 0x00, 0x06, 0x4e, 0x56, 0x74, 0x91, - 0xf4, 0x41, 0x02, 0x33, 0x00, 0x88, 0x01, 0x08, 0x45, 0xbd, 0x01, 0xff, - 0x0b, 0xf2, 0x9a, 0x42, 0x0b, 0xef, 0x9b, 0x01, 0xff, 0x45, 0xd1, 0x09, - 0x67, 0xd3, 0x01, 0xa6, 0x29, 0x44, 0xb8, 0x27, 0x68, 0xd3, 0x01, 0x43, - 0xcd, 0x09, 0x60, 0xd3, 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, - 0x01, 0x62, 0xd3, 0x01, 0x42, 0x15, 0x02, 0x61, 0xd3, 0x41, 0x44, 0x96, - 0x1b, 0x66, 0xd3, 0x01, 0x42, 0x30, 0x27, 0x65, 0xd3, 0x41, 0x43, 0xd7, - 0x04, 0x64, 0xd3, 0x01, 0x43, 0xfb, 0x05, 0x63, 0xd3, 0x41, 0x45, 0xd1, - 0x09, 0x70, 0xd3, 0x01, 0xa6, 0x29, 0x44, 0xb8, 0x27, 0x71, 0xd3, 0x01, - 0x43, 0xcd, 0x09, 0x69, 0xd3, 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, - 0x25, 0x01, 0x6b, 0xd3, 0x01, 0x42, 0x15, 0x02, 0x6a, 0xd3, 0x41, 0x44, - 0x96, 0x1b, 0x6f, 0xd3, 0x01, 0x42, 0x30, 0x27, 0x6e, 0xd3, 0x41, 0x43, - 0xd7, 0x04, 0x6d, 0xd3, 0x01, 0x43, 0xfb, 0x05, 0x6c, 0xd3, 0x41, 0x44, - 0x4e, 0xe4, 0x34, 0x23, 0x00, 0x44, 0x7a, 0xe7, 0x35, 0x23, 0x40, 0x42, - 0x13, 0x00, 0xb8, 0xfa, 0x01, 0x52, 0x1d, 0x4e, 0x4f, 0x2e, 0x00, 0x4b, - 0x9d, 0x99, 0x58, 0x22, 0x40, 0x04, 0xbe, 0x1d, 0x0f, 0xb9, 0x01, 0xff, - 0x4b, 0x7a, 0x96, 0x2f, 0xf1, 0x01, 0x4a, 0x87, 0xa7, 0xa9, 0x00, 0x40, - 0xa3, 0xed, 0x05, 0x06, 0x03, 0xd1, 0x90, 0x04, 0xa6, 0x81, 0x04, 0x55, - 0x7f, 0x38, 0xff, 0x2c, 0x00, 0x0b, 0x69, 0x98, 0xde, 0x03, 0xb3, 0x01, - 0xff, 0x0c, 0x7d, 0x07, 0x33, 0x06, 0x7f, 0x14, 0x01, 0xff, 0xab, 0x20, - 0x45, 0xd7, 0xdd, 0xe5, 0x2c, 0x00, 0x45, 0x12, 0xdf, 0xe6, 0x2c, 0x00, - 0xb3, 0x06, 0x46, 0xd1, 0xd5, 0xe8, 0x2c, 0x40, 0x49, 0x4a, 0xb0, 0xea, - 0x2c, 0x00, 0x46, 0xd7, 0xd5, 0xe7, 0x2c, 0x40, 0x42, 0x35, 0x06, 0xe4, - 0x2c, 0x00, 0x45, 0x92, 0xc0, 0xe9, 0x2c, 0x40, 0xa1, 0x95, 0x03, 0x4d, - 0x25, 0x7a, 0xf3, 0x2c, 0x00, 0x02, 0x7a, 0x05, 0xe7, 0x02, 0xa4, 0xbb, - 0x02, 0x43, 0xfa, 0xe8, 0x89, 0x2c, 0x00, 0xa6, 0xa8, 0x02, 0x02, 0x24, - 0x02, 0x97, 0x02, 0xa8, 0x88, 0x02, 0x45, 0x7e, 0xdc, 0x93, 0x2c, 0x00, - 0xab, 0xe7, 0x01, 0xac, 0xd8, 0x01, 0x42, 0x7d, 0x02, 0x99, 0x2c, 0x00, - 0x42, 0xd2, 0x02, 0x9b, 0x2c, 0x00, 0xef, 0x9f, 0x2c, 0x80, 0x54, 0xb0, - 0x48, 0x42, 0xd0, 0x00, 0xa3, 0x2c, 0x00, 0xb3, 0x20, 0xb4, 0x12, 0x42, - 0x7d, 0x00, 0xa9, 0x2c, 0x00, 0x44, 0xd6, 0xe7, 0x83, 0x2c, 0x00, 0x44, - 0x1e, 0xe8, 0x8d, 0x2c, 0x40, 0x42, 0xc3, 0x21, 0xa7, 0x2c, 0x00, 0x45, - 0x38, 0xdc, 0x91, 0x2c, 0x40, 0x44, 0x90, 0x8c, 0xc1, 0x2c, 0x00, 0xa8, - 0x0c, 0x43, 0x5d, 0x0b, 0xa5, 0x2c, 0x00, 0x42, 0x3c, 0x01, 0x8b, 0x2c, - 0x40, 0x42, 0xd1, 0x09, 0xe3, 0x03, 0x00, 0x43, 0x5d, 0x0b, 0xed, 0x03, - 0x40, 0xe9, 0xa1, 0x2c, 0x00, 0x42, 0xdb, 0x02, 0xaf, 0x2c, 0x40, 0x03, - 0x67, 0x21, 0x06, 0x42, 0x3c, 0x01, 0xb1, 0x2c, 0x40, 0x07, 0xf8, 0xc5, - 0x1f, 0x07, 0x6d, 0x98, 0x01, 0xff, 0xae, 0x0c, 0x45, 0x0c, 0xe0, 0xdd, - 0x2c, 0x00, 0x43, 0x90, 0xe9, 0xe3, 0x2c, 0x40, 0x42, 0xf6, 0x05, 0xdf, - 0x2c, 0x00, 0x42, 0x4b, 0x18, 0xe1, 0x2c, 0x40, 0x43, 0x35, 0x06, 0xb5, - 0x2c, 0x00, 0x43, 0xee, 0xe8, 0xd9, 0x2c, 0x00, 0x43, 0xeb, 0x54, 0xc7, - 0x2c, 0x00, 0x46, 0x7b, 0xd1, 0xd7, 0x2c, 0x00, 0xa8, 0x17, 0x43, 0xdf, - 0x8b, 0xbf, 0x2c, 0x00, 0x02, 0xa4, 0x02, 0x01, 0xff, 0x42, 0xd1, 0x09, - 0xc5, 0x2c, 0x00, 0x43, 0x5d, 0x0b, 0xdb, 0x2c, 0x40, 0xe1, 0xcf, 0x2c, - 0x80, 0x0c, 0x42, 0xd1, 0x09, 0xd3, 0x2c, 0x00, 0x43, 0x0c, 0x00, 0xcd, - 0x2c, 0x40, 0xf4, 0xd5, 0x2c, 0x40, 0x4a, 0x3b, 0x9e, 0xd1, 0x2c, 0x00, - 0x44, 0x2a, 0xe4, 0x97, 0x2c, 0x40, 0x43, 0x11, 0x39, 0x95, 0x2c, 0x00, - 0xa8, 0x06, 0x42, 0xdb, 0x02, 0x9d, 0x2c, 0x40, 0x42, 0xd1, 0x09, 0xe7, - 0x03, 0x00, 0xe9, 0xad, 0x2c, 0x40, 0x43, 0x8a, 0x00, 0x8f, 0x2c, 0x00, - 0x43, 0x0c, 0x00, 0xe9, 0x03, 0x40, 0x43, 0x1a, 0x04, 0x85, 0x2c, 0x00, - 0x44, 0x7d, 0xd1, 0xeb, 0x03, 0x40, 0x42, 0xd1, 0x09, 0xe5, 0x03, 0x00, - 0xe9, 0xab, 0x2c, 0x40, 0x44, 0xf6, 0xe3, 0x87, 0x2c, 0x00, 0x42, 0xd1, - 0x09, 0xef, 0x03, 0x00, 0x09, 0x9b, 0xb0, 0x01, 0xff, 0x44, 0x67, 0x00, - 0xb3, 0x2c, 0x00, 0x44, 0x0b, 0x00, 0xcb, 0x2c, 0x00, 0x44, 0xf3, 0xbf, - 0xb9, 0x2c, 0x00, 0x42, 0xd2, 0x02, 0xbb, 0x2c, 0x40, 0x4a, 0x5b, 0xa6, - 0xc3, 0x2c, 0x00, 0x0c, 0x38, 0x22, 0x01, 0xff, 0x43, 0xfa, 0xe8, 0xb7, - 0x2c, 0x00, 0x46, 0x7b, 0xd1, 0xee, 0x2c, 0x00, 0x42, 0xd2, 0x02, 0xbd, - 0x2c, 0x00, 0x44, 0x61, 0xa6, 0xec, 0x2c, 0x40, 0x4c, 0x28, 0x89, 0xc9, - 0x2c, 0x00, 0x43, 0x39, 0xe9, 0x81, 0x2c, 0x40, 0x54, 0xb6, 0x30, 0xfa, - 0x2c, 0x00, 0x49, 0xa0, 0x14, 0xf9, 0x2c, 0x00, 0x56, 0xb4, 0x30, 0xfb, - 0x2c, 0x00, 0x4d, 0x22, 0x4e, 0xfc, 0x2c, 0x40, 0x50, 0x77, 0x54, 0xfd, - 0x2c, 0x00, 0x48, 0xa1, 0x14, 0xfe, 0x2c, 0x40, 0x06, 0xf4, 0x05, 0x96, - 0x01, 0x07, 0xbf, 0x35, 0x06, 0x4e, 0x32, 0x76, 0xe0, 0x02, 0x41, 0x05, - 0xd1, 0x09, 0x7e, 0xa6, 0x5f, 0x04, 0xb8, 0x27, 0x4f, 0x4b, 0xe5, 0x0f, - 0xf3, 0x02, 0x01, 0xb3, 0x26, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xea, - 0x02, 0x01, 0xa8, 0x0f, 0xb7, 0x01, 0xff, 0x44, 0x98, 0x1b, 0xeb, 0x02, - 0x01, 0x49, 0x8b, 0x1b, 0xf4, 0x02, 0x41, 0x44, 0xf3, 0x0f, 0xec, 0x02, - 0x01, 0x4b, 0x1a, 0x16, 0xf5, 0x02, 0x41, 0x04, 0x96, 0x1b, 0x11, 0x02, - 0x30, 0x27, 0x01, 0xff, 0x48, 0xe8, 0x0f, 0xf8, 0x02, 0x01, 0x42, 0xf5, - 0x0f, 0xef, 0x02, 0x41, 0x48, 0xe8, 0x0f, 0xf9, 0x02, 0x01, 0x42, 0xf5, - 0x0f, 0xf0, 0x02, 0x41, 0x48, 0xe8, 0x0f, 0xfb, 0x02, 0x01, 0x42, 0xf5, - 0x0f, 0xf2, 0x02, 0x41, 0xa9, 0x0f, 0xaf, 0x01, 0xff, 0x43, 0xf4, 0x0f, - 0xed, 0x02, 0x01, 0x4a, 0x07, 0xaa, 0xf6, 0x02, 0x41, 0x43, 0xcf, 0x47, - 0xee, 0x02, 0x01, 0x4a, 0x57, 0x35, 0xf7, 0x02, 0x41, 0x48, 0xe8, 0x0f, - 0xfa, 0x02, 0x01, 0xf9, 0xf1, 0x02, 0x41, 0x45, 0xd1, 0x09, 0xe8, 0x02, - 0x01, 0xa6, 0x29, 0x44, 0xb8, 0x27, 0xe9, 0x02, 0x01, 0x43, 0xcd, 0x09, - 0xe1, 0x02, 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xe3, - 0x02, 0x01, 0x42, 0x15, 0x02, 0xe2, 0x02, 0x41, 0x44, 0x96, 0x1b, 0xe7, - 0x02, 0x01, 0x42, 0x30, 0x27, 0xe6, 0x02, 0x41, 0x43, 0xd7, 0x04, 0xe5, - 0x02, 0x01, 0x43, 0xfb, 0x05, 0xe4, 0x02, 0x41, 0x0e, 0xea, 0x04, 0x1c, - 0x09, 0x52, 0x14, 0x01, 0xff, 0x48, 0xdd, 0xbe, 0xef, 0x2c, 0x00, 0x09, - 0xc6, 0xb5, 0x01, 0xff, 0x45, 0xc2, 0xd9, 0xf0, 0x2c, 0x00, 0x45, 0x5f, - 0xdd, 0xf1, 0x2c, 0x40, 0xa1, 0x95, 0x03, 0x4d, 0x25, 0x7a, 0xf2, 0x2c, - 0x00, 0x02, 0x7a, 0x05, 0xe7, 0x02, 0xa4, 0xbb, 0x02, 0x43, 0xfa, 0xe8, - 0x88, 0x2c, 0x00, 0xa6, 0xa8, 0x02, 0x02, 0x24, 0x02, 0x97, 0x02, 0xa8, - 0x88, 0x02, 0x45, 0x7e, 0xdc, 0x92, 0x2c, 0x00, 0xab, 0xe7, 0x01, 0xac, - 0xd8, 0x01, 0x42, 0x7d, 0x02, 0x98, 0x2c, 0x00, 0x42, 0xd2, 0x02, 0x9a, - 0x2c, 0x00, 0xef, 0x9e, 0x2c, 0x80, 0x54, 0xb0, 0x48, 0x42, 0xd0, 0x00, - 0xa2, 0x2c, 0x00, 0xb3, 0x20, 0xb4, 0x12, 0x42, 0x7d, 0x00, 0xa8, 0x2c, - 0x00, 0x44, 0xd6, 0xe7, 0x82, 0x2c, 0x00, 0x44, 0x1e, 0xe8, 0x8c, 0x2c, - 0x40, 0x42, 0xc3, 0x21, 0xa6, 0x2c, 0x00, 0x45, 0x38, 0xdc, 0x90, 0x2c, - 0x40, 0x44, 0x90, 0x8c, 0xc0, 0x2c, 0x00, 0xa8, 0x0c, 0x43, 0x5d, 0x0b, - 0xa4, 0x2c, 0x00, 0x42, 0x3c, 0x01, 0x8a, 0x2c, 0x40, 0x42, 0xd1, 0x09, - 0xe2, 0x03, 0x00, 0x43, 0x5d, 0x0b, 0xec, 0x03, 0x40, 0xe9, 0xa0, 0x2c, - 0x00, 0x42, 0xdb, 0x02, 0xae, 0x2c, 0x40, 0x03, 0x67, 0x21, 0x06, 0x42, - 0x3c, 0x01, 0xb0, 0x2c, 0x40, 0x07, 0xf8, 0xc5, 0x1f, 0x07, 0x6d, 0x98, - 0x01, 0xff, 0xae, 0x0c, 0x45, 0x0c, 0xe0, 0xdc, 0x2c, 0x00, 0x43, 0x90, - 0xe9, 0xe2, 0x2c, 0x40, 0x42, 0xf6, 0x05, 0xde, 0x2c, 0x00, 0x42, 0x4b, - 0x18, 0xe0, 0x2c, 0x40, 0x43, 0x35, 0x06, 0xb4, 0x2c, 0x00, 0x43, 0xee, - 0xe8, 0xd8, 0x2c, 0x00, 0x43, 0xeb, 0x54, 0xc6, 0x2c, 0x00, 0x46, 0x7b, - 0xd1, 0xd6, 0x2c, 0x00, 0xa8, 0x17, 0x43, 0xdf, 0x8b, 0xbe, 0x2c, 0x00, - 0x02, 0xa4, 0x02, 0x01, 0xff, 0x42, 0xd1, 0x09, 0xc4, 0x2c, 0x00, 0x43, - 0x5d, 0x0b, 0xda, 0x2c, 0x40, 0xe1, 0xce, 0x2c, 0x80, 0x0c, 0x42, 0xd1, - 0x09, 0xd2, 0x2c, 0x00, 0x43, 0x0c, 0x00, 0xcc, 0x2c, 0x40, 0xf4, 0xd4, - 0x2c, 0x40, 0x4a, 0x3b, 0x9e, 0xd0, 0x2c, 0x00, 0x44, 0x2a, 0xe4, 0x96, - 0x2c, 0x40, 0x43, 0x11, 0x39, 0x94, 0x2c, 0x00, 0xa8, 0x06, 0x42, 0xdb, - 0x02, 0x9c, 0x2c, 0x40, 0x42, 0xd1, 0x09, 0xe6, 0x03, 0x00, 0xe9, 0xac, - 0x2c, 0x40, 0x43, 0x8a, 0x00, 0x8e, 0x2c, 0x00, 0x43, 0x0c, 0x00, 0xe8, - 0x03, 0x40, 0x43, 0x1a, 0x04, 0x84, 0x2c, 0x00, 0x44, 0x7d, 0xd1, 0xea, - 0x03, 0x40, 0x42, 0xd1, 0x09, 0xe4, 0x03, 0x00, 0xe9, 0xaa, 0x2c, 0x40, - 0x44, 0xf6, 0xe3, 0x86, 0x2c, 0x00, 0x42, 0xd1, 0x09, 0xee, 0x03, 0x00, - 0x09, 0x9b, 0xb0, 0x01, 0xff, 0x44, 0x67, 0x00, 0xb2, 0x2c, 0x00, 0x44, - 0x0b, 0x00, 0xca, 0x2c, 0x00, 0x44, 0xf3, 0xbf, 0xb8, 0x2c, 0x00, 0x42, - 0xd2, 0x02, 0xba, 0x2c, 0x40, 0x4a, 0x5b, 0xa6, 0xc2, 0x2c, 0x00, 0x0c, - 0x38, 0x22, 0x01, 0xff, 0x43, 0xfa, 0xe8, 0xb6, 0x2c, 0x00, 0x46, 0x7b, - 0xd1, 0xed, 0x2c, 0x00, 0x42, 0xd2, 0x02, 0xbc, 0x2c, 0x00, 0x44, 0x61, - 0xa6, 0xeb, 0x2c, 0x40, 0x4c, 0x28, 0x89, 0xc8, 0x2c, 0x00, 0x43, 0x39, - 0xe9, 0x80, 0x2c, 0x40, 0x47, 0x92, 0xc6, 0x5a, 0xf3, 0x01, 0xa9, 0x01, - 0xff, 0xe5, 0x6a, 0xf3, 0x01, 0x42, 0x1d, 0x01, 0x73, 0xf3, 0x41, 0xa6, - 0x79, 0x55, 0x44, 0x37, 0x6d, 0x2a, 0x00, 0x4a, 0xd7, 0xa2, 0x32, 0x23, - 0x00, 0x48, 0x85, 0xbd, 0x0c, 0x26, 0x00, 0x0a, 0xb3, 0xa8, 0x57, 0xb4, - 0x06, 0x4e, 0x58, 0x77, 0xea, 0xf3, 0x41, 0x05, 0x2c, 0x63, 0x1d, 0x57, - 0x99, 0x18, 0x81, 0x23, 0x00, 0x4c, 0x95, 0x6a, 0x2e, 0x22, 0x00, 0x04, - 0xd0, 0x82, 0x01, 0xff, 0x45, 0x14, 0xdd, 0x9b, 0xf3, 0x01, 0x53, 0x65, - 0x47, 0x9b, 0x00, 0x40, 0x03, 0xcb, 0x02, 0x17, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x56, 0x64, 0x31, 0xfa, 0x22, 0x00, 0x47, 0xf3, 0x78, 0xfd, 0x22, - 0x00, 0x68, 0x35, 0x04, 0xfb, 0x22, 0x40, 0x46, 0xb9, 0x04, 0x0b, 0x22, - 0x00, 0x4f, 0x41, 0x4e, 0xb3, 0x22, 0xc0, 0x00, 0x4c, 0xf3, 0x25, 0xb5, - 0x22, 0x40, 0x44, 0xdb, 0x02, 0xa7, 0xf6, 0x01, 0x46, 0xb5, 0xd6, 0x77, - 0xf4, 0x41, 0x49, 0x7b, 0xaf, 0x8a, 0xf3, 0x01, 0x4b, 0xd7, 0x98, 0x16, - 0xf6, 0x01, 0x49, 0x12, 0x91, 0x15, 0xf6, 0x41, 0x07, 0x54, 0x14, 0x38, - 0x42, 0xf2, 0x04, 0x04, 0x26, 0x00, 0xad, 0x1b, 0xb0, 0x01, 0xff, 0x43, - 0xb5, 0x1d, 0xed, 0xf9, 0x01, 0x46, 0xb7, 0x8a, 0x01, 0x22, 0x00, 0x4e, - 0xca, 0x73, 0x84, 0x23, 0x00, 0x47, 0x52, 0x57, 0xdc, 0xf5, 0x41, 0xe1, - 0x2c, 0x00, 0x00, 0x07, 0x45, 0xaf, 0x01, 0xff, 0x42, 0x8a, 0x00, 0x40, - 0x00, 0x00, 0x4a, 0x77, 0x90, 0x52, 0x20, 0x40, 0xa1, 0xa5, 0x15, 0xa2, - 0xf5, 0x14, 0xa3, 0xa5, 0x11, 0xa4, 0x89, 0x0e, 0xa5, 0xcf, 0x0d, 0xa6, - 0xc0, 0x0d, 0xa7, 0x81, 0x0a, 0x02, 0x0b, 0x00, 0xea, 0x09, 0xa9, 0xac, - 0x09, 0x02, 0x1b, 0x02, 0x86, 0x09, 0xac, 0xfb, 0x04, 0xad, 0xb4, 0x04, - 0xae, 0xa5, 0x04, 0xaf, 0xe7, 0x03, 0xb0, 0xb4, 0x03, 0xb2, 0x8b, 0x02, - 0xb3, 0xc8, 0x01, 0xb4, 0x81, 0x01, 0xb5, 0x5b, 0x09, 0x32, 0x00, 0x41, - 0x02, 0x51, 0x00, 0x27, 0xb8, 0x11, 0x07, 0xf8, 0x2f, 0x01, 0xff, 0x45, - 0x5c, 0x00, 0x5b, 0x03, 0x00, 0x45, 0x25, 0x06, 0xcf, 0x1d, 0x40, 0x80, - 0x06, 0x48, 0x2d, 0xb9, 0xb5, 0x1a, 0x40, 0x45, 0x5c, 0x00, 0x3d, 0x03, - 0x00, 0x45, 0x25, 0x06, 0x53, 0x03, 0x40, 0x03, 0xa5, 0x03, 0x06, 0x4f, - 0xe1, 0x66, 0xb6, 0x1a, 0x40, 0x4c, 0x74, 0x85, 0xe9, 0x20, 0x00, 0x55, - 0xec, 0x37, 0xf9, 0x1d, 0x40, 0x05, 0xf0, 0x07, 0x06, 0x45, 0x99, 0x20, - 0x3e, 0x03, 0x40, 0x45, 0x5c, 0x00, 0x0d, 0x03, 0x00, 0x45, 0x25, 0x06, - 0x29, 0x03, 0x40, 0xb0, 0x0c, 0x47, 0xfd, 0x05, 0xd1, 0x1d, 0x00, 0x47, - 0x51, 0x0d, 0xd2, 0x1d, 0x40, 0x06, 0xdc, 0x8f, 0x06, 0x51, 0xb3, 0x3d, - 0x4e, 0x03, 0x40, 0x45, 0x5c, 0x00, 0xf5, 0x1d, 0x00, 0x45, 0x25, 0x06, - 0x1d, 0x03, 0x40, 0x4f, 0x08, 0x11, 0xdb, 0x20, 0x00, 0x44, 0x9a, 0x20, - 0x03, 0x03, 0x80, 0x1c, 0x06, 0x38, 0x1b, 0x06, 0x51, 0xe9, 0x58, 0x12, - 0x03, 0x40, 0x4c, 0x78, 0x84, 0xcb, 0x1a, 0x00, 0x43, 0xc5, 0x06, 0xb4, - 0x1a, 0x00, 0x48, 0xfd, 0xc1, 0xe8, 0x20, 0x40, 0x80, 0x01, 0xff, 0x45, - 0x25, 0x06, 0x30, 0x03, 0x00, 0x4f, 0x94, 0x68, 0x29, 0xfe, 0x00, 0x47, - 0x65, 0x20, 0x34, 0x03, 0x00, 0x50, 0x49, 0x60, 0x2a, 0xfe, 0x40, 0x4c, - 0xd0, 0x86, 0x3c, 0x03, 0x00, 0x05, 0x5c, 0x30, 0x22, 0x4a, 0x75, 0xa5, - 0xc2, 0x1d, 0x00, 0x07, 0xe2, 0x23, 0x0c, 0x61, 0x08, 0x0d, 0xba, 0x1a, - 0x00, 0x4e, 0x4a, 0x77, 0xc3, 0x1d, 0x40, 0x44, 0x26, 0x06, 0x3b, 0x03, - 0x00, 0x4d, 0x4a, 0x80, 0xc5, 0x1a, 0x40, 0xb3, 0x06, 0x55, 0x38, 0x3a, - 0xd3, 0x20, 0x40, 0x4e, 0x9e, 0x2f, 0x37, 0x03, 0x00, 0x4d, 0x60, 0x44, - 0x35, 0x03, 0x40, 0xa5, 0x8c, 0x01, 0xa9, 0x01, 0xff, 0x03, 0xca, 0x00, - 0x17, 0x03, 0xa2, 0x01, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x0a, 0x03, 0x00, - 0x45, 0x25, 0x06, 0x25, 0x03, 0x00, 0x47, 0x65, 0x20, 0xd8, 0x20, 0x40, - 0x80, 0x06, 0x61, 0x6b, 0x0d, 0xec, 0x20, 0x40, 0x05, 0xce, 0x00, 0x30, - 0x02, 0x22, 0x00, 0x16, 0x0c, 0x70, 0x1f, 0x06, 0x4a, 0xdd, 0x8f, 0x19, - 0x03, 0x40, 0x4b, 0x84, 0x04, 0xc2, 0x1a, 0x00, 0x4b, 0x89, 0x91, 0xc4, - 0x1a, 0x40, 0x08, 0xdd, 0xbd, 0x06, 0x4b, 0x21, 0x9a, 0xd1, 0x20, 0x40, - 0x45, 0x5c, 0x00, 0x57, 0x03, 0x00, 0x45, 0x25, 0x06, 0x39, 0x03, 0x40, - 0x80, 0x24, 0x05, 0x88, 0x19, 0x01, 0xff, 0xa1, 0x06, 0x45, 0x25, 0x06, - 0x55, 0x03, 0x40, 0x44, 0x5d, 0x00, 0x50, 0x03, 0x00, 0x03, 0x1b, 0x00, - 0x01, 0xff, 0x54, 0xe8, 0x3c, 0xff, 0x1d, 0x00, 0x52, 0x6f, 0x50, 0x56, - 0x03, 0x40, 0x45, 0x5c, 0x00, 0xd7, 0x20, 0x00, 0x45, 0x25, 0x06, 0xef, - 0x20, 0x40, 0x52, 0x27, 0x50, 0x22, 0x03, 0x00, 0x05, 0x95, 0x03, 0x01, - 0xff, 0x50, 0x9c, 0x2f, 0xe5, 0x20, 0x00, 0x4d, 0xed, 0x58, 0x14, 0x03, - 0x40, 0xa1, 0x11, 0x09, 0x1a, 0x6b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xc8, - 0x1a, 0x00, 0x45, 0x25, 0x06, 0x1f, 0x03, 0x40, 0x54, 0x18, 0x3f, 0x21, - 0x03, 0x00, 0x0a, 0xfa, 0x5a, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xbb, 0x1a, - 0x00, 0x45, 0x25, 0x06, 0xbd, 0x1a, 0x00, 0x47, 0x65, 0x20, 0xbe, 0x1a, - 0x40, 0x45, 0x34, 0xd4, 0x28, 0x03, 0x80, 0x2e, 0x11, 0xfd, 0x55, 0x0c, - 0x4e, 0x48, 0x74, 0xb7, 0x1a, 0x00, 0x47, 0x01, 0x83, 0x05, 0x03, 0x40, - 0x42, 0x1a, 0x00, 0x76, 0x03, 0x01, 0x43, 0xa6, 0x65, 0x77, 0x03, 0x01, - 0x45, 0x36, 0xde, 0x79, 0x03, 0x01, 0x43, 0x66, 0xe9, 0x7a, 0x03, 0x01, - 0x44, 0x1e, 0xe8, 0x78, 0x03, 0x41, 0x46, 0x5b, 0x00, 0xce, 0x1d, 0x40, - 0x4e, 0xd8, 0x73, 0x4a, 0x03, 0x00, 0x50, 0xa9, 0x61, 0xc6, 0x1a, 0x40, - 0x45, 0xd9, 0x69, 0x04, 0x03, 0x80, 0x06, 0x4f, 0xef, 0x67, 0x20, 0x03, - 0x40, 0x80, 0x15, 0x8d, 0x01, 0xff, 0x45, 0xce, 0x34, 0xc4, 0x1d, 0x00, - 0x45, 0xb7, 0x20, 0xcc, 0x1d, 0x00, 0x45, 0x79, 0x20, 0xc6, 0x1d, 0x40, - 0x45, 0x25, 0x06, 0x31, 0x03, 0x00, 0x49, 0x53, 0x12, 0x24, 0xfe, 0x80, - 0x0d, 0x4a, 0xac, 0x03, 0x25, 0xfe, 0xc0, 0x00, 0x46, 0x24, 0x06, 0x2c, - 0xfe, 0x40, 0x46, 0x24, 0x06, 0x2b, 0xfe, 0x40, 0x05, 0xe4, 0x04, 0xdc, - 0x01, 0x03, 0xc4, 0x00, 0x4f, 0x02, 0x3f, 0x00, 0x27, 0xaf, 0x01, 0xff, - 0x03, 0xa2, 0x01, 0x06, 0x46, 0xf5, 0x82, 0x32, 0x03, 0x40, 0x56, 0x96, - 0x2f, 0xeb, 0x20, 0x00, 0xb3, 0x06, 0x55, 0x38, 0x3a, 0xd2, 0x20, 0x40, - 0x4e, 0x9e, 0x2f, 0x38, 0x03, 0x00, 0x4d, 0x60, 0x44, 0x36, 0x03, 0x40, - 0x06, 0x37, 0x1d, 0x06, 0x5e, 0xcb, 0x11, 0xb9, 0x1a, 0x40, 0x49, 0x53, - 0x12, 0x20, 0xfe, 0x80, 0x0d, 0x4a, 0xac, 0x03, 0x21, 0xfe, 0xc0, 0x00, - 0x46, 0x24, 0x06, 0x28, 0xfe, 0x40, 0x46, 0x24, 0x06, 0x27, 0xfe, 0x40, - 0x80, 0x11, 0x06, 0xa9, 0x01, 0x01, 0xff, 0x4d, 0xd7, 0x79, 0xea, 0x20, - 0x00, 0x5b, 0x71, 0x0d, 0xed, 0x20, 0x40, 0xa1, 0x40, 0x02, 0x22, 0x00, - 0x26, 0x0c, 0x70, 0x1f, 0x16, 0x0c, 0xc8, 0x00, 0x06, 0x4a, 0xdd, 0x8f, - 0x18, 0x03, 0x40, 0x45, 0x5c, 0x00, 0xe1, 0x20, 0x00, 0x45, 0x25, 0x06, - 0x4d, 0x03, 0x40, 0x4a, 0x46, 0x05, 0xc1, 0x1a, 0x00, 0x4a, 0xad, 0x9f, - 0xc3, 0x1a, 0x40, 0x08, 0xdd, 0xbd, 0x06, 0x4b, 0x21, 0x9a, 0xd0, 0x20, - 0x40, 0x45, 0x5c, 0x00, 0x51, 0x03, 0x00, 0x45, 0x25, 0x06, 0x1c, 0x03, - 0x40, 0x05, 0x37, 0x05, 0x24, 0x04, 0xcf, 0x00, 0x01, 0xff, 0x80, 0x11, - 0x05, 0x88, 0x19, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xfe, 0x1d, 0x00, 0x45, - 0x25, 0x06, 0x54, 0x03, 0x40, 0x45, 0x5c, 0x00, 0xd6, 0x20, 0x00, 0x45, - 0x25, 0x06, 0xee, 0x20, 0x40, 0x45, 0x5c, 0x00, 0x1a, 0x03, 0x00, 0x45, - 0x25, 0x06, 0x49, 0x03, 0x40, 0x15, 0x40, 0x38, 0x8e, 0x02, 0x0d, 0x7c, - 0x07, 0x01, 0xff, 0xe1, 0x63, 0x03, 0x80, 0xeb, 0x01, 0xe2, 0xe8, 0x1d, - 0x80, 0xdf, 0x01, 0xe3, 0x68, 0x03, 0x80, 0xd3, 0x01, 0xe4, 0x69, 0x03, - 0x00, 0xe5, 0x64, 0x03, 0x80, 0xbd, 0x01, 0xe6, 0xeb, 0x1d, 0x80, 0xb1, - 0x01, 0xe7, 0xda, 0x1d, 0x00, 0xe8, 0x6a, 0x03, 0x00, 0xe9, 0x65, 0x03, - 0x80, 0x8e, 0x01, 0xeb, 0xdc, 0x1d, 0x00, 0xec, 0xdd, 0x1d, 0x80, 0x79, - 0xed, 0x6b, 0x03, 0x00, 0xee, 0xe0, 0x1d, 0x00, 0xef, 0x66, 0x03, 0x80, - 0x5b, 0xf0, 0xee, 0x1d, 0x00, 0xf2, 0x6c, 0x03, 0x80, 0x43, 0xf3, 0xe4, - 0x1d, 0x80, 0x38, 0xf4, 0x6d, 0x03, 0x80, 0x2d, 0xf5, 0x67, 0x03, 0x80, - 0x17, 0xf6, 0x6e, 0x03, 0x00, 0xf7, 0xf1, 0x1d, 0x80, 0x08, 0xf8, 0x6f, - 0x03, 0x00, 0xfa, 0xe6, 0x1d, 0x40, 0x46, 0x24, 0x06, 0xbf, 0x1a, 0x40, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x1b, 0x21, 0xf4, 0x1d, 0x00, 0x5b, - 0x45, 0x1a, 0xf0, 0x1d, 0x40, 0x4d, 0x52, 0x82, 0xc0, 0x1a, 0x40, 0x44, - 0xec, 0x74, 0xea, 0x1d, 0x40, 0x80, 0x01, 0xff, 0x45, 0x25, 0x06, 0xca, - 0x1d, 0x00, 0x47, 0xba, 0xa9, 0xe3, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x49, 0x1b, 0x21, 0xf3, 0x1d, 0x00, 0x5b, 0x45, 0x1a, 0xed, 0x1d, - 0x40, 0x59, 0x85, 0x20, 0xec, 0x1d, 0x00, 0x45, 0xec, 0xb2, 0xe5, 0x1d, - 0x40, 0x07, 0x40, 0x69, 0x01, 0xff, 0xe4, 0xd8, 0x1d, 0x00, 0xe7, 0xcc, - 0x1a, 0x00, 0xf2, 0xcd, 0x1a, 0x00, 0xf4, 0xce, 0x1a, 0x40, 0x55, 0x16, - 0x38, 0xd3, 0x1d, 0x40, 0x42, 0xa4, 0x02, 0xef, 0x1d, 0x00, 0x42, 0x53, - 0x00, 0xd9, 0x1d, 0x40, 0x48, 0x55, 0xb8, 0xd7, 0x1d, 0x40, 0x43, 0xec, - 0x0d, 0xe9, 0x1d, 0x40, 0x4f, 0xa8, 0x63, 0xf2, 0x1d, 0x00, 0xe5, 0xd4, - 0x1d, 0x00, 0x44, 0x91, 0xd9, 0xe7, 0x1d, 0x00, 0xef, 0xd5, 0x1d, 0x00, - 0xf6, 0xd6, 0x1d, 0x40, 0xe7, 0xdb, 0x1d, 0x00, 0xec, 0xde, 0x1d, 0x00, - 0xed, 0xdf, 0x1d, 0x00, 0xee, 0xe1, 0x1d, 0x00, 0xf2, 0xe2, 0x1d, 0x40, - 0x10, 0x59, 0x61, 0x11, 0x0b, 0x73, 0x9c, 0x01, 0xff, 0x44, 0xc3, 0x00, - 0xf7, 0x1d, 0x00, 0x45, 0xc8, 0x00, 0xf6, 0x1d, 0x40, 0x56, 0x06, 0x33, - 0x9a, 0x30, 0x00, 0x51, 0x0b, 0x33, 0x99, 0x30, 0x40, 0xae, 0x06, 0x47, - 0x64, 0x0d, 0xd0, 0x1d, 0x40, 0x46, 0x09, 0x66, 0xb2, 0x1a, 0x00, 0x07, - 0xc4, 0x20, 0x01, 0xff, 0x02, 0x45, 0x08, 0x11, 0x0c, 0x94, 0x86, 0x01, - 0xff, 0x45, 0x5c, 0x00, 0xc7, 0x1a, 0x00, 0x45, 0x25, 0x06, 0x2b, 0x03, - 0x40, 0x43, 0xb3, 0x11, 0x11, 0x03, 0x80, 0x06, 0x4a, 0xf7, 0x37, 0x3a, - 0x03, 0x40, 0x46, 0x24, 0x06, 0x2f, 0x03, 0x40, 0x4e, 0x30, 0x73, 0x4b, - 0x03, 0x00, 0x48, 0xa7, 0xa2, 0x09, 0x03, 0x00, 0x42, 0x5e, 0x01, 0x1b, - 0x03, 0x40, 0x11, 0xca, 0x55, 0xc1, 0x01, 0xb2, 0x01, 0xff, 0xa1, 0x36, - 0x04, 0xfc, 0x2a, 0x01, 0xff, 0x4f, 0x88, 0x65, 0x44, 0x03, 0x00, 0x47, - 0x4b, 0xc8, 0x43, 0x03, 0x00, 0x08, 0x1a, 0x25, 0x0c, 0x4b, 0x03, 0x99, - 0x42, 0x03, 0x00, 0x4d, 0xa2, 0x49, 0x45, 0x03, 0x40, 0x49, 0x82, 0xb4, - 0x44, 0xd2, 0x01, 0xb4, 0x01, 0xff, 0x48, 0x3d, 0xbc, 0x43, 0xd2, 0x01, - 0x46, 0xff, 0xd4, 0x42, 0xd2, 0x41, 0x05, 0x6d, 0xde, 0x2f, 0x4c, 0x04, - 0x8c, 0x4f, 0x03, 0x00, 0x02, 0x32, 0x00, 0x01, 0xff, 0x80, 0x0f, 0x8d, - 0x01, 0xff, 0x4b, 0xce, 0x90, 0xc8, 0x1d, 0x00, 0x46, 0xd8, 0x69, 0xc5, - 0x1d, 0x40, 0x46, 0xdf, 0x03, 0x00, 0x03, 0x80, 0x06, 0x49, 0xdd, 0x29, - 0x40, 0x03, 0x40, 0x46, 0x24, 0x06, 0x16, 0x03, 0x40, 0x06, 0xf4, 0x05, - 0x21, 0x07, 0xf1, 0x04, 0x01, 0xff, 0xe1, 0x70, 0x13, 0x01, 0x42, 0x1b, - 0x02, 0x71, 0x13, 0x01, 0x42, 0x2f, 0x04, 0x72, 0x13, 0x01, 0x42, 0xc1, - 0x08, 0x74, 0x13, 0x01, 0x42, 0x02, 0x00, 0x73, 0x13, 0x41, 0xa6, 0x20, - 0x43, 0xcd, 0x09, 0x67, 0x13, 0x01, 0x43, 0x2f, 0x27, 0x6c, 0x13, 0x01, - 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x66, 0x13, 0x41, 0x44, 0x25, 0x01, 0x69, - 0x13, 0x01, 0x42, 0x15, 0x02, 0x68, 0x13, 0x41, 0x43, 0xd7, 0x04, 0x6b, - 0x13, 0x01, 0x43, 0xfb, 0x05, 0x6a, 0x13, 0x41, 0x43, 0xbe, 0xe8, 0x00, - 0xe0, 0x01, 0xa2, 0xe1, 0x01, 0x46, 0xeb, 0x79, 0x1d, 0xe0, 0x01, 0xa4, - 0xcc, 0x01, 0xa6, 0xbd, 0x01, 0x47, 0x25, 0xc7, 0x03, 0xe0, 0x01, 0x44, - 0x2a, 0xe5, 0x18, 0xe0, 0x01, 0xe9, 0x0b, 0xe0, 0x81, 0x8f, 0x01, 0x44, - 0xb2, 0xe5, 0x0d, 0xe0, 0x01, 0x47, 0xc2, 0xc8, 0x0e, 0xe0, 0x01, 0x47, - 0x91, 0x64, 0x0f, 0xe0, 0x01, 0x45, 0x22, 0xde, 0x10, 0xe0, 0x01, 0x43, - 0x7c, 0x2d, 0x11, 0xe0, 0x01, 0x46, 0xa5, 0xd4, 0x12, 0xe0, 0x01, 0x45, - 0x9e, 0xdf, 0x13, 0xe0, 0x01, 0xb3, 0x4b, 0xb4, 0x3d, 0x43, 0xd3, 0xcb, - 0x16, 0xe0, 0x01, 0x44, 0xc6, 0xe7, 0x02, 0xe0, 0x01, 0xb9, 0x0f, 0xba, - 0x01, 0xff, 0x45, 0x3e, 0xdb, 0x08, 0xe0, 0x01, 0x46, 0x23, 0xd2, 0x06, - 0xe0, 0x41, 0x43, 0xb3, 0x00, 0x21, 0xe0, 0x01, 0xa5, 0x08, 0xef, 0x26, - 0xe0, 0x01, 0xf5, 0x23, 0xe0, 0x41, 0xb2, 0x06, 0x43, 0x2c, 0x09, 0x05, - 0xe0, 0x41, 0xe9, 0x20, 0xe0, 0x01, 0xf5, 0x1f, 0xe0, 0x41, 0x42, 0xdb, - 0x02, 0x1c, 0xe0, 0x01, 0x45, 0x2e, 0xe1, 0x15, 0xe0, 0x41, 0xa8, 0x0c, - 0x44, 0xfe, 0xe5, 0x14, 0xe0, 0x01, 0x48, 0xb5, 0xb5, 0x24, 0xe0, 0x41, - 0xe1, 0x1e, 0xe0, 0x01, 0x42, 0x12, 0x00, 0x1b, 0xe0, 0x41, 0x4b, 0xf0, - 0x97, 0x0a, 0xe0, 0x01, 0x07, 0x50, 0x1f, 0x06, 0x43, 0x6d, 0x25, 0x09, - 0xe0, 0x41, 0x47, 0x57, 0xc5, 0x29, 0xe0, 0x01, 0x49, 0xb4, 0xb5, 0x27, - 0xe0, 0x41, 0x43, 0xec, 0x04, 0x2a, 0xe0, 0x01, 0x44, 0xc9, 0xb5, 0x17, - 0xe0, 0x41, 0x45, 0xe2, 0xdc, 0x0c, 0xe0, 0x01, 0x44, 0xa6, 0xe6, 0x04, - 0xe0, 0x41, 0x46, 0x58, 0xc5, 0x28, 0xe0, 0x01, 0x43, 0x5f, 0xc8, 0x01, - 0xe0, 0x41, 0x46, 0x09, 0xd1, 0x52, 0x03, 0x00, 0x4e, 0x76, 0x41, 0xdc, - 0x20, 0x40, 0x09, 0xd2, 0xb2, 0x06, 0x50, 0xc9, 0x5f, 0x47, 0x03, 0x40, - 0x46, 0x00, 0x04, 0xdd, 0x20, 0x80, 0x20, 0x47, 0x9d, 0x3f, 0xdf, 0x20, - 0x00, 0x46, 0xe9, 0xd2, 0xe3, 0x20, 0x00, 0xb3, 0x06, 0x58, 0x87, 0x28, - 0xe4, 0x20, 0x40, 0x45, 0x26, 0x54, 0xe2, 0x20, 0x00, 0x45, 0xdc, 0x04, - 0xde, 0x20, 0x40, 0x4a, 0x9b, 0x0c, 0xe0, 0x20, 0x40, 0xa5, 0x95, 0x02, - 0x48, 0x1c, 0x21, 0x08, 0x03, 0x80, 0x81, 0x02, 0xaf, 0x01, 0xff, 0xb4, - 0xc5, 0x01, 0x04, 0x3d, 0x01, 0x11, 0x02, 0xa7, 0x01, 0x01, 0xff, 0x4b, - 0xdc, 0x8f, 0x1e, 0x03, 0x00, 0x4b, 0xb8, 0x02, 0xb3, 0x1a, 0x40, 0x80, - 0x06, 0x53, 0x63, 0x43, 0xb0, 0x1a, 0x40, 0x4c, 0x78, 0x84, 0x0b, 0x03, - 0x00, 0x45, 0xb7, 0x20, 0x5d, 0x03, 0x80, 0x94, 0x01, 0x50, 0x7e, 0x2e, - 0xcd, 0x1d, 0x00, 0x4c, 0x79, 0x20, 0x0f, 0x03, 0x00, 0x4e, 0xc2, 0x20, - 0x61, 0x03, 0x80, 0x7b, 0x48, 0xf3, 0x82, 0x33, 0x03, 0x00, 0x46, 0xd8, - 0x69, 0x5e, 0x03, 0x80, 0x68, 0xaf, 0x5a, 0xb0, 0x41, 0x02, 0x0d, 0x00, - 0x31, 0x45, 0x99, 0x20, 0x60, 0x03, 0x80, 0x1b, 0x09, 0x32, 0x00, 0x01, - 0xff, 0x05, 0xf0, 0x07, 0x06, 0x4e, 0x5f, 0x44, 0xe6, 0x20, 0x40, 0x45, - 0x5c, 0x00, 0x0e, 0x03, 0x00, 0x45, 0x25, 0x06, 0x48, 0x03, 0x40, 0x80, - 0x01, 0xff, 0x49, 0x53, 0x12, 0x22, 0xfe, 0x00, 0x4a, 0xac, 0x03, 0x23, - 0xfe, 0x40, 0x54, 0xb0, 0x3d, 0x62, 0x03, 0x00, 0x48, 0x5a, 0x6d, 0x5a, - 0x03, 0x40, 0x50, 0xf9, 0x5a, 0xbc, 0x1a, 0x00, 0x09, 0x1a, 0x6b, 0x01, - 0xff, 0x45, 0x5c, 0x00, 0xc9, 0x1a, 0x00, 0x45, 0x25, 0x06, 0xca, 0x1a, - 0x40, 0x4e, 0x48, 0x74, 0xb8, 0x1a, 0x00, 0x47, 0x01, 0x83, 0x3f, 0x03, - 0x40, 0x46, 0x24, 0x06, 0x5f, 0x03, 0x40, 0x46, 0x24, 0x06, 0xfc, 0x1d, - 0x40, 0x46, 0x24, 0x06, 0x5c, 0x03, 0x40, 0x80, 0x11, 0x04, 0x77, 0x00, - 0x01, 0xff, 0x4c, 0x78, 0x84, 0xc1, 0x1d, 0x00, 0x4c, 0x79, 0x20, 0xc0, - 0x1d, 0x40, 0x45, 0x5c, 0x00, 0x07, 0x03, 0x80, 0x0d, 0x45, 0x25, 0x06, - 0x23, 0x03, 0xc0, 0x00, 0x45, 0xc2, 0x00, 0xfa, 0x1d, 0x40, 0x80, 0x01, - 0xff, 0x44, 0xc3, 0x00, 0xf8, 0x1d, 0x00, 0x45, 0xc8, 0x00, 0x58, 0x03, - 0x40, 0x46, 0x24, 0x06, 0x24, 0x03, 0x00, 0x45, 0x56, 0xd7, 0xb1, 0x1a, - 0x40, 0x4b, 0x85, 0x96, 0xfb, 0x1d, 0x00, 0x09, 0x25, 0xb7, 0x01, 0xff, - 0x06, 0xf4, 0x05, 0x30, 0x07, 0xf1, 0x04, 0x06, 0x4d, 0x34, 0x81, 0xf1, - 0xa8, 0x40, 0xe1, 0xea, 0xa8, 0x00, 0x42, 0x1b, 0x02, 0xec, 0xa8, 0x00, - 0x42, 0x2f, 0x04, 0xed, 0xa8, 0x00, 0x42, 0xc1, 0x08, 0xee, 0xa8, 0x00, - 0x42, 0x71, 0x00, 0xef, 0xa8, 0x00, 0xf5, 0xeb, 0xa8, 0x00, 0x42, 0x02, - 0x00, 0xf0, 0xa8, 0x40, 0x45, 0xd1, 0x09, 0xe8, 0xa8, 0x00, 0xa6, 0x2e, - 0x44, 0xb8, 0x27, 0xe9, 0xa8, 0x00, 0x43, 0xcd, 0x09, 0xe1, 0xa8, 0x00, - 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xe0, 0xa8, 0x40, 0x44, 0x25, - 0x01, 0xe3, 0xa8, 0x00, 0x42, 0x15, 0x02, 0xe2, 0xa8, 0x40, 0x44, 0x96, - 0x1b, 0xe7, 0xa8, 0x00, 0x42, 0x30, 0x27, 0xe6, 0xa8, 0x40, 0x43, 0xd7, - 0x04, 0xe5, 0xa8, 0x00, 0x43, 0xfb, 0x05, 0xe4, 0xa8, 0x40, 0xa1, 0xb7, - 0x03, 0x46, 0x57, 0xb8, 0x27, 0x03, 0x00, 0x50, 0xd5, 0x03, 0x02, 0x03, - 0x80, 0xa3, 0x03, 0x09, 0xbe, 0x0e, 0x92, 0x03, 0xaf, 0xeb, 0x02, 0x08, - 0xdd, 0xc2, 0x01, 0xff, 0x4e, 0xbe, 0x6f, 0x85, 0x04, 0x00, 0x08, 0xe9, - 0x0f, 0xcf, 0x02, 0x46, 0x57, 0x4a, 0x7c, 0xa6, 0x00, 0x07, 0xf1, 0x04, - 0x52, 0x4d, 0xb5, 0x37, 0x89, 0x04, 0x00, 0xb0, 0x30, 0x65, 0x7c, 0x07, - 0x8f, 0xe0, 0x01, 0xb4, 0x06, 0x45, 0x33, 0xe1, 0x6f, 0xa6, 0x40, 0x50, - 0x79, 0x5c, 0x70, 0xa6, 0x00, 0x55, 0xad, 0x37, 0x72, 0xa6, 0x00, 0x44, - 0x51, 0x90, 0x83, 0x04, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x49, 0x53, 0x12, - 0x2e, 0xfe, 0x00, 0x4a, 0xac, 0x03, 0x2f, 0xfe, 0x40, 0xa1, 0x0c, 0x47, - 0x86, 0xc9, 0x87, 0x04, 0x00, 0x4d, 0x4e, 0x81, 0x86, 0x04, 0x40, 0x4c, - 0x58, 0x89, 0x84, 0x04, 0x00, 0x45, 0x45, 0xca, 0x7d, 0xa6, 0x40, 0xe1, - 0xf6, 0x2d, 0x00, 0xa2, 0xe2, 0x01, 0x43, 0x21, 0x2c, 0xf1, 0x2d, 0x00, - 0xa4, 0xcf, 0x01, 0xa5, 0xad, 0x01, 0x44, 0xd6, 0xe4, 0xf4, 0x2d, 0x00, - 0x43, 0x1e, 0xc7, 0xe2, 0x2d, 0x00, 0x42, 0x22, 0x00, 0xef, 0x2d, 0x80, - 0x93, 0x01, 0xe9, 0x75, 0xa6, 0x80, 0x77, 0x42, 0x1b, 0x02, 0xe6, 0x2d, - 0x00, 0x4a, 0x8f, 0x53, 0xfd, 0x2d, 0x00, 0x4c, 0x84, 0x8a, 0xf9, 0x2d, - 0x00, 0xef, 0xea, 0x2d, 0x80, 0x5a, 0x42, 0x6f, 0x02, 0xeb, 0x2d, 0x00, - 0xb3, 0x40, 0xb4, 0x34, 0xf5, 0x77, 0xa6, 0x80, 0x29, 0x42, 0x32, 0x00, - 0xe1, 0x2d, 0x00, 0xb9, 0x0d, 0xba, 0x01, 0xff, 0xe5, 0xe5, 0x2d, 0x00, - 0x42, 0xb0, 0x01, 0xe4, 0x2d, 0x40, 0x42, 0x8a, 0x00, 0xfa, 0x2d, 0x00, - 0x43, 0x6d, 0x28, 0x79, 0xa6, 0x00, 0xe9, 0x76, 0xa6, 0x00, 0xf5, 0xfb, - 0x2d, 0x40, 0x4b, 0xe0, 0x95, 0x74, 0xa6, 0x40, 0xe5, 0xee, 0x2d, 0x00, - 0x42, 0xc7, 0x02, 0xf0, 0x2d, 0x40, 0xa8, 0x06, 0x48, 0x04, 0x87, 0x7a, - 0xa6, 0x40, 0xe1, 0xf2, 0x2d, 0x00, 0x43, 0x29, 0x1e, 0xf3, 0x2d, 0x40, - 0x44, 0x03, 0x75, 0x7b, 0xa6, 0x40, 0xe5, 0xf7, 0x2d, 0x00, 0x08, 0x9d, - 0xbf, 0x01, 0xff, 0xe1, 0xfc, 0x2d, 0x00, 0x47, 0x57, 0xc5, 0xff, 0x2d, - 0x00, 0xe5, 0x9f, 0xa6, 0x40, 0x47, 0x61, 0x8b, 0x78, 0xa6, 0x40, 0xe6, - 0x9e, 0xa6, 0x00, 0xec, 0xe7, 0x2d, 0x00, 0xed, 0xe8, 0x2d, 0x00, 0xee, - 0xe9, 0x2d, 0x00, 0xf2, 0xec, 0x2d, 0x00, 0xf3, 0xed, 0x2d, 0xc0, 0x00, - 0x43, 0xf9, 0x75, 0xf5, 0x2d, 0x40, 0xe5, 0xe3, 0x2d, 0x00, 0x44, 0xe2, - 0xdc, 0xf8, 0x2d, 0x40, 0xe5, 0xe0, 0x2d, 0x00, 0x46, 0x58, 0xc5, 0xfe, - 0x2d, 0x40, 0x4d, 0xb5, 0x37, 0x71, 0xa6, 0x00, 0x4e, 0x40, 0x76, 0x88, - 0x04, 0x40, 0x04, 0x1a, 0x04, 0x0d, 0x4f, 0xcf, 0x69, 0x26, 0xfe, 0xc0, - 0x00, 0x46, 0x24, 0x06, 0x2d, 0xfe, 0x40, 0x45, 0x5c, 0x00, 0x13, 0x03, - 0x80, 0x06, 0x45, 0x25, 0x06, 0x26, 0x03, 0x40, 0x46, 0xc7, 0x00, 0x15, - 0x03, 0x40, 0x4b, 0xce, 0x00, 0xd5, 0x20, 0x00, 0x4c, 0xe8, 0x8c, 0xd9, - 0x20, 0x40, 0x46, 0x24, 0x06, 0x2d, 0x03, 0x40, 0x49, 0x3d, 0x21, 0x10, - 0x03, 0x00, 0x43, 0x09, 0x0d, 0x0c, 0x03, 0xc0, 0x00, 0x46, 0x24, 0x06, - 0x2c, 0x03, 0x40, 0x4a, 0x3b, 0xa3, 0x3b, 0x13, 0x01, 0xb2, 0x01, 0xff, - 0x43, 0xb3, 0x11, 0x06, 0x03, 0x80, 0x11, 0x05, 0xf7, 0x37, 0x01, 0xff, - 0x45, 0x5c, 0x00, 0x46, 0x03, 0x00, 0x45, 0x25, 0x06, 0x2a, 0x03, 0x40, - 0x46, 0x24, 0x06, 0x2e, 0x03, 0x00, 0x47, 0xa5, 0xc3, 0xcb, 0x1d, 0x40, - 0x04, 0xcf, 0x34, 0x3a, 0x0f, 0xfd, 0x68, 0x2a, 0xae, 0x11, 0x08, 0x09, - 0x61, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xf0, 0x20, 0x00, 0x45, 0x25, 0x06, - 0x59, 0x03, 0x40, 0x4c, 0x44, 0x8b, 0xe7, 0x20, 0x00, 0x0c, 0xbb, 0x0e, - 0x01, 0xff, 0x4b, 0xce, 0x00, 0xd4, 0x20, 0x00, 0x4c, 0xe8, 0x8c, 0xda, - 0x20, 0x40, 0x45, 0x5c, 0x00, 0x4c, 0x03, 0x00, 0x45, 0x25, 0x06, 0xfd, - 0x1d, 0x40, 0x80, 0x0f, 0x8d, 0x01, 0xff, 0x4b, 0x5f, 0x94, 0xc9, 0x1d, - 0x00, 0x46, 0xd8, 0x69, 0xc7, 0x1d, 0x40, 0x46, 0xdf, 0x03, 0x01, 0x03, - 0x80, 0x06, 0x49, 0xdd, 0x29, 0x41, 0x03, 0x40, 0x46, 0x24, 0x06, 0x17, - 0x03, 0x40, 0x4d, 0xf4, 0x7d, 0xa5, 0xf4, 0x01, 0x42, 0x10, 0x00, 0x3a, - 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x46, 0xa2, 0x11, 0x54, 0x22, 0x00, - 0x44, 0xdb, 0x02, 0xa1, 0x20, 0x40, 0xab, 0x06, 0x44, 0xbe, 0xe6, 0x65, - 0xf9, 0x41, 0x45, 0x84, 0xca, 0xb3, 0xfa, 0x01, 0x4a, 0xd1, 0xa8, 0x78, - 0xf3, 0x41, 0xa1, 0xdb, 0x03, 0x51, 0x21, 0x54, 0x9a, 0x23, 0x00, 0xa9, - 0xbc, 0x03, 0xaf, 0x01, 0xff, 0x02, 0x36, 0x01, 0x8f, 0x01, 0x02, 0xc7, - 0x02, 0x2a, 0x42, 0x2c, 0x0b, 0x01, 0x26, 0x80, 0x06, 0x47, 0x67, 0x75, - 0x21, 0xf9, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x0c, 0xb2, 0x29, - 0xf3, 0x01, 0x44, 0x98, 0x07, 0x27, 0xf3, 0x01, 0x44, 0x4d, 0x2b, 0x28, - 0xf3, 0x01, 0x47, 0x3b, 0xcc, 0x2a, 0xf3, 0x41, 0x43, 0x4f, 0x02, 0x50, - 0x20, 0x00, 0x02, 0x06, 0x00, 0x01, 0xff, 0x44, 0x4a, 0xe4, 0xd5, 0xf4, - 0x01, 0x58, 0x47, 0x26, 0x4d, 0x2a, 0x00, 0x4d, 0x0e, 0x7e, 0x10, 0xf5, - 0x01, 0x0d, 0x42, 0x7e, 0x34, 0x02, 0x6f, 0x00, 0x16, 0xb5, 0x01, 0xff, - 0x47, 0x52, 0x5b, 0x02, 0xf3, 0x01, 0x50, 0xf9, 0x5e, 0x4c, 0x2a, 0xc0, - 0x00, 0x52, 0x8b, 0x49, 0x50, 0x2a, 0x40, 0x44, 0xf5, 0x10, 0xcf, 0x2a, - 0x80, 0x0d, 0x46, 0x14, 0x32, 0xd0, 0x2a, 0xc0, 0x00, 0x4c, 0xf3, 0x25, - 0xd2, 0x2a, 0x40, 0x4c, 0xf3, 0x25, 0xd1, 0x2a, 0x40, 0x4c, 0xe8, 0x89, - 0xea, 0xf4, 0x01, 0x4b, 0x71, 0x99, 0xeb, 0xf4, 0x41, 0x06, 0xec, 0x06, - 0x51, 0x05, 0xc2, 0x0e, 0x01, 0xff, 0xa3, 0x3e, 0x68, 0xe5, 0x03, 0x03, - 0xf5, 0x01, 0x53, 0x0e, 0x44, 0xf3, 0x27, 0x00, 0x48, 0xad, 0x23, 0x31, - 0x22, 0x00, 0x51, 0xfb, 0x03, 0xbb, 0x21, 0x00, 0x05, 0xc8, 0x00, 0x0f, - 0xb4, 0x01, 0xff, 0x53, 0x48, 0x46, 0xb7, 0x21, 0x00, 0x60, 0x4c, 0x0e, - 0x6e, 0x2b, 0x40, 0x5b, 0xbd, 0x17, 0xd8, 0xf5, 0x01, 0x66, 0x9c, 0x06, - 0x01, 0xf5, 0xc1, 0x00, 0x59, 0x53, 0x20, 0x02, 0xf5, 0x41, 0x52, 0xd5, - 0x4d, 0x41, 0x29, 0x00, 0x4f, 0x92, 0x6a, 0x32, 0x22, 0x40, 0xa5, 0xac, - 0x01, 0xa6, 0x88, 0x01, 0x04, 0xb8, 0x27, 0x78, 0x03, 0xcd, 0x09, 0x68, - 0xb3, 0x45, 0xb4, 0x01, 0xff, 0x02, 0x92, 0x01, 0x32, 0x04, 0x25, 0x01, - 0x22, 0xb7, 0x01, 0xff, 0x04, 0xb8, 0x28, 0x0f, 0xaf, 0x01, 0xff, 0x47, - 0x51, 0xc3, 0x51, 0xf5, 0x01, 0x47, 0xba, 0xc3, 0x5d, 0xf5, 0x41, 0x47, - 0x51, 0xc3, 0x5b, 0xf5, 0x01, 0x47, 0xba, 0xc3, 0x67, 0xf5, 0x41, 0x47, - 0x51, 0xc3, 0x52, 0xf5, 0x01, 0x47, 0xba, 0xc3, 0x5e, 0xf5, 0x41, 0x47, - 0x51, 0xc3, 0x59, 0xf5, 0x01, 0x47, 0xba, 0xc3, 0x65, 0xf5, 0x41, 0x04, - 0x96, 0x1b, 0x11, 0x02, 0x30, 0x27, 0x01, 0xff, 0x47, 0x51, 0xc3, 0x55, - 0xf5, 0x01, 0x47, 0xba, 0xc3, 0x61, 0xf5, 0x41, 0x47, 0x51, 0xc3, 0x56, - 0xf5, 0x01, 0x47, 0xba, 0xc3, 0x62, 0xf5, 0x41, 0x47, 0x51, 0xc3, 0x50, - 0xf5, 0x01, 0x47, 0xba, 0xc3, 0x5c, 0xf5, 0x41, 0x47, 0x51, 0xc3, 0x58, - 0xf5, 0x01, 0x47, 0xba, 0xc3, 0x64, 0xf5, 0x41, 0x03, 0xd7, 0x04, 0x11, - 0x03, 0xfb, 0x05, 0x01, 0xff, 0x47, 0x51, 0xc3, 0x53, 0xf5, 0x01, 0x47, - 0xba, 0xc3, 0x5f, 0xf5, 0x41, 0x47, 0x51, 0xc3, 0x54, 0xf5, 0x01, 0x47, - 0xba, 0xc3, 0x60, 0xf5, 0x41, 0x04, 0xc9, 0x00, 0x11, 0x05, 0xdf, 0x68, - 0x01, 0xff, 0x47, 0x51, 0xc3, 0x5a, 0xf5, 0x01, 0x47, 0xba, 0xc3, 0x66, - 0xf5, 0x41, 0x47, 0x51, 0xc3, 0x57, 0xf5, 0x01, 0x47, 0xba, 0xc3, 0x63, - 0xf5, 0x41, 0x06, 0xba, 0x89, 0x06, 0x46, 0x7b, 0xd4, 0xcb, 0xf4, 0x41, - 0x49, 0x83, 0xad, 0x7b, 0xf3, 0x01, 0x47, 0xb2, 0xb6, 0x42, 0xf9, 0x41, - 0x53, 0xc3, 0x45, 0x81, 0xf5, 0x01, 0x02, 0x6e, 0x02, 0x06, 0x4f, 0x72, - 0x6c, 0xdb, 0xf3, 0x41, 0x48, 0x5e, 0x7a, 0xac, 0xf3, 0x01, 0x4e, 0xb6, - 0x71, 0x4f, 0xf4, 0x41, 0x58, 0xc7, 0x24, 0x05, 0xd8, 0x00, 0x08, 0xe4, - 0x9c, 0xb1, 0x01, 0x07, 0x1d, 0x0d, 0x06, 0x52, 0x2c, 0x2f, 0x01, 0xd8, - 0x40, 0x43, 0xca, 0xe8, 0xc3, 0x31, 0x00, 0xe4, 0xd4, 0x31, 0x00, 0xe8, - 0xd0, 0x31, 0x80, 0x5b, 0xee, 0xcf, 0x31, 0x00, 0xf0, 0xd2, 0x31, 0x80, - 0x46, 0xf1, 0xe3, 0x31, 0x00, 0xf3, 0xd1, 0x31, 0x80, 0x15, 0xf4, 0xc0, - 0x31, 0x80, 0x0c, 0x42, 0xc3, 0x3d, 0xc1, 0x31, 0x00, 0x42, 0xcb, 0xe8, - 0xc2, 0x31, 0x40, 0xee, 0xdd, 0x31, 0x40, 0xe7, 0xda, 0x31, 0x00, 0xf0, - 0xd3, 0x31, 0x00, 0xf4, 0xd9, 0x31, 0x00, 0xf7, 0xc4, 0x31, 0x80, 0x0f, - 0xfa, 0xd7, 0x31, 0xc0, 0x00, 0x42, 0xc3, 0x3d, 0xc9, 0x31, 0x00, 0xfa, - 0xde, 0x31, 0x40, 0xe7, 0xdf, 0x31, 0x00, 0xfa, 0xd8, 0x31, 0x40, 0xe4, - 0xdb, 0x31, 0x00, 0xe7, 0xe2, 0x31, 0x00, 0xfa, 0xdc, 0x31, 0x40, 0xe7, - 0xd6, 0x31, 0x00, 0xf0, 0xc7, 0x31, 0x80, 0x2e, 0x43, 0x9f, 0xe9, 0xe0, - 0x31, 0x00, 0xfa, 0xd5, 0x31, 0xc0, 0x00, 0xe7, 0xc6, 0x31, 0x00, 0xf4, - 0xca, 0x31, 0x00, 0xf7, 0xcd, 0x31, 0x80, 0x12, 0xfa, 0xc5, 0x31, 0xc0, - 0x00, 0xf0, 0xcb, 0x31, 0x00, 0xfa, 0xce, 0x31, 0xc0, 0x00, 0xe7, 0xe1, - 0x31, 0x40, 0xe7, 0xc8, 0x31, 0x40, 0x42, 0xc3, 0x3d, 0xcc, 0x31, 0x40, - 0xa2, 0xba, 0x06, 0xa3, 0xfb, 0x04, 0xa4, 0xe6, 0x04, 0xa5, 0xbe, 0x04, - 0xa6, 0xaf, 0x04, 0xa7, 0x8c, 0x04, 0xa8, 0xe4, 0x03, 0xaa, 0xbc, 0x03, - 0x06, 0x46, 0x9d, 0xab, 0x03, 0xac, 0xf8, 0x02, 0xad, 0xc1, 0x02, 0x04, - 0x62, 0xe6, 0xa1, 0x02, 0x43, 0xae, 0x18, 0xb9, 0x2e, 0x00, 0xb0, 0x82, - 0x02, 0xb2, 0xe9, 0x01, 0xb3, 0x51, 0xb4, 0x37, 0xb7, 0x01, 0xff, 0xa1, - 0x11, 0x04, 0x8c, 0x18, 0x01, 0xff, 0x43, 0xcd, 0x09, 0xc3, 0x2e, 0x00, - 0x43, 0x25, 0x09, 0xc4, 0x2e, 0x40, 0x03, 0x3c, 0xe9, 0x11, 0x04, 0xf4, - 0x04, 0x01, 0xff, 0x43, 0xcd, 0x09, 0xa1, 0x2e, 0x00, 0x43, 0x25, 0x09, - 0xa2, 0x2e, 0x40, 0x43, 0xcd, 0x09, 0xcd, 0x2e, 0x00, 0x43, 0x25, 0x09, - 0xce, 0x2e, 0x40, 0x44, 0x3d, 0x16, 0x87, 0x2e, 0x00, 0x45, 0xfc, 0x95, - 0x93, 0x2e, 0x00, 0x44, 0x76, 0xe5, 0xc1, 0x2e, 0x00, 0x45, 0x0b, 0xe1, - 0xf1, 0x2e, 0x40, 0xa5, 0x74, 0x44, 0x22, 0xe5, 0xb6, 0x2e, 0x00, 0xa9, - 0x3f, 0x05, 0x3d, 0x06, 0x2f, 0xae, 0x16, 0x06, 0x9f, 0xd4, 0x06, 0x42, - 0x24, 0x0a, 0x9c, 0x2e, 0x40, 0x43, 0xcd, 0x09, 0xac, 0x2e, 0x00, 0x43, - 0x25, 0x09, 0xad, 0x2e, 0x40, 0x43, 0xab, 0x24, 0x92, 0x2e, 0x00, 0x04, - 0x67, 0x4b, 0x01, 0xff, 0x43, 0xcd, 0x09, 0x94, 0x2e, 0x00, 0x43, 0x25, - 0x09, 0x95, 0x2e, 0x40, 0x43, 0xcd, 0x09, 0x8c, 0x2e, 0x00, 0x43, 0x25, - 0x09, 0x8d, 0x2e, 0x40, 0x42, 0xb2, 0x7d, 0xaf, 0x2e, 0x00, 0x09, 0x4b, - 0x84, 0x01, 0xff, 0xa8, 0x14, 0xb7, 0x06, 0x46, 0x99, 0xcd, 0xe9, 0x2e, - 0x40, 0x43, 0xb5, 0xe8, 0xcc, 0x2e, 0x00, 0x44, 0xa1, 0x94, 0xe8, 0x2e, - 0x40, 0x4e, 0xd0, 0x6e, 0xa6, 0x2e, 0x00, 0x43, 0x2d, 0x04, 0xc6, 0x2e, - 0x40, 0x42, 0x13, 0x00, 0x8b, 0x2e, 0x00, 0x05, 0x1c, 0x75, 0x01, 0xff, - 0x43, 0xcd, 0x09, 0x82, 0x2e, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, - 0x84, 0x2e, 0x00, 0x42, 0x15, 0x02, 0x83, 0x2e, 0x40, 0xa1, 0x06, 0x45, - 0x14, 0x66, 0x80, 0x2e, 0x40, 0x42, 0x9e, 0x01, 0xd7, 0x2e, 0x00, 0xed, - 0xb7, 0x2e, 0x00, 0xf0, 0x99, 0x2e, 0x40, 0x03, 0xaf, 0x3f, 0x06, 0x45, - 0xec, 0x1a, 0x85, 0x2e, 0x40, 0x43, 0xcd, 0x09, 0xa4, 0x2e, 0x00, 0x43, - 0x25, 0x09, 0xa5, 0x2e, 0x40, 0x44, 0xfa, 0x05, 0xb4, 0x2e, 0x00, 0x43, - 0xcd, 0x09, 0xb1, 0x2e, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xb3, - 0x2e, 0x00, 0x42, 0x15, 0x02, 0xb2, 0x2e, 0x40, 0xa5, 0x26, 0xaf, 0x01, - 0xff, 0x42, 0x10, 0x00, 0x9d, 0x2e, 0x00, 0x44, 0xe9, 0x47, 0xbd, 0x2e, - 0x00, 0x44, 0x12, 0x18, 0x9f, 0x2e, 0x00, 0x04, 0xb5, 0x10, 0x01, 0xff, - 0x43, 0xcd, 0x09, 0xd5, 0x2e, 0x00, 0x43, 0x25, 0x09, 0xd6, 0x2e, 0x40, - 0x42, 0x8a, 0x00, 0xbc, 0x2e, 0x00, 0x42, 0xa4, 0x02, 0xb5, 0x2e, 0x40, - 0x04, 0x62, 0xaf, 0x11, 0x04, 0x0a, 0x0d, 0x01, 0xff, 0x43, 0xcd, 0x09, - 0xd1, 0x2e, 0x00, 0x43, 0x25, 0x09, 0xd2, 0x2e, 0x40, 0x44, 0xfa, 0x05, - 0x91, 0x2e, 0x00, 0x43, 0xcd, 0x09, 0x8e, 0x2e, 0x00, 0xb4, 0x01, 0xff, - 0x44, 0x25, 0x01, 0x90, 0x2e, 0x00, 0x42, 0x15, 0x02, 0x8f, 0x2e, 0x40, - 0x43, 0xcd, 0x09, 0x88, 0x2e, 0x00, 0x43, 0x25, 0x09, 0x89, 0x2e, 0x40, - 0x0c, 0x48, 0x84, 0x06, 0x43, 0x0c, 0x02, 0xa9, 0x2e, 0x40, 0x46, 0xd2, - 0x87, 0xef, 0x2e, 0x00, 0x44, 0x96, 0x1b, 0xeb, 0x2e, 0x00, 0xb4, 0x01, - 0xff, 0x44, 0xc6, 0xe6, 0xed, 0x2e, 0x00, 0x45, 0x0b, 0xe1, 0xf2, 0x2e, - 0x40, 0x43, 0x1a, 0x00, 0x98, 0x2e, 0x00, 0x02, 0x89, 0x00, 0x06, 0x43, - 0x2d, 0x04, 0xc7, 0x2e, 0x40, 0xe4, 0xe1, 0x2e, 0x00, 0x03, 0xc3, 0x08, - 0x01, 0xff, 0x43, 0xcd, 0x09, 0x96, 0x2e, 0x00, 0x43, 0x25, 0x09, 0x97, - 0x2e, 0x40, 0x44, 0x05, 0x76, 0xe4, 0x2e, 0x00, 0x05, 0xb4, 0x1d, 0x01, - 0xff, 0x43, 0xcd, 0x09, 0xbe, 0x2e, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, - 0x01, 0xc0, 0x2e, 0x00, 0x42, 0x15, 0x02, 0xbf, 0x2e, 0x40, 0x43, 0xe0, - 0x0b, 0xa3, 0x2e, 0x00, 0x43, 0x35, 0x66, 0xca, 0x2e, 0x40, 0x03, 0x42, - 0x04, 0x0c, 0x42, 0x15, 0x01, 0xb8, 0x2e, 0x00, 0x42, 0x4d, 0x00, 0xab, - 0x2e, 0x40, 0x43, 0xcd, 0x09, 0xdd, 0x2e, 0x00, 0xb4, 0x01, 0xff, 0x44, - 0x25, 0x01, 0xdf, 0x2e, 0x00, 0x42, 0x15, 0x02, 0xde, 0x2e, 0x40, 0x44, - 0xcb, 0x0d, 0x9e, 0x2e, 0x00, 0x49, 0x7c, 0xb1, 0x8a, 0x2e, 0x00, 0x42, - 0xc4, 0x16, 0xa8, 0x2e, 0x40, 0x0c, 0x48, 0x84, 0x28, 0x44, 0xe7, 0xd2, - 0x9b, 0x2e, 0x00, 0xa9, 0x14, 0xac, 0x06, 0x42, 0xd1, 0x00, 0xa7, 0x2e, - 0x40, 0x43, 0xf9, 0x42, 0x81, 0x2e, 0x00, 0x45, 0xd4, 0x80, 0xc2, 0x2e, - 0x40, 0x42, 0xf5, 0x0f, 0xcf, 0x2e, 0x00, 0x46, 0x85, 0xd6, 0xa0, 0x2e, - 0x40, 0x44, 0x09, 0x9f, 0xe6, 0x2e, 0x00, 0x44, 0xac, 0x65, 0xcb, 0x2e, - 0x00, 0x46, 0xd2, 0x87, 0xf0, 0x2e, 0x00, 0xa5, 0x70, 0xa6, 0x5c, 0xa7, - 0x4e, 0x45, 0x34, 0xaa, 0xe2, 0x2e, 0x00, 0xac, 0x3a, 0xb3, 0x1a, 0xb4, - 0x06, 0x44, 0xe8, 0x11, 0xdb, 0x2e, 0x40, 0x4d, 0x7c, 0x79, 0xd9, 0x2e, - 0x00, 0x44, 0xc6, 0xe6, 0xee, 0x2e, 0x00, 0x45, 0x0b, 0xe1, 0xf3, 0x2e, - 0x40, 0x43, 0x69, 0x10, 0xe7, 0x2e, 0x00, 0x42, 0x27, 0x01, 0xc5, 0x2e, - 0x00, 0x44, 0x40, 0x08, 0xc9, 0x2e, 0x00, 0x43, 0x74, 0xa8, 0xb0, 0x2e, - 0x00, 0x45, 0xa7, 0x75, 0xc8, 0x2e, 0x40, 0x43, 0xa4, 0x4b, 0xda, 0x2e, - 0x00, 0x43, 0x0a, 0x0d, 0xd3, 0x2e, 0x40, 0x43, 0x8a, 0x00, 0xd4, 0x2e, - 0x00, 0x43, 0xae, 0x18, 0xd0, 0x2e, 0x40, 0x43, 0x4b, 0x0b, 0xe5, 0x2e, - 0x00, 0x42, 0xd2, 0x06, 0xdc, 0x2e, 0x00, 0x43, 0xb1, 0x26, 0xea, 0x2e, - 0x40, 0x42, 0x8a, 0x00, 0xe0, 0x2e, 0x00, 0x43, 0x97, 0x1b, 0xec, 0x2e, - 0x40, 0x45, 0x3c, 0xc5, 0xae, 0x2e, 0x00, 0x43, 0x5d, 0x85, 0xd8, 0x2e, - 0x00, 0xaf, 0x11, 0x05, 0xcb, 0xdf, 0x01, 0xff, 0x43, 0xcd, 0x09, 0xba, - 0x2e, 0x00, 0x43, 0x25, 0x09, 0xbb, 0x2e, 0x40, 0x4b, 0xd2, 0x96, 0xaa, - 0x2e, 0x00, 0x42, 0xd2, 0x04, 0xe3, 0x2e, 0x00, 0xf8, 0x86, 0x2e, 0x40, - 0x44, 0x5a, 0xe6, 0xa6, 0xf3, 0x01, 0x02, 0xd6, 0x03, 0x0d, 0x47, 0x6c, - 0xcc, 0xd9, 0xf3, 0xc1, 0x00, 0x48, 0x4d, 0xb8, 0x06, 0xf3, 0x41, 0x02, - 0x68, 0x00, 0x15, 0xb5, 0x01, 0xff, 0x4f, 0x67, 0x68, 0x10, 0x2a, 0x00, - 0x4c, 0xd9, 0x03, 0x5e, 0x00, 0x00, 0x46, 0x29, 0xd5, 0xaa, 0xf3, 0x41, - 0x80, 0xa7, 0x0e, 0x02, 0x06, 0x00, 0x01, 0xff, 0xa1, 0x89, 0x0e, 0xa2, - 0xfa, 0x0d, 0xa3, 0xbe, 0x0d, 0xa4, 0xcd, 0x0c, 0x46, 0xa2, 0x11, 0x9c, - 0x22, 0x00, 0x4c, 0x87, 0x00, 0xc1, 0x29, 0x00, 0xa8, 0xe1, 0x0a, 0xa9, - 0xc7, 0x07, 0xab, 0xdd, 0x05, 0xac, 0xf7, 0x03, 0xad, 0xe8, 0x03, 0x07, - 0xbf, 0x35, 0x6f, 0x5e, 0x7f, 0x12, 0x42, 0x27, 0x00, 0xb0, 0x4f, 0xb2, - 0x41, 0x46, 0xdb, 0x04, 0xd7, 0xf7, 0x01, 0xb4, 0x26, 0x4c, 0x32, 0x00, - 0xb6, 0x29, 0x00, 0xb7, 0x0a, 0xf8, 0xbe, 0x2b, 0x00, 0x4f, 0x43, 0x6e, - 0x0d, 0xf1, 0x41, 0x05, 0xae, 0x02, 0x04, 0xfa, 0x2e, 0xf1, 0x41, 0x46, - 0x64, 0x1f, 0xbe, 0x29, 0x00, 0x44, 0x8b, 0x11, 0x2a, 0x27, 0x40, 0x44, - 0x29, 0x02, 0x97, 0x22, 0x00, 0x47, 0x02, 0x02, 0xd5, 0xf7, 0xc1, 0x00, - 0x45, 0xa4, 0x01, 0x8a, 0x23, 0x40, 0x4e, 0xa1, 0x6b, 0xb8, 0x29, 0x00, - 0x4c, 0xb0, 0x88, 0x9a, 0x22, 0x40, 0x47, 0x5e, 0x34, 0xb7, 0x29, 0x00, - 0x4c, 0x24, 0x87, 0xb9, 0x29, 0x00, 0x43, 0x72, 0x25, 0x95, 0x22, 0x00, - 0x4a, 0x65, 0xa6, 0x36, 0x30, 0x40, 0xa5, 0xdc, 0x02, 0xa6, 0xec, 0x01, - 0x48, 0x0b, 0x4e, 0x72, 0x24, 0x00, 0xb3, 0xc2, 0x01, 0xb4, 0x01, 0xff, - 0x42, 0x92, 0x01, 0x69, 0x24, 0x80, 0xb1, 0x01, 0x04, 0xf2, 0x0f, 0x5a, - 0x02, 0x15, 0x01, 0x01, 0xff, 0x43, 0xb9, 0x28, 0x6b, 0x24, 0x00, 0x43, - 0x99, 0x1b, 0x73, 0x24, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x45, 0xd1, 0x09, - 0x58, 0x32, 0x00, 0xa6, 0x31, 0x44, 0xb8, 0x27, 0x59, 0x32, 0x00, 0x02, - 0x10, 0x00, 0x1d, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x53, - 0x32, 0x00, 0x42, 0x15, 0x02, 0x52, 0x32, 0x40, 0x44, 0x96, 0x1b, 0x57, - 0x32, 0x00, 0x42, 0x30, 0x27, 0x56, 0x32, 0x40, 0x4d, 0xb9, 0x0f, 0x49, - 0x32, 0x00, 0xe5, 0x51, 0x32, 0x40, 0x43, 0xd7, 0x04, 0x55, 0x32, 0x00, - 0x43, 0xfb, 0x05, 0x54, 0x32, 0x40, 0x43, 0xca, 0x08, 0x6c, 0x24, 0x00, - 0xf9, 0x5a, 0x32, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x45, 0xd1, 0x09, 0xb3, - 0x32, 0x00, 0xa6, 0x31, 0x44, 0xb8, 0x27, 0xb4, 0x32, 0x00, 0x02, 0x10, - 0x00, 0x1d, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x5d, 0x32, - 0x00, 0x42, 0x15, 0x02, 0x5c, 0x32, 0x40, 0x44, 0x96, 0x1b, 0xb2, 0x32, - 0x00, 0x42, 0x30, 0x27, 0xb1, 0x32, 0x40, 0x4d, 0xb9, 0x0f, 0x4a, 0x32, - 0x00, 0xe5, 0x5b, 0x32, 0x40, 0x43, 0xd7, 0x04, 0x5f, 0x32, 0x00, 0x43, - 0xfb, 0x05, 0x5e, 0x32, 0x40, 0x50, 0xd8, 0x59, 0x48, 0x32, 0x40, 0x05, - 0x96, 0x1b, 0x11, 0x03, 0x30, 0x27, 0x01, 0xff, 0x43, 0xca, 0x08, 0x6f, - 0x24, 0x00, 0x51, 0xd7, 0x59, 0x4d, 0x32, 0x40, 0x43, 0xca, 0x08, 0x70, - 0x24, 0x00, 0x51, 0xd7, 0x59, 0x4e, 0x32, 0x40, 0x03, 0x27, 0x16, 0x58, - 0xaf, 0x01, 0xff, 0x43, 0xf4, 0x0f, 0xb5, 0x32, 0x80, 0x06, 0x46, 0x0e, - 0x57, 0x6d, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0xd1, 0x09, 0xbd, 0x32, - 0x00, 0xa6, 0x31, 0x44, 0xb8, 0x27, 0xbe, 0x32, 0x00, 0x02, 0x10, 0x00, - 0x1d, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xb8, 0x32, 0x00, - 0x42, 0x15, 0x02, 0xb7, 0x32, 0x40, 0x44, 0x96, 0x1b, 0xbc, 0x32, 0x00, - 0x42, 0x30, 0x27, 0xbb, 0x32, 0x40, 0x4d, 0xb9, 0x0f, 0x4b, 0x32, 0x00, - 0xe5, 0xb6, 0x32, 0x40, 0x43, 0xd7, 0x04, 0xba, 0x32, 0x00, 0x43, 0xfb, - 0x05, 0xb9, 0x32, 0x40, 0x43, 0xca, 0x08, 0x6e, 0x24, 0x00, 0xf9, 0xbf, - 0x32, 0xc0, 0x00, 0x50, 0xd8, 0x59, 0x4c, 0x32, 0x40, 0x04, 0xc9, 0x00, - 0x06, 0x45, 0xdf, 0x68, 0x6a, 0x24, 0x40, 0x43, 0xca, 0x08, 0x71, 0x24, - 0x00, 0x51, 0xd7, 0x59, 0x4f, 0x32, 0x40, 0x44, 0x2a, 0x1d, 0x96, 0x22, - 0x00, 0x69, 0xbc, 0x03, 0x36, 0x2a, 0x40, 0x05, 0xe4, 0x04, 0x06, 0x48, - 0xed, 0x00, 0xc0, 0x29, 0x40, 0x0f, 0xe9, 0x04, 0x6d, 0x0d, 0x7c, 0x07, - 0x01, 0xff, 0xe1, 0xd0, 0x24, 0x00, 0xe2, 0xd1, 0x24, 0x00, 0xe3, 0xd2, - 0x24, 0x00, 0xe4, 0xd3, 0x24, 0x00, 0xe5, 0xd4, 0x24, 0x00, 0xe6, 0xd5, - 0x24, 0x00, 0xe7, 0xd6, 0x24, 0x00, 0xe8, 0xd7, 0x24, 0x00, 0xe9, 0xd8, - 0x24, 0x00, 0xea, 0xd9, 0x24, 0x00, 0xeb, 0xda, 0x24, 0x00, 0xec, 0xdb, - 0x24, 0x00, 0xed, 0xdc, 0x24, 0x00, 0xee, 0xdd, 0x24, 0x00, 0xef, 0xde, - 0x24, 0x00, 0xf0, 0xdf, 0x24, 0x00, 0xf1, 0xe0, 0x24, 0x00, 0xf2, 0xe1, - 0x24, 0x00, 0xf3, 0xe2, 0x24, 0x00, 0xf4, 0xe3, 0x24, 0x00, 0xf5, 0xe4, - 0x24, 0x00, 0xf6, 0xe5, 0x24, 0x00, 0xf7, 0xe6, 0x24, 0x00, 0xf8, 0xe7, - 0x24, 0x00, 0xf9, 0xe8, 0x24, 0x00, 0xfa, 0xe9, 0x24, 0x40, 0xe1, 0xb6, - 0x24, 0x00, 0xe2, 0xb7, 0x24, 0x00, 0xe3, 0xb8, 0x24, 0x00, 0xe4, 0xb9, - 0x24, 0x00, 0xe5, 0xba, 0x24, 0x00, 0xe6, 0xbb, 0x24, 0x00, 0xe7, 0xbc, - 0x24, 0x00, 0xe8, 0xbd, 0x24, 0x00, 0xe9, 0xbe, 0x24, 0x00, 0xea, 0xbf, - 0x24, 0x00, 0xeb, 0xc0, 0x24, 0x00, 0xec, 0xc1, 0x24, 0x00, 0xed, 0xc2, - 0x24, 0x00, 0xee, 0xc3, 0x24, 0x00, 0xef, 0xc4, 0x24, 0x00, 0xf0, 0xc5, - 0x24, 0x00, 0xf1, 0xc6, 0x24, 0x00, 0xf2, 0xc7, 0x24, 0x00, 0xf3, 0xc8, - 0x24, 0x00, 0xf4, 0xc9, 0x24, 0x00, 0xf5, 0xca, 0x24, 0x00, 0xf6, 0xcb, - 0x24, 0x00, 0xf7, 0xcc, 0x24, 0x00, 0xf8, 0xcd, 0x24, 0x00, 0xf9, 0xce, - 0x24, 0x00, 0xfa, 0xcf, 0x24, 0x40, 0x08, 0x05, 0xba, 0x11, 0x10, 0xa0, - 0x4d, 0x01, 0xff, 0x46, 0x31, 0xd0, 0x7c, 0x32, 0x00, 0x45, 0xf1, 0xdc, - 0x7d, 0x32, 0x40, 0xe1, 0xd0, 0x32, 0x00, 0xe5, 0xd3, 0x32, 0x00, 0xa8, - 0xb3, 0x01, 0xe9, 0xd1, 0x32, 0x00, 0xab, 0x98, 0x01, 0xad, 0x81, 0x01, - 0xae, 0x6b, 0xef, 0xd4, 0x32, 0x00, 0xb2, 0x51, 0xb3, 0x3b, 0xb4, 0x25, - 0xf5, 0xd2, 0x32, 0x00, 0xb7, 0x0f, 0xb9, 0x01, 0xff, 0xe1, 0xf3, 0x32, - 0x00, 0xef, 0xf5, 0x32, 0x00, 0xf5, 0xf4, 0x32, 0x40, 0xe1, 0xfb, 0x32, - 0x00, 0xe5, 0xfd, 0x32, 0x00, 0xe9, 0xfc, 0x32, 0x00, 0xef, 0xfe, 0x32, - 0x40, 0xe1, 0xdf, 0x32, 0x00, 0xe5, 0xe2, 0x32, 0x00, 0xe9, 0xe0, 0x32, - 0x00, 0xef, 0xe3, 0x32, 0x00, 0xf5, 0xe1, 0x32, 0x40, 0xe1, 0xda, 0x32, - 0x00, 0xe5, 0xdd, 0x32, 0x00, 0xe9, 0xdb, 0x32, 0x00, 0xef, 0xde, 0x32, - 0x00, 0xf5, 0xdc, 0x32, 0x40, 0xe1, 0xf6, 0x32, 0x00, 0xe5, 0xf9, 0x32, - 0x00, 0xe9, 0xf7, 0x32, 0x00, 0xef, 0xfa, 0x32, 0x00, 0xf5, 0xf8, 0x32, - 0x40, 0xe1, 0xe4, 0x32, 0x00, 0xe5, 0xe7, 0x32, 0x00, 0xe9, 0xe5, 0x32, - 0x00, 0xef, 0xe8, 0x32, 0x00, 0xf5, 0xe6, 0x32, 0x40, 0xe1, 0xee, 0x32, - 0x00, 0xe5, 0xf1, 0x32, 0x00, 0xe9, 0xef, 0x32, 0x00, 0xef, 0xf2, 0x32, - 0x00, 0xf5, 0xf0, 0x32, 0x40, 0xe1, 0xd5, 0x32, 0x00, 0xe5, 0xd8, 0x32, - 0x00, 0xe9, 0xd6, 0x32, 0x00, 0xef, 0xd9, 0x32, 0x00, 0xf5, 0xd7, 0x32, - 0x40, 0xe1, 0xe9, 0x32, 0x00, 0xe5, 0xec, 0x32, 0x00, 0xe9, 0xea, 0x32, - 0x00, 0xef, 0xed, 0x32, 0x00, 0xf5, 0xeb, 0x32, 0x40, 0x09, 0xf6, 0xa2, - 0x13, 0x51, 0xc9, 0x56, 0xc8, 0xf6, 0x01, 0x1b, 0x6e, 0x1b, 0x01, 0xff, - 0xe3, 0x2b, 0xf1, 0x01, 0xf2, 0x2c, 0xf1, 0x41, 0xa1, 0xe5, 0x02, 0xa3, - 0xc7, 0x02, 0xa5, 0xac, 0x02, 0xa6, 0x89, 0x02, 0xa8, 0xfa, 0x01, 0x44, - 0xc9, 0xb7, 0xa0, 0x32, 0x00, 0xab, 0xe5, 0x01, 0xac, 0xd0, 0x01, 0xad, - 0xb3, 0x01, 0xae, 0x9b, 0x01, 0x43, 0xcd, 0x09, 0x80, 0x32, 0x00, 0x45, - 0x4f, 0xc2, 0x9e, 0x32, 0x00, 0x48, 0xbd, 0x30, 0x44, 0x32, 0x00, 0xb2, - 0x6c, 0xb3, 0x23, 0xb4, 0x0f, 0xb7, 0x01, 0xff, 0x44, 0x8a, 0x00, 0x8c, - 0x32, 0x00, 0x43, 0x56, 0x2a, 0x8d, 0x32, 0x40, 0x42, 0x92, 0x01, 0x89, - 0x32, 0x00, 0x44, 0x25, 0x01, 0x82, 0x32, 0x00, 0x42, 0x15, 0x02, 0x81, - 0x32, 0x40, 0x45, 0x80, 0xda, 0x46, 0x32, 0x00, 0xa5, 0x33, 0x42, 0x30, - 0x27, 0x85, 0x32, 0x00, 0x46, 0x21, 0xd4, 0x93, 0x32, 0x00, 0x46, 0x87, - 0xd4, 0x95, 0x32, 0x00, 0xb4, 0x13, 0xb5, 0x01, 0xff, 0x46, 0xb9, 0xd2, - 0x9c, 0x32, 0x00, 0xee, 0x90, 0x32, 0x00, 0x47, 0x5f, 0xca, 0xac, 0x32, - 0x40, 0x43, 0x35, 0x01, 0x91, 0x32, 0x00, 0x43, 0x72, 0xe9, 0xab, 0x32, - 0x40, 0x44, 0x72, 0xe4, 0x99, 0x32, 0x00, 0x43, 0x97, 0x1b, 0x86, 0x32, - 0x40, 0xa5, 0x06, 0x44, 0xc9, 0x00, 0xa8, 0x32, 0x40, 0x46, 0x37, 0xd3, - 0xaa, 0x32, 0x00, 0xb3, 0x01, 0xff, 0x45, 0xd5, 0x56, 0xae, 0x32, 0x00, - 0xf4, 0xa1, 0x32, 0x40, 0x43, 0x30, 0x04, 0x94, 0x32, 0x00, 0xa9, 0x01, - 0xff, 0x43, 0xca, 0x00, 0xb0, 0x32, 0x00, 0x42, 0xd2, 0x04, 0x88, 0x32, - 0x40, 0x43, 0x67, 0x00, 0x9a, 0x32, 0x00, 0xa5, 0x06, 0x43, 0x99, 0x04, - 0x8a, 0x32, 0x40, 0x46, 0x9d, 0xd0, 0xa9, 0x32, 0x00, 0x43, 0x12, 0x00, - 0x8e, 0x32, 0x40, 0x44, 0x42, 0xdd, 0x98, 0x32, 0x00, 0x43, 0xc4, 0x00, - 0xa7, 0x32, 0x00, 0x42, 0xd1, 0x00, 0xa6, 0x32, 0x40, 0x4b, 0x67, 0x95, - 0x45, 0x32, 0x00, 0x43, 0x79, 0x86, 0x47, 0x32, 0x40, 0x43, 0x10, 0x07, - 0x92, 0x32, 0x00, 0x43, 0x3f, 0x00, 0xa4, 0x32, 0x40, 0x45, 0xef, 0x1e, - 0x9b, 0x32, 0x00, 0xa9, 0x06, 0x43, 0xfb, 0x05, 0x83, 0x32, 0x40, 0x47, - 0x2b, 0xc9, 0x96, 0x32, 0x00, 0x42, 0x88, 0x00, 0x8b, 0x32, 0x00, 0x42, - 0x32, 0x00, 0x84, 0x32, 0x40, 0x44, 0x8d, 0x6b, 0x8f, 0x32, 0x00, 0x44, - 0xc9, 0x00, 0x87, 0x32, 0x00, 0x49, 0x47, 0xb3, 0xad, 0x32, 0x00, 0x48, - 0x8d, 0xc2, 0x9d, 0x32, 0x40, 0x45, 0x74, 0x02, 0xa5, 0x32, 0x00, 0xaf, - 0x01, 0xff, 0x4c, 0xaf, 0x7f, 0x97, 0x32, 0x00, 0x42, 0xe8, 0x1a, 0xa2, - 0x32, 0x00, 0x45, 0x31, 0xcb, 0xa3, 0x32, 0x40, 0x45, 0x4e, 0xda, 0x51, - 0xf2, 0x01, 0x48, 0x9d, 0xbb, 0x50, 0xf2, 0x01, 0x47, 0x96, 0xb9, 0xaf, - 0x32, 0x00, 0x48, 0xb5, 0xc1, 0x9f, 0x32, 0x40, 0x06, 0x49, 0xc7, 0x12, - 0x5b, 0xe6, 0x18, 0xb2, 0x27, 0x00, 0x58, 0x37, 0x27, 0x89, 0x23, 0x00, - 0x4b, 0xe4, 0x9b, 0x6f, 0xf1, 0x41, 0xa3, 0xaa, 0x01, 0x45, 0xfd, 0x9c, - 0x6d, 0x32, 0x80, 0x9c, 0x01, 0x45, 0x0b, 0xc2, 0x67, 0x32, 0x80, 0x89, - 0x01, 0xab, 0x6d, 0x45, 0xdc, 0xdd, 0x64, 0x32, 0x80, 0x60, 0x45, 0x4a, - 0xde, 0x61, 0x32, 0x80, 0x53, 0xb0, 0x37, 0x45, 0x94, 0xdf, 0x63, 0x32, - 0x80, 0x2a, 0x44, 0xd4, 0xb5, 0x66, 0x32, 0x80, 0x1d, 0xb4, 0x01, 0xff, - 0x46, 0x20, 0xcc, 0x6b, 0x32, 0x80, 0x0d, 0x45, 0xc3, 0xc3, 0x62, 0x32, - 0xc0, 0x00, 0x42, 0x19, 0x00, 0x70, 0x32, 0x40, 0x42, 0x19, 0x00, 0x79, - 0x32, 0x40, 0x42, 0x19, 0x00, 0x74, 0x32, 0x40, 0x42, 0x19, 0x00, 0x71, - 0x32, 0x40, 0x46, 0x27, 0xb9, 0x6c, 0x32, 0x80, 0x0d, 0x44, 0xbc, 0x7d, - 0x65, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, 0x73, 0x32, 0x40, 0x42, 0x19, - 0x00, 0x7a, 0x32, 0x40, 0x42, 0x19, 0x00, 0x6f, 0x32, 0x40, 0x42, 0x19, - 0x00, 0x72, 0x32, 0x40, 0x46, 0x1f, 0xb9, 0x6a, 0x32, 0x80, 0x0d, 0x45, - 0xa0, 0x9a, 0x60, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, 0x6e, 0x32, 0x40, - 0x42, 0x19, 0x00, 0x78, 0x32, 0x40, 0x80, 0x01, 0xff, 0xe1, 0x75, 0x32, - 0x00, 0xf5, 0x7e, 0x32, 0x40, 0x42, 0x19, 0x00, 0x7b, 0x32, 0x40, 0x46, - 0xc1, 0xc5, 0x69, 0x32, 0x80, 0x0d, 0x44, 0xc2, 0xc5, 0x68, 0x32, 0xc0, - 0x00, 0x42, 0x19, 0x00, 0x76, 0x32, 0x40, 0x42, 0x19, 0x00, 0x77, 0x32, - 0x40, 0x43, 0x50, 0x03, 0x9d, 0x22, 0x00, 0xa9, 0x0f, 0xaf, 0x01, 0xff, - 0x61, 0x84, 0x0c, 0x0f, 0xf1, 0x01, 0x4a, 0xe6, 0x32, 0x99, 0x22, 0x40, - 0x04, 0xf6, 0x05, 0x11, 0x08, 0xdb, 0x2e, 0x01, 0xff, 0x43, 0xdc, 0x02, - 0x38, 0x2a, 0x00, 0x44, 0xa1, 0x0c, 0x98, 0x22, 0x40, 0x45, 0xd1, 0x09, - 0x67, 0x24, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x68, 0x24, 0x00, 0x43, - 0xcd, 0x09, 0x60, 0x24, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, - 0xea, 0x24, 0x40, 0x44, 0x25, 0x01, 0x62, 0x24, 0x00, 0x42, 0x15, 0x02, - 0x61, 0x24, 0x40, 0x44, 0x96, 0x1b, 0x66, 0x24, 0x00, 0x42, 0x30, 0x27, - 0x65, 0x24, 0x40, 0x43, 0xd7, 0x04, 0x64, 0x24, 0x00, 0x43, 0xfb, 0x05, - 0x63, 0x24, 0x40, 0x58, 0x8d, 0x0c, 0x6e, 0xf1, 0x01, 0xe3, 0x6d, 0xf1, - 0x01, 0xe4, 0x2d, 0xf1, 0x01, 0x04, 0x0e, 0x0f, 0x01, 0xff, 0x80, 0x06, - 0x49, 0x34, 0xb1, 0xd2, 0x26, 0x40, 0x46, 0x69, 0xd1, 0x02, 0xf9, 0x81, - 0x06, 0x46, 0xab, 0xd4, 0x40, 0xf5, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, - 0x49, 0x75, 0x41, 0x00, 0xf9, 0x01, 0x48, 0x25, 0x09, 0x01, 0xf9, 0x41, - 0x45, 0xb3, 0xde, 0xbf, 0x2b, 0x00, 0x45, 0x65, 0x1f, 0xbf, 0x29, 0x40, - 0x0c, 0x17, 0x0a, 0x06, 0x50, 0x09, 0x61, 0x9b, 0x22, 0x40, 0x46, 0xcd, - 0x00, 0x0e, 0xf1, 0x01, 0x56, 0xd0, 0x2e, 0xbc, 0x29, 0x40, 0x7e, 0x00, - 0x00, 0xba, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x61, 0xbe, 0x0b, - 0xd5, 0x25, 0x00, 0x4e, 0x0b, 0x00, 0xb5, 0x29, 0x00, 0xac, 0x30, 0x50, - 0x59, 0x60, 0xd1, 0x25, 0x00, 0xb3, 0x1c, 0x63, 0x69, 0x0a, 0xc3, 0x29, - 0x00, 0x06, 0x6d, 0x02, 0x06, 0x4d, 0xba, 0x82, 0xcd, 0x25, 0x40, 0x4a, - 0x37, 0x23, 0xd3, 0x25, 0x00, 0x54, 0x44, 0x40, 0xd4, 0x25, 0x40, 0x58, - 0xef, 0x26, 0xc2, 0x29, 0x00, 0x4d, 0x1e, 0x82, 0xbb, 0x29, 0x40, 0x4e, - 0xa4, 0x68, 0xd0, 0x25, 0x00, 0x4f, 0xdd, 0x6a, 0xd2, 0x25, 0x40, 0xa1, - 0xdf, 0x08, 0xa5, 0x82, 0x02, 0xa9, 0xda, 0x01, 0xaf, 0x0c, 0x4c, 0x00, - 0x8d, 0x84, 0xf3, 0x01, 0x44, 0x57, 0xd0, 0xea, 0x26, 0x40, 0x4a, 0x39, - 0xa0, 0x6b, 0xf3, 0x01, 0x47, 0x90, 0xca, 0x62, 0xf9, 0x01, 0x08, 0x45, - 0xc0, 0x01, 0xff, 0x07, 0xf1, 0x04, 0x34, 0x07, 0xbf, 0x35, 0x01, 0xff, - 0x44, 0xfa, 0x05, 0xc8, 0x0f, 0x01, 0x43, 0xcd, 0x09, 0xc5, 0x0f, 0x81, - 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xc9, 0x0f, 0x01, 0x44, 0x25, - 0x01, 0xc7, 0x0f, 0x01, 0xb7, 0x01, 0xff, 0x44, 0x98, 0x1b, 0xca, 0x0f, - 0x01, 0xef, 0xc6, 0x0f, 0x41, 0x48, 0xe8, 0x0f, 0xcb, 0x0f, 0x41, 0xa1, - 0x75, 0x44, 0x46, 0xe4, 0xb2, 0x0f, 0x01, 0x4a, 0x6b, 0xa0, 0xb7, 0x0f, - 0x01, 0x46, 0x8d, 0x44, 0xb4, 0x0f, 0x01, 0x45, 0x4b, 0xa2, 0xb3, 0x0f, - 0x01, 0x42, 0xb0, 0x01, 0xb5, 0x0f, 0x81, 0x50, 0x44, 0xba, 0xe5, 0xbb, - 0x0f, 0x01, 0x46, 0x1f, 0xd3, 0xbc, 0x0f, 0x01, 0x43, 0xb9, 0x04, 0xbd, - 0x0f, 0x01, 0x43, 0x40, 0x20, 0xbe, 0x0f, 0x01, 0x42, 0x6f, 0x02, 0xc1, - 0x0f, 0x01, 0x44, 0x29, 0x60, 0xc2, 0x0f, 0x01, 0xb3, 0x18, 0x43, 0xf1, - 0xba, 0xc4, 0x0f, 0x01, 0x43, 0x08, 0x83, 0xb6, 0x0f, 0x01, 0x44, 0xf9, - 0x4c, 0xba, 0x0f, 0x01, 0x45, 0xf3, 0x4c, 0xb8, 0x0f, 0x41, 0x45, 0x95, - 0xd9, 0xbf, 0x0f, 0x01, 0x43, 0x99, 0x14, 0xc3, 0x0f, 0x01, 0x4a, 0xfd, - 0xa4, 0xb1, 0x0f, 0x41, 0x42, 0x53, 0x00, 0xb9, 0x0f, 0x41, 0x44, 0x99, - 0x38, 0xb0, 0x0f, 0x01, 0x43, 0x4b, 0x18, 0xc0, 0x0f, 0x41, 0x44, 0x45, - 0x83, 0x27, 0x26, 0x00, 0x44, 0x90, 0x01, 0x14, 0xf4, 0x01, 0x42, 0xaf, - 0x18, 0xd2, 0xf9, 0x81, 0x0c, 0x45, 0x2b, 0xdf, 0x3f, 0xf4, 0x01, 0x43, - 0x09, 0x0d, 0xb7, 0x26, 0x40, 0x4c, 0xa0, 0x8c, 0xb8, 0xf6, 0x41, 0x02, - 0x36, 0x01, 0xc2, 0x06, 0xa5, 0xb3, 0x06, 0x4b, 0x3a, 0x99, 0xc1, 0xf3, - 0x01, 0xb2, 0x06, 0x45, 0x39, 0xe0, 0x30, 0xf3, 0x41, 0x05, 0xae, 0xde, - 0x0f, 0xb2, 0x01, 0xff, 0x43, 0xed, 0x95, 0x52, 0xf3, 0x01, 0x49, 0xd9, - 0xb7, 0x38, 0xf3, 0x41, 0x07, 0xf1, 0x04, 0x89, 0x03, 0x0d, 0x7c, 0x07, - 0x01, 0xff, 0xe1, 0x70, 0xab, 0x00, 0xa4, 0xdf, 0x02, 0xe5, 0x71, 0xab, - 0x00, 0xa7, 0xc0, 0x02, 0xa8, 0x9f, 0x02, 0xe9, 0x72, 0xab, 0x00, 0x42, - 0x1b, 0x02, 0x77, 0xab, 0x00, 0xac, 0xfa, 0x01, 0xad, 0xdf, 0x01, 0xae, - 0xbf, 0x01, 0xef, 0x73, 0xab, 0x00, 0x02, 0x7c, 0x00, 0x9e, 0x01, 0xf3, - 0x9d, 0xab, 0x80, 0x80, 0x01, 0xb4, 0x3d, 0xf5, 0x74, 0xab, 0x00, 0xf6, - 0x75, 0xab, 0x00, 0xb7, 0x1b, 0xb9, 0x01, 0xff, 0xe1, 0xbf, 0xab, 0x00, - 0xe5, 0xf8, 0x13, 0x00, 0xe9, 0xf9, 0x13, 0x00, 0xef, 0xfa, 0x13, 0x00, - 0xf5, 0xfb, 0x13, 0x00, 0xf6, 0xfc, 0x13, 0x40, 0xe1, 0xb9, 0xab, 0x00, - 0xe5, 0xba, 0xab, 0x00, 0xe9, 0xbb, 0xab, 0x00, 0xef, 0xbc, 0xab, 0x00, - 0xf5, 0xbd, 0xab, 0x00, 0xf6, 0xbe, 0xab, 0x40, 0xe1, 0xa4, 0xab, 0x00, - 0xe5, 0xa6, 0xab, 0x00, 0xe9, 0xa8, 0xab, 0x00, 0xac, 0x1b, 0xb3, 0x01, - 0xff, 0xe1, 0xb3, 0xab, 0x00, 0xe5, 0xb4, 0xab, 0x00, 0xe9, 0xb5, 0xab, - 0x00, 0xef, 0xb6, 0xab, 0x00, 0xf5, 0xb7, 0xab, 0x00, 0xf6, 0xb8, 0xab, - 0x40, 0xe1, 0xad, 0xab, 0x00, 0xe5, 0xae, 0xab, 0x00, 0xe9, 0xaf, 0xab, - 0x00, 0xef, 0xb0, 0xab, 0x00, 0xf5, 0xb1, 0xab, 0x00, 0xf6, 0xb2, 0xab, - 0x40, 0xe1, 0x9c, 0xab, 0x00, 0xe5, 0x9e, 0xab, 0x00, 0xe9, 0x9f, 0xab, - 0x00, 0xef, 0xa0, 0xab, 0x00, 0xf5, 0xa1, 0xab, 0x00, 0xf6, 0xa2, 0xab, - 0x40, 0xe1, 0x96, 0xab, 0x00, 0xe5, 0x97, 0xab, 0x00, 0xe9, 0x98, 0xab, - 0x00, 0xef, 0x99, 0xab, 0x00, 0xf5, 0x9a, 0xab, 0x00, 0xf6, 0x9b, 0xab, - 0x40, 0xe1, 0x8e, 0xab, 0x80, 0x14, 0xe5, 0x91, 0xab, 0x00, 0xe9, 0x92, - 0xab, 0x00, 0xef, 0x93, 0xab, 0x00, 0xf5, 0x94, 0xab, 0x00, 0xf6, 0x95, - 0xab, 0x40, 0xe8, 0x90, 0xab, 0x40, 0xe1, 0x89, 0xab, 0x00, 0xe5, 0x8a, - 0xab, 0x00, 0xe9, 0x8b, 0xab, 0x00, 0xef, 0x8c, 0xab, 0x00, 0xf5, 0x8d, - 0xab, 0x00, 0xf6, 0xfd, 0x13, 0x40, 0xe1, 0x83, 0xab, 0x00, 0xe5, 0x84, - 0xab, 0x00, 0xe9, 0x85, 0xab, 0x00, 0xef, 0x86, 0xab, 0x00, 0xf5, 0x87, - 0xab, 0x00, 0xf6, 0x88, 0xab, 0x40, 0xe1, 0x7d, 0xab, 0x00, 0xe5, 0x7e, - 0xab, 0x00, 0xe9, 0x7f, 0xab, 0x00, 0x42, 0x2f, 0x04, 0x8f, 0xab, 0x00, - 0xef, 0x80, 0xab, 0x00, 0xf5, 0x81, 0xab, 0x00, 0xf6, 0x82, 0xab, 0x40, - 0xe1, 0x76, 0xab, 0x00, 0xe5, 0x78, 0xab, 0x00, 0xe9, 0x79, 0xab, 0x00, - 0xef, 0x7a, 0xab, 0x00, 0xf5, 0x7b, 0xab, 0x00, 0xf6, 0x7c, 0xab, 0x40, - 0xe1, 0xa3, 0xab, 0x00, 0xe5, 0xa5, 0xab, 0x00, 0xe9, 0xa7, 0xab, 0x00, - 0x42, 0x74, 0x00, 0xac, 0xab, 0x00, 0xef, 0xa9, 0xab, 0x00, 0xf5, 0xaa, - 0xab, 0x00, 0xf6, 0xab, 0xab, 0x40, 0xe1, 0xa0, 0x13, 0x00, 0xa4, 0xdf, - 0x02, 0xe5, 0xa1, 0x13, 0x00, 0xa7, 0xc0, 0x02, 0xa8, 0x9f, 0x02, 0xe9, - 0xa2, 0x13, 0x00, 0x42, 0x1b, 0x02, 0xa7, 0x13, 0x00, 0xac, 0xfa, 0x01, - 0xad, 0xdf, 0x01, 0xae, 0xbf, 0x01, 0xef, 0xa3, 0x13, 0x00, 0x02, 0x7c, - 0x00, 0x9e, 0x01, 0xf3, 0xcd, 0x13, 0x80, 0x80, 0x01, 0xb4, 0x3d, 0xf5, - 0xa4, 0x13, 0x00, 0xf6, 0xa5, 0x13, 0x00, 0xb7, 0x1b, 0xb9, 0x01, 0xff, - 0xe1, 0xef, 0x13, 0x00, 0xe5, 0xf0, 0x13, 0x00, 0xe9, 0xf1, 0x13, 0x00, - 0xef, 0xf2, 0x13, 0x00, 0xf5, 0xf3, 0x13, 0x00, 0xf6, 0xf4, 0x13, 0x40, - 0xe1, 0xe9, 0x13, 0x00, 0xe5, 0xea, 0x13, 0x00, 0xe9, 0xeb, 0x13, 0x00, - 0xef, 0xec, 0x13, 0x00, 0xf5, 0xed, 0x13, 0x00, 0xf6, 0xee, 0x13, 0x40, - 0xe1, 0xd4, 0x13, 0x00, 0xe5, 0xd6, 0x13, 0x00, 0xe9, 0xd8, 0x13, 0x00, - 0xac, 0x1b, 0xb3, 0x01, 0xff, 0xe1, 0xe3, 0x13, 0x00, 0xe5, 0xe4, 0x13, - 0x00, 0xe9, 0xe5, 0x13, 0x00, 0xef, 0xe6, 0x13, 0x00, 0xf5, 0xe7, 0x13, - 0x00, 0xf6, 0xe8, 0x13, 0x40, 0xe1, 0xdd, 0x13, 0x00, 0xe5, 0xde, 0x13, - 0x00, 0xe9, 0xdf, 0x13, 0x00, 0xef, 0xe0, 0x13, 0x00, 0xf5, 0xe1, 0x13, - 0x00, 0xf6, 0xe2, 0x13, 0x40, 0xe1, 0xcc, 0x13, 0x00, 0xe5, 0xce, 0x13, - 0x00, 0xe9, 0xcf, 0x13, 0x00, 0xef, 0xd0, 0x13, 0x00, 0xf5, 0xd1, 0x13, - 0x00, 0xf6, 0xd2, 0x13, 0x40, 0xe1, 0xc6, 0x13, 0x00, 0xe5, 0xc7, 0x13, - 0x00, 0xe9, 0xc8, 0x13, 0x00, 0xef, 0xc9, 0x13, 0x00, 0xf5, 0xca, 0x13, - 0x00, 0xf6, 0xcb, 0x13, 0x40, 0xe1, 0xbe, 0x13, 0x80, 0x14, 0xe5, 0xc1, - 0x13, 0x00, 0xe9, 0xc2, 0x13, 0x00, 0xef, 0xc3, 0x13, 0x00, 0xf5, 0xc4, - 0x13, 0x00, 0xf6, 0xc5, 0x13, 0x40, 0xe8, 0xc0, 0x13, 0x40, 0xe1, 0xb9, - 0x13, 0x00, 0xe5, 0xba, 0x13, 0x00, 0xe9, 0xbb, 0x13, 0x00, 0xef, 0xbc, - 0x13, 0x00, 0xf5, 0xbd, 0x13, 0x00, 0xf6, 0xf5, 0x13, 0x40, 0xe1, 0xb3, - 0x13, 0x00, 0xe5, 0xb4, 0x13, 0x00, 0xe9, 0xb5, 0x13, 0x00, 0xef, 0xb6, - 0x13, 0x00, 0xf5, 0xb7, 0x13, 0x00, 0xf6, 0xb8, 0x13, 0x40, 0xe1, 0xad, - 0x13, 0x00, 0xe5, 0xae, 0x13, 0x00, 0xe9, 0xaf, 0x13, 0x00, 0x42, 0x2f, - 0x04, 0xbf, 0x13, 0x00, 0xef, 0xb0, 0x13, 0x00, 0xf5, 0xb1, 0x13, 0x00, - 0xf6, 0xb2, 0x13, 0x40, 0xe1, 0xa6, 0x13, 0x00, 0xe5, 0xa8, 0x13, 0x00, - 0xe9, 0xa9, 0x13, 0x00, 0xef, 0xaa, 0x13, 0x00, 0xf5, 0xab, 0x13, 0x00, - 0xf6, 0xac, 0x13, 0x40, 0xe1, 0xd3, 0x13, 0x00, 0xe5, 0xd5, 0x13, 0x00, - 0xe9, 0xd7, 0x13, 0x00, 0x42, 0x74, 0x00, 0xdc, 0x13, 0x00, 0xef, 0xd9, - 0x13, 0x00, 0xf5, 0xda, 0x13, 0x00, 0xf6, 0xdb, 0x13, 0x40, 0x4e, 0xfe, - 0x74, 0xe3, 0xf4, 0x01, 0x48, 0xc5, 0xc0, 0xc0, 0xf9, 0x41, 0x45, 0xb8, - 0x00, 0x13, 0x27, 0x00, 0x48, 0x5e, 0x7a, 0x7e, 0xf6, 0xc1, 0x00, 0x45, - 0x38, 0x0a, 0x95, 0xfb, 0x41, 0xa9, 0x8d, 0x08, 0x04, 0xce, 0xe5, 0xb5, - 0x04, 0x02, 0xa0, 0x03, 0x3b, 0xb2, 0x01, 0xff, 0x07, 0x62, 0xc4, 0x18, - 0x07, 0xec, 0x0b, 0x01, 0xff, 0x4f, 0xd3, 0x65, 0xc9, 0xf4, 0x01, 0x4d, - 0x45, 0x82, 0xc8, 0xf4, 0xc1, 0x00, 0x4d, 0x37, 0x78, 0xb9, 0xf4, 0x41, - 0x49, 0xa4, 0x37, 0x09, 0x00, 0x80, 0x06, 0x42, 0xf7, 0x0a, 0x40, 0x20, - 0x40, 0x80, 0x01, 0xff, 0x43, 0xf6, 0x10, 0x88, 0x00, 0x00, 0x52, 0xed, - 0x50, 0x89, 0x00, 0x40, 0x0f, 0x54, 0x2f, 0xc7, 0x03, 0x06, 0xf4, 0x05, - 0x80, 0x03, 0x07, 0xf1, 0x04, 0x52, 0x0c, 0x8c, 0x14, 0x34, 0x0b, 0x5b, - 0x70, 0x01, 0xff, 0xa1, 0x21, 0x42, 0xd1, 0x09, 0x2c, 0xaa, 0x00, 0xe9, - 0x2a, 0xaa, 0x80, 0x12, 0xef, 0x2f, 0xaa, 0x80, 0x09, 0xf5, 0x2d, 0xaa, - 0xc0, 0x00, 0xe5, 0x32, 0xaa, 0x40, 0xe5, 0x2e, 0xaa, 0x40, 0xe9, 0x2b, - 0xaa, 0x40, 0xe1, 0x29, 0xaa, 0x00, 0xe9, 0x30, 0xaa, 0x00, 0xf5, 0x31, - 0xaa, 0x40, 0xa4, 0x0c, 0x46, 0x22, 0x7e, 0x5c, 0xaa, 0x00, 0x4c, 0x38, - 0x8e, 0x5f, 0xaa, 0x40, 0x44, 0x0b, 0x1e, 0x5d, 0xaa, 0x00, 0x4b, 0xcc, - 0x98, 0x5e, 0xaa, 0x40, 0xe1, 0x00, 0xaa, 0x80, 0xa0, 0x02, 0xa2, 0x8d, - 0x02, 0x02, 0x98, 0x14, 0xfe, 0x01, 0xa4, 0xeb, 0x01, 0xe5, 0x03, 0xaa, - 0x00, 0x06, 0x97, 0x29, 0xb1, 0x01, 0xa7, 0xa4, 0x01, 0x42, 0x22, 0x00, - 0x28, 0xaa, 0x00, 0xe9, 0x01, 0xaa, 0x00, 0xaa, 0x8d, 0x01, 0xab, 0x80, - 0x01, 0x42, 0x74, 0x00, 0x24, 0xaa, 0x00, 0xad, 0x6e, 0xae, 0x44, 0xef, - 0x05, 0xaa, 0x00, 0xb0, 0x2e, 0x42, 0x71, 0x00, 0x23, 0xaa, 0x00, 0xb3, - 0x1c, 0xb4, 0x10, 0xf5, 0x02, 0xaa, 0x00, 0x42, 0xb4, 0x09, 0x25, 0xaa, - 0x00, 0x42, 0x20, 0x20, 0x22, 0xaa, 0x40, 0xe1, 0x13, 0xaa, 0x00, 0x42, - 0x22, 0x00, 0x14, 0xaa, 0x40, 0xe1, 0x27, 0xaa, 0x00, 0x42, 0x45, 0x05, - 0x26, 0xaa, 0x40, 0xe1, 0x1a, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x1c, 0xaa, - 0x00, 0x42, 0xc1, 0x08, 0x1b, 0xaa, 0x40, 0xe1, 0x18, 0xaa, 0x00, 0xa7, - 0x18, 0xa8, 0x06, 0x42, 0x30, 0x12, 0x17, 0xaa, 0x40, 0xe1, 0x11, 0xaa, - 0x00, 0x42, 0x77, 0x24, 0x12, 0xaa, 0x00, 0x42, 0x30, 0x12, 0x10, 0xaa, - 0x40, 0xe1, 0x0b, 0xaa, 0x00, 0x42, 0x30, 0x12, 0x0a, 0xaa, 0x40, 0xe1, - 0x20, 0xaa, 0x00, 0x42, 0x30, 0x12, 0x1f, 0xaa, 0x40, 0xe1, 0x06, 0xaa, - 0x00, 0x42, 0x22, 0x00, 0x07, 0xaa, 0x40, 0xe1, 0x0e, 0xaa, 0x00, 0x42, - 0x22, 0x00, 0x0f, 0xaa, 0x40, 0xe1, 0x08, 0xaa, 0x00, 0x42, 0x22, 0x00, - 0x09, 0xaa, 0x40, 0x42, 0x98, 0x14, 0x44, 0xaa, 0x00, 0xe7, 0x41, 0xaa, - 0x00, 0xeb, 0x40, 0xaa, 0x00, 0xec, 0x4a, 0xaa, 0x00, 0xee, 0x46, 0xaa, - 0x80, 0x16, 0xf0, 0x47, 0xaa, 0x00, 0xf2, 0x49, 0xaa, 0x00, 0x42, 0xee, - 0x00, 0x4b, 0xaa, 0x00, 0xf4, 0x45, 0xaa, 0x00, 0xf9, 0x48, 0xaa, 0x40, - 0xe7, 0x42, 0xaa, 0x40, 0xe1, 0x15, 0xaa, 0x00, 0x42, 0x68, 0x0f, 0x19, - 0xaa, 0x00, 0x42, 0x22, 0x00, 0x16, 0xaa, 0x40, 0xe1, 0x0c, 0xaa, 0x00, - 0x42, 0x22, 0x00, 0x0d, 0xaa, 0x40, 0xe1, 0x1d, 0xaa, 0x00, 0x42, 0x16, - 0x00, 0x21, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x1e, 0xaa, 0x40, 0xe9, 0x04, - 0xaa, 0x40, 0x45, 0xd1, 0x09, 0x58, 0xaa, 0x00, 0xa6, 0x2e, 0x44, 0xb8, - 0x27, 0x59, 0xaa, 0x00, 0x43, 0xcd, 0x09, 0x51, 0xaa, 0x00, 0xb3, 0x14, - 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x50, 0xaa, 0x40, 0x44, 0x25, 0x01, 0x53, - 0xaa, 0x00, 0x42, 0x15, 0x02, 0x52, 0xaa, 0x40, 0x44, 0x96, 0x1b, 0x57, - 0xaa, 0x00, 0x42, 0x30, 0x27, 0x56, 0xaa, 0x40, 0x43, 0xd7, 0x04, 0x55, - 0xaa, 0x00, 0x43, 0xfb, 0x05, 0x54, 0xaa, 0x40, 0x06, 0x97, 0x29, 0x18, - 0x42, 0x74, 0x00, 0x35, 0xaa, 0x00, 0x42, 0x71, 0x00, 0x34, 0xaa, 0x00, - 0x42, 0xa9, 0x01, 0x36, 0xaa, 0x00, 0x42, 0x20, 0x20, 0x33, 0xaa, 0x40, - 0xe8, 0x4d, 0xaa, 0x00, 0xed, 0x4c, 0xaa, 0x00, 0x42, 0x1d, 0x01, 0x43, - 0xaa, 0x40, 0x47, 0x11, 0xc5, 0x32, 0x11, 0x01, 0xa4, 0xf8, 0x02, 0x07, - 0xf1, 0x04, 0x74, 0x47, 0xd7, 0xc8, 0x34, 0x11, 0x01, 0x46, 0xbf, 0xc1, - 0x31, 0x11, 0x01, 0x4d, 0xbd, 0x30, 0x43, 0x11, 0x01, 0xb3, 0x43, 0xb6, - 0x01, 0xff, 0x45, 0x48, 0x21, 0x33, 0x11, 0x01, 0x0a, 0x5c, 0x70, 0x01, - 0xff, 0xe1, 0x27, 0x11, 0x81, 0x24, 0xe5, 0x2c, 0x11, 0x81, 0x1b, 0xe9, - 0x28, 0x11, 0x81, 0x12, 0xef, 0x2e, 0x11, 0x81, 0x09, 0xf5, 0x2a, 0x11, - 0xc1, 0x00, 0xf5, 0x2b, 0x11, 0x41, 0xe9, 0x30, 0x11, 0x41, 0xe9, 0x29, - 0x11, 0x41, 0xe9, 0x46, 0x11, 0x41, 0xe1, 0x45, 0x11, 0x01, 0xe9, 0x2d, - 0x11, 0x01, 0xf5, 0x2f, 0x11, 0x41, 0x4b, 0x12, 0x24, 0x40, 0x11, 0x01, - 0x04, 0xdc, 0x02, 0x01, 0xff, 0x48, 0x5b, 0x14, 0x01, 0x11, 0x01, 0x4b, - 0x3b, 0x21, 0x00, 0x11, 0x01, 0x47, 0x67, 0x46, 0x02, 0x11, 0x41, 0x42, - 0xda, 0x10, 0x03, 0x11, 0x01, 0xa2, 0xeb, 0x01, 0xa3, 0xdc, 0x01, 0xa4, - 0xbf, 0x01, 0xe5, 0x06, 0x11, 0x01, 0xa7, 0xac, 0x01, 0x43, 0x6b, 0x3c, - 0x26, 0x11, 0x01, 0xe9, 0x04, 0x11, 0x01, 0xaa, 0x93, 0x01, 0xab, 0x84, - 0x01, 0xac, 0x76, 0x43, 0x87, 0x52, 0x1f, 0x11, 0x01, 0xae, 0x56, 0xb0, - 0x48, 0x43, 0x77, 0xa2, 0x22, 0x11, 0x01, 0x43, 0x2f, 0xd5, 0x25, 0x11, - 0x01, 0xb4, 0x1f, 0xf5, 0x05, 0x11, 0x01, 0x43, 0x1a, 0xe1, 0x47, 0x11, - 0x01, 0x43, 0x56, 0x17, 0x24, 0x11, 0x01, 0xb9, 0x01, 0xff, 0x42, 0xda, - 0x10, 0x21, 0x11, 0x01, 0x43, 0x5f, 0xb0, 0x20, 0x11, 0x41, 0x42, 0xda, - 0x10, 0x16, 0x11, 0x01, 0x43, 0x6b, 0x3c, 0x17, 0x11, 0x01, 0xb4, 0x01, - 0xff, 0x42, 0xda, 0x10, 0x11, 0x11, 0x01, 0x43, 0x6b, 0x3c, 0x12, 0x11, - 0x41, 0x42, 0xda, 0x10, 0x1b, 0x11, 0x01, 0x43, 0x6b, 0x3c, 0x1c, 0x11, - 0x41, 0x42, 0xda, 0x10, 0x1a, 0x11, 0x01, 0x43, 0xf1, 0x51, 0x0b, 0x11, - 0x01, 0x43, 0x83, 0x4d, 0x15, 0x11, 0x01, 0x43, 0x5f, 0xb0, 0x10, 0x11, - 0x41, 0x42, 0xda, 0x10, 0x23, 0x11, 0x01, 0x43, 0x6b, 0x3c, 0x44, 0x11, - 0x41, 0x42, 0xda, 0x10, 0x07, 0x11, 0x01, 0x43, 0x6b, 0x3c, 0x08, 0x11, - 0x41, 0x42, 0xda, 0x10, 0x0e, 0x11, 0x01, 0x43, 0x6b, 0x3c, 0x0f, 0x11, - 0x41, 0x42, 0xda, 0x10, 0x09, 0x11, 0x01, 0x43, 0x6b, 0x3c, 0x0a, 0x11, - 0x41, 0x42, 0xda, 0x10, 0x18, 0x11, 0x01, 0xa4, 0x06, 0x43, 0x6b, 0x3c, - 0x19, 0x11, 0x41, 0x42, 0xda, 0x10, 0x13, 0x11, 0x01, 0x43, 0x6b, 0x3c, - 0x14, 0x11, 0x41, 0x42, 0xda, 0x10, 0x0c, 0x11, 0x01, 0x43, 0x6b, 0x3c, - 0x0d, 0x11, 0x41, 0x42, 0xda, 0x10, 0x1d, 0x11, 0x01, 0x43, 0x6b, 0x3c, - 0x1e, 0x11, 0x41, 0x44, 0x0b, 0x1e, 0x41, 0x11, 0x01, 0x05, 0xf5, 0x05, - 0x06, 0x4b, 0xcc, 0x98, 0x42, 0x11, 0x41, 0x45, 0xd1, 0x09, 0x3e, 0x11, - 0x01, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x3f, 0x11, 0x01, 0x43, 0xcd, 0x09, - 0x37, 0x11, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x36, 0x11, - 0x41, 0x44, 0x25, 0x01, 0x39, 0x11, 0x01, 0x42, 0x15, 0x02, 0x38, 0x11, - 0x41, 0x44, 0x96, 0x1b, 0x3d, 0x11, 0x01, 0x42, 0x30, 0x27, 0x3c, 0x11, - 0x41, 0x43, 0xd7, 0x04, 0x3b, 0x11, 0x01, 0x43, 0xfb, 0x05, 0x3a, 0x11, - 0x41, 0x42, 0x5f, 0x01, 0xd3, 0x26, 0x00, 0xf2, 0x91, 0xfa, 0x41, 0x02, - 0x00, 0x00, 0x32, 0x4a, 0xdf, 0xa4, 0x48, 0xf5, 0x01, 0x02, 0x11, 0x00, - 0x06, 0x43, 0x1f, 0x21, 0xb3, 0x26, 0x40, 0x45, 0xda, 0x02, 0xa2, 0x00, - 0x00, 0x02, 0x88, 0x00, 0x01, 0xff, 0x4c, 0xac, 0x83, 0x04, 0x21, 0x00, - 0x05, 0xf0, 0x07, 0x01, 0xff, 0x48, 0xf3, 0x82, 0x4e, 0xfe, 0x00, 0x48, - 0x00, 0x83, 0x4a, 0xfe, 0x40, 0x45, 0xda, 0x02, 0xb5, 0x20, 0x00, 0x43, - 0x84, 0x0c, 0xb8, 0x00, 0x40, 0x44, 0x34, 0xcb, 0x35, 0xf3, 0x01, 0xa4, - 0xfb, 0x22, 0xac, 0xec, 0x22, 0xad, 0xd6, 0x22, 0xae, 0xf4, 0x05, 0xb0, - 0xe5, 0x05, 0xb2, 0x9a, 0x03, 0x44, 0xbc, 0x01, 0xeb, 0x26, 0x00, 0xf4, - 0x08, 0xf4, 0x81, 0xf6, 0x02, 0xb5, 0x01, 0xff, 0x10, 0x39, 0x5b, 0x06, - 0x49, 0xc5, 0x03, 0x21, 0x26, 0x40, 0x4d, 0x80, 0x7a, 0x6f, 0x05, 0x01, - 0x07, 0xf1, 0x04, 0x01, 0xff, 0xa1, 0xcf, 0x02, 0x43, 0xc6, 0x08, 0x31, - 0x05, 0x01, 0xa3, 0x98, 0x02, 0xa4, 0xfa, 0x01, 0xa5, 0xed, 0x01, 0x43, - 0x57, 0xd1, 0x54, 0x05, 0x01, 0xa7, 0xd8, 0x01, 0x44, 0x36, 0xe5, 0x46, - 0x05, 0x01, 0xa9, 0xbd, 0x01, 0xaa, 0xae, 0x01, 0xab, 0x9f, 0x01, 0xac, - 0x90, 0x01, 0x43, 0xaf, 0xdd, 0x4c, 0x05, 0x01, 0x44, 0x76, 0xe6, 0x4e, - 0x05, 0x01, 0x42, 0x10, 0x00, 0x52, 0x05, 0x01, 0xb0, 0x70, 0x02, 0x9d, - 0x12, 0x64, 0x43, 0xe1, 0x0c, 0x59, 0x05, 0x01, 0xb3, 0x44, 0xb4, 0x30, - 0x44, 0xd2, 0xe7, 0x5b, 0x05, 0x01, 0x44, 0x06, 0xe8, 0x40, 0x05, 0x01, - 0xb9, 0x16, 0xba, 0x01, 0xff, 0x43, 0x4c, 0x31, 0x35, 0x05, 0x01, 0xa8, - 0x01, 0xff, 0xe1, 0x3b, 0x05, 0x01, 0x42, 0x62, 0x01, 0x37, 0x05, 0x41, - 0x43, 0xaa, 0x2f, 0x61, 0x05, 0x01, 0x43, 0x19, 0x21, 0x3a, 0x05, 0x41, - 0x42, 0xbb, 0x01, 0x38, 0x05, 0x01, 0x43, 0x24, 0xe9, 0x5c, 0x05, 0x01, - 0x43, 0x89, 0x4d, 0x53, 0x05, 0x41, 0x43, 0xfd, 0xe8, 0x5a, 0x05, 0x01, - 0xa8, 0x01, 0xff, 0xe1, 0x3d, 0x05, 0x81, 0x06, 0x42, 0x0a, 0x63, 0x5d, - 0x05, 0x41, 0xeb, 0x50, 0x05, 0x41, 0xf2, 0x4d, 0x05, 0x01, 0xf9, 0x47, - 0x05, 0x41, 0x42, 0x92, 0x01, 0x57, 0x05, 0x01, 0x43, 0x24, 0xe9, 0x62, - 0x05, 0x41, 0x42, 0x1a, 0x00, 0x3e, 0x05, 0x01, 0x43, 0x44, 0x4d, 0x45, - 0x05, 0x41, 0x42, 0x17, 0x00, 0x44, 0x05, 0x01, 0x42, 0xa0, 0x3a, 0x63, - 0x05, 0x41, 0x43, 0x6a, 0x79, 0x51, 0x05, 0x01, 0x43, 0x1b, 0xe9, 0x43, - 0x05, 0x41, 0x43, 0x91, 0x31, 0x3f, 0x05, 0x01, 0x42, 0xa4, 0x04, 0x3c, - 0x05, 0x01, 0x42, 0xa7, 0x01, 0x5e, 0x05, 0x41, 0x44, 0x32, 0xe5, 0x58, - 0x05, 0x01, 0x42, 0x29, 0x02, 0x32, 0x05, 0x41, 0xe2, 0x34, 0x05, 0x01, - 0x42, 0xd0, 0x1a, 0x36, 0x05, 0x41, 0x42, 0x8a, 0x00, 0x33, 0x05, 0x01, - 0x43, 0xa3, 0x31, 0x41, 0x05, 0x01, 0xba, 0x01, 0xff, 0x42, 0x65, 0x0f, - 0x55, 0x05, 0x01, 0x43, 0x89, 0x4d, 0x4f, 0x05, 0x41, 0xa1, 0x22, 0xa8, - 0x0d, 0x02, 0x20, 0x20, 0x01, 0xff, 0xf7, 0x5f, 0x05, 0x01, 0xf9, 0x4b, - 0x05, 0x41, 0xe1, 0x39, 0x05, 0x81, 0x0a, 0xe9, 0x4a, 0x05, 0x01, 0x42, - 0x0a, 0x63, 0x49, 0x05, 0x41, 0xf4, 0x56, 0x05, 0x41, 0xf2, 0x42, 0x05, - 0x01, 0x42, 0xd0, 0x1a, 0x60, 0x05, 0x41, 0x42, 0xbd, 0x03, 0x30, 0x05, - 0x01, 0x42, 0x0c, 0x00, 0x48, 0x05, 0x41, 0x45, 0xec, 0x06, 0x31, 0xf4, - 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4c, 0xd8, 0x8d, 0x39, 0xf6, - 0x01, 0x49, 0xbe, 0xb7, 0x3c, 0xf6, 0x41, 0x48, 0xed, 0xb8, 0xd0, 0x26, - 0x00, 0x02, 0x06, 0x00, 0xaa, 0x02, 0xa5, 0x96, 0x02, 0x0b, 0xd5, 0x85, - 0x29, 0xaf, 0x1d, 0xb0, 0x0f, 0xb2, 0x01, 0xff, 0x4b, 0xb4, 0x80, 0x0d, - 0x00, 0x00, 0x42, 0x20, 0x04, 0x55, 0xf9, 0x41, 0x49, 0xdc, 0xab, 0x8f, - 0xf3, 0x01, 0x49, 0x33, 0xaf, 0x9a, 0xfa, 0x41, 0xee, 0xc7, 0x02, 0x00, - 0x4a, 0x2f, 0xaa, 0xa0, 0xf3, 0x41, 0xe1, 0xa0, 0x02, 0x81, 0xdf, 0x01, - 0xe2, 0xa9, 0x02, 0x01, 0x02, 0xec, 0x05, 0xca, 0x01, 0xe4, 0xa2, 0x02, - 0x81, 0xc0, 0x01, 0xe5, 0xba, 0x02, 0x81, 0xb6, 0x01, 0xe7, 0xc0, 0x02, - 0x81, 0xac, 0x01, 0xe9, 0xb9, 0x02, 0x81, 0xa2, 0x01, 0xeb, 0xbc, 0x02, - 0x81, 0x98, 0x01, 0xec, 0xa3, 0x02, 0x81, 0x89, 0x01, 0xed, 0xaa, 0x02, - 0x81, 0x73, 0xee, 0xb5, 0x02, 0x81, 0x62, 0xef, 0xab, 0x02, 0x01, 0xf0, - 0xb7, 0x02, 0x81, 0x55, 0xf1, 0xa8, 0x02, 0x01, 0xf2, 0xa5, 0x02, 0x81, - 0x48, 0xf3, 0xb0, 0x02, 0x81, 0x2d, 0xf4, 0xad, 0x02, 0x81, 0x1f, 0xf5, - 0xb2, 0x02, 0x81, 0x04, 0xf8, 0xb4, 0x02, 0x41, 0xf5, 0xbf, 0x02, 0xc1, - 0x00, 0xf5, 0xa4, 0x02, 0xc1, 0x00, 0xd2, 0xc8, 0x02, 0x01, 0xd3, 0xd0, - 0x02, 0x01, 0xf5, 0xbb, 0x02, 0x41, 0xf4, 0xc7, 0x02, 0xc1, 0x00, 0xd2, - 0xb6, 0x02, 0x41, 0xe8, 0xae, 0x02, 0x81, 0x0d, 0xf3, 0xb8, 0x02, 0x01, - 0xf4, 0xc2, 0x02, 0xc1, 0x00, 0xd2, 0xc3, 0x02, 0x41, 0xd2, 0xaf, 0x02, - 0x41, 0xf2, 0xc9, 0x02, 0x41, 0xd2, 0xa1, 0x02, 0x41, 0xe4, 0xbe, 0x02, - 0x01, 0xe7, 0xc4, 0x02, 0x01, 0xee, 0xb3, 0x02, 0x41, 0xe2, 0xca, 0x02, - 0xc1, 0x00, 0xd2, 0xcb, 0x02, 0x01, 0xd3, 0xcc, 0x02, 0x01, 0xd4, 0xcd, - 0x02, 0x41, 0xe4, 0xa6, 0x02, 0xc1, 0x00, 0xd2, 0xce, 0x02, 0x41, 0xd2, - 0xbd, 0x02, 0x41, 0xe9, 0xc5, 0x02, 0x41, 0xd2, 0xc1, 0x02, 0x41, 0xd2, - 0xcf, 0x02, 0x41, 0xd2, 0xac, 0x02, 0x41, 0x42, 0x68, 0xe1, 0xb1, 0x02, - 0x01, 0x42, 0xc8, 0xe9, 0xc6, 0x02, 0x41, 0xd2, 0xa7, 0x02, 0x41, 0x43, - 0xf3, 0x01, 0x05, 0x21, 0x00, 0xf4, 0x38, 0x20, 0xc0, 0x00, 0x50, 0x29, - 0x5a, 0x41, 0x20, 0x40, 0x48, 0x6d, 0xbc, 0xc3, 0xf5, 0x01, 0x45, 0xe7, - 0x0e, 0xc7, 0xf4, 0xc1, 0x00, 0x49, 0x43, 0xab, 0xc2, 0xf5, 0x41, 0x46, - 0xc5, 0xd2, 0x3f, 0x2e, 0x00, 0x46, 0xf3, 0xd4, 0x51, 0x26, 0x40, 0x10, - 0xc9, 0x5a, 0x39, 0x02, 0x73, 0x02, 0x18, 0xa4, 0x0c, 0x48, 0xbd, 0xbe, - 0x6b, 0xf9, 0x01, 0x42, 0xca, 0x4b, 0xf6, 0xf6, 0x41, 0x42, 0x68, 0x00, - 0x6f, 0xf5, 0x01, 0xf9, 0x6c, 0xf3, 0x41, 0xec, 0x18, 0x00, 0x80, 0x04, - 0xf2, 0x4b, 0x26, 0x40, 0x80, 0x06, 0x48, 0xbd, 0xbd, 0xd9, 0xf5, 0x41, - 0x49, 0x29, 0x1e, 0x94, 0x00, 0x00, 0x43, 0x82, 0x19, 0x7f, 0x00, 0x4e, - 0xe1, 0x0a, 0x14, 0x80, 0xf0, 0x1b, 0xa2, 0x89, 0x1b, 0xe3, 0xa1, 0x14, - 0x80, 0xe0, 0x13, 0xe5, 0x01, 0x14, 0x80, 0xd0, 0x13, 0xe6, 0x5d, 0x15, - 0x80, 0xb1, 0x12, 0x4c, 0xcf, 0x25, 0x1e, 0x14, 0x00, 0xa8, 0x9e, 0x12, - 0xe9, 0x03, 0x14, 0x80, 0x90, 0x12, 0xeb, 0x83, 0x14, 0x80, 0xba, 0x11, - 0xec, 0xea, 0x14, 0x80, 0xca, 0x10, 0xed, 0xbb, 0x14, 0x80, 0xe1, 0x0f, - 0xee, 0xd0, 0x14, 0x80, 0xd6, 0x0c, 0xef, 0x05, 0x14, 0x80, 0x89, 0x0c, - 0xf0, 0x49, 0x14, 0x80, 0xb1, 0x0b, 0xf1, 0x85, 0x15, 0x80, 0x87, 0x0b, - 0xf2, 0x50, 0x15, 0x80, 0xa7, 0x0a, 0xf3, 0x05, 0x15, 0x80, 0xf5, 0x07, - 0xf4, 0x66, 0x14, 0x80, 0xe0, 0x05, 0xb7, 0x9f, 0x01, 0xf9, 0x3e, 0x15, - 0xc0, 0x00, 0x06, 0x1e, 0x95, 0x4e, 0xe1, 0x2d, 0x15, 0x80, 0x3c, 0xe5, - 0x26, 0x15, 0x00, 0xe9, 0x28, 0x15, 0x80, 0x2f, 0xef, 0x2a, 0x15, 0x80, - 0x22, 0xb7, 0x01, 0xff, 0xe1, 0x39, 0x15, 0x80, 0x16, 0xe5, 0x2f, 0x15, - 0x00, 0xe9, 0x31, 0x15, 0x80, 0x09, 0xef, 0x35, 0x15, 0xc0, 0x00, 0xef, - 0x37, 0x15, 0x40, 0xe9, 0x33, 0x15, 0x40, 0xe1, 0x3b, 0x15, 0x40, 0xef, - 0x2b, 0x15, 0x00, 0xf9, 0xc3, 0x18, 0x40, 0xe9, 0x29, 0x15, 0x40, 0xe1, - 0x2e, 0x15, 0x80, 0x04, 0xf9, 0xc4, 0x18, 0x40, 0xe9, 0x27, 0x15, 0x40, - 0x43, 0x91, 0x9b, 0x8f, 0x14, 0x00, 0x43, 0x8e, 0xd8, 0x71, 0x14, 0x00, - 0x43, 0xb8, 0x1a, 0xd9, 0x14, 0x00, 0x43, 0x97, 0x19, 0xa9, 0x14, 0x00, - 0x43, 0x9b, 0x14, 0xc6, 0x14, 0x00, 0x42, 0x99, 0x04, 0x07, 0x14, 0x00, - 0xb0, 0x16, 0x43, 0x1b, 0x1f, 0xf3, 0x14, 0x00, 0x43, 0x3a, 0x2c, 0x52, - 0x14, 0x00, 0xf7, 0x1d, 0x14, 0x00, 0x43, 0x5a, 0x4e, 0x2c, 0x15, 0x40, - 0x42, 0x99, 0x04, 0x35, 0x14, 0x00, 0x43, 0x56, 0x17, 0x48, 0x14, 0x40, - 0xe1, 0x17, 0x14, 0x80, 0xb0, 0x04, 0xe5, 0x0c, 0x14, 0x80, 0x59, 0xe9, - 0x0e, 0x14, 0x80, 0x50, 0xef, 0x12, 0x14, 0xc0, 0x00, 0xef, 0x14, 0x14, - 0xc0, 0x00, 0x08, 0x8d, 0xbb, 0x01, 0xff, 0x48, 0x75, 0xbc, 0x7e, 0x16, - 0x00, 0x42, 0x53, 0x00, 0x9f, 0x15, 0xc0, 0x00, 0xe1, 0x9e, 0x15, 0x00, - 0xe5, 0x9b, 0x15, 0x00, 0xe9, 0x9c, 0x15, 0x00, 0xef, 0x9d, 0x15, 0x00, - 0xb7, 0x01, 0xff, 0xe1, 0x7c, 0x16, 0x80, 0x18, 0x42, 0x27, 0x01, 0x77, - 0x16, 0x00, 0xe9, 0x78, 0x16, 0x80, 0x09, 0xef, 0x7a, 0x16, 0xc0, 0x00, - 0xef, 0x7b, 0x16, 0x40, 0xe9, 0x79, 0x16, 0x40, 0xe1, 0x7d, 0x16, 0x40, - 0xe9, 0x10, 0x14, 0x40, 0x02, 0x60, 0x01, 0x01, 0xff, 0x06, 0x1e, 0x95, - 0x06, 0x45, 0x00, 0xba, 0xdd, 0x18, 0x40, 0x02, 0x76, 0xe4, 0x9f, 0x03, - 0x44, 0xda, 0xe4, 0x5c, 0x15, 0x00, 0x02, 0x1e, 0x0a, 0xf5, 0x02, 0xec, - 0xeb, 0x14, 0x80, 0xb7, 0x02, 0xed, 0xbc, 0x14, 0x80, 0x8f, 0x02, 0x02, - 0xa8, 0x01, 0xfd, 0x01, 0xf0, 0x4a, 0x14, 0x80, 0xd5, 0x01, 0xf2, 0x51, - 0x15, 0x80, 0xb9, 0x01, 0xb3, 0x72, 0xb4, 0x48, 0xb7, 0x27, 0xf9, 0x40, - 0x15, 0xc0, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x3a, 0x15, 0x80, 0x16, 0xe5, - 0x30, 0x15, 0x00, 0xe9, 0x32, 0x15, 0x80, 0x09, 0xef, 0x36, 0x15, 0xc0, - 0x00, 0xef, 0x38, 0x15, 0x40, 0xe9, 0x34, 0x15, 0x40, 0xe1, 0x3c, 0x15, - 0x40, 0xe1, 0x18, 0x14, 0x80, 0x16, 0xe5, 0x0d, 0x14, 0x00, 0xe9, 0x0f, - 0x14, 0x80, 0x09, 0xef, 0x13, 0x14, 0xc0, 0x00, 0xef, 0x15, 0x14, 0x40, - 0xe9, 0x11, 0x14, 0x40, 0xe1, 0x1a, 0x14, 0x40, 0x44, 0x66, 0xe5, 0x69, - 0x15, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x62, 0x14, 0x80, 0x16, 0xe5, 0x58, - 0x14, 0x00, 0xe9, 0x5a, 0x14, 0x80, 0x09, 0xef, 0x5e, 0x14, 0xc0, 0x00, - 0xef, 0x60, 0x14, 0x40, 0xe9, 0x5c, 0x14, 0x40, 0xe1, 0x64, 0x14, 0x40, - 0x02, 0x8a, 0x18, 0x22, 0xb7, 0x01, 0xff, 0xe1, 0x01, 0x15, 0x80, 0x16, - 0xe5, 0xf7, 0x14, 0x00, 0xe9, 0xf9, 0x14, 0x80, 0x09, 0xef, 0xfd, 0x14, - 0xc0, 0x00, 0xef, 0xff, 0x14, 0x40, 0xe9, 0xfb, 0x14, 0x40, 0xe1, 0x03, - 0x15, 0x40, 0xe1, 0x22, 0x15, 0x80, 0x16, 0xe5, 0x18, 0x15, 0x00, 0xe9, - 0x1a, 0x15, 0x80, 0x09, 0xef, 0x1e, 0x15, 0xc0, 0x00, 0xef, 0x20, 0x15, - 0x40, 0xe9, 0x1c, 0x15, 0x40, 0xe1, 0x24, 0x15, 0x40, 0xe1, 0x8d, 0x15, - 0x00, 0xe5, 0x8a, 0x15, 0x00, 0xe9, 0x8b, 0x15, 0x00, 0xef, 0x8c, 0x15, - 0x00, 0x43, 0x56, 0x17, 0x4f, 0x15, 0x40, 0xb7, 0x01, 0xff, 0xe1, 0x45, - 0x14, 0x80, 0x16, 0xe5, 0x3b, 0x14, 0x00, 0xe9, 0x3d, 0x14, 0x80, 0x09, - 0xef, 0x41, 0x14, 0xc0, 0x00, 0xef, 0x43, 0x14, 0x40, 0xe9, 0x3f, 0x14, - 0x40, 0xe1, 0x47, 0x14, 0x40, 0xe1, 0xcc, 0x14, 0x80, 0x04, 0xe5, 0xca, - 0x14, 0x40, 0xe1, 0xce, 0x14, 0x40, 0xb7, 0x01, 0xff, 0xe1, 0xb7, 0x14, - 0x80, 0x16, 0xe5, 0xad, 0x14, 0x00, 0xe9, 0xaf, 0x14, 0x80, 0x09, 0xef, - 0xb3, 0x14, 0xc0, 0x00, 0xef, 0xb5, 0x14, 0x40, 0xe9, 0xb1, 0x14, 0x40, - 0xe1, 0xb9, 0x14, 0x40, 0xe1, 0x4d, 0x15, 0x80, 0x2f, 0xe5, 0x44, 0x15, - 0x00, 0xef, 0x4a, 0x15, 0x80, 0x22, 0xb7, 0x01, 0xff, 0xe1, 0xe7, 0x14, - 0x80, 0x16, 0xe5, 0xdd, 0x14, 0x00, 0xe9, 0xdf, 0x14, 0x80, 0x09, 0xef, - 0xe3, 0x14, 0xc0, 0x00, 0xef, 0xe5, 0x14, 0x40, 0xe9, 0xe1, 0x14, 0x40, - 0xe1, 0xe9, 0x14, 0x40, 0xef, 0xe1, 0x18, 0x40, 0xe1, 0xe2, 0x18, 0x40, - 0xe1, 0x7f, 0x14, 0x80, 0x16, 0xe5, 0x75, 0x14, 0x00, 0xe9, 0x77, 0x14, - 0x80, 0x09, 0xef, 0x7b, 0x14, 0xc0, 0x00, 0xef, 0x7d, 0x14, 0x40, 0xe9, - 0x79, 0x14, 0x40, 0xe1, 0x81, 0x14, 0x40, 0xe1, 0x9d, 0x14, 0x80, 0x16, - 0xe5, 0x93, 0x14, 0x00, 0xe9, 0x95, 0x14, 0x80, 0x09, 0xef, 0x99, 0x14, - 0xc0, 0x00, 0xef, 0x9b, 0x14, 0x40, 0xe9, 0x97, 0x14, 0x40, 0xe1, 0x9f, - 0x14, 0x40, 0xe1, 0x19, 0x14, 0x00, 0xf9, 0xb3, 0x18, 0x40, 0xe1, 0x55, - 0x14, 0x80, 0xfc, 0x01, 0xe5, 0x4c, 0x14, 0x00, 0xe8, 0x6a, 0x15, 0x80, - 0x9d, 0x01, 0xe9, 0x4e, 0x14, 0x80, 0x93, 0x01, 0x02, 0xd8, 0x30, 0x74, - 0xef, 0x50, 0x14, 0x80, 0x6b, 0xb4, 0x34, 0xb7, 0x13, 0xb9, 0x01, 0xff, - 0xe1, 0x73, 0x15, 0x00, 0xe5, 0x70, 0x15, 0x00, 0xe9, 0x71, 0x15, 0x00, - 0xef, 0x72, 0x15, 0x40, 0xe1, 0x61, 0x14, 0x80, 0x16, 0xe5, 0x57, 0x14, - 0x00, 0xe9, 0x59, 0x14, 0x80, 0x09, 0xef, 0x5d, 0x14, 0xc0, 0x00, 0xef, - 0x5f, 0x14, 0x40, 0xe9, 0x5b, 0x14, 0x40, 0xe1, 0x63, 0x14, 0x40, 0xe1, - 0x6a, 0x14, 0x00, 0xe5, 0x67, 0x14, 0x00, 0xe8, 0x6f, 0x15, 0x80, 0x08, - 0xe9, 0x68, 0x14, 0x00, 0xef, 0x69, 0x14, 0x40, 0xe1, 0x6e, 0x15, 0x80, - 0x17, 0xe5, 0x6b, 0x15, 0x00, 0xe9, 0x6c, 0x15, 0x00, 0xef, 0x6d, 0x15, - 0x80, 0x06, 0x42, 0x15, 0x01, 0xe5, 0x18, 0x40, 0xef, 0xe6, 0x18, 0x40, - 0xe1, 0xe7, 0x18, 0x40, 0xef, 0x51, 0x14, 0x40, 0xe1, 0x89, 0x15, 0x00, - 0xe5, 0x86, 0x15, 0x00, 0xe9, 0x87, 0x15, 0x00, 0xef, 0x88, 0x15, 0x80, - 0x06, 0x42, 0x15, 0x01, 0xe8, 0x18, 0x40, 0xef, 0xe9, 0x18, 0x40, 0xe9, - 0x4f, 0x14, 0x40, 0x48, 0x0d, 0xb9, 0xae, 0x15, 0x80, 0x2f, 0xe1, 0x66, - 0x15, 0x80, 0x26, 0xe5, 0x5e, 0x15, 0x00, 0xe9, 0x60, 0x15, 0x80, 0x19, - 0xef, 0x64, 0x15, 0x80, 0x10, 0xb7, 0x01, 0xff, 0xe1, 0xe4, 0x18, 0x80, - 0x04, 0xe5, 0xe3, 0x18, 0x40, 0xe1, 0x68, 0x15, 0x40, 0xef, 0x65, 0x15, - 0x40, 0xe9, 0x62, 0x15, 0x40, 0xe1, 0x67, 0x15, 0x40, 0xe1, 0xac, 0x15, - 0x80, 0x16, 0xe5, 0xa7, 0x15, 0x00, 0xe9, 0xa8, 0x15, 0x80, 0x09, 0xef, - 0xaa, 0x15, 0xc0, 0x00, 0xef, 0xab, 0x15, 0x40, 0xe9, 0xa9, 0x15, 0x40, - 0xe1, 0xad, 0x15, 0x40, 0xe1, 0x56, 0x14, 0x80, 0x04, 0xf9, 0xb7, 0x18, - 0x40, 0xe9, 0x4d, 0x14, 0x40, 0xe1, 0xf4, 0x14, 0x80, 0xbe, 0x01, 0xe5, - 0xed, 0x14, 0x00, 0xe8, 0x25, 0x15, 0x80, 0x68, 0xe9, 0xef, 0x14, 0x80, - 0x5f, 0xef, 0xf1, 0x14, 0x80, 0x36, 0xb0, 0x24, 0xf7, 0x07, 0x15, 0xc0, - 0x00, 0xe1, 0x00, 0x15, 0x80, 0x16, 0xe5, 0xf6, 0x14, 0x00, 0xe9, 0xf8, - 0x14, 0x80, 0x09, 0xef, 0xfc, 0x14, 0xc0, 0x00, 0xef, 0xfe, 0x14, 0x40, - 0xe9, 0xfa, 0x14, 0x40, 0xe1, 0x02, 0x15, 0x40, 0xe1, 0xbf, 0x1a, 0x01, - 0xe5, 0xbc, 0x1a, 0x01, 0xe9, 0xbd, 0x1a, 0x01, 0xef, 0xbe, 0x1a, 0x41, - 0xef, 0xf2, 0x14, 0x00, 0x0c, 0xbc, 0x8e, 0x04, 0xf9, 0xbe, 0x18, 0x40, - 0x42, 0xe6, 0x06, 0x88, 0x14, 0x00, 0x42, 0x4e, 0x00, 0x85, 0x14, 0x00, - 0x42, 0x5b, 0x17, 0x86, 0x14, 0x00, 0x42, 0xfe, 0x25, 0x87, 0x14, 0x40, - 0xe9, 0xf0, 0x14, 0x40, 0xe1, 0x15, 0x15, 0x80, 0x40, 0xe5, 0x10, 0x15, - 0x00, 0xe9, 0x11, 0x15, 0x80, 0x33, 0xef, 0x13, 0x15, 0x80, 0x26, 0xb7, - 0x01, 0xff, 0xe1, 0x21, 0x15, 0x80, 0x1a, 0xe5, 0x17, 0x15, 0x00, 0xe9, - 0x19, 0x15, 0x80, 0x0d, 0xef, 0x1d, 0x15, 0xc0, 0x00, 0xef, 0x1f, 0x15, - 0x00, 0xf9, 0xc2, 0x18, 0x40, 0xe9, 0x1b, 0x15, 0x40, 0xe1, 0x23, 0x15, - 0x40, 0xef, 0x14, 0x15, 0x00, 0xf9, 0xc0, 0x18, 0x40, 0xe9, 0x12, 0x15, - 0x40, 0xe1, 0x16, 0x15, 0x00, 0xf9, 0xc1, 0x18, 0x40, 0xe1, 0xf5, 0x14, - 0x80, 0x5f, 0xf9, 0xbf, 0x18, 0xc0, 0x00, 0x04, 0x9a, 0xe5, 0x01, 0xff, - 0xa8, 0x3e, 0xaa, 0x2f, 0xed, 0xbf, 0x14, 0x00, 0x02, 0xa4, 0x02, 0x0c, - 0x42, 0x53, 0x00, 0xa2, 0x14, 0x00, 0x42, 0x4b, 0x18, 0x41, 0x15, 0x40, - 0xe1, 0x9a, 0x15, 0x00, 0xe5, 0x97, 0x15, 0x00, 0xe9, 0x98, 0x15, 0x00, - 0xef, 0x99, 0x15, 0x80, 0x06, 0x42, 0x15, 0x01, 0xea, 0x18, 0x40, 0xef, - 0xeb, 0x18, 0x40, 0xe9, 0x1a, 0x16, 0x00, 0xf5, 0x15, 0x16, 0xc0, 0x00, - 0xf5, 0xf1, 0x18, 0x40, 0xe1, 0xc3, 0x15, 0x00, 0xe5, 0xc0, 0x15, 0x00, - 0xe9, 0xc1, 0x15, 0x00, 0xef, 0xc2, 0x15, 0xc0, 0x00, 0xef, 0xec, 0x18, - 0x40, 0xe9, 0xee, 0x14, 0x40, 0x07, 0x97, 0xc3, 0x4c, 0xe1, 0x4b, 0x15, - 0x80, 0x3a, 0xe5, 0x42, 0x15, 0x00, 0xe9, 0x46, 0x15, 0x80, 0x2d, 0xef, - 0x48, 0x15, 0x80, 0x24, 0xb7, 0x01, 0xff, 0xe1, 0xd3, 0x18, 0x80, 0x18, - 0x42, 0x27, 0x01, 0xce, 0x18, 0x00, 0xe9, 0xcf, 0x18, 0x80, 0x09, 0xef, - 0xd1, 0x18, 0xc0, 0x00, 0xef, 0xd2, 0x18, 0x40, 0xe9, 0xd0, 0x18, 0x40, - 0xe1, 0x4e, 0x15, 0x40, 0xef, 0x49, 0x15, 0x40, 0xe9, 0x47, 0x15, 0x40, - 0xe1, 0x4c, 0x15, 0x80, 0x04, 0xf9, 0xc5, 0x18, 0x40, 0xe9, 0x45, 0x15, - 0x40, 0xe5, 0x43, 0x15, 0x00, 0x42, 0x15, 0x01, 0xe0, 0x18, 0x40, 0xe1, - 0x83, 0x15, 0x80, 0x12, 0xe9, 0x7f, 0x15, 0x80, 0x09, 0xef, 0x81, 0x15, - 0xc0, 0x00, 0xef, 0x82, 0x15, 0x40, 0xe9, 0x80, 0x15, 0x40, 0xe1, 0x84, - 0x15, 0x80, 0x04, 0xe9, 0x6f, 0x16, 0x40, 0xe9, 0x7e, 0x15, 0x40, 0xe1, - 0x38, 0x14, 0x80, 0x40, 0xe5, 0x2f, 0x14, 0x00, 0xe9, 0x31, 0x14, 0x80, - 0x33, 0xef, 0x33, 0x14, 0x80, 0x26, 0xb7, 0x01, 0xff, 0xe1, 0x44, 0x14, - 0x80, 0x1a, 0xe5, 0x3a, 0x14, 0x00, 0xe9, 0x3c, 0x14, 0x80, 0x0d, 0xef, - 0x40, 0x14, 0xc0, 0x00, 0xef, 0x42, 0x14, 0x00, 0xf9, 0xb6, 0x18, 0x40, - 0xe9, 0x3e, 0x14, 0x40, 0xe1, 0x46, 0x14, 0x40, 0xef, 0x34, 0x14, 0x00, - 0xf9, 0xb4, 0x18, 0x40, 0xe9, 0x32, 0x14, 0x40, 0xe1, 0x39, 0x14, 0x80, - 0x04, 0xf9, 0xb5, 0x18, 0x40, 0xe9, 0x30, 0x14, 0x40, 0x07, 0x13, 0xc8, - 0x0c, 0xee, 0x2d, 0x14, 0x00, 0xef, 0x06, 0x14, 0x00, 0xf9, 0xb0, 0x18, - 0x40, 0xe3, 0xd7, 0x18, 0x00, 0xeb, 0xd6, 0x18, 0x00, 0xed, 0xd8, 0x18, - 0x00, 0xee, 0xd9, 0x18, 0x80, 0x11, 0xf0, 0xd4, 0x18, 0x00, 0xf3, 0xda, - 0x18, 0x80, 0x04, 0xf4, 0xd5, 0x18, 0x40, 0xe8, 0xdb, 0x18, 0x40, 0xb7, - 0x01, 0xff, 0xe9, 0xc7, 0x18, 0x80, 0x09, 0xef, 0xcb, 0x18, 0xc0, 0x00, - 0xef, 0xcd, 0x18, 0x40, 0xe9, 0xc9, 0x18, 0x40, 0x08, 0x0d, 0xb9, 0xf3, - 0x02, 0xe1, 0xc7, 0x14, 0x80, 0xbd, 0x01, 0xe5, 0xc0, 0x14, 0x00, 0xe7, - 0x95, 0x15, 0x80, 0x8f, 0x01, 0xe8, 0xd2, 0x14, 0x00, 0xe9, 0xc2, 0x14, - 0x80, 0x81, 0x01, 0x42, 0x1d, 0x01, 0x96, 0x15, 0x80, 0x5f, 0xef, 0xc4, - 0x14, 0x80, 0x52, 0x04, 0xaa, 0xe7, 0x22, 0xb7, 0x01, 0xff, 0xe1, 0xcb, - 0x14, 0x80, 0x16, 0xe5, 0xc9, 0x14, 0x00, 0xe9, 0xc6, 0x18, 0x80, 0x09, - 0xef, 0xca, 0x18, 0xc0, 0x00, 0xef, 0xcc, 0x18, 0x40, 0xe9, 0xc8, 0x18, - 0x40, 0xe1, 0xcd, 0x14, 0x40, 0x44, 0x7e, 0xe5, 0x7b, 0x15, 0x80, 0x06, - 0x44, 0x68, 0x4b, 0x7c, 0x15, 0x40, 0xe1, 0x79, 0x15, 0x80, 0x16, 0xe5, - 0x74, 0x15, 0x00, 0xe9, 0x75, 0x15, 0x80, 0x09, 0xef, 0x77, 0x15, 0xc0, - 0x00, 0xef, 0x78, 0x15, 0x40, 0xe9, 0x76, 0x15, 0x40, 0xe1, 0x7a, 0x15, - 0x40, 0xef, 0xc5, 0x14, 0x00, 0xf9, 0xbb, 0x18, 0x40, 0xe1, 0x75, 0x16, - 0x80, 0x12, 0xe9, 0x71, 0x16, 0x80, 0x09, 0xef, 0x73, 0x16, 0xc0, 0x00, - 0xef, 0x74, 0x16, 0x40, 0xe9, 0x72, 0x16, 0x40, 0xe1, 0x76, 0x16, 0x40, - 0xe9, 0xc3, 0x14, 0x40, 0xe1, 0x93, 0x15, 0x80, 0x12, 0xe9, 0x8f, 0x15, - 0x80, 0x09, 0xef, 0x91, 0x15, 0xc0, 0x00, 0xef, 0x92, 0x15, 0x40, 0xe9, - 0x90, 0x15, 0x40, 0xe1, 0x94, 0x15, 0x80, 0x04, 0xe9, 0x70, 0x16, 0x40, - 0xe9, 0x8e, 0x15, 0x40, 0xe1, 0xc8, 0x14, 0x80, 0xa6, 0x01, 0x06, 0x53, - 0xd5, 0x45, 0x07, 0x65, 0xcc, 0x04, 0xf9, 0xbc, 0x18, 0x40, 0xa8, 0x20, - 0x03, 0x93, 0x57, 0x01, 0xff, 0xe1, 0xba, 0x1a, 0x81, 0x12, 0xe9, 0xb6, - 0x1a, 0x81, 0x09, 0xef, 0xb8, 0x1a, 0xc1, 0x00, 0xef, 0xb9, 0x1a, 0x41, - 0xe9, 0xb7, 0x1a, 0x41, 0xe1, 0xbb, 0x1a, 0x41, 0xe1, 0xb4, 0x1a, 0x81, - 0x12, 0xe9, 0xb0, 0x1a, 0x81, 0x09, 0xef, 0xb2, 0x1a, 0xc1, 0x00, 0xef, - 0xb3, 0x1a, 0x41, 0xe9, 0xb1, 0x1a, 0x41, 0xe1, 0xb5, 0x1a, 0x41, 0x44, - 0x76, 0xe4, 0xa0, 0x14, 0x00, 0x44, 0xe2, 0xe5, 0x82, 0x14, 0x00, 0x44, - 0x3a, 0xe6, 0xba, 0x14, 0x00, 0x44, 0x9a, 0xe6, 0xcf, 0x14, 0x00, 0xb3, - 0x1a, 0x44, 0x37, 0xe1, 0x65, 0x14, 0x00, 0xb7, 0x06, 0x44, 0x1a, 0xe8, - 0x3d, 0x15, 0x40, 0x42, 0xda, 0x10, 0x1b, 0x14, 0x00, 0x42, 0x99, 0x04, - 0x16, 0x14, 0x40, 0x42, 0x9b, 0x1d, 0x0b, 0x15, 0x00, 0x43, 0x76, 0xe4, - 0x0f, 0x15, 0x00, 0x42, 0x1e, 0x0a, 0x0a, 0x15, 0x80, 0x12, 0x43, 0x51, - 0x02, 0x0c, 0x15, 0x00, 0x43, 0xed, 0x01, 0x0d, 0x15, 0x00, 0x43, 0x56, - 0x17, 0x04, 0x15, 0x40, 0xe1, 0x0e, 0x15, 0x40, 0xe9, 0xc1, 0x14, 0x40, - 0xe5, 0x5f, 0x15, 0x00, 0xe9, 0x61, 0x15, 0xc0, 0x00, 0xe9, 0x63, 0x15, - 0x40, 0xe1, 0xaa, 0x14, 0x80, 0x51, 0xe5, 0xa3, 0x14, 0x80, 0x3f, 0xe8, - 0xbd, 0x14, 0x00, 0xe9, 0xa5, 0x14, 0x80, 0x32, 0xef, 0xa7, 0x14, 0x80, - 0x22, 0xb7, 0x01, 0xff, 0xe1, 0xb6, 0x14, 0x80, 0x16, 0xe5, 0xac, 0x14, - 0x00, 0xe9, 0xae, 0x14, 0x80, 0x09, 0xef, 0xb2, 0x14, 0xc0, 0x00, 0xef, - 0xb4, 0x14, 0x40, 0xe9, 0xb0, 0x14, 0x40, 0xe1, 0xb8, 0x14, 0x40, 0xef, - 0xa8, 0x14, 0xc0, 0x00, 0x4a, 0x09, 0xa8, 0x09, 0x15, 0x40, 0xe9, 0xa6, - 0x14, 0x40, 0x05, 0x65, 0x2f, 0x01, 0xff, 0xec, 0xec, 0x14, 0x00, 0xf2, - 0x52, 0x15, 0x40, 0xe1, 0xab, 0x14, 0x80, 0x04, 0xf9, 0xba, 0x18, 0x40, - 0xe9, 0xa4, 0x14, 0x40, 0xe1, 0xda, 0x14, 0x80, 0x58, 0xe5, 0xd3, 0x14, - 0x00, 0xe8, 0xa6, 0x15, 0x80, 0x34, 0xe9, 0xd5, 0x14, 0x80, 0x2b, 0xef, - 0xd7, 0x14, 0x80, 0x22, 0xb7, 0x01, 0xff, 0xe1, 0xe6, 0x14, 0x80, 0x16, - 0xe5, 0xdc, 0x14, 0x00, 0xe9, 0xde, 0x14, 0x80, 0x09, 0xef, 0xe2, 0x14, - 0xc0, 0x00, 0xef, 0xe4, 0x14, 0x40, 0xe9, 0xe0, 0x14, 0x40, 0xe1, 0xe8, - 0x14, 0x40, 0xef, 0xd8, 0x14, 0x40, 0xe9, 0xd6, 0x14, 0x40, 0xe1, 0xa4, - 0x15, 0x80, 0x12, 0xe9, 0xa0, 0x15, 0x80, 0x09, 0xef, 0xa2, 0x15, 0xc0, - 0x00, 0xef, 0xa3, 0x15, 0x40, 0xe9, 0xa1, 0x15, 0x40, 0xe1, 0xa5, 0x15, - 0x40, 0xe1, 0xdb, 0x14, 0x80, 0x04, 0xf9, 0xbd, 0x18, 0x40, 0xe9, 0xd4, - 0x14, 0x40, 0xe1, 0x72, 0x14, 0x80, 0x3e, 0xe5, 0x6b, 0x14, 0x00, 0xe9, - 0x6d, 0x14, 0x80, 0x31, 0xef, 0x6f, 0x14, 0x80, 0x28, 0xf7, 0x84, 0x14, - 0xc0, 0x00, 0xe1, 0x7e, 0x14, 0x80, 0x16, 0xe5, 0x74, 0x14, 0x00, 0xe9, - 0x76, 0x14, 0x80, 0x09, 0xef, 0x7a, 0x14, 0xc0, 0x00, 0xef, 0x7c, 0x14, - 0x40, 0xe9, 0x78, 0x14, 0x40, 0xe1, 0x80, 0x14, 0x00, 0xf9, 0xb9, 0x18, - 0x40, 0xef, 0x70, 0x14, 0x40, 0xe9, 0x6e, 0x14, 0x40, 0xe1, 0x73, 0x14, - 0x80, 0x04, 0xf9, 0xb8, 0x18, 0x40, 0xe9, 0x6c, 0x14, 0x40, 0xe9, 0x04, - 0x14, 0x00, 0xee, 0x2c, 0x14, 0x40, 0xeb, 0x7d, 0x15, 0x00, 0x45, 0x5a, - 0x5d, 0x00, 0x14, 0x40, 0xe1, 0x59, 0x15, 0x80, 0x8a, 0x01, 0xe5, 0x53, - 0x15, 0x00, 0xe9, 0x55, 0x15, 0x80, 0x15, 0xef, 0x57, 0x15, 0x80, 0x0c, - 0x48, 0xa1, 0x14, 0x6e, 0x16, 0x00, 0x43, 0x56, 0x17, 0x5b, 0x15, 0x40, - 0xef, 0x58, 0x15, 0x40, 0xe9, 0x56, 0x15, 0x00, 0x04, 0x6b, 0x05, 0x01, - 0xff, 0x45, 0xce, 0x34, 0x1f, 0x14, 0x00, 0x50, 0x29, 0x5b, 0x21, 0x14, - 0x00, 0x02, 0x3b, 0x01, 0x3d, 0x45, 0x79, 0x20, 0x20, 0x14, 0x00, 0x4a, - 0xb2, 0x40, 0x27, 0x14, 0x00, 0x44, 0x71, 0x25, 0x29, 0x14, 0x00, 0xb2, - 0x14, 0xb3, 0x06, 0x4d, 0xd0, 0x81, 0x22, 0x14, 0x40, 0x56, 0x5c, 0x30, - 0x28, 0x14, 0x00, 0x49, 0x81, 0xb2, 0xde, 0x18, 0x40, 0x49, 0xbd, 0xac, - 0xdf, 0x18, 0x00, 0xa9, 0x01, 0xff, 0x4d, 0xc0, 0x6b, 0x23, 0x14, 0x00, - 0x42, 0x1d, 0x01, 0x24, 0x14, 0x40, 0x05, 0x3d, 0x01, 0x06, 0x47, 0xc7, - 0x34, 0x2a, 0x14, 0x40, 0x45, 0xce, 0x34, 0x25, 0x14, 0x00, 0x56, 0x32, - 0x33, 0x26, 0x14, 0x40, 0xe1, 0x5a, 0x15, 0xc0, 0x00, 0xe9, 0x54, 0x15, - 0x40, 0x48, 0xfd, 0xb9, 0xdc, 0x18, 0x00, 0xee, 0x2b, 0x14, 0x40, 0xe1, - 0x90, 0x14, 0x80, 0x3e, 0xe5, 0x89, 0x14, 0x00, 0x47, 0x64, 0xc7, 0x6d, - 0x16, 0x00, 0xe9, 0x8b, 0x14, 0x80, 0x2b, 0xef, 0x8d, 0x14, 0x80, 0x22, - 0xb7, 0x01, 0xff, 0xe1, 0x9c, 0x14, 0x80, 0x16, 0xe5, 0x92, 0x14, 0x00, - 0xe9, 0x94, 0x14, 0x80, 0x09, 0xef, 0x98, 0x14, 0xc0, 0x00, 0xef, 0x9a, - 0x14, 0x40, 0xe9, 0x96, 0x14, 0x40, 0xe1, 0x9e, 0x14, 0x40, 0xef, 0x8e, - 0x14, 0x40, 0xe9, 0x8c, 0x14, 0x40, 0xe1, 0x91, 0x14, 0x80, 0xd6, 0x06, - 0x06, 0xc9, 0x63, 0x01, 0xff, 0x02, 0x98, 0x14, 0xb3, 0x06, 0xa4, 0xe0, - 0x05, 0x42, 0x27, 0x01, 0x08, 0x14, 0x00, 0xa7, 0x93, 0x05, 0xe8, 0x4b, - 0x14, 0x80, 0xe7, 0x04, 0xe9, 0x09, 0x14, 0x80, 0xdb, 0x04, 0xaa, 0x9e, - 0x04, 0xab, 0xe2, 0x03, 0xac, 0xab, 0x03, 0xad, 0x8f, 0x03, 0xae, 0xef, - 0x02, 0xf0, 0xee, 0x15, 0x80, 0xd0, 0x02, 0xb2, 0xb4, 0x02, 0xb3, 0xfa, - 0x01, 0xb4, 0x54, 0xb7, 0x39, 0xb9, 0x1e, 0xfa, 0x46, 0x16, 0xc0, 0x00, - 0xe1, 0x45, 0x16, 0x00, 0xe5, 0x42, 0x16, 0x80, 0x0c, 0xe9, 0x44, 0x16, - 0x00, 0xef, 0x41, 0x16, 0x00, 0xf5, 0x40, 0x16, 0x40, 0xe5, 0x43, 0x16, - 0x40, 0xe1, 0x13, 0x16, 0x00, 0xe5, 0x10, 0x16, 0x80, 0x0c, 0xe9, 0x12, - 0x16, 0x00, 0xef, 0x0f, 0x16, 0x00, 0xf5, 0x0e, 0x16, 0x40, 0xe5, 0x11, - 0x16, 0x40, 0xe1, 0xd5, 0x15, 0x00, 0xe5, 0xd2, 0x15, 0x80, 0x0c, 0xe9, - 0xd4, 0x15, 0x00, 0xef, 0xd1, 0x15, 0x00, 0xf5, 0xd0, 0x15, 0x40, 0xe5, - 0xd3, 0x15, 0x40, 0xa8, 0x88, 0x01, 0xac, 0x52, 0xb3, 0x37, 0xb4, 0x01, - 0xff, 0xe1, 0xe7, 0x15, 0x00, 0xe5, 0xe4, 0x15, 0x80, 0x27, 0xe9, 0xe6, - 0x15, 0x00, 0xef, 0xe3, 0x15, 0x00, 0xb3, 0x04, 0xf5, 0xe2, 0x15, 0x40, - 0xe1, 0x6c, 0x16, 0x00, 0xe5, 0x69, 0x16, 0x80, 0x0c, 0xe9, 0x6b, 0x16, - 0x00, 0xef, 0x68, 0x16, 0x00, 0xf5, 0x67, 0x16, 0x40, 0xe5, 0x6a, 0x16, - 0x40, 0xe5, 0xe5, 0x15, 0x40, 0xe1, 0x60, 0x16, 0x00, 0xe5, 0x5d, 0x16, - 0x80, 0x0c, 0xe9, 0x5f, 0x16, 0x00, 0xef, 0x5c, 0x16, 0x00, 0xf5, 0x5b, - 0x16, 0x40, 0xe5, 0x5e, 0x16, 0x40, 0xe1, 0x3f, 0x16, 0x00, 0xe5, 0x3c, - 0x16, 0x80, 0x27, 0xa8, 0x0c, 0xe9, 0x3e, 0x16, 0x00, 0xef, 0x3b, 0x16, - 0x00, 0xf5, 0x3a, 0x16, 0x40, 0xe1, 0x39, 0x16, 0x00, 0xe5, 0x36, 0x16, - 0x80, 0x0c, 0xe9, 0x38, 0x16, 0x00, 0xef, 0x35, 0x16, 0x00, 0xf5, 0x34, - 0x16, 0x40, 0xe5, 0x37, 0x16, 0x40, 0xe5, 0x3d, 0x16, 0x40, 0xe1, 0xe1, - 0x15, 0x00, 0xe5, 0xde, 0x15, 0x80, 0x0c, 0xe9, 0xe0, 0x15, 0x00, 0xef, - 0xdd, 0x15, 0x00, 0xf5, 0xdc, 0x15, 0x40, 0xe5, 0xdf, 0x15, 0x40, 0xe1, - 0x53, 0x16, 0x00, 0xe5, 0x50, 0x16, 0x80, 0x2a, 0xe8, 0x5a, 0x16, 0x80, - 0x0c, 0xe9, 0x52, 0x16, 0x00, 0xef, 0x4f, 0x16, 0x00, 0xf5, 0x4e, 0x16, - 0x40, 0xe1, 0x59, 0x16, 0x00, 0xe5, 0x56, 0x16, 0x80, 0x0c, 0xe9, 0x58, - 0x16, 0x00, 0xef, 0x55, 0x16, 0x00, 0xf5, 0x54, 0x16, 0x40, 0xe5, 0x57, - 0x16, 0x40, 0xe5, 0x51, 0x16, 0x40, 0xe1, 0xcf, 0x15, 0x00, 0xe5, 0xcc, - 0x15, 0x80, 0x0c, 0xe9, 0xce, 0x15, 0x00, 0xef, 0xcb, 0x15, 0x00, 0xf5, - 0xca, 0x15, 0x40, 0xe5, 0xcd, 0x15, 0x40, 0xe1, 0xed, 0x15, 0x00, 0xe5, - 0xea, 0x15, 0x80, 0x0c, 0xe9, 0xec, 0x15, 0x00, 0xef, 0xe9, 0x15, 0x00, - 0xf5, 0xe8, 0x15, 0x40, 0xe5, 0xeb, 0x15, 0x40, 0xe1, 0x07, 0x16, 0x00, - 0xe5, 0x04, 0x16, 0x80, 0x10, 0xe7, 0xd1, 0x14, 0x00, 0xe9, 0x06, 0x16, - 0x00, 0xef, 0x03, 0x16, 0x00, 0xf5, 0x02, 0x16, 0x40, 0xe5, 0x05, 0x16, - 0x40, 0xe1, 0x0d, 0x16, 0x00, 0xe5, 0x0a, 0x16, 0x80, 0x0c, 0xe9, 0x0c, - 0x16, 0x00, 0xef, 0x09, 0x16, 0x00, 0xf5, 0x08, 0x16, 0x40, 0xe5, 0x0b, - 0x16, 0x40, 0xe1, 0x27, 0x16, 0x00, 0xe5, 0x24, 0x16, 0x80, 0x27, 0xa8, - 0x0c, 0xe9, 0x26, 0x16, 0x00, 0xef, 0x23, 0x16, 0x00, 0xf5, 0x22, 0x16, - 0x40, 0xe1, 0x33, 0x16, 0x00, 0xe5, 0x30, 0x16, 0x80, 0x0c, 0xe9, 0x32, - 0x16, 0x00, 0xef, 0x2f, 0x16, 0x00, 0xf5, 0x2e, 0x16, 0x40, 0xe5, 0x31, - 0x16, 0x40, 0xe5, 0x25, 0x16, 0x40, 0xa8, 0x1e, 0xeb, 0x01, 0x16, 0xc0, - 0x00, 0xe1, 0x00, 0x16, 0x00, 0xe5, 0xfd, 0x15, 0x80, 0x0c, 0xe9, 0xff, - 0x15, 0x00, 0xef, 0xfc, 0x15, 0x00, 0xf5, 0xfb, 0x15, 0x40, 0xe5, 0xfe, - 0x15, 0x40, 0xe1, 0xfa, 0x15, 0x00, 0xe5, 0xf7, 0x15, 0x80, 0x0c, 0xe9, - 0xf9, 0x15, 0x00, 0xef, 0xf6, 0x15, 0x00, 0xf5, 0xf5, 0x15, 0x40, 0xe5, - 0xf8, 0x15, 0x40, 0xe1, 0x1b, 0x16, 0x00, 0xe5, 0x17, 0x16, 0x80, 0x2d, - 0xe9, 0x19, 0x16, 0x00, 0xaa, 0x0e, 0xef, 0x16, 0x16, 0x00, 0xf5, 0x14, - 0x16, 0x00, 0x42, 0xa9, 0x01, 0xf2, 0x18, 0x40, 0xe1, 0x21, 0x16, 0x00, - 0xe5, 0x1e, 0x16, 0x80, 0x0c, 0xe9, 0x20, 0x16, 0x00, 0xef, 0x1d, 0x16, - 0x00, 0xf5, 0x1c, 0x16, 0x40, 0xe5, 0x1f, 0x16, 0x40, 0xe5, 0x18, 0x16, - 0x40, 0x48, 0xed, 0xbe, 0x47, 0x16, 0x40, 0x42, 0x27, 0x01, 0x36, 0x14, - 0x00, 0xe9, 0x37, 0x14, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0xdb, 0x15, 0x00, - 0xe5, 0xd8, 0x15, 0x80, 0x0c, 0xe9, 0xda, 0x15, 0x00, 0xef, 0xd7, 0x15, - 0x00, 0xf5, 0xd6, 0x15, 0x40, 0xe5, 0xd9, 0x15, 0x40, 0xe1, 0xf4, 0x15, - 0x80, 0x3b, 0xe5, 0xf1, 0x15, 0x80, 0x32, 0xa8, 0x17, 0xe9, 0xf3, 0x15, - 0x00, 0xef, 0xf0, 0x15, 0x00, 0xf5, 0xef, 0x15, 0x00, 0xb7, 0x01, 0xff, - 0xe1, 0xf0, 0x18, 0x00, 0xf5, 0xed, 0x18, 0x40, 0xe1, 0xc9, 0x15, 0x00, - 0xe5, 0xc6, 0x15, 0x80, 0x0c, 0xe9, 0xc8, 0x15, 0x00, 0xef, 0xc5, 0x15, - 0x00, 0xf5, 0xc4, 0x15, 0x40, 0xe5, 0xc7, 0x15, 0x40, 0xe5, 0xf2, 0x15, - 0x40, 0xe1, 0xef, 0x18, 0x40, 0xa5, 0x3b, 0xe9, 0x54, 0x14, 0x00, 0xac, - 0x1c, 0xba, 0x01, 0xff, 0xe1, 0x4d, 0x16, 0x00, 0xe5, 0x4a, 0x16, 0x80, - 0x0c, 0xe9, 0x4c, 0x16, 0x00, 0xef, 0x49, 0x16, 0x00, 0xf5, 0x48, 0x16, - 0x40, 0xe5, 0x4b, 0x16, 0x40, 0xe1, 0x2d, 0x16, 0x00, 0xe5, 0x2a, 0x16, - 0x80, 0x0c, 0xe9, 0x2c, 0x16, 0x00, 0xef, 0x29, 0x16, 0x00, 0xf5, 0x28, - 0x16, 0x40, 0xe5, 0x2b, 0x16, 0x40, 0xe5, 0x53, 0x14, 0x00, 0xae, 0x01, - 0xff, 0x45, 0xfd, 0xda, 0xee, 0x18, 0x00, 0x45, 0x53, 0x04, 0xf5, 0x18, - 0x40, 0xe1, 0x66, 0x16, 0x00, 0xe5, 0x63, 0x16, 0x80, 0x0c, 0xe9, 0x65, - 0x16, 0x00, 0xef, 0x62, 0x16, 0x00, 0xf5, 0x61, 0x16, 0x40, 0xe5, 0x64, - 0x16, 0x40, 0xe9, 0x8a, 0x14, 0x40, 0x0b, 0x6d, 0x93, 0x58, 0x4b, 0x1a, - 0x95, 0x3f, 0x15, 0x00, 0x09, 0xdf, 0xb1, 0x01, 0xff, 0xe1, 0xb3, 0x15, - 0x00, 0xe5, 0xb0, 0x15, 0x00, 0xe9, 0xb1, 0x15, 0x00, 0xab, 0x2f, 0xae, - 0x1d, 0xef, 0xb2, 0x15, 0x00, 0xf3, 0x08, 0x15, 0x00, 0xf7, 0x7f, 0x16, - 0xc0, 0x00, 0xe1, 0xb7, 0x15, 0x00, 0xe5, 0xb4, 0x15, 0x00, 0xe9, 0xb5, - 0x15, 0x00, 0xef, 0xb6, 0x15, 0x40, 0xe1, 0xbb, 0x15, 0x00, 0xe5, 0xb8, - 0x15, 0x00, 0xe9, 0xb9, 0x15, 0x00, 0xef, 0xba, 0x15, 0x40, 0xe1, 0xbf, - 0x15, 0x00, 0xe5, 0xbc, 0x15, 0x00, 0xe9, 0xbd, 0x15, 0x00, 0xef, 0xbe, - 0x15, 0x40, 0xec, 0xf3, 0x18, 0x00, 0xf2, 0xf4, 0x18, 0x40, 0xe1, 0x0b, - 0x14, 0x80, 0x1f, 0xe9, 0x1c, 0x14, 0x80, 0x14, 0xee, 0x2e, 0x14, 0x00, - 0x0a, 0x03, 0xa9, 0x04, 0xf9, 0xb1, 0x18, 0x40, 0xed, 0xbe, 0x14, 0x00, - 0xf3, 0x06, 0x15, 0x40, 0x47, 0x0d, 0xcd, 0xaf, 0x15, 0x40, 0xe9, 0x02, - 0x14, 0x00, 0xf9, 0xb2, 0x18, 0x40, 0x43, 0xdc, 0x01, 0xf7, 0xf4, 0x81, - 0x06, 0x44, 0x5a, 0x2c, 0xd5, 0xf3, 0x41, 0x4b, 0x1e, 0x90, 0xf8, 0xf4, - 0x41, 0x45, 0x29, 0x79, 0xc5, 0xf4, 0x01, 0x49, 0xd6, 0xb1, 0x19, 0xf9, - 0x41, 0x45, 0x4a, 0xd9, 0x06, 0x21, 0x00, 0x45, 0xb0, 0xd0, 0x24, 0x26, - 0x40, 0xa1, 0x83, 0x4a, 0xa5, 0xdf, 0x43, 0x09, 0x02, 0xb0, 0xf3, 0x3e, - 0xa9, 0x95, 0x3e, 0xac, 0x8c, 0x31, 0xaf, 0xdf, 0x22, 0xb2, 0xe9, 0x12, - 0xb5, 0xc0, 0x0f, 0xb9, 0x01, 0xff, 0x4d, 0x9c, 0x81, 0xff, 0xfe, 0x00, - 0x17, 0x1f, 0x2e, 0x01, 0xff, 0xa1, 0xba, 0x0d, 0x02, 0x98, 0x14, 0x80, - 0x0d, 0xa4, 0xd9, 0x0b, 0xa5, 0xa0, 0x0b, 0xa6, 0xf4, 0x09, 0xa7, 0x91, - 0x09, 0xa9, 0xcc, 0x08, 0xab, 0xf4, 0x06, 0xac, 0xbe, 0x06, 0xad, 0xc9, - 0x05, 0x44, 0x4a, 0xe6, 0x40, 0xd0, 0x01, 0xaf, 0xfb, 0x04, 0xb0, 0xd4, - 0x03, 0xb2, 0xc5, 0x03, 0xb3, 0xa3, 0x02, 0xb4, 0x8b, 0x01, 0x02, 0xb4, - 0x09, 0x63, 0x4c, 0x1c, 0x8f, 0x6a, 0xd0, 0x01, 0xb9, 0x01, 0xff, 0x02, - 0x0f, 0x18, 0x1e, 0xb0, 0x01, 0xff, 0xaf, 0x06, 0x44, 0x4e, 0x81, 0x50, - 0xd0, 0x41, 0x46, 0xfb, 0xd2, 0x0a, 0xd0, 0x81, 0x06, 0x44, 0x42, 0xe7, - 0x53, 0xd0, 0x41, 0x46, 0xc1, 0xcd, 0x0b, 0xd0, 0x41, 0x02, 0x92, 0x00, - 0x28, 0x04, 0x78, 0x1f, 0x01, 0xff, 0x51, 0x9a, 0x52, 0xd4, 0xd0, 0x01, - 0x55, 0xf4, 0x35, 0xd6, 0xd0, 0x01, 0x5c, 0xc1, 0x16, 0xd5, 0xd0, 0x01, - 0x03, 0x19, 0x01, 0x01, 0xff, 0x55, 0x2f, 0x37, 0xd7, 0xd0, 0x01, 0x48, - 0x80, 0x30, 0xcd, 0xd0, 0x41, 0x43, 0x0a, 0x6a, 0x7d, 0xd0, 0x01, 0x44, - 0xa8, 0x97, 0x7c, 0xd0, 0x41, 0x04, 0x22, 0xe7, 0x06, 0x43, 0x58, 0x4e, - 0x19, 0xd0, 0x41, 0x80, 0x06, 0x4a, 0xcd, 0xa2, 0x21, 0xd0, 0x41, 0x45, - 0xc2, 0xcd, 0x06, 0xd0, 0x01, 0x4b, 0xf5, 0x77, 0x05, 0xd0, 0x01, 0x43, - 0xbd, 0x4e, 0x58, 0xd0, 0x41, 0xa5, 0x80, 0x01, 0xa8, 0x52, 0x46, 0x7d, - 0xd2, 0x27, 0xd0, 0x01, 0xb2, 0x01, 0xff, 0xa9, 0x37, 0x05, 0xfa, 0xab, - 0x01, 0xff, 0x47, 0xd0, 0xc8, 0x6d, 0xd0, 0x01, 0x02, 0x92, 0x00, 0x14, - 0xb0, 0x06, 0x47, 0xd9, 0xcb, 0x70, 0xd0, 0x41, 0x4a, 0xf9, 0x98, 0x6e, - 0xd0, 0x01, 0x48, 0xed, 0xc0, 0x6b, 0xd0, 0x41, 0xa1, 0x06, 0x43, 0xbd, - 0x4e, 0x63, 0xd0, 0x41, 0x43, 0xb7, 0x1a, 0x43, 0xd0, 0x01, 0x47, 0xd0, - 0xa2, 0x36, 0xd0, 0x41, 0xe1, 0x30, 0xd0, 0x01, 0x46, 0xc3, 0xd1, 0x96, - 0xd0, 0x01, 0x43, 0xc0, 0x03, 0x87, 0xd0, 0x41, 0xa5, 0x06, 0x43, 0xec, - 0x04, 0x14, 0xd0, 0x41, 0x42, 0x6c, 0x00, 0x2d, 0xd0, 0x81, 0x06, 0x4d, - 0xcc, 0x80, 0x79, 0xd0, 0x41, 0x47, 0xfd, 0xc2, 0x78, 0xd0, 0x01, 0x08, - 0x8d, 0xc1, 0x01, 0xff, 0x42, 0xe1, 0x02, 0x76, 0xd0, 0x01, 0x42, 0x0d, - 0x2c, 0x77, 0xd0, 0x41, 0x44, 0x1e, 0x55, 0x0f, 0xd0, 0x01, 0x45, 0xcf, - 0x16, 0x31, 0xd0, 0x01, 0x46, 0x13, 0xd6, 0x88, 0xd0, 0x41, 0x47, 0x26, - 0xc5, 0x1d, 0xd0, 0x01, 0x45, 0x2a, 0xdb, 0x29, 0xd0, 0x81, 0x8b, 0x01, - 0x08, 0x25, 0xbd, 0x49, 0xb4, 0x2e, 0xb9, 0x01, 0xff, 0xae, 0x0d, 0x43, - 0x90, 0x05, 0x66, 0xd0, 0xc1, 0x00, 0x44, 0x4b, 0xd3, 0x08, 0xd0, 0x41, - 0x05, 0x77, 0xd9, 0x06, 0x44, 0xc7, 0xc9, 0x13, 0xd0, 0x41, 0x48, 0xcf, - 0xa2, 0x2a, 0xd0, 0x01, 0x4c, 0x60, 0x8a, 0x2b, 0xd0, 0x01, 0x43, 0xbd, - 0x4e, 0x65, 0xd0, 0x41, 0x45, 0xd6, 0xd9, 0x7e, 0xd0, 0x81, 0x0c, 0x44, - 0x57, 0x1d, 0xe8, 0xd0, 0x01, 0x4a, 0x19, 0xa7, 0x44, 0xd0, 0x41, 0x49, - 0x3a, 0xab, 0x1f, 0xd0, 0x41, 0x46, 0xa1, 0xcf, 0xe2, 0xd0, 0x81, 0x1f, - 0x47, 0x18, 0xcc, 0xde, 0xd0, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x4c, - 0xc6, 0xdf, 0xd0, 0x01, 0xb4, 0x01, 0xff, 0x49, 0x72, 0xaf, 0xe1, 0xd0, - 0x01, 0x47, 0x15, 0xcb, 0xe0, 0xd0, 0x41, 0x80, 0x01, 0xff, 0x47, 0x4c, - 0xc6, 0xe3, 0xd0, 0x01, 0xb4, 0x01, 0xff, 0x49, 0x72, 0xaf, 0xe5, 0xd0, - 0x01, 0x47, 0x15, 0xcb, 0xe4, 0xd0, 0x41, 0x44, 0x98, 0x81, 0x69, 0xd0, - 0x41, 0x46, 0x83, 0xcf, 0x3c, 0xd0, 0x01, 0x44, 0xc7, 0xc9, 0x25, 0xd0, - 0x41, 0x02, 0x17, 0x00, 0x70, 0xa5, 0x43, 0x06, 0x4d, 0xd2, 0x33, 0x02, - 0xdb, 0x02, 0x01, 0xff, 0x05, 0xef, 0xc0, 0x0d, 0xac, 0x01, 0xff, 0xe9, - 0x00, 0xd0, 0x01, 0x42, 0x10, 0x00, 0x17, 0xd0, 0x41, 0x47, 0xd0, 0xc8, - 0x6c, 0xd0, 0x01, 0xee, 0x39, 0xd0, 0x81, 0x0c, 0x4b, 0xf8, 0x98, 0x6f, - 0xd0, 0x01, 0x47, 0xd9, 0xcb, 0x71, 0xd0, 0x41, 0x44, 0x98, 0x81, 0x5a, - 0xd0, 0x41, 0x48, 0xcf, 0xa2, 0x26, 0xd0, 0x01, 0x43, 0xbd, 0x4e, 0x59, - 0xd0, 0x41, 0x46, 0x25, 0xd3, 0x38, 0xd0, 0x81, 0x1e, 0x49, 0x05, 0x99, - 0x02, 0xd0, 0x01, 0x03, 0x13, 0x2a, 0x01, 0xff, 0x42, 0x6c, 0x00, 0x41, - 0xd0, 0x01, 0xb4, 0x01, 0xff, 0xe9, 0x49, 0xd0, 0x01, 0x49, 0xa1, 0xb3, - 0x4b, 0xd0, 0x41, 0x44, 0x98, 0x81, 0x4d, 0xd0, 0x41, 0x02, 0x6d, 0x00, - 0x06, 0x45, 0x83, 0xdc, 0x1e, 0xd0, 0x41, 0x07, 0x85, 0xc4, 0x16, 0x46, - 0x49, 0xd3, 0x09, 0xd0, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x48, 0xcf, 0xa2, - 0x3e, 0xd0, 0x01, 0x43, 0xbd, 0x4e, 0x5e, 0xd0, 0x41, 0x48, 0xcf, 0xa2, - 0x3d, 0xd0, 0x01, 0x43, 0xbd, 0x4e, 0x5f, 0xd0, 0x41, 0x06, 0x3d, 0xd3, - 0x35, 0x45, 0xaa, 0xdd, 0x5b, 0xd0, 0x01, 0x04, 0x02, 0xe8, 0x11, 0x09, - 0x06, 0xb8, 0x01, 0xff, 0x48, 0xcf, 0xa2, 0x2c, 0xd0, 0x01, 0x43, 0xbd, - 0x4e, 0x75, 0xd0, 0x41, 0x80, 0x06, 0x4a, 0xcd, 0xa2, 0x20, 0xd0, 0x41, - 0x45, 0xc2, 0xcd, 0x04, 0xd0, 0x01, 0x4b, 0xf5, 0x77, 0x03, 0xd0, 0x01, - 0x43, 0xbd, 0x4e, 0x48, 0xd0, 0x41, 0x48, 0xcf, 0xa2, 0x15, 0xd0, 0x01, - 0x43, 0xbd, 0x4e, 0x47, 0xd0, 0x41, 0x08, 0xed, 0xb9, 0x06, 0x4a, 0x1d, - 0xa3, 0x57, 0xd0, 0x41, 0x05, 0x86, 0xd9, 0x58, 0x4e, 0xcc, 0x6f, 0xa4, - 0xd0, 0x01, 0x4d, 0xe7, 0x7d, 0xaa, 0xd0, 0x01, 0xb0, 0x29, 0xb4, 0x06, - 0x4b, 0x52, 0x9c, 0xb1, 0xd0, 0x41, 0x08, 0xfb, 0x75, 0x11, 0x02, 0x0d, - 0x00, 0x01, 0xff, 0x46, 0x02, 0x9b, 0xa7, 0xd0, 0x01, 0x49, 0xff, 0x75, - 0xa6, 0xd0, 0x41, 0x45, 0xd5, 0x6f, 0xa8, 0xd0, 0x01, 0x4d, 0xe7, 0x7d, - 0xa9, 0xd0, 0x41, 0x07, 0x6e, 0xc8, 0x11, 0x04, 0x35, 0x8c, 0x01, 0xff, - 0x47, 0xd3, 0x6f, 0xa2, 0xd0, 0x01, 0x4b, 0x52, 0x9c, 0xb2, 0xd0, 0x41, - 0x45, 0xd5, 0x6f, 0xab, 0xd0, 0x01, 0x4e, 0xfa, 0x75, 0xb3, 0xd0, 0x41, - 0x4e, 0xcc, 0x6f, 0xa5, 0xd0, 0x01, 0x4c, 0x34, 0x8c, 0xa3, 0xd0, 0x41, - 0xa5, 0x06, 0x46, 0xd1, 0xc8, 0x5d, 0xd0, 0x41, 0x05, 0xa6, 0xdc, 0x06, - 0x43, 0x1f, 0xbd, 0x2e, 0xd0, 0x41, 0x4b, 0x4c, 0x93, 0x8b, 0xd0, 0x01, - 0x4c, 0x18, 0x87, 0x8a, 0xd0, 0x01, 0x4f, 0xb3, 0x67, 0x8e, 0xd0, 0x01, - 0xb4, 0x01, 0xff, 0x4f, 0x4b, 0x66, 0x8d, 0xd0, 0x01, 0x4c, 0xf4, 0x8c, - 0x8c, 0xd0, 0x41, 0x02, 0x8a, 0x00, 0xba, 0x01, 0x06, 0xfd, 0xd0, 0x70, - 0x45, 0x23, 0x8f, 0x24, 0xd0, 0x81, 0x5a, 0xaf, 0x3f, 0xb2, 0x06, 0x46, - 0x61, 0xc8, 0x61, 0xd0, 0x41, 0x04, 0x22, 0xe4, 0x06, 0x46, 0xe5, 0xd0, - 0x0c, 0xd0, 0x41, 0xa1, 0x0f, 0xaf, 0x01, 0xff, 0x48, 0xa2, 0xb3, 0x4c, - 0xd0, 0x01, 0x48, 0xd5, 0xc2, 0x54, 0xd0, 0x41, 0x80, 0x06, 0x42, 0x12, - 0x00, 0x32, 0xd0, 0x41, 0xa1, 0x06, 0x43, 0xbd, 0x4e, 0x83, 0xd0, 0x41, - 0x43, 0xb7, 0x1a, 0x82, 0xd0, 0x01, 0x47, 0xd0, 0xa2, 0x81, 0xd0, 0x41, - 0x46, 0x03, 0xd4, 0x3a, 0xd0, 0x81, 0x0c, 0x45, 0xc4, 0x5b, 0x89, 0xd0, - 0x01, 0x46, 0xa4, 0xb3, 0x4a, 0xd0, 0x41, 0x45, 0x8b, 0xc4, 0x42, 0xd0, - 0x41, 0x80, 0x01, 0xff, 0x43, 0x0a, 0x6a, 0x7f, 0xd0, 0x01, 0x44, 0xa8, - 0x97, 0xf4, 0xd0, 0x41, 0x80, 0x27, 0x42, 0x12, 0x00, 0x10, 0xd0, 0xc1, - 0x00, 0x80, 0x01, 0xff, 0x48, 0xcf, 0xa2, 0x1c, 0xd0, 0x01, 0x04, 0x5e, - 0xe6, 0x01, 0xff, 0x43, 0x0a, 0x6a, 0x4e, 0xd0, 0x01, 0x44, 0xa8, 0x97, - 0xf2, 0xd0, 0x01, 0x44, 0x12, 0xe6, 0xf0, 0xd0, 0x41, 0x48, 0xcf, 0xa2, - 0x1b, 0xd0, 0x01, 0x04, 0x5e, 0xe6, 0x01, 0xff, 0x43, 0x0a, 0x6a, 0x4f, - 0xd0, 0x01, 0x44, 0xa8, 0x97, 0xf3, 0xd0, 0x01, 0x44, 0x12, 0xe6, 0xf1, - 0xd0, 0x41, 0x03, 0xc1, 0x10, 0x06, 0x45, 0x47, 0xdc, 0x07, 0xd0, 0x41, - 0x49, 0xf7, 0xab, 0x37, 0xd0, 0x01, 0x43, 0x3c, 0x06, 0x7a, 0xd0, 0x41, - 0x46, 0x2b, 0xd0, 0x3f, 0xd0, 0x01, 0x02, 0x7d, 0x02, 0x1a, 0xb3, 0x01, - 0xff, 0x55, 0xe3, 0x34, 0xac, 0xd0, 0x01, 0x03, 0xb6, 0x00, 0x01, 0xff, - 0x48, 0xcf, 0xa2, 0x1a, 0xd0, 0x01, 0x43, 0xbd, 0x4e, 0x46, 0xd0, 0x41, - 0x47, 0x3e, 0xc6, 0x98, 0xd0, 0x01, 0xa6, 0x01, 0xff, 0x44, 0x56, 0x66, - 0xb7, 0xd0, 0x01, 0x04, 0x35, 0x27, 0x01, 0xff, 0xe1, 0x35, 0xd0, 0x01, - 0x42, 0x10, 0x00, 0xb8, 0xd0, 0x41, 0x06, 0xf7, 0xd0, 0x50, 0x02, 0x0c, - 0x00, 0x06, 0x4b, 0x00, 0x9a, 0x45, 0xd0, 0x41, 0x02, 0x60, 0x12, 0x11, - 0x0a, 0x17, 0xa9, 0x01, 0xff, 0x46, 0xfe, 0xc2, 0xb4, 0xd0, 0x01, 0x47, - 0x45, 0xc6, 0xb5, 0xd0, 0x41, 0x02, 0x92, 0x00, 0x06, 0x49, 0xb4, 0x79, - 0x72, 0xd0, 0x41, 0x48, 0xcf, 0xa2, 0x16, 0xd0, 0x01, 0x04, 0x5e, 0xe6, - 0x11, 0x0e, 0x40, 0x63, 0x01, 0xff, 0x48, 0x3b, 0xad, 0x90, 0xd0, 0x01, - 0x45, 0x3e, 0xab, 0x91, 0xd0, 0x41, 0x43, 0x0a, 0x6a, 0x8f, 0xd0, 0x01, - 0x44, 0xa8, 0x97, 0xf5, 0xd0, 0x41, 0x46, 0xa3, 0xd0, 0xd8, 0xd0, 0x01, - 0x46, 0x74, 0x30, 0xd9, 0xd0, 0x41, 0x09, 0xf3, 0xac, 0x92, 0x01, 0x5a, - 0xca, 0x1d, 0xc5, 0xd0, 0x01, 0x06, 0xef, 0x3b, 0x01, 0xff, 0x48, 0xcf, - 0xa2, 0x34, 0xd0, 0x81, 0x7a, 0x0a, 0xbb, 0xa0, 0x45, 0x54, 0x38, 0x3d, - 0xcc, 0xd0, 0x01, 0x56, 0x72, 0x30, 0xcb, 0xd0, 0x01, 0x0f, 0x48, 0x69, - 0x29, 0xae, 0x1b, 0x08, 0xd0, 0x1d, 0x01, 0xff, 0x07, 0xd8, 0x1d, 0x06, - 0x4b, 0xe9, 0x92, 0xbe, 0xd0, 0x41, 0x46, 0xad, 0xd5, 0xc6, 0xd0, 0x01, - 0x45, 0xdf, 0x1d, 0xc5, 0xd0, 0x41, 0x49, 0x29, 0xad, 0xbc, 0xd0, 0x01, - 0x45, 0x43, 0xdb, 0xc7, 0xd0, 0x41, 0x48, 0x6d, 0xbb, 0xc3, 0xd0, 0x01, - 0x4a, 0x39, 0xa5, 0xc4, 0xd0, 0x41, 0x42, 0x00, 0x00, 0xbd, 0xd0, 0x01, - 0x42, 0x37, 0x01, 0xbf, 0xd0, 0x01, 0xae, 0x0c, 0x42, 0xc1, 0x08, 0xba, - 0xd0, 0x01, 0x42, 0x0f, 0x00, 0xc0, 0xd0, 0x41, 0x43, 0xa5, 0x10, 0xbb, - 0xd0, 0x01, 0x02, 0x48, 0x03, 0x01, 0xff, 0x43, 0x0a, 0x6a, 0xc2, 0xd0, - 0x01, 0x44, 0xa8, 0x97, 0xc1, 0xd0, 0x41, 0x4f, 0xf4, 0x62, 0xb9, 0xd0, - 0x41, 0x48, 0x6d, 0xbb, 0xb0, 0xd0, 0x01, 0x4a, 0x39, 0xa5, 0xaf, 0xd0, - 0x01, 0x4b, 0xfd, 0x9a, 0xae, 0xd0, 0x41, 0x49, 0xbb, 0xb1, 0x64, 0xd0, - 0x01, 0x46, 0x13, 0xd3, 0x55, 0xd0, 0x01, 0xae, 0x1c, 0x47, 0x51, 0xca, - 0x68, 0xd0, 0x01, 0x06, 0xe9, 0xd5, 0x06, 0x4e, 0xf2, 0x77, 0x0e, 0xd0, - 0x41, 0x4d, 0xb0, 0x79, 0x74, 0xd0, 0x01, 0x4b, 0xf8, 0x98, 0x60, 0xd0, - 0x41, 0x54, 0xe4, 0x3b, 0xb6, 0xd0, 0x01, 0x47, 0x53, 0xc6, 0x7b, 0xd0, - 0x41, 0x45, 0xbd, 0xd9, 0x01, 0xd0, 0x01, 0xa9, 0x06, 0x42, 0x39, 0x42, - 0x2f, 0xd0, 0x41, 0xa1, 0x6d, 0x05, 0x77, 0x1f, 0x3d, 0x4a, 0xf1, 0xa1, - 0xe7, 0xd0, 0x01, 0xa7, 0x0d, 0x43, 0xc0, 0x03, 0x86, 0xd0, 0xc1, 0x00, - 0x49, 0xce, 0xa2, 0x80, 0xd0, 0x41, 0x45, 0xc4, 0xd1, 0x92, 0xd0, 0x81, - 0x06, 0x48, 0x3d, 0xc0, 0xe6, 0xd0, 0x41, 0x0f, 0x3f, 0x63, 0x01, 0xff, - 0x09, 0x3b, 0xad, 0x06, 0x45, 0x3e, 0xab, 0x95, 0xd0, 0x41, 0x43, 0x0a, - 0x6a, 0x94, 0xd0, 0x01, 0x44, 0xa8, 0x97, 0x93, 0xd0, 0x41, 0x51, 0x9a, - 0x52, 0xd0, 0xd0, 0x01, 0x55, 0xf4, 0x35, 0xd2, 0xd0, 0x01, 0x5c, 0xc1, - 0x16, 0xd1, 0xd0, 0x01, 0xb4, 0x01, 0xff, 0x4c, 0x7c, 0x30, 0xcf, 0xd0, - 0x01, 0x02, 0x0d, 0x00, 0x01, 0xff, 0x55, 0x2f, 0x37, 0xd3, 0xd0, 0x01, - 0x48, 0x80, 0x30, 0xce, 0xd0, 0x41, 0x44, 0x41, 0xc6, 0x99, 0xd0, 0x01, - 0x06, 0x89, 0xd5, 0x01, 0xff, 0x06, 0x89, 0xcf, 0x0c, 0x45, 0xc2, 0xcd, - 0xdc, 0xd0, 0x01, 0x47, 0x18, 0xcc, 0xdd, 0xd0, 0x41, 0x45, 0x16, 0xdb, - 0xdb, 0xd0, 0x01, 0x44, 0x7f, 0x8d, 0xda, 0xd0, 0x41, 0x04, 0x2e, 0x5f, - 0x27, 0x07, 0xc5, 0xc9, 0x17, 0x04, 0x2e, 0xe7, 0x01, 0xff, 0x46, 0xf5, - 0xd2, 0xc9, 0xd0, 0x01, 0x46, 0x65, 0xd5, 0xca, 0xd0, 0x01, 0x45, 0xb5, - 0xe1, 0xc8, 0xd0, 0x41, 0x48, 0xcf, 0xa2, 0x3b, 0xd0, 0x01, 0x43, 0xbd, - 0x4e, 0x67, 0xd0, 0x41, 0xe9, 0x56, 0xd0, 0x01, 0x42, 0x10, 0x00, 0x18, - 0xd0, 0x41, 0x05, 0xf2, 0xdb, 0xb3, 0x01, 0xae, 0x99, 0x01, 0xb0, 0x40, - 0xb2, 0x01, 0xff, 0x02, 0x60, 0x12, 0x2f, 0x06, 0x01, 0xd3, 0x01, 0xff, - 0x42, 0x00, 0x00, 0xec, 0xd0, 0x01, 0x42, 0x24, 0x02, 0xeb, 0xd0, 0x01, - 0x42, 0x37, 0x01, 0xed, 0xd0, 0x01, 0x42, 0xd2, 0x02, 0xef, 0xd0, 0x01, - 0x42, 0xc1, 0x08, 0xe9, 0xd0, 0x01, 0x43, 0x43, 0x2a, 0xea, 0xd0, 0x01, - 0x42, 0x0f, 0x00, 0xee, 0xd0, 0x41, 0xee, 0x97, 0xd0, 0x01, 0x49, 0xb4, - 0x79, 0x73, 0xd0, 0x41, 0x05, 0x70, 0xdb, 0x47, 0x42, 0xc3, 0x01, 0x85, - 0xd0, 0x01, 0xaf, 0x01, 0xff, 0x06, 0x91, 0xd0, 0x2e, 0x06, 0x8f, 0xd5, - 0x06, 0x45, 0xfb, 0x4d, 0x23, 0xd0, 0x41, 0x02, 0x48, 0x03, 0x14, 0xf3, - 0x11, 0xd0, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x45, 0xc2, 0xcd, 0x12, 0xd0, - 0x01, 0x43, 0xbd, 0x4e, 0x51, 0xd0, 0x41, 0x4d, 0x8f, 0x81, 0x52, 0xd0, - 0x01, 0x50, 0xe8, 0x34, 0xad, 0xd0, 0x41, 0x48, 0xcf, 0xa2, 0x22, 0xd0, - 0x01, 0x43, 0xbd, 0x4e, 0x84, 0xd0, 0x41, 0x4a, 0xf6, 0x77, 0x0d, 0xd0, - 0x01, 0x46, 0xcd, 0xd6, 0x33, 0xd0, 0x41, 0x4a, 0x7b, 0x9f, 0x28, 0xd0, - 0x01, 0x06, 0xfb, 0xd5, 0x01, 0xff, 0x47, 0x60, 0xc8, 0x62, 0xd0, 0x01, - 0x42, 0x6c, 0x00, 0x5c, 0xd0, 0x41, 0x03, 0x8d, 0x11, 0x2f, 0x04, 0xc3, - 0xd1, 0x21, 0x02, 0x2a, 0x02, 0x11, 0x05, 0x30, 0xdf, 0x01, 0xff, 0x44, - 0x16, 0xe4, 0x9a, 0xd0, 0x01, 0x45, 0xf7, 0xdb, 0xa1, 0xd0, 0x41, 0x42, - 0xdb, 0x02, 0x9e, 0xd0, 0x01, 0x44, 0x19, 0x01, 0x9d, 0xd0, 0x41, 0xe9, - 0x9f, 0xd0, 0x01, 0x45, 0xd6, 0xde, 0xa0, 0xd0, 0x41, 0xe9, 0x9c, 0xd0, - 0x01, 0x45, 0xd6, 0xde, 0x9b, 0xd0, 0x41, 0x04, 0xaf, 0x75, 0x97, 0x03, - 0x44, 0x48, 0x08, 0xa3, 0xfa, 0x01, 0xe7, 0x1b, 0xf4, 0x81, 0xd2, 0x01, - 0x04, 0x3e, 0xe5, 0x57, 0x53, 0x93, 0x44, 0xd7, 0xf3, 0x01, 0x02, 0x3f, - 0x06, 0x2d, 0x45, 0xb2, 0xdf, 0x2f, 0xf3, 0x01, 0xf3, 0x8c, 0xf6, 0x81, - 0x0d, 0x44, 0xf3, 0x04, 0xc8, 0xf9, 0xc1, 0x00, 0x43, 0x0c, 0xe9, 0x8b, - 0xf9, 0x41, 0x45, 0xd5, 0x02, 0x8f, 0xf6, 0x01, 0xb4, 0x01, 0xff, 0x4e, - 0xd2, 0x30, 0x64, 0xf4, 0x01, 0x4f, 0x27, 0x6c, 0x65, 0xf4, 0x41, 0x42, - 0xf2, 0x04, 0x22, 0x20, 0x80, 0x13, 0x44, 0x02, 0x2a, 0x6b, 0xf5, 0x81, - 0x06, 0x44, 0x6e, 0xe7, 0xce, 0x25, 0x40, 0x51, 0xce, 0x51, 0x6c, 0xf5, - 0x41, 0x49, 0x4a, 0x1b, 0x19, 0x22, 0x40, 0x07, 0xf1, 0x04, 0x0d, 0x0b, - 0x5b, 0x70, 0x01, 0xff, 0xe9, 0x52, 0x17, 0x00, 0xf5, 0x53, 0x17, 0x40, - 0xe1, 0x40, 0x17, 0x00, 0x42, 0x16, 0x00, 0x4a, 0x17, 0x00, 0x42, 0x68, - 0x0f, 0x47, 0x17, 0x00, 0x42, 0x24, 0x02, 0x44, 0x17, 0x00, 0x42, 0x22, - 0x00, 0x51, 0x17, 0x00, 0xe9, 0x41, 0x17, 0x00, 0x42, 0x1b, 0x02, 0x43, - 0x17, 0x00, 0x42, 0x74, 0x00, 0x4e, 0x17, 0x00, 0x42, 0x6c, 0x00, 0x4b, - 0x17, 0x00, 0xae, 0x28, 0x42, 0xc1, 0x08, 0x49, 0x17, 0x00, 0x42, 0x71, - 0x00, 0x4d, 0x17, 0x00, 0x42, 0x45, 0x05, 0x50, 0x17, 0x00, 0x42, 0x12, - 0x00, 0x46, 0x17, 0x00, 0xf5, 0x42, 0x17, 0x00, 0x42, 0xa9, 0x01, 0x4f, - 0x17, 0x00, 0x42, 0x20, 0x20, 0x4c, 0x17, 0x40, 0xe1, 0x48, 0x17, 0x00, - 0x42, 0x24, 0x02, 0x45, 0x17, 0x40, 0x06, 0xb0, 0x7c, 0x01, 0xff, 0x4e, - 0x66, 0x70, 0x1f, 0x1a, 0x00, 0x07, 0xf1, 0x04, 0x21, 0x47, 0x27, 0xca, - 0x1e, 0x1a, 0x00, 0x0b, 0x5b, 0x70, 0x01, 0xff, 0x42, 0xeb, 0x0d, 0x1b, - 0x1a, 0x00, 0xe5, 0x19, 0x1a, 0x00, 0xe9, 0x17, 0x1a, 0x00, 0xef, 0x1a, - 0x1a, 0x00, 0xf5, 0x18, 0x1a, 0x40, 0xe1, 0x15, 0x1a, 0x00, 0x42, 0x16, - 0x00, 0x05, 0x1a, 0x00, 0x42, 0x37, 0x00, 0x0c, 0x1a, 0x00, 0x42, 0x68, - 0x0f, 0x09, 0x1a, 0x00, 0x42, 0x24, 0x02, 0x01, 0x1a, 0x00, 0x42, 0x22, - 0x00, 0x16, 0x1a, 0x00, 0x42, 0x77, 0x24, 0x0d, 0x1a, 0x00, 0x42, 0x1b, - 0x02, 0x00, 0x1a, 0x00, 0x42, 0x74, 0x00, 0x12, 0x1a, 0x00, 0xad, 0x49, - 0xae, 0x24, 0x42, 0xc1, 0x08, 0x04, 0x1a, 0x00, 0x42, 0x71, 0x00, 0x11, - 0x1a, 0x00, 0x42, 0x45, 0x05, 0x14, 0x1a, 0x00, 0x42, 0x12, 0x00, 0x08, - 0x1a, 0x00, 0x42, 0xb4, 0x09, 0x13, 0x1a, 0x00, 0x42, 0x20, 0x20, 0x10, - 0x1a, 0x40, 0xe1, 0x0a, 0x1a, 0x00, 0xa7, 0x13, 0x42, 0x71, 0x00, 0x0b, - 0x1a, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x0e, 0x1a, 0x00, 0x42, 0x37, 0x00, - 0x0f, 0x1a, 0x40, 0xe1, 0x02, 0x1a, 0x00, 0x42, 0x1b, 0x02, 0x03, 0x1a, - 0x40, 0xe1, 0x06, 0x1a, 0x00, 0x42, 0xc1, 0x08, 0x07, 0x1a, 0x40, 0x44, - 0xaf, 0x4c, 0xcb, 0xf9, 0x01, 0xf3, 0xe7, 0xfa, 0x41, 0xa1, 0x6a, 0xa5, - 0x50, 0xa9, 0x2b, 0xaf, 0x01, 0xff, 0x45, 0x53, 0xda, 0x66, 0xf9, 0x01, - 0x04, 0xd8, 0x9f, 0x0c, 0x42, 0x19, 0x04, 0xf9, 0xf9, 0x01, 0x48, 0x65, - 0xc2, 0x0e, 0xf9, 0x41, 0x43, 0x16, 0x00, 0xa6, 0x00, 0x00, 0x5b, 0x7a, - 0x18, 0x8b, 0x23, 0x00, 0x45, 0x5e, 0x1f, 0x94, 0xf4, 0x41, 0x42, 0x36, - 0x01, 0xf1, 0xf9, 0x01, 0xa4, 0x0f, 0x02, 0x69, 0x00, 0x01, 0xff, 0x44, - 0x5e, 0xe4, 0xbc, 0xf4, 0x01, 0xf3, 0x72, 0xfa, 0x41, 0x4b, 0x57, 0x93, - 0x70, 0xf4, 0x01, 0x4b, 0x33, 0x94, 0x09, 0xf3, 0x41, 0xa1, 0x06, 0x42, - 0x32, 0x00, 0xd8, 0x02, 0x40, 0xe4, 0x5e, 0xf3, 0x01, 0x50, 0x19, 0x5e, - 0x82, 0x00, 0x00, 0x4a, 0x95, 0xa8, 0x31, 0xf9, 0x41, 0x04, 0x46, 0xe5, - 0x98, 0x09, 0xa9, 0x01, 0xff, 0x0c, 0xd0, 0x89, 0x04, 0xee, 0xe0, 0xf9, - 0x41, 0x45, 0xa2, 0xb6, 0x00, 0x28, 0x00, 0x05, 0xee, 0xda, 0x01, 0xff, - 0xd1, 0x01, 0x28, 0x80, 0xbe, 0x04, 0xd2, 0x02, 0x28, 0x80, 0x9c, 0x02, - 0xd3, 0x04, 0x28, 0x80, 0x8b, 0x01, 0xd4, 0x08, 0x28, 0x80, 0x43, 0xd5, - 0x10, 0x28, 0x80, 0x1f, 0xd6, 0x20, 0x28, 0x80, 0x0d, 0xd7, 0x40, 0x28, - 0x80, 0x04, 0xd8, 0x80, 0x28, 0x40, 0xd8, 0xc0, 0x28, 0x40, 0xd7, 0x60, - 0x28, 0x80, 0x04, 0xd8, 0xa0, 0x28, 0x40, 0xd8, 0xe0, 0x28, 0x40, 0xd6, - 0x30, 0x28, 0x80, 0x0d, 0xd7, 0x50, 0x28, 0x80, 0x04, 0xd8, 0x90, 0x28, - 0x40, 0xd8, 0xd0, 0x28, 0x40, 0xd7, 0x70, 0x28, 0x80, 0x04, 0xd8, 0xb0, - 0x28, 0x40, 0xd8, 0xf0, 0x28, 0x40, 0xd5, 0x18, 0x28, 0x80, 0x1f, 0xd6, - 0x28, 0x28, 0x80, 0x0d, 0xd7, 0x48, 0x28, 0x80, 0x04, 0xd8, 0x88, 0x28, - 0x40, 0xd8, 0xc8, 0x28, 0x40, 0xd7, 0x68, 0x28, 0x80, 0x04, 0xd8, 0xa8, - 0x28, 0x40, 0xd8, 0xe8, 0x28, 0x40, 0xd6, 0x38, 0x28, 0x80, 0x0d, 0xd7, - 0x58, 0x28, 0x80, 0x04, 0xd8, 0x98, 0x28, 0x40, 0xd8, 0xd8, 0x28, 0x40, - 0xd7, 0x78, 0x28, 0x80, 0x04, 0xd8, 0xb8, 0x28, 0x40, 0xd8, 0xf8, 0x28, - 0x40, 0xd4, 0x0c, 0x28, 0x80, 0x43, 0xd5, 0x14, 0x28, 0x80, 0x1f, 0xd6, - 0x24, 0x28, 0x80, 0x0d, 0xd7, 0x44, 0x28, 0x80, 0x04, 0xd8, 0x84, 0x28, - 0x40, 0xd8, 0xc4, 0x28, 0x40, 0xd7, 0x64, 0x28, 0x80, 0x04, 0xd8, 0xa4, - 0x28, 0x40, 0xd8, 0xe4, 0x28, 0x40, 0xd6, 0x34, 0x28, 0x80, 0x0d, 0xd7, - 0x54, 0x28, 0x80, 0x04, 0xd8, 0x94, 0x28, 0x40, 0xd8, 0xd4, 0x28, 0x40, - 0xd7, 0x74, 0x28, 0x80, 0x04, 0xd8, 0xb4, 0x28, 0x40, 0xd8, 0xf4, 0x28, - 0x40, 0xd5, 0x1c, 0x28, 0x80, 0x1f, 0xd6, 0x2c, 0x28, 0x80, 0x0d, 0xd7, - 0x4c, 0x28, 0x80, 0x04, 0xd8, 0x8c, 0x28, 0x40, 0xd8, 0xcc, 0x28, 0x40, - 0xd7, 0x6c, 0x28, 0x80, 0x04, 0xd8, 0xac, 0x28, 0x40, 0xd8, 0xec, 0x28, - 0x40, 0xd6, 0x3c, 0x28, 0x80, 0x0d, 0xd7, 0x5c, 0x28, 0x80, 0x04, 0xd8, - 0x9c, 0x28, 0x40, 0xd8, 0xdc, 0x28, 0x40, 0xd7, 0x7c, 0x28, 0x80, 0x04, - 0xd8, 0xbc, 0x28, 0x40, 0xd8, 0xfc, 0x28, 0x40, 0xd3, 0x06, 0x28, 0x80, - 0x8b, 0x01, 0xd4, 0x0a, 0x28, 0x80, 0x43, 0xd5, 0x12, 0x28, 0x80, 0x1f, - 0xd6, 0x22, 0x28, 0x80, 0x0d, 0xd7, 0x42, 0x28, 0x80, 0x04, 0xd8, 0x82, - 0x28, 0x40, 0xd8, 0xc2, 0x28, 0x40, 0xd7, 0x62, 0x28, 0x80, 0x04, 0xd8, - 0xa2, 0x28, 0x40, 0xd8, 0xe2, 0x28, 0x40, 0xd6, 0x32, 0x28, 0x80, 0x0d, - 0xd7, 0x52, 0x28, 0x80, 0x04, 0xd8, 0x92, 0x28, 0x40, 0xd8, 0xd2, 0x28, - 0x40, 0xd7, 0x72, 0x28, 0x80, 0x04, 0xd8, 0xb2, 0x28, 0x40, 0xd8, 0xf2, - 0x28, 0x40, 0xd5, 0x1a, 0x28, 0x80, 0x1f, 0xd6, 0x2a, 0x28, 0x80, 0x0d, - 0xd7, 0x4a, 0x28, 0x80, 0x04, 0xd8, 0x8a, 0x28, 0x40, 0xd8, 0xca, 0x28, - 0x40, 0xd7, 0x6a, 0x28, 0x80, 0x04, 0xd8, 0xaa, 0x28, 0x40, 0xd8, 0xea, - 0x28, 0x40, 0xd6, 0x3a, 0x28, 0x80, 0x0d, 0xd7, 0x5a, 0x28, 0x80, 0x04, - 0xd8, 0x9a, 0x28, 0x40, 0xd8, 0xda, 0x28, 0x40, 0xd7, 0x7a, 0x28, 0x80, - 0x04, 0xd8, 0xba, 0x28, 0x40, 0xd8, 0xfa, 0x28, 0x40, 0xd4, 0x0e, 0x28, - 0x80, 0x43, 0xd5, 0x16, 0x28, 0x80, 0x1f, 0xd6, 0x26, 0x28, 0x80, 0x0d, - 0xd7, 0x46, 0x28, 0x80, 0x04, 0xd8, 0x86, 0x28, 0x40, 0xd8, 0xc6, 0x28, - 0x40, 0xd7, 0x66, 0x28, 0x80, 0x04, 0xd8, 0xa6, 0x28, 0x40, 0xd8, 0xe6, - 0x28, 0x40, 0xd6, 0x36, 0x28, 0x80, 0x0d, 0xd7, 0x56, 0x28, 0x80, 0x04, - 0xd8, 0x96, 0x28, 0x40, 0xd8, 0xd6, 0x28, 0x40, 0xd7, 0x76, 0x28, 0x80, - 0x04, 0xd8, 0xb6, 0x28, 0x40, 0xd8, 0xf6, 0x28, 0x40, 0xd5, 0x1e, 0x28, - 0x80, 0x1f, 0xd6, 0x2e, 0x28, 0x80, 0x0d, 0xd7, 0x4e, 0x28, 0x80, 0x04, - 0xd8, 0x8e, 0x28, 0x40, 0xd8, 0xce, 0x28, 0x40, 0xd7, 0x6e, 0x28, 0x80, - 0x04, 0xd8, 0xae, 0x28, 0x40, 0xd8, 0xee, 0x28, 0x40, 0xd6, 0x3e, 0x28, - 0x80, 0x0d, 0xd7, 0x5e, 0x28, 0x80, 0x04, 0xd8, 0x9e, 0x28, 0x40, 0xd8, - 0xde, 0x28, 0x40, 0xd7, 0x7e, 0x28, 0x80, 0x04, 0xd8, 0xbe, 0x28, 0x40, - 0xd8, 0xfe, 0x28, 0x40, 0xd2, 0x03, 0x28, 0x80, 0x9c, 0x02, 0xd3, 0x05, - 0x28, 0x80, 0x8b, 0x01, 0xd4, 0x09, 0x28, 0x80, 0x43, 0xd5, 0x11, 0x28, - 0x80, 0x1f, 0xd6, 0x21, 0x28, 0x80, 0x0d, 0xd7, 0x41, 0x28, 0x80, 0x04, - 0xd8, 0x81, 0x28, 0x40, 0xd8, 0xc1, 0x28, 0x40, 0xd7, 0x61, 0x28, 0x80, - 0x04, 0xd8, 0xa1, 0x28, 0x40, 0xd8, 0xe1, 0x28, 0x40, 0xd6, 0x31, 0x28, - 0x80, 0x0d, 0xd7, 0x51, 0x28, 0x80, 0x04, 0xd8, 0x91, 0x28, 0x40, 0xd8, - 0xd1, 0x28, 0x40, 0xd7, 0x71, 0x28, 0x80, 0x04, 0xd8, 0xb1, 0x28, 0x40, - 0xd8, 0xf1, 0x28, 0x40, 0xd5, 0x19, 0x28, 0x80, 0x1f, 0xd6, 0x29, 0x28, - 0x80, 0x0d, 0xd7, 0x49, 0x28, 0x80, 0x04, 0xd8, 0x89, 0x28, 0x40, 0xd8, - 0xc9, 0x28, 0x40, 0xd7, 0x69, 0x28, 0x80, 0x04, 0xd8, 0xa9, 0x28, 0x40, - 0xd8, 0xe9, 0x28, 0x40, 0xd6, 0x39, 0x28, 0x80, 0x0d, 0xd7, 0x59, 0x28, - 0x80, 0x04, 0xd8, 0x99, 0x28, 0x40, 0xd8, 0xd9, 0x28, 0x40, 0xd7, 0x79, - 0x28, 0x80, 0x04, 0xd8, 0xb9, 0x28, 0x40, 0xd8, 0xf9, 0x28, 0x40, 0xd4, - 0x0d, 0x28, 0x80, 0x43, 0xd5, 0x15, 0x28, 0x80, 0x1f, 0xd6, 0x25, 0x28, - 0x80, 0x0d, 0xd7, 0x45, 0x28, 0x80, 0x04, 0xd8, 0x85, 0x28, 0x40, 0xd8, - 0xc5, 0x28, 0x40, 0xd7, 0x65, 0x28, 0x80, 0x04, 0xd8, 0xa5, 0x28, 0x40, - 0xd8, 0xe5, 0x28, 0x40, 0xd6, 0x35, 0x28, 0x80, 0x0d, 0xd7, 0x55, 0x28, - 0x80, 0x04, 0xd8, 0x95, 0x28, 0x40, 0xd8, 0xd5, 0x28, 0x40, 0xd7, 0x75, - 0x28, 0x80, 0x04, 0xd8, 0xb5, 0x28, 0x40, 0xd8, 0xf5, 0x28, 0x40, 0xd5, - 0x1d, 0x28, 0x80, 0x1f, 0xd6, 0x2d, 0x28, 0x80, 0x0d, 0xd7, 0x4d, 0x28, - 0x80, 0x04, 0xd8, 0x8d, 0x28, 0x40, 0xd8, 0xcd, 0x28, 0x40, 0xd7, 0x6d, - 0x28, 0x80, 0x04, 0xd8, 0xad, 0x28, 0x40, 0xd8, 0xed, 0x28, 0x40, 0xd6, - 0x3d, 0x28, 0x80, 0x0d, 0xd7, 0x5d, 0x28, 0x80, 0x04, 0xd8, 0x9d, 0x28, - 0x40, 0xd8, 0xdd, 0x28, 0x40, 0xd7, 0x7d, 0x28, 0x80, 0x04, 0xd8, 0xbd, - 0x28, 0x40, 0xd8, 0xfd, 0x28, 0x40, 0xd3, 0x07, 0x28, 0x80, 0x8b, 0x01, - 0xd4, 0x0b, 0x28, 0x80, 0x43, 0xd5, 0x13, 0x28, 0x80, 0x1f, 0xd6, 0x23, - 0x28, 0x80, 0x0d, 0xd7, 0x43, 0x28, 0x80, 0x04, 0xd8, 0x83, 0x28, 0x40, - 0xd8, 0xc3, 0x28, 0x40, 0xd7, 0x63, 0x28, 0x80, 0x04, 0xd8, 0xa3, 0x28, - 0x40, 0xd8, 0xe3, 0x28, 0x40, 0xd6, 0x33, 0x28, 0x80, 0x0d, 0xd7, 0x53, - 0x28, 0x80, 0x04, 0xd8, 0x93, 0x28, 0x40, 0xd8, 0xd3, 0x28, 0x40, 0xd7, - 0x73, 0x28, 0x80, 0x04, 0xd8, 0xb3, 0x28, 0x40, 0xd8, 0xf3, 0x28, 0x40, - 0xd5, 0x1b, 0x28, 0x80, 0x1f, 0xd6, 0x2b, 0x28, 0x80, 0x0d, 0xd7, 0x4b, - 0x28, 0x80, 0x04, 0xd8, 0x8b, 0x28, 0x40, 0xd8, 0xcb, 0x28, 0x40, 0xd7, - 0x6b, 0x28, 0x80, 0x04, 0xd8, 0xab, 0x28, 0x40, 0xd8, 0xeb, 0x28, 0x40, - 0xd6, 0x3b, 0x28, 0x80, 0x0d, 0xd7, 0x5b, 0x28, 0x80, 0x04, 0xd8, 0x9b, - 0x28, 0x40, 0xd8, 0xdb, 0x28, 0x40, 0xd7, 0x7b, 0x28, 0x80, 0x04, 0xd8, - 0xbb, 0x28, 0x40, 0xd8, 0xfb, 0x28, 0x40, 0xd4, 0x0f, 0x28, 0x80, 0x43, - 0xd5, 0x17, 0x28, 0x80, 0x1f, 0xd6, 0x27, 0x28, 0x80, 0x0d, 0xd7, 0x47, - 0x28, 0x80, 0x04, 0xd8, 0x87, 0x28, 0x40, 0xd8, 0xc7, 0x28, 0x40, 0xd7, - 0x67, 0x28, 0x80, 0x04, 0xd8, 0xa7, 0x28, 0x40, 0xd8, 0xe7, 0x28, 0x40, - 0xd6, 0x37, 0x28, 0x80, 0x0d, 0xd7, 0x57, 0x28, 0x80, 0x04, 0xd8, 0x97, - 0x28, 0x40, 0xd8, 0xd7, 0x28, 0x40, 0xd7, 0x77, 0x28, 0x80, 0x04, 0xd8, - 0xb7, 0x28, 0x40, 0xd8, 0xf7, 0x28, 0x40, 0xd5, 0x1f, 0x28, 0x80, 0x1f, - 0xd6, 0x2f, 0x28, 0x80, 0x0d, 0xd7, 0x4f, 0x28, 0x80, 0x04, 0xd8, 0x8f, - 0x28, 0x40, 0xd8, 0xcf, 0x28, 0x40, 0xd7, 0x6f, 0x28, 0x80, 0x04, 0xd8, - 0xaf, 0x28, 0x40, 0xd8, 0xef, 0x28, 0x40, 0xd6, 0x3f, 0x28, 0x80, 0x0d, - 0xd7, 0x5f, 0x28, 0x80, 0x04, 0xd8, 0x9f, 0x28, 0x40, 0xd8, 0xdf, 0x28, - 0x40, 0xd7, 0x7f, 0x28, 0x80, 0x04, 0xd8, 0xbf, 0x28, 0x40, 0xd8, 0xff, - 0x28, 0x40, 0xa4, 0x95, 0x05, 0x07, 0xf1, 0x04, 0xca, 0x02, 0x07, 0xbf, - 0x35, 0xb1, 0x01, 0x0c, 0x8c, 0x14, 0x89, 0x01, 0x05, 0xdb, 0x02, 0x61, - 0xb6, 0x01, 0xff, 0x45, 0x48, 0x21, 0x46, 0x10, 0x01, 0x0a, 0x5c, 0x70, - 0x01, 0xff, 0xa1, 0x45, 0x4e, 0x40, 0x6f, 0x39, 0x10, 0x01, 0xe5, 0x42, - 0x10, 0x01, 0xe9, 0x3a, 0x10, 0x81, 0x32, 0xef, 0x44, 0x10, 0x81, 0x20, - 0xf5, 0x3c, 0x10, 0x81, 0x17, 0x08, 0x76, 0xb7, 0x01, 0xff, 0xec, 0x40, - 0x10, 0x81, 0x09, 0xf2, 0x3e, 0x10, 0xc1, 0x00, 0xf2, 0x3f, 0x10, 0x41, - 0xec, 0x41, 0x10, 0x41, 0xf5, 0x3d, 0x10, 0x41, 0x0f, 0x76, 0x68, 0x01, - 0xff, 0xe5, 0x73, 0x10, 0x01, 0xef, 0x74, 0x10, 0x41, 0xe9, 0x3b, 0x10, - 0x41, 0xe1, 0x38, 0x10, 0x01, 0xe9, 0x43, 0x10, 0x01, 0xf5, 0x45, 0x10, - 0x41, 0x48, 0x5b, 0x14, 0x01, 0x10, 0x01, 0x4b, 0x3b, 0x21, 0x00, 0x10, - 0x01, 0x4b, 0xbf, 0x95, 0x03, 0x10, 0x01, 0x50, 0x29, 0x5f, 0x70, 0x10, - 0x01, 0x4b, 0x05, 0x9c, 0x04, 0x10, 0x01, 0x47, 0x67, 0x46, 0x02, 0x10, - 0x41, 0x4c, 0x04, 0x86, 0x4c, 0x10, 0x01, 0x02, 0x3b, 0x01, 0x0f, 0xac, - 0x01, 0xff, 0x43, 0xf1, 0x07, 0x4b, 0x10, 0x01, 0x44, 0xeb, 0x72, 0x4d, - 0x10, 0x41, 0xf4, 0x49, 0x10, 0x01, 0x48, 0xd6, 0x3c, 0x4a, 0x10, 0x41, - 0x45, 0xd1, 0x09, 0x59, 0x10, 0x81, 0x88, 0x01, 0xa6, 0x69, 0x46, 0x73, - 0x5b, 0x7f, 0x10, 0x01, 0x44, 0xb8, 0x27, 0x5a, 0x10, 0x81, 0x56, 0x43, - 0xcd, 0x09, 0x52, 0x10, 0x81, 0x40, 0xb3, 0x24, 0xb4, 0x01, 0xff, 0x42, - 0x92, 0x01, 0x5b, 0x10, 0x01, 0xa8, 0x0d, 0xb7, 0x01, 0xff, 0x44, 0x98, - 0x1b, 0x5c, 0x10, 0x01, 0xef, 0x53, 0x10, 0x41, 0x44, 0xf3, 0x0f, 0x5d, - 0x10, 0x01, 0x43, 0x26, 0x01, 0x54, 0x10, 0x41, 0x44, 0x96, 0x1b, 0x58, - 0x10, 0x81, 0x0d, 0x42, 0x30, 0x27, 0x57, 0x10, 0xc1, 0x00, 0x42, 0xf5, - 0x0f, 0x60, 0x10, 0x41, 0x42, 0xf5, 0x0f, 0x61, 0x10, 0x41, 0x80, 0x01, - 0xff, 0x47, 0xe9, 0x0f, 0x64, 0x10, 0x01, 0x48, 0x54, 0x58, 0x65, 0x10, - 0x41, 0x42, 0xf5, 0x0f, 0x63, 0x10, 0x41, 0xa9, 0x0f, 0xaf, 0x01, 0xff, - 0x43, 0xf4, 0x0f, 0x5e, 0x10, 0x01, 0x42, 0x42, 0x00, 0x55, 0x10, 0x41, - 0x43, 0xcf, 0x47, 0x5f, 0x10, 0x01, 0x42, 0x32, 0x00, 0x56, 0x10, 0x41, - 0xf9, 0x62, 0x10, 0x41, 0xe1, 0x05, 0x10, 0x81, 0xb4, 0x02, 0xa2, 0xa7, - 0x02, 0xa3, 0x9a, 0x02, 0xa4, 0x81, 0x02, 0xe5, 0x0f, 0x10, 0x01, 0xa7, - 0xf0, 0x01, 0x42, 0x22, 0x00, 0x33, 0x10, 0x01, 0xe9, 0x07, 0x10, 0x81, - 0xe0, 0x01, 0xaa, 0xd3, 0x01, 0xab, 0xc6, 0x01, 0xac, 0xb9, 0x01, 0x42, - 0x6c, 0x00, 0x2b, 0x10, 0x01, 0xae, 0x9a, 0x01, 0xef, 0x11, 0x10, 0x81, - 0x69, 0xb0, 0x5d, 0x42, 0x71, 0x00, 0x2d, 0x10, 0x01, 0xb3, 0x45, 0xb4, - 0x2c, 0xf5, 0x09, 0x10, 0x81, 0x23, 0xb6, 0x06, 0x42, 0x20, 0x20, 0x2c, - 0x10, 0x41, 0xe1, 0x2f, 0x10, 0x01, 0x07, 0x77, 0xb7, 0x01, 0xff, 0xec, - 0x0d, 0x10, 0x81, 0x09, 0xf2, 0x0b, 0x10, 0xc1, 0x00, 0xf2, 0x0c, 0x10, - 0x41, 0xec, 0x0e, 0x10, 0x41, 0xf5, 0x0a, 0x10, 0x41, 0xe1, 0x22, 0x10, - 0x01, 0x42, 0x22, 0x00, 0x23, 0x10, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x1d, - 0x10, 0x01, 0x42, 0x22, 0x00, 0x1e, 0x10, 0x41, 0xe1, 0x32, 0x10, 0x01, - 0x42, 0x22, 0x00, 0x30, 0x10, 0x01, 0x42, 0x45, 0x05, 0x31, 0x10, 0x41, - 0xe1, 0x27, 0x10, 0x01, 0x42, 0x22, 0x00, 0x28, 0x10, 0x41, 0x09, 0x2a, - 0x5f, 0x01, 0xff, 0x02, 0x3f, 0x06, 0x19, 0x44, 0x72, 0xe6, 0x37, 0x10, - 0x01, 0x43, 0xf8, 0x5f, 0x36, 0x10, 0x01, 0x06, 0x1c, 0x33, 0x01, 0xff, - 0xe5, 0x71, 0x10, 0x01, 0xef, 0x72, 0x10, 0x41, 0xe1, 0x75, 0x10, 0x01, - 0x42, 0x74, 0x00, 0x35, 0x10, 0x41, 0xe1, 0x26, 0x10, 0x01, 0x42, 0x24, - 0x02, 0x17, 0x10, 0x01, 0x42, 0x2f, 0x04, 0x21, 0x10, 0x01, 0x42, 0x20, - 0x20, 0x1c, 0x10, 0x41, 0xe1, 0x2e, 0x10, 0x01, 0x42, 0x74, 0x00, 0x34, - 0x10, 0x41, 0xe1, 0x13, 0x10, 0x01, 0x42, 0x22, 0x00, 0x14, 0x10, 0x41, - 0xe1, 0x1a, 0x10, 0x01, 0x42, 0x22, 0x00, 0x1b, 0x10, 0x41, 0xe9, 0x08, - 0x10, 0x41, 0xe1, 0x15, 0x10, 0x01, 0x42, 0x22, 0x00, 0x16, 0x10, 0x41, - 0xe1, 0x24, 0x10, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x25, 0x10, 0x41, - 0xe1, 0x1f, 0x10, 0x01, 0x42, 0x22, 0x00, 0x20, 0x10, 0x41, 0xe1, 0x18, - 0x10, 0x01, 0x42, 0x22, 0x00, 0x19, 0x10, 0x41, 0xe1, 0x29, 0x10, 0x01, - 0x42, 0x22, 0x00, 0x2a, 0x10, 0x41, 0xe1, 0x06, 0x10, 0x01, 0xe9, 0x10, - 0x10, 0x01, 0xf5, 0x12, 0x10, 0x41, 0x44, 0x0b, 0x1e, 0x47, 0x10, 0x01, - 0x05, 0xf5, 0x05, 0x06, 0x4b, 0xcc, 0x98, 0x48, 0x10, 0x41, 0x45, 0xd1, - 0x09, 0x6e, 0x10, 0x01, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x6f, 0x10, 0x01, - 0x43, 0xcd, 0x09, 0x67, 0x10, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, - 0x1b, 0x66, 0x10, 0x41, 0x44, 0x25, 0x01, 0x69, 0x10, 0x01, 0x42, 0x15, - 0x02, 0x68, 0x10, 0x41, 0x44, 0x96, 0x1b, 0x6d, 0x10, 0x01, 0x42, 0x30, - 0x27, 0x6c, 0x10, 0x41, 0x43, 0xd7, 0x04, 0x6b, 0x10, 0x01, 0x43, 0xfb, - 0x05, 0x6a, 0x10, 0x41, 0x42, 0x17, 0x00, 0x17, 0xf4, 0x01, 0x03, 0x67, - 0x21, 0xee, 0x0d, 0x42, 0xbb, 0x04, 0xa3, 0xf4, 0x01, 0x42, 0xd2, 0x04, - 0xb4, 0xf9, 0x01, 0xaf, 0xc3, 0x0d, 0x07, 0x74, 0xca, 0xe0, 0x0a, 0x02, - 0xf3, 0x04, 0xdf, 0x09, 0x45, 0xfc, 0xe0, 0x90, 0xf4, 0x81, 0xd1, 0x09, - 0xb7, 0x9a, 0x09, 0xb8, 0x0b, 0xf9, 0x66, 0xf4, 0xc1, 0x00, 0x48, 0xf4, - 0x45, 0xc9, 0xf6, 0x41, 0x0a, 0x55, 0x9d, 0x06, 0x49, 0x2b, 0xb1, 0x4a, - 0xf9, 0x41, 0x02, 0x3b, 0x01, 0x97, 0x07, 0x06, 0x8c, 0x13, 0xe3, 0x05, - 0xac, 0xae, 0x02, 0x06, 0xc8, 0x00, 0xf1, 0x01, 0x03, 0x9c, 0x13, 0x5e, - 0x09, 0x32, 0x00, 0x01, 0xff, 0x0b, 0x15, 0x93, 0x43, 0x0a, 0x8c, 0x13, - 0x2d, 0x0a, 0x59, 0x5e, 0x17, 0x0b, 0x6e, 0x9a, 0x01, 0xff, 0x51, 0xfe, - 0x54, 0x6a, 0x25, 0x00, 0x4b, 0x64, 0x96, 0x61, 0x25, 0x00, 0x4c, 0xd0, - 0x8c, 0x5e, 0x25, 0x40, 0x50, 0x23, 0x36, 0x3f, 0x25, 0x00, 0x4a, 0x0d, - 0xa4, 0x25, 0x25, 0x00, 0x4b, 0xb3, 0x99, 0x1d, 0x25, 0x40, 0x50, 0x38, - 0x36, 0x42, 0x25, 0x00, 0x4a, 0x17, 0xa4, 0x28, 0x25, 0x00, 0x4b, 0x63, - 0x5e, 0x20, 0x25, 0x40, 0x51, 0x0f, 0x55, 0x6b, 0x25, 0x00, 0x4b, 0x6f, - 0x96, 0x62, 0x25, 0x00, 0x4c, 0xdc, 0x8c, 0x5f, 0x25, 0x40, 0x0b, 0x15, - 0x93, 0x79, 0x0a, 0x8c, 0x13, 0x48, 0x0a, 0x59, 0x5e, 0x17, 0x0b, 0x6e, - 0x9a, 0x01, 0xff, 0x51, 0xfe, 0x54, 0x67, 0x25, 0x00, 0x4b, 0x64, 0x96, - 0x5b, 0x25, 0x00, 0x4c, 0xd0, 0x8c, 0x58, 0x25, 0x40, 0x55, 0x1e, 0x36, - 0x48, 0x25, 0x00, 0x50, 0x23, 0x36, 0x37, 0x25, 0x00, 0x05, 0xc3, 0x00, - 0x11, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x4a, 0x87, 0x13, 0x22, 0x25, 0x00, - 0x45, 0x8c, 0x13, 0x15, 0x25, 0x40, 0x4a, 0x87, 0x13, 0x2a, 0x25, 0x00, - 0x45, 0x8c, 0x13, 0x19, 0x25, 0x40, 0x55, 0x33, 0x36, 0x40, 0x25, 0x00, - 0x50, 0x38, 0x36, 0x38, 0x25, 0x00, 0x05, 0xc3, 0x00, 0x11, 0x06, 0xc8, - 0x00, 0x01, 0xff, 0x4a, 0xf6, 0x14, 0x1e, 0x25, 0x00, 0x45, 0xc3, 0x01, - 0x16, 0x25, 0x40, 0x4a, 0xf6, 0x14, 0x26, 0x25, 0x00, 0x45, 0xc3, 0x01, - 0x1a, 0x25, 0x40, 0x51, 0x0f, 0x55, 0x68, 0x25, 0x00, 0x4b, 0x6f, 0x96, - 0x5c, 0x25, 0x00, 0x4c, 0xdc, 0x8c, 0x59, 0x25, 0x40, 0x5c, 0x8d, 0x15, - 0x46, 0x25, 0x00, 0x0f, 0x92, 0x15, 0x1c, 0x0f, 0xee, 0x68, 0x06, 0x5c, - 0x69, 0x17, 0x44, 0x25, 0x40, 0x4a, 0x87, 0x13, 0x31, 0x25, 0x00, 0x48, - 0xe3, 0x14, 0x39, 0x25, 0x00, 0x4e, 0x82, 0x77, 0x49, 0x25, 0x40, 0x4a, - 0xf6, 0x14, 0x2e, 0x25, 0x00, 0x48, 0x9c, 0x13, 0x36, 0x25, 0x00, 0x4e, - 0x90, 0x77, 0x3e, 0x25, 0x40, 0x04, 0xc4, 0x00, 0xf5, 0x02, 0x05, 0xc9, - 0x00, 0x01, 0xff, 0x04, 0xc9, 0x15, 0xca, 0x02, 0xa4, 0x84, 0x01, 0x4a, - 0x0b, 0x00, 0x00, 0x25, 0x80, 0x77, 0x44, 0xc3, 0x00, 0x74, 0x25, 0x80, - 0x6a, 0x0f, 0x55, 0x6b, 0x5a, 0x45, 0xc8, 0x00, 0x76, 0x25, 0x00, 0x0c, - 0xa5, 0x58, 0x44, 0x42, 0x50, 0x02, 0x75, 0x25, 0x80, 0x1e, 0x48, 0x32, - 0x00, 0x02, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x0b, - 0x00, 0x3c, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x24, 0x25, 0x00, 0x45, 0xc8, - 0x00, 0x1c, 0x25, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0xa8, 0x0c, 0x44, - 0xc3, 0x00, 0x18, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x14, 0x25, 0x40, 0x49, - 0xc7, 0xae, 0x7d, 0x25, 0x00, 0x49, 0x0c, 0x00, 0x34, 0x25, 0x40, 0x4a, - 0x0b, 0x00, 0x04, 0x25, 0x00, 0x48, 0x32, 0x00, 0x06, 0x25, 0x40, 0x4a, - 0x0b, 0x00, 0x08, 0x25, 0x00, 0x48, 0x32, 0x00, 0x0a, 0x25, 0x40, 0x50, - 0xf9, 0x59, 0x7c, 0x25, 0x40, 0x55, 0x7a, 0x34, 0xaf, 0xfb, 0x41, 0x08, - 0x2f, 0x23, 0x31, 0xaf, 0x01, 0xff, 0x0a, 0xad, 0xa9, 0x1e, 0x42, 0xa7, - 0x01, 0x77, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x0b, - 0x00, 0x2c, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x10, 0x25, 0x00, 0x45, 0xc8, - 0x00, 0x0c, 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x4c, 0x25, 0x00, 0x48, 0x32, - 0x00, 0x4e, 0x25, 0x40, 0x45, 0x0d, 0x0f, 0x73, 0x25, 0x00, 0x47, 0x9d, - 0x3f, 0xae, 0xfb, 0x01, 0x07, 0x7d, 0x02, 0x4f, 0x06, 0x6d, 0x02, 0x01, - 0xff, 0x11, 0x73, 0x02, 0x0c, 0x53, 0x64, 0x45, 0x72, 0x25, 0x00, 0x53, - 0x2c, 0x47, 0x71, 0x25, 0x40, 0x44, 0xc3, 0x00, 0xa0, 0xfb, 0x81, 0x1d, - 0x45, 0xc8, 0x00, 0xa1, 0xfb, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x5f, 0x69, - 0x0f, 0xa9, 0xfb, 0x01, 0x4f, 0x89, 0x02, 0xa5, 0xfb, 0xc1, 0x00, 0x4f, - 0x79, 0x02, 0xaa, 0xfb, 0x41, 0x80, 0x01, 0xff, 0x60, 0xac, 0x0d, 0xa8, - 0xfb, 0x01, 0x4f, 0x89, 0x02, 0xa4, 0xfb, 0xc1, 0x00, 0x50, 0x91, 0x17, - 0xab, 0xfb, 0x41, 0x08, 0x84, 0x02, 0x11, 0x09, 0xb7, 0x0d, 0x01, 0xff, - 0x4c, 0x8c, 0x02, 0xa3, 0xfb, 0x01, 0x6b, 0x6d, 0x02, 0xad, 0xfb, 0x41, - 0x4c, 0x8c, 0x02, 0xa2, 0xfb, 0x81, 0x0d, 0x5c, 0x85, 0x17, 0xa7, 0xfb, - 0xc1, 0x00, 0x50, 0x88, 0x02, 0xac, 0xfb, 0x41, 0x50, 0x91, 0x17, 0xa6, - 0xfb, 0x41, 0x09, 0x89, 0x43, 0x11, 0x07, 0xc7, 0x58, 0x01, 0xff, 0x44, - 0xc3, 0x00, 0x6f, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x70, 0x25, 0x40, 0x44, - 0xc3, 0x00, 0x6e, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x6d, 0x25, 0x40, 0x5d, - 0x87, 0x13, 0x45, 0x25, 0x00, 0x10, 0x8c, 0x13, 0x1c, 0x10, 0x59, 0x5e, - 0x06, 0x5d, 0xe3, 0x14, 0x43, 0x25, 0x40, 0x4a, 0x87, 0x13, 0x32, 0x25, - 0x00, 0x48, 0xe3, 0x14, 0x3a, 0x25, 0x00, 0x4e, 0x82, 0x77, 0x4a, 0x25, - 0x40, 0x4a, 0xf6, 0x14, 0x2d, 0x25, 0x00, 0x48, 0x9c, 0x13, 0x35, 0x25, - 0x00, 0x4e, 0x90, 0x77, 0x3d, 0x25, 0x40, 0x02, 0x3b, 0x01, 0x7d, 0x4a, - 0x0b, 0x00, 0x01, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x78, 0x25, 0x80, 0x6a, - 0x0f, 0x55, 0x6b, 0x5a, 0x45, 0xc8, 0x00, 0x7a, 0x25, 0x00, 0x0c, 0xa5, - 0x58, 0x44, 0x42, 0x50, 0x02, 0x79, 0x25, 0x80, 0x1e, 0x48, 0x32, 0x00, - 0x03, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x0b, 0x00, - 0x4b, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x2b, 0x25, 0x00, 0x45, 0xc8, 0x00, - 0x23, 0x25, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x0b, 0x00, 0x3b, - 0x25, 0x00, 0xac, 0x06, 0x45, 0xc8, 0x00, 0x17, 0x25, 0x40, 0x43, 0xc4, - 0x00, 0x1b, 0x25, 0x00, 0x49, 0xf1, 0x14, 0x7f, 0x25, 0x40, 0x4a, 0x0b, - 0x00, 0x05, 0x25, 0x00, 0x48, 0x32, 0x00, 0x07, 0x25, 0x40, 0x4a, 0x0b, - 0x00, 0x09, 0x25, 0x00, 0x48, 0x32, 0x00, 0x0b, 0x25, 0x40, 0x50, 0x09, - 0x5a, 0x7e, 0x25, 0x40, 0x0a, 0xad, 0xa9, 0x1e, 0x42, 0xa7, 0x01, 0x7b, - 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x0b, 0x00, 0x33, - 0x25, 0x00, 0x44, 0xc3, 0x00, 0x13, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x0f, - 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x4d, 0x25, 0x00, 0x48, 0x32, 0x00, 0x4f, - 0x25, 0x40, 0x05, 0x3d, 0x01, 0x92, 0x01, 0x03, 0xdc, 0x12, 0x01, 0xff, - 0x0b, 0x15, 0x93, 0x77, 0x0a, 0x8c, 0x13, 0x47, 0x0a, 0x59, 0x5e, 0x17, - 0x0b, 0x6e, 0x9a, 0x01, 0xff, 0x51, 0xfe, 0x54, 0x64, 0x25, 0x00, 0x4b, - 0x64, 0x96, 0x55, 0x25, 0x00, 0x4c, 0xd0, 0x8c, 0x52, 0x25, 0x40, 0x50, - 0x23, 0x36, 0x2f, 0x25, 0x00, 0x05, 0xc3, 0x00, 0x16, 0x06, 0xc8, 0x00, - 0x06, 0x53, 0x95, 0x48, 0x47, 0x25, 0x40, 0x45, 0x8c, 0x13, 0x0d, 0x25, - 0x00, 0x48, 0xe3, 0x14, 0x21, 0x25, 0x40, 0x45, 0x8c, 0x13, 0x11, 0x25, - 0x00, 0x48, 0xe3, 0x14, 0x29, 0x25, 0x40, 0x50, 0x38, 0x36, 0x30, 0x25, - 0x00, 0x05, 0xc3, 0x00, 0x16, 0x06, 0xc8, 0x00, 0x06, 0x53, 0xa8, 0x48, - 0x41, 0x25, 0x40, 0x45, 0xc3, 0x01, 0x0e, 0x25, 0x00, 0x48, 0x9c, 0x13, - 0x1f, 0x25, 0x40, 0x45, 0xc3, 0x01, 0x12, 0x25, 0x00, 0x48, 0x9c, 0x13, - 0x27, 0x25, 0x40, 0x51, 0x0f, 0x55, 0x65, 0x25, 0x00, 0x4b, 0x6f, 0x96, - 0x56, 0x25, 0x00, 0x4c, 0xdc, 0x8c, 0x53, 0x25, 0x40, 0x09, 0x89, 0x43, - 0x3a, 0x4a, 0x0b, 0x00, 0x50, 0x25, 0x00, 0x07, 0xc7, 0x58, 0x1e, 0x48, - 0x32, 0x00, 0x51, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, - 0x0b, 0x00, 0x6c, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x63, 0x25, 0x00, 0x45, - 0xc8, 0x00, 0x60, 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x69, 0x25, 0x00, 0x44, - 0xc3, 0x00, 0x5d, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x5a, 0x25, 0x40, 0x4a, - 0x0b, 0x00, 0x66, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x57, 0x25, 0x00, 0x45, - 0xc8, 0x00, 0x54, 0x25, 0x40, 0x4a, 0x2d, 0x9d, 0xf9, 0xf3, 0x01, 0xac, - 0x18, 0x43, 0x23, 0x23, 0xc8, 0x22, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x4f, 0xa3, 0x68, 0xd1, 0x29, 0x00, 0x50, 0x59, 0x60, 0xd2, 0x29, - 0x40, 0x80, 0x06, 0x43, 0xa1, 0x01, 0xb3, 0xf3, 0x41, 0x4a, 0xed, 0xa5, - 0x4f, 0xf5, 0x01, 0x4a, 0x9d, 0xaa, 0x63, 0xf9, 0x41, 0x4b, 0x79, 0x8f, - 0x95, 0xf3, 0x41, 0x54, 0x2c, 0x3f, 0x7e, 0xf3, 0x01, 0x03, 0xb1, 0x04, - 0x01, 0xff, 0x57, 0xa7, 0x19, 0x3b, 0x29, 0x00, 0x4d, 0x88, 0x08, 0xdf, - 0x23, 0x00, 0x05, 0x22, 0x00, 0x49, 0x05, 0xc3, 0x00, 0x31, 0x4b, 0x70, - 0x1f, 0xdd, 0x23, 0x00, 0x06, 0xc8, 0x00, 0x13, 0x4e, 0xe1, 0x23, 0xb5, - 0x23, 0x80, 0x06, 0x56, 0x36, 0x08, 0xe1, 0x23, 0x40, 0x58, 0xd7, 0x23, - 0xb6, 0x23, 0x40, 0xa3, 0x06, 0x4c, 0xfc, 0x87, 0x25, 0x2e, 0x40, 0x45, - 0x00, 0x0a, 0x1f, 0x23, 0x00, 0x43, 0x7f, 0x0b, 0x0c, 0x23, 0x40, 0xa3, - 0x06, 0x4c, 0xfc, 0x87, 0x24, 0x2e, 0x40, 0x45, 0x00, 0x0a, 0x1e, 0x23, - 0x00, 0x43, 0x7f, 0x0b, 0x0d, 0x23, 0x40, 0x4c, 0x44, 0x85, 0xcb, 0x2b, - 0x00, 0x48, 0xad, 0x23, 0x21, 0x23, 0x00, 0x50, 0xe3, 0x21, 0x5b, 0x2e, - 0x00, 0x51, 0x6a, 0x1f, 0x5c, 0x2e, 0x40, 0x0d, 0xd2, 0x7b, 0xc5, 0x02, - 0x07, 0xf1, 0x04, 0x01, 0xff, 0xe1, 0x1a, 0x31, 0x80, 0x8f, 0x02, 0xe2, - 0x05, 0x31, 0x80, 0x85, 0x02, 0xe3, 0x18, 0x31, 0x80, 0xfb, 0x01, 0xe4, - 0x09, 0x31, 0x00, 0xe5, 0x1c, 0x31, 0x80, 0xd4, 0x01, 0xe6, 0x08, 0x31, - 0x00, 0xe7, 0x0d, 0x31, 0x80, 0xba, 0x01, 0xe8, 0x0f, 0x31, 0x00, 0xe9, - 0x27, 0x31, 0x80, 0x95, 0x01, 0xea, 0x10, 0x31, 0x80, 0x8b, 0x01, 0xeb, - 0x0e, 0x31, 0x80, 0x81, 0x01, 0xec, 0x0c, 0x31, 0x80, 0x78, 0xed, 0x07, - 0x31, 0x00, 0xee, 0x0b, 0x31, 0x80, 0x62, 0xef, 0x1b, 0x31, 0x80, 0x3d, - 0xf0, 0x06, 0x31, 0x00, 0xf1, 0x11, 0x31, 0x00, 0xf2, 0x16, 0x31, 0x00, - 0xf3, 0x19, 0x31, 0x80, 0x28, 0xf4, 0x0a, 0x31, 0x00, 0xf5, 0x28, 0x31, - 0x80, 0x19, 0xf6, 0x2a, 0x31, 0x00, 0xf8, 0x12, 0x31, 0x00, 0xfa, 0x17, - 0x31, 0xc0, 0x00, 0xe8, 0x13, 0x31, 0x00, 0xe9, 0xa1, 0x31, 0x00, 0xf9, - 0xba, 0x31, 0x40, 0x42, 0xe6, 0x1c, 0xab, 0x31, 0x40, 0xe8, 0x15, 0x31, - 0x40, 0x4f, 0x4a, 0x37, 0x2e, 0x31, 0x00, 0xe5, 0xbe, 0x31, 0x00, 0xed, - 0xb1, 0x31, 0x00, 0xae, 0x08, 0xef, 0xa6, 0x31, 0x00, 0xf5, 0x21, 0x31, - 0x40, 0xe7, 0xb2, 0x31, 0x00, 0xee, 0xa7, 0x31, 0x40, 0xe7, 0x2b, 0x31, - 0x80, 0x04, 0xee, 0x2f, 0x31, 0x40, 0xe7, 0xad, 0x31, 0x40, 0xe8, 0xb9, - 0x31, 0x40, 0xf7, 0xbd, 0x31, 0x40, 0xe9, 0xa2, 0x31, 0x40, 0xe8, 0x2d, - 0x31, 0x00, 0xed, 0xac, 0x31, 0x00, 0x42, 0xe6, 0x1c, 0xaa, 0x31, 0x80, - 0x08, 0xf2, 0xa8, 0x31, 0x00, 0xf5, 0x29, 0x31, 0x40, 0xee, 0xb3, 0x31, - 0x40, 0xe8, 0xb8, 0x31, 0x00, 0xee, 0x2c, 0x31, 0x00, 0xf5, 0xa3, 0x31, - 0x00, 0xf7, 0xbc, 0x31, 0x40, 0xe5, 0xa4, 0x31, 0x00, 0xe8, 0x1d, 0x31, - 0x00, 0xe9, 0x1f, 0x31, 0x00, 0xee, 0x23, 0x31, 0x80, 0x04, 0xf2, 0x26, - 0x31, 0x40, 0xe7, 0x25, 0x31, 0x00, 0xee, 0xa5, 0x31, 0x40, 0xe8, 0x14, - 0x31, 0x40, 0xf5, 0xa0, 0x31, 0x40, 0xe8, 0xbf, 0x31, 0x00, 0xe9, 0x1e, - 0x31, 0x80, 0x1c, 0xed, 0xb0, 0x31, 0x00, 0xee, 0x22, 0x31, 0x80, 0x0b, - 0xf5, 0x20, 0x31, 0xc0, 0x00, 0x42, 0xe6, 0x1c, 0xaf, 0x31, 0x40, 0xe7, - 0x24, 0x31, 0x00, 0xee, 0xa9, 0x31, 0x40, 0x42, 0xe6, 0x1c, 0xae, 0x31, - 0x40, 0xe7, 0xbb, 0x31, 0x00, 0xe8, 0xb7, 0x31, 0x00, 0xeb, 0xb6, 0x31, - 0x00, 0xf0, 0xb4, 0x31, 0x00, 0xf4, 0xb5, 0x31, 0x40, 0xeb, 0x6e, 0xf5, - 0x81, 0x06, 0x46, 0x95, 0xc9, 0x83, 0xfa, 0x41, 0x44, 0xb9, 0x00, 0x16, - 0xf5, 0x81, 0x04, 0xf3, 0xda, 0xf4, 0x41, 0x45, 0x42, 0xd7, 0xd1, 0xf4, - 0x41, 0x55, 0x9c, 0x36, 0xbd, 0xf7, 0x01, 0x54, 0x74, 0x3d, 0xb1, 0xf7, - 0x01, 0x4b, 0x1e, 0x5b, 0xa4, 0xf7, 0x01, 0xb3, 0x11, 0x06, 0xad, 0x02, - 0x01, 0xff, 0x46, 0x00, 0x04, 0x86, 0xf7, 0x01, 0x46, 0xdb, 0x04, 0x90, - 0xf7, 0x41, 0x46, 0x16, 0x17, 0xab, 0xf7, 0x01, 0x52, 0x57, 0x4d, 0xb7, - 0xf7, 0x41, 0xa1, 0xbb, 0x02, 0xaf, 0x19, 0x02, 0x30, 0x12, 0x01, 0xff, - 0x80, 0x06, 0x47, 0x50, 0xc5, 0xd0, 0xfa, 0x41, 0x44, 0x4a, 0xe4, 0xd8, - 0xf4, 0x01, 0x45, 0x5e, 0x1f, 0x99, 0xf4, 0x41, 0x0b, 0x23, 0x92, 0x0c, - 0x44, 0xde, 0xb7, 0x3c, 0xf3, 0x01, 0x45, 0x4c, 0xe1, 0x21, 0xf4, 0x41, - 0xd1, 0x00, 0xfb, 0x81, 0x87, 0x01, 0xd2, 0x01, 0xfb, 0x81, 0x43, 0xd3, - 0x03, 0xfb, 0x81, 0x1f, 0xd4, 0x07, 0xfb, 0x81, 0x0d, 0xd5, 0x0f, 0xfb, - 0x81, 0x04, 0xd6, 0x1e, 0xfb, 0x41, 0xd6, 0x2d, 0xfb, 0x41, 0xd5, 0x16, - 0xfb, 0x81, 0x04, 0xd6, 0x26, 0xfb, 0x41, 0xd6, 0x35, 0xfb, 0x41, 0xd4, - 0x0b, 0xfb, 0x81, 0x0d, 0xd5, 0x13, 0xfb, 0x81, 0x04, 0xd6, 0x22, 0xfb, - 0x41, 0xd6, 0x31, 0xfb, 0x41, 0xd5, 0x1a, 0xfb, 0x81, 0x04, 0xd6, 0x29, - 0xfb, 0x41, 0xd6, 0x39, 0xfb, 0x41, 0xd3, 0x05, 0xfb, 0x81, 0x1b, 0xd4, - 0x09, 0xfb, 0x81, 0x0d, 0xd5, 0x11, 0xfb, 0x81, 0x04, 0xd6, 0x20, 0xfb, - 0x41, 0xd6, 0x2f, 0xfb, 0x41, 0xd5, 0x18, 0xfb, 0xc1, 0x00, 0xd6, 0x37, - 0xfb, 0x41, 0xd4, 0x0d, 0xfb, 0x81, 0x0d, 0xd5, 0x14, 0xfb, 0x81, 0x04, - 0xd6, 0x24, 0xfb, 0x41, 0xd6, 0x33, 0xfb, 0x41, 0xd5, 0x1c, 0xfb, 0x81, - 0x04, 0xd6, 0x2b, 0xfb, 0x41, 0xd6, 0x3b, 0xfb, 0x41, 0xd2, 0x02, 0xfb, - 0x81, 0x40, 0xd3, 0x04, 0xfb, 0x81, 0x1f, 0xd4, 0x08, 0xfb, 0x81, 0x0d, - 0xd5, 0x10, 0xfb, 0x81, 0x04, 0xd6, 0x1f, 0xfb, 0x41, 0xd6, 0x2e, 0xfb, - 0x41, 0xd5, 0x17, 0xfb, 0x81, 0x04, 0xd6, 0x27, 0xfb, 0x41, 0xd6, 0x36, - 0xfb, 0x41, 0xd4, 0x0c, 0xfb, 0x81, 0x0a, 0x42, 0x55, 0xb9, 0x32, 0xfb, - 0x01, 0xd6, 0x23, 0xfb, 0x41, 0xd5, 0x1b, 0xfb, 0x81, 0x04, 0xd6, 0x2a, - 0xfb, 0x41, 0xd6, 0x3a, 0xfb, 0x41, 0xd3, 0x06, 0xfb, 0x81, 0x1f, 0xd4, - 0x0a, 0xfb, 0x81, 0x0d, 0xd5, 0x12, 0xfb, 0x81, 0x04, 0xd6, 0x21, 0xfb, - 0x41, 0xd6, 0x30, 0xfb, 0x41, 0xd5, 0x19, 0xfb, 0x81, 0x04, 0xd6, 0x28, - 0xfb, 0x41, 0xd6, 0x38, 0xfb, 0x41, 0xd4, 0x0e, 0xfb, 0x81, 0x0d, 0xd5, - 0x15, 0xfb, 0x81, 0x04, 0xd6, 0x25, 0xfb, 0x41, 0xd6, 0x34, 0xfb, 0x41, - 0xd5, 0x1d, 0xfb, 0x01, 0xd6, 0x2c, 0xfb, 0x41, 0x02, 0x36, 0x01, 0x06, - 0x49, 0x80, 0x91, 0x22, 0x24, 0x40, 0x80, 0x32, 0x8d, 0x01, 0xff, 0x0a, - 0x0f, 0x18, 0x19, 0x0f, 0xc1, 0x68, 0x01, 0xff, 0xe3, 0x2d, 0x21, 0x00, - 0xe8, 0x0c, 0x21, 0x00, 0xe9, 0x11, 0x21, 0x00, 0xf2, 0x1c, 0x21, 0x00, - 0xfa, 0x28, 0x21, 0x40, 0x50, 0x0b, 0x21, 0xb6, 0x27, 0x00, 0x50, 0xb3, - 0x02, 0xb5, 0x27, 0x00, 0x50, 0xac, 0x3b, 0xb4, 0x27, 0x40, 0x46, 0xfb, - 0xcf, 0xd3, 0x29, 0x00, 0xa3, 0xfe, 0x06, 0xa4, 0x8e, 0x06, 0xa6, 0xee, - 0x05, 0xa8, 0xc1, 0x05, 0xac, 0xbe, 0x04, 0xad, 0xcf, 0x03, 0x43, 0x19, - 0x95, 0x12, 0x27, 0x00, 0x47, 0x63, 0xc9, 0xc4, 0x2b, 0x00, 0xb0, 0xa4, - 0x03, 0x56, 0x6c, 0x32, 0x53, 0x27, 0x00, 0xb2, 0xa5, 0x02, 0xb3, 0x9f, - 0x01, 0xb4, 0x6f, 0xb5, 0x2c, 0x03, 0x32, 0x00, 0x01, 0xff, 0x06, 0x35, - 0x00, 0x17, 0x08, 0xba, 0x50, 0x01, 0xff, 0x47, 0x9d, 0x3f, 0x98, 0xf7, - 0x01, 0x47, 0x75, 0x07, 0x9e, 0xf7, 0x01, 0x46, 0xdb, 0x04, 0x1d, 0x2b, - 0x40, 0x47, 0x82, 0x60, 0x2e, 0x2b, 0x00, 0x49, 0x13, 0x42, 0xae, 0x25, - 0x40, 0x59, 0x79, 0x22, 0x7b, 0x26, 0x00, 0xb0, 0x01, 0xff, 0x58, 0xef, - 0x23, 0xa2, 0xf5, 0x01, 0x0a, 0x4b, 0x0a, 0x16, 0x04, 0x6f, 0x02, 0x06, - 0x5b, 0xcf, 0x01, 0x9d, 0x2b, 0x40, 0x4d, 0x4e, 0x31, 0xe4, 0x25, 0x00, - 0x4e, 0x69, 0x26, 0xe5, 0x25, 0x40, 0x4f, 0xb5, 0x65, 0xeb, 0x23, 0x00, - 0x58, 0x5f, 0x26, 0x81, 0xf7, 0x01, 0x4e, 0x8a, 0x75, 0xb4, 0x25, 0x00, - 0x48, 0x01, 0x02, 0xb2, 0x25, 0x40, 0x48, 0x98, 0x38, 0x0e, 0x26, 0x00, - 0x04, 0x8e, 0xe5, 0x12, 0x52, 0xad, 0x4e, 0x7f, 0xf5, 0x01, 0x44, 0x37, - 0x70, 0xdf, 0x26, 0x00, 0x57, 0x08, 0x2e, 0xd6, 0x26, 0x40, 0x47, 0x9d, - 0x3f, 0x97, 0xf7, 0x01, 0x47, 0x75, 0x07, 0x9d, 0xf7, 0x01, 0x46, 0xdb, - 0x04, 0x8c, 0xf7, 0x41, 0x4e, 0xb4, 0x6e, 0x00, 0x27, 0x00, 0x47, 0xc8, - 0x39, 0x02, 0x27, 0x00, 0x4a, 0xab, 0x59, 0x17, 0x26, 0x00, 0x53, 0x2b, - 0x45, 0x71, 0xf5, 0x01, 0x0e, 0xc0, 0x72, 0x5b, 0xad, 0x34, 0x46, 0xeb, - 0xd3, 0xc7, 0x26, 0x00, 0x49, 0x67, 0xb4, 0x60, 0x26, 0x00, 0x45, 0xdc, - 0x04, 0xa0, 0x25, 0x80, 0x0c, 0x43, 0x8c, 0x11, 0x05, 0x26, 0x00, 0x4c, - 0x8c, 0x8e, 0x00, 0x26, 0x40, 0x80, 0x01, 0xff, 0x46, 0x8c, 0x85, 0x32, - 0xf5, 0x01, 0x47, 0x5e, 0x62, 0xc0, 0x2b, 0x00, 0x48, 0x85, 0xbc, 0xf9, - 0x23, 0x40, 0x04, 0x3e, 0x06, 0x06, 0x4a, 0x9e, 0x8d, 0x3b, 0x26, 0x40, - 0x47, 0x9d, 0x3f, 0x29, 0x2b, 0x00, 0x47, 0x75, 0x07, 0x2a, 0x2b, 0x00, - 0xb3, 0x01, 0xff, 0x45, 0xdc, 0x04, 0xaa, 0x25, 0x00, 0x43, 0x8c, 0x11, - 0x51, 0x2b, 0x40, 0x46, 0x00, 0x04, 0x84, 0xf7, 0x01, 0x46, 0xdb, 0x04, - 0x8d, 0xf7, 0x41, 0x48, 0x14, 0x42, 0xac, 0x25, 0x00, 0x04, 0xc9, 0x00, - 0x06, 0x46, 0x69, 0xd4, 0xf6, 0xf3, 0x41, 0x0a, 0x9b, 0x01, 0x56, 0x0a, - 0x4b, 0x0a, 0x1e, 0x06, 0xa9, 0x01, 0x01, 0xff, 0x45, 0xce, 0x00, 0xa1, - 0x27, 0x80, 0x0c, 0x46, 0x64, 0x1f, 0x4d, 0x20, 0x00, 0x55, 0xd5, 0x01, - 0x9e, 0x2b, 0x40, 0x44, 0xe6, 0x01, 0xa4, 0x27, 0x40, 0x4f, 0xb5, 0x65, - 0xe9, 0x23, 0x80, 0x27, 0x58, 0x5f, 0x26, 0x82, 0xf7, 0x01, 0xb0, 0x13, - 0x4e, 0x8a, 0x75, 0xb8, 0x25, 0x00, 0x48, 0x01, 0x02, 0xb6, 0x25, 0xc0, - 0x00, 0x59, 0x9e, 0x20, 0xef, 0x23, 0x40, 0x47, 0xfe, 0xbf, 0x53, 0x2b, - 0x00, 0x46, 0x54, 0x44, 0xba, 0x25, 0x40, 0x52, 0x4c, 0x1c, 0xed, 0x23, - 0x40, 0x4e, 0xf9, 0x23, 0x9d, 0xf5, 0x01, 0x45, 0xe7, 0x0e, 0x1b, 0x26, - 0x40, 0x4c, 0xe4, 0x84, 0xb0, 0x25, 0x00, 0x02, 0x92, 0x01, 0x06, 0x46, - 0xa6, 0xca, 0x88, 0xf5, 0x41, 0x44, 0x43, 0x2f, 0xf2, 0xf3, 0x01, 0x45, - 0x00, 0xc0, 0x1f, 0x2b, 0x40, 0x06, 0x9c, 0x03, 0x06, 0x4a, 0x1f, 0xa6, - 0xb8, 0x26, 0x40, 0xa4, 0x4d, 0xac, 0x38, 0x57, 0x0b, 0x2d, 0xf5, 0x23, - 0x80, 0x2b, 0xb3, 0x0d, 0x54, 0x20, 0x41, 0xf6, 0x23, 0xc0, 0x00, 0x48, - 0x5d, 0x62, 0xc5, 0x2b, 0x40, 0x05, 0x3d, 0x06, 0x06, 0x45, 0xdc, 0x04, - 0xfc, 0x25, 0x40, 0x47, 0x9d, 0x3f, 0x99, 0xf7, 0x01, 0x47, 0x75, 0x07, - 0x9f, 0xf7, 0x01, 0x46, 0xdb, 0x04, 0xfe, 0x25, 0x40, 0x48, 0x5d, 0x62, - 0xc8, 0x2b, 0x40, 0x55, 0x87, 0x36, 0xf4, 0x23, 0x80, 0x06, 0x46, 0x57, - 0x07, 0x27, 0x2b, 0x40, 0x48, 0x5d, 0x62, 0xc7, 0x2b, 0x40, 0x46, 0x9e, - 0x3f, 0x25, 0x2b, 0x00, 0x55, 0xd9, 0x2f, 0xf7, 0x23, 0xc0, 0x00, 0x48, - 0x5d, 0x62, 0xc6, 0x2b, 0x40, 0x05, 0x10, 0x1a, 0x70, 0x03, 0xc4, 0x00, - 0x19, 0xaf, 0x01, 0xff, 0x04, 0x15, 0x01, 0x06, 0x45, 0x58, 0x07, 0xeb, - 0x29, 0x40, 0x4d, 0x4e, 0x31, 0xe3, 0x25, 0x00, 0x4e, 0x69, 0x26, 0xe2, - 0x25, 0x40, 0x80, 0x3a, 0x0a, 0x4b, 0x0a, 0x11, 0x06, 0xa9, 0x01, 0x01, - 0xff, 0x46, 0x64, 0x1f, 0x4c, 0x20, 0x00, 0x55, 0xd5, 0x01, 0x9c, 0x2b, - 0x40, 0x4f, 0xb5, 0x65, 0xea, 0x23, 0x80, 0x18, 0x58, 0x5f, 0x26, 0x80, - 0xf7, 0x01, 0x47, 0x53, 0x44, 0xc4, 0x25, 0x00, 0x4e, 0x8a, 0x75, 0xc2, - 0x25, 0x00, 0x48, 0x01, 0x02, 0xc0, 0x25, 0x40, 0x52, 0x4c, 0x1c, 0xee, - 0x23, 0x40, 0x4a, 0xe5, 0xa3, 0xd8, 0x26, 0x00, 0x09, 0x9c, 0x01, 0x01, - 0xff, 0x4e, 0xf9, 0x23, 0x9c, 0xf5, 0x01, 0x45, 0xe7, 0x0e, 0x1a, 0x26, - 0x40, 0x46, 0x00, 0x04, 0x24, 0x2b, 0x00, 0x46, 0xdb, 0x04, 0x1b, 0x2b, - 0x40, 0x55, 0x22, 0x35, 0xaa, 0xf5, 0x01, 0xa5, 0x0f, 0xaf, 0x01, 0xff, - 0x50, 0x79, 0x60, 0x2c, 0x2b, 0x00, 0x47, 0xc0, 0xcc, 0xd7, 0x29, 0x40, - 0x43, 0x2c, 0x01, 0xa4, 0xf5, 0x81, 0x06, 0x45, 0x5f, 0xc7, 0x22, 0x2b, - 0x40, 0x45, 0xb7, 0x24, 0x65, 0x26, 0x40, 0xac, 0x0f, 0xaf, 0x01, 0xff, - 0x44, 0xcd, 0x1b, 0xbf, 0xf5, 0x01, 0x4f, 0x8f, 0x6d, 0x26, 0x27, 0x40, - 0x42, 0x23, 0x02, 0x91, 0x26, 0x00, 0x46, 0x06, 0x0e, 0x3f, 0x27, 0x40, - 0x46, 0x9e, 0x3f, 0xc6, 0x25, 0x80, 0x45, 0x03, 0xa6, 0x01, 0x19, 0xb2, - 0x01, 0xff, 0x07, 0x4e, 0xc0, 0x06, 0x45, 0xc2, 0xde, 0x22, 0xf3, 0x41, - 0x44, 0xc9, 0x30, 0xc3, 0x26, 0x00, 0x43, 0x60, 0x16, 0xc2, 0x26, 0x40, - 0x58, 0xef, 0x23, 0xa3, 0xf5, 0x01, 0x0a, 0x4b, 0x0a, 0x06, 0x5b, 0xcf, - 0x01, 0x9f, 0x2b, 0x40, 0x4f, 0xb5, 0x65, 0xec, 0x23, 0x00, 0x58, 0x5f, - 0x26, 0x83, 0xf7, 0x01, 0x4e, 0x8a, 0x75, 0xbe, 0x25, 0x00, 0x48, 0x01, - 0x02, 0xbc, 0x25, 0x40, 0x80, 0x01, 0xff, 0x47, 0x5e, 0x62, 0xc1, 0x2b, - 0x00, 0x4d, 0xc4, 0x7e, 0x56, 0x27, 0x00, 0x48, 0x6d, 0xbf, 0xde, 0x2b, - 0x00, 0x44, 0xb8, 0x24, 0x66, 0x26, 0x00, 0x4f, 0xf8, 0x6d, 0xea, 0x29, - 0x40, 0x50, 0x99, 0x5c, 0x2c, 0x27, 0x00, 0x05, 0xd6, 0x80, 0x79, 0x45, - 0x01, 0x04, 0xcf, 0x25, 0x80, 0x52, 0x48, 0x2d, 0xbe, 0x63, 0x26, 0x00, - 0x4e, 0x0c, 0x75, 0xe8, 0x26, 0x00, 0x06, 0x99, 0x3c, 0x01, 0xff, 0x0e, - 0xe5, 0x03, 0x31, 0x0e, 0x7a, 0x72, 0x21, 0x0f, 0xdc, 0x6b, 0x11, 0x0c, - 0xa1, 0x17, 0x01, 0xff, 0x4f, 0x67, 0x06, 0xaa, 0x2b, 0x00, 0x50, 0xb3, - 0x02, 0xab, 0x2b, 0x40, 0x4f, 0xae, 0x0a, 0xaf, 0x2b, 0x00, 0x4d, 0x59, - 0x1e, 0xad, 0x2b, 0x40, 0x4f, 0xae, 0x0a, 0xae, 0x2b, 0x00, 0x4d, 0x59, - 0x1e, 0xac, 0x2b, 0x40, 0x4f, 0x67, 0x06, 0xa8, 0x2b, 0x00, 0x50, 0xb3, - 0x02, 0xa9, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xd3, 0xa1, 0xfa, 0x23, - 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0xe8, 0x3c, 0xed, 0x29, 0x00, - 0x4e, 0xcc, 0x76, 0x89, 0x26, 0x00, 0x4f, 0xe9, 0x6d, 0x88, 0x26, 0x40, - 0x46, 0xe9, 0xcf, 0x5d, 0x26, 0x80, 0xe7, 0x01, 0x4a, 0x83, 0xa1, 0x49, - 0xfa, 0x81, 0xd9, 0x01, 0xab, 0x73, 0x44, 0xe6, 0xe6, 0x5f, 0x26, 0x80, - 0x5b, 0x45, 0xca, 0xb4, 0x5b, 0x26, 0x80, 0x43, 0x44, 0x36, 0xe7, 0x5c, - 0x26, 0x80, 0x2b, 0x07, 0x2d, 0x09, 0x01, 0xff, 0x46, 0xe9, 0xcf, 0x27, - 0xfa, 0x01, 0xab, 0x12, 0x44, 0xe6, 0xe6, 0x29, 0xfa, 0x01, 0x45, 0xca, - 0xb4, 0x25, 0xfa, 0x01, 0x44, 0x36, 0xe7, 0x26, 0xfa, 0x41, 0x43, 0xa1, - 0x01, 0x24, 0xfa, 0x01, 0x45, 0x39, 0x94, 0x28, 0xfa, 0x41, 0x09, 0x5c, - 0x29, 0x01, 0xff, 0x4e, 0x65, 0x29, 0x11, 0xfa, 0x01, 0x5b, 0x89, 0x1b, - 0x3b, 0xfa, 0x41, 0x09, 0x5c, 0x29, 0x01, 0xff, 0x4e, 0x65, 0x29, 0x10, - 0xfa, 0x01, 0x5b, 0x89, 0x1b, 0x3a, 0xfa, 0x41, 0x09, 0x5c, 0x29, 0x01, - 0xff, 0x4e, 0x65, 0x29, 0x14, 0xfa, 0x01, 0x5b, 0x89, 0x1b, 0x3e, 0xfa, - 0x41, 0x43, 0xa1, 0x01, 0x5a, 0x26, 0x80, 0x4c, 0x45, 0x39, 0x94, 0x5e, - 0x26, 0xc0, 0x00, 0x09, 0x5c, 0x29, 0x15, 0x8d, 0x01, 0xff, 0x46, 0xe9, - 0xcf, 0x53, 0xfa, 0x01, 0x45, 0xca, 0xb4, 0x51, 0xfa, 0x01, 0x44, 0x36, - 0xe7, 0x52, 0xfa, 0x41, 0x52, 0x37, 0x4c, 0x07, 0xfa, 0x01, 0x4e, 0x65, - 0x29, 0x13, 0xfa, 0x01, 0x5f, 0xe5, 0x0f, 0x1c, 0xfa, 0x01, 0xb4, 0x01, - 0xff, 0x5c, 0x19, 0x16, 0x46, 0xfa, 0x01, 0x0b, 0x8a, 0x1b, 0x01, 0xff, - 0x4f, 0x95, 0x1b, 0x3d, 0xfa, 0x01, 0x53, 0x6f, 0x48, 0x31, 0xfa, 0x41, - 0x09, 0x5c, 0x29, 0x01, 0xff, 0x4e, 0x65, 0x29, 0x0f, 0xfa, 0x01, 0x5b, - 0x89, 0x1b, 0x39, 0xfa, 0x41, 0x57, 0x5c, 0x29, 0x4c, 0xfa, 0x41, 0x09, - 0x5c, 0x29, 0x01, 0xff, 0x4e, 0x65, 0x29, 0x12, 0xfa, 0x01, 0x5b, 0x89, - 0x1b, 0x3c, 0xfa, 0x41, 0x04, 0x84, 0x22, 0x4d, 0x02, 0xa3, 0x01, 0x3d, - 0x44, 0xca, 0xe5, 0x59, 0xf4, 0x01, 0x02, 0x3f, 0x06, 0x27, 0x4c, 0x5c, - 0x8b, 0x23, 0x26, 0x00, 0xb2, 0x15, 0x43, 0xee, 0x1a, 0xac, 0xf9, 0x01, - 0xb4, 0x01, 0xff, 0x49, 0x2e, 0xae, 0xbf, 0x20, 0x00, 0x47, 0x98, 0x89, - 0xe6, 0xfa, 0x41, 0xe4, 0x26, 0xf4, 0x01, 0x4a, 0x0d, 0xa9, 0x82, 0xf3, - 0x41, 0x46, 0xc7, 0xd0, 0xe2, 0xf9, 0x01, 0x45, 0x79, 0xdc, 0xb1, 0xf3, - 0x41, 0x4f, 0xa0, 0x6b, 0xf9, 0x29, 0x00, 0x47, 0x67, 0x2d, 0xf8, 0x29, - 0x40, 0xe5, 0xb2, 0xf6, 0x01, 0x43, 0x8f, 0x21, 0xb4, 0xf6, 0x41, 0xa4, - 0x92, 0x04, 0x0b, 0x1d, 0x94, 0x85, 0x04, 0x52, 0xd9, 0x4c, 0x6c, 0x1c, - 0x01, 0x07, 0xf1, 0x04, 0xee, 0x01, 0x07, 0xbf, 0x35, 0x6d, 0x05, 0xdb, - 0x02, 0x44, 0x0b, 0x5b, 0x70, 0x06, 0x4e, 0xe4, 0x77, 0x43, 0x1c, 0x41, - 0xa1, 0x2c, 0xe5, 0x38, 0x1c, 0x01, 0xe9, 0x30, 0x1c, 0x81, 0x1f, 0xef, - 0x3a, 0x1c, 0x01, 0xf5, 0x32, 0x1c, 0x81, 0x12, 0x08, 0x76, 0xb7, 0x01, - 0xff, 0xec, 0x36, 0x1c, 0x01, 0xf2, 0x34, 0x1c, 0xc1, 0x00, 0xf2, 0x35, - 0x1c, 0x41, 0xf5, 0x33, 0x1c, 0x41, 0xe9, 0x31, 0x1c, 0x41, 0xe1, 0x2f, - 0x1c, 0x01, 0xe9, 0x39, 0x1c, 0x01, 0xf5, 0x3b, 0x1c, 0x41, 0xa1, 0x17, - 0x4b, 0x3b, 0x21, 0x3c, 0x1c, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, - 0x49, 0x21, 0x3f, 0x1c, 0x01, 0x45, 0x69, 0x46, 0x3e, 0x1c, 0x41, 0x47, - 0x5c, 0x14, 0x3d, 0x1c, 0x01, 0x47, 0x3a, 0x81, 0x40, 0x1c, 0x41, 0x45, - 0xd1, 0x09, 0x61, 0x1c, 0x81, 0x72, 0xa6, 0x53, 0x44, 0xb8, 0x27, 0x62, - 0x1c, 0x81, 0x46, 0x43, 0xcd, 0x09, 0x5a, 0x1c, 0x01, 0xb3, 0x24, 0xb4, - 0x01, 0xff, 0x42, 0x92, 0x01, 0x63, 0x1c, 0x01, 0xa8, 0x0d, 0xb7, 0x01, - 0xff, 0x44, 0x98, 0x1b, 0x64, 0x1c, 0x01, 0xef, 0x5b, 0x1c, 0x41, 0x44, - 0xf3, 0x0f, 0x65, 0x1c, 0x01, 0x43, 0x26, 0x01, 0x5c, 0x1c, 0x41, 0x44, - 0x96, 0x1b, 0x60, 0x1c, 0x81, 0x0d, 0x42, 0x30, 0x27, 0x5f, 0x1c, 0xc1, - 0x00, 0x42, 0xf5, 0x0f, 0x68, 0x1c, 0x41, 0x42, 0xf5, 0x0f, 0x69, 0x1c, - 0x41, 0x42, 0xf5, 0x0f, 0x6b, 0x1c, 0x41, 0xa9, 0x0f, 0xaf, 0x01, 0xff, - 0x43, 0xf4, 0x0f, 0x66, 0x1c, 0x01, 0x42, 0x42, 0x00, 0x5d, 0x1c, 0x41, - 0x43, 0xcf, 0x47, 0x67, 0x1c, 0x01, 0x42, 0x32, 0x00, 0x5e, 0x1c, 0x41, - 0xf9, 0x6a, 0x1c, 0x41, 0xe1, 0x00, 0x1c, 0x81, 0xfa, 0x01, 0xa2, 0xed, - 0x01, 0xa3, 0xe0, 0x01, 0xa4, 0xc7, 0x01, 0xe5, 0x0a, 0x1c, 0x01, 0xa7, - 0xb6, 0x01, 0x42, 0x22, 0x00, 0x2e, 0x1c, 0x01, 0xe9, 0x02, 0x1c, 0x81, - 0xa6, 0x01, 0xaa, 0x99, 0x01, 0xab, 0x8c, 0x01, 0x42, 0x74, 0x00, 0x29, - 0x1c, 0x01, 0x42, 0x6c, 0x00, 0x26, 0x1c, 0x01, 0xae, 0x68, 0xef, 0x0c, - 0x1c, 0x01, 0xb0, 0x58, 0x42, 0x71, 0x00, 0x28, 0x1c, 0x01, 0xb3, 0x40, - 0xb4, 0x27, 0xf5, 0x04, 0x1c, 0x81, 0x1e, 0xb6, 0x06, 0x42, 0x20, 0x20, - 0x27, 0x1c, 0x41, 0xe1, 0x2a, 0x1c, 0x01, 0x07, 0x77, 0xb7, 0x01, 0xff, - 0xec, 0x08, 0x1c, 0x01, 0xf2, 0x06, 0x1c, 0xc1, 0x00, 0xf2, 0x07, 0x1c, - 0x41, 0xf5, 0x05, 0x1c, 0x41, 0xe1, 0x1d, 0x1c, 0x01, 0x42, 0x22, 0x00, - 0x1e, 0x1c, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x18, 0x1c, 0x01, 0x42, 0x22, - 0x00, 0x19, 0x1c, 0x41, 0xe1, 0x2d, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x2b, - 0x1c, 0x01, 0x42, 0x45, 0x05, 0x2c, 0x1c, 0x41, 0xe1, 0x22, 0x1c, 0x01, - 0x42, 0x22, 0x00, 0x23, 0x1c, 0x41, 0xe1, 0x21, 0x1c, 0x01, 0x42, 0x24, - 0x02, 0x12, 0x1c, 0x01, 0x42, 0x2f, 0x04, 0x1c, 0x1c, 0x01, 0x42, 0x20, - 0x20, 0x17, 0x1c, 0x41, 0xe1, 0x0e, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x0f, - 0x1c, 0x41, 0xe1, 0x15, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x16, 0x1c, 0x41, - 0xe9, 0x03, 0x1c, 0x41, 0xe1, 0x10, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x11, - 0x1c, 0x41, 0xe1, 0x1f, 0x1c, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x20, - 0x1c, 0x41, 0xe1, 0x1a, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x1b, 0x1c, 0x41, - 0xe1, 0x13, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x14, 0x1c, 0x41, 0xe1, 0x24, - 0x1c, 0x01, 0x42, 0x22, 0x00, 0x25, 0x1c, 0x41, 0xe1, 0x01, 0x1c, 0x01, - 0xe9, 0x0b, 0x1c, 0x01, 0xf5, 0x0d, 0x1c, 0x41, 0xd1, 0x44, 0x1c, 0x01, - 0xd2, 0x45, 0x1c, 0x41, 0x44, 0x0b, 0x1e, 0x41, 0x1c, 0x01, 0x05, 0xf5, - 0x05, 0x06, 0x4b, 0xcc, 0x98, 0x42, 0x1c, 0x41, 0x45, 0xd1, 0x09, 0x58, - 0x1c, 0x01, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x59, 0x1c, 0x01, 0x43, 0xcd, - 0x09, 0x51, 0x1c, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x50, - 0x1c, 0x41, 0x44, 0x25, 0x01, 0x53, 0x1c, 0x01, 0x42, 0x15, 0x02, 0x52, - 0x1c, 0x41, 0x44, 0x96, 0x1b, 0x57, 0x1c, 0x01, 0x42, 0x30, 0x27, 0x56, - 0x1c, 0x41, 0x43, 0xd7, 0x04, 0x55, 0x1c, 0x01, 0x43, 0xfb, 0x05, 0x54, - 0x1c, 0x41, 0xa1, 0xdc, 0x05, 0x45, 0x49, 0xda, 0x35, 0x22, 0x00, 0xe4, - 0xcf, 0xf6, 0x01, 0xa5, 0xc3, 0x05, 0x42, 0x3f, 0x06, 0x14, 0xf5, 0x81, - 0xa1, 0x05, 0xae, 0x14, 0xb4, 0x06, 0x4a, 0x4d, 0xaa, 0xc3, 0xf9, 0x41, - 0x47, 0xf6, 0x06, 0x36, 0x21, 0x00, 0x44, 0xc9, 0x08, 0x6c, 0x22, 0x40, - 0x05, 0xe5, 0xac, 0x1b, 0xb4, 0x0d, 0x49, 0x2a, 0xb8, 0x2c, 0x23, 0xc0, - 0x00, 0x4c, 0x53, 0x20, 0xe3, 0x23, 0x40, 0x69, 0x95, 0x01, 0x5e, 0x2b, - 0x00, 0x45, 0x86, 0xde, 0x71, 0xf3, 0x41, 0xa1, 0xd7, 0x04, 0x09, 0x84, - 0x3c, 0xa5, 0x04, 0x06, 0xf4, 0x05, 0xde, 0x03, 0x4a, 0x0f, 0xa2, 0xfb, - 0x09, 0x00, 0x46, 0xad, 0xd2, 0xfa, 0x09, 0x00, 0x07, 0xf1, 0x04, 0x8c, - 0x01, 0x06, 0x72, 0x79, 0x7c, 0xb3, 0x44, 0x0b, 0x5b, 0x70, 0x01, 0xff, - 0xa1, 0x31, 0xe5, 0xc7, 0x09, 0x00, 0xe9, 0xbf, 0x09, 0x80, 0x24, 0xef, - 0xcb, 0x09, 0x00, 0xf5, 0xc1, 0x09, 0x80, 0x17, 0x08, 0x76, 0xb7, 0x01, - 0xff, 0xec, 0xe2, 0x09, 0x80, 0x09, 0xf2, 0xc3, 0x09, 0xc0, 0x00, 0xf2, - 0xc4, 0x09, 0x40, 0xec, 0xe3, 0x09, 0x40, 0xf5, 0xc2, 0x09, 0x40, 0xe9, - 0xc0, 0x09, 0x40, 0xe1, 0xbe, 0x09, 0x00, 0xe9, 0xc8, 0x09, 0x00, 0xf5, - 0xcc, 0x09, 0x40, 0x4a, 0x3f, 0x9f, 0xfe, 0x09, 0x00, 0x04, 0xdc, 0x02, - 0x01, 0xff, 0xa1, 0x1d, 0x4b, 0x3b, 0x21, 0x81, 0x09, 0x00, 0x45, 0xab, - 0x3a, 0xbc, 0x09, 0x00, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x49, 0x21, - 0xcd, 0x09, 0x00, 0x45, 0x69, 0x46, 0x83, 0x09, 0x40, 0x47, 0x5c, 0x14, - 0x82, 0x09, 0x00, 0x47, 0x3a, 0x81, 0xbd, 0x09, 0x40, 0x44, 0xb9, 0x00, - 0xf2, 0x09, 0x00, 0x44, 0xdb, 0x02, 0xf3, 0x09, 0x40, 0xe1, 0x85, 0x09, - 0x80, 0xaf, 0x02, 0xa2, 0xa2, 0x02, 0xa3, 0x95, 0x02, 0xa4, 0xfc, 0x01, - 0xe5, 0x8f, 0x09, 0x00, 0xa7, 0xeb, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x09, - 0x00, 0xe9, 0x87, 0x09, 0x80, 0xdb, 0x01, 0xaa, 0xce, 0x01, 0xab, 0xba, - 0x01, 0x42, 0x74, 0x00, 0xb2, 0x09, 0x00, 0x42, 0x6c, 0x00, 0xae, 0x09, - 0x00, 0xae, 0x95, 0x01, 0xef, 0x93, 0x09, 0x00, 0xb0, 0x84, 0x01, 0xb2, - 0x60, 0xb3, 0x4e, 0xb4, 0x35, 0xf5, 0x89, 0x09, 0x80, 0x2c, 0xb6, 0x0d, - 0xb9, 0x01, 0xff, 0xe1, 0xaf, 0x09, 0x00, 0x42, 0x20, 0x20, 0xdf, 0x09, - 0x40, 0x4d, 0x5d, 0x7b, 0xfc, 0x09, 0x00, 0x07, 0x77, 0xb7, 0x01, 0xff, - 0xec, 0x8c, 0x09, 0x80, 0x09, 0xf2, 0x8b, 0x09, 0xc0, 0x00, 0xf2, 0xe0, - 0x09, 0x40, 0xec, 0xe1, 0x09, 0x40, 0xf5, 0x8a, 0x09, 0x40, 0xe1, 0xa4, - 0x09, 0x00, 0x42, 0x22, 0x00, 0xa5, 0x09, 0x00, 0xb4, 0x01, 0xff, 0xe1, - 0x9f, 0x09, 0x00, 0x42, 0x22, 0x00, 0xa0, 0x09, 0x40, 0xe1, 0xb8, 0x09, - 0x00, 0x42, 0x22, 0x00, 0xb6, 0x09, 0x00, 0x42, 0x45, 0x05, 0xb7, 0x09, - 0x40, 0xe1, 0xb0, 0x09, 0x80, 0x0c, 0x42, 0x22, 0x00, 0xdd, 0x09, 0x00, - 0x42, 0x71, 0x00, 0xdc, 0x09, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, - 0xf8, 0x72, 0xf1, 0x09, 0x00, 0x4f, 0x75, 0x69, 0xf0, 0x09, 0x40, 0xe1, - 0xaa, 0x09, 0x00, 0x42, 0x22, 0x00, 0xab, 0x09, 0x40, 0xe1, 0xa8, 0x09, - 0x00, 0x42, 0x24, 0x02, 0x99, 0x09, 0x00, 0x42, 0x2f, 0x04, 0xa3, 0x09, - 0x00, 0x42, 0x20, 0x20, 0x9e, 0x09, 0x40, 0xe1, 0x95, 0x09, 0x00, 0x42, - 0x22, 0x00, 0x96, 0x09, 0xc0, 0x00, 0x46, 0xaf, 0xd3, 0xce, 0x09, 0x40, - 0xe1, 0x9c, 0x09, 0x00, 0x42, 0x22, 0x00, 0x9d, 0x09, 0x40, 0xe9, 0x88, - 0x09, 0x40, 0xe1, 0x97, 0x09, 0x00, 0x42, 0x22, 0x00, 0x98, 0x09, 0x40, - 0xe1, 0xa6, 0x09, 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa7, 0x09, 0x40, - 0xe1, 0xa1, 0x09, 0x00, 0x42, 0x22, 0x00, 0xa2, 0x09, 0x40, 0xe1, 0x9a, - 0x09, 0x00, 0x42, 0x22, 0x00, 0x9b, 0x09, 0x40, 0xe1, 0xac, 0x09, 0x00, - 0x42, 0x22, 0x00, 0xad, 0x09, 0x40, 0xe1, 0x86, 0x09, 0x00, 0xe9, 0x90, - 0x09, 0x00, 0xf5, 0x94, 0x09, 0x40, 0x45, 0xd1, 0x09, 0xee, 0x09, 0x00, - 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0xef, 0x09, 0x00, 0x43, 0xcd, 0x09, 0xe7, - 0x09, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xe6, 0x09, 0x40, - 0x44, 0x25, 0x01, 0xe9, 0x09, 0x00, 0x42, 0x15, 0x02, 0xe8, 0x09, 0x40, - 0x44, 0x96, 0x1b, 0xed, 0x09, 0x00, 0x42, 0x30, 0x27, 0xec, 0x09, 0x40, - 0x43, 0xd7, 0x04, 0xeb, 0x09, 0x00, 0x43, 0xfb, 0x05, 0xea, 0x09, 0x40, - 0x53, 0x76, 0x43, 0xf9, 0x09, 0x00, 0x0a, 0x39, 0x7f, 0x01, 0xff, 0x44, - 0xfa, 0x05, 0xf7, 0x09, 0x00, 0x43, 0xcd, 0x09, 0xf4, 0x09, 0x80, 0x0f, - 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xf6, 0x09, 0x00, 0x42, 0x15, 0x02, - 0xf5, 0x09, 0x40, 0x5a, 0x2a, 0x1c, 0xf8, 0x09, 0x40, 0x50, 0x35, 0x52, - 0xfd, 0x09, 0x00, 0x43, 0xff, 0x7f, 0x80, 0x09, 0x00, 0x4d, 0x25, 0x6f, - 0xd7, 0x09, 0x40, 0x80, 0x06, 0x48, 0xfd, 0xbc, 0xce, 0xf6, 0x41, 0x46, - 0x93, 0xd4, 0xd1, 0xfa, 0x01, 0x46, 0xf7, 0x06, 0x7e, 0x23, 0x00, 0x58, - 0xcf, 0x28, 0x15, 0xf5, 0x41, 0x45, 0x86, 0xad, 0x7a, 0xf3, 0x01, 0x43, - 0xbd, 0x01, 0xb2, 0xfa, 0x41, 0x50, 0x49, 0x5b, 0xd6, 0xf3, 0x01, 0x04, - 0x40, 0x97, 0x20, 0x42, 0x5f, 0x01, 0xd8, 0xfa, 0x01, 0xb2, 0x0c, 0x4a, - 0x2b, 0xa9, 0x93, 0xf4, 0x01, 0x43, 0x32, 0x00, 0xab, 0xf9, 0x41, 0x45, - 0xec, 0x06, 0x3b, 0xf4, 0x01, 0x4a, 0xb1, 0xa0, 0xd4, 0xf9, 0x41, 0x57, - 0x14, 0x2a, 0x9c, 0xf3, 0x01, 0x58, 0x0f, 0x25, 0x9d, 0xf3, 0x01, 0x4c, - 0xe8, 0x86, 0x6b, 0x26, 0x00, 0x4f, 0x63, 0x6c, 0x6c, 0x26, 0x40, 0x42, - 0x08, 0x00, 0x76, 0xf4, 0x81, 0xeb, 0x2f, 0xa3, 0xad, 0x2f, 0xa4, 0x9e, - 0x2f, 0xa7, 0x89, 0x2f, 0xac, 0x85, 0x27, 0x04, 0xa8, 0x8a, 0xca, 0x05, - 0xae, 0x99, 0x05, 0xb2, 0x82, 0x05, 0xb3, 0x80, 0x03, 0xf4, 0x87, 0xf9, - 0xc1, 0x00, 0x03, 0x4a, 0x47, 0x11, 0xe8, 0xc0, 0xf6, 0x81, 0x06, 0x44, - 0xb5, 0xcf, 0x0b, 0xf5, 0x41, 0x43, 0x60, 0xac, 0xc1, 0xf6, 0x41, 0x0f, - 0x54, 0x2f, 0xd7, 0x02, 0x07, 0xf1, 0x04, 0x6b, 0x03, 0xcf, 0x3e, 0x5b, - 0xb3, 0x33, 0x0b, 0x5b, 0x70, 0x01, 0xff, 0xe5, 0xe7, 0x1b, 0x80, 0x25, - 0xe9, 0xea, 0x1b, 0x00, 0x05, 0x1a, 0xc8, 0x15, 0xef, 0xec, 0x1b, 0x00, - 0x48, 0xe5, 0xbf, 0xe8, 0x1b, 0x00, 0xf5, 0xee, 0x1b, 0xc0, 0x00, 0x52, - 0xaf, 0x49, 0xef, 0x1b, 0x40, 0xe9, 0xeb, 0x1b, 0x00, 0xef, 0xed, 0x1b, - 0x40, 0xe5, 0xe9, 0x1b, 0x40, 0x49, 0xe3, 0xb0, 0xe6, 0x1b, 0x00, 0x0c, - 0x34, 0x8f, 0x01, 0xff, 0x45, 0xec, 0xdc, 0xfe, 0x1b, 0x00, 0x48, 0x9d, - 0xbe, 0xfc, 0x1b, 0x00, 0xb0, 0x01, 0xff, 0x47, 0xcb, 0xc4, 0xff, 0x1b, - 0x00, 0x49, 0x10, 0xb1, 0xfd, 0x1b, 0x40, 0x45, 0xcd, 0xc4, 0xf2, 0x1b, - 0x00, 0x47, 0xa9, 0xc9, 0xf3, 0x1b, 0x40, 0xe1, 0xc0, 0x1b, 0x00, 0x42, - 0x16, 0x00, 0xc5, 0x1b, 0x00, 0x42, 0x37, 0x00, 0xe1, 0x1b, 0x00, 0x42, - 0x68, 0x0f, 0xd1, 0x1b, 0x00, 0x42, 0x24, 0x02, 0xce, 0x1b, 0x00, 0x42, - 0x22, 0x00, 0xc2, 0x1b, 0x00, 0xe9, 0xe4, 0x1b, 0x00, 0x42, 0x77, 0x24, - 0xd0, 0x1b, 0x00, 0x47, 0x1a, 0xc8, 0xc6, 0x1b, 0x00, 0x42, 0x74, 0x00, - 0xde, 0x1b, 0x00, 0xad, 0x8b, 0x01, 0xae, 0x6d, 0x42, 0xc1, 0x08, 0xc7, - 0x1b, 0x80, 0x60, 0x42, 0x71, 0x00, 0xd2, 0x1b, 0x00, 0xb3, 0x10, 0xf5, - 0xe5, 0x1b, 0x00, 0x42, 0xa9, 0x01, 0xcb, 0x1b, 0x00, 0x42, 0x20, 0x20, - 0xdb, 0x1b, 0x40, 0xe1, 0xd8, 0x1b, 0x00, 0x0a, 0xb5, 0x49, 0x06, 0x4a, - 0xa1, 0xa6, 0xd6, 0x1b, 0x40, 0xe1, 0xc1, 0x1b, 0x00, 0x42, 0x24, 0x02, - 0xcf, 0x1b, 0x00, 0x42, 0x22, 0x00, 0xc3, 0x1b, 0x00, 0x42, 0x74, 0x00, - 0xdf, 0x1b, 0x00, 0x42, 0x6c, 0x00, 0xd5, 0x1b, 0x00, 0x42, 0xc1, 0x08, - 0xc8, 0x1b, 0x00, 0x42, 0x71, 0x00, 0xd3, 0x1b, 0x00, 0x42, 0x45, 0x05, - 0xd9, 0x1b, 0x00, 0x42, 0xa9, 0x01, 0xcc, 0x1b, 0x00, 0x42, 0x20, 0x20, - 0xdc, 0x1b, 0x40, 0x47, 0x52, 0xc8, 0xcd, 0x1b, 0x40, 0xe1, 0xc9, 0x1b, - 0x00, 0x42, 0x68, 0x0f, 0xe2, 0x1b, 0x00, 0x42, 0x24, 0x02, 0xdd, 0x1b, - 0x00, 0x4a, 0x51, 0xa6, 0xd7, 0x1b, 0x00, 0x42, 0x20, 0x20, 0xe0, 0x1b, - 0x40, 0xe1, 0xd4, 0x1b, 0x80, 0x06, 0x42, 0x16, 0x00, 0xe3, 0x1b, 0x40, - 0x09, 0xdb, 0xb2, 0x01, 0xff, 0x42, 0x22, 0x00, 0xc4, 0x1b, 0x00, 0x42, - 0x2f, 0x04, 0xca, 0x1b, 0x00, 0x42, 0x45, 0x05, 0xda, 0x1b, 0x40, 0xe8, - 0xf1, 0x1b, 0x00, 0x42, 0x1d, 0x01, 0xf0, 0x1b, 0x40, 0x45, 0x0c, 0xdb, - 0xbe, 0x26, 0x00, 0x43, 0x49, 0x08, 0xfa, 0xf9, 0x81, 0xeb, 0x01, 0x07, - 0x4d, 0xcb, 0x01, 0xff, 0x0a, 0x99, 0x53, 0xbb, 0x01, 0x49, 0xa0, 0x14, - 0xf5, 0x6a, 0x01, 0x07, 0xf1, 0x04, 0x01, 0xff, 0xe1, 0xe7, 0x6a, 0x01, - 0x42, 0x16, 0x00, 0xe2, 0x6a, 0x01, 0x42, 0x73, 0x02, 0xdf, 0x6a, 0x01, - 0xa4, 0x93, 0x01, 0xe5, 0xec, 0x6a, 0x81, 0x83, 0x01, 0x42, 0xed, 0x06, - 0xd3, 0x6a, 0x01, 0xa7, 0x6f, 0x44, 0x3b, 0xe5, 0xda, 0x6a, 0x01, 0xe9, - 0xed, 0x6a, 0x01, 0x42, 0x5c, 0x09, 0xd9, 0x6a, 0x01, 0xab, 0x53, 0x43, - 0xbb, 0x04, 0xd4, 0x6a, 0x01, 0xef, 0xe8, 0x6a, 0x81, 0x44, 0x42, 0xc1, - 0x08, 0xe5, 0x6a, 0x01, 0x42, 0xc7, 0x02, 0xd2, 0x6a, 0x01, 0x42, 0x1e, - 0x00, 0xe1, 0x6a, 0x01, 0xf5, 0xea, 0x6a, 0x81, 0x27, 0x42, 0x3a, 0x5c, - 0xe3, 0x6a, 0x01, 0x42, 0xa9, 0x01, 0xdb, 0x6a, 0x81, 0x14, 0xb9, 0x06, - 0x42, 0x0f, 0x00, 0xdc, 0x6a, 0x41, 0x43, 0xa6, 0x0f, 0xe4, 0x6a, 0x01, - 0x42, 0xf7, 0x0a, 0xd5, 0x6a, 0x41, 0x43, 0x65, 0x32, 0xe6, 0x6a, 0x41, - 0x42, 0x75, 0x06, 0xe0, 0x6a, 0x41, 0xef, 0xe9, 0x6a, 0x41, 0xe1, 0xd1, - 0x6a, 0x01, 0x43, 0x12, 0x3e, 0xd8, 0x6a, 0x41, 0x42, 0xe6, 0x06, 0xd6, - 0x6a, 0x01, 0x42, 0xc2, 0x0b, 0xdd, 0x6a, 0x41, 0xe5, 0xeb, 0x6a, 0x01, - 0x43, 0xe6, 0x1c, 0xd0, 0x6a, 0x41, 0x43, 0x42, 0xe5, 0xd7, 0x6a, 0x01, - 0xef, 0xde, 0x6a, 0x41, 0x04, 0x2a, 0x0a, 0x16, 0x03, 0x13, 0x01, 0x06, - 0x48, 0x1c, 0xac, 0xf2, 0x6a, 0x41, 0x45, 0xdc, 0x29, 0xf1, 0x6a, 0x01, - 0x49, 0x1b, 0xac, 0xf3, 0x6a, 0x41, 0x45, 0xdc, 0x29, 0xf0, 0x6a, 0x01, - 0x49, 0x12, 0xac, 0xf4, 0x6a, 0x41, 0x4d, 0x0b, 0x7a, 0xc0, 0xf3, 0x41, - 0x80, 0x06, 0x48, 0x4d, 0xba, 0x88, 0xf4, 0x41, 0x45, 0x00, 0xbb, 0xca, - 0xf4, 0x01, 0x47, 0x71, 0xc9, 0xfc, 0xf9, 0x41, 0x43, 0xa5, 0x10, 0x4c, - 0xf3, 0x01, 0x42, 0x5c, 0x09, 0x95, 0xfa, 0x01, 0xeb, 0xe6, 0xf3, 0xc1, - 0x00, 0x0a, 0xbb, 0xa5, 0x01, 0xff, 0x4b, 0xff, 0x92, 0xb5, 0xf4, 0x01, - 0x49, 0x84, 0xaf, 0xb6, 0xf4, 0x01, 0x4a, 0xe7, 0xa6, 0xb7, 0xf4, 0x01, - 0x48, 0x3c, 0x78, 0xb4, 0xf4, 0x41, 0x02, 0x18, 0x04, 0x92, 0x21, 0x49, - 0xa0, 0x14, 0xf3, 0xa6, 0x00, 0x07, 0xf1, 0x04, 0x12, 0x47, 0x55, 0xc9, - 0xf2, 0xa6, 0x00, 0x4d, 0xbd, 0x30, 0xf7, 0xa6, 0x00, 0x49, 0x90, 0xb5, - 0xf6, 0xa6, 0x40, 0xe1, 0xa0, 0xa6, 0x00, 0x42, 0x27, 0x01, 0xa4, 0xa6, - 0x00, 0xa6, 0xd3, 0x20, 0xe9, 0xa9, 0xa6, 0x00, 0xab, 0x93, 0x20, 0xac, - 0xf8, 0x1f, 0xed, 0xb3, 0xa6, 0x80, 0xc8, 0x1f, 0xae, 0xec, 0x1e, 0xef, - 0xa7, 0xa6, 0x00, 0xb0, 0x93, 0x01, 0xb2, 0x6b, 0xb3, 0x3d, 0xb4, 0x23, - 0xf5, 0xa2, 0xa6, 0x00, 0xb7, 0x13, 0xb9, 0x01, 0xff, 0xe1, 0xc2, 0xa6, - 0x00, 0x42, 0xc8, 0x8b, 0xbf, 0xa6, 0x00, 0x42, 0xef, 0x93, 0xc1, 0xa6, - 0x40, 0xe1, 0xda, 0xa6, 0x00, 0x42, 0x30, 0x12, 0xc9, 0xa6, 0x40, 0xa1, - 0x0e, 0xa5, 0x04, 0xe9, 0xe4, 0xa6, 0x40, 0xee, 0xea, 0xa6, 0x00, 0xf4, - 0xe8, 0xa6, 0x40, 0xe1, 0xb0, 0xa6, 0x00, 0xe5, 0xa6, 0xa6, 0x40, 0x44, - 0x68, 0xc3, 0xec, 0xa6, 0x00, 0x43, 0x12, 0xe1, 0xb9, 0xa6, 0x00, 0xa8, - 0x0a, 0xe9, 0xb7, 0xa6, 0x00, 0x42, 0x52, 0x6d, 0xb4, 0xa6, 0x40, 0x43, - 0x12, 0xe1, 0xb8, 0xa6, 0x00, 0x42, 0x6b, 0x25, 0xb6, 0xa6, 0x00, 0xef, - 0xd6, 0xa6, 0x00, 0xf5, 0xc0, 0xa6, 0x40, 0x42, 0xeb, 0x0d, 0xd1, 0xa6, - 0x00, 0xa5, 0x10, 0xa9, 0x04, 0xf5, 0xcc, 0xa6, 0x40, 0x42, 0x27, 0x01, - 0xad, 0xa6, 0x00, 0xe9, 0xac, 0xa6, 0x40, 0xe5, 0xa5, 0xa6, 0x00, 0xee, - 0xe1, 0xa6, 0x00, 0x42, 0x26, 0xd6, 0xd0, 0xa6, 0x40, 0xe1, 0xab, 0xa6, - 0x00, 0xa5, 0xc1, 0x1d, 0x05, 0x29, 0xdc, 0x11, 0xe9, 0xdd, 0xa6, 0x00, - 0xb5, 0x01, 0xff, 0x42, 0xeb, 0x0d, 0xd7, 0xa6, 0x00, 0xe5, 0xc8, 0xa6, - 0x40, 0x02, 0x5a, 0x00, 0xc1, 0x18, 0x02, 0x26, 0x02, 0xac, 0x15, 0x02, - 0xd4, 0x02, 0x8e, 0x10, 0x02, 0x06, 0x00, 0x90, 0x0a, 0x02, 0x60, 0x00, - 0xc2, 0x02, 0x02, 0x25, 0x00, 0x01, 0xff, 0x42, 0x27, 0x01, 0x06, 0x6a, - 0x01, 0x43, 0x0f, 0xe9, 0x2b, 0x6a, 0x01, 0xab, 0x8c, 0x02, 0xac, 0xfb, - 0x01, 0xed, 0x11, 0x6a, 0x81, 0xd9, 0x01, 0xae, 0x93, 0x01, 0xb0, 0x7f, - 0xb2, 0x5d, 0xb3, 0x35, 0xb4, 0x23, 0xf5, 0x04, 0x6a, 0x01, 0x44, 0xe2, - 0xe7, 0x38, 0x6a, 0x01, 0xb7, 0x0d, 0xb9, 0x01, 0xff, 0xe1, 0x1d, 0x6a, - 0x01, 0x42, 0xc8, 0x8b, 0x1b, 0x6a, 0x41, 0xe1, 0x2c, 0x6a, 0x01, 0x42, - 0x30, 0x12, 0x21, 0x6a, 0x41, 0xa1, 0x06, 0x42, 0xf2, 0x04, 0x35, 0x6a, - 0x41, 0xe1, 0x0e, 0x6a, 0x01, 0xe5, 0x08, 0x6a, 0x41, 0x44, 0x68, 0xc3, - 0x37, 0x6a, 0x01, 0x43, 0x12, 0xe1, 0x15, 0x6a, 0x01, 0xa8, 0x0a, 0xe9, - 0x14, 0x6a, 0x01, 0x42, 0x52, 0x6d, 0x12, 0x6a, 0x41, 0x42, 0x6b, 0x25, - 0x13, 0x6a, 0x01, 0xef, 0x29, 0x6a, 0x01, 0xf5, 0x1c, 0x6a, 0x41, 0xa5, - 0x10, 0xa9, 0x04, 0xf5, 0x23, 0x6a, 0x41, 0x42, 0x27, 0x01, 0x0c, 0x6a, - 0x01, 0xe9, 0x0b, 0x6a, 0x41, 0xe5, 0x07, 0x6a, 0x01, 0xee, 0x31, 0x6a, - 0x01, 0x42, 0x26, 0xd6, 0x25, 0x6a, 0x41, 0xa5, 0x06, 0x43, 0xc8, 0x8d, - 0x2a, 0x6a, 0x41, 0xe5, 0x22, 0x6a, 0x01, 0x42, 0x26, 0xd6, 0x1f, 0x6a, - 0x41, 0x43, 0xfd, 0x51, 0x0f, 0x6a, 0x01, 0xa7, 0x2f, 0xe9, 0x24, 0x6a, - 0x01, 0xaa, 0x1d, 0x43, 0xa4, 0x02, 0x1e, 0x6a, 0x01, 0x43, 0x29, 0x16, - 0x20, 0x6a, 0x01, 0xf5, 0x19, 0x6a, 0x81, 0x06, 0x42, 0x4b, 0x18, 0x09, - 0x6a, 0x41, 0x42, 0xeb, 0x0d, 0x18, 0x6a, 0x41, 0x43, 0x06, 0x80, 0x10, - 0x6a, 0x01, 0x43, 0xc8, 0x8d, 0x1a, 0x6a, 0x41, 0x42, 0x24, 0x02, 0x28, - 0x6a, 0x01, 0x45, 0x2d, 0xdd, 0x27, 0x6a, 0x41, 0xe1, 0x32, 0x6a, 0x01, - 0xa2, 0x0a, 0x44, 0x9d, 0xe4, 0x0d, 0x6a, 0x01, 0xef, 0x33, 0x6a, 0x41, - 0x42, 0xda, 0x10, 0x34, 0x6a, 0x01, 0x42, 0x92, 0x01, 0x30, 0x6a, 0x41, - 0xe1, 0x0a, 0x6a, 0x01, 0xe9, 0x2d, 0x6a, 0x01, 0x42, 0xc8, 0x8b, 0x2e, - 0x6a, 0x41, 0xe1, 0x03, 0x6a, 0x01, 0xa5, 0x14, 0xef, 0x2f, 0x6a, 0x01, - 0x42, 0xc1, 0x08, 0x36, 0x6a, 0x01, 0xf5, 0x05, 0x6a, 0x01, 0x43, 0x3b, - 0xa1, 0x16, 0x6a, 0x41, 0xee, 0x26, 0x6a, 0x01, 0xf4, 0x17, 0x6a, 0x41, - 0xe1, 0xd5, 0x69, 0x01, 0xa6, 0x8f, 0x07, 0xa7, 0xd8, 0x06, 0xe9, 0xd8, - 0x69, 0x01, 0xab, 0x9d, 0x06, 0xac, 0xec, 0x05, 0xad, 0x8e, 0x05, 0xae, - 0x81, 0x03, 0xef, 0xd7, 0x69, 0x01, 0xb0, 0x98, 0x02, 0xb2, 0xff, 0x01, - 0xb3, 0xc9, 0x01, 0xb4, 0x7a, 0xb6, 0x66, 0xb7, 0x53, 0xb9, 0x01, 0xff, - 0x42, 0xea, 0x04, 0xac, 0x69, 0x01, 0x02, 0x97, 0x02, 0x33, 0xa9, 0x27, - 0x03, 0xc8, 0x8b, 0x17, 0xb5, 0x01, 0xff, 0x43, 0x37, 0x3d, 0xe1, 0x69, - 0x01, 0x42, 0x7b, 0x00, 0xb2, 0x69, 0x01, 0xee, 0xe5, 0x69, 0x01, 0xf1, - 0xe4, 0x69, 0x41, 0x45, 0xff, 0x06, 0xe3, 0x69, 0x01, 0x48, 0x3d, 0xc1, - 0xe2, 0x69, 0x41, 0x42, 0x27, 0x01, 0x94, 0x69, 0x01, 0xf4, 0xae, 0x69, - 0x41, 0x42, 0xeb, 0x0d, 0x97, 0x69, 0x81, 0x08, 0xed, 0xbe, 0x69, 0x01, - 0xf8, 0xdf, 0x69, 0x41, 0xf4, 0xcf, 0x69, 0x41, 0x43, 0x12, 0xe1, 0x9e, - 0x69, 0x01, 0xb5, 0x01, 0xff, 0xe5, 0xea, 0x69, 0x01, 0xef, 0x75, 0x69, - 0x41, 0xa5, 0x06, 0x42, 0x19, 0x04, 0x6a, 0x69, 0x41, 0xe5, 0xec, 0x69, - 0x01, 0x43, 0xc8, 0x8d, 0x9d, 0x69, 0x41, 0xa1, 0x34, 0xa5, 0x23, 0xaf, - 0x14, 0xb5, 0x01, 0xff, 0x42, 0xeb, 0x0d, 0x96, 0x69, 0x01, 0xed, 0xaa, - 0x69, 0xc1, 0x00, 0x42, 0xeb, 0x0d, 0x99, 0x69, 0x41, 0xef, 0x79, 0x69, - 0x81, 0x04, 0xf1, 0xd6, 0x69, 0x41, 0xee, 0x67, 0x69, 0x41, 0xee, 0x00, - 0x6a, 0x01, 0xf5, 0xfd, 0x69, 0xc1, 0x00, 0x43, 0x86, 0x25, 0x9c, 0x69, - 0x41, 0xe1, 0xdb, 0x69, 0x81, 0x0e, 0x48, 0xe5, 0xbb, 0x8f, 0x69, 0x01, - 0xed, 0x72, 0x69, 0x01, 0xf1, 0xdc, 0x69, 0x41, 0xf1, 0xa1, 0x69, 0x41, - 0x42, 0xda, 0x10, 0x85, 0x69, 0x01, 0xa5, 0x23, 0xa8, 0x0c, 0x42, 0x19, - 0x04, 0x6d, 0x69, 0x01, 0x44, 0x4b, 0xb7, 0x9b, 0x69, 0x41, 0x45, 0xc7, - 0x8d, 0xa4, 0x69, 0x01, 0x42, 0x8a, 0x16, 0xde, 0x69, 0x01, 0xef, 0xf3, - 0x69, 0xc1, 0x00, 0xf1, 0xf4, 0x69, 0x41, 0xe5, 0x76, 0x69, 0x01, 0xf4, - 0x90, 0x69, 0x41, 0xa1, 0x0c, 0x43, 0x12, 0xe1, 0xef, 0x69, 0x01, 0x45, - 0xa1, 0xdc, 0x82, 0x69, 0x41, 0xe5, 0xf0, 0x69, 0x01, 0xf1, 0x6e, 0x69, - 0x41, 0xa1, 0x47, 0xa5, 0x34, 0xe9, 0xf7, 0x69, 0x81, 0x22, 0xef, 0x98, - 0x69, 0x81, 0x17, 0xf5, 0xa0, 0x69, 0xc1, 0x00, 0xa1, 0x08, 0xe5, 0xe9, - 0x69, 0x01, 0xed, 0x91, 0x69, 0x41, 0xe5, 0x71, 0x69, 0x01, 0xf1, 0xca, - 0x69, 0x41, 0x42, 0x10, 0x00, 0xc2, 0x69, 0x41, 0xa5, 0x01, 0xff, 0x42, - 0x7b, 0x00, 0xb1, 0x69, 0x01, 0xf4, 0xcd, 0x69, 0x41, 0x42, 0xba, 0x04, - 0x84, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xf4, 0xbd, 0x69, 0x01, 0xf8, 0xe7, - 0x69, 0x41, 0x02, 0x9b, 0x01, 0x09, 0xe1, 0x6c, 0x69, 0xc1, 0x00, 0xed, - 0x78, 0x69, 0x41, 0x45, 0x5c, 0xdb, 0xd1, 0x69, 0x01, 0x45, 0x7d, 0xdd, - 0xda, 0x69, 0x41, 0xe1, 0xf6, 0x69, 0x81, 0x80, 0x02, 0xa4, 0xd5, 0x01, - 0xa7, 0x66, 0xaa, 0x4a, 0x43, 0xaa, 0xc0, 0xa8, 0x69, 0x01, 0x02, 0xa4, - 0x02, 0x2d, 0xb4, 0x1f, 0x03, 0x5b, 0x73, 0x0f, 0xba, 0x01, 0xff, 0x42, - 0x6b, 0x32, 0xa7, 0x69, 0x01, 0x42, 0xef, 0x93, 0xc1, 0x69, 0x41, 0x47, - 0xc6, 0x08, 0xc0, 0x69, 0x01, 0x47, 0xce, 0xc5, 0xad, 0x69, 0x41, 0x42, - 0xea, 0x04, 0xce, 0x69, 0x01, 0x42, 0x9f, 0x03, 0xbc, 0x69, 0x41, 0x43, - 0x35, 0x9b, 0x7c, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xe5, 0x81, 0x69, 0x01, - 0x42, 0x1f, 0x00, 0x6f, 0x69, 0x41, 0x45, 0x57, 0xc9, 0x8a, 0x69, 0x01, - 0xa5, 0x01, 0xff, 0xe5, 0xd4, 0x69, 0x81, 0x06, 0x42, 0x26, 0xd6, 0x83, - 0x69, 0x41, 0x46, 0xc7, 0xcd, 0xe8, 0x69, 0x41, 0xe1, 0xf2, 0x69, 0x01, - 0x46, 0x2d, 0xd1, 0xa3, 0x69, 0x01, 0xa7, 0x3b, 0xab, 0x15, 0xaf, 0x0b, - 0x43, 0xc8, 0x8d, 0xe0, 0x69, 0xc1, 0x00, 0xf4, 0xf1, 0x69, 0x41, 0xf0, - 0x7d, 0x69, 0x01, 0xf1, 0x80, 0x69, 0x41, 0xe1, 0x73, 0x69, 0x81, 0x19, - 0x02, 0x97, 0x02, 0x0b, 0xb5, 0x01, 0xff, 0xed, 0xcb, 0x69, 0x01, 0xf0, - 0xb6, 0x69, 0x41, 0x43, 0x06, 0x80, 0x89, 0x69, 0x01, 0xf8, 0x7f, 0x69, - 0x41, 0x43, 0x9c, 0x5b, 0xb9, 0x69, 0x41, 0xa5, 0x13, 0xb5, 0x01, 0xff, - 0x4b, 0xe4, 0x90, 0x93, 0x69, 0x01, 0xf0, 0xd0, 0x69, 0x01, 0x43, 0x68, - 0x7b, 0x86, 0x69, 0x41, 0x43, 0xeb, 0xa0, 0x8d, 0x69, 0x01, 0x43, 0xc8, - 0x8d, 0xbf, 0x69, 0xc1, 0x00, 0xf4, 0x77, 0x69, 0x41, 0xa1, 0x12, 0xa9, - 0x06, 0x42, 0x24, 0x0a, 0x70, 0x69, 0x41, 0x42, 0x6b, 0x32, 0xb0, 0x69, - 0x01, 0xf1, 0x8e, 0x69, 0x41, 0x02, 0x5a, 0x00, 0x04, 0xf0, 0x66, 0x69, - 0x41, 0x48, 0x8d, 0xbe, 0xdd, 0x69, 0x01, 0x48, 0x15, 0xc1, 0x92, 0x69, - 0x41, 0xe5, 0xc5, 0x69, 0x41, 0xe1, 0xfb, 0x69, 0x81, 0x45, 0x02, 0xbc, - 0x04, 0x37, 0x42, 0x92, 0x01, 0xfa, 0x69, 0x01, 0x44, 0xca, 0xe4, 0xaf, - 0x69, 0x01, 0x02, 0xb4, 0x87, 0x1d, 0xe9, 0xee, 0x69, 0x81, 0x12, 0x42, - 0x10, 0x00, 0xff, 0x69, 0x01, 0x43, 0xc8, 0x8d, 0xc6, 0x69, 0x01, 0x42, - 0x02, 0x00, 0xc9, 0x69, 0x41, 0x42, 0x27, 0x01, 0xc3, 0x69, 0x41, 0xe1, - 0x87, 0x69, 0x01, 0x42, 0x92, 0x01, 0xa5, 0x69, 0x41, 0xe5, 0xa6, 0x69, - 0x01, 0x42, 0x9f, 0x03, 0x68, 0x69, 0x41, 0xe5, 0xb8, 0x69, 0x81, 0x08, - 0xf0, 0x8b, 0x69, 0x01, 0xf1, 0xfc, 0x69, 0x41, 0xed, 0x7e, 0x69, 0x41, - 0xa1, 0x1e, 0x45, 0x7a, 0xdb, 0xb3, 0x69, 0x01, 0xaf, 0x04, 0xf5, 0xed, - 0x69, 0x41, 0xed, 0x7b, 0x69, 0x01, 0xaf, 0x04, 0xf1, 0xf8, 0x69, 0x41, - 0xee, 0x6b, 0x69, 0x01, 0xf4, 0x8c, 0x69, 0x41, 0x42, 0x57, 0x00, 0x9f, - 0x69, 0x01, 0xf0, 0x69, 0x69, 0x01, 0xf1, 0xd9, 0x69, 0x41, 0xa5, 0x21, - 0xe9, 0xfe, 0x69, 0x01, 0xef, 0xf9, 0x69, 0x01, 0x44, 0xf2, 0xe6, 0x74, - 0x69, 0x01, 0xb5, 0x01, 0xff, 0x42, 0xf2, 0x04, 0xab, 0x69, 0x01, 0x42, - 0x1f, 0x00, 0x7a, 0x69, 0x01, 0xf4, 0xcc, 0x69, 0x41, 0xf4, 0xb7, 0x69, - 0x01, 0xb5, 0x01, 0xff, 0x42, 0xeb, 0x0d, 0x9a, 0x69, 0x01, 0xf8, 0xe6, - 0x69, 0x41, 0x02, 0xbc, 0x04, 0x26, 0xa8, 0x01, 0xff, 0x45, 0x59, 0xd9, - 0xa2, 0x69, 0x01, 0xa5, 0x06, 0x42, 0x19, 0x04, 0x02, 0x6a, 0x41, 0xf4, - 0xba, 0x69, 0x01, 0xb5, 0x01, 0xff, 0x42, 0xeb, 0x0d, 0xc7, 0x69, 0x01, - 0xee, 0x95, 0x69, 0x01, 0xf8, 0x88, 0x69, 0x41, 0xf4, 0xa9, 0x69, 0x01, - 0x42, 0x26, 0xd6, 0xb5, 0x69, 0x41, 0xe1, 0xbb, 0x69, 0x81, 0x2a, 0x42, - 0x27, 0x01, 0xeb, 0x69, 0x01, 0x42, 0x19, 0x04, 0xd3, 0x69, 0x01, 0xb5, - 0x01, 0xff, 0x80, 0x09, 0xe5, 0xb4, 0x69, 0xc1, 0x00, 0xf4, 0xc4, 0x69, - 0x41, 0x44, 0xcf, 0x06, 0xd2, 0x69, 0x01, 0xe9, 0xc8, 0x69, 0x01, 0x46, - 0xe7, 0xd4, 0xf5, 0x69, 0x41, 0xf1, 0x01, 0x6a, 0x41, 0xa6, 0xea, 0x05, - 0x02, 0x40, 0x00, 0xd9, 0x05, 0xab, 0x9a, 0x05, 0xac, 0xec, 0x04, 0xed, - 0x51, 0x69, 0x81, 0xeb, 0x03, 0xae, 0xfb, 0x01, 0xb0, 0xd3, 0x01, 0xb2, - 0xb4, 0x01, 0xb3, 0x66, 0xb4, 0x30, 0xb7, 0x22, 0xb9, 0x01, 0xff, 0x46, - 0x35, 0xcf, 0x05, 0x69, 0x01, 0x42, 0x92, 0x01, 0x0d, 0x69, 0x01, 0xb5, - 0x01, 0xff, 0xaf, 0x06, 0x43, 0x93, 0xe9, 0x25, 0x69, 0x41, 0xed, 0x34, - 0x69, 0x01, 0xf0, 0x36, 0x69, 0x41, 0x42, 0xea, 0x04, 0xf2, 0x68, 0x01, - 0x44, 0x4b, 0xb7, 0xfb, 0x68, 0x41, 0x42, 0xeb, 0x0d, 0x4b, 0x69, 0x01, - 0xa5, 0x15, 0xe9, 0x61, 0x69, 0x01, 0x42, 0xc8, 0x8b, 0x4c, 0x69, 0x01, - 0xf5, 0x11, 0x69, 0xc1, 0x00, 0x42, 0x20, 0x04, 0x3d, 0x69, 0x41, 0x43, - 0xeb, 0xa0, 0x28, 0x69, 0x01, 0xb5, 0x01, 0xff, 0x43, 0x37, 0x3d, 0x23, - 0x69, 0x01, 0xee, 0x41, 0x69, 0x01, 0xf4, 0x00, 0x69, 0x41, 0xa1, 0x42, - 0x45, 0xc7, 0x8d, 0x0c, 0x69, 0x01, 0xa8, 0x17, 0x42, 0x20, 0x04, 0x24, - 0x69, 0x01, 0xb5, 0x01, 0xff, 0x42, 0xeb, 0x0d, 0x39, 0x69, 0x01, 0xe5, - 0x03, 0x69, 0x01, 0xf5, 0x52, 0x69, 0x41, 0xa5, 0x10, 0x42, 0x6b, 0x25, - 0x54, 0x69, 0x01, 0x42, 0xc8, 0x8b, 0x5c, 0x69, 0x01, 0xf5, 0x58, 0x69, - 0x41, 0xe5, 0xfd, 0x68, 0x01, 0xb5, 0x01, 0xff, 0x42, 0xeb, 0x0d, 0x01, - 0x69, 0x01, 0xf8, 0x55, 0x69, 0x41, 0xf0, 0x07, 0x69, 0x01, 0xf1, 0x64, - 0x69, 0x41, 0x43, 0x06, 0x80, 0x27, 0x69, 0x01, 0x03, 0xb1, 0x01, 0x06, - 0x42, 0x6b, 0x25, 0x4e, 0x69, 0x41, 0x44, 0x04, 0xde, 0x60, 0x69, 0x01, - 0x43, 0xae, 0x18, 0x4a, 0x69, 0x41, 0x42, 0xea, 0x04, 0x35, 0x69, 0x01, - 0xa5, 0x13, 0x42, 0xbf, 0x03, 0x2d, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xf1, - 0x5d, 0x69, 0x01, 0x42, 0x0a, 0x07, 0x1b, 0x69, 0x41, 0xe5, 0x5a, 0x69, - 0x01, 0x44, 0xba, 0xe7, 0x2e, 0x69, 0x41, 0xa4, 0xd2, 0x01, 0xa7, 0x7e, - 0xe9, 0x5b, 0x69, 0x01, 0xaa, 0x53, 0xb3, 0x31, 0xb4, 0x1d, 0xf5, 0x57, - 0x69, 0x01, 0xb9, 0x01, 0xff, 0x42, 0x57, 0x00, 0xfa, 0x68, 0x01, 0x42, - 0xf2, 0x04, 0x22, 0x69, 0x01, 0xe9, 0x4d, 0x69, 0x01, 0x42, 0x30, 0x12, - 0x2f, 0x69, 0x41, 0xa5, 0x06, 0x42, 0x52, 0x6d, 0x62, 0x69, 0x41, 0xe5, - 0x59, 0x69, 0x01, 0x42, 0x9f, 0x03, 0x38, 0x69, 0x41, 0xa8, 0x12, 0x03, - 0x35, 0x9b, 0x06, 0x42, 0x9f, 0x03, 0x40, 0x69, 0x41, 0xf0, 0x1f, 0x69, - 0x01, 0xf4, 0x2b, 0x69, 0x41, 0x42, 0x27, 0x01, 0xf8, 0x68, 0x01, 0x42, - 0x0a, 0x07, 0x46, 0x69, 0x41, 0x42, 0xea, 0x04, 0x02, 0x69, 0x01, 0x02, - 0x97, 0x02, 0x11, 0xe9, 0xf3, 0x68, 0x81, 0x06, 0x43, 0xe3, 0xe7, 0x47, - 0x69, 0x41, 0x42, 0x27, 0x01, 0xf5, 0x68, 0x41, 0x43, 0x06, 0x80, 0x0e, - 0x69, 0x01, 0xf4, 0xf7, 0x68, 0x41, 0xa7, 0x2b, 0xab, 0x01, 0xff, 0x42, - 0xea, 0x04, 0xfe, 0x68, 0x01, 0x02, 0x97, 0x02, 0x12, 0x43, 0x35, 0x9b, - 0x3c, 0x69, 0x01, 0x42, 0x24, 0x0a, 0xfc, 0x68, 0x01, 0x43, 0x3b, 0xa1, - 0x13, 0x69, 0x41, 0x43, 0x86, 0x25, 0x29, 0x69, 0x01, 0x42, 0x0d, 0x00, - 0x10, 0x69, 0x41, 0xa1, 0x12, 0x43, 0x12, 0xe1, 0x3b, 0x69, 0x01, 0x43, - 0x45, 0xc3, 0x45, 0x69, 0x01, 0x44, 0x5d, 0xcd, 0x33, 0x69, 0x41, 0x42, - 0x57, 0x00, 0x31, 0x69, 0x81, 0x04, 0xf0, 0x43, 0x69, 0x41, 0x42, 0xeb, - 0x0d, 0xf9, 0x68, 0x41, 0x42, 0x57, 0x00, 0x37, 0x69, 0x01, 0xa5, 0x06, - 0x42, 0x10, 0x00, 0x18, 0x69, 0x41, 0xe5, 0x15, 0x69, 0x01, 0x42, 0x26, - 0xd6, 0x09, 0x69, 0x41, 0xa1, 0x6d, 0xa2, 0x58, 0xa5, 0x45, 0xa6, 0x26, - 0x02, 0xb4, 0x87, 0x10, 0x43, 0x86, 0x30, 0x19, 0x69, 0x01, 0xf5, 0x53, - 0x69, 0x01, 0x43, 0xce, 0xa3, 0x5e, 0x69, 0x41, 0x43, 0xa6, 0x62, 0x1a, - 0x69, 0x01, 0x43, 0x35, 0x9b, 0x1c, 0x69, 0x01, 0x44, 0xae, 0xe6, 0x16, - 0x69, 0x41, 0x02, 0x97, 0x02, 0x0f, 0x43, 0x35, 0x9b, 0x32, 0x69, 0x01, - 0xef, 0x1d, 0x69, 0xc1, 0x00, 0xee, 0xf4, 0x68, 0x41, 0x42, 0xeb, 0x0d, - 0x2a, 0x69, 0x01, 0xf4, 0x08, 0x69, 0x41, 0x43, 0xeb, 0xa0, 0x50, 0x69, - 0x01, 0xb5, 0x01, 0xff, 0xee, 0x3e, 0x69, 0x01, 0xf4, 0x0b, 0x69, 0x41, - 0x42, 0xda, 0x10, 0x20, 0x69, 0x81, 0x06, 0x42, 0x1f, 0x04, 0xf1, 0x68, - 0x41, 0x46, 0x94, 0x1b, 0x63, 0x69, 0x41, 0x45, 0x52, 0xdb, 0x42, 0x69, - 0x01, 0x45, 0x5f, 0xdb, 0x0a, 0x69, 0x41, 0xa5, 0x12, 0x43, 0x35, 0x9b, - 0xf6, 0x68, 0x01, 0x42, 0xc8, 0x8b, 0x5f, 0x69, 0x01, 0x42, 0x9f, 0x03, - 0x1e, 0x69, 0x41, 0x43, 0xeb, 0xa0, 0x4f, 0x69, 0x01, 0xf4, 0x30, 0x69, - 0x01, 0xb5, 0x01, 0xff, 0x43, 0x02, 0xd1, 0x17, 0x69, 0x01, 0xed, 0x44, - 0x69, 0x41, 0xa5, 0x1f, 0xf5, 0x49, 0x69, 0x81, 0x0c, 0x44, 0xea, 0xe7, - 0x21, 0x69, 0x01, 0x43, 0x3b, 0xa1, 0x56, 0x69, 0x41, 0xee, 0x3a, 0x69, - 0x01, 0x42, 0x19, 0x04, 0x06, 0x69, 0x01, 0xf1, 0x3f, 0x69, 0x41, 0xf4, - 0x04, 0x69, 0x01, 0xb5, 0x01, 0xff, 0x47, 0x77, 0xc4, 0xff, 0x68, 0x01, - 0xed, 0x26, 0x69, 0x01, 0x48, 0x95, 0xbf, 0x0f, 0x69, 0x01, 0xf0, 0x2c, - 0x69, 0x41, 0x42, 0xda, 0x10, 0x12, 0x69, 0x01, 0x44, 0xc7, 0x8d, 0x48, - 0x69, 0x41, 0x42, 0xda, 0x10, 0x65, 0x69, 0x01, 0x48, 0x45, 0xbc, 0x14, - 0x69, 0x41, 0x44, 0x52, 0xe4, 0xc0, 0x68, 0x01, 0x43, 0x12, 0xe9, 0xbc, - 0x68, 0x01, 0xa7, 0xf5, 0x04, 0xab, 0xa7, 0x04, 0xac, 0x90, 0x04, 0xad, - 0x8d, 0x03, 0xae, 0xa3, 0x01, 0xb0, 0x8d, 0x01, 0x42, 0x3d, 0x00, 0xc3, - 0x68, 0x01, 0xb3, 0x63, 0xb4, 0x3e, 0x03, 0xf8, 0x58, 0x30, 0xb7, 0x22, - 0xb9, 0x01, 0xff, 0x42, 0xda, 0x10, 0xd9, 0x68, 0x01, 0x43, 0xee, 0x93, - 0xa7, 0x68, 0x01, 0xb5, 0x01, 0xff, 0x47, 0x43, 0xc3, 0xa2, 0x68, 0x01, - 0xed, 0x91, 0x68, 0x01, 0x43, 0x93, 0xe9, 0xe4, 0x68, 0x41, 0x47, 0xb6, - 0xc4, 0x92, 0x68, 0x01, 0x42, 0x50, 0x02, 0xd1, 0x68, 0x41, 0x45, 0x6d, - 0xd9, 0xc1, 0x68, 0x01, 0xf8, 0xb1, 0x68, 0x41, 0x46, 0x29, 0xcf, 0xac, - 0x68, 0x01, 0xa5, 0x11, 0x02, 0x52, 0x00, 0x01, 0xff, 0x45, 0x4f, 0xd9, - 0xae, 0x68, 0x01, 0x44, 0x0d, 0xd2, 0xc6, 0x68, 0x41, 0xf4, 0xf0, 0x68, - 0x01, 0x45, 0x10, 0xe1, 0xba, 0x68, 0x41, 0xa5, 0x14, 0xa8, 0x06, 0x44, - 0x71, 0xa5, 0xaf, 0x68, 0x41, 0x42, 0x8a, 0x16, 0xe8, 0x68, 0x01, 0x43, - 0xe3, 0xe7, 0xdb, 0x68, 0x41, 0x44, 0x8e, 0xe7, 0xdc, 0x68, 0x01, 0x42, - 0x26, 0xd6, 0xaa, 0x68, 0x41, 0x42, 0x92, 0x01, 0xef, 0x68, 0x01, 0xa9, - 0x01, 0xff, 0xee, 0xee, 0x68, 0x01, 0x45, 0x8f, 0xdf, 0x9c, 0x68, 0x41, - 0xa1, 0xda, 0x01, 0xa4, 0xb3, 0x01, 0xa7, 0x74, 0xaa, 0x52, 0xb3, 0x2d, - 0xb4, 0x13, 0x50, 0x99, 0x62, 0x99, 0x68, 0x01, 0xba, 0x01, 0xff, 0xe1, - 0x90, 0x68, 0x01, 0x43, 0x46, 0x52, 0xa3, 0x68, 0x41, 0x42, 0xda, 0x10, - 0xb4, 0x68, 0x01, 0xa5, 0x06, 0x46, 0x2b, 0xd6, 0x9a, 0x68, 0x41, 0xee, - 0xd4, 0x68, 0x01, 0x45, 0xed, 0xe0, 0xb9, 0x68, 0x41, 0xe1, 0xbe, 0x68, - 0x01, 0x45, 0x4a, 0xb7, 0xa5, 0x68, 0x01, 0x43, 0x15, 0xe9, 0xbf, 0x68, - 0x01, 0x42, 0x19, 0x04, 0xd3, 0x68, 0x01, 0xb5, 0x01, 0xff, 0xee, 0xd6, - 0x68, 0x01, 0x47, 0xda, 0xc9, 0xc7, 0x68, 0x41, 0xa1, 0x14, 0xa5, 0x06, - 0x43, 0xe3, 0xe7, 0xad, 0x68, 0x41, 0x43, 0xeb, 0xa0, 0xc8, 0x68, 0x01, - 0x42, 0x26, 0xd6, 0xe5, 0x68, 0x41, 0x42, 0xba, 0x04, 0xc4, 0x68, 0x01, - 0xed, 0xcf, 0x68, 0x41, 0x42, 0x6b, 0x32, 0xeb, 0x68, 0x01, 0xa7, 0x14, - 0xab, 0x06, 0x42, 0x19, 0x04, 0xd0, 0x68, 0x41, 0x42, 0x6b, 0x32, 0x95, - 0x68, 0x01, 0x49, 0x95, 0xb6, 0x8f, 0x68, 0x41, 0x42, 0x92, 0x01, 0x93, - 0x68, 0x01, 0xf5, 0xca, 0x68, 0xc1, 0x00, 0x48, 0x85, 0xb9, 0xb0, 0x68, - 0x01, 0x43, 0x87, 0x0f, 0xd2, 0x68, 0x01, 0xed, 0xbb, 0x68, 0x01, 0x42, - 0x10, 0x00, 0xb5, 0x68, 0x41, 0xa1, 0x1a, 0x02, 0x97, 0x02, 0x0c, 0x43, - 0x64, 0x8d, 0xab, 0x68, 0x01, 0x44, 0x3e, 0xc8, 0x9d, 0x68, 0x41, 0x45, - 0x72, 0xd9, 0x94, 0x68, 0x01, 0xf4, 0xbd, 0x68, 0x41, 0xed, 0xd7, 0x68, - 0x01, 0xf0, 0xda, 0x68, 0x41, 0x46, 0xf7, 0xd3, 0xb2, 0x68, 0x01, 0xf1, - 0xec, 0x68, 0x41, 0xa1, 0x61, 0xa2, 0x12, 0x46, 0x81, 0xd1, 0xb8, 0x68, - 0x01, 0x43, 0x35, 0x9b, 0xe6, 0x68, 0x01, 0x43, 0xc8, 0x8d, 0xe7, 0x68, - 0x41, 0xa1, 0x35, 0xa5, 0x1c, 0xe9, 0xdd, 0x68, 0x81, 0x0d, 0xb5, 0x01, - 0xff, 0x43, 0x06, 0x80, 0xcc, 0x68, 0x01, 0xe5, 0xa4, 0x68, 0x41, 0x45, - 0x8f, 0xdf, 0xb7, 0x68, 0x01, 0xf4, 0xa6, 0x68, 0x41, 0x45, 0x2f, 0xdb, - 0x97, 0x68, 0x01, 0x43, 0x68, 0x7b, 0xc2, 0x68, 0x01, 0xb5, 0x01, 0xff, - 0xed, 0x9b, 0x68, 0x01, 0xf8, 0xe1, 0x68, 0x41, 0x02, 0x5a, 0x00, 0x06, - 0x43, 0x4a, 0x18, 0xdf, 0x68, 0x41, 0x4c, 0xa4, 0x85, 0x9e, 0x68, 0x01, - 0x46, 0x99, 0xd4, 0xe3, 0x68, 0x41, 0x80, 0x0f, 0xa5, 0x01, 0xff, 0x43, - 0x1f, 0x97, 0xde, 0x68, 0x01, 0x42, 0xdb, 0x02, 0xcb, 0x68, 0x41, 0x47, - 0x28, 0xc8, 0xb3, 0x68, 0x01, 0x45, 0x5e, 0xde, 0xd8, 0x68, 0x41, 0xa1, - 0x0a, 0x42, 0x8a, 0x16, 0xed, 0x68, 0x01, 0xf5, 0xcd, 0x68, 0x41, 0xed, - 0xc5, 0x68, 0x01, 0xf0, 0xb6, 0x68, 0x41, 0x42, 0xda, 0x10, 0xa9, 0x68, - 0x01, 0xa5, 0x13, 0x45, 0x9f, 0x62, 0xa8, 0x68, 0x01, 0xb5, 0x01, 0xff, - 0x4a, 0x33, 0xa6, 0xd5, 0x68, 0x01, 0xf4, 0xce, 0x68, 0x41, 0x02, 0x92, - 0x00, 0x20, 0xf4, 0xc9, 0x68, 0x01, 0xb5, 0x01, 0xff, 0x43, 0x2b, 0xc0, - 0xa1, 0x68, 0x01, 0xed, 0xe2, 0x68, 0x01, 0xb3, 0x01, 0xff, 0x43, 0x12, - 0xe1, 0xe0, 0x68, 0x01, 0x46, 0x0b, 0xd2, 0x9f, 0x68, 0x41, 0x47, 0xe6, - 0xc6, 0xea, 0x68, 0x01, 0x43, 0x2a, 0xca, 0xe9, 0x68, 0x41, 0x44, 0x3a, - 0xe4, 0x98, 0x68, 0x01, 0x02, 0x22, 0x00, 0x01, 0xff, 0xf0, 0xa0, 0x68, - 0x01, 0x43, 0x68, 0x7b, 0x96, 0x68, 0x41, 0x02, 0x0f, 0x18, 0x81, 0x03, - 0x07, 0x1e, 0xc7, 0xf2, 0x02, 0xab, 0xc6, 0x02, 0xac, 0xa9, 0x02, 0xad, - 0xcc, 0x01, 0xae, 0x78, 0xb0, 0x5e, 0xb3, 0x34, 0xb4, 0x1b, 0x44, 0xca, - 0xe7, 0x73, 0x68, 0x01, 0x45, 0x6a, 0xe1, 0x76, 0x68, 0x01, 0xb9, 0x01, - 0xff, 0x4c, 0x84, 0x84, 0x62, 0x68, 0x01, 0x45, 0x7f, 0xdb, 0x5e, 0x68, - 0x41, 0x43, 0xe7, 0x81, 0x78, 0x68, 0x01, 0x02, 0x2e, 0x02, 0x01, 0xff, - 0x49, 0x78, 0xb2, 0x58, 0x68, 0x01, 0x45, 0x5e, 0xde, 0x68, 0x68, 0x41, - 0x46, 0x27, 0xc8, 0x77, 0x68, 0x01, 0x45, 0x75, 0xdb, 0x5a, 0x68, 0x01, - 0x02, 0xb0, 0x01, 0x0c, 0x43, 0x35, 0x9b, 0x59, 0x68, 0x01, 0x42, 0x30, - 0x12, 0x7d, 0x68, 0x41, 0x46, 0xb9, 0xd5, 0x69, 0x68, 0x01, 0x46, 0x31, - 0xd6, 0x6a, 0x68, 0x41, 0x44, 0x1e, 0xe4, 0x72, 0x68, 0x01, 0x45, 0x11, - 0xdb, 0x61, 0x68, 0x01, 0x42, 0x52, 0x00, 0x67, 0x68, 0x01, 0x46, 0x55, - 0xd6, 0x81, 0x68, 0x41, 0x47, 0x61, 0xc6, 0x65, 0x68, 0x01, 0xa7, 0x23, - 0xb3, 0x15, 0x4b, 0x34, 0x9b, 0x64, 0x68, 0x01, 0xb9, 0x01, 0xff, 0x45, - 0x68, 0xd9, 0x80, 0x68, 0x01, 0x47, 0x79, 0xc7, 0x6d, 0x68, 0x41, 0x42, - 0x92, 0x01, 0x8b, 0x68, 0x01, 0x44, 0xb1, 0xc6, 0x57, 0x68, 0x41, 0xa7, - 0x0c, 0x4a, 0xc7, 0xa3, 0x74, 0x68, 0x01, 0x42, 0x19, 0x04, 0x8e, 0x68, - 0x41, 0x43, 0xe7, 0x81, 0x8a, 0x68, 0x01, 0x46, 0x1b, 0xd1, 0x75, 0x68, - 0x01, 0x43, 0x3c, 0x9b, 0x7a, 0x68, 0xc1, 0x00, 0x46, 0x99, 0x1a, 0x7b, - 0x68, 0x41, 0xe1, 0x8c, 0x68, 0x81, 0x44, 0xa2, 0x22, 0x02, 0x97, 0x02, - 0x14, 0xa6, 0x06, 0x47, 0xb0, 0xc9, 0x7f, 0x68, 0x41, 0x44, 0x69, 0x32, - 0x7c, 0x68, 0x01, 0x49, 0xbc, 0xb3, 0x6b, 0x68, 0x41, 0xf1, 0x79, 0x68, - 0x01, 0x48, 0x45, 0xc1, 0x82, 0x68, 0x41, 0xa1, 0x12, 0x44, 0x05, 0xe1, - 0x7e, 0x68, 0x01, 0x4a, 0x81, 0xa3, 0x6c, 0x68, 0x01, 0x43, 0x3c, 0x9b, - 0x84, 0x68, 0x41, 0x47, 0x35, 0xc3, 0x5c, 0x68, 0x01, 0x44, 0x67, 0x7b, - 0x5f, 0x68, 0x41, 0x03, 0xfe, 0x7f, 0x01, 0xff, 0x46, 0x21, 0xd1, 0x87, - 0x68, 0x01, 0x43, 0x7e, 0xe9, 0x88, 0x68, 0x41, 0xa1, 0x0c, 0x42, 0xf2, - 0x04, 0x89, 0x68, 0x01, 0x48, 0x55, 0xbf, 0x5b, 0x68, 0x41, 0x44, 0x06, - 0xe4, 0x71, 0x68, 0x01, 0x4c, 0x0c, 0x8a, 0x63, 0x68, 0x41, 0x42, 0x57, - 0x00, 0x60, 0x68, 0x01, 0x02, 0x97, 0x02, 0x0d, 0xa9, 0x01, 0xff, 0x43, - 0x6a, 0x16, 0x5d, 0x68, 0x01, 0xf1, 0x8d, 0x68, 0x41, 0x43, 0x06, 0x80, - 0x86, 0x68, 0x01, 0x43, 0x4e, 0xe9, 0x6e, 0x68, 0x01, 0x44, 0x0e, 0xe8, - 0x70, 0x68, 0x41, 0xee, 0x6f, 0x68, 0x01, 0x44, 0x7b, 0xdb, 0x66, 0x68, - 0x41, 0xe5, 0x85, 0x68, 0x01, 0x42, 0x26, 0xd6, 0x83, 0x68, 0x41, 0x44, - 0xd2, 0xe4, 0x39, 0x68, 0x01, 0xa7, 0xc6, 0x04, 0xab, 0x9f, 0x04, 0xac, - 0xff, 0x03, 0xad, 0x8a, 0x03, 0xae, 0xdc, 0x01, 0xb0, 0x88, 0x01, 0x43, - 0xb0, 0x04, 0x3a, 0x68, 0x01, 0xb3, 0x3b, 0xb4, 0x14, 0xb5, 0x06, 0x43, - 0x02, 0x06, 0x52, 0x68, 0x41, 0x48, 0x05, 0xb9, 0x20, 0x68, 0x01, 0x46, - 0xd9, 0xd3, 0x44, 0x68, 0x41, 0x02, 0x97, 0x02, 0x15, 0x48, 0x6d, 0xbd, - 0x06, 0x68, 0x01, 0xb5, 0x01, 0xff, 0x47, 0x97, 0xb6, 0x0c, 0x68, 0x01, - 0x43, 0x02, 0xd1, 0x2e, 0x68, 0x41, 0x43, 0x37, 0x3d, 0x4a, 0x68, 0x01, - 0x46, 0xef, 0xd5, 0x31, 0x68, 0x41, 0x46, 0x27, 0xd1, 0x11, 0x68, 0x01, - 0xa8, 0x1c, 0x43, 0x70, 0x44, 0x23, 0x68, 0x01, 0xaf, 0x06, 0x42, 0x52, - 0x6d, 0x15, 0x68, 0x41, 0x44, 0x6e, 0xe6, 0x30, 0x68, 0x01, 0xf1, 0x3c, - 0x68, 0x01, 0xf4, 0x4b, 0x68, 0x41, 0xa9, 0x13, 0x4c, 0xc8, 0x8b, 0x40, - 0x68, 0x01, 0xb5, 0x01, 0xff, 0x47, 0xae, 0xc6, 0x05, 0x68, 0x01, 0xed, - 0x37, 0x68, 0x41, 0x4a, 0x93, 0xa5, 0x08, 0x68, 0x01, 0x43, 0x68, 0x7b, - 0x3e, 0x68, 0x41, 0xa1, 0x31, 0x42, 0xf2, 0x04, 0x2a, 0x68, 0x01, 0x03, - 0xb6, 0x00, 0x06, 0x42, 0x50, 0x02, 0x2d, 0x68, 0x41, 0x0b, 0x4b, 0x97, - 0x11, 0x0d, 0xfc, 0x7f, 0x01, 0xff, 0x42, 0x16, 0x00, 0x0a, 0x68, 0x01, - 0x45, 0x7c, 0xb2, 0x09, 0x68, 0x41, 0x42, 0x16, 0x00, 0x03, 0x68, 0x01, - 0x45, 0x7c, 0xb2, 0x02, 0x68, 0x41, 0x49, 0x87, 0x84, 0x28, 0x68, 0x01, - 0xa1, 0x0c, 0x45, 0xff, 0xdd, 0x1d, 0x68, 0x01, 0x44, 0xe6, 0x90, 0x1b, - 0x68, 0x41, 0xed, 0x4c, 0x68, 0x01, 0x43, 0x68, 0x7b, 0x42, 0x68, 0x41, - 0xa1, 0x9e, 0x01, 0x02, 0x68, 0x0f, 0x8d, 0x01, 0x42, 0x92, 0x01, 0x54, - 0x68, 0x01, 0xa7, 0x68, 0x43, 0xd9, 0x3e, 0x2c, 0x68, 0x01, 0x43, 0x6f, - 0xe6, 0x47, 0x68, 0x01, 0xab, 0x4e, 0x02, 0xa4, 0x02, 0x40, 0xb4, 0x22, - 0xb9, 0x0f, 0xba, 0x01, 0xff, 0x46, 0x6f, 0xbd, 0x07, 0x68, 0x01, 0x47, - 0x88, 0xcc, 0x1f, 0x68, 0x41, 0x42, 0xf2, 0x04, 0x49, 0x68, 0x01, 0xe9, - 0x4f, 0x68, 0xc1, 0x00, 0x4c, 0xc0, 0x8d, 0x41, 0x68, 0x41, 0x42, 0xea, - 0x04, 0x3f, 0x68, 0x81, 0x06, 0x45, 0xc7, 0xde, 0x12, 0x68, 0x41, 0x80, - 0x01, 0xff, 0x44, 0x16, 0xe6, 0x19, 0x68, 0x01, 0x44, 0x8a, 0xe6, 0x22, - 0x68, 0x41, 0xe1, 0x51, 0x68, 0x01, 0x43, 0x35, 0x9b, 0x4d, 0x68, 0x41, - 0x45, 0x38, 0xa6, 0x43, 0x68, 0x01, 0x44, 0xee, 0x05, 0x14, 0x68, 0x41, - 0x44, 0x1c, 0x01, 0x0d, 0x68, 0x01, 0x43, 0x98, 0x54, 0x45, 0x68, 0x01, - 0x03, 0x33, 0xe9, 0x01, 0xff, 0x45, 0x70, 0xbd, 0x00, 0x68, 0x01, 0x45, - 0x7c, 0xde, 0x16, 0x68, 0x41, 0x49, 0x87, 0x84, 0x29, 0x68, 0x01, 0x49, - 0x05, 0xad, 0x34, 0x68, 0x41, 0x46, 0x6f, 0xbd, 0x04, 0x68, 0x01, 0xf1, - 0x55, 0x68, 0x41, 0xa1, 0x39, 0x02, 0x16, 0x00, 0x2b, 0x4b, 0xe6, 0x93, - 0x25, 0x68, 0x01, 0x45, 0x81, 0xd1, 0x24, 0x68, 0x01, 0xaf, 0x06, 0x49, - 0x49, 0xb7, 0x10, 0x68, 0x41, 0x4a, 0x6b, 0xa5, 0x1e, 0x68, 0x01, 0x02, - 0x19, 0x04, 0x01, 0xff, 0x43, 0xbe, 0x86, 0x36, 0x68, 0x01, 0x43, 0x4e, - 0xe9, 0x26, 0x68, 0x41, 0x43, 0x4a, 0x18, 0x48, 0x68, 0x01, 0xf1, 0x56, - 0x68, 0x41, 0xa5, 0x0c, 0x45, 0x63, 0xde, 0x0f, 0x68, 0x01, 0x47, 0x20, - 0xca, 0x3d, 0x68, 0x41, 0x44, 0xc2, 0xe5, 0x1a, 0x68, 0x01, 0xed, 0x4e, - 0x68, 0x81, 0x0c, 0x43, 0x4a, 0x18, 0x32, 0x68, 0x01, 0x42, 0xdb, 0x02, - 0x46, 0x68, 0x41, 0x46, 0xdd, 0xcf, 0x0b, 0x68, 0x01, 0x44, 0xeb, 0x6a, - 0x2b, 0x68, 0x01, 0x44, 0xce, 0xe7, 0x0e, 0x68, 0x41, 0x44, 0x0a, 0xe4, - 0x17, 0x68, 0x01, 0x46, 0x15, 0xd1, 0x18, 0x68, 0x01, 0x45, 0xbd, 0xde, - 0x38, 0x68, 0x01, 0xf5, 0x53, 0x68, 0xc1, 0x00, 0x43, 0x02, 0xd1, 0x2f, - 0x68, 0x41, 0xa1, 0x18, 0xa5, 0x0c, 0x43, 0x4b, 0xe9, 0x3b, 0x68, 0x01, - 0x43, 0x3c, 0x9b, 0x35, 0x68, 0x41, 0xf4, 0x33, 0x68, 0x01, 0x48, 0xed, - 0xc1, 0x13, 0x68, 0x41, 0x42, 0xed, 0x06, 0x27, 0x68, 0x01, 0xf1, 0x50, - 0x68, 0x41, 0x48, 0x5d, 0xba, 0x01, 0x68, 0x01, 0x05, 0xa6, 0xd1, 0x01, - 0xff, 0x46, 0xa5, 0xd1, 0x21, 0x68, 0x01, 0x43, 0x68, 0x7b, 0x1c, 0x68, - 0x41, 0xe5, 0xca, 0xa6, 0x00, 0x42, 0x26, 0xd6, 0xc5, 0xa6, 0x40, 0xe1, - 0xdb, 0xa6, 0x00, 0x43, 0xfd, 0x51, 0xb1, 0xa6, 0x00, 0xa7, 0x3d, 0xe9, - 0xcf, 0xa6, 0x00, 0xaa, 0x25, 0x43, 0xa4, 0x02, 0xc3, 0xa6, 0x00, 0xb4, - 0x11, 0xf5, 0xbd, 0xa6, 0x80, 0x06, 0x42, 0x4b, 0x18, 0xa8, 0xa6, 0x40, - 0x42, 0xeb, 0x0d, 0xbc, 0xa6, 0x40, 0x42, 0x27, 0x01, 0xc7, 0xa6, 0x00, - 0x42, 0x52, 0x6d, 0xeb, 0xa6, 0x40, 0x43, 0x06, 0x80, 0xb2, 0xa6, 0x00, - 0x42, 0x27, 0x01, 0xc6, 0xa6, 0x00, 0x43, 0xc8, 0x8d, 0xbe, 0xa6, 0x40, - 0xe1, 0xd5, 0xa6, 0x00, 0x42, 0x24, 0x02, 0xd4, 0xa6, 0x00, 0x45, 0x2d, - 0xdd, 0xd3, 0xa6, 0x40, 0xe1, 0xe3, 0xa6, 0x00, 0xa2, 0x18, 0xa5, 0x0c, - 0xe9, 0xce, 0xa6, 0x00, 0xef, 0xe6, 0xa6, 0x00, 0xf5, 0xb5, 0xa6, 0x40, - 0x43, 0xeb, 0xa0, 0xaf, 0xa6, 0x00, 0xee, 0xe2, 0xa6, 0x40, 0x42, 0xda, - 0x10, 0xe7, 0xa6, 0x00, 0x42, 0x92, 0x01, 0xe0, 0xa6, 0x40, 0xe1, 0xaa, - 0xa6, 0x00, 0x44, 0x9e, 0xe4, 0xae, 0xa6, 0x00, 0xe9, 0xdc, 0xa6, 0x00, - 0x42, 0xc8, 0x8b, 0xde, 0xa6, 0x00, 0xf5, 0xcd, 0xa6, 0x40, 0xe1, 0xa1, - 0xa6, 0x00, 0xa5, 0x25, 0xe9, 0xe5, 0xa6, 0x00, 0xef, 0xdf, 0xa6, 0x80, - 0x10, 0x42, 0xc1, 0x08, 0xe9, 0xa6, 0x00, 0xf5, 0xa3, 0xa6, 0x00, 0x43, - 0x3b, 0xa1, 0xba, 0xa6, 0x40, 0x44, 0xee, 0xe4, 0xef, 0xa6, 0x00, 0x43, - 0x8d, 0xe9, 0xee, 0xa6, 0x40, 0xee, 0xd2, 0xa6, 0x00, 0xf4, 0xbb, 0xa6, - 0x00, 0x42, 0x26, 0xd6, 0xc4, 0xa6, 0x40, 0x45, 0x59, 0xd9, 0xed, 0xa6, - 0x00, 0x42, 0x27, 0x01, 0xcb, 0xa6, 0x00, 0x42, 0x19, 0x04, 0xd9, 0xa6, - 0x00, 0xf5, 0xd8, 0xa6, 0x40, 0x43, 0xac, 0x10, 0xf4, 0xa6, 0x00, 0xad, - 0x01, 0xff, 0x0c, 0x38, 0x85, 0x06, 0x42, 0x6c, 0x00, 0xf5, 0xa6, 0x40, - 0x47, 0x44, 0xc8, 0xf0, 0xa6, 0x00, 0x49, 0x7a, 0xb6, 0xf1, 0xa6, 0x40, - 0x06, 0xb0, 0x7c, 0x71, 0xac, 0x01, 0xff, 0x48, 0x85, 0xb8, 0xf6, 0xf9, - 0x01, 0x48, 0x2d, 0xbc, 0x70, 0xfa, 0x01, 0xaf, 0x01, 0xff, 0x42, 0x10, - 0x00, 0x88, 0xf3, 0x81, 0x52, 0x02, 0xc6, 0x00, 0x01, 0xff, 0x02, 0x5d, - 0x00, 0x0a, 0x48, 0x46, 0x96, 0xf4, 0xf5, 0x01, 0xf8, 0x17, 0x27, 0x40, - 0x4b, 0x43, 0x96, 0xf6, 0xf5, 0x01, 0xf8, 0x10, 0x26, 0xc0, 0x00, 0x06, - 0x50, 0x00, 0x01, 0xff, 0xa2, 0x16, 0x45, 0x66, 0x64, 0x11, 0x26, 0x00, - 0x47, 0xbb, 0xc8, 0xbd, 0x2b, 0x00, 0x48, 0x46, 0x96, 0xf5, 0xf5, 0x01, - 0xf8, 0x12, 0x26, 0x40, 0x45, 0x8c, 0xc4, 0xf3, 0xf5, 0x01, 0x04, 0x92, - 0x22, 0x01, 0xff, 0x45, 0x66, 0x64, 0xf9, 0xf5, 0x01, 0x48, 0x46, 0x96, - 0xf7, 0xf5, 0x41, 0x50, 0xbc, 0x1a, 0x49, 0x27, 0x40, 0x49, 0x90, 0xac, - 0x44, 0x1b, 0x00, 0x06, 0x13, 0xd0, 0xeb, 0x06, 0x06, 0xf4, 0x05, 0xa4, - 0x06, 0x07, 0xf1, 0x04, 0xa1, 0x03, 0x0f, 0x27, 0x2e, 0xc4, 0x01, 0x02, - 0xc1, 0x08, 0x9d, 0x01, 0x05, 0xdb, 0x02, 0x70, 0x0b, 0x5b, 0x70, 0x06, - 0x45, 0x56, 0xe1, 0x5c, 0x1b, 0x40, 0x48, 0xb5, 0xbd, 0x3c, 0x1b, 0x80, - 0x59, 0x45, 0x0d, 0xdf, 0x42, 0x1b, 0x80, 0x4c, 0x47, 0xc1, 0xca, 0x3a, - 0x1b, 0x80, 0x3f, 0x44, 0xd2, 0xcb, 0x38, 0x1b, 0x80, 0x32, 0xb4, 0x0d, - 0x43, 0x96, 0x8f, 0x36, 0x1b, 0xc0, 0x00, 0x45, 0x3d, 0xd7, 0x37, 0x1b, - 0x40, 0x45, 0x5d, 0x25, 0x3e, 0x1b, 0x80, 0x06, 0x45, 0x84, 0xc3, 0x35, - 0x1b, 0x40, 0x80, 0x01, 0xff, 0x44, 0xfc, 0xc3, 0x3f, 0x1b, 0x80, 0x06, - 0x46, 0x83, 0xc3, 0x40, 0x1b, 0x40, 0x47, 0x82, 0xc3, 0x41, 0x1b, 0x40, - 0x45, 0x24, 0xd7, 0x39, 0x1b, 0x40, 0x47, 0x82, 0xc3, 0x3b, 0x1b, 0x40, - 0x47, 0x82, 0xc3, 0x43, 0x1b, 0x40, 0x47, 0x82, 0xc3, 0x3d, 0x1b, 0x40, - 0x45, 0x0d, 0xda, 0x04, 0x1b, 0x00, 0x45, 0x5d, 0xda, 0x02, 0x1b, 0x00, - 0x47, 0x00, 0xcb, 0x34, 0x1b, 0x00, 0x46, 0x9b, 0xd5, 0x03, 0x1b, 0x00, - 0x04, 0xa6, 0xe7, 0x01, 0xff, 0x46, 0x3b, 0x21, 0x01, 0x1b, 0x00, 0x45, - 0x8a, 0xdf, 0x00, 0x1b, 0x40, 0xad, 0x0d, 0x43, 0x9f, 0x01, 0x5a, 0x1b, - 0xc0, 0x00, 0x48, 0x75, 0xb8, 0x7d, 0x1b, 0x40, 0x43, 0x90, 0x1c, 0x5b, - 0x1b, 0x80, 0x06, 0x45, 0x4d, 0xdb, 0x60, 0x1b, 0x40, 0x48, 0x75, 0xb8, - 0x7e, 0x1b, 0x40, 0x0a, 0x99, 0x53, 0x97, 0x01, 0xa4, 0x51, 0x0a, 0x2b, - 0xa4, 0x26, 0x0b, 0xbe, 0x99, 0x01, 0xff, 0x08, 0x0d, 0xbb, 0x11, 0x06, - 0x57, 0xd4, 0x01, 0xff, 0x42, 0x23, 0x02, 0x75, 0x1b, 0x00, 0x42, 0x2a, - 0x0d, 0x74, 0x1b, 0x40, 0x42, 0x6d, 0x00, 0x77, 0x1b, 0x00, 0x42, 0x96, - 0x07, 0x76, 0x1b, 0x40, 0x09, 0x25, 0xae, 0x17, 0x06, 0x5d, 0xd4, 0x01, - 0xff, 0x43, 0x1c, 0x01, 0x78, 0x1b, 0x00, 0x43, 0xa1, 0x01, 0x7c, 0x1b, - 0x00, 0x43, 0x76, 0x40, 0x79, 0x1b, 0x40, 0x42, 0x6d, 0x00, 0x7a, 0x1b, - 0x00, 0x42, 0x96, 0x07, 0x7b, 0x1b, 0x40, 0xa1, 0x20, 0xa5, 0x12, 0x43, - 0xa1, 0x01, 0x66, 0x1b, 0x00, 0x43, 0x0a, 0x0d, 0x61, 0x1b, 0x00, 0x43, - 0x76, 0x40, 0x63, 0x1b, 0x40, 0x42, 0x1d, 0x01, 0x62, 0x1b, 0x00, 0x43, - 0x76, 0x40, 0x68, 0x1b, 0x40, 0x43, 0x59, 0x07, 0x67, 0x1b, 0x00, 0x43, - 0xa1, 0x01, 0x69, 0x1b, 0x00, 0x42, 0x1d, 0x01, 0x64, 0x1b, 0xc0, 0x00, - 0x80, 0x01, 0xff, 0x44, 0xe6, 0xe4, 0x6a, 0x1b, 0x00, 0x46, 0x9b, 0xd5, - 0x65, 0x1b, 0x40, 0x45, 0xfe, 0xd9, 0x72, 0x1b, 0x00, 0x45, 0x48, 0xdb, - 0x6c, 0x1b, 0x00, 0x44, 0xa0, 0x7f, 0x73, 0x1b, 0x00, 0x47, 0xe6, 0x78, - 0x6f, 0x1b, 0x00, 0x04, 0xa9, 0xb1, 0x06, 0x45, 0x52, 0xe0, 0x6b, 0x1b, - 0x40, 0x42, 0xc3, 0x01, 0x6e, 0x1b, 0x80, 0x0d, 0x42, 0x1f, 0x01, 0x6d, - 0x1b, 0xc0, 0x00, 0x4d, 0xe0, 0x78, 0x70, 0x1b, 0x40, 0x4d, 0xe0, 0x78, - 0x71, 0x1b, 0x40, 0xa1, 0xdc, 0x02, 0x42, 0x16, 0x00, 0x29, 0x1b, 0x80, - 0xce, 0x02, 0x42, 0x37, 0x00, 0x18, 0x1b, 0x80, 0xc0, 0x02, 0x42, 0x68, - 0x0f, 0x24, 0x1b, 0x80, 0x9c, 0x02, 0xa5, 0x8d, 0x02, 0x42, 0x24, 0x02, - 0x15, 0x1b, 0x80, 0xff, 0x01, 0x42, 0x22, 0x00, 0x33, 0x1b, 0x00, 0x45, - 0x92, 0xdc, 0x07, 0x1b, 0x80, 0xeb, 0x01, 0x42, 0x77, 0x24, 0x1a, 0x1b, - 0x80, 0xdd, 0x01, 0xab, 0xc3, 0x01, 0x42, 0x74, 0x00, 0x2e, 0x1b, 0x80, - 0xae, 0x01, 0x42, 0x6c, 0x00, 0x2b, 0x1b, 0x00, 0xae, 0x8e, 0x01, 0x45, - 0xa9, 0xde, 0x11, 0x1b, 0x80, 0x80, 0x01, 0x42, 0xc1, 0x08, 0x27, 0x1b, - 0x80, 0x73, 0x42, 0x71, 0x00, 0x2d, 0x1b, 0x80, 0x5f, 0x42, 0x45, 0x05, - 0x32, 0x1b, 0x80, 0x47, 0xb4, 0x25, 0x45, 0xe3, 0xe0, 0x09, 0x1b, 0x80, - 0x18, 0x48, 0x25, 0xc2, 0x49, 0x1b, 0x00, 0x42, 0xa9, 0x01, 0x2f, 0x1b, - 0x00, 0x42, 0x20, 0x20, 0x2c, 0x1b, 0x00, 0x49, 0x21, 0xb8, 0x4a, 0x1b, - 0x40, 0x47, 0x82, 0xc3, 0x0a, 0x1b, 0x40, 0xe1, 0x22, 0x1b, 0x80, 0x06, - 0x49, 0x3c, 0xb8, 0x47, 0x1b, 0x40, 0x80, 0x01, 0xff, 0x45, 0x50, 0xdd, - 0x1d, 0x1b, 0x00, 0x4f, 0x84, 0x69, 0x1e, 0x1b, 0x00, 0x44, 0xf1, 0xba, - 0x23, 0x1b, 0x40, 0x03, 0x4f, 0x20, 0x01, 0xff, 0x42, 0x24, 0x02, 0x30, - 0x1b, 0x00, 0x42, 0xc1, 0x08, 0x31, 0x1b, 0x40, 0x45, 0xc3, 0xca, 0x0b, - 0x1b, 0xc0, 0x00, 0x47, 0x82, 0xc3, 0x0c, 0x1b, 0x40, 0x46, 0xd9, 0xcd, - 0x28, 0x1b, 0x40, 0x47, 0x82, 0xc3, 0x12, 0x1b, 0x40, 0xe1, 0x26, 0x1b, - 0x80, 0x0c, 0x42, 0x24, 0x02, 0x17, 0x1b, 0x00, 0x42, 0x20, 0x20, 0x1c, - 0x1b, 0x40, 0x47, 0x66, 0xc3, 0x21, 0x1b, 0x40, 0x46, 0xb7, 0xbd, 0x0d, - 0x1b, 0xc0, 0x00, 0x47, 0x82, 0xc3, 0x0e, 0x1b, 0x40, 0xe1, 0x13, 0x1b, - 0x80, 0x06, 0x49, 0x6e, 0xb0, 0x46, 0x1b, 0x40, 0x4a, 0x89, 0x69, 0x14, - 0x1b, 0x00, 0x47, 0xdf, 0xc6, 0x45, 0x1b, 0x40, 0x45, 0x29, 0xd7, 0x1b, - 0x1b, 0x40, 0x47, 0x82, 0xc3, 0x08, 0x1b, 0x40, 0x45, 0x15, 0xd7, 0x16, - 0x1b, 0x40, 0x47, 0xdf, 0xc6, 0x48, 0x1b, 0x00, 0x44, 0xe5, 0x29, 0x0f, - 0x1b, 0x40, 0x02, 0x6b, 0x00, 0x01, 0xff, 0x43, 0x6b, 0x02, 0x25, 0x1b, - 0x00, 0x05, 0x85, 0x69, 0x01, 0xff, 0x49, 0xea, 0xac, 0x1f, 0x1b, 0x00, - 0x49, 0x8a, 0x69, 0x20, 0x1b, 0x40, 0x45, 0x33, 0xd7, 0x19, 0x1b, 0x40, - 0x48, 0x6d, 0xb8, 0x2a, 0x1b, 0x40, 0x45, 0x92, 0xdc, 0x10, 0x1b, 0x00, - 0x44, 0xe5, 0x29, 0x05, 0x1b, 0x80, 0x0c, 0x4b, 0x87, 0x99, 0x4c, 0x1b, - 0x00, 0x4b, 0xdc, 0x9a, 0x4b, 0x1b, 0x40, 0x47, 0x82, 0xc3, 0x06, 0x1b, - 0x40, 0x45, 0xd1, 0x09, 0x58, 0x1b, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, - 0x59, 0x1b, 0x00, 0x43, 0xcd, 0x09, 0x51, 0x1b, 0x00, 0xb3, 0x14, 0xb4, - 0x06, 0x44, 0xf5, 0x1b, 0x50, 0x1b, 0x40, 0x44, 0x25, 0x01, 0x53, 0x1b, - 0x00, 0x42, 0x15, 0x02, 0x52, 0x1b, 0x40, 0x44, 0x96, 0x1b, 0x57, 0x1b, - 0x00, 0x42, 0x30, 0x27, 0x56, 0x1b, 0x40, 0x43, 0xd7, 0x04, 0x55, 0x1b, - 0x00, 0x43, 0xfb, 0x05, 0x54, 0x1b, 0x40, 0x02, 0xc1, 0x08, 0x06, 0x44, - 0x76, 0xe7, 0x5e, 0x1b, 0x40, 0x47, 0x24, 0xc9, 0x5d, 0x1b, 0x00, 0x45, - 0xd3, 0x6b, 0x5f, 0x1b, 0x40, 0x42, 0xd8, 0x00, 0x6f, 0xf9, 0x01, 0x4a, - 0x05, 0xa2, 0xc4, 0xf6, 0x01, 0x4b, 0xb8, 0x9b, 0x56, 0xf9, 0x41, 0x43, - 0xe1, 0x08, 0xa1, 0xf9, 0x01, 0x5e, 0x25, 0x12, 0xf8, 0xf3, 0x41, 0xab, - 0x0c, 0x42, 0x10, 0x00, 0x53, 0xf9, 0x01, 0x4b, 0x76, 0x9b, 0x2b, 0xf4, - 0x41, 0x80, 0x1f, 0x67, 0x5d, 0x04, 0xab, 0x27, 0x00, 0xb3, 0x01, 0xff, - 0x1a, 0x32, 0x1e, 0x06, 0x44, 0x4e, 0x47, 0x08, 0x00, 0x40, 0x49, 0x98, - 0xb3, 0x5b, 0x2b, 0x00, 0x4d, 0x7e, 0x80, 0x5d, 0x2b, 0x40, 0x4b, 0x48, - 0x98, 0x82, 0xf5, 0x01, 0x5a, 0x06, 0x20, 0x19, 0xf5, 0x41, 0x80, 0x01, - 0xff, 0x45, 0x9a, 0xd9, 0x7c, 0xf4, 0x01, 0x46, 0xab, 0x55, 0x7c, 0xf3, - 0x01, 0x45, 0x4f, 0x54, 0x24, 0xf4, 0x01, 0x46, 0xf7, 0x06, 0xbc, 0xf6, - 0x41, 0x45, 0xe5, 0xd9, 0xee, 0xf9, 0x01, 0xa3, 0x89, 0x89, 0x01, 0xa4, - 0xa2, 0x84, 0x01, 0xa5, 0xed, 0x80, 0x01, 0x4b, 0xf1, 0x93, 0x0b, 0x06, - 0x00, 0x04, 0x4a, 0xe5, 0xbf, 0x7d, 0x47, 0x29, 0x30, 0x08, 0x27, 0x80, - 0xa8, 0x7d, 0x4b, 0xeb, 0x95, 0x4d, 0x21, 0x00, 0xac, 0xfd, 0x75, 0xad, - 0xd9, 0x75, 0xae, 0xab, 0x60, 0xb0, 0xd0, 0x5b, 0x47, 0xac, 0xca, 0x52, - 0x26, 0x00, 0xb2, 0xcf, 0x03, 0xb3, 0x88, 0x03, 0xb4, 0xf9, 0x02, 0xb5, - 0xd0, 0x02, 0xb6, 0x06, 0x42, 0x89, 0x3e, 0x93, 0xfa, 0x41, 0x06, 0x0f, - 0xd1, 0x06, 0x45, 0x9f, 0xde, 0x51, 0xf9, 0x41, 0x51, 0x63, 0x4a, 0x39, - 0x0b, 0x01, 0x07, 0xf1, 0x04, 0x01, 0xff, 0xe1, 0x00, 0x0b, 0x81, 0x8f, - 0x02, 0xa2, 0x82, 0x02, 0x42, 0x73, 0x02, 0x17, 0x0b, 0x01, 0xa4, 0xef, - 0x01, 0xe5, 0x08, 0x0b, 0x81, 0xe5, 0x01, 0x42, 0x0f, 0x18, 0x1f, 0x0b, - 0x01, 0xa7, 0xcc, 0x01, 0xa8, 0xbf, 0x01, 0xe9, 0x0c, 0x0b, 0x81, 0xb5, - 0x01, 0x42, 0x18, 0x1e, 0x18, 0x0b, 0x01, 0x42, 0x37, 0x01, 0x10, 0x0b, - 0x01, 0x42, 0x68, 0x00, 0x2e, 0x0b, 0x01, 0x42, 0x2a, 0x02, 0x28, 0x0b, - 0x01, 0xae, 0x79, 0xef, 0x0a, 0x0b, 0x81, 0x70, 0x42, 0x6f, 0x02, 0x1e, - 0x0b, 0x01, 0x42, 0x88, 0x00, 0x2d, 0x0b, 0x01, 0xb3, 0x4c, 0xb4, 0x3a, - 0xf5, 0x0e, 0x0b, 0x81, 0x31, 0x42, 0x32, 0x00, 0x2c, 0x0b, 0x01, 0xb8, - 0x19, 0xb9, 0x0d, 0xba, 0x01, 0xff, 0xe5, 0x30, 0x0b, 0x01, 0x42, 0xb0, - 0x01, 0x32, 0x0b, 0x41, 0xe5, 0x2b, 0x0b, 0x01, 0x42, 0x4d, 0x00, 0x2a, - 0x0b, 0x41, 0xe5, 0x11, 0x0b, 0x01, 0x42, 0x32, 0x00, 0x13, 0x0b, 0x01, - 0x42, 0x4d, 0x00, 0x12, 0x0b, 0x41, 0xf5, 0x0f, 0x0b, 0x41, 0xe5, 0x19, - 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x1a, 0x0b, 0x01, 0x42, 0x77, 0x00, 0x1d, - 0x0b, 0x41, 0xe5, 0x2f, 0x0b, 0x01, 0xa8, 0x06, 0x43, 0x93, 0x05, 0x34, - 0x0b, 0x41, 0xe5, 0x31, 0x0b, 0x01, 0x42, 0x4d, 0x00, 0x33, 0x0b, 0x41, - 0xef, 0x0b, 0x0b, 0x41, 0xe5, 0x25, 0x0b, 0x01, 0xa7, 0x0c, 0x42, 0xd2, - 0x04, 0x27, 0x0b, 0x01, 0x42, 0x4d, 0x00, 0x26, 0x0b, 0x41, 0xe5, 0x22, - 0x0b, 0x01, 0x42, 0x32, 0x00, 0x24, 0x0b, 0x01, 0x42, 0x4d, 0x00, 0x23, - 0x0b, 0x41, 0xe9, 0x0d, 0x0b, 0x41, 0xe5, 0x35, 0x0b, 0x01, 0x42, 0x2a, - 0x02, 0x29, 0x0b, 0x41, 0xe5, 0x14, 0x0b, 0x01, 0x42, 0x5b, 0x07, 0x15, - 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x16, 0x0b, 0x41, 0xe5, 0x09, 0x0b, 0x41, - 0xe5, 0x1b, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x1c, 0x0b, 0x41, 0xe5, 0x20, - 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x21, 0x0b, 0x41, 0xe1, 0x01, 0x0b, 0x81, - 0x11, 0xe5, 0x06, 0x0b, 0x81, 0x08, 0xee, 0x04, 0x0b, 0x01, 0xef, 0x02, - 0x0b, 0x41, 0xe5, 0x07, 0x0b, 0x41, 0xee, 0x05, 0x0b, 0x01, 0xef, 0x03, - 0x0b, 0x41, 0x47, 0x49, 0xc5, 0x46, 0xf3, 0x01, 0x4a, 0x9f, 0xa8, 0xb3, - 0x20, 0x00, 0x02, 0x1e, 0x00, 0x01, 0xff, 0x49, 0xca, 0xab, 0xfa, 0xf6, - 0x01, 0xad, 0x01, 0xff, 0x53, 0x04, 0x43, 0xe7, 0xf3, 0x01, 0x45, 0xcb, - 0x45, 0x97, 0xf6, 0x41, 0x4b, 0xd8, 0x94, 0x5f, 0xf4, 0x01, 0x49, 0xaa, - 0xb3, 0x9b, 0x26, 0x40, 0xa3, 0x36, 0x47, 0x2c, 0x5a, 0xa6, 0x22, 0x00, - 0xb4, 0x06, 0x55, 0x49, 0x33, 0x43, 0x22, 0x40, 0x04, 0x97, 0x0b, 0x15, - 0x4c, 0x98, 0x8b, 0x32, 0xf6, 0x01, 0xb2, 0x01, 0xff, 0x43, 0x7e, 0xa8, - 0xd9, 0x2b, 0x00, 0x5a, 0x02, 0x1f, 0xe2, 0x26, 0x40, 0xeb, 0x2a, 0x00, - 0x80, 0x04, 0xed, 0x42, 0x20, 0x40, 0x49, 0x4a, 0x1b, 0x17, 0x22, 0x40, - 0x4b, 0xbd, 0x85, 0x0a, 0x26, 0x00, 0x49, 0x92, 0xb0, 0x9c, 0x01, 0x41, - 0x04, 0xe9, 0x05, 0xbd, 0x05, 0xe3, 0x12, 0x23, 0x00, 0x43, 0xed, 0x95, - 0x48, 0x26, 0x00, 0x07, 0xfe, 0x2e, 0x4b, 0x03, 0xd0, 0x00, 0x11, 0x02, - 0x35, 0x00, 0x01, 0xff, 0x4d, 0xce, 0x7a, 0x9b, 0xf6, 0x01, 0x4a, 0x8b, - 0xa8, 0xa8, 0xf3, 0x41, 0x0a, 0x9b, 0x01, 0x06, 0x53, 0x47, 0x44, 0xb0, - 0xfb, 0x41, 0x17, 0xcc, 0x2a, 0x1c, 0x18, 0xc7, 0x27, 0x06, 0x57, 0xac, - 0x2d, 0xb0, 0xf8, 0x41, 0x49, 0xa5, 0x01, 0x35, 0x29, 0x00, 0x4a, 0xc0, - 0x3b, 0xb1, 0xf8, 0x01, 0x47, 0x50, 0x02, 0x34, 0x29, 0x40, 0x49, 0xea, - 0x01, 0x36, 0x29, 0x00, 0x4a, 0xb3, 0x02, 0x37, 0x29, 0x40, 0xa1, 0xd5, - 0x04, 0xa3, 0xdc, 0x02, 0x49, 0xac, 0xae, 0x8f, 0x05, 0x00, 0xa5, 0xc7, - 0x02, 0x49, 0xa0, 0x14, 0x89, 0x05, 0x00, 0x46, 0x59, 0x5d, 0x8a, 0x05, - 0x00, 0x5e, 0x43, 0x12, 0x59, 0x05, 0x00, 0x4d, 0xbd, 0x30, 0x5e, 0x05, - 0x00, 0x07, 0x6f, 0x07, 0x01, 0xff, 0x06, 0xf2, 0x04, 0x2d, 0x08, 0x35, - 0x1d, 0x01, 0xff, 0x48, 0xbd, 0xbb, 0x87, 0x05, 0x00, 0x04, 0x68, 0x49, - 0x06, 0x47, 0x06, 0xcd, 0x16, 0xfb, 0x40, 0x43, 0x33, 0x3c, 0x14, 0xfb, - 0x00, 0x43, 0x36, 0x06, 0x15, 0xfb, 0x00, 0x43, 0x4e, 0x2b, 0x13, 0xfb, - 0x00, 0x43, 0x9c, 0xe9, 0x17, 0xfb, 0x40, 0x43, 0xf5, 0xb6, 0x61, 0x05, - 0x00, 0x43, 0x69, 0x19, 0x62, 0x05, 0x00, 0xa3, 0xd6, 0x01, 0x42, 0x68, - 0x0f, 0x64, 0x05, 0x00, 0xa5, 0xbf, 0x01, 0x43, 0x96, 0xaf, 0x86, 0x05, - 0x00, 0xa7, 0xaa, 0x01, 0x42, 0x0b, 0x00, 0x70, 0x05, 0x00, 0x43, 0x36, - 0x06, 0x6b, 0x05, 0x00, 0xaa, 0x91, 0x01, 0x02, 0x37, 0x01, 0x84, 0x01, - 0x44, 0xf6, 0xe5, 0x6c, 0x05, 0x00, 0x43, 0x31, 0x04, 0x74, 0x05, 0x00, - 0x43, 0x4e, 0x2b, 0x76, 0x05, 0x00, 0x42, 0xfe, 0x25, 0x85, 0x05, 0x00, - 0xb0, 0x5e, 0xb2, 0x52, 0xb3, 0x44, 0xb4, 0x32, 0xb6, 0x26, 0x43, 0x9c, - 0xe9, 0x6d, 0x05, 0x00, 0x42, 0x4b, 0x18, 0x75, 0x05, 0x80, 0x0d, 0xba, - 0x01, 0xff, 0xe1, 0x66, 0x05, 0x00, 0x42, 0xb0, 0x01, 0x6a, 0x05, 0x40, - 0x4c, 0xdb, 0x25, 0x88, 0x05, 0x00, 0x42, 0xa7, 0x01, 0x82, 0x05, 0x40, - 0x42, 0xd9, 0x1b, 0x7e, 0x05, 0x00, 0xef, 0x78, 0x05, 0x40, 0x43, 0xc2, - 0xbb, 0x7f, 0x05, 0x00, 0xef, 0x69, 0x05, 0x00, 0x49, 0xef, 0xb6, 0x60, - 0x05, 0x40, 0x42, 0x4e, 0x00, 0x7d, 0x05, 0x00, 0x42, 0x22, 0x00, 0x77, - 0x05, 0x40, 0xe1, 0x7c, 0x05, 0x00, 0x42, 0x4e, 0x00, 0x80, 0x05, 0x40, - 0x42, 0x4e, 0x00, 0x7a, 0x05, 0x00, 0x43, 0x24, 0xe9, 0x83, 0x05, 0x40, - 0xe8, 0x84, 0x05, 0x00, 0xee, 0x6f, 0x05, 0x40, 0xe1, 0x71, 0x05, 0x00, - 0x43, 0x26, 0x3e, 0x7b, 0x05, 0x40, 0x43, 0xa5, 0x02, 0x72, 0x05, 0x00, - 0x42, 0x29, 0x02, 0x63, 0x05, 0x40, 0x42, 0x98, 0x14, 0x65, 0x05, 0x00, - 0xe8, 0x67, 0x05, 0x00, 0xf4, 0x68, 0x05, 0x40, 0xe1, 0x6e, 0x05, 0x00, - 0xa8, 0x04, 0xef, 0x81, 0x05, 0x40, 0xe1, 0x79, 0x05, 0x00, 0x42, 0x4e, - 0x00, 0x73, 0x05, 0x40, 0x4c, 0x90, 0x8a, 0x5b, 0x05, 0x00, 0x4f, 0xae, - 0x00, 0x5c, 0x05, 0x40, 0x0e, 0xea, 0x04, 0x06, 0x44, 0x19, 0x04, 0x5d, - 0x05, 0x40, 0x43, 0xf5, 0xb6, 0x31, 0x05, 0x00, 0x43, 0x69, 0x19, 0x32, - 0x05, 0x00, 0xa3, 0xc9, 0x01, 0x42, 0x68, 0x0f, 0x34, 0x05, 0x00, 0xa5, - 0xb2, 0x01, 0x43, 0x96, 0xaf, 0x56, 0x05, 0x00, 0xa7, 0x9d, 0x01, 0x42, - 0x0b, 0x00, 0x40, 0x05, 0x00, 0x43, 0x36, 0x06, 0x3b, 0x05, 0x00, 0xaa, - 0x84, 0x01, 0x02, 0x37, 0x01, 0x78, 0x44, 0xf6, 0xe5, 0x3c, 0x05, 0x00, - 0x43, 0x31, 0x04, 0x44, 0x05, 0x00, 0x43, 0x4e, 0x2b, 0x46, 0x05, 0x00, - 0x42, 0xfe, 0x25, 0x55, 0x05, 0x00, 0xb0, 0x52, 0xb2, 0x46, 0xb3, 0x38, - 0xb4, 0x2c, 0xb6, 0x20, 0x43, 0x9c, 0xe9, 0x3d, 0x05, 0x00, 0x42, 0x4b, - 0x18, 0x45, 0x05, 0x80, 0x0d, 0xba, 0x01, 0xff, 0xe1, 0x36, 0x05, 0x00, - 0x42, 0xb0, 0x01, 0x3a, 0x05, 0x40, 0x42, 0xa7, 0x01, 0x52, 0x05, 0x40, - 0x42, 0xd9, 0x1b, 0x4e, 0x05, 0x00, 0xef, 0x48, 0x05, 0x40, 0x43, 0xc2, - 0xbb, 0x4f, 0x05, 0x00, 0xef, 0x39, 0x05, 0x40, 0x42, 0x4e, 0x00, 0x4d, - 0x05, 0x00, 0x42, 0x22, 0x00, 0x47, 0x05, 0x40, 0xe1, 0x4c, 0x05, 0x00, - 0x42, 0x4e, 0x00, 0x50, 0x05, 0x40, 0x42, 0x4e, 0x00, 0x4a, 0x05, 0x00, - 0x43, 0x24, 0xe9, 0x53, 0x05, 0x40, 0xe8, 0x54, 0x05, 0x00, 0xee, 0x3f, - 0x05, 0x40, 0xe1, 0x41, 0x05, 0x00, 0x43, 0x26, 0x3e, 0x4b, 0x05, 0x40, - 0x43, 0xa5, 0x02, 0x42, 0x05, 0x00, 0x42, 0x29, 0x02, 0x33, 0x05, 0x40, - 0x42, 0x98, 0x14, 0x35, 0x05, 0x00, 0xe8, 0x37, 0x05, 0x00, 0xf4, 0x38, - 0x05, 0x40, 0xe1, 0x3e, 0x05, 0x00, 0xa8, 0x04, 0xef, 0x51, 0x05, 0x40, - 0xe1, 0x49, 0x05, 0x00, 0x42, 0x4e, 0x00, 0x43, 0x05, 0x40, 0x50, 0x64, - 0x4a, 0x5f, 0x05, 0x00, 0x49, 0x4d, 0x32, 0x5a, 0x05, 0x40, 0x80, 0x68, - 0x07, 0xed, 0x05, 0x01, 0xff, 0x49, 0x5b, 0xae, 0x06, 0x06, 0x00, 0x06, - 0xf4, 0x05, 0x17, 0x4b, 0x12, 0x94, 0x07, 0x06, 0x00, 0x04, 0x6f, 0x02, - 0x01, 0xff, 0x4a, 0x25, 0xa5, 0x09, 0x06, 0x00, 0x51, 0x50, 0x58, 0x0a, - 0x06, 0x40, 0x45, 0xd1, 0x09, 0x68, 0x06, 0x00, 0xa6, 0x2e, 0x44, 0xb8, - 0x27, 0x69, 0x06, 0x00, 0x43, 0xcd, 0x09, 0x61, 0x06, 0x00, 0xb3, 0x14, - 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x60, 0x06, 0x40, 0x44, 0x25, 0x01, 0x63, - 0x06, 0x00, 0x42, 0x15, 0x02, 0x62, 0x06, 0x40, 0x44, 0x96, 0x1b, 0x67, - 0x06, 0x00, 0x42, 0x30, 0x27, 0x66, 0x06, 0x40, 0x43, 0xd7, 0x04, 0x65, - 0x06, 0x00, 0x43, 0xfb, 0x05, 0x64, 0x06, 0x40, 0x52, 0xf3, 0x4a, 0x87, - 0x08, 0x00, 0xa3, 0x91, 0x51, 0xa4, 0xba, 0x50, 0xa5, 0x96, 0x50, 0xa6, - 0xc8, 0x4f, 0x02, 0x22, 0x00, 0xac, 0x4f, 0x4e, 0xee, 0x71, 0x57, 0x06, - 0x00, 0x45, 0x12, 0x4b, 0x50, 0x06, 0x80, 0xfd, 0x4e, 0xac, 0xe0, 0x0f, - 0x02, 0x6c, 0x00, 0xe3, 0x07, 0x07, 0xbf, 0x35, 0xd2, 0x07, 0x05, 0xfb, - 0x03, 0xbb, 0x07, 0xb0, 0x97, 0x07, 0x4d, 0xbd, 0x30, 0x1f, 0x06, 0x00, - 0xb2, 0xdf, 0x06, 0xb3, 0xa4, 0x01, 0xb4, 0x2b, 0xb6, 0x0c, 0x50, 0x49, - 0x62, 0x5f, 0x06, 0x00, 0x48, 0xed, 0xc2, 0x59, 0x06, 0x40, 0x4c, 0x60, - 0x42, 0x8e, 0x08, 0x00, 0x0a, 0x5c, 0x70, 0x01, 0xff, 0x49, 0xf9, 0x10, - 0x5c, 0x06, 0x00, 0x56, 0xe0, 0x30, 0x5b, 0x06, 0x00, 0x4d, 0xe9, 0x30, - 0x5a, 0x06, 0x40, 0xa1, 0x47, 0x52, 0xc7, 0x4c, 0x6c, 0x06, 0x00, 0x04, - 0xcd, 0x09, 0x0c, 0x5a, 0x84, 0x1f, 0x1e, 0x06, 0x00, 0x51, 0xfa, 0x58, - 0xe3, 0x08, 0x40, 0x05, 0x73, 0xdd, 0x21, 0x08, 0x9b, 0x0a, 0x11, 0x09, - 0x8d, 0x0a, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xeb, 0x08, 0x00, 0x45, 0x25, - 0x06, 0xee, 0x08, 0x40, 0x45, 0x5c, 0x00, 0xea, 0x08, 0x00, 0x45, 0x25, - 0x06, 0xed, 0x08, 0x40, 0x45, 0x5c, 0x00, 0xec, 0x08, 0x00, 0x45, 0x25, - 0x06, 0xef, 0x08, 0x40, 0x4b, 0x30, 0x95, 0x73, 0xfe, 0x00, 0x45, 0xc9, - 0x1e, 0x40, 0x06, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, 0xe4, - 0x70, 0x71, 0xfe, 0x00, 0x0b, 0xed, 0x98, 0x06, 0x4e, 0x5d, 0x0d, 0x85, - 0x08, 0x40, 0x45, 0x56, 0x00, 0x83, 0x08, 0x00, 0x43, 0x08, 0x83, 0x84, - 0x08, 0x40, 0x48, 0x32, 0x54, 0x1b, 0x06, 0x00, 0x45, 0x10, 0xdc, 0x51, - 0x06, 0x80, 0x9b, 0x05, 0x04, 0xdc, 0x02, 0xc7, 0x04, 0x05, 0x3d, 0x06, - 0xc1, 0x01, 0x53, 0xea, 0x47, 0xde, 0x06, 0x00, 0xb5, 0x90, 0x01, 0x06, - 0x7f, 0x14, 0x01, 0xff, 0x02, 0x3b, 0x01, 0x71, 0x0a, 0x75, 0x41, 0x61, - 0x44, 0x03, 0x07, 0xbf, 0xfb, 0x00, 0x0a, 0x4f, 0xa8, 0x4b, 0xb4, 0x06, - 0x4b, 0x7e, 0x9c, 0xc2, 0xfb, 0x40, 0x0a, 0x08, 0x11, 0x22, 0x08, 0xc2, - 0x06, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xb4, 0xfb, 0x00, 0x45, 0x25, 0x06, - 0xb5, 0xfb, 0x00, 0x0b, 0xca, 0x06, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xbd, - 0xfb, 0x00, 0x45, 0x25, 0x06, 0xbe, 0xfb, 0x40, 0x45, 0x5c, 0x00, 0xb6, - 0xfb, 0x00, 0x45, 0x25, 0x06, 0xb7, 0xfb, 0x00, 0x13, 0x9c, 0x01, 0x01, - 0xff, 0x45, 0x5c, 0x00, 0xb8, 0xfb, 0x00, 0x45, 0x25, 0x06, 0xb9, 0xfb, - 0x40, 0x45, 0x5c, 0x00, 0xc0, 0xfb, 0x00, 0x45, 0x25, 0x06, 0xc1, 0xfb, - 0x40, 0x45, 0x5c, 0x00, 0xba, 0xfb, 0x00, 0x45, 0x25, 0x06, 0xbb, 0xfb, - 0x40, 0x02, 0xc6, 0x00, 0x06, 0x57, 0x7e, 0x2d, 0xbc, 0xfb, 0x40, 0x45, - 0x5c, 0x00, 0xb2, 0xfb, 0x00, 0x45, 0x25, 0x06, 0xb3, 0xfb, 0x40, 0x4c, - 0x80, 0x85, 0x56, 0x06, 0x00, 0x43, 0x62, 0x32, 0x52, 0x06, 0x80, 0x06, - 0x58, 0x7f, 0x27, 0x9d, 0x08, 0x40, 0x80, 0x01, 0xff, 0x45, 0x25, 0x06, - 0xd0, 0x08, 0x00, 0x4d, 0xe0, 0x02, 0x7e, 0xfe, 0x00, 0x4b, 0x30, 0x67, - 0x7f, 0xfe, 0x40, 0x45, 0x00, 0x59, 0x19, 0x06, 0x00, 0x02, 0xed, 0x06, - 0xea, 0x02, 0x05, 0x2a, 0x0a, 0x5c, 0x45, 0x12, 0x4b, 0x1a, 0x06, 0x00, - 0x04, 0x0d, 0x04, 0x0c, 0x43, 0x08, 0x83, 0xe5, 0x06, 0x00, 0x43, 0x4d, - 0x00, 0xe6, 0x06, 0x40, 0x44, 0xb4, 0x1e, 0xed, 0x06, 0x00, 0x4f, 0xfc, - 0x69, 0xd9, 0x08, 0x00, 0x44, 0x62, 0xe7, 0xe3, 0x06, 0x00, 0xb7, 0x01, - 0xff, 0x42, 0xaf, 0x3f, 0xd3, 0x08, 0x00, 0x04, 0xa0, 0x22, 0x01, 0xff, - 0xa9, 0x18, 0x45, 0x8d, 0x45, 0xff, 0x0e, 0x01, 0x44, 0x0e, 0xe7, 0xfe, - 0x0e, 0x01, 0x45, 0xe4, 0x9a, 0xfd, 0x0e, 0x01, 0x47, 0xfc, 0xcb, 0x9b, - 0x08, 0x40, 0x45, 0x91, 0xdd, 0x9a, 0x08, 0x00, 0x46, 0x41, 0xd5, 0x99, - 0x08, 0x40, 0x43, 0x35, 0x06, 0xd6, 0x08, 0x00, 0x54, 0xac, 0x3c, 0xe1, - 0x06, 0x00, 0xa6, 0xef, 0x01, 0x44, 0x13, 0x34, 0xda, 0x06, 0x00, 0xac, - 0xbf, 0x01, 0xad, 0xa5, 0x01, 0x44, 0xc5, 0x40, 0xe8, 0x06, 0x80, 0x97, - 0x01, 0x43, 0x9d, 0x12, 0xd7, 0x08, 0x00, 0x4c, 0x24, 0x8d, 0xdf, 0x06, - 0x00, 0xb3, 0x77, 0xb4, 0x69, 0x58, 0x6f, 0x28, 0xe0, 0x06, 0x00, 0xb7, - 0x1c, 0x43, 0x4d, 0x00, 0xe7, 0x06, 0x80, 0x0f, 0x02, 0x59, 0x00, 0x01, - 0xff, 0xe8, 0xcd, 0x08, 0x00, 0x42, 0x9e, 0x01, 0x17, 0x06, 0x40, 0x5b, - 0xd8, 0x17, 0xcb, 0x08, 0x40, 0x42, 0xaf, 0x3f, 0xf3, 0x08, 0x00, 0x04, - 0xa0, 0x22, 0x01, 0xff, 0xa1, 0x1a, 0x43, 0x57, 0xe9, 0xde, 0x08, 0x00, - 0x02, 0x45, 0x05, 0x06, 0x45, 0x3d, 0xe1, 0xdf, 0x08, 0x40, 0xe8, 0xcc, - 0x08, 0x00, 0x43, 0xad, 0x3a, 0xdd, 0x08, 0x40, 0x45, 0x37, 0xdd, 0x98, - 0x08, 0x00, 0x46, 0x9d, 0xd3, 0xdc, 0x08, 0x00, 0x45, 0x53, 0xdf, 0xd4, - 0x08, 0x00, 0x47, 0x46, 0xcb, 0xdb, 0x08, 0x00, 0x4b, 0x08, 0x9b, 0xda, - 0x08, 0x40, 0x42, 0xe6, 0x06, 0x15, 0x06, 0x00, 0x49, 0x83, 0x0e, 0xdb, - 0x06, 0x40, 0x42, 0xe8, 0x01, 0xd5, 0x08, 0x00, 0x43, 0xca, 0x08, 0xdc, - 0x06, 0x00, 0x49, 0xda, 0xb0, 0xe1, 0x08, 0x40, 0x4b, 0x00, 0x6a, 0xd8, - 0x08, 0x40, 0x44, 0x8e, 0x45, 0xe4, 0x06, 0x00, 0x05, 0x14, 0x34, 0x01, - 0xff, 0x4b, 0xd8, 0x14, 0xd8, 0x06, 0x00, 0x4c, 0xe1, 0x02, 0xe2, 0x06, - 0x40, 0x47, 0x9a, 0xc4, 0xd9, 0x06, 0x00, 0x08, 0x35, 0x1d, 0x01, 0xff, - 0x0a, 0x21, 0x9f, 0x0c, 0x5e, 0x9d, 0x12, 0xd7, 0x06, 0x00, 0x5e, 0xbb, - 0x12, 0xd6, 0x06, 0x40, 0x4c, 0x34, 0x89, 0x16, 0x06, 0x00, 0x4a, 0xe3, - 0xaa, 0x16, 0x06, 0x40, 0x48, 0xe5, 0xb9, 0xca, 0x08, 0x00, 0x4e, 0x92, - 0x73, 0xe0, 0x08, 0x40, 0x47, 0xe6, 0xb9, 0xc9, 0x08, 0x00, 0x43, 0x8f, - 0x00, 0x18, 0x06, 0x40, 0x4f, 0x20, 0x64, 0x11, 0x06, 0x00, 0x45, 0xeb, - 0xdd, 0x0f, 0x06, 0x00, 0x02, 0x71, 0x00, 0x33, 0xb3, 0x06, 0x49, 0x0e, - 0xb6, 0x14, 0x06, 0x40, 0xa1, 0x11, 0x06, 0x89, 0xd2, 0x01, 0xff, 0x49, - 0x93, 0x39, 0xfd, 0x06, 0x00, 0x50, 0x89, 0x5f, 0xfe, 0x06, 0x40, 0x43, - 0xe0, 0xb0, 0x03, 0x06, 0x00, 0x5a, 0x80, 0x1e, 0x10, 0x06, 0x00, 0x44, - 0x36, 0xe6, 0x04, 0x06, 0x00, 0x43, 0x11, 0x41, 0x01, 0x06, 0x40, 0x4f, - 0x79, 0x65, 0x13, 0x06, 0x00, 0x50, 0x39, 0x5d, 0x12, 0x06, 0x40, 0x80, - 0x01, 0xff, 0x4d, 0xe0, 0x02, 0x7c, 0xfe, 0x00, 0x4b, 0x30, 0x67, 0x7d, - 0xfe, 0x40, 0xa1, 0x23, 0x4d, 0xb8, 0x7b, 0x5d, 0x06, 0x00, 0x0f, 0x4e, - 0x2e, 0x06, 0x63, 0x23, 0x0a, 0xec, 0x06, 0x40, 0x45, 0x5c, 0x00, 0xf8, - 0x08, 0x80, 0x06, 0x45, 0x25, 0x06, 0xfa, 0x08, 0x40, 0x49, 0x4a, 0x37, - 0xfd, 0x08, 0x40, 0x4e, 0x0a, 0x72, 0x88, 0x08, 0x00, 0xf9, 0x08, 0x06, - 0x40, 0x4b, 0xc5, 0x93, 0x6a, 0x06, 0x00, 0x51, 0x20, 0x55, 0x91, 0x08, - 0x00, 0x4e, 0x6c, 0x72, 0xe9, 0x06, 0x00, 0xaf, 0x01, 0xff, 0x4f, 0x5a, - 0x66, 0x0e, 0x06, 0x00, 0x4e, 0xf6, 0x76, 0x90, 0x08, 0x40, 0x48, 0x4d, - 0xbb, 0xf1, 0x08, 0x00, 0x48, 0xe4, 0x70, 0xf0, 0x08, 0x00, 0x48, 0x95, - 0xbd, 0xf2, 0x08, 0x40, 0x4a, 0xd6, 0x46, 0x05, 0x06, 0x00, 0x44, 0xdb, - 0x02, 0x00, 0x06, 0x40, 0x03, 0x65, 0x32, 0xe7, 0x07, 0x03, 0xbb, 0x00, - 0xd6, 0x07, 0x0b, 0xfb, 0x4d, 0x01, 0xff, 0xa1, 0xc2, 0x07, 0x43, 0x20, - 0x85, 0x01, 0xee, 0x01, 0xa4, 0xe8, 0x05, 0x43, 0x96, 0xaf, 0x10, 0xee, - 0x01, 0x45, 0x49, 0x94, 0x1b, 0xee, 0x01, 0x43, 0xbe, 0x1e, 0x07, 0xee, - 0x01, 0x08, 0xd7, 0x14, 0xd1, 0x04, 0x44, 0x13, 0x34, 0x02, 0xee, 0x01, - 0xab, 0xbc, 0x04, 0xac, 0xfc, 0x02, 0x44, 0xb4, 0x1e, 0x0c, 0xee, 0x01, - 0x44, 0xc5, 0x40, 0x0d, 0xee, 0x01, 0x09, 0xff, 0x39, 0xdf, 0x02, 0x43, - 0x9d, 0x12, 0x12, 0xee, 0x01, 0x43, 0xd4, 0x74, 0x13, 0xee, 0x01, 0xb3, - 0xa0, 0x01, 0xb4, 0x1b, 0x43, 0x08, 0x83, 0x05, 0xee, 0x01, 0x43, 0x4d, - 0x00, 0x09, 0xee, 0x01, 0x02, 0x59, 0x00, 0x01, 0xff, 0xe8, 0x1a, 0xee, - 0x01, 0x42, 0x9e, 0x01, 0x06, 0xee, 0x41, 0xa1, 0x15, 0x42, 0x4e, 0x00, - 0x15, 0xee, 0x01, 0xa8, 0x01, 0xff, 0x42, 0x13, 0x00, 0x18, 0xee, 0x01, - 0x42, 0x4e, 0x00, 0x16, 0xee, 0x41, 0xe8, 0x08, 0xee, 0x01, 0x05, 0xb0, - 0x15, 0x01, 0xff, 0x43, 0x35, 0x06, 0x4f, 0xee, 0x01, 0xa4, 0x44, 0x45, - 0x49, 0x94, 0x5b, 0xee, 0x01, 0x43, 0xbe, 0x1e, 0x47, 0xee, 0x01, 0x44, - 0x13, 0x34, 0x42, 0xee, 0x01, 0x44, 0xbc, 0x3c, 0x57, 0xee, 0x01, 0x43, - 0xb0, 0x00, 0x4b, 0xee, 0x01, 0x44, 0xc5, 0x40, 0x4d, 0xee, 0x01, 0x43, - 0x9d, 0x12, 0x52, 0xee, 0x01, 0xb3, 0x06, 0x43, 0x4d, 0x00, 0x49, 0xee, - 0x41, 0x42, 0xe8, 0x01, 0x51, 0xee, 0x01, 0x43, 0xca, 0x08, 0x4e, 0xee, - 0x01, 0x44, 0xf5, 0xd0, 0x54, 0xee, 0x41, 0x42, 0xe8, 0x01, 0x59, 0xee, - 0x01, 0x07, 0xad, 0x3c, 0x01, 0xff, 0x44, 0xc5, 0x40, 0x5d, 0xee, 0x01, - 0x43, 0x9d, 0x12, 0x5f, 0xee, 0x41, 0x42, 0xe8, 0x01, 0x11, 0xee, 0x01, - 0x43, 0xca, 0x08, 0x0e, 0xee, 0x01, 0x44, 0xf5, 0xd0, 0x14, 0xee, 0x01, - 0x09, 0x53, 0xa9, 0x01, 0xff, 0x43, 0x35, 0x06, 0x6f, 0xee, 0x01, 0x43, - 0x20, 0x85, 0x61, 0xee, 0x01, 0xa4, 0x74, 0x43, 0x96, 0xaf, 0x70, 0xee, - 0x01, 0x45, 0x49, 0x94, 0x7b, 0xee, 0x01, 0xa8, 0x5a, 0x44, 0x13, 0x34, - 0x62, 0xee, 0x01, 0xab, 0x46, 0x44, 0xb4, 0x1e, 0x6c, 0xee, 0x01, 0x44, - 0xc5, 0x40, 0x6d, 0xee, 0x01, 0x43, 0x9d, 0x12, 0x72, 0xee, 0x01, 0xb3, - 0x20, 0xb4, 0x0c, 0x43, 0x4d, 0x00, 0x69, 0xee, 0x01, 0x43, 0x0e, 0x78, - 0x7a, 0xee, 0x41, 0x42, 0xe6, 0x06, 0x68, 0xee, 0x01, 0x42, 0x4e, 0x00, - 0x75, 0xee, 0x01, 0x43, 0x26, 0x3e, 0x76, 0xee, 0x41, 0x42, 0xe8, 0x01, - 0x71, 0xee, 0x01, 0x43, 0xca, 0x08, 0x6e, 0xee, 0x01, 0x44, 0xf5, 0xd0, - 0x74, 0xee, 0x41, 0x42, 0x9e, 0x12, 0x6a, 0xee, 0x01, 0x43, 0xbe, 0x1e, - 0x77, 0xee, 0x41, 0x42, 0xe6, 0x06, 0x67, 0xee, 0x01, 0x42, 0x4e, 0x00, - 0x64, 0xee, 0x41, 0x42, 0xe8, 0x01, 0x79, 0xee, 0x01, 0x07, 0xad, 0x3c, - 0x01, 0xff, 0x43, 0x20, 0x85, 0x7c, 0xee, 0x01, 0x43, 0x96, 0xaf, 0x7e, - 0xee, 0x41, 0x4c, 0xf0, 0x87, 0xf1, 0xee, 0x01, 0x5a, 0xb4, 0x1e, 0xf0, - 0xee, 0x41, 0x42, 0x57, 0x00, 0x0b, 0xee, 0x01, 0x06, 0x51, 0xd4, 0x01, - 0xff, 0xa1, 0xa3, 0x01, 0x43, 0x20, 0x85, 0x81, 0xee, 0x01, 0x02, 0x68, - 0x0f, 0x90, 0x01, 0x43, 0x96, 0xaf, 0x90, 0xee, 0x01, 0x45, 0x49, 0x94, - 0x9b, 0xee, 0x01, 0xa8, 0x76, 0x44, 0x13, 0x34, 0x82, 0xee, 0x01, 0x44, - 0xbc, 0x3c, 0x97, 0xee, 0x01, 0x43, 0xb0, 0x00, 0x8b, 0xee, 0x01, 0x44, - 0xb4, 0x1e, 0x8c, 0xee, 0x01, 0x44, 0xc5, 0x40, 0x8d, 0xee, 0x01, 0x43, - 0x9d, 0x12, 0x92, 0xee, 0x01, 0x43, 0xd4, 0x74, 0x93, 0xee, 0x01, 0xb3, - 0x38, 0xb4, 0x1b, 0x43, 0x08, 0x83, 0x85, 0xee, 0x01, 0x43, 0x4d, 0x00, - 0x89, 0xee, 0x01, 0x02, 0x59, 0x00, 0x01, 0xff, 0xe8, 0x9a, 0xee, 0x01, - 0x42, 0x9e, 0x01, 0x86, 0xee, 0x41, 0x42, 0xe6, 0x06, 0x88, 0xee, 0x01, - 0x42, 0x4e, 0x00, 0x95, 0xee, 0x01, 0xa8, 0x01, 0xff, 0x42, 0x13, 0x00, - 0x98, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x96, 0xee, 0x41, 0x42, 0xe8, 0x01, - 0x91, 0xee, 0x01, 0x43, 0xca, 0x08, 0x8e, 0xee, 0x01, 0x44, 0xf5, 0xd0, - 0x94, 0xee, 0x41, 0x42, 0xe6, 0x06, 0x87, 0xee, 0x01, 0x42, 0x4e, 0x00, - 0x84, 0xee, 0x41, 0xe4, 0x99, 0xee, 0x01, 0xec, 0x83, 0xee, 0x41, 0x42, - 0x9e, 0x01, 0x8f, 0xee, 0x01, 0x43, 0x68, 0x00, 0x80, 0xee, 0x41, 0x42, - 0x9e, 0x12, 0x0a, 0xee, 0x01, 0x43, 0xbe, 0x1e, 0x17, 0xee, 0x41, 0x43, - 0x35, 0x06, 0x2f, 0xee, 0x01, 0x43, 0x20, 0x85, 0x21, 0xee, 0x01, 0x43, - 0x76, 0xae, 0x39, 0xee, 0x01, 0x43, 0x96, 0xaf, 0x30, 0xee, 0x01, 0x45, - 0x49, 0x94, 0x3b, 0xee, 0x01, 0xa8, 0x54, 0x44, 0x13, 0x34, 0x22, 0xee, - 0x01, 0xab, 0x40, 0x43, 0xb0, 0x00, 0x2b, 0xee, 0x01, 0x44, 0xb4, 0x1e, - 0x2c, 0xee, 0x01, 0x44, 0xc5, 0x40, 0x2d, 0xee, 0x01, 0x43, 0x9d, 0x12, - 0x32, 0xee, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x43, 0x4d, 0x00, 0x29, 0xee, - 0x41, 0x42, 0x4e, 0x00, 0x35, 0xee, 0x01, 0x43, 0x26, 0x3e, 0x36, 0xee, - 0x41, 0x42, 0xe8, 0x01, 0x31, 0xee, 0x01, 0x43, 0xca, 0x08, 0x2e, 0xee, - 0x01, 0x44, 0xf5, 0xd0, 0x34, 0xee, 0x41, 0x42, 0x9e, 0x12, 0x2a, 0xee, - 0x01, 0x43, 0xbe, 0x1e, 0x37, 0xee, 0x41, 0x42, 0xe6, 0x06, 0x27, 0xee, - 0x01, 0x42, 0x4e, 0x00, 0x24, 0xee, 0x41, 0xa1, 0xc6, 0x01, 0xaf, 0x01, - 0xff, 0x06, 0xae, 0x3c, 0xa6, 0x01, 0x0c, 0x30, 0x70, 0x01, 0xff, 0x43, - 0x35, 0x06, 0xaf, 0xee, 0x01, 0x43, 0x20, 0x85, 0xa1, 0xee, 0x01, 0x02, - 0x68, 0x0f, 0x88, 0x01, 0x43, 0x96, 0xaf, 0xb0, 0xee, 0x01, 0x45, 0x49, - 0x94, 0xbb, 0xee, 0x01, 0x43, 0xbe, 0x1e, 0xa7, 0xee, 0x01, 0x44, 0x13, - 0x34, 0xa2, 0xee, 0x01, 0x44, 0xbc, 0x3c, 0xb7, 0xee, 0x01, 0x43, 0xb0, - 0x00, 0xab, 0xee, 0x01, 0x44, 0xb4, 0x1e, 0xac, 0xee, 0x01, 0x44, 0xc5, - 0x40, 0xad, 0xee, 0x01, 0x43, 0x9d, 0x12, 0xb2, 0xee, 0x01, 0x43, 0xd4, - 0x74, 0xb3, 0xee, 0x01, 0xb3, 0x38, 0xb4, 0x1b, 0x43, 0x08, 0x83, 0xa5, - 0xee, 0x01, 0x43, 0x4d, 0x00, 0xa9, 0xee, 0x01, 0x02, 0x59, 0x00, 0x01, - 0xff, 0xe8, 0xba, 0xee, 0x01, 0x42, 0x9e, 0x01, 0xa6, 0xee, 0x41, 0x42, - 0xe6, 0x06, 0xa8, 0xee, 0x01, 0x42, 0x4e, 0x00, 0xb5, 0xee, 0x01, 0xa8, - 0x01, 0xff, 0x42, 0x13, 0x00, 0xb8, 0xee, 0x01, 0x42, 0x4e, 0x00, 0xb6, - 0xee, 0x41, 0x42, 0xe8, 0x01, 0xb1, 0xee, 0x01, 0x43, 0xca, 0x08, 0xae, - 0xee, 0x01, 0x44, 0xf5, 0xd0, 0xb4, 0xee, 0x41, 0xe4, 0xb9, 0xee, 0x01, - 0xec, 0xa3, 0xee, 0x41, 0x43, 0x20, 0x85, 0x1c, 0xee, 0x01, 0x43, 0x96, - 0xaf, 0x1e, 0xee, 0x01, 0x44, 0xc5, 0x40, 0x1d, 0xee, 0x01, 0x43, 0x9d, - 0x12, 0x1f, 0xee, 0x41, 0xe4, 0x19, 0xee, 0x01, 0xec, 0x03, 0xee, 0x41, - 0x42, 0x9e, 0x01, 0x0f, 0xee, 0x01, 0x43, 0x68, 0x00, 0x00, 0xee, 0x41, - 0x4b, 0xc5, 0x40, 0x58, 0x06, 0x00, 0x54, 0xbc, 0x40, 0xff, 0x08, 0x40, - 0x47, 0x89, 0xc3, 0x9c, 0x08, 0x00, 0x47, 0xf6, 0x29, 0x53, 0x06, 0x40, - 0x05, 0x10, 0x1a, 0xf8, 0x3e, 0xa5, 0xc6, 0x20, 0x08, 0x35, 0x1d, 0x01, - 0xff, 0xa1, 0xda, 0x1e, 0xa2, 0xa9, 0x1d, 0x09, 0x76, 0xae, 0x8c, 0x1c, - 0x09, 0x96, 0xaf, 0x8b, 0x1b, 0x0b, 0x49, 0x94, 0xac, 0x1a, 0xa8, 0xff, - 0x18, 0xaa, 0xfa, 0x17, 0xab, 0xec, 0x15, 0x09, 0xa6, 0x12, 0xa5, 0x13, - 0xad, 0xe2, 0x11, 0x0a, 0xfc, 0x69, 0xeb, 0x0f, 0xb1, 0xf2, 0x0e, 0xb2, - 0xb0, 0x0e, 0xb3, 0x83, 0x08, 0xb4, 0x92, 0x04, 0x36, 0x3e, 0x00, 0xf8, - 0x03, 0x56, 0xe2, 0x33, 0xf8, 0xfd, 0x00, 0x09, 0x4d, 0x00, 0x19, 0x0e, - 0x0e, 0x78, 0x01, 0xff, 0xa9, 0x06, 0x4b, 0x30, 0x67, 0x3b, 0xfd, 0x40, - 0x4b, 0xd8, 0x14, 0xb9, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x28, 0xfc, 0x40, - 0x0d, 0x67, 0x00, 0xc4, 0x03, 0xa8, 0x83, 0x01, 0x05, 0x13, 0x34, 0x6b, - 0x06, 0xb9, 0x55, 0x5b, 0x05, 0xb4, 0x1e, 0x22, 0x4f, 0xed, 0x69, 0x94, - 0xfc, 0x00, 0x4e, 0xd4, 0x74, 0x91, 0xfc, 0x00, 0x04, 0x4d, 0x00, 0x06, - 0x4f, 0x34, 0x6e, 0x92, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x96, 0xfc, 0x00, - 0x4d, 0xe0, 0x02, 0x5a, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x93, 0xfc, 0x00, - 0xa9, 0x21, 0x4b, 0x30, 0x67, 0xf0, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x05, 0xb4, 0x1e, 0x06, 0x4e, 0x58, 0x49, 0xb0, 0xfd, 0x40, 0x4a, - 0x97, 0x29, 0x9c, 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0x9d, 0xfd, 0x40, 0x4b, - 0xd8, 0x14, 0xdd, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x58, 0xfc, 0x40, 0x4b, - 0xd8, 0x14, 0xdc, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x57, 0xfc, 0x40, 0xa9, - 0x06, 0x53, 0x53, 0x49, 0xaf, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xda, 0xfc, - 0x00, 0x4c, 0xe1, 0x02, 0x55, 0xfc, 0x40, 0xa1, 0x11, 0x03, 0x4e, 0x00, - 0x01, 0xff, 0x4c, 0xd7, 0x14, 0xde, 0xfc, 0x00, 0x4b, 0x30, 0x67, 0xf1, - 0xfc, 0x40, 0x02, 0x4f, 0x00, 0x92, 0x02, 0x0f, 0x58, 0x00, 0x01, 0xff, - 0xa1, 0xd8, 0x01, 0x02, 0x60, 0x00, 0xbe, 0x01, 0xa8, 0x9a, 0x01, 0x06, - 0x13, 0x34, 0x89, 0x01, 0x51, 0xb9, 0x55, 0x99, 0xfc, 0x00, 0x05, 0xb4, - 0x1e, 0x65, 0x4f, 0xed, 0x69, 0x67, 0xfc, 0x00, 0x03, 0xd4, 0x8f, 0x4f, - 0x4e, 0xd4, 0x74, 0x64, 0xfc, 0x00, 0x02, 0x2e, 0x02, 0x39, 0x04, 0xf6, - 0xe7, 0x29, 0xb9, 0x06, 0x4f, 0x34, 0x6e, 0x65, 0xfc, 0x40, 0x03, 0x4e, - 0x00, 0x11, 0x02, 0x2e, 0x02, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xf5, 0xfb, - 0x00, 0x4d, 0xe0, 0x02, 0xf4, 0xfb, 0x40, 0x4a, 0x97, 0x29, 0x69, 0xfc, - 0x00, 0x4d, 0xe0, 0x02, 0x04, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0xef, 0xfb, - 0x00, 0x4d, 0xe0, 0x02, 0xee, 0xfb, 0x40, 0x4a, 0x97, 0x29, 0xf1, 0xfb, - 0x00, 0x4d, 0xe0, 0x02, 0xf0, 0xfb, 0x40, 0x4a, 0x97, 0x29, 0xf3, 0xfb, - 0x00, 0x4d, 0xe0, 0x02, 0xf2, 0xfb, 0x40, 0x4a, 0x97, 0x29, 0x66, 0xfc, - 0x00, 0xa9, 0x06, 0x4b, 0x30, 0x67, 0xdf, 0xfc, 0x40, 0x4b, 0xd8, 0x14, - 0x9a, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x02, 0xfc, 0x40, 0x4b, 0xd8, 0x14, - 0x97, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x00, 0xfc, 0x40, 0x04, 0xcc, 0x54, - 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, 0xd7, 0x14, 0x9b, 0xfc, 0x00, - 0x4b, 0x30, 0x67, 0xe0, 0xfc, 0x40, 0x4b, 0xd8, 0x14, 0x98, 0xfc, 0x00, - 0x4c, 0xe1, 0x02, 0x01, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0xf7, 0xfb, 0x00, - 0xa9, 0x01, 0xff, 0x4b, 0xd8, 0x14, 0xf8, 0xfb, 0x00, 0x4c, 0xe1, 0x02, - 0xf6, 0xfb, 0x40, 0x02, 0x60, 0x00, 0x22, 0x04, 0x68, 0x00, 0x01, 0xff, - 0x4a, 0x97, 0x29, 0xeb, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0xea, 0xfb, 0x00, - 0x08, 0x6c, 0x00, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x68, 0xfc, 0x00, 0x4d, - 0xe0, 0x02, 0x03, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0xed, 0xfb, 0x00, 0x4d, - 0xe0, 0x02, 0xec, 0xfb, 0x40, 0xa9, 0x06, 0x53, 0x53, 0x49, 0xae, 0xfd, - 0x40, 0x4b, 0xd8, 0x14, 0xdb, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x56, 0xfc, - 0x40, 0x4a, 0x97, 0x29, 0x95, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x59, 0xfc, - 0x40, 0x4a, 0x97, 0x29, 0xfa, 0xfb, 0x00, 0xa9, 0x01, 0xff, 0x4b, 0xd8, - 0x14, 0xfb, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0xf9, 0xfb, 0x40, 0xa1, 0xf6, - 0x02, 0x08, 0x4e, 0x00, 0x6a, 0xa8, 0x01, 0xff, 0x66, 0x6c, 0x05, 0x5b, - 0xfc, 0x00, 0x08, 0x4e, 0x00, 0x01, 0xff, 0x0d, 0x67, 0x00, 0x4c, 0x4f, - 0x2c, 0x67, 0xe6, 0xfc, 0x00, 0x52, 0x69, 0x4d, 0x11, 0xfc, 0x00, 0x05, - 0xb4, 0x1e, 0x22, 0x4f, 0xed, 0x69, 0x79, 0xfc, 0x00, 0x4e, 0xd4, 0x74, - 0x76, 0xfc, 0x00, 0x04, 0x4d, 0x00, 0x06, 0x4f, 0x34, 0x6e, 0x77, 0xfc, - 0x40, 0x4a, 0x97, 0x29, 0x7b, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x14, 0xfc, - 0x40, 0x4a, 0x97, 0x29, 0x78, 0xfc, 0x00, 0xa9, 0x06, 0x4b, 0x30, 0x67, - 0xe5, 0xfc, 0x40, 0x4b, 0xd8, 0x14, 0xa6, 0xfc, 0x00, 0x4c, 0xe1, 0x02, - 0x12, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x7a, 0xfc, 0x00, 0x4d, 0xe0, 0x02, - 0x13, 0xfc, 0x40, 0x0d, 0x67, 0x00, 0xf7, 0x01, 0xa8, 0xb6, 0x01, 0x05, - 0x13, 0x34, 0x8c, 0x01, 0x05, 0xb9, 0x55, 0x63, 0x05, 0xb4, 0x1e, 0x22, - 0x4f, 0xed, 0x69, 0x73, 0xfc, 0x00, 0x4e, 0xd4, 0x74, 0x70, 0xfc, 0x00, - 0x04, 0x4d, 0x00, 0x06, 0x4f, 0x34, 0x6e, 0x71, 0xfc, 0x40, 0x4a, 0x97, - 0x29, 0x75, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x10, 0xfc, 0x40, 0x4a, 0x97, - 0x29, 0x72, 0xfc, 0x00, 0xa9, 0x29, 0x4b, 0x30, 0x67, 0xe3, 0xfc, 0x00, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x8a, 0x29, 0xa4, 0xfd, 0x00, 0x50, - 0xba, 0x55, 0x56, 0xfd, 0x00, 0x51, 0x13, 0x34, 0x55, 0xfd, 0x00, 0x51, - 0xb9, 0x55, 0x57, 0xfd, 0x00, 0x4e, 0x58, 0x49, 0xa3, 0xfd, 0x40, 0x4b, - 0xd8, 0x14, 0xa4, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x0e, 0xfc, 0x40, 0xa9, - 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x8a, 0x29, 0xa2, 0xfd, 0x00, - 0x51, 0x63, 0x56, 0x54, 0xfd, 0x00, 0x4e, 0x58, 0x49, 0xa1, 0xfd, 0x40, - 0x4b, 0xd8, 0x14, 0xa3, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x0d, 0xfc, 0x40, - 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x8a, 0x29, 0xa0, 0xfd, - 0x00, 0x51, 0x63, 0x56, 0x50, 0xfd, 0x00, 0x4e, 0x58, 0x49, 0x9f, 0xfd, - 0x40, 0x4b, 0xd8, 0x14, 0xa1, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x0b, 0xfc, - 0x40, 0x03, 0x1e, 0x09, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, 0xd7, - 0x14, 0xa5, 0xfc, 0x00, 0x4b, 0x30, 0x67, 0xe4, 0xfc, 0x40, 0xa9, 0x1b, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x13, 0x34, 0x06, 0x51, 0x63, 0x56, - 0x53, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x51, 0xfd, 0x00, 0x4c, 0xd7, 0x14, - 0x52, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xa2, 0xfc, 0x00, 0x4c, 0xe1, 0x02, - 0x0c, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x74, 0xfc, 0x00, 0x4d, 0xe0, 0x02, - 0x0f, 0xfc, 0x40, 0x52, 0xe1, 0x4a, 0x4e, 0xfd, 0x00, 0x07, 0x4f, 0x00, - 0x01, 0xff, 0x0d, 0x67, 0x00, 0x5a, 0x05, 0xcb, 0x54, 0x4a, 0x05, 0xb4, - 0x1e, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x12, 0xfd, - 0x00, 0x4d, 0xe0, 0x02, 0xf6, 0xfc, 0x40, 0xa9, 0x27, 0x4b, 0x30, 0x67, - 0x3a, 0xfd, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0xbe, 0x1e, 0x0c, - 0x51, 0x63, 0x56, 0x73, 0xfd, 0x00, 0x4e, 0x58, 0x49, 0x74, 0xfd, 0x40, - 0x4a, 0x97, 0x29, 0x71, 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0x72, 0xfd, 0x40, - 0x4b, 0xd8, 0x14, 0x33, 0xfd, 0x00, 0x4c, 0xe1, 0x02, 0x27, 0xfc, 0x40, - 0x4b, 0xd8, 0x14, 0xb8, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x26, 0xfc, 0x40, - 0x4a, 0x97, 0x29, 0x11, 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0xf5, 0xfc, 0x40, - 0xa1, 0xde, 0x04, 0x09, 0xeb, 0xae, 0xde, 0x02, 0xa8, 0x06, 0x54, 0x0c, - 0x41, 0xfe, 0xfd, 0x40, 0x0a, 0xef, 0x9e, 0x8b, 0x02, 0x09, 0xeb, 0xae, - 0x01, 0xff, 0x0d, 0x67, 0x00, 0xf5, 0x01, 0xa8, 0xa8, 0x01, 0x05, 0x13, - 0x34, 0x83, 0x01, 0x05, 0xb9, 0x55, 0x65, 0x05, 0xb4, 0x1e, 0x21, 0x04, - 0xd4, 0x74, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x1a, - 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0xfe, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x29, - 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0x0d, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x28, - 0xfd, 0x00, 0xa9, 0x2c, 0x4b, 0x30, 0x67, 0xe9, 0xfc, 0x00, 0x05, 0x51, - 0x00, 0x01, 0xff, 0x05, 0xb9, 0x55, 0x11, 0x05, 0xb4, 0x1e, 0x01, 0xff, - 0x4a, 0x97, 0x29, 0x6c, 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0x6d, 0xfd, 0x40, - 0x4a, 0x97, 0x29, 0x6a, 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0x6b, 0xfd, 0x40, - 0x4b, 0xd8, 0x14, 0x30, 0xfd, 0x00, 0x4c, 0xe1, 0x02, 0x0c, 0xfd, 0x40, - 0x4a, 0x97, 0x29, 0x27, 0xfd, 0x00, 0xa9, 0x06, 0x4b, 0x30, 0x67, 0x39, - 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0x2f, 0xfd, 0x00, 0x4c, 0xe1, 0x02, 0x0b, - 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x25, 0xfd, 0x00, 0xa9, 0x0c, 0x4b, 0x30, - 0x67, 0x37, 0xfd, 0x00, 0x53, 0x53, 0x49, 0x69, 0xfd, 0x40, 0x4b, 0xd8, - 0x14, 0x2d, 0xfd, 0x00, 0x4c, 0xe1, 0x02, 0x09, 0xfd, 0x40, 0x03, 0x1e, - 0x09, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, 0xd7, 0x14, 0x32, 0xfd, - 0x00, 0x4b, 0x30, 0x67, 0xea, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x26, 0xfd, - 0x00, 0xa9, 0x21, 0x4b, 0x30, 0x67, 0x38, 0xfd, 0x00, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x05, 0xb4, 0x1e, 0x06, 0x4e, 0x58, 0x49, 0xaa, 0xfd, 0x40, - 0x4a, 0x97, 0x29, 0x67, 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0x68, 0xfd, 0x40, - 0x4b, 0xd8, 0x14, 0x2e, 0xfd, 0x00, 0x4c, 0xe1, 0x02, 0x0a, 0xfd, 0x40, - 0x4a, 0x97, 0x29, 0x19, 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0xfd, 0xfc, 0x40, - 0x05, 0x00, 0x59, 0x2e, 0x06, 0x5d, 0xd1, 0x1e, 0x05, 0x12, 0x4b, 0x06, - 0x5e, 0x74, 0x05, 0x63, 0xfc, 0x40, 0x80, 0x06, 0x51, 0x2e, 0x58, 0x5f, - 0xfc, 0x40, 0x4d, 0xe0, 0x02, 0x62, 0xfc, 0x00, 0x4b, 0x30, 0x67, 0xf4, - 0xfc, 0x40, 0x4d, 0xe0, 0x02, 0x60, 0xfc, 0x00, 0x4b, 0x30, 0x67, 0xf2, - 0xfc, 0x40, 0x80, 0x06, 0x51, 0x2e, 0x58, 0x5e, 0xfc, 0x40, 0x4d, 0xe0, - 0x02, 0x61, 0xfc, 0x00, 0x4b, 0x30, 0x67, 0xf3, 0xfc, 0x40, 0x0d, 0x67, - 0x00, 0xea, 0x01, 0xa8, 0xb8, 0x01, 0x05, 0x13, 0x34, 0x8e, 0x01, 0x05, - 0xb9, 0x55, 0x65, 0x05, 0xb4, 0x1e, 0x21, 0x04, 0xd4, 0x74, 0x11, 0x04, - 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x18, 0xfd, 0x00, 0x4d, 0xe0, - 0x02, 0xfc, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x2a, 0xfd, 0x00, 0x4d, 0xe0, - 0x02, 0x0e, 0xfd, 0x40, 0xa9, 0x32, 0x4b, 0x30, 0x67, 0xe7, 0xfc, 0x00, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0xbe, 0x1e, 0x17, 0x51, 0x13, 0x34, - 0x61, 0xfd, 0x00, 0x05, 0xb4, 0x1e, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x62, - 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0x63, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x5f, - 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0x60, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xb0, - 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x1f, 0xfc, 0x40, 0xa9, 0x17, 0x4b, 0x30, - 0x67, 0x36, 0xfd, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x8a, 0x29, - 0xa8, 0xfd, 0x00, 0x4e, 0x58, 0x49, 0xc6, 0xfd, 0x40, 0x4b, 0xd8, 0x14, - 0xaf, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x1e, 0xfc, 0x40, 0xa9, 0x17, 0x4b, - 0x30, 0x67, 0x34, 0xfd, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x8a, - 0x29, 0x5e, 0xfd, 0x00, 0x50, 0xba, 0x55, 0x5d, 0xfd, 0x40, 0x4b, 0xd8, - 0x14, 0xad, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x1c, 0xfc, 0x40, 0x03, 0x1e, - 0x09, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, 0xd7, 0x14, 0x31, 0xfd, - 0x00, 0x4b, 0x30, 0x67, 0xe8, 0xfc, 0x40, 0xa9, 0x0c, 0x4b, 0x30, 0x67, - 0x35, 0xfd, 0x00, 0x56, 0x0e, 0x34, 0x5c, 0xfd, 0x40, 0x4b, 0xd8, 0x14, - 0xae, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x1d, 0xfc, 0x40, 0x4a, 0x97, 0x29, - 0x17, 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0xfb, 0xfc, 0x40, 0x07, 0x61, 0x09, - 0x3e, 0xac, 0x01, 0xff, 0xa1, 0x2d, 0x02, 0x74, 0x00, 0x01, 0xff, 0x80, - 0x1a, 0x03, 0x84, 0x0c, 0x01, 0xff, 0x53, 0x7f, 0x42, 0x46, 0xfd, 0x00, - 0xa8, 0x01, 0xff, 0x52, 0x9b, 0x4e, 0xfa, 0xfd, 0x00, 0x5c, 0x4d, 0x17, - 0x4c, 0xfd, 0x40, 0x4d, 0xe0, 0x02, 0xf9, 0xfd, 0x00, 0x67, 0xc6, 0x02, - 0xf0, 0xfd, 0x40, 0x4d, 0x62, 0x79, 0xcf, 0xfd, 0x00, 0x4f, 0xe9, 0x33, - 0xf5, 0xfd, 0x40, 0x0d, 0x67, 0x00, 0x77, 0x04, 0xbe, 0x1e, 0x4a, 0x51, - 0xb9, 0x55, 0xb2, 0xfc, 0x00, 0x05, 0xb4, 0x1e, 0x21, 0x04, 0xd4, 0x74, - 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x22, 0xfd, 0x00, - 0x4d, 0xe0, 0x02, 0x06, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x2b, 0xfd, 0x00, - 0x4d, 0xe0, 0x02, 0x0f, 0xfd, 0x40, 0xa9, 0x11, 0x0a, 0x12, 0x78, 0x01, - 0xff, 0x4a, 0x97, 0x29, 0x66, 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0xc5, 0xfd, - 0x40, 0x4b, 0xd8, 0x14, 0xb3, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x21, 0xfc, - 0x40, 0xa9, 0x1b, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0xbe, 0x1e, 0x06, - 0x4e, 0x58, 0x49, 0xa9, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x64, 0xfd, 0x00, - 0x4c, 0xd7, 0x14, 0x65, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xb1, 0xfc, 0x00, - 0x4c, 0xe1, 0x02, 0x20, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x21, 0xfd, 0x00, - 0x4d, 0xe0, 0x02, 0x05, 0xfd, 0x40, 0xa1, 0x06, 0x66, 0xb8, 0x05, 0x5c, - 0xfc, 0x40, 0x4e, 0xda, 0x6f, 0x41, 0xfd, 0x80, 0x16, 0x06, 0x17, 0xd2, - 0x06, 0x52, 0xcd, 0x4f, 0xf6, 0xfd, 0x40, 0x47, 0xdc, 0x6f, 0x40, 0xfd, - 0x00, 0x48, 0x35, 0xbe, 0x4f, 0xfd, 0x40, 0x42, 0xda, 0x10, 0x42, 0xfd, - 0x00, 0xb5, 0x01, 0xff, 0xed, 0x43, 0xfd, 0x80, 0x06, 0x43, 0xcd, 0x40, - 0x45, 0xfd, 0x40, 0x42, 0xda, 0x10, 0x44, 0xfd, 0x40, 0xa1, 0x06, 0x4d, - 0xf7, 0x81, 0x4b, 0xfd, 0x40, 0x07, 0x9f, 0x12, 0x06, 0x6a, 0xc3, 0x02, - 0xf1, 0xfd, 0x40, 0x0d, 0x67, 0x00, 0x54, 0x05, 0xcb, 0x54, 0x44, 0x05, - 0xb4, 0x1e, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x7f, - 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x36, 0xfc, 0x40, 0xa9, 0x21, 0x05, 0x51, - 0x00, 0x01, 0xff, 0x04, 0xbe, 0x1e, 0x0c, 0x4f, 0x66, 0x69, 0x7f, 0xfd, - 0x00, 0x4e, 0x58, 0x49, 0xb2, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x7e, 0xfd, - 0x00, 0x4c, 0xd7, 0x14, 0xb4, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xc3, 0xfc, - 0x00, 0x4c, 0xe1, 0x02, 0x34, 0xfc, 0x40, 0x4b, 0xd8, 0x14, 0xc2, 0xfc, - 0x00, 0x4c, 0xe1, 0x02, 0x33, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x7e, 0xfc, - 0x00, 0x4d, 0xe0, 0x02, 0x35, 0xfc, 0x40, 0x0d, 0x67, 0x00, 0xe1, 0x01, - 0xa8, 0xa4, 0x01, 0x05, 0x13, 0x34, 0x61, 0x06, 0xb9, 0x55, 0x51, 0x05, - 0xb4, 0x1e, 0x22, 0x4f, 0xed, 0x69, 0x8d, 0xfc, 0x00, 0x4e, 0xd4, 0x74, - 0x8a, 0xfc, 0x00, 0x04, 0x4d, 0x00, 0x06, 0x4f, 0x34, 0x6e, 0x8b, 0xfc, - 0x40, 0x4a, 0x97, 0x29, 0x8f, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x50, 0xfc, - 0x40, 0x4a, 0x97, 0x29, 0x8c, 0xfc, 0x00, 0xa9, 0x17, 0x4b, 0x30, 0x67, - 0xee, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x8a, 0x29, 0x9b, - 0xfd, 0x00, 0x4e, 0x58, 0x49, 0x9a, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xd5, - 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x4e, 0xfc, 0x40, 0x4b, 0xd8, 0x14, 0xd4, - 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x4d, 0xfc, 0x40, 0xa9, 0x31, 0x05, 0x51, - 0x00, 0x01, 0xff, 0x57, 0x8a, 0x29, 0x99, 0xfd, 0x00, 0x04, 0xbe, 0x1e, - 0x16, 0x05, 0xb4, 0x1e, 0x06, 0x4e, 0x58, 0x49, 0xc7, 0xfd, 0x40, 0x4a, - 0x97, 0x29, 0x97, 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0x98, 0xfd, 0x40, 0x4a, - 0x97, 0x29, 0xbd, 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0xb8, 0xfd, 0x40, 0x4b, - 0xd8, 0x14, 0xd2, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x4b, 0xfc, 0x40, 0x03, - 0x1e, 0x09, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, 0xd7, 0x14, 0xd6, - 0xfc, 0x00, 0x4b, 0x30, 0x67, 0xef, 0xfc, 0x40, 0xa9, 0x17, 0x05, 0x51, - 0x00, 0x01, 0xff, 0x57, 0x8a, 0x29, 0x96, 0xfd, 0x00, 0x51, 0x63, 0x56, - 0x95, 0xfd, 0x00, 0x4e, 0x58, 0x49, 0xb3, 0xfd, 0x40, 0x4b, 0xd8, 0x14, - 0xd3, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x4c, 0xfc, 0x40, 0x4a, 0x97, 0x29, - 0x8e, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x4f, 0xfc, 0x40, 0x09, 0xb5, 0x1e, - 0x06, 0x55, 0xd3, 0x38, 0xf4, 0xfd, 0x40, 0x05, 0x67, 0x00, 0xa5, 0x01, - 0x04, 0xbe, 0x1e, 0x7c, 0x05, 0x13, 0x34, 0x4d, 0x05, 0xb9, 0x55, 0x24, - 0x05, 0xb4, 0x1e, 0x06, 0x51, 0xe8, 0x59, 0x4a, 0xfc, 0x40, 0x4a, 0x97, - 0x29, 0x89, 0xfc, 0x00, 0xa9, 0x06, 0x53, 0x53, 0x49, 0xb1, 0xfd, 0x40, - 0x4b, 0xd8, 0x14, 0xd1, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x48, 0xfc, 0x40, - 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, 0x13, 0x34, 0x8e, 0xfd, - 0x00, 0x51, 0x63, 0x56, 0x8f, 0xfd, 0x00, 0x4e, 0x58, 0x49, 0xb9, 0xfd, - 0x40, 0x4b, 0xd8, 0x14, 0xd0, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x47, 0xfc, - 0x40, 0xa9, 0x1d, 0x05, 0x51, 0x00, 0x01, 0xff, 0x50, 0xba, 0x55, 0x8c, - 0xfd, 0x00, 0x51, 0xb9, 0x55, 0x92, 0xfd, 0x00, 0x51, 0x63, 0x56, 0x8d, - 0xfd, 0x00, 0x4e, 0x58, 0x49, 0xc0, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xce, - 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x45, 0xfc, 0x40, 0xa9, 0x17, 0x05, 0x51, - 0x00, 0x01, 0xff, 0x51, 0x13, 0x34, 0x89, 0xfd, 0x00, 0x51, 0x63, 0x56, - 0x8a, 0xfd, 0x00, 0x4e, 0x58, 0x49, 0x8b, 0xfd, 0x40, 0x4b, 0xd8, 0x14, - 0xcf, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x46, 0xfc, 0x40, 0x4a, 0x97, 0x29, - 0x88, 0xfc, 0x00, 0x55, 0x97, 0x1c, 0x49, 0xfc, 0x40, 0x05, 0x67, 0x00, - 0xe6, 0x01, 0xa8, 0xaa, 0x01, 0x05, 0x13, 0x34, 0x6d, 0x05, 0xb9, 0x55, - 0x4a, 0x05, 0xb4, 0x1e, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x97, - 0x29, 0x87, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x44, 0xfc, 0x40, 0x4a, 0x97, - 0x29, 0x85, 0xfc, 0x00, 0xa9, 0x21, 0x4b, 0x30, 0x67, 0xed, 0xfc, 0x00, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0xbe, 0x1e, 0x06, 0x4e, 0x58, 0x49, - 0xad, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x87, 0xfd, 0x00, 0x4c, 0xd7, 0x14, - 0x88, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xcc, 0xfc, 0x00, 0x4c, 0xe1, 0x02, - 0x42, 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x12, 0x78, 0x01, 0xff, 0x4a, 0x97, - 0x29, 0x85, 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0x86, 0xfd, 0x40, 0x4b, 0xd8, - 0x14, 0xcb, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x41, 0xfc, 0x40, 0xa9, 0x2b, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x13, 0x34, 0x16, 0x05, 0xb4, 0x1e, - 0x06, 0x4e, 0x58, 0x49, 0xac, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0xbc, 0xfd, - 0x00, 0x4c, 0xd7, 0x14, 0xba, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x84, 0xfd, - 0x00, 0x4c, 0xd7, 0x14, 0x83, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xc9, 0xfc, - 0x00, 0x4c, 0xe1, 0x02, 0x3f, 0xfc, 0x40, 0x03, 0x1e, 0x09, 0x06, 0x4f, - 0x1e, 0x66, 0xcd, 0xfc, 0x40, 0xa9, 0x21, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x57, 0x8a, 0x29, 0x82, 0xfd, 0x00, 0x05, 0xb4, 0x1e, 0x06, 0x4e, 0x58, - 0x49, 0x81, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x80, 0xfd, 0x00, 0x4c, 0xd7, - 0x14, 0xb5, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xca, 0xfc, 0x00, 0x4c, 0xe1, - 0x02, 0x40, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0xfc, 0xfe, 0x00, 0x4d, 0xe0, - 0x02, 0xfb, 0xfe, 0x00, 0x08, 0x6c, 0x00, 0x3b, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x06, 0x56, 0x00, 0x11, 0x0c, 0x18, 0x8a, 0x01, 0xff, 0x4a, 0x97, - 0x29, 0xf6, 0xfe, 0x00, 0x4d, 0xe0, 0x02, 0xf5, 0xfe, 0x40, 0x06, 0x5c, - 0x00, 0x11, 0x06, 0xd5, 0x06, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xfa, 0xfe, - 0x00, 0x4d, 0xe0, 0x02, 0xf9, 0xfe, 0x40, 0x4a, 0x97, 0x29, 0xf8, 0xfe, - 0x00, 0x4d, 0xe0, 0x02, 0xf7, 0xfe, 0x40, 0x4a, 0x97, 0x29, 0x86, 0xfc, - 0x00, 0x4d, 0xe0, 0x02, 0x43, 0xfc, 0x40, 0x08, 0x9e, 0x12, 0x4c, 0x09, - 0xbe, 0x1e, 0x01, 0xff, 0x0d, 0x67, 0x00, 0x37, 0x51, 0xcb, 0x54, 0x1a, - 0xfc, 0x00, 0x06, 0x13, 0x34, 0x21, 0x06, 0x63, 0x56, 0x11, 0x04, 0x4d, - 0x00, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x20, 0xfd, 0x00, 0x4d, 0xe0, 0x02, - 0x04, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xac, 0xfc, 0x00, 0x4c, 0xe1, 0x02, - 0x1b, 0xfc, 0x40, 0x4b, 0xd8, 0x14, 0xab, 0xfc, 0x00, 0x4c, 0xe1, 0x02, - 0x19, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x1f, 0xfd, 0x00, 0x4d, 0xe0, 0x02, - 0x03, 0xfd, 0x40, 0x05, 0x67, 0x00, 0x99, 0x01, 0x05, 0xcb, 0x54, 0x88, - 0x01, 0x06, 0x13, 0x34, 0x78, 0x06, 0xb9, 0x55, 0x68, 0x04, 0xa6, 0x12, - 0x4a, 0x05, 0xb4, 0x1e, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x97, - 0x29, 0x84, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x3e, 0xfc, 0x40, 0x4a, 0x97, - 0x29, 0x82, 0xfc, 0x00, 0xa9, 0x21, 0x4b, 0x30, 0x67, 0xec, 0xfc, 0x00, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0xb4, 0x1e, 0x06, 0x4e, 0x58, 0x49, - 0xb7, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0xbb, 0xfd, 0x00, 0x4c, 0xd7, 0x14, - 0xc3, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xc8, 0xfc, 0x00, 0x4c, 0xe1, 0x02, - 0x3c, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x81, 0xfc, 0x00, 0xa9, 0x06, 0x4b, - 0x30, 0x67, 0xeb, 0xfc, 0x40, 0x4b, 0xd8, 0x14, 0xc7, 0xfc, 0x00, 0x4c, - 0xe1, 0x02, 0x3b, 0xfc, 0x40, 0x4b, 0xd8, 0x14, 0xc6, 0xfc, 0x00, 0x4c, - 0xe1, 0x02, 0x3a, 0xfc, 0x40, 0x4b, 0xd8, 0x14, 0xc4, 0xfc, 0x00, 0x4c, - 0xe1, 0x02, 0x38, 0xfc, 0x40, 0x4b, 0xd8, 0x14, 0xc5, 0xfc, 0x00, 0x4c, - 0xe1, 0x02, 0x39, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x80, 0xfc, 0x00, 0x4d, - 0xe0, 0x02, 0x37, 0xfc, 0x00, 0x08, 0x6c, 0x00, 0x01, 0xff, 0x4a, 0x97, - 0x29, 0x83, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x3d, 0xfc, 0x40, 0x4e, 0xde, - 0x6e, 0xfb, 0xfd, 0x00, 0x09, 0xb5, 0x1e, 0x01, 0xff, 0x0d, 0x67, 0x00, - 0x67, 0x04, 0xbe, 0x1e, 0x44, 0x05, 0xb4, 0x1e, 0x11, 0x04, 0x4d, 0x00, - 0x01, 0xff, 0x4a, 0x97, 0x29, 0x1e, 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0x02, - 0xfd, 0x40, 0xa9, 0x21, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x8a, 0x29, - 0xa7, 0xfd, 0x00, 0x04, 0xbe, 0x1e, 0x06, 0x4e, 0x58, 0x49, 0xa5, 0xfd, - 0x40, 0x4a, 0x97, 0x29, 0x58, 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0x59, 0xfd, - 0x40, 0x4b, 0xd8, 0x14, 0xa8, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x16, 0xfc, - 0x40, 0xa9, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x8a, 0x29, 0xa6, - 0xfd, 0x00, 0x4e, 0x58, 0x49, 0xbe, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xa7, - 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x15, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x1d, - 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0x01, 0xfd, 0x40, 0x08, 0xbf, 0x1e, 0x4a, - 0x08, 0x4e, 0x00, 0x01, 0xff, 0x5a, 0x92, 0x1c, 0x53, 0xfc, 0x00, 0x06, - 0x13, 0x34, 0x2f, 0x05, 0xb4, 0x1e, 0x0c, 0x5d, 0xc6, 0x14, 0xd9, 0xfc, - 0x00, 0x51, 0xe8, 0x59, 0x54, 0xfc, 0x40, 0xa9, 0x11, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x51, 0x13, 0x34, 0x93, 0xfd, 0x00, 0x51, 0x63, 0x56, 0x94, - 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xd8, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x52, - 0xfc, 0x40, 0x4b, 0xd8, 0x14, 0xd7, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x51, - 0xfc, 0x40, 0x0d, 0x67, 0x00, 0x4c, 0x05, 0x13, 0x34, 0x34, 0x05, 0xb4, - 0x1e, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x1c, 0xfd, - 0x00, 0x4d, 0xe0, 0x02, 0x00, 0xfd, 0x40, 0xa9, 0x11, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x57, 0x8a, 0x29, 0x5b, 0xfd, 0x00, 0x4e, 0x58, 0x49, 0x5a, - 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xaa, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x18, - 0xfc, 0x40, 0xa9, 0x06, 0x53, 0x53, 0x49, 0xbf, 0xfd, 0x40, 0x4b, 0xd8, - 0x14, 0xa9, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x17, 0xfc, 0x40, 0x4a, 0x97, - 0x29, 0x1b, 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0xff, 0xfc, 0x40, 0x0d, 0x67, - 0x00, 0x4a, 0x06, 0x13, 0x34, 0x3a, 0x05, 0xb4, 0x1e, 0x11, 0x04, 0x4d, - 0x00, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x16, 0xfd, 0x00, 0x4d, 0xe0, 0x02, - 0xfa, 0xfc, 0x40, 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x8a, - 0x29, 0x7b, 0xfd, 0x00, 0x4f, 0x66, 0x69, 0x79, 0xfd, 0x00, 0x4e, 0x58, - 0x49, 0x7a, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xbd, 0xfc, 0x00, 0x4c, 0xe1, - 0x02, 0x2c, 0xfc, 0x40, 0x4b, 0xd8, 0x14, 0xbc, 0xfc, 0x00, 0x4c, 0xe1, - 0x02, 0x2b, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x15, 0xfd, 0x00, 0x4d, 0xe0, - 0x02, 0xf9, 0xfc, 0x40, 0x0d, 0x67, 0x00, 0x6c, 0x05, 0xcb, 0x54, 0x5c, - 0x06, 0x13, 0x34, 0x4c, 0x05, 0xb9, 0x55, 0x29, 0x05, 0xb4, 0x1e, 0x11, - 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x7d, 0xfc, 0x00, 0x4d, - 0xe0, 0x02, 0x32, 0xfc, 0x40, 0xa9, 0x06, 0x53, 0x53, 0x49, 0xc1, 0xfd, - 0x40, 0x4b, 0xd8, 0x14, 0xc1, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x30, 0xfc, - 0x40, 0xa9, 0x11, 0x0a, 0x12, 0x78, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x7c, - 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0x7d, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xc0, - 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x2f, 0xfc, 0x40, 0x4b, 0xd8, 0x14, 0xbe, - 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x2d, 0xfc, 0x40, 0x4b, 0xd8, 0x14, 0xbf, - 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x2e, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x7c, - 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x31, 0xfc, 0x40, 0x0d, 0x67, 0x00, 0x87, - 0x01, 0x04, 0xbe, 0x1e, 0x64, 0x06, 0x13, 0x34, 0x54, 0x05, 0xb9, 0x55, - 0x31, 0x06, 0x63, 0x56, 0x21, 0x04, 0xd4, 0x74, 0x11, 0x04, 0x4d, 0x00, - 0x01, 0xff, 0x4a, 0x97, 0x29, 0x24, 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0x08, - 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x2c, 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0x10, - 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xb7, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x25, - 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x12, 0x78, 0x01, 0xff, 0x4a, 0x97, 0x29, - 0x6f, 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0x70, 0xfd, 0x40, 0x4b, 0xd8, 0x14, - 0xb6, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x24, 0xfc, 0x40, 0x4b, 0xd8, 0x14, - 0xb4, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x22, 0xfc, 0x40, 0xa9, 0x11, 0x05, - 0x51, 0x00, 0x01, 0xff, 0x57, 0x8a, 0x29, 0x6e, 0xfd, 0x00, 0x4e, 0x58, - 0x49, 0xab, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xb5, 0xfc, 0x00, 0x4c, 0xe1, - 0x02, 0x23, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x23, 0xfd, 0x00, 0x4d, 0xe0, - 0x02, 0x07, 0xfd, 0x40, 0x08, 0x4e, 0x00, 0x06, 0x5c, 0x51, 0x16, 0xfd, - 0xfd, 0x40, 0x0d, 0x67, 0x00, 0x93, 0x01, 0xa8, 0x68, 0x06, 0x13, 0x34, - 0x58, 0x05, 0xb9, 0x55, 0x40, 0x05, 0xb4, 0x1e, 0x22, 0x4f, 0xed, 0x69, - 0x6d, 0xfc, 0x00, 0x4e, 0xd4, 0x74, 0x6a, 0xfc, 0x00, 0x04, 0x4d, 0x00, - 0x06, 0x4f, 0x34, 0x6e, 0x6b, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x6f, 0xfc, - 0x00, 0x4d, 0xe0, 0x02, 0x0a, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x6c, 0xfc, - 0x00, 0xa9, 0x06, 0x4b, 0x30, 0x67, 0xe1, 0xfc, 0x40, 0x4b, 0xd8, 0x14, - 0x9f, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x08, 0xfc, 0x40, 0xa9, 0x06, 0x53, - 0x53, 0x49, 0x9e, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0x9e, 0xfc, 0x00, 0x4c, - 0xe1, 0x02, 0x07, 0xfc, 0x40, 0x4b, 0xd8, 0x14, 0x9c, 0xfc, 0x00, 0x4c, - 0xe1, 0x02, 0x05, 0xfc, 0x40, 0x03, 0x1e, 0x09, 0x11, 0x03, 0x4e, 0x00, - 0x01, 0xff, 0x4c, 0xd7, 0x14, 0xa0, 0xfc, 0x00, 0x4b, 0x30, 0x67, 0xe2, - 0xfc, 0x40, 0xa9, 0x06, 0x53, 0x53, 0x49, 0xc2, 0xfd, 0x40, 0x4b, 0xd8, - 0x14, 0x9d, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x06, 0xfc, 0x40, 0x4a, 0x97, - 0x29, 0x6e, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x09, 0xfc, 0x40, 0x08, 0x4c, - 0x94, 0x69, 0x52, 0x8d, 0x4d, 0xf3, 0xfd, 0x00, 0xac, 0x06, 0x4b, 0x18, - 0x9d, 0xff, 0xfd, 0x40, 0x03, 0x51, 0x17, 0x2b, 0x03, 0x69, 0x00, 0x06, - 0x51, 0xdb, 0x55, 0xf2, 0xfd, 0x40, 0x1e, 0x07, 0x12, 0x11, 0x0e, 0xc8, - 0x77, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x3c, 0xfd, 0x00, 0x4d, 0xe0, 0x02, - 0x3d, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x90, 0xfc, 0x00, 0x4d, 0xe0, 0x02, - 0x5d, 0xfc, 0x40, 0x4c, 0x60, 0x84, 0x4d, 0xfd, 0x00, 0x4f, 0xe2, 0x65, - 0xf7, 0xfd, 0x00, 0xa9, 0x01, 0xff, 0x09, 0x62, 0x84, 0x0f, 0xad, 0x01, - 0xff, 0x4a, 0x62, 0x84, 0x48, 0xfd, 0x00, 0x4c, 0x60, 0x84, 0x49, 0xfd, - 0x40, 0xed, 0x47, 0xfd, 0x00, 0x4d, 0xdd, 0x81, 0x4a, 0xfd, 0x40, 0x0d, - 0x67, 0x00, 0x67, 0x05, 0x13, 0x34, 0x44, 0x05, 0xb4, 0x1e, 0x11, 0x04, - 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x14, 0xfd, 0x00, 0x4d, 0xe0, - 0x02, 0xf8, 0xfc, 0x40, 0xa9, 0x21, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, - 0x8a, 0x29, 0x78, 0xfd, 0x00, 0x05, 0xb4, 0x1e, 0x06, 0x4e, 0x58, 0x49, - 0xb6, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x76, 0xfd, 0x00, 0x4c, 0xd7, 0x14, - 0x77, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xbb, 0xfc, 0x00, 0x4c, 0xe1, 0x02, - 0x2a, 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x12, 0x78, 0x01, 0xff, 0x4a, 0x97, - 0x29, 0x75, 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0xc4, 0xfd, 0x40, 0x4b, 0xd8, - 0x14, 0xba, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x29, 0xfc, 0x40, 0x4a, 0x97, - 0x29, 0x13, 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0xf7, 0xfc, 0x40, 0x0d, 0x13, - 0x7c, 0x9e, 0x1e, 0x05, 0xf3, 0x04, 0x01, 0xff, 0xa1, 0xd8, 0x1a, 0x02, - 0xbc, 0x04, 0x9d, 0x19, 0xa4, 0x83, 0x17, 0xe5, 0xd0, 0x06, 0x80, 0xe0, - 0x16, 0xa6, 0xad, 0x15, 0xa7, 0x87, 0x14, 0xa8, 0xd0, 0x11, 0x02, 0x18, - 0x1e, 0xf8, 0x10, 0xab, 0xec, 0x0e, 0xac, 0x85, 0x0e, 0xad, 0xbd, 0x0d, - 0xae, 0xe2, 0x0b, 0x42, 0xca, 0x4b, 0xc6, 0x06, 0x80, 0xcb, 0x0b, 0x43, - 0xc0, 0xdc, 0x7e, 0x06, 0x80, 0xf4, 0x0a, 0x43, 0x9d, 0x12, 0x42, 0x06, - 0x80, 0xad, 0x0a, 0xb2, 0xf0, 0x08, 0xb3, 0x94, 0x07, 0xb4, 0xdb, 0x03, - 0xf5, 0xc7, 0x06, 0x80, 0xa9, 0x03, 0x42, 0x32, 0x00, 0xcb, 0x06, 0x80, - 0xf1, 0x02, 0x43, 0x08, 0x83, 0x48, 0x06, 0x80, 0x93, 0x02, 0xb9, 0x43, - 0x02, 0x59, 0x00, 0x01, 0xff, 0xe8, 0x38, 0x06, 0x80, 0x1c, 0x42, 0x9e, - 0x01, 0x32, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xb0, - 0xfe, 0x00, 0x4d, 0xe0, 0x02, 0xaf, 0xfe, 0x00, 0x55, 0x77, 0x3a, 0xb2, - 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xc6, 0xfe, 0x00, 0xa9, - 0x06, 0x4b, 0x30, 0x67, 0xc8, 0xfe, 0x40, 0x4b, 0xd8, 0x14, 0xc7, 0xfe, - 0x00, 0x4c, 0xe1, 0x02, 0xc5, 0xfe, 0x40, 0x42, 0x4e, 0x00, 0x4a, 0x06, - 0x80, 0x14, 0xf5, 0xc8, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, - 0x29, 0xdc, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0xdb, 0xfb, 0x40, 0x80, 0x01, - 0xff, 0x46, 0xd9, 0x17, 0xd2, 0x06, 0x80, 0x6f, 0x4a, 0x97, 0x29, 0xf2, - 0xfe, 0x00, 0xa9, 0x5b, 0x4b, 0x30, 0x67, 0xf4, 0xfe, 0x00, 0x05, 0x51, - 0x00, 0x01, 0xff, 0x4b, 0x56, 0x00, 0x26, 0x06, 0x80, 0x2c, 0x47, 0xe9, - 0x30, 0xce, 0x06, 0x00, 0xb4, 0x01, 0xff, 0x43, 0xaf, 0x15, 0xcd, 0x06, - 0x00, 0x4f, 0x77, 0x67, 0xd1, 0x06, 0x00, 0x12, 0xda, 0x1b, 0x01, 0xff, - 0x49, 0xec, 0x1b, 0xa9, 0x08, 0x00, 0x4b, 0x56, 0x00, 0xa8, 0x08, 0x00, - 0x50, 0xf9, 0x60, 0xba, 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, - 0x8a, 0xfe, 0x00, 0xa9, 0x06, 0x4b, 0x30, 0x67, 0x8c, 0xfe, 0x40, 0x4b, - 0xd8, 0x14, 0x8b, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0x89, 0xfe, 0x40, 0x4b, - 0xd8, 0x14, 0xf3, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0xf1, 0xfe, 0x40, 0x80, - 0x01, 0xff, 0x4a, 0x97, 0x29, 0xaf, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0xae, - 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x1d, 0xfb, 0x13, 0x16, 0x4b, - 0x56, 0x00, 0xd3, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, - 0xb1, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0xb0, 0xfb, 0x40, 0x4a, 0xb9, 0xa2, - 0x7b, 0x07, 0x00, 0x48, 0x6d, 0xc2, 0x7a, 0x07, 0x40, 0x80, 0x01, 0xff, - 0x4a, 0x97, 0x29, 0xee, 0xfe, 0x00, 0x4d, 0xe0, 0x02, 0xed, 0xfe, 0x00, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x9f, 0x0a, 0x32, 0x1d, 0xfb, 0x13, - 0x22, 0x4b, 0x56, 0x00, 0x24, 0x06, 0x80, 0x0c, 0x44, 0x03, 0x07, 0xc4, - 0x06, 0x00, 0x4e, 0x4a, 0x0d, 0xca, 0x06, 0x40, 0x80, 0x01, 0xff, 0x4a, - 0x97, 0x29, 0x86, 0xfe, 0x00, 0x4d, 0xe0, 0x02, 0x85, 0xfe, 0x40, 0x4a, - 0xb9, 0xa2, 0x79, 0x07, 0x00, 0x48, 0x6d, 0xc2, 0x78, 0x07, 0x40, 0x45, - 0x5c, 0x00, 0xcf, 0x06, 0x00, 0x46, 0x79, 0x1c, 0xab, 0x08, 0x40, 0x80, - 0x22, 0xe8, 0xa4, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, - 0x6b, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x30, 0x67, 0x6d, 0xfb, 0x40, 0x4b, - 0xd8, 0x14, 0x6c, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0x6a, 0xfb, 0x40, 0x4a, - 0x97, 0x29, 0xdf, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0xde, 0xfb, 0x40, 0x80, - 0x11, 0x22, 0xd0, 0x0a, 0x01, 0xff, 0x4c, 0xd7, 0x14, 0xe8, 0xfb, 0x00, - 0x4b, 0x30, 0x67, 0xe9, 0xfb, 0x40, 0x4a, 0x97, 0x29, 0xd8, 0xfb, 0x00, - 0x4d, 0xe0, 0x02, 0xd7, 0xfb, 0x00, 0x50, 0x51, 0x00, 0x77, 0x06, 0xc0, - 0x00, 0x4e, 0xdf, 0x02, 0xdd, 0xfb, 0x40, 0x42, 0xe6, 0x06, 0x37, 0x06, - 0x80, 0xed, 0x02, 0x44, 0x85, 0x7c, 0x86, 0x06, 0x80, 0x94, 0x02, 0x42, - 0x4e, 0x00, 0x2a, 0x06, 0x80, 0x8f, 0x01, 0xa8, 0x4d, 0x43, 0x0a, 0x0e, - 0x79, 0x06, 0xc0, 0x00, 0x80, 0x24, 0x42, 0x4e, 0x00, 0x7a, 0x06, 0xc0, - 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x5f, 0xfb, 0x00, 0xa9, 0x06, - 0x4b, 0x30, 0x67, 0x61, 0xfb, 0x40, 0x4b, 0xd8, 0x14, 0x60, 0xfb, 0x00, - 0x4c, 0xe1, 0x02, 0x5e, 0xfb, 0x40, 0x4a, 0x97, 0x29, 0x67, 0xfb, 0x00, - 0xa9, 0x0c, 0x4b, 0x30, 0x67, 0x69, 0xfb, 0x00, 0x4c, 0x10, 0x8f, 0xc0, - 0x08, 0x40, 0x4b, 0xd8, 0x14, 0x68, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0x66, - 0xfb, 0x40, 0x42, 0x13, 0x00, 0x30, 0x06, 0x80, 0x2a, 0x42, 0x4e, 0x00, - 0x2b, 0x06, 0x80, 0x06, 0x46, 0x77, 0xd2, 0x86, 0x08, 0x40, 0x80, 0x01, - 0xff, 0x4a, 0x97, 0x29, 0x9a, 0xfe, 0x00, 0xa9, 0x06, 0x4b, 0x30, 0x67, - 0x9c, 0xfe, 0x40, 0x4b, 0xd8, 0x14, 0x9b, 0xfe, 0x00, 0x4c, 0xe1, 0x02, - 0x99, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xac, 0xfe, 0x00, - 0x4d, 0xe0, 0x02, 0xab, 0xfe, 0x40, 0x80, 0x24, 0x42, 0x4e, 0x00, 0x7f, - 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x63, 0xfb, 0x00, - 0xa9, 0x06, 0x4b, 0x30, 0x67, 0x65, 0xfb, 0x40, 0x4b, 0xd8, 0x14, 0x64, - 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0x62, 0xfb, 0x40, 0x4a, 0x97, 0x29, 0x96, - 0xfe, 0x00, 0xa9, 0x43, 0xad, 0x1f, 0x05, 0x51, 0x00, 0x01, 0xff, 0x44, - 0x03, 0x07, 0x7c, 0x06, 0x00, 0x06, 0x3c, 0x06, 0x06, 0x5a, 0xb8, 0x1f, - 0x7d, 0x06, 0x40, 0x49, 0x29, 0xb6, 0xb8, 0x08, 0x00, 0xf6, 0xbf, 0x08, - 0x40, 0x46, 0x9b, 0xcf, 0x29, 0x06, 0x80, 0x06, 0x4a, 0x31, 0x67, 0x98, - 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x94, 0xfe, 0x00, 0x44, - 0x06, 0xe5, 0xc3, 0x06, 0x00, 0x4d, 0xe0, 0x02, 0x93, 0xfe, 0x40, 0x4b, - 0xd8, 0x14, 0x97, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0x95, 0xfe, 0x40, 0x80, - 0x24, 0x42, 0x4e, 0x00, 0x87, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, - 0x97, 0x29, 0x7f, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x30, 0x67, 0x81, 0xfb, - 0x40, 0x4b, 0xd8, 0x14, 0x80, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0x7e, 0xfb, - 0x40, 0x4a, 0x97, 0x29, 0x7b, 0xfb, 0x00, 0xa9, 0x17, 0x4b, 0x30, 0x67, - 0x7d, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0xec, 0x1b, 0xbf, - 0x06, 0x00, 0x47, 0xe9, 0x30, 0xc1, 0x08, 0x40, 0x4b, 0xd8, 0x14, 0x7c, - 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0x7a, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, - 0x97, 0x29, 0xc2, 0xfe, 0x00, 0xa9, 0x2a, 0x4b, 0x30, 0x67, 0xc4, 0xfe, - 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0xf9, 0x10, 0x8b, 0x08, 0x00, - 0xb4, 0x01, 0xff, 0x0a, 0x08, 0x11, 0x06, 0x4d, 0x4b, 0x0d, 0xa3, 0x08, - 0x40, 0x45, 0x5c, 0x00, 0x9f, 0x06, 0x00, 0x45, 0x25, 0x06, 0x8c, 0x08, - 0x40, 0x4b, 0xd8, 0x14, 0xc3, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0xc1, 0xfe, - 0x40, 0x42, 0xe8, 0x01, 0x35, 0x06, 0x80, 0x99, 0x01, 0x43, 0xca, 0x08, - 0x33, 0x06, 0x80, 0x3c, 0x44, 0xf5, 0xd0, 0x34, 0x06, 0x80, 0x12, 0x4b, - 0x55, 0x9b, 0xb1, 0x08, 0x00, 0x4f, 0x75, 0x05, 0x70, 0x06, 0x00, 0x48, - 0x55, 0xc2, 0xaa, 0x06, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xb6, - 0xfe, 0x00, 0xa9, 0x0c, 0x4b, 0x30, 0x67, 0xb8, 0xfe, 0x00, 0x4e, 0xba, - 0x77, 0xfa, 0x06, 0x40, 0x4b, 0xd8, 0x14, 0xb7, 0xfe, 0x00, 0x4c, 0xe1, - 0x02, 0xb5, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xb2, 0xfe, - 0x00, 0xa9, 0x3f, 0x4b, 0x30, 0x67, 0xb4, 0xfe, 0x00, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x57, 0xb5, 0x2a, 0x9a, 0x06, 0x00, 0x66, 0xde, 0x05, 0x7d, - 0x07, 0x00, 0x4f, 0x75, 0x41, 0x5c, 0x07, 0x00, 0x4a, 0x7c, 0x3a, 0x7e, - 0x07, 0x00, 0x64, 0x09, 0x09, 0x70, 0x07, 0x00, 0xb4, 0x01, 0xff, 0x4f, - 0x77, 0x67, 0x9b, 0x06, 0x80, 0x06, 0x58, 0xff, 0x28, 0x6d, 0x07, 0x40, - 0x55, 0x02, 0x11, 0x9c, 0x06, 0x40, 0x4b, 0xd8, 0x14, 0xb3, 0xfe, 0x00, - 0x4c, 0xe1, 0x02, 0xb1, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, - 0xba, 0xfe, 0x00, 0xa9, 0x21, 0x4b, 0x30, 0x67, 0xbc, 0xfe, 0x00, 0x06, - 0x2e, 0x05, 0x01, 0xff, 0x0a, 0x08, 0x11, 0x06, 0x4d, 0x5e, 0x0d, 0x9d, - 0x06, 0x40, 0x45, 0x5c, 0x00, 0x9e, 0x06, 0x00, 0x45, 0x25, 0x06, 0xaf, - 0x08, 0x40, 0x4b, 0xd8, 0x14, 0xbb, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0xb9, - 0xfe, 0x40, 0x42, 0x4e, 0x00, 0x31, 0x06, 0x80, 0x40, 0x44, 0xc5, 0x40, - 0xbb, 0x06, 0x80, 0x1c, 0x4b, 0x5e, 0x98, 0xac, 0x08, 0x00, 0x43, 0xd4, - 0x74, 0x91, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x8d, - 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0x8c, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, - 0x97, 0x29, 0xa1, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x30, 0x67, 0xa3, 0xfb, - 0x40, 0x4b, 0xd8, 0x14, 0xa2, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0xa0, 0xfb, - 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xae, 0xfe, 0x00, 0x4d, 0xe0, - 0x02, 0xad, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0xf9, 0x10, - 0x94, 0x06, 0x80, 0x52, 0x4f, 0x75, 0x41, 0x99, 0x06, 0x00, 0x4b, 0x56, - 0x00, 0x6c, 0x07, 0x00, 0x4a, 0x7c, 0x3a, 0xef, 0x06, 0x00, 0x44, 0xeb, - 0xb6, 0xaa, 0x08, 0x00, 0x44, 0x03, 0x07, 0x93, 0x06, 0x00, 0xb3, 0x11, - 0x09, 0x8d, 0x0a, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x97, 0x06, 0x00, 0x50, - 0x07, 0x29, 0x6b, 0x07, 0x40, 0x05, 0x3d, 0x06, 0x06, 0x45, 0x58, 0x04, - 0x5b, 0x07, 0x40, 0x5e, 0x0f, 0x09, 0x71, 0x07, 0x00, 0x4a, 0xff, 0x60, - 0xb9, 0x08, 0x00, 0xf6, 0x92, 0x06, 0xc0, 0x00, 0x46, 0x24, 0x06, 0x95, - 0x06, 0x40, 0x4e, 0xe7, 0x1b, 0x96, 0x06, 0x40, 0x80, 0x01, 0xff, 0x4a, - 0x97, 0x29, 0xd6, 0xfe, 0x00, 0xa9, 0x28, 0x4b, 0x30, 0x67, 0xd8, 0xfe, - 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x9f, 0x0a, 0x06, 0x50, 0x07, - 0x11, 0xa8, 0x06, 0x40, 0x45, 0x5c, 0x00, 0xa7, 0x06, 0x00, 0x45, 0x25, - 0x06, 0xa5, 0x08, 0xc0, 0x00, 0x52, 0x79, 0x49, 0xb5, 0x08, 0x40, 0x4b, - 0xd8, 0x14, 0xd7, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0xd5, 0xfe, 0x40, 0x80, - 0x24, 0x42, 0x4e, 0x00, 0xa6, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, - 0x97, 0x29, 0x6f, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x30, 0x67, 0x71, 0xfb, - 0x40, 0x4b, 0xd8, 0x14, 0x70, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0x6e, 0xfb, - 0x40, 0x4a, 0x97, 0x29, 0x57, 0xfb, 0x00, 0xa9, 0x15, 0x4b, 0x30, 0x67, - 0x59, 0xfb, 0x00, 0x0b, 0x10, 0x8f, 0x01, 0xff, 0x4a, 0x11, 0xa5, 0xb7, - 0x08, 0x00, 0xf6, 0xbe, 0x08, 0x40, 0x4b, 0xd8, 0x14, 0x58, 0xfb, 0x00, - 0x4c, 0xe1, 0x02, 0x56, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, - 0xda, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0xd9, 0xfb, 0x40, 0xe7, 0xad, 0x06, - 0x80, 0x92, 0x01, 0x43, 0x99, 0x04, 0x46, 0x06, 0x80, 0x24, 0x43, 0x4d, - 0x00, 0x83, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x77, - 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x30, 0x67, 0x79, 0xfb, 0x40, 0x4b, 0xd8, - 0x14, 0x78, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0x76, 0xfb, 0x40, 0x80, 0x01, - 0xff, 0x4a, 0x97, 0x29, 0xe6, 0xfe, 0x00, 0x46, 0xca, 0x40, 0xba, 0x06, - 0x80, 0x48, 0xa9, 0x3a, 0x4b, 0x30, 0x67, 0xe8, 0xfe, 0x00, 0x05, 0x51, - 0x00, 0x01, 0xff, 0x49, 0xf9, 0x10, 0xb9, 0x06, 0x00, 0x50, 0xe0, 0x30, - 0x89, 0x08, 0x00, 0x44, 0x03, 0x07, 0xbc, 0x06, 0x00, 0x06, 0x3c, 0x06, - 0x0f, 0xb4, 0x01, 0xff, 0x4f, 0x08, 0x11, 0xbd, 0x06, 0x00, 0x4d, 0x5e, - 0x0d, 0x67, 0x07, 0x40, 0x43, 0xe5, 0x06, 0x68, 0x07, 0x00, 0xf6, 0x69, - 0x07, 0x40, 0x4b, 0xd8, 0x14, 0xe7, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0xe5, - 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x9f, 0xfb, 0x00, 0x4d, - 0xe0, 0x02, 0x9e, 0xfb, 0x40, 0x80, 0x24, 0x43, 0xc0, 0x94, 0xb1, 0x06, - 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x9b, 0xfb, 0x00, 0xa9, - 0x06, 0x4b, 0x30, 0x67, 0x9d, 0xfb, 0x40, 0x4b, 0xd8, 0x14, 0x9c, 0xfb, - 0x00, 0x4c, 0xe1, 0x02, 0x9a, 0xfb, 0x40, 0x4a, 0x97, 0x29, 0xd4, 0xfb, - 0x00, 0xa9, 0x06, 0x4b, 0x30, 0x67, 0xd6, 0xfb, 0x40, 0x4b, 0xd8, 0x14, - 0xd5, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0xd3, 0xfb, 0x40, 0x43, 0xba, 0x00, - 0x1c, 0x06, 0x00, 0x43, 0x6a, 0x16, 0x45, 0x06, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x4a, 0x97, 0x29, 0xe2, 0xfe, 0x00, 0xa9, 0x21, 0x4b, 0x30, 0x67, - 0xe4, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x9f, 0x0a, 0x06, - 0x50, 0x07, 0x11, 0xa7, 0x08, 0x40, 0x45, 0x5c, 0x00, 0x65, 0x07, 0x00, - 0x45, 0x25, 0x06, 0x66, 0x07, 0x40, 0x4b, 0xd8, 0x14, 0xe3, 0xfe, 0x00, - 0x4c, 0xe1, 0x02, 0xe1, 0xfe, 0x40, 0x42, 0x57, 0x00, 0x44, 0x06, 0x80, - 0x06, 0x47, 0x04, 0xca, 0xad, 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, - 0x29, 0xde, 0xfe, 0x00, 0xa9, 0x40, 0x4b, 0x30, 0x67, 0xe0, 0xfe, 0x00, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x43, 0x16, 0x00, 0x6a, 0x07, 0x00, 0x02, - 0x3b, 0x01, 0x1f, 0x06, 0x3c, 0x06, 0x11, 0x0b, 0x07, 0x11, 0x01, 0xff, - 0x45, 0x5c, 0x00, 0xb7, 0x06, 0x00, 0x45, 0x25, 0x06, 0xb8, 0x06, 0x40, - 0x57, 0xe6, 0x29, 0xc7, 0x08, 0x00, 0xf6, 0xb5, 0x06, 0x40, 0x47, 0xee, - 0x1b, 0xb6, 0x06, 0x00, 0x48, 0xdb, 0xa0, 0xa6, 0x08, 0x40, 0x4b, 0xd8, - 0x14, 0xdf, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0xdd, 0xfe, 0x40, 0xa1, 0xb4, - 0x01, 0x44, 0x2b, 0x67, 0xa9, 0x06, 0x80, 0x55, 0x43, 0xbe, 0x1e, 0x2e, - 0x06, 0x80, 0x31, 0x07, 0x46, 0x00, 0x01, 0xff, 0x42, 0xca, 0x4b, 0xc5, - 0x06, 0x80, 0x16, 0x42, 0xa7, 0x48, 0xc9, 0x06, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x4a, 0x97, 0x29, 0xe3, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0xe2, 0xfb, - 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xe1, 0xfb, 0x00, 0x4d, 0xe0, - 0x02, 0xe0, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xa6, 0xfe, - 0x00, 0xa9, 0x06, 0x4b, 0x30, 0x67, 0xa8, 0xfe, 0x40, 0x4b, 0xd8, 0x14, - 0xa7, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0xa5, 0xfe, 0x40, 0x80, 0x01, 0xff, - 0x4a, 0x97, 0x29, 0x8f, 0xfb, 0x00, 0xa9, 0x41, 0x4b, 0x30, 0x67, 0x91, - 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0xec, 0x1b, 0x62, 0x07, - 0x00, 0x47, 0xe9, 0x30, 0xc2, 0x08, 0x00, 0xb4, 0x01, 0xff, 0x0a, 0x08, - 0x11, 0x11, 0x08, 0xc2, 0x06, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x3b, 0x06, - 0x00, 0x50, 0xca, 0x06, 0x8d, 0x08, 0x40, 0x45, 0x5c, 0x00, 0x63, 0x07, - 0x00, 0x45, 0x25, 0x06, 0x3c, 0x06, 0x00, 0x56, 0x2a, 0x32, 0x64, 0x07, - 0x40, 0x4b, 0xd8, 0x14, 0x90, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0x8e, 0xfb, - 0x40, 0xe6, 0x43, 0x06, 0x80, 0x06, 0x4a, 0x31, 0xa8, 0x20, 0x06, 0x40, - 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xda, 0xfe, 0x00, 0xa9, 0x30, 0x4b, - 0x30, 0x67, 0xdc, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x9f, - 0x0a, 0x15, 0x44, 0x03, 0x07, 0xab, 0x06, 0x00, 0xb4, 0x01, 0xff, 0x4f, - 0x77, 0x67, 0xae, 0x06, 0x00, 0x4d, 0x4b, 0x0d, 0x7f, 0x07, 0x40, 0x45, - 0x5c, 0x00, 0xac, 0x06, 0x00, 0x45, 0x25, 0x06, 0xb4, 0x08, 0x40, 0x4b, - 0xd8, 0x14, 0xdb, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0xd9, 0xfe, 0x40, 0x42, - 0xba, 0x04, 0x2c, 0x06, 0x80, 0x14, 0xe8, 0x98, 0x06, 0xc0, 0x00, 0x80, - 0x01, 0xff, 0x4a, 0x97, 0x29, 0x8b, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0x8a, - 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x9e, 0xfe, 0x00, 0xa9, - 0x21, 0x4b, 0x30, 0x67, 0xa0, 0xfe, 0x00, 0x06, 0x2e, 0x05, 0x01, 0xff, - 0x0a, 0x08, 0x11, 0x06, 0x4d, 0x4b, 0x0d, 0xa2, 0x08, 0x40, 0x45, 0x5c, - 0x00, 0xc5, 0x08, 0x00, 0x45, 0x25, 0x06, 0xc6, 0x08, 0x40, 0x4b, 0xd8, - 0x14, 0x9f, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0x9d, 0xfe, 0x40, 0xa1, 0xaf, - 0x01, 0x42, 0x4e, 0x00, 0x47, 0x06, 0x80, 0x1c, 0x49, 0xbf, 0xb0, 0x74, - 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x44, 0x67, 0x00, 0x75, 0x06, 0x00, - 0x43, 0x08, 0x83, 0x76, 0x06, 0x00, 0x43, 0x4d, 0x00, 0x78, 0x06, 0x40, - 0x80, 0x01, 0xff, 0x4b, 0xf4, 0x92, 0xbe, 0x06, 0x80, 0x65, 0x4a, 0x97, - 0x29, 0xea, 0xfe, 0x00, 0x44, 0x06, 0xe5, 0xc1, 0x06, 0x80, 0x35, 0xa9, - 0x27, 0x4b, 0x30, 0x67, 0xec, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x4a, 0x7c, 0x3a, 0xff, 0x06, 0x00, 0x49, 0xfd, 0xb7, 0xc0, 0x06, 0xc0, - 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xa5, 0xfb, 0x00, 0x4d, 0xe0, - 0x02, 0xa4, 0xfb, 0x40, 0x4b, 0xd8, 0x14, 0xeb, 0xfe, 0x00, 0x4c, 0xe1, - 0x02, 0xe9, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xa7, 0xfb, - 0x00, 0xa9, 0x0c, 0x4b, 0x30, 0x67, 0xa9, 0xfb, 0x00, 0x50, 0x51, 0x00, - 0xc2, 0x06, 0x40, 0x4b, 0xd8, 0x14, 0xa8, 0xfb, 0x00, 0x4c, 0xe1, 0x02, - 0xa6, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xab, 0xfb, 0x00, - 0xa9, 0x06, 0x4b, 0x30, 0x67, 0xad, 0xfb, 0x40, 0x4b, 0xd8, 0x14, 0xac, - 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0xaa, 0xfb, 0x40, 0xe8, 0x2d, 0x06, 0x80, - 0x0d, 0x43, 0x58, 0x00, 0x21, 0x06, 0xc0, 0x00, 0x4e, 0xdf, 0x02, 0x80, - 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xa2, 0xfe, 0x00, 0xa9, - 0x59, 0x4b, 0x30, 0x67, 0xa4, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x66, 0x04, 0x06, 0x7c, 0x07, 0x00, 0x4b, 0x56, 0x00, 0x81, 0x06, 0x00, - 0x56, 0xf6, 0x30, 0x8a, 0x08, 0x00, 0x18, 0x09, 0x09, 0x24, 0xb4, 0x01, - 0xff, 0x0a, 0x08, 0x11, 0x11, 0x08, 0xc2, 0x06, 0x01, 0xff, 0x45, 0x5c, - 0x00, 0x57, 0x07, 0x00, 0x4e, 0x66, 0x77, 0x82, 0x06, 0x40, 0x45, 0x5c, - 0x00, 0x85, 0x06, 0x00, 0x56, 0x2a, 0x32, 0x58, 0x07, 0x40, 0xa1, 0x06, - 0x45, 0x25, 0x06, 0x6e, 0x07, 0x40, 0x44, 0x5d, 0x00, 0x72, 0x07, 0x00, - 0x4b, 0x22, 0x09, 0x6f, 0x07, 0x40, 0x4b, 0xd8, 0x14, 0xa3, 0xfe, 0x00, - 0x4c, 0xe1, 0x02, 0xa1, 0xfe, 0x40, 0x42, 0x9e, 0x12, 0xaf, 0x06, 0x80, - 0x5f, 0x44, 0x4a, 0x94, 0x3a, 0x06, 0x80, 0x2a, 0x43, 0xaa, 0x1d, 0xc8, - 0x08, 0x00, 0x43, 0x13, 0xe9, 0xb3, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, - 0x4a, 0x97, 0x29, 0x97, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x30, 0x67, 0x99, - 0xfb, 0x40, 0x4b, 0xd8, 0x14, 0x98, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0x96, - 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xce, 0xfe, 0x00, 0xa9, - 0x17, 0x4b, 0x30, 0x67, 0xd0, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x49, 0xf9, 0x10, 0xfc, 0x06, 0x00, 0x50, 0x07, 0x11, 0xc3, 0x08, 0x40, - 0x4b, 0xd8, 0x14, 0xcf, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0xcd, 0xfe, 0x40, - 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x93, 0xfb, 0x00, 0xa9, 0x26, 0x4b, - 0x30, 0x67, 0x95, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4f, 0x0d, - 0x68, 0xb0, 0x08, 0x00, 0x44, 0x03, 0x07, 0xb0, 0x06, 0x00, 0xb4, 0x01, - 0xff, 0x4f, 0x08, 0x11, 0xb4, 0x06, 0x00, 0x4d, 0x5e, 0x0d, 0xb2, 0x06, - 0x40, 0x4b, 0xd8, 0x14, 0x94, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0x92, 0xfb, - 0x40, 0x48, 0xe5, 0xb9, 0xcc, 0x06, 0x80, 0x59, 0x42, 0x4e, 0x00, 0x41, - 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xd2, 0xfe, 0x00, - 0xa9, 0x3b, 0x4b, 0x30, 0x67, 0xd4, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x04, 0x9f, 0x0a, 0x19, 0xb4, 0x01, 0xff, 0x0a, 0x08, 0x11, 0x06, - 0x4d, 0x5e, 0x0d, 0x60, 0x07, 0x40, 0x45, 0x25, 0x06, 0xa5, 0x06, 0x00, - 0x56, 0x2a, 0x32, 0x61, 0x07, 0x40, 0x45, 0x25, 0x06, 0xa3, 0x06, 0x80, - 0x06, 0x4b, 0x8d, 0x97, 0xa2, 0x06, 0x40, 0x55, 0x02, 0x11, 0xa4, 0x08, - 0x40, 0x4b, 0xd8, 0x14, 0xd3, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0xd1, 0xfe, - 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xfd, 0xfb, 0x00, 0xa9, 0x39, - 0x4b, 0x30, 0x67, 0xff, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x1c, - 0xde, 0x05, 0x15, 0x4a, 0x7c, 0x3a, 0x3d, 0x06, 0x00, 0xb4, 0x01, 0xff, - 0x4f, 0x08, 0x11, 0x3f, 0x06, 0x00, 0x4d, 0x4b, 0x0d, 0x3e, 0x06, 0x40, - 0x4a, 0x20, 0x06, 0x77, 0x07, 0x00, 0xb4, 0x01, 0xff, 0x4a, 0xb9, 0xa2, - 0x76, 0x07, 0x00, 0x48, 0x6d, 0xc2, 0x75, 0x07, 0x40, 0x4b, 0xd8, 0x14, - 0xfe, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0xfc, 0xfb, 0x40, 0x80, 0x01, 0xff, - 0x4a, 0x97, 0x29, 0xe5, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x30, 0x67, 0xe7, - 0xfb, 0x40, 0x4b, 0xd8, 0x14, 0xe6, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0xe4, - 0xfb, 0x40, 0xa1, 0x7e, 0x02, 0x68, 0x0f, 0x50, 0x07, 0xad, 0x3c, 0x3a, - 0x42, 0x1f, 0x01, 0x8e, 0x06, 0x80, 0x24, 0x43, 0x4d, 0x00, 0x84, 0x06, - 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x73, 0xfb, 0x00, 0xa9, - 0x06, 0x4b, 0x30, 0x67, 0x75, 0xfb, 0x40, 0x4b, 0xd8, 0x14, 0x74, 0xfb, - 0x00, 0x4c, 0xe1, 0x02, 0x72, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, - 0x29, 0x87, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0x86, 0xfb, 0x40, 0x43, 0x20, - 0x85, 0x6e, 0x06, 0x00, 0x43, 0x96, 0xaf, 0xa1, 0x06, 0x00, 0x43, 0x9d, - 0x12, 0x6f, 0x06, 0x40, 0x43, 0x22, 0x00, 0x8d, 0x06, 0x80, 0x14, 0xec, - 0x88, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x89, 0xfb, - 0x00, 0x4d, 0xe0, 0x02, 0x88, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, - 0x29, 0x83, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0x82, 0xfb, 0x40, 0xe4, 0x36, - 0x06, 0x80, 0x6f, 0x43, 0x22, 0x00, 0x8c, 0x06, 0x80, 0x59, 0xec, 0x2f, - 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xaa, 0xfe, 0x00, - 0x4d, 0xe0, 0x02, 0xa9, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, - 0xf9, 0x10, 0x8a, 0x06, 0x80, 0x33, 0x4f, 0x75, 0x41, 0x90, 0x06, 0x00, - 0x09, 0xc2, 0x20, 0x1f, 0x44, 0x03, 0x07, 0x89, 0x06, 0x00, 0xb4, 0x01, - 0xff, 0x0a, 0x08, 0x11, 0x06, 0x66, 0xc2, 0x06, 0x59, 0x07, 0x40, 0x4f, - 0xc3, 0x1f, 0x8f, 0x06, 0x00, 0x45, 0x25, 0x06, 0xae, 0x08, 0x40, 0x4d, - 0xff, 0x30, 0x5a, 0x07, 0x00, 0xf6, 0xee, 0x06, 0x40, 0x4e, 0xda, 0x06, - 0x8b, 0x06, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x85, 0xfb, 0x00, - 0x4d, 0xe0, 0x02, 0x84, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, - 0xbe, 0xfe, 0x00, 0xa9, 0x0c, 0x4b, 0x30, 0x67, 0xc0, 0xfe, 0x00, 0x4e, - 0xba, 0x77, 0xfb, 0x06, 0x40, 0x4b, 0xd8, 0x14, 0xbf, 0xfe, 0x00, 0x4c, - 0xe1, 0x02, 0xbd, 0xfe, 0x40, 0x42, 0x4e, 0x00, 0x7b, 0x06, 0x80, 0x91, - 0x01, 0xe8, 0x28, 0x06, 0xc0, 0x00, 0x80, 0x24, 0x42, 0x4e, 0x00, 0x80, - 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x5b, 0xfb, 0x00, - 0xa9, 0x06, 0x4b, 0x30, 0x67, 0x5d, 0xfb, 0x40, 0x4b, 0xd8, 0x14, 0x5c, - 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0x5a, 0xfb, 0x40, 0x4a, 0x97, 0x29, 0x90, - 0xfe, 0x00, 0xa9, 0x52, 0x4b, 0x30, 0x67, 0x92, 0xfe, 0x00, 0x05, 0x51, - 0x00, 0x01, 0xff, 0x5e, 0xf9, 0x10, 0x51, 0x07, 0x00, 0x4b, 0x56, 0x00, - 0xa1, 0x08, 0x00, 0x56, 0xf6, 0x30, 0x55, 0x07, 0x00, 0x06, 0x3c, 0x06, - 0x20, 0xb4, 0x01, 0xff, 0x0a, 0x08, 0x11, 0x06, 0x5b, 0xda, 0x1b, 0x54, - 0x07, 0x40, 0x52, 0xb5, 0x4c, 0x50, 0x07, 0x00, 0x56, 0x2a, 0x32, 0x52, - 0x07, 0xc0, 0x00, 0x53, 0x79, 0x23, 0x53, 0x07, 0x40, 0x4a, 0x11, 0xa5, - 0xb6, 0x08, 0x00, 0xf6, 0x56, 0x07, 0xc0, 0x00, 0x46, 0x24, 0x06, 0xa0, - 0x08, 0x40, 0x4b, 0xd8, 0x14, 0x91, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0x8f, - 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x53, 0xfb, 0x00, 0xa9, - 0x06, 0x4b, 0x30, 0x67, 0x55, 0xfb, 0x40, 0x4b, 0xd8, 0x14, 0x54, 0xfb, - 0x00, 0x4c, 0xe1, 0x02, 0x52, 0xfb, 0x40, 0xe5, 0xd5, 0x06, 0x00, 0x07, - 0x95, 0xbc, 0x9c, 0x03, 0x42, 0x9e, 0x01, 0x39, 0x06, 0x80, 0xcb, 0x02, - 0x43, 0x68, 0x00, 0x27, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, - 0x29, 0x8e, 0xfe, 0x00, 0x4d, 0xe0, 0x02, 0x8d, 0xfe, 0x00, 0x47, 0x6c, - 0x00, 0x49, 0x06, 0x80, 0x9e, 0x02, 0xb7, 0x01, 0xff, 0x44, 0x7f, 0x9c, - 0x71, 0x06, 0x80, 0x84, 0x02, 0x04, 0x52, 0x00, 0x01, 0xff, 0x09, 0x5f, - 0xad, 0x8b, 0x01, 0x49, 0xec, 0x1b, 0x7a, 0x08, 0x00, 0x1d, 0xfb, 0x13, - 0x75, 0x06, 0x56, 0x00, 0x45, 0x52, 0xb1, 0x4d, 0x73, 0x08, 0x00, 0x4b, - 0x18, 0x8a, 0x22, 0x06, 0x80, 0x29, 0x53, 0x19, 0x47, 0x72, 0x08, 0x80, - 0x11, 0x0b, 0x49, 0x62, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x72, 0x06, 0x00, - 0x45, 0x25, 0x06, 0x73, 0x06, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x49, - 0xec, 0x1b, 0x7c, 0x08, 0x00, 0x49, 0xfa, 0xb1, 0x7f, 0x08, 0x40, 0x80, - 0x01, 0xff, 0x4a, 0x97, 0x29, 0x82, 0xfe, 0x00, 0x4d, 0xe0, 0x02, 0x81, - 0xfe, 0x40, 0x45, 0x5c, 0x00, 0x23, 0x06, 0x80, 0x16, 0x45, 0x25, 0x06, - 0x25, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x88, 0xfe, - 0x00, 0x4d, 0xe0, 0x02, 0x87, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, - 0x29, 0x84, 0xfe, 0x00, 0x4d, 0xe0, 0x02, 0x83, 0xfe, 0x40, 0x4a, 0xb9, - 0xa2, 0x74, 0x07, 0x00, 0x48, 0x6d, 0xc2, 0x73, 0x07, 0x40, 0x52, 0x05, - 0x4b, 0x75, 0x08, 0x80, 0x57, 0x45, 0x12, 0x6d, 0x70, 0x08, 0x00, 0x45, - 0x12, 0x4b, 0x74, 0x08, 0x00, 0x05, 0xc3, 0x00, 0x3b, 0xb2, 0x18, 0x4f, - 0x08, 0x6d, 0x71, 0x08, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x49, - 0xec, 0x1b, 0x7b, 0x08, 0x00, 0x49, 0xfa, 0xb1, 0x7e, 0x08, 0x40, 0x05, - 0xc9, 0x00, 0x11, 0x09, 0xc4, 0xa7, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x76, - 0x08, 0x00, 0x45, 0x25, 0x06, 0x79, 0x08, 0x40, 0x45, 0x56, 0x00, 0x81, - 0x08, 0x00, 0x49, 0xfc, 0x4a, 0x77, 0x08, 0x40, 0x45, 0x56, 0x00, 0x82, - 0x08, 0x00, 0x49, 0xfc, 0x4a, 0x78, 0x08, 0x40, 0x05, 0x19, 0x00, 0x01, - 0xff, 0x49, 0xec, 0x1b, 0x7d, 0x08, 0x00, 0x49, 0xfa, 0xb1, 0x80, 0x08, - 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x51, 0xfb, 0x00, 0x4d, 0xe0, - 0x02, 0x50, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xf0, 0xfe, - 0x00, 0x4d, 0xe0, 0x02, 0xef, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, - 0x29, 0xca, 0xfe, 0x00, 0xa9, 0x32, 0x4b, 0x30, 0x67, 0xcc, 0xfe, 0x00, - 0x06, 0x2e, 0x05, 0x01, 0xff, 0x0a, 0x08, 0x11, 0x11, 0x08, 0xc2, 0x06, - 0x01, 0xff, 0x45, 0x5c, 0x00, 0x5d, 0x07, 0x00, 0x50, 0x07, 0x29, 0x5f, - 0x07, 0x40, 0x45, 0x5c, 0x00, 0xa0, 0x06, 0x00, 0x45, 0x25, 0x06, 0xb3, - 0x08, 0x00, 0x58, 0x97, 0x27, 0x5e, 0x07, 0x40, 0x4b, 0xd8, 0x14, 0xcb, - 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0xc9, 0xfe, 0x40, 0x43, 0x96, 0xaf, 0xbb, - 0x08, 0x00, 0x44, 0xc5, 0x40, 0xbd, 0x08, 0x00, 0x43, 0x9d, 0x12, 0xbc, - 0x08, 0xc0, 0x00, 0x56, 0xba, 0x2e, 0xc4, 0x08, 0x40, 0x45, 0x5c, 0x00, - 0xf7, 0x08, 0x00, 0x45, 0x25, 0x06, 0xf9, 0x08, 0x40, 0x4c, 0x7e, 0x29, - 0xd1, 0x08, 0x00, 0x0a, 0xc3, 0xa7, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xce, - 0x08, 0x00, 0x45, 0x25, 0x06, 0xcf, 0x08, 0x00, 0x53, 0xf2, 0x44, 0xd2, - 0x08, 0x40, 0x80, 0x0d, 0x43, 0xb8, 0x09, 0x4d, 0x06, 0xc0, 0x00, 0x4e, - 0xdf, 0x02, 0x74, 0xfe, 0x40, 0x4d, 0xe0, 0x02, 0x7a, 0xfe, 0x00, 0x4b, - 0x30, 0x67, 0x7b, 0xfe, 0x00, 0x4e, 0xba, 0x77, 0xf6, 0x08, 0x40, 0x53, - 0x8a, 0x45, 0x9f, 0x08, 0x00, 0x04, 0x58, 0x00, 0x01, 0xff, 0x45, 0x5c, - 0x00, 0x54, 0x06, 0x00, 0x45, 0x25, 0x06, 0x55, 0x06, 0x40, 0x44, 0xcc, - 0x0d, 0x4e, 0x06, 0x80, 0x12, 0x50, 0x09, 0x5e, 0x6d, 0x06, 0x00, 0x4e, - 0x92, 0x73, 0x02, 0x06, 0x00, 0x48, 0xa1, 0x14, 0xd4, 0x06, 0x40, 0x80, - 0x0d, 0x43, 0xb8, 0x09, 0x4b, 0x06, 0xc0, 0x00, 0x4e, 0xdf, 0x02, 0x70, - 0xfe, 0x40, 0x4d, 0xe0, 0x02, 0x76, 0xfe, 0x00, 0x4b, 0x30, 0x67, 0x77, - 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0xec, 0x1b, 0xf5, 0x08, - 0x00, 0x44, 0x03, 0x07, 0xf4, 0x08, 0x00, 0x48, 0x25, 0x09, 0x5e, 0x06, - 0x40, 0x0c, 0x9c, 0x8a, 0x11, 0x06, 0x46, 0x04, 0x01, 0xff, 0x44, 0x14, - 0x45, 0xdd, 0x06, 0x00, 0x49, 0x90, 0x5c, 0x1d, 0x06, 0x40, 0x49, 0x2a, - 0x0a, 0xeb, 0x06, 0x00, 0x48, 0x15, 0xbe, 0xea, 0x06, 0x40, 0xa1, 0x24, - 0x50, 0x59, 0x5c, 0x6b, 0x06, 0x00, 0x53, 0x05, 0x45, 0xe2, 0x08, 0x00, - 0x05, 0x3c, 0x01, 0x01, 0xff, 0x56, 0x4c, 0x2e, 0xfb, 0x08, 0x80, 0x06, - 0x47, 0x06, 0xc6, 0x9e, 0x08, 0x40, 0x49, 0x4a, 0x37, 0xfc, 0x08, 0x40, - 0x43, 0x1a, 0x04, 0x4f, 0x06, 0x80, 0x06, 0x4c, 0xcc, 0x8d, 0x0d, 0x06, - 0x40, 0x80, 0x0d, 0x43, 0xb8, 0x09, 0x4c, 0x06, 0xc0, 0x00, 0x4e, 0xdf, - 0x02, 0x72, 0xfe, 0x40, 0x4d, 0xe0, 0x02, 0x78, 0xfe, 0x00, 0x4b, 0x30, - 0x67, 0x79, 0xfe, 0x00, 0x48, 0x4b, 0x37, 0xfe, 0x08, 0x40, 0x44, 0x19, - 0x04, 0x0c, 0x06, 0x00, 0x05, 0x89, 0x08, 0x01, 0xff, 0x45, 0x00, 0x59, - 0xe5, 0x08, 0x80, 0x1a, 0x45, 0x12, 0x6d, 0xe4, 0x08, 0x80, 0x0d, 0x45, - 0x12, 0x4b, 0xe6, 0x08, 0xc0, 0x00, 0x43, 0xb8, 0x09, 0xe9, 0x08, 0x40, - 0x43, 0xb8, 0x09, 0xe7, 0x08, 0x40, 0x43, 0xb8, 0x09, 0xe8, 0x08, 0x40, - 0x14, 0xf0, 0x3e, 0x45, 0xaf, 0x37, 0xb0, 0x01, 0xff, 0x58, 0xa7, 0x26, - 0x9f, 0x00, 0x00, 0x02, 0xd0, 0x00, 0x01, 0xff, 0x4f, 0x02, 0x64, 0x50, - 0x22, 0x00, 0x09, 0x5c, 0x0b, 0x01, 0xff, 0x59, 0xd0, 0x20, 0x46, 0x22, - 0x00, 0x06, 0x7b, 0x00, 0x01, 0xff, 0x4b, 0xf4, 0x25, 0x70, 0x2a, 0x00, - 0x42, 0x1e, 0x00, 0x45, 0x22, 0xc0, 0x00, 0x50, 0x49, 0x5a, 0x52, 0x22, - 0x40, 0x44, 0x8e, 0x3f, 0xe4, 0x2b, 0x00, 0x47, 0x4f, 0x32, 0x27, 0x00, - 0x40, 0x45, 0x90, 0xd9, 0x7a, 0x23, 0x80, 0x81, 0x04, 0x4d, 0xfe, 0x79, - 0x40, 0x23, 0x00, 0xa3, 0xc6, 0x03, 0xa4, 0xea, 0x02, 0x50, 0xb9, 0x5c, - 0x77, 0x23, 0x00, 0x56, 0x30, 0x30, 0x69, 0x23, 0x00, 0xa9, 0xc8, 0x02, - 0x04, 0xa6, 0xe5, 0xb7, 0x02, 0x04, 0xc3, 0x00, 0xa6, 0x02, 0x45, 0x7e, - 0xa6, 0x75, 0x23, 0x80, 0x98, 0x02, 0x02, 0x7c, 0x00, 0x6c, 0xb2, 0x5e, - 0xb3, 0x3b, 0x4f, 0xea, 0x6c, 0x68, 0x23, 0x00, 0x02, 0x50, 0x02, 0x06, - 0x45, 0xab, 0xe1, 0x6c, 0x23, 0x40, 0x80, 0x06, 0x4a, 0x90, 0x71, 0x4f, - 0x23, 0x40, 0x4b, 0xe1, 0x91, 0x72, 0x23, 0x00, 0x48, 0xdd, 0xc0, 0x5d, - 0x23, 0x00, 0x05, 0xdd, 0x8f, 0x01, 0xff, 0x49, 0x1b, 0x21, 0x61, 0x23, - 0x00, 0x43, 0xe2, 0xc0, 0x55, 0x23, 0x00, 0x47, 0xf3, 0x78, 0x51, 0x23, - 0x40, 0x51, 0x32, 0x54, 0x6e, 0x23, 0x00, 0x48, 0x03, 0x7a, 0x3f, 0x23, - 0x00, 0x4a, 0x05, 0xa7, 0x37, 0x23, 0x00, 0xb4, 0x01, 0xff, 0x4c, 0xd8, - 0x84, 0x63, 0x23, 0x00, 0x49, 0xec, 0xb0, 0x6d, 0x23, 0x40, 0x42, 0x0b, - 0x00, 0x74, 0x23, 0x00, 0x4e, 0x8c, 0x71, 0x46, 0x23, 0x40, 0x42, 0xe8, - 0x01, 0x95, 0x23, 0x80, 0x11, 0x04, 0x10, 0x4f, 0x01, 0xff, 0x44, 0xd1, - 0x0b, 0x5e, 0x23, 0x00, 0x48, 0x3b, 0x54, 0x58, 0x23, 0x40, 0x80, 0x01, - 0xff, 0x49, 0x9c, 0x0c, 0x42, 0x23, 0x00, 0xa3, 0x79, 0xa4, 0x4b, 0x45, - 0x7b, 0x00, 0x38, 0x23, 0x00, 0x4c, 0x87, 0x00, 0x44, 0x23, 0x00, 0x43, - 0xe2, 0xc0, 0x3b, 0x23, 0x00, 0x02, 0x68, 0x00, 0x29, 0x49, 0xeb, 0x27, - 0x6f, 0x23, 0x00, 0x48, 0xbd, 0x30, 0x70, 0x23, 0x00, 0x50, 0xb3, 0x02, - 0x48, 0x23, 0x00, 0x45, 0xa0, 0x0c, 0x41, 0x23, 0x00, 0x02, 0x50, 0x02, - 0x01, 0xff, 0x46, 0xbb, 0xcd, 0x53, 0x23, 0x00, 0x4b, 0xb8, 0x02, 0x50, - 0x23, 0x40, 0x4d, 0x69, 0x06, 0x47, 0x23, 0x00, 0x47, 0xee, 0x00, 0x43, - 0x23, 0x40, 0x42, 0xd8, 0x00, 0x54, 0x23, 0x80, 0x1f, 0xa9, 0x11, 0x03, - 0xa6, 0x01, 0x01, 0xff, 0x46, 0xbb, 0xcd, 0x4c, 0x23, 0x00, 0x4b, 0xb8, - 0x02, 0x57, 0x23, 0x40, 0x45, 0x9f, 0x3f, 0x3a, 0x23, 0x00, 0x44, 0x02, - 0x00, 0x39, 0x23, 0x40, 0x42, 0x12, 0x00, 0x4d, 0x23, 0x40, 0x45, 0x01, - 0x04, 0x3c, 0x23, 0x00, 0x44, 0xab, 0x10, 0x60, 0x23, 0x40, 0x49, 0x3a, - 0x54, 0x79, 0x23, 0x40, 0x4b, 0xd1, 0x8f, 0x67, 0x23, 0x00, 0x4a, 0x90, - 0x71, 0x45, 0x23, 0x40, 0x49, 0x1b, 0x21, 0x64, 0x23, 0x00, 0x48, 0x3b, - 0x54, 0x5b, 0x23, 0x40, 0x45, 0x51, 0xd7, 0x36, 0x23, 0x00, 0x43, 0x20, - 0x04, 0x73, 0x23, 0xc0, 0x00, 0x49, 0x3a, 0x54, 0x78, 0x23, 0x40, 0x02, - 0xd8, 0x00, 0x30, 0x4f, 0x86, 0x67, 0x5a, 0x23, 0x00, 0x03, 0xa6, 0x01, - 0x01, 0xff, 0x80, 0x06, 0x4a, 0x90, 0x71, 0x56, 0x23, 0x40, 0x4b, 0xe1, - 0x91, 0x71, 0x23, 0x00, 0x4a, 0xd2, 0x8f, 0x66, 0x23, 0x00, 0x05, 0xdd, - 0x8f, 0x01, 0xff, 0x43, 0xe2, 0xc0, 0x4e, 0x23, 0x00, 0x48, 0x3b, 0x54, - 0x4a, 0x23, 0x40, 0x80, 0x11, 0x03, 0x38, 0x20, 0x01, 0xff, 0x45, 0x60, - 0x01, 0x4b, 0x23, 0x00, 0x48, 0x3b, 0x54, 0x59, 0x23, 0x40, 0x49, 0x1b, - 0x21, 0x62, 0x23, 0x00, 0x45, 0x60, 0x01, 0x52, 0x23, 0x00, 0x45, 0x99, - 0x20, 0x6b, 0x23, 0x40, 0x06, 0x01, 0x04, 0x06, 0x48, 0x65, 0xbf, 0x6a, - 0x23, 0x40, 0x49, 0x9c, 0x0c, 0x49, 0x23, 0x00, 0x49, 0x1b, 0x21, 0x65, - 0x23, 0x00, 0x43, 0xe2, 0xc0, 0x3e, 0x23, 0x00, 0x02, 0x60, 0x01, 0x06, - 0x48, 0x3b, 0x54, 0x5c, 0x23, 0x40, 0x42, 0x17, 0x00, 0x5f, 0x23, 0x00, - 0x43, 0x62, 0x01, 0x3d, 0x23, 0x40, 0x49, 0x3a, 0x54, 0x76, 0x23, 0x40, - 0x03, 0x79, 0x14, 0xa6, 0x01, 0x44, 0x6d, 0xcf, 0x93, 0x26, 0x00, 0x4a, - 0x93, 0xa0, 0xd1, 0x27, 0x00, 0xa7, 0x68, 0x42, 0xda, 0x0a, 0x25, 0x26, - 0x00, 0xf4, 0x1c, 0xf4, 0xc1, 0x00, 0x4e, 0x82, 0x70, 0xf6, 0xf4, 0x01, - 0x0b, 0xbc, 0x0e, 0x01, 0xff, 0xa3, 0x44, 0x68, 0xe5, 0x03, 0x04, 0xf5, - 0x01, 0x53, 0x0e, 0x44, 0xf2, 0x27, 0x00, 0x4b, 0xbc, 0x88, 0x11, 0x2a, - 0x00, 0x51, 0xfb, 0x03, 0xba, 0x21, 0x00, 0xb4, 0x01, 0xff, 0x53, 0x48, - 0x46, 0xb6, 0x21, 0x00, 0x0f, 0x02, 0x02, 0x01, 0xff, 0x55, 0x76, 0x35, - 0x8d, 0x2b, 0x00, 0x53, 0x77, 0x45, 0x8e, 0x2b, 0x00, 0x51, 0xfb, 0x03, - 0x6f, 0x2b, 0x00, 0x54, 0x58, 0x40, 0x8c, 0x2b, 0x00, 0x52, 0x15, 0x50, - 0x8f, 0x2b, 0x40, 0x52, 0xd5, 0x4d, 0x40, 0x29, 0x00, 0x4f, 0x92, 0x6a, - 0x33, 0x22, 0x40, 0x49, 0xe6, 0x26, 0xa2, 0xf4, 0x01, 0x42, 0x68, 0x00, - 0x20, 0x22, 0x80, 0x12, 0x47, 0x3f, 0xcb, 0x20, 0xf6, 0x01, 0x4a, 0xa9, - 0xa8, 0x2b, 0x21, 0x00, 0x4b, 0xce, 0x9b, 0x27, 0xf6, 0x41, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x48, 0x3d, 0x4f, 0x9e, 0x29, 0x00, 0x48, 0x3b, 0x54, - 0xa4, 0x29, 0x40, 0x11, 0x1f, 0x56, 0x06, 0x4b, 0x56, 0x97, 0xc0, 0xfa, - 0x41, 0x90, 0x92, 0x10, 0x91, 0x9a, 0x0c, 0x92, 0xb5, 0x08, 0x93, 0xbd, - 0x04, 0x94, 0x83, 0x01, 0x95, 0x01, 0xff, 0x90, 0x5a, 0x91, 0x30, 0x92, - 0x06, 0x42, 0x73, 0xe8, 0x46, 0x46, 0x41, 0xd0, 0x3c, 0x46, 0x01, 0xd1, - 0x3d, 0x46, 0x01, 0xd2, 0x3e, 0x46, 0x01, 0xd3, 0x3f, 0x46, 0x01, 0xd4, - 0x40, 0x46, 0x01, 0xd5, 0x41, 0x46, 0x01, 0xd6, 0x42, 0x46, 0x01, 0xd7, - 0x43, 0x46, 0x01, 0xd8, 0x44, 0x46, 0x01, 0xd9, 0x45, 0x46, 0x41, 0xd0, - 0x32, 0x46, 0x01, 0xd1, 0x33, 0x46, 0x01, 0xd2, 0x34, 0x46, 0x01, 0xd3, - 0x35, 0x46, 0x01, 0xd4, 0x36, 0x46, 0x01, 0xd5, 0x37, 0x46, 0x01, 0xd6, - 0x38, 0x46, 0x01, 0xd7, 0x39, 0x46, 0x01, 0xd8, 0x3a, 0x46, 0x01, 0xd9, - 0x3b, 0x46, 0x41, 0xd1, 0x29, 0x46, 0x01, 0xd2, 0x2a, 0x46, 0x01, 0xd3, - 0x2b, 0x46, 0x01, 0xd4, 0x2c, 0x46, 0x01, 0xd5, 0x2d, 0x46, 0x01, 0xd6, - 0x2e, 0x46, 0x01, 0xd7, 0x2f, 0x46, 0x01, 0xd8, 0x30, 0x46, 0x01, 0xd9, - 0x31, 0x46, 0x41, 0x90, 0x8c, 0x03, 0x91, 0xd7, 0x02, 0x92, 0xac, 0x02, - 0x93, 0x81, 0x02, 0x94, 0xd6, 0x01, 0x95, 0xa1, 0x01, 0x96, 0x77, 0x97, - 0x4d, 0x98, 0x23, 0x99, 0x01, 0xff, 0xd0, 0x21, 0x46, 0x01, 0xd1, 0x22, - 0x46, 0x01, 0xd2, 0x23, 0x46, 0x01, 0xd3, 0x24, 0x46, 0x01, 0xd4, 0x25, - 0x46, 0x01, 0xd5, 0x26, 0x46, 0x01, 0xd6, 0x27, 0x46, 0x01, 0xd7, 0x28, - 0x46, 0x41, 0xd0, 0x17, 0x46, 0x01, 0xd1, 0x18, 0x46, 0x01, 0xd2, 0x19, - 0x46, 0x01, 0xd3, 0x1a, 0x46, 0x01, 0xd4, 0x1b, 0x46, 0x01, 0xd5, 0x1c, - 0x46, 0x01, 0xd6, 0x1d, 0x46, 0x01, 0xd7, 0x1e, 0x46, 0x01, 0xd8, 0x1f, - 0x46, 0x01, 0xd9, 0x20, 0x46, 0x41, 0xd0, 0x0d, 0x46, 0x01, 0xd1, 0x0e, - 0x46, 0x01, 0xd2, 0x0f, 0x46, 0x01, 0xd3, 0x10, 0x46, 0x01, 0xd4, 0x11, - 0x46, 0x01, 0xd5, 0x12, 0x46, 0x01, 0xd6, 0x13, 0x46, 0x01, 0xd7, 0x14, - 0x46, 0x01, 0xd8, 0x15, 0x46, 0x01, 0xd9, 0x16, 0x46, 0x41, 0xd0, 0x03, - 0x46, 0x01, 0xd1, 0x04, 0x46, 0x01, 0xd2, 0x05, 0x46, 0x01, 0xd3, 0x06, - 0x46, 0x01, 0xd4, 0x07, 0x46, 0x01, 0xd5, 0x08, 0x46, 0x01, 0xd6, 0x09, - 0x46, 0x01, 0xd7, 0x0a, 0x46, 0x01, 0xd8, 0x0b, 0x46, 0x01, 0xd9, 0x0c, - 0x46, 0x41, 0xd0, 0xf7, 0x45, 0x81, 0x29, 0xd1, 0xf9, 0x45, 0x01, 0xd2, - 0xfa, 0x45, 0x01, 0xd3, 0xfb, 0x45, 0x01, 0xd4, 0xfc, 0x45, 0x01, 0xd5, - 0xfd, 0x45, 0x01, 0xd6, 0xfe, 0x45, 0x01, 0xd7, 0xff, 0x45, 0x81, 0x08, - 0xd8, 0x01, 0x46, 0x01, 0xd9, 0x02, 0x46, 0x41, 0xe1, 0x00, 0x46, 0x41, - 0xe1, 0xf8, 0x45, 0x41, 0xd0, 0xed, 0x45, 0x01, 0xd1, 0xee, 0x45, 0x01, - 0xd2, 0xef, 0x45, 0x01, 0xd3, 0xf0, 0x45, 0x01, 0xd4, 0xf1, 0x45, 0x01, - 0xd5, 0xf2, 0x45, 0x01, 0xd6, 0xf3, 0x45, 0x01, 0xd7, 0xf4, 0x45, 0x01, - 0xd8, 0xf5, 0x45, 0x01, 0xd9, 0xf6, 0x45, 0x41, 0xd0, 0xe3, 0x45, 0x01, - 0xd1, 0xe4, 0x45, 0x01, 0xd2, 0xe5, 0x45, 0x01, 0xd3, 0xe6, 0x45, 0x01, - 0xd4, 0xe7, 0x45, 0x01, 0xd5, 0xe8, 0x45, 0x01, 0xd6, 0xe9, 0x45, 0x01, - 0xd7, 0xea, 0x45, 0x01, 0xd8, 0xeb, 0x45, 0x01, 0xd9, 0xec, 0x45, 0x41, - 0xd0, 0xd9, 0x45, 0x01, 0xd1, 0xda, 0x45, 0x01, 0xd2, 0xdb, 0x45, 0x01, - 0xd3, 0xdc, 0x45, 0x01, 0xd4, 0xdd, 0x45, 0x01, 0xd5, 0xde, 0x45, 0x01, - 0xd6, 0xdf, 0x45, 0x01, 0xd7, 0xe0, 0x45, 0x01, 0xd8, 0xe1, 0x45, 0x01, - 0xd9, 0xe2, 0x45, 0x41, 0x90, 0x24, 0xd1, 0xd0, 0x45, 0x01, 0xd2, 0xd1, - 0x45, 0x01, 0xd3, 0xd2, 0x45, 0x01, 0xd4, 0xd3, 0x45, 0x01, 0xd5, 0xd4, - 0x45, 0x01, 0xd6, 0xd5, 0x45, 0x01, 0xd7, 0xd6, 0x45, 0x01, 0xd8, 0xd7, - 0x45, 0x01, 0xd9, 0xd8, 0x45, 0x41, 0x54, 0x08, 0x3b, 0xce, 0x45, 0x01, - 0x53, 0x6c, 0x42, 0xcf, 0x45, 0x41, 0xd0, 0xc4, 0x45, 0x01, 0xd1, 0xc5, - 0x45, 0x01, 0xd2, 0xc6, 0x45, 0x01, 0xd3, 0xc7, 0x45, 0x01, 0xd4, 0xc8, - 0x45, 0x01, 0xd5, 0xc9, 0x45, 0x01, 0xd6, 0xca, 0x45, 0x01, 0xd7, 0xcb, - 0x45, 0x01, 0xd8, 0xcc, 0x45, 0x01, 0xd9, 0xcd, 0x45, 0x41, 0x90, 0xc5, - 0x03, 0x91, 0x9a, 0x03, 0x92, 0xea, 0x02, 0x93, 0xa8, 0x02, 0x94, 0xfd, - 0x01, 0x95, 0xcd, 0x01, 0x96, 0x98, 0x01, 0x97, 0x69, 0x98, 0x2d, 0x99, - 0x01, 0xff, 0xd0, 0xba, 0x45, 0x01, 0xd1, 0xbb, 0x45, 0x01, 0xd2, 0xbc, - 0x45, 0x01, 0x47, 0x00, 0xc4, 0xbd, 0x45, 0x01, 0xd4, 0xbe, 0x45, 0x01, - 0xd5, 0xbf, 0x45, 0x01, 0xd6, 0xc0, 0x45, 0x01, 0xd7, 0xc1, 0x45, 0x01, - 0xd8, 0xc2, 0x45, 0x01, 0xd9, 0xc3, 0x45, 0x41, 0xd0, 0xad, 0x45, 0x01, - 0xd1, 0xae, 0x45, 0x81, 0x2d, 0xd2, 0xb0, 0x45, 0x01, 0x93, 0x1d, 0xd4, - 0xb3, 0x45, 0x01, 0xd5, 0xb4, 0x45, 0x01, 0xd6, 0xb5, 0x45, 0x81, 0x0c, - 0xd7, 0xb7, 0x45, 0x01, 0xd8, 0xb8, 0x45, 0x01, 0xd9, 0xb9, 0x45, 0x41, - 0xe1, 0xb6, 0x45, 0x41, 0x49, 0xc1, 0xab, 0xb1, 0x45, 0x01, 0xe1, 0xb2, - 0x45, 0x41, 0xe1, 0xaf, 0x45, 0x41, 0xd0, 0xa2, 0x45, 0x01, 0xd1, 0xa3, - 0x45, 0x81, 0x20, 0xd2, 0xa5, 0x45, 0x01, 0xd3, 0xa6, 0x45, 0x01, 0xd4, - 0xa7, 0x45, 0x01, 0xd5, 0xa8, 0x45, 0x01, 0xd6, 0xa9, 0x45, 0x01, 0xd7, - 0xaa, 0x45, 0x01, 0xd8, 0xab, 0x45, 0x01, 0xd9, 0xac, 0x45, 0x41, 0xe1, - 0xa4, 0x45, 0x41, 0xd0, 0x96, 0x45, 0x01, 0xd1, 0x97, 0x45, 0x01, 0xd2, - 0x98, 0x45, 0x01, 0xd3, 0x99, 0x45, 0x01, 0xd4, 0x9a, 0x45, 0x81, 0x19, - 0xd5, 0x9c, 0x45, 0x01, 0xd6, 0x9d, 0x45, 0x01, 0xd7, 0x9e, 0x45, 0x01, - 0xd8, 0x9f, 0x45, 0x81, 0x04, 0xd9, 0xa1, 0x45, 0x41, 0xe1, 0xa0, 0x45, - 0x41, 0xe1, 0x9b, 0x45, 0x41, 0xd0, 0x8b, 0x45, 0x01, 0xd1, 0x8c, 0x45, - 0x01, 0xd2, 0x8d, 0x45, 0x01, 0xd3, 0x8e, 0x45, 0x01, 0xd4, 0x8f, 0x45, - 0x01, 0xd5, 0x90, 0x45, 0x01, 0xd6, 0x91, 0x45, 0x01, 0xd7, 0x92, 0x45, - 0x01, 0xd8, 0x93, 0x45, 0x01, 0xd9, 0x94, 0x45, 0xc1, 0x00, 0xe1, 0x95, - 0x45, 0x41, 0xd0, 0x81, 0x45, 0x01, 0xd1, 0x82, 0x45, 0x01, 0xd2, 0x83, - 0x45, 0x01, 0xd3, 0x84, 0x45, 0x01, 0xd4, 0x85, 0x45, 0x01, 0xd5, 0x86, - 0x45, 0x01, 0xd6, 0x87, 0x45, 0x01, 0xd7, 0x88, 0x45, 0x01, 0xd8, 0x89, - 0x45, 0x01, 0xd9, 0x8a, 0x45, 0x41, 0xd0, 0x72, 0x45, 0x01, 0xd1, 0x73, - 0x45, 0x01, 0x92, 0x29, 0xd3, 0x77, 0x45, 0x01, 0xd4, 0x78, 0x45, 0x01, - 0xd5, 0x79, 0x45, 0x01, 0xd6, 0x7a, 0x45, 0x81, 0x0c, 0xd7, 0x7e, 0x45, - 0x01, 0xd8, 0x7f, 0x45, 0x01, 0xd9, 0x80, 0x45, 0x41, 0xe1, 0x7b, 0x45, - 0x01, 0xe2, 0x7c, 0x45, 0x01, 0xe3, 0x7d, 0x45, 0x41, 0xe1, 0x74, 0x45, - 0x01, 0xe2, 0x75, 0x45, 0x01, 0xe3, 0x76, 0x45, 0x41, 0xd0, 0x67, 0x45, - 0x01, 0xd1, 0x68, 0x45, 0x01, 0xd2, 0x69, 0x45, 0x01, 0xd3, 0x6a, 0x45, - 0x01, 0xd4, 0x6b, 0x45, 0x01, 0xd5, 0x6c, 0x45, 0x01, 0xd6, 0x6d, 0x45, - 0x01, 0xd7, 0x6e, 0x45, 0x01, 0xd8, 0x6f, 0x45, 0x01, 0xd9, 0x70, 0x45, - 0xc1, 0x00, 0xe1, 0x71, 0x45, 0x41, 0xd0, 0x5d, 0x45, 0x01, 0xd1, 0x5e, - 0x45, 0x01, 0xd2, 0x5f, 0x45, 0x01, 0xd3, 0x60, 0x45, 0x01, 0xd4, 0x61, - 0x45, 0x01, 0xd5, 0x62, 0x45, 0x01, 0xd6, 0x63, 0x45, 0x01, 0xd7, 0x64, - 0x45, 0x01, 0xd8, 0x65, 0x45, 0x01, 0xd9, 0x66, 0x45, 0x41, 0xd0, 0x52, - 0x45, 0x01, 0xd1, 0x53, 0x45, 0x01, 0xd2, 0x54, 0x45, 0x01, 0xd3, 0x55, - 0x45, 0x01, 0xd4, 0x56, 0x45, 0x01, 0xd5, 0x57, 0x45, 0x01, 0xd6, 0x58, - 0x45, 0x01, 0xd7, 0x59, 0x45, 0x01, 0xd8, 0x5a, 0x45, 0x01, 0xd9, 0x5b, - 0x45, 0xc1, 0x00, 0xe1, 0x5c, 0x45, 0x41, 0x90, 0xa4, 0x03, 0x91, 0xef, - 0x02, 0x92, 0xbf, 0x02, 0x93, 0x94, 0x02, 0x94, 0xe9, 0x01, 0x95, 0xbe, - 0x01, 0x96, 0x8e, 0x01, 0x97, 0x64, 0x98, 0x35, 0x99, 0x01, 0xff, 0xd0, - 0x46, 0x45, 0x01, 0xd1, 0x47, 0x45, 0x01, 0xd2, 0x48, 0x45, 0x01, 0xd3, - 0x49, 0x45, 0x01, 0xd4, 0x4a, 0x45, 0x81, 0x19, 0xd5, 0x4c, 0x45, 0x01, - 0xd6, 0x4d, 0x45, 0x01, 0xd7, 0x4e, 0x45, 0x01, 0xd8, 0x4f, 0x45, 0x01, - 0xd9, 0x50, 0x45, 0xc1, 0x00, 0xe1, 0x51, 0x45, 0x41, 0xe1, 0x4b, 0x45, - 0x41, 0xd0, 0x3b, 0x45, 0x01, 0xd1, 0x3c, 0x45, 0x01, 0xd2, 0x3d, 0x45, - 0x01, 0xd3, 0x3e, 0x45, 0x01, 0xd4, 0x3f, 0x45, 0x01, 0xd5, 0x40, 0x45, - 0x01, 0xd6, 0x41, 0x45, 0x01, 0xd7, 0x42, 0x45, 0x01, 0xd8, 0x43, 0x45, - 0x01, 0xd9, 0x44, 0x45, 0xc1, 0x00, 0xe1, 0x45, 0x45, 0x41, 0xd0, 0x31, - 0x45, 0x01, 0xd1, 0x32, 0x45, 0x01, 0xd2, 0x33, 0x45, 0x01, 0xd3, 0x34, - 0x45, 0x01, 0xd4, 0x35, 0x45, 0x01, 0xd5, 0x36, 0x45, 0x01, 0xd6, 0x37, - 0x45, 0x01, 0xd7, 0x38, 0x45, 0x01, 0xd8, 0x39, 0x45, 0x01, 0xd9, 0x3a, - 0x45, 0x41, 0xd0, 0x26, 0x45, 0x01, 0xd1, 0x27, 0x45, 0x01, 0xd2, 0x28, - 0x45, 0x01, 0xd3, 0x29, 0x45, 0x01, 0xd4, 0x2a, 0x45, 0x01, 0xd5, 0x2b, - 0x45, 0x01, 0xd6, 0x2c, 0x45, 0x01, 0xd7, 0x2d, 0x45, 0x81, 0x08, 0xd8, - 0x2f, 0x45, 0x01, 0xd9, 0x30, 0x45, 0x41, 0xe1, 0x2e, 0x45, 0x41, 0xd0, - 0x1c, 0x45, 0x01, 0xd1, 0x1d, 0x45, 0x01, 0xd2, 0x1e, 0x45, 0x01, 0xd3, - 0x1f, 0x45, 0x01, 0xd4, 0x20, 0x45, 0x01, 0xd5, 0x21, 0x45, 0x01, 0xd6, - 0x22, 0x45, 0x01, 0xd7, 0x23, 0x45, 0x01, 0xd8, 0x24, 0x45, 0x01, 0xd9, - 0x25, 0x45, 0x41, 0xd0, 0x12, 0x45, 0x01, 0xd1, 0x13, 0x45, 0x01, 0xd2, - 0x14, 0x45, 0x01, 0xd3, 0x15, 0x45, 0x01, 0xd4, 0x16, 0x45, 0x01, 0xd5, - 0x17, 0x45, 0x01, 0xd6, 0x18, 0x45, 0x01, 0xd7, 0x19, 0x45, 0x01, 0xd8, - 0x1a, 0x45, 0x01, 0xd9, 0x1b, 0x45, 0x41, 0xd0, 0x08, 0x45, 0x01, 0xd1, - 0x09, 0x45, 0x01, 0xd2, 0x0a, 0x45, 0x01, 0xd3, 0x0b, 0x45, 0x01, 0xd4, - 0x0c, 0x45, 0x01, 0xd5, 0x0d, 0x45, 0x01, 0xd6, 0x0e, 0x45, 0x01, 0xd7, - 0x0f, 0x45, 0x01, 0xd8, 0x10, 0x45, 0x01, 0xd9, 0x11, 0x45, 0x41, 0xd0, - 0xfd, 0x44, 0x01, 0xd1, 0xfe, 0x44, 0x01, 0xd2, 0xff, 0x44, 0x01, 0xd3, - 0x00, 0x45, 0x01, 0xd4, 0x01, 0x45, 0x01, 0xd5, 0x02, 0x45, 0x01, 0xd6, - 0x03, 0x45, 0x01, 0xd7, 0x04, 0x45, 0x81, 0x08, 0xd8, 0x06, 0x45, 0x01, - 0xd9, 0x07, 0x45, 0x41, 0xe1, 0x05, 0x45, 0x41, 0xd0, 0xf1, 0x44, 0x01, - 0xd1, 0xf2, 0x44, 0x01, 0xd2, 0xf3, 0x44, 0x01, 0xd3, 0xf4, 0x44, 0x01, - 0xd4, 0xf5, 0x44, 0x01, 0xd5, 0xf6, 0x44, 0x81, 0x15, 0xd6, 0xf8, 0x44, - 0x81, 0x0c, 0xd7, 0xfa, 0x44, 0x01, 0xd8, 0xfb, 0x44, 0x01, 0xd9, 0xfc, - 0x44, 0x41, 0xe1, 0xf9, 0x44, 0x41, 0xe1, 0xf7, 0x44, 0x41, 0xd0, 0xe3, - 0x44, 0x01, 0xd1, 0xe4, 0x44, 0x01, 0xd2, 0xe5, 0x44, 0x81, 0x26, 0xd3, - 0xe8, 0x44, 0x01, 0xd4, 0xe9, 0x44, 0x01, 0xd5, 0xea, 0x44, 0x01, 0xd6, - 0xeb, 0x44, 0x01, 0xd7, 0xec, 0x44, 0x81, 0x0d, 0xd8, 0xee, 0x44, 0x01, - 0xd9, 0xef, 0x44, 0xc1, 0x00, 0xe1, 0xf0, 0x44, 0x41, 0xe1, 0xed, 0x44, - 0x41, 0xe1, 0xe6, 0x44, 0x01, 0xe2, 0xe7, 0x44, 0x41, 0x90, 0x98, 0x03, - 0x91, 0xdf, 0x02, 0x92, 0xaf, 0x02, 0x93, 0xff, 0x01, 0x94, 0xd4, 0x01, - 0x95, 0xa9, 0x01, 0x96, 0x7f, 0x97, 0x55, 0x98, 0x2b, 0x99, 0x01, 0xff, - 0xd0, 0xd9, 0x44, 0x01, 0xd1, 0xda, 0x44, 0x01, 0xd2, 0xdb, 0x44, 0x01, - 0xd3, 0xdc, 0x44, 0x01, 0xd4, 0xdd, 0x44, 0x01, 0xd5, 0xde, 0x44, 0x01, - 0xd6, 0xdf, 0x44, 0x01, 0xd7, 0xe0, 0x44, 0x01, 0xd8, 0xe1, 0x44, 0x01, - 0xd9, 0xe2, 0x44, 0x41, 0xd0, 0xcf, 0x44, 0x01, 0xd1, 0xd0, 0x44, 0x01, - 0xd2, 0xd1, 0x44, 0x01, 0xd3, 0xd2, 0x44, 0x01, 0xd4, 0xd3, 0x44, 0x01, - 0xd5, 0xd4, 0x44, 0x01, 0xd6, 0xd5, 0x44, 0x01, 0xd7, 0xd6, 0x44, 0x01, - 0xd8, 0xd7, 0x44, 0x01, 0xd9, 0xd8, 0x44, 0x41, 0xd0, 0xc5, 0x44, 0x01, - 0xd1, 0xc6, 0x44, 0x01, 0xd2, 0xc7, 0x44, 0x01, 0xd3, 0xc8, 0x44, 0x01, - 0xd4, 0xc9, 0x44, 0x01, 0xd5, 0xca, 0x44, 0x01, 0xd6, 0xcb, 0x44, 0x01, - 0xd7, 0xcc, 0x44, 0x01, 0xd8, 0xcd, 0x44, 0x01, 0xd9, 0xce, 0x44, 0x41, - 0xd0, 0xbb, 0x44, 0x01, 0xd1, 0xbc, 0x44, 0x01, 0xd2, 0xbd, 0x44, 0x01, - 0xd3, 0xbe, 0x44, 0x01, 0xd4, 0xbf, 0x44, 0x01, 0xd5, 0xc0, 0x44, 0x01, - 0xd6, 0xc1, 0x44, 0x01, 0xd7, 0xc2, 0x44, 0x01, 0xd8, 0xc3, 0x44, 0x01, - 0xd9, 0xc4, 0x44, 0x41, 0xd0, 0xb1, 0x44, 0x01, 0xd1, 0xb2, 0x44, 0x01, - 0xd2, 0xb3, 0x44, 0x01, 0xd3, 0xb4, 0x44, 0x01, 0xd4, 0xb5, 0x44, 0x01, - 0xd5, 0xb6, 0x44, 0x01, 0xd6, 0xb7, 0x44, 0x01, 0xd7, 0xb8, 0x44, 0x01, - 0xd8, 0xb9, 0x44, 0x01, 0xd9, 0xba, 0x44, 0x41, 0xd0, 0xa7, 0x44, 0x01, - 0xd1, 0xa8, 0x44, 0x01, 0xd2, 0xa9, 0x44, 0x01, 0xd3, 0xaa, 0x44, 0x01, - 0xd4, 0xab, 0x44, 0x01, 0xd5, 0xac, 0x44, 0x01, 0xd6, 0xad, 0x44, 0x01, - 0xd7, 0xae, 0x44, 0x01, 0xd8, 0xaf, 0x44, 0x01, 0xd9, 0xb0, 0x44, 0x41, - 0xd0, 0x9c, 0x44, 0x01, 0xd1, 0x9d, 0x44, 0x01, 0xd2, 0x9e, 0x44, 0x01, - 0xd3, 0x9f, 0x44, 0x01, 0xd4, 0xa0, 0x44, 0x01, 0xd5, 0xa1, 0x44, 0x81, - 0x10, 0xd6, 0xa3, 0x44, 0x01, 0xd7, 0xa4, 0x44, 0x01, 0xd8, 0xa5, 0x44, - 0x01, 0xd9, 0xa6, 0x44, 0x41, 0xe1, 0xa2, 0x44, 0x41, 0xd0, 0x91, 0x44, - 0x01, 0xd1, 0x92, 0x44, 0x01, 0xd2, 0x93, 0x44, 0x01, 0xd3, 0x94, 0x44, - 0x01, 0xd4, 0x95, 0x44, 0x01, 0xd5, 0x96, 0x44, 0x81, 0x10, 0xd6, 0x98, - 0x44, 0x01, 0xd7, 0x99, 0x44, 0x01, 0xd8, 0x9a, 0x44, 0x01, 0xd9, 0x9b, - 0x44, 0x41, 0xe1, 0x97, 0x44, 0x41, 0xd0, 0x84, 0x44, 0x81, 0x29, 0xd1, - 0x87, 0x44, 0x01, 0xd2, 0x88, 0x44, 0x01, 0xd3, 0x89, 0x44, 0x01, 0xd4, - 0x8a, 0x44, 0x01, 0xd5, 0x8b, 0x44, 0x81, 0x10, 0xd6, 0x8d, 0x44, 0x01, - 0xd7, 0x8e, 0x44, 0x01, 0xd8, 0x8f, 0x44, 0x01, 0xd9, 0x90, 0x44, 0x41, - 0xe1, 0x8c, 0x44, 0x41, 0xe1, 0x85, 0x44, 0x01, 0xe2, 0x86, 0x44, 0x41, - 0xd0, 0x6f, 0x44, 0x81, 0x51, 0xd1, 0x71, 0x44, 0x81, 0x48, 0xd2, 0x73, - 0x44, 0x81, 0x3f, 0xd3, 0x75, 0x44, 0x01, 0xd4, 0x76, 0x44, 0x81, 0x2a, - 0xd5, 0x7a, 0x44, 0x81, 0x1d, 0xd6, 0x7d, 0x44, 0x01, 0xd7, 0x7e, 0x44, - 0x81, 0x08, 0xd8, 0x82, 0x44, 0x01, 0xd9, 0x83, 0x44, 0x41, 0xe1, 0x7f, - 0x44, 0x01, 0xe2, 0x80, 0x44, 0x01, 0xe3, 0x81, 0x44, 0x41, 0xe1, 0x7b, - 0x44, 0x01, 0xe2, 0x7c, 0x44, 0x41, 0xe1, 0x77, 0x44, 0x01, 0xe2, 0x78, - 0x44, 0x01, 0xe3, 0x79, 0x44, 0x41, 0xe1, 0x74, 0x44, 0x41, 0xe1, 0x72, - 0x44, 0x41, 0xe1, 0x70, 0x44, 0x41, 0x90, 0xba, 0x03, 0x91, 0x8a, 0x03, - 0x92, 0xda, 0x02, 0x93, 0xaa, 0x02, 0x94, 0xec, 0x01, 0x95, 0xc1, 0x01, - 0x96, 0x89, 0x01, 0x97, 0x5f, 0x98, 0x35, 0x99, 0x01, 0xff, 0xd0, 0x63, - 0x44, 0x01, 0xd1, 0x64, 0x44, 0x01, 0xd2, 0x65, 0x44, 0x01, 0xd3, 0x66, - 0x44, 0x01, 0xd4, 0x67, 0x44, 0x01, 0xd5, 0x68, 0x44, 0x01, 0xd6, 0x69, - 0x44, 0x01, 0xd7, 0x6a, 0x44, 0x81, 0x0d, 0xd8, 0x6c, 0x44, 0x81, 0x04, - 0xd9, 0x6e, 0x44, 0x41, 0xe1, 0x6d, 0x44, 0x41, 0xe1, 0x6b, 0x44, 0x41, - 0xd0, 0x59, 0x44, 0x01, 0xd1, 0x5a, 0x44, 0x01, 0xd2, 0x5b, 0x44, 0x01, - 0xd3, 0x5c, 0x44, 0x01, 0xd4, 0x5d, 0x44, 0x01, 0xd5, 0x5e, 0x44, 0x01, - 0xd6, 0x5f, 0x44, 0x01, 0xd7, 0x60, 0x44, 0x01, 0xd8, 0x61, 0x44, 0x01, - 0xd9, 0x62, 0x44, 0x41, 0xd0, 0x4f, 0x44, 0x01, 0xd1, 0x50, 0x44, 0x01, - 0xd2, 0x51, 0x44, 0x01, 0xd3, 0x52, 0x44, 0x01, 0xd4, 0x53, 0x44, 0x01, - 0xd5, 0x54, 0x44, 0x01, 0xd6, 0x55, 0x44, 0x01, 0xd7, 0x56, 0x44, 0x01, - 0xd8, 0x57, 0x44, 0x01, 0xd9, 0x58, 0x44, 0x41, 0xd0, 0x42, 0x44, 0x01, - 0xd1, 0x43, 0x44, 0x01, 0xd2, 0x44, 0x44, 0x01, 0xd3, 0x45, 0x44, 0x01, - 0xd4, 0x46, 0x44, 0x01, 0xd5, 0x47, 0x44, 0x01, 0xd6, 0x48, 0x44, 0x81, - 0x0c, 0xd7, 0x4c, 0x44, 0x01, 0xd8, 0x4d, 0x44, 0x01, 0xd9, 0x4e, 0x44, - 0x41, 0xe1, 0x49, 0x44, 0x01, 0xe2, 0x4a, 0x44, 0x01, 0xe3, 0x4b, 0x44, - 0x41, 0xd0, 0x38, 0x44, 0x01, 0xd1, 0x39, 0x44, 0x01, 0xd2, 0x3a, 0x44, - 0x01, 0xd3, 0x3b, 0x44, 0x01, 0xd4, 0x3c, 0x44, 0x01, 0xd5, 0x3d, 0x44, - 0x01, 0xd6, 0x3e, 0x44, 0x01, 0xd7, 0x3f, 0x44, 0x01, 0xd8, 0x40, 0x44, - 0x01, 0xd9, 0x41, 0x44, 0x41, 0xd0, 0x2a, 0x44, 0x01, 0xd1, 0x2b, 0x44, - 0x81, 0x2e, 0xd2, 0x2d, 0x44, 0x01, 0xd3, 0x2e, 0x44, 0x01, 0xd4, 0x2f, - 0x44, 0x01, 0xd5, 0x30, 0x44, 0x81, 0x19, 0xd6, 0x32, 0x44, 0x81, 0x0c, - 0xd7, 0x35, 0x44, 0x01, 0xd8, 0x36, 0x44, 0x01, 0xd9, 0x37, 0x44, 0x41, - 0xe1, 0x33, 0x44, 0x01, 0xe2, 0x34, 0x44, 0x41, 0xe1, 0x31, 0x44, 0x41, - 0xe1, 0x2c, 0x44, 0x41, 0xd0, 0x1f, 0x44, 0x01, 0xd1, 0x20, 0x44, 0x01, - 0xd2, 0x21, 0x44, 0x01, 0xd3, 0x22, 0x44, 0x01, 0xd4, 0x23, 0x44, 0x01, - 0xd5, 0x24, 0x44, 0x01, 0xd6, 0x25, 0x44, 0x01, 0xd7, 0x26, 0x44, 0x01, - 0xd8, 0x27, 0x44, 0x01, 0xd9, 0x28, 0x44, 0xc1, 0x00, 0xe1, 0x29, 0x44, - 0x41, 0xd0, 0x14, 0x44, 0x01, 0xd1, 0x15, 0x44, 0x01, 0xd2, 0x16, 0x44, - 0x01, 0xd3, 0x17, 0x44, 0x01, 0xd4, 0x18, 0x44, 0x01, 0xd5, 0x19, 0x44, - 0x01, 0xd6, 0x1a, 0x44, 0x81, 0x0c, 0xd7, 0x1c, 0x44, 0x01, 0xd8, 0x1d, - 0x44, 0x01, 0xd9, 0x1e, 0x44, 0x41, 0xe1, 0x1b, 0x44, 0x41, 0xd0, 0x09, - 0x44, 0x81, 0x24, 0xd1, 0x0b, 0x44, 0x01, 0xd2, 0x0c, 0x44, 0x01, 0xd3, - 0x0d, 0x44, 0x01, 0xd4, 0x0e, 0x44, 0x01, 0xd5, 0x0f, 0x44, 0x01, 0xd6, - 0x10, 0x44, 0x01, 0xd7, 0x11, 0x44, 0x01, 0xd8, 0x12, 0x44, 0x01, 0xd9, - 0x13, 0x44, 0x41, 0xe1, 0x0a, 0x44, 0x41, 0xd1, 0x00, 0x44, 0x01, 0xd2, - 0x01, 0x44, 0x01, 0xd3, 0x02, 0x44, 0x01, 0xd4, 0x03, 0x44, 0x01, 0xd5, - 0x04, 0x44, 0x01, 0xd6, 0x05, 0x44, 0x01, 0xd7, 0x06, 0x44, 0x01, 0xd8, - 0x07, 0x44, 0x01, 0xd9, 0x08, 0x44, 0x41, 0x57, 0xa1, 0x29, 0x3f, 0x2a, - 0x00, 0x47, 0x88, 0xc5, 0x91, 0xf6, 0x01, 0x4f, 0x2d, 0x66, 0xc8, 0xf3, - 0x01, 0xb0, 0x01, 0xff, 0x46, 0x96, 0x39, 0x26, 0x00, 0x00, 0x44, 0xf0, - 0x3b, 0xfa, 0xf3, 0x41, 0x49, 0x44, 0xad, 0xf0, 0x23, 0x00, 0x14, 0x48, - 0x3c, 0x52, 0xa5, 0x3e, 0x4b, 0x25, 0x95, 0x7e, 0xf4, 0x01, 0x02, 0x14, - 0x00, 0x28, 0x0b, 0x40, 0x64, 0x11, 0x06, 0x6b, 0x10, 0x01, 0xff, 0x5a, - 0x96, 0x1d, 0xd5, 0x26, 0x00, 0x4e, 0x34, 0x72, 0x87, 0x23, 0x40, 0x4b, - 0xf4, 0x25, 0x4a, 0x22, 0x00, 0x42, 0x1e, 0x00, 0x48, 0x22, 0xc0, 0x00, - 0x57, 0xce, 0x03, 0x6f, 0x2a, 0x40, 0x4e, 0x16, 0x6f, 0x2e, 0x23, 0x00, - 0x48, 0x72, 0x0b, 0x4c, 0x22, 0x40, 0x48, 0x84, 0x90, 0x35, 0x21, 0x00, - 0x44, 0x3a, 0xdb, 0x97, 0x26, 0x00, 0x42, 0x34, 0x00, 0x07, 0x00, 0x40, - 0xa1, 0xde, 0x05, 0xa2, 0xa7, 0x05, 0xa3, 0xc6, 0x04, 0xa4, 0xa5, 0x04, - 0x45, 0x8c, 0x6b, 0x03, 0xf7, 0x01, 0x44, 0xb4, 0x89, 0x02, 0xf7, 0x01, - 0xa7, 0x8a, 0x04, 0xa8, 0xe8, 0x03, 0x04, 0xd3, 0x1d, 0xd0, 0x03, 0xac, - 0xc1, 0x03, 0xad, 0xa0, 0x03, 0x02, 0xd2, 0x02, 0x8f, 0x03, 0x43, 0x8f, - 0xd7, 0x46, 0xf7, 0x01, 0xb0, 0xd6, 0x02, 0x03, 0xd6, 0x01, 0xc5, 0x02, - 0xb2, 0xf3, 0x01, 0xb3, 0x70, 0xb4, 0x45, 0x45, 0x01, 0xe1, 0x55, 0xf7, - 0x01, 0xb6, 0x0f, 0x02, 0xa9, 0x01, 0x01, 0xff, 0x43, 0x8b, 0x00, 0x04, - 0xf7, 0x01, 0xf8, 0x4a, 0xf7, 0x41, 0x48, 0x0d, 0xbc, 0x28, 0xf7, 0x01, - 0xa9, 0x01, 0xff, 0x45, 0x2c, 0xde, 0x0a, 0xf7, 0x81, 0x0d, 0x45, 0x98, - 0xe0, 0x16, 0xf7, 0xc1, 0x00, 0x42, 0x50, 0xe8, 0x17, 0xf7, 0x41, 0x4c, - 0xb8, 0x83, 0x2f, 0xf7, 0x01, 0x8d, 0x01, 0xff, 0xd2, 0x0b, 0xf7, 0x01, - 0xd3, 0x0c, 0xf7, 0x41, 0x45, 0xb3, 0xd9, 0x3f, 0xf7, 0x81, 0x1c, 0x02, - 0x9e, 0x01, 0x0c, 0x46, 0xd1, 0x79, 0x51, 0xf7, 0x01, 0x44, 0xc2, 0xe7, - 0x4d, 0xf7, 0x41, 0x44, 0x72, 0x90, 0x29, 0xf7, 0x01, 0x45, 0x77, 0x83, - 0x48, 0xf7, 0x41, 0x42, 0x50, 0xe8, 0x40, 0xf7, 0x41, 0x02, 0x13, 0x00, - 0x61, 0x4e, 0x78, 0x6f, 0x4f, 0xf7, 0x01, 0x45, 0x9c, 0xdc, 0x1b, 0xf7, - 0x01, 0x43, 0x75, 0xc9, 0x54, 0xf7, 0x01, 0x45, 0xc7, 0xb5, 0x47, 0xf7, - 0x01, 0xb4, 0x34, 0xb5, 0x01, 0xff, 0x06, 0xd2, 0x5c, 0x06, 0x44, 0x9f, - 0x4c, 0x0d, 0xf7, 0x41, 0x05, 0x40, 0x3e, 0x06, 0x43, 0xb5, 0x00, 0x5e, - 0xf7, 0x41, 0x48, 0xbc, 0x83, 0x2c, 0xf7, 0x01, 0x46, 0x3b, 0x4b, 0x22, - 0xf7, 0x01, 0x08, 0xad, 0xc0, 0x01, 0xff, 0x48, 0xbc, 0x83, 0x2e, 0xf7, - 0x01, 0x46, 0x3b, 0x4b, 0x27, 0xf7, 0x41, 0x4d, 0xca, 0x79, 0x52, 0xf7, - 0x01, 0x53, 0xf3, 0x46, 0x5c, 0xf7, 0xc1, 0x00, 0x42, 0x50, 0xe8, 0x5d, - 0xf7, 0x41, 0x49, 0x00, 0xac, 0x39, 0xf7, 0x01, 0xf4, 0x14, 0xf7, 0xc1, - 0x00, 0x04, 0xf3, 0x01, 0x01, 0xff, 0x48, 0xbc, 0x83, 0x2d, 0xf7, 0x01, - 0x52, 0x3b, 0x4b, 0x26, 0xf7, 0x41, 0xa5, 0x0d, 0x48, 0x2d, 0xbf, 0x18, - 0xf7, 0xc1, 0x00, 0x42, 0x50, 0xe8, 0x19, 0xf7, 0x41, 0x45, 0x7c, 0xd9, - 0x3b, 0xf7, 0x81, 0x33, 0x45, 0xfc, 0xdb, 0x32, 0xf7, 0x81, 0x06, 0x44, - 0x36, 0x08, 0x6d, 0xf7, 0x41, 0x04, 0xf3, 0x01, 0x0f, 0x8d, 0x01, 0xff, - 0xd2, 0x33, 0xf7, 0x01, 0xd3, 0x34, 0xf7, 0x01, 0xd4, 0x35, 0xf7, 0x41, - 0x48, 0xbc, 0x83, 0x30, 0xf7, 0x81, 0x06, 0x44, 0xd3, 0x1d, 0x1f, 0xf7, - 0x41, 0x42, 0x50, 0xe8, 0x31, 0xf7, 0x41, 0x42, 0x50, 0xe8, 0x3c, 0xf7, - 0x41, 0x47, 0xc7, 0xc5, 0x41, 0xf7, 0x01, 0x49, 0x50, 0xb3, 0x00, 0xf7, - 0x41, 0x52, 0x91, 0x4c, 0x0e, 0xf7, 0x01, 0xaf, 0x15, 0x4a, 0x37, 0xa7, - 0x5f, 0xf7, 0x01, 0xb5, 0x01, 0xff, 0x44, 0x2a, 0xe7, 0x63, 0xf7, 0x01, - 0x4a, 0x3f, 0xa9, 0x64, 0xf7, 0x41, 0x47, 0xe0, 0xcb, 0x58, 0xf7, 0x01, - 0x44, 0xfa, 0xe7, 0x4b, 0xf7, 0xc1, 0x00, 0x48, 0xc5, 0xbb, 0x5a, 0xf7, - 0x41, 0x43, 0xca, 0x00, 0x6f, 0xf7, 0x01, 0x43, 0x76, 0x02, 0x15, 0xf7, - 0x41, 0x48, 0xcd, 0xb9, 0x38, 0xf7, 0x01, 0x50, 0xc9, 0x5c, 0x10, 0xf7, - 0x81, 0x06, 0x44, 0x01, 0x9a, 0x71, 0xf7, 0x41, 0x8d, 0x01, 0xff, 0xd2, - 0x11, 0xf7, 0x01, 0xd3, 0x12, 0xf7, 0x41, 0x47, 0x7d, 0xc6, 0x2a, 0xf7, - 0x01, 0x48, 0x3d, 0xbf, 0x53, 0xf7, 0x41, 0x44, 0x72, 0x90, 0x1c, 0xf7, - 0x81, 0x06, 0x4b, 0x6b, 0x90, 0x21, 0xf7, 0x41, 0x42, 0x50, 0xe8, 0x1d, - 0xf7, 0x41, 0x04, 0x23, 0x00, 0x0f, 0xaf, 0x01, 0xff, 0x48, 0x9d, 0xc0, - 0x56, 0xf7, 0x01, 0x42, 0x42, 0x00, 0x6e, 0xf7, 0x41, 0x44, 0xac, 0xae, - 0x72, 0xf7, 0x01, 0x45, 0xe0, 0xde, 0x73, 0xf7, 0x41, 0x43, 0xae, 0x18, - 0x1a, 0xf7, 0x01, 0x42, 0x9f, 0x03, 0x49, 0xf7, 0x41, 0x48, 0x2d, 0xba, - 0x70, 0xf7, 0x01, 0x02, 0xe0, 0x02, 0x01, 0xff, 0x45, 0x2a, 0xe0, 0x61, - 0xf7, 0x81, 0x06, 0x44, 0x15, 0x31, 0x60, 0xf7, 0x41, 0x42, 0x50, 0xe8, - 0x62, 0xf7, 0x41, 0xa1, 0x4a, 0x47, 0xcd, 0xc7, 0x13, 0xf7, 0x01, 0x06, - 0x3c, 0x4b, 0x34, 0xb2, 0x01, 0xff, 0x08, 0x35, 0xbf, 0x1a, 0x46, 0x43, - 0xd6, 0x65, 0xf7, 0xc1, 0x00, 0x8d, 0x01, 0xff, 0xd2, 0x66, 0xf7, 0x01, - 0xd3, 0x67, 0xf7, 0x01, 0xd4, 0x68, 0xf7, 0x01, 0xd5, 0x69, 0xf7, 0x41, - 0x46, 0x3b, 0x4b, 0x23, 0xf7, 0x81, 0x06, 0x44, 0xd3, 0x1d, 0x1e, 0xf7, - 0x41, 0x42, 0x50, 0xe8, 0x24, 0xf7, 0x41, 0x4b, 0x42, 0x4b, 0x25, 0xf7, - 0x01, 0x43, 0x06, 0x0e, 0x20, 0xf7, 0x41, 0x46, 0xaf, 0xd0, 0x50, 0xf7, - 0x01, 0x42, 0xe8, 0xe9, 0x4c, 0xf7, 0x01, 0x4b, 0x2f, 0x99, 0x4e, 0xf7, - 0x41, 0x07, 0x0a, 0xc5, 0x24, 0x4a, 0x77, 0xa3, 0x3e, 0xf7, 0x01, 0x4b, - 0x0c, 0x96, 0x0f, 0xf7, 0x01, 0x44, 0xd2, 0xe6, 0x42, 0xf7, 0x81, 0x06, - 0x44, 0xde, 0x1e, 0x59, 0xf7, 0x41, 0x8d, 0x01, 0xff, 0xd2, 0x43, 0xf7, - 0x01, 0xd3, 0x44, 0xf7, 0x41, 0x44, 0x0e, 0xe6, 0x6b, 0xf7, 0x01, 0x47, - 0xe3, 0xcc, 0x6c, 0xf7, 0x41, 0x42, 0x46, 0x00, 0x01, 0xf7, 0x01, 0xac, - 0x44, 0x46, 0xa0, 0x29, 0x5b, 0xf7, 0x01, 0x4b, 0x06, 0x98, 0x2b, 0xf7, - 0x01, 0x03, 0x7c, 0x00, 0x12, 0x46, 0x11, 0xd5, 0x3a, 0xf7, 0x01, 0x44, - 0x52, 0x75, 0x57, 0xf7, 0x01, 0x4a, 0x1b, 0xaa, 0x3d, 0xf7, 0x41, 0x80, - 0x06, 0x46, 0x6f, 0xd1, 0x05, 0xf7, 0x41, 0x45, 0x71, 0xdf, 0x06, 0xf7, - 0x81, 0x0d, 0x45, 0x29, 0xe1, 0x08, 0xf7, 0xc1, 0x00, 0x42, 0x50, 0xe8, - 0x09, 0xf7, 0x41, 0x42, 0x50, 0xe8, 0x07, 0xf7, 0x41, 0x45, 0x39, 0xdb, - 0x6a, 0xf7, 0x01, 0x44, 0xb6, 0xe5, 0x36, 0xf7, 0x81, 0x06, 0x42, 0x9f, - 0x03, 0x45, 0xf7, 0x41, 0x42, 0x50, 0xe8, 0x37, 0xf7, 0x41, 0x80, 0x01, - 0xff, 0x48, 0xdd, 0xb9, 0xec, 0xf6, 0x01, 0x49, 0x88, 0xae, 0xeb, 0xf6, - 0x41, 0x16, 0x54, 0x2f, 0x8c, 0x03, 0x06, 0xf4, 0x05, 0xc5, 0x02, 0x07, - 0xf1, 0x04, 0x6b, 0x08, 0xd9, 0xa5, 0x5b, 0xb3, 0x34, 0x0b, 0x5b, 0x70, - 0x01, 0xff, 0xe1, 0x20, 0x17, 0x81, 0x1a, 0xe5, 0x26, 0x17, 0x01, 0xe9, - 0x22, 0x17, 0x81, 0x0d, 0xef, 0x28, 0x17, 0x01, 0xf5, 0x24, 0x17, 0xc1, - 0x00, 0xf5, 0x25, 0x17, 0x41, 0xe9, 0x23, 0x17, 0x41, 0xe1, 0x21, 0x17, - 0x01, 0xe9, 0x29, 0x17, 0x01, 0xed, 0x2a, 0x17, 0x01, 0xf7, 0x27, 0x17, - 0x41, 0x04, 0xdc, 0x02, 0x06, 0x48, 0xd2, 0x9a, 0x3f, 0x17, 0x41, 0x46, - 0xef, 0xd2, 0x2b, 0x17, 0x01, 0x45, 0xc1, 0xdf, 0x3e, 0x17, 0x01, 0xb3, - 0x01, 0xff, 0x46, 0x97, 0x08, 0x3d, 0x17, 0x01, 0x4c, 0x24, 0x8a, 0x3c, - 0x17, 0x41, 0x42, 0x92, 0x01, 0x3a, 0x17, 0x01, 0x45, 0x38, 0x29, 0x3b, - 0x17, 0x41, 0xe1, 0x12, 0x17, 0x81, 0xb9, 0x01, 0xa2, 0xac, 0x01, 0xa3, - 0x9f, 0x01, 0xa4, 0x86, 0x01, 0xa7, 0x7a, 0x42, 0x22, 0x00, 0x11, 0x17, - 0x01, 0xaa, 0x68, 0xab, 0x5c, 0xac, 0x50, 0x42, 0x6c, 0x00, 0x09, 0x17, - 0x01, 0xae, 0x32, 0xb0, 0x26, 0x42, 0x71, 0x00, 0x0d, 0x17, 0x01, 0x42, - 0x45, 0x05, 0x0f, 0x17, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x04, 0x17, 0x01, - 0x42, 0x22, 0x00, 0x0c, 0x17, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x41, 0x17, - 0x01, 0x42, 0x22, 0x00, 0x42, 0x17, 0x41, 0xe1, 0x06, 0x17, 0x01, 0x42, - 0x22, 0x00, 0x07, 0x17, 0x41, 0xe1, 0x03, 0x17, 0x01, 0x42, 0x24, 0x02, - 0x02, 0x17, 0x01, 0x42, 0x2f, 0x04, 0x45, 0x17, 0x01, 0x42, 0x20, 0x20, - 0x10, 0x17, 0x41, 0xe1, 0x0e, 0x17, 0x01, 0x42, 0x74, 0x00, 0x46, 0x17, - 0x41, 0xe1, 0x00, 0x17, 0x01, 0x42, 0x22, 0x00, 0x01, 0x17, 0x41, 0xe1, - 0x0a, 0x17, 0x01, 0x42, 0x22, 0x00, 0x19, 0x17, 0x41, 0xe1, 0x15, 0x17, - 0x01, 0x42, 0x22, 0x00, 0x17, 0x17, 0x41, 0xe1, 0x13, 0x17, 0x01, 0xa4, - 0x06, 0x42, 0x22, 0x00, 0x14, 0x17, 0x41, 0xe1, 0x43, 0x17, 0x01, 0x42, - 0x22, 0x00, 0x44, 0x17, 0x41, 0xe1, 0x40, 0x17, 0x01, 0x42, 0x22, 0x00, - 0x0b, 0x17, 0x41, 0xe1, 0x08, 0x17, 0x01, 0x42, 0x22, 0x00, 0x18, 0x17, - 0x41, 0x09, 0x6a, 0x10, 0x01, 0xff, 0x42, 0x16, 0x00, 0x1a, 0x17, 0x01, - 0x42, 0x24, 0x02, 0x16, 0x17, 0x01, 0x42, 0x12, 0x00, 0x05, 0x17, 0x41, - 0x45, 0xd1, 0x09, 0x38, 0x17, 0x01, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x39, - 0x17, 0x01, 0x43, 0xcd, 0x09, 0x31, 0x17, 0x01, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xf5, 0x1b, 0x30, 0x17, 0x41, 0x44, 0x25, 0x01, 0x33, 0x17, 0x01, - 0x42, 0x15, 0x02, 0x32, 0x17, 0x41, 0x44, 0x96, 0x1b, 0x37, 0x17, 0x01, - 0x42, 0x30, 0x27, 0x36, 0x17, 0x41, 0x43, 0xd7, 0x04, 0x35, 0x17, 0x01, - 0x43, 0xfb, 0x05, 0x34, 0x17, 0x41, 0xac, 0x06, 0x42, 0x71, 0x00, 0x1e, - 0x17, 0x41, 0xe1, 0x1d, 0x17, 0x01, 0x4a, 0x09, 0xa3, 0x1f, 0x17, 0x41, - 0x05, 0xde, 0xdb, 0x06, 0x4c, 0xc4, 0x8c, 0xa1, 0xf6, 0x41, 0x4a, 0x1b, - 0xa0, 0x02, 0x01, 0x01, 0x59, 0x4d, 0x21, 0x3c, 0x01, 0x01, 0x5c, 0x89, - 0x16, 0x3d, 0x01, 0x01, 0x08, 0x90, 0x16, 0x84, 0x03, 0x07, 0xbf, 0x35, - 0x38, 0xb7, 0x01, 0xff, 0x06, 0x8b, 0x12, 0x11, 0x0e, 0xbc, 0x73, 0x01, - 0xff, 0x43, 0xc5, 0x06, 0x01, 0x01, 0x01, 0x44, 0xf0, 0x07, 0x00, 0x01, - 0x41, 0x49, 0x7a, 0xad, 0x37, 0x01, 0x01, 0xa6, 0x0c, 0x4e, 0x1a, 0x75, - 0x39, 0x01, 0x01, 0x4d, 0xb6, 0x81, 0x3a, 0x01, 0x41, 0x4c, 0x99, 0x16, - 0x38, 0x01, 0x01, 0x4d, 0xe2, 0x7f, 0x3b, 0x01, 0x41, 0x45, 0xd1, 0x09, - 0x0e, 0x01, 0x81, 0xa7, 0x02, 0xa6, 0xd9, 0x01, 0x44, 0xb8, 0x27, 0x0f, - 0x01, 0x81, 0xb6, 0x01, 0x43, 0xcd, 0x09, 0x07, 0x01, 0x81, 0x9f, 0x01, - 0xb3, 0x59, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x10, 0x01, 0x81, 0x49, - 0xa8, 0x24, 0xb7, 0x01, 0xff, 0x44, 0x98, 0x1b, 0x11, 0x01, 0x81, 0x14, - 0xef, 0x08, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x1a, - 0x01, 0x01, 0x48, 0x54, 0x58, 0x23, 0x01, 0x41, 0x49, 0x53, 0x58, 0x2c, - 0x01, 0x41, 0x44, 0xf3, 0x0f, 0x12, 0x01, 0x81, 0x16, 0x43, 0x26, 0x01, - 0x09, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x1b, 0x01, - 0x01, 0x48, 0x54, 0x58, 0x24, 0x01, 0x41, 0x49, 0x53, 0x58, 0x2d, 0x01, - 0x41, 0x49, 0x53, 0x58, 0x2b, 0x01, 0x41, 0x44, 0x96, 0x1b, 0x0d, 0x01, - 0x81, 0x22, 0x42, 0x30, 0x27, 0x0c, 0x01, 0xc1, 0x00, 0x80, 0x0d, 0x42, - 0xf5, 0x0f, 0x15, 0x01, 0xc1, 0x00, 0x49, 0x53, 0x58, 0x30, 0x01, 0x41, - 0x47, 0xe9, 0x0f, 0x1e, 0x01, 0x01, 0x48, 0x54, 0x58, 0x27, 0x01, 0x41, - 0x80, 0x0d, 0x42, 0xf5, 0x0f, 0x16, 0x01, 0xc1, 0x00, 0x49, 0x53, 0x58, - 0x31, 0x01, 0x41, 0x47, 0xe9, 0x0f, 0x1f, 0x01, 0x01, 0x48, 0x54, 0x58, - 0x28, 0x01, 0x41, 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x19, 0x01, 0x01, - 0x48, 0x54, 0x58, 0x22, 0x01, 0x41, 0x80, 0x0d, 0x42, 0xf5, 0x0f, 0x18, - 0x01, 0xc1, 0x00, 0x49, 0x53, 0x58, 0x33, 0x01, 0x41, 0x47, 0xe9, 0x0f, - 0x21, 0x01, 0x01, 0x48, 0x54, 0x58, 0x2a, 0x01, 0x41, 0xa9, 0x26, 0xaf, - 0x01, 0xff, 0x43, 0xf4, 0x0f, 0x13, 0x01, 0x81, 0x16, 0x42, 0x42, 0x00, - 0x0a, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x1c, 0x01, - 0x01, 0x48, 0x54, 0x58, 0x25, 0x01, 0x41, 0x49, 0x53, 0x58, 0x2e, 0x01, - 0x41, 0x43, 0xcf, 0x47, 0x14, 0x01, 0x81, 0x16, 0x42, 0x32, 0x00, 0x0b, - 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x1d, 0x01, 0x01, - 0x48, 0x54, 0x58, 0x26, 0x01, 0x41, 0x49, 0x53, 0x58, 0x2f, 0x01, 0x41, - 0x80, 0x0b, 0xf9, 0x17, 0x01, 0xc1, 0x00, 0x49, 0x53, 0x58, 0x32, 0x01, - 0x41, 0x47, 0xe9, 0x0f, 0x20, 0x01, 0x01, 0x48, 0x54, 0x58, 0x29, 0x01, - 0x41, 0x4e, 0x1a, 0x75, 0x3e, 0x01, 0x01, 0x4d, 0xb6, 0x81, 0x3f, 0x01, - 0x41, 0x56, 0x04, 0x30, 0x01, 0x21, 0x00, 0x4e, 0x62, 0x71, 0x79, 0xfa, - 0x01, 0x48, 0x0d, 0xbd, 0x2c, 0x26, 0x00, 0x04, 0xa6, 0x12, 0x14, 0xad, - 0x06, 0x43, 0xbc, 0x03, 0xd1, 0xf9, 0x41, 0x44, 0xea, 0x7d, 0xe5, 0x2b, - 0x00, 0x4e, 0x18, 0x72, 0x9f, 0xf3, 0x41, 0x4f, 0x2f, 0x64, 0x44, 0xe9, - 0x01, 0xa3, 0xd7, 0x02, 0x06, 0xf4, 0x05, 0x90, 0x02, 0x07, 0xd2, 0x66, - 0xff, 0x01, 0x45, 0x56, 0x00, 0x47, 0xe9, 0x01, 0x08, 0xd7, 0x14, 0xe8, - 0x01, 0xae, 0xd9, 0x01, 0x0d, 0x7c, 0x07, 0x06, 0x50, 0x29, 0x62, 0x45, - 0xe9, 0x41, 0x44, 0x2f, 0x64, 0x22, 0xe9, 0x01, 0xa2, 0xbc, 0x01, 0x43, - 0x98, 0x14, 0x37, 0xe9, 0x01, 0xa4, 0xa7, 0x01, 0xe5, 0x2b, 0xe9, 0x01, - 0x42, 0xed, 0x06, 0x2c, 0xe9, 0x01, 0xa7, 0x90, 0x01, 0x42, 0x22, 0x00, - 0x38, 0xe9, 0x01, 0xe9, 0x2d, 0xe9, 0x01, 0x44, 0xa2, 0xe5, 0x36, 0xe9, - 0x01, 0xab, 0x6c, 0x44, 0xe6, 0x81, 0x24, 0xe9, 0x01, 0x44, 0x1a, 0xe6, - 0x25, 0xe9, 0x01, 0xae, 0x4c, 0xef, 0x2e, 0xe9, 0x01, 0x42, 0x6f, 0x02, - 0x28, 0xe9, 0x01, 0x44, 0x49, 0xdf, 0x39, 0xe9, 0x01, 0x42, 0x71, 0x00, - 0x2a, 0xe9, 0x01, 0xb3, 0x28, 0x42, 0x5c, 0x01, 0x3c, 0xe9, 0x01, 0xf5, - 0x35, 0xe9, 0x01, 0x42, 0xb4, 0x09, 0x3e, 0xe9, 0x01, 0x43, 0x08, 0x83, - 0x31, 0xe9, 0x01, 0xb9, 0x06, 0x43, 0x21, 0xb8, 0x41, 0xe9, 0x41, 0xe1, - 0x34, 0xe9, 0x01, 0x42, 0xb0, 0x01, 0x30, 0xe9, 0x41, 0x42, 0x22, 0x00, - 0x43, 0xe9, 0x01, 0x49, 0x4f, 0xb1, 0x27, 0xe9, 0x41, 0x42, 0x22, 0x00, - 0x3d, 0xe9, 0x01, 0x42, 0x24, 0x0a, 0x32, 0xe9, 0x01, 0x42, 0x20, 0x20, - 0x3b, 0xe9, 0x41, 0x42, 0x9e, 0x12, 0x33, 0xe9, 0x01, 0x42, 0x22, 0x00, - 0x3f, 0xe9, 0x01, 0x42, 0x9c, 0x01, 0x42, 0xe9, 0x41, 0xe1, 0x3a, 0xe9, - 0x01, 0x42, 0xbc, 0x04, 0x40, 0xe9, 0x41, 0x44, 0x58, 0x17, 0x23, 0xe9, - 0x01, 0x42, 0x22, 0x00, 0x2f, 0xe9, 0x41, 0xe1, 0x26, 0xe9, 0x01, 0x42, - 0xb0, 0x01, 0x29, 0xe9, 0x41, 0x50, 0x86, 0x56, 0x4b, 0xe9, 0x01, 0x44, - 0xac, 0x3a, 0x4a, 0xe9, 0x41, 0x50, 0xad, 0x00, 0x5e, 0xe9, 0x01, 0x4d, - 0xbd, 0x30, 0x5f, 0xe9, 0x41, 0x54, 0xfc, 0x3c, 0x49, 0xe9, 0x01, 0x48, - 0xb5, 0x00, 0x46, 0xe9, 0x41, 0x45, 0xd1, 0x09, 0x58, 0xe9, 0x01, 0xa6, - 0x2e, 0x44, 0xb8, 0x27, 0x59, 0xe9, 0x01, 0x43, 0xcd, 0x09, 0x51, 0xe9, - 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x50, 0xe9, 0x41, 0x44, - 0x25, 0x01, 0x53, 0xe9, 0x01, 0x42, 0x15, 0x02, 0x52, 0xe9, 0x41, 0x44, - 0x96, 0x1b, 0x57, 0xe9, 0x01, 0x42, 0x30, 0x27, 0x56, 0xe9, 0x41, 0x43, - 0xd7, 0x04, 0x55, 0xe9, 0x01, 0x43, 0xfb, 0x05, 0x54, 0xe9, 0x41, 0x0e, - 0xea, 0x04, 0x06, 0x51, 0x3f, 0x2f, 0x48, 0xe9, 0x41, 0x44, 0x2f, 0x64, - 0x00, 0xe9, 0x01, 0xa2, 0xbc, 0x01, 0x43, 0x98, 0x14, 0x15, 0xe9, 0x01, - 0xa4, 0xa7, 0x01, 0xe5, 0x09, 0xe9, 0x01, 0x42, 0xed, 0x06, 0x0a, 0xe9, - 0x01, 0xa7, 0x90, 0x01, 0x42, 0x22, 0x00, 0x16, 0xe9, 0x01, 0xe9, 0x0b, - 0xe9, 0x01, 0x44, 0xa2, 0xe5, 0x14, 0xe9, 0x01, 0xab, 0x6c, 0x44, 0xe6, - 0x81, 0x02, 0xe9, 0x01, 0x44, 0x1a, 0xe6, 0x03, 0xe9, 0x01, 0xae, 0x4c, - 0xef, 0x0c, 0xe9, 0x01, 0x42, 0x6f, 0x02, 0x06, 0xe9, 0x01, 0x44, 0x49, - 0xdf, 0x17, 0xe9, 0x01, 0x42, 0x71, 0x00, 0x08, 0xe9, 0x01, 0xb3, 0x28, - 0x42, 0x5c, 0x01, 0x1a, 0xe9, 0x01, 0xf5, 0x13, 0xe9, 0x01, 0x42, 0xb4, - 0x09, 0x1c, 0xe9, 0x01, 0x43, 0x08, 0x83, 0x0f, 0xe9, 0x01, 0xb9, 0x06, - 0x43, 0x21, 0xb8, 0x1f, 0xe9, 0x41, 0xe1, 0x12, 0xe9, 0x01, 0x42, 0xb0, - 0x01, 0x0e, 0xe9, 0x41, 0x42, 0x22, 0x00, 0x21, 0xe9, 0x01, 0x49, 0x4f, - 0xb1, 0x05, 0xe9, 0x41, 0x42, 0x22, 0x00, 0x1b, 0xe9, 0x01, 0x42, 0x24, - 0x0a, 0x10, 0xe9, 0x01, 0x42, 0x20, 0x20, 0x19, 0xe9, 0x41, 0x42, 0x9e, - 0x12, 0x11, 0xe9, 0x01, 0x42, 0x22, 0x00, 0x1d, 0xe9, 0x01, 0x42, 0x9c, - 0x01, 0x20, 0xe9, 0x41, 0xe1, 0x18, 0xe9, 0x01, 0x42, 0xbc, 0x04, 0x1e, - 0xe9, 0x41, 0x44, 0x58, 0x17, 0x01, 0xe9, 0x01, 0x42, 0x22, 0x00, 0x0d, - 0xe9, 0x41, 0xe1, 0x04, 0xe9, 0x01, 0x42, 0xb0, 0x01, 0x07, 0xe9, 0x41, - 0x48, 0x9d, 0x2a, 0xe6, 0x23, 0x00, 0x02, 0x18, 0x04, 0x27, 0x49, 0x52, - 0x4c, 0x06, 0x00, 0x00, 0x07, 0x34, 0xcc, 0x11, 0x05, 0xd0, 0x34, 0x01, - 0xff, 0x45, 0xe0, 0x03, 0xb4, 0x00, 0x00, 0x44, 0x05, 0x02, 0x9f, 0x29, - 0x40, 0x53, 0xcb, 0x42, 0x6d, 0x20, 0x00, 0x52, 0xdf, 0x4f, 0x6b, 0x20, - 0x40, 0x45, 0x6c, 0xdf, 0x97, 0xfa, 0x01, 0x46, 0x5f, 0x64, 0x00, 0x21, - 0x40 }; + 0xb9, 0x04, 0x40, 0x48, 0x07, 0x28, 0xb7, 0x04, 0x00, 0x48, 0x1c, 0x21, + 0xf5, 0x04, 0x40, 0xa1, 0x24, 0xe5, 0x31, 0x04, 0x00, 0xa9, 0x12, 0x4a, + 0x52, 0xa4, 0x5b, 0xa6, 0x00, 0x4a, 0xc2, 0xa7, 0x4d, 0xa6, 0x00, 0x57, + 0x8a, 0x07, 0x56, 0x04, 0x40, 0x45, 0x75, 0xc5, 0x6b, 0x04, 0x00, 0x49, + 0x97, 0x97, 0x6b, 0xa6, 0x40, 0x46, 0x04, 0xc5, 0xe9, 0x04, 0x80, 0x06, + 0x48, 0xf1, 0xc0, 0xa1, 0x04, 0x40, 0x4f, 0xbd, 0x63, 0xeb, 0x04, 0x40, + 0x06, 0x50, 0x00, 0x23, 0x09, 0xc3, 0xad, 0x06, 0x47, 0xc2, 0xc8, 0x1f, + 0x05, 0x40, 0x43, 0x21, 0x2c, 0xbd, 0x04, 0x80, 0x0c, 0x43, 0x0d, 0xe9, + 0xe1, 0x04, 0x00, 0x42, 0x22, 0x00, 0xa9, 0x04, 0x40, 0x4f, 0xae, 0x63, + 0xbf, 0x04, 0x40, 0x45, 0xb7, 0x20, 0xd1, 0x04, 0x00, 0x49, 0x1b, 0x21, + 0xd3, 0x04, 0x40, 0x4d, 0xf2, 0x7e, 0x6e, 0xa6, 0x00, 0x48, 0x09, 0xc0, + 0xc0, 0x04, 0x00, 0x50, 0xfe, 0x60, 0x2b, 0x1d, 0x40, 0x06, 0xf2, 0x04, + 0x17, 0x08, 0x35, 0x1d, 0x01, 0xff, 0x44, 0xf2, 0xe3, 0xd4, 0x04, 0x00, + 0x46, 0x0d, 0xd1, 0xa4, 0x04, 0x00, 0x46, 0xf9, 0xd5, 0xb4, 0x04, 0x40, + 0xe1, 0x10, 0x04, 0x80, 0x8a, 0x09, 0xa2, 0xce, 0x08, 0xa3, 0x99, 0x08, + 0xa4, 0xc4, 0x07, 0xe5, 0x2d, 0x04, 0x80, 0xc9, 0x06, 0x44, 0xf2, 0xe4, + 0x72, 0x04, 0x00, 0xa7, 0x8f, 0x06, 0xa8, 0xe5, 0x05, 0xe9, 0x18, 0x04, + 0x80, 0xf5, 0x04, 0x42, 0x18, 0x1e, 0x08, 0x04, 0x00, 0xab, 0xfc, 0x03, + 0xac, 0xe7, 0x03, 0x04, 0xc1, 0x16, 0xd6, 0x03, 0xae, 0xc7, 0x03, 0xef, + 0x1e, 0x04, 0x80, 0xaa, 0x03, 0xb0, 0x8b, 0x03, 0x42, 0x9d, 0x12, 0x1a, + 0x05, 0x00, 0xb2, 0xda, 0x02, 0xb3, 0xeb, 0x01, 0xb4, 0xae, 0x01, 0xf5, + 0x23, 0x04, 0x80, 0x85, 0x01, 0x42, 0x32, 0x00, 0x12, 0x04, 0x00, 0x42, + 0x15, 0x01, 0x1c, 0x05, 0x00, 0xb9, 0x46, 0xba, 0x01, 0xff, 0xe5, 0x17, + 0x04, 0x80, 0x28, 0xa8, 0x01, 0xff, 0xe5, 0x16, 0x04, 0x80, 0x06, 0x42, + 0x15, 0x01, 0x84, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xb7, + 0x20, 0xc1, 0x04, 0x00, 0xa4, 0x01, 0xff, 0x48, 0x07, 0x28, 0x96, 0x04, + 0x00, 0x48, 0x1c, 0x21, 0xdc, 0x04, 0x40, 0x07, 0x87, 0x06, 0x06, 0x44, + 0x3e, 0xe6, 0x40, 0xa6, 0x40, 0x48, 0x07, 0x28, 0x98, 0x04, 0x00, 0x48, + 0x1c, 0x21, 0xde, 0x04, 0x40, 0xe1, 0x2f, 0x04, 0x80, 0x24, 0x43, 0x6d, + 0x28, 0x2b, 0x04, 0x80, 0x0c, 0xe9, 0x07, 0x04, 0x00, 0xee, 0x5e, 0xa6, + 0x00, 0xf5, 0x2e, 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x48, 0x97, + 0x6e, 0x50, 0xa6, 0x00, 0x49, 0x1b, 0x21, 0xf8, 0x04, 0x40, 0xe5, 0x18, + 0x05, 0x00, 0xf4, 0x62, 0x04, 0x40, 0x06, 0x50, 0x00, 0x0b, 0xeb, 0x78, + 0x04, 0xc0, 0x00, 0x4a, 0xf4, 0x95, 0x04, 0x04, 0x40, 0xa4, 0x06, 0x46, + 0xed, 0x69, 0xee, 0x04, 0x40, 0x48, 0x1c, 0x21, 0xf0, 0x04, 0x00, 0x4b, + 0xd4, 0x98, 0xf2, 0x04, 0x40, 0x43, 0x21, 0x2c, 0x92, 0xa6, 0x00, 0xe5, + 0x22, 0x04, 0x80, 0x1e, 0xb3, 0x06, 0x42, 0x15, 0x01, 0x8c, 0xa6, 0x40, + 0xe5, 0x26, 0x04, 0x00, 0x42, 0xb0, 0x01, 0x0b, 0x04, 0x00, 0x42, 0xc7, + 0x02, 0x90, 0xa6, 0x00, 0x42, 0x15, 0x01, 0x8e, 0xa6, 0x40, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x49, 0x06, 0x28, 0xac, 0x04, 0x00, 0x4b, 0x7f, 0x97, + 0x8a, 0xa6, 0x40, 0x44, 0x01, 0x75, 0xd8, 0x04, 0x80, 0x5f, 0x4c, 0x07, + 0x87, 0x8c, 0x04, 0x00, 0xa8, 0x27, 0x04, 0x52, 0x6a, 0x0d, 0x49, 0x72, + 0xb6, 0xae, 0x04, 0xc0, 0x00, 0x4c, 0xdb, 0x25, 0xb0, 0x04, 0x40, 0x42, + 0x04, 0x00, 0x62, 0xa6, 0x00, 0xa5, 0x06, 0x44, 0xdb, 0x02, 0x2c, 0x04, + 0x40, 0xec, 0x64, 0xa6, 0x00, 0xed, 0x66, 0xa6, 0x40, 0xe1, 0x28, 0x04, + 0x00, 0x43, 0x29, 0x1e, 0x29, 0x04, 0x00, 0x42, 0x22, 0x00, 0xba, 0x04, + 0x80, 0x19, 0x04, 0x5d, 0x30, 0x06, 0x42, 0x15, 0x01, 0x96, 0xa6, 0x40, + 0xe9, 0x19, 0x04, 0x80, 0x04, 0xf5, 0x0e, 0x04, 0x40, 0x4a, 0x30, 0x9e, + 0x8a, 0x04, 0x40, 0x4f, 0xae, 0x63, 0x26, 0x05, 0x40, 0x4f, 0xbd, 0x63, + 0xda, 0x04, 0x40, 0x08, 0x1a, 0x13, 0x0c, 0x42, 0x22, 0x00, 0x16, 0x05, + 0x00, 0x4a, 0x8c, 0xa6, 0x7a, 0x04, 0x40, 0x43, 0x0d, 0xe9, 0x44, 0xa6, + 0x00, 0x43, 0xfe, 0x57, 0x60, 0xa6, 0x00, 0x42, 0xbc, 0x48, 0x54, 0xa6, + 0x00, 0x42, 0x58, 0x07, 0x10, 0x05, 0x40, 0xe5, 0x1f, 0x04, 0x80, 0x06, + 0x42, 0xdb, 0x02, 0x70, 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, + 0x06, 0x28, 0x24, 0x05, 0x00, 0x4b, 0x7f, 0x97, 0xa6, 0x04, 0x40, 0x4f, + 0xbd, 0x63, 0xe6, 0x04, 0x00, 0x44, 0x18, 0x75, 0x60, 0x04, 0x80, 0x04, + 0xf4, 0x7e, 0x04, 0x40, 0x4b, 0x5d, 0x90, 0x7c, 0x04, 0x40, 0x4a, 0xaa, + 0xa1, 0x4e, 0xa6, 0x00, 0x42, 0x18, 0x1e, 0x0a, 0x04, 0x40, 0x47, 0xf8, + 0x7e, 0x68, 0xa6, 0x00, 0x48, 0x8f, 0x8a, 0x4a, 0xa6, 0x40, 0x42, 0x22, + 0x00, 0x14, 0x05, 0x00, 0x49, 0xa5, 0x53, 0x66, 0x04, 0x00, 0x42, 0x18, + 0x1e, 0x09, 0x04, 0x40, 0xe1, 0x1a, 0x04, 0x80, 0x4e, 0x4d, 0x82, 0x7c, + 0xcb, 0x04, 0x00, 0x42, 0x18, 0x1e, 0x0c, 0x04, 0x00, 0xaf, 0x06, 0x42, + 0xdb, 0x02, 0x6e, 0x04, 0x40, 0x03, 0x9b, 0xc7, 0x06, 0x43, 0xb4, 0x79, + 0x80, 0x04, 0x40, 0xa4, 0x1e, 0x43, 0x17, 0x1e, 0x08, 0x05, 0x00, 0x43, + 0x9f, 0x7d, 0x0a, 0x05, 0x00, 0x43, 0xc6, 0x95, 0x0c, 0x05, 0x00, 0x43, + 0x88, 0xe9, 0x0e, 0x05, 0x00, 0x43, 0xc7, 0xe9, 0x04, 0x05, 0x40, 0xe5, + 0x00, 0x05, 0x00, 0x42, 0x18, 0x1e, 0x02, 0x05, 0x00, 0x43, 0xc7, 0xe9, + 0x06, 0x05, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x06, 0x28, 0x9a, + 0x04, 0x00, 0x44, 0x04, 0x0d, 0xc3, 0x04, 0x00, 0x46, 0x57, 0x04, 0x9e, + 0x04, 0x00, 0x4f, 0xb3, 0x2f, 0x9c, 0x04, 0x40, 0x06, 0x50, 0x00, 0x54, + 0xe5, 0x15, 0x04, 0x80, 0x3e, 0xef, 0x01, 0x04, 0x80, 0x0d, 0x46, 0x0d, + 0xd7, 0x74, 0x04, 0xc0, 0x00, 0x59, 0x6c, 0x20, 0x76, 0x04, 0x40, 0xb4, + 0x01, 0xff, 0xe1, 0x46, 0xa6, 0x00, 0x06, 0x2e, 0x2f, 0x01, 0xff, 0xe1, + 0x56, 0xa6, 0x00, 0x47, 0x73, 0xc5, 0x6c, 0x04, 0x00, 0x51, 0x9d, 0x53, + 0x5c, 0xa6, 0x00, 0xe5, 0x64, 0x04, 0x00, 0x4a, 0xa4, 0x53, 0x68, 0x04, + 0x00, 0x43, 0xb4, 0x2e, 0x52, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, + 0x45, 0xb7, 0x20, 0xd6, 0x04, 0x00, 0x45, 0x79, 0x20, 0x00, 0x04, 0x40, + 0x49, 0x1b, 0x21, 0xe4, 0x04, 0x00, 0x45, 0x79, 0x20, 0x0d, 0x04, 0x00, + 0x46, 0xed, 0x69, 0xe2, 0x04, 0x40, 0xe1, 0x25, 0x04, 0x80, 0x06, 0x42, + 0x15, 0x01, 0x94, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x06, 0x47, 0x68, 0x8b, + 0x2a, 0x04, 0x40, 0x49, 0x06, 0x28, 0xb2, 0x04, 0x00, 0x44, 0x04, 0x0d, + 0xfc, 0x04, 0x00, 0x46, 0x57, 0x04, 0xfe, 0x04, 0x40, 0x42, 0xb0, 0x01, + 0x13, 0x04, 0x80, 0x06, 0x42, 0x18, 0x1e, 0x03, 0x04, 0x40, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x49, 0x06, 0x28, 0xf6, 0x04, 0x00, 0x4b, 0x7f, 0x97, + 0x94, 0x04, 0x00, 0x46, 0x57, 0x04, 0x92, 0x04, 0x80, 0x06, 0x46, 0x98, + 0x62, 0x90, 0x04, 0x40, 0x49, 0x24, 0x21, 0xfa, 0x04, 0x40, 0x4f, 0xbd, + 0x63, 0xec, 0x04, 0x00, 0xe6, 0x24, 0x04, 0x00, 0xec, 0x1b, 0x04, 0x80, + 0x49, 0xed, 0x1c, 0x04, 0x80, 0x3e, 0xee, 0x1d, 0x04, 0x80, 0x16, 0xf2, + 0x20, 0x04, 0x80, 0x0b, 0xf3, 0x21, 0x04, 0xc0, 0x00, 0x4f, 0xae, 0x63, + 0xaa, 0x04, 0x40, 0x4a, 0x3a, 0x9e, 0x8e, 0x04, 0x40, 0x06, 0x50, 0x00, + 0x01, 0xff, 0x49, 0x06, 0x28, 0xa2, 0x04, 0x00, 0x44, 0x04, 0x0d, 0xc7, + 0x04, 0x00, 0x49, 0x1e, 0x52, 0x28, 0x05, 0x00, 0x4b, 0x7f, 0x97, 0x22, + 0x05, 0x00, 0x44, 0xae, 0x15, 0xc9, 0x04, 0x40, 0x4a, 0x30, 0x9e, 0xcd, + 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x06, 0x28, 0x2e, 0x05, + 0x00, 0x44, 0x04, 0x0d, 0x12, 0x05, 0x00, 0x4b, 0x7f, 0x97, 0x20, 0x05, + 0x00, 0x44, 0xae, 0x15, 0xc5, 0x04, 0x40, 0x43, 0x21, 0x2c, 0x2c, 0x05, + 0x00, 0xe5, 0x14, 0x04, 0x00, 0x42, 0x18, 0x1e, 0x02, 0x04, 0x80, 0x3b, + 0x06, 0x3c, 0x01, 0x2d, 0x42, 0x15, 0x01, 0x80, 0xa6, 0x00, 0xba, 0x01, + 0xff, 0xe5, 0x05, 0x04, 0x80, 0x19, 0x42, 0xb0, 0x01, 0x0f, 0x04, 0x00, + 0x42, 0x15, 0x01, 0x82, 0xa6, 0x00, 0xba, 0x01, 0xff, 0xe5, 0x88, 0xa6, + 0x00, 0x42, 0xb0, 0x01, 0x2a, 0x05, 0x40, 0x42, 0x13, 0x01, 0x42, 0xa6, + 0x40, 0x4b, 0x95, 0x97, 0x6c, 0xa6, 0x00, 0xef, 0x98, 0xa6, 0x40, 0x42, + 0xd0, 0x0d, 0x48, 0xa6, 0x40, 0x43, 0x21, 0x2c, 0x86, 0xa6, 0x00, 0x42, + 0xb0, 0x01, 0x27, 0x04, 0x80, 0x0c, 0x50, 0x9e, 0x53, 0x58, 0xa6, 0x00, + 0x48, 0xb1, 0xc0, 0x9a, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, + 0x06, 0x4f, 0xb3, 0x2f, 0xb8, 0x04, 0x40, 0x48, 0x07, 0x28, 0xb6, 0x04, + 0x00, 0x48, 0x1c, 0x21, 0xf4, 0x04, 0x40, 0xa1, 0x24, 0xe5, 0x11, 0x04, + 0x00, 0xa9, 0x12, 0x4a, 0x52, 0xa4, 0x5a, 0xa6, 0x00, 0x4a, 0xc2, 0xa7, + 0x4c, 0xa6, 0x00, 0x57, 0x8a, 0x07, 0x06, 0x04, 0x40, 0x45, 0x75, 0xc5, + 0x6a, 0x04, 0x00, 0x49, 0x97, 0x97, 0x6a, 0xa6, 0x40, 0x46, 0x04, 0xc5, + 0xe8, 0x04, 0x80, 0x06, 0x48, 0xf1, 0xc0, 0xa0, 0x04, 0x40, 0x4f, 0xbd, + 0x63, 0xea, 0x04, 0x40, 0x06, 0x50, 0x00, 0x23, 0x09, 0xc3, 0xad, 0x06, + 0x47, 0xc2, 0xc8, 0x1e, 0x05, 0x40, 0x43, 0x21, 0x2c, 0xbc, 0x04, 0x80, + 0x0c, 0x43, 0x0d, 0xe9, 0xe0, 0x04, 0x00, 0x42, 0x22, 0x00, 0xa8, 0x04, + 0x40, 0x4f, 0xae, 0x63, 0xbe, 0x04, 0x40, 0x45, 0xb7, 0x20, 0xd0, 0x04, + 0x00, 0x49, 0x1b, 0x21, 0xd2, 0x04, 0x40, 0x0d, 0x52, 0x7d, 0xbc, 0x03, + 0x10, 0x2e, 0x5f, 0x01, 0xff, 0x90, 0x44, 0x91, 0x0d, 0x02, 0x8f, 0xe8, + 0x01, 0xff, 0xd1, 0xf1, 0x2f, 0x01, 0xd2, 0xf2, 0x2f, 0x41, 0x90, 0x0f, + 0x91, 0x01, 0xff, 0xd0, 0xee, 0x2f, 0x01, 0xd2, 0xef, 0x2f, 0x01, 0xd4, + 0xf0, 0x2f, 0x41, 0xd0, 0xe5, 0x2f, 0x01, 0xd1, 0xe6, 0x2f, 0x01, 0xd2, + 0xe7, 0x2f, 0x01, 0xd3, 0xe8, 0x2f, 0x01, 0xd4, 0xe9, 0x2f, 0x01, 0xd5, + 0xea, 0x2f, 0x01, 0xd7, 0xeb, 0x2f, 0x01, 0xd8, 0xec, 0x2f, 0x01, 0xd9, + 0xed, 0x2f, 0x41, 0x90, 0xce, 0x02, 0x91, 0xaa, 0x02, 0x92, 0x87, 0x02, + 0x93, 0xe4, 0x01, 0x94, 0xc9, 0x01, 0x95, 0xa2, 0x01, 0x96, 0x7c, 0x97, + 0x51, 0x98, 0x27, 0x99, 0x01, 0xff, 0xd0, 0xdc, 0x2f, 0x01, 0xd1, 0xdd, + 0x2f, 0x01, 0xd2, 0xde, 0x2f, 0x01, 0xd4, 0xdf, 0x2f, 0x01, 0xd5, 0xe0, + 0x2f, 0x01, 0xd6, 0xe1, 0x2f, 0x01, 0xd7, 0xe2, 0x2f, 0x01, 0xd8, 0xe3, + 0x2f, 0x01, 0xd9, 0xe4, 0x2f, 0x41, 0xd0, 0xd2, 0x2f, 0x01, 0xd1, 0xd3, + 0x2f, 0x01, 0xd2, 0xd4, 0x2f, 0x01, 0xd3, 0xd5, 0x2f, 0x01, 0xd4, 0xd6, + 0x2f, 0x01, 0xd5, 0xd7, 0x2f, 0x01, 0xd6, 0xd8, 0x2f, 0x01, 0xd7, 0xd9, + 0x2f, 0x01, 0xd8, 0xda, 0x2f, 0x01, 0xd9, 0xdb, 0x2f, 0x41, 0xd0, 0xc8, + 0x2f, 0x01, 0xd1, 0xc9, 0x2f, 0x01, 0xd2, 0xca, 0x2f, 0x01, 0xd3, 0xcb, + 0x2f, 0x01, 0xd4, 0xcc, 0x2f, 0x01, 0xd5, 0xcd, 0x2f, 0x81, 0x0c, 0xd6, + 0xcf, 0x2f, 0x01, 0xd8, 0xd0, 0x2f, 0x01, 0xd9, 0xd1, 0x2f, 0x41, 0xe2, + 0xce, 0x2f, 0x41, 0xd0, 0xbf, 0x2f, 0x01, 0xd1, 0xc0, 0x2f, 0x01, 0xd2, + 0xc1, 0x2f, 0x01, 0xd3, 0xc2, 0x2f, 0x01, 0xd4, 0xc3, 0x2f, 0x01, 0xd6, + 0xc4, 0x2f, 0x01, 0xd7, 0xc5, 0x2f, 0x01, 0xd8, 0xc6, 0x2f, 0x01, 0xd9, + 0xc7, 0x2f, 0x41, 0xd0, 0xb6, 0x2f, 0x01, 0xd1, 0xb7, 0x2f, 0x01, 0xd2, + 0xb8, 0x2f, 0x01, 0xd3, 0xb9, 0x2f, 0x01, 0xd4, 0xba, 0x2f, 0x01, 0xd5, + 0xbb, 0x2f, 0x01, 0xd6, 0xbc, 0x2f, 0x01, 0xd8, 0xbd, 0x2f, 0x01, 0xd9, + 0xbe, 0x2f, 0x41, 0xd0, 0xb0, 0x2f, 0x01, 0xd1, 0xb1, 0x2f, 0x01, 0xd4, + 0xb2, 0x2f, 0x01, 0xd6, 0xb3, 0x2f, 0x01, 0xd7, 0xb4, 0x2f, 0x01, 0xd9, + 0xb5, 0x2f, 0x41, 0xd0, 0xa8, 0x2f, 0x01, 0xd3, 0xa9, 0x2f, 0x01, 0xd4, + 0xaa, 0x2f, 0x01, 0xd5, 0xab, 0x2f, 0x01, 0xd6, 0xac, 0x2f, 0x01, 0xd7, + 0xad, 0x2f, 0x01, 0xd8, 0xae, 0x2f, 0x01, 0xd9, 0xaf, 0x2f, 0x41, 0xd1, + 0xa0, 0x2f, 0x01, 0xd3, 0xa1, 0x2f, 0x01, 0xd4, 0xa2, 0x2f, 0x01, 0xd5, + 0xa3, 0x2f, 0x01, 0xd6, 0xa4, 0x2f, 0x01, 0xd7, 0xa5, 0x2f, 0x01, 0xd8, + 0xa6, 0x2f, 0x01, 0xd9, 0xa7, 0x2f, 0x41, 0xd0, 0x98, 0x2f, 0x01, 0xd1, + 0x99, 0x2f, 0x01, 0xd2, 0x9a, 0x2f, 0x81, 0x10, 0xd3, 0x9c, 0x2f, 0x01, + 0xd5, 0x9d, 0x2f, 0x01, 0xd7, 0x9e, 0x2f, 0x01, 0xd9, 0x9f, 0x2f, 0x41, + 0xe2, 0x9b, 0x2f, 0x41, 0xd1, 0x90, 0x2f, 0x01, 0xd2, 0x91, 0x2f, 0x01, + 0xd4, 0x92, 0x2f, 0x01, 0xd5, 0x93, 0x2f, 0x01, 0xd6, 0x94, 0x2f, 0x01, + 0xd7, 0x95, 0x2f, 0x01, 0xd8, 0x96, 0x2f, 0x01, 0xd9, 0x97, 0x2f, 0x41, + 0xe1, 0x00, 0x08, 0x01, 0xe5, 0x01, 0x08, 0x01, 0xe9, 0x02, 0x08, 0x01, + 0xaa, 0xe3, 0x01, 0xab, 0xcc, 0x01, 0xac, 0xb5, 0x01, 0xad, 0x9e, 0x01, + 0xae, 0x87, 0x01, 0xef, 0x03, 0x08, 0x01, 0xb0, 0x6d, 0xb2, 0x57, 0xb3, + 0x41, 0xb4, 0x2b, 0xf5, 0x04, 0x08, 0x01, 0xb7, 0x15, 0xb8, 0x0b, 0xba, + 0x01, 0xff, 0xe1, 0x3c, 0x08, 0x01, 0xef, 0x3f, 0x08, 0x41, 0xe1, 0x37, + 0x08, 0x01, 0xe5, 0x38, 0x08, 0x41, 0xe1, 0x32, 0x08, 0x01, 0xe5, 0x33, + 0x08, 0x01, 0xe9, 0x34, 0x08, 0x01, 0xef, 0x35, 0x08, 0x41, 0xe1, 0x2d, + 0x08, 0x01, 0xe5, 0x2e, 0x08, 0x01, 0xe9, 0x2f, 0x08, 0x01, 0xef, 0x30, + 0x08, 0x01, 0xf5, 0x31, 0x08, 0x41, 0xe1, 0x28, 0x08, 0x01, 0xe5, 0x29, + 0x08, 0x01, 0xe9, 0x2a, 0x08, 0x01, 0xef, 0x2b, 0x08, 0x01, 0xf5, 0x2c, + 0x08, 0x41, 0xe1, 0x23, 0x08, 0x01, 0xe5, 0x24, 0x08, 0x01, 0xe9, 0x25, + 0x08, 0x01, 0xef, 0x26, 0x08, 0x01, 0xf5, 0x27, 0x08, 0x41, 0xe1, 0x1e, + 0x08, 0x01, 0xe5, 0x1f, 0x08, 0x01, 0xe9, 0x20, 0x08, 0x01, 0xef, 0x21, + 0x08, 0x01, 0xf5, 0x22, 0x08, 0x41, 0xe1, 0x19, 0x08, 0x01, 0xe5, 0x1a, + 0x08, 0x01, 0xe9, 0x1b, 0x08, 0x01, 0xef, 0x1c, 0x08, 0x01, 0xf5, 0x1d, + 0x08, 0x41, 0xe1, 0x14, 0x08, 0x01, 0xe5, 0x15, 0x08, 0x01, 0xe9, 0x16, + 0x08, 0x01, 0xef, 0x17, 0x08, 0x01, 0xf5, 0x18, 0x08, 0x41, 0xe1, 0x0f, + 0x08, 0x01, 0xe5, 0x10, 0x08, 0x01, 0xe9, 0x11, 0x08, 0x01, 0xef, 0x12, + 0x08, 0x01, 0xf5, 0x13, 0x08, 0x41, 0xe1, 0x0a, 0x08, 0x01, 0xe5, 0x0b, + 0x08, 0x01, 0xe9, 0x0c, 0x08, 0x01, 0xef, 0x0d, 0x08, 0x01, 0xf5, 0x0e, + 0x08, 0x41, 0xe1, 0x05, 0x08, 0x01, 0xef, 0x08, 0x08, 0x41, 0x47, 0x79, + 0xae, 0x1b, 0x22, 0x00, 0x46, 0x95, 0xd0, 0x52, 0xf9, 0x01, 0x08, 0xe1, + 0xbe, 0x80, 0x01, 0xb0, 0x64, 0xb2, 0x16, 0x02, 0x60, 0x01, 0x06, 0x49, + 0x0f, 0xb6, 0x69, 0xf9, 0x41, 0x43, 0xaa, 0x01, 0x6e, 0xf3, 0x01, 0x43, + 0xbc, 0x60, 0xc3, 0xf6, 0x41, 0xac, 0x1e, 0xb2, 0x06, 0x60, 0xec, 0x0e, + 0x61, 0x27, 0x40, 0x05, 0x9d, 0x3c, 0x06, 0x4a, 0xec, 0xaa, 0x5b, 0xf3, + 0x41, 0x48, 0x79, 0xbc, 0xb1, 0xf4, 0x01, 0x44, 0xdb, 0x02, 0xa4, 0x00, + 0x40, 0x49, 0x59, 0xb1, 0x4c, 0xf9, 0x01, 0x02, 0x09, 0x00, 0x01, 0xff, + 0x51, 0x26, 0x53, 0xaa, 0x23, 0x00, 0x02, 0x13, 0x01, 0x01, 0xff, 0x06, + 0xab, 0x1f, 0x06, 0x42, 0x1f, 0x00, 0xb0, 0x27, 0x40, 0x43, 0x1a, 0x00, + 0xcf, 0x22, 0x00, 0x42, 0x0c, 0x00, 0xce, 0x22, 0x40, 0x80, 0x0c, 0x44, + 0x18, 0x29, 0xc1, 0xf9, 0x01, 0x43, 0x00, 0x60, 0xe0, 0x2b, 0x40, 0x4f, + 0xee, 0x59, 0xfe, 0x26, 0x00, 0x4a, 0xba, 0xaa, 0x64, 0xf9, 0x41, 0x0d, + 0x4d, 0x7f, 0xf5, 0x37, 0x11, 0x88, 0x57, 0xce, 0x37, 0x05, 0xdb, 0x02, + 0x01, 0xff, 0xe1, 0x00, 0x20, 0x81, 0xf3, 0x33, 0xa2, 0xcc, 0x32, 0xa4, + 0x96, 0x2e, 0xe5, 0x8a, 0x20, 0x81, 0x9a, 0x2b, 0xa7, 0xdc, 0x23, 0xa8, + 0xbd, 0x22, 0xe9, 0x3f, 0x21, 0x81, 0xae, 0x21, 0xab, 0xad, 0x1c, 0xac, + 0x86, 0x13, 0xad, 0xab, 0x11, 0xae, 0xaa, 0x0d, 0xb0, 0xa0, 0x0c, 0xb2, + 0x8c, 0x0c, 0xb3, 0x95, 0x07, 0xb4, 0xb2, 0x05, 0xf5, 0x0b, 0x23, 0x81, + 0x77, 0xba, 0x01, 0xff, 0xe1, 0x5d, 0x23, 0x81, 0x53, 0x42, 0x75, 0x93, + 0x62, 0x23, 0x01, 0xe9, 0x63, 0x23, 0x81, 0x29, 0xf5, 0x6a, 0x23, 0xc1, + 0x00, 0x51, 0x9f, 0x51, 0x42, 0x25, 0x01, 0xd5, 0x6b, 0x23, 0x81, 0x0a, + 0x43, 0xf2, 0x31, 0x6d, 0x23, 0x01, 0xed, 0x6e, 0x23, 0x41, 0x07, 0x27, + 0x02, 0x01, 0xff, 0xe1, 0x6c, 0x23, 0x01, 0x4f, 0xe1, 0x6c, 0x43, 0x25, + 0x41, 0x48, 0xc9, 0xb8, 0x64, 0x23, 0x01, 0xd3, 0x65, 0x23, 0x01, 0xe2, + 0x66, 0x23, 0x81, 0x0a, 0xe7, 0x68, 0x23, 0x01, 0x42, 0x50, 0xe8, 0x69, + 0x23, 0x41, 0x4a, 0x72, 0x9d, 0x67, 0x23, 0x41, 0x80, 0x0e, 0xd7, 0x41, + 0x25, 0x01, 0xe7, 0x60, 0x23, 0x01, 0x42, 0x95, 0xe9, 0x61, 0x23, 0x41, + 0x51, 0x21, 0x58, 0x5f, 0x23, 0x01, 0x44, 0x9a, 0x5a, 0x5e, 0x23, 0x41, + 0x80, 0x8c, 0x04, 0xd2, 0x11, 0x23, 0x01, 0xe2, 0x12, 0x23, 0x01, 0xe4, + 0x13, 0x23, 0x81, 0xbf, 0x03, 0xed, 0x1d, 0x23, 0x81, 0xfa, 0x02, 0xee, + 0x26, 0x23, 0x81, 0xee, 0x02, 0xf2, 0x28, 0x23, 0x81, 0x46, 0x42, 0xa4, + 0x02, 0x51, 0x23, 0x81, 0x18, 0x44, 0xae, 0xe7, 0x59, 0x23, 0x01, 0xba, + 0x01, 0xff, 0xd3, 0x5a, 0x23, 0x81, 0x04, 0xf5, 0x5c, 0x23, 0x41, 0x4d, + 0xc0, 0x78, 0x5b, 0x23, 0x41, 0x07, 0x27, 0x02, 0x0e, 0xd2, 0x57, 0x23, + 0x01, 0x43, 0x94, 0xe9, 0x58, 0x23, 0x01, 0xf8, 0x56, 0x23, 0x41, 0xe1, + 0x52, 0x23, 0x01, 0x42, 0x55, 0x03, 0x53, 0x23, 0x81, 0x06, 0x44, 0x05, + 0x40, 0x55, 0x23, 0x41, 0xf2, 0x54, 0x23, 0x41, 0x80, 0x94, 0x02, 0xd2, + 0x2b, 0x23, 0x81, 0xc1, 0x01, 0xd4, 0x34, 0x23, 0x01, 0xe9, 0x35, 0x23, + 0x81, 0xb3, 0x01, 0xf5, 0x37, 0x23, 0xc1, 0x00, 0x07, 0x27, 0x02, 0x0d, + 0x42, 0x68, 0x0f, 0x4f, 0x23, 0xc1, 0x00, 0x48, 0x27, 0x02, 0x50, 0x23, + 0x41, 0xe1, 0x38, 0x23, 0x81, 0x91, 0x01, 0x43, 0x16, 0x00, 0x3a, 0x23, + 0x01, 0xa4, 0x7d, 0xa7, 0x64, 0x42, 0x22, 0x00, 0x41, 0x23, 0x01, 0xa9, + 0x4c, 0x42, 0x45, 0x00, 0x45, 0x23, 0x01, 0xac, 0x33, 0x43, 0x25, 0x12, + 0x47, 0x23, 0x01, 0x42, 0xc1, 0x08, 0x48, 0x23, 0x01, 0xb3, 0x19, 0x42, + 0x5c, 0x01, 0x4b, 0x23, 0x01, 0xb5, 0x01, 0xff, 0x49, 0x9e, 0xab, 0x4c, + 0x23, 0x01, 0xe4, 0x4d, 0x23, 0x01, 0x44, 0x00, 0xc2, 0x4e, 0x23, 0x41, + 0x42, 0xb0, 0x01, 0x49, 0x23, 0x01, 0x43, 0x4c, 0x63, 0x4a, 0x23, 0x41, + 0x46, 0x7b, 0xcf, 0x3f, 0x25, 0x01, 0xb5, 0x01, 0xff, 0xd3, 0x40, 0x25, + 0x01, 0xed, 0x46, 0x23, 0x41, 0x42, 0xf6, 0x05, 0x42, 0x23, 0x01, 0xed, + 0x43, 0x23, 0x01, 0x42, 0xa4, 0x02, 0x44, 0x23, 0x41, 0xe1, 0x3c, 0x23, + 0x81, 0x04, 0xf5, 0x40, 0x23, 0x41, 0xec, 0x3d, 0x23, 0x01, 0x47, 0xa7, + 0x5a, 0x3e, 0x23, 0x01, 0xf2, 0x3f, 0x23, 0x41, 0x44, 0x2e, 0xe4, 0x3e, + 0x25, 0x01, 0x42, 0x24, 0x0a, 0x3b, 0x23, 0x41, 0x45, 0xc4, 0xcf, 0x39, + 0x23, 0x41, 0xd3, 0x36, 0x23, 0x41, 0x80, 0x01, 0xff, 0x48, 0xc2, 0x20, + 0x3c, 0x25, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xa1, 0x29, 0x42, 0x22, + 0x00, 0x2f, 0x23, 0x01, 0x43, 0x40, 0x20, 0x30, 0x23, 0x01, 0xb5, 0x01, + 0xff, 0xd2, 0x31, 0x23, 0x81, 0x04, 0xe4, 0x3d, 0x25, 0x41, 0x06, 0x70, + 0x25, 0x01, 0xff, 0x43, 0x50, 0x03, 0x32, 0x23, 0x01, 0x42, 0xea, 0x05, + 0x33, 0x23, 0x41, 0x06, 0x70, 0x25, 0x04, 0xec, 0x2e, 0x23, 0x41, 0x42, + 0x22, 0x00, 0x2c, 0x23, 0x01, 0x42, 0x2f, 0x04, 0x2d, 0x23, 0x41, 0x4b, + 0x99, 0x92, 0x29, 0x23, 0x01, 0x47, 0x67, 0x75, 0x2a, 0x23, 0x41, 0x45, + 0x3c, 0x3b, 0x27, 0x23, 0x41, 0x07, 0x27, 0x02, 0x1e, 0x43, 0x54, 0x14, + 0x22, 0x23, 0x01, 0x42, 0x9f, 0x03, 0x23, 0x23, 0xc1, 0x00, 0x07, 0x27, + 0x02, 0x01, 0xff, 0x46, 0x1b, 0x02, 0x24, 0x23, 0x01, 0x42, 0xc1, 0x08, + 0x25, 0x23, 0x41, 0x45, 0x22, 0x02, 0x1e, 0x23, 0x01, 0x42, 0x2a, 0x02, + 0x98, 0x23, 0x81, 0x0a, 0x44, 0xb6, 0x51, 0x20, 0x23, 0x01, 0xf5, 0x21, + 0x23, 0x41, 0x48, 0x41, 0x52, 0x1f, 0x23, 0x41, 0x80, 0x06, 0x42, 0x2a, + 0x0d, 0x1c, 0x23, 0x41, 0x44, 0x3d, 0x3b, 0x19, 0x23, 0x01, 0x46, 0x23, + 0xd3, 0x14, 0x23, 0x01, 0x47, 0x67, 0x75, 0x1a, 0x23, 0x81, 0x1e, 0x06, + 0x28, 0x02, 0x01, 0xff, 0x43, 0x38, 0x6a, 0x15, 0x23, 0x01, 0x42, 0x7d, + 0x02, 0x16, 0x23, 0x01, 0x4f, 0x59, 0x6d, 0x17, 0x23, 0xc1, 0x00, 0x45, + 0x3c, 0x3b, 0x18, 0x23, 0x41, 0x4a, 0x18, 0x95, 0x1b, 0x23, 0x41, 0x43, + 0x2a, 0x74, 0x0c, 0x23, 0x01, 0x07, 0xdd, 0x1f, 0x0b, 0xf5, 0x99, 0x23, + 0xc1, 0x00, 0x42, 0x2d, 0x02, 0x0d, 0x23, 0x41, 0x57, 0x81, 0x2c, 0x0e, + 0x23, 0x01, 0x4c, 0xc7, 0x8d, 0x0f, 0x23, 0x01, 0x5a, 0xd2, 0x1f, 0x10, + 0x23, 0x41, 0xe1, 0xeb, 0x22, 0x81, 0x69, 0xe5, 0xfc, 0x22, 0x81, 0x5e, + 0xe9, 0xfe, 0x22, 0x81, 0x30, 0xf5, 0x05, 0x23, 0xc1, 0x00, 0x42, 0x2b, + 0x0d, 0x06, 0x23, 0x01, 0xeb, 0x07, 0x23, 0x01, 0xed, 0x08, 0x23, 0x81, + 0x0b, 0xf2, 0x09, 0x23, 0xc1, 0x00, 0x54, 0x45, 0x3b, 0x0a, 0x23, 0x41, + 0x07, 0x27, 0x02, 0x01, 0xff, 0x49, 0xa5, 0x5a, 0x3a, 0x25, 0x01, 0x4a, + 0xe1, 0x6c, 0x3b, 0x25, 0x41, 0x45, 0x99, 0x5a, 0xff, 0x22, 0x01, 0xd2, + 0x97, 0x23, 0x01, 0xec, 0x00, 0x23, 0x01, 0xf2, 0x01, 0x23, 0xc1, 0x00, + 0x80, 0x01, 0xff, 0x48, 0xe9, 0xbf, 0x03, 0x23, 0x81, 0x06, 0x4a, 0xff, + 0x3f, 0x02, 0x23, 0x41, 0x5a, 0x10, 0x1c, 0x04, 0x23, 0x41, 0x45, 0x3c, + 0x3b, 0xfd, 0x22, 0x41, 0x80, 0x53, 0xe2, 0xf0, 0x22, 0x81, 0x3f, 0xe7, + 0xf3, 0x22, 0x81, 0x11, 0x42, 0x07, 0x40, 0xfa, 0x22, 0x81, 0x04, 0xf2, + 0xfb, 0x22, 0x41, 0x49, 0xb9, 0xab, 0x39, 0x25, 0x41, 0x07, 0x27, 0x02, + 0x01, 0xff, 0x42, 0xea, 0x05, 0xf4, 0x22, 0x01, 0x43, 0x2a, 0x74, 0xf5, + 0x22, 0x01, 0x02, 0xa4, 0x02, 0x0c, 0x44, 0x29, 0x0d, 0xf8, 0x22, 0x01, + 0x42, 0x2c, 0x0b, 0xf9, 0x22, 0x41, 0xe5, 0xf6, 0x22, 0x01, 0xf5, 0xf7, + 0x22, 0x41, 0x80, 0x01, 0xff, 0x62, 0x36, 0x0b, 0xf1, 0x22, 0x01, 0x47, + 0xdb, 0x04, 0xf2, 0x22, 0x41, 0x48, 0x94, 0x0b, 0xec, 0x22, 0x01, 0x44, + 0x3d, 0x3b, 0xef, 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0x42, 0x49, + 0x00, 0xed, 0x22, 0x01, 0x42, 0x7d, 0x02, 0xee, 0x22, 0x41, 0xe1, 0x93, + 0x22, 0x81, 0xb3, 0x03, 0xa8, 0x5d, 0xe9, 0xdb, 0x22, 0x81, 0x2e, 0xf5, + 0xe2, 0x22, 0xc1, 0x00, 0x48, 0xca, 0x8d, 0xe3, 0x22, 0x01, 0xe4, 0xe4, + 0x22, 0x81, 0x1a, 0x43, 0x41, 0x00, 0xe6, 0x22, 0x01, 0xed, 0xe7, 0x22, + 0x81, 0x09, 0xf2, 0xe9, 0x22, 0xc1, 0x00, 0xd9, 0xea, 0x22, 0x41, 0x43, + 0x50, 0x03, 0xe8, 0x22, 0x41, 0xd2, 0xe5, 0x22, 0x41, 0x80, 0x1c, 0xe7, + 0xdd, 0x22, 0x81, 0x0c, 0x42, 0xbc, 0xa3, 0xe0, 0x22, 0x01, 0x43, 0x3e, + 0xe0, 0xe1, 0x22, 0x41, 0xd4, 0xde, 0x22, 0xc1, 0x00, 0x4f, 0x45, 0x63, + 0xdf, 0x22, 0x41, 0x44, 0x3d, 0x3b, 0xdc, 0x22, 0x01, 0x4a, 0xff, 0x3f, + 0x38, 0x25, 0x41, 0xe1, 0xad, 0x22, 0x81, 0x80, 0x02, 0xe5, 0xba, 0x22, + 0x81, 0xaa, 0x01, 0xa9, 0x27, 0xf5, 0xd7, 0x22, 0xc1, 0x00, 0x52, 0xe8, + 0x49, 0xd8, 0x22, 0x01, 0xd2, 0xd9, 0x22, 0x81, 0x06, 0x43, 0xf2, 0x31, + 0xda, 0x22, 0x41, 0x06, 0x70, 0x25, 0x01, 0xff, 0x4c, 0xcb, 0x86, 0x36, + 0x25, 0x01, 0x4b, 0x75, 0x93, 0x37, 0x25, 0x41, 0xe4, 0xc3, 0x22, 0x81, + 0x6d, 0xed, 0xc6, 0x22, 0x81, 0x20, 0x43, 0x87, 0x30, 0xd2, 0x22, 0x01, + 0xf2, 0xd3, 0x22, 0x81, 0x06, 0x42, 0x12, 0x00, 0xd6, 0x22, 0x41, 0x80, + 0x01, 0xff, 0x56, 0xfe, 0x31, 0xd5, 0x22, 0x01, 0x44, 0x9a, 0x5a, 0xd4, + 0x22, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, 0xc7, 0x22, 0x01, 0xa2, + 0x31, 0x43, 0x09, 0x05, 0xca, 0x22, 0x01, 0x43, 0x1e, 0x1c, 0xcb, 0x22, + 0x01, 0x43, 0xf5, 0x05, 0xcc, 0x22, 0x81, 0x18, 0x46, 0x23, 0xd3, 0xce, + 0x22, 0x01, 0x43, 0x5b, 0xe9, 0xcf, 0x22, 0x01, 0x43, 0x9b, 0xad, 0xd0, + 0x22, 0x01, 0x43, 0xbd, 0x0b, 0xd1, 0x22, 0x41, 0x45, 0x3c, 0x3b, 0xcd, + 0x22, 0x41, 0x42, 0x13, 0x00, 0xc8, 0x22, 0x01, 0x44, 0xa9, 0x8f, 0xc9, + 0x22, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, 0xc4, 0x22, 0x01, 0x42, + 0x29, 0x02, 0xc5, 0x22, 0x41, 0x80, 0x1b, 0x42, 0x02, 0xea, 0xbe, 0x22, + 0x01, 0xee, 0xbf, 0x22, 0x01, 0x42, 0xa4, 0x02, 0xc0, 0x22, 0xc1, 0x00, + 0xd2, 0xc1, 0x22, 0x01, 0x43, 0xb0, 0x00, 0xc2, 0x22, 0x41, 0x42, 0x41, + 0x00, 0xbb, 0x22, 0x01, 0x48, 0xe1, 0xbf, 0x32, 0x25, 0x81, 0x17, 0x05, + 0x71, 0x25, 0x01, 0xff, 0x44, 0x76, 0xe5, 0x33, 0x25, 0x01, 0x44, 0x62, + 0xe6, 0x34, 0x25, 0x01, 0x43, 0x7e, 0x46, 0x35, 0x25, 0x41, 0x80, 0x01, + 0xff, 0x59, 0x11, 0x1c, 0xbc, 0x22, 0x01, 0x59, 0x8c, 0x23, 0xbd, 0x22, + 0x41, 0xd3, 0xae, 0x22, 0x81, 0x17, 0xd6, 0xb7, 0x22, 0x81, 0x0c, 0x42, + 0xa8, 0xe8, 0xb8, 0x22, 0x01, 0x42, 0x03, 0x3e, 0xb9, 0x22, 0x41, 0x45, + 0x99, 0x5a, 0x31, 0x25, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, 0xaf, + 0x22, 0x01, 0x43, 0x38, 0x6a, 0xb0, 0x22, 0x01, 0x44, 0xfa, 0x3f, 0xb1, + 0x22, 0x01, 0x42, 0xd2, 0x04, 0xb2, 0x22, 0x01, 0x44, 0xbe, 0x60, 0xb3, + 0x22, 0x01, 0x43, 0x5c, 0x01, 0xb4, 0x22, 0x01, 0xf5, 0xb5, 0x22, 0xc1, + 0x00, 0x47, 0x70, 0x25, 0xb6, 0x22, 0x41, 0xe7, 0x95, 0x22, 0x81, 0x15, + 0xec, 0xa9, 0x22, 0x81, 0x0a, 0x44, 0x82, 0xe6, 0xab, 0x22, 0x01, 0xf2, + 0xac, 0x22, 0x41, 0x51, 0x7d, 0x51, 0xaa, 0x22, 0x41, 0x80, 0x01, 0xff, + 0x44, 0x3d, 0x3b, 0xa8, 0x22, 0x81, 0x90, 0x01, 0x47, 0x9a, 0xb8, 0x94, + 0x22, 0x01, 0x48, 0xd9, 0xbf, 0xa7, 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, + 0xff, 0xe1, 0x96, 0x22, 0x01, 0x42, 0x6c, 0x02, 0x97, 0x22, 0x81, 0x70, + 0x42, 0x92, 0x01, 0x2e, 0x25, 0x01, 0x42, 0x22, 0x00, 0x99, 0x22, 0x01, + 0x48, 0x97, 0x63, 0x96, 0x23, 0x01, 0xab, 0x50, 0x43, 0x92, 0xab, 0x9c, + 0x22, 0x01, 0x42, 0x7d, 0x02, 0x9d, 0x22, 0x01, 0x43, 0x40, 0x20, 0x9e, + 0x22, 0x01, 0xb3, 0x27, 0x02, 0x12, 0x00, 0x19, 0xb5, 0x01, 0xff, 0xd2, + 0xa2, 0x22, 0x01, 0xe2, 0xa3, 0x22, 0x01, 0xed, 0xa4, 0x22, 0x01, 0xf2, + 0xa5, 0x22, 0x01, 0x42, 0xa4, 0x02, 0xa6, 0x22, 0x41, 0xe2, 0xa1, 0x22, + 0x01, 0x42, 0x07, 0x40, 0x30, 0x25, 0x41, 0x42, 0x13, 0x00, 0x9f, 0x22, + 0x01, 0xa8, 0x01, 0xff, 0x49, 0xda, 0xae, 0x2f, 0x25, 0x01, 0x42, 0x03, + 0x00, 0xa0, 0x22, 0x41, 0x42, 0x6d, 0x00, 0x9a, 0x22, 0x01, 0x42, 0x42, + 0x00, 0x9b, 0x22, 0x41, 0xe2, 0x98, 0x22, 0x41, 0x49, 0xf8, 0xab, 0x2d, + 0x25, 0x41, 0xe1, 0x8f, 0x22, 0x81, 0x08, 0xe9, 0x91, 0x22, 0x01, 0xf5, + 0x92, 0x22, 0x41, 0xe2, 0x90, 0x22, 0x41, 0xe1, 0x7a, 0x22, 0x81, 0x76, + 0x44, 0x7f, 0x6e, 0x7e, 0x22, 0x81, 0x69, 0xe9, 0x7f, 0x22, 0xc1, 0x00, + 0x80, 0x2e, 0xb2, 0x01, 0xff, 0xd2, 0x95, 0x23, 0x01, 0x42, 0x3f, 0x00, + 0x8a, 0x22, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4e, 0xb5, 0x73, 0x8e, 0x22, + 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0x43, 0x1e, 0x02, 0x8b, 0x22, 0x01, + 0x42, 0x2c, 0x0b, 0x8c, 0x22, 0x01, 0x42, 0x59, 0x00, 0x8d, 0x22, 0x41, + 0x4b, 0x8e, 0x92, 0x89, 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, + 0x80, 0x22, 0x81, 0x20, 0xa2, 0x16, 0xe5, 0x84, 0x22, 0x01, 0xe9, 0x85, + 0x22, 0x81, 0x09, 0xf5, 0x87, 0x22, 0xc1, 0x00, 0xd2, 0x88, 0x22, 0x41, + 0xe2, 0x86, 0x22, 0x41, 0xe9, 0x82, 0x22, 0x01, 0xf5, 0x83, 0x22, 0x41, + 0xe2, 0x81, 0x22, 0x41, 0x49, 0x93, 0x0b, 0x94, 0x23, 0x41, 0xe4, 0x7b, + 0x22, 0x01, 0xee, 0x7c, 0x22, 0x01, 0xf0, 0x7d, 0x22, 0x41, 0xe1, 0x3e, + 0x22, 0x81, 0xc2, 0x03, 0xe5, 0x48, 0x22, 0x81, 0xa4, 0x03, 0xe9, 0x4c, + 0x22, 0x81, 0xbc, 0x01, 0xf5, 0x61, 0x22, 0xc1, 0x00, 0x42, 0xef, 0x31, + 0x62, 0x22, 0x81, 0x9a, 0x01, 0xee, 0x63, 0x22, 0xc1, 0x00, 0x80, 0x57, + 0x42, 0x19, 0x4d, 0x6d, 0x22, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x0a, 0xda, + 0x9e, 0x0d, 0x4f, 0x5e, 0x68, 0x78, 0x22, 0xc1, 0x00, 0x42, 0x2d, 0x02, + 0x79, 0x22, 0x41, 0x46, 0xc3, 0xcf, 0x6e, 0x22, 0x01, 0x42, 0xea, 0x05, + 0x6f, 0x22, 0x01, 0x43, 0xcb, 0x86, 0x70, 0x22, 0x01, 0x43, 0x2a, 0x74, + 0x71, 0x22, 0x01, 0x48, 0x97, 0x63, 0x72, 0x22, 0x01, 0x44, 0xca, 0xe5, + 0x73, 0x22, 0x01, 0x42, 0x74, 0x00, 0x74, 0x22, 0x01, 0x42, 0xd2, 0x04, + 0x75, 0x22, 0x01, 0x45, 0x3c, 0xe0, 0x76, 0x22, 0x01, 0x42, 0xc0, 0x60, + 0x77, 0x22, 0x41, 0x4c, 0x3b, 0x86, 0x6b, 0x22, 0x81, 0x2f, 0x0c, 0x44, + 0x20, 0x0c, 0x48, 0x3b, 0x20, 0x6a, 0x22, 0x01, 0x44, 0x9a, 0x5a, 0x69, + 0x22, 0x41, 0x43, 0x1e, 0x1c, 0x64, 0x22, 0x01, 0x44, 0x91, 0x05, 0x65, + 0x22, 0x01, 0x43, 0xbd, 0x0b, 0x66, 0x22, 0x81, 0x06, 0x43, 0xd2, 0x7a, + 0x68, 0x22, 0x41, 0x59, 0x3a, 0x20, 0x67, 0x22, 0x41, 0x51, 0x8e, 0x51, + 0x6c, 0x22, 0x41, 0x80, 0x01, 0xff, 0x56, 0xe8, 0x31, 0xd5, 0x22, 0x01, + 0x56, 0x5d, 0x29, 0x93, 0x23, 0x01, 0x44, 0x9a, 0x5a, 0xd4, 0x22, 0x41, + 0x48, 0xfa, 0x8f, 0x4d, 0x22, 0x01, 0xd2, 0x4e, 0x22, 0x01, 0xed, 0x4f, + 0x22, 0x81, 0xc1, 0x01, 0xee, 0x8f, 0x23, 0x81, 0x06, 0x43, 0x70, 0x81, + 0x60, 0x22, 0x41, 0xd9, 0x90, 0x23, 0x01, 0x43, 0x01, 0xe9, 0x52, 0x22, + 0xc1, 0x00, 0x07, 0x27, 0x02, 0x01, 0xff, 0xa1, 0x92, 0x01, 0x43, 0xb5, + 0x1a, 0x91, 0x23, 0x01, 0x48, 0x91, 0xbb, 0x22, 0x25, 0x01, 0xa7, 0x6e, + 0x42, 0x49, 0x00, 0x25, 0x25, 0x01, 0x45, 0x26, 0xdd, 0x26, 0x25, 0x01, + 0x47, 0x91, 0xc8, 0x27, 0x25, 0x01, 0xad, 0x4e, 0xae, 0x42, 0x4c, 0x27, + 0x39, 0x29, 0x25, 0x01, 0x43, 0x93, 0x05, 0x5a, 0x22, 0x81, 0x1d, 0xf5, + 0x2a, 0x25, 0xc1, 0x00, 0x47, 0x5a, 0x6d, 0x2b, 0x25, 0x01, 0x4a, 0x80, + 0x9e, 0x5e, 0x22, 0x01, 0x44, 0x00, 0xc2, 0x2c, 0x25, 0x01, 0x42, 0xa4, + 0x02, 0x5f, 0x22, 0x41, 0x07, 0x70, 0x25, 0x01, 0xff, 0x43, 0x19, 0x00, + 0x5b, 0x22, 0x01, 0x42, 0xa4, 0x02, 0x5c, 0x22, 0xc1, 0x00, 0x49, 0xaa, + 0x47, 0x5d, 0x22, 0x41, 0xe5, 0x58, 0x22, 0x01, 0x42, 0x24, 0x0a, 0x59, + 0x22, 0x41, 0x43, 0x50, 0x03, 0x28, 0x25, 0x01, 0x50, 0x5e, 0x5c, 0x57, + 0x22, 0x41, 0xe9, 0x92, 0x23, 0x81, 0x0b, 0xb5, 0x01, 0xff, 0xe4, 0x56, + 0x22, 0x01, 0xec, 0x24, 0x25, 0x41, 0x42, 0xa4, 0x02, 0x23, 0x25, 0x41, + 0xee, 0x53, 0x22, 0x01, 0x42, 0xa4, 0x02, 0x54, 0x22, 0xc1, 0x00, 0x49, + 0xaa, 0x47, 0x55, 0x22, 0x41, 0x09, 0x05, 0x3e, 0x01, 0xff, 0x47, 0xa7, + 0x5a, 0x50, 0x22, 0x01, 0x50, 0xee, 0x5f, 0x51, 0x22, 0x41, 0x80, 0x01, + 0xff, 0x47, 0x67, 0x75, 0x4b, 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, + 0xe1, 0x49, 0x22, 0x01, 0x42, 0x2c, 0x0b, 0x4a, 0x22, 0x41, 0xd2, 0x3f, + 0x22, 0x01, 0xd4, 0x8e, 0x23, 0x01, 0x42, 0x24, 0x02, 0x40, 0x22, 0x81, + 0x0f, 0xed, 0x46, 0x22, 0xc1, 0x00, 0x48, 0x99, 0xb8, 0x45, 0x22, 0x01, + 0xd2, 0x47, 0x22, 0x41, 0x80, 0x04, 0xf2, 0x44, 0x22, 0x41, 0x48, 0xc2, + 0x20, 0x41, 0x22, 0x01, 0x4d, 0xcf, 0x7f, 0x43, 0x22, 0x01, 0x4e, 0x71, + 0x76, 0x42, 0x22, 0x41, 0xe1, 0x20, 0x22, 0x81, 0xad, 0x01, 0xe5, 0x28, + 0x22, 0x81, 0x9e, 0x01, 0xe9, 0x2a, 0x22, 0x81, 0x8e, 0x01, 0xf5, 0x2c, + 0x22, 0xc1, 0x00, 0x48, 0xc1, 0xb8, 0x2d, 0x22, 0x01, 0xe7, 0x2e, 0x22, + 0x81, 0x78, 0x44, 0xa2, 0xe6, 0x30, 0x22, 0x01, 0x44, 0x42, 0xe7, 0x31, + 0x22, 0x01, 0x42, 0xa4, 0x02, 0x32, 0x22, 0xc1, 0x00, 0x80, 0x2a, 0xd3, + 0x39, 0x22, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x44, 0x3d, 0x3b, 0x3d, 0x22, + 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, 0x3a, 0x22, 0x81, 0x0c, 0x42, + 0x00, 0x00, 0x3c, 0x22, 0x01, 0x42, 0x59, 0x00, 0x8d, 0x23, 0x41, 0x48, + 0xd1, 0xb8, 0x3b, 0x22, 0x41, 0x4d, 0xc8, 0x7a, 0x38, 0x22, 0x01, 0x49, + 0x56, 0xb4, 0x36, 0x22, 0x81, 0x15, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, + 0x33, 0x22, 0x01, 0x43, 0x2f, 0x58, 0x34, 0x22, 0x01, 0x42, 0x59, 0x00, + 0x35, 0x22, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x49, 0x88, 0xac, 0x37, + 0x22, 0x01, 0x42, 0x24, 0x02, 0x20, 0x25, 0x01, 0x43, 0xef, 0x3e, 0x21, + 0x25, 0x41, 0x45, 0x3c, 0x3b, 0x2f, 0x22, 0x41, 0x49, 0xcb, 0xab, 0x1f, + 0x25, 0x01, 0xee, 0x2b, 0x22, 0x41, 0xf3, 0x29, 0x22, 0xc1, 0x00, 0xe8, + 0x8c, 0x23, 0x41, 0x80, 0x17, 0xd2, 0x23, 0x22, 0x01, 0xe8, 0x24, 0x22, + 0x01, 0xf2, 0x25, 0x22, 0x01, 0x42, 0xa4, 0x02, 0x26, 0x22, 0xc1, 0x00, + 0xd2, 0x27, 0x22, 0x41, 0x44, 0x3d, 0x3b, 0x22, 0x22, 0x01, 0x4a, 0xff, + 0x3f, 0x21, 0x22, 0x41, 0xe1, 0xb7, 0x21, 0x81, 0xca, 0x02, 0xe9, 0xf7, + 0x21, 0x81, 0xb4, 0x02, 0xf5, 0xfb, 0x21, 0xc1, 0x00, 0x4a, 0x18, 0x95, + 0xfc, 0x21, 0x01, 0xd2, 0xfd, 0x21, 0x81, 0x3c, 0xd3, 0x16, 0x22, 0x01, + 0x43, 0x0c, 0x3e, 0x17, 0x22, 0x81, 0x1a, 0xe8, 0x1b, 0x22, 0x01, 0xec, + 0x1c, 0x22, 0x01, 0xed, 0x1d, 0x22, 0xc1, 0x00, 0x49, 0x8c, 0xab, 0x1e, + 0x22, 0xc1, 0x00, 0x4d, 0x1d, 0x1c, 0x1f, 0x22, 0x41, 0x80, 0x01, 0xff, + 0xaf, 0x06, 0x47, 0x67, 0x75, 0x1a, 0x22, 0x41, 0x4d, 0x2a, 0x80, 0x19, + 0x22, 0x01, 0x49, 0x53, 0xb7, 0x18, 0x22, 0x41, 0x80, 0x01, 0xff, 0x4c, + 0x2f, 0x86, 0x12, 0x22, 0x01, 0x4e, 0x5b, 0x71, 0x19, 0x25, 0x01, 0x4c, + 0xc3, 0x8b, 0x13, 0x22, 0x01, 0xb3, 0xbd, 0x01, 0xb4, 0x01, 0xff, 0x43, + 0x9b, 0x5a, 0x11, 0x22, 0x01, 0x05, 0x29, 0x02, 0x01, 0xff, 0x42, 0x13, + 0x00, 0xfe, 0x21, 0x01, 0x43, 0x38, 0x6a, 0xff, 0x21, 0x01, 0x44, 0x4a, + 0x0b, 0x1a, 0x25, 0x01, 0x44, 0x7f, 0x6e, 0x00, 0x22, 0x81, 0x86, 0x01, + 0x49, 0xa5, 0x5a, 0x02, 0x22, 0x01, 0xa8, 0x72, 0x42, 0x29, 0x02, 0x04, + 0x22, 0x01, 0xab, 0x53, 0x02, 0x74, 0x00, 0x43, 0x4a, 0x1a, 0xa5, 0x0b, + 0x22, 0x01, 0xae, 0x33, 0x43, 0x47, 0x0d, 0x1c, 0x25, 0x81, 0x26, 0xb3, + 0x0f, 0xb4, 0x01, 0xff, 0x43, 0x06, 0x40, 0x1e, 0x25, 0x01, 0x43, 0x2a, + 0x0d, 0x10, 0x22, 0x41, 0x42, 0x41, 0x00, 0x8b, 0x23, 0x01, 0xa9, 0x01, + 0xff, 0x49, 0xaa, 0x47, 0x0e, 0x22, 0x01, 0x4a, 0xbc, 0xa3, 0x0f, 0x22, + 0x41, 0x52, 0x2a, 0x39, 0x1d, 0x25, 0x41, 0xe5, 0x0c, 0x22, 0x01, 0xf5, + 0x0d, 0x22, 0x41, 0x49, 0xaa, 0x47, 0x09, 0x22, 0x01, 0x43, 0x24, 0x02, + 0x0a, 0x22, 0x41, 0x02, 0xe8, 0x01, 0x04, 0xe9, 0x08, 0x22, 0x41, 0xd2, + 0x05, 0x22, 0x01, 0xd3, 0x06, 0x22, 0xc1, 0x00, 0x49, 0xaa, 0x47, 0x07, + 0x22, 0x41, 0x42, 0x13, 0x00, 0x1b, 0x25, 0x01, 0x4b, 0x17, 0x95, 0x03, + 0x22, 0x41, 0x80, 0x01, 0xff, 0x48, 0xb1, 0xab, 0x8a, 0x23, 0x01, 0x44, + 0x9a, 0x5a, 0x01, 0x22, 0x41, 0x46, 0x68, 0x75, 0x15, 0x22, 0x81, 0x06, + 0x46, 0xdc, 0x04, 0x14, 0x22, 0x41, 0x4a, 0x18, 0x95, 0x89, 0x23, 0x41, + 0xec, 0xf8, 0x21, 0x01, 0x44, 0x42, 0xe6, 0xf9, 0x21, 0x01, 0x42, 0xa4, + 0x02, 0xfa, 0x21, 0x41, 0x02, 0x24, 0x02, 0xd0, 0x03, 0x44, 0x72, 0xe5, + 0xf1, 0x21, 0x01, 0x02, 0x2d, 0x0f, 0x1d, 0xec, 0xf2, 0x21, 0x81, 0x12, + 0xed, 0xf4, 0x21, 0xc1, 0x00, 0x4a, 0x28, 0x58, 0xf5, 0x21, 0xc1, 0x00, + 0x48, 0xe1, 0xb8, 0xf6, 0x21, 0x41, 0x4a, 0x15, 0x96, 0xf3, 0x21, 0x41, + 0x90, 0xe8, 0x02, 0x91, 0xd9, 0x02, 0x92, 0xad, 0x02, 0x93, 0x8c, 0x02, + 0x94, 0xae, 0x01, 0x43, 0xa1, 0xe8, 0xff, 0x24, 0x01, 0x96, 0x0f, 0x97, + 0x01, 0xff, 0x42, 0x5b, 0xac, 0x17, 0x25, 0x01, 0x42, 0xea, 0xe9, 0x18, + 0x25, 0x41, 0x42, 0xc6, 0x6e, 0x00, 0x25, 0x01, 0x42, 0xd8, 0xe9, 0x01, + 0x25, 0x81, 0x4a, 0x42, 0xe0, 0xe9, 0x0c, 0x25, 0x01, 0x42, 0xe8, 0xe9, + 0x0d, 0x25, 0xc1, 0x00, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0xbf, 0x9b, + 0x0e, 0x25, 0x01, 0x42, 0x24, 0x02, 0x0f, 0x25, 0x01, 0x43, 0xf5, 0x05, + 0x10, 0x25, 0x81, 0x1f, 0x42, 0xd2, 0x02, 0x12, 0x25, 0x01, 0x55, 0x27, + 0x39, 0x13, 0x25, 0x01, 0x4d, 0x21, 0x81, 0x14, 0x25, 0x01, 0xb5, 0x01, + 0xff, 0xe4, 0x15, 0x25, 0x01, 0x44, 0x00, 0xc2, 0x16, 0x25, 0x41, 0x45, + 0x3c, 0x3b, 0x11, 0x25, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0x50, + 0x03, 0x02, 0x25, 0x01, 0x43, 0x38, 0x6a, 0x03, 0x25, 0x01, 0x4e, 0x51, + 0x70, 0x04, 0x25, 0x01, 0x43, 0xad, 0xab, 0x05, 0x25, 0x01, 0x42, 0x74, + 0x00, 0x06, 0x25, 0x01, 0xb4, 0x11, 0xb5, 0x01, 0xff, 0xd2, 0x09, 0x25, + 0x01, 0xe4, 0x0a, 0x25, 0x01, 0x44, 0x00, 0xc2, 0x0b, 0x25, 0x41, 0x42, + 0x17, 0x00, 0x07, 0x25, 0x01, 0xe5, 0x08, 0x25, 0x41, 0x94, 0x29, 0x95, + 0x1f, 0x42, 0xff, 0xe8, 0xf9, 0x24, 0x01, 0x42, 0xe3, 0xe9, 0xfa, 0x24, + 0x01, 0x99, 0x01, 0xff, 0xd0, 0xfb, 0x24, 0x01, 0xd2, 0xfc, 0x24, 0x01, + 0xd3, 0xfd, 0x24, 0x01, 0xd5, 0xfe, 0x24, 0x41, 0xd0, 0xf7, 0x24, 0x01, + 0xd7, 0xf8, 0x24, 0x41, 0xd1, 0xf0, 0x24, 0x01, 0xd9, 0xf1, 0x24, 0xc1, + 0x00, 0x07, 0x27, 0x02, 0x01, 0xff, 0x42, 0x1e, 0x01, 0xf2, 0x24, 0x01, + 0x43, 0xf5, 0x05, 0xf3, 0x24, 0x01, 0x09, 0x27, 0x39, 0x06, 0x4a, 0xa2, + 0xa9, 0xf6, 0x24, 0x41, 0x43, 0x39, 0x39, 0xf4, 0x24, 0x01, 0x4c, 0x30, + 0x39, 0xf5, 0x24, 0x41, 0x94, 0x10, 0x98, 0x06, 0x42, 0xf2, 0xe9, 0xef, + 0x24, 0x41, 0xd3, 0xed, 0x24, 0x01, 0xd4, 0xee, 0x24, 0x41, 0xd3, 0xea, + 0x24, 0x01, 0xd7, 0xeb, 0x24, 0x01, 0xd8, 0xec, 0x24, 0x41, 0x91, 0x1f, + 0x92, 0x11, 0x42, 0xe2, 0xe9, 0xe7, 0x24, 0x01, 0x96, 0x01, 0xff, 0xd5, + 0xe8, 0x24, 0x01, 0xd6, 0xe9, 0x24, 0x41, 0xd0, 0xe4, 0x24, 0x01, 0xd5, + 0xe5, 0x24, 0x01, 0xd8, 0xe6, 0x24, 0x41, 0xd0, 0xe2, 0x24, 0x01, 0xd9, + 0xe3, 0x24, 0x41, 0x42, 0x8f, 0xe8, 0xe0, 0x24, 0x01, 0x42, 0xfc, 0xe8, + 0xe1, 0x24, 0x41, 0x42, 0x8e, 0xe8, 0xd5, 0x24, 0x01, 0x92, 0x2e, 0x42, + 0x8f, 0xe8, 0xd8, 0x24, 0x01, 0x95, 0x1e, 0x42, 0xad, 0xe8, 0xdb, 0x24, + 0x01, 0x54, 0x6d, 0x3b, 0xdc, 0x24, 0x01, 0x98, 0x06, 0x42, 0xf4, 0xe9, + 0xdf, 0x24, 0x41, 0xd0, 0xdd, 0x24, 0x01, 0x4e, 0xbb, 0x6e, 0xde, 0x24, + 0x41, 0xd0, 0xd9, 0x24, 0x01, 0xd1, 0xda, 0x24, 0x41, 0xd1, 0xd6, 0x24, + 0x01, 0xd5, 0xd7, 0x24, 0x41, 0xe2, 0xb8, 0x21, 0x81, 0x22, 0xf2, 0xec, + 0x21, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x44, 0x3d, 0x3b, 0xef, 0x21, 0x81, + 0x0d, 0x49, 0xd7, 0x9d, 0xed, 0x21, 0xc1, 0x00, 0x49, 0x01, 0xa1, 0xee, + 0x21, 0x41, 0x54, 0x31, 0x3b, 0xf0, 0x21, 0x41, 0x80, 0x01, 0xff, 0x47, + 0xdb, 0x04, 0xeb, 0x21, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, 0xb9, + 0x21, 0x81, 0xa0, 0x02, 0xa2, 0x93, 0x02, 0x43, 0x46, 0x16, 0xc2, 0x21, + 0x01, 0x42, 0x92, 0x01, 0xc3, 0x21, 0x01, 0xa7, 0xea, 0x01, 0xa8, 0xd8, + 0x01, 0xa9, 0xb9, 0x01, 0xab, 0x9b, 0x01, 0xac, 0x83, 0x01, 0xad, 0x70, + 0x42, 0xd2, 0x04, 0xdb, 0x21, 0x01, 0xb3, 0x3d, 0xb4, 0x29, 0xf5, 0xe5, + 0x21, 0x81, 0x06, 0x4a, 0x28, 0xab, 0xd4, 0x24, 0x41, 0x06, 0x70, 0x25, + 0x10, 0x4a, 0x80, 0x9e, 0xe8, 0x21, 0x01, 0xe4, 0xe9, 0x21, 0x01, 0x42, + 0xa4, 0x02, 0xea, 0x21, 0x41, 0xe1, 0xe6, 0x21, 0x01, 0x48, 0x59, 0x6d, + 0xe7, 0x21, 0x41, 0xa1, 0x06, 0x58, 0x6f, 0x25, 0xe4, 0x21, 0x41, 0xe7, + 0xe2, 0x21, 0x01, 0x42, 0x07, 0x40, 0xe3, 0x21, 0x41, 0xa8, 0x06, 0x42, + 0x9f, 0x03, 0xe1, 0x21, 0x41, 0x4a, 0x00, 0xa1, 0xdc, 0x21, 0x01, 0x0e, + 0x3b, 0x72, 0x0d, 0x42, 0xc0, 0x60, 0xdf, 0x21, 0xc1, 0x00, 0x4a, 0x9a, + 0x9d, 0xe0, 0x21, 0x41, 0x4a, 0xdc, 0xa6, 0xdd, 0x21, 0x01, 0x44, 0x9a, + 0x5a, 0xde, 0x21, 0x41, 0xe5, 0xd8, 0x21, 0x81, 0x06, 0x43, 0xd2, 0x7a, + 0xda, 0x21, 0x41, 0x48, 0x1c, 0xa5, 0xd9, 0x21, 0x41, 0x44, 0x23, 0x02, + 0xd4, 0x21, 0x01, 0x43, 0x4b, 0x0b, 0xd5, 0x21, 0x01, 0xf5, 0xd6, 0x21, + 0xc1, 0x00, 0xec, 0xd7, 0x21, 0x41, 0xe9, 0xcf, 0x21, 0x81, 0x12, 0xb5, + 0x01, 0xff, 0xd3, 0xd1, 0x21, 0x01, 0xec, 0xd2, 0x21, 0xc1, 0x00, 0x4f, + 0x63, 0x63, 0xd3, 0x21, 0x41, 0xee, 0xd0, 0x21, 0x41, 0x47, 0x98, 0x63, + 0xcb, 0x21, 0x01, 0xed, 0xcc, 0x21, 0xc1, 0x00, 0x06, 0x70, 0x25, 0x01, + 0xff, 0x42, 0x22, 0x00, 0xcd, 0x21, 0x01, 0x42, 0xe6, 0x13, 0xce, 0x21, + 0x41, 0xe1, 0xc8, 0x21, 0x81, 0x06, 0x4b, 0x22, 0x95, 0xca, 0x21, 0x41, + 0xec, 0xc9, 0x21, 0x41, 0xe1, 0xc4, 0x21, 0x81, 0x11, 0xe9, 0x88, 0x23, + 0x01, 0x42, 0x2c, 0x0b, 0xc6, 0x21, 0xc1, 0x00, 0x49, 0x9e, 0xab, 0xc7, + 0x21, 0x41, 0xf2, 0xc5, 0x21, 0x41, 0x42, 0xe8, 0x01, 0xc0, 0x21, 0x01, + 0xe9, 0xc1, 0x21, 0x41, 0x06, 0x70, 0x25, 0x0e, 0xec, 0xbd, 0x21, 0x01, + 0xee, 0xbe, 0x21, 0x01, 0x4c, 0x73, 0x8d, 0xbf, 0x21, 0x41, 0x4a, 0xb0, + 0xa0, 0xba, 0x21, 0x01, 0x43, 0x1e, 0x1c, 0xbb, 0x21, 0x01, 0x43, 0x81, + 0x1e, 0xbc, 0x21, 0x41, 0xe1, 0x57, 0x21, 0x81, 0x84, 0x01, 0x44, 0x7f, + 0x6e, 0x9f, 0x21, 0x01, 0xe9, 0xa0, 0x21, 0x81, 0x44, 0xf5, 0xaa, 0x21, + 0x81, 0x06, 0x45, 0x81, 0xe1, 0xb6, 0x21, 0x41, 0x69, 0x41, 0x03, 0xab, + 0x21, 0x01, 0xd3, 0xac, 0x21, 0x01, 0xd4, 0xad, 0x21, 0x81, 0x24, 0xd7, + 0xaf, 0x21, 0x01, 0xec, 0xb0, 0x21, 0x81, 0x15, 0xee, 0xb2, 0x21, 0x01, + 0xf2, 0xb3, 0x21, 0x81, 0x06, 0x44, 0xbe, 0x60, 0xb5, 0x21, 0x41, 0x4d, + 0xb3, 0x78, 0xb4, 0x21, 0x41, 0x45, 0x3c, 0x3b, 0xb1, 0x21, 0x41, 0x4d, + 0xcd, 0x78, 0xae, 0x21, 0x41, 0x07, 0x27, 0x02, 0x22, 0xe4, 0xa4, 0x21, + 0x01, 0xee, 0xa5, 0x21, 0x01, 0xb3, 0x01, 0xff, 0x42, 0x13, 0x00, 0xa6, + 0x21, 0x01, 0xe8, 0xa7, 0x21, 0x01, 0x43, 0x61, 0x68, 0xa8, 0x21, 0xc1, + 0x00, 0x4c, 0xd7, 0x83, 0xa9, 0x21, 0x41, 0x43, 0x38, 0x6a, 0xa1, 0x21, + 0x01, 0xf5, 0xa2, 0x21, 0xc1, 0x00, 0xe4, 0xa3, 0x21, 0x41, 0x07, 0x27, + 0x02, 0x6d, 0xd2, 0x8d, 0x21, 0x81, 0x62, 0xe2, 0x8f, 0x21, 0x01, 0xa4, + 0x45, 0xeb, 0x95, 0x21, 0x81, 0x3a, 0xec, 0x97, 0x21, 0x81, 0x26, 0xad, + 0x1c, 0x49, 0x71, 0xb4, 0x6f, 0x23, 0x01, 0x44, 0x1d, 0x02, 0x9c, 0x21, + 0xc1, 0x00, 0x80, 0x01, 0xff, 0x60, 0x22, 0x02, 0x9d, 0x21, 0x01, 0x6c, + 0x16, 0x02, 0x9e, 0x21, 0x41, 0xd2, 0x9a, 0x21, 0x01, 0xd4, 0x9b, 0x21, + 0x41, 0x80, 0x01, 0xff, 0x4c, 0x23, 0x86, 0x99, 0x21, 0x01, 0x49, 0x19, + 0x95, 0x98, 0x21, 0x41, 0x4f, 0x90, 0x63, 0x96, 0x21, 0x41, 0xd2, 0x90, + 0x21, 0x01, 0xd3, 0x91, 0x21, 0x01, 0xd4, 0x92, 0x21, 0x01, 0xd5, 0x93, + 0x21, 0xc1, 0x00, 0x4a, 0x90, 0x9d, 0x94, 0x21, 0x41, 0x4d, 0x72, 0x78, + 0x8e, 0x21, 0x41, 0xe1, 0x58, 0x21, 0x81, 0xdf, 0x02, 0xa2, 0xc4, 0x02, + 0xa5, 0xb5, 0x02, 0xa7, 0xe8, 0x01, 0x4d, 0x47, 0x03, 0x82, 0x23, 0x01, + 0xa9, 0xd5, 0x01, 0xab, 0xc0, 0x01, 0xac, 0xb0, 0x01, 0xad, 0x86, 0x01, + 0xae, 0x7a, 0xb0, 0x70, 0x42, 0x3d, 0x00, 0x7d, 0x21, 0x01, 0xb3, 0x3a, + 0xb4, 0x2e, 0xf5, 0x87, 0x21, 0x81, 0x06, 0x42, 0xf8, 0x2f, 0x8c, 0x21, + 0x41, 0x44, 0xe2, 0xe0, 0xd2, 0x24, 0x01, 0xd2, 0x88, 0x21, 0x01, 0xe4, + 0x89, 0x21, 0x01, 0x4c, 0xaf, 0x8a, 0x8a, 0x21, 0x01, 0xf2, 0xd3, 0x24, + 0x81, 0x06, 0x42, 0xa4, 0x02, 0x8b, 0x21, 0x41, 0xd2, 0x87, 0x23, 0x41, + 0x42, 0x17, 0x00, 0x86, 0x21, 0x01, 0xf5, 0x86, 0x23, 0x41, 0xe1, 0x7e, + 0x21, 0x81, 0x25, 0xa8, 0x0c, 0x42, 0x3f, 0x00, 0x84, 0x21, 0x01, 0x44, + 0xbe, 0xe7, 0x85, 0x21, 0x41, 0xe1, 0x80, 0x21, 0x01, 0xe5, 0x81, 0x21, + 0x01, 0x42, 0x03, 0x00, 0x82, 0x21, 0x01, 0xf5, 0x83, 0x21, 0xc1, 0x00, + 0xec, 0x85, 0x23, 0x41, 0xf2, 0x7f, 0x21, 0x41, 0xe1, 0x84, 0x23, 0x01, + 0xe9, 0x7c, 0x21, 0x41, 0xe5, 0x7a, 0x21, 0x01, 0x42, 0x24, 0x0a, 0x7b, + 0x21, 0x41, 0xe5, 0x74, 0x21, 0x81, 0x0b, 0xe9, 0x78, 0x21, 0xc1, 0x00, + 0x4b, 0xc3, 0x8f, 0x79, 0x21, 0x41, 0x06, 0x70, 0x25, 0x01, 0xff, 0x42, + 0x6c, 0x02, 0x75, 0x21, 0x01, 0x42, 0xf6, 0x05, 0x76, 0x21, 0x01, 0x42, + 0x77, 0x00, 0x77, 0x21, 0x41, 0xe9, 0x72, 0x21, 0x01, 0xf5, 0x73, 0x21, + 0xc1, 0x00, 0xed, 0x83, 0x23, 0x41, 0xe1, 0xd1, 0x24, 0x81, 0x09, 0xe9, + 0x70, 0x21, 0xc1, 0x00, 0xe4, 0x71, 0x21, 0x41, 0xeb, 0x6f, 0x21, 0x41, + 0x42, 0xf6, 0x05, 0x6d, 0x21, 0x01, 0xed, 0x6e, 0x21, 0x41, 0xe1, 0x62, + 0x21, 0x81, 0x30, 0xe9, 0x67, 0x21, 0x81, 0x0f, 0xf5, 0x6b, 0x21, 0xc1, + 0x00, 0xe4, 0x81, 0x23, 0x01, 0x42, 0x6c, 0x3b, 0x6c, 0x21, 0x41, 0x42, + 0x03, 0x3e, 0x68, 0x21, 0x01, 0x42, 0xa4, 0x02, 0x80, 0x23, 0xc1, 0x00, + 0x80, 0x01, 0xff, 0x4d, 0x87, 0x4c, 0x6a, 0x21, 0x01, 0x48, 0xa8, 0x51, + 0x69, 0x21, 0x41, 0xec, 0x63, 0x21, 0x01, 0x47, 0xa7, 0x5a, 0x64, 0x21, + 0x01, 0xf2, 0x65, 0x21, 0xc1, 0x00, 0x51, 0xb0, 0x51, 0x66, 0x21, 0x41, + 0x44, 0xe2, 0xa6, 0x60, 0x21, 0x01, 0x43, 0x51, 0x03, 0x61, 0x21, 0x41, + 0xa1, 0x08, 0xe9, 0x5f, 0x21, 0x01, 0xf5, 0xd0, 0x24, 0x41, 0xe4, 0x5c, + 0x21, 0x01, 0x43, 0x22, 0x02, 0x5d, 0x21, 0x01, 0xf2, 0x5e, 0x21, 0x41, + 0xe4, 0x59, 0x21, 0x81, 0x13, 0x44, 0x9e, 0xe6, 0x7e, 0x23, 0x01, 0x02, + 0xa4, 0x02, 0x01, 0xff, 0xd2, 0x5b, 0x21, 0x01, 0xd3, 0x7f, 0x23, 0x41, + 0x49, 0xa7, 0xab, 0x5a, 0x21, 0x41, 0x42, 0x19, 0x00, 0x40, 0x21, 0x01, + 0xe2, 0x41, 0x21, 0x01, 0x43, 0x80, 0x78, 0x42, 0x21, 0x81, 0x67, 0xe7, + 0x45, 0x21, 0x81, 0x42, 0xec, 0x4b, 0x21, 0x81, 0x33, 0xed, 0x4e, 0x21, + 0x81, 0x0e, 0xee, 0x54, 0x21, 0x01, 0xf2, 0x55, 0x21, 0x01, 0x42, 0xa4, + 0x02, 0x56, 0x21, 0x41, 0x80, 0x06, 0x42, 0x9e, 0x01, 0x53, 0x21, 0x41, + 0x4b, 0x83, 0x92, 0x50, 0x21, 0x01, 0x4b, 0xa8, 0x98, 0x51, 0x21, 0x01, + 0x47, 0xdb, 0x04, 0x52, 0x21, 0x01, 0x4a, 0xff, 0x3f, 0x4f, 0x21, 0x41, + 0x50, 0x9e, 0x5a, 0x4c, 0x21, 0x01, 0xd2, 0x4d, 0x21, 0x41, 0xe9, 0x46, + 0x21, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x43, 0x07, 0xe9, 0x47, 0x21, 0x01, + 0x44, 0x3d, 0x3b, 0x4a, 0x21, 0x01, 0x62, 0x14, 0x0b, 0x49, 0x21, 0x01, + 0x42, 0x0d, 0x00, 0x48, 0x21, 0x41, 0x0b, 0xad, 0x8f, 0x01, 0xff, 0x43, + 0xf2, 0x31, 0x43, 0x21, 0x01, 0x47, 0xdb, 0x04, 0x44, 0x21, 0x41, 0xe1, + 0x29, 0x21, 0x81, 0x7e, 0xe9, 0x2d, 0x21, 0x81, 0x3b, 0xf5, 0x37, 0x21, + 0xc1, 0x00, 0x42, 0x1e, 0x5b, 0x38, 0x21, 0x81, 0x0c, 0x42, 0x70, 0xe2, + 0x3e, 0x21, 0x01, 0x42, 0xa4, 0x02, 0x7d, 0x23, 0x41, 0x07, 0x27, 0x02, + 0x01, 0xff, 0x42, 0x1a, 0x00, 0x39, 0x21, 0x01, 0x43, 0x22, 0x00, 0x3a, + 0x21, 0x01, 0x46, 0x1b, 0x02, 0x3b, 0x21, 0x01, 0x44, 0x47, 0x8a, 0x3c, + 0x21, 0x01, 0x42, 0x2c, 0x0b, 0x3d, 0x21, 0x41, 0x07, 0x27, 0x02, 0x01, + 0xff, 0x43, 0x50, 0x03, 0x2e, 0x21, 0x81, 0x28, 0x43, 0x38, 0x6a, 0x30, + 0x21, 0x01, 0x44, 0x4a, 0x0b, 0x31, 0x21, 0x01, 0x43, 0x11, 0x1c, 0x32, + 0x21, 0x01, 0x43, 0x92, 0x03, 0x33, 0x21, 0x01, 0x43, 0x40, 0x20, 0x34, + 0x21, 0x01, 0x43, 0x93, 0x05, 0x35, 0x21, 0x01, 0xf5, 0x36, 0x21, 0x41, + 0x52, 0x41, 0x03, 0xcf, 0x24, 0x01, 0xd2, 0x2f, 0x21, 0x41, 0x80, 0x04, + 0xec, 0x2c, 0x21, 0x41, 0x44, 0x3d, 0x3b, 0x2b, 0x21, 0x01, 0x44, 0x9a, + 0x5a, 0x2a, 0x21, 0xc1, 0x00, 0x45, 0x3c, 0x3b, 0xce, 0x24, 0x41, 0xe1, + 0xb5, 0x20, 0x81, 0xcc, 0x02, 0xa5, 0xad, 0x02, 0xe9, 0x00, 0x21, 0x81, + 0x87, 0x01, 0xf5, 0x16, 0x21, 0xc1, 0x00, 0x4c, 0x8f, 0x83, 0x17, 0x21, + 0x01, 0xd2, 0x18, 0x21, 0x81, 0x4a, 0xe4, 0x1e, 0x21, 0x81, 0x25, 0xec, + 0x22, 0x21, 0x01, 0xed, 0x23, 0x21, 0x81, 0x16, 0xf2, 0x25, 0x21, 0xc1, + 0x00, 0xd7, 0x26, 0x21, 0x01, 0xb5, 0x01, 0xff, 0xee, 0x27, 0x21, 0x01, + 0x42, 0xa4, 0x02, 0x28, 0x21, 0x41, 0x4a, 0xd6, 0x9d, 0x24, 0x21, 0x41, + 0x80, 0x01, 0xff, 0x4e, 0x25, 0x74, 0x21, 0x21, 0x01, 0x54, 0xf5, 0x3f, + 0xcd, 0x24, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0x4a, 0xc6, 0x9e, 0x1f, + 0x21, 0x01, 0x43, 0x2f, 0x58, 0x20, 0x21, 0x41, 0x80, 0x01, 0xff, 0x44, + 0x3d, 0x3b, 0x1d, 0x21, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0x48, 0x97, + 0x63, 0xcc, 0x24, 0x01, 0x43, 0xef, 0x3e, 0x19, 0x21, 0x81, 0x0c, 0x43, + 0x40, 0x20, 0x1b, 0x21, 0x01, 0x4d, 0xfa, 0x80, 0x1c, 0x21, 0x41, 0x4f, + 0x90, 0x63, 0x1a, 0x21, 0x41, 0x80, 0x8a, 0x01, 0xd4, 0x04, 0x21, 0x81, + 0x76, 0x43, 0x80, 0x78, 0x07, 0x21, 0x01, 0xe7, 0x7c, 0x23, 0x01, 0xb2, + 0x37, 0xb3, 0x01, 0xff, 0x42, 0x13, 0x00, 0x10, 0x21, 0x01, 0xe8, 0x11, + 0x21, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4d, 0x87, 0x4c, 0x12, 0x21, 0x01, + 0xb4, 0x01, 0xff, 0x43, 0x9b, 0x5a, 0x15, 0x21, 0x01, 0x05, 0x29, 0x02, + 0x01, 0xff, 0x43, 0x38, 0x6a, 0x13, 0x21, 0x01, 0x52, 0x82, 0x4c, 0xcb, + 0x24, 0x01, 0x44, 0x05, 0x40, 0x14, 0x21, 0x41, 0xd2, 0x08, 0x21, 0x81, + 0x28, 0xd3, 0x0a, 0x21, 0xc1, 0x00, 0x07, 0x27, 0x02, 0x01, 0xff, 0x4a, + 0xbc, 0x9e, 0x0b, 0x21, 0x01, 0x49, 0xa5, 0x5a, 0x0c, 0x21, 0x01, 0x43, + 0xf5, 0x05, 0x0d, 0x21, 0x01, 0x4b, 0x11, 0x97, 0x0e, 0x21, 0x01, 0x42, + 0xc1, 0x08, 0x0f, 0x21, 0x41, 0x45, 0x3c, 0x3b, 0x09, 0x21, 0x41, 0x80, + 0x01, 0xff, 0x4c, 0x17, 0x86, 0x06, 0x21, 0x01, 0x48, 0xd1, 0xbf, 0x05, + 0x21, 0x41, 0x4b, 0x87, 0x4c, 0x03, 0x21, 0x01, 0x06, 0x28, 0x02, 0x01, + 0xff, 0xe5, 0x01, 0x21, 0x01, 0xf5, 0x02, 0x21, 0x41, 0x42, 0x71, 0xe2, + 0x7b, 0x23, 0x01, 0x45, 0x32, 0xe0, 0xfe, 0x20, 0xc1, 0x00, 0x07, 0x27, + 0x02, 0x01, 0xff, 0x43, 0x2f, 0x58, 0xff, 0x20, 0x01, 0xf5, 0xca, 0x24, + 0x41, 0x45, 0x3c, 0x3b, 0xb6, 0x20, 0x01, 0xd2, 0xb7, 0x20, 0x81, 0x64, + 0x42, 0x16, 0x00, 0xee, 0x20, 0x81, 0x4e, 0xe4, 0xf0, 0x20, 0x81, 0x43, + 0xec, 0xf2, 0x20, 0x81, 0x32, 0xed, 0xf5, 0x20, 0x01, 0xee, 0xf6, 0x20, + 0x81, 0x0f, 0xf2, 0xfb, 0x20, 0x81, 0x06, 0x44, 0x0b, 0x35, 0xfd, 0x20, + 0x41, 0xd3, 0xfc, 0x20, 0x41, 0xd2, 0xf7, 0x20, 0xc1, 0x00, 0x80, 0x01, + 0xff, 0x4d, 0xbb, 0x7a, 0xfa, 0x20, 0x01, 0x49, 0x4d, 0xb4, 0xf9, 0x20, + 0x01, 0x44, 0x9a, 0x5a, 0xf8, 0x20, 0x41, 0x5a, 0x10, 0x1c, 0xf3, 0x20, + 0x01, 0x42, 0x57, 0x00, 0xf4, 0x20, 0x41, 0x56, 0x14, 0x1c, 0xf1, 0x20, + 0x41, 0x80, 0x01, 0xff, 0x4d, 0xae, 0x7a, 0xef, 0x20, 0x01, 0x56, 0x5d, + 0x29, 0xc9, 0x24, 0x41, 0x80, 0x01, 0xff, 0x48, 0xc9, 0xbf, 0xed, 0x20, + 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xa1, 0xb0, 0x03, 0xa2, 0x8e, 0x03, + 0xa4, 0xd9, 0x02, 0xa5, 0xba, 0x02, 0xa7, 0x80, 0x02, 0xa8, 0xd6, 0x01, + 0xa9, 0xc7, 0x01, 0xab, 0x9c, 0x01, 0xac, 0x83, 0x01, 0xad, 0x71, 0xae, + 0x4c, 0x42, 0xc1, 0x08, 0xe2, 0x20, 0x01, 0xb3, 0x1c, 0x44, 0x05, 0x40, + 0xe9, 0x20, 0x01, 0xf5, 0xea, 0x20, 0x81, 0x06, 0x44, 0x4e, 0xe8, 0xc8, + 0x24, 0x41, 0xe4, 0xeb, 0x20, 0xc1, 0x00, 0x48, 0xd9, 0xb8, 0xec, 0x20, + 0x41, 0xa1, 0x1e, 0xa8, 0x06, 0x42, 0x9f, 0x03, 0xe8, 0x20, 0x41, 0xe5, + 0xe5, 0x20, 0x81, 0x0b, 0xa9, 0x01, 0xff, 0xe4, 0xe7, 0x20, 0x01, 0xed, + 0xc7, 0x24, 0x41, 0x49, 0xc2, 0xab, 0xe6, 0x20, 0x41, 0xec, 0xe3, 0x20, + 0x01, 0xf2, 0xe4, 0x20, 0x41, 0xe5, 0xc4, 0x24, 0x81, 0x0d, 0x42, 0x24, + 0x0a, 0xe0, 0x20, 0xc1, 0x00, 0x49, 0x3a, 0x20, 0xe1, 0x20, 0x41, 0x06, + 0x70, 0x25, 0x01, 0xff, 0x42, 0x75, 0x93, 0xc5, 0x24, 0x01, 0x42, 0xf6, + 0x05, 0xc6, 0x24, 0x41, 0x49, 0x1b, 0xa5, 0xde, 0x20, 0x01, 0xe9, 0xdf, + 0x20, 0x01, 0x43, 0xd2, 0x7a, 0xc3, 0x24, 0x41, 0xe1, 0xdd, 0x20, 0x81, + 0x06, 0x42, 0xfd, 0x6e, 0xc2, 0x24, 0x41, 0xed, 0xc0, 0x24, 0xc1, 0x00, + 0x4a, 0x28, 0x58, 0xc1, 0x24, 0x41, 0xa1, 0x1c, 0x42, 0x03, 0x00, 0xda, + 0x20, 0x81, 0x0f, 0xb5, 0x01, 0xff, 0x49, 0x64, 0xac, 0xdc, 0x20, 0x01, + 0x50, 0xbe, 0x60, 0xbf, 0x24, 0x41, 0x49, 0xb0, 0xab, 0xdb, 0x20, 0x41, + 0xeb, 0xd8, 0x20, 0x01, 0x44, 0x1d, 0x02, 0xd9, 0x20, 0x41, 0x47, 0x98, + 0x63, 0xd6, 0x20, 0x01, 0x53, 0xa0, 0x47, 0xd7, 0x20, 0x41, 0xa1, 0x0c, + 0x49, 0xa5, 0xb0, 0xd4, 0x20, 0x01, 0x43, 0x77, 0xe5, 0xd5, 0x20, 0x41, + 0x06, 0x70, 0x25, 0x0b, 0xec, 0xd2, 0x20, 0xc1, 0x00, 0x48, 0xb0, 0xab, + 0xd3, 0x20, 0x41, 0xe1, 0xbe, 0x24, 0x01, 0x4c, 0xfb, 0x89, 0xd1, 0x20, + 0x41, 0xe1, 0xbb, 0x24, 0x81, 0x16, 0xe9, 0xcd, 0x20, 0xc1, 0x00, 0xd4, + 0xce, 0x20, 0x81, 0x06, 0x4a, 0x22, 0xa7, 0xd0, 0x20, 0x41, 0x47, 0x70, + 0x25, 0xcf, 0x20, 0x41, 0x47, 0xa7, 0x5a, 0xcb, 0x20, 0x01, 0xf2, 0xcc, + 0x20, 0xc1, 0x00, 0x06, 0x70, 0x25, 0x01, 0xff, 0x42, 0x00, 0x00, 0xbc, + 0x24, 0x01, 0x42, 0xd2, 0x04, 0xbd, 0x24, 0x41, 0xec, 0xc7, 0x20, 0x81, + 0x11, 0xee, 0xc9, 0x20, 0x81, 0x06, 0x43, 0x72, 0x1f, 0xba, 0x24, 0x41, + 0x50, 0x9e, 0x5a, 0xca, 0x20, 0x41, 0x48, 0xb0, 0xab, 0xc8, 0x20, 0x41, + 0xe1, 0xc3, 0x20, 0x01, 0xe9, 0xc4, 0x20, 0x81, 0x18, 0xb5, 0x01, 0xff, + 0xe2, 0xc6, 0x20, 0x01, 0x08, 0x6d, 0x75, 0x01, 0xff, 0x48, 0x97, 0x63, + 0xb8, 0x24, 0x01, 0x46, 0x1b, 0x02, 0xb9, 0x24, 0x41, 0x02, 0xa0, 0x03, + 0x01, 0xff, 0x44, 0x3d, 0x3b, 0xb7, 0x24, 0x01, 0x49, 0xd7, 0x9d, 0xc5, + 0x20, 0x41, 0xa1, 0x0d, 0x42, 0x42, 0x00, 0xc1, 0x20, 0xc1, 0x00, 0x48, + 0xf9, 0xb4, 0xc2, 0x20, 0x41, 0xe4, 0xbf, 0x20, 0x01, 0x44, 0x01, 0x3e, + 0xb6, 0x24, 0x01, 0x49, 0xf8, 0xb4, 0xc0, 0x20, 0x41, 0x06, 0x70, 0x25, + 0x23, 0x50, 0x1e, 0x5b, 0xbb, 0x20, 0x01, 0xee, 0xbc, 0x20, 0x81, 0x12, + 0x42, 0xa4, 0x02, 0xbd, 0x20, 0xc1, 0x00, 0xd2, 0x7a, 0x23, 0xc1, 0x00, + 0x49, 0x95, 0xab, 0xbe, 0x20, 0x41, 0x50, 0x6e, 0x5a, 0x79, 0x23, 0x41, + 0x4a, 0xb0, 0xa0, 0xb8, 0x20, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x20, 0x01, + 0x43, 0xf5, 0x05, 0xba, 0x20, 0x41, 0x80, 0xe7, 0x02, 0xd2, 0x8d, 0x20, + 0x81, 0xac, 0x02, 0x43, 0x09, 0x05, 0x94, 0x20, 0x01, 0x43, 0xe4, 0xdc, + 0x95, 0x20, 0x01, 0xec, 0x96, 0x20, 0x01, 0xee, 0x97, 0x20, 0x81, 0xe9, + 0x01, 0xb2, 0xd3, 0x01, 0x43, 0x51, 0x03, 0xa0, 0x20, 0x81, 0xc5, 0x01, + 0x43, 0x58, 0x07, 0xa1, 0x20, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x0e, 0x67, + 0x75, 0x88, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, 0xa2, 0x20, 0x81, + 0x6d, 0x43, 0x38, 0x6a, 0xa6, 0x20, 0x01, 0x49, 0x51, 0x70, 0xa7, 0x20, + 0x81, 0x5a, 0x43, 0x2a, 0x74, 0x77, 0x23, 0x01, 0x42, 0x22, 0x00, 0xa9, + 0x20, 0x81, 0x47, 0x48, 0x97, 0x63, 0xab, 0x20, 0x01, 0xab, 0x2c, 0xac, + 0x17, 0xb3, 0x0b, 0xb5, 0x01, 0xff, 0xd2, 0xb3, 0x20, 0x01, 0xe4, 0xb4, + 0x20, 0x41, 0x42, 0xb0, 0x01, 0x78, 0x23, 0x01, 0xf5, 0xb5, 0x24, 0x41, + 0xe1, 0xaf, 0x20, 0x81, 0x08, 0xe9, 0xb1, 0x20, 0x01, 0xf5, 0xb2, 0x20, + 0x41, 0x4b, 0x14, 0x96, 0xb0, 0x20, 0x41, 0x45, 0x1c, 0x02, 0xac, 0x20, + 0x81, 0x06, 0x42, 0x3a, 0x39, 0xae, 0x20, 0x41, 0x48, 0xda, 0x04, 0xad, + 0x20, 0x41, 0x45, 0x3c, 0x3b, 0xaa, 0x20, 0x41, 0x45, 0x3c, 0x3b, 0xa8, + 0x20, 0x41, 0x49, 0xb0, 0xab, 0xa3, 0x20, 0x81, 0x04, 0xee, 0xa5, 0x20, + 0x41, 0x4a, 0x15, 0x96, 0xa4, 0x20, 0x41, 0x43, 0x50, 0x03, 0xad, 0x24, + 0x01, 0x42, 0x49, 0x00, 0xae, 0x24, 0x01, 0x48, 0x97, 0x63, 0xaf, 0x24, + 0x01, 0x42, 0x74, 0x00, 0xb0, 0x24, 0x81, 0x11, 0x42, 0x2a, 0x02, 0xb2, + 0x24, 0x81, 0x06, 0x42, 0x6f, 0x00, 0xb4, 0x24, 0x41, 0xf3, 0xb3, 0x24, + 0x41, 0xec, 0xb1, 0x24, 0x41, 0x4e, 0x75, 0x6e, 0xac, 0x24, 0x41, 0x42, + 0x92, 0x01, 0x9e, 0x20, 0x01, 0x43, 0xe3, 0xa6, 0x9f, 0x20, 0xc1, 0x00, + 0x42, 0x03, 0x5e, 0xab, 0x24, 0x41, 0x80, 0x01, 0xff, 0x4b, 0x78, 0x92, + 0x9b, 0x20, 0x01, 0x4b, 0x9d, 0x98, 0x9c, 0x20, 0x01, 0x47, 0xdb, 0x04, + 0x9d, 0x20, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0x44, 0xa5, 0x5a, 0x98, + 0x20, 0x81, 0x06, 0x42, 0x2a, 0x02, 0x9a, 0x20, 0x41, 0x45, 0x99, 0x5a, + 0x99, 0x20, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x51, 0x38, 0x52, 0x8e, + 0x20, 0x01, 0x43, 0x1e, 0x1c, 0x8f, 0x20, 0x01, 0x43, 0x2f, 0x58, 0xa9, + 0x24, 0x01, 0x42, 0x7d, 0x02, 0x90, 0x20, 0x01, 0x43, 0x47, 0x0d, 0xaa, + 0x24, 0x01, 0xb3, 0x04, 0xf5, 0x93, 0x20, 0x41, 0x42, 0x13, 0x00, 0x91, + 0x20, 0x01, 0x42, 0xb0, 0x01, 0x92, 0x20, 0x41, 0x53, 0x83, 0x46, 0x8c, + 0x20, 0x01, 0x49, 0x57, 0xb6, 0x8b, 0x20, 0x41, 0xe1, 0x55, 0x20, 0x81, + 0xe6, 0x02, 0xe9, 0x72, 0x20, 0x81, 0x9e, 0x02, 0xf5, 0x7a, 0x20, 0xc1, + 0x00, 0x80, 0x84, 0x02, 0xe2, 0x7e, 0x20, 0x81, 0xea, 0x01, 0xe7, 0x81, + 0x20, 0x81, 0x25, 0xe8, 0x83, 0x20, 0x01, 0xee, 0x84, 0x20, 0x81, 0x06, + 0x42, 0x03, 0x3e, 0x89, 0x20, 0x41, 0xd3, 0x85, 0x20, 0x81, 0x04, 0xd4, + 0x88, 0x20, 0x41, 0x45, 0x3c, 0x3b, 0x86, 0x20, 0xc1, 0x00, 0x45, 0x3c, + 0x3b, 0x87, 0x20, 0x41, 0x07, 0x27, 0x02, 0x06, 0x42, 0x2c, 0x0b, 0x82, + 0x20, 0x41, 0xa1, 0xa0, 0x01, 0xa4, 0x91, 0x01, 0x45, 0xe1, 0xa6, 0x92, + 0x24, 0x01, 0xa7, 0x74, 0xa8, 0x6a, 0x48, 0x97, 0x63, 0x99, 0x24, 0x01, + 0xab, 0x48, 0xac, 0x2d, 0xad, 0x1b, 0x42, 0xd2, 0x02, 0xa5, 0x24, 0x01, + 0x42, 0xeb, 0x04, 0xa6, 0x24, 0x01, 0xb3, 0x01, 0xff, 0x42, 0xb0, 0x01, + 0xa7, 0x24, 0x01, 0x46, 0x99, 0x63, 0xa8, 0x24, 0x41, 0x43, 0x50, 0x03, + 0xa2, 0x24, 0x01, 0x42, 0xed, 0x00, 0xa3, 0x24, 0x01, 0xe9, 0xa4, 0x24, + 0x41, 0xa1, 0x06, 0x4c, 0x7b, 0x8e, 0xa1, 0x24, 0x41, 0x45, 0x12, 0xdd, + 0x9e, 0x24, 0x01, 0xed, 0x9f, 0x24, 0xc1, 0x00, 0x4a, 0x28, 0x58, 0xa0, + 0x24, 0x41, 0x45, 0x1c, 0x02, 0x9a, 0x24, 0x01, 0xb5, 0x01, 0xff, 0xf2, + 0x9b, 0x24, 0x01, 0x44, 0xbe, 0x60, 0x9c, 0x24, 0xc1, 0x00, 0x4c, 0xc2, + 0x60, 0x9d, 0x24, 0x41, 0xe1, 0x97, 0x24, 0x01, 0xe9, 0x98, 0x24, 0x41, + 0xe1, 0x93, 0x24, 0x01, 0xe9, 0x94, 0x24, 0xc1, 0x00, 0x47, 0xd6, 0xca, + 0x95, 0x24, 0x01, 0x42, 0xa4, 0x02, 0x96, 0x24, 0x41, 0x42, 0x9e, 0x01, + 0x90, 0x24, 0x01, 0x42, 0x24, 0x0a, 0x91, 0x24, 0x41, 0x44, 0x9e, 0xe6, + 0x8d, 0x24, 0x01, 0x42, 0xa4, 0x02, 0x8e, 0x24, 0xc1, 0x00, 0x48, 0x15, + 0x15, 0x8f, 0x24, 0x41, 0x07, 0x27, 0x02, 0x04, 0xd2, 0x80, 0x20, 0x41, + 0x44, 0x7f, 0x6e, 0x7f, 0x20, 0x01, 0x43, 0x93, 0x05, 0x76, 0x23, 0x41, + 0x44, 0x3d, 0x3b, 0x7c, 0x20, 0x01, 0x47, 0x19, 0xca, 0x7b, 0x20, 0x01, + 0x47, 0x67, 0x75, 0x7d, 0x20, 0x41, 0xe2, 0x73, 0x20, 0x01, 0xed, 0x74, + 0x20, 0x81, 0x18, 0xee, 0x77, 0x20, 0x81, 0x0d, 0x42, 0xa4, 0x02, 0x79, + 0x20, 0xc1, 0x00, 0x49, 0x9a, 0x9d, 0x75, 0x23, 0x41, 0x53, 0x35, 0x42, + 0x78, 0x20, 0x41, 0x07, 0x27, 0x02, 0x0b, 0xd2, 0x76, 0x20, 0xc1, 0x00, + 0x49, 0x01, 0xac, 0x8c, 0x24, 0x41, 0x43, 0xf5, 0x05, 0x8a, 0x24, 0x01, + 0x43, 0x93, 0x05, 0x75, 0x20, 0x01, 0x45, 0xe1, 0xe0, 0x8b, 0x24, 0x41, + 0x4b, 0xfe, 0x3f, 0x88, 0x24, 0x01, 0xe7, 0x56, 0x20, 0x81, 0x14, 0xed, + 0x6e, 0x20, 0x01, 0xf2, 0x6f, 0x20, 0xc1, 0x00, 0xa1, 0x01, 0xff, 0xd3, + 0x70, 0x20, 0x01, 0xd4, 0x71, 0x20, 0x41, 0x80, 0x04, 0xd3, 0x74, 0x23, + 0x41, 0x0d, 0x5e, 0x68, 0x06, 0x49, 0x29, 0x58, 0x89, 0x24, 0x41, 0xa1, + 0x89, 0x01, 0xa2, 0x7d, 0xa7, 0x5f, 0x42, 0x22, 0x00, 0x60, 0x20, 0x01, + 0x42, 0x46, 0x00, 0x61, 0x20, 0x81, 0x4c, 0x43, 0xef, 0x3e, 0x63, 0x20, + 0x01, 0xac, 0x31, 0x42, 0xd2, 0x04, 0x68, 0x20, 0x01, 0x4c, 0x27, 0x39, + 0x69, 0x20, 0x01, 0x42, 0xdb, 0x02, 0x6a, 0x20, 0x01, 0x44, 0x05, 0x40, + 0x6b, 0x20, 0x01, 0xb5, 0x01, 0xff, 0x07, 0xc1, 0x60, 0x06, 0x42, 0xa4, + 0x02, 0x6d, 0x20, 0x41, 0x44, 0x1e, 0xe5, 0x6c, 0x20, 0x01, 0x44, 0x91, + 0x05, 0x73, 0x23, 0x41, 0xe1, 0x64, 0x20, 0x01, 0xf5, 0x65, 0x20, 0xc1, + 0x00, 0x4b, 0xb8, 0x8f, 0x66, 0x20, 0x01, 0xed, 0x67, 0x20, 0x41, 0x48, + 0x33, 0x39, 0x62, 0x20, 0x41, 0xe1, 0x5b, 0x20, 0x81, 0x11, 0xe9, 0x5d, + 0x20, 0x81, 0x06, 0x42, 0x2c, 0x0b, 0x5f, 0x20, 0x41, 0x42, 0x03, 0x3e, + 0x5e, 0x20, 0x41, 0x4a, 0xb8, 0x8f, 0x5c, 0x20, 0x41, 0x44, 0x07, 0xda, + 0x59, 0x20, 0x01, 0xe9, 0x5a, 0x20, 0x41, 0x4a, 0xb8, 0x8f, 0x57, 0x20, + 0x01, 0x43, 0xb9, 0x00, 0x58, 0x20, 0x41, 0xe1, 0x40, 0x20, 0x81, 0x54, + 0xe9, 0x49, 0x20, 0x81, 0x3a, 0xf5, 0x4d, 0x20, 0xc1, 0x00, 0x80, 0x16, + 0x43, 0x2e, 0x74, 0x51, 0x20, 0x81, 0x09, 0xf2, 0x53, 0x20, 0xc1, 0x00, + 0xd2, 0x54, 0x20, 0x41, 0x4b, 0xa2, 0x8f, 0x52, 0x20, 0x41, 0x4b, 0x6d, + 0x92, 0x50, 0x20, 0x01, 0x08, 0xc1, 0xbf, 0x01, 0xff, 0x42, 0x5c, 0x00, + 0x4e, 0x20, 0x01, 0x49, 0x4e, 0xb6, 0x87, 0x24, 0x01, 0x42, 0x24, 0x0a, + 0x4f, 0x20, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, 0x4a, 0x20, 0x01, + 0x43, 0x1e, 0x1c, 0x4b, 0x20, 0x01, 0x48, 0x97, 0x63, 0x4c, 0x20, 0x41, + 0xe4, 0x41, 0x20, 0x81, 0x40, 0x42, 0x00, 0xea, 0x42, 0x20, 0x01, 0x44, + 0x01, 0x3e, 0x43, 0x20, 0x81, 0x1c, 0xec, 0x44, 0x20, 0x81, 0x0b, 0xf2, + 0x47, 0x20, 0xc1, 0x00, 0x42, 0x7d, 0x78, 0x48, 0x20, 0x41, 0x49, 0x83, + 0xab, 0x45, 0x20, 0x01, 0x42, 0x23, 0x02, 0x46, 0x20, 0x41, 0x07, 0x27, + 0x02, 0x01, 0xff, 0x43, 0xda, 0x9e, 0x84, 0x24, 0x01, 0x42, 0xd2, 0x02, + 0x85, 0x24, 0x01, 0x42, 0x59, 0x00, 0x86, 0x24, 0x41, 0x50, 0x8e, 0x5a, + 0x83, 0x24, 0x41, 0x07, 0x27, 0x02, 0x9d, 0x03, 0xd2, 0x09, 0x20, 0x01, + 0xe2, 0x0a, 0x20, 0x81, 0x83, 0x02, 0xe4, 0x1c, 0x20, 0x81, 0xf7, 0x01, + 0xeb, 0x1d, 0x20, 0x81, 0xe0, 0x01, 0xec, 0x20, 0x20, 0x81, 0x9a, 0x01, + 0x43, 0xb9, 0x00, 0x2b, 0x20, 0x81, 0x81, 0x01, 0xee, 0x2d, 0x20, 0x81, + 0x58, 0x43, 0x82, 0x11, 0x33, 0x20, 0x01, 0xb2, 0x3d, 0xb3, 0x01, 0xff, + 0x43, 0xce, 0xe8, 0x37, 0x20, 0x01, 0xe8, 0x38, 0x20, 0xc1, 0x00, 0x80, + 0x0a, 0xd2, 0x3e, 0x20, 0x01, 0x43, 0x24, 0x02, 0x3f, 0x20, 0x41, 0x49, + 0x73, 0x9d, 0x3a, 0x20, 0x01, 0x09, 0x1a, 0x0f, 0x06, 0x49, 0x76, 0x8d, + 0x39, 0x20, 0x41, 0x48, 0x1a, 0x0f, 0x3c, 0x20, 0x81, 0x06, 0x61, 0x29, + 0x0d, 0x3b, 0x20, 0x41, 0x5f, 0x0c, 0x0f, 0x3d, 0x20, 0x41, 0x42, 0xe8, + 0x01, 0x34, 0x20, 0x81, 0x06, 0x43, 0x06, 0x96, 0x36, 0x20, 0x41, 0x4a, + 0x28, 0x58, 0x35, 0x20, 0x41, 0x80, 0x06, 0x43, 0x93, 0x05, 0x32, 0x20, + 0x41, 0x47, 0x12, 0xca, 0x2e, 0x20, 0x01, 0x0a, 0xe6, 0xa6, 0x06, 0x4b, + 0x3c, 0x9b, 0x2f, 0x20, 0x41, 0x55, 0x12, 0x39, 0x30, 0x20, 0x01, 0x47, + 0xdb, 0x04, 0x31, 0x20, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0x52, + 0xe9, 0x72, 0x23, 0x01, 0x43, 0x93, 0x05, 0x2c, 0x20, 0x41, 0x07, 0x27, + 0x02, 0x0c, 0x42, 0x1a, 0x00, 0x29, 0x20, 0x01, 0x43, 0xaf, 0x38, 0x2a, + 0x20, 0x41, 0x42, 0x13, 0x00, 0x21, 0x20, 0x01, 0x44, 0xae, 0xe4, 0x22, + 0x20, 0x01, 0x44, 0xfa, 0x3f, 0x23, 0x20, 0x01, 0x42, 0x22, 0x00, 0x24, + 0x20, 0x01, 0xab, 0x0c, 0x43, 0x93, 0x05, 0x27, 0x20, 0x01, 0x43, 0xd2, + 0x7a, 0x28, 0x20, 0x41, 0x43, 0xcb, 0xe5, 0x25, 0x20, 0x01, 0xe9, 0x26, + 0x20, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x45, 0xe1, 0xa6, 0x1e, 0x20, + 0x01, 0x4f, 0x5a, 0x6c, 0x1f, 0x20, 0x41, 0x4b, 0xfa, 0x8f, 0x82, 0x24, + 0x41, 0x80, 0x2c, 0xd2, 0x16, 0x20, 0xc1, 0x00, 0x07, 0x27, 0x02, 0x01, + 0xff, 0xe1, 0x71, 0x23, 0x01, 0x45, 0x06, 0xda, 0x17, 0x20, 0x01, 0x49, + 0xa5, 0x5a, 0x18, 0x20, 0x01, 0x4a, 0x1a, 0xa5, 0x19, 0x20, 0x01, 0x44, + 0xb6, 0x51, 0x1a, 0x20, 0x01, 0x44, 0x05, 0x40, 0x1b, 0x20, 0x41, 0x44, + 0x3d, 0x3b, 0x15, 0x20, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0x44, 0x50, + 0x03, 0x0b, 0x20, 0x01, 0x49, 0x51, 0x70, 0x0c, 0x20, 0x01, 0x02, 0x24, + 0x02, 0x3d, 0x42, 0x22, 0x00, 0x0f, 0x20, 0x01, 0xa9, 0x29, 0x45, 0x22, + 0x02, 0x12, 0x20, 0x01, 0x43, 0x40, 0x20, 0x70, 0x23, 0x81, 0x16, 0x02, + 0xa4, 0x02, 0x06, 0x4f, 0x59, 0x6d, 0x14, 0x20, 0x41, 0x43, 0x00, 0x55, + 0x13, 0x20, 0x01, 0x42, 0xc0, 0x60, 0x81, 0x24, 0x41, 0x45, 0x99, 0x5a, + 0x80, 0x24, 0x41, 0x47, 0x98, 0x63, 0x10, 0x20, 0x01, 0x43, 0x25, 0x12, + 0x11, 0x20, 0x41, 0xec, 0x0d, 0x20, 0x01, 0x47, 0xa7, 0x5a, 0x0e, 0x20, + 0x41, 0xe1, 0x01, 0x20, 0x01, 0x43, 0x38, 0x6a, 0x02, 0x20, 0x01, 0x49, + 0xa5, 0x5a, 0x03, 0x20, 0x01, 0x42, 0x22, 0x00, 0x04, 0x20, 0x01, 0x43, + 0xf5, 0x05, 0x05, 0x20, 0x01, 0x4a, 0x37, 0x3b, 0x06, 0x20, 0x01, 0x44, + 0xd1, 0x7a, 0x07, 0x20, 0x01, 0x43, 0x70, 0x81, 0x08, 0x20, 0x41, 0x09, + 0x2e, 0x23, 0x0c, 0x59, 0x92, 0x22, 0x70, 0x24, 0x01, 0x4e, 0x7b, 0x77, + 0x71, 0x24, 0x41, 0x45, 0x69, 0x37, 0x72, 0x24, 0x01, 0x49, 0xdd, 0xb4, + 0x74, 0x24, 0x01, 0x48, 0xc9, 0xc1, 0x73, 0x24, 0x41, 0xa5, 0xb5, 0x05, + 0xa6, 0xf6, 0x03, 0x02, 0xd2, 0x02, 0xa4, 0x03, 0xaf, 0xb7, 0x02, 0xb3, + 0xb5, 0x01, 0xb4, 0x01, 0xff, 0x05, 0x25, 0x01, 0x4f, 0x03, 0xc2, 0x06, + 0x01, 0xff, 0x43, 0x50, 0x03, 0x00, 0x24, 0x81, 0x3d, 0xa2, 0x2f, 0x45, + 0x87, 0xdb, 0x59, 0x24, 0x01, 0x04, 0x72, 0x65, 0x1d, 0x04, 0x3a, 0xa8, + 0x11, 0x07, 0x31, 0x9b, 0x01, 0xff, 0x44, 0x4a, 0x0b, 0x5b, 0x24, 0x01, + 0x4e, 0x20, 0x59, 0x5e, 0x24, 0x41, 0xd2, 0x23, 0x24, 0x01, 0xf5, 0x2d, + 0x24, 0x41, 0xd2, 0x16, 0x24, 0x01, 0xf5, 0x1f, 0x24, 0x41, 0x43, 0xa6, + 0x5a, 0x50, 0x24, 0x01, 0x43, 0x3a, 0xa2, 0x35, 0x24, 0x41, 0x45, 0x99, + 0x5a, 0x4a, 0x24, 0x41, 0x43, 0x50, 0x03, 0x01, 0x24, 0x81, 0x52, 0xa2, + 0x3d, 0x44, 0x4a, 0x0b, 0x08, 0x24, 0x01, 0x04, 0x72, 0x65, 0x2b, 0x04, + 0x3a, 0xa8, 0x11, 0x10, 0x0e, 0x62, 0x01, 0xff, 0x42, 0xd6, 0xe9, 0x3a, + 0x24, 0x01, 0x42, 0x60, 0xce, 0x3b, 0x24, 0x41, 0xd2, 0x24, 0x24, 0x81, + 0x0b, 0xf5, 0x2e, 0x24, 0xc1, 0x00, 0x4d, 0xcd, 0x78, 0x2f, 0x24, 0x41, + 0x4d, 0xcd, 0x78, 0x25, 0x24, 0x41, 0xd2, 0x17, 0x24, 0x01, 0xf5, 0x20, + 0x24, 0x41, 0x43, 0xa6, 0x5a, 0x51, 0x24, 0x01, 0x43, 0x3a, 0xa2, 0x36, + 0x24, 0xc1, 0x00, 0x4d, 0xcd, 0x78, 0x37, 0x24, 0x41, 0x45, 0x99, 0x5a, + 0x4b, 0x24, 0x41, 0x05, 0xee, 0x1f, 0x45, 0x14, 0x01, 0x3e, 0x35, 0x03, + 0x6c, 0x4d, 0x01, 0xff, 0x43, 0x50, 0x03, 0x04, 0x24, 0x81, 0x23, 0x44, + 0x4a, 0x0b, 0x0b, 0x24, 0x01, 0x45, 0xff, 0xdb, 0x1a, 0x24, 0x01, 0x45, + 0x19, 0xe0, 0x28, 0x24, 0x01, 0xf5, 0x11, 0x24, 0x81, 0x06, 0x51, 0x20, + 0x59, 0x40, 0x24, 0x41, 0x4d, 0xcd, 0x78, 0x6b, 0x24, 0x41, 0x45, 0x99, + 0x5a, 0x4e, 0x24, 0x41, 0x44, 0x4a, 0x0b, 0x32, 0x24, 0x01, 0x43, 0x25, + 0x12, 0x33, 0x24, 0x41, 0x43, 0x50, 0x03, 0x05, 0x24, 0x01, 0x44, 0x4a, + 0x0b, 0x0c, 0x24, 0x01, 0x45, 0xff, 0xdb, 0x1b, 0x24, 0x01, 0x45, 0x19, + 0xe0, 0x29, 0x24, 0x01, 0xf5, 0x12, 0x24, 0x81, 0x13, 0x11, 0x31, 0x59, + 0x01, 0xff, 0x80, 0x04, 0xd3, 0x41, 0x24, 0x41, 0xe1, 0x42, 0x24, 0x01, + 0xe2, 0x43, 0x24, 0x41, 0x4d, 0xcd, 0x78, 0x6c, 0x24, 0x41, 0x10, 0x3e, + 0x5e, 0x5a, 0x03, 0xf2, 0x07, 0x01, 0xff, 0xa2, 0x47, 0xa5, 0x39, 0x04, + 0x72, 0x65, 0x2d, 0x48, 0xf1, 0xbc, 0x64, 0x24, 0x01, 0x08, 0x10, 0x1b, + 0x17, 0x45, 0x23, 0xe0, 0x2c, 0x24, 0x01, 0x06, 0xcc, 0x0e, 0x01, 0xff, + 0x44, 0x4a, 0x0b, 0x5a, 0x24, 0x01, 0x4e, 0x20, 0x59, 0x5d, 0x24, 0x41, + 0x43, 0x50, 0x03, 0x60, 0x24, 0x01, 0x43, 0xfe, 0x9b, 0x63, 0x24, 0x41, + 0xd2, 0x15, 0x24, 0x01, 0xf5, 0x1e, 0x24, 0x41, 0x49, 0xe4, 0xb0, 0x5f, + 0x24, 0x01, 0x44, 0x88, 0xdb, 0x58, 0x24, 0x41, 0x43, 0xa6, 0x5a, 0x4f, + 0x24, 0x01, 0x43, 0x3a, 0xa2, 0x34, 0x24, 0x41, 0x47, 0x2a, 0x01, 0x62, + 0x24, 0x01, 0x45, 0x69, 0xd5, 0x61, 0x24, 0x41, 0x04, 0x16, 0xe5, 0x3d, + 0x03, 0xf2, 0x07, 0x01, 0xff, 0x43, 0x50, 0x03, 0x07, 0x24, 0x01, 0x44, + 0x4a, 0x0b, 0x0e, 0x24, 0x01, 0x45, 0xff, 0xdb, 0x1d, 0x24, 0x01, 0x45, + 0x19, 0xe0, 0x2b, 0x24, 0x01, 0xf5, 0x14, 0x24, 0x81, 0x15, 0x53, 0xe3, + 0x48, 0x46, 0x24, 0xc1, 0x00, 0x42, 0x19, 0x00, 0x49, 0x24, 0x01, 0xd3, + 0x47, 0x24, 0x01, 0xd4, 0x48, 0x24, 0x41, 0x4d, 0xcd, 0x78, 0x6e, 0x24, + 0x41, 0x43, 0x00, 0x55, 0x57, 0x24, 0x01, 0x43, 0x25, 0x12, 0x56, 0x24, + 0x41, 0x04, 0xd7, 0x04, 0x65, 0x04, 0xfb, 0x05, 0x01, 0xff, 0x43, 0x50, + 0x03, 0x02, 0x24, 0x81, 0x53, 0xa2, 0x3e, 0x44, 0x4a, 0x0b, 0x09, 0x24, + 0x01, 0x04, 0x72, 0x65, 0x2c, 0x04, 0x3a, 0xa8, 0x20, 0xf5, 0x0f, 0x24, + 0x81, 0x15, 0x52, 0xba, 0x50, 0x3c, 0x24, 0xc1, 0x00, 0x80, 0x04, 0xd4, + 0x3d, 0x24, 0x41, 0xe1, 0x3e, 0x24, 0x01, 0xe2, 0x3f, 0x24, 0x41, 0x4d, + 0xcd, 0x78, 0x69, 0x24, 0x41, 0xd2, 0x26, 0x24, 0x01, 0xf5, 0x30, 0x24, + 0x41, 0xd2, 0x18, 0x24, 0x01, 0xf5, 0x21, 0x24, 0x41, 0x43, 0xa6, 0x5a, + 0x52, 0x24, 0x81, 0x06, 0x43, 0x3a, 0xa2, 0x38, 0x24, 0x41, 0x4d, 0xcd, + 0x78, 0x53, 0x24, 0x41, 0x45, 0x99, 0x5a, 0x4c, 0x24, 0x41, 0x43, 0x50, + 0x03, 0x03, 0x24, 0x81, 0x46, 0xa2, 0x31, 0x44, 0x4a, 0x0b, 0x0a, 0x24, + 0x01, 0x04, 0x72, 0x65, 0x1f, 0xb3, 0x0b, 0xf5, 0x10, 0x24, 0xc1, 0x00, + 0x4d, 0xcd, 0x78, 0x6a, 0x24, 0x41, 0x03, 0x95, 0x04, 0x06, 0x4a, 0xa8, + 0xa3, 0x5c, 0x24, 0x41, 0xd2, 0x27, 0x24, 0x01, 0xf5, 0x31, 0x24, 0x41, + 0xd2, 0x19, 0x24, 0x01, 0xf5, 0x22, 0x24, 0x41, 0x43, 0xa6, 0x5a, 0x54, + 0x24, 0x81, 0x06, 0x43, 0x3a, 0xa2, 0x39, 0x24, 0x41, 0x4d, 0xcd, 0x78, + 0x55, 0x24, 0x41, 0x45, 0x99, 0x5a, 0x4d, 0x24, 0x41, 0x05, 0xc9, 0x00, + 0x1f, 0x07, 0x98, 0xc8, 0x01, 0xff, 0xa6, 0x0c, 0x49, 0xea, 0xb3, 0x65, + 0x24, 0x01, 0x4a, 0x84, 0xa9, 0x66, 0x24, 0x41, 0x44, 0xe3, 0x47, 0x68, + 0x24, 0x01, 0x44, 0x4d, 0x4c, 0x67, 0x24, 0x41, 0x43, 0x50, 0x03, 0x06, + 0x24, 0x01, 0x44, 0x4a, 0x0b, 0x0d, 0x24, 0x01, 0x45, 0xff, 0xdb, 0x1c, + 0x24, 0x01, 0x45, 0x19, 0xe0, 0x2a, 0x24, 0x01, 0xf5, 0x13, 0x24, 0x81, + 0x0b, 0x51, 0x42, 0x59, 0x44, 0x24, 0xc1, 0x00, 0xd3, 0x45, 0x24, 0x41, + 0x4d, 0xcd, 0x78, 0x6d, 0x24, 0x41, 0x42, 0x5c, 0x00, 0x80, 0xf9, 0x01, + 0xa5, 0xa1, 0x01, 0x45, 0x35, 0x72, 0x97, 0xf9, 0x81, 0x93, 0x01, 0xaf, + 0x27, 0xb5, 0x19, 0xb9, 0x01, 0xff, 0x04, 0xa1, 0x01, 0x06, 0x49, 0xf4, + 0xb5, 0x2e, 0xf5, 0x41, 0x48, 0xfa, 0x1c, 0x3f, 0xf6, 0x01, 0x44, 0xed, + 0x06, 0x22, 0xf6, 0x41, 0x43, 0x48, 0x1f, 0x7c, 0xfa, 0x01, 0x4a, 0x14, + 0xab, 0xa2, 0x20, 0x40, 0x46, 0x83, 0xd0, 0x0a, 0xf4, 0x01, 0x46, 0xc3, + 0xd2, 0x50, 0xf9, 0x01, 0x02, 0xee, 0x00, 0x06, 0x42, 0xa7, 0x01, 0x51, + 0xf4, 0x41, 0x80, 0x1c, 0x03, 0x05, 0x00, 0x06, 0x49, 0x50, 0xb1, 0xcc, + 0x26, 0x40, 0x45, 0xc8, 0xdb, 0x8c, 0xf3, 0x01, 0x67, 0xd2, 0x04, 0x8a, + 0xf1, 0x01, 0x46, 0xc3, 0xd5, 0x94, 0x26, 0x40, 0x44, 0xb9, 0x00, 0x4c, + 0x27, 0x00, 0x03, 0xf4, 0x01, 0x20, 0xb0, 0x01, 0xff, 0x0a, 0x98, 0x9f, + 0x0d, 0x45, 0xc8, 0xd4, 0x42, 0xf5, 0xc1, 0x00, 0x57, 0x73, 0x29, 0x41, + 0xf5, 0x41, 0x4d, 0xe1, 0x7d, 0x51, 0x2e, 0x00, 0x4e, 0x05, 0x75, 0x50, + 0x2e, 0x40, 0x49, 0xa1, 0xb1, 0x29, 0x26, 0x00, 0x48, 0x29, 0xbe, 0x28, + 0x26, 0x40, 0x4d, 0x58, 0x78, 0xcf, 0xf3, 0x41, 0x48, 0x99, 0xbb, 0xb3, + 0xf4, 0x01, 0x4a, 0x88, 0x3c, 0x19, 0xf3, 0x41, 0x42, 0x8a, 0x00, 0xe5, + 0xf9, 0x01, 0xa3, 0xb1, 0x23, 0x44, 0xea, 0xe4, 0xb0, 0x26, 0x00, 0x42, + 0x9e, 0x01, 0x99, 0xfa, 0x01, 0xac, 0x86, 0x23, 0xad, 0xbd, 0x0c, 0xae, + 0xad, 0x0b, 0x02, 0x5a, 0x04, 0x95, 0x0b, 0xb0, 0xcb, 0x01, 0xb2, 0xb6, + 0x01, 0xb5, 0x0b, 0xf7, 0x04, 0xf4, 0xc1, 0x00, 0x45, 0xec, 0x06, 0x2e, + 0xf4, 0x41, 0x4b, 0x20, 0x92, 0xcb, 0xf6, 0x01, 0x02, 0x11, 0x00, 0x06, + 0x4e, 0x6b, 0x74, 0x91, 0xf4, 0x41, 0x02, 0x33, 0x00, 0x88, 0x01, 0x08, + 0x61, 0xbd, 0x01, 0xff, 0x0b, 0x05, 0x9b, 0x42, 0x0b, 0x02, 0x9c, 0x01, + 0xff, 0x45, 0xd1, 0x09, 0x67, 0xd3, 0x01, 0xa6, 0x29, 0x44, 0xb8, 0x27, + 0x68, 0xd3, 0x01, 0x43, 0xcd, 0x09, 0x60, 0xd3, 0x01, 0xb3, 0x0f, 0xb4, + 0x01, 0xff, 0x44, 0x25, 0x01, 0x62, 0xd3, 0x01, 0x42, 0x15, 0x02, 0x61, + 0xd3, 0x41, 0x44, 0x96, 0x1b, 0x66, 0xd3, 0x01, 0x42, 0x30, 0x27, 0x65, + 0xd3, 0x41, 0x43, 0xd7, 0x04, 0x64, 0xd3, 0x01, 0x43, 0xfb, 0x05, 0x63, + 0xd3, 0x41, 0x45, 0xd1, 0x09, 0x70, 0xd3, 0x01, 0xa6, 0x29, 0x44, 0xb8, + 0x27, 0x71, 0xd3, 0x01, 0x43, 0xcd, 0x09, 0x69, 0xd3, 0x01, 0xb3, 0x0f, + 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x6b, 0xd3, 0x01, 0x42, 0x15, 0x02, + 0x6a, 0xd3, 0x41, 0x44, 0x96, 0x1b, 0x6f, 0xd3, 0x01, 0x42, 0x30, 0x27, + 0x6e, 0xd3, 0x41, 0x43, 0xd7, 0x04, 0x6d, 0xd3, 0x01, 0x43, 0xfb, 0x05, + 0x6c, 0xd3, 0x41, 0x44, 0x6a, 0xe4, 0x34, 0x23, 0x00, 0x44, 0x96, 0xe7, + 0x35, 0x23, 0x40, 0x42, 0x13, 0x00, 0xb8, 0xfa, 0x01, 0x52, 0x32, 0x4e, + 0x4f, 0x2e, 0x00, 0x4b, 0xb0, 0x99, 0x58, 0x22, 0x40, 0x04, 0xbe, 0x1d, + 0x0f, 0xb9, 0x01, 0xff, 0x4b, 0x8d, 0x96, 0x2f, 0xf1, 0x01, 0x4a, 0x9a, + 0xa7, 0xa9, 0x00, 0x40, 0xa3, 0xed, 0x05, 0x06, 0x1f, 0xd1, 0x90, 0x04, + 0xa6, 0x81, 0x04, 0x55, 0x94, 0x38, 0xff, 0x2c, 0x00, 0x0b, 0x7c, 0x98, + 0xde, 0x03, 0xb3, 0x01, 0xff, 0x0c, 0x7d, 0x07, 0x33, 0x06, 0x7f, 0x14, + 0x01, 0xff, 0xab, 0x20, 0x45, 0xf3, 0xdd, 0xe5, 0x2c, 0x00, 0x45, 0x2e, + 0xdf, 0xe6, 0x2c, 0x00, 0xb3, 0x06, 0x46, 0xed, 0xd5, 0xe8, 0x2c, 0x40, + 0x49, 0x66, 0xb0, 0xea, 0x2c, 0x00, 0x46, 0xf3, 0xd5, 0xe7, 0x2c, 0x40, + 0x42, 0x35, 0x06, 0xe4, 0x2c, 0x00, 0x45, 0xae, 0xc0, 0xe9, 0x2c, 0x40, + 0xa1, 0x95, 0x03, 0x4d, 0x2c, 0x7a, 0xf3, 0x2c, 0x00, 0x02, 0x7a, 0x05, + 0xe7, 0x02, 0xa4, 0xbb, 0x02, 0x43, 0x16, 0xe9, 0x89, 0x2c, 0x00, 0xa6, + 0xa8, 0x02, 0x02, 0x24, 0x02, 0x97, 0x02, 0xa8, 0x88, 0x02, 0x45, 0x9a, + 0xdc, 0x93, 0x2c, 0x00, 0xab, 0xe7, 0x01, 0xac, 0xd8, 0x01, 0x42, 0x7d, + 0x02, 0x99, 0x2c, 0x00, 0x42, 0xd2, 0x02, 0x9b, 0x2c, 0x00, 0xef, 0x9f, + 0x2c, 0x80, 0x54, 0xb0, 0x48, 0x42, 0xd0, 0x00, 0xa3, 0x2c, 0x00, 0xb3, + 0x20, 0xb4, 0x12, 0x42, 0x7d, 0x00, 0xa9, 0x2c, 0x00, 0x44, 0xf2, 0xe7, + 0x83, 0x2c, 0x00, 0x44, 0x3a, 0xe8, 0x8d, 0x2c, 0x40, 0x42, 0xc3, 0x21, + 0xa7, 0x2c, 0x00, 0x45, 0x54, 0xdc, 0x91, 0x2c, 0x40, 0x44, 0x97, 0x8c, + 0xc1, 0x2c, 0x00, 0xa8, 0x0c, 0x43, 0x5d, 0x0b, 0xa5, 0x2c, 0x00, 0x42, + 0x3c, 0x01, 0x8b, 0x2c, 0x40, 0x42, 0xd1, 0x09, 0xe3, 0x03, 0x00, 0x43, + 0x5d, 0x0b, 0xed, 0x03, 0x40, 0xe9, 0xa1, 0x2c, 0x00, 0x42, 0xdb, 0x02, + 0xaf, 0x2c, 0x40, 0x03, 0x67, 0x21, 0x06, 0x42, 0x3c, 0x01, 0xb1, 0x2c, + 0x40, 0x07, 0x14, 0xc6, 0x1f, 0x07, 0x80, 0x98, 0x01, 0xff, 0xae, 0x0c, + 0x45, 0x28, 0xe0, 0xdd, 0x2c, 0x00, 0x43, 0xac, 0xe9, 0xe3, 0x2c, 0x40, + 0x42, 0xf6, 0x05, 0xdf, 0x2c, 0x00, 0x42, 0x4b, 0x18, 0xe1, 0x2c, 0x40, + 0x43, 0x35, 0x06, 0xb5, 0x2c, 0x00, 0x43, 0x0a, 0xe9, 0xd9, 0x2c, 0x00, + 0x43, 0x00, 0x55, 0xc7, 0x2c, 0x00, 0x46, 0x97, 0xd1, 0xd7, 0x2c, 0x00, + 0xa8, 0x17, 0x43, 0xe6, 0x8b, 0xbf, 0x2c, 0x00, 0x02, 0xa4, 0x02, 0x01, + 0xff, 0x42, 0xd1, 0x09, 0xc5, 0x2c, 0x00, 0x43, 0x5d, 0x0b, 0xdb, 0x2c, + 0x40, 0xe1, 0xcf, 0x2c, 0x80, 0x0c, 0x42, 0xd1, 0x09, 0xd3, 0x2c, 0x00, + 0x43, 0x0c, 0x00, 0xcd, 0x2c, 0x40, 0xf4, 0xd5, 0x2c, 0x40, 0x4a, 0x4e, + 0x9e, 0xd1, 0x2c, 0x00, 0x44, 0x46, 0xe4, 0x97, 0x2c, 0x40, 0x43, 0x26, + 0x39, 0x95, 0x2c, 0x00, 0xa8, 0x06, 0x42, 0xdb, 0x02, 0x9d, 0x2c, 0x40, + 0x42, 0xd1, 0x09, 0xe7, 0x03, 0x00, 0xe9, 0xad, 0x2c, 0x40, 0x43, 0x8a, + 0x00, 0x8f, 0x2c, 0x00, 0x43, 0x0c, 0x00, 0xe9, 0x03, 0x40, 0x43, 0x1a, + 0x04, 0x85, 0x2c, 0x00, 0x44, 0x99, 0xd1, 0xeb, 0x03, 0x40, 0x42, 0xd1, + 0x09, 0xe5, 0x03, 0x00, 0xe9, 0xab, 0x2c, 0x40, 0x44, 0x12, 0xe4, 0x87, + 0x2c, 0x00, 0x42, 0xd1, 0x09, 0xef, 0x03, 0x00, 0x09, 0xb7, 0xb0, 0x01, + 0xff, 0x44, 0x67, 0x00, 0xb3, 0x2c, 0x00, 0x44, 0x0b, 0x00, 0xcb, 0x2c, + 0x00, 0x44, 0x0f, 0xc0, 0xb9, 0x2c, 0x00, 0x42, 0xd2, 0x02, 0xbb, 0x2c, + 0x40, 0x4a, 0x6e, 0xa6, 0xc3, 0x2c, 0x00, 0x0c, 0x38, 0x22, 0x01, 0xff, + 0x43, 0x16, 0xe9, 0xb7, 0x2c, 0x00, 0x46, 0x97, 0xd1, 0xee, 0x2c, 0x00, + 0x42, 0xd2, 0x02, 0xbd, 0x2c, 0x00, 0x44, 0x74, 0xa6, 0xec, 0x2c, 0x40, + 0x4c, 0x2f, 0x89, 0xc9, 0x2c, 0x00, 0x43, 0x55, 0xe9, 0x81, 0x2c, 0x40, + 0x54, 0xb6, 0x30, 0xfa, 0x2c, 0x00, 0x49, 0xa0, 0x14, 0xf9, 0x2c, 0x00, + 0x56, 0xb4, 0x30, 0xfb, 0x2c, 0x00, 0x4d, 0x37, 0x4e, 0xfc, 0x2c, 0x40, + 0x50, 0x8c, 0x54, 0xfd, 0x2c, 0x00, 0x48, 0xa1, 0x14, 0xfe, 0x2c, 0x40, + 0x06, 0xf4, 0x05, 0x96, 0x01, 0x07, 0xbf, 0x35, 0x06, 0x4e, 0x39, 0x76, + 0xe0, 0x02, 0x41, 0x05, 0xd1, 0x09, 0x7e, 0xa6, 0x5f, 0x04, 0xb8, 0x27, + 0x4f, 0x4b, 0xe5, 0x0f, 0xf3, 0x02, 0x01, 0xb3, 0x26, 0xb4, 0x01, 0xff, + 0x42, 0x92, 0x01, 0xea, 0x02, 0x01, 0xa8, 0x0f, 0xb7, 0x01, 0xff, 0x44, + 0x98, 0x1b, 0xeb, 0x02, 0x01, 0x49, 0x8b, 0x1b, 0xf4, 0x02, 0x41, 0x44, + 0xf3, 0x0f, 0xec, 0x02, 0x01, 0x4b, 0x1a, 0x16, 0xf5, 0x02, 0x41, 0x04, + 0x96, 0x1b, 0x11, 0x02, 0x30, 0x27, 0x01, 0xff, 0x48, 0xe8, 0x0f, 0xf8, + 0x02, 0x01, 0x42, 0xf5, 0x0f, 0xef, 0x02, 0x41, 0x48, 0xe8, 0x0f, 0xf9, + 0x02, 0x01, 0x42, 0xf5, 0x0f, 0xf0, 0x02, 0x41, 0x48, 0xe8, 0x0f, 0xfb, + 0x02, 0x01, 0x42, 0xf5, 0x0f, 0xf2, 0x02, 0x41, 0xa9, 0x0f, 0xaf, 0x01, + 0xff, 0x43, 0xf4, 0x0f, 0xed, 0x02, 0x01, 0x4a, 0x1a, 0xaa, 0xf6, 0x02, + 0x41, 0x43, 0xe4, 0x47, 0xee, 0x02, 0x01, 0x4a, 0x57, 0x35, 0xf7, 0x02, + 0x41, 0x48, 0xe8, 0x0f, 0xfa, 0x02, 0x01, 0xf9, 0xf1, 0x02, 0x41, 0x45, + 0xd1, 0x09, 0xe8, 0x02, 0x01, 0xa6, 0x29, 0x44, 0xb8, 0x27, 0xe9, 0x02, + 0x01, 0x43, 0xcd, 0x09, 0xe1, 0x02, 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, + 0x44, 0x25, 0x01, 0xe3, 0x02, 0x01, 0x42, 0x15, 0x02, 0xe2, 0x02, 0x41, + 0x44, 0x96, 0x1b, 0xe7, 0x02, 0x01, 0x42, 0x30, 0x27, 0xe6, 0x02, 0x41, + 0x43, 0xd7, 0x04, 0xe5, 0x02, 0x01, 0x43, 0xfb, 0x05, 0xe4, 0x02, 0x41, + 0x0e, 0xea, 0x04, 0x1c, 0x09, 0x52, 0x14, 0x01, 0xff, 0x48, 0xf9, 0xbe, + 0xef, 0x2c, 0x00, 0x09, 0xe2, 0xb5, 0x01, 0xff, 0x45, 0xde, 0xd9, 0xf0, + 0x2c, 0x00, 0x45, 0x7b, 0xdd, 0xf1, 0x2c, 0x40, 0xa1, 0x95, 0x03, 0x4d, + 0x2c, 0x7a, 0xf2, 0x2c, 0x00, 0x02, 0x7a, 0x05, 0xe7, 0x02, 0xa4, 0xbb, + 0x02, 0x43, 0x16, 0xe9, 0x88, 0x2c, 0x00, 0xa6, 0xa8, 0x02, 0x02, 0x24, + 0x02, 0x97, 0x02, 0xa8, 0x88, 0x02, 0x45, 0x9a, 0xdc, 0x92, 0x2c, 0x00, + 0xab, 0xe7, 0x01, 0xac, 0xd8, 0x01, 0x42, 0x7d, 0x02, 0x98, 0x2c, 0x00, + 0x42, 0xd2, 0x02, 0x9a, 0x2c, 0x00, 0xef, 0x9e, 0x2c, 0x80, 0x54, 0xb0, + 0x48, 0x42, 0xd0, 0x00, 0xa2, 0x2c, 0x00, 0xb3, 0x20, 0xb4, 0x12, 0x42, + 0x7d, 0x00, 0xa8, 0x2c, 0x00, 0x44, 0xf2, 0xe7, 0x82, 0x2c, 0x00, 0x44, + 0x3a, 0xe8, 0x8c, 0x2c, 0x40, 0x42, 0xc3, 0x21, 0xa6, 0x2c, 0x00, 0x45, + 0x54, 0xdc, 0x90, 0x2c, 0x40, 0x44, 0x97, 0x8c, 0xc0, 0x2c, 0x00, 0xa8, + 0x0c, 0x43, 0x5d, 0x0b, 0xa4, 0x2c, 0x00, 0x42, 0x3c, 0x01, 0x8a, 0x2c, + 0x40, 0x42, 0xd1, 0x09, 0xe2, 0x03, 0x00, 0x43, 0x5d, 0x0b, 0xec, 0x03, + 0x40, 0xe9, 0xa0, 0x2c, 0x00, 0x42, 0xdb, 0x02, 0xae, 0x2c, 0x40, 0x03, + 0x67, 0x21, 0x06, 0x42, 0x3c, 0x01, 0xb0, 0x2c, 0x40, 0x07, 0x14, 0xc6, + 0x1f, 0x07, 0x80, 0x98, 0x01, 0xff, 0xae, 0x0c, 0x45, 0x28, 0xe0, 0xdc, + 0x2c, 0x00, 0x43, 0xac, 0xe9, 0xe2, 0x2c, 0x40, 0x42, 0xf6, 0x05, 0xde, + 0x2c, 0x00, 0x42, 0x4b, 0x18, 0xe0, 0x2c, 0x40, 0x43, 0x35, 0x06, 0xb4, + 0x2c, 0x00, 0x43, 0x0a, 0xe9, 0xd8, 0x2c, 0x00, 0x43, 0x00, 0x55, 0xc6, + 0x2c, 0x00, 0x46, 0x97, 0xd1, 0xd6, 0x2c, 0x00, 0xa8, 0x17, 0x43, 0xe6, + 0x8b, 0xbe, 0x2c, 0x00, 0x02, 0xa4, 0x02, 0x01, 0xff, 0x42, 0xd1, 0x09, + 0xc4, 0x2c, 0x00, 0x43, 0x5d, 0x0b, 0xda, 0x2c, 0x40, 0xe1, 0xce, 0x2c, + 0x80, 0x0c, 0x42, 0xd1, 0x09, 0xd2, 0x2c, 0x00, 0x43, 0x0c, 0x00, 0xcc, + 0x2c, 0x40, 0xf4, 0xd4, 0x2c, 0x40, 0x4a, 0x4e, 0x9e, 0xd0, 0x2c, 0x00, + 0x44, 0x46, 0xe4, 0x96, 0x2c, 0x40, 0x43, 0x26, 0x39, 0x94, 0x2c, 0x00, + 0xa8, 0x06, 0x42, 0xdb, 0x02, 0x9c, 0x2c, 0x40, 0x42, 0xd1, 0x09, 0xe6, + 0x03, 0x00, 0xe9, 0xac, 0x2c, 0x40, 0x43, 0x8a, 0x00, 0x8e, 0x2c, 0x00, + 0x43, 0x0c, 0x00, 0xe8, 0x03, 0x40, 0x43, 0x1a, 0x04, 0x84, 0x2c, 0x00, + 0x44, 0x99, 0xd1, 0xea, 0x03, 0x40, 0x42, 0xd1, 0x09, 0xe4, 0x03, 0x00, + 0xe9, 0xaa, 0x2c, 0x40, 0x44, 0x12, 0xe4, 0x86, 0x2c, 0x00, 0x42, 0xd1, + 0x09, 0xee, 0x03, 0x00, 0x09, 0xb7, 0xb0, 0x01, 0xff, 0x44, 0x67, 0x00, + 0xb2, 0x2c, 0x00, 0x44, 0x0b, 0x00, 0xca, 0x2c, 0x00, 0x44, 0x0f, 0xc0, + 0xb8, 0x2c, 0x00, 0x42, 0xd2, 0x02, 0xba, 0x2c, 0x40, 0x4a, 0x6e, 0xa6, + 0xc2, 0x2c, 0x00, 0x0c, 0x38, 0x22, 0x01, 0xff, 0x43, 0x16, 0xe9, 0xb6, + 0x2c, 0x00, 0x46, 0x97, 0xd1, 0xed, 0x2c, 0x00, 0x42, 0xd2, 0x02, 0xbc, + 0x2c, 0x00, 0x44, 0x74, 0xa6, 0xeb, 0x2c, 0x40, 0x4c, 0x2f, 0x89, 0xc8, + 0x2c, 0x00, 0x43, 0x55, 0xe9, 0x80, 0x2c, 0x40, 0x47, 0xae, 0xc6, 0x5a, + 0xf3, 0x01, 0xa9, 0x01, 0xff, 0xe5, 0x6a, 0xf3, 0x01, 0x42, 0x1d, 0x01, + 0x73, 0xf3, 0x41, 0xa6, 0x79, 0x55, 0x44, 0x37, 0x6d, 0x2a, 0x00, 0x4a, + 0xea, 0xa2, 0x32, 0x23, 0x00, 0x48, 0xa1, 0xbd, 0x0c, 0x26, 0x00, 0x0a, + 0xc6, 0xa8, 0x57, 0xb4, 0x06, 0x4e, 0x5f, 0x77, 0xea, 0xf3, 0x41, 0x05, + 0x41, 0x63, 0x1d, 0x57, 0x99, 0x18, 0x81, 0x23, 0x00, 0x4c, 0xaa, 0x6a, + 0x2e, 0x22, 0x00, 0x04, 0xd7, 0x82, 0x01, 0xff, 0x45, 0x30, 0xdd, 0x9b, + 0xf3, 0x01, 0x53, 0x7a, 0x47, 0x9b, 0x00, 0x40, 0x03, 0xcb, 0x02, 0x17, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x56, 0x64, 0x31, 0xfa, 0x22, 0x00, 0x47, + 0xfa, 0x78, 0xfd, 0x22, 0x00, 0x68, 0x35, 0x04, 0xfb, 0x22, 0x40, 0x46, + 0xb9, 0x04, 0x0b, 0x22, 0x00, 0x4f, 0x56, 0x4e, 0xb3, 0x22, 0xc0, 0x00, + 0x4c, 0xf3, 0x25, 0xb5, 0x22, 0x40, 0x44, 0xdb, 0x02, 0xa7, 0xf6, 0x01, + 0x46, 0xd1, 0xd6, 0x77, 0xf4, 0x41, 0x49, 0x97, 0xaf, 0x8a, 0xf3, 0x01, + 0x4b, 0xea, 0x98, 0x16, 0xf6, 0x01, 0x49, 0x25, 0x91, 0x15, 0xf6, 0x41, + 0x07, 0x54, 0x14, 0x38, 0x42, 0xf2, 0x04, 0x04, 0x26, 0x00, 0xad, 0x1b, + 0xb0, 0x01, 0xff, 0x43, 0xb5, 0x1d, 0xed, 0xf9, 0x01, 0x46, 0xbe, 0x8a, + 0x01, 0x22, 0x00, 0x4e, 0xdf, 0x73, 0x84, 0x23, 0x00, 0x47, 0x67, 0x57, + 0xdc, 0xf5, 0x41, 0xe1, 0x2c, 0x00, 0x00, 0x07, 0x61, 0xaf, 0x01, 0xff, + 0x42, 0x8a, 0x00, 0x40, 0x00, 0x00, 0x4a, 0x8a, 0x90, 0x52, 0x20, 0x40, + 0xa1, 0xa5, 0x15, 0xa2, 0xf5, 0x14, 0xa3, 0xa5, 0x11, 0xa4, 0x89, 0x0e, + 0xa5, 0xcf, 0x0d, 0xa6, 0xc0, 0x0d, 0xa7, 0x81, 0x0a, 0x02, 0x0b, 0x00, + 0xea, 0x09, 0xa9, 0xac, 0x09, 0x02, 0x1b, 0x02, 0x86, 0x09, 0xac, 0xfb, + 0x04, 0xad, 0xb4, 0x04, 0xae, 0xa5, 0x04, 0xaf, 0xe7, 0x03, 0xb0, 0xb4, + 0x03, 0xb2, 0x8b, 0x02, 0xb3, 0xc8, 0x01, 0xb4, 0x81, 0x01, 0xb5, 0x5b, + 0x09, 0x32, 0x00, 0x41, 0x02, 0x51, 0x00, 0x27, 0xb8, 0x11, 0x07, 0xf8, + 0x2f, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x5b, 0x03, 0x00, 0x45, 0x25, 0x06, + 0xcf, 0x1d, 0x40, 0x80, 0x06, 0x48, 0x49, 0xb9, 0xb5, 0x1a, 0x40, 0x45, + 0x5c, 0x00, 0x3d, 0x03, 0x00, 0x45, 0x25, 0x06, 0x53, 0x03, 0x40, 0x03, + 0xa5, 0x03, 0x06, 0x4f, 0xf6, 0x66, 0xb6, 0x1a, 0x40, 0x4c, 0x7b, 0x85, + 0xe9, 0x20, 0x00, 0x55, 0x01, 0x38, 0xf9, 0x1d, 0x40, 0x05, 0xf0, 0x07, + 0x06, 0x45, 0x99, 0x20, 0x3e, 0x03, 0x40, 0x45, 0x5c, 0x00, 0x0d, 0x03, + 0x00, 0x45, 0x25, 0x06, 0x29, 0x03, 0x40, 0xb0, 0x0c, 0x47, 0xfd, 0x05, + 0xd1, 0x1d, 0x00, 0x47, 0x51, 0x0d, 0xd2, 0x1d, 0x40, 0x06, 0xef, 0x8f, + 0x06, 0x51, 0xc8, 0x3d, 0x4e, 0x03, 0x40, 0x45, 0x5c, 0x00, 0xf5, 0x1d, + 0x00, 0x45, 0x25, 0x06, 0x1d, 0x03, 0x40, 0x4f, 0x08, 0x11, 0xdb, 0x20, + 0x00, 0x44, 0x9a, 0x20, 0x03, 0x03, 0x80, 0x1c, 0x06, 0x38, 0x1b, 0x06, + 0x51, 0xfe, 0x58, 0x12, 0x03, 0x40, 0x4c, 0x7f, 0x84, 0xcb, 0x1a, 0x00, + 0x43, 0xc5, 0x06, 0xb4, 0x1a, 0x00, 0x48, 0x19, 0xc2, 0xe8, 0x20, 0x40, + 0x80, 0x01, 0xff, 0x45, 0x25, 0x06, 0x30, 0x03, 0x00, 0x4f, 0xa9, 0x68, + 0x29, 0xfe, 0x00, 0x47, 0x65, 0x20, 0x34, 0x03, 0x00, 0x50, 0x5e, 0x60, + 0x2a, 0xfe, 0x40, 0x4c, 0xd7, 0x86, 0x3c, 0x03, 0x00, 0x05, 0x5c, 0x30, + 0x22, 0x4a, 0x88, 0xa5, 0xc2, 0x1d, 0x00, 0x07, 0xe2, 0x23, 0x0c, 0x61, + 0x08, 0x0d, 0xba, 0x1a, 0x00, 0x4e, 0x51, 0x77, 0xc3, 0x1d, 0x40, 0x44, + 0x26, 0x06, 0x3b, 0x03, 0x00, 0x4d, 0x51, 0x80, 0xc5, 0x1a, 0x40, 0xb3, + 0x06, 0x55, 0x4d, 0x3a, 0xd3, 0x20, 0x40, 0x4e, 0x9e, 0x2f, 0x37, 0x03, + 0x00, 0x4d, 0x75, 0x44, 0x35, 0x03, 0x40, 0xa5, 0x8c, 0x01, 0xa9, 0x01, + 0xff, 0x03, 0xca, 0x00, 0x17, 0x03, 0xa2, 0x01, 0x01, 0xff, 0x45, 0x5c, + 0x00, 0x0a, 0x03, 0x00, 0x45, 0x25, 0x06, 0x25, 0x03, 0x00, 0x47, 0x65, + 0x20, 0xd8, 0x20, 0x40, 0x80, 0x06, 0x61, 0x6b, 0x0d, 0xec, 0x20, 0x40, + 0x05, 0xce, 0x00, 0x30, 0x02, 0x22, 0x00, 0x16, 0x0c, 0x70, 0x1f, 0x06, + 0x4a, 0xf0, 0x8f, 0x19, 0x03, 0x40, 0x4b, 0x84, 0x04, 0xc2, 0x1a, 0x00, + 0x4b, 0x9c, 0x91, 0xc4, 0x1a, 0x40, 0x08, 0xf9, 0xbd, 0x06, 0x4b, 0x34, + 0x9a, 0xd1, 0x20, 0x40, 0x45, 0x5c, 0x00, 0x57, 0x03, 0x00, 0x45, 0x25, + 0x06, 0x39, 0x03, 0x40, 0x80, 0x24, 0x05, 0x88, 0x19, 0x01, 0xff, 0xa1, + 0x06, 0x45, 0x25, 0x06, 0x55, 0x03, 0x40, 0x44, 0x5d, 0x00, 0x50, 0x03, + 0x00, 0x03, 0x1b, 0x00, 0x01, 0xff, 0x54, 0xfd, 0x3c, 0xff, 0x1d, 0x00, + 0x52, 0x84, 0x50, 0x56, 0x03, 0x40, 0x45, 0x5c, 0x00, 0xd7, 0x20, 0x00, + 0x45, 0x25, 0x06, 0xef, 0x20, 0x40, 0x52, 0x3c, 0x50, 0x22, 0x03, 0x00, + 0x05, 0x95, 0x03, 0x01, 0xff, 0x50, 0x9c, 0x2f, 0xe5, 0x20, 0x00, 0x4d, + 0x02, 0x59, 0x14, 0x03, 0x40, 0xa1, 0x11, 0x09, 0x2f, 0x6b, 0x01, 0xff, + 0x45, 0x5c, 0x00, 0xc8, 0x1a, 0x00, 0x45, 0x25, 0x06, 0x1f, 0x03, 0x40, + 0x54, 0x2d, 0x3f, 0x21, 0x03, 0x00, 0x0a, 0x0f, 0x5b, 0x01, 0xff, 0x45, + 0x5c, 0x00, 0xbb, 0x1a, 0x00, 0x45, 0x25, 0x06, 0xbd, 0x1a, 0x00, 0x47, + 0x65, 0x20, 0xbe, 0x1a, 0x40, 0x45, 0x50, 0xd4, 0x28, 0x03, 0x80, 0x2e, + 0x11, 0x12, 0x56, 0x0c, 0x4e, 0x5d, 0x74, 0xb7, 0x1a, 0x00, 0x47, 0x08, + 0x83, 0x05, 0x03, 0x40, 0x42, 0x1a, 0x00, 0x76, 0x03, 0x01, 0x43, 0xbb, + 0x65, 0x77, 0x03, 0x01, 0x45, 0x52, 0xde, 0x79, 0x03, 0x01, 0x43, 0x82, + 0xe9, 0x7a, 0x03, 0x01, 0x44, 0x3a, 0xe8, 0x78, 0x03, 0x41, 0x46, 0x5b, + 0x00, 0xce, 0x1d, 0x40, 0x4e, 0xed, 0x73, 0x4a, 0x03, 0x00, 0x50, 0xbe, + 0x61, 0xc6, 0x1a, 0x40, 0x45, 0xee, 0x69, 0x04, 0x03, 0x80, 0x06, 0x4f, + 0x04, 0x68, 0x20, 0x03, 0x40, 0x80, 0x15, 0x8d, 0x01, 0xff, 0x45, 0xce, + 0x34, 0xc4, 0x1d, 0x00, 0x45, 0xb7, 0x20, 0xcc, 0x1d, 0x00, 0x45, 0x79, + 0x20, 0xc6, 0x1d, 0x40, 0x45, 0x25, 0x06, 0x31, 0x03, 0x00, 0x49, 0x53, + 0x12, 0x24, 0xfe, 0x80, 0x0d, 0x4a, 0xac, 0x03, 0x25, 0xfe, 0xc0, 0x00, + 0x46, 0x24, 0x06, 0x2c, 0xfe, 0x40, 0x46, 0x24, 0x06, 0x2b, 0xfe, 0x40, + 0x05, 0xe4, 0x04, 0xdc, 0x01, 0x03, 0xc4, 0x00, 0x4f, 0x02, 0x3f, 0x00, + 0x27, 0xaf, 0x01, 0xff, 0x03, 0xa2, 0x01, 0x06, 0x46, 0xfc, 0x82, 0x32, + 0x03, 0x40, 0x56, 0x96, 0x2f, 0xeb, 0x20, 0x00, 0xb3, 0x06, 0x55, 0x4d, + 0x3a, 0xd2, 0x20, 0x40, 0x4e, 0x9e, 0x2f, 0x38, 0x03, 0x00, 0x4d, 0x75, + 0x44, 0x36, 0x03, 0x40, 0x06, 0x37, 0x1d, 0x06, 0x5e, 0xcb, 0x11, 0xb9, + 0x1a, 0x40, 0x49, 0x53, 0x12, 0x20, 0xfe, 0x80, 0x0d, 0x4a, 0xac, 0x03, + 0x21, 0xfe, 0xc0, 0x00, 0x46, 0x24, 0x06, 0x28, 0xfe, 0x40, 0x46, 0x24, + 0x06, 0x27, 0xfe, 0x40, 0x80, 0x11, 0x06, 0xa9, 0x01, 0x01, 0xff, 0x4d, + 0xde, 0x79, 0xea, 0x20, 0x00, 0x5b, 0x71, 0x0d, 0xed, 0x20, 0x40, 0xa1, + 0x40, 0x02, 0x22, 0x00, 0x26, 0x0c, 0x70, 0x1f, 0x16, 0x0c, 0xc8, 0x00, + 0x06, 0x4a, 0xf0, 0x8f, 0x18, 0x03, 0x40, 0x45, 0x5c, 0x00, 0xe1, 0x20, + 0x00, 0x45, 0x25, 0x06, 0x4d, 0x03, 0x40, 0x4a, 0x46, 0x05, 0xc1, 0x1a, + 0x00, 0x4a, 0xc0, 0x9f, 0xc3, 0x1a, 0x40, 0x08, 0xf9, 0xbd, 0x06, 0x4b, + 0x34, 0x9a, 0xd0, 0x20, 0x40, 0x45, 0x5c, 0x00, 0x51, 0x03, 0x00, 0x45, + 0x25, 0x06, 0x1c, 0x03, 0x40, 0x05, 0x37, 0x05, 0x24, 0x04, 0xcf, 0x00, + 0x01, 0xff, 0x80, 0x11, 0x05, 0x88, 0x19, 0x01, 0xff, 0x45, 0x5c, 0x00, + 0xfe, 0x1d, 0x00, 0x45, 0x25, 0x06, 0x54, 0x03, 0x40, 0x45, 0x5c, 0x00, + 0xd6, 0x20, 0x00, 0x45, 0x25, 0x06, 0xee, 0x20, 0x40, 0x45, 0x5c, 0x00, + 0x1a, 0x03, 0x00, 0x45, 0x25, 0x06, 0x49, 0x03, 0x40, 0x15, 0x55, 0x38, + 0x8e, 0x02, 0x0d, 0x7c, 0x07, 0x01, 0xff, 0xe1, 0x63, 0x03, 0x80, 0xeb, + 0x01, 0xe2, 0xe8, 0x1d, 0x80, 0xdf, 0x01, 0xe3, 0x68, 0x03, 0x80, 0xd3, + 0x01, 0xe4, 0x69, 0x03, 0x00, 0xe5, 0x64, 0x03, 0x80, 0xbd, 0x01, 0xe6, + 0xeb, 0x1d, 0x80, 0xb1, 0x01, 0xe7, 0xda, 0x1d, 0x00, 0xe8, 0x6a, 0x03, + 0x00, 0xe9, 0x65, 0x03, 0x80, 0x8e, 0x01, 0xeb, 0xdc, 0x1d, 0x00, 0xec, + 0xdd, 0x1d, 0x80, 0x79, 0xed, 0x6b, 0x03, 0x00, 0xee, 0xe0, 0x1d, 0x00, + 0xef, 0x66, 0x03, 0x80, 0x5b, 0xf0, 0xee, 0x1d, 0x00, 0xf2, 0x6c, 0x03, + 0x80, 0x43, 0xf3, 0xe4, 0x1d, 0x80, 0x38, 0xf4, 0x6d, 0x03, 0x80, 0x2d, + 0xf5, 0x67, 0x03, 0x80, 0x17, 0xf6, 0x6e, 0x03, 0x00, 0xf7, 0xf1, 0x1d, + 0x80, 0x08, 0xf8, 0x6f, 0x03, 0x00, 0xfa, 0xe6, 0x1d, 0x40, 0x46, 0x24, + 0x06, 0xbf, 0x1a, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x1b, 0x21, + 0xf4, 0x1d, 0x00, 0x5b, 0x45, 0x1a, 0xf0, 0x1d, 0x40, 0x4d, 0x59, 0x82, + 0xc0, 0x1a, 0x40, 0x44, 0x01, 0x75, 0xea, 0x1d, 0x40, 0x80, 0x01, 0xff, + 0x45, 0x25, 0x06, 0xca, 0x1d, 0x00, 0x47, 0xcd, 0xa9, 0xe3, 0x1d, 0x40, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x1b, 0x21, 0xf3, 0x1d, 0x00, 0x5b, + 0x45, 0x1a, 0xed, 0x1d, 0x40, 0x59, 0x85, 0x20, 0xec, 0x1d, 0x00, 0x45, + 0x08, 0xb3, 0xe5, 0x1d, 0x40, 0x07, 0x55, 0x69, 0x01, 0xff, 0xe4, 0xd8, + 0x1d, 0x00, 0xe7, 0xcc, 0x1a, 0x00, 0xf2, 0xcd, 0x1a, 0x00, 0xf4, 0xce, + 0x1a, 0x40, 0x55, 0x2b, 0x38, 0xd3, 0x1d, 0x40, 0x42, 0xa4, 0x02, 0xef, + 0x1d, 0x00, 0x42, 0x53, 0x00, 0xd9, 0x1d, 0x40, 0x48, 0x71, 0xb8, 0xd7, + 0x1d, 0x40, 0x43, 0xec, 0x0d, 0xe9, 0x1d, 0x40, 0x4f, 0xbd, 0x63, 0xf2, + 0x1d, 0x00, 0xe5, 0xd4, 0x1d, 0x00, 0x44, 0xad, 0xd9, 0xe7, 0x1d, 0x00, + 0xef, 0xd5, 0x1d, 0x00, 0xf6, 0xd6, 0x1d, 0x40, 0xe7, 0xdb, 0x1d, 0x00, + 0xec, 0xde, 0x1d, 0x00, 0xed, 0xdf, 0x1d, 0x00, 0xee, 0xe1, 0x1d, 0x00, + 0xf2, 0xe2, 0x1d, 0x40, 0x10, 0x6e, 0x61, 0x11, 0x0b, 0x86, 0x9c, 0x01, + 0xff, 0x44, 0xc3, 0x00, 0xf7, 0x1d, 0x00, 0x45, 0xc8, 0x00, 0xf6, 0x1d, + 0x40, 0x56, 0x06, 0x33, 0x9a, 0x30, 0x00, 0x51, 0x0b, 0x33, 0x99, 0x30, + 0x40, 0xae, 0x06, 0x47, 0x64, 0x0d, 0xd0, 0x1d, 0x40, 0x46, 0x1e, 0x66, + 0xb2, 0x1a, 0x00, 0x07, 0xc4, 0x20, 0x01, 0xff, 0x02, 0x45, 0x08, 0x11, + 0x0c, 0x9b, 0x86, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xc7, 0x1a, 0x00, 0x45, + 0x25, 0x06, 0x2b, 0x03, 0x40, 0x43, 0xb3, 0x11, 0x11, 0x03, 0x80, 0x06, + 0x4a, 0x0c, 0x38, 0x3a, 0x03, 0x40, 0x46, 0x24, 0x06, 0x2f, 0x03, 0x40, + 0x4e, 0x45, 0x73, 0x4b, 0x03, 0x00, 0x48, 0xba, 0xa2, 0x09, 0x03, 0x00, + 0x42, 0x5e, 0x01, 0x1b, 0x03, 0x40, 0x11, 0xdf, 0x55, 0xc1, 0x01, 0xb2, + 0x01, 0xff, 0xa1, 0x36, 0x04, 0xfc, 0x2a, 0x01, 0xff, 0x4f, 0x9d, 0x65, + 0x44, 0x03, 0x00, 0x47, 0x67, 0xc8, 0x43, 0x03, 0x00, 0x08, 0x1a, 0x25, + 0x0c, 0x4b, 0x16, 0x99, 0x42, 0x03, 0x00, 0x4d, 0xb7, 0x49, 0x45, 0x03, + 0x40, 0x49, 0x9e, 0xb4, 0x44, 0xd2, 0x01, 0xb4, 0x01, 0xff, 0x48, 0x59, + 0xbc, 0x43, 0xd2, 0x01, 0x46, 0x1b, 0xd5, 0x42, 0xd2, 0x41, 0x05, 0x89, + 0xde, 0x2f, 0x4c, 0x0b, 0x8c, 0x4f, 0x03, 0x00, 0x02, 0x32, 0x00, 0x01, + 0xff, 0x80, 0x0f, 0x8d, 0x01, 0xff, 0x4b, 0xe1, 0x90, 0xc8, 0x1d, 0x00, + 0x46, 0xed, 0x69, 0xc5, 0x1d, 0x40, 0x46, 0xdf, 0x03, 0x00, 0x03, 0x80, + 0x06, 0x49, 0xdd, 0x29, 0x40, 0x03, 0x40, 0x46, 0x24, 0x06, 0x16, 0x03, + 0x40, 0x06, 0xf4, 0x05, 0x21, 0x07, 0xf1, 0x04, 0x01, 0xff, 0xe1, 0x70, + 0x13, 0x01, 0x42, 0x1b, 0x02, 0x71, 0x13, 0x01, 0x42, 0x2f, 0x04, 0x72, + 0x13, 0x01, 0x42, 0xc1, 0x08, 0x74, 0x13, 0x01, 0x42, 0x02, 0x00, 0x73, + 0x13, 0x41, 0xa6, 0x20, 0x43, 0xcd, 0x09, 0x67, 0x13, 0x01, 0x43, 0x2f, + 0x27, 0x6c, 0x13, 0x01, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x66, 0x13, 0x41, + 0x44, 0x25, 0x01, 0x69, 0x13, 0x01, 0x42, 0x15, 0x02, 0x68, 0x13, 0x41, + 0x43, 0xd7, 0x04, 0x6b, 0x13, 0x01, 0x43, 0xfb, 0x05, 0x6a, 0x13, 0x41, + 0x43, 0xda, 0xe8, 0x00, 0xe0, 0x01, 0xa2, 0xe1, 0x01, 0x46, 0xf2, 0x79, + 0x1d, 0xe0, 0x01, 0xa4, 0xcc, 0x01, 0xa6, 0xbd, 0x01, 0x47, 0x41, 0xc7, + 0x03, 0xe0, 0x01, 0x44, 0x46, 0xe5, 0x18, 0xe0, 0x01, 0xe9, 0x0b, 0xe0, + 0x81, 0x8f, 0x01, 0x44, 0xce, 0xe5, 0x0d, 0xe0, 0x01, 0x47, 0xde, 0xc8, + 0x0e, 0xe0, 0x01, 0x47, 0xa6, 0x64, 0x0f, 0xe0, 0x01, 0x45, 0x3e, 0xde, + 0x10, 0xe0, 0x01, 0x43, 0x7c, 0x2d, 0x11, 0xe0, 0x01, 0x46, 0xc1, 0xd4, + 0x12, 0xe0, 0x01, 0x45, 0xba, 0xdf, 0x13, 0xe0, 0x01, 0xb3, 0x4b, 0xb4, + 0x3d, 0x43, 0xef, 0xcb, 0x16, 0xe0, 0x01, 0x44, 0xe2, 0xe7, 0x02, 0xe0, + 0x01, 0xb9, 0x0f, 0xba, 0x01, 0xff, 0x45, 0x5a, 0xdb, 0x08, 0xe0, 0x01, + 0x46, 0x3f, 0xd2, 0x06, 0xe0, 0x41, 0x43, 0xb3, 0x00, 0x21, 0xe0, 0x01, + 0xa5, 0x08, 0xef, 0x26, 0xe0, 0x01, 0xf5, 0x23, 0xe0, 0x41, 0xb2, 0x06, + 0x43, 0x2c, 0x09, 0x05, 0xe0, 0x41, 0xe9, 0x20, 0xe0, 0x01, 0xf5, 0x1f, + 0xe0, 0x41, 0x42, 0xdb, 0x02, 0x1c, 0xe0, 0x01, 0x45, 0x4a, 0xe1, 0x15, + 0xe0, 0x41, 0xa8, 0x0c, 0x44, 0x1a, 0xe6, 0x14, 0xe0, 0x01, 0x48, 0xd1, + 0xb5, 0x24, 0xe0, 0x41, 0xe1, 0x1e, 0xe0, 0x01, 0x42, 0x12, 0x00, 0x1b, + 0xe0, 0x41, 0x4b, 0x03, 0x98, 0x0a, 0xe0, 0x01, 0x07, 0x50, 0x1f, 0x06, + 0x43, 0x6d, 0x25, 0x09, 0xe0, 0x41, 0x47, 0x73, 0xc5, 0x29, 0xe0, 0x01, + 0x49, 0xd0, 0xb5, 0x27, 0xe0, 0x41, 0x43, 0xec, 0x04, 0x2a, 0xe0, 0x01, + 0x44, 0xe5, 0xb5, 0x17, 0xe0, 0x41, 0x45, 0xfe, 0xdc, 0x0c, 0xe0, 0x01, + 0x44, 0xc2, 0xe6, 0x04, 0xe0, 0x41, 0x46, 0x74, 0xc5, 0x28, 0xe0, 0x01, + 0x43, 0x7b, 0xc8, 0x01, 0xe0, 0x41, 0x46, 0x25, 0xd1, 0x52, 0x03, 0x00, + 0x4e, 0x8b, 0x41, 0xdc, 0x20, 0x40, 0x09, 0xee, 0xb2, 0x06, 0x50, 0xde, + 0x5f, 0x47, 0x03, 0x40, 0x46, 0x00, 0x04, 0xdd, 0x20, 0x80, 0x20, 0x47, + 0xb2, 0x3f, 0xdf, 0x20, 0x00, 0x46, 0x05, 0xd3, 0xe3, 0x20, 0x00, 0xb3, + 0x06, 0x58, 0x87, 0x28, 0xe4, 0x20, 0x40, 0x45, 0x3b, 0x54, 0xe2, 0x20, + 0x00, 0x45, 0xdc, 0x04, 0xde, 0x20, 0x40, 0x4a, 0x9b, 0x0c, 0xe0, 0x20, + 0x40, 0xa5, 0x95, 0x02, 0x48, 0x1c, 0x21, 0x08, 0x03, 0x80, 0x81, 0x02, + 0xaf, 0x01, 0xff, 0xb4, 0xc5, 0x01, 0x04, 0x3d, 0x01, 0x11, 0x02, 0xa7, + 0x01, 0x01, 0xff, 0x4b, 0xef, 0x8f, 0x1e, 0x03, 0x00, 0x4b, 0xb8, 0x02, + 0xb3, 0x1a, 0x40, 0x80, 0x06, 0x53, 0x78, 0x43, 0xb0, 0x1a, 0x40, 0x4c, + 0x7f, 0x84, 0x0b, 0x03, 0x00, 0x45, 0xb7, 0x20, 0x5d, 0x03, 0x80, 0x94, + 0x01, 0x50, 0x7e, 0x2e, 0xcd, 0x1d, 0x00, 0x4c, 0x79, 0x20, 0x0f, 0x03, + 0x00, 0x4e, 0xc2, 0x20, 0x61, 0x03, 0x80, 0x7b, 0x48, 0xfa, 0x82, 0x33, + 0x03, 0x00, 0x46, 0xed, 0x69, 0x5e, 0x03, 0x80, 0x68, 0xaf, 0x5a, 0xb0, + 0x41, 0x02, 0x0d, 0x00, 0x31, 0x45, 0x99, 0x20, 0x60, 0x03, 0x80, 0x1b, + 0x09, 0x32, 0x00, 0x01, 0xff, 0x05, 0xf0, 0x07, 0x06, 0x4e, 0x74, 0x44, + 0xe6, 0x20, 0x40, 0x45, 0x5c, 0x00, 0x0e, 0x03, 0x00, 0x45, 0x25, 0x06, + 0x48, 0x03, 0x40, 0x80, 0x01, 0xff, 0x49, 0x53, 0x12, 0x22, 0xfe, 0x00, + 0x4a, 0xac, 0x03, 0x23, 0xfe, 0x40, 0x54, 0xc5, 0x3d, 0x62, 0x03, 0x00, + 0x48, 0x6f, 0x6d, 0x5a, 0x03, 0x40, 0x50, 0x0e, 0x5b, 0xbc, 0x1a, 0x00, + 0x09, 0x2f, 0x6b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xc9, 0x1a, 0x00, 0x45, + 0x25, 0x06, 0xca, 0x1a, 0x40, 0x4e, 0x5d, 0x74, 0xb8, 0x1a, 0x00, 0x47, + 0x08, 0x83, 0x3f, 0x03, 0x40, 0x46, 0x24, 0x06, 0x5f, 0x03, 0x40, 0x46, + 0x24, 0x06, 0xfc, 0x1d, 0x40, 0x46, 0x24, 0x06, 0x5c, 0x03, 0x40, 0x80, + 0x11, 0x04, 0x77, 0x00, 0x01, 0xff, 0x4c, 0x7f, 0x84, 0xc1, 0x1d, 0x00, + 0x4c, 0x79, 0x20, 0xc0, 0x1d, 0x40, 0x45, 0x5c, 0x00, 0x07, 0x03, 0x80, + 0x0d, 0x45, 0x25, 0x06, 0x23, 0x03, 0xc0, 0x00, 0x45, 0xc2, 0x00, 0xfa, + 0x1d, 0x40, 0x80, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xf8, 0x1d, 0x00, 0x45, + 0xc8, 0x00, 0x58, 0x03, 0x40, 0x46, 0x24, 0x06, 0x24, 0x03, 0x00, 0x45, + 0x72, 0xd7, 0xb1, 0x1a, 0x40, 0x4b, 0x98, 0x96, 0xfb, 0x1d, 0x00, 0x09, + 0x41, 0xb7, 0x01, 0xff, 0x06, 0xf4, 0x05, 0x30, 0x07, 0xf1, 0x04, 0x06, + 0x4d, 0x3b, 0x81, 0xf1, 0xa8, 0x40, 0xe1, 0xea, 0xa8, 0x00, 0x42, 0x1b, + 0x02, 0xec, 0xa8, 0x00, 0x42, 0x2f, 0x04, 0xed, 0xa8, 0x00, 0x42, 0xc1, + 0x08, 0xee, 0xa8, 0x00, 0x42, 0x71, 0x00, 0xef, 0xa8, 0x00, 0xf5, 0xeb, + 0xa8, 0x00, 0x42, 0x02, 0x00, 0xf0, 0xa8, 0x40, 0x45, 0xd1, 0x09, 0xe8, + 0xa8, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0xe9, 0xa8, 0x00, 0x43, 0xcd, + 0x09, 0xe1, 0xa8, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0xe0, + 0xa8, 0x40, 0x44, 0x25, 0x01, 0xe3, 0xa8, 0x00, 0x42, 0x15, 0x02, 0xe2, + 0xa8, 0x40, 0x44, 0x96, 0x1b, 0xe7, 0xa8, 0x00, 0x42, 0x30, 0x27, 0xe6, + 0xa8, 0x40, 0x43, 0xd7, 0x04, 0xe5, 0xa8, 0x00, 0x43, 0xfb, 0x05, 0xe4, + 0xa8, 0x40, 0xa1, 0xb7, 0x03, 0x46, 0x73, 0xb8, 0x27, 0x03, 0x00, 0x50, + 0xd5, 0x03, 0x02, 0x03, 0x80, 0xa3, 0x03, 0x09, 0xbe, 0x0e, 0x92, 0x03, + 0xaf, 0xeb, 0x02, 0x08, 0xf9, 0xc2, 0x01, 0xff, 0x4e, 0xd3, 0x6f, 0x85, + 0x04, 0x00, 0x08, 0xe9, 0x0f, 0xcf, 0x02, 0x46, 0x6c, 0x4a, 0x7c, 0xa6, + 0x00, 0x07, 0xf1, 0x04, 0x52, 0x4d, 0xca, 0x37, 0x89, 0x04, 0x00, 0xb0, + 0x30, 0x65, 0x7c, 0x07, 0x8f, 0xe0, 0x01, 0xb4, 0x06, 0x45, 0x4f, 0xe1, + 0x6f, 0xa6, 0x40, 0x50, 0x8e, 0x5c, 0x70, 0xa6, 0x00, 0x55, 0xc2, 0x37, + 0x72, 0xa6, 0x00, 0x44, 0x64, 0x90, 0x83, 0x04, 0xc0, 0x00, 0x80, 0x01, + 0xff, 0x49, 0x53, 0x12, 0x2e, 0xfe, 0x00, 0x4a, 0xac, 0x03, 0x2f, 0xfe, + 0x40, 0xa1, 0x0c, 0x47, 0xa2, 0xc9, 0x87, 0x04, 0x00, 0x4d, 0x55, 0x81, + 0x86, 0x04, 0x40, 0x4c, 0x5f, 0x89, 0x84, 0x04, 0x00, 0x45, 0x61, 0xca, + 0x7d, 0xa6, 0x40, 0xe1, 0xf6, 0x2d, 0x00, 0xa2, 0xe2, 0x01, 0x43, 0x21, + 0x2c, 0xf1, 0x2d, 0x00, 0xa4, 0xcf, 0x01, 0xa5, 0xad, 0x01, 0x44, 0xf2, + 0xe4, 0xf4, 0x2d, 0x00, 0x43, 0x3a, 0xc7, 0xe2, 0x2d, 0x00, 0x42, 0x22, + 0x00, 0xef, 0x2d, 0x80, 0x93, 0x01, 0xe9, 0x75, 0xa6, 0x80, 0x77, 0x42, + 0x1b, 0x02, 0xe6, 0x2d, 0x00, 0x4a, 0xa4, 0x53, 0xfd, 0x2d, 0x00, 0x4c, + 0x8b, 0x8a, 0xf9, 0x2d, 0x00, 0xef, 0xea, 0x2d, 0x80, 0x5a, 0x42, 0x6f, + 0x02, 0xeb, 0x2d, 0x00, 0xb3, 0x40, 0xb4, 0x34, 0xf5, 0x77, 0xa6, 0x80, + 0x29, 0x42, 0x32, 0x00, 0xe1, 0x2d, 0x00, 0xb9, 0x0d, 0xba, 0x01, 0xff, + 0xe5, 0xe5, 0x2d, 0x00, 0x42, 0xb0, 0x01, 0xe4, 0x2d, 0x40, 0x42, 0x8a, + 0x00, 0xfa, 0x2d, 0x00, 0x43, 0x6d, 0x28, 0x79, 0xa6, 0x00, 0xe9, 0x76, + 0xa6, 0x00, 0xf5, 0xfb, 0x2d, 0x40, 0x4b, 0xf3, 0x95, 0x74, 0xa6, 0x40, + 0xe5, 0xee, 0x2d, 0x00, 0x42, 0xc7, 0x02, 0xf0, 0x2d, 0x40, 0xa8, 0x06, + 0x48, 0x0b, 0x87, 0x7a, 0xa6, 0x40, 0xe1, 0xf2, 0x2d, 0x00, 0x43, 0x29, + 0x1e, 0xf3, 0x2d, 0x40, 0x44, 0x18, 0x75, 0x7b, 0xa6, 0x40, 0xe5, 0xf7, + 0x2d, 0x00, 0x08, 0xb9, 0xbf, 0x01, 0xff, 0xe1, 0xfc, 0x2d, 0x00, 0x47, + 0x73, 0xc5, 0xff, 0x2d, 0x00, 0xe5, 0x9f, 0xa6, 0x40, 0x47, 0x68, 0x8b, + 0x78, 0xa6, 0x40, 0xe6, 0x9e, 0xa6, 0x00, 0xec, 0xe7, 0x2d, 0x00, 0xed, + 0xe8, 0x2d, 0x00, 0xee, 0xe9, 0x2d, 0x00, 0xf2, 0xec, 0x2d, 0x00, 0xf3, + 0xed, 0x2d, 0xc0, 0x00, 0x43, 0x00, 0x76, 0xf5, 0x2d, 0x40, 0xe5, 0xe3, + 0x2d, 0x00, 0x44, 0xfe, 0xdc, 0xf8, 0x2d, 0x40, 0xe5, 0xe0, 0x2d, 0x00, + 0x46, 0x74, 0xc5, 0xfe, 0x2d, 0x40, 0x4d, 0xca, 0x37, 0x71, 0xa6, 0x00, + 0x4e, 0x47, 0x76, 0x88, 0x04, 0x40, 0x04, 0x1a, 0x04, 0x0d, 0x4f, 0xe4, + 0x69, 0x26, 0xfe, 0xc0, 0x00, 0x46, 0x24, 0x06, 0x2d, 0xfe, 0x40, 0x45, + 0x5c, 0x00, 0x13, 0x03, 0x80, 0x06, 0x45, 0x25, 0x06, 0x26, 0x03, 0x40, + 0x46, 0xc7, 0x00, 0x15, 0x03, 0x40, 0x4b, 0xce, 0x00, 0xd5, 0x20, 0x00, + 0x4c, 0xef, 0x8c, 0xd9, 0x20, 0x40, 0x46, 0x24, 0x06, 0x2d, 0x03, 0x40, + 0x49, 0x3d, 0x21, 0x10, 0x03, 0x00, 0x43, 0x09, 0x0d, 0x0c, 0x03, 0xc0, + 0x00, 0x46, 0x24, 0x06, 0x2c, 0x03, 0x40, 0x4a, 0x4e, 0xa3, 0x3b, 0x13, + 0x01, 0xb2, 0x01, 0xff, 0x43, 0xb3, 0x11, 0x06, 0x03, 0x80, 0x11, 0x05, + 0x0c, 0x38, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x46, 0x03, 0x00, 0x45, 0x25, + 0x06, 0x2a, 0x03, 0x40, 0x46, 0x24, 0x06, 0x2e, 0x03, 0x00, 0x47, 0xc1, + 0xc3, 0xcb, 0x1d, 0x40, 0x04, 0xcf, 0x34, 0x3a, 0x0f, 0x12, 0x69, 0x2a, + 0xae, 0x11, 0x08, 0x1e, 0x61, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xf0, 0x20, + 0x00, 0x45, 0x25, 0x06, 0x59, 0x03, 0x40, 0x4c, 0x4b, 0x8b, 0xe7, 0x20, + 0x00, 0x0c, 0xbb, 0x0e, 0x01, 0xff, 0x4b, 0xce, 0x00, 0xd4, 0x20, 0x00, + 0x4c, 0xef, 0x8c, 0xda, 0x20, 0x40, 0x45, 0x5c, 0x00, 0x4c, 0x03, 0x00, + 0x45, 0x25, 0x06, 0xfd, 0x1d, 0x40, 0x80, 0x0f, 0x8d, 0x01, 0xff, 0x4b, + 0x72, 0x94, 0xc9, 0x1d, 0x00, 0x46, 0xed, 0x69, 0xc7, 0x1d, 0x40, 0x46, + 0xdf, 0x03, 0x01, 0x03, 0x80, 0x06, 0x49, 0xdd, 0x29, 0x41, 0x03, 0x40, + 0x46, 0x24, 0x06, 0x17, 0x03, 0x40, 0x4d, 0xfb, 0x7d, 0xa5, 0xf4, 0x01, + 0x42, 0x10, 0x00, 0x3a, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x46, 0xa2, + 0x11, 0x54, 0x22, 0x00, 0x44, 0xdb, 0x02, 0xa1, 0x20, 0x40, 0xab, 0x06, + 0x44, 0xda, 0xe6, 0x65, 0xf9, 0x41, 0x45, 0xa0, 0xca, 0xb3, 0xfa, 0x01, + 0x4a, 0xe4, 0xa8, 0x78, 0xf3, 0x41, 0xa1, 0xdb, 0x03, 0x51, 0x36, 0x54, + 0x9a, 0x23, 0x00, 0xa9, 0xbc, 0x03, 0xaf, 0x01, 0xff, 0x02, 0x36, 0x01, + 0x8f, 0x01, 0x02, 0xc7, 0x02, 0x2a, 0x42, 0x2c, 0x0b, 0x01, 0x26, 0x80, + 0x06, 0x47, 0x7c, 0x75, 0x21, 0xf9, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, + 0x49, 0x28, 0xb2, 0x29, 0xf3, 0x01, 0x44, 0x98, 0x07, 0x27, 0xf3, 0x01, + 0x44, 0x4d, 0x2b, 0x28, 0xf3, 0x01, 0x47, 0x57, 0xcc, 0x2a, 0xf3, 0x41, + 0x43, 0x4f, 0x02, 0x50, 0x20, 0x00, 0x02, 0x06, 0x00, 0x01, 0xff, 0x44, + 0x66, 0xe4, 0xd5, 0xf4, 0x01, 0x58, 0x47, 0x26, 0x4d, 0x2a, 0x00, 0x4d, + 0x15, 0x7e, 0x10, 0xf5, 0x01, 0x0d, 0x49, 0x7e, 0x34, 0x02, 0x6f, 0x00, + 0x16, 0xb5, 0x01, 0xff, 0x47, 0x67, 0x5b, 0x02, 0xf3, 0x01, 0x50, 0x0e, + 0x5f, 0x4c, 0x2a, 0xc0, 0x00, 0x52, 0xa0, 0x49, 0x50, 0x2a, 0x40, 0x44, + 0xf5, 0x10, 0xcf, 0x2a, 0x80, 0x0d, 0x46, 0x14, 0x32, 0xd0, 0x2a, 0xc0, + 0x00, 0x4c, 0xf3, 0x25, 0xd2, 0x2a, 0x40, 0x4c, 0xf3, 0x25, 0xd1, 0x2a, + 0x40, 0x4c, 0xef, 0x89, 0xea, 0xf4, 0x01, 0x4b, 0x84, 0x99, 0xeb, 0xf4, + 0x41, 0x06, 0xec, 0x06, 0x51, 0x05, 0xc2, 0x0e, 0x01, 0xff, 0xa3, 0x3e, + 0x68, 0xe5, 0x03, 0x03, 0xf5, 0x01, 0x53, 0x23, 0x44, 0xf3, 0x27, 0x00, + 0x48, 0xad, 0x23, 0x31, 0x22, 0x00, 0x51, 0xfb, 0x03, 0xbb, 0x21, 0x00, + 0x05, 0xc8, 0x00, 0x0f, 0xb4, 0x01, 0xff, 0x53, 0x5d, 0x46, 0xb7, 0x21, + 0x00, 0x60, 0x4c, 0x0e, 0x6e, 0x2b, 0x40, 0x5b, 0xbd, 0x17, 0xd8, 0xf5, + 0x01, 0x66, 0x9c, 0x06, 0x01, 0xf5, 0xc1, 0x00, 0x59, 0x53, 0x20, 0x02, + 0xf5, 0x41, 0x52, 0xea, 0x4d, 0x41, 0x29, 0x00, 0x4f, 0xa7, 0x6a, 0x32, + 0x22, 0x40, 0xa5, 0xac, 0x01, 0xa6, 0x88, 0x01, 0x04, 0xb8, 0x27, 0x78, + 0x03, 0xcd, 0x09, 0x68, 0xb3, 0x45, 0xb4, 0x01, 0xff, 0x02, 0x92, 0x01, + 0x32, 0x04, 0x25, 0x01, 0x22, 0xb7, 0x01, 0xff, 0x04, 0xb8, 0x28, 0x0f, + 0xaf, 0x01, 0xff, 0x47, 0x6d, 0xc3, 0x51, 0xf5, 0x01, 0x47, 0xd6, 0xc3, + 0x5d, 0xf5, 0x41, 0x47, 0x6d, 0xc3, 0x5b, 0xf5, 0x01, 0x47, 0xd6, 0xc3, + 0x67, 0xf5, 0x41, 0x47, 0x6d, 0xc3, 0x52, 0xf5, 0x01, 0x47, 0xd6, 0xc3, + 0x5e, 0xf5, 0x41, 0x47, 0x6d, 0xc3, 0x59, 0xf5, 0x01, 0x47, 0xd6, 0xc3, + 0x65, 0xf5, 0x41, 0x04, 0x96, 0x1b, 0x11, 0x02, 0x30, 0x27, 0x01, 0xff, + 0x47, 0x6d, 0xc3, 0x55, 0xf5, 0x01, 0x47, 0xd6, 0xc3, 0x61, 0xf5, 0x41, + 0x47, 0x6d, 0xc3, 0x56, 0xf5, 0x01, 0x47, 0xd6, 0xc3, 0x62, 0xf5, 0x41, + 0x47, 0x6d, 0xc3, 0x50, 0xf5, 0x01, 0x47, 0xd6, 0xc3, 0x5c, 0xf5, 0x41, + 0x47, 0x6d, 0xc3, 0x58, 0xf5, 0x01, 0x47, 0xd6, 0xc3, 0x64, 0xf5, 0x41, + 0x03, 0xd7, 0x04, 0x11, 0x03, 0xfb, 0x05, 0x01, 0xff, 0x47, 0x6d, 0xc3, + 0x53, 0xf5, 0x01, 0x47, 0xd6, 0xc3, 0x5f, 0xf5, 0x41, 0x47, 0x6d, 0xc3, + 0x54, 0xf5, 0x01, 0x47, 0xd6, 0xc3, 0x60, 0xf5, 0x41, 0x04, 0xc9, 0x00, + 0x11, 0x05, 0xf4, 0x68, 0x01, 0xff, 0x47, 0x6d, 0xc3, 0x5a, 0xf5, 0x01, + 0x47, 0xd6, 0xc3, 0x66, 0xf5, 0x41, 0x47, 0x6d, 0xc3, 0x57, 0xf5, 0x01, + 0x47, 0xd6, 0xc3, 0x63, 0xf5, 0x41, 0x06, 0xc1, 0x89, 0x06, 0x46, 0x97, + 0xd4, 0xcb, 0xf4, 0x41, 0x49, 0x96, 0xad, 0x7b, 0xf3, 0x01, 0x47, 0xce, + 0xb6, 0x42, 0xf9, 0x41, 0x53, 0xd8, 0x45, 0x81, 0xf5, 0x01, 0x02, 0x6e, + 0x02, 0x06, 0x4f, 0x87, 0x6c, 0xdb, 0xf3, 0x41, 0x48, 0x65, 0x7a, 0xac, + 0xf3, 0x01, 0x4e, 0xcb, 0x71, 0x4f, 0xf4, 0x41, 0x58, 0xc7, 0x24, 0x05, + 0xd8, 0x00, 0x08, 0xf7, 0x9c, 0xb1, 0x01, 0x07, 0x1d, 0x0d, 0x06, 0x52, + 0x2c, 0x2f, 0x01, 0xd8, 0x40, 0x43, 0xe6, 0xe8, 0xc3, 0x31, 0x00, 0xe4, + 0xd4, 0x31, 0x00, 0xe8, 0xd0, 0x31, 0x80, 0x5b, 0xee, 0xcf, 0x31, 0x00, + 0xf0, 0xd2, 0x31, 0x80, 0x46, 0xf1, 0xe3, 0x31, 0x00, 0xf3, 0xd1, 0x31, + 0x80, 0x15, 0xf4, 0xc0, 0x31, 0x80, 0x0c, 0x42, 0xd8, 0x3d, 0xc1, 0x31, + 0x00, 0x42, 0xe7, 0xe8, 0xc2, 0x31, 0x40, 0xee, 0xdd, 0x31, 0x40, 0xe7, + 0xda, 0x31, 0x00, 0xf0, 0xd3, 0x31, 0x00, 0xf4, 0xd9, 0x31, 0x00, 0xf7, + 0xc4, 0x31, 0x80, 0x0f, 0xfa, 0xd7, 0x31, 0xc0, 0x00, 0x42, 0xd8, 0x3d, + 0xc9, 0x31, 0x00, 0xfa, 0xde, 0x31, 0x40, 0xe7, 0xdf, 0x31, 0x00, 0xfa, + 0xd8, 0x31, 0x40, 0xe4, 0xdb, 0x31, 0x00, 0xe7, 0xe2, 0x31, 0x00, 0xfa, + 0xdc, 0x31, 0x40, 0xe7, 0xd6, 0x31, 0x00, 0xf0, 0xc7, 0x31, 0x80, 0x2e, + 0x43, 0xbb, 0xe9, 0xe0, 0x31, 0x00, 0xfa, 0xd5, 0x31, 0xc0, 0x00, 0xe7, + 0xc6, 0x31, 0x00, 0xf4, 0xca, 0x31, 0x00, 0xf7, 0xcd, 0x31, 0x80, 0x12, + 0xfa, 0xc5, 0x31, 0xc0, 0x00, 0xf0, 0xcb, 0x31, 0x00, 0xfa, 0xce, 0x31, + 0xc0, 0x00, 0xe7, 0xe1, 0x31, 0x40, 0xe7, 0xc8, 0x31, 0x40, 0x42, 0xd8, + 0x3d, 0xcc, 0x31, 0x40, 0xa2, 0xba, 0x06, 0xa3, 0xfb, 0x04, 0xa4, 0xe6, + 0x04, 0xa5, 0xbe, 0x04, 0xa6, 0xaf, 0x04, 0xa7, 0x8c, 0x04, 0xa8, 0xe4, + 0x03, 0xaa, 0xbc, 0x03, 0x06, 0x59, 0x9d, 0xab, 0x03, 0xac, 0xf8, 0x02, + 0xad, 0xc1, 0x02, 0x04, 0x7e, 0xe6, 0xa1, 0x02, 0x43, 0xae, 0x18, 0xb9, + 0x2e, 0x00, 0xb0, 0x82, 0x02, 0xb2, 0xe9, 0x01, 0xb3, 0x51, 0xb4, 0x37, + 0xb7, 0x01, 0xff, 0xa1, 0x11, 0x04, 0x8c, 0x18, 0x01, 0xff, 0x43, 0xcd, + 0x09, 0xc3, 0x2e, 0x00, 0x43, 0x25, 0x09, 0xc4, 0x2e, 0x40, 0x03, 0x58, + 0xe9, 0x11, 0x04, 0xf4, 0x04, 0x01, 0xff, 0x43, 0xcd, 0x09, 0xa1, 0x2e, + 0x00, 0x43, 0x25, 0x09, 0xa2, 0x2e, 0x40, 0x43, 0xcd, 0x09, 0xcd, 0x2e, + 0x00, 0x43, 0x25, 0x09, 0xce, 0x2e, 0x40, 0x44, 0x3d, 0x16, 0x87, 0x2e, + 0x00, 0x45, 0x0f, 0x96, 0x93, 0x2e, 0x00, 0x44, 0x92, 0xe5, 0xc1, 0x2e, + 0x00, 0x45, 0x27, 0xe1, 0xf1, 0x2e, 0x40, 0xa5, 0x74, 0x44, 0x3e, 0xe5, + 0xb6, 0x2e, 0x00, 0xa9, 0x3f, 0x05, 0x3d, 0x06, 0x2f, 0xae, 0x16, 0x06, + 0xbb, 0xd4, 0x06, 0x42, 0x24, 0x0a, 0x9c, 0x2e, 0x40, 0x43, 0xcd, 0x09, + 0xac, 0x2e, 0x00, 0x43, 0x25, 0x09, 0xad, 0x2e, 0x40, 0x43, 0xab, 0x24, + 0x92, 0x2e, 0x00, 0x04, 0x7c, 0x4b, 0x01, 0xff, 0x43, 0xcd, 0x09, 0x94, + 0x2e, 0x00, 0x43, 0x25, 0x09, 0x95, 0x2e, 0x40, 0x43, 0xcd, 0x09, 0x8c, + 0x2e, 0x00, 0x43, 0x25, 0x09, 0x8d, 0x2e, 0x40, 0x42, 0xb9, 0x7d, 0xaf, + 0x2e, 0x00, 0x09, 0x52, 0x84, 0x01, 0xff, 0xa8, 0x14, 0xb7, 0x06, 0x46, + 0xb5, 0xcd, 0xe9, 0x2e, 0x40, 0x43, 0xd1, 0xe8, 0xcc, 0x2e, 0x00, 0x44, + 0xb4, 0x94, 0xe8, 0x2e, 0x40, 0x4e, 0xe5, 0x6e, 0xa6, 0x2e, 0x00, 0x43, + 0x2d, 0x04, 0xc6, 0x2e, 0x40, 0x42, 0x13, 0x00, 0x8b, 0x2e, 0x00, 0x05, + 0x31, 0x75, 0x01, 0xff, 0x43, 0xcd, 0x09, 0x82, 0x2e, 0x00, 0xb4, 0x01, + 0xff, 0x44, 0x25, 0x01, 0x84, 0x2e, 0x00, 0x42, 0x15, 0x02, 0x83, 0x2e, + 0x40, 0xa1, 0x06, 0x45, 0x29, 0x66, 0x80, 0x2e, 0x40, 0x42, 0x9e, 0x01, + 0xd7, 0x2e, 0x00, 0xed, 0xb7, 0x2e, 0x00, 0xf0, 0x99, 0x2e, 0x40, 0x03, + 0xc4, 0x3f, 0x06, 0x45, 0xec, 0x1a, 0x85, 0x2e, 0x40, 0x43, 0xcd, 0x09, + 0xa4, 0x2e, 0x00, 0x43, 0x25, 0x09, 0xa5, 0x2e, 0x40, 0x44, 0xfa, 0x05, + 0xb4, 0x2e, 0x00, 0x43, 0xcd, 0x09, 0xb1, 0x2e, 0x00, 0xb4, 0x01, 0xff, + 0x44, 0x25, 0x01, 0xb3, 0x2e, 0x00, 0x42, 0x15, 0x02, 0xb2, 0x2e, 0x40, + 0xa5, 0x26, 0xaf, 0x01, 0xff, 0x42, 0x10, 0x00, 0x9d, 0x2e, 0x00, 0x44, + 0xfe, 0x47, 0xbd, 0x2e, 0x00, 0x44, 0x12, 0x18, 0x9f, 0x2e, 0x00, 0x04, + 0xb5, 0x10, 0x01, 0xff, 0x43, 0xcd, 0x09, 0xd5, 0x2e, 0x00, 0x43, 0x25, + 0x09, 0xd6, 0x2e, 0x40, 0x42, 0x8a, 0x00, 0xbc, 0x2e, 0x00, 0x42, 0xa4, + 0x02, 0xb5, 0x2e, 0x40, 0x04, 0x7e, 0xaf, 0x11, 0x04, 0x0a, 0x0d, 0x01, + 0xff, 0x43, 0xcd, 0x09, 0xd1, 0x2e, 0x00, 0x43, 0x25, 0x09, 0xd2, 0x2e, + 0x40, 0x44, 0xfa, 0x05, 0x91, 0x2e, 0x00, 0x43, 0xcd, 0x09, 0x8e, 0x2e, + 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x90, 0x2e, 0x00, 0x42, 0x15, + 0x02, 0x8f, 0x2e, 0x40, 0x43, 0xcd, 0x09, 0x88, 0x2e, 0x00, 0x43, 0x25, + 0x09, 0x89, 0x2e, 0x40, 0x0c, 0x4f, 0x84, 0x06, 0x43, 0x0c, 0x02, 0xa9, + 0x2e, 0x40, 0x46, 0xd9, 0x87, 0xef, 0x2e, 0x00, 0x44, 0x96, 0x1b, 0xeb, + 0x2e, 0x00, 0xb4, 0x01, 0xff, 0x44, 0xe2, 0xe6, 0xed, 0x2e, 0x00, 0x45, + 0x27, 0xe1, 0xf2, 0x2e, 0x40, 0x43, 0x1a, 0x00, 0x98, 0x2e, 0x00, 0x02, + 0x89, 0x00, 0x06, 0x43, 0x2d, 0x04, 0xc7, 0x2e, 0x40, 0xe4, 0xe1, 0x2e, + 0x00, 0x03, 0xc3, 0x08, 0x01, 0xff, 0x43, 0xcd, 0x09, 0x96, 0x2e, 0x00, + 0x43, 0x25, 0x09, 0x97, 0x2e, 0x40, 0x44, 0x0c, 0x76, 0xe4, 0x2e, 0x00, + 0x05, 0xb4, 0x1d, 0x01, 0xff, 0x43, 0xcd, 0x09, 0xbe, 0x2e, 0x00, 0xb4, + 0x01, 0xff, 0x44, 0x25, 0x01, 0xc0, 0x2e, 0x00, 0x42, 0x15, 0x02, 0xbf, + 0x2e, 0x40, 0x43, 0xe0, 0x0b, 0xa3, 0x2e, 0x00, 0x43, 0x4a, 0x66, 0xca, + 0x2e, 0x40, 0x03, 0x42, 0x04, 0x0c, 0x42, 0x15, 0x01, 0xb8, 0x2e, 0x00, + 0x42, 0x4d, 0x00, 0xab, 0x2e, 0x40, 0x43, 0xcd, 0x09, 0xdd, 0x2e, 0x00, + 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xdf, 0x2e, 0x00, 0x42, 0x15, 0x02, + 0xde, 0x2e, 0x40, 0x44, 0xcb, 0x0d, 0x9e, 0x2e, 0x00, 0x49, 0x98, 0xb1, + 0x8a, 0x2e, 0x00, 0x42, 0xc4, 0x16, 0xa8, 0x2e, 0x40, 0x0c, 0x4f, 0x84, + 0x28, 0x44, 0x03, 0xd3, 0x9b, 0x2e, 0x00, 0xa9, 0x14, 0xac, 0x06, 0x42, + 0xd1, 0x00, 0xa7, 0x2e, 0x40, 0x43, 0x0e, 0x43, 0x81, 0x2e, 0x00, 0x45, + 0xdb, 0x80, 0xc2, 0x2e, 0x40, 0x42, 0xf5, 0x0f, 0xcf, 0x2e, 0x00, 0x46, + 0xa1, 0xd6, 0xa0, 0x2e, 0x40, 0x44, 0x1c, 0x9f, 0xe6, 0x2e, 0x00, 0x44, + 0xc1, 0x65, 0xcb, 0x2e, 0x00, 0x46, 0xd9, 0x87, 0xf0, 0x2e, 0x00, 0xa5, + 0x70, 0xa6, 0x5c, 0xa7, 0x4e, 0x45, 0x47, 0xaa, 0xe2, 0x2e, 0x00, 0xac, + 0x3a, 0xb3, 0x1a, 0xb4, 0x06, 0x44, 0xe8, 0x11, 0xdb, 0x2e, 0x40, 0x4d, + 0x83, 0x79, 0xd9, 0x2e, 0x00, 0x44, 0xe2, 0xe6, 0xee, 0x2e, 0x00, 0x45, + 0x27, 0xe1, 0xf3, 0x2e, 0x40, 0x43, 0x69, 0x10, 0xe7, 0x2e, 0x00, 0x42, + 0x27, 0x01, 0xc5, 0x2e, 0x00, 0x44, 0x40, 0x08, 0xc9, 0x2e, 0x00, 0x43, + 0x87, 0xa8, 0xb0, 0x2e, 0x00, 0x45, 0xbc, 0x75, 0xc8, 0x2e, 0x40, 0x43, + 0xb9, 0x4b, 0xda, 0x2e, 0x00, 0x43, 0x0a, 0x0d, 0xd3, 0x2e, 0x40, 0x43, + 0x8a, 0x00, 0xd4, 0x2e, 0x00, 0x43, 0xae, 0x18, 0xd0, 0x2e, 0x40, 0x43, + 0x4b, 0x0b, 0xe5, 0x2e, 0x00, 0x42, 0xd2, 0x06, 0xdc, 0x2e, 0x00, 0x43, + 0xb1, 0x26, 0xea, 0x2e, 0x40, 0x42, 0x8a, 0x00, 0xe0, 0x2e, 0x00, 0x43, + 0x97, 0x1b, 0xec, 0x2e, 0x40, 0x45, 0x58, 0xc5, 0xae, 0x2e, 0x00, 0x43, + 0x64, 0x85, 0xd8, 0x2e, 0x00, 0xaf, 0x11, 0x05, 0xe7, 0xdf, 0x01, 0xff, + 0x43, 0xcd, 0x09, 0xba, 0x2e, 0x00, 0x43, 0x25, 0x09, 0xbb, 0x2e, 0x40, + 0x4b, 0xe5, 0x96, 0xaa, 0x2e, 0x00, 0x42, 0xd2, 0x04, 0xe3, 0x2e, 0x00, + 0xf8, 0x86, 0x2e, 0x40, 0x44, 0x76, 0xe6, 0xa6, 0xf3, 0x01, 0x02, 0xd6, + 0x03, 0x0d, 0x47, 0x88, 0xcc, 0xd9, 0xf3, 0xc1, 0x00, 0x48, 0x69, 0xb8, + 0x06, 0xf3, 0x41, 0x02, 0x68, 0x00, 0x15, 0xb5, 0x01, 0xff, 0x4f, 0x7c, + 0x68, 0x10, 0x2a, 0x00, 0x4c, 0xd9, 0x03, 0x5e, 0x00, 0x00, 0x46, 0x45, + 0xd5, 0xaa, 0xf3, 0x41, 0x80, 0xa7, 0x0e, 0x02, 0x06, 0x00, 0x01, 0xff, + 0xa1, 0x89, 0x0e, 0xa2, 0xfa, 0x0d, 0xa3, 0xbe, 0x0d, 0xa4, 0xcd, 0x0c, + 0x46, 0xa2, 0x11, 0x9c, 0x22, 0x00, 0x4c, 0x87, 0x00, 0xc1, 0x29, 0x00, + 0xa8, 0xe1, 0x0a, 0xa9, 0xc7, 0x07, 0xab, 0xdd, 0x05, 0xac, 0xf7, 0x03, + 0xad, 0xe8, 0x03, 0x07, 0xbf, 0x35, 0x6f, 0x5e, 0x7f, 0x12, 0x42, 0x27, + 0x00, 0xb0, 0x4f, 0xb2, 0x41, 0x46, 0xdb, 0x04, 0xd7, 0xf7, 0x01, 0xb4, + 0x26, 0x4c, 0x32, 0x00, 0xb6, 0x29, 0x00, 0xb7, 0x0a, 0xf8, 0xbe, 0x2b, + 0x00, 0x4f, 0x58, 0x6e, 0x0d, 0xf1, 0x41, 0x05, 0xae, 0x02, 0x04, 0xfa, + 0x2e, 0xf1, 0x41, 0x46, 0x64, 0x1f, 0xbe, 0x29, 0x00, 0x44, 0x8b, 0x11, + 0x2a, 0x27, 0x40, 0x44, 0x29, 0x02, 0x97, 0x22, 0x00, 0x47, 0x02, 0x02, + 0xd5, 0xf7, 0xc1, 0x00, 0x45, 0xa4, 0x01, 0x8a, 0x23, 0x40, 0x4e, 0xb6, + 0x6b, 0xb8, 0x29, 0x00, 0x4c, 0xb7, 0x88, 0x9a, 0x22, 0x40, 0x47, 0x5e, + 0x34, 0xb7, 0x29, 0x00, 0x4c, 0x2b, 0x87, 0xb9, 0x29, 0x00, 0x43, 0x72, + 0x25, 0x95, 0x22, 0x00, 0x4a, 0x78, 0xa6, 0x36, 0x30, 0x40, 0xa5, 0xdc, + 0x02, 0xa6, 0xec, 0x01, 0x48, 0x20, 0x4e, 0x72, 0x24, 0x00, 0xb3, 0xc2, + 0x01, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x69, 0x24, 0x80, 0xb1, 0x01, + 0x04, 0xf2, 0x0f, 0x5a, 0x02, 0x15, 0x01, 0x01, 0xff, 0x43, 0xb9, 0x28, + 0x6b, 0x24, 0x00, 0x43, 0x99, 0x1b, 0x73, 0x24, 0xc0, 0x00, 0x80, 0x01, + 0xff, 0x45, 0xd1, 0x09, 0x58, 0x32, 0x00, 0xa6, 0x31, 0x44, 0xb8, 0x27, + 0x59, 0x32, 0x00, 0x02, 0x10, 0x00, 0x1d, 0xb3, 0x0f, 0xb4, 0x01, 0xff, + 0x44, 0x25, 0x01, 0x53, 0x32, 0x00, 0x42, 0x15, 0x02, 0x52, 0x32, 0x40, + 0x44, 0x96, 0x1b, 0x57, 0x32, 0x00, 0x42, 0x30, 0x27, 0x56, 0x32, 0x40, + 0x4d, 0xb9, 0x0f, 0x49, 0x32, 0x00, 0xe5, 0x51, 0x32, 0x40, 0x43, 0xd7, + 0x04, 0x55, 0x32, 0x00, 0x43, 0xfb, 0x05, 0x54, 0x32, 0x40, 0x43, 0xca, + 0x08, 0x6c, 0x24, 0x00, 0xf9, 0x5a, 0x32, 0xc0, 0x00, 0x80, 0x01, 0xff, + 0x45, 0xd1, 0x09, 0xb3, 0x32, 0x00, 0xa6, 0x31, 0x44, 0xb8, 0x27, 0xb4, + 0x32, 0x00, 0x02, 0x10, 0x00, 0x1d, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, + 0x25, 0x01, 0x5d, 0x32, 0x00, 0x42, 0x15, 0x02, 0x5c, 0x32, 0x40, 0x44, + 0x96, 0x1b, 0xb2, 0x32, 0x00, 0x42, 0x30, 0x27, 0xb1, 0x32, 0x40, 0x4d, + 0xb9, 0x0f, 0x4a, 0x32, 0x00, 0xe5, 0x5b, 0x32, 0x40, 0x43, 0xd7, 0x04, + 0x5f, 0x32, 0x00, 0x43, 0xfb, 0x05, 0x5e, 0x32, 0x40, 0x50, 0xed, 0x59, + 0x48, 0x32, 0x40, 0x05, 0x96, 0x1b, 0x11, 0x03, 0x30, 0x27, 0x01, 0xff, + 0x43, 0xca, 0x08, 0x6f, 0x24, 0x00, 0x51, 0xec, 0x59, 0x4d, 0x32, 0x40, + 0x43, 0xca, 0x08, 0x70, 0x24, 0x00, 0x51, 0xec, 0x59, 0x4e, 0x32, 0x40, + 0x03, 0x27, 0x16, 0x58, 0xaf, 0x01, 0xff, 0x43, 0xf4, 0x0f, 0xb5, 0x32, + 0x80, 0x06, 0x46, 0x23, 0x57, 0x6d, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, + 0xd1, 0x09, 0xbd, 0x32, 0x00, 0xa6, 0x31, 0x44, 0xb8, 0x27, 0xbe, 0x32, + 0x00, 0x02, 0x10, 0x00, 0x1d, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, + 0x01, 0xb8, 0x32, 0x00, 0x42, 0x15, 0x02, 0xb7, 0x32, 0x40, 0x44, 0x96, + 0x1b, 0xbc, 0x32, 0x00, 0x42, 0x30, 0x27, 0xbb, 0x32, 0x40, 0x4d, 0xb9, + 0x0f, 0x4b, 0x32, 0x00, 0xe5, 0xb6, 0x32, 0x40, 0x43, 0xd7, 0x04, 0xba, + 0x32, 0x00, 0x43, 0xfb, 0x05, 0xb9, 0x32, 0x40, 0x43, 0xca, 0x08, 0x6e, + 0x24, 0x00, 0xf9, 0xbf, 0x32, 0xc0, 0x00, 0x50, 0xed, 0x59, 0x4c, 0x32, + 0x40, 0x04, 0xc9, 0x00, 0x06, 0x45, 0xf4, 0x68, 0x6a, 0x24, 0x40, 0x43, + 0xca, 0x08, 0x71, 0x24, 0x00, 0x51, 0xec, 0x59, 0x4f, 0x32, 0x40, 0x44, + 0x2a, 0x1d, 0x96, 0x22, 0x00, 0x69, 0xbc, 0x03, 0x36, 0x2a, 0x40, 0x05, + 0xe4, 0x04, 0x06, 0x48, 0xed, 0x00, 0xc0, 0x29, 0x40, 0x0f, 0xe9, 0x04, + 0x6d, 0x0d, 0x7c, 0x07, 0x01, 0xff, 0xe1, 0xd0, 0x24, 0x00, 0xe2, 0xd1, + 0x24, 0x00, 0xe3, 0xd2, 0x24, 0x00, 0xe4, 0xd3, 0x24, 0x00, 0xe5, 0xd4, + 0x24, 0x00, 0xe6, 0xd5, 0x24, 0x00, 0xe7, 0xd6, 0x24, 0x00, 0xe8, 0xd7, + 0x24, 0x00, 0xe9, 0xd8, 0x24, 0x00, 0xea, 0xd9, 0x24, 0x00, 0xeb, 0xda, + 0x24, 0x00, 0xec, 0xdb, 0x24, 0x00, 0xed, 0xdc, 0x24, 0x00, 0xee, 0xdd, + 0x24, 0x00, 0xef, 0xde, 0x24, 0x00, 0xf0, 0xdf, 0x24, 0x00, 0xf1, 0xe0, + 0x24, 0x00, 0xf2, 0xe1, 0x24, 0x00, 0xf3, 0xe2, 0x24, 0x00, 0xf4, 0xe3, + 0x24, 0x00, 0xf5, 0xe4, 0x24, 0x00, 0xf6, 0xe5, 0x24, 0x00, 0xf7, 0xe6, + 0x24, 0x00, 0xf8, 0xe7, 0x24, 0x00, 0xf9, 0xe8, 0x24, 0x00, 0xfa, 0xe9, + 0x24, 0x40, 0xe1, 0xb6, 0x24, 0x00, 0xe2, 0xb7, 0x24, 0x00, 0xe3, 0xb8, + 0x24, 0x00, 0xe4, 0xb9, 0x24, 0x00, 0xe5, 0xba, 0x24, 0x00, 0xe6, 0xbb, + 0x24, 0x00, 0xe7, 0xbc, 0x24, 0x00, 0xe8, 0xbd, 0x24, 0x00, 0xe9, 0xbe, + 0x24, 0x00, 0xea, 0xbf, 0x24, 0x00, 0xeb, 0xc0, 0x24, 0x00, 0xec, 0xc1, + 0x24, 0x00, 0xed, 0xc2, 0x24, 0x00, 0xee, 0xc3, 0x24, 0x00, 0xef, 0xc4, + 0x24, 0x00, 0xf0, 0xc5, 0x24, 0x00, 0xf1, 0xc6, 0x24, 0x00, 0xf2, 0xc7, + 0x24, 0x00, 0xf3, 0xc8, 0x24, 0x00, 0xf4, 0xc9, 0x24, 0x00, 0xf5, 0xca, + 0x24, 0x00, 0xf6, 0xcb, 0x24, 0x00, 0xf7, 0xcc, 0x24, 0x00, 0xf8, 0xcd, + 0x24, 0x00, 0xf9, 0xce, 0x24, 0x00, 0xfa, 0xcf, 0x24, 0x40, 0x08, 0x21, + 0xba, 0x11, 0x10, 0xb5, 0x4d, 0x01, 0xff, 0x46, 0x4d, 0xd0, 0x7c, 0x32, + 0x00, 0x45, 0x0d, 0xdd, 0x7d, 0x32, 0x40, 0xe1, 0xd0, 0x32, 0x00, 0xe5, + 0xd3, 0x32, 0x00, 0xa8, 0xb3, 0x01, 0xe9, 0xd1, 0x32, 0x00, 0xab, 0x98, + 0x01, 0xad, 0x81, 0x01, 0xae, 0x6b, 0xef, 0xd4, 0x32, 0x00, 0xb2, 0x51, + 0xb3, 0x3b, 0xb4, 0x25, 0xf5, 0xd2, 0x32, 0x00, 0xb7, 0x0f, 0xb9, 0x01, + 0xff, 0xe1, 0xf3, 0x32, 0x00, 0xef, 0xf5, 0x32, 0x00, 0xf5, 0xf4, 0x32, + 0x40, 0xe1, 0xfb, 0x32, 0x00, 0xe5, 0xfd, 0x32, 0x00, 0xe9, 0xfc, 0x32, + 0x00, 0xef, 0xfe, 0x32, 0x40, 0xe1, 0xdf, 0x32, 0x00, 0xe5, 0xe2, 0x32, + 0x00, 0xe9, 0xe0, 0x32, 0x00, 0xef, 0xe3, 0x32, 0x00, 0xf5, 0xe1, 0x32, + 0x40, 0xe1, 0xda, 0x32, 0x00, 0xe5, 0xdd, 0x32, 0x00, 0xe9, 0xdb, 0x32, + 0x00, 0xef, 0xde, 0x32, 0x00, 0xf5, 0xdc, 0x32, 0x40, 0xe1, 0xf6, 0x32, + 0x00, 0xe5, 0xf9, 0x32, 0x00, 0xe9, 0xf7, 0x32, 0x00, 0xef, 0xfa, 0x32, + 0x00, 0xf5, 0xf8, 0x32, 0x40, 0xe1, 0xe4, 0x32, 0x00, 0xe5, 0xe7, 0x32, + 0x00, 0xe9, 0xe5, 0x32, 0x00, 0xef, 0xe8, 0x32, 0x00, 0xf5, 0xe6, 0x32, + 0x40, 0xe1, 0xee, 0x32, 0x00, 0xe5, 0xf1, 0x32, 0x00, 0xe9, 0xef, 0x32, + 0x00, 0xef, 0xf2, 0x32, 0x00, 0xf5, 0xf0, 0x32, 0x40, 0xe1, 0xd5, 0x32, + 0x00, 0xe5, 0xd8, 0x32, 0x00, 0xe9, 0xd6, 0x32, 0x00, 0xef, 0xd9, 0x32, + 0x00, 0xf5, 0xd7, 0x32, 0x40, 0xe1, 0xe9, 0x32, 0x00, 0xe5, 0xec, 0x32, + 0x00, 0xe9, 0xea, 0x32, 0x00, 0xef, 0xed, 0x32, 0x00, 0xf5, 0xeb, 0x32, + 0x40, 0x09, 0x09, 0xa3, 0x13, 0x51, 0xde, 0x56, 0xc8, 0xf6, 0x01, 0x1b, + 0x6e, 0x1b, 0x01, 0xff, 0xe3, 0x2b, 0xf1, 0x01, 0xf2, 0x2c, 0xf1, 0x41, + 0xa1, 0xe5, 0x02, 0xa3, 0xc7, 0x02, 0xa5, 0xac, 0x02, 0xa6, 0x89, 0x02, + 0xa8, 0xfa, 0x01, 0x44, 0xe5, 0xb7, 0xa0, 0x32, 0x00, 0xab, 0xe5, 0x01, + 0xac, 0xd0, 0x01, 0xad, 0xb3, 0x01, 0xae, 0x9b, 0x01, 0x43, 0xcd, 0x09, + 0x80, 0x32, 0x00, 0x45, 0x6b, 0xc2, 0x9e, 0x32, 0x00, 0x48, 0xbd, 0x30, + 0x44, 0x32, 0x00, 0xb2, 0x6c, 0xb3, 0x23, 0xb4, 0x0f, 0xb7, 0x01, 0xff, + 0x44, 0x8a, 0x00, 0x8c, 0x32, 0x00, 0x43, 0x56, 0x2a, 0x8d, 0x32, 0x40, + 0x42, 0x92, 0x01, 0x89, 0x32, 0x00, 0x44, 0x25, 0x01, 0x82, 0x32, 0x00, + 0x42, 0x15, 0x02, 0x81, 0x32, 0x40, 0x45, 0x9c, 0xda, 0x46, 0x32, 0x00, + 0xa5, 0x33, 0x42, 0x30, 0x27, 0x85, 0x32, 0x00, 0x46, 0x3d, 0xd4, 0x93, + 0x32, 0x00, 0x46, 0xa3, 0xd4, 0x95, 0x32, 0x00, 0xb4, 0x13, 0xb5, 0x01, + 0xff, 0x46, 0xd5, 0xd2, 0x9c, 0x32, 0x00, 0xee, 0x90, 0x32, 0x00, 0x47, + 0x7b, 0xca, 0xac, 0x32, 0x40, 0x43, 0x35, 0x01, 0x91, 0x32, 0x00, 0x43, + 0x8e, 0xe9, 0xab, 0x32, 0x40, 0x44, 0x8e, 0xe4, 0x99, 0x32, 0x00, 0x43, + 0x97, 0x1b, 0x86, 0x32, 0x40, 0xa5, 0x06, 0x44, 0xc9, 0x00, 0xa8, 0x32, + 0x40, 0x46, 0x53, 0xd3, 0xaa, 0x32, 0x00, 0xb3, 0x01, 0xff, 0x45, 0xea, + 0x56, 0xae, 0x32, 0x00, 0xf4, 0xa1, 0x32, 0x40, 0x43, 0x30, 0x04, 0x94, + 0x32, 0x00, 0xa9, 0x01, 0xff, 0x43, 0xca, 0x00, 0xb0, 0x32, 0x00, 0x42, + 0xd2, 0x04, 0x88, 0x32, 0x40, 0x43, 0x67, 0x00, 0x9a, 0x32, 0x00, 0xa5, + 0x06, 0x43, 0x99, 0x04, 0x8a, 0x32, 0x40, 0x46, 0xb9, 0xd0, 0xa9, 0x32, + 0x00, 0x43, 0x12, 0x00, 0x8e, 0x32, 0x40, 0x44, 0x5e, 0xdd, 0x98, 0x32, + 0x00, 0x43, 0xc4, 0x00, 0xa7, 0x32, 0x00, 0x42, 0xd1, 0x00, 0xa6, 0x32, + 0x40, 0x4b, 0x7a, 0x95, 0x45, 0x32, 0x00, 0x43, 0x80, 0x86, 0x47, 0x32, + 0x40, 0x43, 0x10, 0x07, 0x92, 0x32, 0x00, 0x43, 0x3f, 0x00, 0xa4, 0x32, + 0x40, 0x45, 0xef, 0x1e, 0x9b, 0x32, 0x00, 0xa9, 0x06, 0x43, 0xfb, 0x05, + 0x83, 0x32, 0x40, 0x47, 0x47, 0xc9, 0x96, 0x32, 0x00, 0x42, 0x88, 0x00, + 0x8b, 0x32, 0x00, 0x42, 0x32, 0x00, 0x84, 0x32, 0x40, 0x44, 0xa2, 0x6b, + 0x8f, 0x32, 0x00, 0x44, 0xc9, 0x00, 0x87, 0x32, 0x00, 0x49, 0x63, 0xb3, + 0xad, 0x32, 0x00, 0x48, 0xa9, 0xc2, 0x9d, 0x32, 0x40, 0x45, 0x74, 0x02, + 0xa5, 0x32, 0x00, 0xaf, 0x01, 0xff, 0x4c, 0xb6, 0x7f, 0x97, 0x32, 0x00, + 0x42, 0xe8, 0x1a, 0xa2, 0x32, 0x00, 0x45, 0x4d, 0xcb, 0xa3, 0x32, 0x40, + 0x45, 0x6a, 0xda, 0x51, 0xf2, 0x01, 0x48, 0xb9, 0xbb, 0x50, 0xf2, 0x01, + 0x47, 0xb2, 0xb9, 0xaf, 0x32, 0x00, 0x48, 0xd1, 0xc1, 0x9f, 0x32, 0x40, + 0x06, 0x65, 0xc7, 0x12, 0x5b, 0xe6, 0x18, 0xb2, 0x27, 0x00, 0x58, 0x37, + 0x27, 0x89, 0x23, 0x00, 0x4b, 0xf7, 0x9b, 0x6f, 0xf1, 0x41, 0xa3, 0xaa, + 0x01, 0x45, 0x10, 0x9d, 0x6d, 0x32, 0x80, 0x9c, 0x01, 0x45, 0x27, 0xc2, + 0x67, 0x32, 0x80, 0x89, 0x01, 0xab, 0x6d, 0x45, 0xf8, 0xdd, 0x64, 0x32, + 0x80, 0x60, 0x45, 0x66, 0xde, 0x61, 0x32, 0x80, 0x53, 0xb0, 0x37, 0x45, + 0xb0, 0xdf, 0x63, 0x32, 0x80, 0x2a, 0x44, 0xf0, 0xb5, 0x66, 0x32, 0x80, + 0x1d, 0xb4, 0x01, 0xff, 0x46, 0x3c, 0xcc, 0x6b, 0x32, 0x80, 0x0d, 0x45, + 0xdf, 0xc3, 0x62, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, 0x70, 0x32, 0x40, + 0x42, 0x19, 0x00, 0x79, 0x32, 0x40, 0x42, 0x19, 0x00, 0x74, 0x32, 0x40, + 0x42, 0x19, 0x00, 0x71, 0x32, 0x40, 0x46, 0x43, 0xb9, 0x6c, 0x32, 0x80, + 0x0d, 0x44, 0xc3, 0x7d, 0x65, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, 0x73, + 0x32, 0x40, 0x42, 0x19, 0x00, 0x7a, 0x32, 0x40, 0x42, 0x19, 0x00, 0x6f, + 0x32, 0x40, 0x42, 0x19, 0x00, 0x72, 0x32, 0x40, 0x46, 0x3b, 0xb9, 0x6a, + 0x32, 0x80, 0x0d, 0x45, 0xb3, 0x9a, 0x60, 0x32, 0xc0, 0x00, 0x42, 0x19, + 0x00, 0x6e, 0x32, 0x40, 0x42, 0x19, 0x00, 0x78, 0x32, 0x40, 0x80, 0x01, + 0xff, 0xe1, 0x75, 0x32, 0x00, 0xf5, 0x7e, 0x32, 0x40, 0x42, 0x19, 0x00, + 0x7b, 0x32, 0x40, 0x46, 0xdd, 0xc5, 0x69, 0x32, 0x80, 0x0d, 0x44, 0xde, + 0xc5, 0x68, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, 0x76, 0x32, 0x40, 0x42, + 0x19, 0x00, 0x77, 0x32, 0x40, 0x43, 0x50, 0x03, 0x9d, 0x22, 0x00, 0xa9, + 0x0f, 0xaf, 0x01, 0xff, 0x61, 0x84, 0x0c, 0x0f, 0xf1, 0x01, 0x4a, 0xe6, + 0x32, 0x99, 0x22, 0x40, 0x04, 0xf6, 0x05, 0x11, 0x08, 0xdb, 0x2e, 0x01, + 0xff, 0x43, 0xdc, 0x02, 0x38, 0x2a, 0x00, 0x44, 0xa1, 0x0c, 0x98, 0x22, + 0x40, 0x45, 0xd1, 0x09, 0x67, 0x24, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, + 0x68, 0x24, 0x00, 0x43, 0xcd, 0x09, 0x60, 0x24, 0x00, 0xb3, 0x14, 0xb4, + 0x06, 0x44, 0xf5, 0x1b, 0xea, 0x24, 0x40, 0x44, 0x25, 0x01, 0x62, 0x24, + 0x00, 0x42, 0x15, 0x02, 0x61, 0x24, 0x40, 0x44, 0x96, 0x1b, 0x66, 0x24, + 0x00, 0x42, 0x30, 0x27, 0x65, 0x24, 0x40, 0x43, 0xd7, 0x04, 0x64, 0x24, + 0x00, 0x43, 0xfb, 0x05, 0x63, 0x24, 0x40, 0x58, 0x8d, 0x0c, 0x6e, 0xf1, + 0x01, 0xe3, 0x6d, 0xf1, 0x01, 0xe4, 0x2d, 0xf1, 0x01, 0x04, 0x0e, 0x0f, + 0x01, 0xff, 0x80, 0x06, 0x49, 0x50, 0xb1, 0xd2, 0x26, 0x40, 0x46, 0x85, + 0xd1, 0x02, 0xf9, 0x81, 0x06, 0x46, 0xc7, 0xd4, 0x40, 0xf5, 0x41, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x49, 0x8a, 0x41, 0x00, 0xf9, 0x01, 0x48, 0x25, + 0x09, 0x01, 0xf9, 0x41, 0x45, 0xcf, 0xde, 0xbf, 0x2b, 0x00, 0x45, 0x65, + 0x1f, 0xbf, 0x29, 0x40, 0x0c, 0x17, 0x0a, 0x06, 0x50, 0x1e, 0x61, 0x9b, + 0x22, 0x40, 0x46, 0xcd, 0x00, 0x0e, 0xf1, 0x01, 0x56, 0xd0, 0x2e, 0xbc, + 0x29, 0x40, 0x7e, 0x00, 0x00, 0xba, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x61, 0xbe, 0x0b, 0xd5, 0x25, 0x00, 0x4e, 0x0b, 0x00, 0xb5, 0x29, + 0x00, 0xac, 0x30, 0x50, 0x6e, 0x60, 0xd1, 0x25, 0x00, 0xb3, 0x1c, 0x63, + 0x69, 0x0a, 0xc3, 0x29, 0x00, 0x06, 0x6d, 0x02, 0x06, 0x4d, 0xc1, 0x82, + 0xcd, 0x25, 0x40, 0x4a, 0x37, 0x23, 0xd3, 0x25, 0x00, 0x54, 0x59, 0x40, + 0xd4, 0x25, 0x40, 0x58, 0xef, 0x26, 0xc2, 0x29, 0x00, 0x4d, 0x25, 0x82, + 0xbb, 0x29, 0x40, 0x4e, 0xb9, 0x68, 0xd0, 0x25, 0x00, 0x4f, 0xf2, 0x6a, + 0xd2, 0x25, 0x40, 0xa1, 0xdf, 0x08, 0xa5, 0x82, 0x02, 0xa9, 0xda, 0x01, + 0xaf, 0x0c, 0x4c, 0x07, 0x8d, 0x84, 0xf3, 0x01, 0x44, 0x73, 0xd0, 0xea, + 0x26, 0x40, 0x4a, 0x4c, 0xa0, 0x6b, 0xf3, 0x01, 0x47, 0xac, 0xca, 0x62, + 0xf9, 0x01, 0x08, 0x61, 0xc0, 0x01, 0xff, 0x07, 0xf1, 0x04, 0x34, 0x07, + 0xbf, 0x35, 0x01, 0xff, 0x44, 0xfa, 0x05, 0xc8, 0x0f, 0x01, 0x43, 0xcd, + 0x09, 0xc5, 0x0f, 0x81, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xc9, + 0x0f, 0x01, 0x44, 0x25, 0x01, 0xc7, 0x0f, 0x01, 0xb7, 0x01, 0xff, 0x44, + 0x98, 0x1b, 0xca, 0x0f, 0x01, 0xef, 0xc6, 0x0f, 0x41, 0x48, 0xe8, 0x0f, + 0xcb, 0x0f, 0x41, 0xa1, 0x75, 0x44, 0x62, 0xe4, 0xb2, 0x0f, 0x01, 0x4a, + 0x7e, 0xa0, 0xb7, 0x0f, 0x01, 0x46, 0xa2, 0x44, 0xb4, 0x0f, 0x01, 0x45, + 0x5e, 0xa2, 0xb3, 0x0f, 0x01, 0x42, 0xb0, 0x01, 0xb5, 0x0f, 0x81, 0x50, + 0x44, 0xd6, 0xe5, 0xbb, 0x0f, 0x01, 0x46, 0x3b, 0xd3, 0xbc, 0x0f, 0x01, + 0x43, 0xb9, 0x04, 0xbd, 0x0f, 0x01, 0x43, 0x40, 0x20, 0xbe, 0x0f, 0x01, + 0x42, 0x6f, 0x02, 0xc1, 0x0f, 0x01, 0x44, 0x3e, 0x60, 0xc2, 0x0f, 0x01, + 0xb3, 0x18, 0x43, 0x0d, 0xbb, 0xc4, 0x0f, 0x01, 0x43, 0x0f, 0x83, 0xb6, + 0x0f, 0x01, 0x44, 0x0e, 0x4d, 0xba, 0x0f, 0x01, 0x45, 0x08, 0x4d, 0xb8, + 0x0f, 0x41, 0x45, 0xb1, 0xd9, 0xbf, 0x0f, 0x01, 0x43, 0x99, 0x14, 0xc3, + 0x0f, 0x01, 0x4a, 0x10, 0xa5, 0xb1, 0x0f, 0x41, 0x42, 0x53, 0x00, 0xb9, + 0x0f, 0x41, 0x44, 0xae, 0x38, 0xb0, 0x0f, 0x01, 0x43, 0x4b, 0x18, 0xc0, + 0x0f, 0x41, 0x44, 0x4c, 0x83, 0x27, 0x26, 0x00, 0x44, 0x90, 0x01, 0x14, + 0xf4, 0x01, 0x42, 0xaf, 0x18, 0xd2, 0xf9, 0x81, 0x0c, 0x45, 0x47, 0xdf, + 0x3f, 0xf4, 0x01, 0x43, 0x09, 0x0d, 0xb7, 0x26, 0x40, 0x4c, 0xa7, 0x8c, + 0xb8, 0xf6, 0x41, 0x02, 0x36, 0x01, 0xc2, 0x06, 0xa5, 0xb3, 0x06, 0x4b, + 0x4d, 0x99, 0xc1, 0xf3, 0x01, 0xb2, 0x06, 0x45, 0x55, 0xe0, 0x30, 0xf3, + 0x41, 0x05, 0xca, 0xde, 0x0f, 0xb2, 0x01, 0xff, 0x43, 0x00, 0x96, 0x52, + 0xf3, 0x01, 0x49, 0xf5, 0xb7, 0x38, 0xf3, 0x41, 0x07, 0xf1, 0x04, 0x89, + 0x03, 0x0d, 0x7c, 0x07, 0x01, 0xff, 0xe1, 0x70, 0xab, 0x00, 0xa4, 0xdf, + 0x02, 0xe5, 0x71, 0xab, 0x00, 0xa7, 0xc0, 0x02, 0xa8, 0x9f, 0x02, 0xe9, + 0x72, 0xab, 0x00, 0x42, 0x1b, 0x02, 0x77, 0xab, 0x00, 0xac, 0xfa, 0x01, + 0xad, 0xdf, 0x01, 0xae, 0xbf, 0x01, 0xef, 0x73, 0xab, 0x00, 0x02, 0x7c, + 0x00, 0x9e, 0x01, 0xf3, 0x9d, 0xab, 0x80, 0x80, 0x01, 0xb4, 0x3d, 0xf5, + 0x74, 0xab, 0x00, 0xf6, 0x75, 0xab, 0x00, 0xb7, 0x1b, 0xb9, 0x01, 0xff, + 0xe1, 0xbf, 0xab, 0x00, 0xe5, 0xf8, 0x13, 0x00, 0xe9, 0xf9, 0x13, 0x00, + 0xef, 0xfa, 0x13, 0x00, 0xf5, 0xfb, 0x13, 0x00, 0xf6, 0xfc, 0x13, 0x40, + 0xe1, 0xb9, 0xab, 0x00, 0xe5, 0xba, 0xab, 0x00, 0xe9, 0xbb, 0xab, 0x00, + 0xef, 0xbc, 0xab, 0x00, 0xf5, 0xbd, 0xab, 0x00, 0xf6, 0xbe, 0xab, 0x40, + 0xe1, 0xa4, 0xab, 0x00, 0xe5, 0xa6, 0xab, 0x00, 0xe9, 0xa8, 0xab, 0x00, + 0xac, 0x1b, 0xb3, 0x01, 0xff, 0xe1, 0xb3, 0xab, 0x00, 0xe5, 0xb4, 0xab, + 0x00, 0xe9, 0xb5, 0xab, 0x00, 0xef, 0xb6, 0xab, 0x00, 0xf5, 0xb7, 0xab, + 0x00, 0xf6, 0xb8, 0xab, 0x40, 0xe1, 0xad, 0xab, 0x00, 0xe5, 0xae, 0xab, + 0x00, 0xe9, 0xaf, 0xab, 0x00, 0xef, 0xb0, 0xab, 0x00, 0xf5, 0xb1, 0xab, + 0x00, 0xf6, 0xb2, 0xab, 0x40, 0xe1, 0x9c, 0xab, 0x00, 0xe5, 0x9e, 0xab, + 0x00, 0xe9, 0x9f, 0xab, 0x00, 0xef, 0xa0, 0xab, 0x00, 0xf5, 0xa1, 0xab, + 0x00, 0xf6, 0xa2, 0xab, 0x40, 0xe1, 0x96, 0xab, 0x00, 0xe5, 0x97, 0xab, + 0x00, 0xe9, 0x98, 0xab, 0x00, 0xef, 0x99, 0xab, 0x00, 0xf5, 0x9a, 0xab, + 0x00, 0xf6, 0x9b, 0xab, 0x40, 0xe1, 0x8e, 0xab, 0x80, 0x14, 0xe5, 0x91, + 0xab, 0x00, 0xe9, 0x92, 0xab, 0x00, 0xef, 0x93, 0xab, 0x00, 0xf5, 0x94, + 0xab, 0x00, 0xf6, 0x95, 0xab, 0x40, 0xe8, 0x90, 0xab, 0x40, 0xe1, 0x89, + 0xab, 0x00, 0xe5, 0x8a, 0xab, 0x00, 0xe9, 0x8b, 0xab, 0x00, 0xef, 0x8c, + 0xab, 0x00, 0xf5, 0x8d, 0xab, 0x00, 0xf6, 0xfd, 0x13, 0x40, 0xe1, 0x83, + 0xab, 0x00, 0xe5, 0x84, 0xab, 0x00, 0xe9, 0x85, 0xab, 0x00, 0xef, 0x86, + 0xab, 0x00, 0xf5, 0x87, 0xab, 0x00, 0xf6, 0x88, 0xab, 0x40, 0xe1, 0x7d, + 0xab, 0x00, 0xe5, 0x7e, 0xab, 0x00, 0xe9, 0x7f, 0xab, 0x00, 0x42, 0x2f, + 0x04, 0x8f, 0xab, 0x00, 0xef, 0x80, 0xab, 0x00, 0xf5, 0x81, 0xab, 0x00, + 0xf6, 0x82, 0xab, 0x40, 0xe1, 0x76, 0xab, 0x00, 0xe5, 0x78, 0xab, 0x00, + 0xe9, 0x79, 0xab, 0x00, 0xef, 0x7a, 0xab, 0x00, 0xf5, 0x7b, 0xab, 0x00, + 0xf6, 0x7c, 0xab, 0x40, 0xe1, 0xa3, 0xab, 0x00, 0xe5, 0xa5, 0xab, 0x00, + 0xe9, 0xa7, 0xab, 0x00, 0x42, 0x74, 0x00, 0xac, 0xab, 0x00, 0xef, 0xa9, + 0xab, 0x00, 0xf5, 0xaa, 0xab, 0x00, 0xf6, 0xab, 0xab, 0x40, 0xe1, 0xa0, + 0x13, 0x00, 0xa4, 0xdf, 0x02, 0xe5, 0xa1, 0x13, 0x00, 0xa7, 0xc0, 0x02, + 0xa8, 0x9f, 0x02, 0xe9, 0xa2, 0x13, 0x00, 0x42, 0x1b, 0x02, 0xa7, 0x13, + 0x00, 0xac, 0xfa, 0x01, 0xad, 0xdf, 0x01, 0xae, 0xbf, 0x01, 0xef, 0xa3, + 0x13, 0x00, 0x02, 0x7c, 0x00, 0x9e, 0x01, 0xf3, 0xcd, 0x13, 0x80, 0x80, + 0x01, 0xb4, 0x3d, 0xf5, 0xa4, 0x13, 0x00, 0xf6, 0xa5, 0x13, 0x00, 0xb7, + 0x1b, 0xb9, 0x01, 0xff, 0xe1, 0xef, 0x13, 0x00, 0xe5, 0xf0, 0x13, 0x00, + 0xe9, 0xf1, 0x13, 0x00, 0xef, 0xf2, 0x13, 0x00, 0xf5, 0xf3, 0x13, 0x00, + 0xf6, 0xf4, 0x13, 0x40, 0xe1, 0xe9, 0x13, 0x00, 0xe5, 0xea, 0x13, 0x00, + 0xe9, 0xeb, 0x13, 0x00, 0xef, 0xec, 0x13, 0x00, 0xf5, 0xed, 0x13, 0x00, + 0xf6, 0xee, 0x13, 0x40, 0xe1, 0xd4, 0x13, 0x00, 0xe5, 0xd6, 0x13, 0x00, + 0xe9, 0xd8, 0x13, 0x00, 0xac, 0x1b, 0xb3, 0x01, 0xff, 0xe1, 0xe3, 0x13, + 0x00, 0xe5, 0xe4, 0x13, 0x00, 0xe9, 0xe5, 0x13, 0x00, 0xef, 0xe6, 0x13, + 0x00, 0xf5, 0xe7, 0x13, 0x00, 0xf6, 0xe8, 0x13, 0x40, 0xe1, 0xdd, 0x13, + 0x00, 0xe5, 0xde, 0x13, 0x00, 0xe9, 0xdf, 0x13, 0x00, 0xef, 0xe0, 0x13, + 0x00, 0xf5, 0xe1, 0x13, 0x00, 0xf6, 0xe2, 0x13, 0x40, 0xe1, 0xcc, 0x13, + 0x00, 0xe5, 0xce, 0x13, 0x00, 0xe9, 0xcf, 0x13, 0x00, 0xef, 0xd0, 0x13, + 0x00, 0xf5, 0xd1, 0x13, 0x00, 0xf6, 0xd2, 0x13, 0x40, 0xe1, 0xc6, 0x13, + 0x00, 0xe5, 0xc7, 0x13, 0x00, 0xe9, 0xc8, 0x13, 0x00, 0xef, 0xc9, 0x13, + 0x00, 0xf5, 0xca, 0x13, 0x00, 0xf6, 0xcb, 0x13, 0x40, 0xe1, 0xbe, 0x13, + 0x80, 0x14, 0xe5, 0xc1, 0x13, 0x00, 0xe9, 0xc2, 0x13, 0x00, 0xef, 0xc3, + 0x13, 0x00, 0xf5, 0xc4, 0x13, 0x00, 0xf6, 0xc5, 0x13, 0x40, 0xe8, 0xc0, + 0x13, 0x40, 0xe1, 0xb9, 0x13, 0x00, 0xe5, 0xba, 0x13, 0x00, 0xe9, 0xbb, + 0x13, 0x00, 0xef, 0xbc, 0x13, 0x00, 0xf5, 0xbd, 0x13, 0x00, 0xf6, 0xf5, + 0x13, 0x40, 0xe1, 0xb3, 0x13, 0x00, 0xe5, 0xb4, 0x13, 0x00, 0xe9, 0xb5, + 0x13, 0x00, 0xef, 0xb6, 0x13, 0x00, 0xf5, 0xb7, 0x13, 0x00, 0xf6, 0xb8, + 0x13, 0x40, 0xe1, 0xad, 0x13, 0x00, 0xe5, 0xae, 0x13, 0x00, 0xe9, 0xaf, + 0x13, 0x00, 0x42, 0x2f, 0x04, 0xbf, 0x13, 0x00, 0xef, 0xb0, 0x13, 0x00, + 0xf5, 0xb1, 0x13, 0x00, 0xf6, 0xb2, 0x13, 0x40, 0xe1, 0xa6, 0x13, 0x00, + 0xe5, 0xa8, 0x13, 0x00, 0xe9, 0xa9, 0x13, 0x00, 0xef, 0xaa, 0x13, 0x00, + 0xf5, 0xab, 0x13, 0x00, 0xf6, 0xac, 0x13, 0x40, 0xe1, 0xd3, 0x13, 0x00, + 0xe5, 0xd5, 0x13, 0x00, 0xe9, 0xd7, 0x13, 0x00, 0x42, 0x74, 0x00, 0xdc, + 0x13, 0x00, 0xef, 0xd9, 0x13, 0x00, 0xf5, 0xda, 0x13, 0x00, 0xf6, 0xdb, + 0x13, 0x40, 0x4e, 0x13, 0x75, 0xe3, 0xf4, 0x01, 0x48, 0xe1, 0xc0, 0xc0, + 0xf9, 0x41, 0x45, 0xb8, 0x00, 0x13, 0x27, 0x00, 0x48, 0x65, 0x7a, 0x7e, + 0xf6, 0xc1, 0x00, 0x45, 0x38, 0x0a, 0x95, 0xfb, 0x41, 0xa9, 0x8d, 0x08, + 0x04, 0xea, 0xe5, 0xb5, 0x04, 0x02, 0xa0, 0x03, 0x3b, 0xb2, 0x01, 0xff, + 0x07, 0x7e, 0xc4, 0x18, 0x07, 0xec, 0x0b, 0x01, 0xff, 0x4f, 0xe8, 0x65, + 0xc9, 0xf4, 0x01, 0x4d, 0x4c, 0x82, 0xc8, 0xf4, 0xc1, 0x00, 0x4d, 0x3e, + 0x78, 0xb9, 0xf4, 0x41, 0x49, 0xb9, 0x37, 0x09, 0x00, 0x80, 0x06, 0x42, + 0xf7, 0x0a, 0x40, 0x20, 0x40, 0x80, 0x01, 0xff, 0x43, 0xf6, 0x10, 0x88, + 0x00, 0x00, 0x52, 0x02, 0x51, 0x89, 0x00, 0x40, 0x0f, 0x54, 0x2f, 0xc7, + 0x03, 0x06, 0xf4, 0x05, 0x80, 0x03, 0x07, 0xf1, 0x04, 0x52, 0x0c, 0x8c, + 0x14, 0x34, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xa1, 0x21, 0x42, 0xd1, 0x09, + 0x2c, 0xaa, 0x00, 0xe9, 0x2a, 0xaa, 0x80, 0x12, 0xef, 0x2f, 0xaa, 0x80, + 0x09, 0xf5, 0x2d, 0xaa, 0xc0, 0x00, 0xe5, 0x32, 0xaa, 0x40, 0xe5, 0x2e, + 0xaa, 0x40, 0xe9, 0x2b, 0xaa, 0x40, 0xe1, 0x29, 0xaa, 0x00, 0xe9, 0x30, + 0xaa, 0x00, 0xf5, 0x31, 0xaa, 0x40, 0xa4, 0x0c, 0x46, 0x29, 0x7e, 0x5c, + 0xaa, 0x00, 0x4c, 0x4b, 0x8e, 0x5f, 0xaa, 0x40, 0x44, 0x0b, 0x1e, 0x5d, + 0xaa, 0x00, 0x4b, 0xdf, 0x98, 0x5e, 0xaa, 0x40, 0xe1, 0x00, 0xaa, 0x80, + 0xa0, 0x02, 0xa2, 0x8d, 0x02, 0x02, 0x98, 0x14, 0xfe, 0x01, 0xa4, 0xeb, + 0x01, 0xe5, 0x03, 0xaa, 0x00, 0x06, 0x97, 0x29, 0xb1, 0x01, 0xa7, 0xa4, + 0x01, 0x42, 0x22, 0x00, 0x28, 0xaa, 0x00, 0xe9, 0x01, 0xaa, 0x00, 0xaa, + 0x8d, 0x01, 0xab, 0x80, 0x01, 0x42, 0x74, 0x00, 0x24, 0xaa, 0x00, 0xad, + 0x6e, 0xae, 0x44, 0xef, 0x05, 0xaa, 0x00, 0xb0, 0x2e, 0x42, 0x71, 0x00, + 0x23, 0xaa, 0x00, 0xb3, 0x1c, 0xb4, 0x10, 0xf5, 0x02, 0xaa, 0x00, 0x42, + 0xb4, 0x09, 0x25, 0xaa, 0x00, 0x42, 0x20, 0x20, 0x22, 0xaa, 0x40, 0xe1, + 0x13, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x14, 0xaa, 0x40, 0xe1, 0x27, 0xaa, + 0x00, 0x42, 0x45, 0x05, 0x26, 0xaa, 0x40, 0xe1, 0x1a, 0xaa, 0x00, 0x42, + 0x22, 0x00, 0x1c, 0xaa, 0x00, 0x42, 0xc1, 0x08, 0x1b, 0xaa, 0x40, 0xe1, + 0x18, 0xaa, 0x00, 0xa7, 0x18, 0xa8, 0x06, 0x42, 0x30, 0x12, 0x17, 0xaa, + 0x40, 0xe1, 0x11, 0xaa, 0x00, 0x42, 0x77, 0x24, 0x12, 0xaa, 0x00, 0x42, + 0x30, 0x12, 0x10, 0xaa, 0x40, 0xe1, 0x0b, 0xaa, 0x00, 0x42, 0x30, 0x12, + 0x0a, 0xaa, 0x40, 0xe1, 0x20, 0xaa, 0x00, 0x42, 0x30, 0x12, 0x1f, 0xaa, + 0x40, 0xe1, 0x06, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x07, 0xaa, 0x40, 0xe1, + 0x0e, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x0f, 0xaa, 0x40, 0xe1, 0x08, 0xaa, + 0x00, 0x42, 0x22, 0x00, 0x09, 0xaa, 0x40, 0x42, 0x98, 0x14, 0x44, 0xaa, + 0x00, 0xe7, 0x41, 0xaa, 0x00, 0xeb, 0x40, 0xaa, 0x00, 0xec, 0x4a, 0xaa, + 0x00, 0xee, 0x46, 0xaa, 0x80, 0x16, 0xf0, 0x47, 0xaa, 0x00, 0xf2, 0x49, + 0xaa, 0x00, 0x42, 0xee, 0x00, 0x4b, 0xaa, 0x00, 0xf4, 0x45, 0xaa, 0x00, + 0xf9, 0x48, 0xaa, 0x40, 0xe7, 0x42, 0xaa, 0x40, 0xe1, 0x15, 0xaa, 0x00, + 0x42, 0x68, 0x0f, 0x19, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x16, 0xaa, 0x40, + 0xe1, 0x0c, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x0d, 0xaa, 0x40, 0xe1, 0x1d, + 0xaa, 0x00, 0x42, 0x16, 0x00, 0x21, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x1e, + 0xaa, 0x40, 0xe9, 0x04, 0xaa, 0x40, 0x45, 0xd1, 0x09, 0x58, 0xaa, 0x00, + 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x59, 0xaa, 0x00, 0x43, 0xcd, 0x09, 0x51, + 0xaa, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x50, 0xaa, 0x40, + 0x44, 0x25, 0x01, 0x53, 0xaa, 0x00, 0x42, 0x15, 0x02, 0x52, 0xaa, 0x40, + 0x44, 0x96, 0x1b, 0x57, 0xaa, 0x00, 0x42, 0x30, 0x27, 0x56, 0xaa, 0x40, + 0x43, 0xd7, 0x04, 0x55, 0xaa, 0x00, 0x43, 0xfb, 0x05, 0x54, 0xaa, 0x40, + 0x06, 0x97, 0x29, 0x18, 0x42, 0x74, 0x00, 0x35, 0xaa, 0x00, 0x42, 0x71, + 0x00, 0x34, 0xaa, 0x00, 0x42, 0xa9, 0x01, 0x36, 0xaa, 0x00, 0x42, 0x20, + 0x20, 0x33, 0xaa, 0x40, 0xe8, 0x4d, 0xaa, 0x00, 0xed, 0x4c, 0xaa, 0x00, + 0x42, 0x1d, 0x01, 0x43, 0xaa, 0x40, 0x47, 0x2d, 0xc5, 0x32, 0x11, 0x01, + 0xa4, 0xf8, 0x02, 0x07, 0xf1, 0x04, 0x74, 0x47, 0xf3, 0xc8, 0x34, 0x11, + 0x01, 0x46, 0xdb, 0xc1, 0x31, 0x11, 0x01, 0x4d, 0xbd, 0x30, 0x43, 0x11, + 0x01, 0xb3, 0x43, 0xb6, 0x01, 0xff, 0x45, 0x48, 0x21, 0x33, 0x11, 0x01, + 0x0a, 0x71, 0x70, 0x01, 0xff, 0xe1, 0x27, 0x11, 0x81, 0x24, 0xe5, 0x2c, + 0x11, 0x81, 0x1b, 0xe9, 0x28, 0x11, 0x81, 0x12, 0xef, 0x2e, 0x11, 0x81, + 0x09, 0xf5, 0x2a, 0x11, 0xc1, 0x00, 0xf5, 0x2b, 0x11, 0x41, 0xe9, 0x30, + 0x11, 0x41, 0xe9, 0x29, 0x11, 0x41, 0xe9, 0x46, 0x11, 0x41, 0xe1, 0x45, + 0x11, 0x01, 0xe9, 0x2d, 0x11, 0x01, 0xf5, 0x2f, 0x11, 0x41, 0x4b, 0x12, + 0x24, 0x40, 0x11, 0x01, 0x04, 0xdc, 0x02, 0x01, 0xff, 0x48, 0x5b, 0x14, + 0x01, 0x11, 0x01, 0x4b, 0x3b, 0x21, 0x00, 0x11, 0x01, 0x47, 0x7c, 0x46, + 0x02, 0x11, 0x41, 0x42, 0xda, 0x10, 0x03, 0x11, 0x01, 0xa2, 0xeb, 0x01, + 0xa3, 0xdc, 0x01, 0xa4, 0xbf, 0x01, 0xe5, 0x06, 0x11, 0x01, 0xa7, 0xac, + 0x01, 0x43, 0x80, 0x3c, 0x26, 0x11, 0x01, 0xe9, 0x04, 0x11, 0x01, 0xaa, + 0x93, 0x01, 0xab, 0x84, 0x01, 0xac, 0x76, 0x43, 0x9c, 0x52, 0x1f, 0x11, + 0x01, 0xae, 0x56, 0xb0, 0x48, 0x43, 0x8a, 0xa2, 0x22, 0x11, 0x01, 0x43, + 0x4b, 0xd5, 0x25, 0x11, 0x01, 0xb4, 0x1f, 0xf5, 0x05, 0x11, 0x01, 0x43, + 0x36, 0xe1, 0x47, 0x11, 0x01, 0x43, 0x56, 0x17, 0x24, 0x11, 0x01, 0xb9, + 0x01, 0xff, 0x42, 0xda, 0x10, 0x21, 0x11, 0x01, 0x43, 0x7b, 0xb0, 0x20, + 0x11, 0x41, 0x42, 0xda, 0x10, 0x16, 0x11, 0x01, 0x43, 0x80, 0x3c, 0x17, + 0x11, 0x01, 0xb4, 0x01, 0xff, 0x42, 0xda, 0x10, 0x11, 0x11, 0x01, 0x43, + 0x80, 0x3c, 0x12, 0x11, 0x41, 0x42, 0xda, 0x10, 0x1b, 0x11, 0x01, 0x43, + 0x80, 0x3c, 0x1c, 0x11, 0x41, 0x42, 0xda, 0x10, 0x1a, 0x11, 0x01, 0x43, + 0x06, 0x52, 0x0b, 0x11, 0x01, 0x43, 0x98, 0x4d, 0x15, 0x11, 0x01, 0x43, + 0x7b, 0xb0, 0x10, 0x11, 0x41, 0x42, 0xda, 0x10, 0x23, 0x11, 0x01, 0x43, + 0x80, 0x3c, 0x44, 0x11, 0x41, 0x42, 0xda, 0x10, 0x07, 0x11, 0x01, 0x43, + 0x80, 0x3c, 0x08, 0x11, 0x41, 0x42, 0xda, 0x10, 0x0e, 0x11, 0x01, 0x43, + 0x80, 0x3c, 0x0f, 0x11, 0x41, 0x42, 0xda, 0x10, 0x09, 0x11, 0x01, 0x43, + 0x80, 0x3c, 0x0a, 0x11, 0x41, 0x42, 0xda, 0x10, 0x18, 0x11, 0x01, 0xa4, + 0x06, 0x43, 0x80, 0x3c, 0x19, 0x11, 0x41, 0x42, 0xda, 0x10, 0x13, 0x11, + 0x01, 0x43, 0x80, 0x3c, 0x14, 0x11, 0x41, 0x42, 0xda, 0x10, 0x0c, 0x11, + 0x01, 0x43, 0x80, 0x3c, 0x0d, 0x11, 0x41, 0x42, 0xda, 0x10, 0x1d, 0x11, + 0x01, 0x43, 0x80, 0x3c, 0x1e, 0x11, 0x41, 0x44, 0x0b, 0x1e, 0x41, 0x11, + 0x01, 0x05, 0xf5, 0x05, 0x06, 0x4b, 0xdf, 0x98, 0x42, 0x11, 0x41, 0x45, + 0xd1, 0x09, 0x3e, 0x11, 0x01, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x3f, 0x11, + 0x01, 0x43, 0xcd, 0x09, 0x37, 0x11, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, + 0xf5, 0x1b, 0x36, 0x11, 0x41, 0x44, 0x25, 0x01, 0x39, 0x11, 0x01, 0x42, + 0x15, 0x02, 0x38, 0x11, 0x41, 0x44, 0x96, 0x1b, 0x3d, 0x11, 0x01, 0x42, + 0x30, 0x27, 0x3c, 0x11, 0x41, 0x43, 0xd7, 0x04, 0x3b, 0x11, 0x01, 0x43, + 0xfb, 0x05, 0x3a, 0x11, 0x41, 0x42, 0x5f, 0x01, 0xd3, 0x26, 0x00, 0xf2, + 0x91, 0xfa, 0x41, 0x02, 0x00, 0x00, 0x32, 0x4a, 0xf2, 0xa4, 0x48, 0xf5, + 0x01, 0x02, 0x11, 0x00, 0x06, 0x43, 0x1f, 0x21, 0xb3, 0x26, 0x40, 0x45, + 0xda, 0x02, 0xa2, 0x00, 0x00, 0x02, 0x88, 0x00, 0x01, 0xff, 0x4c, 0xb3, + 0x83, 0x04, 0x21, 0x00, 0x05, 0xf0, 0x07, 0x01, 0xff, 0x48, 0xfa, 0x82, + 0x4e, 0xfe, 0x00, 0x48, 0x07, 0x83, 0x4a, 0xfe, 0x40, 0x45, 0xda, 0x02, + 0xb5, 0x20, 0x00, 0x43, 0x84, 0x0c, 0xb8, 0x00, 0x40, 0x44, 0x50, 0xcb, + 0x35, 0xf3, 0x01, 0xa4, 0xfb, 0x22, 0xac, 0xec, 0x22, 0xad, 0xd6, 0x22, + 0xae, 0xf4, 0x05, 0xb0, 0xe5, 0x05, 0xb2, 0x9a, 0x03, 0x44, 0xbc, 0x01, + 0xeb, 0x26, 0x00, 0xf4, 0x08, 0xf4, 0x81, 0xf6, 0x02, 0xb5, 0x01, 0xff, + 0x10, 0x4e, 0x5b, 0x06, 0x49, 0xc5, 0x03, 0x21, 0x26, 0x40, 0x4d, 0x87, + 0x7a, 0x6f, 0x05, 0x01, 0x07, 0xf1, 0x04, 0x01, 0xff, 0xa1, 0xcf, 0x02, + 0x43, 0xc6, 0x08, 0x31, 0x05, 0x01, 0xa3, 0x98, 0x02, 0xa4, 0xfa, 0x01, + 0xa5, 0xed, 0x01, 0x43, 0x73, 0xd1, 0x54, 0x05, 0x01, 0xa7, 0xd8, 0x01, + 0x44, 0x52, 0xe5, 0x46, 0x05, 0x01, 0xa9, 0xbd, 0x01, 0xaa, 0xae, 0x01, + 0xab, 0x9f, 0x01, 0xac, 0x90, 0x01, 0x43, 0xcb, 0xdd, 0x4c, 0x05, 0x01, + 0x44, 0x92, 0xe6, 0x4e, 0x05, 0x01, 0x42, 0x10, 0x00, 0x52, 0x05, 0x01, + 0xb0, 0x70, 0x02, 0x9d, 0x12, 0x64, 0x43, 0xe1, 0x0c, 0x59, 0x05, 0x01, + 0xb3, 0x44, 0xb4, 0x30, 0x44, 0xee, 0xe7, 0x5b, 0x05, 0x01, 0x44, 0x22, + 0xe8, 0x40, 0x05, 0x01, 0xb9, 0x16, 0xba, 0x01, 0xff, 0x43, 0x4c, 0x31, + 0x35, 0x05, 0x01, 0xa8, 0x01, 0xff, 0xe1, 0x3b, 0x05, 0x01, 0x42, 0x62, + 0x01, 0x37, 0x05, 0x41, 0x43, 0xaa, 0x2f, 0x61, 0x05, 0x01, 0x43, 0x19, + 0x21, 0x3a, 0x05, 0x41, 0x42, 0xbb, 0x01, 0x38, 0x05, 0x01, 0x43, 0x40, + 0xe9, 0x5c, 0x05, 0x01, 0x43, 0x9e, 0x4d, 0x53, 0x05, 0x41, 0x43, 0x19, + 0xe9, 0x5a, 0x05, 0x01, 0xa8, 0x01, 0xff, 0xe1, 0x3d, 0x05, 0x81, 0x06, + 0x42, 0x1f, 0x63, 0x5d, 0x05, 0x41, 0xeb, 0x50, 0x05, 0x41, 0xf2, 0x4d, + 0x05, 0x01, 0xf9, 0x47, 0x05, 0x41, 0x42, 0x92, 0x01, 0x57, 0x05, 0x01, + 0x43, 0x40, 0xe9, 0x62, 0x05, 0x41, 0x42, 0x1a, 0x00, 0x3e, 0x05, 0x01, + 0x43, 0x59, 0x4d, 0x45, 0x05, 0x41, 0x42, 0x17, 0x00, 0x44, 0x05, 0x01, + 0x42, 0xb5, 0x3a, 0x63, 0x05, 0x41, 0x43, 0x71, 0x79, 0x51, 0x05, 0x01, + 0x43, 0x37, 0xe9, 0x43, 0x05, 0x41, 0x43, 0x91, 0x31, 0x3f, 0x05, 0x01, + 0x42, 0xa4, 0x04, 0x3c, 0x05, 0x01, 0x42, 0xa7, 0x01, 0x5e, 0x05, 0x41, + 0x44, 0x4e, 0xe5, 0x58, 0x05, 0x01, 0x42, 0x29, 0x02, 0x32, 0x05, 0x41, + 0xe2, 0x34, 0x05, 0x01, 0x42, 0xd0, 0x1a, 0x36, 0x05, 0x41, 0x42, 0x8a, + 0x00, 0x33, 0x05, 0x01, 0x43, 0xa3, 0x31, 0x41, 0x05, 0x01, 0xba, 0x01, + 0xff, 0x42, 0x65, 0x0f, 0x55, 0x05, 0x01, 0x43, 0x9e, 0x4d, 0x4f, 0x05, + 0x41, 0xa1, 0x22, 0xa8, 0x0d, 0x02, 0x20, 0x20, 0x01, 0xff, 0xf7, 0x5f, + 0x05, 0x01, 0xf9, 0x4b, 0x05, 0x41, 0xe1, 0x39, 0x05, 0x81, 0x0a, 0xe9, + 0x4a, 0x05, 0x01, 0x42, 0x1f, 0x63, 0x49, 0x05, 0x41, 0xf4, 0x56, 0x05, + 0x41, 0xf2, 0x42, 0x05, 0x01, 0x42, 0xd0, 0x1a, 0x60, 0x05, 0x41, 0x42, + 0xbd, 0x03, 0x30, 0x05, 0x01, 0x42, 0x0c, 0x00, 0x48, 0x05, 0x41, 0x45, + 0xec, 0x06, 0x31, 0xf4, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4c, + 0xeb, 0x8d, 0x39, 0xf6, 0x01, 0x49, 0xda, 0xb7, 0x3c, 0xf6, 0x41, 0x48, + 0x09, 0xb9, 0xd0, 0x26, 0x00, 0x02, 0x06, 0x00, 0xaa, 0x02, 0xa5, 0x96, + 0x02, 0x0b, 0xdc, 0x85, 0x29, 0xaf, 0x1d, 0xb0, 0x0f, 0xb2, 0x01, 0xff, + 0x4b, 0xbb, 0x80, 0x0d, 0x00, 0x00, 0x42, 0x20, 0x04, 0x55, 0xf9, 0x41, + 0x49, 0xef, 0xab, 0x8f, 0xf3, 0x01, 0x49, 0x4f, 0xaf, 0x9a, 0xfa, 0x41, + 0xee, 0xc7, 0x02, 0x00, 0x4a, 0x42, 0xaa, 0xa0, 0xf3, 0x41, 0xe1, 0xa0, + 0x02, 0x81, 0xdf, 0x01, 0xe2, 0xa9, 0x02, 0x01, 0x02, 0xec, 0x05, 0xca, + 0x01, 0xe4, 0xa2, 0x02, 0x81, 0xc0, 0x01, 0xe5, 0xba, 0x02, 0x81, 0xb6, + 0x01, 0xe7, 0xc0, 0x02, 0x81, 0xac, 0x01, 0xe9, 0xb9, 0x02, 0x81, 0xa2, + 0x01, 0xeb, 0xbc, 0x02, 0x81, 0x98, 0x01, 0xec, 0xa3, 0x02, 0x81, 0x89, + 0x01, 0xed, 0xaa, 0x02, 0x81, 0x73, 0xee, 0xb5, 0x02, 0x81, 0x62, 0xef, + 0xab, 0x02, 0x01, 0xf0, 0xb7, 0x02, 0x81, 0x55, 0xf1, 0xa8, 0x02, 0x01, + 0xf2, 0xa5, 0x02, 0x81, 0x48, 0xf3, 0xb0, 0x02, 0x81, 0x2d, 0xf4, 0xad, + 0x02, 0x81, 0x1f, 0xf5, 0xb2, 0x02, 0x81, 0x04, 0xf8, 0xb4, 0x02, 0x41, + 0xf5, 0xbf, 0x02, 0xc1, 0x00, 0xf5, 0xa4, 0x02, 0xc1, 0x00, 0xd2, 0xc8, + 0x02, 0x01, 0xd3, 0xd0, 0x02, 0x01, 0xf5, 0xbb, 0x02, 0x41, 0xf4, 0xc7, + 0x02, 0xc1, 0x00, 0xd2, 0xb6, 0x02, 0x41, 0xe8, 0xae, 0x02, 0x81, 0x0d, + 0xf3, 0xb8, 0x02, 0x01, 0xf4, 0xc2, 0x02, 0xc1, 0x00, 0xd2, 0xc3, 0x02, + 0x41, 0xd2, 0xaf, 0x02, 0x41, 0xf2, 0xc9, 0x02, 0x41, 0xd2, 0xa1, 0x02, + 0x41, 0xe4, 0xbe, 0x02, 0x01, 0xe7, 0xc4, 0x02, 0x01, 0xee, 0xb3, 0x02, + 0x41, 0xe2, 0xca, 0x02, 0xc1, 0x00, 0xd2, 0xcb, 0x02, 0x01, 0xd3, 0xcc, + 0x02, 0x01, 0xd4, 0xcd, 0x02, 0x41, 0xe4, 0xa6, 0x02, 0xc1, 0x00, 0xd2, + 0xce, 0x02, 0x41, 0xd2, 0xbd, 0x02, 0x41, 0xe9, 0xc5, 0x02, 0x41, 0xd2, + 0xc1, 0x02, 0x41, 0xd2, 0xcf, 0x02, 0x41, 0xd2, 0xac, 0x02, 0x41, 0x42, + 0x84, 0xe1, 0xb1, 0x02, 0x01, 0x42, 0xe4, 0xe9, 0xc6, 0x02, 0x41, 0xd2, + 0xa7, 0x02, 0x41, 0x43, 0xf3, 0x01, 0x05, 0x21, 0x00, 0xf4, 0x38, 0x20, + 0xc0, 0x00, 0x50, 0x3e, 0x5a, 0x41, 0x20, 0x40, 0x48, 0x89, 0xbc, 0xc3, + 0xf5, 0x01, 0x45, 0xe7, 0x0e, 0xc7, 0xf4, 0xc1, 0x00, 0x49, 0x56, 0xab, + 0xc2, 0xf5, 0x41, 0x46, 0xe1, 0xd2, 0x3f, 0x2e, 0x00, 0x46, 0x0f, 0xd5, + 0x51, 0x26, 0x40, 0x10, 0xde, 0x5a, 0x39, 0x02, 0x73, 0x02, 0x18, 0xa4, + 0x0c, 0x48, 0xd9, 0xbe, 0x6b, 0xf9, 0x01, 0x42, 0xdf, 0x4b, 0xf6, 0xf6, + 0x41, 0x42, 0x68, 0x00, 0x6f, 0xf5, 0x01, 0xf9, 0x6c, 0xf3, 0x41, 0xec, + 0x18, 0x00, 0x80, 0x04, 0xf2, 0x4b, 0x26, 0x40, 0x80, 0x06, 0x48, 0xd9, + 0xbd, 0xd9, 0xf5, 0x41, 0x49, 0x29, 0x1e, 0x94, 0x00, 0x00, 0x43, 0x82, + 0x19, 0x7f, 0x00, 0x4e, 0xe1, 0x0a, 0x14, 0x80, 0xf0, 0x1b, 0xa2, 0x89, + 0x1b, 0xe3, 0xa1, 0x14, 0x80, 0xe0, 0x13, 0xe5, 0x01, 0x14, 0x80, 0xd0, + 0x13, 0xe6, 0x5d, 0x15, 0x80, 0xb1, 0x12, 0x4c, 0xcf, 0x25, 0x1e, 0x14, + 0x00, 0xa8, 0x9e, 0x12, 0xe9, 0x03, 0x14, 0x80, 0x90, 0x12, 0xeb, 0x83, + 0x14, 0x80, 0xba, 0x11, 0xec, 0xea, 0x14, 0x80, 0xca, 0x10, 0xed, 0xbb, + 0x14, 0x80, 0xe1, 0x0f, 0xee, 0xd0, 0x14, 0x80, 0xd6, 0x0c, 0xef, 0x05, + 0x14, 0x80, 0x89, 0x0c, 0xf0, 0x49, 0x14, 0x80, 0xb1, 0x0b, 0xf1, 0x85, + 0x15, 0x80, 0x87, 0x0b, 0xf2, 0x50, 0x15, 0x80, 0xa7, 0x0a, 0xf3, 0x05, + 0x15, 0x80, 0xf5, 0x07, 0xf4, 0x66, 0x14, 0x80, 0xe0, 0x05, 0xb7, 0x9f, + 0x01, 0xf9, 0x3e, 0x15, 0xc0, 0x00, 0x06, 0x31, 0x95, 0x4e, 0xe1, 0x2d, + 0x15, 0x80, 0x3c, 0xe5, 0x26, 0x15, 0x00, 0xe9, 0x28, 0x15, 0x80, 0x2f, + 0xef, 0x2a, 0x15, 0x80, 0x22, 0xb7, 0x01, 0xff, 0xe1, 0x39, 0x15, 0x80, + 0x16, 0xe5, 0x2f, 0x15, 0x00, 0xe9, 0x31, 0x15, 0x80, 0x09, 0xef, 0x35, + 0x15, 0xc0, 0x00, 0xef, 0x37, 0x15, 0x40, 0xe9, 0x33, 0x15, 0x40, 0xe1, + 0x3b, 0x15, 0x40, 0xef, 0x2b, 0x15, 0x00, 0xf9, 0xc3, 0x18, 0x40, 0xe9, + 0x29, 0x15, 0x40, 0xe1, 0x2e, 0x15, 0x80, 0x04, 0xf9, 0xc4, 0x18, 0x40, + 0xe9, 0x27, 0x15, 0x40, 0x43, 0xa4, 0x9b, 0x8f, 0x14, 0x00, 0x43, 0xaa, + 0xd8, 0x71, 0x14, 0x00, 0x43, 0xb8, 0x1a, 0xd9, 0x14, 0x00, 0x43, 0x97, + 0x19, 0xa9, 0x14, 0x00, 0x43, 0x9b, 0x14, 0xc6, 0x14, 0x00, 0x42, 0x99, + 0x04, 0x07, 0x14, 0x00, 0xb0, 0x16, 0x43, 0x1b, 0x1f, 0xf3, 0x14, 0x00, + 0x43, 0x3a, 0x2c, 0x52, 0x14, 0x00, 0xf7, 0x1d, 0x14, 0x00, 0x43, 0x6f, + 0x4e, 0x2c, 0x15, 0x40, 0x42, 0x99, 0x04, 0x35, 0x14, 0x00, 0x43, 0x56, + 0x17, 0x48, 0x14, 0x40, 0xe1, 0x17, 0x14, 0x80, 0xb0, 0x04, 0xe5, 0x0c, + 0x14, 0x80, 0x59, 0xe9, 0x0e, 0x14, 0x80, 0x50, 0xef, 0x12, 0x14, 0xc0, + 0x00, 0xef, 0x14, 0x14, 0xc0, 0x00, 0x08, 0xa9, 0xbb, 0x01, 0xff, 0x48, + 0x91, 0xbc, 0x7e, 0x16, 0x00, 0x42, 0x53, 0x00, 0x9f, 0x15, 0xc0, 0x00, + 0xe1, 0x9e, 0x15, 0x00, 0xe5, 0x9b, 0x15, 0x00, 0xe9, 0x9c, 0x15, 0x00, + 0xef, 0x9d, 0x15, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x7c, 0x16, 0x80, 0x18, + 0x42, 0x27, 0x01, 0x77, 0x16, 0x00, 0xe9, 0x78, 0x16, 0x80, 0x09, 0xef, + 0x7a, 0x16, 0xc0, 0x00, 0xef, 0x7b, 0x16, 0x40, 0xe9, 0x79, 0x16, 0x40, + 0xe1, 0x7d, 0x16, 0x40, 0xe9, 0x10, 0x14, 0x40, 0x02, 0x60, 0x01, 0x01, + 0xff, 0x06, 0x31, 0x95, 0x06, 0x45, 0x1c, 0xba, 0xdd, 0x18, 0x40, 0x02, + 0x92, 0xe4, 0x9f, 0x03, 0x44, 0xf6, 0xe4, 0x5c, 0x15, 0x00, 0x02, 0x1e, + 0x0a, 0xf5, 0x02, 0xec, 0xeb, 0x14, 0x80, 0xb7, 0x02, 0xed, 0xbc, 0x14, + 0x80, 0x8f, 0x02, 0x02, 0xa8, 0x01, 0xfd, 0x01, 0xf0, 0x4a, 0x14, 0x80, + 0xd5, 0x01, 0xf2, 0x51, 0x15, 0x80, 0xb9, 0x01, 0xb3, 0x72, 0xb4, 0x48, + 0xb7, 0x27, 0xf9, 0x40, 0x15, 0xc0, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x3a, + 0x15, 0x80, 0x16, 0xe5, 0x30, 0x15, 0x00, 0xe9, 0x32, 0x15, 0x80, 0x09, + 0xef, 0x36, 0x15, 0xc0, 0x00, 0xef, 0x38, 0x15, 0x40, 0xe9, 0x34, 0x15, + 0x40, 0xe1, 0x3c, 0x15, 0x40, 0xe1, 0x18, 0x14, 0x80, 0x16, 0xe5, 0x0d, + 0x14, 0x00, 0xe9, 0x0f, 0x14, 0x80, 0x09, 0xef, 0x13, 0x14, 0xc0, 0x00, + 0xef, 0x15, 0x14, 0x40, 0xe9, 0x11, 0x14, 0x40, 0xe1, 0x1a, 0x14, 0x40, + 0x44, 0x82, 0xe5, 0x69, 0x15, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x62, 0x14, + 0x80, 0x16, 0xe5, 0x58, 0x14, 0x00, 0xe9, 0x5a, 0x14, 0x80, 0x09, 0xef, + 0x5e, 0x14, 0xc0, 0x00, 0xef, 0x60, 0x14, 0x40, 0xe9, 0x5c, 0x14, 0x40, + 0xe1, 0x64, 0x14, 0x40, 0x02, 0x8a, 0x18, 0x22, 0xb7, 0x01, 0xff, 0xe1, + 0x01, 0x15, 0x80, 0x16, 0xe5, 0xf7, 0x14, 0x00, 0xe9, 0xf9, 0x14, 0x80, + 0x09, 0xef, 0xfd, 0x14, 0xc0, 0x00, 0xef, 0xff, 0x14, 0x40, 0xe9, 0xfb, + 0x14, 0x40, 0xe1, 0x03, 0x15, 0x40, 0xe1, 0x22, 0x15, 0x80, 0x16, 0xe5, + 0x18, 0x15, 0x00, 0xe9, 0x1a, 0x15, 0x80, 0x09, 0xef, 0x1e, 0x15, 0xc0, + 0x00, 0xef, 0x20, 0x15, 0x40, 0xe9, 0x1c, 0x15, 0x40, 0xe1, 0x24, 0x15, + 0x40, 0xe1, 0x8d, 0x15, 0x00, 0xe5, 0x8a, 0x15, 0x00, 0xe9, 0x8b, 0x15, + 0x00, 0xef, 0x8c, 0x15, 0x00, 0x43, 0x56, 0x17, 0x4f, 0x15, 0x40, 0xb7, + 0x01, 0xff, 0xe1, 0x45, 0x14, 0x80, 0x16, 0xe5, 0x3b, 0x14, 0x00, 0xe9, + 0x3d, 0x14, 0x80, 0x09, 0xef, 0x41, 0x14, 0xc0, 0x00, 0xef, 0x43, 0x14, + 0x40, 0xe9, 0x3f, 0x14, 0x40, 0xe1, 0x47, 0x14, 0x40, 0xe1, 0xcc, 0x14, + 0x80, 0x04, 0xe5, 0xca, 0x14, 0x40, 0xe1, 0xce, 0x14, 0x40, 0xb7, 0x01, + 0xff, 0xe1, 0xb7, 0x14, 0x80, 0x16, 0xe5, 0xad, 0x14, 0x00, 0xe9, 0xaf, + 0x14, 0x80, 0x09, 0xef, 0xb3, 0x14, 0xc0, 0x00, 0xef, 0xb5, 0x14, 0x40, + 0xe9, 0xb1, 0x14, 0x40, 0xe1, 0xb9, 0x14, 0x40, 0xe1, 0x4d, 0x15, 0x80, + 0x2f, 0xe5, 0x44, 0x15, 0x00, 0xef, 0x4a, 0x15, 0x80, 0x22, 0xb7, 0x01, + 0xff, 0xe1, 0xe7, 0x14, 0x80, 0x16, 0xe5, 0xdd, 0x14, 0x00, 0xe9, 0xdf, + 0x14, 0x80, 0x09, 0xef, 0xe3, 0x14, 0xc0, 0x00, 0xef, 0xe5, 0x14, 0x40, + 0xe9, 0xe1, 0x14, 0x40, 0xe1, 0xe9, 0x14, 0x40, 0xef, 0xe1, 0x18, 0x40, + 0xe1, 0xe2, 0x18, 0x40, 0xe1, 0x7f, 0x14, 0x80, 0x16, 0xe5, 0x75, 0x14, + 0x00, 0xe9, 0x77, 0x14, 0x80, 0x09, 0xef, 0x7b, 0x14, 0xc0, 0x00, 0xef, + 0x7d, 0x14, 0x40, 0xe9, 0x79, 0x14, 0x40, 0xe1, 0x81, 0x14, 0x40, 0xe1, + 0x9d, 0x14, 0x80, 0x16, 0xe5, 0x93, 0x14, 0x00, 0xe9, 0x95, 0x14, 0x80, + 0x09, 0xef, 0x99, 0x14, 0xc0, 0x00, 0xef, 0x9b, 0x14, 0x40, 0xe9, 0x97, + 0x14, 0x40, 0xe1, 0x9f, 0x14, 0x40, 0xe1, 0x19, 0x14, 0x00, 0xf9, 0xb3, + 0x18, 0x40, 0xe1, 0x55, 0x14, 0x80, 0xfc, 0x01, 0xe5, 0x4c, 0x14, 0x00, + 0xe8, 0x6a, 0x15, 0x80, 0x9d, 0x01, 0xe9, 0x4e, 0x14, 0x80, 0x93, 0x01, + 0x02, 0xd8, 0x30, 0x74, 0xef, 0x50, 0x14, 0x80, 0x6b, 0xb4, 0x34, 0xb7, + 0x13, 0xb9, 0x01, 0xff, 0xe1, 0x73, 0x15, 0x00, 0xe5, 0x70, 0x15, 0x00, + 0xe9, 0x71, 0x15, 0x00, 0xef, 0x72, 0x15, 0x40, 0xe1, 0x61, 0x14, 0x80, + 0x16, 0xe5, 0x57, 0x14, 0x00, 0xe9, 0x59, 0x14, 0x80, 0x09, 0xef, 0x5d, + 0x14, 0xc0, 0x00, 0xef, 0x5f, 0x14, 0x40, 0xe9, 0x5b, 0x14, 0x40, 0xe1, + 0x63, 0x14, 0x40, 0xe1, 0x6a, 0x14, 0x00, 0xe5, 0x67, 0x14, 0x00, 0xe8, + 0x6f, 0x15, 0x80, 0x08, 0xe9, 0x68, 0x14, 0x00, 0xef, 0x69, 0x14, 0x40, + 0xe1, 0x6e, 0x15, 0x80, 0x17, 0xe5, 0x6b, 0x15, 0x00, 0xe9, 0x6c, 0x15, + 0x00, 0xef, 0x6d, 0x15, 0x80, 0x06, 0x42, 0x15, 0x01, 0xe5, 0x18, 0x40, + 0xef, 0xe6, 0x18, 0x40, 0xe1, 0xe7, 0x18, 0x40, 0xef, 0x51, 0x14, 0x40, + 0xe1, 0x89, 0x15, 0x00, 0xe5, 0x86, 0x15, 0x00, 0xe9, 0x87, 0x15, 0x00, + 0xef, 0x88, 0x15, 0x80, 0x06, 0x42, 0x15, 0x01, 0xe8, 0x18, 0x40, 0xef, + 0xe9, 0x18, 0x40, 0xe9, 0x4f, 0x14, 0x40, 0x48, 0x29, 0xb9, 0xae, 0x15, + 0x80, 0x2f, 0xe1, 0x66, 0x15, 0x80, 0x26, 0xe5, 0x5e, 0x15, 0x00, 0xe9, + 0x60, 0x15, 0x80, 0x19, 0xef, 0x64, 0x15, 0x80, 0x10, 0xb7, 0x01, 0xff, + 0xe1, 0xe4, 0x18, 0x80, 0x04, 0xe5, 0xe3, 0x18, 0x40, 0xe1, 0x68, 0x15, + 0x40, 0xef, 0x65, 0x15, 0x40, 0xe9, 0x62, 0x15, 0x40, 0xe1, 0x67, 0x15, + 0x40, 0xe1, 0xac, 0x15, 0x80, 0x16, 0xe5, 0xa7, 0x15, 0x00, 0xe9, 0xa8, + 0x15, 0x80, 0x09, 0xef, 0xaa, 0x15, 0xc0, 0x00, 0xef, 0xab, 0x15, 0x40, + 0xe9, 0xa9, 0x15, 0x40, 0xe1, 0xad, 0x15, 0x40, 0xe1, 0x56, 0x14, 0x80, + 0x04, 0xf9, 0xb7, 0x18, 0x40, 0xe9, 0x4d, 0x14, 0x40, 0xe1, 0xf4, 0x14, + 0x80, 0xbe, 0x01, 0xe5, 0xed, 0x14, 0x00, 0xe8, 0x25, 0x15, 0x80, 0x68, + 0xe9, 0xef, 0x14, 0x80, 0x5f, 0xef, 0xf1, 0x14, 0x80, 0x36, 0xb0, 0x24, + 0xf7, 0x07, 0x15, 0xc0, 0x00, 0xe1, 0x00, 0x15, 0x80, 0x16, 0xe5, 0xf6, + 0x14, 0x00, 0xe9, 0xf8, 0x14, 0x80, 0x09, 0xef, 0xfc, 0x14, 0xc0, 0x00, + 0xef, 0xfe, 0x14, 0x40, 0xe9, 0xfa, 0x14, 0x40, 0xe1, 0x02, 0x15, 0x40, + 0xe1, 0xbf, 0x1a, 0x01, 0xe5, 0xbc, 0x1a, 0x01, 0xe9, 0xbd, 0x1a, 0x01, + 0xef, 0xbe, 0x1a, 0x41, 0xef, 0xf2, 0x14, 0x00, 0x0c, 0xcf, 0x8e, 0x04, + 0xf9, 0xbe, 0x18, 0x40, 0x42, 0xe6, 0x06, 0x88, 0x14, 0x00, 0x42, 0x4e, + 0x00, 0x85, 0x14, 0x00, 0x42, 0x5b, 0x17, 0x86, 0x14, 0x00, 0x42, 0xfe, + 0x25, 0x87, 0x14, 0x40, 0xe9, 0xf0, 0x14, 0x40, 0xe1, 0x15, 0x15, 0x80, + 0x40, 0xe5, 0x10, 0x15, 0x00, 0xe9, 0x11, 0x15, 0x80, 0x33, 0xef, 0x13, + 0x15, 0x80, 0x26, 0xb7, 0x01, 0xff, 0xe1, 0x21, 0x15, 0x80, 0x1a, 0xe5, + 0x17, 0x15, 0x00, 0xe9, 0x19, 0x15, 0x80, 0x0d, 0xef, 0x1d, 0x15, 0xc0, + 0x00, 0xef, 0x1f, 0x15, 0x00, 0xf9, 0xc2, 0x18, 0x40, 0xe9, 0x1b, 0x15, + 0x40, 0xe1, 0x23, 0x15, 0x40, 0xef, 0x14, 0x15, 0x00, 0xf9, 0xc0, 0x18, + 0x40, 0xe9, 0x12, 0x15, 0x40, 0xe1, 0x16, 0x15, 0x00, 0xf9, 0xc1, 0x18, + 0x40, 0xe1, 0xf5, 0x14, 0x80, 0x5f, 0xf9, 0xbf, 0x18, 0xc0, 0x00, 0x04, + 0xb6, 0xe5, 0x01, 0xff, 0xa8, 0x3e, 0xaa, 0x2f, 0xed, 0xbf, 0x14, 0x00, + 0x02, 0xa4, 0x02, 0x0c, 0x42, 0x53, 0x00, 0xa2, 0x14, 0x00, 0x42, 0x4b, + 0x18, 0x41, 0x15, 0x40, 0xe1, 0x9a, 0x15, 0x00, 0xe5, 0x97, 0x15, 0x00, + 0xe9, 0x98, 0x15, 0x00, 0xef, 0x99, 0x15, 0x80, 0x06, 0x42, 0x15, 0x01, + 0xea, 0x18, 0x40, 0xef, 0xeb, 0x18, 0x40, 0xe9, 0x1a, 0x16, 0x00, 0xf5, + 0x15, 0x16, 0xc0, 0x00, 0xf5, 0xf1, 0x18, 0x40, 0xe1, 0xc3, 0x15, 0x00, + 0xe5, 0xc0, 0x15, 0x00, 0xe9, 0xc1, 0x15, 0x00, 0xef, 0xc2, 0x15, 0xc0, + 0x00, 0xef, 0xec, 0x18, 0x40, 0xe9, 0xee, 0x14, 0x40, 0x07, 0xb3, 0xc3, + 0x4c, 0xe1, 0x4b, 0x15, 0x80, 0x3a, 0xe5, 0x42, 0x15, 0x00, 0xe9, 0x46, + 0x15, 0x80, 0x2d, 0xef, 0x48, 0x15, 0x80, 0x24, 0xb7, 0x01, 0xff, 0xe1, + 0xd3, 0x18, 0x80, 0x18, 0x42, 0x27, 0x01, 0xce, 0x18, 0x00, 0xe9, 0xcf, + 0x18, 0x80, 0x09, 0xef, 0xd1, 0x18, 0xc0, 0x00, 0xef, 0xd2, 0x18, 0x40, + 0xe9, 0xd0, 0x18, 0x40, 0xe1, 0x4e, 0x15, 0x40, 0xef, 0x49, 0x15, 0x40, + 0xe9, 0x47, 0x15, 0x40, 0xe1, 0x4c, 0x15, 0x80, 0x04, 0xf9, 0xc5, 0x18, + 0x40, 0xe9, 0x45, 0x15, 0x40, 0xe5, 0x43, 0x15, 0x00, 0x42, 0x15, 0x01, + 0xe0, 0x18, 0x40, 0xe1, 0x83, 0x15, 0x80, 0x12, 0xe9, 0x7f, 0x15, 0x80, + 0x09, 0xef, 0x81, 0x15, 0xc0, 0x00, 0xef, 0x82, 0x15, 0x40, 0xe9, 0x80, + 0x15, 0x40, 0xe1, 0x84, 0x15, 0x80, 0x04, 0xe9, 0x6f, 0x16, 0x40, 0xe9, + 0x7e, 0x15, 0x40, 0xe1, 0x38, 0x14, 0x80, 0x40, 0xe5, 0x2f, 0x14, 0x00, + 0xe9, 0x31, 0x14, 0x80, 0x33, 0xef, 0x33, 0x14, 0x80, 0x26, 0xb7, 0x01, + 0xff, 0xe1, 0x44, 0x14, 0x80, 0x1a, 0xe5, 0x3a, 0x14, 0x00, 0xe9, 0x3c, + 0x14, 0x80, 0x0d, 0xef, 0x40, 0x14, 0xc0, 0x00, 0xef, 0x42, 0x14, 0x00, + 0xf9, 0xb6, 0x18, 0x40, 0xe9, 0x3e, 0x14, 0x40, 0xe1, 0x46, 0x14, 0x40, + 0xef, 0x34, 0x14, 0x00, 0xf9, 0xb4, 0x18, 0x40, 0xe9, 0x32, 0x14, 0x40, + 0xe1, 0x39, 0x14, 0x80, 0x04, 0xf9, 0xb5, 0x18, 0x40, 0xe9, 0x30, 0x14, + 0x40, 0x07, 0x2f, 0xc8, 0x0c, 0xee, 0x2d, 0x14, 0x00, 0xef, 0x06, 0x14, + 0x00, 0xf9, 0xb0, 0x18, 0x40, 0xe3, 0xd7, 0x18, 0x00, 0xeb, 0xd6, 0x18, + 0x00, 0xed, 0xd8, 0x18, 0x00, 0xee, 0xd9, 0x18, 0x80, 0x11, 0xf0, 0xd4, + 0x18, 0x00, 0xf3, 0xda, 0x18, 0x80, 0x04, 0xf4, 0xd5, 0x18, 0x40, 0xe8, + 0xdb, 0x18, 0x40, 0xb7, 0x01, 0xff, 0xe9, 0xc7, 0x18, 0x80, 0x09, 0xef, + 0xcb, 0x18, 0xc0, 0x00, 0xef, 0xcd, 0x18, 0x40, 0xe9, 0xc9, 0x18, 0x40, + 0x08, 0x29, 0xb9, 0xf3, 0x02, 0xe1, 0xc7, 0x14, 0x80, 0xbd, 0x01, 0xe5, + 0xc0, 0x14, 0x00, 0xe7, 0x95, 0x15, 0x80, 0x8f, 0x01, 0xe8, 0xd2, 0x14, + 0x00, 0xe9, 0xc2, 0x14, 0x80, 0x81, 0x01, 0x42, 0x1d, 0x01, 0x96, 0x15, + 0x80, 0x5f, 0xef, 0xc4, 0x14, 0x80, 0x52, 0x04, 0xc6, 0xe7, 0x22, 0xb7, + 0x01, 0xff, 0xe1, 0xcb, 0x14, 0x80, 0x16, 0xe5, 0xc9, 0x14, 0x00, 0xe9, + 0xc6, 0x18, 0x80, 0x09, 0xef, 0xca, 0x18, 0xc0, 0x00, 0xef, 0xcc, 0x18, + 0x40, 0xe9, 0xc8, 0x18, 0x40, 0xe1, 0xcd, 0x14, 0x40, 0x44, 0x9a, 0xe5, + 0x7b, 0x15, 0x80, 0x06, 0x44, 0x7d, 0x4b, 0x7c, 0x15, 0x40, 0xe1, 0x79, + 0x15, 0x80, 0x16, 0xe5, 0x74, 0x15, 0x00, 0xe9, 0x75, 0x15, 0x80, 0x09, + 0xef, 0x77, 0x15, 0xc0, 0x00, 0xef, 0x78, 0x15, 0x40, 0xe9, 0x76, 0x15, + 0x40, 0xe1, 0x7a, 0x15, 0x40, 0xef, 0xc5, 0x14, 0x00, 0xf9, 0xbb, 0x18, + 0x40, 0xe1, 0x75, 0x16, 0x80, 0x12, 0xe9, 0x71, 0x16, 0x80, 0x09, 0xef, + 0x73, 0x16, 0xc0, 0x00, 0xef, 0x74, 0x16, 0x40, 0xe9, 0x72, 0x16, 0x40, + 0xe1, 0x76, 0x16, 0x40, 0xe9, 0xc3, 0x14, 0x40, 0xe1, 0x93, 0x15, 0x80, + 0x12, 0xe9, 0x8f, 0x15, 0x80, 0x09, 0xef, 0x91, 0x15, 0xc0, 0x00, 0xef, + 0x92, 0x15, 0x40, 0xe9, 0x90, 0x15, 0x40, 0xe1, 0x94, 0x15, 0x80, 0x04, + 0xe9, 0x70, 0x16, 0x40, 0xe9, 0x8e, 0x15, 0x40, 0xe1, 0xc8, 0x14, 0x80, + 0xa6, 0x01, 0x06, 0x6f, 0xd5, 0x45, 0x07, 0x81, 0xcc, 0x04, 0xf9, 0xbc, + 0x18, 0x40, 0xa8, 0x20, 0x03, 0xa8, 0x57, 0x01, 0xff, 0xe1, 0xba, 0x1a, + 0x81, 0x12, 0xe9, 0xb6, 0x1a, 0x81, 0x09, 0xef, 0xb8, 0x1a, 0xc1, 0x00, + 0xef, 0xb9, 0x1a, 0x41, 0xe9, 0xb7, 0x1a, 0x41, 0xe1, 0xbb, 0x1a, 0x41, + 0xe1, 0xb4, 0x1a, 0x81, 0x12, 0xe9, 0xb0, 0x1a, 0x81, 0x09, 0xef, 0xb2, + 0x1a, 0xc1, 0x00, 0xef, 0xb3, 0x1a, 0x41, 0xe9, 0xb1, 0x1a, 0x41, 0xe1, + 0xb5, 0x1a, 0x41, 0x44, 0x92, 0xe4, 0xa0, 0x14, 0x00, 0x44, 0xfe, 0xe5, + 0x82, 0x14, 0x00, 0x44, 0x56, 0xe6, 0xba, 0x14, 0x00, 0x44, 0xb6, 0xe6, + 0xcf, 0x14, 0x00, 0xb3, 0x1a, 0x44, 0x53, 0xe1, 0x65, 0x14, 0x00, 0xb7, + 0x06, 0x44, 0x36, 0xe8, 0x3d, 0x15, 0x40, 0x42, 0xda, 0x10, 0x1b, 0x14, + 0x00, 0x42, 0x99, 0x04, 0x16, 0x14, 0x40, 0x42, 0x9b, 0x1d, 0x0b, 0x15, + 0x00, 0x43, 0x92, 0xe4, 0x0f, 0x15, 0x00, 0x42, 0x1e, 0x0a, 0x0a, 0x15, + 0x80, 0x12, 0x43, 0x51, 0x02, 0x0c, 0x15, 0x00, 0x43, 0xed, 0x01, 0x0d, + 0x15, 0x00, 0x43, 0x56, 0x17, 0x04, 0x15, 0x40, 0xe1, 0x0e, 0x15, 0x40, + 0xe9, 0xc1, 0x14, 0x40, 0xe5, 0x5f, 0x15, 0x00, 0xe9, 0x61, 0x15, 0xc0, + 0x00, 0xe9, 0x63, 0x15, 0x40, 0xe1, 0xaa, 0x14, 0x80, 0x51, 0xe5, 0xa3, + 0x14, 0x80, 0x3f, 0xe8, 0xbd, 0x14, 0x00, 0xe9, 0xa5, 0x14, 0x80, 0x32, + 0xef, 0xa7, 0x14, 0x80, 0x22, 0xb7, 0x01, 0xff, 0xe1, 0xb6, 0x14, 0x80, + 0x16, 0xe5, 0xac, 0x14, 0x00, 0xe9, 0xae, 0x14, 0x80, 0x09, 0xef, 0xb2, + 0x14, 0xc0, 0x00, 0xef, 0xb4, 0x14, 0x40, 0xe9, 0xb0, 0x14, 0x40, 0xe1, + 0xb8, 0x14, 0x40, 0xef, 0xa8, 0x14, 0xc0, 0x00, 0x4a, 0x1c, 0xa8, 0x09, + 0x15, 0x40, 0xe9, 0xa6, 0x14, 0x40, 0x05, 0x65, 0x2f, 0x01, 0xff, 0xec, + 0xec, 0x14, 0x00, 0xf2, 0x52, 0x15, 0x40, 0xe1, 0xab, 0x14, 0x80, 0x04, + 0xf9, 0xba, 0x18, 0x40, 0xe9, 0xa4, 0x14, 0x40, 0xe1, 0xda, 0x14, 0x80, + 0x58, 0xe5, 0xd3, 0x14, 0x00, 0xe8, 0xa6, 0x15, 0x80, 0x34, 0xe9, 0xd5, + 0x14, 0x80, 0x2b, 0xef, 0xd7, 0x14, 0x80, 0x22, 0xb7, 0x01, 0xff, 0xe1, + 0xe6, 0x14, 0x80, 0x16, 0xe5, 0xdc, 0x14, 0x00, 0xe9, 0xde, 0x14, 0x80, + 0x09, 0xef, 0xe2, 0x14, 0xc0, 0x00, 0xef, 0xe4, 0x14, 0x40, 0xe9, 0xe0, + 0x14, 0x40, 0xe1, 0xe8, 0x14, 0x40, 0xef, 0xd8, 0x14, 0x40, 0xe9, 0xd6, + 0x14, 0x40, 0xe1, 0xa4, 0x15, 0x80, 0x12, 0xe9, 0xa0, 0x15, 0x80, 0x09, + 0xef, 0xa2, 0x15, 0xc0, 0x00, 0xef, 0xa3, 0x15, 0x40, 0xe9, 0xa1, 0x15, + 0x40, 0xe1, 0xa5, 0x15, 0x40, 0xe1, 0xdb, 0x14, 0x80, 0x04, 0xf9, 0xbd, + 0x18, 0x40, 0xe9, 0xd4, 0x14, 0x40, 0xe1, 0x72, 0x14, 0x80, 0x3e, 0xe5, + 0x6b, 0x14, 0x00, 0xe9, 0x6d, 0x14, 0x80, 0x31, 0xef, 0x6f, 0x14, 0x80, + 0x28, 0xf7, 0x84, 0x14, 0xc0, 0x00, 0xe1, 0x7e, 0x14, 0x80, 0x16, 0xe5, + 0x74, 0x14, 0x00, 0xe9, 0x76, 0x14, 0x80, 0x09, 0xef, 0x7a, 0x14, 0xc0, + 0x00, 0xef, 0x7c, 0x14, 0x40, 0xe9, 0x78, 0x14, 0x40, 0xe1, 0x80, 0x14, + 0x00, 0xf9, 0xb9, 0x18, 0x40, 0xef, 0x70, 0x14, 0x40, 0xe9, 0x6e, 0x14, + 0x40, 0xe1, 0x73, 0x14, 0x80, 0x04, 0xf9, 0xb8, 0x18, 0x40, 0xe9, 0x6c, + 0x14, 0x40, 0xe9, 0x04, 0x14, 0x00, 0xee, 0x2c, 0x14, 0x40, 0xeb, 0x7d, + 0x15, 0x00, 0x45, 0x6f, 0x5d, 0x00, 0x14, 0x40, 0xe1, 0x59, 0x15, 0x80, + 0x8a, 0x01, 0xe5, 0x53, 0x15, 0x00, 0xe9, 0x55, 0x15, 0x80, 0x15, 0xef, + 0x57, 0x15, 0x80, 0x0c, 0x48, 0xa1, 0x14, 0x6e, 0x16, 0x00, 0x43, 0x56, + 0x17, 0x5b, 0x15, 0x40, 0xef, 0x58, 0x15, 0x40, 0xe9, 0x56, 0x15, 0x00, + 0x04, 0x6b, 0x05, 0x01, 0xff, 0x45, 0xce, 0x34, 0x1f, 0x14, 0x00, 0x50, + 0x3e, 0x5b, 0x21, 0x14, 0x00, 0x02, 0x3b, 0x01, 0x3d, 0x45, 0x79, 0x20, + 0x20, 0x14, 0x00, 0x4a, 0xc7, 0x40, 0x27, 0x14, 0x00, 0x44, 0x71, 0x25, + 0x29, 0x14, 0x00, 0xb2, 0x14, 0xb3, 0x06, 0x4d, 0xd7, 0x81, 0x22, 0x14, + 0x40, 0x56, 0x5c, 0x30, 0x28, 0x14, 0x00, 0x49, 0x9d, 0xb2, 0xde, 0x18, + 0x40, 0x49, 0xd0, 0xac, 0xdf, 0x18, 0x00, 0xa9, 0x01, 0xff, 0x4d, 0xd5, + 0x6b, 0x23, 0x14, 0x00, 0x42, 0x1d, 0x01, 0x24, 0x14, 0x40, 0x05, 0x3d, + 0x01, 0x06, 0x47, 0xc7, 0x34, 0x2a, 0x14, 0x40, 0x45, 0xce, 0x34, 0x25, + 0x14, 0x00, 0x56, 0x32, 0x33, 0x26, 0x14, 0x40, 0xe1, 0x5a, 0x15, 0xc0, + 0x00, 0xe9, 0x54, 0x15, 0x40, 0x48, 0x19, 0xba, 0xdc, 0x18, 0x00, 0xee, + 0x2b, 0x14, 0x40, 0xe1, 0x90, 0x14, 0x80, 0x3e, 0xe5, 0x89, 0x14, 0x00, + 0x47, 0x80, 0xc7, 0x6d, 0x16, 0x00, 0xe9, 0x8b, 0x14, 0x80, 0x2b, 0xef, + 0x8d, 0x14, 0x80, 0x22, 0xb7, 0x01, 0xff, 0xe1, 0x9c, 0x14, 0x80, 0x16, + 0xe5, 0x92, 0x14, 0x00, 0xe9, 0x94, 0x14, 0x80, 0x09, 0xef, 0x98, 0x14, + 0xc0, 0x00, 0xef, 0x9a, 0x14, 0x40, 0xe9, 0x96, 0x14, 0x40, 0xe1, 0x9e, + 0x14, 0x40, 0xef, 0x8e, 0x14, 0x40, 0xe9, 0x8c, 0x14, 0x40, 0xe1, 0x91, + 0x14, 0x80, 0xd6, 0x06, 0x06, 0xde, 0x63, 0x01, 0xff, 0x02, 0x98, 0x14, + 0xb3, 0x06, 0xa4, 0xe0, 0x05, 0x42, 0x27, 0x01, 0x08, 0x14, 0x00, 0xa7, + 0x93, 0x05, 0xe8, 0x4b, 0x14, 0x80, 0xe7, 0x04, 0xe9, 0x09, 0x14, 0x80, + 0xdb, 0x04, 0xaa, 0x9e, 0x04, 0xab, 0xe2, 0x03, 0xac, 0xab, 0x03, 0xad, + 0x8f, 0x03, 0xae, 0xef, 0x02, 0xf0, 0xee, 0x15, 0x80, 0xd0, 0x02, 0xb2, + 0xb4, 0x02, 0xb3, 0xfa, 0x01, 0xb4, 0x54, 0xb7, 0x39, 0xb9, 0x1e, 0xfa, + 0x46, 0x16, 0xc0, 0x00, 0xe1, 0x45, 0x16, 0x00, 0xe5, 0x42, 0x16, 0x80, + 0x0c, 0xe9, 0x44, 0x16, 0x00, 0xef, 0x41, 0x16, 0x00, 0xf5, 0x40, 0x16, + 0x40, 0xe5, 0x43, 0x16, 0x40, 0xe1, 0x13, 0x16, 0x00, 0xe5, 0x10, 0x16, + 0x80, 0x0c, 0xe9, 0x12, 0x16, 0x00, 0xef, 0x0f, 0x16, 0x00, 0xf5, 0x0e, + 0x16, 0x40, 0xe5, 0x11, 0x16, 0x40, 0xe1, 0xd5, 0x15, 0x00, 0xe5, 0xd2, + 0x15, 0x80, 0x0c, 0xe9, 0xd4, 0x15, 0x00, 0xef, 0xd1, 0x15, 0x00, 0xf5, + 0xd0, 0x15, 0x40, 0xe5, 0xd3, 0x15, 0x40, 0xa8, 0x88, 0x01, 0xac, 0x52, + 0xb3, 0x37, 0xb4, 0x01, 0xff, 0xe1, 0xe7, 0x15, 0x00, 0xe5, 0xe4, 0x15, + 0x80, 0x27, 0xe9, 0xe6, 0x15, 0x00, 0xef, 0xe3, 0x15, 0x00, 0xb3, 0x04, + 0xf5, 0xe2, 0x15, 0x40, 0xe1, 0x6c, 0x16, 0x00, 0xe5, 0x69, 0x16, 0x80, + 0x0c, 0xe9, 0x6b, 0x16, 0x00, 0xef, 0x68, 0x16, 0x00, 0xf5, 0x67, 0x16, + 0x40, 0xe5, 0x6a, 0x16, 0x40, 0xe5, 0xe5, 0x15, 0x40, 0xe1, 0x60, 0x16, + 0x00, 0xe5, 0x5d, 0x16, 0x80, 0x0c, 0xe9, 0x5f, 0x16, 0x00, 0xef, 0x5c, + 0x16, 0x00, 0xf5, 0x5b, 0x16, 0x40, 0xe5, 0x5e, 0x16, 0x40, 0xe1, 0x3f, + 0x16, 0x00, 0xe5, 0x3c, 0x16, 0x80, 0x27, 0xa8, 0x0c, 0xe9, 0x3e, 0x16, + 0x00, 0xef, 0x3b, 0x16, 0x00, 0xf5, 0x3a, 0x16, 0x40, 0xe1, 0x39, 0x16, + 0x00, 0xe5, 0x36, 0x16, 0x80, 0x0c, 0xe9, 0x38, 0x16, 0x00, 0xef, 0x35, + 0x16, 0x00, 0xf5, 0x34, 0x16, 0x40, 0xe5, 0x37, 0x16, 0x40, 0xe5, 0x3d, + 0x16, 0x40, 0xe1, 0xe1, 0x15, 0x00, 0xe5, 0xde, 0x15, 0x80, 0x0c, 0xe9, + 0xe0, 0x15, 0x00, 0xef, 0xdd, 0x15, 0x00, 0xf5, 0xdc, 0x15, 0x40, 0xe5, + 0xdf, 0x15, 0x40, 0xe1, 0x53, 0x16, 0x00, 0xe5, 0x50, 0x16, 0x80, 0x2a, + 0xe8, 0x5a, 0x16, 0x80, 0x0c, 0xe9, 0x52, 0x16, 0x00, 0xef, 0x4f, 0x16, + 0x00, 0xf5, 0x4e, 0x16, 0x40, 0xe1, 0x59, 0x16, 0x00, 0xe5, 0x56, 0x16, + 0x80, 0x0c, 0xe9, 0x58, 0x16, 0x00, 0xef, 0x55, 0x16, 0x00, 0xf5, 0x54, + 0x16, 0x40, 0xe5, 0x57, 0x16, 0x40, 0xe5, 0x51, 0x16, 0x40, 0xe1, 0xcf, + 0x15, 0x00, 0xe5, 0xcc, 0x15, 0x80, 0x0c, 0xe9, 0xce, 0x15, 0x00, 0xef, + 0xcb, 0x15, 0x00, 0xf5, 0xca, 0x15, 0x40, 0xe5, 0xcd, 0x15, 0x40, 0xe1, + 0xed, 0x15, 0x00, 0xe5, 0xea, 0x15, 0x80, 0x0c, 0xe9, 0xec, 0x15, 0x00, + 0xef, 0xe9, 0x15, 0x00, 0xf5, 0xe8, 0x15, 0x40, 0xe5, 0xeb, 0x15, 0x40, + 0xe1, 0x07, 0x16, 0x00, 0xe5, 0x04, 0x16, 0x80, 0x10, 0xe7, 0xd1, 0x14, + 0x00, 0xe9, 0x06, 0x16, 0x00, 0xef, 0x03, 0x16, 0x00, 0xf5, 0x02, 0x16, + 0x40, 0xe5, 0x05, 0x16, 0x40, 0xe1, 0x0d, 0x16, 0x00, 0xe5, 0x0a, 0x16, + 0x80, 0x0c, 0xe9, 0x0c, 0x16, 0x00, 0xef, 0x09, 0x16, 0x00, 0xf5, 0x08, + 0x16, 0x40, 0xe5, 0x0b, 0x16, 0x40, 0xe1, 0x27, 0x16, 0x00, 0xe5, 0x24, + 0x16, 0x80, 0x27, 0xa8, 0x0c, 0xe9, 0x26, 0x16, 0x00, 0xef, 0x23, 0x16, + 0x00, 0xf5, 0x22, 0x16, 0x40, 0xe1, 0x33, 0x16, 0x00, 0xe5, 0x30, 0x16, + 0x80, 0x0c, 0xe9, 0x32, 0x16, 0x00, 0xef, 0x2f, 0x16, 0x00, 0xf5, 0x2e, + 0x16, 0x40, 0xe5, 0x31, 0x16, 0x40, 0xe5, 0x25, 0x16, 0x40, 0xa8, 0x1e, + 0xeb, 0x01, 0x16, 0xc0, 0x00, 0xe1, 0x00, 0x16, 0x00, 0xe5, 0xfd, 0x15, + 0x80, 0x0c, 0xe9, 0xff, 0x15, 0x00, 0xef, 0xfc, 0x15, 0x00, 0xf5, 0xfb, + 0x15, 0x40, 0xe5, 0xfe, 0x15, 0x40, 0xe1, 0xfa, 0x15, 0x00, 0xe5, 0xf7, + 0x15, 0x80, 0x0c, 0xe9, 0xf9, 0x15, 0x00, 0xef, 0xf6, 0x15, 0x00, 0xf5, + 0xf5, 0x15, 0x40, 0xe5, 0xf8, 0x15, 0x40, 0xe1, 0x1b, 0x16, 0x00, 0xe5, + 0x17, 0x16, 0x80, 0x2d, 0xe9, 0x19, 0x16, 0x00, 0xaa, 0x0e, 0xef, 0x16, + 0x16, 0x00, 0xf5, 0x14, 0x16, 0x00, 0x42, 0xa9, 0x01, 0xf2, 0x18, 0x40, + 0xe1, 0x21, 0x16, 0x00, 0xe5, 0x1e, 0x16, 0x80, 0x0c, 0xe9, 0x20, 0x16, + 0x00, 0xef, 0x1d, 0x16, 0x00, 0xf5, 0x1c, 0x16, 0x40, 0xe5, 0x1f, 0x16, + 0x40, 0xe5, 0x18, 0x16, 0x40, 0x48, 0x09, 0xbf, 0x47, 0x16, 0x40, 0x42, + 0x27, 0x01, 0x36, 0x14, 0x00, 0xe9, 0x37, 0x14, 0x00, 0xb7, 0x01, 0xff, + 0xe1, 0xdb, 0x15, 0x00, 0xe5, 0xd8, 0x15, 0x80, 0x0c, 0xe9, 0xda, 0x15, + 0x00, 0xef, 0xd7, 0x15, 0x00, 0xf5, 0xd6, 0x15, 0x40, 0xe5, 0xd9, 0x15, + 0x40, 0xe1, 0xf4, 0x15, 0x80, 0x3b, 0xe5, 0xf1, 0x15, 0x80, 0x32, 0xa8, + 0x17, 0xe9, 0xf3, 0x15, 0x00, 0xef, 0xf0, 0x15, 0x00, 0xf5, 0xef, 0x15, + 0x00, 0xb7, 0x01, 0xff, 0xe1, 0xf0, 0x18, 0x00, 0xf5, 0xed, 0x18, 0x40, + 0xe1, 0xc9, 0x15, 0x00, 0xe5, 0xc6, 0x15, 0x80, 0x0c, 0xe9, 0xc8, 0x15, + 0x00, 0xef, 0xc5, 0x15, 0x00, 0xf5, 0xc4, 0x15, 0x40, 0xe5, 0xc7, 0x15, + 0x40, 0xe5, 0xf2, 0x15, 0x40, 0xe1, 0xef, 0x18, 0x40, 0xa5, 0x3b, 0xe9, + 0x54, 0x14, 0x00, 0xac, 0x1c, 0xba, 0x01, 0xff, 0xe1, 0x4d, 0x16, 0x00, + 0xe5, 0x4a, 0x16, 0x80, 0x0c, 0xe9, 0x4c, 0x16, 0x00, 0xef, 0x49, 0x16, + 0x00, 0xf5, 0x48, 0x16, 0x40, 0xe5, 0x4b, 0x16, 0x40, 0xe1, 0x2d, 0x16, + 0x00, 0xe5, 0x2a, 0x16, 0x80, 0x0c, 0xe9, 0x2c, 0x16, 0x00, 0xef, 0x29, + 0x16, 0x00, 0xf5, 0x28, 0x16, 0x40, 0xe5, 0x2b, 0x16, 0x40, 0xe5, 0x53, + 0x14, 0x00, 0xae, 0x01, 0xff, 0x45, 0x19, 0xdb, 0xee, 0x18, 0x00, 0x45, + 0x53, 0x04, 0xf5, 0x18, 0x40, 0xe1, 0x66, 0x16, 0x00, 0xe5, 0x63, 0x16, + 0x80, 0x0c, 0xe9, 0x65, 0x16, 0x00, 0xef, 0x62, 0x16, 0x00, 0xf5, 0x61, + 0x16, 0x40, 0xe5, 0x64, 0x16, 0x40, 0xe9, 0x8a, 0x14, 0x40, 0x0b, 0x80, + 0x93, 0x58, 0x4b, 0x2d, 0x95, 0x3f, 0x15, 0x00, 0x09, 0xfb, 0xb1, 0x01, + 0xff, 0xe1, 0xb3, 0x15, 0x00, 0xe5, 0xb0, 0x15, 0x00, 0xe9, 0xb1, 0x15, + 0x00, 0xab, 0x2f, 0xae, 0x1d, 0xef, 0xb2, 0x15, 0x00, 0xf3, 0x08, 0x15, + 0x00, 0xf7, 0x7f, 0x16, 0xc0, 0x00, 0xe1, 0xb7, 0x15, 0x00, 0xe5, 0xb4, + 0x15, 0x00, 0xe9, 0xb5, 0x15, 0x00, 0xef, 0xb6, 0x15, 0x40, 0xe1, 0xbb, + 0x15, 0x00, 0xe5, 0xb8, 0x15, 0x00, 0xe9, 0xb9, 0x15, 0x00, 0xef, 0xba, + 0x15, 0x40, 0xe1, 0xbf, 0x15, 0x00, 0xe5, 0xbc, 0x15, 0x00, 0xe9, 0xbd, + 0x15, 0x00, 0xef, 0xbe, 0x15, 0x40, 0xec, 0xf3, 0x18, 0x00, 0xf2, 0xf4, + 0x18, 0x40, 0xe1, 0x0b, 0x14, 0x80, 0x1f, 0xe9, 0x1c, 0x14, 0x80, 0x14, + 0xee, 0x2e, 0x14, 0x00, 0x0a, 0x16, 0xa9, 0x04, 0xf9, 0xb1, 0x18, 0x40, + 0xed, 0xbe, 0x14, 0x00, 0xf3, 0x06, 0x15, 0x40, 0x47, 0x29, 0xcd, 0xaf, + 0x15, 0x40, 0xe9, 0x02, 0x14, 0x00, 0xf9, 0xb2, 0x18, 0x40, 0x43, 0xdc, + 0x01, 0xf7, 0xf4, 0x81, 0x06, 0x44, 0x5a, 0x2c, 0xd5, 0xf3, 0x41, 0x4b, + 0x31, 0x90, 0xf8, 0xf4, 0x41, 0x45, 0x30, 0x79, 0xc5, 0xf4, 0x01, 0x49, + 0xf2, 0xb1, 0x19, 0xf9, 0x41, 0x45, 0x66, 0xd9, 0x06, 0x21, 0x00, 0x45, + 0xcc, 0xd0, 0x24, 0x26, 0x40, 0xa1, 0x83, 0x4a, 0xa5, 0xdf, 0x43, 0x09, + 0x1e, 0xb0, 0xf3, 0x3e, 0xa9, 0x95, 0x3e, 0xac, 0x8c, 0x31, 0xaf, 0xdf, + 0x22, 0xb2, 0xe9, 0x12, 0xb5, 0xc0, 0x0f, 0xb9, 0x01, 0xff, 0x4d, 0xa3, + 0x81, 0xff, 0xfe, 0x00, 0x17, 0x1f, 0x2e, 0x01, 0xff, 0xa1, 0xba, 0x0d, + 0x02, 0x98, 0x14, 0x80, 0x0d, 0xa4, 0xd9, 0x0b, 0xa5, 0xa0, 0x0b, 0xa6, + 0xf4, 0x09, 0xa7, 0x91, 0x09, 0xa9, 0xcc, 0x08, 0xab, 0xf4, 0x06, 0xac, + 0xbe, 0x06, 0xad, 0xc9, 0x05, 0x44, 0x66, 0xe6, 0x40, 0xd0, 0x01, 0xaf, + 0xfb, 0x04, 0xb0, 0xd4, 0x03, 0xb2, 0xc5, 0x03, 0xb3, 0xa3, 0x02, 0xb4, + 0x8b, 0x01, 0x02, 0xb4, 0x09, 0x63, 0x4c, 0x2f, 0x8f, 0x6a, 0xd0, 0x01, + 0xb9, 0x01, 0xff, 0x02, 0x0f, 0x18, 0x1e, 0xb0, 0x01, 0xff, 0xaf, 0x06, + 0x44, 0x55, 0x81, 0x50, 0xd0, 0x41, 0x46, 0x17, 0xd3, 0x0a, 0xd0, 0x81, + 0x06, 0x44, 0x5e, 0xe7, 0x53, 0xd0, 0x41, 0x46, 0xdd, 0xcd, 0x0b, 0xd0, + 0x41, 0x02, 0x92, 0x00, 0x28, 0x04, 0x78, 0x1f, 0x01, 0xff, 0x51, 0xaf, + 0x52, 0xd4, 0xd0, 0x01, 0x55, 0xf4, 0x35, 0xd6, 0xd0, 0x01, 0x5c, 0xc1, + 0x16, 0xd5, 0xd0, 0x01, 0x03, 0x19, 0x01, 0x01, 0xff, 0x55, 0x2f, 0x37, + 0xd7, 0xd0, 0x01, 0x48, 0x80, 0x30, 0xcd, 0xd0, 0x41, 0x43, 0x1f, 0x6a, + 0x7d, 0xd0, 0x01, 0x44, 0xbb, 0x97, 0x7c, 0xd0, 0x41, 0x04, 0x3e, 0xe7, + 0x06, 0x43, 0x6d, 0x4e, 0x19, 0xd0, 0x41, 0x80, 0x06, 0x4a, 0xe0, 0xa2, + 0x21, 0xd0, 0x41, 0x45, 0xde, 0xcd, 0x06, 0xd0, 0x01, 0x4b, 0xfc, 0x77, + 0x05, 0xd0, 0x01, 0x43, 0xd2, 0x4e, 0x58, 0xd0, 0x41, 0xa5, 0x80, 0x01, + 0xa8, 0x52, 0x46, 0x99, 0xd2, 0x27, 0xd0, 0x01, 0xb2, 0x01, 0xff, 0xa9, + 0x37, 0x05, 0x0d, 0xac, 0x01, 0xff, 0x47, 0xec, 0xc8, 0x6d, 0xd0, 0x01, + 0x02, 0x92, 0x00, 0x14, 0xb0, 0x06, 0x47, 0xf5, 0xcb, 0x70, 0xd0, 0x41, + 0x4a, 0x0c, 0x99, 0x6e, 0xd0, 0x01, 0x48, 0x09, 0xc1, 0x6b, 0xd0, 0x41, + 0xa1, 0x06, 0x43, 0xd2, 0x4e, 0x63, 0xd0, 0x41, 0x43, 0xb7, 0x1a, 0x43, + 0xd0, 0x01, 0x47, 0xe3, 0xa2, 0x36, 0xd0, 0x41, 0xe1, 0x30, 0xd0, 0x01, + 0x46, 0xdf, 0xd1, 0x96, 0xd0, 0x01, 0x43, 0xc0, 0x03, 0x87, 0xd0, 0x41, + 0xa5, 0x06, 0x43, 0xec, 0x04, 0x14, 0xd0, 0x41, 0x42, 0x6c, 0x00, 0x2d, + 0xd0, 0x81, 0x06, 0x4d, 0xd3, 0x80, 0x79, 0xd0, 0x41, 0x47, 0x19, 0xc3, + 0x78, 0xd0, 0x01, 0x08, 0xa9, 0xc1, 0x01, 0xff, 0x42, 0xe1, 0x02, 0x76, + 0xd0, 0x01, 0x42, 0x0d, 0x2c, 0x77, 0xd0, 0x41, 0x44, 0x33, 0x55, 0x0f, + 0xd0, 0x01, 0x45, 0xcf, 0x16, 0x31, 0xd0, 0x01, 0x46, 0x2f, 0xd6, 0x88, + 0xd0, 0x41, 0x47, 0x42, 0xc5, 0x1d, 0xd0, 0x01, 0x45, 0x46, 0xdb, 0x29, + 0xd0, 0x81, 0x8b, 0x01, 0x08, 0x41, 0xbd, 0x49, 0xb4, 0x2e, 0xb9, 0x01, + 0xff, 0xae, 0x0d, 0x43, 0x90, 0x05, 0x66, 0xd0, 0xc1, 0x00, 0x44, 0x67, + 0xd3, 0x08, 0xd0, 0x41, 0x05, 0x93, 0xd9, 0x06, 0x44, 0xe3, 0xc9, 0x13, + 0xd0, 0x41, 0x48, 0xe2, 0xa2, 0x2a, 0xd0, 0x01, 0x4c, 0x67, 0x8a, 0x2b, + 0xd0, 0x01, 0x43, 0xd2, 0x4e, 0x65, 0xd0, 0x41, 0x45, 0xf2, 0xd9, 0x7e, + 0xd0, 0x81, 0x0c, 0x44, 0x57, 0x1d, 0xe8, 0xd0, 0x01, 0x4a, 0x2c, 0xa7, + 0x44, 0xd0, 0x41, 0x49, 0x4d, 0xab, 0x1f, 0xd0, 0x41, 0x46, 0xbd, 0xcf, + 0xe2, 0xd0, 0x81, 0x1f, 0x47, 0x34, 0xcc, 0xde, 0xd0, 0xc1, 0x00, 0x80, + 0x01, 0xff, 0x47, 0x68, 0xc6, 0xdf, 0xd0, 0x01, 0xb4, 0x01, 0xff, 0x49, + 0x8e, 0xaf, 0xe1, 0xd0, 0x01, 0x47, 0x31, 0xcb, 0xe0, 0xd0, 0x41, 0x80, + 0x01, 0xff, 0x47, 0x68, 0xc6, 0xe3, 0xd0, 0x01, 0xb4, 0x01, 0xff, 0x49, + 0x8e, 0xaf, 0xe5, 0xd0, 0x01, 0x47, 0x31, 0xcb, 0xe4, 0xd0, 0x41, 0x44, + 0x9f, 0x81, 0x69, 0xd0, 0x41, 0x46, 0x9f, 0xcf, 0x3c, 0xd0, 0x01, 0x44, + 0xe3, 0xc9, 0x25, 0xd0, 0x41, 0x02, 0x17, 0x00, 0x70, 0xa5, 0x43, 0x06, + 0x69, 0xd2, 0x33, 0x02, 0xdb, 0x02, 0x01, 0xff, 0x05, 0x0b, 0xc1, 0x0d, + 0xac, 0x01, 0xff, 0xe9, 0x00, 0xd0, 0x01, 0x42, 0x10, 0x00, 0x17, 0xd0, + 0x41, 0x47, 0xec, 0xc8, 0x6c, 0xd0, 0x01, 0xee, 0x39, 0xd0, 0x81, 0x0c, + 0x4b, 0x0b, 0x99, 0x6f, 0xd0, 0x01, 0x47, 0xf5, 0xcb, 0x71, 0xd0, 0x41, + 0x44, 0x9f, 0x81, 0x5a, 0xd0, 0x41, 0x48, 0xe2, 0xa2, 0x26, 0xd0, 0x01, + 0x43, 0xd2, 0x4e, 0x59, 0xd0, 0x41, 0x46, 0x41, 0xd3, 0x38, 0xd0, 0x81, + 0x1e, 0x49, 0x18, 0x99, 0x02, 0xd0, 0x01, 0x03, 0x13, 0x2a, 0x01, 0xff, + 0x42, 0x6c, 0x00, 0x41, 0xd0, 0x01, 0xb4, 0x01, 0xff, 0xe9, 0x49, 0xd0, + 0x01, 0x49, 0xbd, 0xb3, 0x4b, 0xd0, 0x41, 0x44, 0x9f, 0x81, 0x4d, 0xd0, + 0x41, 0x02, 0x6d, 0x00, 0x06, 0x45, 0x9f, 0xdc, 0x1e, 0xd0, 0x41, 0x07, + 0xa1, 0xc4, 0x16, 0x46, 0x65, 0xd3, 0x09, 0xd0, 0xc1, 0x00, 0x80, 0x01, + 0xff, 0x48, 0xe2, 0xa2, 0x3e, 0xd0, 0x01, 0x43, 0xd2, 0x4e, 0x5e, 0xd0, + 0x41, 0x48, 0xe2, 0xa2, 0x3d, 0xd0, 0x01, 0x43, 0xd2, 0x4e, 0x5f, 0xd0, + 0x41, 0x06, 0x59, 0xd3, 0x35, 0x45, 0xc6, 0xdd, 0x5b, 0xd0, 0x01, 0x04, + 0x1e, 0xe8, 0x11, 0x09, 0x22, 0xb8, 0x01, 0xff, 0x48, 0xe2, 0xa2, 0x2c, + 0xd0, 0x01, 0x43, 0xd2, 0x4e, 0x75, 0xd0, 0x41, 0x80, 0x06, 0x4a, 0xe0, + 0xa2, 0x20, 0xd0, 0x41, 0x45, 0xde, 0xcd, 0x04, 0xd0, 0x01, 0x4b, 0xfc, + 0x77, 0x03, 0xd0, 0x01, 0x43, 0xd2, 0x4e, 0x48, 0xd0, 0x41, 0x48, 0xe2, + 0xa2, 0x15, 0xd0, 0x01, 0x43, 0xd2, 0x4e, 0x47, 0xd0, 0x41, 0x08, 0x09, + 0xba, 0x06, 0x4a, 0x30, 0xa3, 0x57, 0xd0, 0x41, 0x05, 0xa2, 0xd9, 0x58, + 0x4e, 0xe1, 0x6f, 0xa4, 0xd0, 0x01, 0x4d, 0xee, 0x7d, 0xaa, 0xd0, 0x01, + 0xb0, 0x29, 0xb4, 0x06, 0x4b, 0x65, 0x9c, 0xb1, 0xd0, 0x41, 0x08, 0x02, + 0x76, 0x11, 0x02, 0x0d, 0x00, 0x01, 0xff, 0x46, 0x15, 0x9b, 0xa7, 0xd0, + 0x01, 0x49, 0x06, 0x76, 0xa6, 0xd0, 0x41, 0x45, 0xea, 0x6f, 0xa8, 0xd0, + 0x01, 0x4d, 0xee, 0x7d, 0xa9, 0xd0, 0x41, 0x07, 0x8a, 0xc8, 0x11, 0x04, + 0x3c, 0x8c, 0x01, 0xff, 0x47, 0xe8, 0x6f, 0xa2, 0xd0, 0x01, 0x4b, 0x65, + 0x9c, 0xb2, 0xd0, 0x41, 0x45, 0xea, 0x6f, 0xab, 0xd0, 0x01, 0x4e, 0x01, + 0x76, 0xb3, 0xd0, 0x41, 0x4e, 0xe1, 0x6f, 0xa5, 0xd0, 0x01, 0x4c, 0x3b, + 0x8c, 0xa3, 0xd0, 0x41, 0xa5, 0x06, 0x46, 0xed, 0xc8, 0x5d, 0xd0, 0x41, + 0x05, 0xc2, 0xdc, 0x06, 0x43, 0x3b, 0xbd, 0x2e, 0xd0, 0x41, 0x4b, 0x5f, + 0x93, 0x8b, 0xd0, 0x01, 0x4c, 0x1f, 0x87, 0x8a, 0xd0, 0x01, 0x4f, 0xc8, + 0x67, 0x8e, 0xd0, 0x01, 0xb4, 0x01, 0xff, 0x4f, 0x60, 0x66, 0x8d, 0xd0, + 0x01, 0x4c, 0xfb, 0x8c, 0x8c, 0xd0, 0x41, 0x02, 0x8a, 0x00, 0xba, 0x01, + 0x06, 0x19, 0xd1, 0x70, 0x45, 0x36, 0x8f, 0x24, 0xd0, 0x81, 0x5a, 0xaf, + 0x3f, 0xb2, 0x06, 0x46, 0x7d, 0xc8, 0x61, 0xd0, 0x41, 0x04, 0x3e, 0xe4, + 0x06, 0x46, 0x01, 0xd1, 0x0c, 0xd0, 0x41, 0xa1, 0x0f, 0xaf, 0x01, 0xff, + 0x48, 0xbe, 0xb3, 0x4c, 0xd0, 0x01, 0x48, 0xf1, 0xc2, 0x54, 0xd0, 0x41, + 0x80, 0x06, 0x42, 0x12, 0x00, 0x32, 0xd0, 0x41, 0xa1, 0x06, 0x43, 0xd2, + 0x4e, 0x83, 0xd0, 0x41, 0x43, 0xb7, 0x1a, 0x82, 0xd0, 0x01, 0x47, 0xe3, + 0xa2, 0x81, 0xd0, 0x41, 0x46, 0x1f, 0xd4, 0x3a, 0xd0, 0x81, 0x0c, 0x45, + 0xd9, 0x5b, 0x89, 0xd0, 0x01, 0x46, 0xc0, 0xb3, 0x4a, 0xd0, 0x41, 0x45, + 0xa7, 0xc4, 0x42, 0xd0, 0x41, 0x80, 0x01, 0xff, 0x43, 0x1f, 0x6a, 0x7f, + 0xd0, 0x01, 0x44, 0xbb, 0x97, 0xf4, 0xd0, 0x41, 0x80, 0x27, 0x42, 0x12, + 0x00, 0x10, 0xd0, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x48, 0xe2, 0xa2, 0x1c, + 0xd0, 0x01, 0x04, 0x7a, 0xe6, 0x01, 0xff, 0x43, 0x1f, 0x6a, 0x4e, 0xd0, + 0x01, 0x44, 0xbb, 0x97, 0xf2, 0xd0, 0x01, 0x44, 0x2e, 0xe6, 0xf0, 0xd0, + 0x41, 0x48, 0xe2, 0xa2, 0x1b, 0xd0, 0x01, 0x04, 0x7a, 0xe6, 0x01, 0xff, + 0x43, 0x1f, 0x6a, 0x4f, 0xd0, 0x01, 0x44, 0xbb, 0x97, 0xf3, 0xd0, 0x01, + 0x44, 0x2e, 0xe6, 0xf1, 0xd0, 0x41, 0x03, 0xc1, 0x10, 0x06, 0x45, 0x63, + 0xdc, 0x07, 0xd0, 0x41, 0x49, 0x0a, 0xac, 0x37, 0xd0, 0x01, 0x43, 0x3c, + 0x06, 0x7a, 0xd0, 0x41, 0x46, 0x47, 0xd0, 0x3f, 0xd0, 0x01, 0x02, 0x7d, + 0x02, 0x1a, 0xb3, 0x01, 0xff, 0x55, 0xe3, 0x34, 0xac, 0xd0, 0x01, 0x03, + 0xb6, 0x00, 0x01, 0xff, 0x48, 0xe2, 0xa2, 0x1a, 0xd0, 0x01, 0x43, 0xd2, + 0x4e, 0x46, 0xd0, 0x41, 0x47, 0x5a, 0xc6, 0x98, 0xd0, 0x01, 0xa6, 0x01, + 0xff, 0x44, 0x6b, 0x66, 0xb7, 0xd0, 0x01, 0x04, 0x35, 0x27, 0x01, 0xff, + 0xe1, 0x35, 0xd0, 0x01, 0x42, 0x10, 0x00, 0xb8, 0xd0, 0x41, 0x06, 0x13, + 0xd1, 0x50, 0x02, 0x0c, 0x00, 0x06, 0x4b, 0x13, 0x9a, 0x45, 0xd0, 0x41, + 0x02, 0x60, 0x12, 0x11, 0x0a, 0x2a, 0xa9, 0x01, 0xff, 0x46, 0x1a, 0xc3, + 0xb4, 0xd0, 0x01, 0x47, 0x61, 0xc6, 0xb5, 0xd0, 0x41, 0x02, 0x92, 0x00, + 0x06, 0x49, 0xbb, 0x79, 0x72, 0xd0, 0x41, 0x48, 0xe2, 0xa2, 0x16, 0xd0, + 0x01, 0x04, 0x7a, 0xe6, 0x11, 0x0e, 0x55, 0x63, 0x01, 0xff, 0x48, 0x4e, + 0xad, 0x90, 0xd0, 0x01, 0x45, 0x51, 0xab, 0x91, 0xd0, 0x41, 0x43, 0x1f, + 0x6a, 0x8f, 0xd0, 0x01, 0x44, 0xbb, 0x97, 0xf5, 0xd0, 0x41, 0x46, 0xbf, + 0xd0, 0xd8, 0xd0, 0x01, 0x46, 0x74, 0x30, 0xd9, 0xd0, 0x41, 0x09, 0x06, + 0xad, 0x92, 0x01, 0x5a, 0xca, 0x1d, 0xc5, 0xd0, 0x01, 0x06, 0x04, 0x3c, + 0x01, 0xff, 0x48, 0xe2, 0xa2, 0x34, 0xd0, 0x81, 0x7a, 0x0a, 0xce, 0xa0, + 0x45, 0x54, 0x4d, 0x3d, 0xcc, 0xd0, 0x01, 0x56, 0x72, 0x30, 0xcb, 0xd0, + 0x01, 0x0f, 0x5d, 0x69, 0x29, 0xae, 0x1b, 0x08, 0xd0, 0x1d, 0x01, 0xff, + 0x07, 0xd8, 0x1d, 0x06, 0x4b, 0xfc, 0x92, 0xbe, 0xd0, 0x41, 0x46, 0xc9, + 0xd5, 0xc6, 0xd0, 0x01, 0x45, 0xdf, 0x1d, 0xc5, 0xd0, 0x41, 0x49, 0x3c, + 0xad, 0xbc, 0xd0, 0x01, 0x45, 0x5f, 0xdb, 0xc7, 0xd0, 0x41, 0x48, 0x89, + 0xbb, 0xc3, 0xd0, 0x01, 0x4a, 0x4c, 0xa5, 0xc4, 0xd0, 0x41, 0x42, 0x00, + 0x00, 0xbd, 0xd0, 0x01, 0x42, 0x37, 0x01, 0xbf, 0xd0, 0x01, 0xae, 0x0c, + 0x42, 0xc1, 0x08, 0xba, 0xd0, 0x01, 0x42, 0x0f, 0x00, 0xc0, 0xd0, 0x41, + 0x43, 0xa5, 0x10, 0xbb, 0xd0, 0x01, 0x02, 0x48, 0x03, 0x01, 0xff, 0x43, + 0x1f, 0x6a, 0xc2, 0xd0, 0x01, 0x44, 0xbb, 0x97, 0xc1, 0xd0, 0x41, 0x4f, + 0x09, 0x63, 0xb9, 0xd0, 0x41, 0x48, 0x89, 0xbb, 0xb0, 0xd0, 0x01, 0x4a, + 0x4c, 0xa5, 0xaf, 0xd0, 0x01, 0x4b, 0x10, 0x9b, 0xae, 0xd0, 0x41, 0x49, + 0xd7, 0xb1, 0x64, 0xd0, 0x01, 0x46, 0x2f, 0xd3, 0x55, 0xd0, 0x01, 0xae, + 0x1c, 0x47, 0x6d, 0xca, 0x68, 0xd0, 0x01, 0x06, 0x05, 0xd6, 0x06, 0x4e, + 0xf9, 0x77, 0x0e, 0xd0, 0x41, 0x4d, 0xb7, 0x79, 0x74, 0xd0, 0x01, 0x4b, + 0x0b, 0x99, 0x60, 0xd0, 0x41, 0x54, 0xf9, 0x3b, 0xb6, 0xd0, 0x01, 0x47, + 0x6f, 0xc6, 0x7b, 0xd0, 0x41, 0x45, 0xd9, 0xd9, 0x01, 0xd0, 0x01, 0xa9, + 0x06, 0x42, 0x4e, 0x42, 0x2f, 0xd0, 0x41, 0xa1, 0x6d, 0x05, 0x77, 0x1f, + 0x3d, 0x4a, 0x04, 0xa2, 0xe7, 0xd0, 0x01, 0xa7, 0x0d, 0x43, 0xc0, 0x03, + 0x86, 0xd0, 0xc1, 0x00, 0x49, 0xe1, 0xa2, 0x80, 0xd0, 0x41, 0x45, 0xe0, + 0xd1, 0x92, 0xd0, 0x81, 0x06, 0x48, 0x59, 0xc0, 0xe6, 0xd0, 0x41, 0x0f, + 0x54, 0x63, 0x01, 0xff, 0x09, 0x4e, 0xad, 0x06, 0x45, 0x51, 0xab, 0x95, + 0xd0, 0x41, 0x43, 0x1f, 0x6a, 0x94, 0xd0, 0x01, 0x44, 0xbb, 0x97, 0x93, + 0xd0, 0x41, 0x51, 0xaf, 0x52, 0xd0, 0xd0, 0x01, 0x55, 0xf4, 0x35, 0xd2, + 0xd0, 0x01, 0x5c, 0xc1, 0x16, 0xd1, 0xd0, 0x01, 0xb4, 0x01, 0xff, 0x4c, + 0x7c, 0x30, 0xcf, 0xd0, 0x01, 0x02, 0x0d, 0x00, 0x01, 0xff, 0x55, 0x2f, + 0x37, 0xd3, 0xd0, 0x01, 0x48, 0x80, 0x30, 0xce, 0xd0, 0x41, 0x44, 0x5d, + 0xc6, 0x99, 0xd0, 0x01, 0x06, 0xa5, 0xd5, 0x01, 0xff, 0x06, 0xa5, 0xcf, + 0x0c, 0x45, 0xde, 0xcd, 0xdc, 0xd0, 0x01, 0x47, 0x34, 0xcc, 0xdd, 0xd0, + 0x41, 0x45, 0x32, 0xdb, 0xdb, 0xd0, 0x01, 0x44, 0x92, 0x8d, 0xda, 0xd0, + 0x41, 0x04, 0x43, 0x5f, 0x27, 0x07, 0xe1, 0xc9, 0x17, 0x04, 0x4a, 0xe7, + 0x01, 0xff, 0x46, 0x11, 0xd3, 0xc9, 0xd0, 0x01, 0x46, 0x81, 0xd5, 0xca, + 0xd0, 0x01, 0x45, 0xd1, 0xe1, 0xc8, 0xd0, 0x41, 0x48, 0xe2, 0xa2, 0x3b, + 0xd0, 0x01, 0x43, 0xd2, 0x4e, 0x67, 0xd0, 0x41, 0xe9, 0x56, 0xd0, 0x01, + 0x42, 0x10, 0x00, 0x18, 0xd0, 0x41, 0x05, 0x0e, 0xdc, 0xb3, 0x01, 0xae, + 0x99, 0x01, 0xb0, 0x40, 0xb2, 0x01, 0xff, 0x02, 0x60, 0x12, 0x2f, 0x06, + 0x1d, 0xd3, 0x01, 0xff, 0x42, 0x00, 0x00, 0xec, 0xd0, 0x01, 0x42, 0x24, + 0x02, 0xeb, 0xd0, 0x01, 0x42, 0x37, 0x01, 0xed, 0xd0, 0x01, 0x42, 0xd2, + 0x02, 0xef, 0xd0, 0x01, 0x42, 0xc1, 0x08, 0xe9, 0xd0, 0x01, 0x43, 0x43, + 0x2a, 0xea, 0xd0, 0x01, 0x42, 0x0f, 0x00, 0xee, 0xd0, 0x41, 0xee, 0x97, + 0xd0, 0x01, 0x49, 0xbb, 0x79, 0x73, 0xd0, 0x41, 0x05, 0x8c, 0xdb, 0x47, + 0x42, 0xc3, 0x01, 0x85, 0xd0, 0x01, 0xaf, 0x01, 0xff, 0x06, 0xad, 0xd0, + 0x2e, 0x06, 0xab, 0xd5, 0x06, 0x45, 0x10, 0x4e, 0x23, 0xd0, 0x41, 0x02, + 0x48, 0x03, 0x14, 0xf3, 0x11, 0xd0, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x45, + 0xde, 0xcd, 0x12, 0xd0, 0x01, 0x43, 0xd2, 0x4e, 0x51, 0xd0, 0x41, 0x4d, + 0x96, 0x81, 0x52, 0xd0, 0x01, 0x50, 0xe8, 0x34, 0xad, 0xd0, 0x41, 0x48, + 0xe2, 0xa2, 0x22, 0xd0, 0x01, 0x43, 0xd2, 0x4e, 0x84, 0xd0, 0x41, 0x4a, + 0xfd, 0x77, 0x0d, 0xd0, 0x01, 0x46, 0xe9, 0xd6, 0x33, 0xd0, 0x41, 0x4a, + 0x8e, 0x9f, 0x28, 0xd0, 0x01, 0x06, 0x17, 0xd6, 0x01, 0xff, 0x47, 0x7c, + 0xc8, 0x62, 0xd0, 0x01, 0x42, 0x6c, 0x00, 0x5c, 0xd0, 0x41, 0x03, 0x8d, + 0x11, 0x2f, 0x04, 0xdf, 0xd1, 0x21, 0x02, 0x2a, 0x02, 0x11, 0x05, 0x4c, + 0xdf, 0x01, 0xff, 0x44, 0x32, 0xe4, 0x9a, 0xd0, 0x01, 0x45, 0x13, 0xdc, + 0xa1, 0xd0, 0x41, 0x42, 0xdb, 0x02, 0x9e, 0xd0, 0x01, 0x44, 0x19, 0x01, + 0x9d, 0xd0, 0x41, 0xe9, 0x9f, 0xd0, 0x01, 0x45, 0xf2, 0xde, 0xa0, 0xd0, + 0x41, 0xe9, 0x9c, 0xd0, 0x01, 0x45, 0xf2, 0xde, 0x9b, 0xd0, 0x41, 0x04, + 0xc4, 0x75, 0x97, 0x03, 0x44, 0x48, 0x08, 0xa3, 0xfa, 0x01, 0xe7, 0x1b, + 0xf4, 0x81, 0xd2, 0x01, 0x04, 0x5a, 0xe5, 0x57, 0x53, 0xa8, 0x44, 0xd7, + 0xf3, 0x01, 0x02, 0x3f, 0x06, 0x2d, 0x45, 0xce, 0xdf, 0x2f, 0xf3, 0x01, + 0xf3, 0x8c, 0xf6, 0x81, 0x0d, 0x44, 0xf3, 0x04, 0xc8, 0xf9, 0xc1, 0x00, + 0x43, 0x28, 0xe9, 0x8b, 0xf9, 0x41, 0x45, 0xd5, 0x02, 0x8f, 0xf6, 0x01, + 0xb4, 0x01, 0xff, 0x4e, 0xd2, 0x30, 0x64, 0xf4, 0x01, 0x4f, 0x3c, 0x6c, + 0x65, 0xf4, 0x41, 0x42, 0xf2, 0x04, 0x22, 0x20, 0x80, 0x13, 0x44, 0x02, + 0x2a, 0x6b, 0xf5, 0x81, 0x06, 0x44, 0x8a, 0xe7, 0xce, 0x25, 0x40, 0x51, + 0xe3, 0x51, 0x6c, 0xf5, 0x41, 0x49, 0x4a, 0x1b, 0x19, 0x22, 0x40, 0x07, + 0xf1, 0x04, 0x0d, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xe9, 0x52, 0x17, 0x00, + 0xf5, 0x53, 0x17, 0x40, 0xe1, 0x40, 0x17, 0x00, 0x42, 0x16, 0x00, 0x4a, + 0x17, 0x00, 0x42, 0x68, 0x0f, 0x47, 0x17, 0x00, 0x42, 0x24, 0x02, 0x44, + 0x17, 0x00, 0x42, 0x22, 0x00, 0x51, 0x17, 0x00, 0xe9, 0x41, 0x17, 0x00, + 0x42, 0x1b, 0x02, 0x43, 0x17, 0x00, 0x42, 0x74, 0x00, 0x4e, 0x17, 0x00, + 0x42, 0x6c, 0x00, 0x4b, 0x17, 0x00, 0xae, 0x28, 0x42, 0xc1, 0x08, 0x49, + 0x17, 0x00, 0x42, 0x71, 0x00, 0x4d, 0x17, 0x00, 0x42, 0x45, 0x05, 0x50, + 0x17, 0x00, 0x42, 0x12, 0x00, 0x46, 0x17, 0x00, 0xf5, 0x42, 0x17, 0x00, + 0x42, 0xa9, 0x01, 0x4f, 0x17, 0x00, 0x42, 0x20, 0x20, 0x4c, 0x17, 0x40, + 0xe1, 0x48, 0x17, 0x00, 0x42, 0x24, 0x02, 0x45, 0x17, 0x40, 0x06, 0xb7, + 0x7c, 0x01, 0xff, 0x4e, 0x7b, 0x70, 0x1f, 0x1a, 0x00, 0x07, 0xf1, 0x04, + 0x21, 0x47, 0x43, 0xca, 0x1e, 0x1a, 0x00, 0x0b, 0x70, 0x70, 0x01, 0xff, + 0x42, 0xeb, 0x0d, 0x1b, 0x1a, 0x00, 0xe5, 0x19, 0x1a, 0x00, 0xe9, 0x17, + 0x1a, 0x00, 0xef, 0x1a, 0x1a, 0x00, 0xf5, 0x18, 0x1a, 0x40, 0xe1, 0x15, + 0x1a, 0x00, 0x42, 0x16, 0x00, 0x05, 0x1a, 0x00, 0x42, 0x37, 0x00, 0x0c, + 0x1a, 0x00, 0x42, 0x68, 0x0f, 0x09, 0x1a, 0x00, 0x42, 0x24, 0x02, 0x01, + 0x1a, 0x00, 0x42, 0x22, 0x00, 0x16, 0x1a, 0x00, 0x42, 0x77, 0x24, 0x0d, + 0x1a, 0x00, 0x42, 0x1b, 0x02, 0x00, 0x1a, 0x00, 0x42, 0x74, 0x00, 0x12, + 0x1a, 0x00, 0xad, 0x49, 0xae, 0x24, 0x42, 0xc1, 0x08, 0x04, 0x1a, 0x00, + 0x42, 0x71, 0x00, 0x11, 0x1a, 0x00, 0x42, 0x45, 0x05, 0x14, 0x1a, 0x00, + 0x42, 0x12, 0x00, 0x08, 0x1a, 0x00, 0x42, 0xb4, 0x09, 0x13, 0x1a, 0x00, + 0x42, 0x20, 0x20, 0x10, 0x1a, 0x40, 0xe1, 0x0a, 0x1a, 0x00, 0xa7, 0x13, + 0x42, 0x71, 0x00, 0x0b, 0x1a, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x0e, 0x1a, + 0x00, 0x42, 0x37, 0x00, 0x0f, 0x1a, 0x40, 0xe1, 0x02, 0x1a, 0x00, 0x42, + 0x1b, 0x02, 0x03, 0x1a, 0x40, 0xe1, 0x06, 0x1a, 0x00, 0x42, 0xc1, 0x08, + 0x07, 0x1a, 0x40, 0x44, 0xc4, 0x4c, 0xcb, 0xf9, 0x01, 0xf3, 0xe7, 0xfa, + 0x41, 0xa1, 0x6a, 0xa5, 0x50, 0xa9, 0x2b, 0xaf, 0x01, 0xff, 0x45, 0x6f, + 0xda, 0x66, 0xf9, 0x01, 0x04, 0xeb, 0x9f, 0x0c, 0x42, 0x19, 0x04, 0xf9, + 0xf9, 0x01, 0x48, 0x81, 0xc2, 0x0e, 0xf9, 0x41, 0x43, 0x16, 0x00, 0xa6, + 0x00, 0x00, 0x5b, 0x7a, 0x18, 0x8b, 0x23, 0x00, 0x45, 0x5e, 0x1f, 0x94, + 0xf4, 0x41, 0x42, 0x36, 0x01, 0xf1, 0xf9, 0x01, 0xa4, 0x0f, 0x02, 0x69, + 0x00, 0x01, 0xff, 0x44, 0x7a, 0xe4, 0xbc, 0xf4, 0x01, 0xf3, 0x72, 0xfa, + 0x41, 0x4b, 0x6a, 0x93, 0x70, 0xf4, 0x01, 0x4b, 0x46, 0x94, 0x09, 0xf3, + 0x41, 0xa1, 0x06, 0x42, 0x32, 0x00, 0xd8, 0x02, 0x40, 0xe4, 0x5e, 0xf3, + 0x01, 0x50, 0x2e, 0x5e, 0x82, 0x00, 0x00, 0x4a, 0xa8, 0xa8, 0x31, 0xf9, + 0x41, 0x04, 0x62, 0xe5, 0x98, 0x09, 0xa9, 0x01, 0xff, 0x0c, 0xd7, 0x89, + 0x04, 0xee, 0xe0, 0xf9, 0x41, 0x45, 0xbe, 0xb6, 0x00, 0x28, 0x00, 0x05, + 0x0a, 0xdb, 0x01, 0xff, 0xd1, 0x01, 0x28, 0x80, 0xbe, 0x04, 0xd2, 0x02, + 0x28, 0x80, 0x9c, 0x02, 0xd3, 0x04, 0x28, 0x80, 0x8b, 0x01, 0xd4, 0x08, + 0x28, 0x80, 0x43, 0xd5, 0x10, 0x28, 0x80, 0x1f, 0xd6, 0x20, 0x28, 0x80, + 0x0d, 0xd7, 0x40, 0x28, 0x80, 0x04, 0xd8, 0x80, 0x28, 0x40, 0xd8, 0xc0, + 0x28, 0x40, 0xd7, 0x60, 0x28, 0x80, 0x04, 0xd8, 0xa0, 0x28, 0x40, 0xd8, + 0xe0, 0x28, 0x40, 0xd6, 0x30, 0x28, 0x80, 0x0d, 0xd7, 0x50, 0x28, 0x80, + 0x04, 0xd8, 0x90, 0x28, 0x40, 0xd8, 0xd0, 0x28, 0x40, 0xd7, 0x70, 0x28, + 0x80, 0x04, 0xd8, 0xb0, 0x28, 0x40, 0xd8, 0xf0, 0x28, 0x40, 0xd5, 0x18, + 0x28, 0x80, 0x1f, 0xd6, 0x28, 0x28, 0x80, 0x0d, 0xd7, 0x48, 0x28, 0x80, + 0x04, 0xd8, 0x88, 0x28, 0x40, 0xd8, 0xc8, 0x28, 0x40, 0xd7, 0x68, 0x28, + 0x80, 0x04, 0xd8, 0xa8, 0x28, 0x40, 0xd8, 0xe8, 0x28, 0x40, 0xd6, 0x38, + 0x28, 0x80, 0x0d, 0xd7, 0x58, 0x28, 0x80, 0x04, 0xd8, 0x98, 0x28, 0x40, + 0xd8, 0xd8, 0x28, 0x40, 0xd7, 0x78, 0x28, 0x80, 0x04, 0xd8, 0xb8, 0x28, + 0x40, 0xd8, 0xf8, 0x28, 0x40, 0xd4, 0x0c, 0x28, 0x80, 0x43, 0xd5, 0x14, + 0x28, 0x80, 0x1f, 0xd6, 0x24, 0x28, 0x80, 0x0d, 0xd7, 0x44, 0x28, 0x80, + 0x04, 0xd8, 0x84, 0x28, 0x40, 0xd8, 0xc4, 0x28, 0x40, 0xd7, 0x64, 0x28, + 0x80, 0x04, 0xd8, 0xa4, 0x28, 0x40, 0xd8, 0xe4, 0x28, 0x40, 0xd6, 0x34, + 0x28, 0x80, 0x0d, 0xd7, 0x54, 0x28, 0x80, 0x04, 0xd8, 0x94, 0x28, 0x40, + 0xd8, 0xd4, 0x28, 0x40, 0xd7, 0x74, 0x28, 0x80, 0x04, 0xd8, 0xb4, 0x28, + 0x40, 0xd8, 0xf4, 0x28, 0x40, 0xd5, 0x1c, 0x28, 0x80, 0x1f, 0xd6, 0x2c, + 0x28, 0x80, 0x0d, 0xd7, 0x4c, 0x28, 0x80, 0x04, 0xd8, 0x8c, 0x28, 0x40, + 0xd8, 0xcc, 0x28, 0x40, 0xd7, 0x6c, 0x28, 0x80, 0x04, 0xd8, 0xac, 0x28, + 0x40, 0xd8, 0xec, 0x28, 0x40, 0xd6, 0x3c, 0x28, 0x80, 0x0d, 0xd7, 0x5c, + 0x28, 0x80, 0x04, 0xd8, 0x9c, 0x28, 0x40, 0xd8, 0xdc, 0x28, 0x40, 0xd7, + 0x7c, 0x28, 0x80, 0x04, 0xd8, 0xbc, 0x28, 0x40, 0xd8, 0xfc, 0x28, 0x40, + 0xd3, 0x06, 0x28, 0x80, 0x8b, 0x01, 0xd4, 0x0a, 0x28, 0x80, 0x43, 0xd5, + 0x12, 0x28, 0x80, 0x1f, 0xd6, 0x22, 0x28, 0x80, 0x0d, 0xd7, 0x42, 0x28, + 0x80, 0x04, 0xd8, 0x82, 0x28, 0x40, 0xd8, 0xc2, 0x28, 0x40, 0xd7, 0x62, + 0x28, 0x80, 0x04, 0xd8, 0xa2, 0x28, 0x40, 0xd8, 0xe2, 0x28, 0x40, 0xd6, + 0x32, 0x28, 0x80, 0x0d, 0xd7, 0x52, 0x28, 0x80, 0x04, 0xd8, 0x92, 0x28, + 0x40, 0xd8, 0xd2, 0x28, 0x40, 0xd7, 0x72, 0x28, 0x80, 0x04, 0xd8, 0xb2, + 0x28, 0x40, 0xd8, 0xf2, 0x28, 0x40, 0xd5, 0x1a, 0x28, 0x80, 0x1f, 0xd6, + 0x2a, 0x28, 0x80, 0x0d, 0xd7, 0x4a, 0x28, 0x80, 0x04, 0xd8, 0x8a, 0x28, + 0x40, 0xd8, 0xca, 0x28, 0x40, 0xd7, 0x6a, 0x28, 0x80, 0x04, 0xd8, 0xaa, + 0x28, 0x40, 0xd8, 0xea, 0x28, 0x40, 0xd6, 0x3a, 0x28, 0x80, 0x0d, 0xd7, + 0x5a, 0x28, 0x80, 0x04, 0xd8, 0x9a, 0x28, 0x40, 0xd8, 0xda, 0x28, 0x40, + 0xd7, 0x7a, 0x28, 0x80, 0x04, 0xd8, 0xba, 0x28, 0x40, 0xd8, 0xfa, 0x28, + 0x40, 0xd4, 0x0e, 0x28, 0x80, 0x43, 0xd5, 0x16, 0x28, 0x80, 0x1f, 0xd6, + 0x26, 0x28, 0x80, 0x0d, 0xd7, 0x46, 0x28, 0x80, 0x04, 0xd8, 0x86, 0x28, + 0x40, 0xd8, 0xc6, 0x28, 0x40, 0xd7, 0x66, 0x28, 0x80, 0x04, 0xd8, 0xa6, + 0x28, 0x40, 0xd8, 0xe6, 0x28, 0x40, 0xd6, 0x36, 0x28, 0x80, 0x0d, 0xd7, + 0x56, 0x28, 0x80, 0x04, 0xd8, 0x96, 0x28, 0x40, 0xd8, 0xd6, 0x28, 0x40, + 0xd7, 0x76, 0x28, 0x80, 0x04, 0xd8, 0xb6, 0x28, 0x40, 0xd8, 0xf6, 0x28, + 0x40, 0xd5, 0x1e, 0x28, 0x80, 0x1f, 0xd6, 0x2e, 0x28, 0x80, 0x0d, 0xd7, + 0x4e, 0x28, 0x80, 0x04, 0xd8, 0x8e, 0x28, 0x40, 0xd8, 0xce, 0x28, 0x40, + 0xd7, 0x6e, 0x28, 0x80, 0x04, 0xd8, 0xae, 0x28, 0x40, 0xd8, 0xee, 0x28, + 0x40, 0xd6, 0x3e, 0x28, 0x80, 0x0d, 0xd7, 0x5e, 0x28, 0x80, 0x04, 0xd8, + 0x9e, 0x28, 0x40, 0xd8, 0xde, 0x28, 0x40, 0xd7, 0x7e, 0x28, 0x80, 0x04, + 0xd8, 0xbe, 0x28, 0x40, 0xd8, 0xfe, 0x28, 0x40, 0xd2, 0x03, 0x28, 0x80, + 0x9c, 0x02, 0xd3, 0x05, 0x28, 0x80, 0x8b, 0x01, 0xd4, 0x09, 0x28, 0x80, + 0x43, 0xd5, 0x11, 0x28, 0x80, 0x1f, 0xd6, 0x21, 0x28, 0x80, 0x0d, 0xd7, + 0x41, 0x28, 0x80, 0x04, 0xd8, 0x81, 0x28, 0x40, 0xd8, 0xc1, 0x28, 0x40, + 0xd7, 0x61, 0x28, 0x80, 0x04, 0xd8, 0xa1, 0x28, 0x40, 0xd8, 0xe1, 0x28, + 0x40, 0xd6, 0x31, 0x28, 0x80, 0x0d, 0xd7, 0x51, 0x28, 0x80, 0x04, 0xd8, + 0x91, 0x28, 0x40, 0xd8, 0xd1, 0x28, 0x40, 0xd7, 0x71, 0x28, 0x80, 0x04, + 0xd8, 0xb1, 0x28, 0x40, 0xd8, 0xf1, 0x28, 0x40, 0xd5, 0x19, 0x28, 0x80, + 0x1f, 0xd6, 0x29, 0x28, 0x80, 0x0d, 0xd7, 0x49, 0x28, 0x80, 0x04, 0xd8, + 0x89, 0x28, 0x40, 0xd8, 0xc9, 0x28, 0x40, 0xd7, 0x69, 0x28, 0x80, 0x04, + 0xd8, 0xa9, 0x28, 0x40, 0xd8, 0xe9, 0x28, 0x40, 0xd6, 0x39, 0x28, 0x80, + 0x0d, 0xd7, 0x59, 0x28, 0x80, 0x04, 0xd8, 0x99, 0x28, 0x40, 0xd8, 0xd9, + 0x28, 0x40, 0xd7, 0x79, 0x28, 0x80, 0x04, 0xd8, 0xb9, 0x28, 0x40, 0xd8, + 0xf9, 0x28, 0x40, 0xd4, 0x0d, 0x28, 0x80, 0x43, 0xd5, 0x15, 0x28, 0x80, + 0x1f, 0xd6, 0x25, 0x28, 0x80, 0x0d, 0xd7, 0x45, 0x28, 0x80, 0x04, 0xd8, + 0x85, 0x28, 0x40, 0xd8, 0xc5, 0x28, 0x40, 0xd7, 0x65, 0x28, 0x80, 0x04, + 0xd8, 0xa5, 0x28, 0x40, 0xd8, 0xe5, 0x28, 0x40, 0xd6, 0x35, 0x28, 0x80, + 0x0d, 0xd7, 0x55, 0x28, 0x80, 0x04, 0xd8, 0x95, 0x28, 0x40, 0xd8, 0xd5, + 0x28, 0x40, 0xd7, 0x75, 0x28, 0x80, 0x04, 0xd8, 0xb5, 0x28, 0x40, 0xd8, + 0xf5, 0x28, 0x40, 0xd5, 0x1d, 0x28, 0x80, 0x1f, 0xd6, 0x2d, 0x28, 0x80, + 0x0d, 0xd7, 0x4d, 0x28, 0x80, 0x04, 0xd8, 0x8d, 0x28, 0x40, 0xd8, 0xcd, + 0x28, 0x40, 0xd7, 0x6d, 0x28, 0x80, 0x04, 0xd8, 0xad, 0x28, 0x40, 0xd8, + 0xed, 0x28, 0x40, 0xd6, 0x3d, 0x28, 0x80, 0x0d, 0xd7, 0x5d, 0x28, 0x80, + 0x04, 0xd8, 0x9d, 0x28, 0x40, 0xd8, 0xdd, 0x28, 0x40, 0xd7, 0x7d, 0x28, + 0x80, 0x04, 0xd8, 0xbd, 0x28, 0x40, 0xd8, 0xfd, 0x28, 0x40, 0xd3, 0x07, + 0x28, 0x80, 0x8b, 0x01, 0xd4, 0x0b, 0x28, 0x80, 0x43, 0xd5, 0x13, 0x28, + 0x80, 0x1f, 0xd6, 0x23, 0x28, 0x80, 0x0d, 0xd7, 0x43, 0x28, 0x80, 0x04, + 0xd8, 0x83, 0x28, 0x40, 0xd8, 0xc3, 0x28, 0x40, 0xd7, 0x63, 0x28, 0x80, + 0x04, 0xd8, 0xa3, 0x28, 0x40, 0xd8, 0xe3, 0x28, 0x40, 0xd6, 0x33, 0x28, + 0x80, 0x0d, 0xd7, 0x53, 0x28, 0x80, 0x04, 0xd8, 0x93, 0x28, 0x40, 0xd8, + 0xd3, 0x28, 0x40, 0xd7, 0x73, 0x28, 0x80, 0x04, 0xd8, 0xb3, 0x28, 0x40, + 0xd8, 0xf3, 0x28, 0x40, 0xd5, 0x1b, 0x28, 0x80, 0x1f, 0xd6, 0x2b, 0x28, + 0x80, 0x0d, 0xd7, 0x4b, 0x28, 0x80, 0x04, 0xd8, 0x8b, 0x28, 0x40, 0xd8, + 0xcb, 0x28, 0x40, 0xd7, 0x6b, 0x28, 0x80, 0x04, 0xd8, 0xab, 0x28, 0x40, + 0xd8, 0xeb, 0x28, 0x40, 0xd6, 0x3b, 0x28, 0x80, 0x0d, 0xd7, 0x5b, 0x28, + 0x80, 0x04, 0xd8, 0x9b, 0x28, 0x40, 0xd8, 0xdb, 0x28, 0x40, 0xd7, 0x7b, + 0x28, 0x80, 0x04, 0xd8, 0xbb, 0x28, 0x40, 0xd8, 0xfb, 0x28, 0x40, 0xd4, + 0x0f, 0x28, 0x80, 0x43, 0xd5, 0x17, 0x28, 0x80, 0x1f, 0xd6, 0x27, 0x28, + 0x80, 0x0d, 0xd7, 0x47, 0x28, 0x80, 0x04, 0xd8, 0x87, 0x28, 0x40, 0xd8, + 0xc7, 0x28, 0x40, 0xd7, 0x67, 0x28, 0x80, 0x04, 0xd8, 0xa7, 0x28, 0x40, + 0xd8, 0xe7, 0x28, 0x40, 0xd6, 0x37, 0x28, 0x80, 0x0d, 0xd7, 0x57, 0x28, + 0x80, 0x04, 0xd8, 0x97, 0x28, 0x40, 0xd8, 0xd7, 0x28, 0x40, 0xd7, 0x77, + 0x28, 0x80, 0x04, 0xd8, 0xb7, 0x28, 0x40, 0xd8, 0xf7, 0x28, 0x40, 0xd5, + 0x1f, 0x28, 0x80, 0x1f, 0xd6, 0x2f, 0x28, 0x80, 0x0d, 0xd7, 0x4f, 0x28, + 0x80, 0x04, 0xd8, 0x8f, 0x28, 0x40, 0xd8, 0xcf, 0x28, 0x40, 0xd7, 0x6f, + 0x28, 0x80, 0x04, 0xd8, 0xaf, 0x28, 0x40, 0xd8, 0xef, 0x28, 0x40, 0xd6, + 0x3f, 0x28, 0x80, 0x0d, 0xd7, 0x5f, 0x28, 0x80, 0x04, 0xd8, 0x9f, 0x28, + 0x40, 0xd8, 0xdf, 0x28, 0x40, 0xd7, 0x7f, 0x28, 0x80, 0x04, 0xd8, 0xbf, + 0x28, 0x40, 0xd8, 0xff, 0x28, 0x40, 0xa4, 0x95, 0x05, 0x07, 0xf1, 0x04, + 0xca, 0x02, 0x07, 0xbf, 0x35, 0xb1, 0x01, 0x0c, 0x8c, 0x14, 0x89, 0x01, + 0x05, 0xdb, 0x02, 0x61, 0xb6, 0x01, 0xff, 0x45, 0x48, 0x21, 0x46, 0x10, + 0x01, 0x0a, 0x71, 0x70, 0x01, 0xff, 0xa1, 0x45, 0x4e, 0x55, 0x6f, 0x39, + 0x10, 0x01, 0xe5, 0x42, 0x10, 0x01, 0xe9, 0x3a, 0x10, 0x81, 0x32, 0xef, + 0x44, 0x10, 0x81, 0x20, 0xf5, 0x3c, 0x10, 0x81, 0x17, 0x08, 0x92, 0xb7, + 0x01, 0xff, 0xec, 0x40, 0x10, 0x81, 0x09, 0xf2, 0x3e, 0x10, 0xc1, 0x00, + 0xf2, 0x3f, 0x10, 0x41, 0xec, 0x41, 0x10, 0x41, 0xf5, 0x3d, 0x10, 0x41, + 0x0f, 0x8b, 0x68, 0x01, 0xff, 0xe5, 0x73, 0x10, 0x01, 0xef, 0x74, 0x10, + 0x41, 0xe9, 0x3b, 0x10, 0x41, 0xe1, 0x38, 0x10, 0x01, 0xe9, 0x43, 0x10, + 0x01, 0xf5, 0x45, 0x10, 0x41, 0x48, 0x5b, 0x14, 0x01, 0x10, 0x01, 0x4b, + 0x3b, 0x21, 0x00, 0x10, 0x01, 0x4b, 0xd2, 0x95, 0x03, 0x10, 0x01, 0x50, + 0x3e, 0x5f, 0x70, 0x10, 0x01, 0x4b, 0x18, 0x9c, 0x04, 0x10, 0x01, 0x47, + 0x7c, 0x46, 0x02, 0x10, 0x41, 0x4c, 0x0b, 0x86, 0x4c, 0x10, 0x01, 0x02, + 0x3b, 0x01, 0x0f, 0xac, 0x01, 0xff, 0x43, 0xf1, 0x07, 0x4b, 0x10, 0x01, + 0x44, 0x00, 0x73, 0x4d, 0x10, 0x41, 0xf4, 0x49, 0x10, 0x01, 0x48, 0xeb, + 0x3c, 0x4a, 0x10, 0x41, 0x45, 0xd1, 0x09, 0x59, 0x10, 0x81, 0x88, 0x01, + 0xa6, 0x69, 0x46, 0x88, 0x5b, 0x7f, 0x10, 0x01, 0x44, 0xb8, 0x27, 0x5a, + 0x10, 0x81, 0x56, 0x43, 0xcd, 0x09, 0x52, 0x10, 0x81, 0x40, 0xb3, 0x24, + 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x5b, 0x10, 0x01, 0xa8, 0x0d, 0xb7, + 0x01, 0xff, 0x44, 0x98, 0x1b, 0x5c, 0x10, 0x01, 0xef, 0x53, 0x10, 0x41, + 0x44, 0xf3, 0x0f, 0x5d, 0x10, 0x01, 0x43, 0x26, 0x01, 0x54, 0x10, 0x41, + 0x44, 0x96, 0x1b, 0x58, 0x10, 0x81, 0x0d, 0x42, 0x30, 0x27, 0x57, 0x10, + 0xc1, 0x00, 0x42, 0xf5, 0x0f, 0x60, 0x10, 0x41, 0x42, 0xf5, 0x0f, 0x61, + 0x10, 0x41, 0x80, 0x01, 0xff, 0x47, 0xe9, 0x0f, 0x64, 0x10, 0x01, 0x48, + 0x69, 0x58, 0x65, 0x10, 0x41, 0x42, 0xf5, 0x0f, 0x63, 0x10, 0x41, 0xa9, + 0x0f, 0xaf, 0x01, 0xff, 0x43, 0xf4, 0x0f, 0x5e, 0x10, 0x01, 0x42, 0x42, + 0x00, 0x55, 0x10, 0x41, 0x43, 0xe4, 0x47, 0x5f, 0x10, 0x01, 0x42, 0x32, + 0x00, 0x56, 0x10, 0x41, 0xf9, 0x62, 0x10, 0x41, 0xe1, 0x05, 0x10, 0x81, + 0xb4, 0x02, 0xa2, 0xa7, 0x02, 0xa3, 0x9a, 0x02, 0xa4, 0x81, 0x02, 0xe5, + 0x0f, 0x10, 0x01, 0xa7, 0xf0, 0x01, 0x42, 0x22, 0x00, 0x33, 0x10, 0x01, + 0xe9, 0x07, 0x10, 0x81, 0xe0, 0x01, 0xaa, 0xd3, 0x01, 0xab, 0xc6, 0x01, + 0xac, 0xb9, 0x01, 0x42, 0x6c, 0x00, 0x2b, 0x10, 0x01, 0xae, 0x9a, 0x01, + 0xef, 0x11, 0x10, 0x81, 0x69, 0xb0, 0x5d, 0x42, 0x71, 0x00, 0x2d, 0x10, + 0x01, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, 0x09, 0x10, 0x81, 0x23, 0xb6, 0x06, + 0x42, 0x20, 0x20, 0x2c, 0x10, 0x41, 0xe1, 0x2f, 0x10, 0x01, 0x07, 0x93, + 0xb7, 0x01, 0xff, 0xec, 0x0d, 0x10, 0x81, 0x09, 0xf2, 0x0b, 0x10, 0xc1, + 0x00, 0xf2, 0x0c, 0x10, 0x41, 0xec, 0x0e, 0x10, 0x41, 0xf5, 0x0a, 0x10, + 0x41, 0xe1, 0x22, 0x10, 0x01, 0x42, 0x22, 0x00, 0x23, 0x10, 0x01, 0xb4, + 0x01, 0xff, 0xe1, 0x1d, 0x10, 0x01, 0x42, 0x22, 0x00, 0x1e, 0x10, 0x41, + 0xe1, 0x32, 0x10, 0x01, 0x42, 0x22, 0x00, 0x30, 0x10, 0x01, 0x42, 0x45, + 0x05, 0x31, 0x10, 0x41, 0xe1, 0x27, 0x10, 0x01, 0x42, 0x22, 0x00, 0x28, + 0x10, 0x41, 0x09, 0x3f, 0x5f, 0x01, 0xff, 0x02, 0x3f, 0x06, 0x19, 0x44, + 0x8e, 0xe6, 0x37, 0x10, 0x01, 0x43, 0x0d, 0x60, 0x36, 0x10, 0x01, 0x06, + 0x1c, 0x33, 0x01, 0xff, 0xe5, 0x71, 0x10, 0x01, 0xef, 0x72, 0x10, 0x41, + 0xe1, 0x75, 0x10, 0x01, 0x42, 0x74, 0x00, 0x35, 0x10, 0x41, 0xe1, 0x26, + 0x10, 0x01, 0x42, 0x24, 0x02, 0x17, 0x10, 0x01, 0x42, 0x2f, 0x04, 0x21, + 0x10, 0x01, 0x42, 0x20, 0x20, 0x1c, 0x10, 0x41, 0xe1, 0x2e, 0x10, 0x01, + 0x42, 0x74, 0x00, 0x34, 0x10, 0x41, 0xe1, 0x13, 0x10, 0x01, 0x42, 0x22, + 0x00, 0x14, 0x10, 0x41, 0xe1, 0x1a, 0x10, 0x01, 0x42, 0x22, 0x00, 0x1b, + 0x10, 0x41, 0xe9, 0x08, 0x10, 0x41, 0xe1, 0x15, 0x10, 0x01, 0x42, 0x22, + 0x00, 0x16, 0x10, 0x41, 0xe1, 0x24, 0x10, 0x01, 0xa4, 0x06, 0x42, 0x22, + 0x00, 0x25, 0x10, 0x41, 0xe1, 0x1f, 0x10, 0x01, 0x42, 0x22, 0x00, 0x20, + 0x10, 0x41, 0xe1, 0x18, 0x10, 0x01, 0x42, 0x22, 0x00, 0x19, 0x10, 0x41, + 0xe1, 0x29, 0x10, 0x01, 0x42, 0x22, 0x00, 0x2a, 0x10, 0x41, 0xe1, 0x06, + 0x10, 0x01, 0xe9, 0x10, 0x10, 0x01, 0xf5, 0x12, 0x10, 0x41, 0x44, 0x0b, + 0x1e, 0x47, 0x10, 0x01, 0x05, 0xf5, 0x05, 0x06, 0x4b, 0xdf, 0x98, 0x48, + 0x10, 0x41, 0x45, 0xd1, 0x09, 0x6e, 0x10, 0x01, 0xa6, 0x2e, 0x44, 0xb8, + 0x27, 0x6f, 0x10, 0x01, 0x43, 0xcd, 0x09, 0x67, 0x10, 0x01, 0xb3, 0x14, + 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x66, 0x10, 0x41, 0x44, 0x25, 0x01, 0x69, + 0x10, 0x01, 0x42, 0x15, 0x02, 0x68, 0x10, 0x41, 0x44, 0x96, 0x1b, 0x6d, + 0x10, 0x01, 0x42, 0x30, 0x27, 0x6c, 0x10, 0x41, 0x43, 0xd7, 0x04, 0x6b, + 0x10, 0x01, 0x43, 0xfb, 0x05, 0x6a, 0x10, 0x41, 0x42, 0x17, 0x00, 0x17, + 0xf4, 0x01, 0x03, 0x67, 0x21, 0xee, 0x0d, 0x42, 0xbb, 0x04, 0xa3, 0xf4, + 0x01, 0x42, 0xd2, 0x04, 0xb4, 0xf9, 0x01, 0xaf, 0xc3, 0x0d, 0x07, 0x90, + 0xca, 0xe0, 0x0a, 0x02, 0xf3, 0x04, 0xdf, 0x09, 0x45, 0x18, 0xe1, 0x90, + 0xf4, 0x81, 0xd1, 0x09, 0xb7, 0x9a, 0x09, 0xb8, 0x0b, 0xf9, 0x66, 0xf4, + 0xc1, 0x00, 0x48, 0x09, 0x46, 0xc9, 0xf6, 0x41, 0x0a, 0x68, 0x9d, 0x06, + 0x49, 0x47, 0xb1, 0x4a, 0xf9, 0x41, 0x02, 0x3b, 0x01, 0x97, 0x07, 0x06, + 0x8c, 0x13, 0xe3, 0x05, 0xac, 0xae, 0x02, 0x06, 0xc8, 0x00, 0xf1, 0x01, + 0x03, 0x9c, 0x13, 0x5e, 0x09, 0x32, 0x00, 0x01, 0xff, 0x0b, 0x28, 0x93, + 0x43, 0x0a, 0x8c, 0x13, 0x2d, 0x0a, 0x6e, 0x5e, 0x17, 0x0b, 0x81, 0x9a, + 0x01, 0xff, 0x51, 0x13, 0x55, 0x6a, 0x25, 0x00, 0x4b, 0x77, 0x96, 0x61, + 0x25, 0x00, 0x4c, 0xd7, 0x8c, 0x5e, 0x25, 0x40, 0x50, 0x23, 0x36, 0x3f, + 0x25, 0x00, 0x4a, 0x20, 0xa4, 0x25, 0x25, 0x00, 0x4b, 0xc6, 0x99, 0x1d, + 0x25, 0x40, 0x50, 0x38, 0x36, 0x42, 0x25, 0x00, 0x4a, 0x2a, 0xa4, 0x28, + 0x25, 0x00, 0x4b, 0x78, 0x5e, 0x20, 0x25, 0x40, 0x51, 0x24, 0x55, 0x6b, + 0x25, 0x00, 0x4b, 0x82, 0x96, 0x62, 0x25, 0x00, 0x4c, 0xe3, 0x8c, 0x5f, + 0x25, 0x40, 0x0b, 0x28, 0x93, 0x79, 0x0a, 0x8c, 0x13, 0x48, 0x0a, 0x6e, + 0x5e, 0x17, 0x0b, 0x81, 0x9a, 0x01, 0xff, 0x51, 0x13, 0x55, 0x67, 0x25, + 0x00, 0x4b, 0x77, 0x96, 0x5b, 0x25, 0x00, 0x4c, 0xd7, 0x8c, 0x58, 0x25, + 0x40, 0x55, 0x1e, 0x36, 0x48, 0x25, 0x00, 0x50, 0x23, 0x36, 0x37, 0x25, + 0x00, 0x05, 0xc3, 0x00, 0x11, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x4a, 0x87, + 0x13, 0x22, 0x25, 0x00, 0x45, 0x8c, 0x13, 0x15, 0x25, 0x40, 0x4a, 0x87, + 0x13, 0x2a, 0x25, 0x00, 0x45, 0x8c, 0x13, 0x19, 0x25, 0x40, 0x55, 0x33, + 0x36, 0x40, 0x25, 0x00, 0x50, 0x38, 0x36, 0x38, 0x25, 0x00, 0x05, 0xc3, + 0x00, 0x11, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x4a, 0xf6, 0x14, 0x1e, 0x25, + 0x00, 0x45, 0xc3, 0x01, 0x16, 0x25, 0x40, 0x4a, 0xf6, 0x14, 0x26, 0x25, + 0x00, 0x45, 0xc3, 0x01, 0x1a, 0x25, 0x40, 0x51, 0x24, 0x55, 0x68, 0x25, + 0x00, 0x4b, 0x82, 0x96, 0x5c, 0x25, 0x00, 0x4c, 0xe3, 0x8c, 0x59, 0x25, + 0x40, 0x5c, 0x8d, 0x15, 0x46, 0x25, 0x00, 0x0f, 0x92, 0x15, 0x1c, 0x0f, + 0x03, 0x69, 0x06, 0x5c, 0x69, 0x17, 0x44, 0x25, 0x40, 0x4a, 0x87, 0x13, + 0x31, 0x25, 0x00, 0x48, 0xe3, 0x14, 0x39, 0x25, 0x00, 0x4e, 0x89, 0x77, + 0x49, 0x25, 0x40, 0x4a, 0xf6, 0x14, 0x2e, 0x25, 0x00, 0x48, 0x9c, 0x13, + 0x36, 0x25, 0x00, 0x4e, 0x97, 0x77, 0x3e, 0x25, 0x40, 0x04, 0xc4, 0x00, + 0xf5, 0x02, 0x05, 0xc9, 0x00, 0x01, 0xff, 0x04, 0xc9, 0x15, 0xca, 0x02, + 0xa4, 0x84, 0x01, 0x4a, 0x0b, 0x00, 0x00, 0x25, 0x80, 0x77, 0x44, 0xc3, + 0x00, 0x74, 0x25, 0x80, 0x6a, 0x0f, 0x6a, 0x6b, 0x5a, 0x45, 0xc8, 0x00, + 0x76, 0x25, 0x00, 0x0c, 0xba, 0x58, 0x44, 0x42, 0x50, 0x02, 0x75, 0x25, + 0x80, 0x1e, 0x48, 0x32, 0x00, 0x02, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, + 0x01, 0xff, 0x4a, 0x0b, 0x00, 0x3c, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x24, + 0x25, 0x00, 0x45, 0xc8, 0x00, 0x1c, 0x25, 0x40, 0x05, 0x19, 0x00, 0x01, + 0xff, 0xa8, 0x0c, 0x44, 0xc3, 0x00, 0x18, 0x25, 0x00, 0x45, 0xc8, 0x00, + 0x14, 0x25, 0x40, 0x49, 0xe3, 0xae, 0x7d, 0x25, 0x00, 0x49, 0x0c, 0x00, + 0x34, 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x04, 0x25, 0x00, 0x48, 0x32, 0x00, + 0x06, 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x08, 0x25, 0x00, 0x48, 0x32, 0x00, + 0x0a, 0x25, 0x40, 0x50, 0x0e, 0x5a, 0x7c, 0x25, 0x40, 0x55, 0x7a, 0x34, + 0xaf, 0xfb, 0x41, 0x08, 0x2f, 0x23, 0x31, 0xaf, 0x01, 0xff, 0x0a, 0xc0, + 0xa9, 0x1e, 0x42, 0xa7, 0x01, 0x77, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, + 0x01, 0xff, 0x4a, 0x0b, 0x00, 0x2c, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x10, + 0x25, 0x00, 0x45, 0xc8, 0x00, 0x0c, 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x4c, + 0x25, 0x00, 0x48, 0x32, 0x00, 0x4e, 0x25, 0x40, 0x45, 0x0d, 0x0f, 0x73, + 0x25, 0x00, 0x47, 0xb2, 0x3f, 0xae, 0xfb, 0x01, 0x07, 0x7d, 0x02, 0x4f, + 0x06, 0x6d, 0x02, 0x01, 0xff, 0x11, 0x73, 0x02, 0x0c, 0x53, 0x79, 0x45, + 0x72, 0x25, 0x00, 0x53, 0x41, 0x47, 0x71, 0x25, 0x40, 0x44, 0xc3, 0x00, + 0xa0, 0xfb, 0x81, 0x1d, 0x45, 0xc8, 0x00, 0xa1, 0xfb, 0xc1, 0x00, 0x80, + 0x01, 0xff, 0x5f, 0x69, 0x0f, 0xa9, 0xfb, 0x01, 0x4f, 0x89, 0x02, 0xa5, + 0xfb, 0xc1, 0x00, 0x4f, 0x79, 0x02, 0xaa, 0xfb, 0x41, 0x80, 0x01, 0xff, + 0x60, 0xac, 0x0d, 0xa8, 0xfb, 0x01, 0x4f, 0x89, 0x02, 0xa4, 0xfb, 0xc1, + 0x00, 0x50, 0x91, 0x17, 0xab, 0xfb, 0x41, 0x08, 0x84, 0x02, 0x11, 0x09, + 0xb7, 0x0d, 0x01, 0xff, 0x4c, 0x8c, 0x02, 0xa3, 0xfb, 0x01, 0x6b, 0x6d, + 0x02, 0xad, 0xfb, 0x41, 0x4c, 0x8c, 0x02, 0xa2, 0xfb, 0x81, 0x0d, 0x5c, + 0x85, 0x17, 0xa7, 0xfb, 0xc1, 0x00, 0x50, 0x88, 0x02, 0xac, 0xfb, 0x41, + 0x50, 0x91, 0x17, 0xa6, 0xfb, 0x41, 0x09, 0x9e, 0x43, 0x11, 0x07, 0xdc, + 0x58, 0x01, 0xff, 0x44, 0xc3, 0x00, 0x6f, 0x25, 0x00, 0x45, 0xc8, 0x00, + 0x70, 0x25, 0x40, 0x44, 0xc3, 0x00, 0x6e, 0x25, 0x00, 0x45, 0xc8, 0x00, + 0x6d, 0x25, 0x40, 0x5d, 0x87, 0x13, 0x45, 0x25, 0x00, 0x10, 0x8c, 0x13, + 0x1c, 0x10, 0x6e, 0x5e, 0x06, 0x5d, 0xe3, 0x14, 0x43, 0x25, 0x40, 0x4a, + 0x87, 0x13, 0x32, 0x25, 0x00, 0x48, 0xe3, 0x14, 0x3a, 0x25, 0x00, 0x4e, + 0x89, 0x77, 0x4a, 0x25, 0x40, 0x4a, 0xf6, 0x14, 0x2d, 0x25, 0x00, 0x48, + 0x9c, 0x13, 0x35, 0x25, 0x00, 0x4e, 0x97, 0x77, 0x3d, 0x25, 0x40, 0x02, + 0x3b, 0x01, 0x7d, 0x4a, 0x0b, 0x00, 0x01, 0x25, 0x00, 0x44, 0xc3, 0x00, + 0x78, 0x25, 0x80, 0x6a, 0x0f, 0x6a, 0x6b, 0x5a, 0x45, 0xc8, 0x00, 0x7a, + 0x25, 0x00, 0x0c, 0xba, 0x58, 0x44, 0x42, 0x50, 0x02, 0x79, 0x25, 0x80, + 0x1e, 0x48, 0x32, 0x00, 0x03, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, + 0xff, 0x4a, 0x0b, 0x00, 0x4b, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x2b, 0x25, + 0x00, 0x45, 0xc8, 0x00, 0x23, 0x25, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, + 0x4a, 0x0b, 0x00, 0x3b, 0x25, 0x00, 0xac, 0x06, 0x45, 0xc8, 0x00, 0x17, + 0x25, 0x40, 0x43, 0xc4, 0x00, 0x1b, 0x25, 0x00, 0x49, 0xf1, 0x14, 0x7f, + 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x05, 0x25, 0x00, 0x48, 0x32, 0x00, 0x07, + 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x09, 0x25, 0x00, 0x48, 0x32, 0x00, 0x0b, + 0x25, 0x40, 0x50, 0x1e, 0x5a, 0x7e, 0x25, 0x40, 0x0a, 0xc0, 0xa9, 0x1e, + 0x42, 0xa7, 0x01, 0x7b, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, + 0x4a, 0x0b, 0x00, 0x33, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x13, 0x25, 0x00, + 0x45, 0xc8, 0x00, 0x0f, 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x4d, 0x25, 0x00, + 0x48, 0x32, 0x00, 0x4f, 0x25, 0x40, 0x05, 0x3d, 0x01, 0x92, 0x01, 0x03, + 0xdc, 0x12, 0x01, 0xff, 0x0b, 0x28, 0x93, 0x77, 0x0a, 0x8c, 0x13, 0x47, + 0x0a, 0x6e, 0x5e, 0x17, 0x0b, 0x81, 0x9a, 0x01, 0xff, 0x51, 0x13, 0x55, + 0x64, 0x25, 0x00, 0x4b, 0x77, 0x96, 0x55, 0x25, 0x00, 0x4c, 0xd7, 0x8c, + 0x52, 0x25, 0x40, 0x50, 0x23, 0x36, 0x2f, 0x25, 0x00, 0x05, 0xc3, 0x00, + 0x16, 0x06, 0xc8, 0x00, 0x06, 0x53, 0xaa, 0x48, 0x47, 0x25, 0x40, 0x45, + 0x8c, 0x13, 0x0d, 0x25, 0x00, 0x48, 0xe3, 0x14, 0x21, 0x25, 0x40, 0x45, + 0x8c, 0x13, 0x11, 0x25, 0x00, 0x48, 0xe3, 0x14, 0x29, 0x25, 0x40, 0x50, + 0x38, 0x36, 0x30, 0x25, 0x00, 0x05, 0xc3, 0x00, 0x16, 0x06, 0xc8, 0x00, + 0x06, 0x53, 0xbd, 0x48, 0x41, 0x25, 0x40, 0x45, 0xc3, 0x01, 0x0e, 0x25, + 0x00, 0x48, 0x9c, 0x13, 0x1f, 0x25, 0x40, 0x45, 0xc3, 0x01, 0x12, 0x25, + 0x00, 0x48, 0x9c, 0x13, 0x27, 0x25, 0x40, 0x51, 0x24, 0x55, 0x65, 0x25, + 0x00, 0x4b, 0x82, 0x96, 0x56, 0x25, 0x00, 0x4c, 0xe3, 0x8c, 0x53, 0x25, + 0x40, 0x09, 0x9e, 0x43, 0x3a, 0x4a, 0x0b, 0x00, 0x50, 0x25, 0x00, 0x07, + 0xdc, 0x58, 0x1e, 0x48, 0x32, 0x00, 0x51, 0x25, 0xc0, 0x00, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x4a, 0x0b, 0x00, 0x6c, 0x25, 0x00, 0x44, 0xc3, 0x00, + 0x63, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x60, 0x25, 0x40, 0x4a, 0x0b, 0x00, + 0x69, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x5d, 0x25, 0x00, 0x45, 0xc8, 0x00, + 0x5a, 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x66, 0x25, 0x00, 0x44, 0xc3, 0x00, + 0x57, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x54, 0x25, 0x40, 0x4a, 0x40, 0x9d, + 0xf9, 0xf3, 0x01, 0xac, 0x18, 0x43, 0x23, 0x23, 0xc8, 0x22, 0xc0, 0x00, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x4f, 0xb8, 0x68, 0xd1, 0x29, 0x00, 0x50, + 0x6e, 0x60, 0xd2, 0x29, 0x40, 0x80, 0x06, 0x43, 0xa1, 0x01, 0xb3, 0xf3, + 0x41, 0x4a, 0x00, 0xa6, 0x4f, 0xf5, 0x01, 0x4a, 0xb0, 0xaa, 0x63, 0xf9, + 0x41, 0x4b, 0x8c, 0x8f, 0x95, 0xf3, 0x41, 0x54, 0x41, 0x3f, 0x7e, 0xf3, + 0x01, 0x03, 0xb1, 0x04, 0x01, 0xff, 0x57, 0xa7, 0x19, 0x3b, 0x29, 0x00, + 0x4d, 0x88, 0x08, 0xdf, 0x23, 0x00, 0x05, 0x22, 0x00, 0x49, 0x05, 0xc3, + 0x00, 0x31, 0x4b, 0x70, 0x1f, 0xdd, 0x23, 0x00, 0x06, 0xc8, 0x00, 0x13, + 0x4e, 0xe1, 0x23, 0xb5, 0x23, 0x80, 0x06, 0x56, 0x36, 0x08, 0xe1, 0x23, + 0x40, 0x58, 0xd7, 0x23, 0xb6, 0x23, 0x40, 0xa3, 0x06, 0x4c, 0x03, 0x88, + 0x25, 0x2e, 0x40, 0x45, 0x00, 0x0a, 0x1f, 0x23, 0x00, 0x43, 0x7f, 0x0b, + 0x0c, 0x23, 0x40, 0xa3, 0x06, 0x4c, 0x03, 0x88, 0x24, 0x2e, 0x40, 0x45, + 0x00, 0x0a, 0x1e, 0x23, 0x00, 0x43, 0x7f, 0x0b, 0x0d, 0x23, 0x40, 0x4c, + 0x4b, 0x85, 0xcb, 0x2b, 0x00, 0x48, 0xad, 0x23, 0x21, 0x23, 0x00, 0x50, + 0xe3, 0x21, 0x5b, 0x2e, 0x00, 0x51, 0x6a, 0x1f, 0x5c, 0x2e, 0x40, 0x0d, + 0xd9, 0x7b, 0xc5, 0x02, 0x07, 0xf1, 0x04, 0x01, 0xff, 0xe1, 0x1a, 0x31, + 0x80, 0x8f, 0x02, 0xe2, 0x05, 0x31, 0x80, 0x85, 0x02, 0xe3, 0x18, 0x31, + 0x80, 0xfb, 0x01, 0xe4, 0x09, 0x31, 0x00, 0xe5, 0x1c, 0x31, 0x80, 0xd4, + 0x01, 0xe6, 0x08, 0x31, 0x00, 0xe7, 0x0d, 0x31, 0x80, 0xba, 0x01, 0xe8, + 0x0f, 0x31, 0x00, 0xe9, 0x27, 0x31, 0x80, 0x95, 0x01, 0xea, 0x10, 0x31, + 0x80, 0x8b, 0x01, 0xeb, 0x0e, 0x31, 0x80, 0x81, 0x01, 0xec, 0x0c, 0x31, + 0x80, 0x78, 0xed, 0x07, 0x31, 0x00, 0xee, 0x0b, 0x31, 0x80, 0x62, 0xef, + 0x1b, 0x31, 0x80, 0x3d, 0xf0, 0x06, 0x31, 0x00, 0xf1, 0x11, 0x31, 0x00, + 0xf2, 0x16, 0x31, 0x00, 0xf3, 0x19, 0x31, 0x80, 0x28, 0xf4, 0x0a, 0x31, + 0x00, 0xf5, 0x28, 0x31, 0x80, 0x19, 0xf6, 0x2a, 0x31, 0x00, 0xf8, 0x12, + 0x31, 0x00, 0xfa, 0x17, 0x31, 0xc0, 0x00, 0xe8, 0x13, 0x31, 0x00, 0xe9, + 0xa1, 0x31, 0x00, 0xf9, 0xba, 0x31, 0x40, 0x42, 0xe6, 0x1c, 0xab, 0x31, + 0x40, 0xe8, 0x15, 0x31, 0x40, 0x4f, 0x4a, 0x37, 0x2e, 0x31, 0x00, 0xe5, + 0xbe, 0x31, 0x00, 0xed, 0xb1, 0x31, 0x00, 0xae, 0x08, 0xef, 0xa6, 0x31, + 0x00, 0xf5, 0x21, 0x31, 0x40, 0xe7, 0xb2, 0x31, 0x00, 0xee, 0xa7, 0x31, + 0x40, 0xe7, 0x2b, 0x31, 0x80, 0x04, 0xee, 0x2f, 0x31, 0x40, 0xe7, 0xad, + 0x31, 0x40, 0xe8, 0xb9, 0x31, 0x40, 0xf7, 0xbd, 0x31, 0x40, 0xe9, 0xa2, + 0x31, 0x40, 0xe8, 0x2d, 0x31, 0x00, 0xed, 0xac, 0x31, 0x00, 0x42, 0xe6, + 0x1c, 0xaa, 0x31, 0x80, 0x08, 0xf2, 0xa8, 0x31, 0x00, 0xf5, 0x29, 0x31, + 0x40, 0xee, 0xb3, 0x31, 0x40, 0xe8, 0xb8, 0x31, 0x00, 0xee, 0x2c, 0x31, + 0x00, 0xf5, 0xa3, 0x31, 0x00, 0xf7, 0xbc, 0x31, 0x40, 0xe5, 0xa4, 0x31, + 0x00, 0xe8, 0x1d, 0x31, 0x00, 0xe9, 0x1f, 0x31, 0x00, 0xee, 0x23, 0x31, + 0x80, 0x04, 0xf2, 0x26, 0x31, 0x40, 0xe7, 0x25, 0x31, 0x00, 0xee, 0xa5, + 0x31, 0x40, 0xe8, 0x14, 0x31, 0x40, 0xf5, 0xa0, 0x31, 0x40, 0xe8, 0xbf, + 0x31, 0x00, 0xe9, 0x1e, 0x31, 0x80, 0x1c, 0xed, 0xb0, 0x31, 0x00, 0xee, + 0x22, 0x31, 0x80, 0x0b, 0xf5, 0x20, 0x31, 0xc0, 0x00, 0x42, 0xe6, 0x1c, + 0xaf, 0x31, 0x40, 0xe7, 0x24, 0x31, 0x00, 0xee, 0xa9, 0x31, 0x40, 0x42, + 0xe6, 0x1c, 0xae, 0x31, 0x40, 0xe7, 0xbb, 0x31, 0x00, 0xe8, 0xb7, 0x31, + 0x00, 0xeb, 0xb6, 0x31, 0x00, 0xf0, 0xb4, 0x31, 0x00, 0xf4, 0xb5, 0x31, + 0x40, 0xeb, 0x6e, 0xf5, 0x81, 0x06, 0x46, 0xb1, 0xc9, 0x83, 0xfa, 0x41, + 0x44, 0xb9, 0x00, 0x16, 0xf5, 0x81, 0x04, 0xf3, 0xda, 0xf4, 0x41, 0x45, + 0x5e, 0xd7, 0xd1, 0xf4, 0x41, 0x55, 0x9c, 0x36, 0xbd, 0xf7, 0x01, 0x54, + 0x89, 0x3d, 0xb1, 0xf7, 0x01, 0x4b, 0x33, 0x5b, 0xa4, 0xf7, 0x01, 0xb3, + 0x11, 0x06, 0xad, 0x02, 0x01, 0xff, 0x46, 0x00, 0x04, 0x86, 0xf7, 0x01, + 0x46, 0xdb, 0x04, 0x90, 0xf7, 0x41, 0x46, 0x16, 0x17, 0xab, 0xf7, 0x01, + 0x52, 0x6c, 0x4d, 0xb7, 0xf7, 0x41, 0xa1, 0xbb, 0x02, 0xaf, 0x19, 0x02, + 0x30, 0x12, 0x01, 0xff, 0x80, 0x06, 0x47, 0x6c, 0xc5, 0xd0, 0xfa, 0x41, + 0x44, 0x66, 0xe4, 0xd8, 0xf4, 0x01, 0x45, 0x5e, 0x1f, 0x99, 0xf4, 0x41, + 0x0b, 0x36, 0x92, 0x0c, 0x44, 0xfa, 0xb7, 0x3c, 0xf3, 0x01, 0x45, 0x68, + 0xe1, 0x21, 0xf4, 0x41, 0xd1, 0x00, 0xfb, 0x81, 0x87, 0x01, 0xd2, 0x01, + 0xfb, 0x81, 0x43, 0xd3, 0x03, 0xfb, 0x81, 0x1f, 0xd4, 0x07, 0xfb, 0x81, + 0x0d, 0xd5, 0x0f, 0xfb, 0x81, 0x04, 0xd6, 0x1e, 0xfb, 0x41, 0xd6, 0x2d, + 0xfb, 0x41, 0xd5, 0x16, 0xfb, 0x81, 0x04, 0xd6, 0x26, 0xfb, 0x41, 0xd6, + 0x35, 0xfb, 0x41, 0xd4, 0x0b, 0xfb, 0x81, 0x0d, 0xd5, 0x13, 0xfb, 0x81, + 0x04, 0xd6, 0x22, 0xfb, 0x41, 0xd6, 0x31, 0xfb, 0x41, 0xd5, 0x1a, 0xfb, + 0x81, 0x04, 0xd6, 0x29, 0xfb, 0x41, 0xd6, 0x39, 0xfb, 0x41, 0xd3, 0x05, + 0xfb, 0x81, 0x1b, 0xd4, 0x09, 0xfb, 0x81, 0x0d, 0xd5, 0x11, 0xfb, 0x81, + 0x04, 0xd6, 0x20, 0xfb, 0x41, 0xd6, 0x2f, 0xfb, 0x41, 0xd5, 0x18, 0xfb, + 0xc1, 0x00, 0xd6, 0x37, 0xfb, 0x41, 0xd4, 0x0d, 0xfb, 0x81, 0x0d, 0xd5, + 0x14, 0xfb, 0x81, 0x04, 0xd6, 0x24, 0xfb, 0x41, 0xd6, 0x33, 0xfb, 0x41, + 0xd5, 0x1c, 0xfb, 0x81, 0x04, 0xd6, 0x2b, 0xfb, 0x41, 0xd6, 0x3b, 0xfb, + 0x41, 0xd2, 0x02, 0xfb, 0x81, 0x40, 0xd3, 0x04, 0xfb, 0x81, 0x1f, 0xd4, + 0x08, 0xfb, 0x81, 0x0d, 0xd5, 0x10, 0xfb, 0x81, 0x04, 0xd6, 0x1f, 0xfb, + 0x41, 0xd6, 0x2e, 0xfb, 0x41, 0xd5, 0x17, 0xfb, 0x81, 0x04, 0xd6, 0x27, + 0xfb, 0x41, 0xd6, 0x36, 0xfb, 0x41, 0xd4, 0x0c, 0xfb, 0x81, 0x0a, 0x42, + 0x71, 0xb9, 0x32, 0xfb, 0x01, 0xd6, 0x23, 0xfb, 0x41, 0xd5, 0x1b, 0xfb, + 0x81, 0x04, 0xd6, 0x2a, 0xfb, 0x41, 0xd6, 0x3a, 0xfb, 0x41, 0xd3, 0x06, + 0xfb, 0x81, 0x1f, 0xd4, 0x0a, 0xfb, 0x81, 0x0d, 0xd5, 0x12, 0xfb, 0x81, + 0x04, 0xd6, 0x21, 0xfb, 0x41, 0xd6, 0x30, 0xfb, 0x41, 0xd5, 0x19, 0xfb, + 0x81, 0x04, 0xd6, 0x28, 0xfb, 0x41, 0xd6, 0x38, 0xfb, 0x41, 0xd4, 0x0e, + 0xfb, 0x81, 0x0d, 0xd5, 0x15, 0xfb, 0x81, 0x04, 0xd6, 0x25, 0xfb, 0x41, + 0xd6, 0x34, 0xfb, 0x41, 0xd5, 0x1d, 0xfb, 0x01, 0xd6, 0x2c, 0xfb, 0x41, + 0x02, 0x36, 0x01, 0x06, 0x49, 0x93, 0x91, 0x22, 0x24, 0x40, 0x80, 0x32, + 0x8d, 0x01, 0xff, 0x0a, 0x0f, 0x18, 0x19, 0x0f, 0xd6, 0x68, 0x01, 0xff, + 0xe3, 0x2d, 0x21, 0x00, 0xe8, 0x0c, 0x21, 0x00, 0xe9, 0x11, 0x21, 0x00, + 0xf2, 0x1c, 0x21, 0x00, 0xfa, 0x28, 0x21, 0x40, 0x50, 0x0b, 0x21, 0xb6, + 0x27, 0x00, 0x50, 0xb3, 0x02, 0xb5, 0x27, 0x00, 0x50, 0xc1, 0x3b, 0xb4, + 0x27, 0x40, 0x46, 0x17, 0xd0, 0xd3, 0x29, 0x00, 0xa3, 0xfe, 0x06, 0xa4, + 0x8e, 0x06, 0xa6, 0xee, 0x05, 0xa8, 0xc1, 0x05, 0xac, 0xbe, 0x04, 0xad, + 0xcf, 0x03, 0x43, 0x2c, 0x95, 0x12, 0x27, 0x00, 0x47, 0x7f, 0xc9, 0xc4, + 0x2b, 0x00, 0xb0, 0xa4, 0x03, 0x56, 0x6c, 0x32, 0x53, 0x27, 0x00, 0xb2, + 0xa5, 0x02, 0xb3, 0x9f, 0x01, 0xb4, 0x6f, 0xb5, 0x2c, 0x03, 0x32, 0x00, + 0x01, 0xff, 0x06, 0x35, 0x00, 0x17, 0x08, 0xcf, 0x50, 0x01, 0xff, 0x47, + 0xb2, 0x3f, 0x98, 0xf7, 0x01, 0x47, 0x75, 0x07, 0x9e, 0xf7, 0x01, 0x46, + 0xdb, 0x04, 0x1d, 0x2b, 0x40, 0x47, 0x97, 0x60, 0x2e, 0x2b, 0x00, 0x49, + 0x28, 0x42, 0xae, 0x25, 0x40, 0x59, 0x79, 0x22, 0x7b, 0x26, 0x00, 0xb0, + 0x01, 0xff, 0x58, 0xef, 0x23, 0xa2, 0xf5, 0x01, 0x0a, 0x4b, 0x0a, 0x16, + 0x04, 0x6f, 0x02, 0x06, 0x5b, 0xcf, 0x01, 0x9d, 0x2b, 0x40, 0x4d, 0x4e, + 0x31, 0xe4, 0x25, 0x00, 0x4e, 0x69, 0x26, 0xe5, 0x25, 0x40, 0x4f, 0xca, + 0x65, 0xeb, 0x23, 0x00, 0x58, 0x5f, 0x26, 0x81, 0xf7, 0x01, 0x4e, 0x9f, + 0x75, 0xb4, 0x25, 0x00, 0x48, 0x01, 0x02, 0xb2, 0x25, 0x40, 0x48, 0xad, + 0x38, 0x0e, 0x26, 0x00, 0x04, 0xaa, 0xe5, 0x12, 0x52, 0xc2, 0x4e, 0x7f, + 0xf5, 0x01, 0x44, 0x4c, 0x70, 0xdf, 0x26, 0x00, 0x57, 0x08, 0x2e, 0xd6, + 0x26, 0x40, 0x47, 0xb2, 0x3f, 0x97, 0xf7, 0x01, 0x47, 0x75, 0x07, 0x9d, + 0xf7, 0x01, 0x46, 0xdb, 0x04, 0x8c, 0xf7, 0x41, 0x4e, 0xc9, 0x6e, 0x00, + 0x27, 0x00, 0x47, 0xdd, 0x39, 0x02, 0x27, 0x00, 0x4a, 0xc0, 0x59, 0x17, + 0x26, 0x00, 0x53, 0x40, 0x45, 0x71, 0xf5, 0x01, 0x0e, 0xd5, 0x72, 0x5b, + 0xad, 0x34, 0x46, 0x07, 0xd4, 0xc7, 0x26, 0x00, 0x49, 0x83, 0xb4, 0x60, + 0x26, 0x00, 0x45, 0xdc, 0x04, 0xa0, 0x25, 0x80, 0x0c, 0x43, 0x8c, 0x11, + 0x05, 0x26, 0x00, 0x4c, 0x9f, 0x8e, 0x00, 0x26, 0x40, 0x80, 0x01, 0xff, + 0x46, 0x93, 0x85, 0x32, 0xf5, 0x01, 0x47, 0x73, 0x62, 0xc0, 0x2b, 0x00, + 0x48, 0xa1, 0xbc, 0xf9, 0x23, 0x40, 0x04, 0x3e, 0x06, 0x06, 0x4a, 0xb1, + 0x8d, 0x3b, 0x26, 0x40, 0x47, 0xb2, 0x3f, 0x29, 0x2b, 0x00, 0x47, 0x75, + 0x07, 0x2a, 0x2b, 0x00, 0xb3, 0x01, 0xff, 0x45, 0xdc, 0x04, 0xaa, 0x25, + 0x00, 0x43, 0x8c, 0x11, 0x51, 0x2b, 0x40, 0x46, 0x00, 0x04, 0x84, 0xf7, + 0x01, 0x46, 0xdb, 0x04, 0x8d, 0xf7, 0x41, 0x48, 0x29, 0x42, 0xac, 0x25, + 0x00, 0x04, 0xc9, 0x00, 0x06, 0x46, 0x85, 0xd4, 0xf6, 0xf3, 0x41, 0x0a, + 0x9b, 0x01, 0x56, 0x0a, 0x4b, 0x0a, 0x1e, 0x06, 0xa9, 0x01, 0x01, 0xff, + 0x45, 0xce, 0x00, 0xa1, 0x27, 0x80, 0x0c, 0x46, 0x64, 0x1f, 0x4d, 0x20, + 0x00, 0x55, 0xd5, 0x01, 0x9e, 0x2b, 0x40, 0x44, 0xe6, 0x01, 0xa4, 0x27, + 0x40, 0x4f, 0xca, 0x65, 0xe9, 0x23, 0x80, 0x27, 0x58, 0x5f, 0x26, 0x82, + 0xf7, 0x01, 0xb0, 0x13, 0x4e, 0x9f, 0x75, 0xb8, 0x25, 0x00, 0x48, 0x01, + 0x02, 0xb6, 0x25, 0xc0, 0x00, 0x59, 0x9e, 0x20, 0xef, 0x23, 0x40, 0x47, + 0x1a, 0xc0, 0x53, 0x2b, 0x00, 0x46, 0x69, 0x44, 0xba, 0x25, 0x40, 0x52, + 0x4c, 0x1c, 0xed, 0x23, 0x40, 0x4e, 0xf9, 0x23, 0x9d, 0xf5, 0x01, 0x45, + 0xe7, 0x0e, 0x1b, 0x26, 0x40, 0x4c, 0xeb, 0x84, 0xb0, 0x25, 0x00, 0x02, + 0x92, 0x01, 0x06, 0x46, 0xc2, 0xca, 0x88, 0xf5, 0x41, 0x44, 0x43, 0x2f, + 0xf2, 0xf3, 0x01, 0x45, 0x1c, 0xc0, 0x1f, 0x2b, 0x40, 0x06, 0x9c, 0x03, + 0x06, 0x4a, 0x32, 0xa6, 0xb8, 0x26, 0x40, 0xa4, 0x4d, 0xac, 0x38, 0x57, + 0x0b, 0x2d, 0xf5, 0x23, 0x80, 0x2b, 0xb3, 0x0d, 0x54, 0x35, 0x41, 0xf6, + 0x23, 0xc0, 0x00, 0x48, 0x72, 0x62, 0xc5, 0x2b, 0x40, 0x05, 0x3d, 0x06, + 0x06, 0x45, 0xdc, 0x04, 0xfc, 0x25, 0x40, 0x47, 0xb2, 0x3f, 0x99, 0xf7, + 0x01, 0x47, 0x75, 0x07, 0x9f, 0xf7, 0x01, 0x46, 0xdb, 0x04, 0xfe, 0x25, + 0x40, 0x48, 0x72, 0x62, 0xc8, 0x2b, 0x40, 0x55, 0x87, 0x36, 0xf4, 0x23, + 0x80, 0x06, 0x46, 0x57, 0x07, 0x27, 0x2b, 0x40, 0x48, 0x72, 0x62, 0xc7, + 0x2b, 0x40, 0x46, 0xb3, 0x3f, 0x25, 0x2b, 0x00, 0x55, 0xd9, 0x2f, 0xf7, + 0x23, 0xc0, 0x00, 0x48, 0x72, 0x62, 0xc6, 0x2b, 0x40, 0x05, 0x10, 0x1a, + 0x70, 0x03, 0xc4, 0x00, 0x19, 0xaf, 0x01, 0xff, 0x04, 0x15, 0x01, 0x06, + 0x45, 0x58, 0x07, 0xeb, 0x29, 0x40, 0x4d, 0x4e, 0x31, 0xe3, 0x25, 0x00, + 0x4e, 0x69, 0x26, 0xe2, 0x25, 0x40, 0x80, 0x3a, 0x0a, 0x4b, 0x0a, 0x11, + 0x06, 0xa9, 0x01, 0x01, 0xff, 0x46, 0x64, 0x1f, 0x4c, 0x20, 0x00, 0x55, + 0xd5, 0x01, 0x9c, 0x2b, 0x40, 0x4f, 0xca, 0x65, 0xea, 0x23, 0x80, 0x18, + 0x58, 0x5f, 0x26, 0x80, 0xf7, 0x01, 0x47, 0x68, 0x44, 0xc4, 0x25, 0x00, + 0x4e, 0x9f, 0x75, 0xc2, 0x25, 0x00, 0x48, 0x01, 0x02, 0xc0, 0x25, 0x40, + 0x52, 0x4c, 0x1c, 0xee, 0x23, 0x40, 0x4a, 0xf8, 0xa3, 0xd8, 0x26, 0x00, + 0x09, 0x9c, 0x01, 0x01, 0xff, 0x4e, 0xf9, 0x23, 0x9c, 0xf5, 0x01, 0x45, + 0xe7, 0x0e, 0x1a, 0x26, 0x40, 0x46, 0x00, 0x04, 0x24, 0x2b, 0x00, 0x46, + 0xdb, 0x04, 0x1b, 0x2b, 0x40, 0x55, 0x22, 0x35, 0xaa, 0xf5, 0x01, 0xa5, + 0x0f, 0xaf, 0x01, 0xff, 0x50, 0x8e, 0x60, 0x2c, 0x2b, 0x00, 0x47, 0xdc, + 0xcc, 0xd7, 0x29, 0x40, 0x43, 0x2c, 0x01, 0xa4, 0xf5, 0x81, 0x06, 0x45, + 0x7b, 0xc7, 0x22, 0x2b, 0x40, 0x45, 0xb7, 0x24, 0x65, 0x26, 0x40, 0xac, + 0x0f, 0xaf, 0x01, 0xff, 0x44, 0xcd, 0x1b, 0xbf, 0xf5, 0x01, 0x4f, 0xa4, + 0x6d, 0x26, 0x27, 0x40, 0x42, 0x23, 0x02, 0x91, 0x26, 0x00, 0x46, 0x06, + 0x0e, 0x3f, 0x27, 0x40, 0x46, 0xb3, 0x3f, 0xc6, 0x25, 0x80, 0x45, 0x03, + 0xa6, 0x01, 0x19, 0xb2, 0x01, 0xff, 0x07, 0x6a, 0xc0, 0x06, 0x45, 0xde, + 0xde, 0x22, 0xf3, 0x41, 0x44, 0xc9, 0x30, 0xc3, 0x26, 0x00, 0x43, 0x60, + 0x16, 0xc2, 0x26, 0x40, 0x58, 0xef, 0x23, 0xa3, 0xf5, 0x01, 0x0a, 0x4b, + 0x0a, 0x06, 0x5b, 0xcf, 0x01, 0x9f, 0x2b, 0x40, 0x4f, 0xca, 0x65, 0xec, + 0x23, 0x00, 0x58, 0x5f, 0x26, 0x83, 0xf7, 0x01, 0x4e, 0x9f, 0x75, 0xbe, + 0x25, 0x00, 0x48, 0x01, 0x02, 0xbc, 0x25, 0x40, 0x80, 0x01, 0xff, 0x47, + 0x73, 0x62, 0xc1, 0x2b, 0x00, 0x4d, 0xcb, 0x7e, 0x56, 0x27, 0x00, 0x48, + 0x89, 0xbf, 0xde, 0x2b, 0x00, 0x44, 0xb8, 0x24, 0x66, 0x26, 0x00, 0x4f, + 0x0d, 0x6e, 0xea, 0x29, 0x40, 0x50, 0xae, 0x5c, 0x2c, 0x27, 0x00, 0x05, + 0xdd, 0x80, 0x79, 0x45, 0x01, 0x04, 0xcf, 0x25, 0x80, 0x52, 0x48, 0x49, + 0xbe, 0x63, 0x26, 0x00, 0x4e, 0x21, 0x75, 0xe8, 0x26, 0x00, 0x06, 0xae, + 0x3c, 0x01, 0xff, 0x0e, 0xe5, 0x03, 0x31, 0x0e, 0x8f, 0x72, 0x21, 0x0f, + 0xf1, 0x6b, 0x11, 0x0c, 0xa1, 0x17, 0x01, 0xff, 0x4f, 0x67, 0x06, 0xaa, + 0x2b, 0x00, 0x50, 0xb3, 0x02, 0xab, 0x2b, 0x40, 0x4f, 0xae, 0x0a, 0xaf, + 0x2b, 0x00, 0x4d, 0x59, 0x1e, 0xad, 0x2b, 0x40, 0x4f, 0xae, 0x0a, 0xae, + 0x2b, 0x00, 0x4d, 0x59, 0x1e, 0xac, 0x2b, 0x40, 0x4f, 0x67, 0x06, 0xa8, + 0x2b, 0x00, 0x50, 0xb3, 0x02, 0xa9, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x4a, + 0xe6, 0xa1, 0xfa, 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0xfd, + 0x3c, 0xed, 0x29, 0x00, 0x4e, 0xd3, 0x76, 0x89, 0x26, 0x00, 0x4f, 0xfe, + 0x6d, 0x88, 0x26, 0x40, 0x46, 0x05, 0xd0, 0x5d, 0x26, 0x80, 0xe7, 0x01, + 0x4a, 0x96, 0xa1, 0x49, 0xfa, 0x81, 0xd9, 0x01, 0xab, 0x73, 0x44, 0x02, + 0xe7, 0x5f, 0x26, 0x80, 0x5b, 0x45, 0xe6, 0xb4, 0x5b, 0x26, 0x80, 0x43, + 0x44, 0x52, 0xe7, 0x5c, 0x26, 0x80, 0x2b, 0x07, 0x2d, 0x09, 0x01, 0xff, + 0x46, 0x05, 0xd0, 0x27, 0xfa, 0x01, 0xab, 0x12, 0x44, 0x02, 0xe7, 0x29, + 0xfa, 0x01, 0x45, 0xe6, 0xb4, 0x25, 0xfa, 0x01, 0x44, 0x52, 0xe7, 0x26, + 0xfa, 0x41, 0x43, 0xa1, 0x01, 0x24, 0xfa, 0x01, 0x45, 0x4c, 0x94, 0x28, + 0xfa, 0x41, 0x09, 0x5c, 0x29, 0x01, 0xff, 0x4e, 0x65, 0x29, 0x11, 0xfa, + 0x01, 0x5b, 0x89, 0x1b, 0x3b, 0xfa, 0x41, 0x09, 0x5c, 0x29, 0x01, 0xff, + 0x4e, 0x65, 0x29, 0x10, 0xfa, 0x01, 0x5b, 0x89, 0x1b, 0x3a, 0xfa, 0x41, + 0x09, 0x5c, 0x29, 0x01, 0xff, 0x4e, 0x65, 0x29, 0x14, 0xfa, 0x01, 0x5b, + 0x89, 0x1b, 0x3e, 0xfa, 0x41, 0x43, 0xa1, 0x01, 0x5a, 0x26, 0x80, 0x4c, + 0x45, 0x4c, 0x94, 0x5e, 0x26, 0xc0, 0x00, 0x09, 0x5c, 0x29, 0x15, 0x8d, + 0x01, 0xff, 0x46, 0x05, 0xd0, 0x53, 0xfa, 0x01, 0x45, 0xe6, 0xb4, 0x51, + 0xfa, 0x01, 0x44, 0x52, 0xe7, 0x52, 0xfa, 0x41, 0x52, 0x4c, 0x4c, 0x07, + 0xfa, 0x01, 0x4e, 0x65, 0x29, 0x13, 0xfa, 0x01, 0x5f, 0xe5, 0x0f, 0x1c, + 0xfa, 0x01, 0xb4, 0x01, 0xff, 0x5c, 0x19, 0x16, 0x46, 0xfa, 0x01, 0x0b, + 0x8a, 0x1b, 0x01, 0xff, 0x4f, 0x95, 0x1b, 0x3d, 0xfa, 0x01, 0x53, 0x84, + 0x48, 0x31, 0xfa, 0x41, 0x09, 0x5c, 0x29, 0x01, 0xff, 0x4e, 0x65, 0x29, + 0x0f, 0xfa, 0x01, 0x5b, 0x89, 0x1b, 0x39, 0xfa, 0x41, 0x57, 0x5c, 0x29, + 0x4c, 0xfa, 0x41, 0x09, 0x5c, 0x29, 0x01, 0xff, 0x4e, 0x65, 0x29, 0x12, + 0xfa, 0x01, 0x5b, 0x89, 0x1b, 0x3c, 0xfa, 0x41, 0x04, 0x84, 0x22, 0x4d, + 0x02, 0xa3, 0x01, 0x3d, 0x44, 0xe6, 0xe5, 0x59, 0xf4, 0x01, 0x02, 0x3f, + 0x06, 0x27, 0x4c, 0x63, 0x8b, 0x23, 0x26, 0x00, 0xb2, 0x15, 0x43, 0xee, + 0x1a, 0xac, 0xf9, 0x01, 0xb4, 0x01, 0xff, 0x49, 0x4a, 0xae, 0xbf, 0x20, + 0x00, 0x47, 0x9f, 0x89, 0xe6, 0xfa, 0x41, 0xe4, 0x26, 0xf4, 0x01, 0x4a, + 0x20, 0xa9, 0x82, 0xf3, 0x41, 0x46, 0xe3, 0xd0, 0xe2, 0xf9, 0x01, 0x45, + 0x95, 0xdc, 0xb1, 0xf3, 0x41, 0x4f, 0xb5, 0x6b, 0xf9, 0x29, 0x00, 0x47, + 0x67, 0x2d, 0xf8, 0x29, 0x40, 0xe5, 0xb2, 0xf6, 0x01, 0x43, 0x8f, 0x21, + 0xb4, 0xf6, 0x41, 0xa4, 0x92, 0x04, 0x0b, 0x30, 0x94, 0x85, 0x04, 0x52, + 0xee, 0x4c, 0x6c, 0x1c, 0x01, 0x07, 0xf1, 0x04, 0xee, 0x01, 0x07, 0xbf, + 0x35, 0x6d, 0x05, 0xdb, 0x02, 0x44, 0x0b, 0x70, 0x70, 0x06, 0x4e, 0xeb, + 0x77, 0x43, 0x1c, 0x41, 0xa1, 0x2c, 0xe5, 0x38, 0x1c, 0x01, 0xe9, 0x30, + 0x1c, 0x81, 0x1f, 0xef, 0x3a, 0x1c, 0x01, 0xf5, 0x32, 0x1c, 0x81, 0x12, + 0x08, 0x92, 0xb7, 0x01, 0xff, 0xec, 0x36, 0x1c, 0x01, 0xf2, 0x34, 0x1c, + 0xc1, 0x00, 0xf2, 0x35, 0x1c, 0x41, 0xf5, 0x33, 0x1c, 0x41, 0xe9, 0x31, + 0x1c, 0x41, 0xe1, 0x2f, 0x1c, 0x01, 0xe9, 0x39, 0x1c, 0x01, 0xf5, 0x3b, + 0x1c, 0x41, 0xa1, 0x17, 0x4b, 0x3b, 0x21, 0x3c, 0x1c, 0x01, 0x02, 0x02, + 0x00, 0x01, 0xff, 0x44, 0x49, 0x21, 0x3f, 0x1c, 0x01, 0x45, 0x7e, 0x46, + 0x3e, 0x1c, 0x41, 0x47, 0x5c, 0x14, 0x3d, 0x1c, 0x01, 0x47, 0x41, 0x81, + 0x40, 0x1c, 0x41, 0x45, 0xd1, 0x09, 0x61, 0x1c, 0x81, 0x72, 0xa6, 0x53, + 0x44, 0xb8, 0x27, 0x62, 0x1c, 0x81, 0x46, 0x43, 0xcd, 0x09, 0x5a, 0x1c, + 0x01, 0xb3, 0x24, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x63, 0x1c, 0x01, + 0xa8, 0x0d, 0xb7, 0x01, 0xff, 0x44, 0x98, 0x1b, 0x64, 0x1c, 0x01, 0xef, + 0x5b, 0x1c, 0x41, 0x44, 0xf3, 0x0f, 0x65, 0x1c, 0x01, 0x43, 0x26, 0x01, + 0x5c, 0x1c, 0x41, 0x44, 0x96, 0x1b, 0x60, 0x1c, 0x81, 0x0d, 0x42, 0x30, + 0x27, 0x5f, 0x1c, 0xc1, 0x00, 0x42, 0xf5, 0x0f, 0x68, 0x1c, 0x41, 0x42, + 0xf5, 0x0f, 0x69, 0x1c, 0x41, 0x42, 0xf5, 0x0f, 0x6b, 0x1c, 0x41, 0xa9, + 0x0f, 0xaf, 0x01, 0xff, 0x43, 0xf4, 0x0f, 0x66, 0x1c, 0x01, 0x42, 0x42, + 0x00, 0x5d, 0x1c, 0x41, 0x43, 0xe4, 0x47, 0x67, 0x1c, 0x01, 0x42, 0x32, + 0x00, 0x5e, 0x1c, 0x41, 0xf9, 0x6a, 0x1c, 0x41, 0xe1, 0x00, 0x1c, 0x81, + 0xfa, 0x01, 0xa2, 0xed, 0x01, 0xa3, 0xe0, 0x01, 0xa4, 0xc7, 0x01, 0xe5, + 0x0a, 0x1c, 0x01, 0xa7, 0xb6, 0x01, 0x42, 0x22, 0x00, 0x2e, 0x1c, 0x01, + 0xe9, 0x02, 0x1c, 0x81, 0xa6, 0x01, 0xaa, 0x99, 0x01, 0xab, 0x8c, 0x01, + 0x42, 0x74, 0x00, 0x29, 0x1c, 0x01, 0x42, 0x6c, 0x00, 0x26, 0x1c, 0x01, + 0xae, 0x68, 0xef, 0x0c, 0x1c, 0x01, 0xb0, 0x58, 0x42, 0x71, 0x00, 0x28, + 0x1c, 0x01, 0xb3, 0x40, 0xb4, 0x27, 0xf5, 0x04, 0x1c, 0x81, 0x1e, 0xb6, + 0x06, 0x42, 0x20, 0x20, 0x27, 0x1c, 0x41, 0xe1, 0x2a, 0x1c, 0x01, 0x07, + 0x93, 0xb7, 0x01, 0xff, 0xec, 0x08, 0x1c, 0x01, 0xf2, 0x06, 0x1c, 0xc1, + 0x00, 0xf2, 0x07, 0x1c, 0x41, 0xf5, 0x05, 0x1c, 0x41, 0xe1, 0x1d, 0x1c, + 0x01, 0x42, 0x22, 0x00, 0x1e, 0x1c, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x18, + 0x1c, 0x01, 0x42, 0x22, 0x00, 0x19, 0x1c, 0x41, 0xe1, 0x2d, 0x1c, 0x01, + 0x42, 0x22, 0x00, 0x2b, 0x1c, 0x01, 0x42, 0x45, 0x05, 0x2c, 0x1c, 0x41, + 0xe1, 0x22, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x23, 0x1c, 0x41, 0xe1, 0x21, + 0x1c, 0x01, 0x42, 0x24, 0x02, 0x12, 0x1c, 0x01, 0x42, 0x2f, 0x04, 0x1c, + 0x1c, 0x01, 0x42, 0x20, 0x20, 0x17, 0x1c, 0x41, 0xe1, 0x0e, 0x1c, 0x01, + 0x42, 0x22, 0x00, 0x0f, 0x1c, 0x41, 0xe1, 0x15, 0x1c, 0x01, 0x42, 0x22, + 0x00, 0x16, 0x1c, 0x41, 0xe9, 0x03, 0x1c, 0x41, 0xe1, 0x10, 0x1c, 0x01, + 0x42, 0x22, 0x00, 0x11, 0x1c, 0x41, 0xe1, 0x1f, 0x1c, 0x01, 0xa4, 0x06, + 0x42, 0x22, 0x00, 0x20, 0x1c, 0x41, 0xe1, 0x1a, 0x1c, 0x01, 0x42, 0x22, + 0x00, 0x1b, 0x1c, 0x41, 0xe1, 0x13, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x14, + 0x1c, 0x41, 0xe1, 0x24, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x25, 0x1c, 0x41, + 0xe1, 0x01, 0x1c, 0x01, 0xe9, 0x0b, 0x1c, 0x01, 0xf5, 0x0d, 0x1c, 0x41, + 0xd1, 0x44, 0x1c, 0x01, 0xd2, 0x45, 0x1c, 0x41, 0x44, 0x0b, 0x1e, 0x41, + 0x1c, 0x01, 0x05, 0xf5, 0x05, 0x06, 0x4b, 0xdf, 0x98, 0x42, 0x1c, 0x41, + 0x45, 0xd1, 0x09, 0x58, 0x1c, 0x01, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x59, + 0x1c, 0x01, 0x43, 0xcd, 0x09, 0x51, 0x1c, 0x01, 0xb3, 0x14, 0xb4, 0x06, + 0x44, 0xf5, 0x1b, 0x50, 0x1c, 0x41, 0x44, 0x25, 0x01, 0x53, 0x1c, 0x01, + 0x42, 0x15, 0x02, 0x52, 0x1c, 0x41, 0x44, 0x96, 0x1b, 0x57, 0x1c, 0x01, + 0x42, 0x30, 0x27, 0x56, 0x1c, 0x41, 0x43, 0xd7, 0x04, 0x55, 0x1c, 0x01, + 0x43, 0xfb, 0x05, 0x54, 0x1c, 0x41, 0xa1, 0xdc, 0x05, 0x45, 0x65, 0xda, + 0x35, 0x22, 0x00, 0xe4, 0xcf, 0xf6, 0x01, 0xa5, 0xc3, 0x05, 0x42, 0x3f, + 0x06, 0x14, 0xf5, 0x81, 0xa1, 0x05, 0xae, 0x14, 0xb4, 0x06, 0x4a, 0x60, + 0xaa, 0xc3, 0xf9, 0x41, 0x47, 0xf6, 0x06, 0x36, 0x21, 0x00, 0x44, 0xc9, + 0x08, 0x6c, 0x22, 0x40, 0x05, 0xf8, 0xac, 0x1b, 0xb4, 0x0d, 0x49, 0x46, + 0xb8, 0x2c, 0x23, 0xc0, 0x00, 0x4c, 0x53, 0x20, 0xe3, 0x23, 0x40, 0x69, + 0x95, 0x01, 0x5e, 0x2b, 0x00, 0x45, 0xa2, 0xde, 0x71, 0xf3, 0x41, 0xa1, + 0xd7, 0x04, 0x09, 0x99, 0x3c, 0xa5, 0x04, 0x06, 0xf4, 0x05, 0xde, 0x03, + 0x4a, 0x22, 0xa2, 0xfb, 0x09, 0x00, 0x46, 0xc9, 0xd2, 0xfa, 0x09, 0x00, + 0x07, 0xf1, 0x04, 0x8c, 0x01, 0x06, 0x79, 0x79, 0x7c, 0xb3, 0x44, 0x0b, + 0x70, 0x70, 0x01, 0xff, 0xa1, 0x31, 0xe5, 0xc7, 0x09, 0x00, 0xe9, 0xbf, + 0x09, 0x80, 0x24, 0xef, 0xcb, 0x09, 0x00, 0xf5, 0xc1, 0x09, 0x80, 0x17, + 0x08, 0x92, 0xb7, 0x01, 0xff, 0xec, 0xe2, 0x09, 0x80, 0x09, 0xf2, 0xc3, + 0x09, 0xc0, 0x00, 0xf2, 0xc4, 0x09, 0x40, 0xec, 0xe3, 0x09, 0x40, 0xf5, + 0xc2, 0x09, 0x40, 0xe9, 0xc0, 0x09, 0x40, 0xe1, 0xbe, 0x09, 0x00, 0xe9, + 0xc8, 0x09, 0x00, 0xf5, 0xcc, 0x09, 0x40, 0x4a, 0x52, 0x9f, 0xfe, 0x09, + 0x00, 0x04, 0xdc, 0x02, 0x01, 0xff, 0xa1, 0x1d, 0x4b, 0x3b, 0x21, 0x81, + 0x09, 0x00, 0x45, 0xc0, 0x3a, 0xbc, 0x09, 0x00, 0x02, 0x02, 0x00, 0x01, + 0xff, 0x44, 0x49, 0x21, 0xcd, 0x09, 0x00, 0x45, 0x7e, 0x46, 0x83, 0x09, + 0x40, 0x47, 0x5c, 0x14, 0x82, 0x09, 0x00, 0x47, 0x41, 0x81, 0xbd, 0x09, + 0x40, 0x44, 0xb9, 0x00, 0xf2, 0x09, 0x00, 0x44, 0xdb, 0x02, 0xf3, 0x09, + 0x40, 0xe1, 0x85, 0x09, 0x80, 0xaf, 0x02, 0xa2, 0xa2, 0x02, 0xa3, 0x95, + 0x02, 0xa4, 0xfc, 0x01, 0xe5, 0x8f, 0x09, 0x00, 0xa7, 0xeb, 0x01, 0x42, + 0x22, 0x00, 0xb9, 0x09, 0x00, 0xe9, 0x87, 0x09, 0x80, 0xdb, 0x01, 0xaa, + 0xce, 0x01, 0xab, 0xba, 0x01, 0x42, 0x74, 0x00, 0xb2, 0x09, 0x00, 0x42, + 0x6c, 0x00, 0xae, 0x09, 0x00, 0xae, 0x95, 0x01, 0xef, 0x93, 0x09, 0x00, + 0xb0, 0x84, 0x01, 0xb2, 0x60, 0xb3, 0x4e, 0xb4, 0x35, 0xf5, 0x89, 0x09, + 0x80, 0x2c, 0xb6, 0x0d, 0xb9, 0x01, 0xff, 0xe1, 0xaf, 0x09, 0x00, 0x42, + 0x20, 0x20, 0xdf, 0x09, 0x40, 0x4d, 0x64, 0x7b, 0xfc, 0x09, 0x00, 0x07, + 0x93, 0xb7, 0x01, 0xff, 0xec, 0x8c, 0x09, 0x80, 0x09, 0xf2, 0x8b, 0x09, + 0xc0, 0x00, 0xf2, 0xe0, 0x09, 0x40, 0xec, 0xe1, 0x09, 0x40, 0xf5, 0x8a, + 0x09, 0x40, 0xe1, 0xa4, 0x09, 0x00, 0x42, 0x22, 0x00, 0xa5, 0x09, 0x00, + 0xb4, 0x01, 0xff, 0xe1, 0x9f, 0x09, 0x00, 0x42, 0x22, 0x00, 0xa0, 0x09, + 0x40, 0xe1, 0xb8, 0x09, 0x00, 0x42, 0x22, 0x00, 0xb6, 0x09, 0x00, 0x42, + 0x45, 0x05, 0xb7, 0x09, 0x40, 0xe1, 0xb0, 0x09, 0x80, 0x0c, 0x42, 0x22, + 0x00, 0xdd, 0x09, 0x00, 0x42, 0x71, 0x00, 0xdc, 0x09, 0x40, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x4e, 0x0d, 0x73, 0xf1, 0x09, 0x00, 0x4f, 0x8a, 0x69, + 0xf0, 0x09, 0x40, 0xe1, 0xaa, 0x09, 0x00, 0x42, 0x22, 0x00, 0xab, 0x09, + 0x40, 0xe1, 0xa8, 0x09, 0x00, 0x42, 0x24, 0x02, 0x99, 0x09, 0x00, 0x42, + 0x2f, 0x04, 0xa3, 0x09, 0x00, 0x42, 0x20, 0x20, 0x9e, 0x09, 0x40, 0xe1, + 0x95, 0x09, 0x00, 0x42, 0x22, 0x00, 0x96, 0x09, 0xc0, 0x00, 0x46, 0xcb, + 0xd3, 0xce, 0x09, 0x40, 0xe1, 0x9c, 0x09, 0x00, 0x42, 0x22, 0x00, 0x9d, + 0x09, 0x40, 0xe9, 0x88, 0x09, 0x40, 0xe1, 0x97, 0x09, 0x00, 0x42, 0x22, + 0x00, 0x98, 0x09, 0x40, 0xe1, 0xa6, 0x09, 0x00, 0xa4, 0x06, 0x42, 0x22, + 0x00, 0xa7, 0x09, 0x40, 0xe1, 0xa1, 0x09, 0x00, 0x42, 0x22, 0x00, 0xa2, + 0x09, 0x40, 0xe1, 0x9a, 0x09, 0x00, 0x42, 0x22, 0x00, 0x9b, 0x09, 0x40, + 0xe1, 0xac, 0x09, 0x00, 0x42, 0x22, 0x00, 0xad, 0x09, 0x40, 0xe1, 0x86, + 0x09, 0x00, 0xe9, 0x90, 0x09, 0x00, 0xf5, 0x94, 0x09, 0x40, 0x45, 0xd1, + 0x09, 0xee, 0x09, 0x00, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0xef, 0x09, 0x00, + 0x43, 0xcd, 0x09, 0xe7, 0x09, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, + 0x1b, 0xe6, 0x09, 0x40, 0x44, 0x25, 0x01, 0xe9, 0x09, 0x00, 0x42, 0x15, + 0x02, 0xe8, 0x09, 0x40, 0x44, 0x96, 0x1b, 0xed, 0x09, 0x00, 0x42, 0x30, + 0x27, 0xec, 0x09, 0x40, 0x43, 0xd7, 0x04, 0xeb, 0x09, 0x00, 0x43, 0xfb, + 0x05, 0xea, 0x09, 0x40, 0x53, 0x8b, 0x43, 0xf9, 0x09, 0x00, 0x0a, 0x40, + 0x7f, 0x01, 0xff, 0x44, 0xfa, 0x05, 0xf7, 0x09, 0x00, 0x43, 0xcd, 0x09, + 0xf4, 0x09, 0x80, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xf6, 0x09, + 0x00, 0x42, 0x15, 0x02, 0xf5, 0x09, 0x40, 0x5a, 0x2a, 0x1c, 0xf8, 0x09, + 0x40, 0x50, 0x4a, 0x52, 0xfd, 0x09, 0x00, 0x43, 0x06, 0x80, 0x80, 0x09, + 0x00, 0x4d, 0x3a, 0x6f, 0xd7, 0x09, 0x40, 0x80, 0x06, 0x48, 0x19, 0xbd, + 0xce, 0xf6, 0x41, 0x46, 0xaf, 0xd4, 0xd1, 0xfa, 0x01, 0x46, 0xf7, 0x06, + 0x7e, 0x23, 0x00, 0x58, 0xcf, 0x28, 0x15, 0xf5, 0x41, 0x45, 0x99, 0xad, + 0x7a, 0xf3, 0x01, 0x43, 0xbd, 0x01, 0xb2, 0xfa, 0x41, 0x50, 0x5e, 0x5b, + 0xd6, 0xf3, 0x01, 0x04, 0x53, 0x97, 0x20, 0x42, 0x5f, 0x01, 0xd8, 0xfa, + 0x01, 0xb2, 0x0c, 0x4a, 0x3e, 0xa9, 0x93, 0xf4, 0x01, 0x43, 0x32, 0x00, + 0xab, 0xf9, 0x41, 0x45, 0xec, 0x06, 0x3b, 0xf4, 0x01, 0x4a, 0xc4, 0xa0, + 0xd4, 0xf9, 0x41, 0x57, 0x14, 0x2a, 0x9c, 0xf3, 0x01, 0x58, 0x0f, 0x25, + 0x9d, 0xf3, 0x01, 0x4c, 0xef, 0x86, 0x6b, 0x26, 0x00, 0x4f, 0x78, 0x6c, + 0x6c, 0x26, 0x40, 0x42, 0x08, 0x00, 0x76, 0xf4, 0x81, 0xeb, 0x2f, 0xa3, + 0xad, 0x2f, 0xa4, 0x9e, 0x2f, 0xa7, 0x89, 0x2f, 0xac, 0x85, 0x27, 0x04, + 0xaf, 0x8a, 0xca, 0x05, 0xae, 0x99, 0x05, 0xb2, 0x82, 0x05, 0xb3, 0x80, + 0x03, 0xf4, 0x87, 0xf9, 0xc1, 0x00, 0x03, 0x5f, 0x47, 0x11, 0xe8, 0xc0, + 0xf6, 0x81, 0x06, 0x44, 0xd1, 0xcf, 0x0b, 0xf5, 0x41, 0x43, 0x73, 0xac, + 0xc1, 0xf6, 0x41, 0x0f, 0x54, 0x2f, 0xd7, 0x02, 0x07, 0xf1, 0x04, 0x6b, + 0x03, 0xe4, 0x3e, 0x5b, 0xb3, 0x33, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xe5, + 0xe7, 0x1b, 0x80, 0x25, 0xe9, 0xea, 0x1b, 0x00, 0x05, 0x36, 0xc8, 0x15, + 0xef, 0xec, 0x1b, 0x00, 0x48, 0x01, 0xc0, 0xe8, 0x1b, 0x00, 0xf5, 0xee, + 0x1b, 0xc0, 0x00, 0x52, 0xc4, 0x49, 0xef, 0x1b, 0x40, 0xe9, 0xeb, 0x1b, + 0x00, 0xef, 0xed, 0x1b, 0x40, 0xe5, 0xe9, 0x1b, 0x40, 0x49, 0xff, 0xb0, + 0xe6, 0x1b, 0x00, 0x0c, 0x47, 0x8f, 0x01, 0xff, 0x45, 0x08, 0xdd, 0xfe, + 0x1b, 0x00, 0x48, 0xb9, 0xbe, 0xfc, 0x1b, 0x00, 0xb0, 0x01, 0xff, 0x47, + 0xe7, 0xc4, 0xff, 0x1b, 0x00, 0x49, 0x2c, 0xb1, 0xfd, 0x1b, 0x40, 0x45, + 0xe9, 0xc4, 0xf2, 0x1b, 0x00, 0x47, 0xc5, 0xc9, 0xf3, 0x1b, 0x40, 0xe1, + 0xc0, 0x1b, 0x00, 0x42, 0x16, 0x00, 0xc5, 0x1b, 0x00, 0x42, 0x37, 0x00, + 0xe1, 0x1b, 0x00, 0x42, 0x68, 0x0f, 0xd1, 0x1b, 0x00, 0x42, 0x24, 0x02, + 0xce, 0x1b, 0x00, 0x42, 0x22, 0x00, 0xc2, 0x1b, 0x00, 0xe9, 0xe4, 0x1b, + 0x00, 0x42, 0x77, 0x24, 0xd0, 0x1b, 0x00, 0x47, 0x36, 0xc8, 0xc6, 0x1b, + 0x00, 0x42, 0x74, 0x00, 0xde, 0x1b, 0x00, 0xad, 0x8b, 0x01, 0xae, 0x6d, + 0x42, 0xc1, 0x08, 0xc7, 0x1b, 0x80, 0x60, 0x42, 0x71, 0x00, 0xd2, 0x1b, + 0x00, 0xb3, 0x10, 0xf5, 0xe5, 0x1b, 0x00, 0x42, 0xa9, 0x01, 0xcb, 0x1b, + 0x00, 0x42, 0x20, 0x20, 0xdb, 0x1b, 0x40, 0xe1, 0xd8, 0x1b, 0x00, 0x0a, + 0xca, 0x49, 0x06, 0x4a, 0xb4, 0xa6, 0xd6, 0x1b, 0x40, 0xe1, 0xc1, 0x1b, + 0x00, 0x42, 0x24, 0x02, 0xcf, 0x1b, 0x00, 0x42, 0x22, 0x00, 0xc3, 0x1b, + 0x00, 0x42, 0x74, 0x00, 0xdf, 0x1b, 0x00, 0x42, 0x6c, 0x00, 0xd5, 0x1b, + 0x00, 0x42, 0xc1, 0x08, 0xc8, 0x1b, 0x00, 0x42, 0x71, 0x00, 0xd3, 0x1b, + 0x00, 0x42, 0x45, 0x05, 0xd9, 0x1b, 0x00, 0x42, 0xa9, 0x01, 0xcc, 0x1b, + 0x00, 0x42, 0x20, 0x20, 0xdc, 0x1b, 0x40, 0x47, 0x6e, 0xc8, 0xcd, 0x1b, + 0x40, 0xe1, 0xc9, 0x1b, 0x00, 0x42, 0x68, 0x0f, 0xe2, 0x1b, 0x00, 0x42, + 0x24, 0x02, 0xdd, 0x1b, 0x00, 0x4a, 0x64, 0xa6, 0xd7, 0x1b, 0x00, 0x42, + 0x20, 0x20, 0xe0, 0x1b, 0x40, 0xe1, 0xd4, 0x1b, 0x80, 0x06, 0x42, 0x16, + 0x00, 0xe3, 0x1b, 0x40, 0x09, 0xf7, 0xb2, 0x01, 0xff, 0x42, 0x22, 0x00, + 0xc4, 0x1b, 0x00, 0x42, 0x2f, 0x04, 0xca, 0x1b, 0x00, 0x42, 0x45, 0x05, + 0xda, 0x1b, 0x40, 0xe8, 0xf1, 0x1b, 0x00, 0x42, 0x1d, 0x01, 0xf0, 0x1b, + 0x40, 0x45, 0x28, 0xdb, 0xbe, 0x26, 0x00, 0x43, 0x49, 0x08, 0xfa, 0xf9, + 0x81, 0xeb, 0x01, 0x07, 0x69, 0xcb, 0x01, 0xff, 0x0a, 0xae, 0x53, 0xbb, + 0x01, 0x49, 0xa0, 0x14, 0xf5, 0x6a, 0x01, 0x07, 0xf1, 0x04, 0x01, 0xff, + 0xe1, 0xe7, 0x6a, 0x01, 0x42, 0x16, 0x00, 0xe2, 0x6a, 0x01, 0x42, 0x73, + 0x02, 0xdf, 0x6a, 0x01, 0xa4, 0x93, 0x01, 0xe5, 0xec, 0x6a, 0x81, 0x83, + 0x01, 0x42, 0xed, 0x06, 0xd3, 0x6a, 0x01, 0xa7, 0x6f, 0x44, 0x57, 0xe5, + 0xda, 0x6a, 0x01, 0xe9, 0xed, 0x6a, 0x01, 0x42, 0x5c, 0x09, 0xd9, 0x6a, + 0x01, 0xab, 0x53, 0x43, 0xbb, 0x04, 0xd4, 0x6a, 0x01, 0xef, 0xe8, 0x6a, + 0x81, 0x44, 0x42, 0xc1, 0x08, 0xe5, 0x6a, 0x01, 0x42, 0xc7, 0x02, 0xd2, + 0x6a, 0x01, 0x42, 0x1e, 0x00, 0xe1, 0x6a, 0x01, 0xf5, 0xea, 0x6a, 0x81, + 0x27, 0x42, 0x4f, 0x5c, 0xe3, 0x6a, 0x01, 0x42, 0xa9, 0x01, 0xdb, 0x6a, + 0x81, 0x14, 0xb9, 0x06, 0x42, 0x0f, 0x00, 0xdc, 0x6a, 0x41, 0x43, 0xa6, + 0x0f, 0xe4, 0x6a, 0x01, 0x42, 0xf7, 0x0a, 0xd5, 0x6a, 0x41, 0x43, 0x65, + 0x32, 0xe6, 0x6a, 0x41, 0x42, 0x75, 0x06, 0xe0, 0x6a, 0x41, 0xef, 0xe9, + 0x6a, 0x41, 0xe1, 0xd1, 0x6a, 0x01, 0x43, 0x27, 0x3e, 0xd8, 0x6a, 0x41, + 0x42, 0xe6, 0x06, 0xd6, 0x6a, 0x01, 0x42, 0xc2, 0x0b, 0xdd, 0x6a, 0x41, + 0xe5, 0xeb, 0x6a, 0x01, 0x43, 0xe6, 0x1c, 0xd0, 0x6a, 0x41, 0x43, 0x5e, + 0xe5, 0xd7, 0x6a, 0x01, 0xef, 0xde, 0x6a, 0x41, 0x04, 0x2a, 0x0a, 0x16, + 0x03, 0x13, 0x01, 0x06, 0x48, 0x2f, 0xac, 0xf2, 0x6a, 0x41, 0x45, 0xdc, + 0x29, 0xf1, 0x6a, 0x01, 0x49, 0x2e, 0xac, 0xf3, 0x6a, 0x41, 0x45, 0xdc, + 0x29, 0xf0, 0x6a, 0x01, 0x49, 0x25, 0xac, 0xf4, 0x6a, 0x41, 0x4d, 0x12, + 0x7a, 0xc0, 0xf3, 0x41, 0x80, 0x06, 0x48, 0x69, 0xba, 0x88, 0xf4, 0x41, + 0x45, 0x1c, 0xbb, 0xca, 0xf4, 0x01, 0x47, 0x8d, 0xc9, 0xfc, 0xf9, 0x41, + 0x43, 0xa5, 0x10, 0x4c, 0xf3, 0x01, 0x42, 0x5c, 0x09, 0x95, 0xfa, 0x01, + 0xeb, 0xe6, 0xf3, 0xc1, 0x00, 0x0a, 0xce, 0xa5, 0x01, 0xff, 0x4b, 0x12, + 0x93, 0xb5, 0xf4, 0x01, 0x49, 0xa0, 0xaf, 0xb6, 0xf4, 0x01, 0x4a, 0xfa, + 0xa6, 0xb7, 0xf4, 0x01, 0x48, 0x43, 0x78, 0xb4, 0xf4, 0x41, 0x02, 0x18, + 0x04, 0x92, 0x21, 0x49, 0xa0, 0x14, 0xf3, 0xa6, 0x00, 0x07, 0xf1, 0x04, + 0x12, 0x47, 0x71, 0xc9, 0xf2, 0xa6, 0x00, 0x4d, 0xbd, 0x30, 0xf7, 0xa6, + 0x00, 0x49, 0xac, 0xb5, 0xf6, 0xa6, 0x40, 0xe1, 0xa0, 0xa6, 0x00, 0x42, + 0x27, 0x01, 0xa4, 0xa6, 0x00, 0xa6, 0xd3, 0x20, 0xe9, 0xa9, 0xa6, 0x00, + 0xab, 0x93, 0x20, 0xac, 0xf8, 0x1f, 0xed, 0xb3, 0xa6, 0x80, 0xc8, 0x1f, + 0xae, 0xec, 0x1e, 0xef, 0xa7, 0xa6, 0x00, 0xb0, 0x93, 0x01, 0xb2, 0x6b, + 0xb3, 0x3d, 0xb4, 0x23, 0xf5, 0xa2, 0xa6, 0x00, 0xb7, 0x13, 0xb9, 0x01, + 0xff, 0xe1, 0xc2, 0xa6, 0x00, 0x42, 0xcf, 0x8b, 0xbf, 0xa6, 0x00, 0x42, + 0x02, 0x94, 0xc1, 0xa6, 0x40, 0xe1, 0xda, 0xa6, 0x00, 0x42, 0x30, 0x12, + 0xc9, 0xa6, 0x40, 0xa1, 0x0e, 0xa5, 0x04, 0xe9, 0xe4, 0xa6, 0x40, 0xee, + 0xea, 0xa6, 0x00, 0xf4, 0xe8, 0xa6, 0x40, 0xe1, 0xb0, 0xa6, 0x00, 0xe5, + 0xa6, 0xa6, 0x40, 0x44, 0x84, 0xc3, 0xec, 0xa6, 0x00, 0x43, 0x2e, 0xe1, + 0xb9, 0xa6, 0x00, 0xa8, 0x0a, 0xe9, 0xb7, 0xa6, 0x00, 0x42, 0x67, 0x6d, + 0xb4, 0xa6, 0x40, 0x43, 0x2e, 0xe1, 0xb8, 0xa6, 0x00, 0x42, 0x6b, 0x25, + 0xb6, 0xa6, 0x00, 0xef, 0xd6, 0xa6, 0x00, 0xf5, 0xc0, 0xa6, 0x40, 0x42, + 0xeb, 0x0d, 0xd1, 0xa6, 0x00, 0xa5, 0x10, 0xa9, 0x04, 0xf5, 0xcc, 0xa6, + 0x40, 0x42, 0x27, 0x01, 0xad, 0xa6, 0x00, 0xe9, 0xac, 0xa6, 0x40, 0xe5, + 0xa5, 0xa6, 0x00, 0xee, 0xe1, 0xa6, 0x00, 0x42, 0x42, 0xd6, 0xd0, 0xa6, + 0x40, 0xe1, 0xab, 0xa6, 0x00, 0xa5, 0xc1, 0x1d, 0x05, 0x45, 0xdc, 0x11, + 0xe9, 0xdd, 0xa6, 0x00, 0xb5, 0x01, 0xff, 0x42, 0xeb, 0x0d, 0xd7, 0xa6, + 0x00, 0xe5, 0xc8, 0xa6, 0x40, 0x02, 0x5a, 0x00, 0xc1, 0x18, 0x02, 0x26, + 0x02, 0xac, 0x15, 0x02, 0xd4, 0x02, 0x8e, 0x10, 0x02, 0x06, 0x00, 0x90, + 0x0a, 0x02, 0x60, 0x00, 0xc2, 0x02, 0x02, 0x25, 0x00, 0x01, 0xff, 0x42, + 0x27, 0x01, 0x06, 0x6a, 0x01, 0x43, 0x2b, 0xe9, 0x2b, 0x6a, 0x01, 0xab, + 0x8c, 0x02, 0xac, 0xfb, 0x01, 0xed, 0x11, 0x6a, 0x81, 0xd9, 0x01, 0xae, + 0x93, 0x01, 0xb0, 0x7f, 0xb2, 0x5d, 0xb3, 0x35, 0xb4, 0x23, 0xf5, 0x04, + 0x6a, 0x01, 0x44, 0xfe, 0xe7, 0x38, 0x6a, 0x01, 0xb7, 0x0d, 0xb9, 0x01, + 0xff, 0xe1, 0x1d, 0x6a, 0x01, 0x42, 0xcf, 0x8b, 0x1b, 0x6a, 0x41, 0xe1, + 0x2c, 0x6a, 0x01, 0x42, 0x30, 0x12, 0x21, 0x6a, 0x41, 0xa1, 0x06, 0x42, + 0xf2, 0x04, 0x35, 0x6a, 0x41, 0xe1, 0x0e, 0x6a, 0x01, 0xe5, 0x08, 0x6a, + 0x41, 0x44, 0x84, 0xc3, 0x37, 0x6a, 0x01, 0x43, 0x2e, 0xe1, 0x15, 0x6a, + 0x01, 0xa8, 0x0a, 0xe9, 0x14, 0x6a, 0x01, 0x42, 0x67, 0x6d, 0x12, 0x6a, + 0x41, 0x42, 0x6b, 0x25, 0x13, 0x6a, 0x01, 0xef, 0x29, 0x6a, 0x01, 0xf5, + 0x1c, 0x6a, 0x41, 0xa5, 0x10, 0xa9, 0x04, 0xf5, 0x23, 0x6a, 0x41, 0x42, + 0x27, 0x01, 0x0c, 0x6a, 0x01, 0xe9, 0x0b, 0x6a, 0x41, 0xe5, 0x07, 0x6a, + 0x01, 0xee, 0x31, 0x6a, 0x01, 0x42, 0x42, 0xd6, 0x25, 0x6a, 0x41, 0xa5, + 0x06, 0x43, 0xdb, 0x8d, 0x2a, 0x6a, 0x41, 0xe5, 0x22, 0x6a, 0x01, 0x42, + 0x42, 0xd6, 0x1f, 0x6a, 0x41, 0x43, 0x12, 0x52, 0x0f, 0x6a, 0x01, 0xa7, + 0x2f, 0xe9, 0x24, 0x6a, 0x01, 0xaa, 0x1d, 0x43, 0xa4, 0x02, 0x1e, 0x6a, + 0x01, 0x43, 0x29, 0x16, 0x20, 0x6a, 0x01, 0xf5, 0x19, 0x6a, 0x81, 0x06, + 0x42, 0x4b, 0x18, 0x09, 0x6a, 0x41, 0x42, 0xeb, 0x0d, 0x18, 0x6a, 0x41, + 0x43, 0x0d, 0x80, 0x10, 0x6a, 0x01, 0x43, 0xdb, 0x8d, 0x1a, 0x6a, 0x41, + 0x42, 0x24, 0x02, 0x28, 0x6a, 0x01, 0x45, 0x49, 0xdd, 0x27, 0x6a, 0x41, + 0xe1, 0x32, 0x6a, 0x01, 0xa2, 0x0a, 0x44, 0xb9, 0xe4, 0x0d, 0x6a, 0x01, + 0xef, 0x33, 0x6a, 0x41, 0x42, 0xda, 0x10, 0x34, 0x6a, 0x01, 0x42, 0x92, + 0x01, 0x30, 0x6a, 0x41, 0xe1, 0x0a, 0x6a, 0x01, 0xe9, 0x2d, 0x6a, 0x01, + 0x42, 0xcf, 0x8b, 0x2e, 0x6a, 0x41, 0xe1, 0x03, 0x6a, 0x01, 0xa5, 0x14, + 0xef, 0x2f, 0x6a, 0x01, 0x42, 0xc1, 0x08, 0x36, 0x6a, 0x01, 0xf5, 0x05, + 0x6a, 0x01, 0x43, 0x4e, 0xa1, 0x16, 0x6a, 0x41, 0xee, 0x26, 0x6a, 0x01, + 0xf4, 0x17, 0x6a, 0x41, 0xe1, 0xd5, 0x69, 0x01, 0xa6, 0x8f, 0x07, 0xa7, + 0xd8, 0x06, 0xe9, 0xd8, 0x69, 0x01, 0xab, 0x9d, 0x06, 0xac, 0xec, 0x05, + 0xad, 0x8e, 0x05, 0xae, 0x81, 0x03, 0xef, 0xd7, 0x69, 0x01, 0xb0, 0x98, + 0x02, 0xb2, 0xff, 0x01, 0xb3, 0xc9, 0x01, 0xb4, 0x7a, 0xb6, 0x66, 0xb7, + 0x53, 0xb9, 0x01, 0xff, 0x42, 0xea, 0x04, 0xac, 0x69, 0x01, 0x02, 0x97, + 0x02, 0x33, 0xa9, 0x27, 0x03, 0xcf, 0x8b, 0x17, 0xb5, 0x01, 0xff, 0x43, + 0x4c, 0x3d, 0xe1, 0x69, 0x01, 0x42, 0x7b, 0x00, 0xb2, 0x69, 0x01, 0xee, + 0xe5, 0x69, 0x01, 0xf1, 0xe4, 0x69, 0x41, 0x45, 0xff, 0x06, 0xe3, 0x69, + 0x01, 0x48, 0x59, 0xc1, 0xe2, 0x69, 0x41, 0x42, 0x27, 0x01, 0x94, 0x69, + 0x01, 0xf4, 0xae, 0x69, 0x41, 0x42, 0xeb, 0x0d, 0x97, 0x69, 0x81, 0x08, + 0xed, 0xbe, 0x69, 0x01, 0xf8, 0xdf, 0x69, 0x41, 0xf4, 0xcf, 0x69, 0x41, + 0x43, 0x2e, 0xe1, 0x9e, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xe5, 0xea, 0x69, + 0x01, 0xef, 0x75, 0x69, 0x41, 0xa5, 0x06, 0x42, 0x19, 0x04, 0x6a, 0x69, + 0x41, 0xe5, 0xec, 0x69, 0x01, 0x43, 0xdb, 0x8d, 0x9d, 0x69, 0x41, 0xa1, + 0x34, 0xa5, 0x23, 0xaf, 0x14, 0xb5, 0x01, 0xff, 0x42, 0xeb, 0x0d, 0x96, + 0x69, 0x01, 0xed, 0xaa, 0x69, 0xc1, 0x00, 0x42, 0xeb, 0x0d, 0x99, 0x69, + 0x41, 0xef, 0x79, 0x69, 0x81, 0x04, 0xf1, 0xd6, 0x69, 0x41, 0xee, 0x67, + 0x69, 0x41, 0xee, 0x00, 0x6a, 0x01, 0xf5, 0xfd, 0x69, 0xc1, 0x00, 0x43, + 0x86, 0x25, 0x9c, 0x69, 0x41, 0xe1, 0xdb, 0x69, 0x81, 0x0e, 0x48, 0x01, + 0xbc, 0x8f, 0x69, 0x01, 0xed, 0x72, 0x69, 0x01, 0xf1, 0xdc, 0x69, 0x41, + 0xf1, 0xa1, 0x69, 0x41, 0x42, 0xda, 0x10, 0x85, 0x69, 0x01, 0xa5, 0x23, + 0xa8, 0x0c, 0x42, 0x19, 0x04, 0x6d, 0x69, 0x01, 0x44, 0x67, 0xb7, 0x9b, + 0x69, 0x41, 0x45, 0xda, 0x8d, 0xa4, 0x69, 0x01, 0x42, 0x8a, 0x16, 0xde, + 0x69, 0x01, 0xef, 0xf3, 0x69, 0xc1, 0x00, 0xf1, 0xf4, 0x69, 0x41, 0xe5, + 0x76, 0x69, 0x01, 0xf4, 0x90, 0x69, 0x41, 0xa1, 0x0c, 0x43, 0x2e, 0xe1, + 0xef, 0x69, 0x01, 0x45, 0xbd, 0xdc, 0x82, 0x69, 0x41, 0xe5, 0xf0, 0x69, + 0x01, 0xf1, 0x6e, 0x69, 0x41, 0xa1, 0x47, 0xa5, 0x34, 0xe9, 0xf7, 0x69, + 0x81, 0x22, 0xef, 0x98, 0x69, 0x81, 0x17, 0xf5, 0xa0, 0x69, 0xc1, 0x00, + 0xa1, 0x08, 0xe5, 0xe9, 0x69, 0x01, 0xed, 0x91, 0x69, 0x41, 0xe5, 0x71, + 0x69, 0x01, 0xf1, 0xca, 0x69, 0x41, 0x42, 0x10, 0x00, 0xc2, 0x69, 0x41, + 0xa5, 0x01, 0xff, 0x42, 0x7b, 0x00, 0xb1, 0x69, 0x01, 0xf4, 0xcd, 0x69, + 0x41, 0x42, 0xba, 0x04, 0x84, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xf4, 0xbd, + 0x69, 0x01, 0xf8, 0xe7, 0x69, 0x41, 0x02, 0x9b, 0x01, 0x09, 0xe1, 0x6c, + 0x69, 0xc1, 0x00, 0xed, 0x78, 0x69, 0x41, 0x45, 0x78, 0xdb, 0xd1, 0x69, + 0x01, 0x45, 0x99, 0xdd, 0xda, 0x69, 0x41, 0xe1, 0xf6, 0x69, 0x81, 0x80, + 0x02, 0xa4, 0xd5, 0x01, 0xa7, 0x66, 0xaa, 0x4a, 0x43, 0xc6, 0xc0, 0xa8, + 0x69, 0x01, 0x02, 0xa4, 0x02, 0x2d, 0xb4, 0x1f, 0x03, 0x70, 0x73, 0x0f, + 0xba, 0x01, 0xff, 0x42, 0x6b, 0x32, 0xa7, 0x69, 0x01, 0x42, 0x02, 0x94, + 0xc1, 0x69, 0x41, 0x47, 0xc6, 0x08, 0xc0, 0x69, 0x01, 0x47, 0xea, 0xc5, + 0xad, 0x69, 0x41, 0x42, 0xea, 0x04, 0xce, 0x69, 0x01, 0x42, 0x9f, 0x03, + 0xbc, 0x69, 0x41, 0x43, 0x48, 0x9b, 0x7c, 0x69, 0x01, 0xb5, 0x01, 0xff, + 0xe5, 0x81, 0x69, 0x01, 0x42, 0x1f, 0x00, 0x6f, 0x69, 0x41, 0x45, 0x73, + 0xc9, 0x8a, 0x69, 0x01, 0xa5, 0x01, 0xff, 0xe5, 0xd4, 0x69, 0x81, 0x06, + 0x42, 0x42, 0xd6, 0x83, 0x69, 0x41, 0x46, 0xe3, 0xcd, 0xe8, 0x69, 0x41, + 0xe1, 0xf2, 0x69, 0x01, 0x46, 0x49, 0xd1, 0xa3, 0x69, 0x01, 0xa7, 0x3b, + 0xab, 0x15, 0xaf, 0x0b, 0x43, 0xdb, 0x8d, 0xe0, 0x69, 0xc1, 0x00, 0xf4, + 0xf1, 0x69, 0x41, 0xf0, 0x7d, 0x69, 0x01, 0xf1, 0x80, 0x69, 0x41, 0xe1, + 0x73, 0x69, 0x81, 0x19, 0x02, 0x97, 0x02, 0x0b, 0xb5, 0x01, 0xff, 0xed, + 0xcb, 0x69, 0x01, 0xf0, 0xb6, 0x69, 0x41, 0x43, 0x0d, 0x80, 0x89, 0x69, + 0x01, 0xf8, 0x7f, 0x69, 0x41, 0x43, 0xb1, 0x5b, 0xb9, 0x69, 0x41, 0xa5, + 0x13, 0xb5, 0x01, 0xff, 0x4b, 0xf7, 0x90, 0x93, 0x69, 0x01, 0xf0, 0xd0, + 0x69, 0x01, 0x43, 0x6f, 0x7b, 0x86, 0x69, 0x41, 0x43, 0xfe, 0xa0, 0x8d, + 0x69, 0x01, 0x43, 0xdb, 0x8d, 0xbf, 0x69, 0xc1, 0x00, 0xf4, 0x77, 0x69, + 0x41, 0xa1, 0x12, 0xa9, 0x06, 0x42, 0x24, 0x0a, 0x70, 0x69, 0x41, 0x42, + 0x6b, 0x32, 0xb0, 0x69, 0x01, 0xf1, 0x8e, 0x69, 0x41, 0x02, 0x5a, 0x00, + 0x04, 0xf0, 0x66, 0x69, 0x41, 0x48, 0xa9, 0xbe, 0xdd, 0x69, 0x01, 0x48, + 0x31, 0xc1, 0x92, 0x69, 0x41, 0xe5, 0xc5, 0x69, 0x41, 0xe1, 0xfb, 0x69, + 0x81, 0x45, 0x02, 0xbc, 0x04, 0x37, 0x42, 0x92, 0x01, 0xfa, 0x69, 0x01, + 0x44, 0xe6, 0xe4, 0xaf, 0x69, 0x01, 0x02, 0xbb, 0x87, 0x1d, 0xe9, 0xee, + 0x69, 0x81, 0x12, 0x42, 0x10, 0x00, 0xff, 0x69, 0x01, 0x43, 0xdb, 0x8d, + 0xc6, 0x69, 0x01, 0x42, 0x02, 0x00, 0xc9, 0x69, 0x41, 0x42, 0x27, 0x01, + 0xc3, 0x69, 0x41, 0xe1, 0x87, 0x69, 0x01, 0x42, 0x92, 0x01, 0xa5, 0x69, + 0x41, 0xe5, 0xa6, 0x69, 0x01, 0x42, 0x9f, 0x03, 0x68, 0x69, 0x41, 0xe5, + 0xb8, 0x69, 0x81, 0x08, 0xf0, 0x8b, 0x69, 0x01, 0xf1, 0xfc, 0x69, 0x41, + 0xed, 0x7e, 0x69, 0x41, 0xa1, 0x1e, 0x45, 0x96, 0xdb, 0xb3, 0x69, 0x01, + 0xaf, 0x04, 0xf5, 0xed, 0x69, 0x41, 0xed, 0x7b, 0x69, 0x01, 0xaf, 0x04, + 0xf1, 0xf8, 0x69, 0x41, 0xee, 0x6b, 0x69, 0x01, 0xf4, 0x8c, 0x69, 0x41, + 0x42, 0x57, 0x00, 0x9f, 0x69, 0x01, 0xf0, 0x69, 0x69, 0x01, 0xf1, 0xd9, + 0x69, 0x41, 0xa5, 0x21, 0xe9, 0xfe, 0x69, 0x01, 0xef, 0xf9, 0x69, 0x01, + 0x44, 0x0e, 0xe7, 0x74, 0x69, 0x01, 0xb5, 0x01, 0xff, 0x42, 0xf2, 0x04, + 0xab, 0x69, 0x01, 0x42, 0x1f, 0x00, 0x7a, 0x69, 0x01, 0xf4, 0xcc, 0x69, + 0x41, 0xf4, 0xb7, 0x69, 0x01, 0xb5, 0x01, 0xff, 0x42, 0xeb, 0x0d, 0x9a, + 0x69, 0x01, 0xf8, 0xe6, 0x69, 0x41, 0x02, 0xbc, 0x04, 0x26, 0xa8, 0x01, + 0xff, 0x45, 0x75, 0xd9, 0xa2, 0x69, 0x01, 0xa5, 0x06, 0x42, 0x19, 0x04, + 0x02, 0x6a, 0x41, 0xf4, 0xba, 0x69, 0x01, 0xb5, 0x01, 0xff, 0x42, 0xeb, + 0x0d, 0xc7, 0x69, 0x01, 0xee, 0x95, 0x69, 0x01, 0xf8, 0x88, 0x69, 0x41, + 0xf4, 0xa9, 0x69, 0x01, 0x42, 0x42, 0xd6, 0xb5, 0x69, 0x41, 0xe1, 0xbb, + 0x69, 0x81, 0x2a, 0x42, 0x27, 0x01, 0xeb, 0x69, 0x01, 0x42, 0x19, 0x04, + 0xd3, 0x69, 0x01, 0xb5, 0x01, 0xff, 0x80, 0x09, 0xe5, 0xb4, 0x69, 0xc1, + 0x00, 0xf4, 0xc4, 0x69, 0x41, 0x44, 0xcf, 0x06, 0xd2, 0x69, 0x01, 0xe9, + 0xc8, 0x69, 0x01, 0x46, 0x03, 0xd5, 0xf5, 0x69, 0x41, 0xf1, 0x01, 0x6a, + 0x41, 0xa6, 0xea, 0x05, 0x02, 0x40, 0x00, 0xd9, 0x05, 0xab, 0x9a, 0x05, + 0xac, 0xec, 0x04, 0xed, 0x51, 0x69, 0x81, 0xeb, 0x03, 0xae, 0xfb, 0x01, + 0xb0, 0xd3, 0x01, 0xb2, 0xb4, 0x01, 0xb3, 0x66, 0xb4, 0x30, 0xb7, 0x22, + 0xb9, 0x01, 0xff, 0x46, 0x51, 0xcf, 0x05, 0x69, 0x01, 0x42, 0x92, 0x01, + 0x0d, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xaf, 0x06, 0x43, 0xaf, 0xe9, 0x25, + 0x69, 0x41, 0xed, 0x34, 0x69, 0x01, 0xf0, 0x36, 0x69, 0x41, 0x42, 0xea, + 0x04, 0xf2, 0x68, 0x01, 0x44, 0x67, 0xb7, 0xfb, 0x68, 0x41, 0x42, 0xeb, + 0x0d, 0x4b, 0x69, 0x01, 0xa5, 0x15, 0xe9, 0x61, 0x69, 0x01, 0x42, 0xcf, + 0x8b, 0x4c, 0x69, 0x01, 0xf5, 0x11, 0x69, 0xc1, 0x00, 0x42, 0x20, 0x04, + 0x3d, 0x69, 0x41, 0x43, 0xfe, 0xa0, 0x28, 0x69, 0x01, 0xb5, 0x01, 0xff, + 0x43, 0x4c, 0x3d, 0x23, 0x69, 0x01, 0xee, 0x41, 0x69, 0x01, 0xf4, 0x00, + 0x69, 0x41, 0xa1, 0x42, 0x45, 0xda, 0x8d, 0x0c, 0x69, 0x01, 0xa8, 0x17, + 0x42, 0x20, 0x04, 0x24, 0x69, 0x01, 0xb5, 0x01, 0xff, 0x42, 0xeb, 0x0d, + 0x39, 0x69, 0x01, 0xe5, 0x03, 0x69, 0x01, 0xf5, 0x52, 0x69, 0x41, 0xa5, + 0x10, 0x42, 0x6b, 0x25, 0x54, 0x69, 0x01, 0x42, 0xcf, 0x8b, 0x5c, 0x69, + 0x01, 0xf5, 0x58, 0x69, 0x41, 0xe5, 0xfd, 0x68, 0x01, 0xb5, 0x01, 0xff, + 0x42, 0xeb, 0x0d, 0x01, 0x69, 0x01, 0xf8, 0x55, 0x69, 0x41, 0xf0, 0x07, + 0x69, 0x01, 0xf1, 0x64, 0x69, 0x41, 0x43, 0x0d, 0x80, 0x27, 0x69, 0x01, + 0x03, 0xb1, 0x01, 0x06, 0x42, 0x6b, 0x25, 0x4e, 0x69, 0x41, 0x44, 0x20, + 0xde, 0x60, 0x69, 0x01, 0x43, 0xae, 0x18, 0x4a, 0x69, 0x41, 0x42, 0xea, + 0x04, 0x35, 0x69, 0x01, 0xa5, 0x13, 0x42, 0xbf, 0x03, 0x2d, 0x69, 0x01, + 0xb5, 0x01, 0xff, 0xf1, 0x5d, 0x69, 0x01, 0x42, 0x0a, 0x07, 0x1b, 0x69, + 0x41, 0xe5, 0x5a, 0x69, 0x01, 0x44, 0xd6, 0xe7, 0x2e, 0x69, 0x41, 0xa4, + 0xd2, 0x01, 0xa7, 0x7e, 0xe9, 0x5b, 0x69, 0x01, 0xaa, 0x53, 0xb3, 0x31, + 0xb4, 0x1d, 0xf5, 0x57, 0x69, 0x01, 0xb9, 0x01, 0xff, 0x42, 0x57, 0x00, + 0xfa, 0x68, 0x01, 0x42, 0xf2, 0x04, 0x22, 0x69, 0x01, 0xe9, 0x4d, 0x69, + 0x01, 0x42, 0x30, 0x12, 0x2f, 0x69, 0x41, 0xa5, 0x06, 0x42, 0x67, 0x6d, + 0x62, 0x69, 0x41, 0xe5, 0x59, 0x69, 0x01, 0x42, 0x9f, 0x03, 0x38, 0x69, + 0x41, 0xa8, 0x12, 0x03, 0x48, 0x9b, 0x06, 0x42, 0x9f, 0x03, 0x40, 0x69, + 0x41, 0xf0, 0x1f, 0x69, 0x01, 0xf4, 0x2b, 0x69, 0x41, 0x42, 0x27, 0x01, + 0xf8, 0x68, 0x01, 0x42, 0x0a, 0x07, 0x46, 0x69, 0x41, 0x42, 0xea, 0x04, + 0x02, 0x69, 0x01, 0x02, 0x97, 0x02, 0x11, 0xe9, 0xf3, 0x68, 0x81, 0x06, + 0x43, 0xff, 0xe7, 0x47, 0x69, 0x41, 0x42, 0x27, 0x01, 0xf5, 0x68, 0x41, + 0x43, 0x0d, 0x80, 0x0e, 0x69, 0x01, 0xf4, 0xf7, 0x68, 0x41, 0xa7, 0x2b, + 0xab, 0x01, 0xff, 0x42, 0xea, 0x04, 0xfe, 0x68, 0x01, 0x02, 0x97, 0x02, + 0x12, 0x43, 0x48, 0x9b, 0x3c, 0x69, 0x01, 0x42, 0x24, 0x0a, 0xfc, 0x68, + 0x01, 0x43, 0x4e, 0xa1, 0x13, 0x69, 0x41, 0x43, 0x86, 0x25, 0x29, 0x69, + 0x01, 0x42, 0x0d, 0x00, 0x10, 0x69, 0x41, 0xa1, 0x12, 0x43, 0x2e, 0xe1, + 0x3b, 0x69, 0x01, 0x43, 0x61, 0xc3, 0x45, 0x69, 0x01, 0x44, 0x79, 0xcd, + 0x33, 0x69, 0x41, 0x42, 0x57, 0x00, 0x31, 0x69, 0x81, 0x04, 0xf0, 0x43, + 0x69, 0x41, 0x42, 0xeb, 0x0d, 0xf9, 0x68, 0x41, 0x42, 0x57, 0x00, 0x37, + 0x69, 0x01, 0xa5, 0x06, 0x42, 0x10, 0x00, 0x18, 0x69, 0x41, 0xe5, 0x15, + 0x69, 0x01, 0x42, 0x42, 0xd6, 0x09, 0x69, 0x41, 0xa1, 0x6d, 0xa2, 0x58, + 0xa5, 0x45, 0xa6, 0x26, 0x02, 0xbb, 0x87, 0x10, 0x43, 0x86, 0x30, 0x19, + 0x69, 0x01, 0xf5, 0x53, 0x69, 0x01, 0x43, 0xe1, 0xa3, 0x5e, 0x69, 0x41, + 0x43, 0xbb, 0x62, 0x1a, 0x69, 0x01, 0x43, 0x48, 0x9b, 0x1c, 0x69, 0x01, + 0x44, 0xca, 0xe6, 0x16, 0x69, 0x41, 0x02, 0x97, 0x02, 0x0f, 0x43, 0x48, + 0x9b, 0x32, 0x69, 0x01, 0xef, 0x1d, 0x69, 0xc1, 0x00, 0xee, 0xf4, 0x68, + 0x41, 0x42, 0xeb, 0x0d, 0x2a, 0x69, 0x01, 0xf4, 0x08, 0x69, 0x41, 0x43, + 0xfe, 0xa0, 0x50, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xee, 0x3e, 0x69, 0x01, + 0xf4, 0x0b, 0x69, 0x41, 0x42, 0xda, 0x10, 0x20, 0x69, 0x81, 0x06, 0x42, + 0x1f, 0x04, 0xf1, 0x68, 0x41, 0x46, 0x94, 0x1b, 0x63, 0x69, 0x41, 0x45, + 0x6e, 0xdb, 0x42, 0x69, 0x01, 0x45, 0x7b, 0xdb, 0x0a, 0x69, 0x41, 0xa5, + 0x12, 0x43, 0x48, 0x9b, 0xf6, 0x68, 0x01, 0x42, 0xcf, 0x8b, 0x5f, 0x69, + 0x01, 0x42, 0x9f, 0x03, 0x1e, 0x69, 0x41, 0x43, 0xfe, 0xa0, 0x4f, 0x69, + 0x01, 0xf4, 0x30, 0x69, 0x01, 0xb5, 0x01, 0xff, 0x43, 0x1e, 0xd1, 0x17, + 0x69, 0x01, 0xed, 0x44, 0x69, 0x41, 0xa5, 0x1f, 0xf5, 0x49, 0x69, 0x81, + 0x0c, 0x44, 0x06, 0xe8, 0x21, 0x69, 0x01, 0x43, 0x4e, 0xa1, 0x56, 0x69, + 0x41, 0xee, 0x3a, 0x69, 0x01, 0x42, 0x19, 0x04, 0x06, 0x69, 0x01, 0xf1, + 0x3f, 0x69, 0x41, 0xf4, 0x04, 0x69, 0x01, 0xb5, 0x01, 0xff, 0x47, 0x93, + 0xc4, 0xff, 0x68, 0x01, 0xed, 0x26, 0x69, 0x01, 0x48, 0xb1, 0xbf, 0x0f, + 0x69, 0x01, 0xf0, 0x2c, 0x69, 0x41, 0x42, 0xda, 0x10, 0x12, 0x69, 0x01, + 0x44, 0xda, 0x8d, 0x48, 0x69, 0x41, 0x42, 0xda, 0x10, 0x65, 0x69, 0x01, + 0x48, 0x61, 0xbc, 0x14, 0x69, 0x41, 0x44, 0x6e, 0xe4, 0xc0, 0x68, 0x01, + 0x43, 0x2e, 0xe9, 0xbc, 0x68, 0x01, 0xa7, 0xf5, 0x04, 0xab, 0xa7, 0x04, + 0xac, 0x90, 0x04, 0xad, 0x8d, 0x03, 0xae, 0xa3, 0x01, 0xb0, 0x8d, 0x01, + 0x42, 0x3d, 0x00, 0xc3, 0x68, 0x01, 0xb3, 0x63, 0xb4, 0x3e, 0x03, 0x0d, + 0x59, 0x30, 0xb7, 0x22, 0xb9, 0x01, 0xff, 0x42, 0xda, 0x10, 0xd9, 0x68, + 0x01, 0x43, 0x01, 0x94, 0xa7, 0x68, 0x01, 0xb5, 0x01, 0xff, 0x47, 0x5f, + 0xc3, 0xa2, 0x68, 0x01, 0xed, 0x91, 0x68, 0x01, 0x43, 0xaf, 0xe9, 0xe4, + 0x68, 0x41, 0x47, 0xd2, 0xc4, 0x92, 0x68, 0x01, 0x42, 0x50, 0x02, 0xd1, + 0x68, 0x41, 0x45, 0x89, 0xd9, 0xc1, 0x68, 0x01, 0xf8, 0xb1, 0x68, 0x41, + 0x46, 0x45, 0xcf, 0xac, 0x68, 0x01, 0xa5, 0x11, 0x02, 0x52, 0x00, 0x01, + 0xff, 0x45, 0x6b, 0xd9, 0xae, 0x68, 0x01, 0x44, 0x29, 0xd2, 0xc6, 0x68, + 0x41, 0xf4, 0xf0, 0x68, 0x01, 0x45, 0x2c, 0xe1, 0xba, 0x68, 0x41, 0xa5, + 0x14, 0xa8, 0x06, 0x44, 0x84, 0xa5, 0xaf, 0x68, 0x41, 0x42, 0x8a, 0x16, + 0xe8, 0x68, 0x01, 0x43, 0xff, 0xe7, 0xdb, 0x68, 0x41, 0x44, 0xaa, 0xe7, + 0xdc, 0x68, 0x01, 0x42, 0x42, 0xd6, 0xaa, 0x68, 0x41, 0x42, 0x92, 0x01, + 0xef, 0x68, 0x01, 0xa9, 0x01, 0xff, 0xee, 0xee, 0x68, 0x01, 0x45, 0xab, + 0xdf, 0x9c, 0x68, 0x41, 0xa1, 0xda, 0x01, 0xa4, 0xb3, 0x01, 0xa7, 0x74, + 0xaa, 0x52, 0xb3, 0x2d, 0xb4, 0x13, 0x50, 0xae, 0x62, 0x99, 0x68, 0x01, + 0xba, 0x01, 0xff, 0xe1, 0x90, 0x68, 0x01, 0x43, 0x5b, 0x52, 0xa3, 0x68, + 0x41, 0x42, 0xda, 0x10, 0xb4, 0x68, 0x01, 0xa5, 0x06, 0x46, 0x47, 0xd6, + 0x9a, 0x68, 0x41, 0xee, 0xd4, 0x68, 0x01, 0x45, 0x09, 0xe1, 0xb9, 0x68, + 0x41, 0xe1, 0xbe, 0x68, 0x01, 0x45, 0x66, 0xb7, 0xa5, 0x68, 0x01, 0x43, + 0x31, 0xe9, 0xbf, 0x68, 0x01, 0x42, 0x19, 0x04, 0xd3, 0x68, 0x01, 0xb5, + 0x01, 0xff, 0xee, 0xd6, 0x68, 0x01, 0x47, 0xf6, 0xc9, 0xc7, 0x68, 0x41, + 0xa1, 0x14, 0xa5, 0x06, 0x43, 0xff, 0xe7, 0xad, 0x68, 0x41, 0x43, 0xfe, + 0xa0, 0xc8, 0x68, 0x01, 0x42, 0x42, 0xd6, 0xe5, 0x68, 0x41, 0x42, 0xba, + 0x04, 0xc4, 0x68, 0x01, 0xed, 0xcf, 0x68, 0x41, 0x42, 0x6b, 0x32, 0xeb, + 0x68, 0x01, 0xa7, 0x14, 0xab, 0x06, 0x42, 0x19, 0x04, 0xd0, 0x68, 0x41, + 0x42, 0x6b, 0x32, 0x95, 0x68, 0x01, 0x49, 0xb1, 0xb6, 0x8f, 0x68, 0x41, + 0x42, 0x92, 0x01, 0x93, 0x68, 0x01, 0xf5, 0xca, 0x68, 0xc1, 0x00, 0x48, + 0xa1, 0xb9, 0xb0, 0x68, 0x01, 0x43, 0x87, 0x0f, 0xd2, 0x68, 0x01, 0xed, + 0xbb, 0x68, 0x01, 0x42, 0x10, 0x00, 0xb5, 0x68, 0x41, 0xa1, 0x1a, 0x02, + 0x97, 0x02, 0x0c, 0x43, 0x77, 0x8d, 0xab, 0x68, 0x01, 0x44, 0x5a, 0xc8, + 0x9d, 0x68, 0x41, 0x45, 0x8e, 0xd9, 0x94, 0x68, 0x01, 0xf4, 0xbd, 0x68, + 0x41, 0xed, 0xd7, 0x68, 0x01, 0xf0, 0xda, 0x68, 0x41, 0x46, 0x13, 0xd4, + 0xb2, 0x68, 0x01, 0xf1, 0xec, 0x68, 0x41, 0xa1, 0x61, 0xa2, 0x12, 0x46, + 0x9d, 0xd1, 0xb8, 0x68, 0x01, 0x43, 0x48, 0x9b, 0xe6, 0x68, 0x01, 0x43, + 0xdb, 0x8d, 0xe7, 0x68, 0x41, 0xa1, 0x35, 0xa5, 0x1c, 0xe9, 0xdd, 0x68, + 0x81, 0x0d, 0xb5, 0x01, 0xff, 0x43, 0x0d, 0x80, 0xcc, 0x68, 0x01, 0xe5, + 0xa4, 0x68, 0x41, 0x45, 0xab, 0xdf, 0xb7, 0x68, 0x01, 0xf4, 0xa6, 0x68, + 0x41, 0x45, 0x4b, 0xdb, 0x97, 0x68, 0x01, 0x43, 0x6f, 0x7b, 0xc2, 0x68, + 0x01, 0xb5, 0x01, 0xff, 0xed, 0x9b, 0x68, 0x01, 0xf8, 0xe1, 0x68, 0x41, + 0x02, 0x5a, 0x00, 0x06, 0x43, 0x4a, 0x18, 0xdf, 0x68, 0x41, 0x4c, 0xab, + 0x85, 0x9e, 0x68, 0x01, 0x46, 0xb5, 0xd4, 0xe3, 0x68, 0x41, 0x80, 0x0f, + 0xa5, 0x01, 0xff, 0x43, 0x32, 0x97, 0xde, 0x68, 0x01, 0x42, 0xdb, 0x02, + 0xcb, 0x68, 0x41, 0x47, 0x44, 0xc8, 0xb3, 0x68, 0x01, 0x45, 0x7a, 0xde, + 0xd8, 0x68, 0x41, 0xa1, 0x0a, 0x42, 0x8a, 0x16, 0xed, 0x68, 0x01, 0xf5, + 0xcd, 0x68, 0x41, 0xed, 0xc5, 0x68, 0x01, 0xf0, 0xb6, 0x68, 0x41, 0x42, + 0xda, 0x10, 0xa9, 0x68, 0x01, 0xa5, 0x13, 0x45, 0xb4, 0x62, 0xa8, 0x68, + 0x01, 0xb5, 0x01, 0xff, 0x4a, 0x46, 0xa6, 0xd5, 0x68, 0x01, 0xf4, 0xce, + 0x68, 0x41, 0x02, 0x92, 0x00, 0x20, 0xf4, 0xc9, 0x68, 0x01, 0xb5, 0x01, + 0xff, 0x43, 0x47, 0xc0, 0xa1, 0x68, 0x01, 0xed, 0xe2, 0x68, 0x01, 0xb3, + 0x01, 0xff, 0x43, 0x2e, 0xe1, 0xe0, 0x68, 0x01, 0x46, 0x27, 0xd2, 0x9f, + 0x68, 0x41, 0x47, 0x02, 0xc7, 0xea, 0x68, 0x01, 0x43, 0x46, 0xca, 0xe9, + 0x68, 0x41, 0x44, 0x56, 0xe4, 0x98, 0x68, 0x01, 0x02, 0x22, 0x00, 0x01, + 0xff, 0xf0, 0xa0, 0x68, 0x01, 0x43, 0x6f, 0x7b, 0x96, 0x68, 0x41, 0x02, + 0x0f, 0x18, 0x81, 0x03, 0x07, 0x3a, 0xc7, 0xf2, 0x02, 0xab, 0xc6, 0x02, + 0xac, 0xa9, 0x02, 0xad, 0xcc, 0x01, 0xae, 0x78, 0xb0, 0x5e, 0xb3, 0x34, + 0xb4, 0x1b, 0x44, 0xe6, 0xe7, 0x73, 0x68, 0x01, 0x45, 0x86, 0xe1, 0x76, + 0x68, 0x01, 0xb9, 0x01, 0xff, 0x4c, 0x8b, 0x84, 0x62, 0x68, 0x01, 0x45, + 0x9b, 0xdb, 0x5e, 0x68, 0x41, 0x43, 0xee, 0x81, 0x78, 0x68, 0x01, 0x02, + 0x2e, 0x02, 0x01, 0xff, 0x49, 0x94, 0xb2, 0x58, 0x68, 0x01, 0x45, 0x7a, + 0xde, 0x68, 0x68, 0x41, 0x46, 0x43, 0xc8, 0x77, 0x68, 0x01, 0x45, 0x91, + 0xdb, 0x5a, 0x68, 0x01, 0x02, 0xb0, 0x01, 0x0c, 0x43, 0x48, 0x9b, 0x59, + 0x68, 0x01, 0x42, 0x30, 0x12, 0x7d, 0x68, 0x41, 0x46, 0xd5, 0xd5, 0x69, + 0x68, 0x01, 0x46, 0x4d, 0xd6, 0x6a, 0x68, 0x41, 0x44, 0x3a, 0xe4, 0x72, + 0x68, 0x01, 0x45, 0x2d, 0xdb, 0x61, 0x68, 0x01, 0x42, 0x52, 0x00, 0x67, + 0x68, 0x01, 0x46, 0x71, 0xd6, 0x81, 0x68, 0x41, 0x47, 0x7d, 0xc6, 0x65, + 0x68, 0x01, 0xa7, 0x23, 0xb3, 0x15, 0x4b, 0x47, 0x9b, 0x64, 0x68, 0x01, + 0xb9, 0x01, 0xff, 0x45, 0x84, 0xd9, 0x80, 0x68, 0x01, 0x47, 0x95, 0xc7, + 0x6d, 0x68, 0x41, 0x42, 0x92, 0x01, 0x8b, 0x68, 0x01, 0x44, 0xcd, 0xc6, + 0x57, 0x68, 0x41, 0xa7, 0x0c, 0x4a, 0xda, 0xa3, 0x74, 0x68, 0x01, 0x42, + 0x19, 0x04, 0x8e, 0x68, 0x41, 0x43, 0xee, 0x81, 0x8a, 0x68, 0x01, 0x46, + 0x37, 0xd1, 0x75, 0x68, 0x01, 0x43, 0x4f, 0x9b, 0x7a, 0x68, 0xc1, 0x00, + 0x46, 0x99, 0x1a, 0x7b, 0x68, 0x41, 0xe1, 0x8c, 0x68, 0x81, 0x44, 0xa2, + 0x22, 0x02, 0x97, 0x02, 0x14, 0xa6, 0x06, 0x47, 0xcc, 0xc9, 0x7f, 0x68, + 0x41, 0x44, 0x69, 0x32, 0x7c, 0x68, 0x01, 0x49, 0xd8, 0xb3, 0x6b, 0x68, + 0x41, 0xf1, 0x79, 0x68, 0x01, 0x48, 0x61, 0xc1, 0x82, 0x68, 0x41, 0xa1, + 0x12, 0x44, 0x21, 0xe1, 0x7e, 0x68, 0x01, 0x4a, 0x94, 0xa3, 0x6c, 0x68, + 0x01, 0x43, 0x4f, 0x9b, 0x84, 0x68, 0x41, 0x47, 0x51, 0xc3, 0x5c, 0x68, + 0x01, 0x44, 0x6e, 0x7b, 0x5f, 0x68, 0x41, 0x03, 0x05, 0x80, 0x01, 0xff, + 0x46, 0x3d, 0xd1, 0x87, 0x68, 0x01, 0x43, 0x9a, 0xe9, 0x88, 0x68, 0x41, + 0xa1, 0x0c, 0x42, 0xf2, 0x04, 0x89, 0x68, 0x01, 0x48, 0x71, 0xbf, 0x5b, + 0x68, 0x41, 0x44, 0x22, 0xe4, 0x71, 0x68, 0x01, 0x4c, 0x13, 0x8a, 0x63, + 0x68, 0x41, 0x42, 0x57, 0x00, 0x60, 0x68, 0x01, 0x02, 0x97, 0x02, 0x0d, + 0xa9, 0x01, 0xff, 0x43, 0x6a, 0x16, 0x5d, 0x68, 0x01, 0xf1, 0x8d, 0x68, + 0x41, 0x43, 0x0d, 0x80, 0x86, 0x68, 0x01, 0x43, 0x6a, 0xe9, 0x6e, 0x68, + 0x01, 0x44, 0x2a, 0xe8, 0x70, 0x68, 0x41, 0xee, 0x6f, 0x68, 0x01, 0x44, + 0x97, 0xdb, 0x66, 0x68, 0x41, 0xe5, 0x85, 0x68, 0x01, 0x42, 0x42, 0xd6, + 0x83, 0x68, 0x41, 0x44, 0xee, 0xe4, 0x39, 0x68, 0x01, 0xa7, 0xc6, 0x04, + 0xab, 0x9f, 0x04, 0xac, 0xff, 0x03, 0xad, 0x8a, 0x03, 0xae, 0xdc, 0x01, + 0xb0, 0x88, 0x01, 0x43, 0xb0, 0x04, 0x3a, 0x68, 0x01, 0xb3, 0x3b, 0xb4, + 0x14, 0xb5, 0x06, 0x43, 0x02, 0x06, 0x52, 0x68, 0x41, 0x48, 0x21, 0xb9, + 0x20, 0x68, 0x01, 0x46, 0xf5, 0xd3, 0x44, 0x68, 0x41, 0x02, 0x97, 0x02, + 0x15, 0x48, 0x89, 0xbd, 0x06, 0x68, 0x01, 0xb5, 0x01, 0xff, 0x47, 0xb3, + 0xb6, 0x0c, 0x68, 0x01, 0x43, 0x1e, 0xd1, 0x2e, 0x68, 0x41, 0x43, 0x4c, + 0x3d, 0x4a, 0x68, 0x01, 0x46, 0x0b, 0xd6, 0x31, 0x68, 0x41, 0x46, 0x43, + 0xd1, 0x11, 0x68, 0x01, 0xa8, 0x1c, 0x43, 0x85, 0x44, 0x23, 0x68, 0x01, + 0xaf, 0x06, 0x42, 0x67, 0x6d, 0x15, 0x68, 0x41, 0x44, 0x8a, 0xe6, 0x30, + 0x68, 0x01, 0xf1, 0x3c, 0x68, 0x01, 0xf4, 0x4b, 0x68, 0x41, 0xa9, 0x13, + 0x4c, 0xcf, 0x8b, 0x40, 0x68, 0x01, 0xb5, 0x01, 0xff, 0x47, 0xca, 0xc6, + 0x05, 0x68, 0x01, 0xed, 0x37, 0x68, 0x41, 0x4a, 0xa6, 0xa5, 0x08, 0x68, + 0x01, 0x43, 0x6f, 0x7b, 0x3e, 0x68, 0x41, 0xa1, 0x31, 0x42, 0xf2, 0x04, + 0x2a, 0x68, 0x01, 0x03, 0xb6, 0x00, 0x06, 0x42, 0x50, 0x02, 0x2d, 0x68, + 0x41, 0x0b, 0x5e, 0x97, 0x11, 0x0d, 0x03, 0x80, 0x01, 0xff, 0x42, 0x16, + 0x00, 0x0a, 0x68, 0x01, 0x45, 0x98, 0xb2, 0x09, 0x68, 0x41, 0x42, 0x16, + 0x00, 0x03, 0x68, 0x01, 0x45, 0x98, 0xb2, 0x02, 0x68, 0x41, 0x49, 0x8e, + 0x84, 0x28, 0x68, 0x01, 0xa1, 0x0c, 0x45, 0x1b, 0xde, 0x1d, 0x68, 0x01, + 0x44, 0xf9, 0x90, 0x1b, 0x68, 0x41, 0xed, 0x4c, 0x68, 0x01, 0x43, 0x6f, + 0x7b, 0x42, 0x68, 0x41, 0xa1, 0x9e, 0x01, 0x02, 0x68, 0x0f, 0x8d, 0x01, + 0x42, 0x92, 0x01, 0x54, 0x68, 0x01, 0xa7, 0x68, 0x43, 0xee, 0x3e, 0x2c, + 0x68, 0x01, 0x43, 0x8b, 0xe6, 0x47, 0x68, 0x01, 0xab, 0x4e, 0x02, 0xa4, + 0x02, 0x40, 0xb4, 0x22, 0xb9, 0x0f, 0xba, 0x01, 0xff, 0x46, 0x8b, 0xbd, + 0x07, 0x68, 0x01, 0x47, 0xa4, 0xcc, 0x1f, 0x68, 0x41, 0x42, 0xf2, 0x04, + 0x49, 0x68, 0x01, 0xe9, 0x4f, 0x68, 0xc1, 0x00, 0x4c, 0xd3, 0x8d, 0x41, + 0x68, 0x41, 0x42, 0xea, 0x04, 0x3f, 0x68, 0x81, 0x06, 0x45, 0xe3, 0xde, + 0x12, 0x68, 0x41, 0x80, 0x01, 0xff, 0x44, 0x32, 0xe6, 0x19, 0x68, 0x01, + 0x44, 0xa6, 0xe6, 0x22, 0x68, 0x41, 0xe1, 0x51, 0x68, 0x01, 0x43, 0x48, + 0x9b, 0x4d, 0x68, 0x41, 0x45, 0x4b, 0xa6, 0x43, 0x68, 0x01, 0x44, 0xee, + 0x05, 0x14, 0x68, 0x41, 0x44, 0x1c, 0x01, 0x0d, 0x68, 0x01, 0x43, 0xad, + 0x54, 0x45, 0x68, 0x01, 0x03, 0x4f, 0xe9, 0x01, 0xff, 0x45, 0x8c, 0xbd, + 0x00, 0x68, 0x01, 0x45, 0x98, 0xde, 0x16, 0x68, 0x41, 0x49, 0x8e, 0x84, + 0x29, 0x68, 0x01, 0x49, 0x18, 0xad, 0x34, 0x68, 0x41, 0x46, 0x8b, 0xbd, + 0x04, 0x68, 0x01, 0xf1, 0x55, 0x68, 0x41, 0xa1, 0x39, 0x02, 0x16, 0x00, + 0x2b, 0x4b, 0xf9, 0x93, 0x25, 0x68, 0x01, 0x45, 0x9d, 0xd1, 0x24, 0x68, + 0x01, 0xaf, 0x06, 0x49, 0x65, 0xb7, 0x10, 0x68, 0x41, 0x4a, 0x7e, 0xa5, + 0x1e, 0x68, 0x01, 0x02, 0x19, 0x04, 0x01, 0xff, 0x43, 0xc5, 0x86, 0x36, + 0x68, 0x01, 0x43, 0x6a, 0xe9, 0x26, 0x68, 0x41, 0x43, 0x4a, 0x18, 0x48, + 0x68, 0x01, 0xf1, 0x56, 0x68, 0x41, 0xa5, 0x0c, 0x45, 0x7f, 0xde, 0x0f, + 0x68, 0x01, 0x47, 0x3c, 0xca, 0x3d, 0x68, 0x41, 0x44, 0xde, 0xe5, 0x1a, + 0x68, 0x01, 0xed, 0x4e, 0x68, 0x81, 0x0c, 0x43, 0x4a, 0x18, 0x32, 0x68, + 0x01, 0x42, 0xdb, 0x02, 0x46, 0x68, 0x41, 0x46, 0xf9, 0xcf, 0x0b, 0x68, + 0x01, 0x44, 0x00, 0x6b, 0x2b, 0x68, 0x01, 0x44, 0xea, 0xe7, 0x0e, 0x68, + 0x41, 0x44, 0x26, 0xe4, 0x17, 0x68, 0x01, 0x46, 0x31, 0xd1, 0x18, 0x68, + 0x01, 0x45, 0xd9, 0xde, 0x38, 0x68, 0x01, 0xf5, 0x53, 0x68, 0xc1, 0x00, + 0x43, 0x1e, 0xd1, 0x2f, 0x68, 0x41, 0xa1, 0x18, 0xa5, 0x0c, 0x43, 0x67, + 0xe9, 0x3b, 0x68, 0x01, 0x43, 0x4f, 0x9b, 0x35, 0x68, 0x41, 0xf4, 0x33, + 0x68, 0x01, 0x48, 0x09, 0xc2, 0x13, 0x68, 0x41, 0x42, 0xed, 0x06, 0x27, + 0x68, 0x01, 0xf1, 0x50, 0x68, 0x41, 0x48, 0x79, 0xba, 0x01, 0x68, 0x01, + 0x05, 0xc2, 0xd1, 0x01, 0xff, 0x46, 0xc1, 0xd1, 0x21, 0x68, 0x01, 0x43, + 0x6f, 0x7b, 0x1c, 0x68, 0x41, 0xe5, 0xca, 0xa6, 0x00, 0x42, 0x42, 0xd6, + 0xc5, 0xa6, 0x40, 0xe1, 0xdb, 0xa6, 0x00, 0x43, 0x12, 0x52, 0xb1, 0xa6, + 0x00, 0xa7, 0x3d, 0xe9, 0xcf, 0xa6, 0x00, 0xaa, 0x25, 0x43, 0xa4, 0x02, + 0xc3, 0xa6, 0x00, 0xb4, 0x11, 0xf5, 0xbd, 0xa6, 0x80, 0x06, 0x42, 0x4b, + 0x18, 0xa8, 0xa6, 0x40, 0x42, 0xeb, 0x0d, 0xbc, 0xa6, 0x40, 0x42, 0x27, + 0x01, 0xc7, 0xa6, 0x00, 0x42, 0x67, 0x6d, 0xeb, 0xa6, 0x40, 0x43, 0x0d, + 0x80, 0xb2, 0xa6, 0x00, 0x42, 0x27, 0x01, 0xc6, 0xa6, 0x00, 0x43, 0xdb, + 0x8d, 0xbe, 0xa6, 0x40, 0xe1, 0xd5, 0xa6, 0x00, 0x42, 0x24, 0x02, 0xd4, + 0xa6, 0x00, 0x45, 0x49, 0xdd, 0xd3, 0xa6, 0x40, 0xe1, 0xe3, 0xa6, 0x00, + 0xa2, 0x18, 0xa5, 0x0c, 0xe9, 0xce, 0xa6, 0x00, 0xef, 0xe6, 0xa6, 0x00, + 0xf5, 0xb5, 0xa6, 0x40, 0x43, 0xfe, 0xa0, 0xaf, 0xa6, 0x00, 0xee, 0xe2, + 0xa6, 0x40, 0x42, 0xda, 0x10, 0xe7, 0xa6, 0x00, 0x42, 0x92, 0x01, 0xe0, + 0xa6, 0x40, 0xe1, 0xaa, 0xa6, 0x00, 0x44, 0xba, 0xe4, 0xae, 0xa6, 0x00, + 0xe9, 0xdc, 0xa6, 0x00, 0x42, 0xcf, 0x8b, 0xde, 0xa6, 0x00, 0xf5, 0xcd, + 0xa6, 0x40, 0xe1, 0xa1, 0xa6, 0x00, 0xa5, 0x25, 0xe9, 0xe5, 0xa6, 0x00, + 0xef, 0xdf, 0xa6, 0x80, 0x10, 0x42, 0xc1, 0x08, 0xe9, 0xa6, 0x00, 0xf5, + 0xa3, 0xa6, 0x00, 0x43, 0x4e, 0xa1, 0xba, 0xa6, 0x40, 0x44, 0x0a, 0xe5, + 0xef, 0xa6, 0x00, 0x43, 0xa9, 0xe9, 0xee, 0xa6, 0x40, 0xee, 0xd2, 0xa6, + 0x00, 0xf4, 0xbb, 0xa6, 0x00, 0x42, 0x42, 0xd6, 0xc4, 0xa6, 0x40, 0x45, + 0x75, 0xd9, 0xed, 0xa6, 0x00, 0x42, 0x27, 0x01, 0xcb, 0xa6, 0x00, 0x42, + 0x19, 0x04, 0xd9, 0xa6, 0x00, 0xf5, 0xd8, 0xa6, 0x40, 0x43, 0xac, 0x10, + 0xf4, 0xa6, 0x00, 0xad, 0x01, 0xff, 0x0c, 0x3f, 0x85, 0x06, 0x42, 0x6c, + 0x00, 0xf5, 0xa6, 0x40, 0x47, 0x60, 0xc8, 0xf0, 0xa6, 0x00, 0x49, 0x96, + 0xb6, 0xf1, 0xa6, 0x40, 0x06, 0xb7, 0x7c, 0x71, 0xac, 0x01, 0xff, 0x48, + 0xa1, 0xb8, 0xf6, 0xf9, 0x01, 0x48, 0x49, 0xbc, 0x70, 0xfa, 0x01, 0xaf, + 0x01, 0xff, 0x42, 0x10, 0x00, 0x88, 0xf3, 0x81, 0x52, 0x02, 0xc6, 0x00, + 0x01, 0xff, 0x02, 0x5d, 0x00, 0x0a, 0x48, 0x59, 0x96, 0xf4, 0xf5, 0x01, + 0xf8, 0x17, 0x27, 0x40, 0x4b, 0x56, 0x96, 0xf6, 0xf5, 0x01, 0xf8, 0x10, + 0x26, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa2, 0x16, 0x45, 0x7b, + 0x64, 0x11, 0x26, 0x00, 0x47, 0xd7, 0xc8, 0xbd, 0x2b, 0x00, 0x48, 0x59, + 0x96, 0xf5, 0xf5, 0x01, 0xf8, 0x12, 0x26, 0x40, 0x45, 0xa8, 0xc4, 0xf3, + 0xf5, 0x01, 0x04, 0x92, 0x22, 0x01, 0xff, 0x45, 0x7b, 0x64, 0xf9, 0xf5, + 0x01, 0x48, 0x59, 0x96, 0xf7, 0xf5, 0x41, 0x50, 0xbc, 0x1a, 0x49, 0x27, + 0x40, 0x49, 0xa3, 0xac, 0x44, 0x1b, 0x00, 0x06, 0x2f, 0xd0, 0xeb, 0x06, + 0x06, 0xf4, 0x05, 0xa4, 0x06, 0x07, 0xf1, 0x04, 0xa1, 0x03, 0x0f, 0x27, + 0x2e, 0xc4, 0x01, 0x02, 0xc1, 0x08, 0x9d, 0x01, 0x05, 0xdb, 0x02, 0x70, + 0x0b, 0x70, 0x70, 0x06, 0x45, 0x72, 0xe1, 0x5c, 0x1b, 0x40, 0x48, 0xd1, + 0xbd, 0x3c, 0x1b, 0x80, 0x59, 0x45, 0x29, 0xdf, 0x42, 0x1b, 0x80, 0x4c, + 0x47, 0xdd, 0xca, 0x3a, 0x1b, 0x80, 0x3f, 0x44, 0xee, 0xcb, 0x38, 0x1b, + 0x80, 0x32, 0xb4, 0x0d, 0x43, 0xa9, 0x8f, 0x36, 0x1b, 0xc0, 0x00, 0x45, + 0x59, 0xd7, 0x37, 0x1b, 0x40, 0x45, 0x5d, 0x25, 0x3e, 0x1b, 0x80, 0x06, + 0x45, 0xa0, 0xc3, 0x35, 0x1b, 0x40, 0x80, 0x01, 0xff, 0x44, 0x18, 0xc4, + 0x3f, 0x1b, 0x80, 0x06, 0x46, 0x9f, 0xc3, 0x40, 0x1b, 0x40, 0x47, 0x9e, + 0xc3, 0x41, 0x1b, 0x40, 0x45, 0x40, 0xd7, 0x39, 0x1b, 0x40, 0x47, 0x9e, + 0xc3, 0x3b, 0x1b, 0x40, 0x47, 0x9e, 0xc3, 0x43, 0x1b, 0x40, 0x47, 0x9e, + 0xc3, 0x3d, 0x1b, 0x40, 0x45, 0x29, 0xda, 0x04, 0x1b, 0x00, 0x45, 0x79, + 0xda, 0x02, 0x1b, 0x00, 0x47, 0x1c, 0xcb, 0x34, 0x1b, 0x00, 0x46, 0xb7, + 0xd5, 0x03, 0x1b, 0x00, 0x04, 0xc2, 0xe7, 0x01, 0xff, 0x46, 0x3b, 0x21, + 0x01, 0x1b, 0x00, 0x45, 0xa6, 0xdf, 0x00, 0x1b, 0x40, 0xad, 0x0d, 0x43, + 0x9f, 0x01, 0x5a, 0x1b, 0xc0, 0x00, 0x48, 0x91, 0xb8, 0x7d, 0x1b, 0x40, + 0x43, 0x90, 0x1c, 0x5b, 0x1b, 0x80, 0x06, 0x45, 0x69, 0xdb, 0x60, 0x1b, + 0x40, 0x48, 0x91, 0xb8, 0x7e, 0x1b, 0x40, 0x0a, 0xae, 0x53, 0x97, 0x01, + 0xa4, 0x51, 0x0a, 0x3e, 0xa4, 0x26, 0x0b, 0xd1, 0x99, 0x01, 0xff, 0x08, + 0x29, 0xbb, 0x11, 0x06, 0x73, 0xd4, 0x01, 0xff, 0x42, 0x23, 0x02, 0x75, + 0x1b, 0x00, 0x42, 0x2a, 0x0d, 0x74, 0x1b, 0x40, 0x42, 0x6d, 0x00, 0x77, + 0x1b, 0x00, 0x42, 0x96, 0x07, 0x76, 0x1b, 0x40, 0x09, 0x41, 0xae, 0x17, + 0x06, 0x79, 0xd4, 0x01, 0xff, 0x43, 0x1c, 0x01, 0x78, 0x1b, 0x00, 0x43, + 0xa1, 0x01, 0x7c, 0x1b, 0x00, 0x43, 0x8b, 0x40, 0x79, 0x1b, 0x40, 0x42, + 0x6d, 0x00, 0x7a, 0x1b, 0x00, 0x42, 0x96, 0x07, 0x7b, 0x1b, 0x40, 0xa1, + 0x20, 0xa5, 0x12, 0x43, 0xa1, 0x01, 0x66, 0x1b, 0x00, 0x43, 0x0a, 0x0d, + 0x61, 0x1b, 0x00, 0x43, 0x8b, 0x40, 0x63, 0x1b, 0x40, 0x42, 0x1d, 0x01, + 0x62, 0x1b, 0x00, 0x43, 0x8b, 0x40, 0x68, 0x1b, 0x40, 0x43, 0x59, 0x07, + 0x67, 0x1b, 0x00, 0x43, 0xa1, 0x01, 0x69, 0x1b, 0x00, 0x42, 0x1d, 0x01, + 0x64, 0x1b, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x44, 0x02, 0xe5, 0x6a, 0x1b, + 0x00, 0x46, 0xb7, 0xd5, 0x65, 0x1b, 0x40, 0x45, 0x1a, 0xda, 0x72, 0x1b, + 0x00, 0x45, 0x64, 0xdb, 0x6c, 0x1b, 0x00, 0x44, 0xa7, 0x7f, 0x73, 0x1b, + 0x00, 0x47, 0xed, 0x78, 0x6f, 0x1b, 0x00, 0x04, 0xc5, 0xb1, 0x06, 0x45, + 0x6e, 0xe0, 0x6b, 0x1b, 0x40, 0x42, 0xc3, 0x01, 0x6e, 0x1b, 0x80, 0x0d, + 0x42, 0x1f, 0x01, 0x6d, 0x1b, 0xc0, 0x00, 0x4d, 0xe7, 0x78, 0x70, 0x1b, + 0x40, 0x4d, 0xe7, 0x78, 0x71, 0x1b, 0x40, 0xa1, 0xdc, 0x02, 0x42, 0x16, + 0x00, 0x29, 0x1b, 0x80, 0xce, 0x02, 0x42, 0x37, 0x00, 0x18, 0x1b, 0x80, + 0xc0, 0x02, 0x42, 0x68, 0x0f, 0x24, 0x1b, 0x80, 0x9c, 0x02, 0xa5, 0x8d, + 0x02, 0x42, 0x24, 0x02, 0x15, 0x1b, 0x80, 0xff, 0x01, 0x42, 0x22, 0x00, + 0x33, 0x1b, 0x00, 0x45, 0xae, 0xdc, 0x07, 0x1b, 0x80, 0xeb, 0x01, 0x42, + 0x77, 0x24, 0x1a, 0x1b, 0x80, 0xdd, 0x01, 0xab, 0xc3, 0x01, 0x42, 0x74, + 0x00, 0x2e, 0x1b, 0x80, 0xae, 0x01, 0x42, 0x6c, 0x00, 0x2b, 0x1b, 0x00, + 0xae, 0x8e, 0x01, 0x45, 0xc5, 0xde, 0x11, 0x1b, 0x80, 0x80, 0x01, 0x42, + 0xc1, 0x08, 0x27, 0x1b, 0x80, 0x73, 0x42, 0x71, 0x00, 0x2d, 0x1b, 0x80, + 0x5f, 0x42, 0x45, 0x05, 0x32, 0x1b, 0x80, 0x47, 0xb4, 0x25, 0x45, 0xff, + 0xe0, 0x09, 0x1b, 0x80, 0x18, 0x48, 0x41, 0xc2, 0x49, 0x1b, 0x00, 0x42, + 0xa9, 0x01, 0x2f, 0x1b, 0x00, 0x42, 0x20, 0x20, 0x2c, 0x1b, 0x00, 0x49, + 0x3d, 0xb8, 0x4a, 0x1b, 0x40, 0x47, 0x9e, 0xc3, 0x0a, 0x1b, 0x40, 0xe1, + 0x22, 0x1b, 0x80, 0x06, 0x49, 0x58, 0xb8, 0x47, 0x1b, 0x40, 0x80, 0x01, + 0xff, 0x45, 0x6c, 0xdd, 0x1d, 0x1b, 0x00, 0x4f, 0x99, 0x69, 0x1e, 0x1b, + 0x00, 0x44, 0x0d, 0xbb, 0x23, 0x1b, 0x40, 0x03, 0x4f, 0x20, 0x01, 0xff, + 0x42, 0x24, 0x02, 0x30, 0x1b, 0x00, 0x42, 0xc1, 0x08, 0x31, 0x1b, 0x40, + 0x45, 0xdf, 0xca, 0x0b, 0x1b, 0xc0, 0x00, 0x47, 0x9e, 0xc3, 0x0c, 0x1b, + 0x40, 0x46, 0xf5, 0xcd, 0x28, 0x1b, 0x40, 0x47, 0x9e, 0xc3, 0x12, 0x1b, + 0x40, 0xe1, 0x26, 0x1b, 0x80, 0x0c, 0x42, 0x24, 0x02, 0x17, 0x1b, 0x00, + 0x42, 0x20, 0x20, 0x1c, 0x1b, 0x40, 0x47, 0x82, 0xc3, 0x21, 0x1b, 0x40, + 0x46, 0xd3, 0xbd, 0x0d, 0x1b, 0xc0, 0x00, 0x47, 0x9e, 0xc3, 0x0e, 0x1b, + 0x40, 0xe1, 0x13, 0x1b, 0x80, 0x06, 0x49, 0x8a, 0xb0, 0x46, 0x1b, 0x40, + 0x4a, 0x9e, 0x69, 0x14, 0x1b, 0x00, 0x47, 0xfb, 0xc6, 0x45, 0x1b, 0x40, + 0x45, 0x45, 0xd7, 0x1b, 0x1b, 0x40, 0x47, 0x9e, 0xc3, 0x08, 0x1b, 0x40, + 0x45, 0x31, 0xd7, 0x16, 0x1b, 0x40, 0x47, 0xfb, 0xc6, 0x48, 0x1b, 0x00, + 0x44, 0xe5, 0x29, 0x0f, 0x1b, 0x40, 0x02, 0x6b, 0x00, 0x01, 0xff, 0x43, + 0x6b, 0x02, 0x25, 0x1b, 0x00, 0x05, 0x9a, 0x69, 0x01, 0xff, 0x49, 0xfd, + 0xac, 0x1f, 0x1b, 0x00, 0x49, 0x9f, 0x69, 0x20, 0x1b, 0x40, 0x45, 0x4f, + 0xd7, 0x19, 0x1b, 0x40, 0x48, 0x89, 0xb8, 0x2a, 0x1b, 0x40, 0x45, 0xae, + 0xdc, 0x10, 0x1b, 0x00, 0x44, 0xe5, 0x29, 0x05, 0x1b, 0x80, 0x0c, 0x4b, + 0x9a, 0x99, 0x4c, 0x1b, 0x00, 0x4b, 0xef, 0x9a, 0x4b, 0x1b, 0x40, 0x47, + 0x9e, 0xc3, 0x06, 0x1b, 0x40, 0x45, 0xd1, 0x09, 0x58, 0x1b, 0x00, 0xa6, + 0x2e, 0x44, 0xb8, 0x27, 0x59, 0x1b, 0x00, 0x43, 0xcd, 0x09, 0x51, 0x1b, + 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x50, 0x1b, 0x40, 0x44, + 0x25, 0x01, 0x53, 0x1b, 0x00, 0x42, 0x15, 0x02, 0x52, 0x1b, 0x40, 0x44, + 0x96, 0x1b, 0x57, 0x1b, 0x00, 0x42, 0x30, 0x27, 0x56, 0x1b, 0x40, 0x43, + 0xd7, 0x04, 0x55, 0x1b, 0x00, 0x43, 0xfb, 0x05, 0x54, 0x1b, 0x40, 0x02, + 0xc1, 0x08, 0x06, 0x44, 0x92, 0xe7, 0x5e, 0x1b, 0x40, 0x47, 0x40, 0xc9, + 0x5d, 0x1b, 0x00, 0x45, 0xe8, 0x6b, 0x5f, 0x1b, 0x40, 0x42, 0xd8, 0x00, + 0x6f, 0xf9, 0x01, 0x4a, 0x18, 0xa2, 0xc4, 0xf6, 0x01, 0x4b, 0xcb, 0x9b, + 0x56, 0xf9, 0x41, 0x43, 0xe1, 0x08, 0xa1, 0xf9, 0x01, 0x5e, 0x25, 0x12, + 0xf8, 0xf3, 0x41, 0xab, 0x0c, 0x42, 0x10, 0x00, 0x53, 0xf9, 0x01, 0x4b, + 0x89, 0x9b, 0x2b, 0xf4, 0x41, 0x80, 0x1f, 0x67, 0x5d, 0x04, 0xab, 0x27, + 0x00, 0xb3, 0x01, 0xff, 0x1a, 0x32, 0x1e, 0x06, 0x44, 0x63, 0x47, 0x08, + 0x00, 0x40, 0x49, 0xb4, 0xb3, 0x5b, 0x2b, 0x00, 0x4d, 0x85, 0x80, 0x5d, + 0x2b, 0x40, 0x4b, 0x5b, 0x98, 0x82, 0xf5, 0x01, 0x5a, 0x06, 0x20, 0x19, + 0xf5, 0x41, 0x80, 0x01, 0xff, 0x45, 0xb6, 0xd9, 0x7c, 0xf4, 0x01, 0x46, + 0xc0, 0x55, 0x7c, 0xf3, 0x01, 0x45, 0x64, 0x54, 0x24, 0xf4, 0x01, 0x46, + 0xf7, 0x06, 0xbc, 0xf6, 0x41, 0x45, 0x01, 0xda, 0xee, 0xf9, 0x01, 0xa3, + 0x89, 0x89, 0x01, 0xa4, 0xa2, 0x84, 0x01, 0xa5, 0xed, 0x80, 0x01, 0x4b, + 0x04, 0x94, 0x0b, 0x06, 0x00, 0x04, 0x66, 0xe5, 0xbf, 0x7d, 0x47, 0x29, + 0x30, 0x08, 0x27, 0x80, 0xa8, 0x7d, 0x4b, 0xfe, 0x95, 0x4d, 0x21, 0x00, + 0xac, 0xfd, 0x75, 0xad, 0xd9, 0x75, 0xae, 0xab, 0x60, 0xb0, 0xd0, 0x5b, + 0x47, 0xc8, 0xca, 0x52, 0x26, 0x00, 0xb2, 0xcf, 0x03, 0xb3, 0x88, 0x03, + 0xb4, 0xf9, 0x02, 0xb5, 0xd0, 0x02, 0xb6, 0x06, 0x42, 0x9e, 0x3e, 0x93, + 0xfa, 0x41, 0x06, 0x2b, 0xd1, 0x06, 0x45, 0xbb, 0xde, 0x51, 0xf9, 0x41, + 0x51, 0x78, 0x4a, 0x39, 0x0b, 0x01, 0x07, 0xf1, 0x04, 0x01, 0xff, 0xe1, + 0x00, 0x0b, 0x81, 0x8f, 0x02, 0xa2, 0x82, 0x02, 0x42, 0x73, 0x02, 0x17, + 0x0b, 0x01, 0xa4, 0xef, 0x01, 0xe5, 0x08, 0x0b, 0x81, 0xe5, 0x01, 0x42, + 0x0f, 0x18, 0x1f, 0x0b, 0x01, 0xa7, 0xcc, 0x01, 0xa8, 0xbf, 0x01, 0xe9, + 0x0c, 0x0b, 0x81, 0xb5, 0x01, 0x42, 0x18, 0x1e, 0x18, 0x0b, 0x01, 0x42, + 0x37, 0x01, 0x10, 0x0b, 0x01, 0x42, 0x68, 0x00, 0x2e, 0x0b, 0x01, 0x42, + 0x2a, 0x02, 0x28, 0x0b, 0x01, 0xae, 0x79, 0xef, 0x0a, 0x0b, 0x81, 0x70, + 0x42, 0x6f, 0x02, 0x1e, 0x0b, 0x01, 0x42, 0x88, 0x00, 0x2d, 0x0b, 0x01, + 0xb3, 0x4c, 0xb4, 0x3a, 0xf5, 0x0e, 0x0b, 0x81, 0x31, 0x42, 0x32, 0x00, + 0x2c, 0x0b, 0x01, 0xb8, 0x19, 0xb9, 0x0d, 0xba, 0x01, 0xff, 0xe5, 0x30, + 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x32, 0x0b, 0x41, 0xe5, 0x2b, 0x0b, 0x01, + 0x42, 0x4d, 0x00, 0x2a, 0x0b, 0x41, 0xe5, 0x11, 0x0b, 0x01, 0x42, 0x32, + 0x00, 0x13, 0x0b, 0x01, 0x42, 0x4d, 0x00, 0x12, 0x0b, 0x41, 0xf5, 0x0f, + 0x0b, 0x41, 0xe5, 0x19, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x1a, 0x0b, 0x01, + 0x42, 0x77, 0x00, 0x1d, 0x0b, 0x41, 0xe5, 0x2f, 0x0b, 0x01, 0xa8, 0x06, + 0x43, 0x93, 0x05, 0x34, 0x0b, 0x41, 0xe5, 0x31, 0x0b, 0x01, 0x42, 0x4d, + 0x00, 0x33, 0x0b, 0x41, 0xef, 0x0b, 0x0b, 0x41, 0xe5, 0x25, 0x0b, 0x01, + 0xa7, 0x0c, 0x42, 0xd2, 0x04, 0x27, 0x0b, 0x01, 0x42, 0x4d, 0x00, 0x26, + 0x0b, 0x41, 0xe5, 0x22, 0x0b, 0x01, 0x42, 0x32, 0x00, 0x24, 0x0b, 0x01, + 0x42, 0x4d, 0x00, 0x23, 0x0b, 0x41, 0xe9, 0x0d, 0x0b, 0x41, 0xe5, 0x35, + 0x0b, 0x01, 0x42, 0x2a, 0x02, 0x29, 0x0b, 0x41, 0xe5, 0x14, 0x0b, 0x01, + 0x42, 0x5b, 0x07, 0x15, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x16, 0x0b, 0x41, + 0xe5, 0x09, 0x0b, 0x41, 0xe5, 0x1b, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x1c, + 0x0b, 0x41, 0xe5, 0x20, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x21, 0x0b, 0x41, + 0xe1, 0x01, 0x0b, 0x81, 0x11, 0xe5, 0x06, 0x0b, 0x81, 0x08, 0xee, 0x04, + 0x0b, 0x01, 0xef, 0x02, 0x0b, 0x41, 0xe5, 0x07, 0x0b, 0x41, 0xee, 0x05, + 0x0b, 0x01, 0xef, 0x03, 0x0b, 0x41, 0x47, 0x65, 0xc5, 0x46, 0xf3, 0x01, + 0x4a, 0xb2, 0xa8, 0xb3, 0x20, 0x00, 0x02, 0x1e, 0x00, 0x01, 0xff, 0x49, + 0xdd, 0xab, 0xfa, 0xf6, 0x01, 0xad, 0x01, 0xff, 0x53, 0x19, 0x43, 0xe7, + 0xf3, 0x01, 0x45, 0xe0, 0x45, 0x97, 0xf6, 0x41, 0x4b, 0xeb, 0x94, 0x5f, + 0xf4, 0x01, 0x49, 0xc6, 0xb3, 0x9b, 0x26, 0x40, 0xa3, 0x36, 0x47, 0x41, + 0x5a, 0xa6, 0x22, 0x00, 0xb4, 0x06, 0x55, 0x49, 0x33, 0x43, 0x22, 0x40, + 0x04, 0x97, 0x0b, 0x15, 0x4c, 0x9f, 0x8b, 0x32, 0xf6, 0x01, 0xb2, 0x01, + 0xff, 0x43, 0x91, 0xa8, 0xd9, 0x2b, 0x00, 0x5a, 0x02, 0x1f, 0xe2, 0x26, + 0x40, 0xeb, 0x2a, 0x00, 0x80, 0x04, 0xed, 0x42, 0x20, 0x40, 0x49, 0x4a, + 0x1b, 0x17, 0x22, 0x40, 0x4b, 0xc4, 0x85, 0x0a, 0x26, 0x00, 0x49, 0xae, + 0xb0, 0x9c, 0x01, 0x41, 0x04, 0xe9, 0x05, 0xbd, 0x05, 0xe3, 0x12, 0x23, + 0x00, 0x43, 0x00, 0x96, 0x48, 0x26, 0x00, 0x07, 0xfe, 0x2e, 0x4b, 0x03, + 0xd0, 0x00, 0x11, 0x02, 0x35, 0x00, 0x01, 0xff, 0x4d, 0xd5, 0x7a, 0x9b, + 0xf6, 0x01, 0x4a, 0x9e, 0xa8, 0xa8, 0xf3, 0x41, 0x0a, 0x9b, 0x01, 0x06, + 0x53, 0x5c, 0x44, 0xb0, 0xfb, 0x41, 0x17, 0xcc, 0x2a, 0x1c, 0x18, 0xc7, + 0x27, 0x06, 0x57, 0xac, 0x2d, 0xb0, 0xf8, 0x41, 0x49, 0xa5, 0x01, 0x35, + 0x29, 0x00, 0x4a, 0xd5, 0x3b, 0xb1, 0xf8, 0x01, 0x47, 0x50, 0x02, 0x34, + 0x29, 0x40, 0x49, 0xea, 0x01, 0x36, 0x29, 0x00, 0x4a, 0xb3, 0x02, 0x37, + 0x29, 0x40, 0xa1, 0xd5, 0x04, 0xa3, 0xdc, 0x02, 0x49, 0xc8, 0xae, 0x8f, + 0x05, 0x00, 0xa5, 0xc7, 0x02, 0x49, 0xa0, 0x14, 0x89, 0x05, 0x00, 0x46, + 0x6e, 0x5d, 0x8a, 0x05, 0x00, 0x5e, 0x43, 0x12, 0x59, 0x05, 0x00, 0x4d, + 0xbd, 0x30, 0x5e, 0x05, 0x00, 0x07, 0x6f, 0x07, 0x01, 0xff, 0x06, 0xf2, + 0x04, 0x2d, 0x08, 0x35, 0x1d, 0x01, 0xff, 0x48, 0xd9, 0xbb, 0x87, 0x05, + 0x00, 0x04, 0x7d, 0x49, 0x06, 0x47, 0x22, 0xcd, 0x16, 0xfb, 0x40, 0x43, + 0x48, 0x3c, 0x14, 0xfb, 0x00, 0x43, 0x36, 0x06, 0x15, 0xfb, 0x00, 0x43, + 0x4e, 0x2b, 0x13, 0xfb, 0x00, 0x43, 0xb8, 0xe9, 0x17, 0xfb, 0x40, 0x43, + 0x11, 0xb7, 0x61, 0x05, 0x00, 0x43, 0x69, 0x19, 0x62, 0x05, 0x00, 0xa3, + 0xd6, 0x01, 0x42, 0x68, 0x0f, 0x64, 0x05, 0x00, 0xa5, 0xbf, 0x01, 0x43, + 0xb2, 0xaf, 0x86, 0x05, 0x00, 0xa7, 0xaa, 0x01, 0x42, 0x0b, 0x00, 0x70, + 0x05, 0x00, 0x43, 0x36, 0x06, 0x6b, 0x05, 0x00, 0xaa, 0x91, 0x01, 0x02, + 0x37, 0x01, 0x84, 0x01, 0x44, 0x12, 0xe6, 0x6c, 0x05, 0x00, 0x43, 0x31, + 0x04, 0x74, 0x05, 0x00, 0x43, 0x4e, 0x2b, 0x76, 0x05, 0x00, 0x42, 0xfe, + 0x25, 0x85, 0x05, 0x00, 0xb0, 0x5e, 0xb2, 0x52, 0xb3, 0x44, 0xb4, 0x32, + 0xb6, 0x26, 0x43, 0xb8, 0xe9, 0x6d, 0x05, 0x00, 0x42, 0x4b, 0x18, 0x75, + 0x05, 0x80, 0x0d, 0xba, 0x01, 0xff, 0xe1, 0x66, 0x05, 0x00, 0x42, 0xb0, + 0x01, 0x6a, 0x05, 0x40, 0x4c, 0xdb, 0x25, 0x88, 0x05, 0x00, 0x42, 0xa7, + 0x01, 0x82, 0x05, 0x40, 0x42, 0xd9, 0x1b, 0x7e, 0x05, 0x00, 0xef, 0x78, + 0x05, 0x40, 0x43, 0xde, 0xbb, 0x7f, 0x05, 0x00, 0xef, 0x69, 0x05, 0x00, + 0x49, 0x0b, 0xb7, 0x60, 0x05, 0x40, 0x42, 0x4e, 0x00, 0x7d, 0x05, 0x00, + 0x42, 0x22, 0x00, 0x77, 0x05, 0x40, 0xe1, 0x7c, 0x05, 0x00, 0x42, 0x4e, + 0x00, 0x80, 0x05, 0x40, 0x42, 0x4e, 0x00, 0x7a, 0x05, 0x00, 0x43, 0x40, + 0xe9, 0x83, 0x05, 0x40, 0xe8, 0x84, 0x05, 0x00, 0xee, 0x6f, 0x05, 0x40, + 0xe1, 0x71, 0x05, 0x00, 0x43, 0x3b, 0x3e, 0x7b, 0x05, 0x40, 0x43, 0xa5, + 0x02, 0x72, 0x05, 0x00, 0x42, 0x29, 0x02, 0x63, 0x05, 0x40, 0x42, 0x98, + 0x14, 0x65, 0x05, 0x00, 0xe8, 0x67, 0x05, 0x00, 0xf4, 0x68, 0x05, 0x40, + 0xe1, 0x6e, 0x05, 0x00, 0xa8, 0x04, 0xef, 0x81, 0x05, 0x40, 0xe1, 0x79, + 0x05, 0x00, 0x42, 0x4e, 0x00, 0x73, 0x05, 0x40, 0x4c, 0x97, 0x8a, 0x5b, + 0x05, 0x00, 0x4f, 0xae, 0x00, 0x5c, 0x05, 0x40, 0x0e, 0xea, 0x04, 0x06, + 0x44, 0x19, 0x04, 0x5d, 0x05, 0x40, 0x43, 0x11, 0xb7, 0x31, 0x05, 0x00, + 0x43, 0x69, 0x19, 0x32, 0x05, 0x00, 0xa3, 0xc9, 0x01, 0x42, 0x68, 0x0f, + 0x34, 0x05, 0x00, 0xa5, 0xb2, 0x01, 0x43, 0xb2, 0xaf, 0x56, 0x05, 0x00, + 0xa7, 0x9d, 0x01, 0x42, 0x0b, 0x00, 0x40, 0x05, 0x00, 0x43, 0x36, 0x06, + 0x3b, 0x05, 0x00, 0xaa, 0x84, 0x01, 0x02, 0x37, 0x01, 0x78, 0x44, 0x12, + 0xe6, 0x3c, 0x05, 0x00, 0x43, 0x31, 0x04, 0x44, 0x05, 0x00, 0x43, 0x4e, + 0x2b, 0x46, 0x05, 0x00, 0x42, 0xfe, 0x25, 0x55, 0x05, 0x00, 0xb0, 0x52, + 0xb2, 0x46, 0xb3, 0x38, 0xb4, 0x2c, 0xb6, 0x20, 0x43, 0xb8, 0xe9, 0x3d, + 0x05, 0x00, 0x42, 0x4b, 0x18, 0x45, 0x05, 0x80, 0x0d, 0xba, 0x01, 0xff, + 0xe1, 0x36, 0x05, 0x00, 0x42, 0xb0, 0x01, 0x3a, 0x05, 0x40, 0x42, 0xa7, + 0x01, 0x52, 0x05, 0x40, 0x42, 0xd9, 0x1b, 0x4e, 0x05, 0x00, 0xef, 0x48, + 0x05, 0x40, 0x43, 0xde, 0xbb, 0x4f, 0x05, 0x00, 0xef, 0x39, 0x05, 0x40, + 0x42, 0x4e, 0x00, 0x4d, 0x05, 0x00, 0x42, 0x22, 0x00, 0x47, 0x05, 0x40, + 0xe1, 0x4c, 0x05, 0x00, 0x42, 0x4e, 0x00, 0x50, 0x05, 0x40, 0x42, 0x4e, + 0x00, 0x4a, 0x05, 0x00, 0x43, 0x40, 0xe9, 0x53, 0x05, 0x40, 0xe8, 0x54, + 0x05, 0x00, 0xee, 0x3f, 0x05, 0x40, 0xe1, 0x41, 0x05, 0x00, 0x43, 0x3b, + 0x3e, 0x4b, 0x05, 0x40, 0x43, 0xa5, 0x02, 0x42, 0x05, 0x00, 0x42, 0x29, + 0x02, 0x33, 0x05, 0x40, 0x42, 0x98, 0x14, 0x35, 0x05, 0x00, 0xe8, 0x37, + 0x05, 0x00, 0xf4, 0x38, 0x05, 0x40, 0xe1, 0x3e, 0x05, 0x00, 0xa8, 0x04, + 0xef, 0x51, 0x05, 0x40, 0xe1, 0x49, 0x05, 0x00, 0x42, 0x4e, 0x00, 0x43, + 0x05, 0x40, 0x50, 0x79, 0x4a, 0x5f, 0x05, 0x00, 0x49, 0x4d, 0x32, 0x5a, + 0x05, 0x40, 0x80, 0x68, 0x07, 0xed, 0x05, 0x01, 0xff, 0x49, 0x77, 0xae, + 0x06, 0x06, 0x00, 0x06, 0xf4, 0x05, 0x17, 0x4b, 0x25, 0x94, 0x07, 0x06, + 0x00, 0x04, 0x6f, 0x02, 0x01, 0xff, 0x4a, 0x38, 0xa5, 0x09, 0x06, 0x00, + 0x51, 0x65, 0x58, 0x0a, 0x06, 0x40, 0x45, 0xd1, 0x09, 0x68, 0x06, 0x00, + 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x69, 0x06, 0x00, 0x43, 0xcd, 0x09, 0x61, + 0x06, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x60, 0x06, 0x40, + 0x44, 0x25, 0x01, 0x63, 0x06, 0x00, 0x42, 0x15, 0x02, 0x62, 0x06, 0x40, + 0x44, 0x96, 0x1b, 0x67, 0x06, 0x00, 0x42, 0x30, 0x27, 0x66, 0x06, 0x40, + 0x43, 0xd7, 0x04, 0x65, 0x06, 0x00, 0x43, 0xfb, 0x05, 0x64, 0x06, 0x40, + 0x52, 0x08, 0x4b, 0x87, 0x08, 0x00, 0xa3, 0x91, 0x51, 0xa4, 0xba, 0x50, + 0xa5, 0x96, 0x50, 0xa6, 0xc8, 0x4f, 0x02, 0x22, 0x00, 0xac, 0x4f, 0x4e, + 0x03, 0x72, 0x57, 0x06, 0x00, 0x45, 0x27, 0x4b, 0x50, 0x06, 0x80, 0xfd, + 0x4e, 0xac, 0xe0, 0x0f, 0x02, 0x6c, 0x00, 0xe3, 0x07, 0x07, 0xbf, 0x35, + 0xd2, 0x07, 0x05, 0xfb, 0x03, 0xbb, 0x07, 0xb0, 0x97, 0x07, 0x4d, 0xbd, + 0x30, 0x1f, 0x06, 0x00, 0xb2, 0xdf, 0x06, 0xb3, 0xa4, 0x01, 0xb4, 0x2b, + 0xb6, 0x0c, 0x50, 0x5e, 0x62, 0x5f, 0x06, 0x00, 0x48, 0x09, 0xc3, 0x59, + 0x06, 0x40, 0x4c, 0x75, 0x42, 0x8e, 0x08, 0x00, 0x0a, 0x71, 0x70, 0x01, + 0xff, 0x49, 0xf9, 0x10, 0x5c, 0x06, 0x00, 0x56, 0xe0, 0x30, 0x5b, 0x06, + 0x00, 0x4d, 0xe9, 0x30, 0x5a, 0x06, 0x40, 0xa1, 0x47, 0x52, 0xdc, 0x4c, + 0x6c, 0x06, 0x00, 0x04, 0xcd, 0x09, 0x0c, 0x5a, 0x84, 0x1f, 0x1e, 0x06, + 0x00, 0x51, 0x0f, 0x59, 0xe3, 0x08, 0x40, 0x05, 0x8f, 0xdd, 0x21, 0x08, + 0x9b, 0x0a, 0x11, 0x09, 0x8d, 0x0a, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xeb, + 0x08, 0x00, 0x45, 0x25, 0x06, 0xee, 0x08, 0x40, 0x45, 0x5c, 0x00, 0xea, + 0x08, 0x00, 0x45, 0x25, 0x06, 0xed, 0x08, 0x40, 0x45, 0x5c, 0x00, 0xec, + 0x08, 0x00, 0x45, 0x25, 0x06, 0xef, 0x08, 0x40, 0x4b, 0x43, 0x95, 0x73, + 0xfe, 0x00, 0x45, 0xc9, 0x1e, 0x40, 0x06, 0xc0, 0x00, 0x06, 0x50, 0x00, + 0x01, 0xff, 0x4e, 0xf9, 0x70, 0x71, 0xfe, 0x00, 0x0b, 0x00, 0x99, 0x06, + 0x4e, 0x5d, 0x0d, 0x85, 0x08, 0x40, 0x45, 0x56, 0x00, 0x83, 0x08, 0x00, + 0x43, 0x0f, 0x83, 0x84, 0x08, 0x40, 0x48, 0x47, 0x54, 0x1b, 0x06, 0x00, + 0x45, 0x2c, 0xdc, 0x51, 0x06, 0x80, 0x9b, 0x05, 0x04, 0xdc, 0x02, 0xc7, + 0x04, 0x05, 0x3d, 0x06, 0xc1, 0x01, 0x53, 0xff, 0x47, 0xde, 0x06, 0x00, + 0xb5, 0x90, 0x01, 0x06, 0x7f, 0x14, 0x01, 0xff, 0x02, 0x3b, 0x01, 0x71, + 0x0a, 0x8a, 0x41, 0x61, 0x44, 0x03, 0x07, 0xbf, 0xfb, 0x00, 0x0a, 0x62, + 0xa8, 0x4b, 0xb4, 0x06, 0x4b, 0x91, 0x9c, 0xc2, 0xfb, 0x40, 0x0a, 0x08, + 0x11, 0x22, 0x08, 0xc2, 0x06, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xb4, 0xfb, + 0x00, 0x45, 0x25, 0x06, 0xb5, 0xfb, 0x00, 0x0b, 0xca, 0x06, 0x01, 0xff, + 0x45, 0x5c, 0x00, 0xbd, 0xfb, 0x00, 0x45, 0x25, 0x06, 0xbe, 0xfb, 0x40, + 0x45, 0x5c, 0x00, 0xb6, 0xfb, 0x00, 0x45, 0x25, 0x06, 0xb7, 0xfb, 0x00, + 0x13, 0x9c, 0x01, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xb8, 0xfb, 0x00, 0x45, + 0x25, 0x06, 0xb9, 0xfb, 0x40, 0x45, 0x5c, 0x00, 0xc0, 0xfb, 0x00, 0x45, + 0x25, 0x06, 0xc1, 0xfb, 0x40, 0x45, 0x5c, 0x00, 0xba, 0xfb, 0x00, 0x45, + 0x25, 0x06, 0xbb, 0xfb, 0x40, 0x02, 0xc6, 0x00, 0x06, 0x57, 0x7e, 0x2d, + 0xbc, 0xfb, 0x40, 0x45, 0x5c, 0x00, 0xb2, 0xfb, 0x00, 0x45, 0x25, 0x06, + 0xb3, 0xfb, 0x40, 0x4c, 0x87, 0x85, 0x56, 0x06, 0x00, 0x43, 0x62, 0x32, + 0x52, 0x06, 0x80, 0x06, 0x58, 0x7f, 0x27, 0x9d, 0x08, 0x40, 0x80, 0x01, + 0xff, 0x45, 0x25, 0x06, 0xd0, 0x08, 0x00, 0x4d, 0xe0, 0x02, 0x7e, 0xfe, + 0x00, 0x4b, 0x45, 0x67, 0x7f, 0xfe, 0x40, 0x45, 0x15, 0x59, 0x19, 0x06, + 0x00, 0x02, 0xed, 0x06, 0xea, 0x02, 0x05, 0x2a, 0x0a, 0x5c, 0x45, 0x27, + 0x4b, 0x1a, 0x06, 0x00, 0x04, 0x0d, 0x04, 0x0c, 0x43, 0x0f, 0x83, 0xe5, + 0x06, 0x00, 0x43, 0x4d, 0x00, 0xe6, 0x06, 0x40, 0x44, 0xb4, 0x1e, 0xed, + 0x06, 0x00, 0x4f, 0x11, 0x6a, 0xd9, 0x08, 0x00, 0x44, 0x7e, 0xe7, 0xe3, + 0x06, 0x00, 0xb7, 0x01, 0xff, 0x42, 0xc4, 0x3f, 0xd3, 0x08, 0x00, 0x04, + 0xa0, 0x22, 0x01, 0xff, 0xa9, 0x18, 0x45, 0xa2, 0x45, 0xff, 0x0e, 0x01, + 0x44, 0x2a, 0xe7, 0xfe, 0x0e, 0x01, 0x45, 0xf7, 0x9a, 0xfd, 0x0e, 0x01, + 0x47, 0x18, 0xcc, 0x9b, 0x08, 0x40, 0x45, 0xad, 0xdd, 0x9a, 0x08, 0x00, + 0x46, 0x5d, 0xd5, 0x99, 0x08, 0x40, 0x43, 0x35, 0x06, 0xd6, 0x08, 0x00, + 0x54, 0xc1, 0x3c, 0xe1, 0x06, 0x00, 0xa6, 0xef, 0x01, 0x44, 0x13, 0x34, + 0xda, 0x06, 0x00, 0xac, 0xbf, 0x01, 0xad, 0xa5, 0x01, 0x44, 0xda, 0x40, + 0xe8, 0x06, 0x80, 0x97, 0x01, 0x43, 0x9d, 0x12, 0xd7, 0x08, 0x00, 0x4c, + 0x2b, 0x8d, 0xdf, 0x06, 0x00, 0xb3, 0x77, 0xb4, 0x69, 0x58, 0x6f, 0x28, + 0xe0, 0x06, 0x00, 0xb7, 0x1c, 0x43, 0x4d, 0x00, 0xe7, 0x06, 0x80, 0x0f, + 0x02, 0x59, 0x00, 0x01, 0xff, 0xe8, 0xcd, 0x08, 0x00, 0x42, 0x9e, 0x01, + 0x17, 0x06, 0x40, 0x5b, 0xd8, 0x17, 0xcb, 0x08, 0x40, 0x42, 0xc4, 0x3f, + 0xf3, 0x08, 0x00, 0x04, 0xa0, 0x22, 0x01, 0xff, 0xa1, 0x1a, 0x43, 0x73, + 0xe9, 0xde, 0x08, 0x00, 0x02, 0x45, 0x05, 0x06, 0x45, 0x59, 0xe1, 0xdf, + 0x08, 0x40, 0xe8, 0xcc, 0x08, 0x00, 0x43, 0xc2, 0x3a, 0xdd, 0x08, 0x40, + 0x45, 0x53, 0xdd, 0x98, 0x08, 0x00, 0x46, 0xb9, 0xd3, 0xdc, 0x08, 0x00, + 0x45, 0x6f, 0xdf, 0xd4, 0x08, 0x00, 0x47, 0x62, 0xcb, 0xdb, 0x08, 0x00, + 0x4b, 0x1b, 0x9b, 0xda, 0x08, 0x40, 0x42, 0xe6, 0x06, 0x15, 0x06, 0x00, + 0x49, 0x83, 0x0e, 0xdb, 0x06, 0x40, 0x42, 0xe8, 0x01, 0xd5, 0x08, 0x00, + 0x43, 0xca, 0x08, 0xdc, 0x06, 0x00, 0x49, 0xf6, 0xb0, 0xe1, 0x08, 0x40, + 0x4b, 0x15, 0x6a, 0xd8, 0x08, 0x40, 0x44, 0xa3, 0x45, 0xe4, 0x06, 0x00, + 0x05, 0x14, 0x34, 0x01, 0xff, 0x4b, 0xd8, 0x14, 0xd8, 0x06, 0x00, 0x4c, + 0xe1, 0x02, 0xe2, 0x06, 0x40, 0x47, 0xb6, 0xc4, 0xd9, 0x06, 0x00, 0x08, + 0x35, 0x1d, 0x01, 0xff, 0x0a, 0x34, 0x9f, 0x0c, 0x5e, 0x9d, 0x12, 0xd7, + 0x06, 0x00, 0x5e, 0xbb, 0x12, 0xd6, 0x06, 0x40, 0x4c, 0x3b, 0x89, 0x16, + 0x06, 0x00, 0x4a, 0xf6, 0xaa, 0x16, 0x06, 0x40, 0x48, 0x01, 0xba, 0xca, + 0x08, 0x00, 0x4e, 0xa7, 0x73, 0xe0, 0x08, 0x40, 0x47, 0x02, 0xba, 0xc9, + 0x08, 0x00, 0x43, 0x8f, 0x00, 0x18, 0x06, 0x40, 0x4f, 0x35, 0x64, 0x11, + 0x06, 0x00, 0x45, 0x07, 0xde, 0x0f, 0x06, 0x00, 0x02, 0x71, 0x00, 0x33, + 0xb3, 0x06, 0x49, 0x2a, 0xb6, 0x14, 0x06, 0x40, 0xa1, 0x11, 0x06, 0xa5, + 0xd2, 0x01, 0xff, 0x49, 0xa8, 0x39, 0xfd, 0x06, 0x00, 0x50, 0x9e, 0x5f, + 0xfe, 0x06, 0x40, 0x43, 0xfc, 0xb0, 0x03, 0x06, 0x00, 0x5a, 0x80, 0x1e, + 0x10, 0x06, 0x00, 0x44, 0x52, 0xe6, 0x04, 0x06, 0x00, 0x43, 0x26, 0x41, + 0x01, 0x06, 0x40, 0x4f, 0x8e, 0x65, 0x13, 0x06, 0x00, 0x50, 0x4e, 0x5d, + 0x12, 0x06, 0x40, 0x80, 0x01, 0xff, 0x4d, 0xe0, 0x02, 0x7c, 0xfe, 0x00, + 0x4b, 0x45, 0x67, 0x7d, 0xfe, 0x40, 0xa1, 0x23, 0x4d, 0xbf, 0x7b, 0x5d, + 0x06, 0x00, 0x0f, 0x4e, 0x2e, 0x06, 0x63, 0x23, 0x0a, 0xec, 0x06, 0x40, + 0x45, 0x5c, 0x00, 0xf8, 0x08, 0x80, 0x06, 0x45, 0x25, 0x06, 0xfa, 0x08, + 0x40, 0x49, 0x4a, 0x37, 0xfd, 0x08, 0x40, 0x4e, 0x1f, 0x72, 0x88, 0x08, + 0x00, 0xf9, 0x08, 0x06, 0x40, 0x4b, 0xd8, 0x93, 0x6a, 0x06, 0x00, 0x51, + 0x35, 0x55, 0x91, 0x08, 0x00, 0x4e, 0x81, 0x72, 0xe9, 0x06, 0x00, 0xaf, + 0x01, 0xff, 0x4f, 0x6f, 0x66, 0x0e, 0x06, 0x00, 0x4e, 0xfd, 0x76, 0x90, + 0x08, 0x40, 0x48, 0x69, 0xbb, 0xf1, 0x08, 0x00, 0x48, 0xf9, 0x70, 0xf0, + 0x08, 0x00, 0x48, 0xb1, 0xbd, 0xf2, 0x08, 0x40, 0x4a, 0xeb, 0x46, 0x05, + 0x06, 0x00, 0x44, 0xdb, 0x02, 0x00, 0x06, 0x40, 0x03, 0x65, 0x32, 0xe7, + 0x07, 0x03, 0xbb, 0x00, 0xd6, 0x07, 0x0b, 0x10, 0x4e, 0x01, 0xff, 0xa1, + 0xc2, 0x07, 0x43, 0x27, 0x85, 0x01, 0xee, 0x01, 0xa4, 0xe8, 0x05, 0x43, + 0xb2, 0xaf, 0x10, 0xee, 0x01, 0x45, 0x5c, 0x94, 0x1b, 0xee, 0x01, 0x43, + 0xbe, 0x1e, 0x07, 0xee, 0x01, 0x08, 0xd7, 0x14, 0xd1, 0x04, 0x44, 0x13, + 0x34, 0x02, 0xee, 0x01, 0xab, 0xbc, 0x04, 0xac, 0xfc, 0x02, 0x44, 0xb4, + 0x1e, 0x0c, 0xee, 0x01, 0x44, 0xda, 0x40, 0x0d, 0xee, 0x01, 0x09, 0x14, + 0x3a, 0xdf, 0x02, 0x43, 0x9d, 0x12, 0x12, 0xee, 0x01, 0x43, 0xe9, 0x74, + 0x13, 0xee, 0x01, 0xb3, 0xa0, 0x01, 0xb4, 0x1b, 0x43, 0x0f, 0x83, 0x05, + 0xee, 0x01, 0x43, 0x4d, 0x00, 0x09, 0xee, 0x01, 0x02, 0x59, 0x00, 0x01, + 0xff, 0xe8, 0x1a, 0xee, 0x01, 0x42, 0x9e, 0x01, 0x06, 0xee, 0x41, 0xa1, + 0x15, 0x42, 0x4e, 0x00, 0x15, 0xee, 0x01, 0xa8, 0x01, 0xff, 0x42, 0x13, + 0x00, 0x18, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x16, 0xee, 0x41, 0xe8, 0x08, + 0xee, 0x01, 0x05, 0xb0, 0x15, 0x01, 0xff, 0x43, 0x35, 0x06, 0x4f, 0xee, + 0x01, 0xa4, 0x44, 0x45, 0x5c, 0x94, 0x5b, 0xee, 0x01, 0x43, 0xbe, 0x1e, + 0x47, 0xee, 0x01, 0x44, 0x13, 0x34, 0x42, 0xee, 0x01, 0x44, 0xd1, 0x3c, + 0x57, 0xee, 0x01, 0x43, 0xb0, 0x00, 0x4b, 0xee, 0x01, 0x44, 0xda, 0x40, + 0x4d, 0xee, 0x01, 0x43, 0x9d, 0x12, 0x52, 0xee, 0x01, 0xb3, 0x06, 0x43, + 0x4d, 0x00, 0x49, 0xee, 0x41, 0x42, 0xe8, 0x01, 0x51, 0xee, 0x01, 0x43, + 0xca, 0x08, 0x4e, 0xee, 0x01, 0x44, 0x11, 0xd1, 0x54, 0xee, 0x41, 0x42, + 0xe8, 0x01, 0x59, 0xee, 0x01, 0x07, 0xc2, 0x3c, 0x01, 0xff, 0x44, 0xda, + 0x40, 0x5d, 0xee, 0x01, 0x43, 0x9d, 0x12, 0x5f, 0xee, 0x41, 0x42, 0xe8, + 0x01, 0x11, 0xee, 0x01, 0x43, 0xca, 0x08, 0x0e, 0xee, 0x01, 0x44, 0x11, + 0xd1, 0x14, 0xee, 0x01, 0x09, 0x66, 0xa9, 0x01, 0xff, 0x43, 0x35, 0x06, + 0x6f, 0xee, 0x01, 0x43, 0x27, 0x85, 0x61, 0xee, 0x01, 0xa4, 0x74, 0x43, + 0xb2, 0xaf, 0x70, 0xee, 0x01, 0x45, 0x5c, 0x94, 0x7b, 0xee, 0x01, 0xa8, + 0x5a, 0x44, 0x13, 0x34, 0x62, 0xee, 0x01, 0xab, 0x46, 0x44, 0xb4, 0x1e, + 0x6c, 0xee, 0x01, 0x44, 0xda, 0x40, 0x6d, 0xee, 0x01, 0x43, 0x9d, 0x12, + 0x72, 0xee, 0x01, 0xb3, 0x20, 0xb4, 0x0c, 0x43, 0x4d, 0x00, 0x69, 0xee, + 0x01, 0x43, 0x15, 0x78, 0x7a, 0xee, 0x41, 0x42, 0xe6, 0x06, 0x68, 0xee, + 0x01, 0x42, 0x4e, 0x00, 0x75, 0xee, 0x01, 0x43, 0x3b, 0x3e, 0x76, 0xee, + 0x41, 0x42, 0xe8, 0x01, 0x71, 0xee, 0x01, 0x43, 0xca, 0x08, 0x6e, 0xee, + 0x01, 0x44, 0x11, 0xd1, 0x74, 0xee, 0x41, 0x42, 0x9e, 0x12, 0x6a, 0xee, + 0x01, 0x43, 0xbe, 0x1e, 0x77, 0xee, 0x41, 0x42, 0xe6, 0x06, 0x67, 0xee, + 0x01, 0x42, 0x4e, 0x00, 0x64, 0xee, 0x41, 0x42, 0xe8, 0x01, 0x79, 0xee, + 0x01, 0x07, 0xc2, 0x3c, 0x01, 0xff, 0x43, 0x27, 0x85, 0x7c, 0xee, 0x01, + 0x43, 0xb2, 0xaf, 0x7e, 0xee, 0x41, 0x4c, 0xf7, 0x87, 0xf1, 0xee, 0x01, + 0x5a, 0xb4, 0x1e, 0xf0, 0xee, 0x41, 0x42, 0x57, 0x00, 0x0b, 0xee, 0x01, + 0x06, 0x6d, 0xd4, 0x01, 0xff, 0xa1, 0xa3, 0x01, 0x43, 0x27, 0x85, 0x81, + 0xee, 0x01, 0x02, 0x68, 0x0f, 0x90, 0x01, 0x43, 0xb2, 0xaf, 0x90, 0xee, + 0x01, 0x45, 0x5c, 0x94, 0x9b, 0xee, 0x01, 0xa8, 0x76, 0x44, 0x13, 0x34, + 0x82, 0xee, 0x01, 0x44, 0xd1, 0x3c, 0x97, 0xee, 0x01, 0x43, 0xb0, 0x00, + 0x8b, 0xee, 0x01, 0x44, 0xb4, 0x1e, 0x8c, 0xee, 0x01, 0x44, 0xda, 0x40, + 0x8d, 0xee, 0x01, 0x43, 0x9d, 0x12, 0x92, 0xee, 0x01, 0x43, 0xe9, 0x74, + 0x93, 0xee, 0x01, 0xb3, 0x38, 0xb4, 0x1b, 0x43, 0x0f, 0x83, 0x85, 0xee, + 0x01, 0x43, 0x4d, 0x00, 0x89, 0xee, 0x01, 0x02, 0x59, 0x00, 0x01, 0xff, + 0xe8, 0x9a, 0xee, 0x01, 0x42, 0x9e, 0x01, 0x86, 0xee, 0x41, 0x42, 0xe6, + 0x06, 0x88, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x95, 0xee, 0x01, 0xa8, 0x01, + 0xff, 0x42, 0x13, 0x00, 0x98, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x96, 0xee, + 0x41, 0x42, 0xe8, 0x01, 0x91, 0xee, 0x01, 0x43, 0xca, 0x08, 0x8e, 0xee, + 0x01, 0x44, 0x11, 0xd1, 0x94, 0xee, 0x41, 0x42, 0xe6, 0x06, 0x87, 0xee, + 0x01, 0x42, 0x4e, 0x00, 0x84, 0xee, 0x41, 0xe4, 0x99, 0xee, 0x01, 0xec, + 0x83, 0xee, 0x41, 0x42, 0x9e, 0x01, 0x8f, 0xee, 0x01, 0x43, 0x68, 0x00, + 0x80, 0xee, 0x41, 0x42, 0x9e, 0x12, 0x0a, 0xee, 0x01, 0x43, 0xbe, 0x1e, + 0x17, 0xee, 0x41, 0x43, 0x35, 0x06, 0x2f, 0xee, 0x01, 0x43, 0x27, 0x85, + 0x21, 0xee, 0x01, 0x43, 0x92, 0xae, 0x39, 0xee, 0x01, 0x43, 0xb2, 0xaf, + 0x30, 0xee, 0x01, 0x45, 0x5c, 0x94, 0x3b, 0xee, 0x01, 0xa8, 0x54, 0x44, + 0x13, 0x34, 0x22, 0xee, 0x01, 0xab, 0x40, 0x43, 0xb0, 0x00, 0x2b, 0xee, + 0x01, 0x44, 0xb4, 0x1e, 0x2c, 0xee, 0x01, 0x44, 0xda, 0x40, 0x2d, 0xee, + 0x01, 0x43, 0x9d, 0x12, 0x32, 0xee, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x43, + 0x4d, 0x00, 0x29, 0xee, 0x41, 0x42, 0x4e, 0x00, 0x35, 0xee, 0x01, 0x43, + 0x3b, 0x3e, 0x36, 0xee, 0x41, 0x42, 0xe8, 0x01, 0x31, 0xee, 0x01, 0x43, + 0xca, 0x08, 0x2e, 0xee, 0x01, 0x44, 0x11, 0xd1, 0x34, 0xee, 0x41, 0x42, + 0x9e, 0x12, 0x2a, 0xee, 0x01, 0x43, 0xbe, 0x1e, 0x37, 0xee, 0x41, 0x42, + 0xe6, 0x06, 0x27, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x24, 0xee, 0x41, 0xa1, + 0xc6, 0x01, 0xaf, 0x01, 0xff, 0x06, 0xc3, 0x3c, 0xa6, 0x01, 0x0c, 0x45, + 0x70, 0x01, 0xff, 0x43, 0x35, 0x06, 0xaf, 0xee, 0x01, 0x43, 0x27, 0x85, + 0xa1, 0xee, 0x01, 0x02, 0x68, 0x0f, 0x88, 0x01, 0x43, 0xb2, 0xaf, 0xb0, + 0xee, 0x01, 0x45, 0x5c, 0x94, 0xbb, 0xee, 0x01, 0x43, 0xbe, 0x1e, 0xa7, + 0xee, 0x01, 0x44, 0x13, 0x34, 0xa2, 0xee, 0x01, 0x44, 0xd1, 0x3c, 0xb7, + 0xee, 0x01, 0x43, 0xb0, 0x00, 0xab, 0xee, 0x01, 0x44, 0xb4, 0x1e, 0xac, + 0xee, 0x01, 0x44, 0xda, 0x40, 0xad, 0xee, 0x01, 0x43, 0x9d, 0x12, 0xb2, + 0xee, 0x01, 0x43, 0xe9, 0x74, 0xb3, 0xee, 0x01, 0xb3, 0x38, 0xb4, 0x1b, + 0x43, 0x0f, 0x83, 0xa5, 0xee, 0x01, 0x43, 0x4d, 0x00, 0xa9, 0xee, 0x01, + 0x02, 0x59, 0x00, 0x01, 0xff, 0xe8, 0xba, 0xee, 0x01, 0x42, 0x9e, 0x01, + 0xa6, 0xee, 0x41, 0x42, 0xe6, 0x06, 0xa8, 0xee, 0x01, 0x42, 0x4e, 0x00, + 0xb5, 0xee, 0x01, 0xa8, 0x01, 0xff, 0x42, 0x13, 0x00, 0xb8, 0xee, 0x01, + 0x42, 0x4e, 0x00, 0xb6, 0xee, 0x41, 0x42, 0xe8, 0x01, 0xb1, 0xee, 0x01, + 0x43, 0xca, 0x08, 0xae, 0xee, 0x01, 0x44, 0x11, 0xd1, 0xb4, 0xee, 0x41, + 0xe4, 0xb9, 0xee, 0x01, 0xec, 0xa3, 0xee, 0x41, 0x43, 0x27, 0x85, 0x1c, + 0xee, 0x01, 0x43, 0xb2, 0xaf, 0x1e, 0xee, 0x01, 0x44, 0xda, 0x40, 0x1d, + 0xee, 0x01, 0x43, 0x9d, 0x12, 0x1f, 0xee, 0x41, 0xe4, 0x19, 0xee, 0x01, + 0xec, 0x03, 0xee, 0x41, 0x42, 0x9e, 0x01, 0x0f, 0xee, 0x01, 0x43, 0x68, + 0x00, 0x00, 0xee, 0x41, 0x4b, 0xda, 0x40, 0x58, 0x06, 0x00, 0x54, 0xd1, + 0x40, 0xff, 0x08, 0x40, 0x47, 0xa5, 0xc3, 0x9c, 0x08, 0x00, 0x47, 0xf6, + 0x29, 0x53, 0x06, 0x40, 0x05, 0x10, 0x1a, 0xf8, 0x3e, 0xa5, 0xc6, 0x20, + 0x08, 0x35, 0x1d, 0x01, 0xff, 0xa1, 0xda, 0x1e, 0xa2, 0xa9, 0x1d, 0x09, + 0x92, 0xae, 0x8c, 0x1c, 0x09, 0xb2, 0xaf, 0x8b, 0x1b, 0x0b, 0x5c, 0x94, + 0xac, 0x1a, 0xa8, 0xff, 0x18, 0xaa, 0xfa, 0x17, 0xab, 0xec, 0x15, 0x09, + 0xa6, 0x12, 0xa5, 0x13, 0xad, 0xe2, 0x11, 0x0a, 0x11, 0x6a, 0xeb, 0x0f, + 0xb1, 0xf2, 0x0e, 0xb2, 0xb0, 0x0e, 0xb3, 0x83, 0x08, 0xb4, 0x92, 0x04, + 0x36, 0x3e, 0x00, 0xf8, 0x03, 0x56, 0xe2, 0x33, 0xf8, 0xfd, 0x00, 0x09, + 0x4d, 0x00, 0x19, 0x0e, 0x15, 0x78, 0x01, 0xff, 0xa9, 0x06, 0x4b, 0x45, + 0x67, 0x3b, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xb9, 0xfc, 0x00, 0x4c, 0xe1, + 0x02, 0x28, 0xfc, 0x40, 0x0d, 0x67, 0x00, 0xc4, 0x03, 0xa8, 0x83, 0x01, + 0x05, 0x13, 0x34, 0x6b, 0x06, 0xce, 0x55, 0x5b, 0x05, 0xb4, 0x1e, 0x22, + 0x4f, 0x02, 0x6a, 0x94, 0xfc, 0x00, 0x4e, 0xe9, 0x74, 0x91, 0xfc, 0x00, + 0x04, 0x4d, 0x00, 0x06, 0x4f, 0x49, 0x6e, 0x92, 0xfc, 0x40, 0x4a, 0x97, + 0x29, 0x96, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x5a, 0xfc, 0x40, 0x4a, 0x97, + 0x29, 0x93, 0xfc, 0x00, 0xa9, 0x21, 0x4b, 0x45, 0x67, 0xf0, 0xfc, 0x00, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0xb4, 0x1e, 0x06, 0x4e, 0x6d, 0x49, + 0xb0, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x9c, 0xfd, 0x00, 0x4c, 0xd7, 0x14, + 0x9d, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xdd, 0xfc, 0x00, 0x4c, 0xe1, 0x02, + 0x58, 0xfc, 0x40, 0x4b, 0xd8, 0x14, 0xdc, 0xfc, 0x00, 0x4c, 0xe1, 0x02, + 0x57, 0xfc, 0x40, 0xa9, 0x06, 0x53, 0x68, 0x49, 0xaf, 0xfd, 0x40, 0x4b, + 0xd8, 0x14, 0xda, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x55, 0xfc, 0x40, 0xa1, + 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, 0xd7, 0x14, 0xde, 0xfc, 0x00, + 0x4b, 0x45, 0x67, 0xf1, 0xfc, 0x40, 0x02, 0x4f, 0x00, 0x92, 0x02, 0x0f, + 0x58, 0x00, 0x01, 0xff, 0xa1, 0xd8, 0x01, 0x02, 0x60, 0x00, 0xbe, 0x01, + 0xa8, 0x9a, 0x01, 0x06, 0x13, 0x34, 0x89, 0x01, 0x51, 0xce, 0x55, 0x99, + 0xfc, 0x00, 0x05, 0xb4, 0x1e, 0x65, 0x4f, 0x02, 0x6a, 0x67, 0xfc, 0x00, + 0x03, 0xe7, 0x8f, 0x4f, 0x4e, 0xe9, 0x74, 0x64, 0xfc, 0x00, 0x02, 0x2e, + 0x02, 0x39, 0x04, 0x12, 0xe8, 0x29, 0xb9, 0x06, 0x4f, 0x49, 0x6e, 0x65, + 0xfc, 0x40, 0x03, 0x4e, 0x00, 0x11, 0x02, 0x2e, 0x02, 0x01, 0xff, 0x4a, + 0x97, 0x29, 0xf5, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0xf4, 0xfb, 0x40, 0x4a, + 0x97, 0x29, 0x69, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x04, 0xfc, 0x40, 0x4a, + 0x97, 0x29, 0xef, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0xee, 0xfb, 0x40, 0x4a, + 0x97, 0x29, 0xf1, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0xf0, 0xfb, 0x40, 0x4a, + 0x97, 0x29, 0xf3, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0xf2, 0xfb, 0x40, 0x4a, + 0x97, 0x29, 0x66, 0xfc, 0x00, 0xa9, 0x06, 0x4b, 0x45, 0x67, 0xdf, 0xfc, + 0x40, 0x4b, 0xd8, 0x14, 0x9a, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x02, 0xfc, + 0x40, 0x4b, 0xd8, 0x14, 0x97, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x00, 0xfc, + 0x40, 0x04, 0xe1, 0x54, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, 0xd7, + 0x14, 0x9b, 0xfc, 0x00, 0x4b, 0x45, 0x67, 0xe0, 0xfc, 0x40, 0x4b, 0xd8, + 0x14, 0x98, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x01, 0xfc, 0x40, 0x4a, 0x97, + 0x29, 0xf7, 0xfb, 0x00, 0xa9, 0x01, 0xff, 0x4b, 0xd8, 0x14, 0xf8, 0xfb, + 0x00, 0x4c, 0xe1, 0x02, 0xf6, 0xfb, 0x40, 0x02, 0x60, 0x00, 0x22, 0x04, + 0x68, 0x00, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xeb, 0xfb, 0x00, 0x4d, 0xe0, + 0x02, 0xea, 0xfb, 0x00, 0x08, 0x6c, 0x00, 0x01, 0xff, 0x4a, 0x97, 0x29, + 0x68, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x03, 0xfc, 0x40, 0x4a, 0x97, 0x29, + 0xed, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0xec, 0xfb, 0x40, 0xa9, 0x06, 0x53, + 0x68, 0x49, 0xae, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xdb, 0xfc, 0x00, 0x4c, + 0xe1, 0x02, 0x56, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x95, 0xfc, 0x00, 0x4d, + 0xe0, 0x02, 0x59, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0xfa, 0xfb, 0x00, 0xa9, + 0x01, 0xff, 0x4b, 0xd8, 0x14, 0xfb, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0xf9, + 0xfb, 0x40, 0xa1, 0xf6, 0x02, 0x08, 0x4e, 0x00, 0x6a, 0xa8, 0x01, 0xff, + 0x66, 0x6c, 0x05, 0x5b, 0xfc, 0x00, 0x08, 0x4e, 0x00, 0x01, 0xff, 0x0d, + 0x67, 0x00, 0x4c, 0x4f, 0x41, 0x67, 0xe6, 0xfc, 0x00, 0x52, 0x7e, 0x4d, + 0x11, 0xfc, 0x00, 0x05, 0xb4, 0x1e, 0x22, 0x4f, 0x02, 0x6a, 0x79, 0xfc, + 0x00, 0x4e, 0xe9, 0x74, 0x76, 0xfc, 0x00, 0x04, 0x4d, 0x00, 0x06, 0x4f, + 0x49, 0x6e, 0x77, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x7b, 0xfc, 0x00, 0x4d, + 0xe0, 0x02, 0x14, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x78, 0xfc, 0x00, 0xa9, + 0x06, 0x4b, 0x45, 0x67, 0xe5, 0xfc, 0x40, 0x4b, 0xd8, 0x14, 0xa6, 0xfc, + 0x00, 0x4c, 0xe1, 0x02, 0x12, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x7a, 0xfc, + 0x00, 0x4d, 0xe0, 0x02, 0x13, 0xfc, 0x40, 0x0d, 0x67, 0x00, 0xf7, 0x01, + 0xa8, 0xb6, 0x01, 0x05, 0x13, 0x34, 0x8c, 0x01, 0x05, 0xce, 0x55, 0x63, + 0x05, 0xb4, 0x1e, 0x22, 0x4f, 0x02, 0x6a, 0x73, 0xfc, 0x00, 0x4e, 0xe9, + 0x74, 0x70, 0xfc, 0x00, 0x04, 0x4d, 0x00, 0x06, 0x4f, 0x49, 0x6e, 0x71, + 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x75, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x10, + 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x72, 0xfc, 0x00, 0xa9, 0x29, 0x4b, 0x45, + 0x67, 0xe3, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x8a, 0x29, + 0xa4, 0xfd, 0x00, 0x50, 0xcf, 0x55, 0x56, 0xfd, 0x00, 0x51, 0x13, 0x34, + 0x55, 0xfd, 0x00, 0x51, 0xce, 0x55, 0x57, 0xfd, 0x00, 0x4e, 0x6d, 0x49, + 0xa3, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xa4, 0xfc, 0x00, 0x4c, 0xe1, 0x02, + 0x0e, 0xfc, 0x40, 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x8a, + 0x29, 0xa2, 0xfd, 0x00, 0x51, 0x78, 0x56, 0x54, 0xfd, 0x00, 0x4e, 0x6d, + 0x49, 0xa1, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xa3, 0xfc, 0x00, 0x4c, 0xe1, + 0x02, 0x0d, 0xfc, 0x40, 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, + 0x8a, 0x29, 0xa0, 0xfd, 0x00, 0x51, 0x78, 0x56, 0x50, 0xfd, 0x00, 0x4e, + 0x6d, 0x49, 0x9f, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xa1, 0xfc, 0x00, 0x4c, + 0xe1, 0x02, 0x0b, 0xfc, 0x40, 0x03, 0x1e, 0x09, 0x11, 0x03, 0x4e, 0x00, + 0x01, 0xff, 0x4c, 0xd7, 0x14, 0xa5, 0xfc, 0x00, 0x4b, 0x45, 0x67, 0xe4, + 0xfc, 0x40, 0xa9, 0x1b, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x13, 0x34, + 0x06, 0x51, 0x78, 0x56, 0x53, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x51, 0xfd, + 0x00, 0x4c, 0xd7, 0x14, 0x52, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xa2, 0xfc, + 0x00, 0x4c, 0xe1, 0x02, 0x0c, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x74, 0xfc, + 0x00, 0x4d, 0xe0, 0x02, 0x0f, 0xfc, 0x40, 0x52, 0xf6, 0x4a, 0x4e, 0xfd, + 0x00, 0x07, 0x4f, 0x00, 0x01, 0xff, 0x0d, 0x67, 0x00, 0x5a, 0x05, 0xe0, + 0x54, 0x4a, 0x05, 0xb4, 0x1e, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, + 0x97, 0x29, 0x12, 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0xf6, 0xfc, 0x40, 0xa9, + 0x27, 0x4b, 0x45, 0x67, 0x3a, 0xfd, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, + 0x04, 0xbe, 0x1e, 0x0c, 0x51, 0x78, 0x56, 0x73, 0xfd, 0x00, 0x4e, 0x6d, + 0x49, 0x74, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x71, 0xfd, 0x00, 0x4c, 0xd7, + 0x14, 0x72, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0x33, 0xfd, 0x00, 0x4c, 0xe1, + 0x02, 0x27, 0xfc, 0x40, 0x4b, 0xd8, 0x14, 0xb8, 0xfc, 0x00, 0x4c, 0xe1, + 0x02, 0x26, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x11, 0xfd, 0x00, 0x4d, 0xe0, + 0x02, 0xf5, 0xfc, 0x40, 0xa1, 0xde, 0x04, 0x09, 0x07, 0xaf, 0xde, 0x02, + 0xa8, 0x06, 0x54, 0x21, 0x41, 0xfe, 0xfd, 0x40, 0x0a, 0x02, 0x9f, 0x8b, + 0x02, 0x09, 0x07, 0xaf, 0x01, 0xff, 0x0d, 0x67, 0x00, 0xf5, 0x01, 0xa8, + 0xa8, 0x01, 0x05, 0x13, 0x34, 0x83, 0x01, 0x05, 0xce, 0x55, 0x65, 0x05, + 0xb4, 0x1e, 0x21, 0x04, 0xe9, 0x74, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, + 0x4a, 0x97, 0x29, 0x1a, 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0xfe, 0xfc, 0x40, + 0x4a, 0x97, 0x29, 0x29, 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0x0d, 0xfd, 0x40, + 0x4a, 0x97, 0x29, 0x28, 0xfd, 0x00, 0xa9, 0x2c, 0x4b, 0x45, 0x67, 0xe9, + 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0xce, 0x55, 0x11, 0x05, + 0xb4, 0x1e, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x6c, 0xfd, 0x00, 0x4c, 0xd7, + 0x14, 0x6d, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x6a, 0xfd, 0x00, 0x4c, 0xd7, + 0x14, 0x6b, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0x30, 0xfd, 0x00, 0x4c, 0xe1, + 0x02, 0x0c, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x27, 0xfd, 0x00, 0xa9, 0x06, + 0x4b, 0x45, 0x67, 0x39, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0x2f, 0xfd, 0x00, + 0x4c, 0xe1, 0x02, 0x0b, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x25, 0xfd, 0x00, + 0xa9, 0x0c, 0x4b, 0x45, 0x67, 0x37, 0xfd, 0x00, 0x53, 0x68, 0x49, 0x69, + 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0x2d, 0xfd, 0x00, 0x4c, 0xe1, 0x02, 0x09, + 0xfd, 0x40, 0x03, 0x1e, 0x09, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, + 0xd7, 0x14, 0x32, 0xfd, 0x00, 0x4b, 0x45, 0x67, 0xea, 0xfc, 0x40, 0x4a, + 0x97, 0x29, 0x26, 0xfd, 0x00, 0xa9, 0x21, 0x4b, 0x45, 0x67, 0x38, 0xfd, + 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0xb4, 0x1e, 0x06, 0x4e, 0x6d, + 0x49, 0xaa, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x67, 0xfd, 0x00, 0x4c, 0xd7, + 0x14, 0x68, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0x2e, 0xfd, 0x00, 0x4c, 0xe1, + 0x02, 0x0a, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x19, 0xfd, 0x00, 0x4d, 0xe0, + 0x02, 0xfd, 0xfc, 0x40, 0x05, 0x15, 0x59, 0x2e, 0x06, 0x79, 0xd1, 0x1e, + 0x05, 0x27, 0x4b, 0x06, 0x5e, 0x74, 0x05, 0x63, 0xfc, 0x40, 0x80, 0x06, + 0x51, 0x43, 0x58, 0x5f, 0xfc, 0x40, 0x4d, 0xe0, 0x02, 0x62, 0xfc, 0x00, + 0x4b, 0x45, 0x67, 0xf4, 0xfc, 0x40, 0x4d, 0xe0, 0x02, 0x60, 0xfc, 0x00, + 0x4b, 0x45, 0x67, 0xf2, 0xfc, 0x40, 0x80, 0x06, 0x51, 0x43, 0x58, 0x5e, + 0xfc, 0x40, 0x4d, 0xe0, 0x02, 0x61, 0xfc, 0x00, 0x4b, 0x45, 0x67, 0xf3, + 0xfc, 0x40, 0x0d, 0x67, 0x00, 0xea, 0x01, 0xa8, 0xb8, 0x01, 0x05, 0x13, + 0x34, 0x8e, 0x01, 0x05, 0xce, 0x55, 0x65, 0x05, 0xb4, 0x1e, 0x21, 0x04, + 0xe9, 0x74, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x18, + 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0xfc, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x2a, + 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0x0e, 0xfd, 0x40, 0xa9, 0x32, 0x4b, 0x45, + 0x67, 0xe7, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0xbe, 0x1e, + 0x17, 0x51, 0x13, 0x34, 0x61, 0xfd, 0x00, 0x05, 0xb4, 0x1e, 0x01, 0xff, + 0x4a, 0x97, 0x29, 0x62, 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0x63, 0xfd, 0x40, + 0x4a, 0x97, 0x29, 0x5f, 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0x60, 0xfd, 0x40, + 0x4b, 0xd8, 0x14, 0xb0, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x1f, 0xfc, 0x40, + 0xa9, 0x17, 0x4b, 0x45, 0x67, 0x36, 0xfd, 0x00, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x57, 0x8a, 0x29, 0xa8, 0xfd, 0x00, 0x4e, 0x6d, 0x49, 0xc6, 0xfd, + 0x40, 0x4b, 0xd8, 0x14, 0xaf, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x1e, 0xfc, + 0x40, 0xa9, 0x17, 0x4b, 0x45, 0x67, 0x34, 0xfd, 0x00, 0x05, 0x51, 0x00, + 0x01, 0xff, 0x57, 0x8a, 0x29, 0x5e, 0xfd, 0x00, 0x50, 0xcf, 0x55, 0x5d, + 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xad, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x1c, + 0xfc, 0x40, 0x03, 0x1e, 0x09, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, + 0xd7, 0x14, 0x31, 0xfd, 0x00, 0x4b, 0x45, 0x67, 0xe8, 0xfc, 0x40, 0xa9, + 0x0c, 0x4b, 0x45, 0x67, 0x35, 0xfd, 0x00, 0x56, 0x0e, 0x34, 0x5c, 0xfd, + 0x40, 0x4b, 0xd8, 0x14, 0xae, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x1d, 0xfc, + 0x40, 0x4a, 0x97, 0x29, 0x17, 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0xfb, 0xfc, + 0x40, 0x07, 0x61, 0x09, 0x3e, 0xac, 0x01, 0xff, 0xa1, 0x2d, 0x02, 0x74, + 0x00, 0x01, 0xff, 0x80, 0x1a, 0x03, 0x84, 0x0c, 0x01, 0xff, 0x53, 0x94, + 0x42, 0x46, 0xfd, 0x00, 0xa8, 0x01, 0xff, 0x52, 0xb0, 0x4e, 0xfa, 0xfd, + 0x00, 0x5c, 0x4d, 0x17, 0x4c, 0xfd, 0x40, 0x4d, 0xe0, 0x02, 0xf9, 0xfd, + 0x00, 0x67, 0xc6, 0x02, 0xf0, 0xfd, 0x40, 0x4d, 0x69, 0x79, 0xcf, 0xfd, + 0x00, 0x4f, 0xe9, 0x33, 0xf5, 0xfd, 0x40, 0x0d, 0x67, 0x00, 0x77, 0x04, + 0xbe, 0x1e, 0x4a, 0x51, 0xce, 0x55, 0xb2, 0xfc, 0x00, 0x05, 0xb4, 0x1e, + 0x21, 0x04, 0xe9, 0x74, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x97, + 0x29, 0x22, 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0x06, 0xfd, 0x40, 0x4a, 0x97, + 0x29, 0x2b, 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0x0f, 0xfd, 0x40, 0xa9, 0x11, + 0x0a, 0x19, 0x78, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x66, 0xfd, 0x00, 0x4c, + 0xd7, 0x14, 0xc5, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xb3, 0xfc, 0x00, 0x4c, + 0xe1, 0x02, 0x21, 0xfc, 0x40, 0xa9, 0x1b, 0x05, 0x51, 0x00, 0x01, 0xff, + 0x04, 0xbe, 0x1e, 0x06, 0x4e, 0x6d, 0x49, 0xa9, 0xfd, 0x40, 0x4a, 0x97, + 0x29, 0x64, 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0x65, 0xfd, 0x40, 0x4b, 0xd8, + 0x14, 0xb1, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x20, 0xfc, 0x40, 0x4a, 0x97, + 0x29, 0x21, 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0x05, 0xfd, 0x40, 0xa1, 0x06, + 0x66, 0xb8, 0x05, 0x5c, 0xfc, 0x40, 0x4e, 0xef, 0x6f, 0x41, 0xfd, 0x80, + 0x16, 0x06, 0x33, 0xd2, 0x06, 0x52, 0xe2, 0x4f, 0xf6, 0xfd, 0x40, 0x47, + 0xf1, 0x6f, 0x40, 0xfd, 0x00, 0x48, 0x51, 0xbe, 0x4f, 0xfd, 0x40, 0x42, + 0xda, 0x10, 0x42, 0xfd, 0x00, 0xb5, 0x01, 0xff, 0xed, 0x43, 0xfd, 0x80, + 0x06, 0x43, 0xe2, 0x40, 0x45, 0xfd, 0x40, 0x42, 0xda, 0x10, 0x44, 0xfd, + 0x40, 0xa1, 0x06, 0x4d, 0xfe, 0x81, 0x4b, 0xfd, 0x40, 0x07, 0x9f, 0x12, + 0x06, 0x6a, 0xc3, 0x02, 0xf1, 0xfd, 0x40, 0x0d, 0x67, 0x00, 0x54, 0x05, + 0xe0, 0x54, 0x44, 0x05, 0xb4, 0x1e, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, + 0x4a, 0x97, 0x29, 0x7f, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x36, 0xfc, 0x40, + 0xa9, 0x21, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0xbe, 0x1e, 0x0c, 0x4f, + 0x7b, 0x69, 0x7f, 0xfd, 0x00, 0x4e, 0x6d, 0x49, 0xb2, 0xfd, 0x40, 0x4a, + 0x97, 0x29, 0x7e, 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0xb4, 0xfd, 0x40, 0x4b, + 0xd8, 0x14, 0xc3, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x34, 0xfc, 0x40, 0x4b, + 0xd8, 0x14, 0xc2, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x33, 0xfc, 0x40, 0x4a, + 0x97, 0x29, 0x7e, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x35, 0xfc, 0x40, 0x0d, + 0x67, 0x00, 0xe1, 0x01, 0xa8, 0xa4, 0x01, 0x05, 0x13, 0x34, 0x61, 0x06, + 0xce, 0x55, 0x51, 0x05, 0xb4, 0x1e, 0x22, 0x4f, 0x02, 0x6a, 0x8d, 0xfc, + 0x00, 0x4e, 0xe9, 0x74, 0x8a, 0xfc, 0x00, 0x04, 0x4d, 0x00, 0x06, 0x4f, + 0x49, 0x6e, 0x8b, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x8f, 0xfc, 0x00, 0x4d, + 0xe0, 0x02, 0x50, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x8c, 0xfc, 0x00, 0xa9, + 0x17, 0x4b, 0x45, 0x67, 0xee, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, + 0x57, 0x8a, 0x29, 0x9b, 0xfd, 0x00, 0x4e, 0x6d, 0x49, 0x9a, 0xfd, 0x40, + 0x4b, 0xd8, 0x14, 0xd5, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x4e, 0xfc, 0x40, + 0x4b, 0xd8, 0x14, 0xd4, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x4d, 0xfc, 0x40, + 0xa9, 0x31, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x8a, 0x29, 0x99, 0xfd, + 0x00, 0x04, 0xbe, 0x1e, 0x16, 0x05, 0xb4, 0x1e, 0x06, 0x4e, 0x6d, 0x49, + 0xc7, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x97, 0xfd, 0x00, 0x4c, 0xd7, 0x14, + 0x98, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0xbd, 0xfd, 0x00, 0x4c, 0xd7, 0x14, + 0xb8, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xd2, 0xfc, 0x00, 0x4c, 0xe1, 0x02, + 0x4b, 0xfc, 0x40, 0x03, 0x1e, 0x09, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, + 0x4c, 0xd7, 0x14, 0xd6, 0xfc, 0x00, 0x4b, 0x45, 0x67, 0xef, 0xfc, 0x40, + 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x8a, 0x29, 0x96, 0xfd, + 0x00, 0x51, 0x78, 0x56, 0x95, 0xfd, 0x00, 0x4e, 0x6d, 0x49, 0xb3, 0xfd, + 0x40, 0x4b, 0xd8, 0x14, 0xd3, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x4c, 0xfc, + 0x40, 0x4a, 0x97, 0x29, 0x8e, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x4f, 0xfc, + 0x40, 0x09, 0xb5, 0x1e, 0x06, 0x55, 0xe8, 0x38, 0xf4, 0xfd, 0x40, 0x05, + 0x67, 0x00, 0xa5, 0x01, 0x04, 0xbe, 0x1e, 0x7c, 0x05, 0x13, 0x34, 0x4d, + 0x05, 0xce, 0x55, 0x24, 0x05, 0xb4, 0x1e, 0x06, 0x51, 0xfd, 0x59, 0x4a, + 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x89, 0xfc, 0x00, 0xa9, 0x06, 0x53, 0x68, + 0x49, 0xb1, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xd1, 0xfc, 0x00, 0x4c, 0xe1, + 0x02, 0x48, 0xfc, 0x40, 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, + 0x13, 0x34, 0x8e, 0xfd, 0x00, 0x51, 0x78, 0x56, 0x8f, 0xfd, 0x00, 0x4e, + 0x6d, 0x49, 0xb9, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xd0, 0xfc, 0x00, 0x4c, + 0xe1, 0x02, 0x47, 0xfc, 0x40, 0xa9, 0x1d, 0x05, 0x51, 0x00, 0x01, 0xff, + 0x50, 0xcf, 0x55, 0x8c, 0xfd, 0x00, 0x51, 0xce, 0x55, 0x92, 0xfd, 0x00, + 0x51, 0x78, 0x56, 0x8d, 0xfd, 0x00, 0x4e, 0x6d, 0x49, 0xc0, 0xfd, 0x40, + 0x4b, 0xd8, 0x14, 0xce, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x45, 0xfc, 0x40, + 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, 0x13, 0x34, 0x89, 0xfd, + 0x00, 0x51, 0x78, 0x56, 0x8a, 0xfd, 0x00, 0x4e, 0x6d, 0x49, 0x8b, 0xfd, + 0x40, 0x4b, 0xd8, 0x14, 0xcf, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x46, 0xfc, + 0x40, 0x4a, 0x97, 0x29, 0x88, 0xfc, 0x00, 0x55, 0x97, 0x1c, 0x49, 0xfc, + 0x40, 0x05, 0x67, 0x00, 0xe6, 0x01, 0xa8, 0xaa, 0x01, 0x05, 0x13, 0x34, + 0x6d, 0x05, 0xce, 0x55, 0x4a, 0x05, 0xb4, 0x1e, 0x11, 0x04, 0x4d, 0x00, + 0x01, 0xff, 0x4a, 0x97, 0x29, 0x87, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x44, + 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x85, 0xfc, 0x00, 0xa9, 0x21, 0x4b, 0x45, + 0x67, 0xed, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0xbe, 0x1e, + 0x06, 0x4e, 0x6d, 0x49, 0xad, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x87, 0xfd, + 0x00, 0x4c, 0xd7, 0x14, 0x88, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xcc, 0xfc, + 0x00, 0x4c, 0xe1, 0x02, 0x42, 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x19, 0x78, + 0x01, 0xff, 0x4a, 0x97, 0x29, 0x85, 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0x86, + 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xcb, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x41, + 0xfc, 0x40, 0xa9, 0x2b, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x13, 0x34, + 0x16, 0x05, 0xb4, 0x1e, 0x06, 0x4e, 0x6d, 0x49, 0xac, 0xfd, 0x40, 0x4a, + 0x97, 0x29, 0xbc, 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0xba, 0xfd, 0x40, 0x4a, + 0x97, 0x29, 0x84, 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0x83, 0xfd, 0x40, 0x4b, + 0xd8, 0x14, 0xc9, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x3f, 0xfc, 0x40, 0x03, + 0x1e, 0x09, 0x06, 0x4f, 0x33, 0x66, 0xcd, 0xfc, 0x40, 0xa9, 0x21, 0x05, + 0x51, 0x00, 0x01, 0xff, 0x57, 0x8a, 0x29, 0x82, 0xfd, 0x00, 0x05, 0xb4, + 0x1e, 0x06, 0x4e, 0x6d, 0x49, 0x81, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x80, + 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0xb5, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xca, + 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x40, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0xfc, + 0xfe, 0x00, 0x4d, 0xe0, 0x02, 0xfb, 0xfe, 0x00, 0x08, 0x6c, 0x00, 0x3b, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x06, 0x56, 0x00, 0x11, 0x0c, 0x1f, 0x8a, + 0x01, 0xff, 0x4a, 0x97, 0x29, 0xf6, 0xfe, 0x00, 0x4d, 0xe0, 0x02, 0xf5, + 0xfe, 0x40, 0x06, 0x5c, 0x00, 0x11, 0x06, 0xd5, 0x06, 0x01, 0xff, 0x4a, + 0x97, 0x29, 0xfa, 0xfe, 0x00, 0x4d, 0xe0, 0x02, 0xf9, 0xfe, 0x40, 0x4a, + 0x97, 0x29, 0xf8, 0xfe, 0x00, 0x4d, 0xe0, 0x02, 0xf7, 0xfe, 0x40, 0x4a, + 0x97, 0x29, 0x86, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x43, 0xfc, 0x40, 0x08, + 0x9e, 0x12, 0x4c, 0x09, 0xbe, 0x1e, 0x01, 0xff, 0x0d, 0x67, 0x00, 0x37, + 0x51, 0xe0, 0x54, 0x1a, 0xfc, 0x00, 0x06, 0x13, 0x34, 0x21, 0x06, 0x78, + 0x56, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x20, 0xfd, + 0x00, 0x4d, 0xe0, 0x02, 0x04, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xac, 0xfc, + 0x00, 0x4c, 0xe1, 0x02, 0x1b, 0xfc, 0x40, 0x4b, 0xd8, 0x14, 0xab, 0xfc, + 0x00, 0x4c, 0xe1, 0x02, 0x19, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x1f, 0xfd, + 0x00, 0x4d, 0xe0, 0x02, 0x03, 0xfd, 0x40, 0x05, 0x67, 0x00, 0x99, 0x01, + 0x05, 0xe0, 0x54, 0x88, 0x01, 0x06, 0x13, 0x34, 0x78, 0x06, 0xce, 0x55, + 0x68, 0x04, 0xa6, 0x12, 0x4a, 0x05, 0xb4, 0x1e, 0x11, 0x04, 0x4d, 0x00, + 0x01, 0xff, 0x4a, 0x97, 0x29, 0x84, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x3e, + 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x82, 0xfc, 0x00, 0xa9, 0x21, 0x4b, 0x45, + 0x67, 0xec, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0xb4, 0x1e, + 0x06, 0x4e, 0x6d, 0x49, 0xb7, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0xbb, 0xfd, + 0x00, 0x4c, 0xd7, 0x14, 0xc3, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xc8, 0xfc, + 0x00, 0x4c, 0xe1, 0x02, 0x3c, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x81, 0xfc, + 0x00, 0xa9, 0x06, 0x4b, 0x45, 0x67, 0xeb, 0xfc, 0x40, 0x4b, 0xd8, 0x14, + 0xc7, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x3b, 0xfc, 0x40, 0x4b, 0xd8, 0x14, + 0xc6, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x3a, 0xfc, 0x40, 0x4b, 0xd8, 0x14, + 0xc4, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x38, 0xfc, 0x40, 0x4b, 0xd8, 0x14, + 0xc5, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x39, 0xfc, 0x40, 0x4a, 0x97, 0x29, + 0x80, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x37, 0xfc, 0x00, 0x08, 0x6c, 0x00, + 0x01, 0xff, 0x4a, 0x97, 0x29, 0x83, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x3d, + 0xfc, 0x40, 0x4e, 0xf3, 0x6e, 0xfb, 0xfd, 0x00, 0x09, 0xb5, 0x1e, 0x01, + 0xff, 0x0d, 0x67, 0x00, 0x67, 0x04, 0xbe, 0x1e, 0x44, 0x05, 0xb4, 0x1e, + 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x1e, 0xfd, 0x00, + 0x4d, 0xe0, 0x02, 0x02, 0xfd, 0x40, 0xa9, 0x21, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x57, 0x8a, 0x29, 0xa7, 0xfd, 0x00, 0x04, 0xbe, 0x1e, 0x06, 0x4e, + 0x6d, 0x49, 0xa5, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x58, 0xfd, 0x00, 0x4c, + 0xd7, 0x14, 0x59, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xa8, 0xfc, 0x00, 0x4c, + 0xe1, 0x02, 0x16, 0xfc, 0x40, 0xa9, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, + 0x57, 0x8a, 0x29, 0xa6, 0xfd, 0x00, 0x4e, 0x6d, 0x49, 0xbe, 0xfd, 0x40, + 0x4b, 0xd8, 0x14, 0xa7, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x15, 0xfc, 0x40, + 0x4a, 0x97, 0x29, 0x1d, 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0x01, 0xfd, 0x40, + 0x08, 0xbf, 0x1e, 0x4a, 0x08, 0x4e, 0x00, 0x01, 0xff, 0x5a, 0x92, 0x1c, + 0x53, 0xfc, 0x00, 0x06, 0x13, 0x34, 0x2f, 0x05, 0xb4, 0x1e, 0x0c, 0x5d, + 0xc6, 0x14, 0xd9, 0xfc, 0x00, 0x51, 0xfd, 0x59, 0x54, 0xfc, 0x40, 0xa9, + 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, 0x13, 0x34, 0x93, 0xfd, 0x00, + 0x51, 0x78, 0x56, 0x94, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xd8, 0xfc, 0x00, + 0x4c, 0xe1, 0x02, 0x52, 0xfc, 0x40, 0x4b, 0xd8, 0x14, 0xd7, 0xfc, 0x00, + 0x4c, 0xe1, 0x02, 0x51, 0xfc, 0x40, 0x0d, 0x67, 0x00, 0x4c, 0x05, 0x13, + 0x34, 0x34, 0x05, 0xb4, 0x1e, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, + 0x97, 0x29, 0x1c, 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0x00, 0xfd, 0x40, 0xa9, + 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x8a, 0x29, 0x5b, 0xfd, 0x00, + 0x4e, 0x6d, 0x49, 0x5a, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xaa, 0xfc, 0x00, + 0x4c, 0xe1, 0x02, 0x18, 0xfc, 0x40, 0xa9, 0x06, 0x53, 0x68, 0x49, 0xbf, + 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xa9, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x17, + 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x1b, 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0xff, + 0xfc, 0x40, 0x0d, 0x67, 0x00, 0x4a, 0x06, 0x13, 0x34, 0x3a, 0x05, 0xb4, + 0x1e, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x16, 0xfd, + 0x00, 0x4d, 0xe0, 0x02, 0xfa, 0xfc, 0x40, 0xa9, 0x17, 0x05, 0x51, 0x00, + 0x01, 0xff, 0x57, 0x8a, 0x29, 0x7b, 0xfd, 0x00, 0x4f, 0x7b, 0x69, 0x79, + 0xfd, 0x00, 0x4e, 0x6d, 0x49, 0x7a, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xbd, + 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x2c, 0xfc, 0x40, 0x4b, 0xd8, 0x14, 0xbc, + 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x2b, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x15, + 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0xf9, 0xfc, 0x40, 0x0d, 0x67, 0x00, 0x6c, + 0x05, 0xe0, 0x54, 0x5c, 0x06, 0x13, 0x34, 0x4c, 0x05, 0xce, 0x55, 0x29, + 0x05, 0xb4, 0x1e, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x97, 0x29, + 0x7d, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x32, 0xfc, 0x40, 0xa9, 0x06, 0x53, + 0x68, 0x49, 0xc1, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xc1, 0xfc, 0x00, 0x4c, + 0xe1, 0x02, 0x30, 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x19, 0x78, 0x01, 0xff, + 0x4a, 0x97, 0x29, 0x7c, 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0x7d, 0xfd, 0x40, + 0x4b, 0xd8, 0x14, 0xc0, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x2f, 0xfc, 0x40, + 0x4b, 0xd8, 0x14, 0xbe, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x2d, 0xfc, 0x40, + 0x4b, 0xd8, 0x14, 0xbf, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x2e, 0xfc, 0x40, + 0x4a, 0x97, 0x29, 0x7c, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x31, 0xfc, 0x40, + 0x0d, 0x67, 0x00, 0x87, 0x01, 0x04, 0xbe, 0x1e, 0x64, 0x06, 0x13, 0x34, + 0x54, 0x05, 0xce, 0x55, 0x31, 0x06, 0x78, 0x56, 0x21, 0x04, 0xe9, 0x74, + 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x24, 0xfd, 0x00, + 0x4d, 0xe0, 0x02, 0x08, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x2c, 0xfd, 0x00, + 0x4d, 0xe0, 0x02, 0x10, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xb7, 0xfc, 0x00, + 0x4c, 0xe1, 0x02, 0x25, 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x19, 0x78, 0x01, + 0xff, 0x4a, 0x97, 0x29, 0x6f, 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0x70, 0xfd, + 0x40, 0x4b, 0xd8, 0x14, 0xb6, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x24, 0xfc, + 0x40, 0x4b, 0xd8, 0x14, 0xb4, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x22, 0xfc, + 0x40, 0xa9, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x8a, 0x29, 0x6e, + 0xfd, 0x00, 0x4e, 0x6d, 0x49, 0xab, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xb5, + 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x23, 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x23, + 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0x07, 0xfd, 0x40, 0x08, 0x4e, 0x00, 0x06, + 0x5c, 0x51, 0x16, 0xfd, 0xfd, 0x40, 0x0d, 0x67, 0x00, 0x93, 0x01, 0xa8, + 0x68, 0x06, 0x13, 0x34, 0x58, 0x05, 0xce, 0x55, 0x40, 0x05, 0xb4, 0x1e, + 0x22, 0x4f, 0x02, 0x6a, 0x6d, 0xfc, 0x00, 0x4e, 0xe9, 0x74, 0x6a, 0xfc, + 0x00, 0x04, 0x4d, 0x00, 0x06, 0x4f, 0x49, 0x6e, 0x6b, 0xfc, 0x40, 0x4a, + 0x97, 0x29, 0x6f, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x0a, 0xfc, 0x40, 0x4a, + 0x97, 0x29, 0x6c, 0xfc, 0x00, 0xa9, 0x06, 0x4b, 0x45, 0x67, 0xe1, 0xfc, + 0x40, 0x4b, 0xd8, 0x14, 0x9f, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x08, 0xfc, + 0x40, 0xa9, 0x06, 0x53, 0x68, 0x49, 0x9e, 0xfd, 0x40, 0x4b, 0xd8, 0x14, + 0x9e, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x07, 0xfc, 0x40, 0x4b, 0xd8, 0x14, + 0x9c, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x05, 0xfc, 0x40, 0x03, 0x1e, 0x09, + 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, 0xd7, 0x14, 0xa0, 0xfc, 0x00, + 0x4b, 0x45, 0x67, 0xe2, 0xfc, 0x40, 0xa9, 0x06, 0x53, 0x68, 0x49, 0xc2, + 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0x9d, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x06, + 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x6e, 0xfc, 0x00, 0x4d, 0xe0, 0x02, 0x09, + 0xfc, 0x40, 0x08, 0x5f, 0x94, 0x69, 0x52, 0xa2, 0x4d, 0xf3, 0xfd, 0x00, + 0xac, 0x06, 0x4b, 0x2b, 0x9d, 0xff, 0xfd, 0x40, 0x03, 0x51, 0x17, 0x2b, + 0x03, 0x69, 0x00, 0x06, 0x51, 0xf0, 0x55, 0xf2, 0xfd, 0x40, 0x1e, 0x07, + 0x12, 0x11, 0x0e, 0xcf, 0x77, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x3c, 0xfd, + 0x00, 0x4d, 0xe0, 0x02, 0x3d, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x90, 0xfc, + 0x00, 0x4d, 0xe0, 0x02, 0x5d, 0xfc, 0x40, 0x4c, 0x67, 0x84, 0x4d, 0xfd, + 0x00, 0x4f, 0xf7, 0x65, 0xf7, 0xfd, 0x00, 0xa9, 0x01, 0xff, 0x09, 0x69, + 0x84, 0x0f, 0xad, 0x01, 0xff, 0x4a, 0x69, 0x84, 0x48, 0xfd, 0x00, 0x4c, + 0x67, 0x84, 0x49, 0xfd, 0x40, 0xed, 0x47, 0xfd, 0x00, 0x4d, 0xe4, 0x81, + 0x4a, 0xfd, 0x40, 0x0d, 0x67, 0x00, 0x67, 0x05, 0x13, 0x34, 0x44, 0x05, + 0xb4, 0x1e, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x14, + 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0xf8, 0xfc, 0x40, 0xa9, 0x21, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x57, 0x8a, 0x29, 0x78, 0xfd, 0x00, 0x05, 0xb4, 0x1e, + 0x06, 0x4e, 0x6d, 0x49, 0xb6, 0xfd, 0x40, 0x4a, 0x97, 0x29, 0x76, 0xfd, + 0x00, 0x4c, 0xd7, 0x14, 0x77, 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xbb, 0xfc, + 0x00, 0x4c, 0xe1, 0x02, 0x2a, 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x19, 0x78, + 0x01, 0xff, 0x4a, 0x97, 0x29, 0x75, 0xfd, 0x00, 0x4c, 0xd7, 0x14, 0xc4, + 0xfd, 0x40, 0x4b, 0xd8, 0x14, 0xba, 0xfc, 0x00, 0x4c, 0xe1, 0x02, 0x29, + 0xfc, 0x40, 0x4a, 0x97, 0x29, 0x13, 0xfd, 0x00, 0x4d, 0xe0, 0x02, 0xf7, + 0xfc, 0x40, 0x0d, 0x1a, 0x7c, 0x9e, 0x1e, 0x05, 0xf3, 0x04, 0x01, 0xff, + 0xa1, 0xd8, 0x1a, 0x02, 0xbc, 0x04, 0x9d, 0x19, 0xa4, 0x83, 0x17, 0xe5, + 0xd0, 0x06, 0x80, 0xe0, 0x16, 0xa6, 0xad, 0x15, 0xa7, 0x87, 0x14, 0xa8, + 0xd0, 0x11, 0x02, 0x18, 0x1e, 0xf8, 0x10, 0xab, 0xec, 0x0e, 0xac, 0x85, + 0x0e, 0xad, 0xbd, 0x0d, 0xae, 0xe2, 0x0b, 0x42, 0xdf, 0x4b, 0xc6, 0x06, + 0x80, 0xcb, 0x0b, 0x43, 0xdc, 0xdc, 0x7e, 0x06, 0x80, 0xf4, 0x0a, 0x43, + 0x9d, 0x12, 0x42, 0x06, 0x80, 0xad, 0x0a, 0xb2, 0xf0, 0x08, 0xb3, 0x94, + 0x07, 0xb4, 0xdb, 0x03, 0xf5, 0xc7, 0x06, 0x80, 0xa9, 0x03, 0x42, 0x32, + 0x00, 0xcb, 0x06, 0x80, 0xf1, 0x02, 0x43, 0x0f, 0x83, 0x48, 0x06, 0x80, + 0x93, 0x02, 0xb9, 0x43, 0x02, 0x59, 0x00, 0x01, 0xff, 0xe8, 0x38, 0x06, + 0x80, 0x1c, 0x42, 0x9e, 0x01, 0x32, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, + 0x4a, 0x97, 0x29, 0xb0, 0xfe, 0x00, 0x4d, 0xe0, 0x02, 0xaf, 0xfe, 0x00, + 0x55, 0x8c, 0x3a, 0xb2, 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, + 0xc6, 0xfe, 0x00, 0xa9, 0x06, 0x4b, 0x45, 0x67, 0xc8, 0xfe, 0x40, 0x4b, + 0xd8, 0x14, 0xc7, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0xc5, 0xfe, 0x40, 0x42, + 0x4e, 0x00, 0x4a, 0x06, 0x80, 0x14, 0xf5, 0xc8, 0x06, 0xc0, 0x00, 0x80, + 0x01, 0xff, 0x4a, 0x97, 0x29, 0xdc, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0xdb, + 0xfb, 0x40, 0x80, 0x01, 0xff, 0x46, 0xd9, 0x17, 0xd2, 0x06, 0x80, 0x6f, + 0x4a, 0x97, 0x29, 0xf2, 0xfe, 0x00, 0xa9, 0x5b, 0x4b, 0x45, 0x67, 0xf4, + 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4b, 0x56, 0x00, 0x26, 0x06, + 0x80, 0x2c, 0x47, 0xe9, 0x30, 0xce, 0x06, 0x00, 0xb4, 0x01, 0xff, 0x43, + 0xaf, 0x15, 0xcd, 0x06, 0x00, 0x4f, 0x8c, 0x67, 0xd1, 0x06, 0x00, 0x12, + 0xda, 0x1b, 0x01, 0xff, 0x49, 0xec, 0x1b, 0xa9, 0x08, 0x00, 0x4b, 0x56, + 0x00, 0xa8, 0x08, 0x00, 0x50, 0x0e, 0x61, 0xba, 0x08, 0x40, 0x80, 0x01, + 0xff, 0x4a, 0x97, 0x29, 0x8a, 0xfe, 0x00, 0xa9, 0x06, 0x4b, 0x45, 0x67, + 0x8c, 0xfe, 0x40, 0x4b, 0xd8, 0x14, 0x8b, 0xfe, 0x00, 0x4c, 0xe1, 0x02, + 0x89, 0xfe, 0x40, 0x4b, 0xd8, 0x14, 0xf3, 0xfe, 0x00, 0x4c, 0xe1, 0x02, + 0xf1, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xaf, 0xfb, 0x00, + 0x4d, 0xe0, 0x02, 0xae, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x1d, + 0xfb, 0x13, 0x16, 0x4b, 0x56, 0x00, 0xd3, 0x06, 0xc0, 0x00, 0x80, 0x01, + 0xff, 0x4a, 0x97, 0x29, 0xb1, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0xb0, 0xfb, + 0x40, 0x4a, 0xcc, 0xa2, 0x7b, 0x07, 0x00, 0x48, 0x89, 0xc2, 0x7a, 0x07, + 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xee, 0xfe, 0x00, 0x4d, 0xe0, + 0x02, 0xed, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x9f, 0x0a, + 0x32, 0x1d, 0xfb, 0x13, 0x22, 0x4b, 0x56, 0x00, 0x24, 0x06, 0x80, 0x0c, + 0x44, 0x03, 0x07, 0xc4, 0x06, 0x00, 0x4e, 0x4a, 0x0d, 0xca, 0x06, 0x40, + 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x86, 0xfe, 0x00, 0x4d, 0xe0, 0x02, + 0x85, 0xfe, 0x40, 0x4a, 0xcc, 0xa2, 0x79, 0x07, 0x00, 0x48, 0x89, 0xc2, + 0x78, 0x07, 0x40, 0x45, 0x5c, 0x00, 0xcf, 0x06, 0x00, 0x46, 0x79, 0x1c, + 0xab, 0x08, 0x40, 0x80, 0x22, 0xe8, 0xa4, 0x06, 0xc0, 0x00, 0x80, 0x01, + 0xff, 0x4a, 0x97, 0x29, 0x6b, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x45, 0x67, + 0x6d, 0xfb, 0x40, 0x4b, 0xd8, 0x14, 0x6c, 0xfb, 0x00, 0x4c, 0xe1, 0x02, + 0x6a, 0xfb, 0x40, 0x4a, 0x97, 0x29, 0xdf, 0xfb, 0x00, 0x4d, 0xe0, 0x02, + 0xde, 0xfb, 0x40, 0x80, 0x11, 0x22, 0xd0, 0x0a, 0x01, 0xff, 0x4c, 0xd7, + 0x14, 0xe8, 0xfb, 0x00, 0x4b, 0x45, 0x67, 0xe9, 0xfb, 0x40, 0x4a, 0x97, + 0x29, 0xd8, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0xd7, 0xfb, 0x00, 0x50, 0x51, + 0x00, 0x77, 0x06, 0xc0, 0x00, 0x4e, 0xdf, 0x02, 0xdd, 0xfb, 0x40, 0x42, + 0xe6, 0x06, 0x37, 0x06, 0x80, 0xed, 0x02, 0x44, 0x8c, 0x7c, 0x86, 0x06, + 0x80, 0x94, 0x02, 0x42, 0x4e, 0x00, 0x2a, 0x06, 0x80, 0x8f, 0x01, 0xa8, + 0x4d, 0x43, 0x0a, 0x0e, 0x79, 0x06, 0xc0, 0x00, 0x80, 0x24, 0x42, 0x4e, + 0x00, 0x7a, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x5f, + 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x45, 0x67, 0x61, 0xfb, 0x40, 0x4b, 0xd8, + 0x14, 0x60, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0x5e, 0xfb, 0x40, 0x4a, 0x97, + 0x29, 0x67, 0xfb, 0x00, 0xa9, 0x0c, 0x4b, 0x45, 0x67, 0x69, 0xfb, 0x00, + 0x4c, 0x23, 0x8f, 0xc0, 0x08, 0x40, 0x4b, 0xd8, 0x14, 0x68, 0xfb, 0x00, + 0x4c, 0xe1, 0x02, 0x66, 0xfb, 0x40, 0x42, 0x13, 0x00, 0x30, 0x06, 0x80, + 0x2a, 0x42, 0x4e, 0x00, 0x2b, 0x06, 0x80, 0x06, 0x46, 0x93, 0xd2, 0x86, + 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x9a, 0xfe, 0x00, 0xa9, + 0x06, 0x4b, 0x45, 0x67, 0x9c, 0xfe, 0x40, 0x4b, 0xd8, 0x14, 0x9b, 0xfe, + 0x00, 0x4c, 0xe1, 0x02, 0x99, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, + 0x29, 0xac, 0xfe, 0x00, 0x4d, 0xe0, 0x02, 0xab, 0xfe, 0x40, 0x80, 0x24, + 0x42, 0x4e, 0x00, 0x7f, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, + 0x29, 0x63, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x45, 0x67, 0x65, 0xfb, 0x40, + 0x4b, 0xd8, 0x14, 0x64, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0x62, 0xfb, 0x40, + 0x4a, 0x97, 0x29, 0x96, 0xfe, 0x00, 0xa9, 0x43, 0xad, 0x1f, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x44, 0x03, 0x07, 0x7c, 0x06, 0x00, 0x06, 0x3c, 0x06, + 0x06, 0x5a, 0xb8, 0x1f, 0x7d, 0x06, 0x40, 0x49, 0x45, 0xb6, 0xb8, 0x08, + 0x00, 0xf6, 0xbf, 0x08, 0x40, 0x46, 0xb7, 0xcf, 0x29, 0x06, 0x80, 0x06, + 0x4a, 0x46, 0x67, 0x98, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, + 0x94, 0xfe, 0x00, 0x44, 0x22, 0xe5, 0xc3, 0x06, 0x00, 0x4d, 0xe0, 0x02, + 0x93, 0xfe, 0x40, 0x4b, 0xd8, 0x14, 0x97, 0xfe, 0x00, 0x4c, 0xe1, 0x02, + 0x95, 0xfe, 0x40, 0x80, 0x24, 0x42, 0x4e, 0x00, 0x87, 0x06, 0xc0, 0x00, + 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x7f, 0xfb, 0x00, 0xa9, 0x06, 0x4b, + 0x45, 0x67, 0x81, 0xfb, 0x40, 0x4b, 0xd8, 0x14, 0x80, 0xfb, 0x00, 0x4c, + 0xe1, 0x02, 0x7e, 0xfb, 0x40, 0x4a, 0x97, 0x29, 0x7b, 0xfb, 0x00, 0xa9, + 0x17, 0x4b, 0x45, 0x67, 0x7d, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, + 0x49, 0xec, 0x1b, 0xbf, 0x06, 0x00, 0x47, 0xe9, 0x30, 0xc1, 0x08, 0x40, + 0x4b, 0xd8, 0x14, 0x7c, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0x7a, 0xfb, 0x40, + 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xc2, 0xfe, 0x00, 0xa9, 0x2a, 0x4b, + 0x45, 0x67, 0xc4, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0xf9, + 0x10, 0x8b, 0x08, 0x00, 0xb4, 0x01, 0xff, 0x0a, 0x08, 0x11, 0x06, 0x4d, + 0x4b, 0x0d, 0xa3, 0x08, 0x40, 0x45, 0x5c, 0x00, 0x9f, 0x06, 0x00, 0x45, + 0x25, 0x06, 0x8c, 0x08, 0x40, 0x4b, 0xd8, 0x14, 0xc3, 0xfe, 0x00, 0x4c, + 0xe1, 0x02, 0xc1, 0xfe, 0x40, 0x42, 0xe8, 0x01, 0x35, 0x06, 0x80, 0x99, + 0x01, 0x43, 0xca, 0x08, 0x33, 0x06, 0x80, 0x3c, 0x44, 0x11, 0xd1, 0x34, + 0x06, 0x80, 0x12, 0x4b, 0x68, 0x9b, 0xb1, 0x08, 0x00, 0x4f, 0x75, 0x05, + 0x70, 0x06, 0x00, 0x48, 0x71, 0xc2, 0xaa, 0x06, 0x40, 0x80, 0x01, 0xff, + 0x4a, 0x97, 0x29, 0xb6, 0xfe, 0x00, 0xa9, 0x0c, 0x4b, 0x45, 0x67, 0xb8, + 0xfe, 0x00, 0x4e, 0xc1, 0x77, 0xfa, 0x06, 0x40, 0x4b, 0xd8, 0x14, 0xb7, + 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0xb5, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, + 0x97, 0x29, 0xb2, 0xfe, 0x00, 0xa9, 0x3f, 0x4b, 0x45, 0x67, 0xb4, 0xfe, + 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0xb5, 0x2a, 0x9a, 0x06, 0x00, + 0x66, 0xde, 0x05, 0x7d, 0x07, 0x00, 0x4f, 0x8a, 0x41, 0x5c, 0x07, 0x00, + 0x4a, 0x91, 0x3a, 0x7e, 0x07, 0x00, 0x64, 0x09, 0x09, 0x70, 0x07, 0x00, + 0xb4, 0x01, 0xff, 0x4f, 0x8c, 0x67, 0x9b, 0x06, 0x80, 0x06, 0x58, 0xff, + 0x28, 0x6d, 0x07, 0x40, 0x55, 0x02, 0x11, 0x9c, 0x06, 0x40, 0x4b, 0xd8, + 0x14, 0xb3, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0xb1, 0xfe, 0x40, 0x80, 0x01, + 0xff, 0x4a, 0x97, 0x29, 0xba, 0xfe, 0x00, 0xa9, 0x21, 0x4b, 0x45, 0x67, + 0xbc, 0xfe, 0x00, 0x06, 0x2e, 0x05, 0x01, 0xff, 0x0a, 0x08, 0x11, 0x06, + 0x4d, 0x5e, 0x0d, 0x9d, 0x06, 0x40, 0x45, 0x5c, 0x00, 0x9e, 0x06, 0x00, + 0x45, 0x25, 0x06, 0xaf, 0x08, 0x40, 0x4b, 0xd8, 0x14, 0xbb, 0xfe, 0x00, + 0x4c, 0xe1, 0x02, 0xb9, 0xfe, 0x40, 0x42, 0x4e, 0x00, 0x31, 0x06, 0x80, + 0x40, 0x44, 0xda, 0x40, 0xbb, 0x06, 0x80, 0x1c, 0x4b, 0x71, 0x98, 0xac, + 0x08, 0x00, 0x43, 0xe9, 0x74, 0x91, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, + 0x4a, 0x97, 0x29, 0x8d, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0x8c, 0xfb, 0x40, + 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xa1, 0xfb, 0x00, 0xa9, 0x06, 0x4b, + 0x45, 0x67, 0xa3, 0xfb, 0x40, 0x4b, 0xd8, 0x14, 0xa2, 0xfb, 0x00, 0x4c, + 0xe1, 0x02, 0xa0, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xae, + 0xfe, 0x00, 0x4d, 0xe0, 0x02, 0xad, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x49, 0xf9, 0x10, 0x94, 0x06, 0x80, 0x52, 0x4f, 0x8a, 0x41, 0x99, + 0x06, 0x00, 0x4b, 0x56, 0x00, 0x6c, 0x07, 0x00, 0x4a, 0x91, 0x3a, 0xef, + 0x06, 0x00, 0x44, 0x07, 0xb7, 0xaa, 0x08, 0x00, 0x44, 0x03, 0x07, 0x93, + 0x06, 0x00, 0xb3, 0x11, 0x09, 0x8d, 0x0a, 0x01, 0xff, 0x45, 0x5c, 0x00, + 0x97, 0x06, 0x00, 0x50, 0x07, 0x29, 0x6b, 0x07, 0x40, 0x05, 0x3d, 0x06, + 0x06, 0x45, 0x58, 0x04, 0x5b, 0x07, 0x40, 0x5e, 0x0f, 0x09, 0x71, 0x07, + 0x00, 0x4a, 0x14, 0x61, 0xb9, 0x08, 0x00, 0xf6, 0x92, 0x06, 0xc0, 0x00, + 0x46, 0x24, 0x06, 0x95, 0x06, 0x40, 0x4e, 0xe7, 0x1b, 0x96, 0x06, 0x40, + 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xd6, 0xfe, 0x00, 0xa9, 0x28, 0x4b, + 0x45, 0x67, 0xd8, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x9f, + 0x0a, 0x06, 0x50, 0x07, 0x11, 0xa8, 0x06, 0x40, 0x45, 0x5c, 0x00, 0xa7, + 0x06, 0x00, 0x45, 0x25, 0x06, 0xa5, 0x08, 0xc0, 0x00, 0x52, 0x8e, 0x49, + 0xb5, 0x08, 0x40, 0x4b, 0xd8, 0x14, 0xd7, 0xfe, 0x00, 0x4c, 0xe1, 0x02, + 0xd5, 0xfe, 0x40, 0x80, 0x24, 0x42, 0x4e, 0x00, 0xa6, 0x06, 0xc0, 0x00, + 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x6f, 0xfb, 0x00, 0xa9, 0x06, 0x4b, + 0x45, 0x67, 0x71, 0xfb, 0x40, 0x4b, 0xd8, 0x14, 0x70, 0xfb, 0x00, 0x4c, + 0xe1, 0x02, 0x6e, 0xfb, 0x40, 0x4a, 0x97, 0x29, 0x57, 0xfb, 0x00, 0xa9, + 0x15, 0x4b, 0x45, 0x67, 0x59, 0xfb, 0x00, 0x0b, 0x23, 0x8f, 0x01, 0xff, + 0x4a, 0x24, 0xa5, 0xb7, 0x08, 0x00, 0xf6, 0xbe, 0x08, 0x40, 0x4b, 0xd8, + 0x14, 0x58, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0x56, 0xfb, 0x40, 0x80, 0x01, + 0xff, 0x4a, 0x97, 0x29, 0xda, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0xd9, 0xfb, + 0x40, 0xe7, 0xad, 0x06, 0x80, 0x92, 0x01, 0x43, 0x99, 0x04, 0x46, 0x06, + 0x80, 0x24, 0x43, 0x4d, 0x00, 0x83, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, + 0x4a, 0x97, 0x29, 0x77, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x45, 0x67, 0x79, + 0xfb, 0x40, 0x4b, 0xd8, 0x14, 0x78, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0x76, + 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xe6, 0xfe, 0x00, 0x46, + 0xdf, 0x40, 0xba, 0x06, 0x80, 0x48, 0xa9, 0x3a, 0x4b, 0x45, 0x67, 0xe8, + 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0xf9, 0x10, 0xb9, 0x06, + 0x00, 0x50, 0xe0, 0x30, 0x89, 0x08, 0x00, 0x44, 0x03, 0x07, 0xbc, 0x06, + 0x00, 0x06, 0x3c, 0x06, 0x0f, 0xb4, 0x01, 0xff, 0x4f, 0x08, 0x11, 0xbd, + 0x06, 0x00, 0x4d, 0x5e, 0x0d, 0x67, 0x07, 0x40, 0x43, 0xe5, 0x06, 0x68, + 0x07, 0x00, 0xf6, 0x69, 0x07, 0x40, 0x4b, 0xd8, 0x14, 0xe7, 0xfe, 0x00, + 0x4c, 0xe1, 0x02, 0xe5, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, + 0x9f, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0x9e, 0xfb, 0x40, 0x80, 0x24, 0x43, + 0xd3, 0x94, 0xb1, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, + 0x9b, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x45, 0x67, 0x9d, 0xfb, 0x40, 0x4b, + 0xd8, 0x14, 0x9c, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0x9a, 0xfb, 0x40, 0x4a, + 0x97, 0x29, 0xd4, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x45, 0x67, 0xd6, 0xfb, + 0x40, 0x4b, 0xd8, 0x14, 0xd5, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0xd3, 0xfb, + 0x40, 0x43, 0xba, 0x00, 0x1c, 0x06, 0x00, 0x43, 0x6a, 0x16, 0x45, 0x06, + 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xe2, 0xfe, 0x00, 0xa9, + 0x21, 0x4b, 0x45, 0x67, 0xe4, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, + 0x04, 0x9f, 0x0a, 0x06, 0x50, 0x07, 0x11, 0xa7, 0x08, 0x40, 0x45, 0x5c, + 0x00, 0x65, 0x07, 0x00, 0x45, 0x25, 0x06, 0x66, 0x07, 0x40, 0x4b, 0xd8, + 0x14, 0xe3, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0xe1, 0xfe, 0x40, 0x42, 0x57, + 0x00, 0x44, 0x06, 0x80, 0x06, 0x47, 0x20, 0xca, 0xad, 0x08, 0x40, 0x80, + 0x01, 0xff, 0x4a, 0x97, 0x29, 0xde, 0xfe, 0x00, 0xa9, 0x40, 0x4b, 0x45, + 0x67, 0xe0, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x43, 0x16, 0x00, + 0x6a, 0x07, 0x00, 0x02, 0x3b, 0x01, 0x1f, 0x06, 0x3c, 0x06, 0x11, 0x0b, + 0x07, 0x11, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xb7, 0x06, 0x00, 0x45, 0x25, + 0x06, 0xb8, 0x06, 0x40, 0x57, 0xe6, 0x29, 0xc7, 0x08, 0x00, 0xf6, 0xb5, + 0x06, 0x40, 0x47, 0xee, 0x1b, 0xb6, 0x06, 0x00, 0x48, 0xee, 0xa0, 0xa6, + 0x08, 0x40, 0x4b, 0xd8, 0x14, 0xdf, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0xdd, + 0xfe, 0x40, 0xa1, 0xb4, 0x01, 0x44, 0x40, 0x67, 0xa9, 0x06, 0x80, 0x55, + 0x43, 0xbe, 0x1e, 0x2e, 0x06, 0x80, 0x31, 0x07, 0x46, 0x00, 0x01, 0xff, + 0x42, 0xdf, 0x4b, 0xc5, 0x06, 0x80, 0x16, 0x42, 0xbc, 0x48, 0xc9, 0x06, + 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xe3, 0xfb, 0x00, 0x4d, + 0xe0, 0x02, 0xe2, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xe1, + 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0xe0, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, + 0x97, 0x29, 0xa6, 0xfe, 0x00, 0xa9, 0x06, 0x4b, 0x45, 0x67, 0xa8, 0xfe, + 0x40, 0x4b, 0xd8, 0x14, 0xa7, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0xa5, 0xfe, + 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x8f, 0xfb, 0x00, 0xa9, 0x41, + 0x4b, 0x45, 0x67, 0x91, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, + 0xec, 0x1b, 0x62, 0x07, 0x00, 0x47, 0xe9, 0x30, 0xc2, 0x08, 0x00, 0xb4, + 0x01, 0xff, 0x0a, 0x08, 0x11, 0x11, 0x08, 0xc2, 0x06, 0x01, 0xff, 0x45, + 0x5c, 0x00, 0x3b, 0x06, 0x00, 0x50, 0xca, 0x06, 0x8d, 0x08, 0x40, 0x45, + 0x5c, 0x00, 0x63, 0x07, 0x00, 0x45, 0x25, 0x06, 0x3c, 0x06, 0x00, 0x56, + 0x2a, 0x32, 0x64, 0x07, 0x40, 0x4b, 0xd8, 0x14, 0x90, 0xfb, 0x00, 0x4c, + 0xe1, 0x02, 0x8e, 0xfb, 0x40, 0xe6, 0x43, 0x06, 0x80, 0x06, 0x4a, 0x44, + 0xa8, 0x20, 0x06, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xda, 0xfe, + 0x00, 0xa9, 0x30, 0x4b, 0x45, 0x67, 0xdc, 0xfe, 0x00, 0x05, 0x51, 0x00, + 0x01, 0xff, 0x04, 0x9f, 0x0a, 0x15, 0x44, 0x03, 0x07, 0xab, 0x06, 0x00, + 0xb4, 0x01, 0xff, 0x4f, 0x8c, 0x67, 0xae, 0x06, 0x00, 0x4d, 0x4b, 0x0d, + 0x7f, 0x07, 0x40, 0x45, 0x5c, 0x00, 0xac, 0x06, 0x00, 0x45, 0x25, 0x06, + 0xb4, 0x08, 0x40, 0x4b, 0xd8, 0x14, 0xdb, 0xfe, 0x00, 0x4c, 0xe1, 0x02, + 0xd9, 0xfe, 0x40, 0x42, 0xba, 0x04, 0x2c, 0x06, 0x80, 0x14, 0xe8, 0x98, + 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x8b, 0xfb, 0x00, + 0x4d, 0xe0, 0x02, 0x8a, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, + 0x9e, 0xfe, 0x00, 0xa9, 0x21, 0x4b, 0x45, 0x67, 0xa0, 0xfe, 0x00, 0x06, + 0x2e, 0x05, 0x01, 0xff, 0x0a, 0x08, 0x11, 0x06, 0x4d, 0x4b, 0x0d, 0xa2, + 0x08, 0x40, 0x45, 0x5c, 0x00, 0xc5, 0x08, 0x00, 0x45, 0x25, 0x06, 0xc6, + 0x08, 0x40, 0x4b, 0xd8, 0x14, 0x9f, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0x9d, + 0xfe, 0x40, 0xa1, 0xaf, 0x01, 0x42, 0x4e, 0x00, 0x47, 0x06, 0x80, 0x1c, + 0x49, 0xdb, 0xb0, 0x74, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x44, 0x67, + 0x00, 0x75, 0x06, 0x00, 0x43, 0x0f, 0x83, 0x76, 0x06, 0x00, 0x43, 0x4d, + 0x00, 0x78, 0x06, 0x40, 0x80, 0x01, 0xff, 0x4b, 0x07, 0x93, 0xbe, 0x06, + 0x80, 0x65, 0x4a, 0x97, 0x29, 0xea, 0xfe, 0x00, 0x44, 0x22, 0xe5, 0xc1, + 0x06, 0x80, 0x35, 0xa9, 0x27, 0x4b, 0x45, 0x67, 0xec, 0xfe, 0x00, 0x05, + 0x51, 0x00, 0x01, 0xff, 0x4a, 0x91, 0x3a, 0xff, 0x06, 0x00, 0x49, 0x19, + 0xb8, 0xc0, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xa5, + 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0xa4, 0xfb, 0x40, 0x4b, 0xd8, 0x14, 0xeb, + 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0xe9, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, + 0x97, 0x29, 0xa7, 0xfb, 0x00, 0xa9, 0x0c, 0x4b, 0x45, 0x67, 0xa9, 0xfb, + 0x00, 0x50, 0x51, 0x00, 0xc2, 0x06, 0x40, 0x4b, 0xd8, 0x14, 0xa8, 0xfb, + 0x00, 0x4c, 0xe1, 0x02, 0xa6, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, + 0x29, 0xab, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x45, 0x67, 0xad, 0xfb, 0x40, + 0x4b, 0xd8, 0x14, 0xac, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0xaa, 0xfb, 0x40, + 0xe8, 0x2d, 0x06, 0x80, 0x0d, 0x43, 0x58, 0x00, 0x21, 0x06, 0xc0, 0x00, + 0x4e, 0xdf, 0x02, 0x80, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, + 0xa2, 0xfe, 0x00, 0xa9, 0x59, 0x4b, 0x45, 0x67, 0xa4, 0xfe, 0x00, 0x05, + 0x51, 0x00, 0x01, 0xff, 0x66, 0x04, 0x06, 0x7c, 0x07, 0x00, 0x4b, 0x56, + 0x00, 0x81, 0x06, 0x00, 0x56, 0xf6, 0x30, 0x8a, 0x08, 0x00, 0x18, 0x09, + 0x09, 0x24, 0xb4, 0x01, 0xff, 0x0a, 0x08, 0x11, 0x11, 0x08, 0xc2, 0x06, + 0x01, 0xff, 0x45, 0x5c, 0x00, 0x57, 0x07, 0x00, 0x4e, 0x6d, 0x77, 0x82, + 0x06, 0x40, 0x45, 0x5c, 0x00, 0x85, 0x06, 0x00, 0x56, 0x2a, 0x32, 0x58, + 0x07, 0x40, 0xa1, 0x06, 0x45, 0x25, 0x06, 0x6e, 0x07, 0x40, 0x44, 0x5d, + 0x00, 0x72, 0x07, 0x00, 0x4b, 0x22, 0x09, 0x6f, 0x07, 0x40, 0x4b, 0xd8, + 0x14, 0xa3, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0xa1, 0xfe, 0x40, 0x42, 0x9e, + 0x12, 0xaf, 0x06, 0x80, 0x5f, 0x44, 0x5d, 0x94, 0x3a, 0x06, 0x80, 0x2a, + 0x43, 0xaa, 0x1d, 0xc8, 0x08, 0x00, 0x43, 0x2f, 0xe9, 0xb3, 0x06, 0xc0, + 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x97, 0xfb, 0x00, 0xa9, 0x06, + 0x4b, 0x45, 0x67, 0x99, 0xfb, 0x40, 0x4b, 0xd8, 0x14, 0x98, 0xfb, 0x00, + 0x4c, 0xe1, 0x02, 0x96, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, + 0xce, 0xfe, 0x00, 0xa9, 0x17, 0x4b, 0x45, 0x67, 0xd0, 0xfe, 0x00, 0x05, + 0x51, 0x00, 0x01, 0xff, 0x49, 0xf9, 0x10, 0xfc, 0x06, 0x00, 0x50, 0x07, + 0x11, 0xc3, 0x08, 0x40, 0x4b, 0xd8, 0x14, 0xcf, 0xfe, 0x00, 0x4c, 0xe1, + 0x02, 0xcd, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x93, 0xfb, + 0x00, 0xa9, 0x26, 0x4b, 0x45, 0x67, 0x95, 0xfb, 0x00, 0x05, 0x51, 0x00, + 0x01, 0xff, 0x4f, 0x22, 0x68, 0xb0, 0x08, 0x00, 0x44, 0x03, 0x07, 0xb0, + 0x06, 0x00, 0xb4, 0x01, 0xff, 0x4f, 0x08, 0x11, 0xb4, 0x06, 0x00, 0x4d, + 0x5e, 0x0d, 0xb2, 0x06, 0x40, 0x4b, 0xd8, 0x14, 0x94, 0xfb, 0x00, 0x4c, + 0xe1, 0x02, 0x92, 0xfb, 0x40, 0x48, 0x01, 0xba, 0xcc, 0x06, 0x80, 0x59, + 0x42, 0x4e, 0x00, 0x41, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, + 0x29, 0xd2, 0xfe, 0x00, 0xa9, 0x3b, 0x4b, 0x45, 0x67, 0xd4, 0xfe, 0x00, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x9f, 0x0a, 0x19, 0xb4, 0x01, 0xff, + 0x0a, 0x08, 0x11, 0x06, 0x4d, 0x5e, 0x0d, 0x60, 0x07, 0x40, 0x45, 0x25, + 0x06, 0xa5, 0x06, 0x00, 0x56, 0x2a, 0x32, 0x61, 0x07, 0x40, 0x45, 0x25, + 0x06, 0xa3, 0x06, 0x80, 0x06, 0x4b, 0xa0, 0x97, 0xa2, 0x06, 0x40, 0x55, + 0x02, 0x11, 0xa4, 0x08, 0x40, 0x4b, 0xd8, 0x14, 0xd3, 0xfe, 0x00, 0x4c, + 0xe1, 0x02, 0xd1, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xfd, + 0xfb, 0x00, 0xa9, 0x39, 0x4b, 0x45, 0x67, 0xff, 0xfb, 0x00, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x1c, 0xde, 0x05, 0x15, 0x4a, 0x91, 0x3a, 0x3d, 0x06, + 0x00, 0xb4, 0x01, 0xff, 0x4f, 0x08, 0x11, 0x3f, 0x06, 0x00, 0x4d, 0x4b, + 0x0d, 0x3e, 0x06, 0x40, 0x4a, 0x20, 0x06, 0x77, 0x07, 0x00, 0xb4, 0x01, + 0xff, 0x4a, 0xcc, 0xa2, 0x76, 0x07, 0x00, 0x48, 0x89, 0xc2, 0x75, 0x07, + 0x40, 0x4b, 0xd8, 0x14, 0xfe, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0xfc, 0xfb, + 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0xe5, 0xfb, 0x00, 0xa9, 0x06, + 0x4b, 0x45, 0x67, 0xe7, 0xfb, 0x40, 0x4b, 0xd8, 0x14, 0xe6, 0xfb, 0x00, + 0x4c, 0xe1, 0x02, 0xe4, 0xfb, 0x40, 0xa1, 0x7e, 0x02, 0x68, 0x0f, 0x50, + 0x07, 0xc2, 0x3c, 0x3a, 0x42, 0x1f, 0x01, 0x8e, 0x06, 0x80, 0x24, 0x43, + 0x4d, 0x00, 0x84, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, + 0x73, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x45, 0x67, 0x75, 0xfb, 0x40, 0x4b, + 0xd8, 0x14, 0x74, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0x72, 0xfb, 0x40, 0x80, + 0x01, 0xff, 0x4a, 0x97, 0x29, 0x87, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0x86, + 0xfb, 0x40, 0x43, 0x27, 0x85, 0x6e, 0x06, 0x00, 0x43, 0xb2, 0xaf, 0xa1, + 0x06, 0x00, 0x43, 0x9d, 0x12, 0x6f, 0x06, 0x40, 0x43, 0x22, 0x00, 0x8d, + 0x06, 0x80, 0x14, 0xec, 0x88, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, + 0x97, 0x29, 0x89, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0x88, 0xfb, 0x40, 0x80, + 0x01, 0xff, 0x4a, 0x97, 0x29, 0x83, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0x82, + 0xfb, 0x40, 0xe4, 0x36, 0x06, 0x80, 0x6f, 0x43, 0x22, 0x00, 0x8c, 0x06, + 0x80, 0x59, 0xec, 0x2f, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, + 0x29, 0xaa, 0xfe, 0x00, 0x4d, 0xe0, 0x02, 0xa9, 0xfe, 0x00, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x49, 0xf9, 0x10, 0x8a, 0x06, 0x80, 0x33, 0x4f, 0x8a, + 0x41, 0x90, 0x06, 0x00, 0x09, 0xc2, 0x20, 0x1f, 0x44, 0x03, 0x07, 0x89, + 0x06, 0x00, 0xb4, 0x01, 0xff, 0x0a, 0x08, 0x11, 0x06, 0x66, 0xc2, 0x06, + 0x59, 0x07, 0x40, 0x4f, 0xc3, 0x1f, 0x8f, 0x06, 0x00, 0x45, 0x25, 0x06, + 0xae, 0x08, 0x40, 0x4d, 0xff, 0x30, 0x5a, 0x07, 0x00, 0xf6, 0xee, 0x06, + 0x40, 0x4e, 0xda, 0x06, 0x8b, 0x06, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, + 0x29, 0x85, 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0x84, 0xfb, 0x40, 0x80, 0x01, + 0xff, 0x4a, 0x97, 0x29, 0xbe, 0xfe, 0x00, 0xa9, 0x0c, 0x4b, 0x45, 0x67, + 0xc0, 0xfe, 0x00, 0x4e, 0xc1, 0x77, 0xfb, 0x06, 0x40, 0x4b, 0xd8, 0x14, + 0xbf, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0xbd, 0xfe, 0x40, 0x42, 0x4e, 0x00, + 0x7b, 0x06, 0x80, 0x91, 0x01, 0xe8, 0x28, 0x06, 0xc0, 0x00, 0x80, 0x24, + 0x42, 0x4e, 0x00, 0x80, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x97, + 0x29, 0x5b, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x45, 0x67, 0x5d, 0xfb, 0x40, + 0x4b, 0xd8, 0x14, 0x5c, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0x5a, 0xfb, 0x40, + 0x4a, 0x97, 0x29, 0x90, 0xfe, 0x00, 0xa9, 0x52, 0x4b, 0x45, 0x67, 0x92, + 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x5e, 0xf9, 0x10, 0x51, 0x07, + 0x00, 0x4b, 0x56, 0x00, 0xa1, 0x08, 0x00, 0x56, 0xf6, 0x30, 0x55, 0x07, + 0x00, 0x06, 0x3c, 0x06, 0x20, 0xb4, 0x01, 0xff, 0x0a, 0x08, 0x11, 0x06, + 0x5b, 0xda, 0x1b, 0x54, 0x07, 0x40, 0x52, 0xca, 0x4c, 0x50, 0x07, 0x00, + 0x56, 0x2a, 0x32, 0x52, 0x07, 0xc0, 0x00, 0x53, 0x79, 0x23, 0x53, 0x07, + 0x40, 0x4a, 0x24, 0xa5, 0xb6, 0x08, 0x00, 0xf6, 0x56, 0x07, 0xc0, 0x00, + 0x46, 0x24, 0x06, 0xa0, 0x08, 0x40, 0x4b, 0xd8, 0x14, 0x91, 0xfe, 0x00, + 0x4c, 0xe1, 0x02, 0x8f, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, + 0x53, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x45, 0x67, 0x55, 0xfb, 0x40, 0x4b, + 0xd8, 0x14, 0x54, 0xfb, 0x00, 0x4c, 0xe1, 0x02, 0x52, 0xfb, 0x40, 0xe5, + 0xd5, 0x06, 0x00, 0x07, 0xb1, 0xbc, 0x9c, 0x03, 0x42, 0x9e, 0x01, 0x39, + 0x06, 0x80, 0xcb, 0x02, 0x43, 0x68, 0x00, 0x27, 0x06, 0xc0, 0x00, 0x80, + 0x01, 0xff, 0x4a, 0x97, 0x29, 0x8e, 0xfe, 0x00, 0x4d, 0xe0, 0x02, 0x8d, + 0xfe, 0x00, 0x47, 0x6c, 0x00, 0x49, 0x06, 0x80, 0x9e, 0x02, 0xb7, 0x01, + 0xff, 0x44, 0x92, 0x9c, 0x71, 0x06, 0x80, 0x84, 0x02, 0x04, 0x52, 0x00, + 0x01, 0xff, 0x09, 0x72, 0xad, 0x8b, 0x01, 0x49, 0xec, 0x1b, 0x7a, 0x08, + 0x00, 0x1d, 0xfb, 0x13, 0x75, 0x06, 0x56, 0x00, 0x45, 0x52, 0xc6, 0x4d, + 0x73, 0x08, 0x00, 0x4b, 0x1f, 0x8a, 0x22, 0x06, 0x80, 0x29, 0x53, 0x2e, + 0x47, 0x72, 0x08, 0x80, 0x11, 0x0b, 0x5e, 0x62, 0x01, 0xff, 0x45, 0x5c, + 0x00, 0x72, 0x06, 0x00, 0x45, 0x25, 0x06, 0x73, 0x06, 0x40, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x49, 0xec, 0x1b, 0x7c, 0x08, 0x00, 0x49, 0x16, 0xb2, + 0x7f, 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x82, 0xfe, 0x00, + 0x4d, 0xe0, 0x02, 0x81, 0xfe, 0x40, 0x45, 0x5c, 0x00, 0x23, 0x06, 0x80, + 0x16, 0x45, 0x25, 0x06, 0x25, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, + 0x97, 0x29, 0x88, 0xfe, 0x00, 0x4d, 0xe0, 0x02, 0x87, 0xfe, 0x40, 0x80, + 0x01, 0xff, 0x4a, 0x97, 0x29, 0x84, 0xfe, 0x00, 0x4d, 0xe0, 0x02, 0x83, + 0xfe, 0x40, 0x4a, 0xcc, 0xa2, 0x74, 0x07, 0x00, 0x48, 0x89, 0xc2, 0x73, + 0x07, 0x40, 0x52, 0x1a, 0x4b, 0x75, 0x08, 0x80, 0x57, 0x45, 0x27, 0x6d, + 0x70, 0x08, 0x00, 0x45, 0x27, 0x4b, 0x74, 0x08, 0x00, 0x05, 0xc3, 0x00, + 0x3b, 0xb2, 0x18, 0x4f, 0x1d, 0x6d, 0x71, 0x08, 0xc0, 0x00, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x49, 0xec, 0x1b, 0x7b, 0x08, 0x00, 0x49, 0x16, 0xb2, + 0x7e, 0x08, 0x40, 0x05, 0xc9, 0x00, 0x11, 0x09, 0xd7, 0xa7, 0x01, 0xff, + 0x45, 0x5c, 0x00, 0x76, 0x08, 0x00, 0x45, 0x25, 0x06, 0x79, 0x08, 0x40, + 0x45, 0x56, 0x00, 0x81, 0x08, 0x00, 0x49, 0x11, 0x4b, 0x77, 0x08, 0x40, + 0x45, 0x56, 0x00, 0x82, 0x08, 0x00, 0x49, 0x11, 0x4b, 0x78, 0x08, 0x40, + 0x05, 0x19, 0x00, 0x01, 0xff, 0x49, 0xec, 0x1b, 0x7d, 0x08, 0x00, 0x49, + 0x16, 0xb2, 0x80, 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x97, 0x29, 0x51, + 0xfb, 0x00, 0x4d, 0xe0, 0x02, 0x50, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, + 0x97, 0x29, 0xf0, 0xfe, 0x00, 0x4d, 0xe0, 0x02, 0xef, 0xfe, 0x40, 0x80, + 0x01, 0xff, 0x4a, 0x97, 0x29, 0xca, 0xfe, 0x00, 0xa9, 0x32, 0x4b, 0x45, + 0x67, 0xcc, 0xfe, 0x00, 0x06, 0x2e, 0x05, 0x01, 0xff, 0x0a, 0x08, 0x11, + 0x11, 0x08, 0xc2, 0x06, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x5d, 0x07, 0x00, + 0x50, 0x07, 0x29, 0x5f, 0x07, 0x40, 0x45, 0x5c, 0x00, 0xa0, 0x06, 0x00, + 0x45, 0x25, 0x06, 0xb3, 0x08, 0x00, 0x58, 0x97, 0x27, 0x5e, 0x07, 0x40, + 0x4b, 0xd8, 0x14, 0xcb, 0xfe, 0x00, 0x4c, 0xe1, 0x02, 0xc9, 0xfe, 0x40, + 0x43, 0xb2, 0xaf, 0xbb, 0x08, 0x00, 0x44, 0xda, 0x40, 0xbd, 0x08, 0x00, + 0x43, 0x9d, 0x12, 0xbc, 0x08, 0xc0, 0x00, 0x56, 0xba, 0x2e, 0xc4, 0x08, + 0x40, 0x45, 0x5c, 0x00, 0xf7, 0x08, 0x00, 0x45, 0x25, 0x06, 0xf9, 0x08, + 0x40, 0x4c, 0x7e, 0x29, 0xd1, 0x08, 0x00, 0x0a, 0xd6, 0xa7, 0x01, 0xff, + 0x45, 0x5c, 0x00, 0xce, 0x08, 0x00, 0x45, 0x25, 0x06, 0xcf, 0x08, 0x00, + 0x53, 0x07, 0x45, 0xd2, 0x08, 0x40, 0x80, 0x0d, 0x43, 0xb8, 0x09, 0x4d, + 0x06, 0xc0, 0x00, 0x4e, 0xdf, 0x02, 0x74, 0xfe, 0x40, 0x4d, 0xe0, 0x02, + 0x7a, 0xfe, 0x00, 0x4b, 0x45, 0x67, 0x7b, 0xfe, 0x00, 0x4e, 0xc1, 0x77, + 0xf6, 0x08, 0x40, 0x53, 0x9f, 0x45, 0x9f, 0x08, 0x00, 0x04, 0x58, 0x00, + 0x01, 0xff, 0x45, 0x5c, 0x00, 0x54, 0x06, 0x00, 0x45, 0x25, 0x06, 0x55, + 0x06, 0x40, 0x44, 0xcc, 0x0d, 0x4e, 0x06, 0x80, 0x12, 0x50, 0x1e, 0x5e, + 0x6d, 0x06, 0x00, 0x4e, 0xa7, 0x73, 0x02, 0x06, 0x00, 0x48, 0xa1, 0x14, + 0xd4, 0x06, 0x40, 0x80, 0x0d, 0x43, 0xb8, 0x09, 0x4b, 0x06, 0xc0, 0x00, + 0x4e, 0xdf, 0x02, 0x70, 0xfe, 0x40, 0x4d, 0xe0, 0x02, 0x76, 0xfe, 0x00, + 0x4b, 0x45, 0x67, 0x77, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, + 0xec, 0x1b, 0xf5, 0x08, 0x00, 0x44, 0x03, 0x07, 0xf4, 0x08, 0x00, 0x48, + 0x25, 0x09, 0x5e, 0x06, 0x40, 0x0c, 0xa3, 0x8a, 0x11, 0x06, 0x46, 0x04, + 0x01, 0xff, 0x44, 0x29, 0x45, 0xdd, 0x06, 0x00, 0x49, 0xa5, 0x5c, 0x1d, + 0x06, 0x40, 0x49, 0x2a, 0x0a, 0xeb, 0x06, 0x00, 0x48, 0x31, 0xbe, 0xea, + 0x06, 0x40, 0xa1, 0x24, 0x50, 0x6e, 0x5c, 0x6b, 0x06, 0x00, 0x53, 0x1a, + 0x45, 0xe2, 0x08, 0x00, 0x05, 0x3c, 0x01, 0x01, 0xff, 0x56, 0x4c, 0x2e, + 0xfb, 0x08, 0x80, 0x06, 0x47, 0x22, 0xc6, 0x9e, 0x08, 0x40, 0x49, 0x4a, + 0x37, 0xfc, 0x08, 0x40, 0x43, 0x1a, 0x04, 0x4f, 0x06, 0x80, 0x06, 0x4c, + 0xdf, 0x8d, 0x0d, 0x06, 0x40, 0x80, 0x0d, 0x43, 0xb8, 0x09, 0x4c, 0x06, + 0xc0, 0x00, 0x4e, 0xdf, 0x02, 0x72, 0xfe, 0x40, 0x4d, 0xe0, 0x02, 0x78, + 0xfe, 0x00, 0x4b, 0x45, 0x67, 0x79, 0xfe, 0x00, 0x48, 0x4b, 0x37, 0xfe, + 0x08, 0x40, 0x44, 0x19, 0x04, 0x0c, 0x06, 0x00, 0x05, 0x89, 0x08, 0x01, + 0xff, 0x45, 0x15, 0x59, 0xe5, 0x08, 0x80, 0x1a, 0x45, 0x27, 0x6d, 0xe4, + 0x08, 0x80, 0x0d, 0x45, 0x27, 0x4b, 0xe6, 0x08, 0xc0, 0x00, 0x43, 0xb8, + 0x09, 0xe9, 0x08, 0x40, 0x43, 0xb8, 0x09, 0xe7, 0x08, 0x40, 0x43, 0xb8, + 0x09, 0xe8, 0x08, 0x40, 0x14, 0x05, 0x3f, 0x45, 0xaf, 0x37, 0xb0, 0x01, + 0xff, 0x58, 0xa7, 0x26, 0x9f, 0x00, 0x00, 0x02, 0xd0, 0x00, 0x01, 0xff, + 0x4f, 0x17, 0x64, 0x50, 0x22, 0x00, 0x09, 0x5c, 0x0b, 0x01, 0xff, 0x59, + 0xd0, 0x20, 0x46, 0x22, 0x00, 0x06, 0x7b, 0x00, 0x01, 0xff, 0x4b, 0xf4, + 0x25, 0x70, 0x2a, 0x00, 0x42, 0x1e, 0x00, 0x45, 0x22, 0xc0, 0x00, 0x50, + 0x5e, 0x5a, 0x52, 0x22, 0x40, 0x44, 0xa3, 0x3f, 0xe4, 0x2b, 0x00, 0x47, + 0x4f, 0x32, 0x27, 0x00, 0x40, 0x45, 0xac, 0xd9, 0x7a, 0x23, 0x80, 0x81, + 0x04, 0x4d, 0x05, 0x7a, 0x40, 0x23, 0x00, 0xa3, 0xc6, 0x03, 0xa4, 0xea, + 0x02, 0x50, 0xce, 0x5c, 0x77, 0x23, 0x00, 0x56, 0x30, 0x30, 0x69, 0x23, + 0x00, 0xa9, 0xc8, 0x02, 0x04, 0xc2, 0xe5, 0xb7, 0x02, 0x04, 0xc3, 0x00, + 0xa6, 0x02, 0x45, 0x91, 0xa6, 0x75, 0x23, 0x80, 0x98, 0x02, 0x02, 0x7c, + 0x00, 0x6c, 0xb2, 0x5e, 0xb3, 0x3b, 0x4f, 0xff, 0x6c, 0x68, 0x23, 0x00, + 0x02, 0x50, 0x02, 0x06, 0x45, 0xc7, 0xe1, 0x6c, 0x23, 0x40, 0x80, 0x06, + 0x4a, 0xa5, 0x71, 0x4f, 0x23, 0x40, 0x4b, 0xf4, 0x91, 0x72, 0x23, 0x00, + 0x48, 0xf9, 0xc0, 0x5d, 0x23, 0x00, 0x05, 0xf0, 0x8f, 0x01, 0xff, 0x49, + 0x1b, 0x21, 0x61, 0x23, 0x00, 0x43, 0xfe, 0xc0, 0x55, 0x23, 0x00, 0x47, + 0xfa, 0x78, 0x51, 0x23, 0x40, 0x51, 0x47, 0x54, 0x6e, 0x23, 0x00, 0x48, + 0x0a, 0x7a, 0x3f, 0x23, 0x00, 0x4a, 0x18, 0xa7, 0x37, 0x23, 0x00, 0xb4, + 0x01, 0xff, 0x4c, 0xdf, 0x84, 0x63, 0x23, 0x00, 0x49, 0x08, 0xb1, 0x6d, + 0x23, 0x40, 0x42, 0x0b, 0x00, 0x74, 0x23, 0x00, 0x4e, 0xa1, 0x71, 0x46, + 0x23, 0x40, 0x42, 0xe8, 0x01, 0x95, 0x23, 0x80, 0x11, 0x04, 0x25, 0x4f, + 0x01, 0xff, 0x44, 0xd1, 0x0b, 0x5e, 0x23, 0x00, 0x48, 0x50, 0x54, 0x58, + 0x23, 0x40, 0x80, 0x01, 0xff, 0x49, 0x9c, 0x0c, 0x42, 0x23, 0x00, 0xa3, + 0x79, 0xa4, 0x4b, 0x45, 0x7b, 0x00, 0x38, 0x23, 0x00, 0x4c, 0x87, 0x00, + 0x44, 0x23, 0x00, 0x43, 0xfe, 0xc0, 0x3b, 0x23, 0x00, 0x02, 0x68, 0x00, + 0x29, 0x49, 0xeb, 0x27, 0x6f, 0x23, 0x00, 0x48, 0xbd, 0x30, 0x70, 0x23, + 0x00, 0x50, 0xb3, 0x02, 0x48, 0x23, 0x00, 0x45, 0xa0, 0x0c, 0x41, 0x23, + 0x00, 0x02, 0x50, 0x02, 0x01, 0xff, 0x46, 0xd7, 0xcd, 0x53, 0x23, 0x00, + 0x4b, 0xb8, 0x02, 0x50, 0x23, 0x40, 0x4d, 0x69, 0x06, 0x47, 0x23, 0x00, + 0x47, 0xee, 0x00, 0x43, 0x23, 0x40, 0x42, 0xd8, 0x00, 0x54, 0x23, 0x80, + 0x1f, 0xa9, 0x11, 0x03, 0xa6, 0x01, 0x01, 0xff, 0x46, 0xd7, 0xcd, 0x4c, + 0x23, 0x00, 0x4b, 0xb8, 0x02, 0x57, 0x23, 0x40, 0x45, 0xb4, 0x3f, 0x3a, + 0x23, 0x00, 0x44, 0x02, 0x00, 0x39, 0x23, 0x40, 0x42, 0x12, 0x00, 0x4d, + 0x23, 0x40, 0x45, 0x01, 0x04, 0x3c, 0x23, 0x00, 0x44, 0xab, 0x10, 0x60, + 0x23, 0x40, 0x49, 0x4f, 0x54, 0x79, 0x23, 0x40, 0x4b, 0xe4, 0x8f, 0x67, + 0x23, 0x00, 0x4a, 0xa5, 0x71, 0x45, 0x23, 0x40, 0x49, 0x1b, 0x21, 0x64, + 0x23, 0x00, 0x48, 0x50, 0x54, 0x5b, 0x23, 0x40, 0x45, 0x6d, 0xd7, 0x36, + 0x23, 0x00, 0x43, 0x20, 0x04, 0x73, 0x23, 0xc0, 0x00, 0x49, 0x4f, 0x54, + 0x78, 0x23, 0x40, 0x02, 0xd8, 0x00, 0x30, 0x4f, 0x9b, 0x67, 0x5a, 0x23, + 0x00, 0x03, 0xa6, 0x01, 0x01, 0xff, 0x80, 0x06, 0x4a, 0xa5, 0x71, 0x56, + 0x23, 0x40, 0x4b, 0xf4, 0x91, 0x71, 0x23, 0x00, 0x4a, 0xe5, 0x8f, 0x66, + 0x23, 0x00, 0x05, 0xf0, 0x8f, 0x01, 0xff, 0x43, 0xfe, 0xc0, 0x4e, 0x23, + 0x00, 0x48, 0x50, 0x54, 0x4a, 0x23, 0x40, 0x80, 0x11, 0x03, 0x38, 0x20, + 0x01, 0xff, 0x45, 0x60, 0x01, 0x4b, 0x23, 0x00, 0x48, 0x50, 0x54, 0x59, + 0x23, 0x40, 0x49, 0x1b, 0x21, 0x62, 0x23, 0x00, 0x45, 0x60, 0x01, 0x52, + 0x23, 0x00, 0x45, 0x99, 0x20, 0x6b, 0x23, 0x40, 0x06, 0x01, 0x04, 0x06, + 0x48, 0x81, 0xbf, 0x6a, 0x23, 0x40, 0x49, 0x9c, 0x0c, 0x49, 0x23, 0x00, + 0x49, 0x1b, 0x21, 0x65, 0x23, 0x00, 0x43, 0xfe, 0xc0, 0x3e, 0x23, 0x00, + 0x02, 0x60, 0x01, 0x06, 0x48, 0x50, 0x54, 0x5c, 0x23, 0x40, 0x42, 0x17, + 0x00, 0x5f, 0x23, 0x00, 0x43, 0x62, 0x01, 0x3d, 0x23, 0x40, 0x49, 0x4f, + 0x54, 0x76, 0x23, 0x40, 0x03, 0x79, 0x14, 0xa6, 0x01, 0x44, 0x89, 0xcf, + 0x93, 0x26, 0x00, 0x4a, 0xa6, 0xa0, 0xd1, 0x27, 0x00, 0xa7, 0x68, 0x42, + 0xda, 0x0a, 0x25, 0x26, 0x00, 0xf4, 0x1c, 0xf4, 0xc1, 0x00, 0x4e, 0x97, + 0x70, 0xf6, 0xf4, 0x01, 0x0b, 0xbc, 0x0e, 0x01, 0xff, 0xa3, 0x44, 0x68, + 0xe5, 0x03, 0x04, 0xf5, 0x01, 0x53, 0x23, 0x44, 0xf2, 0x27, 0x00, 0x4b, + 0xc3, 0x88, 0x11, 0x2a, 0x00, 0x51, 0xfb, 0x03, 0xba, 0x21, 0x00, 0xb4, + 0x01, 0xff, 0x53, 0x5d, 0x46, 0xb6, 0x21, 0x00, 0x0f, 0x02, 0x02, 0x01, + 0xff, 0x55, 0x76, 0x35, 0x8d, 0x2b, 0x00, 0x53, 0x8c, 0x45, 0x8e, 0x2b, + 0x00, 0x51, 0xfb, 0x03, 0x6f, 0x2b, 0x00, 0x54, 0x6d, 0x40, 0x8c, 0x2b, + 0x00, 0x52, 0x2a, 0x50, 0x8f, 0x2b, 0x40, 0x52, 0xea, 0x4d, 0x40, 0x29, + 0x00, 0x4f, 0xa7, 0x6a, 0x33, 0x22, 0x40, 0x49, 0xe6, 0x26, 0xa2, 0xf4, + 0x01, 0x42, 0x68, 0x00, 0x20, 0x22, 0x80, 0x12, 0x47, 0x5b, 0xcb, 0x20, + 0xf6, 0x01, 0x4a, 0xbc, 0xa8, 0x2b, 0x21, 0x00, 0x4b, 0xe1, 0x9b, 0x27, + 0xf6, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x48, 0x52, 0x4f, 0x9e, 0x29, + 0x00, 0x48, 0x50, 0x54, 0xa4, 0x29, 0x40, 0x11, 0x34, 0x56, 0x06, 0x4b, + 0x69, 0x97, 0xc0, 0xfa, 0x41, 0x90, 0x92, 0x10, 0x91, 0x9a, 0x0c, 0x92, + 0xb5, 0x08, 0x93, 0xbd, 0x04, 0x94, 0x83, 0x01, 0x95, 0x01, 0xff, 0x90, + 0x5a, 0x91, 0x30, 0x92, 0x06, 0x42, 0x8f, 0xe8, 0x46, 0x46, 0x41, 0xd0, + 0x3c, 0x46, 0x01, 0xd1, 0x3d, 0x46, 0x01, 0xd2, 0x3e, 0x46, 0x01, 0xd3, + 0x3f, 0x46, 0x01, 0xd4, 0x40, 0x46, 0x01, 0xd5, 0x41, 0x46, 0x01, 0xd6, + 0x42, 0x46, 0x01, 0xd7, 0x43, 0x46, 0x01, 0xd8, 0x44, 0x46, 0x01, 0xd9, + 0x45, 0x46, 0x41, 0xd0, 0x32, 0x46, 0x01, 0xd1, 0x33, 0x46, 0x01, 0xd2, + 0x34, 0x46, 0x01, 0xd3, 0x35, 0x46, 0x01, 0xd4, 0x36, 0x46, 0x01, 0xd5, + 0x37, 0x46, 0x01, 0xd6, 0x38, 0x46, 0x01, 0xd7, 0x39, 0x46, 0x01, 0xd8, + 0x3a, 0x46, 0x01, 0xd9, 0x3b, 0x46, 0x41, 0xd1, 0x29, 0x46, 0x01, 0xd2, + 0x2a, 0x46, 0x01, 0xd3, 0x2b, 0x46, 0x01, 0xd4, 0x2c, 0x46, 0x01, 0xd5, + 0x2d, 0x46, 0x01, 0xd6, 0x2e, 0x46, 0x01, 0xd7, 0x2f, 0x46, 0x01, 0xd8, + 0x30, 0x46, 0x01, 0xd9, 0x31, 0x46, 0x41, 0x90, 0x8c, 0x03, 0x91, 0xd7, + 0x02, 0x92, 0xac, 0x02, 0x93, 0x81, 0x02, 0x94, 0xd6, 0x01, 0x95, 0xa1, + 0x01, 0x96, 0x77, 0x97, 0x4d, 0x98, 0x23, 0x99, 0x01, 0xff, 0xd0, 0x21, + 0x46, 0x01, 0xd1, 0x22, 0x46, 0x01, 0xd2, 0x23, 0x46, 0x01, 0xd3, 0x24, + 0x46, 0x01, 0xd4, 0x25, 0x46, 0x01, 0xd5, 0x26, 0x46, 0x01, 0xd6, 0x27, + 0x46, 0x01, 0xd7, 0x28, 0x46, 0x41, 0xd0, 0x17, 0x46, 0x01, 0xd1, 0x18, + 0x46, 0x01, 0xd2, 0x19, 0x46, 0x01, 0xd3, 0x1a, 0x46, 0x01, 0xd4, 0x1b, + 0x46, 0x01, 0xd5, 0x1c, 0x46, 0x01, 0xd6, 0x1d, 0x46, 0x01, 0xd7, 0x1e, + 0x46, 0x01, 0xd8, 0x1f, 0x46, 0x01, 0xd9, 0x20, 0x46, 0x41, 0xd0, 0x0d, + 0x46, 0x01, 0xd1, 0x0e, 0x46, 0x01, 0xd2, 0x0f, 0x46, 0x01, 0xd3, 0x10, + 0x46, 0x01, 0xd4, 0x11, 0x46, 0x01, 0xd5, 0x12, 0x46, 0x01, 0xd6, 0x13, + 0x46, 0x01, 0xd7, 0x14, 0x46, 0x01, 0xd8, 0x15, 0x46, 0x01, 0xd9, 0x16, + 0x46, 0x41, 0xd0, 0x03, 0x46, 0x01, 0xd1, 0x04, 0x46, 0x01, 0xd2, 0x05, + 0x46, 0x01, 0xd3, 0x06, 0x46, 0x01, 0xd4, 0x07, 0x46, 0x01, 0xd5, 0x08, + 0x46, 0x01, 0xd6, 0x09, 0x46, 0x01, 0xd7, 0x0a, 0x46, 0x01, 0xd8, 0x0b, + 0x46, 0x01, 0xd9, 0x0c, 0x46, 0x41, 0xd0, 0xf7, 0x45, 0x81, 0x29, 0xd1, + 0xf9, 0x45, 0x01, 0xd2, 0xfa, 0x45, 0x01, 0xd3, 0xfb, 0x45, 0x01, 0xd4, + 0xfc, 0x45, 0x01, 0xd5, 0xfd, 0x45, 0x01, 0xd6, 0xfe, 0x45, 0x01, 0xd7, + 0xff, 0x45, 0x81, 0x08, 0xd8, 0x01, 0x46, 0x01, 0xd9, 0x02, 0x46, 0x41, + 0xe1, 0x00, 0x46, 0x41, 0xe1, 0xf8, 0x45, 0x41, 0xd0, 0xed, 0x45, 0x01, + 0xd1, 0xee, 0x45, 0x01, 0xd2, 0xef, 0x45, 0x01, 0xd3, 0xf0, 0x45, 0x01, + 0xd4, 0xf1, 0x45, 0x01, 0xd5, 0xf2, 0x45, 0x01, 0xd6, 0xf3, 0x45, 0x01, + 0xd7, 0xf4, 0x45, 0x01, 0xd8, 0xf5, 0x45, 0x01, 0xd9, 0xf6, 0x45, 0x41, + 0xd0, 0xe3, 0x45, 0x01, 0xd1, 0xe4, 0x45, 0x01, 0xd2, 0xe5, 0x45, 0x01, + 0xd3, 0xe6, 0x45, 0x01, 0xd4, 0xe7, 0x45, 0x01, 0xd5, 0xe8, 0x45, 0x01, + 0xd6, 0xe9, 0x45, 0x01, 0xd7, 0xea, 0x45, 0x01, 0xd8, 0xeb, 0x45, 0x01, + 0xd9, 0xec, 0x45, 0x41, 0xd0, 0xd9, 0x45, 0x01, 0xd1, 0xda, 0x45, 0x01, + 0xd2, 0xdb, 0x45, 0x01, 0xd3, 0xdc, 0x45, 0x01, 0xd4, 0xdd, 0x45, 0x01, + 0xd5, 0xde, 0x45, 0x01, 0xd6, 0xdf, 0x45, 0x01, 0xd7, 0xe0, 0x45, 0x01, + 0xd8, 0xe1, 0x45, 0x01, 0xd9, 0xe2, 0x45, 0x41, 0x90, 0x24, 0xd1, 0xd0, + 0x45, 0x01, 0xd2, 0xd1, 0x45, 0x01, 0xd3, 0xd2, 0x45, 0x01, 0xd4, 0xd3, + 0x45, 0x01, 0xd5, 0xd4, 0x45, 0x01, 0xd6, 0xd5, 0x45, 0x01, 0xd7, 0xd6, + 0x45, 0x01, 0xd8, 0xd7, 0x45, 0x01, 0xd9, 0xd8, 0x45, 0x41, 0x54, 0x1d, + 0x3b, 0xce, 0x45, 0x01, 0x53, 0x81, 0x42, 0xcf, 0x45, 0x41, 0xd0, 0xc4, + 0x45, 0x01, 0xd1, 0xc5, 0x45, 0x01, 0xd2, 0xc6, 0x45, 0x01, 0xd3, 0xc7, + 0x45, 0x01, 0xd4, 0xc8, 0x45, 0x01, 0xd5, 0xc9, 0x45, 0x01, 0xd6, 0xca, + 0x45, 0x01, 0xd7, 0xcb, 0x45, 0x01, 0xd8, 0xcc, 0x45, 0x01, 0xd9, 0xcd, + 0x45, 0x41, 0x90, 0xc5, 0x03, 0x91, 0x9a, 0x03, 0x92, 0xea, 0x02, 0x93, + 0xa8, 0x02, 0x94, 0xfd, 0x01, 0x95, 0xcd, 0x01, 0x96, 0x98, 0x01, 0x97, + 0x69, 0x98, 0x2d, 0x99, 0x01, 0xff, 0xd0, 0xba, 0x45, 0x01, 0xd1, 0xbb, + 0x45, 0x01, 0xd2, 0xbc, 0x45, 0x01, 0x47, 0x1c, 0xc4, 0xbd, 0x45, 0x01, + 0xd4, 0xbe, 0x45, 0x01, 0xd5, 0xbf, 0x45, 0x01, 0xd6, 0xc0, 0x45, 0x01, + 0xd7, 0xc1, 0x45, 0x01, 0xd8, 0xc2, 0x45, 0x01, 0xd9, 0xc3, 0x45, 0x41, + 0xd0, 0xad, 0x45, 0x01, 0xd1, 0xae, 0x45, 0x81, 0x2d, 0xd2, 0xb0, 0x45, + 0x01, 0x93, 0x1d, 0xd4, 0xb3, 0x45, 0x01, 0xd5, 0xb4, 0x45, 0x01, 0xd6, + 0xb5, 0x45, 0x81, 0x0c, 0xd7, 0xb7, 0x45, 0x01, 0xd8, 0xb8, 0x45, 0x01, + 0xd9, 0xb9, 0x45, 0x41, 0xe1, 0xb6, 0x45, 0x41, 0x49, 0xd4, 0xab, 0xb1, + 0x45, 0x01, 0xe1, 0xb2, 0x45, 0x41, 0xe1, 0xaf, 0x45, 0x41, 0xd0, 0xa2, + 0x45, 0x01, 0xd1, 0xa3, 0x45, 0x81, 0x20, 0xd2, 0xa5, 0x45, 0x01, 0xd3, + 0xa6, 0x45, 0x01, 0xd4, 0xa7, 0x45, 0x01, 0xd5, 0xa8, 0x45, 0x01, 0xd6, + 0xa9, 0x45, 0x01, 0xd7, 0xaa, 0x45, 0x01, 0xd8, 0xab, 0x45, 0x01, 0xd9, + 0xac, 0x45, 0x41, 0xe1, 0xa4, 0x45, 0x41, 0xd0, 0x96, 0x45, 0x01, 0xd1, + 0x97, 0x45, 0x01, 0xd2, 0x98, 0x45, 0x01, 0xd3, 0x99, 0x45, 0x01, 0xd4, + 0x9a, 0x45, 0x81, 0x19, 0xd5, 0x9c, 0x45, 0x01, 0xd6, 0x9d, 0x45, 0x01, + 0xd7, 0x9e, 0x45, 0x01, 0xd8, 0x9f, 0x45, 0x81, 0x04, 0xd9, 0xa1, 0x45, + 0x41, 0xe1, 0xa0, 0x45, 0x41, 0xe1, 0x9b, 0x45, 0x41, 0xd0, 0x8b, 0x45, + 0x01, 0xd1, 0x8c, 0x45, 0x01, 0xd2, 0x8d, 0x45, 0x01, 0xd3, 0x8e, 0x45, + 0x01, 0xd4, 0x8f, 0x45, 0x01, 0xd5, 0x90, 0x45, 0x01, 0xd6, 0x91, 0x45, + 0x01, 0xd7, 0x92, 0x45, 0x01, 0xd8, 0x93, 0x45, 0x01, 0xd9, 0x94, 0x45, + 0xc1, 0x00, 0xe1, 0x95, 0x45, 0x41, 0xd0, 0x81, 0x45, 0x01, 0xd1, 0x82, + 0x45, 0x01, 0xd2, 0x83, 0x45, 0x01, 0xd3, 0x84, 0x45, 0x01, 0xd4, 0x85, + 0x45, 0x01, 0xd5, 0x86, 0x45, 0x01, 0xd6, 0x87, 0x45, 0x01, 0xd7, 0x88, + 0x45, 0x01, 0xd8, 0x89, 0x45, 0x01, 0xd9, 0x8a, 0x45, 0x41, 0xd0, 0x72, + 0x45, 0x01, 0xd1, 0x73, 0x45, 0x01, 0x92, 0x29, 0xd3, 0x77, 0x45, 0x01, + 0xd4, 0x78, 0x45, 0x01, 0xd5, 0x79, 0x45, 0x01, 0xd6, 0x7a, 0x45, 0x81, + 0x0c, 0xd7, 0x7e, 0x45, 0x01, 0xd8, 0x7f, 0x45, 0x01, 0xd9, 0x80, 0x45, + 0x41, 0xe1, 0x7b, 0x45, 0x01, 0xe2, 0x7c, 0x45, 0x01, 0xe3, 0x7d, 0x45, + 0x41, 0xe1, 0x74, 0x45, 0x01, 0xe2, 0x75, 0x45, 0x01, 0xe3, 0x76, 0x45, + 0x41, 0xd0, 0x67, 0x45, 0x01, 0xd1, 0x68, 0x45, 0x01, 0xd2, 0x69, 0x45, + 0x01, 0xd3, 0x6a, 0x45, 0x01, 0xd4, 0x6b, 0x45, 0x01, 0xd5, 0x6c, 0x45, + 0x01, 0xd6, 0x6d, 0x45, 0x01, 0xd7, 0x6e, 0x45, 0x01, 0xd8, 0x6f, 0x45, + 0x01, 0xd9, 0x70, 0x45, 0xc1, 0x00, 0xe1, 0x71, 0x45, 0x41, 0xd0, 0x5d, + 0x45, 0x01, 0xd1, 0x5e, 0x45, 0x01, 0xd2, 0x5f, 0x45, 0x01, 0xd3, 0x60, + 0x45, 0x01, 0xd4, 0x61, 0x45, 0x01, 0xd5, 0x62, 0x45, 0x01, 0xd6, 0x63, + 0x45, 0x01, 0xd7, 0x64, 0x45, 0x01, 0xd8, 0x65, 0x45, 0x01, 0xd9, 0x66, + 0x45, 0x41, 0xd0, 0x52, 0x45, 0x01, 0xd1, 0x53, 0x45, 0x01, 0xd2, 0x54, + 0x45, 0x01, 0xd3, 0x55, 0x45, 0x01, 0xd4, 0x56, 0x45, 0x01, 0xd5, 0x57, + 0x45, 0x01, 0xd6, 0x58, 0x45, 0x01, 0xd7, 0x59, 0x45, 0x01, 0xd8, 0x5a, + 0x45, 0x01, 0xd9, 0x5b, 0x45, 0xc1, 0x00, 0xe1, 0x5c, 0x45, 0x41, 0x90, + 0xa4, 0x03, 0x91, 0xef, 0x02, 0x92, 0xbf, 0x02, 0x93, 0x94, 0x02, 0x94, + 0xe9, 0x01, 0x95, 0xbe, 0x01, 0x96, 0x8e, 0x01, 0x97, 0x64, 0x98, 0x35, + 0x99, 0x01, 0xff, 0xd0, 0x46, 0x45, 0x01, 0xd1, 0x47, 0x45, 0x01, 0xd2, + 0x48, 0x45, 0x01, 0xd3, 0x49, 0x45, 0x01, 0xd4, 0x4a, 0x45, 0x81, 0x19, + 0xd5, 0x4c, 0x45, 0x01, 0xd6, 0x4d, 0x45, 0x01, 0xd7, 0x4e, 0x45, 0x01, + 0xd8, 0x4f, 0x45, 0x01, 0xd9, 0x50, 0x45, 0xc1, 0x00, 0xe1, 0x51, 0x45, + 0x41, 0xe1, 0x4b, 0x45, 0x41, 0xd0, 0x3b, 0x45, 0x01, 0xd1, 0x3c, 0x45, + 0x01, 0xd2, 0x3d, 0x45, 0x01, 0xd3, 0x3e, 0x45, 0x01, 0xd4, 0x3f, 0x45, + 0x01, 0xd5, 0x40, 0x45, 0x01, 0xd6, 0x41, 0x45, 0x01, 0xd7, 0x42, 0x45, + 0x01, 0xd8, 0x43, 0x45, 0x01, 0xd9, 0x44, 0x45, 0xc1, 0x00, 0xe1, 0x45, + 0x45, 0x41, 0xd0, 0x31, 0x45, 0x01, 0xd1, 0x32, 0x45, 0x01, 0xd2, 0x33, + 0x45, 0x01, 0xd3, 0x34, 0x45, 0x01, 0xd4, 0x35, 0x45, 0x01, 0xd5, 0x36, + 0x45, 0x01, 0xd6, 0x37, 0x45, 0x01, 0xd7, 0x38, 0x45, 0x01, 0xd8, 0x39, + 0x45, 0x01, 0xd9, 0x3a, 0x45, 0x41, 0xd0, 0x26, 0x45, 0x01, 0xd1, 0x27, + 0x45, 0x01, 0xd2, 0x28, 0x45, 0x01, 0xd3, 0x29, 0x45, 0x01, 0xd4, 0x2a, + 0x45, 0x01, 0xd5, 0x2b, 0x45, 0x01, 0xd6, 0x2c, 0x45, 0x01, 0xd7, 0x2d, + 0x45, 0x81, 0x08, 0xd8, 0x2f, 0x45, 0x01, 0xd9, 0x30, 0x45, 0x41, 0xe1, + 0x2e, 0x45, 0x41, 0xd0, 0x1c, 0x45, 0x01, 0xd1, 0x1d, 0x45, 0x01, 0xd2, + 0x1e, 0x45, 0x01, 0xd3, 0x1f, 0x45, 0x01, 0xd4, 0x20, 0x45, 0x01, 0xd5, + 0x21, 0x45, 0x01, 0xd6, 0x22, 0x45, 0x01, 0xd7, 0x23, 0x45, 0x01, 0xd8, + 0x24, 0x45, 0x01, 0xd9, 0x25, 0x45, 0x41, 0xd0, 0x12, 0x45, 0x01, 0xd1, + 0x13, 0x45, 0x01, 0xd2, 0x14, 0x45, 0x01, 0xd3, 0x15, 0x45, 0x01, 0xd4, + 0x16, 0x45, 0x01, 0xd5, 0x17, 0x45, 0x01, 0xd6, 0x18, 0x45, 0x01, 0xd7, + 0x19, 0x45, 0x01, 0xd8, 0x1a, 0x45, 0x01, 0xd9, 0x1b, 0x45, 0x41, 0xd0, + 0x08, 0x45, 0x01, 0xd1, 0x09, 0x45, 0x01, 0xd2, 0x0a, 0x45, 0x01, 0xd3, + 0x0b, 0x45, 0x01, 0xd4, 0x0c, 0x45, 0x01, 0xd5, 0x0d, 0x45, 0x01, 0xd6, + 0x0e, 0x45, 0x01, 0xd7, 0x0f, 0x45, 0x01, 0xd8, 0x10, 0x45, 0x01, 0xd9, + 0x11, 0x45, 0x41, 0xd0, 0xfd, 0x44, 0x01, 0xd1, 0xfe, 0x44, 0x01, 0xd2, + 0xff, 0x44, 0x01, 0xd3, 0x00, 0x45, 0x01, 0xd4, 0x01, 0x45, 0x01, 0xd5, + 0x02, 0x45, 0x01, 0xd6, 0x03, 0x45, 0x01, 0xd7, 0x04, 0x45, 0x81, 0x08, + 0xd8, 0x06, 0x45, 0x01, 0xd9, 0x07, 0x45, 0x41, 0xe1, 0x05, 0x45, 0x41, + 0xd0, 0xf1, 0x44, 0x01, 0xd1, 0xf2, 0x44, 0x01, 0xd2, 0xf3, 0x44, 0x01, + 0xd3, 0xf4, 0x44, 0x01, 0xd4, 0xf5, 0x44, 0x01, 0xd5, 0xf6, 0x44, 0x81, + 0x15, 0xd6, 0xf8, 0x44, 0x81, 0x0c, 0xd7, 0xfa, 0x44, 0x01, 0xd8, 0xfb, + 0x44, 0x01, 0xd9, 0xfc, 0x44, 0x41, 0xe1, 0xf9, 0x44, 0x41, 0xe1, 0xf7, + 0x44, 0x41, 0xd0, 0xe3, 0x44, 0x01, 0xd1, 0xe4, 0x44, 0x01, 0xd2, 0xe5, + 0x44, 0x81, 0x26, 0xd3, 0xe8, 0x44, 0x01, 0xd4, 0xe9, 0x44, 0x01, 0xd5, + 0xea, 0x44, 0x01, 0xd6, 0xeb, 0x44, 0x01, 0xd7, 0xec, 0x44, 0x81, 0x0d, + 0xd8, 0xee, 0x44, 0x01, 0xd9, 0xef, 0x44, 0xc1, 0x00, 0xe1, 0xf0, 0x44, + 0x41, 0xe1, 0xed, 0x44, 0x41, 0xe1, 0xe6, 0x44, 0x01, 0xe2, 0xe7, 0x44, + 0x41, 0x90, 0x98, 0x03, 0x91, 0xdf, 0x02, 0x92, 0xaf, 0x02, 0x93, 0xff, + 0x01, 0x94, 0xd4, 0x01, 0x95, 0xa9, 0x01, 0x96, 0x7f, 0x97, 0x55, 0x98, + 0x2b, 0x99, 0x01, 0xff, 0xd0, 0xd9, 0x44, 0x01, 0xd1, 0xda, 0x44, 0x01, + 0xd2, 0xdb, 0x44, 0x01, 0xd3, 0xdc, 0x44, 0x01, 0xd4, 0xdd, 0x44, 0x01, + 0xd5, 0xde, 0x44, 0x01, 0xd6, 0xdf, 0x44, 0x01, 0xd7, 0xe0, 0x44, 0x01, + 0xd8, 0xe1, 0x44, 0x01, 0xd9, 0xe2, 0x44, 0x41, 0xd0, 0xcf, 0x44, 0x01, + 0xd1, 0xd0, 0x44, 0x01, 0xd2, 0xd1, 0x44, 0x01, 0xd3, 0xd2, 0x44, 0x01, + 0xd4, 0xd3, 0x44, 0x01, 0xd5, 0xd4, 0x44, 0x01, 0xd6, 0xd5, 0x44, 0x01, + 0xd7, 0xd6, 0x44, 0x01, 0xd8, 0xd7, 0x44, 0x01, 0xd9, 0xd8, 0x44, 0x41, + 0xd0, 0xc5, 0x44, 0x01, 0xd1, 0xc6, 0x44, 0x01, 0xd2, 0xc7, 0x44, 0x01, + 0xd3, 0xc8, 0x44, 0x01, 0xd4, 0xc9, 0x44, 0x01, 0xd5, 0xca, 0x44, 0x01, + 0xd6, 0xcb, 0x44, 0x01, 0xd7, 0xcc, 0x44, 0x01, 0xd8, 0xcd, 0x44, 0x01, + 0xd9, 0xce, 0x44, 0x41, 0xd0, 0xbb, 0x44, 0x01, 0xd1, 0xbc, 0x44, 0x01, + 0xd2, 0xbd, 0x44, 0x01, 0xd3, 0xbe, 0x44, 0x01, 0xd4, 0xbf, 0x44, 0x01, + 0xd5, 0xc0, 0x44, 0x01, 0xd6, 0xc1, 0x44, 0x01, 0xd7, 0xc2, 0x44, 0x01, + 0xd8, 0xc3, 0x44, 0x01, 0xd9, 0xc4, 0x44, 0x41, 0xd0, 0xb1, 0x44, 0x01, + 0xd1, 0xb2, 0x44, 0x01, 0xd2, 0xb3, 0x44, 0x01, 0xd3, 0xb4, 0x44, 0x01, + 0xd4, 0xb5, 0x44, 0x01, 0xd5, 0xb6, 0x44, 0x01, 0xd6, 0xb7, 0x44, 0x01, + 0xd7, 0xb8, 0x44, 0x01, 0xd8, 0xb9, 0x44, 0x01, 0xd9, 0xba, 0x44, 0x41, + 0xd0, 0xa7, 0x44, 0x01, 0xd1, 0xa8, 0x44, 0x01, 0xd2, 0xa9, 0x44, 0x01, + 0xd3, 0xaa, 0x44, 0x01, 0xd4, 0xab, 0x44, 0x01, 0xd5, 0xac, 0x44, 0x01, + 0xd6, 0xad, 0x44, 0x01, 0xd7, 0xae, 0x44, 0x01, 0xd8, 0xaf, 0x44, 0x01, + 0xd9, 0xb0, 0x44, 0x41, 0xd0, 0x9c, 0x44, 0x01, 0xd1, 0x9d, 0x44, 0x01, + 0xd2, 0x9e, 0x44, 0x01, 0xd3, 0x9f, 0x44, 0x01, 0xd4, 0xa0, 0x44, 0x01, + 0xd5, 0xa1, 0x44, 0x81, 0x10, 0xd6, 0xa3, 0x44, 0x01, 0xd7, 0xa4, 0x44, + 0x01, 0xd8, 0xa5, 0x44, 0x01, 0xd9, 0xa6, 0x44, 0x41, 0xe1, 0xa2, 0x44, + 0x41, 0xd0, 0x91, 0x44, 0x01, 0xd1, 0x92, 0x44, 0x01, 0xd2, 0x93, 0x44, + 0x01, 0xd3, 0x94, 0x44, 0x01, 0xd4, 0x95, 0x44, 0x01, 0xd5, 0x96, 0x44, + 0x81, 0x10, 0xd6, 0x98, 0x44, 0x01, 0xd7, 0x99, 0x44, 0x01, 0xd8, 0x9a, + 0x44, 0x01, 0xd9, 0x9b, 0x44, 0x41, 0xe1, 0x97, 0x44, 0x41, 0xd0, 0x84, + 0x44, 0x81, 0x29, 0xd1, 0x87, 0x44, 0x01, 0xd2, 0x88, 0x44, 0x01, 0xd3, + 0x89, 0x44, 0x01, 0xd4, 0x8a, 0x44, 0x01, 0xd5, 0x8b, 0x44, 0x81, 0x10, + 0xd6, 0x8d, 0x44, 0x01, 0xd7, 0x8e, 0x44, 0x01, 0xd8, 0x8f, 0x44, 0x01, + 0xd9, 0x90, 0x44, 0x41, 0xe1, 0x8c, 0x44, 0x41, 0xe1, 0x85, 0x44, 0x01, + 0xe2, 0x86, 0x44, 0x41, 0xd0, 0x6f, 0x44, 0x81, 0x51, 0xd1, 0x71, 0x44, + 0x81, 0x48, 0xd2, 0x73, 0x44, 0x81, 0x3f, 0xd3, 0x75, 0x44, 0x01, 0xd4, + 0x76, 0x44, 0x81, 0x2a, 0xd5, 0x7a, 0x44, 0x81, 0x1d, 0xd6, 0x7d, 0x44, + 0x01, 0xd7, 0x7e, 0x44, 0x81, 0x08, 0xd8, 0x82, 0x44, 0x01, 0xd9, 0x83, + 0x44, 0x41, 0xe1, 0x7f, 0x44, 0x01, 0xe2, 0x80, 0x44, 0x01, 0xe3, 0x81, + 0x44, 0x41, 0xe1, 0x7b, 0x44, 0x01, 0xe2, 0x7c, 0x44, 0x41, 0xe1, 0x77, + 0x44, 0x01, 0xe2, 0x78, 0x44, 0x01, 0xe3, 0x79, 0x44, 0x41, 0xe1, 0x74, + 0x44, 0x41, 0xe1, 0x72, 0x44, 0x41, 0xe1, 0x70, 0x44, 0x41, 0x90, 0xba, + 0x03, 0x91, 0x8a, 0x03, 0x92, 0xda, 0x02, 0x93, 0xaa, 0x02, 0x94, 0xec, + 0x01, 0x95, 0xc1, 0x01, 0x96, 0x89, 0x01, 0x97, 0x5f, 0x98, 0x35, 0x99, + 0x01, 0xff, 0xd0, 0x63, 0x44, 0x01, 0xd1, 0x64, 0x44, 0x01, 0xd2, 0x65, + 0x44, 0x01, 0xd3, 0x66, 0x44, 0x01, 0xd4, 0x67, 0x44, 0x01, 0xd5, 0x68, + 0x44, 0x01, 0xd6, 0x69, 0x44, 0x01, 0xd7, 0x6a, 0x44, 0x81, 0x0d, 0xd8, + 0x6c, 0x44, 0x81, 0x04, 0xd9, 0x6e, 0x44, 0x41, 0xe1, 0x6d, 0x44, 0x41, + 0xe1, 0x6b, 0x44, 0x41, 0xd0, 0x59, 0x44, 0x01, 0xd1, 0x5a, 0x44, 0x01, + 0xd2, 0x5b, 0x44, 0x01, 0xd3, 0x5c, 0x44, 0x01, 0xd4, 0x5d, 0x44, 0x01, + 0xd5, 0x5e, 0x44, 0x01, 0xd6, 0x5f, 0x44, 0x01, 0xd7, 0x60, 0x44, 0x01, + 0xd8, 0x61, 0x44, 0x01, 0xd9, 0x62, 0x44, 0x41, 0xd0, 0x4f, 0x44, 0x01, + 0xd1, 0x50, 0x44, 0x01, 0xd2, 0x51, 0x44, 0x01, 0xd3, 0x52, 0x44, 0x01, + 0xd4, 0x53, 0x44, 0x01, 0xd5, 0x54, 0x44, 0x01, 0xd6, 0x55, 0x44, 0x01, + 0xd7, 0x56, 0x44, 0x01, 0xd8, 0x57, 0x44, 0x01, 0xd9, 0x58, 0x44, 0x41, + 0xd0, 0x42, 0x44, 0x01, 0xd1, 0x43, 0x44, 0x01, 0xd2, 0x44, 0x44, 0x01, + 0xd3, 0x45, 0x44, 0x01, 0xd4, 0x46, 0x44, 0x01, 0xd5, 0x47, 0x44, 0x01, + 0xd6, 0x48, 0x44, 0x81, 0x0c, 0xd7, 0x4c, 0x44, 0x01, 0xd8, 0x4d, 0x44, + 0x01, 0xd9, 0x4e, 0x44, 0x41, 0xe1, 0x49, 0x44, 0x01, 0xe2, 0x4a, 0x44, + 0x01, 0xe3, 0x4b, 0x44, 0x41, 0xd0, 0x38, 0x44, 0x01, 0xd1, 0x39, 0x44, + 0x01, 0xd2, 0x3a, 0x44, 0x01, 0xd3, 0x3b, 0x44, 0x01, 0xd4, 0x3c, 0x44, + 0x01, 0xd5, 0x3d, 0x44, 0x01, 0xd6, 0x3e, 0x44, 0x01, 0xd7, 0x3f, 0x44, + 0x01, 0xd8, 0x40, 0x44, 0x01, 0xd9, 0x41, 0x44, 0x41, 0xd0, 0x2a, 0x44, + 0x01, 0xd1, 0x2b, 0x44, 0x81, 0x2e, 0xd2, 0x2d, 0x44, 0x01, 0xd3, 0x2e, + 0x44, 0x01, 0xd4, 0x2f, 0x44, 0x01, 0xd5, 0x30, 0x44, 0x81, 0x19, 0xd6, + 0x32, 0x44, 0x81, 0x0c, 0xd7, 0x35, 0x44, 0x01, 0xd8, 0x36, 0x44, 0x01, + 0xd9, 0x37, 0x44, 0x41, 0xe1, 0x33, 0x44, 0x01, 0xe2, 0x34, 0x44, 0x41, + 0xe1, 0x31, 0x44, 0x41, 0xe1, 0x2c, 0x44, 0x41, 0xd0, 0x1f, 0x44, 0x01, + 0xd1, 0x20, 0x44, 0x01, 0xd2, 0x21, 0x44, 0x01, 0xd3, 0x22, 0x44, 0x01, + 0xd4, 0x23, 0x44, 0x01, 0xd5, 0x24, 0x44, 0x01, 0xd6, 0x25, 0x44, 0x01, + 0xd7, 0x26, 0x44, 0x01, 0xd8, 0x27, 0x44, 0x01, 0xd9, 0x28, 0x44, 0xc1, + 0x00, 0xe1, 0x29, 0x44, 0x41, 0xd0, 0x14, 0x44, 0x01, 0xd1, 0x15, 0x44, + 0x01, 0xd2, 0x16, 0x44, 0x01, 0xd3, 0x17, 0x44, 0x01, 0xd4, 0x18, 0x44, + 0x01, 0xd5, 0x19, 0x44, 0x01, 0xd6, 0x1a, 0x44, 0x81, 0x0c, 0xd7, 0x1c, + 0x44, 0x01, 0xd8, 0x1d, 0x44, 0x01, 0xd9, 0x1e, 0x44, 0x41, 0xe1, 0x1b, + 0x44, 0x41, 0xd0, 0x09, 0x44, 0x81, 0x24, 0xd1, 0x0b, 0x44, 0x01, 0xd2, + 0x0c, 0x44, 0x01, 0xd3, 0x0d, 0x44, 0x01, 0xd4, 0x0e, 0x44, 0x01, 0xd5, + 0x0f, 0x44, 0x01, 0xd6, 0x10, 0x44, 0x01, 0xd7, 0x11, 0x44, 0x01, 0xd8, + 0x12, 0x44, 0x01, 0xd9, 0x13, 0x44, 0x41, 0xe1, 0x0a, 0x44, 0x41, 0xd1, + 0x00, 0x44, 0x01, 0xd2, 0x01, 0x44, 0x01, 0xd3, 0x02, 0x44, 0x01, 0xd4, + 0x03, 0x44, 0x01, 0xd5, 0x04, 0x44, 0x01, 0xd6, 0x05, 0x44, 0x01, 0xd7, + 0x06, 0x44, 0x01, 0xd8, 0x07, 0x44, 0x01, 0xd9, 0x08, 0x44, 0x41, 0x57, + 0xa1, 0x29, 0x3f, 0x2a, 0x00, 0x47, 0xa4, 0xc5, 0x91, 0xf6, 0x01, 0x4f, + 0x42, 0x66, 0xc8, 0xf3, 0x01, 0xb0, 0x01, 0xff, 0x46, 0xab, 0x39, 0x26, + 0x00, 0x00, 0x44, 0x05, 0x3c, 0xfa, 0xf3, 0x41, 0x49, 0x57, 0xad, 0xf0, + 0x23, 0x00, 0x14, 0x5d, 0x3c, 0x52, 0xa5, 0x3e, 0x4b, 0x38, 0x95, 0x7e, + 0xf4, 0x01, 0x02, 0x14, 0x00, 0x28, 0x0b, 0x55, 0x64, 0x11, 0x06, 0x6b, + 0x10, 0x01, 0xff, 0x5a, 0x96, 0x1d, 0xd5, 0x26, 0x00, 0x4e, 0x49, 0x72, + 0x87, 0x23, 0x40, 0x4b, 0xf4, 0x25, 0x4a, 0x22, 0x00, 0x42, 0x1e, 0x00, + 0x48, 0x22, 0xc0, 0x00, 0x57, 0xce, 0x03, 0x6f, 0x2a, 0x40, 0x4e, 0x2b, + 0x6f, 0x2e, 0x23, 0x00, 0x48, 0x72, 0x0b, 0x4c, 0x22, 0x40, 0x48, 0x97, + 0x90, 0x35, 0x21, 0x00, 0x44, 0x56, 0xdb, 0x97, 0x26, 0x00, 0x42, 0x34, + 0x00, 0x07, 0x00, 0x40, 0xa1, 0xde, 0x05, 0xa2, 0xa7, 0x05, 0xa3, 0xc6, + 0x04, 0xa4, 0xa5, 0x04, 0x45, 0xa1, 0x6b, 0x03, 0xf7, 0x01, 0x44, 0xbb, + 0x89, 0x02, 0xf7, 0x01, 0xa7, 0x8a, 0x04, 0xa8, 0xe8, 0x03, 0x04, 0xd3, + 0x1d, 0xd0, 0x03, 0xac, 0xc1, 0x03, 0xad, 0xa0, 0x03, 0x02, 0xd2, 0x02, + 0x8f, 0x03, 0x43, 0xab, 0xd7, 0x46, 0xf7, 0x01, 0xb0, 0xd6, 0x02, 0x03, + 0xd6, 0x01, 0xc5, 0x02, 0xb2, 0xf3, 0x01, 0xb3, 0x70, 0xb4, 0x45, 0x45, + 0x1d, 0xe1, 0x55, 0xf7, 0x01, 0xb6, 0x0f, 0x02, 0xa9, 0x01, 0x01, 0xff, + 0x43, 0x8b, 0x00, 0x04, 0xf7, 0x01, 0xf8, 0x4a, 0xf7, 0x41, 0x48, 0x29, + 0xbc, 0x28, 0xf7, 0x01, 0xa9, 0x01, 0xff, 0x45, 0x48, 0xde, 0x0a, 0xf7, + 0x81, 0x0d, 0x45, 0xb4, 0xe0, 0x16, 0xf7, 0xc1, 0x00, 0x42, 0x6c, 0xe8, + 0x17, 0xf7, 0x41, 0x4c, 0xbf, 0x83, 0x2f, 0xf7, 0x01, 0x8d, 0x01, 0xff, + 0xd2, 0x0b, 0xf7, 0x01, 0xd3, 0x0c, 0xf7, 0x41, 0x45, 0xcf, 0xd9, 0x3f, + 0xf7, 0x81, 0x1c, 0x02, 0x9e, 0x01, 0x0c, 0x46, 0xd8, 0x79, 0x51, 0xf7, + 0x01, 0x44, 0xde, 0xe7, 0x4d, 0xf7, 0x41, 0x44, 0x85, 0x90, 0x29, 0xf7, + 0x01, 0x45, 0x7e, 0x83, 0x48, 0xf7, 0x41, 0x42, 0x6c, 0xe8, 0x40, 0xf7, + 0x41, 0x02, 0x13, 0x00, 0x61, 0x4e, 0x8d, 0x6f, 0x4f, 0xf7, 0x01, 0x45, + 0xb8, 0xdc, 0x1b, 0xf7, 0x01, 0x43, 0x91, 0xc9, 0x54, 0xf7, 0x01, 0x45, + 0xe3, 0xb5, 0x47, 0xf7, 0x01, 0xb4, 0x34, 0xb5, 0x01, 0xff, 0x06, 0xe7, + 0x5c, 0x06, 0x44, 0xb4, 0x4c, 0x0d, 0xf7, 0x41, 0x05, 0x55, 0x3e, 0x06, + 0x43, 0xb5, 0x00, 0x5e, 0xf7, 0x41, 0x48, 0xc3, 0x83, 0x2c, 0xf7, 0x01, + 0x46, 0x50, 0x4b, 0x22, 0xf7, 0x01, 0x08, 0xc9, 0xc0, 0x01, 0xff, 0x48, + 0xc3, 0x83, 0x2e, 0xf7, 0x01, 0x46, 0x50, 0x4b, 0x27, 0xf7, 0x41, 0x4d, + 0xd1, 0x79, 0x52, 0xf7, 0x01, 0x53, 0x08, 0x47, 0x5c, 0xf7, 0xc1, 0x00, + 0x42, 0x6c, 0xe8, 0x5d, 0xf7, 0x41, 0x49, 0x13, 0xac, 0x39, 0xf7, 0x01, + 0xf4, 0x14, 0xf7, 0xc1, 0x00, 0x04, 0xf3, 0x01, 0x01, 0xff, 0x48, 0xc3, + 0x83, 0x2d, 0xf7, 0x01, 0x52, 0x50, 0x4b, 0x26, 0xf7, 0x41, 0xa5, 0x0d, + 0x48, 0x49, 0xbf, 0x18, 0xf7, 0xc1, 0x00, 0x42, 0x6c, 0xe8, 0x19, 0xf7, + 0x41, 0x45, 0x98, 0xd9, 0x3b, 0xf7, 0x81, 0x33, 0x45, 0x18, 0xdc, 0x32, + 0xf7, 0x81, 0x06, 0x44, 0x36, 0x08, 0x6d, 0xf7, 0x41, 0x04, 0xf3, 0x01, + 0x0f, 0x8d, 0x01, 0xff, 0xd2, 0x33, 0xf7, 0x01, 0xd3, 0x34, 0xf7, 0x01, + 0xd4, 0x35, 0xf7, 0x41, 0x48, 0xc3, 0x83, 0x30, 0xf7, 0x81, 0x06, 0x44, + 0xd3, 0x1d, 0x1f, 0xf7, 0x41, 0x42, 0x6c, 0xe8, 0x31, 0xf7, 0x41, 0x42, + 0x6c, 0xe8, 0x3c, 0xf7, 0x41, 0x47, 0xe3, 0xc5, 0x41, 0xf7, 0x01, 0x49, + 0x6c, 0xb3, 0x00, 0xf7, 0x41, 0x52, 0xa6, 0x4c, 0x0e, 0xf7, 0x01, 0xaf, + 0x15, 0x4a, 0x4a, 0xa7, 0x5f, 0xf7, 0x01, 0xb5, 0x01, 0xff, 0x44, 0x46, + 0xe7, 0x63, 0xf7, 0x01, 0x4a, 0x52, 0xa9, 0x64, 0xf7, 0x41, 0x47, 0xfc, + 0xcb, 0x58, 0xf7, 0x01, 0x44, 0x16, 0xe8, 0x4b, 0xf7, 0xc1, 0x00, 0x48, + 0xe1, 0xbb, 0x5a, 0xf7, 0x41, 0x43, 0xca, 0x00, 0x6f, 0xf7, 0x01, 0x43, + 0x76, 0x02, 0x15, 0xf7, 0x41, 0x48, 0xe9, 0xb9, 0x38, 0xf7, 0x01, 0x50, + 0xde, 0x5c, 0x10, 0xf7, 0x81, 0x06, 0x44, 0x14, 0x9a, 0x71, 0xf7, 0x41, + 0x8d, 0x01, 0xff, 0xd2, 0x11, 0xf7, 0x01, 0xd3, 0x12, 0xf7, 0x41, 0x47, + 0x99, 0xc6, 0x2a, 0xf7, 0x01, 0x48, 0x59, 0xbf, 0x53, 0xf7, 0x41, 0x44, + 0x85, 0x90, 0x1c, 0xf7, 0x81, 0x06, 0x4b, 0x7e, 0x90, 0x21, 0xf7, 0x41, + 0x42, 0x6c, 0xe8, 0x1d, 0xf7, 0x41, 0x04, 0x23, 0x00, 0x0f, 0xaf, 0x01, + 0xff, 0x48, 0xb9, 0xc0, 0x56, 0xf7, 0x01, 0x42, 0x42, 0x00, 0x6e, 0xf7, + 0x41, 0x44, 0xc8, 0xae, 0x72, 0xf7, 0x01, 0x45, 0xfc, 0xde, 0x73, 0xf7, + 0x41, 0x43, 0xae, 0x18, 0x1a, 0xf7, 0x01, 0x42, 0x9f, 0x03, 0x49, 0xf7, + 0x41, 0x48, 0x49, 0xba, 0x70, 0xf7, 0x01, 0x02, 0xe0, 0x02, 0x01, 0xff, + 0x45, 0x46, 0xe0, 0x61, 0xf7, 0x81, 0x06, 0x44, 0x15, 0x31, 0x60, 0xf7, + 0x41, 0x42, 0x6c, 0xe8, 0x62, 0xf7, 0x41, 0xa1, 0x4a, 0x47, 0xe9, 0xc7, + 0x13, 0xf7, 0x01, 0x06, 0x51, 0x4b, 0x34, 0xb2, 0x01, 0xff, 0x08, 0x51, + 0xbf, 0x1a, 0x46, 0x5f, 0xd6, 0x65, 0xf7, 0xc1, 0x00, 0x8d, 0x01, 0xff, + 0xd2, 0x66, 0xf7, 0x01, 0xd3, 0x67, 0xf7, 0x01, 0xd4, 0x68, 0xf7, 0x01, + 0xd5, 0x69, 0xf7, 0x41, 0x46, 0x50, 0x4b, 0x23, 0xf7, 0x81, 0x06, 0x44, + 0xd3, 0x1d, 0x1e, 0xf7, 0x41, 0x42, 0x6c, 0xe8, 0x24, 0xf7, 0x41, 0x4b, + 0x57, 0x4b, 0x25, 0xf7, 0x01, 0x43, 0x06, 0x0e, 0x20, 0xf7, 0x41, 0x46, + 0xcb, 0xd0, 0x50, 0xf7, 0x01, 0x42, 0x04, 0xea, 0x4c, 0xf7, 0x01, 0x4b, + 0x42, 0x99, 0x4e, 0xf7, 0x41, 0x07, 0x26, 0xc5, 0x24, 0x4a, 0x8a, 0xa3, + 0x3e, 0xf7, 0x01, 0x4b, 0x1f, 0x96, 0x0f, 0xf7, 0x01, 0x44, 0xee, 0xe6, + 0x42, 0xf7, 0x81, 0x06, 0x44, 0xde, 0x1e, 0x59, 0xf7, 0x41, 0x8d, 0x01, + 0xff, 0xd2, 0x43, 0xf7, 0x01, 0xd3, 0x44, 0xf7, 0x41, 0x44, 0x2a, 0xe6, + 0x6b, 0xf7, 0x01, 0x47, 0xff, 0xcc, 0x6c, 0xf7, 0x41, 0x42, 0x46, 0x00, + 0x01, 0xf7, 0x01, 0xac, 0x44, 0x46, 0xa0, 0x29, 0x5b, 0xf7, 0x01, 0x4b, + 0x19, 0x98, 0x2b, 0xf7, 0x01, 0x03, 0x7c, 0x00, 0x12, 0x46, 0x2d, 0xd5, + 0x3a, 0xf7, 0x01, 0x44, 0x67, 0x75, 0x57, 0xf7, 0x01, 0x4a, 0x2e, 0xaa, + 0x3d, 0xf7, 0x41, 0x80, 0x06, 0x46, 0x8b, 0xd1, 0x05, 0xf7, 0x41, 0x45, + 0x8d, 0xdf, 0x06, 0xf7, 0x81, 0x0d, 0x45, 0x45, 0xe1, 0x08, 0xf7, 0xc1, + 0x00, 0x42, 0x6c, 0xe8, 0x09, 0xf7, 0x41, 0x42, 0x6c, 0xe8, 0x07, 0xf7, + 0x41, 0x45, 0x55, 0xdb, 0x6a, 0xf7, 0x01, 0x44, 0xd2, 0xe5, 0x36, 0xf7, + 0x81, 0x06, 0x42, 0x9f, 0x03, 0x45, 0xf7, 0x41, 0x42, 0x6c, 0xe8, 0x37, + 0xf7, 0x41, 0x80, 0x01, 0xff, 0x48, 0xf9, 0xb9, 0xec, 0xf6, 0x01, 0x49, + 0xa4, 0xae, 0xeb, 0xf6, 0x41, 0x16, 0x54, 0x2f, 0x8c, 0x03, 0x06, 0xf4, + 0x05, 0xc5, 0x02, 0x07, 0xf1, 0x04, 0x6b, 0x08, 0xec, 0xa5, 0x5b, 0xb3, + 0x34, 0x0b, 0x70, 0x70, 0x01, 0xff, 0xe1, 0x20, 0x17, 0x81, 0x1a, 0xe5, + 0x26, 0x17, 0x01, 0xe9, 0x22, 0x17, 0x81, 0x0d, 0xef, 0x28, 0x17, 0x01, + 0xf5, 0x24, 0x17, 0xc1, 0x00, 0xf5, 0x25, 0x17, 0x41, 0xe9, 0x23, 0x17, + 0x41, 0xe1, 0x21, 0x17, 0x01, 0xe9, 0x29, 0x17, 0x01, 0xed, 0x2a, 0x17, + 0x01, 0xf7, 0x27, 0x17, 0x41, 0x04, 0xdc, 0x02, 0x06, 0x48, 0xe5, 0x9a, + 0x3f, 0x17, 0x41, 0x46, 0x0b, 0xd3, 0x2b, 0x17, 0x01, 0x45, 0xdd, 0xdf, + 0x3e, 0x17, 0x01, 0xb3, 0x01, 0xff, 0x46, 0x97, 0x08, 0x3d, 0x17, 0x01, + 0x4c, 0x2b, 0x8a, 0x3c, 0x17, 0x41, 0x42, 0x92, 0x01, 0x3a, 0x17, 0x01, + 0x45, 0x38, 0x29, 0x3b, 0x17, 0x41, 0xe1, 0x12, 0x17, 0x81, 0xb9, 0x01, + 0xa2, 0xac, 0x01, 0xa3, 0x9f, 0x01, 0xa4, 0x86, 0x01, 0xa7, 0x7a, 0x42, + 0x22, 0x00, 0x11, 0x17, 0x01, 0xaa, 0x68, 0xab, 0x5c, 0xac, 0x50, 0x42, + 0x6c, 0x00, 0x09, 0x17, 0x01, 0xae, 0x32, 0xb0, 0x26, 0x42, 0x71, 0x00, + 0x0d, 0x17, 0x01, 0x42, 0x45, 0x05, 0x0f, 0x17, 0x01, 0xb4, 0x01, 0xff, + 0xe1, 0x04, 0x17, 0x01, 0x42, 0x22, 0x00, 0x0c, 0x17, 0x01, 0xb4, 0x01, + 0xff, 0xe1, 0x41, 0x17, 0x01, 0x42, 0x22, 0x00, 0x42, 0x17, 0x41, 0xe1, + 0x06, 0x17, 0x01, 0x42, 0x22, 0x00, 0x07, 0x17, 0x41, 0xe1, 0x03, 0x17, + 0x01, 0x42, 0x24, 0x02, 0x02, 0x17, 0x01, 0x42, 0x2f, 0x04, 0x45, 0x17, + 0x01, 0x42, 0x20, 0x20, 0x10, 0x17, 0x41, 0xe1, 0x0e, 0x17, 0x01, 0x42, + 0x74, 0x00, 0x46, 0x17, 0x41, 0xe1, 0x00, 0x17, 0x01, 0x42, 0x22, 0x00, + 0x01, 0x17, 0x41, 0xe1, 0x0a, 0x17, 0x01, 0x42, 0x22, 0x00, 0x19, 0x17, + 0x41, 0xe1, 0x15, 0x17, 0x01, 0x42, 0x22, 0x00, 0x17, 0x17, 0x41, 0xe1, + 0x13, 0x17, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x14, 0x17, 0x41, 0xe1, + 0x43, 0x17, 0x01, 0x42, 0x22, 0x00, 0x44, 0x17, 0x41, 0xe1, 0x40, 0x17, + 0x01, 0x42, 0x22, 0x00, 0x0b, 0x17, 0x41, 0xe1, 0x08, 0x17, 0x01, 0x42, + 0x22, 0x00, 0x18, 0x17, 0x41, 0x09, 0x6a, 0x10, 0x01, 0xff, 0x42, 0x16, + 0x00, 0x1a, 0x17, 0x01, 0x42, 0x24, 0x02, 0x16, 0x17, 0x01, 0x42, 0x12, + 0x00, 0x05, 0x17, 0x41, 0x45, 0xd1, 0x09, 0x38, 0x17, 0x01, 0xa6, 0x2e, + 0x44, 0xb8, 0x27, 0x39, 0x17, 0x01, 0x43, 0xcd, 0x09, 0x31, 0x17, 0x01, + 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, 0x30, 0x17, 0x41, 0x44, 0x25, + 0x01, 0x33, 0x17, 0x01, 0x42, 0x15, 0x02, 0x32, 0x17, 0x41, 0x44, 0x96, + 0x1b, 0x37, 0x17, 0x01, 0x42, 0x30, 0x27, 0x36, 0x17, 0x41, 0x43, 0xd7, + 0x04, 0x35, 0x17, 0x01, 0x43, 0xfb, 0x05, 0x34, 0x17, 0x41, 0xac, 0x06, + 0x42, 0x71, 0x00, 0x1e, 0x17, 0x41, 0xe1, 0x1d, 0x17, 0x01, 0x4a, 0x1c, + 0xa3, 0x1f, 0x17, 0x41, 0x05, 0xfa, 0xdb, 0x06, 0x4c, 0xcb, 0x8c, 0xa1, + 0xf6, 0x41, 0x4a, 0x2e, 0xa0, 0x02, 0x01, 0x01, 0x59, 0x4d, 0x21, 0x3c, + 0x01, 0x01, 0x5c, 0x89, 0x16, 0x3d, 0x01, 0x01, 0x08, 0x90, 0x16, 0x84, + 0x03, 0x07, 0xbf, 0x35, 0x38, 0xb7, 0x01, 0xff, 0x06, 0x8b, 0x12, 0x11, + 0x0e, 0xd1, 0x73, 0x01, 0xff, 0x43, 0xc5, 0x06, 0x01, 0x01, 0x01, 0x44, + 0xf0, 0x07, 0x00, 0x01, 0x41, 0x49, 0x8d, 0xad, 0x37, 0x01, 0x01, 0xa6, + 0x0c, 0x4e, 0x2f, 0x75, 0x39, 0x01, 0x01, 0x4d, 0xbd, 0x81, 0x3a, 0x01, + 0x41, 0x4c, 0x99, 0x16, 0x38, 0x01, 0x01, 0x4d, 0xe9, 0x7f, 0x3b, 0x01, + 0x41, 0x45, 0xd1, 0x09, 0x0e, 0x01, 0x81, 0xa7, 0x02, 0xa6, 0xd9, 0x01, + 0x44, 0xb8, 0x27, 0x0f, 0x01, 0x81, 0xb6, 0x01, 0x43, 0xcd, 0x09, 0x07, + 0x01, 0x81, 0x9f, 0x01, 0xb3, 0x59, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, + 0x10, 0x01, 0x81, 0x49, 0xa8, 0x24, 0xb7, 0x01, 0xff, 0x44, 0x98, 0x1b, + 0x11, 0x01, 0x81, 0x14, 0xef, 0x08, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, + 0x47, 0xe9, 0x0f, 0x1a, 0x01, 0x01, 0x48, 0x69, 0x58, 0x23, 0x01, 0x41, + 0x49, 0x68, 0x58, 0x2c, 0x01, 0x41, 0x44, 0xf3, 0x0f, 0x12, 0x01, 0x81, + 0x16, 0x43, 0x26, 0x01, 0x09, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, + 0xe9, 0x0f, 0x1b, 0x01, 0x01, 0x48, 0x69, 0x58, 0x24, 0x01, 0x41, 0x49, + 0x68, 0x58, 0x2d, 0x01, 0x41, 0x49, 0x68, 0x58, 0x2b, 0x01, 0x41, 0x44, + 0x96, 0x1b, 0x0d, 0x01, 0x81, 0x22, 0x42, 0x30, 0x27, 0x0c, 0x01, 0xc1, + 0x00, 0x80, 0x0d, 0x42, 0xf5, 0x0f, 0x15, 0x01, 0xc1, 0x00, 0x49, 0x68, + 0x58, 0x30, 0x01, 0x41, 0x47, 0xe9, 0x0f, 0x1e, 0x01, 0x01, 0x48, 0x69, + 0x58, 0x27, 0x01, 0x41, 0x80, 0x0d, 0x42, 0xf5, 0x0f, 0x16, 0x01, 0xc1, + 0x00, 0x49, 0x68, 0x58, 0x31, 0x01, 0x41, 0x47, 0xe9, 0x0f, 0x1f, 0x01, + 0x01, 0x48, 0x69, 0x58, 0x28, 0x01, 0x41, 0x80, 0x01, 0xff, 0x47, 0xe9, + 0x0f, 0x19, 0x01, 0x01, 0x48, 0x69, 0x58, 0x22, 0x01, 0x41, 0x80, 0x0d, + 0x42, 0xf5, 0x0f, 0x18, 0x01, 0xc1, 0x00, 0x49, 0x68, 0x58, 0x33, 0x01, + 0x41, 0x47, 0xe9, 0x0f, 0x21, 0x01, 0x01, 0x48, 0x69, 0x58, 0x2a, 0x01, + 0x41, 0xa9, 0x26, 0xaf, 0x01, 0xff, 0x43, 0xf4, 0x0f, 0x13, 0x01, 0x81, + 0x16, 0x42, 0x42, 0x00, 0x0a, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, + 0xe9, 0x0f, 0x1c, 0x01, 0x01, 0x48, 0x69, 0x58, 0x25, 0x01, 0x41, 0x49, + 0x68, 0x58, 0x2e, 0x01, 0x41, 0x43, 0xe4, 0x47, 0x14, 0x01, 0x81, 0x16, + 0x42, 0x32, 0x00, 0x0b, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0xe9, + 0x0f, 0x1d, 0x01, 0x01, 0x48, 0x69, 0x58, 0x26, 0x01, 0x41, 0x49, 0x68, + 0x58, 0x2f, 0x01, 0x41, 0x80, 0x0b, 0xf9, 0x17, 0x01, 0xc1, 0x00, 0x49, + 0x68, 0x58, 0x32, 0x01, 0x41, 0x47, 0xe9, 0x0f, 0x20, 0x01, 0x01, 0x48, + 0x69, 0x58, 0x29, 0x01, 0x41, 0x4e, 0x2f, 0x75, 0x3e, 0x01, 0x01, 0x4d, + 0xbd, 0x81, 0x3f, 0x01, 0x41, 0x56, 0x04, 0x30, 0x01, 0x21, 0x00, 0x4e, + 0x77, 0x71, 0x79, 0xfa, 0x01, 0x48, 0x29, 0xbd, 0x2c, 0x26, 0x00, 0x04, + 0xa6, 0x12, 0x14, 0xad, 0x06, 0x43, 0xbc, 0x03, 0xd1, 0xf9, 0x41, 0x44, + 0xf1, 0x7d, 0xe5, 0x2b, 0x00, 0x4e, 0x2d, 0x72, 0x9f, 0xf3, 0x41, 0x4f, + 0x44, 0x64, 0x44, 0xe9, 0x01, 0xa3, 0xd7, 0x02, 0x06, 0xf4, 0x05, 0x90, + 0x02, 0x07, 0xe7, 0x66, 0xff, 0x01, 0x45, 0x56, 0x00, 0x47, 0xe9, 0x01, + 0x08, 0xd7, 0x14, 0xe8, 0x01, 0xae, 0xd9, 0x01, 0x0d, 0x7c, 0x07, 0x06, + 0x50, 0x3e, 0x62, 0x45, 0xe9, 0x41, 0x44, 0x44, 0x64, 0x22, 0xe9, 0x01, + 0xa2, 0xbc, 0x01, 0x43, 0x98, 0x14, 0x37, 0xe9, 0x01, 0xa4, 0xa7, 0x01, + 0xe5, 0x2b, 0xe9, 0x01, 0x42, 0xed, 0x06, 0x2c, 0xe9, 0x01, 0xa7, 0x90, + 0x01, 0x42, 0x22, 0x00, 0x38, 0xe9, 0x01, 0xe9, 0x2d, 0xe9, 0x01, 0x44, + 0xbe, 0xe5, 0x36, 0xe9, 0x01, 0xab, 0x6c, 0x44, 0xed, 0x81, 0x24, 0xe9, + 0x01, 0x44, 0x36, 0xe6, 0x25, 0xe9, 0x01, 0xae, 0x4c, 0xef, 0x2e, 0xe9, + 0x01, 0x42, 0x6f, 0x02, 0x28, 0xe9, 0x01, 0x44, 0x65, 0xdf, 0x39, 0xe9, + 0x01, 0x42, 0x71, 0x00, 0x2a, 0xe9, 0x01, 0xb3, 0x28, 0x42, 0x5c, 0x01, + 0x3c, 0xe9, 0x01, 0xf5, 0x35, 0xe9, 0x01, 0x42, 0xb4, 0x09, 0x3e, 0xe9, + 0x01, 0x43, 0x0f, 0x83, 0x31, 0xe9, 0x01, 0xb9, 0x06, 0x43, 0x3d, 0xb8, + 0x41, 0xe9, 0x41, 0xe1, 0x34, 0xe9, 0x01, 0x42, 0xb0, 0x01, 0x30, 0xe9, + 0x41, 0x42, 0x22, 0x00, 0x43, 0xe9, 0x01, 0x49, 0x6b, 0xb1, 0x27, 0xe9, + 0x41, 0x42, 0x22, 0x00, 0x3d, 0xe9, 0x01, 0x42, 0x24, 0x0a, 0x32, 0xe9, + 0x01, 0x42, 0x20, 0x20, 0x3b, 0xe9, 0x41, 0x42, 0x9e, 0x12, 0x33, 0xe9, + 0x01, 0x42, 0x22, 0x00, 0x3f, 0xe9, 0x01, 0x42, 0x9c, 0x01, 0x42, 0xe9, + 0x41, 0xe1, 0x3a, 0xe9, 0x01, 0x42, 0xbc, 0x04, 0x40, 0xe9, 0x41, 0x44, + 0x58, 0x17, 0x23, 0xe9, 0x01, 0x42, 0x22, 0x00, 0x2f, 0xe9, 0x41, 0xe1, + 0x26, 0xe9, 0x01, 0x42, 0xb0, 0x01, 0x29, 0xe9, 0x41, 0x50, 0x9b, 0x56, + 0x4b, 0xe9, 0x01, 0x44, 0xc1, 0x3a, 0x4a, 0xe9, 0x41, 0x50, 0xad, 0x00, + 0x5e, 0xe9, 0x01, 0x4d, 0xbd, 0x30, 0x5f, 0xe9, 0x41, 0x54, 0x11, 0x3d, + 0x49, 0xe9, 0x01, 0x48, 0xb5, 0x00, 0x46, 0xe9, 0x41, 0x45, 0xd1, 0x09, + 0x58, 0xe9, 0x01, 0xa6, 0x2e, 0x44, 0xb8, 0x27, 0x59, 0xe9, 0x01, 0x43, + 0xcd, 0x09, 0x51, 0xe9, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xf5, 0x1b, + 0x50, 0xe9, 0x41, 0x44, 0x25, 0x01, 0x53, 0xe9, 0x01, 0x42, 0x15, 0x02, + 0x52, 0xe9, 0x41, 0x44, 0x96, 0x1b, 0x57, 0xe9, 0x01, 0x42, 0x30, 0x27, + 0x56, 0xe9, 0x41, 0x43, 0xd7, 0x04, 0x55, 0xe9, 0x01, 0x43, 0xfb, 0x05, + 0x54, 0xe9, 0x41, 0x0e, 0xea, 0x04, 0x06, 0x51, 0x3f, 0x2f, 0x48, 0xe9, + 0x41, 0x44, 0x44, 0x64, 0x00, 0xe9, 0x01, 0xa2, 0xbc, 0x01, 0x43, 0x98, + 0x14, 0x15, 0xe9, 0x01, 0xa4, 0xa7, 0x01, 0xe5, 0x09, 0xe9, 0x01, 0x42, + 0xed, 0x06, 0x0a, 0xe9, 0x01, 0xa7, 0x90, 0x01, 0x42, 0x22, 0x00, 0x16, + 0xe9, 0x01, 0xe9, 0x0b, 0xe9, 0x01, 0x44, 0xbe, 0xe5, 0x14, 0xe9, 0x01, + 0xab, 0x6c, 0x44, 0xed, 0x81, 0x02, 0xe9, 0x01, 0x44, 0x36, 0xe6, 0x03, + 0xe9, 0x01, 0xae, 0x4c, 0xef, 0x0c, 0xe9, 0x01, 0x42, 0x6f, 0x02, 0x06, + 0xe9, 0x01, 0x44, 0x65, 0xdf, 0x17, 0xe9, 0x01, 0x42, 0x71, 0x00, 0x08, + 0xe9, 0x01, 0xb3, 0x28, 0x42, 0x5c, 0x01, 0x1a, 0xe9, 0x01, 0xf5, 0x13, + 0xe9, 0x01, 0x42, 0xb4, 0x09, 0x1c, 0xe9, 0x01, 0x43, 0x0f, 0x83, 0x0f, + 0xe9, 0x01, 0xb9, 0x06, 0x43, 0x3d, 0xb8, 0x1f, 0xe9, 0x41, 0xe1, 0x12, + 0xe9, 0x01, 0x42, 0xb0, 0x01, 0x0e, 0xe9, 0x41, 0x42, 0x22, 0x00, 0x21, + 0xe9, 0x01, 0x49, 0x6b, 0xb1, 0x05, 0xe9, 0x41, 0x42, 0x22, 0x00, 0x1b, + 0xe9, 0x01, 0x42, 0x24, 0x0a, 0x10, 0xe9, 0x01, 0x42, 0x20, 0x20, 0x19, + 0xe9, 0x41, 0x42, 0x9e, 0x12, 0x11, 0xe9, 0x01, 0x42, 0x22, 0x00, 0x1d, + 0xe9, 0x01, 0x42, 0x9c, 0x01, 0x20, 0xe9, 0x41, 0xe1, 0x18, 0xe9, 0x01, + 0x42, 0xbc, 0x04, 0x1e, 0xe9, 0x41, 0x44, 0x58, 0x17, 0x01, 0xe9, 0x01, + 0x42, 0x22, 0x00, 0x0d, 0xe9, 0x41, 0xe1, 0x04, 0xe9, 0x01, 0x42, 0xb0, + 0x01, 0x07, 0xe9, 0x41, 0x48, 0x9d, 0x2a, 0xe6, 0x23, 0x00, 0x02, 0x18, + 0x04, 0x27, 0x49, 0x67, 0x4c, 0x06, 0x00, 0x00, 0x07, 0x50, 0xcc, 0x11, + 0x05, 0xd0, 0x34, 0x01, 0xff, 0x45, 0xe0, 0x03, 0xb4, 0x00, 0x00, 0x44, + 0x05, 0x02, 0x9f, 0x29, 0x40, 0x53, 0xe0, 0x42, 0x6d, 0x20, 0x00, 0x52, + 0xf4, 0x4f, 0x6b, 0x20, 0x40, 0x45, 0x88, 0xdf, 0x97, 0xfa, 0x01, 0x46, + 0x74, 0x64, 0x00, 0x21, 0x40 }; static const cppchar_t uname2c_pairs[] = { 0xac00, 0xd7a3 /* HANGUL SYLLABLE */, 0, @@ -18402,6 +18406,7 @@ static const cppchar_t uname2c_pairs[] = { 0x2b740, 0x2b81d /* CJK UNIFIED IDEOGRAPH- */, 0x2b820, 0x2cea1 /* CJK UNIFIED IDEOGRAPH- */, 0x2ceb0, 0x2ebe0 /* CJK UNIFIED IDEOGRAPH- */, + 0x2ebf0, 0x2ee5d /* CJK UNIFIED IDEOGRAPH- */, 0x30000, 0x3134a /* CJK UNIFIED IDEOGRAPH- */, 0x31350, 0x323af /* CJK UNIFIED IDEOGRAPH- */, 0, 0x17000, 0x187f7 /* TANGUT IDEOGRAPH- */, @@ -18415,10 +18420,10 @@ static const cppchar_t uname2c_pairs[] = { static const unsigned char uname2c_generated[] = { 0 /* HANGUL SYLLABLE */, 3 /* CJK UNIFIED IDEOGRAPH- */, - 22 /* TANGUT IDEOGRAPH- */, - 27 /* KHITAN SMALL SCRIPT CHARACTER- */, - 30 /* NUSHU CHARACTER- */, - 33 /* CJK COMPATIBILITY IDEOGRAPH- */ }; + 24 /* TANGUT IDEOGRAPH- */, + 29 /* KHITAN SMALL SCRIPT CHARACTER- */, + 32 /* NUSHU CHARACTER- */, + 35 /* CJK COMPATIBILITY IDEOGRAPH- */ }; static const unsigned int uname2c_max_name_len = 88; From b42a09b258c3ed8d1368e0ef0948034dcf0f8ac9 Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Tue, 14 Nov 2023 18:34:43 +0100 Subject: [PATCH 032/169] i386: Generate strict_low_part QImode insn with high input register Following testcase: struct S1 { unsigned char val; unsigned char pad1; unsigned short pad2; }; struct S2 { unsigned char pad1; unsigned char val; unsigned short pad2; }; struct S1 test_and (struct S1 a, struct S2 b) { a.val &= b.val; return a; } compiles with -O2 to: movl %esi, %edx movl %edi, %eax movzbl %dh, %esi andb %sil, %al ANDB could use high register %dh instead of %sil: movl %edi, %eax movl %esi, %edx andb %dh, %al Patch introduces strict_low_part QImode insn patterns with one of its input arguments extracted from high register. PR target/78904 gcc/ChangeLog: * config/i386/i386.md (*addqi_ext_1_slp): New define_insn_and_split pattern. (*subqi_ext_1_slp): Ditto. (*qi_ext_1_slp): Ditto. gcc/testsuite/ChangeLog: * gcc.target/i386/pr78904-7.c: New test. * gcc.target/i386/pr78904-7a.c: New test. * gcc.target/i386/pr78904-7b.c: New test. --- gcc/config/i386/i386.md | 90 ++++++++++++++++++++++ gcc/testsuite/gcc.target/i386/pr78904-7.c | 64 +++++++++++++++ gcc/testsuite/gcc.target/i386/pr78904-7a.c | 62 +++++++++++++++ gcc/testsuite/gcc.target/i386/pr78904-7b.c | 66 ++++++++++++++++ 4 files changed, 282 insertions(+) create mode 100644 gcc/testsuite/gcc.target/i386/pr78904-7.c create mode 100644 gcc/testsuite/gcc.target/i386/pr78904-7a.c create mode 100644 gcc/testsuite/gcc.target/i386/pr78904-7b.c diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 84cc50c7bb21..6136e46b1bcf 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -6615,6 +6615,36 @@ (const_string "alu"))) (set_attr "mode" "")]) +;; Alternative 1 is needed to work around LRA limitation, see PR82524. +(define_insn_and_split "*addqi_ext_1_slp" + [(set (strict_low_part (match_operand:QI 0 "register_operand" "+Q,&Q")) + (plus:QI + (subreg:QI + (match_operator:SWI248 3 "extract_operator" + [(match_operand 2 "int248_register_operand" "Q,Q") + (const_int 8) + (const_int 8)]) 0) + (match_operand:QI 1 "nonimmediate_operand" "0,!Q"))) + (clobber (reg:CC FLAGS_REG))] + "" + "@ + add{b}\t{%h2, %0|%0, %h2} + #" + "reload_completed + && !rtx_equal_p (operands[0], operands[1])" + [(set (strict_low_part (match_dup 0)) (match_dup 1)) + (parallel + [(set (strict_low_part (match_dup 0)) + (plus:QI + (subreg:QI + (match_op_dup 3 + [(match_dup 0) (const_int 8) (const_int 8)]) 0) + (match_dup 1))) + (clobber (reg:CC FLAGS_REG))])] + "" + [(set_attr "type" "alu") + (set_attr "mode" "QI")]) + ;; Split non destructive adds if we cannot use lea. (define_split [(set (match_operand:SWI48 0 "register_operand") @@ -7628,6 +7658,36 @@ [(set_attr "type" "alu") (set_attr "mode" "")]) +;; Alternative 1 is needed to work around LRA limitation, see PR82524. +(define_insn_and_split "*subqi_ext_1_slp" + [(set (strict_low_part (match_operand:QI 0 "register_operand" "+Q,&Q")) + (minus:QI + (match_operand:QI 1 "nonimmediate_operand" "0,!Q") + (subreg:QI + (match_operator:SWI248 3 "extract_operator" + [(match_operand 2 "int248_register_operand" "Q,Q") + (const_int 8) + (const_int 8)]) 0))) + (clobber (reg:CC FLAGS_REG))] + "" + "@ + sub{b}\t{%h2, %0|%0, %h2} + #" + "reload_completed + && !rtx_equal_p (operands[0], operands[1])" + [(set (strict_low_part (match_dup 0)) (match_dup 1)) + (parallel + [(set (strict_low_part (match_dup 0)) + (minus:QI + (match_dup 1) + (subreg:QI + (match_op_dup 3 + [(match_dup 0) (const_int 8) (const_int 8)]) 0))) + (clobber (reg:CC FLAGS_REG))])] + "" + [(set_attr "type" "alu") + (set_attr "mode" "QI")]) + (define_insn "*sub_2" [(set (reg FLAGS_REG) (compare @@ -11423,6 +11483,36 @@ [(set_attr "type" "alu") (set_attr "mode" "")]) +;; Alternative 1 is needed to work around LRA limitation, see PR82524. +(define_insn_and_split "*qi_ext_1_slp" + [(set (strict_low_part (match_operand:QI 0 "register_operand" "+Q,&Q")) + (any_logic:QI + (subreg:QI + (match_operator:SWI248 3 "extract_operator" + [(match_operand 2 "int248_register_operand" "Q,Q") + (const_int 8) + (const_int 8)]) 0) + (match_operand:QI 1 "nonimmediate_operand" "0,!Q"))) + (clobber (reg:CC FLAGS_REG))] + "" + "@ + {b}\t{%h2, %0|%0, %h2} + #" + "reload_completed + && !rtx_equal_p (operands[0], operands[1])" + [(set (strict_low_part (match_dup 0)) (match_dup 1)) + (parallel + [(set (strict_low_part (match_dup 0)) + (any_logic:QI + (match_dup 1) + (subreg:QI + (match_op_dup 3 + [(match_dup 0) (const_int 8) (const_int 8)]) 0))) + (clobber (reg:CC FLAGS_REG))])] + "" + [(set_attr "type" "alu") + (set_attr "mode" "QI")]) + (define_split [(set (match_operand:SWI248 0 "register_operand") (and:SWI248 (match_operand:SWI248 1 "nonimmediate_operand") diff --git a/gcc/testsuite/gcc.target/i386/pr78904-7.c b/gcc/testsuite/gcc.target/i386/pr78904-7.c new file mode 100644 index 000000000000..e52a26992aba --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr78904-7.c @@ -0,0 +1,64 @@ +/* PR target/78904 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -masm=att" } */ +/* { dg-final { scan-assembler-not "movzbl" } } */ +/* { dg-final { scan-assembler-not "movb" } } */ + +struct S1 +{ + unsigned char val; + unsigned char pad1; + unsigned short pad2; +}; + +struct S2 +{ + unsigned char pad1; + unsigned char val; + unsigned short pad2; +}; + +struct S1 test_and (struct S1 a, struct S2 b) +{ + a.val &= b.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]andb" } } */ + +struct S1 test_or (struct S1 a, struct S2 b) +{ + a.val |= b.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]orb" } } */ + +struct S1 test_xor (struct S1 a, struct S2 b) +{ + a.val ^= b.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]xorb" } } */ + +struct S1 test_add (struct S1 a, struct S2 b) +{ + a.val += b.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]addb" } } */ + +struct S1 test_sub (struct S1 a, struct S2 b) +{ + a.val -= b.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]subb" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr78904-7a.c b/gcc/testsuite/gcc.target/i386/pr78904-7a.c new file mode 100644 index 000000000000..c060a482ba27 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr78904-7a.c @@ -0,0 +1,62 @@ +/* PR target/78904 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -masm=att" } */ +/* { dg-final { scan-assembler-not "movzbl" } } */ +/* { dg-final { scan-assembler-not "movb" } } */ + +struct S1 +{ + unsigned char val; + unsigned char pad1; +}; + +struct S2 +{ + unsigned char pad1; + unsigned char val; +}; + +struct S1 test_and (struct S1 a, struct S2 b) +{ + a.val &= b.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]andb" } } */ + +struct S1 test_or (struct S1 a, struct S2 b) +{ + a.val |= b.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]orb" } } */ + +struct S1 test_xor (struct S1 a, struct S2 b) +{ + a.val ^= b.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]xorb" } } */ + +struct S1 test_add (struct S1 a, struct S2 b) +{ + a.val += b.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]addb" } } */ + +struct S1 test_sub (struct S1 a, struct S2 b) +{ + a.val -= b.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]subb" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr78904-7b.c b/gcc/testsuite/gcc.target/i386/pr78904-7b.c new file mode 100644 index 000000000000..76dc048e73fb --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr78904-7b.c @@ -0,0 +1,66 @@ +/* PR target/78904 */ +/* { dg-do compile { target { ! ia32 } } } */ +/* { dg-options "-O2 -masm=att" } */ +/* { dg-final { scan-assembler-not "movzbl" } } */ +/* { dg-final { scan-assembler-not "movb" } } */ + +struct S1 +{ + unsigned char val; + unsigned char pad1; + unsigned short pad2; + unsigned int pad3; +}; + +struct S2 +{ + unsigned char pad1; + unsigned char val; + unsigned short pad2; + unsigned int pad3; +}; + +struct S1 test_and (struct S1 a, struct S2 b) +{ + a.val &= b.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]andb" } } */ + +struct S1 test_or (struct S1 a, struct S2 b) +{ + a.val |= b.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]orb" } } */ + +struct S1 test_xor (struct S1 a, struct S2 b) +{ + a.val ^= b.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]xorb" } } */ + +struct S1 test_add (struct S1 a, struct S2 b) +{ + a.val += b.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]addb" } } */ + +struct S1 test_sub (struct S1 a, struct S2 b) +{ + a.val -= b.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]subb" } } */ From d0bfd6ba3ba77fd372c1d3621521693b653cf8b1 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Tue, 14 Nov 2023 14:01:36 -0500 Subject: [PATCH 033/169] diagnostics: convert diagnostic_ready_p to an inline function No functional change intended. gcc/ChangeLog: * diagnostic.h (diagnostic_ready_p): Convert from macro to inline function. Signed-off-by: David Malcolm --- gcc/diagnostic.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h index 7ae7cebf02ed..2489855ae4a4 100644 --- a/gcc/diagnostic.h +++ b/gcc/diagnostic.h @@ -764,7 +764,11 @@ extern diagnostic_context *global_dc; /* Returns whether the diagnostic framework has been intialized already and is ready for use. */ -#define diagnostic_ready_p() (global_dc->printer != NULL) +inline bool +diagnostic_ready_p () +{ + return global_dc->printer != nullptr; +} /* The number of errors that have been issued so far. Ideally, these would take a diagnostic_context as an argument. */ From 07e568d77f364e833193dd6f7b3170b28b1e52db Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Tue, 14 Nov 2023 14:01:55 -0500 Subject: [PATCH 034/169] diagnostics: make m_text_callbacks private No functional change intended. gcc/ChangeLog: * diagnostic-show-locus.cc (diagnostic_context::show_locus): Update for renaming of text callbacks fields. * diagnostic.cc (diagnostic_context::initialize): Likewise. * diagnostic.h (class diagnostic_context): Add "friend" for accessors to m_text_callbacks. (diagnostic_context::m_text_callbacks): Make private, and add an "m_" prefix to field names. (diagnostic_starter): Convert from macro to inline function. (diagnostic_start_span): New. (diagnostic_finalizer): Convert from macro to inline function. gcc/fortran/ChangeLog: * error.cc (gfc_diagnostics_init): Use diagnostic_start_span. gcc/ChangeLog: * selftest-diagnostic.cc (test_diagnostic_context::test_diagnostic_context): Use diagnostic_start_span. * tree-diagnostic-path.cc (struct event_range): Likewise. gcc/testsuite: * gcc.dg/plugin/diagnostic_group_plugin.c: Use diagnostic_start_span. Signed-off-by: David Malcolm --- gcc/diagnostic-show-locus.cc | 2 +- gcc/diagnostic.cc | 6 +-- gcc/diagnostic.h | 37 ++++++++++++++++--- gcc/fortran/error.cc | 2 +- gcc/selftest-diagnostic.cc | 2 +- .../gcc.dg/plugin/diagnostic_group_plugin.c | 2 +- gcc/tree-diagnostic-path.cc | 2 +- 7 files changed, 39 insertions(+), 14 deletions(-) diff --git a/gcc/diagnostic-show-locus.cc b/gcc/diagnostic-show-locus.cc index 169f59cb0573..563d2826f249 100644 --- a/gcc/diagnostic-show-locus.cc +++ b/gcc/diagnostic-show-locus.cc @@ -2904,7 +2904,7 @@ diagnostic_context::show_locus (const rich_location &richloc, { expanded_location exploc = layout.get_expanded_location (line_span); - m_text_callbacks.start_span (this, exploc); + m_text_callbacks.m_start_span (this, exploc); } } /* Iterate over the lines within this span (using linenum_arith_t to diff --git a/gcc/diagnostic.cc b/gcc/diagnostic.cc index 24212b9668eb..ccca2d2150f7 100644 --- a/gcc/diagnostic.cc +++ b/gcc/diagnostic.cc @@ -235,9 +235,9 @@ diagnostic_context::initialize (int n_opts) m_warn_system_headers = false; m_max_errors = 0; m_internal_error = nullptr; - m_text_callbacks.begin_diagnostic = default_diagnostic_starter; - m_text_callbacks.start_span = default_diagnostic_start_span_fn; - m_text_callbacks.end_diagnostic = default_diagnostic_finalizer; + m_text_callbacks.m_begin_diagnostic = default_diagnostic_starter; + m_text_callbacks.m_start_span = default_diagnostic_start_span_fn; + m_text_callbacks.m_end_diagnostic = default_diagnostic_finalizer; m_option_enabled = nullptr; m_option_state = nullptr; m_option_name = nullptr; diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h index 2489855ae4a4..57c5ed4f582a 100644 --- a/gcc/diagnostic.h +++ b/gcc/diagnostic.h @@ -352,6 +352,14 @@ struct diagnostic_source_printing_options class diagnostic_context { public: + /* Give access to m_text_callbacks. */ + friend diagnostic_starter_fn & + diagnostic_starter (diagnostic_context *context); + friend diagnostic_start_span_fn & + diagnostic_start_span (diagnostic_context *context); + friend diagnostic_finalizer_fn & + diagnostic_finalizer (diagnostic_context *context); + typedef void (*ice_handler_callback_t) (diagnostic_context *); typedef void (*set_locations_callback_t) (diagnostic_context *, diagnostic_info *); @@ -574,7 +582,6 @@ private: /* Maximum number of errors to report. */ int m_max_errors; -public: /* Client-supplied callbacks for use in text output. */ struct { /* This function is called before any message is printed out. It is @@ -584,17 +591,18 @@ public: from "/home/gdr/src/nifty_printer.h:56: ... */ - diagnostic_starter_fn begin_diagnostic; + diagnostic_starter_fn m_begin_diagnostic; /* This function is called by diagnostic_show_locus in between disjoint spans of source code, so that the context can print something to indicate that a new span of source code has begun. */ - diagnostic_start_span_fn start_span; + diagnostic_start_span_fn m_start_span; /* This function is called after the diagnostic message is printed. */ - diagnostic_finalizer_fn end_diagnostic; + diagnostic_finalizer_fn m_end_diagnostic; } m_text_callbacks; +public: /* Client hook to report an internal error. */ void (*m_internal_error) (diagnostic_context *, const char *, va_list *); @@ -734,11 +742,28 @@ diagnostic_inhibit_notes (diagnostic_context * context) /* Client supplied function to announce a diagnostic (for text-based diagnostic output). */ -#define diagnostic_starter(DC) (DC)->m_text_callbacks.begin_diagnostic +inline diagnostic_starter_fn & +diagnostic_starter (diagnostic_context *context) +{ + return context->m_text_callbacks.m_begin_diagnostic; +} + +/* Client supplied function called between disjoint spans of source code, + so that the context can print + something to indicate that a new span of source code has begun. */ +inline diagnostic_start_span_fn & +diagnostic_start_span (diagnostic_context *context) +{ + return context->m_text_callbacks.m_start_span; +} /* Client supplied function called after a diagnostic message is displayed (for text-based diagnostic output). */ -#define diagnostic_finalizer(DC) (DC)->m_text_callbacks.end_diagnostic +inline diagnostic_finalizer_fn & +diagnostic_finalizer (diagnostic_context *context) +{ + return context->m_text_callbacks.m_end_diagnostic; +} /* Extension hooks for client. */ #define diagnostic_context_auxiliary_data(DC) (DC)->m_client_aux_data diff --git a/gcc/fortran/error.cc b/gcc/fortran/error.cc index ca31775c2dc3..2ac51e95e4da 100644 --- a/gcc/fortran/error.cc +++ b/gcc/fortran/error.cc @@ -1637,7 +1637,7 @@ void gfc_diagnostics_init (void) { diagnostic_starter (global_dc) = gfc_diagnostic_starter; - global_dc->m_text_callbacks.start_span = gfc_diagnostic_start_span; + diagnostic_start_span (global_dc) = gfc_diagnostic_start_span; diagnostic_finalizer (global_dc) = gfc_diagnostic_finalizer; diagnostic_format_decoder (global_dc) = gfc_format_decoder; global_dc->m_source_printing.caret_chars[0] = '1'; diff --git a/gcc/selftest-diagnostic.cc b/gcc/selftest-diagnostic.cc index 37e98ed33047..f9a1852f7680 100644 --- a/gcc/selftest-diagnostic.cc +++ b/gcc/selftest-diagnostic.cc @@ -39,7 +39,7 @@ test_diagnostic_context::test_diagnostic_context () m_source_printing.enabled = true; m_source_printing.show_labels_p = true; m_show_column = true; - m_text_callbacks.start_span = start_span_cb; + diagnostic_start_span (this) = start_span_cb; m_source_printing.min_margin_width = 6; m_source_printing.max_width = 80; } diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.c b/gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.c index e8903ba6ee32..ce0b3225dfca 100644 --- a/gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.c +++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.c @@ -224,7 +224,7 @@ plugin_init (struct plugin_name_args *plugin_info, return 1; diagnostic_starter (global_dc) = test_diagnostic_starter; - global_dc->m_text_callbacks.start_span = test_diagnostic_start_span_fn; + diagnostic_start_span (global_dc) = test_diagnostic_start_span_fn; global_dc->set_output_format (new test_output_format (*global_dc)); pass_info.pass = new pass_test_groups (g); diff --git a/gcc/tree-diagnostic-path.cc b/gcc/tree-diagnostic-path.cc index d2345c8dae74..3cd9c210feaa 100644 --- a/gcc/tree-diagnostic-path.cc +++ b/gcc/tree-diagnostic-path.cc @@ -206,7 +206,7 @@ struct event_range = linemap_client_expand_location_to_spelling_point (line_table, initial_loc, LOCATION_ASPECT_CARET); if (exploc.file != LOCATION_FILE (dc->m_last_location)) - dc->m_text_callbacks.start_span (dc, exploc); + diagnostic_start_span (dc) (dc, exploc); } /* If we have an UNKNOWN_LOCATION (or BUILTINS_LOCATION) as the From 353f146cebbf224520de1bdfa8e43ceba868cf62 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Tue, 14 Nov 2023 14:02:10 -0500 Subject: [PATCH 035/169] diagnostics: make option-handling callbacks private No functional change intended. gcc/c-family/ChangeLog: * c-warn.cc (conversion_warning): Update call to global_dc->m_option_enabled to use option_enabled_p. gcc/cp/ChangeLog: * decl.cc (finish_function): Update call to global_dc->m_option_enabled to use option_enabled_p. gcc/ChangeLog: * diagnostic-format-json.cc (json_output_format::on_end_diagnostic): Update calls to m_context callbacks to use member functions; tighten up scopes. * diagnostic-format-sarif.cc (sarif_builder::make_result_object): Likewise. (sarif_builder::make_reporting_descriptor_object_for_warning): Likewise. * diagnostic.cc (diagnostic_context::initialize): Update for callbacks being moved into m_option_callbacks and being renamed. (diagnostic_context::set_option_hooks): New. (diagnostic_option_classifier::classify_diagnostic): Update call to global_dc->m_option_enabled to use option_enabled_p. (diagnostic_context::print_option_information): Update calls to m_context callbacks to use member functions; tighten up scopes. (diagnostic_context::diagnostic_enabled): Likewise. * diagnostic.h (diagnostic_option_enabled_cb): New typedef. (diagnostic_make_option_name_cb): New typedef. (diagnostic_make_option_url_cb): New typedef. (diagnostic_context::option_enabled_p): New. (diagnostic_context::make_option_name): New. (diagnostic_context::make_option_url): New. (diagnostic_context::set_option_hooks): New decl. (diagnostic_context::m_option_enabled): Rename to m_option_enabled_cb and move within m_option_callbacks, using typedef. (diagnostic_context::m_option_state): Move within m_option_callbacks. (diagnostic_context::m_option_name): Rename to m_make_option_name_cb and move within m_option_callbacks, using typedef. (diagnostic_context::m_get_option_url): Likewise, renaming to m_make_option_url_cb. * lto-wrapper.cc (print_lto_docs_link): Update call to m_context callback to use member function. (main): Use diagnostic_context::set_option_hooks. * opts-diagnostic.h (option_name): Make context param const. (get_option_url): Likewise. * opts.cc (option_name): Likewise. (get_option_url): Likewise. * toplev.cc (general_init): Use diagnostic_context::set_option_hooks. Signed-off-by: David Malcolm --- gcc/c-family/c-warn.cc | 4 +- gcc/cp/decl.cc | 4 +- gcc/diagnostic-format-json.cc | 18 +++---- gcc/diagnostic-format-sarif.cc | 15 ++---- gcc/diagnostic.cc | 45 ++++++++-------- gcc/diagnostic.h | 93 +++++++++++++++++++++++++--------- gcc/lto-wrapper.cc | 7 ++- gcc/opts-diagnostic.h | 5 +- gcc/opts.cc | 4 +- gcc/toplev.cc | 8 +-- 10 files changed, 119 insertions(+), 84 deletions(-) diff --git a/gcc/c-family/c-warn.cc b/gcc/c-family/c-warn.cc index b1bd8ba9f422..d2938b91043d 100644 --- a/gcc/c-family/c-warn.cc +++ b/gcc/c-family/c-warn.cc @@ -1350,9 +1350,7 @@ conversion_warning (location_t loc, tree type, tree expr, tree result) break; if (arith_ops - && global_dc->m_option_enabled (warnopt, - global_dc->m_lang_mask, - global_dc->m_option_state)) + && global_dc->option_enabled_p (warnopt)) { for (int i = 0; i < arith_ops; ++i) { diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc index 4a07c7e879b1..d2ed46b14531 100644 --- a/gcc/cp/decl.cc +++ b/gcc/cp/decl.cc @@ -18308,9 +18308,7 @@ finish_function (bool inline_p) && current_class_ref && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (valtype), TREE_TYPE (current_class_ref)) - && global_dc->m_option_enabled (OPT_Wreturn_type, - global_dc->m_lang_mask, - global_dc->m_option_state)) + && global_dc->option_enabled_p (OPT_Wreturn_type)) add_return_star_this_fixit (&richloc, fndecl); } if (cxx_dialect >= cxx14 diff --git a/gcc/diagnostic-format-json.cc b/gcc/diagnostic-format-json.cc index 7c5a126786e6..141075b7dee8 100644 --- a/gcc/diagnostic-format-json.cc +++ b/gcc/diagnostic-format-json.cc @@ -217,24 +217,18 @@ json_output_format::on_end_diagnostic (diagnostic_info *diagnostic, diag_obj->set_string ("message", pp_formatted_text (m_context.printer)); pp_clear_output_area (m_context.printer); - char *option_text; - option_text = m_context.m_option_name (&m_context, diagnostic->option_index, - orig_diag_kind, diagnostic->kind); - if (option_text) + if (char *option_text = m_context.make_option_name (diagnostic->option_index, + orig_diag_kind, + diagnostic->kind)) { diag_obj->set_string ("option", option_text); free (option_text); } - if (m_context.m_get_option_url) + if (char *option_url = m_context.make_option_url (diagnostic->option_index)) { - char *option_url = m_context.m_get_option_url (&m_context, - diagnostic->option_index); - if (option_url) - { - diag_obj->set_string ("option_url", option_url); - free (option_url); - } + diag_obj->set_string ("option_url", option_url); + free (option_url); } /* If we've already emitted a diagnostic within this auto_diagnostic_group, diff --git a/gcc/diagnostic-format-sarif.cc b/gcc/diagnostic-format-sarif.cc index 9510f4add80f..1bb728654e6c 100644 --- a/gcc/diagnostic-format-sarif.cc +++ b/gcc/diagnostic-format-sarif.cc @@ -536,8 +536,8 @@ sarif_builder::make_result_object (diagnostic_context *context, /* "ruleId" property (SARIF v2.1.0 section 3.27.5). */ /* Ideally we'd have an option_name for these. */ if (char *option_text - = context->m_option_name (context, diagnostic->option_index, - orig_diag_kind, diagnostic->kind)) + = context->make_option_name (diagnostic->option_index, + orig_diag_kind, diagnostic->kind)) { /* Lazily create reportingDescriptor objects for and add to m_rules_arr. Set ruleId referencing them. */ @@ -639,15 +639,10 @@ make_reporting_descriptor_object_for_warning (diagnostic_context *context, it seems redundant compared to "id". */ /* "helpUri" property (SARIF v2.1.0 section 3.49.12). */ - if (context->m_get_option_url) + if (char *option_url = context->make_option_url (diagnostic->option_index)) { - char *option_url - = context->m_get_option_url (context, diagnostic->option_index); - if (option_url) - { - reporting_desc->set_string ("helpUri", option_url); - free (option_url); - } + reporting_desc->set_string ("helpUri", option_url); + free (option_url); } return reporting_desc; diff --git a/gcc/diagnostic.cc b/gcc/diagnostic.cc index ccca2d2150f7..eb0df6890564 100644 --- a/gcc/diagnostic.cc +++ b/gcc/diagnostic.cc @@ -238,10 +238,10 @@ diagnostic_context::initialize (int n_opts) m_text_callbacks.m_begin_diagnostic = default_diagnostic_starter; m_text_callbacks.m_start_span = default_diagnostic_start_span_fn; m_text_callbacks.m_end_diagnostic = default_diagnostic_finalizer; - m_option_enabled = nullptr; - m_option_state = nullptr; - m_option_name = nullptr; - m_get_option_url = nullptr; + m_option_callbacks.m_option_enabled_cb = nullptr; + m_option_callbacks.m_option_state = nullptr; + m_option_callbacks.m_make_option_name_cb = nullptr; + m_option_callbacks.m_make_option_url_cb = nullptr; m_urlifier = nullptr; m_last_location = UNKNOWN_LOCATION; m_last_module = nullptr; @@ -418,6 +418,19 @@ diagnostic_context::set_client_data_hooks (diagnostic_client_data_hooks *hooks) m_client_data_hooks = hooks; } +void +diagnostic_context:: +set_option_hooks (diagnostic_option_enabled_cb option_enabled_cb, + void *option_state, + diagnostic_make_option_name_cb make_option_name_cb, + diagnostic_make_option_url_cb make_option_url_cb) +{ + m_option_callbacks.m_option_enabled_cb = option_enabled_cb; + m_option_callbacks.m_option_state = option_state; + m_option_callbacks.m_make_option_name_cb = make_option_name_cb; + m_option_callbacks.m_make_option_url_cb = make_option_url_cb; +} + void diagnostic_context::set_urlifier (urlifier *urlifier) { @@ -1124,9 +1137,7 @@ classify_diagnostic (const diagnostic_context *context, /* Record the command-line status, so we can reset it back on DK_POP. */ if (old_kind == DK_UNSPECIFIED) { - old_kind = !context->m_option_enabled (option_index, - context->m_lang_mask, - context->m_option_state) + old_kind = !context->option_enabled_p (option_index) ? DK_IGNORED : (context->warning_as_error_requested_p () ? DK_ERROR : DK_WARNING); m_classify_diagnostic[option_index] = old_kind; @@ -1412,18 +1423,12 @@ void diagnostic_context::print_option_information (const diagnostic_info &diagnostic, diagnostic_t orig_diag_kind) { - char *option_text; - - option_text = m_option_name (this, diagnostic.option_index, - orig_diag_kind, diagnostic.kind); - - if (option_text) + if (char *option_text = make_option_name (diagnostic.option_index, + orig_diag_kind, diagnostic.kind)) { - char *option_url = NULL; - if (m_get_option_url - && this->printer->url_format != URL_FORMAT_NONE) - option_url = m_get_option_url (this, - diagnostic.option_index); + char *option_url = nullptr; + if (this->printer->url_format != URL_FORMAT_NONE) + option_url = make_option_url (diagnostic.option_index); pretty_printer * const pp = this->printer; pp_string (pp, " ["); pp_string (pp, colorize_start (pp_show_color (pp), @@ -1458,9 +1463,7 @@ diagnostic_context::diagnostic_enabled (diagnostic_info *diagnostic) /* This tests if the user provided the appropriate -Wfoo or -Wno-foo option. */ - if (! m_option_enabled (diagnostic->option_index, - m_lang_mask, - m_option_state)) + if (!option_enabled_p (diagnostic->option_index)) return false; /* This tests for #pragma diagnostic changes. */ diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h index 57c5ed4f582a..db61b0e27477 100644 --- a/gcc/diagnostic.h +++ b/gcc/diagnostic.h @@ -179,6 +179,14 @@ typedef void (*diagnostic_finalizer_fn) (diagnostic_context *, diagnostic_info *, diagnostic_t); +typedef int (*diagnostic_option_enabled_cb) (int, unsigned, void *); +typedef char *(*diagnostic_make_option_name_cb) (const diagnostic_context *, + int, + diagnostic_t, + diagnostic_t); +typedef char *(*diagnostic_make_option_url_cb) (const diagnostic_context *, + int); + class edit_context; namespace json { class value; } class diagnostic_client_data_hooks; @@ -491,6 +499,41 @@ public: return m_diagnostic_count[kind]; } + /* Option-related member functions. */ + inline bool option_enabled_p (int option_index) const + { + if (!m_option_callbacks.m_option_enabled_cb) + return true; + return m_option_callbacks.m_option_enabled_cb + (option_index, + m_lang_mask, + m_option_callbacks.m_option_state); + } + + inline char *make_option_name (int option_index, + diagnostic_t orig_diag_kind, + diagnostic_t diag_kind) const + { + if (!m_option_callbacks.m_make_option_name_cb) + return nullptr; + return m_option_callbacks.m_make_option_name_cb (this, option_index, + orig_diag_kind, + diag_kind); + } + + inline char *make_option_url (int option_index) const + { + if (!m_option_callbacks.m_make_option_url_cb) + return nullptr; + return m_option_callbacks.m_make_option_url_cb (this, option_index); + } + + void + set_option_hooks (diagnostic_option_enabled_cb option_enabled_cb, + void *option_state, + diagnostic_make_option_name_cb make_option_name_cb, + diagnostic_make_option_url_cb make_option_url_cb); + private: bool includes_seen_p (const line_map_ordinary *map); @@ -606,32 +649,32 @@ public: /* Client hook to report an internal error. */ void (*m_internal_error) (diagnostic_context *, const char *, va_list *); - /* Client hook to say whether the option controlling a diagnostic is - enabled. Returns nonzero if enabled, zero if disabled. */ - int (*m_option_enabled) (int, unsigned, void *); - - /* Client information to pass as second argument to - option_enabled. */ - void *m_option_state; - - /* Client hook to return the name of an option that controls a - diagnostic. Returns malloced memory. The first diagnostic_t - argument is the kind of diagnostic before any reclassification - (of warnings as errors, etc.); the second is the kind after any - reclassification. May return NULL if no name is to be printed. - May be passed 0 as well as the index of a particular option. */ - char *(*m_option_name) (diagnostic_context *, - int, - diagnostic_t, - diagnostic_t); - - /* Client hook to return a URL describing the option that controls - a diagnostic. Returns malloced memory. May return NULL if no URL - is available. May be passed 0 as well as the index of a - particular option. */ - char *(*m_get_option_url) (diagnostic_context *, int); - private: + /* Client-supplied callbacks for working with options. */ + struct { + /* Client hook to say whether the option controlling a diagnostic is + enabled. Returns nonzero if enabled, zero if disabled. */ + diagnostic_option_enabled_cb m_option_enabled_cb; + + /* Client information to pass as second argument to + m_option_enabled_cb. */ + void *m_option_state; + + /* Client hook to return the name of an option that controls a + diagnostic. Returns malloced memory. The first diagnostic_t + argument is the kind of diagnostic before any reclassification + (of warnings as errors, etc.); the second is the kind after any + reclassification. May return NULL if no name is to be printed. + May be passed 0 as well as the index of a particular option. */ + diagnostic_make_option_name_cb m_make_option_name_cb; + + /* Client hook to return a URL describing the option that controls + a diagnostic. Returns malloced memory. May return NULL if no URL + is available. May be passed 0 as well as the index of a + particular option. */ + diagnostic_make_option_url_cb m_make_option_url_cb; + } m_option_callbacks; + /* An optional hook for adding URLs to quoted text strings in diagnostics. Only used for the main diagnostic message. */ urlifier *m_urlifier; diff --git a/gcc/lto-wrapper.cc b/gcc/lto-wrapper.cc index a92fed3d25b0..7c76635ef213 100644 --- a/gcc/lto-wrapper.cc +++ b/gcc/lto-wrapper.cc @@ -1355,7 +1355,7 @@ void print_lto_docs_link () { bool print_url = global_dc->printer->url_format != URL_FORMAT_NONE; - const char *url = global_dc->m_get_option_url (global_dc, OPT_flto); + const char *url = global_dc->make_option_url (OPT_flto); pretty_printer pp; pp.url_format = URL_FORMAT_DEFAULT; @@ -2146,7 +2146,10 @@ main (int argc, char *argv[]) diagnostic_initialize (global_dc, 0); diagnostic_color_init (global_dc); diagnostic_urls_init (global_dc); - global_dc->m_get_option_url = get_option_url; + global_dc->set_option_hooks (nullptr, + nullptr, + nullptr, + get_option_url); if (atexit (lto_wrapper_cleanup) != 0) fatal_error (input_location, "% failed"); diff --git a/gcc/opts-diagnostic.h b/gcc/opts-diagnostic.h index b36fb46cc929..8c3b695f07a2 100644 --- a/gcc/opts-diagnostic.h +++ b/gcc/opts-diagnostic.h @@ -20,9 +20,10 @@ along with GCC; see the file COPYING3. If not see #ifndef GCC_OPTS_DIAGNOSTIC_H #define GCC_OPTS_DIAGNOSTIC_H -extern char *option_name (diagnostic_context *context, int option_index, +extern char *option_name (const diagnostic_context *context, int option_index, diagnostic_t orig_diag_kind, diagnostic_t diag_kind); -extern char *get_option_url (diagnostic_context *context, int option_index); +extern char *get_option_url (const diagnostic_context *context, + int option_index); #endif diff --git a/gcc/opts.cc b/gcc/opts.cc index 32fdfc3e3ce1..33165c9e74ff 100644 --- a/gcc/opts.cc +++ b/gcc/opts.cc @@ -3615,7 +3615,7 @@ enable_warning_as_error (const char *arg, int value, unsigned int lang_mask, as -Werror. */ char * -option_name (diagnostic_context *context, int option_index, +option_name (const diagnostic_context *context, int option_index, diagnostic_t orig_diag_kind, diagnostic_t diag_kind) { if (option_index) @@ -3674,7 +3674,7 @@ get_option_html_page (int option_index) which enabled a diagnostic (context CONTEXT). */ char * -get_option_url (diagnostic_context *, int option_index) +get_option_url (const diagnostic_context *, int option_index) { if (option_index) return concat (/* DOCUMENTATION_ROOT_URL should be supplied via diff --git a/gcc/toplev.cc b/gcc/toplev.cc index d8e8978dd555..ae2f3d52602b 100644 --- a/gcc/toplev.cc +++ b/gcc/toplev.cc @@ -1045,10 +1045,10 @@ general_init (const char *argv0, bool init_signals) global_dc->m_show_column = global_options_init.x_flag_show_column; global_dc->m_internal_error = internal_error_function; - global_dc->m_option_enabled = option_enabled; - global_dc->m_option_state = &global_options; - global_dc->m_option_name = option_name; - global_dc->m_get_option_url = get_option_url; + global_dc->set_option_hooks (option_enabled, + &global_options, + option_name, + get_option_url); global_dc->set_urlifier (make_gcc_urlifier ()); if (init_signals) From 5b9ecce87e8f315e2681743d75401991cdfefa71 Mon Sep 17 00:00:00 2001 From: Nathaniel Shead Date: Thu, 9 Nov 2023 19:05:09 -0500 Subject: [PATCH 036/169] c++: Fix exported using decls of templates We need to look at DECL_TEMPLATE_RESULT to get the module attachment. PR c++/106849 gcc/cp/ChangeLog: * name-lookup.cc (do_nonmember_using_decl): Handle TEMPLATE_DECLs when checking module attachment. gcc/testsuite/ChangeLog: * g++.dg/modules/using-9.C: New test. Signed-off-by: Nathaniel Shead Signed-off-by: Nathan Sidwell --- gcc/cp/name-lookup.cc | 12 ++++++++---- gcc/testsuite/g++.dg/modules/using-9.C | 13 +++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.dg/modules/using-9.C diff --git a/gcc/cp/name-lookup.cc b/gcc/cp/name-lookup.cc index a8b9229b29ec..50aeb776ae27 100644 --- a/gcc/cp/name-lookup.cc +++ b/gcc/cp/name-lookup.cc @@ -4846,12 +4846,16 @@ do_nonmember_using_decl (name_lookup &lookup, bool fn_scope_p, bool exporting = revealing_p && module_exporting_p (); if (exporting) { + /* Module flags for templates are on the template_result. */ + tree decl = STRIP_TEMPLATE (new_fn); + /* If the using decl is exported, the things it refers - to must also be exported (or not habve module attachment). */ - if (!DECL_MODULE_EXPORT_P (new_fn) - && (DECL_LANG_SPECIFIC (new_fn) - && DECL_MODULE_ATTACH_P (new_fn))) + to must also be exported (or not have module attachment). */ + if (!DECL_MODULE_EXPORT_P (decl) + && (DECL_LANG_SPECIFIC (decl) + && DECL_MODULE_ATTACH_P (decl))) { + auto_diagnostic_group d; error ("%q#D does not have external linkage", new_fn); inform (DECL_SOURCE_LOCATION (new_fn), "%q#D declared here", new_fn); diff --git a/gcc/testsuite/g++.dg/modules/using-9.C b/gcc/testsuite/g++.dg/modules/using-9.C new file mode 100644 index 000000000000..4290280d8975 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/using-9.C @@ -0,0 +1,13 @@ +// PR c++/106849 +// { dg-additional-options "-fmodules-ts" } +// { dg-module-cmi !lib } + +export module lib; + +namespace outer { + template void any_of(T) { } // { dg-note "declared here" } +} + +export using outer::any_of; // { dg-error "does not have external linkage" } + +// { dg-prune-output "not writing module" } From 14979dd31c887ba5ba573f2cdb0647b37e09641a Mon Sep 17 00:00:00 2001 From: Nathaniel Shead Date: Tue, 14 Nov 2023 11:26:03 -0500 Subject: [PATCH 037/169] c++: Stream virtual dtor vtable indices Virtual cloned functions have distinct vtable indices, stream them explicitly. As such, this patch ensures that DECL_VINDEX is properly passed on for cloned functions as well to prevent this from causing issues. PR c++/103499 gcc/cp/ChangeLog: * module.cc (trees_out::decl_node): Write DECL_VINDEX for virtual clones. (trees_in::tree_node): Read DECL_VINDEX for virtual clones. gcc/testsuite/ChangeLog: * g++.dg/modules/pr103499_a.C: New test. * g++.dg/modules/pr103499_b.C: New test. Signed-off-by: Nathaniel Shead Signed-off-by: Nathan Sidwell --- gcc/cp/module.cc | 6 ++++++ gcc/testsuite/g++.dg/modules/pr103499_a.C | 12 ++++++++++++ gcc/testsuite/g++.dg/modules/pr103499_b.C | 8 ++++++++ 3 files changed, 26 insertions(+) create mode 100644 gcc/testsuite/g++.dg/modules/pr103499_a.C create mode 100644 gcc/testsuite/g++.dg/modules/pr103499_b.C diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index c1c8c226bc1e..4f5b6e2747a7 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -8648,6 +8648,8 @@ trees_out::decl_node (tree decl, walk_kind ref) tree_node (target); tree_node (DECL_NAME (decl)); + if (DECL_VIRTUAL_P (decl)) + tree_node (DECL_VINDEX (decl)); int tag = insert (decl); if (streaming_p ()) dump (dumper::TREE) @@ -9869,6 +9871,10 @@ trees_in::tree_node (bool is_use) } } + /* A clone might have a different vtable entry. */ + if (res && DECL_VIRTUAL_P (res)) + DECL_VINDEX (res) = tree_node (); + if (!res) set_overrun (); int tag = insert (res); diff --git a/gcc/testsuite/g++.dg/modules/pr103499_a.C b/gcc/testsuite/g++.dg/modules/pr103499_a.C new file mode 100644 index 000000000000..0497c2c55044 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/pr103499_a.C @@ -0,0 +1,12 @@ +// PR c++/103499 +// { dg-module-do compile } +// { dg-additional-options "-fmodules-ts" } +// { dg-module-cmi pr103499 } + +export module pr103499; + +export struct base { + virtual ~base() = default; +}; + +export struct derived : base {}; diff --git a/gcc/testsuite/g++.dg/modules/pr103499_b.C b/gcc/testsuite/g++.dg/modules/pr103499_b.C new file mode 100644 index 000000000000..b7468562ba9b --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/pr103499_b.C @@ -0,0 +1,8 @@ +// PR c++/103499 +// { dg-additional-options "-fmodules-ts" } + +import pr103499; + +void test(derived* p) { + delete p; +} From 3d8d443c4ebb4de7e141d385d3b5fb6605c4da16 Mon Sep 17 00:00:00 2001 From: Dimitar Dimitrov Date: Tue, 14 Nov 2023 21:06:52 +0200 Subject: [PATCH 038/169] testsuite: Ignore warning for unsupported option The -w option was used in gcc.dg/20020206-1.c to ignore warnings if the '-fprefetch-loop-arrays' option is not supported by target. When commit r14-5380-g5c432b0efab54e removed the -w option, some targets (arm-none-eabi, pru and possibly others) started failing the test: cc1: warning: '-fprefetch-loop-arrays' not supported for this target FAIL: gcc.dg/20020206-1.c (test for excess errors) Fix by instructing DejaGnu to prune the '-fprefetch-loop-arrays' warning. gcc/testsuite/ChangeLog: * gcc.dg/20020206-1.c: Prune warning that -fprefetch-loop-arrays is not supported. Signed-off-by: Dimitar Dimitrov --- gcc/testsuite/gcc.dg/20020206-1.c | 1 + 1 file changed, 1 insertion(+) diff --git a/gcc/testsuite/gcc.dg/20020206-1.c b/gcc/testsuite/gcc.dg/20020206-1.c index c8d8b61937a2..a5a9cb038e7a 100644 --- a/gcc/testsuite/gcc.dg/20020206-1.c +++ b/gcc/testsuite/gcc.dg/20020206-1.c @@ -5,6 +5,7 @@ /* { dg-do run } */ /* { dg-options "-O2 -fprefetch-loop-arrays" } */ /* { dg-options "-O2 -fprefetch-loop-arrays -mtune=pentium3" { target { { i?86-*-* x86_64-*-* } && ia32 } } } */ +/* { dg-prune-output ".-fprefetch-loop-arrays. not supported for this target" } */ struct reload From c6560525ca4e59598625c7586290c0f829cd6598 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 14 Nov 2023 21:41:45 +0100 Subject: [PATCH 039/169] Manually add ChangeLog entry for r14-5312-g040e5b0edbca861196d9e2ea2af5e805769c8d5d commit. This commit got ignored because ChangeLog update can't parse its log message. --- gcc/ChangeLog | 8 ++++++++ gcc/testsuite/ChangeLog | 23 +++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a90a43daec49..2e8b8d7a547d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -603,6 +603,14 @@ * config/riscv/autovec.md (vec_init): Split patterns. +2023-11-10 Pan Li + + Revert: + 2023-11-10 Pan Li + * config/riscv/riscv-v.cc (expand_vector_init_trailing_same_elem): + New fun impl to expand the insn when trailing same elements. + (expand_vec_init): Try trailing same elements when vec_init. + 2023-11-10 Pan Li * config/riscv/riscv-v.cc (expand_vector_init_trailing_same_elem): diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1cc65b0eb9a1..5e42221221f2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -2207,6 +2207,29 @@ PR middle-end/112469 * gcc.dg/torture/pr112469.c: New testcase. +2023-11-10 Pan Li + + Revert: + 2023-11-10 Pan Li + + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-1.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-2.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-3.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-4.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-5.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-run-1.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-run-2.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-run-3.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-same-tail-1.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-same-tail-2.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-same-tail-3.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-same-tail-4.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-same-tail-5.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-same-tail-6.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-same-tail-7.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-same-tail-8.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-same-tail-9.c: New test. + 2023-11-10 Pan Li * gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-1.c: New test. From cfaaa8b11b8429eed5ec44426fc6a20ad5d53d30 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Tue, 14 Nov 2023 15:51:52 -0500 Subject: [PATCH 040/169] analyzer: enable taint state machine by default [PR103533] gcc/analyzer/ChangeLog: PR analyzer/103533 * sm-taint.cc: Remove "experimental" from comment. * sm.cc (make_checkers): Always add taint state machine. gcc/ChangeLog: PR analyzer/103533 * doc/invoke.texi (Static Analyzer Options): Add the six -Wanalyzer-tainted-* warnings. Update documentation of each warning to reflect removed requirement to use -fanalyzer-checker=taint. Remove discussion of -fanalyzer-checker=taint. gcc/testsuite/ChangeLog: PR analyzer/103533 * c-c++-common/analyzer/attr-tainted_args-1.c: Remove use of -fanalyzer-checker=taint. * c-c++-common/analyzer/fread-1.c: Likewise. * c-c++-common/analyzer/pr104029.c: Likewise. * gcc.dg/analyzer/pr93032-mztools-signed-char.c: Add params to work around state explosion. * gcc.dg/analyzer/pr93032-mztools-unsigned-char.c: Likewise. * gcc.dg/analyzer/pr93382.c: Remove use of -fanalyzer-checker=taint. * gcc.dg/analyzer/switch-enum-taint-1.c: Likewise. * gcc.dg/analyzer/taint-CVE-2011-2210-1.c: Likewise. * gcc.dg/analyzer/taint-CVE-2020-13143-1.c: Likewise. * gcc.dg/analyzer/taint-CVE-2020-13143-2.c: Likewise. * gcc.dg/analyzer/taint-CVE-2020-13143.h: Likewise. * gcc.dg/analyzer/taint-alloc-1.c: Likewise. * gcc.dg/analyzer/taint-alloc-2.c: Likewise. * gcc.dg/analyzer/taint-alloc-3.c: Likewise. * gcc.dg/analyzer/taint-alloc-4.c: Likewise. * gcc.dg/analyzer/taint-alloc-5.c: Likewise. * gcc.dg/analyzer/taint-assert-BUG_ON.c: Likewise. * gcc.dg/analyzer/taint-assert-macro-expansion.c: Likewise. * gcc.dg/analyzer/taint-assert-system-header.c: Likewise. * gcc.dg/analyzer/taint-assert.c: Likewise. * gcc.dg/analyzer/taint-divisor-1.c: Likewise. * gcc.dg/analyzer/taint-divisor-2.c: Likewise. * gcc.dg/analyzer/taint-merger.c: Likewise. * gcc.dg/analyzer/taint-ops.c: Delete this test: it was a duplicate of material in operations.c and data-model-1.c, with -fanalyzer-checker=taint added. * gcc.dg/analyzer/taint-read-index-1.c: Remove use of -fanalyzer-checker=taint. * gcc.dg/analyzer/taint-read-offset-1.c: Likewise. * gcc.dg/analyzer/taint-realloc.c: Likewise. Add missing dg-warning for leak now that the malloc state machine is also active. * gcc.dg/analyzer/taint-size-1.c: Remove use of -fanalyzer-checker=taint. * gcc.dg/analyzer/taint-size-access-attr-1.c: Likewise. * gcc.dg/analyzer/taint-write-index-1.c: Likewise. * gcc.dg/analyzer/taint-write-offset-1.c: Likewise. * gcc.dg/analyzer/torture/taint-read-index-2.c: Likewise. * gcc.dg/analyzer/torture/taint-read-index-3.c: Likewise. * gcc.dg/plugin/taint-CVE-2011-0521-1-fixed.c: Likewise. Add -Wno-pedantic. * gcc.dg/plugin/taint-CVE-2011-0521-1.c: Likewise. * gcc.dg/plugin/taint-CVE-2011-0521-2-fixed.c: Likewise. * gcc.dg/plugin/taint-CVE-2011-0521-2.c: Likewise. * gcc.dg/plugin/taint-CVE-2011-0521-3-fixed.c: Likewise. * gcc.dg/plugin/taint-CVE-2011-0521-3.c: Likewise. Fix C++-style comment. * gcc.dg/plugin/taint-CVE-2011-0521-4.c: Remove use of -fanalyzer-checker=taint and add -Wno-pedantic. Remove xfail and add missing dg-warning. * gcc.dg/plugin/taint-CVE-2011-0521-5-fixed.c: Remove use of -fanalyzer-checker=taint and add -Wno-pedantic. * gcc.dg/plugin/taint-CVE-2011-0521-5.c: Likewise. * gcc.dg/plugin/taint-CVE-2011-0521-6.c: Likewise. * gcc.dg/plugin/taint-antipatterns-1.c: : Remove use of -fanalyzer-checker=taint. Signed-off-by: David Malcolm --- gcc/analyzer/sm-taint.cc | 2 +- gcc/analyzer/sm.cc | 5 +- gcc/doc/invoke.texi | 63 ++--------- .../analyzer/attr-tainted_args-1.c | 3 - gcc/testsuite/c-c++-common/analyzer/fread-1.c | 2 - .../c-c++-common/analyzer/pr104029.c | 3 - .../analyzer/pr93032-mztools-signed-char.c | 3 + .../analyzer/pr93032-mztools-unsigned-char.c | 3 + gcc/testsuite/gcc.dg/analyzer/pr93382.c | 2 - .../gcc.dg/analyzer/switch-enum-taint-1.c | 3 - .../gcc.dg/analyzer/taint-CVE-2011-2210-1.c | 3 - .../gcc.dg/analyzer/taint-CVE-2020-13143-1.c | 3 - .../gcc.dg/analyzer/taint-CVE-2020-13143-2.c | 3 - .../gcc.dg/analyzer/taint-CVE-2020-13143.h | 3 - gcc/testsuite/gcc.dg/analyzer/taint-alloc-1.c | 2 - gcc/testsuite/gcc.dg/analyzer/taint-alloc-2.c | 3 - gcc/testsuite/gcc.dg/analyzer/taint-alloc-3.c | 3 - gcc/testsuite/gcc.dg/analyzer/taint-alloc-4.c | 3 - gcc/testsuite/gcc.dg/analyzer/taint-alloc-5.c | 3 - .../gcc.dg/analyzer/taint-assert-BUG_ON.c | 3 - .../analyzer/taint-assert-macro-expansion.c | 3 - .../analyzer/taint-assert-system-header.c | 3 - gcc/testsuite/gcc.dg/analyzer/taint-assert.c | 3 - .../gcc.dg/analyzer/taint-divisor-1.c | 3 - .../gcc.dg/analyzer/taint-divisor-2.c | 3 - gcc/testsuite/gcc.dg/analyzer/taint-merger.c | 3 - gcc/testsuite/gcc.dg/analyzer/taint-ops.c | 106 ------------------ .../gcc.dg/analyzer/taint-read-index-1.c | 3 - .../gcc.dg/analyzer/taint-read-offset-1.c | 3 - gcc/testsuite/gcc.dg/analyzer/taint-realloc.c | 5 +- gcc/testsuite/gcc.dg/analyzer/taint-size-1.c | 3 - .../analyzer/taint-size-access-attr-1.c | 3 +- .../gcc.dg/analyzer/taint-write-index-1.c | 3 - .../gcc.dg/analyzer/taint-write-offset-1.c | 3 - .../analyzer/torture/taint-read-index-2.c | 2 - .../analyzer/torture/taint-read-index-3.c | 2 - .../plugin/taint-CVE-2011-0521-1-fixed.c | 3 +- .../gcc.dg/plugin/taint-CVE-2011-0521-1.c | 3 +- .../plugin/taint-CVE-2011-0521-2-fixed.c | 6 +- .../gcc.dg/plugin/taint-CVE-2011-0521-2.c | 3 +- .../plugin/taint-CVE-2011-0521-3-fixed.c | 6 +- .../gcc.dg/plugin/taint-CVE-2011-0521-3.c | 5 +- .../gcc.dg/plugin/taint-CVE-2011-0521-4.c | 12 +- .../plugin/taint-CVE-2011-0521-5-fixed.c | 4 +- .../gcc.dg/plugin/taint-CVE-2011-0521-5.c | 4 +- .../gcc.dg/plugin/taint-CVE-2011-0521-6.c | 4 +- .../gcc.dg/plugin/taint-antipatterns-1.c | 3 +- 47 files changed, 41 insertions(+), 281 deletions(-) delete mode 100644 gcc/testsuite/gcc.dg/analyzer/taint-ops.c diff --git a/gcc/analyzer/sm-taint.cc b/gcc/analyzer/sm-taint.cc index 09c1e9368cdf..dfd5f7fa5d2c 100644 --- a/gcc/analyzer/sm-taint.cc +++ b/gcc/analyzer/sm-taint.cc @@ -1,4 +1,4 @@ -/* An experimental state machine, for tracking "taint": unsanitized uses +/* A state machine for tracking "taint": unsanitized uses of data potentially under an attacker's control. Copyright (C) 2019-2023 Free Software Foundation, Inc. diff --git a/gcc/analyzer/sm.cc b/gcc/analyzer/sm.cc index 2b88430c0129..c030c272ccc0 100644 --- a/gcc/analyzer/sm.cc +++ b/gcc/analyzer/sm.cc @@ -188,10 +188,7 @@ make_checkers (auto_delete_vec &out, logger *logger) out.safe_push (make_malloc_state_machine (logger)); out.safe_push (make_fileptr_state_machine (logger)); out.safe_push (make_fd_state_machine (logger)); - /* The "taint" checker must be explicitly enabled (as it currently - leads to state explosions that stop the other checkers working). */ - if (flag_analyzer_checker) - out.safe_push (make_taint_state_machine (logger)); + out.safe_push (make_taint_state_machine (logger)); out.safe_push (make_sensitive_state_machine (logger)); out.safe_push (make_signal_state_machine (logger)); out.safe_push (make_va_list_state_machine (logger)); diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 2d30a5d47672..1748afdbfe0a 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -10415,6 +10415,12 @@ Enabling this option effectively enables the following warnings: -Wanalyzer-shift-count-negative -Wanalyzer-shift-count-overflow -Wanalyzer-stale-setjmp-buffer +-Wanalyzer-tainted-allocation-size +-Wanalyzer-tainted-array-index +-Wanalyzer-tainted-assertion +-Wanalyzer-tainted-divisor +-Wanalyzer-tainted-offset +-Wanalyzer-tainted-size -Wanalyzer-unsafe-call-within-signal-handler -Wanalyzer-use-after-free -Wanalyzer-use-of-pointer-in-stale-stack-frame @@ -10426,13 +10432,6 @@ Enabling this option effectively enables the following warnings: -Wanalyzer-write-to-const -Wanalyzer-write-to-string-literal } -@ignore --Wanalyzer-tainted-allocation-size --Wanalyzer-tainted-array-index --Wanalyzer-tainted-divisor --Wanalyzer-tainted-offset --Wanalyzer-tainted-size -@end ignore This option is only available if GCC was configured with analyzer support enabled. @@ -10880,8 +10879,7 @@ no longer exists, and likely lead to a crash (or worse). @opindex Wanalyzer-tainted-allocation-size @opindex Wno-analyzer-tainted-allocation-size @item -Wno-analyzer-tainted-allocation-size -This warning requires both @option{-fanalyzer} and -@option{-fanalyzer-checker=taint} to enable it; +This warning requires @option{-fanalyzer} which enables it; use @option{-Wno-analyzer-tainted-allocation-size} to disable it. This diagnostic warns for paths through the code in which a value @@ -10896,8 +10894,7 @@ See @uref{https://cwe.mitre.org/data/definitions/789.html, CWE-789: Memory Alloc @opindex Wno-analyzer-tainted-assertion @item -Wno-analyzer-tainted-assertion -This warning requires both @option{-fanalyzer} and -@option{-fanalyzer-checker=taint} to enable it; +This warning requires @option{-fanalyzer} which enables it; use @option{-Wno-analyzer-tainted-assertion} to disable it. This diagnostic warns for paths through the code in which a value @@ -10958,8 +10955,7 @@ despite the above not being an assertion failure, strictly speaking. @opindex Wanalyzer-tainted-array-index @opindex Wno-analyzer-tainted-array-index @item -Wno-analyzer-tainted-array-index -This warning requires both @option{-fanalyzer} and -@option{-fanalyzer-checker=taint} to enable it; +This warning requires @option{-fanalyzer} which enables it; use @option{-Wno-analyzer-tainted-array-index} to disable it. This diagnostic warns for paths through the code in which a value @@ -10972,8 +10968,7 @@ See @uref{https://cwe.mitre.org/data/definitions/129.html, CWE-129: Improper Val @opindex Wanalyzer-tainted-divisor @opindex Wno-analyzer-tainted-divisor @item -Wno-analyzer-tainted-divisor -This warning requires both @option{-fanalyzer} and -@option{-fanalyzer-checker=taint} to enable it; +This warning requires @option{-fanalyzer} which enables it; use @option{-Wno-analyzer-tainted-divisor} to disable it. This diagnostic warns for paths through the code in which a value @@ -10986,8 +10981,7 @@ See @uref{https://cwe.mitre.org/data/definitions/369.html, CWE-369: Divide By Ze @opindex Wanalyzer-tainted-offset @opindex Wno-analyzer-tainted-offset @item -Wno-analyzer-tainted-offset -This warning requires both @option{-fanalyzer} and -@option{-fanalyzer-checker=taint} to enable it; +This warning requires @option{-fanalyzer} which enables it; use @option{-Wno-analyzer-tainted-offset} to disable it. This diagnostic warns for paths through the code in which a value @@ -11000,8 +10994,7 @@ See @uref{https://cwe.mitre.org/data/definitions/823.html, CWE-823: Use of Out-o @opindex Wanalyzer-tainted-size @opindex Wno-analyzer-tainted-size @item -Wno-analyzer-tainted-size -This warning requires both @option{-fanalyzer} and -@option{-fanalyzer-checker=taint} to enable it; +This warning requires @option{-fanalyzer} which enables it; use @option{-Wno-analyzer-tainted-size} to disable it. This diagnostic warns for paths through the code in which a value @@ -11251,38 +11244,6 @@ call site, and that are sufficiently complicated (as per @item -fanalyzer-checker=@var{name} Restrict the analyzer to run just the named checker, and enable it. -Some checkers are disabled by default (even with @option{-fanalyzer}), -such as the @code{taint} checker that implements -@option{-Wanalyzer-tainted-array-index}, and this option is required -to enable them. - -@emph{Note:} currently, @option{-fanalyzer-checker=taint} disables the -following warnings from @option{-fanalyzer}: - -@gccoptlist{ --Wanalyzer-deref-before-check --Wanalyzer-double-fclose --Wanalyzer-double-free --Wanalyzer-exposure-through-output-file --Wanalyzer-fd-access-mode-mismatch --Wanalyzer-fd-double-close --Wanalyzer-fd-leak --Wanalyzer-fd-use-after-close --Wanalyzer-fd-use-without-check --Wanalyzer-file-leak --Wanalyzer-free-of-non-heap --Wanalyzer-malloc-leak --Wanalyzer-mismatching-deallocation --Wanalyzer-null-argument --Wanalyzer-null-dereference --Wanalyzer-possible-null-argument --Wanalyzer-possible-null-dereference --Wanalyzer-unsafe-call-within-signal-handler --Wanalyzer-use-after-free --Wanalyzer-va-list-leak --Wanalyzer-va-list-use-after-va-end -} - @opindex fanalyzer-debug-text-art @opindex fno-analyzer-debug-text-art @item -fanalyzer-debug-text-art-headings diff --git a/gcc/testsuite/c-c++-common/analyzer/attr-tainted_args-1.c b/gcc/testsuite/c-c++-common/analyzer/attr-tainted_args-1.c index 0ff344699671..3525e84b94b1 100644 --- a/gcc/testsuite/c-c++-common/analyzer/attr-tainted_args-1.c +++ b/gcc/testsuite/c-c++-common/analyzer/attr-tainted_args-1.c @@ -1,6 +1,3 @@ -// TODO: remove need for this option -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - #include "../../gcc.dg/analyzer/analyzer-decls.h" struct arg_buf diff --git a/gcc/testsuite/c-c++-common/analyzer/fread-1.c b/gcc/testsuite/c-c++-common/analyzer/fread-1.c index 593cb7f4aa03..467467ee8a6c 100644 --- a/gcc/testsuite/c-c++-common/analyzer/fread-1.c +++ b/gcc/testsuite/c-c++-common/analyzer/fread-1.c @@ -1,5 +1,3 @@ -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - typedef __SIZE_TYPE__ size_t; extern size_t fread (void *, size_t, size_t, void *); diff --git a/gcc/testsuite/c-c++-common/analyzer/pr104029.c b/gcc/testsuite/c-c++-common/analyzer/pr104029.c index 873f0eb16b7e..04b9ef872a3a 100644 --- a/gcc/testsuite/c-c++-common/analyzer/pr104029.c +++ b/gcc/testsuite/c-c++-common/analyzer/pr104029.c @@ -1,6 +1,3 @@ -// TODO: remove need for this option -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - typedef __SIZE_TYPE__ size_t; typedef const void *t_comptype; typedef int (*t_compfunc)(t_comptype, t_comptype); diff --git a/gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-signed-char.c b/gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-signed-char.c index 1f3df7c211f4..45599e228b81 100644 --- a/gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-signed-char.c +++ b/gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-signed-char.c @@ -6,6 +6,9 @@ /* { dg-do "compile" } */ /* { dg-additional-options "-fsigned-char" } */ +/* TODO (PR analyzer/112528): remove need for this. */ +/* { dg-additional-options "--param analyzer-max-enodes-per-program-point=40 --param analyzer-bb-explosion-factor=10" } */ + /* Minimal replacement of system headers. */ typedef __SIZE_TYPE__ size_t; diff --git a/gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-unsigned-char.c b/gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-unsigned-char.c index db9678d1caa9..a59fc49c2b36 100644 --- a/gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-unsigned-char.c +++ b/gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-unsigned-char.c @@ -6,6 +6,9 @@ /* { dg-do "compile" } */ /* { dg-additional-options "-funsigned-char" } */ +/* TODO (PR analyzer/112528): remove need for this. */ +/* { dg-additional-options "--param analyzer-max-enodes-per-program-point=40 --param analyzer-bb-explosion-factor=10" } */ + /* Minimal replacement of system headers. */ typedef __SIZE_TYPE__ size_t; diff --git a/gcc/testsuite/gcc.dg/analyzer/pr93382.c b/gcc/testsuite/gcc.dg/analyzer/pr93382.c index 1e6612ddc050..91eab2192ad9 100644 --- a/gcc/testsuite/gcc.dg/analyzer/pr93382.c +++ b/gcc/testsuite/gcc.dg/analyzer/pr93382.c @@ -1,5 +1,3 @@ -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - typedef __SIZE_TYPE__ size_t; int idx; diff --git a/gcc/testsuite/gcc.dg/analyzer/switch-enum-taint-1.c b/gcc/testsuite/gcc.dg/analyzer/switch-enum-taint-1.c index db3bb5b49473..d20b33e090b7 100644 --- a/gcc/testsuite/gcc.dg/analyzer/switch-enum-taint-1.c +++ b/gcc/testsuite/gcc.dg/analyzer/switch-enum-taint-1.c @@ -1,6 +1,3 @@ -// TODO: remove need for this option -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - #include "analyzer-decls.h" /* Verify the handling of "switch (enum_value)". */ diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-CVE-2011-2210-1.c b/gcc/testsuite/gcc.dg/analyzer/taint-CVE-2011-2210-1.c index b44be9935680..fa89bda6f0f9 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-CVE-2011-2210-1.c +++ b/gcc/testsuite/gcc.dg/analyzer/taint-CVE-2011-2210-1.c @@ -7,9 +7,6 @@ Fixed in 3d0475119d8722798db5e88f26493f6547a4bb5b on linux-2.6.39.y in linux-stable. */ -// TODO: remove need for this option: -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - #include "analyzer-decls.h" #include "test-uaccess.h" diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-CVE-2020-13143-1.c b/gcc/testsuite/gcc.dg/analyzer/taint-CVE-2020-13143-1.c index 328c5799145f..1b81c1bb1f84 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-CVE-2020-13143-1.c +++ b/gcc/testsuite/gcc.dg/analyzer/taint-CVE-2020-13143-1.c @@ -1,9 +1,6 @@ /* See notes in this header. */ #include "taint-CVE-2020-13143.h" -// TODO: remove need for this option -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - struct configfs_attribute { /* [...snip...] */ ssize_t (*store)(struct config_item *, const char *, size_t) /* { dg-message "\\(1\\) field 'store' of 'struct configfs_attribute' is marked with '__attribute__\\(\\(tainted_args\\)\\)'" } */ diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-CVE-2020-13143-2.c b/gcc/testsuite/gcc.dg/analyzer/taint-CVE-2020-13143-2.c index c74a460b01ef..f53e42bd6aa1 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-CVE-2020-13143-2.c +++ b/gcc/testsuite/gcc.dg/analyzer/taint-CVE-2020-13143-2.c @@ -1,9 +1,6 @@ /* See notes in this header. */ #include "taint-CVE-2020-13143.h" -// TODO: remove need for this option -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - struct configfs_attribute { /* [...snip...] */ ssize_t (*store)(struct config_item *, const char *, size_t) /* { dg-message "\\(1\\) field 'store' of 'struct configfs_attribute' is marked with '__attribute__\\(\\(tainted_args\\)\\)'" } */ diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-CVE-2020-13143.h b/gcc/testsuite/gcc.dg/analyzer/taint-CVE-2020-13143.h index 0ba023539af0..93f90d490138 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-CVE-2020-13143.h +++ b/gcc/testsuite/gcc.dg/analyzer/taint-CVE-2020-13143.h @@ -8,9 +8,6 @@ Fixed by 15753588bcd4bbffae1cca33c8ced5722477fe1f on linux-5.7.y in linux-stable. */ -// TODO: remove need for this option -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - #include /* Adapted from include/uapi/asm-generic/posix_types.h */ diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-alloc-1.c b/gcc/testsuite/gcc.dg/analyzer/taint-alloc-1.c index cb2db6c69cfc..dfb585bc613b 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-alloc-1.c +++ b/gcc/testsuite/gcc.dg/analyzer/taint-alloc-1.c @@ -1,5 +1,3 @@ -// TODO: remove need for this option -/* { dg-additional-options "-fanalyzer-checker=taint" } */ /* { dg-require-effective-target alloca } */ #include "analyzer-decls.h" diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-alloc-2.c b/gcc/testsuite/gcc.dg/analyzer/taint-alloc-2.c index 72dbca5cbf08..68fbce9188c2 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-alloc-2.c +++ b/gcc/testsuite/gcc.dg/analyzer/taint-alloc-2.c @@ -1,6 +1,3 @@ -// TODO: remove need for this option: -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - #include "analyzer-decls.h" #include #include diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-alloc-3.c b/gcc/testsuite/gcc.dg/analyzer/taint-alloc-3.c index 80d8f0b82479..ce6a3271d2ad 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-alloc-3.c +++ b/gcc/testsuite/gcc.dg/analyzer/taint-alloc-3.c @@ -1,6 +1,3 @@ -// TODO: remove need for this option: -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - #include "analyzer-decls.h" #include #include diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-alloc-4.c b/gcc/testsuite/gcc.dg/analyzer/taint-alloc-4.c index bd47097b1d5f..9df9422491c8 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-alloc-4.c +++ b/gcc/testsuite/gcc.dg/analyzer/taint-alloc-4.c @@ -1,6 +1,3 @@ -// TODO: remove need for this option: -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - #include "analyzer-decls.h" #include #include diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-alloc-5.c b/gcc/testsuite/gcc.dg/analyzer/taint-alloc-5.c index 9a159800c619..18dbff0298ed 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-alloc-5.c +++ b/gcc/testsuite/gcc.dg/analyzer/taint-alloc-5.c @@ -1,6 +1,3 @@ -// TODO: remove need for this option -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - #include "analyzer-decls.h" struct foo diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-assert-BUG_ON.c b/gcc/testsuite/gcc.dg/analyzer/taint-assert-BUG_ON.c index 8aef0a44a6d3..328940d29839 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-assert-BUG_ON.c +++ b/gcc/testsuite/gcc.dg/analyzer/taint-assert-BUG_ON.c @@ -1,6 +1,3 @@ -// TODO: remove need for this option -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - /* We need this, otherwise the warnings are emitted inside the macros, which makes it hard to write the DejaGnu directives. */ /* { dg-additional-options " -ftrack-macro-expansion=0" } */ diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-assert-macro-expansion.c b/gcc/testsuite/gcc.dg/analyzer/taint-assert-macro-expansion.c index 24b175a09734..78357ae62b82 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-assert-macro-expansion.c +++ b/gcc/testsuite/gcc.dg/analyzer/taint-assert-macro-expansion.c @@ -2,9 +2,6 @@ -Wanalyzer-tainted-assertion with macro-tracking enabled (the default). */ -// TODO: remove need for this option -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - /* { dg-additional-options "-fdiagnostics-show-path-depths" } */ /* { dg-additional-options "-fdiagnostics-path-format=inline-events -fdiagnostics-show-caret" } */ diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-assert-system-header.c b/gcc/testsuite/gcc.dg/analyzer/taint-assert-system-header.c index a65853c7886a..bd47ab791886 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-assert-system-header.c +++ b/gcc/testsuite/gcc.dg/analyzer/taint-assert-system-header.c @@ -3,9 +3,6 @@ (the default), where the assertion macro is defined in a system header. */ -// TODO: remove need for this option -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - /* { dg-additional-options "-fdiagnostics-show-path-depths" } */ /* { dg-additional-options "-fdiagnostics-path-format=inline-events -fdiagnostics-show-caret" } */ diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-assert.c b/gcc/testsuite/gcc.dg/analyzer/taint-assert.c index b09f8c51a161..855ed5f705fc 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-assert.c +++ b/gcc/testsuite/gcc.dg/analyzer/taint-assert.c @@ -1,6 +1,3 @@ -// TODO: remove need for this option -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - /* We need this, otherwise the warnings are emitted inside the macros, which makes it hard to write the DejaGnu directives. */ /* { dg-additional-options " -ftrack-macro-expansion=0" } */ diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-divisor-1.c b/gcc/testsuite/gcc.dg/analyzer/taint-divisor-1.c index b7c1faef1c47..438a2095382c 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-divisor-1.c +++ b/gcc/testsuite/gcc.dg/analyzer/taint-divisor-1.c @@ -1,6 +1,3 @@ -// TODO: remove need for this option: -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - #include "analyzer-decls.h" #include diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-divisor-2.c b/gcc/testsuite/gcc.dg/analyzer/taint-divisor-2.c index de9a1cb3a46f..770258418fa5 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-divisor-2.c +++ b/gcc/testsuite/gcc.dg/analyzer/taint-divisor-2.c @@ -1,6 +1,3 @@ -// TODO: remove need for this option: -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - #include "analyzer-decls.h" __attribute__ ((tainted_args)) diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-merger.c b/gcc/testsuite/gcc.dg/analyzer/taint-merger.c index e4e48f3db03b..b7d562b9704a 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-merger.c +++ b/gcc/testsuite/gcc.dg/analyzer/taint-merger.c @@ -1,6 +1,3 @@ -/* { dg-additional-options "-fanalyzer-checker=taint" } */ -// TODO: remove need for this option - #include "analyzer-decls.h" int v_start; diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-ops.c b/gcc/testsuite/gcc.dg/analyzer/taint-ops.c deleted file mode 100644 index 729dbe53a0c4..000000000000 --- a/gcc/testsuite/gcc.dg/analyzer/taint-ops.c +++ /dev/null @@ -1,106 +0,0 @@ -/* { dg-additional-options "-fanalyzer-checker=taint" } */ -// TODO: remove need for this option -/* This test can probably be removed when -fanalyzer enables - the taint checker by default. */ - -#include "analyzer-decls.h" - -void -test_1 (char a) -{ - char b = -a; -} - -/* Copies of code from data-model-1.c. */ - -void test_20 (int i, int j) -{ - __analyzer_eval (i + 1); /* { dg-warning "UNKNOWN" } */ - __analyzer_eval (i + j); /* { dg-warning "UNKNOWN" } */ - - __analyzer_eval (i - 1); /* { dg-warning "UNKNOWN" } */ - __analyzer_eval (i - j); /* { dg-warning "UNKNOWN" } */ - - __analyzer_eval (i * 2); /* { dg-warning "UNKNOWN" } */ - __analyzer_eval (i * j); /* { dg-warning "UNKNOWN" } */ - - __analyzer_eval (i / 2); /* { dg-warning "UNKNOWN" } */ - __analyzer_eval (i / j); /* { dg-warning "UNKNOWN" } */ - - __analyzer_eval (i % 2); /* { dg-warning "UNKNOWN" } */ - __analyzer_eval (i % j); /* { dg-warning "UNKNOWN" } */ - - __analyzer_eval (i & 1); /* { dg-warning "UNKNOWN" } */ - __analyzer_eval (i & j); /* { dg-warning "UNKNOWN" } */ - - __analyzer_eval (i | 1); /* { dg-warning "UNKNOWN" } */ - __analyzer_eval (i | j); /* { dg-warning "UNKNOWN" } */ - - __analyzer_eval (i ^ 1); /* { dg-warning "UNKNOWN" } */ - __analyzer_eval (i ^ j); /* { dg-warning "UNKNOWN" } */ - - __analyzer_eval (i >> 1); /* { dg-warning "UNKNOWN" } */ - __analyzer_eval (i >> j); /* { dg-warning "UNKNOWN" } */ - - __analyzer_eval (i << 1); /* { dg-warning "UNKNOWN" } */ - __analyzer_eval (i << j); /* { dg-warning "UNKNOWN" } */ - - __analyzer_eval (i && 0); /* { dg-warning "FALSE" } */ - __analyzer_eval (i && 1); /* { dg-warning "UNKNOWN" } */ - __analyzer_eval (i && j); /* { dg-warning "UNKNOWN" } */ - - __analyzer_eval (i || 0); /* { dg-warning "UNKNOWN" } */ - - __analyzer_eval (i || 1); /* { dg-warning "TRUE" } */ - __analyzer_eval (i || j); /* { dg-warning "UNKNOWN" } */ - - __analyzer_eval (~i); /* { dg-warning "UNKNOWN" } */ - __analyzer_eval (-i); /* { dg-warning "UNKNOWN" } */ - __analyzer_eval (+i); /* { dg-warning "UNKNOWN" } */ - - /* Anything added above should be added to the next function also. */ -} - -void test_21 (void) -{ - int i, j, zero; - int *pi = &i; - int *pj = &j; - int *pzero = &zero; - *pi = 5; - *pj = 3; - *pzero = 0; - - __analyzer_eval (i + j == 8); /* { dg-warning "TRUE" } */ - __analyzer_eval (i - j == 2); /* { dg-warning "TRUE" } */ - __analyzer_eval (i * j == 15); /* { dg-warning "TRUE" } */ - __analyzer_eval (i / j == 1); /* { dg-warning "TRUE" } */ - __analyzer_eval (i % j == 2); /* { dg-warning "TRUE" } */ - - /* Division by zero. */ - // TODO: should we warn for this? - __analyzer_eval (i / zero); /* { dg-warning "UNKNOWN" } */ - __analyzer_eval (i % zero); /* { dg-warning "UNKNOWN" } */ - - __analyzer_eval ((i & 1) == (5 & 1)); /* { dg-warning "TRUE" } */ - __analyzer_eval ((i & j) == (5 & 3)); /* { dg-warning "TRUE" } */ - __analyzer_eval ((i | 1) == (5 | 1)); /* { dg-warning "TRUE" } */ - __analyzer_eval ((i | j) == (5 | 3)); /* { dg-warning "TRUE" } */ - __analyzer_eval ((i ^ 1) == (5 ^ 1)); /* { dg-warning "TRUE" } */ - __analyzer_eval ((i ^ j) == (5 ^ 3)); /* { dg-warning "TRUE" } */ - __analyzer_eval ((i >> 1) == (5 >> 1)); /* { dg-warning "TRUE" } */ - __analyzer_eval ((i >> j) == (5 >> 3)); /* { dg-warning "TRUE" } */ - __analyzer_eval ((i << 1) == (5 << 1)); /* { dg-warning "TRUE" } */ - __analyzer_eval ((i << j) == (5 << 3)); /* { dg-warning "TRUE" } */ - __analyzer_eval (i && 0); /* { dg-warning "FALSE" } */ - __analyzer_eval (i && 1); /* { dg-warning "TRUE" } */ - __analyzer_eval (i && j); /* { dg-warning "TRUE" } */ - - __analyzer_eval (i || 0); /* { dg-warning "TRUE" } */ - __analyzer_eval (i || 1); /* { dg-warning "TRUE" } */ - __analyzer_eval (i || j); /* { dg-warning "TRUE" } */ - - __analyzer_eval (~i == ~5); /* { dg-warning "TRUE" } */ - __analyzer_eval (-i == -5); /* { dg-warning "TRUE" } */ - __analyzer_eval (+i == +5); /* { dg-warning "TRUE" } */ -} diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-read-index-1.c b/gcc/testsuite/gcc.dg/analyzer/taint-read-index-1.c index 71c0816fd1fe..1ec78b526296 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-read-index-1.c +++ b/gcc/testsuite/gcc.dg/analyzer/taint-read-index-1.c @@ -1,6 +1,3 @@ -// TODO: remove need for this option: -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - #include #include #include diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-read-offset-1.c b/gcc/testsuite/gcc.dg/analyzer/taint-read-offset-1.c index 6db59bcc6154..bb5d0930cdb2 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-read-offset-1.c +++ b/gcc/testsuite/gcc.dg/analyzer/taint-read-offset-1.c @@ -1,6 +1,3 @@ -// TODO: remove need for this option: -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - #include #include #include diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-realloc.c b/gcc/testsuite/gcc.dg/analyzer/taint-realloc.c index bd0ed0010fbb..aeefb7da2c12 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-realloc.c +++ b/gcc/testsuite/gcc.dg/analyzer/taint-realloc.c @@ -1,6 +1,3 @@ -// TODO: remove need for this option: -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - #include "analyzer-decls.h" #include #include @@ -18,4 +15,4 @@ test_1 (size_t sz) /* { dg-message "\\(1\\) function 'test_1' marked with '__att __analyzer_dump_state ("taint", sz); /* { dg-warning "state: 'tainted'" } */ q = realloc (p, sz); /* { dg-warning "use of attacker-controlled value 'sz' as allocation size without upper-bounds checking" } */ -} +} /* { dg-warning "leak of 'q'" } */ diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-size-1.c b/gcc/testsuite/gcc.dg/analyzer/taint-size-1.c index 1fd5fd486c0d..36083ac5071a 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-size-1.c +++ b/gcc/testsuite/gcc.dg/analyzer/taint-size-1.c @@ -1,6 +1,3 @@ -// TODO: remove need for this option: -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - #include "analyzer-decls.h" #include #include diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-size-access-attr-1.c b/gcc/testsuite/gcc.dg/analyzer/taint-size-access-attr-1.c index 7d243a9570f4..d4da3d77fa13 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-size-access-attr-1.c +++ b/gcc/testsuite/gcc.dg/analyzer/taint-size-access-attr-1.c @@ -1,8 +1,7 @@ /* Passing tainted sizes to external functions with attribute ((access)) with a size-index. */ -// TODO: remove need for the explicit taint option: -/* { dg-additional-options "-fanalyzer-checker=taint -fanalyzer-show-duplicate-count" } */ +/* { dg-additional-options "-fanalyzer-show-duplicate-count" } */ #include "analyzer-decls.h" #include diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-write-index-1.c b/gcc/testsuite/gcc.dg/analyzer/taint-write-index-1.c index cc7ab1ca4f6e..62222069578c 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-write-index-1.c +++ b/gcc/testsuite/gcc.dg/analyzer/taint-write-index-1.c @@ -1,6 +1,3 @@ -// TODO: remove need for this option: -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - #include #include #include diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-write-offset-1.c b/gcc/testsuite/gcc.dg/analyzer/taint-write-offset-1.c index d0df62203156..21794ce4cf8c 100644 --- a/gcc/testsuite/gcc.dg/analyzer/taint-write-offset-1.c +++ b/gcc/testsuite/gcc.dg/analyzer/taint-write-offset-1.c @@ -1,6 +1,3 @@ -// TODO: remove need for this option: -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - #include #include #include diff --git a/gcc/testsuite/gcc.dg/analyzer/torture/taint-read-index-2.c b/gcc/testsuite/gcc.dg/analyzer/torture/taint-read-index-2.c index b3dc177cb14f..81421330e8d0 100644 --- a/gcc/testsuite/gcc.dg/analyzer/torture/taint-read-index-2.c +++ b/gcc/testsuite/gcc.dg/analyzer/torture/taint-read-index-2.c @@ -1,5 +1,3 @@ -// TODO: remove need for the taint option: -/* { dg-additional-options "-fanalyzer-checker=taint" } */ /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } { "" } } */ #define LOWER_LIMIT 5 diff --git a/gcc/testsuite/gcc.dg/analyzer/torture/taint-read-index-3.c b/gcc/testsuite/gcc.dg/analyzer/torture/taint-read-index-3.c index 8eb6061a08ba..86bdedede7e7 100644 --- a/gcc/testsuite/gcc.dg/analyzer/torture/taint-read-index-3.c +++ b/gcc/testsuite/gcc.dg/analyzer/torture/taint-read-index-3.c @@ -1,5 +1,3 @@ -// TODO: remove need for the taint option: -/* { dg-additional-options "-fanalyzer-checker=taint" } */ /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } { "" } } */ struct raw_ep { diff --git a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-1-fixed.c b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-1-fixed.c index 0ca8137c3ef3..51526b831c02 100644 --- a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-1-fixed.c +++ b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-1-fixed.c @@ -1,7 +1,6 @@ /* { dg-do compile } */ -// TODO: remove need for -fanalyzer-checker=taint here: -/* { dg-options "-fanalyzer -fanalyzer-checker=taint" } */ /* { dg-require-effective-target analyzer } */ +/* { dg-additional-options "-Wno-pedantic" } */ /* See notes in this header. */ #include "taint-CVE-2011-0521.h" diff --git a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-1.c b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-1.c index cde12b3b761c..3d11a75073c1 100644 --- a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-1.c +++ b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-1.c @@ -1,6 +1,5 @@ /* { dg-do compile } */ -// TODO: remove need for -fanalyzer-checker=taint here: -/* { dg-options "-fanalyzer -fanalyzer-checker=taint" } */ +/* { dg-additional-options "-Wno-pedantic" } */ /* { dg-require-effective-target analyzer } */ /* See notes in this header. */ diff --git a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-2-fixed.c b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-2-fixed.c index 8a211cefe4e5..d035266b16ad 100644 --- a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-2-fixed.c +++ b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-2-fixed.c @@ -1,14 +1,10 @@ /* { dg-do compile } */ -// TODO: remove need for -fanalyzer-checker=taint here: -/* { dg-options "-fanalyzer -fanalyzer-checker=taint" } */ +/* { dg-additional-options "-Wno-pedantic" } */ /* { dg-require-effective-target analyzer } */ /* See notes in this header. */ #include "taint-CVE-2011-0521.h" -// TODO: remove need for this option -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - /* Adapted from drivers/media/dvb/ttpci/av7110_ca.c */ int dvb_ca_ioctl(struct file *file, unsigned int cmd, void *parg) diff --git a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-2.c b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-2.c index 30cab38e002f..5270e22f1a32 100644 --- a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-2.c +++ b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-2.c @@ -1,7 +1,6 @@ /* { dg-do compile } */ -// TODO: remove need for -fanalyzer-checker=taint here: -/* { dg-options "-fanalyzer -fanalyzer-checker=taint" } */ /* { dg-require-effective-target analyzer } */ +/* { dg-additional-options "-Wno-pedantic" } */ /* See notes in this header. */ #include "taint-CVE-2011-0521.h" diff --git a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-3-fixed.c b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-3-fixed.c index b7852b40dcf8..b8268fa4a826 100644 --- a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-3-fixed.c +++ b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-3-fixed.c @@ -1,14 +1,10 @@ /* { dg-do compile } */ -// TODO: remove need for -fanalyzer-checker=taint here: -/* { dg-options "-fanalyzer -fanalyzer-checker=taint" } */ /* { dg-require-effective-target analyzer } */ +/* { dg-additional-options "-Wno-pedantic" } */ /* See notes in this header. */ #include "taint-CVE-2011-0521.h" -// TODO: remove need for this option -/* { dg-additional-options "-fanalyzer-checker=taint" } */ - /* Adapted from drivers/media/dvb/ttpci/av7110_ca.c */ int dvb_ca_ioctl(struct file *file, unsigned int cmd, void *parg) diff --git a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-3.c b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-3.c index 6b9e034eea77..86868a017c4c 100644 --- a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-3.c +++ b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-3.c @@ -1,7 +1,6 @@ /* { dg-do compile } */ -// TODO: remove need for -fanalyzer-checker=taint here: -/* { dg-options "-fanalyzer -fanalyzer-checker=taint" } */ /* { dg-require-effective-target analyzer } */ +/* { dg-additional-options "-Wno-pedantic" } */ /* See notes in this header. */ #include "taint-CVE-2011-0521.h" @@ -21,7 +20,7 @@ int dvb_ca_ioctl(struct file *file, unsigned int cmd, void *parg) if (info->num > 1) return -EINVAL; av7110->ci_slot[info->num].num = info->num; /* { dg-warning "attacker-controlled value" "" { xfail *-*-* } } */ - // TODO(xfail) + /* TODO(xfail). */ av7110->ci_slot[info->num].type = FW_CI_LL_SUPPORT(av7110->arm_app) ? CA_CI_LINK : CA_CI; memcpy(info, &av7110->ci_slot[info->num], sizeof(ca_slot_info_t)); diff --git a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-4.c b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-4.c index f314c64ce70c..06b3468fca58 100644 --- a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-4.c +++ b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-4.c @@ -1,8 +1,7 @@ /* { dg-do compile } */ -// TODO: remove need for -fanalyzer-checker=taint here: // TODO: remove need for --param=analyzer-max-svalue-depth=25 here: -/* { dg-options "-fanalyzer -fanalyzer-checker=taint --param=analyzer-max-svalue-depth=25" } */ -/* { dg-options "-fanalyzer -fanalyzer-checker=taint" } */ +/* { dg-options "-fanalyzer --param=analyzer-max-svalue-depth=25" } */ +/* { dg-additional-options "-Wno-pedantic" } */ /* { dg-require-effective-target analyzer } */ /* See notes in this header. */ @@ -32,11 +31,10 @@ int test_1(struct file *file, unsigned int cmd, unsigned long arg) if (info->num > 1) return -EINVAL; - av7110->ci_slot[info->num].num = info->num; /* { dg-warning "attacker-controlled value" "" { xfail *-*-* } } */ - // TODO(xfail) - av7110->ci_slot[info->num].type = FW_CI_LL_SUPPORT(av7110->arm_app) ? + av7110->ci_slot[info->num].num = info->num; /* { dg-warning "attacker-controlled value" } */ + av7110->ci_slot[info->num].type = FW_CI_LL_SUPPORT(av7110->arm_app) ? /* { dg-warning "attacker-controlled value" } */ CA_CI_LINK : CA_CI; - memcpy(info, &av7110->ci_slot[info->num], sizeof(ca_slot_info_t)); + memcpy(info, &av7110->ci_slot[info->num], sizeof(ca_slot_info_t)); /* { dg-warning "attacker-controlled value" } */ } copy_to_user((void __user *)arg, parg, sizeof(sbuf)); diff --git a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-5-fixed.c b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-5-fixed.c index 2e74770a7a33..076ada3a20a8 100644 --- a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-5-fixed.c +++ b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-5-fixed.c @@ -1,7 +1,7 @@ /* { dg-do compile } */ -// TODO: remove need for -fanalyzer-checker=taint here: // TODO: remove need for --param=analyzer-max-svalue-depth=25 here: -/* { dg-options "-fanalyzer -fanalyzer-checker=taint --param=analyzer-max-svalue-depth=25" } */ +/* { dg-options "-fanalyzer --param=analyzer-max-svalue-depth=25" } */ +/* { dg-additional-options "-Wno-pedantic" } */ /* { dg-require-effective-target analyzer } */ /* On darwin, system headers are fortified, which defeats the analysis. Turn it off. */ diff --git a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-5.c b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-5.c index 021d458b66ef..e27ee469df8f 100644 --- a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-5.c +++ b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-5.c @@ -1,7 +1,7 @@ /* { dg-do compile } */ -// TODO: remove need for -fanalyzer-checker=taint here: // TODO: remove need for --param=analyzer-max-svalue-depth=25 here: -/* { dg-options "-fanalyzer -fanalyzer-checker=taint --param=analyzer-max-svalue-depth=25" } */ +/* { dg-options "-fanalyzer --param=analyzer-max-svalue-depth=25" } */ +/* { dg-additional-options "-Wno-pedantic" } */ /* { dg-require-effective-target analyzer } */ /* On darwin, system headers are fortified, which defeats the analysis. Turn it off. */ diff --git a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-6.c b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-6.c index f27e9eb5f020..fea70ee57617 100644 --- a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-6.c +++ b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-6.c @@ -1,7 +1,7 @@ /* { dg-do compile } */ -// TODO: remove need for -fanalyzer-checker=taint here: // TODO: remove need for --param=analyzer-max-svalue-depth=25 here: -/* { dg-options "-fanalyzer -fanalyzer-checker=taint --param=analyzer-max-svalue-depth=25" } */ +/* { dg-options "-fanalyzer --param=analyzer-max-svalue-depth=25" } */ +/* { dg-additional-options "-Wno-pedantic" } */ /* { dg-require-effective-target analyzer } */ /* On darwin, system headers are fortified, which defeats the analysis. Turn it off. */ diff --git a/gcc/testsuite/gcc.dg/plugin/taint-antipatterns-1.c b/gcc/testsuite/gcc.dg/plugin/taint-antipatterns-1.c index 6bb6f1be25ca..cdd9a4f1f50f 100644 --- a/gcc/testsuite/gcc.dg/plugin/taint-antipatterns-1.c +++ b/gcc/testsuite/gcc.dg/plugin/taint-antipatterns-1.c @@ -1,6 +1,5 @@ /* { dg-do compile } */ -// TODO: remove need for -fanalyzer-checker=taint here: -/* { dg-options "-fanalyzer -fanalyzer-checker=taint" } */ +/* { dg-options "-fanalyzer" } */ /* { dg-require-effective-target analyzer } */ #include "test-uaccess.h" From 6f2fc42d9e52e8322e718e0154cd235d00906f99 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 14 Nov 2023 22:02:55 +0000 Subject: [PATCH 041/169] libstdc++: Fix std::hash [PR112348] libstdc++-v3/ChangeLog: PR libstdc++/112348 * include/std/stacktrace (hash>): Fix type of hash functio nfor entries. * testsuite/19_diagnostics/stacktrace/hash.cc: New test. --- libstdc++-v3/include/std/stacktrace | 2 +- .../19_diagnostics/stacktrace/hash.cc | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 libstdc++-v3/testsuite/19_diagnostics/stacktrace/hash.cc diff --git a/libstdc++-v3/include/std/stacktrace b/libstdc++-v3/include/std/stacktrace index da0e48d35329..9a0d0b160687 100644 --- a/libstdc++-v3/include/std/stacktrace +++ b/libstdc++-v3/include/std/stacktrace @@ -797,7 +797,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION size_t operator()(const basic_stacktrace<_Allocator>& __st) const noexcept { - hash __h; + hash __h; size_t __val = _Hash_impl::hash(__st.size()); for (const auto& __f : __st) __val = _Hash_impl::__hash_combine(__h(__f), __val); diff --git a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/hash.cc b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/hash.cc new file mode 100644 index 000000000000..88831efd6879 --- /dev/null +++ b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/hash.cc @@ -0,0 +1,23 @@ +// { dg-options "-lstdc++exp" } +// { dg-do run { target c++23 } } +// { dg-require-effective-target stacktrace } + +#include +#include +#include + +void +test_hash() +{ + using Alloc = __gnu_test::uneq_allocator; + using S = std::basic_stacktrace; + S s; + std::size_t h = std::hash()(s); + std::size_t h2 = std::hash()(S::current()); + VERIFY( h != h2 ); +} + +int main() +{ + test_hash(); +} From 1c15303375f7089ff985b085ab877b11ebfbc4b7 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 14 Nov 2023 10:56:57 +0000 Subject: [PATCH 042/169] libstdc++: Fix uses of signed types with functions In we pass the int __base parameter to our internal versions of functions, __bit_width and __countr_zero. Those functions are only defined for unsigned types, so we need to convert the base to unsigned. The base must be in the range [2,36] so we can mask off the low bits and then convert that to unsigned, so that we don't need to care about negative values becoming large unsigned values. libstdc++-v3/ChangeLog: * include/std/charconv (__from_chars_pow2_base): Convert base to unsigned for call to __countr_zero. (__from_chars_alnum): Likewise for call to __bit_width. --- libstdc++-v3/include/std/charconv | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libstdc++-v3/include/std/charconv b/libstdc++-v3/include/std/charconv index 6cb7fecff870..54632968f5a0 100644 --- a/libstdc++-v3/include/std/charconv +++ b/libstdc++-v3/include/std/charconv @@ -465,7 +465,7 @@ namespace __detail // __glibcxx_assert((__base & (__base - 1)) == 0); // __glibcxx_assert(_DecOnly ? __base <= 8 : __base <= 32); - const int __log2_base = __countr_zero(__base); + const int __log2_base = __countr_zero(unsigned(__base & 0x3f)); const ptrdiff_t __len = __last - __first; ptrdiff_t __i = 0; @@ -517,9 +517,9 @@ namespace __detail __from_chars_alnum(const char*& __first, const char* __last, _Tp& __val, int __base) { - // __glibcxx_assert(!_DecOnly || __base <= 10); + // __glibcxx_assert(_DecOnly ? __base <= 10 : __base <= 36); - const int __bits_per_digit = __bit_width(__base); + const int __bits_per_digit = __bit_width(unsigned(__base & 0x3f)); int __unused_bits_lower_bound = __gnu_cxx::__int_traits<_Tp>::__digits; for (; __first != __last; ++__first) { From b011535456396a6846ff24fb5b1baea8fe0a33b1 Mon Sep 17 00:00:00 2001 From: Cassio Neri Date: Sat, 11 Nov 2023 16:44:58 +0000 Subject: [PATCH 043/169] libstdc++: Remove unnecessary "& 1" from year_month_day_last::day() When year_month_day_last::day() was implemented, Dr. Matthias Kretz realised that the operation "& 1" wasn't necessary but we did not patch it at that time. This patch removes the unnecessary operation. libstdc++-v3/ChangeLog: * include/std/chrono (year_month_day_last::day): Remove &1. --- libstdc++-v3/include/std/chrono | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/libstdc++-v3/include/std/chrono b/libstdc++-v3/include/std/chrono index 10e868e5a036..a826982803b7 100644 --- a/libstdc++-v3/include/std/chrono +++ b/libstdc++-v3/include/std/chrono @@ -1800,22 +1800,26 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { const auto __m = static_cast(month()); - // Excluding February, the last day of month __m is either 30 or 31 or, - // in another words, it is 30 + b = 30 | b, where b is in {0, 1}. + // The result is unspecified if __m < 1 or __m > 12. Hence, assume + // 1 <= __m <= 12. For __m != 2, day() == 30 or day() == 31 or, in + // other words, day () == 30 | b, where b is in {0, 1}. - // If __m in {1, 3, 4, 5, 6, 7}, then b is 1 if, and only if __m is odd. - // Hence, b = __m & 1 = (__m ^ 0) & 1. + // If __m in {1, 3, 4, 5, 6, 7}, then b is 1 if, and only if, __m is + // odd. Hence, b = __m & 1 = (__m ^ 0) & 1. - // If __m in {8, 9, 10, 11, 12}, then b is 1 if, and only if __m is even. - // Hence, b = (__m ^ 1) & 1. + // If __m in {8, 9, 10, 11, 12}, then b is 1 if, and only if, __m is + // even. Hence, b = (__m ^ 1) & 1. // Therefore, b = (__m ^ c) & 1, where c = 0, if __m < 8, or c = 1 if // __m >= 8, that is, c = __m >> 3. - // The above mathematically justifies this implementation whose - // performance does not depend on look-up tables being on the L1 cache. - return chrono::day{__m != 2 ? ((__m ^ (__m >> 3)) & 1) | 30 - : _M_y.is_leap() ? 29 : 28}; + // Since 30 = (11110)_2 and __m <= 31 = (11111)_2, the "& 1" in b's + // calculation is unnecessary. + + // The performance of this implementation does not depend on look-up + // tables being on the L1 cache. + return chrono::day{__m != 2 ? (__m ^ (__m >> 3)) | 30 + : _M_y.is_leap() ? 29 : 28}; } constexpr From 86a0df1a6c7fe4a835620b868e76ea78d42d6620 Mon Sep 17 00:00:00 2001 From: Cassio Neri Date: Sat, 11 Nov 2023 22:59:50 +0000 Subject: [PATCH 044/169] libstdc++: Simplify year::is_leap() The current implementation returns (_M_y & (__is_multiple_of_100 ? 15 : 3)) == 0; where __is_multiple_of_100 is calculated using an obfuscated algorithm which saves one ror instruction when compared to _M_y % 100 == 0 [1]. In leap years calculation, it's correct to replace the divisibility check by 100 with the one by 25. It turns out that _M_y % 25 == 0 also saves the ror instruction [2]. Therefore, the obfuscation is not required. [1] https://godbolt.org/z/5PaEv6a6b [2] https://godbolt.org/z/55G8rn77e libstdc++-v3/ChangeLog: * include/std/chrono (year::is_leap): Clear code. --- libstdc++-v3/include/std/chrono | 38 ++++++++++++++++----------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/libstdc++-v3/include/std/chrono b/libstdc++-v3/include/std/chrono index a826982803b7..45e7d269e4b4 100644 --- a/libstdc++-v3/include/std/chrono +++ b/libstdc++-v3/include/std/chrono @@ -835,29 +835,29 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION constexpr bool is_leap() const noexcept { - // Testing divisibility by 100 first gives better performance, that is, - // return (_M_y % 100 != 0 || _M_y % 400 == 0) && _M_y % 4 == 0; - - // It gets even faster if _M_y is in [-536870800, 536870999] - // (which is the case here) and _M_y % 100 is replaced by - // __is_multiple_of_100 below. + // Testing divisibility by 100 first gives better performance [1], i.e., + // return _M_y % 100 == 0 ? _M_y % 400 == 0 : _M_y % 16 == 0; + // Furthermore, if _M_y % 100 == 0, then _M_y % 400 == 0 is equivalent + // to _M_y % 16 == 0, so we can simplify it to + // return _M_y % 100 == 0 ? _M_y % 16 == 0 : _M_y % 4 == 0. // #1 + // Similarly, we can replace 100 with 25 (which is good since + // _M_y % 25 == 0 requires one fewer instruction than _M_y % 100 == 0 + // [2]): + // return _M_y % 25 == 0 ? _M_y % 16 == 0 : _M_y % 4 == 0. // #2 + // Indeed, first assume _M_y % 4 != 0. Then _M_y % 16 != 0 and hence, + // _M_y % 4 == 0 and _M_y % 16 == 0 are both false. Therefore, #2 + // returns false as it should (regardless of _M_y % 25.) Now assume + // _M_y % 4 == 0. In this case, _M_y % 25 == 0 if, and only if, + // _M_y % 100 == 0, that is, #1 and #2 are equivalent. Finally, #2 is + // equivalent to + // return (_M_y & (_M_y % 25 == 0 ? 15 : 3)) == 0. // References: // [1] https://github.com/cassioneri/calendar - // [2] https://accu.org/journals/overload/28/155/overload155.pdf#page=16 + // [2] https://godbolt.org/z/55G8rn77e + // [3] https://gcc.gnu.org/pipermail/libstdc++/2021-June/052815.html - // Furthermore, if y%100 == 0, then y%400==0 is equivalent to y%16==0, - // so we can simplify it to (!mult_100 && y % 4 == 0) || y % 16 == 0, - // which is equivalent to (y & (mult_100 ? 15 : 3)) == 0. - // See https://gcc.gnu.org/pipermail/libstdc++/2021-June/052815.html - - constexpr uint32_t __multiplier = 42949673; - constexpr uint32_t __bound = 42949669; - constexpr uint32_t __max_dividend = 1073741799; - constexpr uint32_t __offset = __max_dividend / 2 / 100 * 100; - const bool __is_multiple_of_100 - = __multiplier * (_M_y + __offset) < __bound; - return (_M_y & (__is_multiple_of_100 ? 15 : 3)) == 0; + return (_M_y & (_M_y % 25 == 0 ? 15 : 3)) == 0; } explicit constexpr From f6ce081d0ffb5f25d71eb2f30fcfdff7f20dba22 Mon Sep 17 00:00:00 2001 From: Cassio Neri Date: Sun, 12 Nov 2023 01:33:52 +0000 Subject: [PATCH 045/169] libstdc++: Fix UB in weekday::weekday(sys_days) and add test The following has undefined behaviour (signed overflow) [1]: weekday max{sys_days{days{numeric_limits::max()}}}; The issue is in this line when __n is very large and __n + 4 overflows: return weekday(__n >= -4 ? (__n + 4) % 7 : (__n + 5) % 7 + 6); In addition to fixing this bug, the new implementation makes the compiler emit shorter and branchless code for x86-64 and ARM [2]. [1] https://godbolt.org/z/1s5bv7KfT [2] https://godbolt.org/z/zKsabzrhs libstdc++-v3/ChangeLog: * include/std/chrono (weekday::_S_from_days): Fix UB. * testsuite/std/time/weekday/1.cc: Add test for overflow. --- libstdc++-v3/include/std/chrono | 11 +++++++++-- libstdc++-v3/testsuite/std/time/weekday/1.cc | 9 +++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/include/std/chrono b/libstdc++-v3/include/std/chrono index 45e7d269e4b4..bd21ec189a5a 100644 --- a/libstdc++-v3/include/std/chrono +++ b/libstdc++-v3/include/std/chrono @@ -930,8 +930,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static constexpr weekday _S_from_days(const days& __d) { - auto __n = __d.count(); - return weekday(__n >= -4 ? (__n + 4) % 7 : (__n + 5) % 7 + 6); + using _Rep = days::rep; + using _URep = make_unsigned_t<_Rep>; + const auto __n = __d.count(); + const auto __m = static_cast<_URep>(__n); + + // 1970-01-01 (__n = 0, __m = 0 ) -> Thursday (4) + // 1969-31-12 (__n = -1, __m = _URep(-1)) -> Wednesday (3) + const auto __offset = __n >= 0 ? _URep(4) : 3 - _URep(-1) % 7 - 7; + return weekday((__m + __offset) % 7); } public: diff --git a/libstdc++-v3/testsuite/std/time/weekday/1.cc b/libstdc++-v3/testsuite/std/time/weekday/1.cc index 00278c8b01cb..e89fca47d4b6 100644 --- a/libstdc++-v3/testsuite/std/time/weekday/1.cc +++ b/libstdc++-v3/testsuite/std/time/weekday/1.cc @@ -20,6 +20,7 @@ // Class template day [time.cal.weekday] #include +#include constexpr void constexpr_weekday() @@ -37,6 +38,14 @@ constexpr_weekday() static_assert(weekday{3}[2].weekday() == weekday{3}); static_assert(weekday{3}[last].weekday() == weekday{3}); + // Test for UB (overflow). + { + using rep = days::rep; + using std::numeric_limits; + constexpr weekday max{sys_days{days{numeric_limits::max()}}}; + constexpr weekday min{sys_days{days{numeric_limits::min()}}}; + } + static_assert(weekday{sys_days{1900y/January/1}} == Monday); static_assert(weekday{sys_days{1970y/January/1}} == Thursday); static_assert(weekday{sys_days{2020y/August/21}} == Friday); From f71352c71d78ac977ea0e71a6900699a8cf09219 Mon Sep 17 00:00:00 2001 From: Cassio Neri Date: Tue, 14 Nov 2023 00:27:39 +0000 Subject: [PATCH 046/169] libstdc++: Improve operator-(weekday x, weekday y) The current implementation calls __detail::__modulo which is relatively expensive. A better implementation is possible if we assume that x.ok() && y.ok() == true, so that n = x.c_encoding() - y.c_encoding() is in [-6, 6]. In this case, it suffices to return n >= 0 ? n : n + 7. The above is allowed by [time.cal.wd.nonmembers]/5: the returned value is unspecified when x.ok() || y.ok() == false. The assembly emitted for x86-64 and ARM can be seen in: https://godbolt.org/z/nMdc5vv9n. libstdc++-v3/ChangeLog: * include/std/chrono (operator-(const weekday&, const weekday&)): Optimize. --- libstdc++-v3/include/std/chrono | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/include/std/chrono b/libstdc++-v3/include/std/chrono index bd21ec189a5a..10bdd1c4edeb 100644 --- a/libstdc++-v3/include/std/chrono +++ b/libstdc++-v3/include/std/chrono @@ -1043,8 +1043,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION friend constexpr days operator-(const weekday& __x, const weekday& __y) noexcept { - auto __n = static_cast(__x._M_wd) - __y._M_wd; - return days{__detail::__modulo(__n, 7)}; + const auto __n = __x.c_encoding() - __y.c_encoding(); + return static_cast(__n) >= 0 ? days{__n} : days{__n + 7}; } }; From 9938645fcf914ec2a3fa8137cf1456ad4af5f77c Mon Sep 17 00:00:00 2001 From: Lewis Hyatt Date: Fri, 10 Nov 2023 11:10:18 -0500 Subject: [PATCH 047/169] c-family: Let libcpp know when the compilation is for a PCH [PR9471] libcpp will generate diagnostics when it encounters things in the main file that only belong in a header file, such as `#pragma once' or `#pragma GCC system_header'. But sometimes the main file is a header file that is just being compiled separately, e.g. to produce a C++ module or a PCH, in which case such diagnostics should be suppressed. libcpp already has an interface to request that, so make use of it in the C frontends to prevent libcpp from issuing unwanted diagnostics when compiling a PCH. gcc/c-family/ChangeLog: PR pch/9471 PR pch/47857 * c-opts.cc (c_common_post_options): Set cpp_opts->main_search so libcpp knows it is compiling a header file separately. gcc/testsuite/ChangeLog: PR pch/9471 PR pch/47857 * g++.dg/pch/main-file-warnings.C: New test. * g++.dg/pch/main-file-warnings.Hs: New test. * gcc.dg/pch/main-file-warnings.c: New test. * gcc.dg/pch/main-file-warnings.hs: New test. --- gcc/c-family/c-opts.cc | 3 +++ gcc/testsuite/g++.dg/pch/main-file-warnings.C | 7 +++++++ gcc/testsuite/g++.dg/pch/main-file-warnings.Hs | 3 +++ gcc/testsuite/gcc.dg/pch/main-file-warnings.c | 7 +++++++ gcc/testsuite/gcc.dg/pch/main-file-warnings.hs | 3 +++ 5 files changed, 23 insertions(+) create mode 100644 gcc/testsuite/g++.dg/pch/main-file-warnings.C create mode 100644 gcc/testsuite/g++.dg/pch/main-file-warnings.Hs create mode 100644 gcc/testsuite/gcc.dg/pch/main-file-warnings.c create mode 100644 gcc/testsuite/gcc.dg/pch/main-file-warnings.hs diff --git a/gcc/c-family/c-opts.cc b/gcc/c-family/c-opts.cc index fbabd1816c18..10403c03bd6e 100644 --- a/gcc/c-family/c-opts.cc +++ b/gcc/c-family/c-opts.cc @@ -1174,6 +1174,9 @@ c_common_post_options (const char **pfilename) "the %qs debug info cannot be used with " "pre-compiled headers", debug_set_names (write_symbols & ~DWARF2_DEBUG)); + /* Let libcpp know that the main file is a header so it won't + complain about things like #include_next and #pragma once. */ + cpp_opts->main_search = CMS_header; } else if (write_symbols != NO_DEBUG && write_symbols != DWARF2_DEBUG) c_common_no_more_pch (); diff --git a/gcc/testsuite/g++.dg/pch/main-file-warnings.C b/gcc/testsuite/g++.dg/pch/main-file-warnings.C new file mode 100644 index 000000000000..a9e8b0ba9f2c --- /dev/null +++ b/gcc/testsuite/g++.dg/pch/main-file-warnings.C @@ -0,0 +1,7 @@ +/* PR pch/9471 */ +/* PR pch/47857 */ +/* Test will fail if any warnings get issued while compiling the header into a PCH. */ +#include "main-file-warnings.H" +#pragma once /* { dg-warning "in main file" } */ +#pragma GCC system_header /* { dg-warning "outside include file" } */ +#include_next /* { dg-warning "in primary source file" } */ diff --git a/gcc/testsuite/g++.dg/pch/main-file-warnings.Hs b/gcc/testsuite/g++.dg/pch/main-file-warnings.Hs new file mode 100644 index 000000000000..d1582bb8290c --- /dev/null +++ b/gcc/testsuite/g++.dg/pch/main-file-warnings.Hs @@ -0,0 +1,3 @@ +#pragma once /* { dg-bogus "in main file" } */ +#pragma GCC system_header /* { dg-bogus "outside include file" } */ +#include_next /* { dg-bogus "in primary source file" } */ diff --git a/gcc/testsuite/gcc.dg/pch/main-file-warnings.c b/gcc/testsuite/gcc.dg/pch/main-file-warnings.c new file mode 100644 index 000000000000..aedbc15f7ba7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pch/main-file-warnings.c @@ -0,0 +1,7 @@ +/* PR pch/9471 */ +/* PR pch/47857 */ +/* Test will fail if any warnings get issued while compiling the header into a PCH. */ +#include "main-file-warnings.h" +#pragma once /* { dg-warning "in main file" } */ +#pragma GCC system_header /* { dg-warning "outside include file" } */ +#include_next /* { dg-warning "in primary source file" } */ diff --git a/gcc/testsuite/gcc.dg/pch/main-file-warnings.hs b/gcc/testsuite/gcc.dg/pch/main-file-warnings.hs new file mode 100644 index 000000000000..d1582bb8290c --- /dev/null +++ b/gcc/testsuite/gcc.dg/pch/main-file-warnings.hs @@ -0,0 +1,3 @@ +#pragma once /* { dg-bogus "in main file" } */ +#pragma GCC system_header /* { dg-bogus "outside include file" } */ +#include_next /* { dg-bogus "in primary source file" } */ From eaedb56a0f001ab619d9d699dabd7dc130b59143 Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Wed, 15 Nov 2023 00:16:41 +0000 Subject: [PATCH 048/169] Daily bump. --- contrib/ChangeLog | 12 ++ gcc/ChangeLog | 298 ++++++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/analyzer/ChangeLog | 6 + gcc/c-family/ChangeLog | 29 ++++ gcc/cp/ChangeLog | 22 +++ gcc/fortran/ChangeLog | 4 + gcc/testsuite/ChangeLog | 153 +++++++++++++++++++++ libcpp/ChangeLog | 29 ++++ libstdc++-v3/ChangeLog | 38 +++++ 10 files changed, 592 insertions(+), 1 deletion(-) diff --git a/contrib/ChangeLog b/contrib/ChangeLog index 6e338cdf0e5c..e4eea097e57c 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,15 @@ +2023-11-14 Jakub Jelinek + + * unicode/README: Adjust glibc git commit hash, number of Unicode + data files to be updated and latest Unicode version. + * unicode/from_glibc/utf8_gen.py: Update from glibc. + * unicode/UnicodeData.txt: Update from Unicode 15.1. + * unicode/EastAsianWidth.txt: Likewise. + * unicode/DerivedNormalizationProps.txt: Likewise. + * unicode/NameAliases.txt: Likewise. + * unicode/DerivedCoreProperties.txt: Likewise. + * unicode/PropList.txt: Likewise. + 2023-11-14 Jakub Jelinek * gcc-changelog/git_update_version.py: Add diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2e8b8d7a547d..337381fabe02 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,301 @@ +2023-11-14 David Malcolm + + PR analyzer/103533 + * doc/invoke.texi (Static Analyzer Options): Add the six + -Wanalyzer-tainted-* warnings. Update documentation of each + warning to reflect removed requirement to use + -fanalyzer-checker=taint. Remove discussion of + -fanalyzer-checker=taint. + +2023-11-14 David Malcolm + + * diagnostic-format-json.cc + (json_output_format::on_end_diagnostic): Update calls to m_context + callbacks to use member functions; tighten up scopes. + * diagnostic-format-sarif.cc (sarif_builder::make_result_object): + Likewise. + (sarif_builder::make_reporting_descriptor_object_for_warning): + Likewise. + * diagnostic.cc (diagnostic_context::initialize): Update for + callbacks being moved into m_option_callbacks and being renamed. + (diagnostic_context::set_option_hooks): New. + (diagnostic_option_classifier::classify_diagnostic): Update call + to global_dc->m_option_enabled to use option_enabled_p. + (diagnostic_context::print_option_information): Update calls to + m_context callbacks to use member functions; tighten up scopes. + (diagnostic_context::diagnostic_enabled): Likewise. + * diagnostic.h (diagnostic_option_enabled_cb): New typedef. + (diagnostic_make_option_name_cb): New typedef. + (diagnostic_make_option_url_cb): New typedef. + (diagnostic_context::option_enabled_p): New. + (diagnostic_context::make_option_name): New. + (diagnostic_context::make_option_url): New. + (diagnostic_context::set_option_hooks): New decl. + (diagnostic_context::m_option_enabled): Rename to + m_option_enabled_cb and move within m_option_callbacks, using + typedef. + (diagnostic_context::m_option_state): Move within + m_option_callbacks. + (diagnostic_context::m_option_name): Rename to + m_make_option_name_cb and move within m_option_callbacks, using + typedef. + (diagnostic_context::m_get_option_url): Likewise, renaming to + m_make_option_url_cb. + * lto-wrapper.cc (print_lto_docs_link): Update call to m_context + callback to use member function. + (main): Use diagnostic_context::set_option_hooks. + * opts-diagnostic.h (option_name): Make context param const. + (get_option_url): Likewise. + * opts.cc (option_name): Likewise. + (get_option_url): Likewise. + * toplev.cc (general_init): Use + diagnostic_context::set_option_hooks. + +2023-11-14 David Malcolm + + * selftest-diagnostic.cc + (test_diagnostic_context::test_diagnostic_context): Use + diagnostic_start_span. + * tree-diagnostic-path.cc (struct event_range): Likewise. + +2023-11-14 David Malcolm + + * diagnostic-show-locus.cc (diagnostic_context::show_locus): + Update for renaming of text callbacks fields. + * diagnostic.cc (diagnostic_context::initialize): Likewise. + * diagnostic.h (class diagnostic_context): Add "friend" for + accessors to m_text_callbacks. + (diagnostic_context::m_text_callbacks): Make private, and add an + "m_" prefix to field names. + (diagnostic_starter): Convert from macro to inline function. + (diagnostic_start_span): New. + (diagnostic_finalizer): Convert from macro to inline function. + +2023-11-14 David Malcolm + + * diagnostic.h (diagnostic_ready_p): Convert from macro to inline + function. + +2023-11-14 Uros Bizjak + + PR target/78904 + * config/i386/i386.md (*addqi_ext_1_slp): + New define_insn_and_split pattern. + (*subqi_ext_1_slp): Ditto. + (*qi_ext_1_slp): Ditto. + +2023-11-14 Andrew Stubbs + + PR target/112481 + * expr.cc (store_constructor): Use OPTAB_WIDEN for mask adjustment. + +2023-11-14 David Malcolm + + * diagnostic-format-sarif.cc (sarif_builder::get_sarif_column): + Use m_context's file_cache. + (sarif_builder::maybe_make_artifact_content_object): Likewise. + (sarif_builder::get_source_lines): Likewise. + * diagnostic-show-locus.cc + (exploc_with_display_col::exploc_with_display_col): Add file_cache + param. + (layout::m_file_cache): New field. + (make_range): Add file_cache param. + (selftest::test_layout_range_for_single_point): Create and use a + temporary file_cache. + (selftest::test_layout_range_for_single_line): Likewise. + (selftest::test_layout_range_for_multiple_lines): Likewise. + (layout::layout): Initialize m_file_cache from the context and use it. + (layout::maybe_add_location_range): Use m_file_cache. + (layout::calculate_x_offset_display): Likewise. + (get_affected_range): Add file_cache param. + (get_printed_columns): Likewise. + (line_corrections::line_corrections): Likewwise. + (line_corrections::m_file_cache): New field. + (source_line::source_line): Add file_cache param. + (line_corrections::add_hint): Use m_file_cache. + (layout::print_trailing_fixits): Likewise. + (layout::print_line): Likewise. + (selftest::test_layout_x_offset_display_utf8): Create and use a + temporary file_cache. + (selftest::test_layout_x_offset_display_tab): Likewise. + (selftest::test_diagnostic_show_locus_one_liner_utf8): Likewise. + (selftest::test_add_location_if_nearby): Pass global_dc's + file_cache to temp_source_file ctor. + (selftest::test_overlapped_fixit_printing): Create and use a + temporary file_cache. + (selftest::test_overlapped_fixit_printing_utf8): Likewise. + (selftest::test_overlapped_fixit_printing_2): Use dc's file_cache. + * diagnostic.cc (diagnostic_context::initialize): Always create a + file_cache. + (diagnostic_context::initialize_input_context): Assume + m_file_cache has already been created. + (diagnostic_context::create_edit_context): Pass m_file_cache to + edit_context. + (convert_column_unit): Add file_cache param. + (diagnostic_context::converted_column): Use context's file_cache. + (print_parseable_fixits): Add file_cache param. + (diagnostic_context::report_diagnostic): Use context's file_cache. + (selftest::test_print_parseable_fixits_none): Create and use a + temporary file_cache. + (selftest::test_print_parseable_fixits_insert): Likewise. + (selftest::test_print_parseable_fixits_remove): Likewise. + (selftest::test_print_parseable_fixits_replace): Likewise. + (selftest::test_print_parseable_fixits_bytes_vs_display_columns): + Likewise. + * diagnostic.h (diagnostic_context::file_cache_init): Delete. + (diagnostic_context::get_file_cache): Convert return type from + pointer to reference. + * edit-context.cc (edited_file::get_file_cache): New. + (edited_file::m_edit_context): New. + (edit_context::edit_context): Add file_cache param. + (edit_context::get_or_insert_file): Pass this to edited_file's + ctor. + (edited_file::edited_file): Add edit_context param. + (edited_file::print_content): Use get_file_cache. + (edited_file::print_diff_hunk): Likewise. + (edited_file::print_run_of_changed_lines): Likewise. + (edited_file::get_or_insert_line): Likewise. + (edited_file::get_num_lines): Likewise. + (edited_line::edited_line): Pass in file_cache and use it. + (selftest::test_get_content): Create and use a + temporary file_cache. + (selftest::test_applying_fixits_insert_before): Likewise. + (selftest::test_applying_fixits_insert_after): Likewise. + (selftest::test_applying_fixits_insert_after_at_line_end): + Likewise. + (selftest::test_applying_fixits_insert_after_failure): Likewise. + (selftest::test_applying_fixits_insert_containing_newline): + Likewise. + (selftest::test_applying_fixits_growing_replace): Likewise. + (selftest::test_applying_fixits_shrinking_replace): Likewise. + (selftest::test_applying_fixits_replace_containing_newline): + Likewise. + (selftest::test_applying_fixits_remove): Likewise. + (selftest::test_applying_fixits_multiple): Likewise. + (selftest::test_applying_fixits_multiple_lines): Likewise. + (selftest::test_applying_fixits_modernize_named_init): Likewise. + (selftest::test_applying_fixits_modernize_named_init): Likewise. + (selftest::test_applying_fixits_unreadable_file): Likewise. + (selftest::test_applying_fixits_line_out_of_range): Likewise. + (selftest::test_applying_fixits_column_validation): Likewise. + (selftest::test_applying_fixits_column_validation): Likewise. + (selftest::test_applying_fixits_column_validation): Likewise. + (selftest::test_applying_fixits_column_validation): Likewise. + * edit-context.h (edit_context::edit_context): Add file_cache + param. + (edit_context::get_file_cache): New. + (edit_context::m_file_cache): New. + * final.cc: Include "diagnostic.h". + (asm_show_source): Use global_dc's file_cache. + * gcc-rich-location.cc (blank_line_before_p): Add file_cache + param. + (use_new_line): Likewise. + (gcc_rich_location::add_fixit_insert_formatted): Use global dc's + file_cache. + * input.cc (diagnostic_file_cache_init): Delete. + (diagnostic_context::file_cache_init): Delete. + (diagnostics_file_cache_forcibly_evict_file): Delete. + (file_cache::missing_trailing_newline_p): New. + (file_cache::evicted_cache_tab_entry): Don't call + diagnostic_file_cache_init. + (location_get_source_line): Delete. + (get_source_text_between): Add file_cache param. + (get_source_file_content): Delete. + (location_missing_trailing_newline): Delete. + (location_compute_display_column): Add file_cache param. + (dump_location_info): Create and use temporary file_cache. + (get_substring_ranges_for_loc): Add file_cache param. + (get_location_within_string): Likewise. + (get_source_range_for_char): Likewise. + (get_num_source_ranges_for_substring): Likewise. + (selftest::test_reading_source_line): Create and use temporary + file_cache. + (selftest::lexer_test::m_file_cache): New field. + (selftest::assert_char_at_range): Use test.m_file_cache. + (selftest::assert_num_substring_ranges): Likewise. + (selftest::assert_has_no_substring_ranges): Likewise. + (selftest::test_lexer_string_locations_concatenation_2): Likewise. + * input.h (class file_cache): New forward decl. + (location_compute_display_column): Add file_cache param. + (location_get_source_line): Delete. + (get_source_text_between): Add file_cache param. + (get_source_file_content): Delete. + (location_missing_trailing_newline): Delete. + (file_cache::missing_trailing_newline_p): New decl. + (diagnostics_file_cache_forcibly_evict_file): Delete. + * selftest.cc (named_temp_file::named_temp_file): Add file_cache + param. + (named_temp_file::~named_temp_file): Optionally evict the file + from the given file_cache. + (temp_source_file::temp_source_file): Add file_cache param. + * selftest.h (class file_cache): New forward decl. + (named_temp_file::named_temp_file): Add file_cache param. + (named_temp_file::m_file_cache): New field. + (temp_source_file::temp_source_file): Add file_cache param. + * substring-locations.h (get_location_within_string): Add + file_cache param. + +2023-11-14 David Malcolm + + * diagnostic-format-json.cc: Use type-specific "set_*" functions + of json::object to avoid naked new of json value subclasses. + * diagnostic-format-sarif.cc: Likewise. + * gcov.cc: Likewise. + * json.cc (object::set_string): New. + (object::set_integer): New. + (object::set_float): New. + (object::set_bool): New. + (selftest::test_writing_objects): Use object::set_string. + * json.h (object::set_string): New decl. + (object::set_integer): New decl. + (object::set_float): New decl. + (object::set_bool): New decl. + * optinfo-emit-json.cc: Use type-specific "set_*" functions of + json::object to avoid naked new of json value subclasses. + * timevar.cc: Likewise. + * tree-diagnostic-path.cc: Likewise. + +2023-11-14 Andrew MacLeod + + PR tree-optimization/112509 + * tree-vrp.cc (find_case_label_range): Create range from case labels. + +2023-11-14 Stefan Schulze Frielinghaus + + * config/s390/s390-builtin-types.def: Add/remove types. + * config/s390/s390-builtins.def (s390_vec_scatter_element_flt): + The type for the offset should be UV4SI instead of V4SF. + +2023-11-14 Saurabh Jha + + PR target/112337 + * config/arm/arm.cc (mve_vector_mem_operand): Add a REG_P check for INC + and DEC operations. + +2023-11-14 Richard Biener + + PR tree-optimization/111233 + PR tree-optimization/111652 + PR tree-optimization/111727 + PR tree-optimization/111838 + PR tree-optimization/112113 + * tree-ssa-loop-split.cc (patch_loop_exit): Get the new + guard code instead of the old guard stmt. + (split_loop): Adjust. + +2023-11-14 Richard Biener + + * tree-loop-distribution.cc (loop_distribution::data_dep_in_cycle_p): + Consider all loops in the nest when looking for + lambda_vector_zerop. + +2023-11-14 Richard Biener + + PR tree-optimization/112281 + * tree-loop-distribution.cc (pg_add_dependence_edges): + Preserve stmt order when the innermost loop has exact + overlap. + 2023-11-14 Jakub Jelinek PR target/112523 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index d08907ad1a72..697a5fceddd1 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20231114 +20231115 diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog index e5658700ae43..1947c8d1a928 100644 --- a/gcc/analyzer/ChangeLog +++ b/gcc/analyzer/ChangeLog @@ -1,3 +1,9 @@ +2023-11-14 David Malcolm + + PR analyzer/103533 + * sm-taint.cc: Remove "experimental" from comment. + * sm.cc (make_checkers): Always add taint state machine. + 2023-11-04 David Malcolm * bounds-checking.cc: Update for changes to diagnostic_context. diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 9a9f54a0eee9..5cd6b2a27dd9 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,32 @@ +2023-11-14 Lewis Hyatt + + PR pch/9471 + PR pch/47857 + * c-opts.cc (c_common_post_options): Set cpp_opts->main_search + so libcpp knows it is compiling a header file separately. + +2023-11-14 David Malcolm + + * c-warn.cc (conversion_warning): Update call to + global_dc->m_option_enabled to use option_enabled_p. + +2023-11-14 David Malcolm + + * c-common.cc (c_get_substring_location): Use global_dc's + file_cache. + * c-format.cc (get_corrected_substring): Likewise. + * c-indentation.cc (get_visual_column): Add file_cache param. + (get_first_nws_vis_column): Likewise. + (detect_intervening_unindent): Likewise. + (should_warn_for_misleading_indentation): Use global_dc's + file_cache. + (assert_get_visual_column_succeeds): Add file_cache param. + (ASSERT_GET_VISUAL_COLUMN_SUCCEEDS): Likewise. + (assert_get_visual_column_fails): Likewise. + (define ASSERT_GET_VISUAL_COLUMN_FAILS): Likewise. + (selftest::test_get_visual_column): Create and use a temporary + file_cache. + 2023-11-14 Jakub Jelinek PR c/111309 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 35810e410035..462f35aae738 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,25 @@ +2023-11-14 Nathaniel Shead + + PR c++/103499 + * module.cc (trees_out::decl_node): Write DECL_VINDEX for + virtual clones. + (trees_in::tree_node): Read DECL_VINDEX for virtual clones. + +2023-11-14 Nathaniel Shead + + PR c++/106849 + * name-lookup.cc (do_nonmember_using_decl): Handle + TEMPLATE_DECLs when checking module attachment. + +2023-11-14 David Malcolm + + * decl.cc (finish_function): Update call to + global_dc->m_option_enabled to use option_enabled_p. + +2023-11-14 David Malcolm + + * contracts.cc (build_comment): Use global_dc's file_cache. + 2023-11-14 Jonathan Wakely PR c++/111842 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index fae7521b0aae..490ab288685c 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,7 @@ +2023-11-14 David Malcolm + + * error.cc (gfc_diagnostics_init): Use diagnostic_start_span. + 2023-11-07 Joseph Myers * gfortran.h (gfc_real_info): Refer to C23 instead of C2X in diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5e42221221f2..f4d80909bc1d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,156 @@ +2023-11-14 Lewis Hyatt + + PR pch/9471 + PR pch/47857 + * g++.dg/pch/main-file-warnings.C: New test. + * g++.dg/pch/main-file-warnings.Hs: New test. + * gcc.dg/pch/main-file-warnings.c: New test. + * gcc.dg/pch/main-file-warnings.hs: New test. + +2023-11-14 David Malcolm + + PR analyzer/103533 + * c-c++-common/analyzer/attr-tainted_args-1.c: Remove use of + -fanalyzer-checker=taint. + * c-c++-common/analyzer/fread-1.c: Likewise. + * c-c++-common/analyzer/pr104029.c: Likewise. + * gcc.dg/analyzer/pr93032-mztools-signed-char.c: Add params to + work around state explosion. + * gcc.dg/analyzer/pr93032-mztools-unsigned-char.c: Likewise. + * gcc.dg/analyzer/pr93382.c: Remove use of + -fanalyzer-checker=taint. + * gcc.dg/analyzer/switch-enum-taint-1.c: Likewise. + * gcc.dg/analyzer/taint-CVE-2011-2210-1.c: Likewise. + * gcc.dg/analyzer/taint-CVE-2020-13143-1.c: Likewise. + * gcc.dg/analyzer/taint-CVE-2020-13143-2.c: Likewise. + * gcc.dg/analyzer/taint-CVE-2020-13143.h: Likewise. + * gcc.dg/analyzer/taint-alloc-1.c: Likewise. + * gcc.dg/analyzer/taint-alloc-2.c: Likewise. + * gcc.dg/analyzer/taint-alloc-3.c: Likewise. + * gcc.dg/analyzer/taint-alloc-4.c: Likewise. + * gcc.dg/analyzer/taint-alloc-5.c: Likewise. + * gcc.dg/analyzer/taint-assert-BUG_ON.c: Likewise. + * gcc.dg/analyzer/taint-assert-macro-expansion.c: Likewise. + * gcc.dg/analyzer/taint-assert-system-header.c: Likewise. + * gcc.dg/analyzer/taint-assert.c: Likewise. + * gcc.dg/analyzer/taint-divisor-1.c: Likewise. + * gcc.dg/analyzer/taint-divisor-2.c: Likewise. + * gcc.dg/analyzer/taint-merger.c: Likewise. + * gcc.dg/analyzer/taint-ops.c: Delete this test: it was a + duplicate of material in operations.c and data-model-1.c, with + -fanalyzer-checker=taint added. + * gcc.dg/analyzer/taint-read-index-1.c: Remove use of + -fanalyzer-checker=taint. + * gcc.dg/analyzer/taint-read-offset-1.c: Likewise. + * gcc.dg/analyzer/taint-realloc.c: Likewise. Add missing + dg-warning for leak now that the malloc state machine is also + active. + * gcc.dg/analyzer/taint-size-1.c: Remove use of + -fanalyzer-checker=taint. + * gcc.dg/analyzer/taint-size-access-attr-1.c: Likewise. + * gcc.dg/analyzer/taint-write-index-1.c: Likewise. + * gcc.dg/analyzer/taint-write-offset-1.c: Likewise. + * gcc.dg/analyzer/torture/taint-read-index-2.c: Likewise. + * gcc.dg/analyzer/torture/taint-read-index-3.c: Likewise. + * gcc.dg/plugin/taint-CVE-2011-0521-1-fixed.c: Likewise. Add + -Wno-pedantic. + * gcc.dg/plugin/taint-CVE-2011-0521-1.c: Likewise. + * gcc.dg/plugin/taint-CVE-2011-0521-2-fixed.c: Likewise. + * gcc.dg/plugin/taint-CVE-2011-0521-2.c: Likewise. + * gcc.dg/plugin/taint-CVE-2011-0521-3-fixed.c: Likewise. + * gcc.dg/plugin/taint-CVE-2011-0521-3.c: Likewise. Fix C++-style + comment. + * gcc.dg/plugin/taint-CVE-2011-0521-4.c: Remove use of + -fanalyzer-checker=taint and add -Wno-pedantic. Remove xfail and + add missing dg-warning. + * gcc.dg/plugin/taint-CVE-2011-0521-5-fixed.c: Remove use of + -fanalyzer-checker=taint and add -Wno-pedantic. + * gcc.dg/plugin/taint-CVE-2011-0521-5.c: Likewise. + * gcc.dg/plugin/taint-CVE-2011-0521-6.c: Likewise. + * gcc.dg/plugin/taint-antipatterns-1.c: : Remove use of + -fanalyzer-checker=taint. + +2023-11-14 Dimitar Dimitrov + + * gcc.dg/20020206-1.c: Prune warning that + -fprefetch-loop-arrays is not supported. + +2023-11-14 Nathaniel Shead + + PR c++/103499 + * g++.dg/modules/pr103499_a.C: New test. + * g++.dg/modules/pr103499_b.C: New test. + +2023-11-14 Nathaniel Shead + + PR c++/106849 + * g++.dg/modules/using-9.C: New test. + +2023-11-14 David Malcolm + + * gcc.dg/plugin/diagnostic_group_plugin.c: Use + diagnostic_start_span. + +2023-11-14 Uros Bizjak + + PR target/78904 + * gcc.target/i386/pr78904-7.c: New test. + * gcc.target/i386/pr78904-7a.c: New test. + * gcc.target/i386/pr78904-7b.c: New test. + +2023-11-14 Jakub Jelinek + + PR c++/110341 + * g++.dg/cpp26/literals1.C: New test. + * g++.dg/cpp26/literals2.C: New test. + * g++.dg/cpp23/wchar-multi1.C: Adjust expected diagnostic wordings. + * g++.dg/cpp23/wchar-multi2.C: Likewise. + * gcc.dg/c23-utf8char-3.c: Likewise. + * gcc.dg/cpp/charconst-4.c: Likewise. + * gcc.dg/cpp/charconst.c: Likewise. + * gcc.dg/cpp/if-2.c: Likewise. + * gcc.dg/utf16-4.c: Likewise. + * gcc.dg/utf32-4.c: Likewise. + * g++.dg/cpp1z/utf8-neg.C: Likewise. + * g++.dg/cpp2a/ucn2.C: Likewise. + * g++.dg/ext/utf16-4.C: Likewise. + * g++.dg/ext/utf32-4.C: Likewise. + +2023-11-14 David Malcolm + + * gcc.dg/plugin/diagnostic_plugin_test_show_locus.c: Use + global_dc's file cache. + * gcc.dg/plugin/expensive_selftests_plugin.c: Likewise. + +2023-11-14 Andrew MacLeod + + PR tree-optimization/112509 + * gcc.dg/pr112509.c: New. + +2023-11-14 Saurabh Jha + + PR target/112337 + * gcc.target/arm/mve/pr112337.c: Test for REG_P check for INC and DEC + operations. + +2023-11-14 Richard Biener + + PR tree-optimization/111233 + PR tree-optimization/111652 + PR tree-optimization/111727 + PR tree-optimization/111838 + PR tree-optimization/112113 + * gcc.dg/torture/pr111233.c: New testcase. + * gcc.dg/torture/pr111652.c: Likewise. + * gcc.dg/torture/pr111727.c: Likewise. + * gcc.dg/torture/pr111838.c: Likewise. + * gcc.dg/torture/pr112113.c: Likewise. + +2023-11-14 Richard Biener + + PR tree-optimization/112281 + * gcc.dg/torture/pr112281.c: New testcase. + 2023-11-14 Lehua Ding * gcc.target/i386/apx-spill_to_egprs-1.c: Make sure that no local diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 4c1a3d7245a2..5247b8091903 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,32 @@ +2023-11-14 Jakub Jelinek + + * makeucnid.cc (write_copyright): Update copyright year. + * makeuname2c.cc (write_copyright): Likewise. + (struct generated): Update latest Unicode version. + (generated_ranges): Add 2ebf0-2ee5d CJK UNIFIED IDEOGRAPH + range which was forgotten to be added to 4-8 table, but + clearly is expected to be there from the 15.1 additions. + * ucnid.h: Regenerated. + * uname2c.h: Regenerated. + * generated_cpp_wcwidth.h: Regenerated. + +2023-11-14 Jakub Jelinek + + PR c++/110341 + * charset.cc: Implement C++26 P1854R4 - Making non-encodable string + literals ill-formed. + (one_count_chars, convert_count_chars, count_source_chars): New + functions. + (narrow_str_to_charconst): Change last arg type from cpp_ttype to + const cpp_token *. For C++ if pedantic and i > 1 in CPP_CHAR + interpret token also as CPP_STRING32 and if number of characters + in the CPP_STRING32 is larger than number of bytes in CPP_CHAR, + pedwarn on it. Make the diagnostics more detailed. + (wide_str_to_charconst): Change last arg type from cpp_ttype to + const cpp_token *. Make the diagnostics more detailed. + (cpp_interpret_charconst): Adjust narrow_str_to_charconst and + wide_str_to_charconst callers. + 2023-11-14 Arsen Arsenović * config.in: Regenerate. diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index b5fd35d81f66..323daf937a81 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,41 @@ +2023-11-14 Cassio Neri + + * include/std/chrono (operator-(const weekday&, const weekday&)): + Optimize. + +2023-11-14 Cassio Neri + + * include/std/chrono (weekday::_S_from_days): Fix UB. + * testsuite/std/time/weekday/1.cc: Add test for overflow. + +2023-11-14 Cassio Neri + + * include/std/chrono (year::is_leap): Clear code. + +2023-11-14 Cassio Neri + + * include/std/chrono (year_month_day_last::day): Remove &1. + +2023-11-14 Jonathan Wakely + + * include/std/charconv (__from_chars_pow2_base): Convert base to + unsigned for call to __countr_zero. + (__from_chars_alnum): Likewise for call to __bit_width. + +2023-11-14 Jonathan Wakely + + PR libstdc++/112348 + * include/std/stacktrace (hash>): Fix + type of hash functio nfor entries. + * testsuite/19_diagnostics/stacktrace/hash.cc: New test. + +2023-11-14 Jonathan Wakely + + PR libstdc++/112491 + * python/libstdcxx/v6/xmethods.py (DequeWorkerBase.size): Fix + calculation to use _M_start._M_cur. + * testsuite/libstdc++-xmethods/deque.cc: Check failing cases. + 2023-11-13 Arsen Arsenović * configure: Regenerate. From 2220263f0e032a6af3cea44a17735833baa5fd93 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Tue, 14 Nov 2023 19:48:48 -0500 Subject: [PATCH 049/169] json.cc: use SELFTEST_LOCATION in selftests gcc/ChangeLog: * json.cc (selftest::assert_print_eq): Add "loc" param and use ASSERT_STREQ_AT. (ASSERT_PRINT_EQ): New macro. (selftest::test_writing_objects): Use ASSERT_PRINT_EQ to capture source location of assertion. (selftest::test_writing_arrays): Likewise. (selftest::test_writing_float_numbers): Likewise. (selftest::test_writing_integer_numbers): Likewise. (selftest::test_writing_strings): Likewise. (selftest::test_writing_literals): Likewise. Signed-off-by: David Malcolm --- gcc/json.cc | 51 +++++++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/gcc/json.cc b/gcc/json.cc index f5398ece066a..d0f157f0dfe7 100644 --- a/gcc/json.cc +++ b/gcc/json.cc @@ -322,13 +322,16 @@ namespace selftest { /* Verify that JV->print () prints EXPECTED_JSON. */ static void -assert_print_eq (const json::value &jv, const char *expected_json) +assert_print_eq (const location &loc, const json::value &jv, const char *expected_json) { pretty_printer pp; jv.print (&pp); - ASSERT_STREQ (expected_json, pp_formatted_text (&pp)); + ASSERT_STREQ_AT (loc, expected_json, pp_formatted_text (&pp)); } +#define ASSERT_PRINT_EQ(JV, EXPECTED_JSON) \ + assert_print_eq (SELFTEST_LOCATION, JV, EXPECTED_JSON) + /* Verify that object::get works as expected. */ static void @@ -351,7 +354,7 @@ test_writing_objects () obj.set_string ("baz", "quux"); /* This test relies on json::object writing out key/value pairs in key-insertion order. */ - assert_print_eq (obj, "{\"foo\": \"bar\", \"baz\": \"quux\"}"); + ASSERT_PRINT_EQ (obj, "{\"foo\": \"bar\", \"baz\": \"quux\"}"); } /* Verify that JSON arrays are written correctly. */ @@ -360,13 +363,13 @@ static void test_writing_arrays () { array arr; - assert_print_eq (arr, "[]"); + ASSERT_PRINT_EQ (arr, "[]"); arr.append (new json::string ("foo")); - assert_print_eq (arr, "[\"foo\"]"); + ASSERT_PRINT_EQ (arr, "[\"foo\"]"); arr.append (new json::string ("bar")); - assert_print_eq (arr, "[\"foo\", \"bar\"]"); + ASSERT_PRINT_EQ (arr, "[\"foo\", \"bar\"]"); } /* Verify that JSON numbers are written correctly. */ @@ -374,20 +377,20 @@ test_writing_arrays () static void test_writing_float_numbers () { - assert_print_eq (float_number (0), "0"); - assert_print_eq (float_number (42), "42"); - assert_print_eq (float_number (-100), "-100"); - assert_print_eq (float_number (123456789), "1.23457e+08"); + ASSERT_PRINT_EQ (float_number (0), "0"); + ASSERT_PRINT_EQ (float_number (42), "42"); + ASSERT_PRINT_EQ (float_number (-100), "-100"); + ASSERT_PRINT_EQ (float_number (123456789), "1.23457e+08"); } static void test_writing_integer_numbers () { - assert_print_eq (integer_number (0), "0"); - assert_print_eq (integer_number (42), "42"); - assert_print_eq (integer_number (-100), "-100"); - assert_print_eq (integer_number (123456789), "123456789"); - assert_print_eq (integer_number (-123456789), "-123456789"); + ASSERT_PRINT_EQ (integer_number (0), "0"); + ASSERT_PRINT_EQ (integer_number (42), "42"); + ASSERT_PRINT_EQ (integer_number (-100), "-100"); + ASSERT_PRINT_EQ (integer_number (123456789), "123456789"); + ASSERT_PRINT_EQ (integer_number (-123456789), "-123456789"); } /* Verify that JSON strings are written correctly. */ @@ -396,16 +399,16 @@ static void test_writing_strings () { string foo ("foo"); - assert_print_eq (foo, "\"foo\""); + ASSERT_PRINT_EQ (foo, "\"foo\""); string contains_quotes ("before \"quoted\" after"); - assert_print_eq (contains_quotes, "\"before \\\"quoted\\\" after\""); + ASSERT_PRINT_EQ (contains_quotes, "\"before \\\"quoted\\\" after\""); const char data[] = {'a', 'b', 'c', 'd', '\0', 'e', 'f'}; string not_terminated (data, 3); - assert_print_eq (not_terminated, "\"abc\""); + ASSERT_PRINT_EQ (not_terminated, "\"abc\""); string embedded_null (data, sizeof data); - assert_print_eq (embedded_null, "\"abcd\\0ef\""); + ASSERT_PRINT_EQ (embedded_null, "\"abcd\\0ef\""); } /* Verify that JSON literals are written correctly. */ @@ -413,12 +416,12 @@ test_writing_strings () static void test_writing_literals () { - assert_print_eq (literal (JSON_TRUE), "true"); - assert_print_eq (literal (JSON_FALSE), "false"); - assert_print_eq (literal (JSON_NULL), "null"); + ASSERT_PRINT_EQ (literal (JSON_TRUE), "true"); + ASSERT_PRINT_EQ (literal (JSON_FALSE), "false"); + ASSERT_PRINT_EQ (literal (JSON_NULL), "null"); - assert_print_eq (literal (true), "true"); - assert_print_eq (literal (false), "false"); + ASSERT_PRINT_EQ (literal (true), "true"); + ASSERT_PRINT_EQ (literal (false), "false"); } /* Run all of the selftests within this file. */ From a1ad62ee2fd070854d2137f35614af639c1a94f2 Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Tue, 14 Nov 2023 22:15:29 -0300 Subject: [PATCH 050/169] libstdc++: bvector: undef always_inline macro It's customary to undefine temporary internal macros at the end of the header that defines them, even such widely-usable ones as _GLIBCXX_ALWAYS_INLINE, so do so in the header where the define was recently introduced. for libstdc++-v3/ChangeLog * include/bits/stl_bvector.h (_GLIBCXX_ALWAYS_INLINE): Undef. --- libstdc++-v3/include/bits/stl_bvector.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libstdc++-v3/include/bits/stl_bvector.h b/libstdc++-v3/include/bits/stl_bvector.h index 64f04c1f4f59..8b97b61d96d1 100644 --- a/libstdc++-v3/include/bits/stl_bvector.h +++ b/libstdc++-v3/include/bits/stl_bvector.h @@ -1630,4 +1630,6 @@ _GLIBCXX_END_NAMESPACE_CONTAINER _GLIBCXX_END_NAMESPACE_VERSION } // namespace std +#undef _GLIBCXX_ALWAYS_INLINE + #endif From a9a0daa3e55733318c5ad25c7420da0417d5b650 Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Tue, 14 Nov 2023 22:15:32 -0300 Subject: [PATCH 051/169] testsuite: arg-pushing reqs -mno-accumulate-outgoing-args gcc.target/i386/pr95126-m32-[34].c expect push instructions that are only present with -mno-accumulate-outgoing-args, so make that option explicit rather than dependent on tuning. for gcc/testsuite/ChangeLog * gcc.target/i386/pr95126-m32-3.c: Add -mno-accumulate-outgoing-args. * gcc.target/i386/pr95126-m32-4.c: Likewise. --- gcc/testsuite/gcc.target/i386/pr95126-m32-3.c | 2 +- gcc/testsuite/gcc.target/i386/pr95126-m32-4.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/testsuite/gcc.target/i386/pr95126-m32-3.c b/gcc/testsuite/gcc.target/i386/pr95126-m32-3.c index cc2fe9480093..91608f86206d 100644 --- a/gcc/testsuite/gcc.target/i386/pr95126-m32-3.c +++ b/gcc/testsuite/gcc.target/i386/pr95126-m32-3.c @@ -1,5 +1,5 @@ /* { dg-do compile { target { ia32 } } } */ -/* { dg-options "-O2" } */ +/* { dg-options "-O2 -mno-accumulate-outgoing-args" } */ struct small{ short a; }; diff --git a/gcc/testsuite/gcc.target/i386/pr95126-m32-4.c b/gcc/testsuite/gcc.target/i386/pr95126-m32-4.c index e82933525450..85b30f69eca3 100644 --- a/gcc/testsuite/gcc.target/i386/pr95126-m32-4.c +++ b/gcc/testsuite/gcc.target/i386/pr95126-m32-4.c @@ -1,5 +1,5 @@ /* { dg-do compile { target { ia32 } } } */ -/* { dg-options "-O2" } */ +/* { dg-options "-O2 -mno-accumulate-outgoing-args" } */ struct small{ short a,b; }; From f5d94999ee6a7bd247c3d74959ebdd46334d7804 Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Tue, 14 Nov 2023 22:16:29 -0300 Subject: [PATCH 052/169] testsuite: tsan: add fallback overload for pthread_cond_clockwait LTS GNU/Linux distros from 2018, still in use, don't have pthread_cond_clockwait. There's no trivial way to detect it so as to make the test conditional, but there's an easy enough way to silence the fail due to lack of the function in libc, and that has nothing to do with the false positive that this is testing against. for gcc/testsuite/ChangeLog * g++.dg/tsan/pthread_cond_clockwait.C: Add fallback overload. --- gcc/testsuite/g++.dg/tsan/pthread_cond_clockwait.C | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/gcc/testsuite/g++.dg/tsan/pthread_cond_clockwait.C b/gcc/testsuite/g++.dg/tsan/pthread_cond_clockwait.C index 82d6a5c8329e..b43f3ebf80e2 100644 --- a/gcc/testsuite/g++.dg/tsan/pthread_cond_clockwait.C +++ b/gcc/testsuite/g++.dg/tsan/pthread_cond_clockwait.C @@ -4,6 +4,19 @@ #include +// This overloaded version should only be selected on targets that +// don't have a pthread_cond_clockwait in pthread.h, and it will wait +// indefinitely for the cond_signal that, in this testcase, ought to +// be delivered. +static inline int +pthread_cond_clockwait (pthread_cond_t *cv, + pthread_mutex_t *mtx, + __clockid_t, + void const /* struct timespec */ *) +{ + return pthread_cond_wait (cv, mtx); +} + pthread_cond_t cv; pthread_mutex_t mtx; From 081fddbbcf9790229f4fe885781548ba1f6a365a Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Wed, 15 Nov 2023 01:45:58 -0300 Subject: [PATCH 053/169] Revert "libstdc++: bvector: undef always_inline macro" This reverts commit a1ad62ee2fd070854d2137f35614af639c1a94f2. --- libstdc++-v3/include/bits/stl_bvector.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/libstdc++-v3/include/bits/stl_bvector.h b/libstdc++-v3/include/bits/stl_bvector.h index 8b97b61d96d1..64f04c1f4f59 100644 --- a/libstdc++-v3/include/bits/stl_bvector.h +++ b/libstdc++-v3/include/bits/stl_bvector.h @@ -1630,6 +1630,4 @@ _GLIBCXX_END_NAMESPACE_CONTAINER _GLIBCXX_END_NAMESPACE_VERSION } // namespace std -#undef _GLIBCXX_ALWAYS_INLINE - #endif From 5f580e24088b85be95aeae0ceb2edff0cea861dd Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 15 Nov 2023 08:27:07 +0100 Subject: [PATCH 054/169] c++: Implement C++26 P2864R2 - Remove Deprecated Arithmetic Conversion on Enumerations From C++26 The following patch implements C++26 P2864R2 by emitting pedwarn enabled by the same options as the C++20 and later warnings (i.e. -Wenum-compare, -Wdeprecated-enum-enum-conversion and -Wdeprecated-enum-float-conversion which are all enabled by default). I think we still want to allow users some option workaround, so am not using directly error. Additionally, for cxx_dialect >= cxx26 && (complain & tf_warning_or_error) == 0 it causes for these newly ill-formed constructs error_mark_node to be silently returned. 2023-11-15 Jakub Jelinek gcc/cp/ * typeck.cc: Implement C++26 P2864R2 - Remove Deprecated Arithmetic Conversion on Enumerations From C++26. (do_warn_enum_conversions): Return bool rather than void, add COMPLAIN argument. Use pedwarn rather than warning_at for C++26 and remove " is deprecated" part of the diagnostics in that case. For SFINAE in C++26 return true on newly erroneous cases. (cp_build_binary_op): For C++26 call do_warn_enum_conversions unconditionally, pass complain argument to it and if it returns true, return error_mark_node. * call.cc (build_conditional_expr): Use pedwarn rather than warning_at for C++26 and remove " is deprecated" part of the diagnostics in that case and check for complain & tf_warning_or_error. Use emit_diagnostic with cxx_dialect >= cxx26 ? DK_PEDWARN : DK_WARNING. For SFINAE in C++26 return error_mark_node on newly erroneous cases. (build_new_op): Use emit_diagnostic with cxx_dialect >= cxx26 ? DK_PEDWARN : DK_WARNING and complain & tf_warning_or_error check for C++26. For SFINAE in C++26 return error_mark_node on newly erroneous cases. gcc/testsuite/ * g++.dg/cpp26/enum-conv1.C: New test. * g++.dg/cpp2a/enum-conv1.C: Adjust expected diagnostics in C++26. * g++.dg/diagnostic/enum3.C: Likewise. * g++.dg/parse/attr3.C: Likewise. * g++.dg/cpp0x/linkage2.C: Likewise. --- gcc/cp/call.cc | 48 ++++++-- gcc/cp/typeck.cc | 89 ++++++++++----- gcc/testsuite/g++.dg/cpp0x/linkage2.C | 3 +- gcc/testsuite/g++.dg/cpp26/enum-conv1.C | 39 +++++++ gcc/testsuite/g++.dg/cpp2a/enum-conv1.C | 142 ++++++++++++++++-------- gcc/testsuite/g++.dg/diagnostic/enum3.C | 3 +- gcc/testsuite/g++.dg/parse/attr3.C | 3 +- 7 files changed, 237 insertions(+), 90 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp26/enum-conv1.C diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc index 86feff55dd1e..81b104f4b404 100644 --- a/gcc/cp/call.cc +++ b/gcc/cp/call.cc @@ -6163,19 +6163,36 @@ build_conditional_expr (const op_location_t &loc, == DECL_CONTEXT (stripped_orig_arg3))) /* Two enumerators from the same enumeration can have different types when the enumeration is still being defined. */; - else if (complain & tf_warning) - warning_at (loc, OPT_Wenum_compare, "enumerated mismatch " - "in conditional expression: %qT vs %qT", - arg2_type, arg3_type); + else if (complain & (cxx_dialect >= cxx26 + ? tf_warning_or_error : tf_warning)) + emit_diagnostic (cxx_dialect >= cxx26 ? DK_PEDWARN : DK_WARNING, + loc, OPT_Wenum_compare, "enumerated mismatch " + "in conditional expression: %qT vs %qT", + arg2_type, arg3_type); + else if (cxx_dialect >= cxx26) + return error_mark_node; } - else if ((complain & tf_warning) - && warn_deprecated_enum_float_conv + else if ((((complain & (cxx_dialect >= cxx26 + ? tf_warning_or_error : tf_warning)) + && warn_deprecated_enum_float_conv) + || (cxx_dialect >= cxx26 + && (complain & tf_warning_or_error) == 0)) && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE && SCALAR_FLOAT_TYPE_P (arg3_type)) || (SCALAR_FLOAT_TYPE_P (arg2_type) && TREE_CODE (arg3_type) == ENUMERAL_TYPE))) { - if (TREE_CODE (arg2_type) == ENUMERAL_TYPE) + if (cxx_dialect >= cxx26 && (complain & tf_warning_or_error) == 0) + return error_mark_node; + if (cxx_dialect >= cxx26 && TREE_CODE (arg2_type) == ENUMERAL_TYPE) + pedwarn (loc, OPT_Wdeprecated_enum_float_conversion, + "conditional expression between enumeration type " + "%qT and floating-point type %qT", arg2_type, arg3_type); + else if (cxx_dialect >= cxx26) + pedwarn (loc, OPT_Wdeprecated_enum_float_conversion, + "conditional expression between floating-point type " + "%qT and enumeration type %qT", arg2_type, arg3_type); + else if (TREE_CODE (arg2_type) == ENUMERAL_TYPE) warning_at (loc, OPT_Wdeprecated_enum_float_conversion, "conditional expression between enumeration type " "%qT and floating-point type %qT is deprecated", @@ -7258,11 +7275,18 @@ build_new_op (const op_location_t &loc, enum tree_code code, int flags, if (TREE_CODE (arg1_type) == ENUMERAL_TYPE && TREE_CODE (arg2_type) == ENUMERAL_TYPE && (TYPE_MAIN_VARIANT (arg1_type) - != TYPE_MAIN_VARIANT (arg2_type)) - && (complain & tf_warning)) - warning_at (loc, OPT_Wenum_compare, - "comparison between %q#T and %q#T", - arg1_type, arg2_type); + != TYPE_MAIN_VARIANT (arg2_type))) + { + if (cxx_dialect >= cxx26 + && (complain & tf_warning_or_error) == 0) + result = error_mark_node; + else if (cxx_dialect >= cxx26 || (complain & tf_warning)) + emit_diagnostic (cxx_dialect >= cxx26 + ? DK_PEDWARN : DK_WARNING, + loc, OPT_Wenum_compare, + "comparison between %q#T and %q#T", + arg1_type, arg2_type); + } break; default: break; diff --git a/gcc/cp/typeck.cc b/gcc/cp/typeck.cc index 49afbd8fb5ee..e995fb6ddd76 100644 --- a/gcc/cp/typeck.cc +++ b/gcc/cp/typeck.cc @@ -4940,16 +4940,25 @@ warn_for_null_address (location_t location, tree op, tsubst_flags_t complain) type, this behavior is deprecated ([depr.arith.conv.enum]). CODE is the code of the binary operation, TYPE0 and TYPE1 are the types of the operands, and LOC is the location for the whole binary expression. + For C++26 this is ill-formed rather than deprecated. + Return true for SFINAE errors. TODO: Consider combining this with -Wenum-compare in build_new_op_1. */ -static void +static bool do_warn_enum_conversions (location_t loc, enum tree_code code, tree type0, - tree type1) + tree type1, tsubst_flags_t complain) { if (TREE_CODE (type0) == ENUMERAL_TYPE && TREE_CODE (type1) == ENUMERAL_TYPE && TYPE_MAIN_VARIANT (type0) != TYPE_MAIN_VARIANT (type1)) { + if (cxx_dialect >= cxx26) + { + if ((complain & tf_warning_or_error) == 0) + return true; + } + else if ((complain & tf_warning) == 0) + return false; /* In C++20, -Wdeprecated-enum-enum-conversion is on by default. Otherwise, warn if -Wenum-conversion is on. */ enum opt_code opt; @@ -4958,7 +4967,7 @@ do_warn_enum_conversions (location_t loc, enum tree_code code, tree type0, else if (warn_enum_conversion) opt = OPT_Wenum_conversion; else - return; + return false; switch (code) { @@ -4969,21 +4978,29 @@ do_warn_enum_conversions (location_t loc, enum tree_code code, tree type0, case EQ_EXPR: case NE_EXPR: /* Comparisons are handled by -Wenum-compare. */ - return; + return false; case SPACESHIP_EXPR: /* This is invalid, don't warn. */ - return; + return false; case BIT_AND_EXPR: case BIT_IOR_EXPR: case BIT_XOR_EXPR: - warning_at (loc, opt, "bitwise operation between different " - "enumeration types %qT and %qT is deprecated", - type0, type1); - return; + if (cxx_dialect >= cxx26) + pedwarn (loc, opt, "bitwise operation between different " + "enumeration types %qT and %qT", type0, type1); + else + warning_at (loc, opt, "bitwise operation between different " + "enumeration types %qT and %qT is deprecated", + type0, type1); + return false; default: - warning_at (loc, opt, "arithmetic between different enumeration " - "types %qT and %qT is deprecated", type0, type1); - return; + if (cxx_dialect >= cxx26) + pedwarn (loc, opt, "arithmetic between different enumeration " + "types %qT and %qT", type0, type1); + else + warning_at (loc, opt, "arithmetic between different enumeration " + "types %qT and %qT is deprecated", type0, type1); + return false; } } else if ((TREE_CODE (type0) == ENUMERAL_TYPE @@ -4991,6 +5008,13 @@ do_warn_enum_conversions (location_t loc, enum tree_code code, tree type0, || (SCALAR_FLOAT_TYPE_P (type0) && TREE_CODE (type1) == ENUMERAL_TYPE)) { + if (cxx_dialect >= cxx26) + { + if ((complain & tf_warning_or_error) == 0) + return true; + } + else if ((complain & tf_warning) == 0) + return false; const bool enum_first_p = TREE_CODE (type0) == ENUMERAL_TYPE; /* In C++20, -Wdeprecated-enum-float-conversion is on by default. Otherwise, warn if -Wenum-conversion is on. */ @@ -5000,7 +5024,7 @@ do_warn_enum_conversions (location_t loc, enum tree_code code, tree type0, else if (warn_enum_conversion) opt = OPT_Wenum_conversion; else - return; + return false; switch (code) { @@ -5010,7 +5034,13 @@ do_warn_enum_conversions (location_t loc, enum tree_code code, tree type0, case LE_EXPR: case EQ_EXPR: case NE_EXPR: - if (enum_first_p) + if (enum_first_p && cxx_dialect >= cxx26) + pedwarn (loc, opt, "comparison of enumeration type %qT with " + "floating-point type %qT", type0, type1); + else if (cxx_dialect >= cxx26) + pedwarn (loc, opt, "comparison of floating-point type %qT " + "with enumeration type %qT", type0, type1); + else if (enum_first_p) warning_at (loc, opt, "comparison of enumeration type %qT with " "floating-point type %qT is deprecated", type0, type1); @@ -5018,12 +5048,18 @@ do_warn_enum_conversions (location_t loc, enum tree_code code, tree type0, warning_at (loc, opt, "comparison of floating-point type %qT " "with enumeration type %qT is deprecated", type0, type1); - return; + return false; case SPACESHIP_EXPR: /* This is invalid, don't warn. */ - return; + return false; default: - if (enum_first_p) + if (enum_first_p && cxx_dialect >= cxx26) + pedwarn (loc, opt, "arithmetic between enumeration type %qT " + "and floating-point type %qT", type0, type1); + else if (cxx_dialect >= cxx26) + pedwarn (loc, opt, "arithmetic between floating-point type %qT " + "and enumeration type %qT", type0, type1); + else if (enum_first_p) warning_at (loc, opt, "arithmetic between enumeration type %qT " "and floating-point type %qT is deprecated", type0, type1); @@ -5031,9 +5067,10 @@ do_warn_enum_conversions (location_t loc, enum tree_code code, tree type0, warning_at (loc, opt, "arithmetic between floating-point type %qT " "and enumeration type %qT is deprecated", type0, type1); - return; + return false; } } + return false; } /* Build a binary-operation expression without default conversions. @@ -6163,15 +6200,13 @@ cp_build_binary_op (const op_location_t &location, return error_mark_node; } if (complain & tf_warning) - { - do_warn_double_promotion (result_type, type0, type1, - "implicit conversion from %qH to %qI " - "to match other operand of binary " - "expression", - location); - do_warn_enum_conversions (location, code, TREE_TYPE (orig_op0), - TREE_TYPE (orig_op1)); - } + do_warn_double_promotion (result_type, type0, type1, + "implicit conversion from %qH to %qI " + "to match other operand of binary " + "expression", location); + if (do_warn_enum_conversions (location, code, TREE_TYPE (orig_op0), + TREE_TYPE (orig_op1), complain)) + return error_mark_node; } if (may_need_excess_precision && (orig_type0 != type0 || orig_type1 != type1) diff --git a/gcc/testsuite/g++.dg/cpp0x/linkage2.C b/gcc/testsuite/g++.dg/cpp0x/linkage2.C index 549bd825aabd..34a36c45a586 100644 --- a/gcc/testsuite/g++.dg/cpp0x/linkage2.C +++ b/gcc/testsuite/g++.dg/cpp0x/linkage2.C @@ -29,5 +29,6 @@ void f() { ba.g(a); // OK ba.h(a); // error, B::h never defined i(ba, a); // OK - e1+e2+e3; // { dg-warning "arithmetic between different enumeration types" "" { target c++20 } } + e1+e2+e3; // { dg-warning "arithmetic between different enumeration types" "" { target { c++20 && c++23_down } } } + // { dg-error "arithmetic between different enumeration types" "" { target c++26 } .-1 } } diff --git a/gcc/testsuite/g++.dg/cpp26/enum-conv1.C b/gcc/testsuite/g++.dg/cpp26/enum-conv1.C new file mode 100644 index 000000000000..57714355349b --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/enum-conv1.C @@ -0,0 +1,39 @@ +// P2864R2 - Remove Deprecated Arithmetic Conversion on Enumerations From C++26 +// { dg-do compile { target c++20 } } + +enum A { a }; +enum B { b }; + +template decltype (true ? X : Y) f1 () { throw 1; } +// { dg-error "enumerated mismatch in conditional expression: 'A' vs 'B'" "" { target c++26 } .-1 } +// { dg-error "conditional expression between enumeration type 'A' and floating-point type 'double'" "" { target c++26 } .-2 } +// { dg-error "conditional expression between floating-point type 'double' and enumeration type 'A'" "" { target c++26 } .-3 } +template decltype (X + Y) f2 () { throw 1; } +// { dg-error "arithmetic between different enumeration types 'A' and 'B'" "" { target c++26 } .-1 } +// { dg-error "arithmetic between enumeration type 'A' and floating-point type 'double'" "" { target c++26 } .-2 } +// { dg-error "arithmetic between floating-point type 'double' and enumeration type 'A'" "" { target c++26 } .-3 } +template decltype (X | Y) f3 () { throw 1; } +// { dg-error "bitwise operation between different enumeration types 'A' and 'B'" "" { target c++26 } .-1 } +template decltype (X < Y) f4 () { throw 1; } +// { dg-error "comparison between 'enum A' and 'enum B'" "" { target c++26 } .-1 } +// { dg-error "comparison of enumeration type 'A' with floating-point type 'double'" "" { target c++26 } .-2 } +// { dg-error "comparison of floating-point type 'double' with enumeration type 'A'" "" { target c++26 } .-3 } + +int +main () +{ + f1 (); + f2 (); + f3 (); + f4 (); + f1 (); // { dg-error "no matching function for call to" "" { target c++26 } } + f2 (); // { dg-error "no matching function for call to" "" { target c++26 } } + f3 (); // { dg-error "no matching function for call to" "" { target c++26 } } + f4 (); // { dg-error "no matching function for call to" "" { target c++26 } } + f1 (); // { dg-error "no matching function for call to" "" { target c++26 } } + f2 (); // { dg-error "no matching function for call to" "" { target c++26 } } + f4 (); // { dg-error "no matching function for call to" "" { target c++26 } } + f1<0.0, a> (); // { dg-error "no matching function for call to" "" { target c++26 } } + f2<0.0, a> (); // { dg-error "no matching function for call to" "" { target c++26 } } + f4<0.0, a> (); // { dg-error "no matching function for call to" "" { target c++26 } } +} diff --git a/gcc/testsuite/g++.dg/cpp2a/enum-conv1.C b/gcc/testsuite/g++.dg/cpp2a/enum-conv1.C index 4571b5e89688..b59794d2bb8d 100644 --- a/gcc/testsuite/g++.dg/cpp2a/enum-conv1.C +++ b/gcc/testsuite/g++.dg/cpp2a/enum-conv1.C @@ -14,11 +14,16 @@ void conv () { bool b1 = e == e1; - bool b2 = e == f; // { dg-warning "comparison between .enum E1. and .enum E2." } - bool b3 = e == 0.0; // { dg-warning "comparison of enumeration type .E1. with floating-point type .double." "" { target c++20 } } - bool b4 = 0.0 == f; // { dg-warning "comparison of floating-point type .double. with enumeration type .E2." "" { target c++20 } } - int n1 = true ? e : f; // { dg-warning "enumerated mismatch" } - int n2 = true ? e : 0.0; // { dg-warning "conditional expression between" "" { target c++20 } } + bool b2 = e == f; // { dg-warning "comparison between .enum E1. and .enum E2." "" { target c++23_down } } + // { dg-error "comparison between .enum E1. and .enum E2." "" { target c++26 } .-1 } + bool b3 = e == 0.0; // { dg-warning "comparison of enumeration type .E1. with floating-point type .double." "" { target { c++20 && c++23_down } } } + // { dg-error "comparison of enumeration type .E1. with floating-point type .double." "" { target c++26 } .-1 } + bool b4 = 0.0 == f; // { dg-warning "comparison of floating-point type .double. with enumeration type .E2." "" { target { c++20 && c++23_down } } } + // { dg-error "comparison of floating-point type .double. with enumeration type .E2." "" { target c++26 } .-1 } + int n1 = true ? e : f; // { dg-warning "enumerated mismatch" "" { target c++23_down } } + // { dg-error "enumerated mismatch" "" { target c++26 } .-1 } + int n2 = true ? e : 0.0; // { dg-warning "conditional expression between" "" { target { c++20 && c++23_down } } } + // { dg-error "conditional expression between" "" { target c++26 } .-1 } } int @@ -29,42 +34,60 @@ enum_enum (bool b) r += e - e; r += e - e1; - r += e - f; // { dg-warning "arithmetic between different enumeration types .E1. and .E2." "" { target c++20 } } - r += f - e; // { dg-warning "arithmetic between different enumeration types .E2. and .E1." "" { target c++20 } } - + r += e - f; // { dg-warning "arithmetic between different enumeration types .E1. and .E2." "" { target { c++20 && c++23_down } } } + // { dg-error "arithmetic between different enumeration types .E1. and .E2." "" { target c++26 } .-1 } + r += f - e; // { dg-warning "arithmetic between different enumeration types .E2. and .E1." "" { target { c++20 && c++23_down } } } + // { dg-error "arithmetic between different enumeration types .E2. and .E1." "" { target c++26 } .-1 } r += f + f; - r += f + e; // { dg-warning "arithmetic between different enumeration types .E2. and .E1." "" { target c++20 } } - r += e + f; // { dg-warning "arithmetic between different enumeration types .E1. and .E2." "" { target c++20 } } + r += f + e; // { dg-warning "arithmetic between different enumeration types .E2. and .E1." "" { target { c++20 && c++23_down } } } + // { dg-error "arithmetic between different enumeration types .E2. and .E1." "" { target c++26 } .-1 } + r += e + f; // { dg-warning "arithmetic between different enumeration types .E1. and .E2." "" { target { c++20 && c++23_down } } } + // { dg-error "arithmetic between different enumeration types .E1. and .E2." "" { target c++26 } .-1 } - r += e1 - e2; // { dg-warning "arithmetic between different enumeration types .E1. and .E2." "" { target c++20 } } + r += e1 - e2; // { dg-warning "arithmetic between different enumeration types .E1. and .E2." "" { target { c++20 && c++23_down } } } + // { dg-error "arithmetic between different enumeration types .E1. and .E2." "" { target c++26 } .-1 } r += e1 - e1c; r += e1c - e1; - r += e * f; // { dg-warning "arithmetic between different enumeration types .E1. and .E2." "" { target c++20 } } - r += f * e; // { dg-warning "arithmetic between different enumeration types .E2. and .E1." "" { target c++20 } } + r += e * f; // { dg-warning "arithmetic between different enumeration types .E1. and .E2." "" { target { c++20 && c++23_down } } } + // { dg-error "arithmetic between different enumeration types .E1. and .E2." "" { target c++26 } .-1 } + r += f * e; // { dg-warning "arithmetic between different enumeration types .E2. and .E1." "" { target { c++20 && c++23_down } } } + // { dg-error "arithmetic between different enumeration types .E2. and .E1." "" { target c++26 } .-1 } r += e * e; r += e1 < e1c; r += e < e1; - r += e1 < e2; // { dg-warning "comparison between .enum E1. and .enum E2." } - r += e < f; // { dg-warning "comparison between .enum E1. and .enum E2." } - r += f < e; // { dg-warning "comparison between .enum E2. and .enum E1." } + r += e1 < e2; // { dg-warning "comparison between .enum E1. and .enum E2." "" { target c++23_down } } + // { dg-error "comparison between .enum E1. and .enum E2." "" { target c++26 } .-1 } + r += e < f; // { dg-warning "comparison between .enum E1. and .enum E2." "" { target c++23_down } } + // { dg-error "comparison between .enum E1. and .enum E2." "" { target c++26 } .-1 } + r += f < e; // { dg-warning "comparison between .enum E2. and .enum E1." "" { target c++23_down } } + // { dg-error "comparison between .enum E2. and .enum E1." "" { target c++26 } .-1 } r += e1 == e1c; r += e == e1; - r += e == f; // { dg-warning "comparison between .enum E1. and .enum E2." } - r += f == e; // { dg-warning "comparison between .enum E2. and .enum E1." } - r += e1 == e2; // { dg-warning "comparison between .enum E1. and .enum E2." } - r += e2 == e1; // { dg-warning "comparison between .enum E2. and .enum E1." } + r += e == f; // { dg-warning "comparison between .enum E1. and .enum E2." "" { target c++23_down } } + // { dg-error "comparison between .enum E1. and .enum E2." "" { target c++26 } .-1 } + r += f == e; // { dg-warning "comparison between .enum E2. and .enum E1." "" { target c++23_down } } + // { dg-error "comparison between .enum E2. and .enum E1." "" { target c++26 } .-1 } + r += e1 == e2; // { dg-warning "comparison between .enum E1. and .enum E2." "" { target c++23_down } } + // { dg-error "comparison between .enum E1. and .enum E2." "" { target c++26 } .-1 } + r += e2 == e1; // { dg-warning "comparison between .enum E2. and .enum E1." "" { target c++23_down } } + // { dg-error "comparison between .enum E2. and .enum E1." "" { target c++26 } .-1 } r += b ? e1 : e1c; r += b ? e1 : e; - r += b ? f : e; // { dg-warning "enumerated mismatch in conditional expression: .E2. vs .E1." } - r += b ? e1 : e2; // { dg-warning "enumerated mismatch in conditional expression: .E1. vs .E2." } + r += b ? f : e; // { dg-warning "enumerated mismatch in conditional expression: .E2. vs .E1." "" { target c++23_down } } + // { dg-error "enumerated mismatch in conditional expression: .E2. vs .E1." "" { target c++26 } .-1 } + r += b ? e1 : e2; // { dg-warning "enumerated mismatch in conditional expression: .E1. vs .E2." "" { target c++23_down } } + // { dg-error "enumerated mismatch in conditional expression: .E1. vs .E2." "" { target c++26 } .-1 } - r += e | f; // { dg-warning "bitwise operation between different enumeration types .E1. and .E2." "" { target c++20 } } - r += e ^ f; // { dg-warning "bitwise operation between different enumeration types .E1. and .E2." "" { target c++20 } } - r += e & f; // { dg-warning "bitwise operation between different enumeration types .E1. and .E2." "" { target c++20 } } + r += e | f; // { dg-warning "bitwise operation between different enumeration types .E1. and .E2." "" { target { c++20 && c++23_down } } } + // { dg-error "bitwise operation between different enumeration types .E1. and .E2." "" { target c++26 } .-1 } + r += e ^ f; // { dg-warning "bitwise operation between different enumeration types .E1. and .E2." "" { target { c++20 && c++23_down } } } + // { dg-error "bitwise operation between different enumeration types .E1. and .E2." "" { target c++26 } .-1 } + r += e & f; // { dg-warning "bitwise operation between different enumeration types .E1. and .E2." "" { target { c++20 && c++23_down } } } + // { dg-error "bitwise operation between different enumeration types .E1. and .E2." "" { target c++26 } .-1 } r += !e; r += e1 | e; @@ -76,10 +99,14 @@ enum_enum (bool b) // Anonymous enum. r += u1 - u1; - r += u1 + u2; // { dg-warning "arithmetic between different enumeration types" "" { target c++20 } } - r += u1 * u2; // { dg-warning "arithmetic between different enumeration types" "" { target c++20 } } - r += u1 == u2; // { dg-warning "comparison between" } - r += u1 & u2; // { dg-warning "bitwise operation between different enumeration types" "" { target c++20 } } + r += u1 + u2; // { dg-warning "arithmetic between different enumeration types" "" { target { c++20 && c++23_down } } } + // { dg-error "arithmetic between different enumeration types" "" { target c++26 } .-1 } + r += u1 * u2; // { dg-warning "arithmetic between different enumeration types" "" { target { c++20 && c++23_down } } } + // { dg-error "arithmetic between different enumeration types" "" { target c++26 } .-1 } + r += u1 == u2; // { dg-warning "comparison between" "" { target c++23_down } } + // { dg-error "comparison between" "" { target c++26 } .-1 } + r += u1 & u2; // { dg-warning "bitwise operation between different enumeration types" "" { target { c++20 && c++23_down } } } + // { dg-error "bitwise operation between different enumeration types" "" { target c++26 } .-1 } return r; } @@ -89,28 +116,47 @@ enum_float (bool b) { double r = 0.0; - r += e1 - d; // { dg-warning "arithmetic between enumeration type .E1. and floating-point type .double." "" { target c++20 } } - r += d - e1; // { dg-warning "arithmetic between floating-point type .double. and enumeration type .E1." "" { target c++20 } } - r += e1 + d; // { dg-warning "arithmetic between enumeration type .E1. and floating-point type .double." "" { target c++20 } } - r += d + e1; // { dg-warning "arithmetic between floating-point type .double. and enumeration type .E1." "" { target c++20 } } - r += e1 * d; // { dg-warning "arithmetic between enumeration type .E1. and floating-point type .double." "" { target c++20 } } - r += d * e1; // { dg-warning "arithmetic between floating-point type .double. and enumeration type .E1." "" { target c++20 } } - r += u1 * d; // { dg-warning "arithmetic between enumeration type" "" { target c++20 } } - r += d * u1; // { dg-warning "arithmetic between floating-point type" "" { target c++20 } } + r += e1 - d; // { dg-warning "arithmetic between enumeration type .E1. and floating-point type .double." "" { target { c++20 && c++23_down } } } + // { dg-error "arithmetic between enumeration type .E1. and floating-point type .double." "" { target c++26 } .-1 } + r += d - e1; // { dg-warning "arithmetic between floating-point type .double. and enumeration type .E1." "" { target { c++20 && c++23_down } } } + // { dg-error "arithmetic between floating-point type .double. and enumeration type .E1." "" { target c++26 } .-1 } + r += e1 + d; // { dg-warning "arithmetic between enumeration type .E1. and floating-point type .double." "" { target { c++20 && c++23_down } } } + // { dg-error "arithmetic between enumeration type .E1. and floating-point type .double." "" { target c++26 } .-1 } + r += d + e1; // { dg-warning "arithmetic between floating-point type .double. and enumeration type .E1." "" { target { c++20 && c++23_down } } } + // { dg-error "arithmetic between floating-point type .double. and enumeration type .E1." "" { target c++26 } .-1 } + r += e1 * d; // { dg-warning "arithmetic between enumeration type .E1. and floating-point type .double." "" { target { c++20 && c++23_down } } } + // { dg-error "arithmetic between enumeration type .E1. and floating-point type .double." "" { target c++26 } .-1 } + r += d * e1; // { dg-warning "arithmetic between floating-point type .double. and enumeration type .E1." "" { target { c++20 && c++23_down } } } + // { dg-error "arithmetic between floating-point type .double. and enumeration type .E1." "" { target c++26 } .-1 } + r += u1 * d; // { dg-warning "arithmetic between enumeration type" "" { target { c++20 && c++23_down } } } + // { dg-error "arithmetic between enumeration type" "" { target c++26 } .-1 } + r += d * u1; // { dg-warning "arithmetic between floating-point type" "" { target { c++20 && c++23_down } } } + // { dg-error "arithmetic between floating-point type" "" { target c++26 } .-1 } - r += e1 < d; // { dg-warning "comparison of enumeration type .E1. with floating-point type .double." "" { target c++20 } } - r += d < e1; // { dg-warning "comparison of floating-point type .double. with enumeration type .E1." "" { target c++20 } } - r += d == e1; // { dg-warning "comparison of floating-point type .double. with enumeration type .E1." "" { target c++20 } } - r += e1 == d; // { dg-warning "comparison of enumeration type .E1. with floating-point type .double." "" { target c++20 } } - r += u1 == d; // { dg-warning "comparison of enumeration type" "" { target c++20 } } - r += d == u1; // { dg-warning "comparison of floating-point type" "" { target c++20 } } + r += e1 < d; // { dg-warning "comparison of enumeration type .E1. with floating-point type .double." "" { target { c++20 && c++23_down } } } + // { dg-error "comparison of enumeration type .E1. with floating-point type .double." "" { target c++26 } .-1 } + r += d < e1; // { dg-warning "comparison of floating-point type .double. with enumeration type .E1." "" { target { c++20 && c++23_down } } } + // { dg-error "comparison of floating-point type .double. with enumeration type .E1." "" { target c++26 } .-1 } + r += d == e1; // { dg-warning "comparison of floating-point type .double. with enumeration type .E1." "" { target { c++20 && c++23_down } } } + // { dg-error "comparison of floating-point type .double. with enumeration type .E1." "" { target c++26 } .-1 } + r += e1 == d; // { dg-warning "comparison of enumeration type .E1. with floating-point type .double." "" { target { c++20 && c++23_down } } } + // { dg-error "comparison of enumeration type .E1. with floating-point type .double." "" { target c++26 } .-1 } + r += u1 == d; // { dg-warning "comparison of enumeration type" "" { target { c++20 && c++23_down } } } + // { dg-error "comparison of enumeration type" "" { target c++26 } .-1 } + r += d == u1; // { dg-warning "comparison of floating-point type" "" { target { c++20 && c++23_down } } } + // { dg-error "comparison of floating-point type" "" { target c++26 } .-1 } - r += b ? e1 : d; // { dg-warning "conditional expression between enumeration type .E1. and floating-point type .double." "" { target c++20 } } - r += b ? d : e1; // { dg-warning "conditional expression between floating-point type .double. and enumeration type .E1." "" { target c++20 } } - r += b ? d : u1; // { dg-warning "conditional expression between" "" { target c++20 } } - r += b ? u1 : d; // { dg-warning "conditional expression between" "" { target c++20 } } + r += b ? e1 : d; // { dg-warning "conditional expression between enumeration type .E1. and floating-point type .double." "" { target { c++20 && c++23_down } } } + // { dg-error "conditional expression between enumeration type .E1. and floating-point type .double." "" { target c++26 } .-1 } + r += b ? d : e1; // { dg-warning "conditional expression between floating-point type .double. and enumeration type .E1." "" { target { c++20 && c++23_down } } } + // { dg-error "conditional expression between floating-point type .double. and enumeration type .E1." "" { target c++26 } .-1 } + r += b ? d : u1; // { dg-warning "conditional expression between" "" { target { c++20 && c++23_down } } } + // { dg-error "conditional expression between" "" { target c++26 } .-1 } + r += b ? u1 : d; // { dg-warning "conditional expression between" "" { target { c++20 && c++23_down } } } + // { dg-error "conditional expression between" "" { target c++26 } .-1 } - d += e1; // { dg-warning "arithmetic between floating-point type .double. and enumeration type .E1." "" { target c++20 } } + d += e1; // { dg-warning "arithmetic between floating-point type .double. and enumeration type .E1." "" { target { c++20 && c++23_down } } } + // { dg-error "arithmetic between floating-point type .double. and enumeration type .E1." "" { target c++26 } .-1 } d = e1; return r; diff --git a/gcc/testsuite/g++.dg/diagnostic/enum3.C b/gcc/testsuite/g++.dg/diagnostic/enum3.C index d51aa8a0f70e..acddb5361cf0 100644 --- a/gcc/testsuite/g++.dg/diagnostic/enum3.C +++ b/gcc/testsuite/g++.dg/diagnostic/enum3.C @@ -5,5 +5,6 @@ enum e1 { e1val }; enum e2 { e3val }; int main( int, char * [] ) { - if ( e1val == e3val ) return 1; // { dg-warning -Wenum-compare } + if ( e1val == e3val ) return 1; // { dg-warning "comparison between 'enum e1' and 'enum e2'" "" { target c++23_down } } + // { dg-error "comparison between 'enum e1' and 'enum e2'" "" { target c++26 } .-1 } } diff --git a/gcc/testsuite/g++.dg/parse/attr3.C b/gcc/testsuite/g++.dg/parse/attr3.C index de0959880158..7362905645be 100644 --- a/gcc/testsuite/g++.dg/parse/attr3.C +++ b/gcc/testsuite/g++.dg/parse/attr3.C @@ -10,5 +10,6 @@ int main () { S::F y; // { dg-warning "'F' is deprecated" } y = S::f; - return x + y; // { dg-warning "arithmetic between different enumeration types" "" { target c++20 } } + return x + y; // { dg-warning "arithmetic between different enumeration types" "" { target { c++20 && c++23_down } } } + // { dg-error "arithmetic between different enumeration types" "" { target c++26 } .-1 } } From d85161a73b9bdd382e62ca1ba3f9f962971a9695 Mon Sep 17 00:00:00 2001 From: Juzhe-Zhong Date: Wed, 15 Nov 2023 15:15:08 +0800 Subject: [PATCH 055/169] RISC-V: Disallow RVV mode address for any load/store[PR112535] This patch is quite obvious patch which disallow for load/store address register with RVV mode. PR target/112535 gcc/ChangeLog: * config/riscv/riscv.cc (riscv_legitimate_address_p): Disallow RVV modes base address. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/pr112535.c: New test. --- gcc/config/riscv/riscv.cc | 4 ++++ .../gcc.target/riscv/rvv/autovec/pr112535.c | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112535.c diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index ecee7eb4727c..e919850fc6cb 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -1427,6 +1427,10 @@ static bool riscv_legitimate_address_p (machine_mode mode, rtx x, bool strict_p, code_helper = ERROR_MARK) { + /* Disallow RVV modes base address. + E.g. (mem:SI (subreg:DI (reg:V1DI 155) 0). */ + if (SUBREG_P (x) && riscv_v_ext_mode_p (GET_MODE (SUBREG_REG (x)))) + return false; struct riscv_address_info addr; return riscv_classify_address (&addr, x, mode, strict_p); diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112535.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112535.c new file mode 100644 index 000000000000..95799aab8d21 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112535.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */ + +int *a, *f; +char b, c; +int ***d; +static int ****e = &d; +void g() { + c = 3; + for (; c; c--) + if (c < 8) { + f = 0; + ***e = a; + } + if (b) + ***d = 0; +} From 319bbb3693787a5493cc46793804231d1670cdee Mon Sep 17 00:00:00 2001 From: Pan Li Date: Wed, 15 Nov 2023 11:30:51 +0800 Subject: [PATCH 056/169] RISC-V: Refine the mask generation for vec_init case 2 Update in v2: 1. Add more test cases for fixed-vlmax. 2, Add test cases for vls mode. Original log: We take vec_init element int mode when generate the mask for case 2. But actually we don't need as many bits as the element. The extra bigger mode may introduce some unnecessary insns. For example as below code: typedef int64_t v16di __attribute__ ((vector_size (16 * 8))); void __attribute__ ((noinline, noclone)) foo (int64_t *out, int64_t x, int64_t y) { v16di v = {y, x, y, x, y, x, y, x, y, x, y, x, y, x, y, x}; *(v16di *) out = v; } We will have VDImode when generate the 0b0101010101010101 mask but actually VHImode is good enough here. This patch would like to refine the mask generation to avoid: 1. Unnecessary scalar to generate big constant mask. 2. Unnecessary vector insn to v0 mask. Before this patch: foo: li a5,-1431654400 li a4,-1431654400 <== unnecessary insn addi a5,a5,-1365 <== unnecessary insn addi a4,a4,-1366 slli a5,a5,32 <== unnecessary insn add a5,a5,a4 <== unnecessary insn vsetivli zero,16,e64,m8,ta,ma vmv.v.x v8,a2 vmv.s.x v16,a5 vmv1r.v v0,v16 <== unnecessary insn vmerge.vxm v8,v8,a1,v0 vse64.v v8,0(a0) ret After this patch: foo: li a5,-20480 addiw a5,a5,-1366 vsetivli zero,16,e64,m8,ta,ma vmv.s.x v0,a5 vmv.v.x v8,a2 vmerge.vxm v8,v8,a1,v0 vs8r.v v8,0(a0) ret gcc/ChangeLog: * config/riscv/riscv-v.cc (rvv_builder::get_merge_scalar_mask): Add inner_mode mask arg for mask int mode. (get_repeating_sequence_dup_machine_mode): Add mask_bit_mode arg to get the good enough vector int mode on precision. (expand_vector_init_merge_repeating_sequence): Pass required args to above func. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-10.c: New test. * gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-11.c: New test. * gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-12.c: New test. * gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-13.c: New test. * gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-14.c: New test. * gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-15.c: New test. * gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-6.c: New test. * gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-7.c: New test. * gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-8.c: New test. * gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-9.c: New test. * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-0.c: New test. * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-1.c: New test. * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-2.c: New test. * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-3.c: New test. * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-4.c: New test. * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-5.c: New test. * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-6.c: New test. * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-7.c: New test. * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-8.c: New test. Signed-off-by: Pan Li --- gcc/config/riscv/riscv-v.cc | 54 +- .../vls-vlmax/init-repeat-sequence-10.c | 28 + .../vls-vlmax/init-repeat-sequence-11.c | 26 + .../vls-vlmax/init-repeat-sequence-12.c | 279 ++++++++ .../vls-vlmax/init-repeat-sequence-13.c | 57 ++ .../vls-vlmax/init-repeat-sequence-14.c | 87 +++ .../vls-vlmax/init-repeat-sequence-15.c | 151 ++++ .../vls-vlmax/init-repeat-sequence-6.c | 27 + .../vls-vlmax/init-repeat-sequence-7.c | 25 + .../vls-vlmax/init-repeat-sequence-8.c | 27 + .../vls-vlmax/init-repeat-sequence-9.c | 25 + .../rvv/autovec/vls/init-repeat-sequence-0.c | 654 ++++++++++++++++++ .../rvv/autovec/vls/init-repeat-sequence-1.c | 654 ++++++++++++++++++ .../rvv/autovec/vls/init-repeat-sequence-2.c | 337 +++++++++ .../rvv/autovec/vls/init-repeat-sequence-3.c | 337 +++++++++ .../rvv/autovec/vls/init-repeat-sequence-4.c | 178 +++++ .../rvv/autovec/vls/init-repeat-sequence-5.c | 178 +++++ .../rvv/autovec/vls/init-repeat-sequence-6.c | 55 ++ .../rvv/autovec/vls/init-repeat-sequence-7.c | 337 +++++++++ .../rvv/autovec/vls/init-repeat-sequence-8.c | 178 +++++ 20 files changed, 3682 insertions(+), 12 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-10.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-11.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-12.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-13.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-14.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-15.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-6.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-7.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-8.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-9.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-0.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-2.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-3.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-4.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-5.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-6.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-7.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-8.c diff --git a/gcc/config/riscv/riscv-v.cc b/gcc/config/riscv/riscv-v.cc index 265a298f447c..ffb645eccf3c 100644 --- a/gcc/config/riscv/riscv-v.cc +++ b/gcc/config/riscv/riscv-v.cc @@ -416,7 +416,7 @@ public: bool repeating_sequence_use_merge_profitable_p (); bool combine_sequence_use_slideup_profitable_p (); bool combine_sequence_use_merge_profitable_p (); - rtx get_merge_scalar_mask (unsigned int) const; + rtx get_merge_scalar_mask (unsigned int, machine_mode) const; bool single_step_npatterns_p () const; bool npatterns_all_equal_p () const; @@ -592,7 +592,8 @@ rvv_builder::get_merged_repeating_sequence () To merge "b", the mask should be 0101.... */ rtx -rvv_builder::get_merge_scalar_mask (unsigned int index_in_pattern) const +rvv_builder::get_merge_scalar_mask (unsigned int index_in_pattern, + machine_mode inner_mode) const { unsigned HOST_WIDE_INT mask = 0; unsigned HOST_WIDE_INT base_mask = (1ULL << index_in_pattern); @@ -611,7 +612,7 @@ rvv_builder::get_merge_scalar_mask (unsigned int index_in_pattern) const for (int i = 0; i < limit; i++) mask |= base_mask << (i * npatterns ()); - return gen_int_mode (mask, inner_int_mode ()); + return gen_int_mode (mask, inner_mode); } /* Return true if the variable-length vector is single step. @@ -919,17 +920,45 @@ emit_vlmax_decompress_insn (rtx target, rtx op0, rtx op1, rtx mask) /* Emit merge instruction. */ static machine_mode -get_repeating_sequence_dup_machine_mode (const rvv_builder &builder) +get_repeating_sequence_dup_machine_mode (const rvv_builder &builder, + machine_mode mask_bit_mode) { - poly_uint64 dup_nunits = GET_MODE_NUNITS (builder.mode ()); + unsigned mask_precision = GET_MODE_PRECISION (mask_bit_mode).to_constant (); + unsigned mask_scalar_size = mask_precision > builder.inner_bits_size () + ? builder.inner_bits_size () : mask_precision; - if (known_ge (GET_MODE_SIZE (builder.mode ()), BYTES_PER_RISCV_VECTOR)) + scalar_mode inner_mode; + unsigned minimal_bits_size; + + switch (mask_scalar_size) { - dup_nunits = exact_div (BYTES_PER_RISCV_VECTOR, - builder.inner_bytes_size ()); + case 8: + inner_mode = QImode; + minimal_bits_size = TARGET_MIN_VLEN / 8; /* AKA RVVMF8. */ + break; + case 16: + inner_mode = HImode; + minimal_bits_size = TARGET_MIN_VLEN / 4; /* AKA RVVMF4. */ + break; + case 32: + inner_mode = SImode; + minimal_bits_size = TARGET_MIN_VLEN / 2; /* AKA RVVMF2. */ + break; + case 64: + inner_mode = DImode; + minimal_bits_size = TARGET_MIN_VLEN / 1; /* AKA RVVM1. */ + break; + default: + gcc_unreachable (); + break; } - return get_vector_mode (builder.inner_int_mode (), dup_nunits).require (); + gcc_assert (mask_precision % mask_scalar_size == 0); + + uint64_t dup_nunit = mask_precision > mask_scalar_size + ? mask_precision / mask_scalar_size : minimal_bits_size / mask_scalar_size; + + return get_vector_mode (inner_mode, dup_nunit).require (); } /* Expand series const vector. */ @@ -2130,9 +2159,9 @@ expand_vector_init_merge_repeating_sequence (rtx target, since we don't have such instruction in RVV. Instead, we should use INT mode (QI/HI/SI/DI) with integer move instruction to generate the mask data we want. */ - machine_mode mask_int_mode - = get_repeating_sequence_dup_machine_mode (builder); machine_mode mask_bit_mode = get_mask_mode (builder.mode ()); + machine_mode mask_int_mode + = get_repeating_sequence_dup_machine_mode (builder, mask_bit_mode); uint64_t full_nelts = builder.full_nelts ().to_constant (); /* Step 1: Broadcast the first pattern. */ @@ -2143,7 +2172,8 @@ expand_vector_init_merge_repeating_sequence (rtx target, for (unsigned int i = 1; i < builder.npatterns (); i++) { /* Step 2-1: Generate mask register v0 for each merge. */ - rtx merge_mask = builder.get_merge_scalar_mask (i); + rtx merge_mask + = builder.get_merge_scalar_mask (i, GET_MODE_INNER (mask_int_mode)); rtx mask = gen_reg_rtx (mask_bit_mode); rtx dup = gen_reg_rtx (mask_int_mode); diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-10.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-10.c new file mode 100644 index 000000000000..ccce5052dc2e --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-10.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=rv64gcv_zvl1024b -mabi=lp64d -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include + +typedef int64_t vnx32di __attribute__ ((vector_size (32 * 8))); + +/* +** f_vnx32di: +** vsetvli\s+[axt][0-9]+,\s*zero,\s*e64,\s*m2,\s*ta,\s*ma +** ... +** vmv\.v\.x\s+v[0-9]+,\s*[axt][0-9]+ +** ... +** vmv\.s\.x\s+v0,\s*[axt][0-9]+ +** vmerge\.vxm\s+v[0-9]+,\s*v[0-9]+,\s*[axt][0-9]+,\s*v0 +** vs2r\.v\s+v[0-9]+,\s*0\([axt][0-9]+\) +** ret +*/ +__attribute__ ((noipa)) void +f_vnx32di (int64_t a, int64_t b, int64_t *out) +{ + vnx32di v = { + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + }; + *(vnx32di *) out = v; +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-11.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-11.c new file mode 100644 index 000000000000..a62eee8a5ae5 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-11.c @@ -0,0 +1,26 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=rv64gcv_zvl1024b -mabi=lp64d -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +typedef double vnx32df __attribute__ ((vector_size (32 * 8))); + +/* +** f_vnx32df: +** vsetvli\s+[axt][0-9]+\s*,zero,\s*e64,\s*m2,\s*ta,\s*ma +** ... +** vfmv\.v\.f\s+v[0-9]+,\s*[af]+[0-9]+ +** ... +** vmv\.s\.x\s+v0,\s*[axt][0-9]+ +** vfmerge\.vfm\s+v[0-9]+,\s*v[0-9]+,\s*[af]+[0-9]+,\s*v0 +** vs2r\.v\s+v[0-9]+,\s*0\([axt][0-9]+\) +** ret +*/ +__attribute__ ((noipa)) void +f_vnx32df (double a, double b, double *out) +{ + vnx32df v = { + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + }; + *(vnx32df *) out = v; +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-12.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-12.c new file mode 100644 index 000000000000..92cf29985d51 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-12.c @@ -0,0 +1,279 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=rv64gcv_zvl4096b -mabi=lp64d -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include + +typedef int8_t vnx4096qi __attribute__ ((vector_size (4096))); + +/* +** f_vnx4096qi: +** ... +** vsetvli\s+[axt][0-9]+,\s*zero,\s*e16,\s*m8,\s*ta,\s*ma +** vmv\.v\.x\s+v[0-9]+,\s*[axt][0-9]+ +** vs8r\.v\s+v[0-9]+,\s*0\([axt][0-9]+\) +** ret +*/ +__attribute__ ((noipa)) void +f_vnx4096qi (int8_t a, int8_t b, int8_t *out) +{ + vnx4096qi v = { + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + }; + *(vnx4096qi *) out = v; +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-13.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-13.c new file mode 100644 index 000000000000..e3ec3a106f7b --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-13.c @@ -0,0 +1,57 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=rv64gcv_zvl4096b -mabi=lp64d -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include + +typedef int64_t vnx512di __attribute__ ((vector_size (512 * 8))); + +/* +** f_vnx512di: +** ... +** vsetivli\s+zero,\s*8,\s*e64,\s*m1,\s*ta,\s*ma +** vmv\.v\.x\s+v0,[atx][0-9]+ +** vsetvli\s+[atx][0-9]+,\s*zero,\s*e64,\s*m8,\s*ta,\s*ma +** vmerge\.vxm\s+v[0-9]+,\s*v[0-9]+,\s*[axt][0-9]+,\s*v0 +** vs8r\.v\s+v[0-9]+,\s*0\([axt][0-9]+\) +** ret +*/ +__attribute__ ((noipa)) void +f_vnx512di (int64_t a, int64_t b, int64_t *out) +{ + vnx512di v = { + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + }; + *(vnx512di *) out = v; +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-14.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-14.c new file mode 100644 index 000000000000..23a4ea68b34b --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-14.c @@ -0,0 +1,87 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=rv64gcv_zvl4096b -mabi=lp64d -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include + +typedef int32_t vnx1024si __attribute__ ((vector_size (1024 * 4))); + +/* +** f_vnx1024si: +** ... +** vsetvli\s+[atx][0-9]+,\s*zero,\s*e64,\s*m8,\s*ta,\s*ma +** vmv\.v\.x\s+v[0-9]+,\s*[axt][0-9]+ +** vs8r\.v\s+v[0-9]+,\s*0\([axt][0-9]+\) +** ret +*/ +__attribute__ ((noipa)) void +f_vnx1024si (int32_t a, int32_t b, int32_t *out) +{ + vnx1024si v = { + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + }; + *(vnx1024si *) out = v; +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-15.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-15.c new file mode 100644 index 000000000000..37c08a1c328e --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-15.c @@ -0,0 +1,151 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=rv64gcv_zvl4096b -mabi=lp64d -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include + +typedef int16_t vnx2048hi __attribute__ ((vector_size (2048 * 2))); + +/* +** f_vnx2048hi: +** ... +** vsetvli\s+[atx][0-9]+,\s*zero,\s*e32,\s*m8,\s*ta,\s*ma +** vmv\.v\.x\s+v[0-9]+,\s*[axt][0-9]+ +** vs8r\.v\s+v[0-9]+,\s*0\([axt][0-9]+\) +** ret +*/ +__attribute__ ((noipa)) void +f_vnx2048hi (int16_t a, int16_t b, int16_t *out) +{ + vnx2048hi v = { + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + }; + *(vnx2048hi *) out = v; +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-6.c new file mode 100644 index 000000000000..4f8a78b31619 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-6.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=rv64gcv -mabi=lp64d -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include + +typedef int64_t vnx16di __attribute__ ((vector_size (16 * 8))); + +/* +** f_vnx16di: +** vsetivli\s+zero,\s*16,\s*e64,\s*m8,\s*ta,\s*ma +** ... +** vmv\.v\.x\s+v[0-9]+,\s*[axt][0-9]+ +** ... +** vmv\.s\.x\s+v0,\s*[axt][0-9]+ +** vmerge\.vxm\s+v[0-9]+,\s*v[0-9]+,\s*[axt][0-9]+,\s*v0 +** vs8r\.v\s+v[0-9]+,\s*0\([axt][0-9]+\) +** ret +*/ +__attribute__ ((noipa)) void +f_vnx16di (int64_t a, int64_t b, int64_t *out) +{ + vnx16di v = { + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + }; + *(vnx16di *) out = v; +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-7.c new file mode 100644 index 000000000000..f0d14db8fa83 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-7.c @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=rv64gcv -mabi=lp64d -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +typedef double vnx16df __attribute__ ((vector_size (16 * 8))); + +/* +** f_vnx16df: +** vsetivli\s+zero,\s*16,\s*e64,\s*m8,\s*ta,\s*ma +** ... +** vfmv\.v\.f\s+v[0-9]+,\s*[af]+[0-9]+ +** ... +** vmv\.s\.x\s+v0,\s*[axt][0-9]+ +** vfmerge\.vfm\s+v[0-9]+,\s*v[0-9]+,\s*[af]+[0-9]+,\s*v0 +** vs8r\.v\s+v[0-9]+,\s*0\([axt][0-9]+\) +** ret +*/ +__attribute__ ((noipa)) void +f_vnx16df (double a, double b, double *out) +{ + vnx16df v = { + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + }; + *(vnx16df *) out = v; +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-8.c new file mode 100644 index 000000000000..fd986e6b6495 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-8.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=rv64gcv_zvl1024b -mabi=lp64d -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include + +typedef int64_t vnx16di __attribute__ ((vector_size (16 * 8))); + +/* +** f_vnx16di: +** vsetivli\s+zero,\s*16,\s*e64,\s*m1,\s*ta,\s*ma +** ... +** vmv\.v\.x\s+v[0-9]+,\s*[axt][0-9]+ +** ... +** vmv\.s\.x\s+v0,\s*[axt][0-9]+ +** vmerge\.vxm\s+v[0-9]+,\s*v[0-9]+,\s*[axt][0-9]+,\s*v0 +** vs1r\.v\s+v[0-9]+,\s*0\([axt][0-9]+\) +** ret +*/ +__attribute__ ((noipa)) void +f_vnx16di (int64_t a, int64_t b, int64_t *out) +{ + vnx16di v = { + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + }; + *(vnx16di *) out = v; +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-9.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-9.c new file mode 100644 index 000000000000..753221ffdbf5 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-9.c @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=rv64gcv_zvl1024b -mabi=lp64d -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +typedef double vnx16df __attribute__ ((vector_size (16 * 8))); + +/* +** f_vnx16df: +** vsetivli\s+zero,\s*16,\s*e64,\s*m1,\s*ta,\s*ma +** ... +** vfmv\.v\.f\s+v[0-9]+,\s*[af]+[0-9]+ +** ... +** vmv\.s\.x\s+v0,\s*[axt][0-9]+ +** vfmerge\.vfm\s+v[0-9]+,\s*v[0-9]+,\s*[af]+[0-9]+,\s*v0 +** vs1r\.v\s+v[0-9]+,\s*0\([axt][0-9]+\) +** ret +*/ +__attribute__ ((noipa)) void +f_vnx16df (double a, double b, double *out) +{ + vnx16df v = { + a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b, + }; + *(vnx16df *) out = v; +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-0.c new file mode 100644 index 000000000000..9bb21d7ab18d --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-0.c @@ -0,0 +1,654 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ + +#include "def.h" + +DEF_REPEAT (v4qi, int8_t, 4, var0, var1, var0, var1) +DEF_REPEAT (v8qi, int8_t, 8, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT (v16qi, int8_t, 16, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT (v32qi, int8_t, 32, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1) +DEF_REPEAT (v64qi, int8_t, 64, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1) +DEF_REPEAT (v128qi, int8_t, 128, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v256qi, int8_t, 256, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v512qi, int8_t, 512, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v1024qi, int8_t, 1024, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1) +DEF_REPEAT ( + v2048qi, int8_t, 2048, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v4096qi, int8_t, 4096, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1) + +/* { dg-final { scan-assembler-times {vmv\.v\.x} 11 } } */ +/* { dg-final { scan-assembler-not {vmv1r\.v\s+v0,\s*v[0-9]+} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-1.c new file mode 100644 index 000000000000..e5934ac382cb --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-1.c @@ -0,0 +1,654 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ + +#include "def.h" + +DEF_REPEAT (v4uqi, uint8_t, 4, var0, var1, var0, var1) +DEF_REPEAT (v8uqi, uint8_t, 8, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT (v16uqi, uint8_t, 16, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT (v32uqi, uint8_t, 32, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1) +DEF_REPEAT (v64uqi, uint8_t, 64, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1) +DEF_REPEAT (v128uqi, uint8_t, 128, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v256uqi, uint8_t, 256, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v512uqi, uint8_t, 512, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v1024uqi, uint8_t, 1024, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1) +DEF_REPEAT ( + v2048uqi, uint8_t, 2048, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v4096uqi, uint8_t, 4096, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1) + +/* { dg-final { scan-assembler-times {vmv\.v\.x} 11 } } */ +/* { dg-final { scan-assembler-not {vmv1r\.v\s+v0,\s*v[0-9]+} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-2.c new file mode 100644 index 000000000000..7b30e2b5c755 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-2.c @@ -0,0 +1,337 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ + +#include "def.h" + +DEF_REPEAT (v4hi, int16_t, 4, var0, var1, var0, var1) +DEF_REPEAT (v8hi, int16_t, 8, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT (v16hi, int16_t, 16, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT (v32hi, int16_t, 32, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1) +DEF_REPEAT (v64hi, int16_t, 64, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1) +DEF_REPEAT (v128hi, int16_t, 128, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v256hi, int16_t, 256, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v512hi, int16_t, 512, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v1024hi, int16_t, 1024, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1) +DEF_REPEAT ( + v2048hi, int16_t, 2048, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) + +/* { dg-final { scan-assembler-times {vmv\.v\.x} 10 } } */ +/* { dg-final { scan-assembler-not {vmv1r\.v\s+v0,\s*v[0-9]+} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-3.c new file mode 100644 index 000000000000..d3efc9aca3d0 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-3.c @@ -0,0 +1,337 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ + +#include "def.h" + +DEF_REPEAT (v4uhi, uint16_t, 4, var0, var1, var0, var1) +DEF_REPEAT (v8uhi, uint16_t, 8, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT (v16uhi, uint16_t, 16, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT (v32uhi, uint16_t, 32, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1) +DEF_REPEAT (v64uhi, uint16_t, 64, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1) +DEF_REPEAT (v128uhi, uint16_t, 128, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v256uhi, uint16_t, 256, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v512uhi, uint16_t, 512, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v1024uhi, uint16_t, 1024, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1) +DEF_REPEAT ( + v2048uhi, uint16_t, 2048, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) + +/* { dg-final { scan-assembler-times {vmv\.v\.x} 10 } } */ +/* { dg-final { scan-assembler-not {vmv1r\.v\s+v0,\s*v[0-9]+} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-4.c new file mode 100644 index 000000000000..a9d1e87965e8 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-4.c @@ -0,0 +1,178 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ + +#include "def.h" + +DEF_REPEAT (v4si, int32_t, 4, var0, var1, var0, var1) +DEF_REPEAT (v8si, int32_t, 8, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT (v16si, int32_t, 16, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT (v32si, int32_t, 32, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1) +DEF_REPEAT (v64si, int32_t, 64, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1) +DEF_REPEAT (v128si, int32_t, 128, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v256si, int32_t, 256, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v512si, int32_t, 512, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v1024si, int32_t, 1024, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1) + +/* { dg-final { scan-assembler-times {vmv\.v\.x} 9 } } */ +/* { dg-final { scan-assembler-not {vmv1r\.v\s+v0,\s*v[0-9]+} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-5.c new file mode 100644 index 000000000000..b528c8036b91 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-5.c @@ -0,0 +1,178 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ + +#include "def.h" + +DEF_REPEAT (v4usi, uint32_t, 4, var0, var1, var0, var1) +DEF_REPEAT (v8usi, uint32_t, 8, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT (v16usi, uint32_t, 16, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT (v32usi, uint32_t, 32, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1) +DEF_REPEAT (v64usi, uint32_t, 64, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1) +DEF_REPEAT (v128usi, uint32_t, 128, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v256usi, uint32_t, 256, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v512usi, uint32_t, 512, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v1024usi, uint32_t, 1024, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1) + +/* { dg-final { scan-assembler-times {vmv\.v\.x} 9 } } */ +/* { dg-final { scan-assembler-not {vmv1r\.v\s+v0,\s*v[0-9]+} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-6.c new file mode 100644 index 000000000000..5c36d86e0cf1 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-6.c @@ -0,0 +1,55 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ + +#include "def.h" + +DEF_REPEAT (v16di, int64_t, 16, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT (v32di, int64_t, 32, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1) +DEF_REPEAT (v64di, int64_t, 64, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1) +DEF_REPEAT (v128di, int64_t, 128, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v256di, int64_t, 256, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) + +/* { dg-final { scan-assembler-times {vmv\.v\.x\s+v0,\s*[atx][0-9]+} 2 } } */ +/* { dg-final { scan-assembler-times {vmv\.s\.x\s+v0,\s*[atx][0-9]+} 3 } } */ +/* { dg-final { scan-assembler-not {vmv1r\.v\s+v0,\s*v[0-9]+} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-7.c new file mode 100644 index 000000000000..1087b60ab293 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-7.c @@ -0,0 +1,337 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ + +#include "def.h" + +DEF_REPEAT (v4hf, _Float16, 4, var0, var1, var0, var1) +DEF_REPEAT (v8hf, _Float16, 8, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT (v16hf, _Float16, 16, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT (v32hf, _Float16, 32, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1) +DEF_REPEAT (v64hf, _Float16, 64, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1) +DEF_REPEAT (v128hf, _Float16, 128, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v256hf, _Float16, 256, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v512hf, _Float16, 512, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v1024hf, _Float16, 1024, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1) +DEF_REPEAT ( + v2048hf, _Float16, 2048, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) + +/* { dg-final { scan-assembler-times {vmv\.v\.x} 10 } } */ +/* { dg-final { scan-assembler-not {vmv1r\.v\s+v0,\s*v[0-9]+} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-8.c new file mode 100644 index 000000000000..f0d40dfa7004 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-8.c @@ -0,0 +1,178 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ + +#include "def.h" + +DEF_REPEAT (v4sf, float, 4, var0, var1, var0, var1) +DEF_REPEAT (v8sf, float, 8, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT (v16sf, float, 16, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT (v32sf, float, 32, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1) +DEF_REPEAT (v64sf, float, 64, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1) +DEF_REPEAT (v128sf, float, 128, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v256sf, float, 256, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v512sf, float, 512, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1) +DEF_REPEAT ( + v1024sf, float, 1024, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, + var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, var1, var0, + var1) + +/* { dg-final { scan-assembler-times {vmv\.v\.x} 9 } } */ +/* { dg-final { scan-assembler-not {vmv1r\.v\s+v0,\s*v[0-9]+} } } */ From da36a438d8e7f31c75f1085e3a525cb1b7d5f256 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 15 Nov 2023 08:55:16 +0100 Subject: [PATCH 057/169] testsuite: Adjust gcc.dg/cpp/if-2.c for 16-bit targets Jeff reported this testcase newly FAILs on 16-bit targets, the following patch adjusts the expected diagnostics for that case. 2023-11-15 Jakub Jelinek * gcc.dg/cpp/if-2.c: Adjust expected diagnostics for 16-bit targets. --- gcc/testsuite/gcc.dg/cpp/if-2.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/testsuite/gcc.dg/cpp/if-2.c b/gcc/testsuite/gcc.dg/cpp/if-2.c index e969aa0b473b..2a3272dcd92e 100644 --- a/gcc/testsuite/gcc.dg/cpp/if-2.c +++ b/gcc/testsuite/gcc.dg/cpp/if-2.c @@ -17,8 +17,8 @@ #error 0x1234 /* { dg-bogus "error" "wide charconst recognition 3" } */ #endif -/* The 'character constant (is )?too long' message is produced by 16-bit targets. */ -#if 'abcd' /* { dg-warning "(multi-character character constant)|(character constant (is )?too long)" "multi-character charconst" } */ +/* The 'multi-character literal with 4 characters exceeds 'int' size of \[0-9]+ bytes' message is produced by 16-bit targets. */ +#if 'abcd' /* { dg-warning "(multi-character character constant)|(multi-character literal with 4 characters exceeds 'int' size of \[0-9]+ bytes)" "multi-character charconst" } */ #endif #if 'abcdefghi' /* { dg-warning "multi-character literal with \[0-9]+ characters exceeds 'int' size of \[0-9]+ bytes" } */ From e9fc877f6d4b89940dbfb9f18549b82720d0d992 Mon Sep 17 00:00:00 2001 From: Juzhe-Zhong Date: Tue, 14 Nov 2023 19:38:03 +0800 Subject: [PATCH 058/169] RISC-V: Support trailing vec_init optimization Add optimization when trailing elements > leading elements. Consider this following case: #include typedef int64_t v16di __attribute__ ((vector_size (128))); __attribute__ ((noipa)) void f_v16di (int64_t a, int64_t b, int64_t c, int64_t d, int64_t *out) { v16di v = {a, b, c, d, d, d, d, d, d, d, d, d, d, d, d, d}; *(v16di *) out = v; } https://godbolt.org/z/vWTjbrWGf Before this patch: f_v16di: vsetivli zero,16,e64,m8,ta,ma vmv.v.x v8,a0 vslide1down.vx v8,v8,a1 vslide1down.vx v8,v8,a2 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vse64.v v8,0(a4) ret After this patch: f_v16di: vsetivli zero,16,e64,m8,ta,ma vmv.v.x v16,a3 vslide1up.vx v8,v16,a2 vslide1up.vx v16,v8,a1 vslide1up.vx v8,v16,a0 vse64.v v8,0(a4) ret gcc/ChangeLog: * config/riscv/riscv-v.cc (expand_vector_init_trailing_same_elem): New function. (expand_vec_init): Add trailing optimization. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/vls/def.h: Add trailing tests. * gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-1.c: New test. * gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-2.c: New test. * gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-1.c: New test. * gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-2.c: New test. * gcc.target/riscv/rvv/autovec/vls/trailing-1.c: New test. * gcc.target/riscv/rvv/autovec/vls/trailing-2.c: New test. * gcc.target/riscv/rvv/autovec/vls/trailing-3.c: New test. * gcc.target/riscv/rvv/autovec/vls/trailing-4.c: New test. * gcc.target/riscv/rvv/autovec/vls/trailing-5.c: New test. * gcc.target/riscv/rvv/autovec/vls/trailing-6.c: New test. * gcc.target/riscv/rvv/autovec/vls/trailing-7.c: New test. --- gcc/config/riscv/riscv-v.cc | 52 +- .../riscv/rvv/autovec/vls-vlmax/trailing-1.c | 15 + .../riscv/rvv/autovec/vls-vlmax/trailing-2.c | 15 + .../rvv/autovec/vls-vlmax/trailing_run-1.c | 42 ++ .../rvv/autovec/vls-vlmax/trailing_run-2.c | 42 ++ .../gcc.target/riscv/rvv/autovec/vls/def.h | 8 + .../riscv/rvv/autovec/vls/trailing-1.c | 652 ++++++++++++++++++ .../riscv/rvv/autovec/vls/trailing-2.c | 335 +++++++++ .../riscv/rvv/autovec/vls/trailing-3.c | 176 +++++ .../riscv/rvv/autovec/vls/trailing-4.c | 96 +++ .../riscv/rvv/autovec/vls/trailing-5.c | 335 +++++++++ .../riscv/rvv/autovec/vls/trailing-6.c | 176 +++++ .../riscv/rvv/autovec/vls/trailing-7.c | 96 +++ 13 files changed, 2036 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-2.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-2.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-2.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-3.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-4.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-5.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-6.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-7.c diff --git a/gcc/config/riscv/riscv-v.cc b/gcc/config/riscv/riscv-v.cc index ffb645eccf3c..c718b5046181 100644 --- a/gcc/config/riscv/riscv-v.cc +++ b/gcc/config/riscv/riscv-v.cc @@ -2268,6 +2268,47 @@ expand_vector_init_merge_combine_sequence (rtx target, emit_vlmax_insn (icode, MERGE_OP, merge_ops); } +/* Subroutine of expand_vec_init to handle case + when all trailing elements of builder are same. + This works as follows: + (a) Use expand_insn interface to broadcast last vector element in TARGET. + (b) Insert remaining elements in TARGET using insr. + + ??? The heuristic used is to do above if number of same trailing elements + is greater than leading_ndups, loosely based on + heuristic from mostly_zeros_p. May need fine-tuning. */ + +static bool +expand_vector_init_trailing_same_elem (rtx target, + const rtx_vector_builder &builder, + int nelts_reqd) +{ + int leading_ndups = builder.count_dups (0, nelts_reqd - 1, 1); + int trailing_ndups = builder.count_dups (nelts_reqd - 1, -1, -1); + machine_mode mode = GET_MODE (target); + + if (trailing_ndups > leading_ndups) + { + rtx dup = expand_vector_broadcast (mode, builder.elt (nelts_reqd - 1)); + for (int i = nelts_reqd - trailing_ndups - 1; i >= 0; i--) + { + unsigned int unspec + = FLOAT_MODE_P (mode) ? UNSPEC_VFSLIDE1UP : UNSPEC_VSLIDE1UP; + insn_code icode = code_for_pred_slide (unspec, mode); + rtx tmp = gen_reg_rtx (mode); + rtx ops[] = {tmp, dup, builder.elt (i)}; + emit_vlmax_insn (icode, BINARY_OP, ops); + /* slide1up need source and dest to be different REG. */ + dup = tmp; + } + + emit_move_insn (target, dup); + return true; + } + + return false; +} + /* Initialize register TARGET from the elements in PARALLEL rtx VALS. */ void @@ -2335,10 +2376,13 @@ expand_vec_init (rtx target, rtx vals) } } - /* Handle common situation by vslide1down. This function can handle any - situation of vec_init. Only the cases that are not optimized above - will fall through here. */ - expand_vector_init_insert_elems (target, v, nelts); + /* Optimize trailing same elements sequence: + v = {y, y2, y3, y4, y5, x, x, x, x, x, x, x, x, x, x, x}; */ + if (!expand_vector_init_trailing_same_elem (target, v, nelts)) + /* Handle common situation by vslide1down. This function can handle any + situation of vec_init. Only the cases that are not optimized above + will fall through here. */ + expand_vector_init_insert_elems (target, v, nelts); } /* Get insn code for corresponding comparison. */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-1.c new file mode 100644 index 000000000000..b48252a5dc59 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-1.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=rv64gcv -mabi=lp64d --param=riscv-autovec-lmul=m8 --param=riscv-autovec-preference=fixed-vlmax" } */ + +#include + +typedef int64_t v16di __attribute__ ((vector_size (128))); + +__attribute__ ((noipa)) void +f_v16di (int64_t a, int64_t b, int64_t c, int64_t d, int64_t *out) +{ + v16di v = {a, b, c, d, d, d, d, d, d, d, d, d, d, d, d, d}; + *(v16di *) out = v; +} + +/* { dg-final { scan-assembler-times {vslide1up\.vx\tv[0-9]+,\s*v[0-9]+,\s*[a-x0-9]+} 3 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-2.c new file mode 100644 index 000000000000..46d2777d7576 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-2.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=rv64gcv -mabi=lp64d --param=riscv-autovec-lmul=m8 --param=riscv-autovec-preference=fixed-vlmax" } */ + +#include + +typedef double v16df __attribute__ ((vector_size (128))); + +__attribute__ ((noipa)) void +f_v16df (double a, double b, double c, double d, double *out) +{ + v16df v = {a, b, c, d, d, d, d, d, d, d, d, d, d, d, d, d}; + *(v16df *) out = v; +} + +/* { dg-final { scan-assembler-times {vfslide1up\.vf\tv[0-9]+,\s*v[0-9]+,\s*[a-x0-9]+} 3 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-1.c new file mode 100644 index 000000000000..469c30d42d1a --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-1.c @@ -0,0 +1,42 @@ +/* { dg-do run { target { riscv_v } } } */ +/* { dg-options "--param riscv-autovec-preference=fixed-vlmax -O3 --param=riscv-autovec-lmul=m8" } */ + +#include "trailing-1.c" + +int +main () +{ + int64_t a = -1789089; + int64_t b = 8916156; + int64_t c = -7789; + int64_t d = 9156; + + int64_t v_v16di[sizeof (v16di) / sizeof (int64_t)]; + f_v16di (a, b, c, d, v_v16di); + + for (int i = 0; i < sizeof (v16di) / sizeof (int64_t); i++) + { + if (i == 0) + { + if (v_v16di[i] != a) + __builtin_abort (); + } + else if (i == 1) + { + if (v_v16di[i] != b) + __builtin_abort (); + } + else if (i == 2) + { + if (v_v16di[i] != c) + __builtin_abort (); + } + else + { + if (v_v16di[i] != d) + __builtin_abort (); + } + } + + return 0; +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-2.c new file mode 100644 index 000000000000..cbb0b1524598 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-2.c @@ -0,0 +1,42 @@ +/* { dg-do run { target { riscv_v } } } */ +/* { dg-options "--param riscv-autovec-preference=fixed-vlmax -O3 --param=riscv-autovec-lmul=m8" } */ + +#include "trailing-2.c" + +int +main () +{ + double a = -1789089.4324; + double b = 8916156.82343; + double c = -7789.3423; + double d = 9156.955; + + double v_v16df[sizeof (v16df) / sizeof (double)]; + f_v16df (a, b, c, d, v_v16df); + + for (int i = 0; i < sizeof (v16df) / sizeof (double); i++) + { + if (i == 0) + { + if (v_v16df[i] != a) + __builtin_abort (); + } + else if (i == 1) + { + if (v_v16df[i] != b) + __builtin_abort (); + } + else if (i == 2) + { + if (v_v16df[i] != c) + __builtin_abort (); + } + else + { + if (v_v16df[i] != d) + __builtin_abort (); + } + } + + return 0; +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/def.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/def.h index 9cc3656e710e..cb7a1c97ded1 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/def.h +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/def.h @@ -852,3 +852,11 @@ typedef double v512df __attribute__ ((vector_size (4096))); v##NUM##TYPE1 v = {__VA_ARGS__}; \ *(v##NUM##TYPE1 *) out = v; \ } + +#define DEF_TRAILING(TYPE1, TYPE2, NUM, ...) \ + void init_##TYPE1##_##TYPE2##_##NUM (TYPE2 var0, TYPE2 var1, TYPE2 var2, \ + TYPE2 var3, TYPE2 *__restrict out) \ + { \ + TYPE1 v = {__VA_ARGS__}; \ + *(TYPE1 *) out = v; \ + } diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-1.c new file mode 100644 index 000000000000..ed15a12ecfb2 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-1.c @@ -0,0 +1,652 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ + +#include "def.h" + +DEF_TRAILING (v8qi, int8_t, 8, var0, var1, var2, var3, var3, var3, var3, var3) +DEF_TRAILING (v16qi, int8_t, 16, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING (v32qi, int8_t, 32, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3) +DEF_TRAILING (v64qi, int8_t, 64, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3) +DEF_TRAILING (v128qi, int8_t, 128, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING ( + v256qi, int8_t, 256, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING ( + v512qi, int8_t, 512, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING ( + v1024qi, int8_t, 1024, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3) +DEF_TRAILING ( + v2048qi, int8_t, 2048, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING ( + v4096qi, int8_t, 4096, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3) + +/* { dg-final { scan-assembler-times {vslide1up\.vx} 30 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-2.c new file mode 100644 index 000000000000..5deb097bf544 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-2.c @@ -0,0 +1,335 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ + +#include "def.h" + +DEF_TRAILING (v8hi, int16_t, 8, var0, var1, var2, var3, var3, var3, var3, var3) +DEF_TRAILING (v16hi, int16_t, 16, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING (v32hi, int16_t, 32, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3) +DEF_TRAILING (v64hi, int16_t, 64, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3) +DEF_TRAILING (v128hi, int16_t, 128, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING ( + v256hi, int16_t, 256, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING ( + v512hi, int16_t, 512, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING ( + v1024hi, int16_t, 1024, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3) +DEF_TRAILING ( + v2048hi, int16_t, 2048, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3) + +/* { dg-final { scan-assembler-times {vslide1up\.vx} 27 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-3.c new file mode 100644 index 000000000000..e503d6c4dff0 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-3.c @@ -0,0 +1,176 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ + +#include "def.h" + +DEF_TRAILING (v8si, int32_t, 8, var0, var1, var2, var3, var3, var3, var3, var3) +DEF_TRAILING (v16si, int32_t, 16, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING (v32si, int32_t, 32, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3) +DEF_TRAILING (v64si, int32_t, 64, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3) +DEF_TRAILING (v128si, int32_t, 128, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING ( + v256si, int32_t, 256, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING ( + v512si, int32_t, 512, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING ( + v1024si, int32_t, 1024, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3) + +/* { dg-final { scan-assembler-times {vslide1up\.vx} 24 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-4.c new file mode 100644 index 000000000000..c7945643d57c --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-4.c @@ -0,0 +1,96 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ + +#include "def.h" + +DEF_TRAILING (v8di, int64_t, 8, var0, var1, var2, var3, var3, var3, var3, var3) +DEF_TRAILING (v16di, int64_t, 16, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING (v32di, int64_t, 32, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3) +DEF_TRAILING (v64di, int64_t, 64, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3) +DEF_TRAILING (v128di, int64_t, 128, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING ( + v256di, int64_t, 256, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING ( + v512di, int64_t, 512, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3) + + +/* { dg-final { scan-assembler-times {vslide1up\.vx} 21 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-5.c new file mode 100644 index 000000000000..43e179229500 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-5.c @@ -0,0 +1,335 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ + +#include "def.h" + +DEF_TRAILING (v8hf, _Float16, 8, var0, var1, var2, var3, var3, var3, var3, var3) +DEF_TRAILING (v16hf, _Float16, 16, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING (v32hf, _Float16, 32, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3) +DEF_TRAILING (v64hf, _Float16, 64, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3) +DEF_TRAILING (v128hf, _Float16, 128, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING ( + v256hf, _Float16, 256, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING ( + v512hf, _Float16, 512, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING ( + v1024hf, _Float16, 1024, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3) +DEF_TRAILING ( + v2048hf, _Float16, 2048, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3) + +/* { dg-final { scan-assembler-times {vfslide1up\.vf} 27 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-6.c new file mode 100644 index 000000000000..bb91c6a18554 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-6.c @@ -0,0 +1,176 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ + +#include "def.h" + +DEF_TRAILING (v8sf, float, 8, var0, var1, var2, var3, var3, var3, var3, var3) +DEF_TRAILING (v16sf, float, 16, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING (v32sf, float, 32, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3) +DEF_TRAILING (v64sf, float, 64, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3) +DEF_TRAILING (v128sf, float, 128, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING ( + v256sf, float, 256, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING ( + v512sf, float, 512, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING ( + v1024sf, float, 1024, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3) + +/* { dg-final { scan-assembler-times {vfslide1up\.vf} 24 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-7.c new file mode 100644 index 000000000000..b12f08d280e1 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-7.c @@ -0,0 +1,96 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ + +#include "def.h" + +DEF_TRAILING (v8df, double, 8, var0, var1, var2, var3, var3, var3, var3, var3) +DEF_TRAILING (v16df, double, 16, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING (v32df, double, 32, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3) +DEF_TRAILING (v64df, double, 64, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3) +DEF_TRAILING (v128df, double, 128, var0, var1, var2, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING ( + v256df, double, 256, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3) +DEF_TRAILING ( + v512df, double, 512, var0, var1, var2, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, var3, + var3, var3, var3, var3, var3, var3, var3, var3, var3) + + +/* { dg-final { scan-assembler-times {vfslide1up\.vf} 21 } } */ From 7c16f7a154f91d61f902e2c9e63b00656156016f Mon Sep 17 00:00:00 2001 From: Richard Earnshaw Date: Wed, 15 Nov 2023 10:30:15 +0000 Subject: [PATCH 059/169] arm: testsuite: fix test for armv6t2 hardware My previous patch series added a new function to check for armv6t2 compatible hardware. But the test was not correctly implemented and also did not follow the standard naming convention for Arm hw compatibility tests. Fix both of these issues. gcc/testsuite: * lib/target-supports.exp (check_effective_target_arm_arch_v6t2_hw_ok): Rename to... (check_effective_target_arm_arch_v6t2_hw): ... this. Fix checks. * gcc.target/arm/acle/data-intrinsics-armv6.c: Update pre-check. * gcc.target/arm/acle/data-intrinsics-rbit.c: Likewise. --- gcc/testsuite/gcc.target/arm/acle/data-intrinsics-armv6.c | 2 +- gcc/testsuite/gcc.target/arm/acle/data-intrinsics-rbit.c | 2 +- gcc/testsuite/lib/target-supports.exp | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gcc/testsuite/gcc.target/arm/acle/data-intrinsics-armv6.c b/gcc/testsuite/gcc.target/arm/acle/data-intrinsics-armv6.c index 6dc8c55e2f9a..c231fa4c1ae4 100644 --- a/gcc/testsuite/gcc.target/arm/acle/data-intrinsics-armv6.c +++ b/gcc/testsuite/gcc.target/arm/acle/data-intrinsics-armv6.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-require-effective-target arm_arch_v6t2_hw_ok } */ +/* { dg-require-effective-target arm_arch_v6t2_hw } */ /* { dg-add-options arm_arch_v6t2 } */ #include "arm_acle.h" diff --git a/gcc/testsuite/gcc.target/arm/acle/data-intrinsics-rbit.c b/gcc/testsuite/gcc.target/arm/acle/data-intrinsics-rbit.c index b01c4219a7e7..ac358bce02da 100644 --- a/gcc/testsuite/gcc.target/arm/acle/data-intrinsics-rbit.c +++ b/gcc/testsuite/gcc.target/arm/acle/data-intrinsics-rbit.c @@ -1,6 +1,6 @@ /* Test the ACLE data intrinsics existence for specific instruction. */ /* { dg-do run } */ -/* { dg-require-effective-target arm_arch_v6t2_hw_ok } */ +/* { dg-require-effective-target arm_arch_v6t2_hw } */ /* { dg-additional-options "--save-temps -O1" } */ /* { dg-add-options arm_arch_v6t2 } */ /* { dg-final { check-function-bodies "**" "" "" } } */ diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 43a040e135c3..b6a2e4fd0961 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -5607,9 +5607,9 @@ proc check_effective_target_arm_thumb1_cbz_ok {} { # Return 1 if this is an Arm target which supports the Armv6t2 extensions. # This can be either in Arm state or in Thumb state. -proc check_effective_target_arm_arch_v6t2_hw_ok {} { - if [check_effective_target_arm_thumb1_ok] { - return [check_no_compiler_messages arm_movt object { +proc check_effective_target_arm_arch_v6t2_hw {} { + if [check_effective_target_arm_arch_v6t2_ok] { + return [check_runtime arm_arch_v6t2 { int main (void) { From cbd0fe22a5ced9751d2450dc4fd6fe3525c2fc02 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 15 Nov 2023 09:17:49 +0000 Subject: [PATCH 060/169] libstdc++: std::stacktrace tweaks Fix a typo in a string literal and make the new hash.cc test gracefully handle missing stacktrace data (see PR 112541). libstdc++-v3/ChangeLog: * include/std/stacktrace (basic_stacktrace::at): Fix class name in exception message. * testsuite/19_diagnostics/stacktrace/hash.cc: Do not fail if current() returns a non-empty stacktrace. --- libstdc++-v3/include/std/stacktrace | 2 +- libstdc++-v3/testsuite/19_diagnostics/stacktrace/hash.cc | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/libstdc++-v3/include/std/stacktrace b/libstdc++-v3/include/std/stacktrace index 9a0d0b160687..9d5f6396aed5 100644 --- a/libstdc++-v3/include/std/stacktrace +++ b/libstdc++-v3/include/std/stacktrace @@ -425,7 +425,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION at(size_type __n) const { if (__n >= size()) - __throw_out_of_range("basic_stack_trace::at: bad frame number"); + __throw_out_of_range("basic_stacktrace::at: bad frame number"); return begin()[__n]; } diff --git a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/hash.cc b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/hash.cc index 88831efd6879..21705098ff0f 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/hash.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/hash.cc @@ -12,9 +12,10 @@ test_hash() using Alloc = __gnu_test::uneq_allocator; using S = std::basic_stacktrace; S s; + S cur = S::current(); std::size_t h = std::hash()(s); - std::size_t h2 = std::hash()(S::current()); - VERIFY( h != h2 ); + std::size_t h2 = std::hash()(cur); + VERIFY( cur.empty() == (h == h2) ); } int main() From 452476db0c705caeac8712d560fc16ced0ca5226 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 14 Nov 2023 15:08:13 +0000 Subject: [PATCH 061/169] libstdc++: Fix std::deque::operator[] Xmethod [PR112491] The Xmethod for std::deque::operator[] has the same bug that I recently fixed for the std::deque::size() Xmethod. The first node might have unused capacity at the start, which needs to be accounted for when indexing into the deque. libstdc++-v3/ChangeLog: PR libstdc++/112491 * python/libstdcxx/v6/xmethods.py (DequeWorkerBase.index): Correctly handle unused capacity at the start of the first node. * testsuite/libstdc++-xmethods/deque.cc: Check index operator when elements have been removed from the front. --- libstdc++-v3/python/libstdcxx/v6/xmethods.py | 12 ++++++++---- libstdc++-v3/testsuite/libstdc++-xmethods/deque.cc | 6 +++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/libstdc++-v3/python/libstdcxx/v6/xmethods.py b/libstdc++-v3/python/libstdcxx/v6/xmethods.py index dcef285180a8..f29bc2d40fb4 100644 --- a/libstdc++-v3/python/libstdcxx/v6/xmethods.py +++ b/libstdc++-v3/python/libstdcxx/v6/xmethods.py @@ -195,7 +195,7 @@ class DequeWorkerBase(gdb.xmethod.XMethodWorker): def size(self, obj): start = obj['_M_impl']['_M_start'] finish = obj['_M_impl']['_M_finish'] - if not start['_M_node']: + if start['_M_cur'] == finish['_M_cur']: return 0 return (self._bufsize * (finish['_M_node'] - start['_M_node'] - 1) @@ -203,9 +203,13 @@ class DequeWorkerBase(gdb.xmethod.XMethodWorker): + (start['_M_last'] - start['_M_cur'])) def index(self, obj, idx): - first_node = obj['_M_impl']['_M_start']['_M_node'] - index_node = first_node + int(idx) // self._bufsize - return index_node[0][idx % self._bufsize] + start = obj['_M_impl']['_M_start'] + first_node_size = start['_M_last'] - start['_M_cur'] + if idx < first_node_size: + return start['_M_cur'][idx] + idx = idx - first_node_size + index_node = start['_M_node'][1 + int(idx) // self._bufsize] + return index_node[idx % self._bufsize] class DequeEmptyWorker(DequeWorkerBase): diff --git a/libstdc++-v3/testsuite/libstdc++-xmethods/deque.cc b/libstdc++-v3/testsuite/libstdc++-xmethods/deque.cc index e4077c14ff5a..6058d23c87ab 100644 --- a/libstdc++-v3/testsuite/libstdc++-xmethods/deque.cc +++ b/libstdc++-v3/testsuite/libstdc++-xmethods/deque.cc @@ -69,20 +69,24 @@ main () // PR libstdc++/112491 std::deque q5; - q5.push_front(0); + q5.push_front(5); // { dg-final { note-test q5.size() 1 } } +// { dg-final { note-test q5\[0\] 5 } } std::deque q6 = q1; q6.pop_front(); // { dg-final { note-test {q6.size() == (q1_size-1)} true } } +// { dg-final { note-test q6\[1\] 102 } } std::deque q7 = q2; q7.pop_front(); q7.pop_front(); // { dg-final { note-test {q7.size() == (q2_size-2)} true } } +// { dg-final { note-test q7\[1\] 203 } } std::deque q8 = q3; q8.pop_front(); q8.pop_front(); q8.pop_front(); // { dg-final { note-test {q8.size() == (q3_size-3)} true } } +// { dg-final { note-test q8\[1\] 304 } } std::deque q9 = q8; q9.clear(); // { dg-final { note-test q9.size() 0 } } From 4d86dc51e34d2a5695b617afeb56e3414836a79a Mon Sep 17 00:00:00 2001 From: Xi Ruoyao Date: Mon, 6 Nov 2023 16:06:08 +0800 Subject: [PATCH 062/169] LoongArch: Remove redundant barrier instructions before LL-SC loops This is isomorphic to the LLVM changes [1-2]. On LoongArch, the LL and SC instructions has memory barrier semantics: - LL: + - SC: + But the compare and swap operation is allowed to fail, and if it fails the SC instruction is not executed, thus the guarantee of acquiring semantics cannot be ensured. Therefore, an acquire barrier needs to be generated when failure_memorder includes an acquire operation. On CPUs implementing LoongArch v1.10 or later, "dbar 0b10100" is an acquire barrier; on CPUs implementing LoongArch v1.00, it is a full barrier. So it's always enough for acquire semantics. OTOH if an acquire semantic is not needed, we still needs the "dbar 0x700" as the load-load barrier like all LL-SC loops. [1]:https://github.com/llvm/llvm-project/pull/67391 [2]:https://github.com/llvm/llvm-project/pull/69339 gcc/ChangeLog: * config/loongarch/loongarch.cc (loongarch_memmodel_needs_release_fence): Remove. (loongarch_cas_failure_memorder_needs_acquire): New static function. (loongarch_print_operand): Redefine 'G' for the barrier on CAS failure. * config/loongarch/sync.md (atomic_cas_value_strong): Remove the redundant barrier before the LL instruction, and emit an acquire barrier on failure if needed by failure_memorder. (atomic_cas_value_cmp_and_7_): Likewise. (atomic_cas_value_add_7_): Remove the unnecessary barrier before the LL instruction. (atomic_cas_value_sub_7_): Likewise. (atomic_cas_value_and_7_): Likewise. (atomic_cas_value_xor_7_): Likewise. (atomic_cas_value_or_7_): Likewise. (atomic_cas_value_nand_7_): Likewise. (atomic_cas_value_exchange_7_): Likewise. gcc/testsuite/ChangeLog: * gcc.target/loongarch/cas-acquire.c: New test. --- gcc/config/loongarch/loongarch.cc | 30 ++++--- gcc/config/loongarch/sync.md | 49 +++++------ .../gcc.target/loongarch/cas-acquire.c | 82 +++++++++++++++++++ 3 files changed, 119 insertions(+), 42 deletions(-) create mode 100644 gcc/testsuite/gcc.target/loongarch/cas-acquire.c diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index 2998bf740d4b..738911661d74 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -5833,27 +5833,27 @@ loongarch_memmodel_needs_rel_acq_fence (enum memmodel model) } } -/* Return true if a FENCE should be emitted to before a memory access to - implement the release portion of memory model MODEL. */ +/* Return true if a FENCE should be emitted after a failed CAS to + implement the acquire semantic of failure_memorder. */ static bool -loongarch_memmodel_needs_release_fence (enum memmodel model) +loongarch_cas_failure_memorder_needs_acquire (enum memmodel model) { - switch (model) + switch (memmodel_base (model)) { + case MEMMODEL_ACQUIRE: case MEMMODEL_ACQ_REL: case MEMMODEL_SEQ_CST: - case MEMMODEL_SYNC_SEQ_CST: - case MEMMODEL_RELEASE: - case MEMMODEL_SYNC_RELEASE: return true; - case MEMMODEL_ACQUIRE: - case MEMMODEL_CONSUME: - case MEMMODEL_SYNC_ACQUIRE: case MEMMODEL_RELAXED: + case MEMMODEL_RELEASE: return false; + /* MEMMODEL_CONSUME is deliberately not handled because it's always + replaced by MEMMODEL_ACQUIRE as at now. If you see an ICE caused by + MEMMODEL_CONSUME, read the change (re)introducing it carefully and + decide what to do. See PR 59448 and get_memmodel in builtins.cc. */ default: gcc_unreachable (); } @@ -5966,7 +5966,8 @@ loongarch_print_operand_reloc (FILE *file, rtx op, bool hi64_part, 'd' Print CONST_INT OP in decimal. 'E' Print CONST_INT OP element 0 of a replicated CONST_VECTOR in decimal. 'F' Print the FPU branch condition for comparison OP. - 'G' Print a DBAR insn if the memory model requires a release. + 'G' Print a DBAR insn for CAS failure (with an acquire semantic if + needed, otherwise a simple load-load barrier). 'H' Print address 52-61bit relocation associated with OP. 'h' Print the high-part relocation associated with OP. 'i' Print i if the operand is not a register. @@ -6057,8 +6058,11 @@ loongarch_print_operand (FILE *file, rtx op, int letter) break; case 'G': - if (loongarch_memmodel_needs_release_fence ((enum memmodel) INTVAL (op))) - fputs ("dbar\t0", file); + if (loongarch_cas_failure_memorder_needs_acquire ( + memmodel_from_int (INTVAL (op)))) + fputs ("dbar\t0b10100", file); + else + fputs ("dbar\t0x700", file); break; case 'h': diff --git a/gcc/config/loongarch/sync.md b/gcc/config/loongarch/sync.md index 1ad0c63e0d9b..c112091a60fe 100644 --- a/gcc/config/loongarch/sync.md +++ b/gcc/config/loongarch/sync.md @@ -162,19 +162,18 @@ (clobber (match_scratch:GPR 6 "=&r"))] "" { - return "%G5\\n\\t" - "1:\\n\\t" + return "1:\\n\\t" "ll.\\t%0,%1\\n\\t" "bne\\t%0,%z2,2f\\n\\t" "or%i3\\t%6,$zero,%3\\n\\t" "sc.\\t%6,%1\\n\\t" - "beq\\t$zero,%6,1b\\n\\t" + "beqz\\t%6,1b\\n\\t" "b\\t3f\\n\\t" "2:\\n\\t" - "dbar\\t0x700\\n\\t" + "%G5\\n\\t" "3:\\n\\t"; } - [(set (attr "length") (const_int 32))]) + [(set (attr "length") (const_int 28))]) (define_expand "atomic_compare_and_swap" [(match_operand:SI 0 "register_operand" "") ;; bool output @@ -267,8 +266,7 @@ (clobber (match_scratch:GPR 7 "=&r"))] "" { - return "%G6\\n\\t" - "1:\\n\\t" + return "1:\\n\\t" "ll.\\t%0,%1\\n\\t" "and\\t%7,%0,%2\\n\\t" "bne\\t%7,%z4,2f\\n\\t" @@ -278,10 +276,10 @@ "beq\\t$zero,%7,1b\\n\\t" "b\\t3f\\n\\t" "2:\\n\\t" - "dbar\\t0x700\\n\\t" + "%G6\\n\\t" "3:\\n\\t"; } - [(set (attr "length") (const_int 40))]) + [(set (attr "length") (const_int 36))]) (define_expand "atomic_compare_and_swap" [(match_operand:SI 0 "register_operand" "") ;; bool output @@ -336,8 +334,7 @@ (clobber (match_scratch:GPR 8 "=&r"))] "" { - return "%G6\\n\\t" - "1:\\n\\t" + return "1:\\n\\t" "ll.\\t%0,%1\\n\\t" "and\\t%7,%0,%3\\n\\t" "add.w\\t%8,%0,%z5\\n\\t" @@ -347,7 +344,7 @@ "beq\\t$zero,%7,1b"; } - [(set (attr "length") (const_int 32))]) + [(set (attr "length") (const_int 28))]) (define_insn "atomic_cas_value_sub_7_" [(set (match_operand:GPR 0 "register_operand" "=&r") ;; res @@ -363,8 +360,7 @@ (clobber (match_scratch:GPR 8 "=&r"))] "" { - return "%G6\\n\\t" - "1:\\n\\t" + return "1:\\n\\t" "ll.\\t%0,%1\\n\\t" "and\\t%7,%0,%3\\n\\t" "sub.w\\t%8,%0,%z5\\n\\t" @@ -373,7 +369,7 @@ "sc.\\t%7,%1\\n\\t" "beq\\t$zero,%7,1b"; } - [(set (attr "length") (const_int 32))]) + [(set (attr "length") (const_int 28))]) (define_insn "atomic_cas_value_and_7_" [(set (match_operand:GPR 0 "register_operand" "=&r") ;; res @@ -389,8 +385,7 @@ (clobber (match_scratch:GPR 8 "=&r"))] "" { - return "%G6\\n\\t" - "1:\\n\\t" + return "1:\\n\\t" "ll.\\t%0,%1\\n\\t" "and\\t%7,%0,%3\\n\\t" "and\\t%8,%0,%z5\\n\\t" @@ -399,7 +394,7 @@ "sc.\\t%7,%1\\n\\t" "beq\\t$zero,%7,1b"; } - [(set (attr "length") (const_int 32))]) + [(set (attr "length") (const_int 28))]) (define_insn "atomic_cas_value_xor_7_" [(set (match_operand:GPR 0 "register_operand" "=&r") ;; res @@ -415,8 +410,7 @@ (clobber (match_scratch:GPR 8 "=&r"))] "" { - return "%G6\\n\\t" - "1:\\n\\t" + return "1:\\n\\t" "ll.\\t%0,%1\\n\\t" "and\\t%7,%0,%3\\n\\t" "xor\\t%8,%0,%z5\\n\\t" @@ -426,7 +420,7 @@ "beq\\t$zero,%7,1b"; } - [(set (attr "length") (const_int 32))]) + [(set (attr "length") (const_int 28))]) (define_insn "atomic_cas_value_or_7_" [(set (match_operand:GPR 0 "register_operand" "=&r") ;; res @@ -442,8 +436,7 @@ (clobber (match_scratch:GPR 8 "=&r"))] "" { - return "%G6\\n\\t" - "1:\\n\\t" + return "1:\\n\\t" "ll.\\t%0,%1\\n\\t" "and\\t%7,%0,%3\\n\\t" "or\\t%8,%0,%z5\\n\\t" @@ -453,7 +446,7 @@ "beq\\t$zero,%7,1b"; } - [(set (attr "length") (const_int 32))]) + [(set (attr "length") (const_int 28))]) (define_insn "atomic_cas_value_nand_7_" [(set (match_operand:GPR 0 "register_operand" "=&r") ;; res @@ -469,8 +462,7 @@ (clobber (match_scratch:GPR 8 "=&r"))] "" { - return "%G6\\n\\t" - "1:\\n\\t" + return "1:\\n\\t" "ll.\\t%0,%1\\n\\t" "and\\t%7,%0,%3\\n\\t" "and\\t%8,%0,%z5\\n\\t" @@ -479,7 +471,7 @@ "sc.\\t%7,%1\\n\\t" "beq\\t$zero,%7,1b"; } - [(set (attr "length") (const_int 32))]) + [(set (attr "length") (const_int 28))]) (define_insn "atomic_cas_value_exchange_7_" [(set (match_operand:GPR 0 "register_operand" "=&r") @@ -494,8 +486,7 @@ (clobber (match_scratch:GPR 7 "=&r"))] "" { - return "%G6\\n\\t" - "1:\\n\\t" + return "1:\\n\\t" "ll.\\t%0,%1\\n\\t" "and\\t%7,%0,%z3\\n\\t" "or%i5\\t%7,%7,%5\\n\\t" diff --git a/gcc/testsuite/gcc.target/loongarch/cas-acquire.c b/gcc/testsuite/gcc.target/loongarch/cas-acquire.c new file mode 100644 index 000000000000..ff7ba866f32a --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/cas-acquire.c @@ -0,0 +1,82 @@ +/* { dg-do run } */ +/* { dg-require-effective-target c99_runtime } */ +/* { dg-require-effective-target pthread } */ +/* { dg-options "-std=c99 -pthread" } */ + +/* https://github.com/llvm/llvm-project/pull/67391#issuecomment-1752403934 + reported that this had failed with GCC and 3A6000. */ + +#include +#include +#include +#include + +static unsigned int tags[32]; +static unsigned int vals[32]; + +static void * +writer_entry (void *data) +{ + atomic_uint *pt = (atomic_uint *)tags; + atomic_uint *pv = (atomic_uint *)vals; + + for (unsigned int n = 1; n < 10000; n++) + { + atomic_store_explicit (&pv[n & 31], n, memory_order_release); + atomic_store_explicit (&pt[n & 31], n, memory_order_release); + } + + return NULL; +} + +static void * +reader_entry (void *data) +{ + atomic_uint *pt = (atomic_uint *)tags; + atomic_uint *pv = (atomic_uint *)vals; + int i; + + for (;;) + { + for (i = 0; i < 32; i++) + { + unsigned int tag = 0; + bool res; + + res = atomic_compare_exchange_weak_explicit ( + &pt[i], &tag, 0, memory_order_acquire, memory_order_acquire); + if (!res) + { + unsigned int val; + + val = atomic_load_explicit (&pv[i], memory_order_relaxed); + if (val < tag) + __builtin_trap (); + } + } + } + + return NULL; +} + +int +main (int argc, char *argv[]) +{ + pthread_t writer; + pthread_t reader; + int res; + + res = pthread_create (&writer, NULL, writer_entry, NULL); + if (res < 0) + __builtin_trap (); + + res = pthread_create (&reader, NULL, reader_entry, NULL); + if (res < 0) + __builtin_trap (); + + res = pthread_join (writer, NULL); + if (res < 0) + __builtin_trap (); + + return 0; +} From 28219f7f99a80519d1c6ab5e5dc83b4c7f8d7251 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 15 Nov 2023 12:45:58 +0100 Subject: [PATCH 063/169] libsanitizer: merge from upstream (c425db2eb558c263) The following patch is result of libsanitizer/merge.sh from c425db2eb558c263 (yesterday evening). Bootstrapped/regtested on x86_64-linux and i686-linux (together with the follow-up 3 patches I'm about to post). BTW, seems upstream has added riscv64 support for I think lsan/tsan, so if anyone is willing to try it there, it would be a matter of copying e.g. the s390*-*-linux* libsanitizer/configure.tgt entry to riscv64-*-linux* with the obvious s/s390x/riscv64/ change in it. --- libsanitizer/MERGE | 2 +- libsanitizer/asan/asan_allocator.cpp | 156 ++- libsanitizer/asan/asan_allocator.h | 78 +- libsanitizer/asan/asan_descriptions.cpp | 70 +- libsanitizer/asan/asan_errors.cpp | 22 +- libsanitizer/asan/asan_fake_stack.cpp | 40 +- libsanitizer/asan/asan_globals.cpp | 75 +- libsanitizer/asan/asan_interceptors.cpp | 272 +++-- libsanitizer/asan/asan_interceptors.h | 39 +- .../asan/asan_interceptors_memintrinsics.cpp | 63 ++ .../asan/asan_interceptors_memintrinsics.h | 37 - libsanitizer/asan/asan_internal.h | 5 +- libsanitizer/asan/asan_mac.cpp | 53 +- libsanitizer/asan/asan_malloc_linux.cpp | 2 +- libsanitizer/asan/asan_malloc_mac.cpp | 75 +- libsanitizer/asan/asan_malloc_win.cpp | 10 +- libsanitizer/asan/asan_mapping.h | 2 +- libsanitizer/asan/asan_poisoning.cpp | 15 +- libsanitizer/asan/asan_posix.cpp | 6 + libsanitizer/asan/asan_report.cpp | 6 +- libsanitizer/asan/asan_report.h | 3 +- libsanitizer/asan/asan_rtl.cpp | 28 +- libsanitizer/asan/asan_rtl_x86_64.S | 28 +- libsanitizer/asan/asan_stack.cpp | 2 +- libsanitizer/asan/asan_stack.h | 32 +- libsanitizer/asan/asan_stats.cpp | 4 +- libsanitizer/asan/asan_thread.cpp | 183 ++- libsanitizer/asan/asan_thread.h | 42 +- libsanitizer/asan/asan_win.cpp | 23 +- libsanitizer/asan/asan_win_dll_thunk.cpp | 2 + libsanitizer/hwasan/hwasan.cpp | 142 ++- .../hwasan/hwasan_allocation_functions.cpp | 6 +- libsanitizer/hwasan/hwasan_allocator.cpp | 71 +- libsanitizer/hwasan/hwasan_allocator.h | 7 +- libsanitizer/hwasan/hwasan_exceptions.cpp | 3 +- libsanitizer/hwasan/hwasan_globals.cpp | 2 + libsanitizer/hwasan/hwasan_globals.h | 1 + libsanitizer/hwasan/hwasan_interceptors.cpp | 379 ++++++- .../hwasan/hwasan_interface_internal.h | 59 + libsanitizer/hwasan/hwasan_linux.cpp | 11 +- libsanitizer/hwasan/hwasan_memintrinsics.cpp | 30 + .../hwasan/hwasan_platform_interceptors.h | 1001 +++++++++++++++++ libsanitizer/hwasan/hwasan_report.cpp | 854 +++++++++----- libsanitizer/hwasan/hwasan_report.h | 2 +- libsanitizer/hwasan/hwasan_setjmp_aarch64.S | 45 +- libsanitizer/hwasan/hwasan_setjmp_riscv64.S | 31 +- libsanitizer/hwasan/hwasan_setjmp_x86_64.S | 28 +- .../hwasan/hwasan_tag_mismatch_aarch64.S | 8 +- libsanitizer/hwasan/hwasan_thread.cpp | 44 +- libsanitizer/hwasan/hwasan_thread_list.cpp | 19 +- libsanitizer/hwasan/hwasan_thread_list.h | 9 +- .../include/sanitizer/allocator_interface.h | 127 ++- .../include/sanitizer/asan_interface.h | 96 +- .../include/sanitizer/common_interface_defs.h | 172 +-- .../include/sanitizer/coverage_interface.h | 19 +- .../include/sanitizer/dfsan_interface.h | 97 +- .../include/sanitizer/hwasan_interface.h | 132 +-- .../include/sanitizer/lsan_interface.h | 106 +- .../include/sanitizer/memprof_interface.h | 13 +- .../include/sanitizer/msan_interface.h | 163 +-- .../include/sanitizer/scudo_interface.h | 28 +- .../include/sanitizer/tsan_interface.h | 197 +++- .../include/sanitizer/tsan_interface_atomic.h | 273 ++--- .../include/sanitizer/ubsan_interface.h | 6 +- libsanitizer/interception/interception.h | 202 ++-- .../interception/interception_linux.cpp | 16 +- .../interception/interception_linux.h | 18 +- .../interception/interception_win.cpp | 92 +- libsanitizer/interception/interception_win.h | 5 + libsanitizer/lsan/lsan.cpp | 2 +- libsanitizer/lsan/lsan_allocator.cpp | 37 +- libsanitizer/lsan/lsan_allocator.h | 25 +- libsanitizer/lsan/lsan_common.cpp | 142 +-- libsanitizer/lsan/lsan_common.h | 27 +- libsanitizer/lsan/lsan_common_fuchsia.cpp | 3 +- libsanitizer/lsan/lsan_common_mac.cpp | 15 +- libsanitizer/lsan/lsan_interceptors.cpp | 117 +- libsanitizer/lsan/lsan_mac.cpp | 2 +- libsanitizer/lsan/lsan_thread.cpp | 31 +- libsanitizer/lsan/lsan_thread.h | 4 +- libsanitizer/sanitizer_common/Makefile.am | 3 + libsanitizer/sanitizer_common/Makefile.in | 30 +- .../sanitizer_common/sanitizer_allocator.cpp | 8 +- .../sanitizer_common/sanitizer_allocator.h | 7 + .../sanitizer_allocator_combined.h | 6 +- .../sanitizer_allocator_interface.h | 2 + .../sanitizer_allocator_primary32.h | 2 +- .../sanitizer_allocator_primary64.h | 5 +- .../sanitizer_allocator_secondary.h | 4 +- .../sanitizer_allocator_stats.h | 27 +- .../sanitizer_common/sanitizer_array_ref.h | 123 ++ libsanitizer/sanitizer_common/sanitizer_asm.h | 46 +- .../sanitizer_common/sanitizer_common.cpp | 5 +- .../sanitizer_common/sanitizer_common.h | 35 +- .../sanitizer_common_interceptors.inc | 425 +++---- .../sanitizer_common_interceptors_format.inc | 31 +- ...izer_common_interceptors_memintrinsics.inc | 244 ++++ ...er_common_interceptors_vfork_aarch64.inc.S | 4 +- ...itizer_common_interceptors_vfork_arm.inc.S | 4 +- ...tizer_common_interceptors_vfork_i386.inc.S | 4 +- ...ommon_interceptors_vfork_loongarch64.inc.S | 4 +- ...er_common_interceptors_vfork_riscv64.inc.S | 4 +- ...zer_common_interceptors_vfork_x86_64.inc.S | 6 +- .../sanitizer_common_interface.inc | 5 + .../sanitizer_common_interface_posix.inc | 1 + .../sanitizer_common_libcdep.cpp | 6 +- .../sanitizer_common_syscalls.inc | 2 +- .../sanitizer_common/sanitizer_dl.cpp | 37 + libsanitizer/sanitizer_common/sanitizer_dl.h | 26 + .../sanitizer_common/sanitizer_file.h | 2 +- .../sanitizer_flag_parser.cpp | 7 +- .../sanitizer_common/sanitizer_flag_parser.h | 4 +- .../sanitizer_common/sanitizer_flags.cpp | 4 +- .../sanitizer_common/sanitizer_flags.inc | 6 + .../sanitizer_common/sanitizer_flat_map.h | 17 +- .../sanitizer_common/sanitizer_fuchsia.cpp | 13 +- .../sanitizer_internal_defs.h | 14 +- .../sanitizer_common/sanitizer_libc.cpp | 31 +- .../sanitizer_common/sanitizer_libc.h | 27 +- .../sanitizer_common/sanitizer_linux.cpp | 12 +- .../sanitizer_common/sanitizer_linux.h | 1 + .../sanitizer_linux_libcdep.cpp | 13 +- .../sanitizer_common/sanitizer_mac.cpp | 12 +- libsanitizer/sanitizer_common/sanitizer_mac.h | 20 - .../sanitizer_common/sanitizer_malloc_mac.inc | 2 +- .../sanitizer_common/sanitizer_platform.h | 13 +- .../sanitizer_platform_interceptors.h | 12 +- .../sanitizer_platform_limits_freebsd.cpp | 9 + .../sanitizer_platform_limits_freebsd.h | 19 +- .../sanitizer_platform_limits_linux.cpp | 5 +- .../sanitizer_common/sanitizer_posix.cpp | 4 + .../sanitizer_common/sanitizer_posix.h | 5 +- .../sanitizer_posix_libcdep.cpp | 4 +- .../sanitizer_common/sanitizer_printf.cpp | 9 +- .../sanitizer_procmaps_mac.cpp | 62 +- .../sanitizer_common/sanitizer_quarantine.h | 25 +- .../sanitizer_common/sanitizer_range.cpp | 62 + .../sanitizer_common/sanitizer_range.h | 40 + .../sanitizer_redefine_builtins.h | 56 + .../sanitizer_common/sanitizer_ring_buffer.h | 4 +- .../sanitizer_signal_interceptors.inc | 3 + .../sanitizer_common/sanitizer_stacktrace.cpp | 17 +- .../sanitizer_stacktrace_libcdep.cpp | 30 +- .../sanitizer_stacktrace_printer.cpp | 162 ++- .../sanitizer_stacktrace_printer.h | 134 ++- .../sanitizer_stoptheworld_linux_libcdep.cpp | 6 +- .../sanitizer_stoptheworld_mac.cpp | 6 +- .../sanitizer_common/sanitizer_symbolizer.cpp | 5 +- .../sanitizer_common/sanitizer_symbolizer.h | 5 +- .../sanitizer_symbolizer_internal.h | 9 + .../sanitizer_symbolizer_libbacktrace.cpp | 2 +- .../sanitizer_symbolizer_libcdep.cpp | 13 +- .../sanitizer_symbolizer_mac.cpp | 5 +- .../sanitizer_symbolizer_markup.cpp | 24 +- .../sanitizer_symbolizer_posix_libcdep.cpp | 53 +- .../sanitizer_symbolizer_report.cpp | 18 +- .../sanitizer_symbolizer_win.cpp | 16 +- .../sanitizer_thread_arg_retval.cpp | 94 ++ .../sanitizer_thread_arg_retval.h | 116 ++ .../sanitizer_common/sanitizer_win.cpp | 5 + .../sanitizer_win_dll_thunk.h | 2 +- libsanitizer/tsan/Makefile.am | 3 +- libsanitizer/tsan/Makefile.in | 13 +- libsanitizer/tsan/tsan_debugging.cpp | 4 +- libsanitizer/tsan/tsan_interceptors.h | 34 +- .../tsan/tsan_interceptors_libdispatch.cpp | 2 +- .../tsan/tsan_interceptors_memintrinsics.cpp | 43 + libsanitizer/tsan/tsan_interceptors_posix.cpp | 140 +-- libsanitizer/tsan/tsan_interface.h | 8 + libsanitizer/tsan/tsan_interface_ann.cpp | 22 + libsanitizer/tsan/tsan_interface_atomic.cpp | 24 + libsanitizer/tsan/tsan_malloc_mac.cpp | 28 +- libsanitizer/tsan/tsan_mman.cpp | 24 + libsanitizer/tsan/tsan_platform.h | 119 +- libsanitizer/tsan/tsan_platform_linux.cpp | 50 +- libsanitizer/tsan/tsan_report.cpp | 19 +- libsanitizer/tsan/tsan_report.h | 3 +- libsanitizer/tsan/tsan_rtl.cpp | 2 +- libsanitizer/tsan/tsan_rtl.h | 4 +- libsanitizer/tsan/tsan_rtl_ppc64.S | 1 - libsanitizer/tsan/tsan_rtl_riscv64.S | 203 ++++ libsanitizer/tsan/tsan_suppressions.cpp | 1 + libsanitizer/ubsan/ubsan_diag.cpp | 81 +- libsanitizer/ubsan/ubsan_flags.cpp | 1 - libsanitizer/ubsan/ubsan_handlers.cpp | 50 +- libsanitizer/ubsan/ubsan_handlers.h | 19 +- libsanitizer/ubsan/ubsan_handlers_cxx.cpp | 44 - libsanitizer/ubsan/ubsan_handlers_cxx.h | 16 - libsanitizer/ubsan/ubsan_interface.inc | 4 +- libsanitizer/ubsan/ubsan_monitor.cpp | 3 +- libsanitizer/ubsan/ubsan_platform.h | 2 - .../ubsan/ubsan_signals_standalone.cpp | 5 + 192 files changed, 6794 insertions(+), 2817 deletions(-) create mode 100644 libsanitizer/hwasan/hwasan_platform_interceptors.h create mode 100644 libsanitizer/sanitizer_common/sanitizer_array_ref.h create mode 100644 libsanitizer/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc create mode 100644 libsanitizer/sanitizer_common/sanitizer_dl.cpp create mode 100644 libsanitizer/sanitizer_common/sanitizer_dl.h create mode 100644 libsanitizer/sanitizer_common/sanitizer_range.cpp create mode 100644 libsanitizer/sanitizer_common/sanitizer_range.h create mode 100644 libsanitizer/sanitizer_common/sanitizer_redefine_builtins.h create mode 100644 libsanitizer/sanitizer_common/sanitizer_thread_arg_retval.cpp create mode 100644 libsanitizer/sanitizer_common/sanitizer_thread_arg_retval.h create mode 100644 libsanitizer/tsan/tsan_interceptors_memintrinsics.cpp create mode 100644 libsanitizer/tsan/tsan_rtl_riscv64.S diff --git a/libsanitizer/MERGE b/libsanitizer/MERGE index ef904af5e355..2ee0843e704e 100644 --- a/libsanitizer/MERGE +++ b/libsanitizer/MERGE @@ -1,4 +1,4 @@ -87e6e490e79384a523bc7f0216c3db60227d6d58 +c425db2eb558c26377edc04e062c0c1f999b2770 The first line of this file holds the git revision number of the last merge done from the master library sources. diff --git a/libsanitizer/asan/asan_allocator.cpp b/libsanitizer/asan/asan_allocator.cpp index 19d7777c4028..22dcf6132707 100644 --- a/libsanitizer/asan/asan_allocator.cpp +++ b/libsanitizer/asan/asan_allocator.cpp @@ -16,6 +16,7 @@ #include "asan_allocator.h" +#include "asan_internal.h" #include "asan_mapping.h" #include "asan_poisoning.h" #include "asan_report.h" @@ -24,6 +25,7 @@ #include "lsan/lsan_common.h" #include "sanitizer_common/sanitizer_allocator_checks.h" #include "sanitizer_common/sanitizer_allocator_interface.h" +#include "sanitizer_common/sanitizer_common.h" #include "sanitizer_common/sanitizer_errno.h" #include "sanitizer_common/sanitizer_flags.h" #include "sanitizer_common/sanitizer_internal_defs.h" @@ -190,28 +192,56 @@ class LargeChunkHeader { } }; +static void FillChunk(AsanChunk *m) { + // FIXME: Use ReleaseMemoryPagesToOS. + Flags &fl = *flags(); + + if (fl.max_free_fill_size > 0) { + // We have to skip the chunk header, it contains free_context_id. + uptr scribble_start = (uptr)m + kChunkHeaderSize + kChunkHeader2Size; + if (m->UsedSize() >= kChunkHeader2Size) { // Skip Header2 in user area. + uptr size_to_fill = m->UsedSize() - kChunkHeader2Size; + size_to_fill = Min(size_to_fill, (uptr)fl.max_free_fill_size); + REAL(memset)((void *)scribble_start, fl.free_fill_byte, size_to_fill); + } + } +} + struct QuarantineCallback { QuarantineCallback(AllocatorCache *cache, BufferedStackTrace *stack) : cache_(cache), stack_(stack) { } - void Recycle(AsanChunk *m) { - void *p = get_allocator().GetBlockBegin(m); - if (p != m) { - // Clear the magic value, as allocator internals may overwrite the - // contents of deallocated chunk, confusing GetAsanChunk lookup. - reinterpret_cast(p)->Set(nullptr); - } - - u8 old_chunk_state = CHUNK_QUARANTINE; - if (!atomic_compare_exchange_strong(&m->chunk_state, &old_chunk_state, - CHUNK_INVALID, memory_order_acquire)) { - CHECK_EQ(old_chunk_state, CHUNK_QUARANTINE); - } - + void PreQuarantine(AsanChunk *m) const { + FillChunk(m); + // Poison the region. PoisonShadow(m->Beg(), RoundUpTo(m->UsedSize(), ASAN_SHADOW_GRANULARITY), - kAsanHeapLeftRedzoneMagic); + kAsanHeapFreeMagic); + } + + void Recycle(AsanChunk *m) const { + void *p = get_allocator().GetBlockBegin(m); + + // The secondary will immediately unpoison and unmap the memory, so this + // branch is unnecessary. + if (get_allocator().FromPrimary(p)) { + if (p != m) { + // Clear the magic value, as allocator internals may overwrite the + // contents of deallocated chunk, confusing GetAsanChunk lookup. + reinterpret_cast(p)->Set(nullptr); + } + + u8 old_chunk_state = CHUNK_QUARANTINE; + if (!atomic_compare_exchange_strong(&m->chunk_state, &old_chunk_state, + CHUNK_INVALID, + memory_order_acquire)) { + CHECK_EQ(old_chunk_state, CHUNK_QUARANTINE); + } + + PoisonShadow(m->Beg(), RoundUpTo(m->UsedSize(), ASAN_SHADOW_GRANULARITY), + kAsanHeapLeftRedzoneMagic); + } // Statistics. AsanStats &thread_stats = GetCurrentThreadStats(); @@ -221,7 +251,17 @@ struct QuarantineCallback { get_allocator().Deallocate(cache_, p); } - void *Allocate(uptr size) { + void RecyclePassThrough(AsanChunk *m) const { + // Recycle for the secondary will immediately unpoison and unmap the + // memory, so quarantine preparation is unnecessary. + if (get_allocator().FromPrimary(m)) { + // The primary allocation may need pattern fill if enabled. + FillChunk(m); + } + Recycle(m); + } + + void *Allocate(uptr size) const { void *res = get_allocator().Allocate(cache_, size, 1); // TODO(alekseys): Consider making quarantine OOM-friendly. if (UNLIKELY(!res)) @@ -229,9 +269,7 @@ struct QuarantineCallback { return res; } - void Deallocate(void *p) { - get_allocator().Deallocate(cache_, p); - } + void Deallocate(void *p) const { get_allocator().Deallocate(cache_, p); } private: AllocatorCache* const cache_; @@ -248,6 +286,22 @@ void AsanMapUnmapCallback::OnMap(uptr p, uptr size) const { thread_stats.mmaps++; thread_stats.mmaped += size; } + +void AsanMapUnmapCallback::OnMapSecondary(uptr p, uptr size, uptr user_begin, + uptr user_size) const { + uptr user_end = RoundDownTo(user_begin + user_size, ASAN_SHADOW_GRANULARITY); + user_begin = RoundUpTo(user_begin, ASAN_SHADOW_GRANULARITY); + // The secondary mapping will be immediately returned to user, no value + // poisoning that with non-zero just before unpoisoning by Allocate(). So just + // poison head/tail invisible to Allocate(). + PoisonShadow(p, user_begin - p, kAsanHeapLeftRedzoneMagic); + PoisonShadow(user_end, size - (user_end - p), kAsanHeapLeftRedzoneMagic); + // Statistics. + AsanStats &thread_stats = GetCurrentThreadStats(); + thread_stats.mmaps++; + thread_stats.mmaped += size; +} + void AsanMapUnmapCallback::OnUnmap(uptr p, uptr size) const { PoisonShadow(p, size, 0); // We are about to unmap a chunk of user memory. @@ -387,8 +441,9 @@ struct Allocator { } void GetOptions(AllocatorOptions *options) const { - options->quarantine_size_mb = quarantine.GetSize() >> 20; - options->thread_local_quarantine_size_kb = quarantine.GetCacheSize() >> 10; + options->quarantine_size_mb = quarantine.GetMaxSize() >> 20; + options->thread_local_quarantine_size_kb = + quarantine.GetMaxCacheSize() >> 10; options->min_redzone = atomic_load(&min_redzone, memory_order_acquire); options->max_redzone = atomic_load(&max_redzone, memory_order_acquire); options->may_return_null = AllocatorMayReturnNull(); @@ -472,7 +527,7 @@ struct Allocator { // -------------------- Allocation/Deallocation routines --------------- void *Allocate(uptr size, uptr alignment, BufferedStackTrace *stack, AllocType alloc_type, bool can_fill) { - if (UNLIKELY(!asan_inited)) + if (UNLIKELY(!AsanInited())) AsanInitFromRtl(); if (UNLIKELY(IsRssLimitExceeded())) { if (AllocatorMayReturnNull()) @@ -502,9 +557,10 @@ struct Allocator { uptr needed_size = rounded_size + rz_size; if (alignment > min_alignment) needed_size += alignment; + bool from_primary = PrimaryAllocator::CanAllocate(needed_size, alignment); // If we are allocating from the secondary allocator, there will be no // automatic right redzone, so add the right redzone manually. - if (!PrimaryAllocator::CanAllocate(needed_size, alignment)) + if (!from_primary) needed_size += rz_size; CHECK(IsAligned(needed_size, min_alignment)); if (size > kMaxAllowedMallocSize || needed_size > kMaxAllowedMallocSize || @@ -536,15 +592,6 @@ struct Allocator { ReportOutOfMemory(size, stack); } - if (*(u8 *)MEM_TO_SHADOW((uptr)allocated) == 0 && CanPoisonMemory()) { - // Heap poisoning is enabled, but the allocator provides an unpoisoned - // chunk. This is possible if CanPoisonMemory() was false for some - // time, for example, due to flags()->start_disabled. - // Anyway, poison the block before using it for anything else. - uptr allocated_size = allocator.GetActuallyAllocatedSize(allocated); - PoisonShadow((uptr)allocated, allocated_size, kAsanHeapLeftRedzoneMagic); - } - uptr alloc_beg = reinterpret_cast(allocated); uptr alloc_end = alloc_beg + needed_size; uptr user_beg = alloc_beg + rz_size; @@ -561,6 +608,17 @@ struct Allocator { m->SetAllocContext(t ? t->tid() : kMainTid, StackDepotPut(*stack)); + if (!from_primary || *(u8 *)MEM_TO_SHADOW((uptr)allocated) == 0) { + // The allocator provides an unpoisoned chunk. This is possible for the + // secondary allocator, or if CanPoisonMemory() was false for some time, + // for example, due to flags()->start_disabled. Anyway, poison left and + // right of the block before using it for anything else. + uptr tail_beg = RoundUpTo(user_end, ASAN_SHADOW_GRANULARITY); + uptr tail_end = alloc_beg + allocator.GetActuallyAllocatedSize(allocated); + PoisonShadow(alloc_beg, user_beg - alloc_beg, kAsanHeapLeftRedzoneMagic); + PoisonShadow(tail_beg, tail_end - tail_beg, kAsanHeapLeftRedzoneMagic); + } + uptr size_rounded_down_to_granularity = RoundDownTo(size, ASAN_SHADOW_GRANULARITY); // Unpoison the bulk of the memory region. @@ -628,25 +686,6 @@ struct Allocator { AsanThread *t = GetCurrentThread(); m->SetFreeContext(t ? t->tid() : 0, StackDepotPut(*stack)); - Flags &fl = *flags(); - if (fl.max_free_fill_size > 0) { - // We have to skip the chunk header, it contains free_context_id. - uptr scribble_start = (uptr)m + kChunkHeaderSize + kChunkHeader2Size; - if (m->UsedSize() >= kChunkHeader2Size) { // Skip Header2 in user area. - uptr size_to_fill = m->UsedSize() - kChunkHeader2Size; - size_to_fill = Min(size_to_fill, (uptr)fl.max_free_fill_size); - REAL(memset)((void *)scribble_start, fl.free_fill_byte, size_to_fill); - } - } - - // Poison the region. - PoisonShadow(m->Beg(), RoundUpTo(m->UsedSize(), ASAN_SHADOW_GRANULARITY), - kAsanHeapFreeMagic); - - AsanStats &thread_stats = GetCurrentThreadStats(); - thread_stats.frees++; - thread_stats.freed += m->UsedSize(); - // Push into quarantine. if (t) { AsanThreadLocalMallocStorage *ms = &t->malloc_storage(); @@ -699,6 +738,10 @@ struct Allocator { } } + AsanStats &thread_stats = GetCurrentThreadStats(); + thread_stats.frees++; + thread_stats.freed += m->UsedSize(); + QuarantineChunk(m, ptr, stack); } @@ -798,6 +841,10 @@ struct Allocator { return m->UsedSize(); } + uptr AllocationSizeFast(uptr p) { + return reinterpret_cast(p - kChunkHeaderSize)->UsedSize(); + } + AsanChunkView FindHeapChunkByAddress(uptr addr) { AsanChunk *m1 = GetAsanChunkByAddr(addr); sptr offset = 0; @@ -1198,6 +1245,13 @@ uptr __sanitizer_get_allocated_size(const void *p) { return allocated_size; } +uptr __sanitizer_get_allocated_size_fast(const void *p) { + DCHECK_EQ(p, __sanitizer_get_allocated_begin(p)); + uptr ret = instance.AllocationSizeFast(reinterpret_cast(p)); + DCHECK_EQ(ret, __sanitizer_get_allocated_size(p)); + return ret; +} + const void *__sanitizer_get_allocated_begin(const void *p) { return AllocationBegin(p); } diff --git a/libsanitizer/asan/asan_allocator.h b/libsanitizer/asan/asan_allocator.h index 6a12a6c60252..c3c4fae85b12 100644 --- a/libsanitizer/asan/asan_allocator.h +++ b/libsanitizer/asan/asan_allocator.h @@ -114,32 +114,98 @@ class AsanChunkFifoList: public IntrusiveList { struct AsanMapUnmapCallback { void OnMap(uptr p, uptr size) const; + void OnMapSecondary(uptr p, uptr size, uptr user_begin, uptr user_size) const; void OnUnmap(uptr p, uptr size) const; }; #if SANITIZER_CAN_USE_ALLOCATOR64 # if SANITIZER_FUCHSIA +// This is a sentinel indicating we do not want the primary allocator arena to +// be placed at a fixed address. It will be anonymously mmap'd. const uptr kAllocatorSpace = ~(uptr)0; -const uptr kAllocatorSize = 0x40000000000ULL; // 4T. +# if SANITIZER_RISCV64 + +// These are sanitizer tunings that allow all bringup tests for RISCV-64 Sv39 + +// Fuchsia to run with asan-instrumented. That is, we can run bringup, e2e, +// libc, and scudo tests with this configuration. +// +// TODO: This is specifically tuned for Sv39. 48/57 will likely require other +// tunings, or possibly use the same tunings Fuchsia uses for other archs. The +// VMA size isn't technically tied to the Fuchsia System ABI, so once 48/57 is +// supported, we'd need a way of dynamically checking what the VMA size is and +// determining optimal configuration. + +// This indicates the total amount of space dedicated for the primary allocator +// during initialization. This is roughly proportional to the size set by the +// FuchsiaConfig for scudo (~11.25GB == ~2^33.49). Requesting any more could +// lead to some failures in sanitized bringup tests where we can't allocate new +// vmars because there wouldn't be enough contiguous space. We could try 2^34 if +// we re-evaluate the SizeClassMap settings. +const uptr kAllocatorSize = UINT64_C(1) << 33; // 8GB + +// This is roughly equivalent to the configuration for the VeryDenseSizeClassMap +// but has fewer size classes (ideally at most 32). Fewer class sizes means the +// region size for each class is larger, thus less chances of running out of +// space for each region. The main differences are the MidSizeLog (which is +// smaller) and the MaxSizeLog (which is larger). +// +// - The MaxSizeLog is higher to allow some of the largest allocations I've +// observed to be placed in the primary allocator's arena as opposed to being +// mmap'd by the secondary allocator. This helps reduce fragmentation from +// large classes. A huge example of this the scudo allocator tests (and its +// testing infrastructure) which malloc's/new's objects on the order of +// hundreds of kilobytes which normally would not be in the primary allocator +// arena with the default VeryDenseSizeClassMap. +// - The MidSizeLog is reduced to help shrink the number of size classes and +// increase region size. Without this, we'd see ASan complain many times about +// a region running out of available space. +// +// This differs a bit from the fuchsia config in scudo, mainly from the NumBits, +// MaxSizeLog, and NumCachedHintT. This should place the number of size classes +// for scudo at 45 and some large objects allocated by this config would be +// placed in the arena whereas scudo would mmap them. The asan allocator needs +// to have a number of classes that are a power of 2 for various internal things +// to work, so we can't match the scudo settings to a tee. The sanitizer +// allocator is slightly slower than scudo's but this is enough to get +// memory-intensive scudo tests to run with asan instrumentation. +typedef SizeClassMap + SizeClassMap; +static_assert(SizeClassMap::kNumClassesRounded <= 32, + "The above tunings were specifically selected to ensure there " + "would be at most 32 size classes. This restriction could be " + "loosened to 64 size classes if we can find a configuration of " + "allocator size and SizeClassMap tunings that allows us to " + "reliably run all bringup tests in a sanitized environment."); + +# else +// These are the default allocator tunings for non-RISCV environments where the +// VMA is usually 48 bits and we have lots of space. +const uptr kAllocatorSize = 0x40000000000ULL; // 4T. typedef DefaultSizeClassMap SizeClassMap; -# elif defined(__powerpc64__) +# endif +# elif defined(__powerpc64__) const uptr kAllocatorSpace = ~(uptr)0; const uptr kAllocatorSize = 0x20000000000ULL; // 2T. typedef DefaultSizeClassMap SizeClassMap; -# elif defined(__aarch64__) && SANITIZER_ANDROID +# elif defined(__aarch64__) && SANITIZER_ANDROID // Android needs to support 39, 42 and 48 bit VMA. const uptr kAllocatorSpace = ~(uptr)0; const uptr kAllocatorSize = 0x2000000000ULL; // 128G. typedef VeryCompactSizeClassMap SizeClassMap; -#elif SANITIZER_RISCV64 +# elif SANITIZER_RISCV64 const uptr kAllocatorSpace = ~(uptr)0; const uptr kAllocatorSize = 0x2000000000ULL; // 128G. typedef VeryDenseSizeClassMap SizeClassMap; -#elif defined(__sparc__) +# elif defined(__sparc__) const uptr kAllocatorSpace = ~(uptr)0; const uptr kAllocatorSize = 0x20000000000ULL; // 2T. typedef DefaultSizeClassMap SizeClassMap; -# elif SANITIZER_WINDOWS +# elif SANITIZER_WINDOWS const uptr kAllocatorSpace = ~(uptr)0; const uptr kAllocatorSize = 0x8000000000ULL; // 500G typedef DefaultSizeClassMap SizeClassMap; diff --git a/libsanitizer/asan/asan_descriptions.cpp b/libsanitizer/asan/asan_descriptions.cpp index fbe92572b55b..ef6f3e0a096f 100644 --- a/libsanitizer/asan/asan_descriptions.cpp +++ b/libsanitizer/asan/asan_descriptions.cpp @@ -49,14 +49,14 @@ void DescribeThread(AsanThreadContext *context) { } context->announced = true; InternalScopedString str; - str.append("Thread %s", AsanThreadIdAndName(context).c_str()); + str.AppendF("Thread %s", AsanThreadIdAndName(context).c_str()); if (context->parent_tid == kInvalidTid) { - str.append(" created by unknown thread\n"); + str.Append(" created by unknown thread\n"); Printf("%s", str.data()); return; } - str.append(" created by %s here:\n", - AsanThreadIdAndName(context->parent_tid).c_str()); + str.AppendF(" created by %s here:\n", + AsanThreadIdAndName(context->parent_tid).c_str()); Printf("%s", str.data()); StackDepotGet(context->stack_id).Print(); // Recursively described parent thread if needed. @@ -126,29 +126,29 @@ static void GetAccessToHeapChunkInformation(ChunkAccess *descr, static void PrintHeapChunkAccess(uptr addr, const ChunkAccess &descr) { Decorator d; InternalScopedString str; - str.append("%s", d.Location()); + str.Append(d.Location()); switch (descr.access_type) { case kAccessTypeLeft: - str.append("%p is located %zd bytes before", - (void *)descr.bad_addr, descr.offset); + str.AppendF("%p is located %zd bytes before", (void *)descr.bad_addr, + descr.offset); break; case kAccessTypeRight: - str.append("%p is located %zd bytes after", - (void *)descr.bad_addr, descr.offset); + str.AppendF("%p is located %zd bytes after", (void *)descr.bad_addr, + descr.offset); break; case kAccessTypeInside: - str.append("%p is located %zd bytes inside of", (void *)descr.bad_addr, - descr.offset); + str.AppendF("%p is located %zd bytes inside of", (void *)descr.bad_addr, + descr.offset); break; case kAccessTypeUnknown: - str.append( + str.AppendF( "%p is located somewhere around (this is AddressSanitizer bug!)", (void *)descr.bad_addr); } - str.append(" %zu-byte region [%p,%p)\n", descr.chunk_size, - (void *)descr.chunk_begin, - (void *)(descr.chunk_begin + descr.chunk_size)); - str.append("%s", d.Default()); + str.AppendF(" %zu-byte region [%p,%p)\n", descr.chunk_size, + (void *)descr.chunk_begin, + (void *)(descr.chunk_begin + descr.chunk_size)); + str.Append(d.Default()); Printf("%s", str.data()); } @@ -243,24 +243,24 @@ static void PrintAccessAndVarIntersection(const StackVarDescr &var, uptr addr, pos_descr = "underflows"; } InternalScopedString str; - str.append(" [%zd, %zd)", var.beg, var_end); + str.AppendF(" [%zd, %zd)", var.beg, var_end); // Render variable name. - str.append(" '"); + str.AppendF(" '"); for (uptr i = 0; i < var.name_len; ++i) { - str.append("%c", var.name_pos[i]); + str.AppendF("%c", var.name_pos[i]); } - str.append("'"); + str.AppendF("'"); if (var.line > 0) { - str.append(" (line %zd)", var.line); + str.AppendF(" (line %zd)", var.line); } if (pos_descr) { Decorator d; // FIXME: we may want to also print the size of the access here, // but in case of accesses generated by memset it may be confusing. - str.append("%s <== Memory access at offset %zd %s this variable%s\n", - d.Location(), addr, pos_descr, d.Default()); + str.AppendF("%s <== Memory access at offset %zd %s this variable%s\n", + d.Location(), addr, pos_descr, d.Default()); } else { - str.append("\n"); + str.AppendF("\n"); } Printf("%s", str.data()); } @@ -277,23 +277,23 @@ static void DescribeAddressRelativeToGlobal(uptr addr, uptr access_size, const __asan_global &g) { InternalScopedString str; Decorator d; - str.append("%s", d.Location()); + str.Append(d.Location()); if (addr < g.beg) { - str.append("%p is located %zd bytes before", (void *)addr, - g.beg - addr); + str.AppendF("%p is located %zd bytes before", (void *)addr, g.beg - addr); } else if (addr + access_size > g.beg + g.size) { if (addr < g.beg + g.size) addr = g.beg + g.size; - str.append("%p is located %zd bytes after", (void *)addr, - addr - (g.beg + g.size)); + str.AppendF("%p is located %zd bytes after", (void *)addr, + addr - (g.beg + g.size)); } else { // Can it happen? - str.append("%p is located %zd bytes inside of", (void *)addr, addr - g.beg); + str.AppendF("%p is located %zd bytes inside of", (void *)addr, + addr - g.beg); } - str.append(" global variable '%s' defined in '", - MaybeDemangleGlobalName(g.name)); - PrintGlobalLocation(&str, g); - str.append("' (0x%zx) of size %zu\n", g.beg, g.size); - str.append("%s", d.Default()); + str.AppendF(" global variable '%s' defined in '", + MaybeDemangleGlobalName(g.name)); + PrintGlobalLocation(&str, g, /*print_module_name=*/false); + str.AppendF("' (0x%zx) of size %zu\n", g.beg, g.size); + str.Append(d.Default()); PrintGlobalNameIfASCII(&str, g); Printf("%s", str.data()); } diff --git a/libsanitizer/asan/asan_errors.cpp b/libsanitizer/asan/asan_errors.cpp index cc8dc26f5b75..3f2d13e31464 100644 --- a/libsanitizer/asan/asan_errors.cpp +++ b/libsanitizer/asan/asan_errors.cpp @@ -362,8 +362,8 @@ void ErrorODRViolation::Print() { Printf("%s", d.Default()); InternalScopedString g1_loc; InternalScopedString g2_loc; - PrintGlobalLocation(&g1_loc, global1); - PrintGlobalLocation(&g2_loc, global2); + PrintGlobalLocation(&g1_loc, global1, /*print_module_name=*/true); + PrintGlobalLocation(&g2_loc, global2, /*print_module_name=*/true); Printf(" [1] size=%zd '%s' %s\n", global1.size, MaybeDemangleGlobalName(global1.name), g1_loc.data()); Printf(" [2] size=%zd '%s' %s\n", global2.size, @@ -379,8 +379,8 @@ void ErrorODRViolation::Print() { "HINT: if you don't care about these errors you may set " "ASAN_OPTIONS=detect_odr_violation=0\n"); InternalScopedString error_msg; - error_msg.append("%s: global '%s' at %s", scariness.GetDescription(), - MaybeDemangleGlobalName(global1.name), g1_loc.data()); + error_msg.AppendF("%s: global '%s' at %s", scariness.GetDescription(), + MaybeDemangleGlobalName(global1.name), g1_loc.data()); ReportErrorSummary(error_msg.data()); } @@ -517,15 +517,15 @@ static void PrintShadowByte(InternalScopedString *str, const char *before, } static void PrintLegend(InternalScopedString *str) { - str->append( + str->AppendF( "Shadow byte legend (one shadow byte represents %d " "application bytes):\n", (int)ASAN_SHADOW_GRANULARITY); PrintShadowByte(str, " Addressable: ", 0); - str->append(" Partially addressable: "); + str->AppendF(" Partially addressable: "); for (u8 i = 1; i < ASAN_SHADOW_GRANULARITY; i++) PrintShadowByte(str, "", i, " "); - str->append("\n"); + str->AppendF("\n"); PrintShadowByte(str, " Heap left redzone: ", kAsanHeapLeftRedzoneMagic); PrintShadowByte(str, " Freed heap region: ", kAsanHeapFreeMagic); @@ -559,8 +559,8 @@ static void PrintShadowBytes(InternalScopedString *str, const char *before, u8 *bytes, u8 *guilty, uptr n) { Decorator d; if (before) - str->append("%s%p:", before, - (void *)ShadowToMem(reinterpret_cast(bytes))); + str->AppendF("%s%p:", before, + (void *)ShadowToMem(reinterpret_cast(bytes))); for (uptr i = 0; i < n; i++) { u8 *p = bytes + i; const char *before = @@ -568,7 +568,7 @@ static void PrintShadowBytes(InternalScopedString *str, const char *before, const char *after = p == guilty ? "]" : ""; PrintShadowByte(str, before, *p, after); } - str->append("\n"); + str->AppendF("\n"); } static void PrintShadowMemoryForAddress(uptr addr) { @@ -577,7 +577,7 @@ static void PrintShadowMemoryForAddress(uptr addr) { const uptr n_bytes_per_row = 16; uptr aligned_shadow = shadow_addr & ~(n_bytes_per_row - 1); InternalScopedString str; - str.append("Shadow bytes around the buggy address:\n"); + str.AppendF("Shadow bytes around the buggy address:\n"); for (int i = -5; i <= 5; i++) { uptr row_shadow_addr = aligned_shadow + i * n_bytes_per_row; // Skip rows that would be outside the shadow range. This can happen when diff --git a/libsanitizer/asan/asan_fake_stack.cpp b/libsanitizer/asan/asan_fake_stack.cpp index 74a039b65798..7443ff166984 100644 --- a/libsanitizer/asan/asan_fake_stack.cpp +++ b/libsanitizer/asan/asan_fake_stack.cpp @@ -68,8 +68,8 @@ void FakeStack::Destroy(int tid) { if (Verbosity() >= 2) { InternalScopedString str; for (uptr class_id = 0; class_id < kNumberOfSizeClasses; class_id++) - str.append("%zd: %zd/%zd; ", class_id, hint_position_[class_id], - NumberOfFrames(stack_size_log(), class_id)); + str.AppendF("%zd: %zd/%zd; ", class_id, hint_position_[class_id], + NumberOfFrames(stack_size_log(), class_id)); Report("T%d: FakeStack destroyed: %s\n", tid, str.data()); } uptr size = RequiredSize(stack_size_log_); @@ -133,6 +133,12 @@ void FakeStack::HandleNoReturn() { needs_gc_ = true; } +// Hack: The statement below is not true if we take into account sigaltstack or +// makecontext. It should be possible to make GC to discard wrong stack frame if +// we use these tools. For now, let's support the simplest case and allow GC to +// discard only frames from the default stack, assuming there is no buffer on +// the stack which is used for makecontext or sigaltstack. +// // When throw, longjmp or some such happens we don't call OnFree() and // as the result may leak one or more fake frames, but the good news is that // we are notified about all such events by HandleNoReturn(). @@ -140,6 +146,14 @@ void FakeStack::HandleNoReturn() { // We do it based on their 'real_stack' values -- everything that is lower // than the current real_stack is garbage. NOINLINE void FakeStack::GC(uptr real_stack) { + AsanThread *curr_thread = GetCurrentThread(); + if (!curr_thread) + return; // Try again when we have a thread. + auto top = curr_thread->stack_top(); + auto bottom = curr_thread->stack_bottom(); + if (real_stack < bottom || real_stack > top) + return; // Not the default stack. + for (uptr class_id = 0; class_id < kNumberOfSizeClasses; class_id++) { u8 *flags = GetFlags(stack_size_log(), class_id); for (uptr i = 0, n = NumberOfFrames(stack_size_log(), class_id); i < n; @@ -147,8 +161,12 @@ NOINLINE void FakeStack::GC(uptr real_stack) { if (flags[i] == 0) continue; // not allocated. FakeFrame *ff = reinterpret_cast( GetFrame(stack_size_log(), class_id, i)); - if (ff->real_stack < real_stack) { + // GC only on the default stack. + if (bottom < ff->real_stack && ff->real_stack < real_stack) { flags[i] = 0; + // Poison the frame, so the any access will be reported as UAR. + SetShadow(reinterpret_cast(ff), BytesInSizeClass(class_id), + class_id, kMagic8); } } } @@ -205,11 +223,12 @@ static FakeStack *GetFakeStackFastAlways() { static ALWAYS_INLINE uptr OnMalloc(uptr class_id, uptr size) { FakeStack *fs = GetFakeStackFast(); - if (!fs) return 0; - uptr local_stack; - uptr real_stack = reinterpret_cast(&local_stack); - FakeFrame *ff = fs->Allocate(fs->stack_size_log(), class_id, real_stack); - if (!ff) return 0; // Out of fake stack. + if (!fs) + return 0; + FakeFrame *ff = + fs->Allocate(fs->stack_size_log(), class_id, GET_CURRENT_FRAME()); + if (!ff) + return 0; // Out of fake stack. uptr ptr = reinterpret_cast(ff); SetShadow(ptr, size, class_id, 0); return ptr; @@ -219,9 +238,8 @@ static ALWAYS_INLINE uptr OnMallocAlways(uptr class_id, uptr size) { FakeStack *fs = GetFakeStackFastAlways(); if (!fs) return 0; - uptr local_stack; - uptr real_stack = reinterpret_cast(&local_stack); - FakeFrame *ff = fs->Allocate(fs->stack_size_log(), class_id, real_stack); + FakeFrame *ff = + fs->Allocate(fs->stack_size_log(), class_id, GET_CURRENT_FRAME()); if (!ff) return 0; // Out of fake stack. uptr ptr = reinterpret_cast(ff); diff --git a/libsanitizer/asan/asan_globals.cpp b/libsanitizer/asan/asan_globals.cpp index 01a243927cac..6ac64c4b776b 100644 --- a/libsanitizer/asan/asan_globals.cpp +++ b/libsanitizer/asan/asan_globals.cpp @@ -36,7 +36,6 @@ struct ListOfGlobals { }; static Mutex mu_for_globals; -static LowLevelAllocator allocator_for_globals; static ListOfGlobals *list_of_all_globals; static const int kDynamicInitGlobalsInitialCapacity = 512; @@ -81,18 +80,19 @@ static bool IsAddressNearGlobal(uptr addr, const __asan_global &g) { } static void ReportGlobal(const Global &g, const char *prefix) { + DataInfo info; + bool symbolized = Symbolizer::GetOrInit()->SymbolizeData(g.beg, &info); Report( - "%s Global[%p]: beg=%p size=%zu/%zu name=%s module=%s dyn_init=%zu " + "%s Global[%p]: beg=%p size=%zu/%zu name=%s source=%s module=%s " + "dyn_init=%zu " "odr_indicator=%p\n", prefix, (void *)&g, (void *)g.beg, g.size, g.size_with_redzone, g.name, - g.module_name, g.has_dynamic_init, (void *)g.odr_indicator); + g.module_name, (symbolized ? info.module : "?"), g.has_dynamic_init, + (void *)g.odr_indicator); - DataInfo info; - Symbolizer::GetOrInit()->SymbolizeData(g.beg, &info); - if (info.line != 0) { + if (symbolized && info.line != 0) { Report(" location: name=%s, %d\n", info.file, static_cast(info.line)); - } - else if (g.gcc_location != 0) { + } else if (g.gcc_location != 0) { // Fallback to Global::gcc_location Report(" location: name=%s, %d\n", g.gcc_location->filename, g.gcc_location->line_no); } @@ -158,6 +158,23 @@ static void CheckODRViolationViaIndicator(const Global *g) { } } +// Check ODR violation for given global G by checking if it's already poisoned. +// We use this method in case compiler doesn't use private aliases for global +// variables. +static void CheckODRViolationViaPoisoning(const Global *g) { + if (__asan_region_is_poisoned(g->beg, g->size_with_redzone)) { + // This check may not be enough: if the first global is much larger + // the entire redzone of the second global may be within the first global. + for (ListOfGlobals *l = list_of_all_globals; l; l = l->next) { + if (g->beg == l->g->beg && + (flags()->detect_odr_violation >= 2 || g->size != l->g->size) && + !IsODRViolationSuppressed(g->name)) + ReportODRViolation(g, FindRegistrationSite(g), + l->g, FindRegistrationSite(l->g)); + } + } +} + // Clang provides two different ways for global variables protection: // it can poison the global itself or its private alias. In former // case we may poison same symbol multiple times, that can help us to @@ -182,7 +199,7 @@ static inline bool UseODRIndicator(const Global *g) { // This function may be called more than once for every global // so we store the globals in a map. static void RegisterGlobal(const Global *g) { - CHECK(asan_inited); + CHECK(AsanInited()); if (flags()->report_globals >= 2) ReportGlobal(*g, "Added"); CHECK(flags()->report_globals); @@ -203,16 +220,18 @@ static void RegisterGlobal(const Global *g) { // where two globals with the same name are defined in different modules. if (UseODRIndicator(g)) CheckODRViolationViaIndicator(g); + else + CheckODRViolationViaPoisoning(g); } if (CanPoisonMemory()) PoisonRedZones(*g); - ListOfGlobals *l = new(allocator_for_globals) ListOfGlobals; + ListOfGlobals *l = new (GetGlobalLowLevelAllocator()) ListOfGlobals; l->g = g; l->next = list_of_all_globals; list_of_all_globals = l; if (g->has_dynamic_init) { if (!dynamic_init_globals) { - dynamic_init_globals = new (allocator_for_globals) VectorOfGlobals; + dynamic_init_globals = new (GetGlobalLowLevelAllocator()) VectorOfGlobals; dynamic_init_globals->reserve(kDynamicInitGlobalsInitialCapacity); } DynInitGlobal dyn_global = { *g, false }; @@ -221,7 +240,7 @@ static void RegisterGlobal(const Global *g) { } static void UnregisterGlobal(const Global *g) { - CHECK(asan_inited); + CHECK(AsanInited()); if (flags()->report_globals >= 2) ReportGlobal(*g, "Removed"); CHECK(flags()->report_globals); @@ -277,24 +296,28 @@ void PrintGlobalNameIfASCII(InternalScopedString *str, const __asan_global &g) { if (c == '\0' || !IsASCII(c)) return; } if (*(char *)(g.beg + g.size - 1) != '\0') return; - str->append(" '%s' is ascii string '%s'\n", MaybeDemangleGlobalName(g.name), - (char *)g.beg); + str->AppendF(" '%s' is ascii string '%s'\n", MaybeDemangleGlobalName(g.name), + (char *)g.beg); } -void PrintGlobalLocation(InternalScopedString *str, const __asan_global &g) { +void PrintGlobalLocation(InternalScopedString *str, const __asan_global &g, + bool print_module_name) { DataInfo info; - Symbolizer::GetOrInit()->SymbolizeData(g.beg, &info); - - if (info.line != 0) { - str->append("%s:%d", info.file, static_cast(info.line)); + if (Symbolizer::GetOrInit()->SymbolizeData(g.beg, &info) && info.line != 0) { + str->AppendF("%s:%d", info.file, static_cast(info.line)); } else if (g.gcc_location != 0) { // Fallback to Global::gcc_location - str->append("%s", g.gcc_location->filename ? g.gcc_location->filename : g.module_name); - if (g.gcc_location->line_no) str->append(":%d", g.gcc_location->line_no); - if (g.gcc_location->column_no) str->append(":%d", g.gcc_location->column_no); + str->AppendF("%s", g.gcc_location->filename ? g.gcc_location->filename + : g.module_name); + if (g.gcc_location->line_no) + str->AppendF(":%d", g.gcc_location->line_no); + if (g.gcc_location->column_no) + str->AppendF(":%d", g.gcc_location->column_no); } else { - str->append("%s", g.module_name); + str->AppendF("%s", g.module_name); } + if (print_module_name && info.module) + str->AppendF(" in %s", info.module); } } // namespace __asan @@ -348,7 +371,7 @@ void __asan_register_globals(__asan_global *globals, uptr n) { Lock lock(&mu_for_globals); if (!global_registration_site_vector) { global_registration_site_vector = - new (allocator_for_globals) GlobalRegistrationSiteVector; + new (GetGlobalLowLevelAllocator()) GlobalRegistrationSiteVector; global_registration_site_vector->reserve(128); } GlobalRegistrationSite site = {stack_id, &globals[0], &globals[n - 1]}; @@ -410,7 +433,7 @@ void __asan_before_dynamic_init(const char *module_name) { return; bool strict_init_order = flags()->strict_init_order; CHECK(module_name); - CHECK(asan_inited); + CHECK(AsanInited()); Lock lock(&mu_for_globals); if (flags()->report_globals >= 3) Printf("DynInitPoison module: %s\n", module_name); @@ -434,7 +457,7 @@ void __asan_after_dynamic_init() { !CanPoisonMemory() || !dynamic_init_globals) return; - CHECK(asan_inited); + CHECK(AsanInited()); Lock lock(&mu_for_globals); // FIXME: Optionally report that we're unpoisoning globals from a module. for (uptr i = 0, n = dynamic_init_globals->size(); i < n; ++i) { diff --git a/libsanitizer/asan/asan_interceptors.cpp b/libsanitizer/asan/asan_interceptors.cpp index 0f1600552481..234b18bd83aa 100644 --- a/libsanitizer/asan/asan_interceptors.cpp +++ b/libsanitizer/asan/asan_interceptors.cpp @@ -12,6 +12,7 @@ //===----------------------------------------------------------------------===// #include "asan_interceptors.h" + #include "asan_allocator.h" #include "asan_internal.h" #include "asan_mapping.h" @@ -20,7 +21,10 @@ #include "asan_stack.h" #include "asan_stats.h" #include "asan_suppressions.h" +#include "asan_thread.h" #include "lsan/lsan_common.h" +#include "sanitizer_common/sanitizer_errno.h" +#include "sanitizer_common/sanitizer_internal_defs.h" #include "sanitizer_common/sanitizer_libc.h" // There is no general interception at all on Fuchsia. @@ -84,12 +88,6 @@ using namespace __asan; DECLARE_REAL_AND_INTERCEPTOR(void *, malloc, uptr) DECLARE_REAL_AND_INTERCEPTOR(void, free, void *) -#define ASAN_INTERCEPTOR_ENTER(ctx, func) \ - AsanInterceptorContext _ctx = {#func}; \ - ctx = (void *)&_ctx; \ - (void) ctx; \ - -#define COMMON_INTERCEPT_FUNCTION(name) ASAN_INTERCEPT_FUNC(name) #define COMMON_INTERCEPT_FUNCTION_VER(name, ver) \ ASAN_INTERCEPT_FUNC_VER(name, ver) #define COMMON_INTERCEPT_FUNCTION_VER_UNVERSIONED_FALLBACK(name, ver) \ @@ -98,15 +96,15 @@ DECLARE_REAL_AND_INTERCEPTOR(void, free, void *) ASAN_WRITE_RANGE(ctx, ptr, size) #define COMMON_INTERCEPTOR_READ_RANGE(ctx, ptr, size) \ ASAN_READ_RANGE(ctx, ptr, size) -#define COMMON_INTERCEPTOR_ENTER(ctx, func, ...) \ - ASAN_INTERCEPTOR_ENTER(ctx, func); \ - do { \ - if (asan_init_is_running) \ - return REAL(func)(__VA_ARGS__); \ - if (SANITIZER_APPLE && UNLIKELY(!asan_inited)) \ - return REAL(func)(__VA_ARGS__); \ - ENSURE_ASAN_INITED(); \ - } while (false) +# define COMMON_INTERCEPTOR_ENTER(ctx, func, ...) \ + ASAN_INTERCEPTOR_ENTER(ctx, func); \ + do { \ + if (AsanInitIsRunning()) \ + return REAL(func)(__VA_ARGS__); \ + if (SANITIZER_APPLE && UNLIKELY(!AsanInited())) \ + return REAL(func)(__VA_ARGS__); \ + ENSURE_ASAN_INITED(); \ + } while (false) #define COMMON_INTERCEPTOR_DIR_ACQUIRE(ctx, path) \ do { \ } while (false) @@ -140,7 +138,7 @@ DECLARE_REAL_AND_INTERCEPTOR(void, free, void *) # define COMMON_INTERCEPTOR_ON_EXIT(ctx) OnExit() # define COMMON_INTERCEPTOR_LIBRARY_LOADED(filename, handle) # define COMMON_INTERCEPTOR_LIBRARY_UNLOADED() -# define COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED (!asan_inited) +# define COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED (!AsanInited()) # define COMMON_INTERCEPTOR_GET_TLS_RANGE(begin, end) \ if (AsanThread *t = GetCurrentThread()) { \ *begin = t->tls_begin(); \ @@ -149,22 +147,46 @@ DECLARE_REAL_AND_INTERCEPTOR(void, free, void *) *begin = *end = 0; \ } -#define COMMON_INTERCEPTOR_MEMMOVE_IMPL(ctx, to, from, size) \ - do { \ - ASAN_INTERCEPTOR_ENTER(ctx, memmove); \ - ASAN_MEMMOVE_IMPL(ctx, to, from, size); \ +template +static void* mmap_interceptor(Mmap real_mmap, void *addr, SIZE_T length, + int prot, int flags, int fd, OFF64_T offset) { + void *res = real_mmap(addr, length, prot, flags, fd, offset); + if (length && res != (void *)-1) { + const uptr beg = reinterpret_cast(res); + DCHECK(IsAligned(beg, GetPageSize())); + SIZE_T rounded_length = RoundUpTo(length, GetPageSize()); + // Only unpoison shadow if it's an ASAN managed address. + if (AddrIsInMem(beg) && AddrIsInMem(beg + rounded_length - 1)) + PoisonShadow(beg, RoundUpTo(length, GetPageSize()), 0); + } + return res; +} + +template +static int munmap_interceptor(Munmap real_munmap, void *addr, SIZE_T length) { + // We should not tag if munmap fail, but it's to late to tag after + // real_munmap, as the pages could be mmaped by another thread. + const uptr beg = reinterpret_cast(addr); + if (length && IsAligned(beg, GetPageSize())) { + SIZE_T rounded_length = RoundUpTo(length, GetPageSize()); + // Protect from unmapping the shadow. + if (AddrIsInMem(beg) && AddrIsInMem(beg + rounded_length - 1)) + PoisonShadow(beg, rounded_length, 0); + } + return real_munmap(addr, length); +} + +# define COMMON_INTERCEPTOR_MMAP_IMPL(ctx, mmap, addr, length, prot, flags, \ + fd, offset) \ + do { \ + (void)(ctx); \ + return mmap_interceptor(REAL(mmap), addr, sz, prot, flags, fd, off); \ } while (false) -#define COMMON_INTERCEPTOR_MEMCPY_IMPL(ctx, to, from, size) \ - do { \ - ASAN_INTERCEPTOR_ENTER(ctx, memcpy); \ - ASAN_MEMCPY_IMPL(ctx, to, from, size); \ - } while (false) - -#define COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, block, c, size) \ - do { \ - ASAN_INTERCEPTOR_ENTER(ctx, memset); \ - ASAN_MEMSET_IMPL(ctx, block, c, size); \ +# define COMMON_INTERCEPTOR_MUNMAP_IMPL(ctx, addr, length) \ + do { \ + (void)(ctx); \ + return munmap_interceptor(REAL(munmap), addr, sz); \ } while (false) #if CAN_SANITIZE_LEAKS @@ -172,6 +194,8 @@ DECLARE_REAL_AND_INTERCEPTOR(void, free, void *) __lsan::ScopedInterceptorDisabler disabler #endif +#define SIGNAL_INTERCEPTOR_ENTER() ENSURE_ASAN_INITED() + #include "sanitizer_common/sanitizer_common_interceptors.inc" #include "sanitizer_common/sanitizer_signal_interceptors.inc" @@ -196,23 +220,44 @@ DECLARE_REAL_AND_INTERCEPTOR(void, free, void *) static thread_return_t THREAD_CALLING_CONV asan_thread_start(void *arg) { AsanThread *t = (AsanThread *)arg; SetCurrentThread(t); - return t->ThreadStart(GetTid()); + auto self = GetThreadSelf(); + auto args = asanThreadArgRetval().GetArgs(self); + t->ThreadStart(GetTid()); + +# if SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD || \ + SANITIZER_SOLARIS + __sanitizer_sigset_t sigset; + t->GetStartData(sigset); + SetSigProcMask(&sigset, nullptr); +# endif + + thread_return_t retval = (*args.routine)(args.arg_retval); + asanThreadArgRetval().Finish(self, retval); + return retval; } -INTERCEPTOR(int, pthread_create, void *thread, - void *attr, void *(*start_routine)(void*), void *arg) { +INTERCEPTOR(int, pthread_create, void *thread, void *attr, + void *(*start_routine)(void *), void *arg) { EnsureMainThreadIDIsCorrect(); // Strict init-order checking is thread-hostile. if (flags()->strict_init_order) StopInitOrderChecking(); GET_STACK_TRACE_THREAD; - int detached = 0; - if (attr) - REAL(pthread_attr_getdetachstate)(attr, &detached); + bool detached = [attr]() { + int d = 0; + return attr && !REAL(pthread_attr_getdetachstate)(attr, &d) && + IsStateDetached(d); + }(); u32 current_tid = GetCurrentTidOrInvalid(); - AsanThread *t = - AsanThread::Create(start_routine, arg, current_tid, &stack, detached); + + __sanitizer_sigset_t sigset = {}; +# if SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD || \ + SANITIZER_SOLARIS + ScopedBlockSignals block(&sigset); +# endif + + AsanThread *t = AsanThread::Create(sigset, current_tid, &stack, detached); int result; { @@ -220,10 +265,13 @@ INTERCEPTOR(int, pthread_create, void *thread, // stored by pthread for future reuse even after thread destruction, and // the linked list it's stored in doesn't even hold valid pointers to the // objects, the latter are calculated by obscure pointer arithmetic. -#if CAN_SANITIZE_LEAKS +# if CAN_SANITIZE_LEAKS __lsan::ScopedInterceptorDisabler disabler; -#endif - result = REAL(pthread_create)(thread, attr, asan_thread_start, t); +# endif + asanThreadArgRetval().Create(detached, {start_routine, arg}, [&]() -> uptr { + result = REAL(pthread_create)(thread, attr, asan_thread_start, t); + return result ? 0 : *(uptr *)(thread); + }); } if (result != 0) { // If the thread didn't start delete the AsanThread to avoid leaking it. @@ -234,10 +282,52 @@ INTERCEPTOR(int, pthread_create, void *thread, return result; } -INTERCEPTOR(int, pthread_join, void *t, void **arg) { - return real_pthread_join(t, arg); +INTERCEPTOR(int, pthread_join, void *thread, void **retval) { + int result; + asanThreadArgRetval().Join((uptr)thread, [&]() { + result = REAL(pthread_join)(thread, retval); + return !result; + }); + return result; } +INTERCEPTOR(int, pthread_detach, void *thread) { + int result; + asanThreadArgRetval().Detach((uptr)thread, [&]() { + result = REAL(pthread_detach)(thread); + return !result; + }); + return result; +} + +INTERCEPTOR(void, pthread_exit, void *retval) { + asanThreadArgRetval().Finish(GetThreadSelf(), retval); + REAL(pthread_exit)(retval); +} + +# if ASAN_INTERCEPT_TRYJOIN +INTERCEPTOR(int, pthread_tryjoin_np, void *thread, void **ret) { + int result; + asanThreadArgRetval().Join((uptr)thread, [&]() { + result = REAL(pthread_tryjoin_np)(thread, ret); + return !result; + }); + return result; +} +# endif + +# if ASAN_INTERCEPT_TIMEDJOIN +INTERCEPTOR(int, pthread_timedjoin_np, void *thread, void **ret, + const struct timespec *abstime) { + int result; + asanThreadArgRetval().Join((uptr)thread, [&]() { + result = REAL(pthread_timedjoin_np)(thread, ret, abstime); + return !result; + }); + return result; +} +# endif + DEFINE_REAL_PTHREAD_FUNCTIONS #endif // ASAN_INTERCEPT_PTHREAD_CREATE @@ -388,7 +478,7 @@ INTERCEPTOR(_Unwind_Reason_Code, _Unwind_SjLj_RaiseException, #if ASAN_INTERCEPT_INDEX # if ASAN_USE_ALIAS_ATTRIBUTE_FOR_INDEX INTERCEPTOR(char*, index, const char *string, int c) - ALIAS(WRAPPER_NAME(strchr)); + ALIAS(WRAP(strchr)); # else # if SANITIZER_APPLE DECLARE_REAL(char*, index, const char *string, int c) @@ -445,12 +535,12 @@ INTERCEPTOR(char *, strcpy, char *to, const char *from) { void *ctx; ASAN_INTERCEPTOR_ENTER(ctx, strcpy); #if SANITIZER_APPLE - if (UNLIKELY(!asan_inited)) + if (UNLIKELY(!AsanInited())) return REAL(strcpy)(to, from); #endif // strcpy is called from malloc_default_purgeable_zone() // in __asan::ReplaceSystemAlloc() on Mac. - if (asan_init_is_running) { + if (AsanInitIsRunning()) { return REAL(strcpy)(to, from); } ENSURE_ASAN_INITED(); @@ -466,7 +556,8 @@ INTERCEPTOR(char *, strcpy, char *to, const char *from) { INTERCEPTOR(char*, strdup, const char *s) { void *ctx; ASAN_INTERCEPTOR_ENTER(ctx, strdup); - if (UNLIKELY(!asan_inited)) return internal_strdup(s); + if (UNLIKELY(!AsanInited())) + return internal_strdup(s); ENSURE_ASAN_INITED(); uptr length = internal_strlen(s); if (flags()->replace_str) { @@ -484,7 +575,8 @@ INTERCEPTOR(char*, strdup, const char *s) { INTERCEPTOR(char*, __strdup, const char *s) { void *ctx; ASAN_INTERCEPTOR_ENTER(ctx, strdup); - if (UNLIKELY(!asan_inited)) return internal_strdup(s); + if (UNLIKELY(!AsanInited())) + return internal_strdup(s); ENSURE_ASAN_INITED(); uptr length = internal_strlen(s); if (flags()->replace_str) { @@ -512,25 +604,41 @@ INTERCEPTOR(char*, strncpy, char *to, const char *from, uptr size) { return REAL(strncpy)(to, from, size); } -INTERCEPTOR(long, strtol, const char *nptr, char **endptr, int base) { - void *ctx; - ASAN_INTERCEPTOR_ENTER(ctx, strtol); - ENSURE_ASAN_INITED(); - if (!flags()->replace_str) { - return REAL(strtol)(nptr, endptr, base); - } +template +static ALWAYS_INLINE auto StrtolImpl(void *ctx, Fn real, const char *nptr, + char **endptr, int base) + -> decltype(real(nullptr, nullptr, 0)) { + if (!flags()->replace_str) + return real(nptr, endptr, base); char *real_endptr; - long result = REAL(strtol)(nptr, &real_endptr, base); + auto res = real(nptr, &real_endptr, base); StrtolFixAndCheck(ctx, nptr, endptr, real_endptr, base); - return result; + return res; } +# define INTERCEPTOR_STRTO_BASE(ret_type, func) \ + INTERCEPTOR(ret_type, func, const char *nptr, char **endptr, int base) { \ + void *ctx; \ + ASAN_INTERCEPTOR_ENTER(ctx, func); \ + ENSURE_ASAN_INITED(); \ + return StrtolImpl(ctx, REAL(func), nptr, endptr, base); \ + } + +INTERCEPTOR_STRTO_BASE(long, strtol) +INTERCEPTOR_STRTO_BASE(long long, strtoll) + +# if SANITIZER_GLIBC +INTERCEPTOR_STRTO_BASE(long, __isoc23_strtol) +INTERCEPTOR_STRTO_BASE(long long, __isoc23_strtoll) +# endif + INTERCEPTOR(int, atoi, const char *nptr) { void *ctx; ASAN_INTERCEPTOR_ENTER(ctx, atoi); #if SANITIZER_APPLE - if (UNLIKELY(!asan_inited)) return REAL(atoi)(nptr); -#endif + if (UNLIKELY(!AsanInited())) + return REAL(atoi)(nptr); +# endif ENSURE_ASAN_INITED(); if (!flags()->replace_str) { return REAL(atoi)(nptr); @@ -550,8 +658,9 @@ INTERCEPTOR(long, atol, const char *nptr) { void *ctx; ASAN_INTERCEPTOR_ENTER(ctx, atol); #if SANITIZER_APPLE - if (UNLIKELY(!asan_inited)) return REAL(atol)(nptr); -#endif + if (UNLIKELY(!AsanInited())) + return REAL(atol)(nptr); +# endif ENSURE_ASAN_INITED(); if (!flags()->replace_str) { return REAL(atol)(nptr); @@ -563,20 +672,6 @@ INTERCEPTOR(long, atol, const char *nptr) { return result; } -#if ASAN_INTERCEPT_ATOLL_AND_STRTOLL -INTERCEPTOR(long long, strtoll, const char *nptr, char **endptr, int base) { - void *ctx; - ASAN_INTERCEPTOR_ENTER(ctx, strtoll); - ENSURE_ASAN_INITED(); - if (!flags()->replace_str) { - return REAL(strtoll)(nptr, endptr, base); - } - char *real_endptr; - long long result = REAL(strtoll)(nptr, &real_endptr, base); - StrtolFixAndCheck(ctx, nptr, endptr, real_endptr, base); - return result; -} - INTERCEPTOR(long long, atoll, const char *nptr) { void *ctx; ASAN_INTERCEPTOR_ENTER(ctx, atoll); @@ -590,7 +685,6 @@ INTERCEPTOR(long long, atoll, const char *nptr) { ASAN_READ_STRING(ctx, nptr, (real_endptr - nptr) + 1); return result; } -#endif // ASAN_INTERCEPT_ATOLL_AND_STRTOLL #if ASAN_INTERCEPT___CXA_ATEXIT || ASAN_INTERCEPT_ATEXIT static void AtCxaAtexit(void *unused) { @@ -603,8 +697,9 @@ static void AtCxaAtexit(void *unused) { INTERCEPTOR(int, __cxa_atexit, void (*func)(void *), void *arg, void *dso_handle) { #if SANITIZER_APPLE - if (UNLIKELY(!asan_inited)) return REAL(__cxa_atexit)(func, arg, dso_handle); -#endif + if (UNLIKELY(!AsanInited())) + return REAL(__cxa_atexit)(func, arg, dso_handle); +# endif ENSURE_ASAN_INITED(); #if CAN_SANITIZE_LEAKS __lsan::ScopedInterceptorDisabler disabler; @@ -656,6 +751,7 @@ void InitializeAsanInterceptors() { static bool was_called_once; CHECK(!was_called_once); was_called_once = true; + InitializePlatformInterceptors(); InitializeCommonInterceptors(); InitializeSignalInterceptors(); @@ -674,11 +770,13 @@ void InitializeAsanInterceptors() { ASAN_INTERCEPT_FUNC(atoi); ASAN_INTERCEPT_FUNC(atol); - ASAN_INTERCEPT_FUNC(strtol); -#if ASAN_INTERCEPT_ATOLL_AND_STRTOLL ASAN_INTERCEPT_FUNC(atoll); + ASAN_INTERCEPT_FUNC(strtol); ASAN_INTERCEPT_FUNC(strtoll); -#endif +# if SANITIZER_GLIBC + ASAN_INTERCEPT_FUNC(__isoc23_strtol); + ASAN_INTERCEPT_FUNC(__isoc23_strtoll); +# endif // Intecept jump-related functions. ASAN_INTERCEPT_FUNC(longjmp); @@ -722,6 +820,16 @@ void InitializeAsanInterceptors() { ASAN_INTERCEPT_FUNC(pthread_create); #endif ASAN_INTERCEPT_FUNC(pthread_join); + ASAN_INTERCEPT_FUNC(pthread_detach); + ASAN_INTERCEPT_FUNC(pthread_exit); +# endif + +# if ASAN_INTERCEPT_TIMEDJOIN + ASAN_INTERCEPT_FUNC(pthread_timedjoin_np); +#endif + +#if ASAN_INTERCEPT_TRYJOIN + ASAN_INTERCEPT_FUNC(pthread_tryjoin_np); #endif // Intercept atexit function. @@ -741,8 +849,6 @@ void InitializeAsanInterceptors() { ASAN_INTERCEPT_FUNC(vfork); #endif - InitializePlatformInterceptors(); - VReport(1, "AddressSanitizer: libc interceptors initialized\n"); } diff --git a/libsanitizer/asan/asan_interceptors.h b/libsanitizer/asan/asan_interceptors.h index 9a6c22c764a9..e355c1258a9f 100644 --- a/libsanitizer/asan/asan_interceptors.h +++ b/libsanitizer/asan/asan_interceptors.h @@ -24,12 +24,12 @@ namespace __asan { void InitializeAsanInterceptors(); void InitializePlatformInterceptors(); -#define ENSURE_ASAN_INITED() \ - do { \ - CHECK(!asan_init_is_running); \ - if (UNLIKELY(!asan_inited)) { \ - AsanInitFromRtl(); \ - } \ +#define ENSURE_ASAN_INITED() \ + do { \ + CHECK(!AsanInitIsRunning()); \ + if (UNLIKELY(!AsanInited())) { \ + AsanInitFromRtl(); \ + } \ } while (0) } // namespace __asan @@ -42,12 +42,10 @@ void InitializePlatformInterceptors(); // Use macro to describe if specific function should be // intercepted on a given platform. #if !SANITIZER_WINDOWS -# define ASAN_INTERCEPT_ATOLL_AND_STRTOLL 1 # define ASAN_INTERCEPT__LONGJMP 1 # define ASAN_INTERCEPT_INDEX 1 # define ASAN_INTERCEPT_PTHREAD_CREATE 1 #else -# define ASAN_INTERCEPT_ATOLL_AND_STRTOLL 0 # define ASAN_INTERCEPT__LONGJMP 0 # define ASAN_INTERCEPT_INDEX 0 # define ASAN_INTERCEPT_PTHREAD_CREATE 0 @@ -78,15 +76,10 @@ void InitializePlatformInterceptors(); # define ASAN_INTERCEPT___LONGJMP_CHK 0 #endif -#if ASAN_HAS_EXCEPTIONS && !SANITIZER_WINDOWS && !SANITIZER_SOLARIS && \ - !SANITIZER_NETBSD +#if ASAN_HAS_EXCEPTIONS && !SANITIZER_SOLARIS && !SANITIZER_NETBSD && \ + (!SANITIZER_WINDOWS || (defined(__MINGW32__) && defined(__i386__))) # define ASAN_INTERCEPT___CXA_THROW 1 -# if ! defined(ASAN_HAS_CXA_RETHROW_PRIMARY_EXCEPTION) \ - || ASAN_HAS_CXA_RETHROW_PRIMARY_EXCEPTION -# define ASAN_INTERCEPT___CXA_RETHROW_PRIMARY_EXCEPTION 1 -# else -# define ASAN_INTERCEPT___CXA_RETHROW_PRIMARY_EXCEPTION 0 -# endif +# define ASAN_INTERCEPT___CXA_RETHROW_PRIMARY_EXCEPTION 1 # if defined(_GLIBCXX_SJLJ_EXCEPTIONS) || (SANITIZER_IOS && defined(__arm__)) # define ASAN_INTERCEPT__UNWIND_SJLJ_RAISEEXCEPTION 1 # else @@ -117,6 +110,14 @@ void InitializePlatformInterceptors(); # define ASAN_INTERCEPT___STRDUP 0 #endif +#if SANITIZER_GLIBC && ASAN_INTERCEPT_PTHREAD_CREATE +# define ASAN_INTERCEPT_TIMEDJOIN 1 +# define ASAN_INTERCEPT_TRYJOIN 1 +#else +# define ASAN_INTERCEPT_TIMEDJOIN 0 +# define ASAN_INTERCEPT_TRYJOIN 0 +#endif + #if SANITIZER_LINUX && \ (defined(__arm__) || defined(__aarch64__) || defined(__i386__) || \ defined(__x86_64__) || SANITIZER_RISCV64 || SANITIZER_LOONGARCH64) @@ -163,6 +164,12 @@ DECLARE_REAL(char*, strstr, const char *s1, const char *s2) # define ASAN_INTERCEPT_FUNC(name) # endif // SANITIZER_APPLE +#define ASAN_INTERCEPTOR_ENTER(ctx, func) \ + AsanInterceptorContext _ctx = {#func}; \ + ctx = (void *)&_ctx; \ + (void) ctx; +#define COMMON_INTERCEPT_FUNCTION(name) ASAN_INTERCEPT_FUNC(name) + #endif // !SANITIZER_FUCHSIA #endif // ASAN_INTERCEPTORS_H diff --git a/libsanitizer/asan/asan_interceptors_memintrinsics.cpp b/libsanitizer/asan/asan_interceptors_memintrinsics.cpp index 9c316bb95749..bdf328f89206 100644 --- a/libsanitizer/asan/asan_interceptors_memintrinsics.cpp +++ b/libsanitizer/asan/asan_interceptors_memintrinsics.cpp @@ -11,13 +11,54 @@ // ASan versions of memcpy, memmove, and memset. //===---------------------------------------------------------------------===// +#define SANITIZER_COMMON_NO_REDEFINE_BUILTINS + #include "asan_interceptors_memintrinsics.h" + +#include "asan_interceptors.h" #include "asan_report.h" #include "asan_stack.h" #include "asan_suppressions.h" using namespace __asan; +// memcpy is called during __asan_init() from the internals of printf(...). +// We do not treat memcpy with to==from as a bug. +// See http://llvm.org/bugs/show_bug.cgi?id=11763. +#define ASAN_MEMCPY_IMPL(ctx, to, from, size) \ + do { \ + if (LIKELY(replace_intrin_cached)) { \ + if (LIKELY(to != from)) { \ + CHECK_RANGES_OVERLAP("memcpy", to, size, from, size); \ + } \ + ASAN_READ_RANGE(ctx, from, size); \ + ASAN_WRITE_RANGE(ctx, to, size); \ + } else if (UNLIKELY(!AsanInited())) { \ + return internal_memcpy(to, from, size); \ + } \ + return REAL(memcpy)(to, from, size); \ + } while (0) + +// memset is called inside Printf. +#define ASAN_MEMSET_IMPL(ctx, block, c, size) \ + do { \ + if (LIKELY(replace_intrin_cached)) { \ + ASAN_WRITE_RANGE(ctx, block, size); \ + } else if (UNLIKELY(!AsanInited())) { \ + return internal_memset(block, c, size); \ + } \ + return REAL(memset)(block, c, size); \ + } while (0) + +#define ASAN_MEMMOVE_IMPL(ctx, to, from, size) \ + do { \ + if (LIKELY(replace_intrin_cached)) { \ + ASAN_READ_RANGE(ctx, from, size); \ + ASAN_WRITE_RANGE(ctx, to, size); \ + } \ + return internal_memmove(to, from, size); \ + } while (0) + void *__asan_memcpy(void *to, const void *from, uptr size) { ASAN_MEMCPY_IMPL(nullptr, to, from, size); } @@ -40,4 +81,26 @@ extern "C" decltype(__asan_memcpy) memcpy[[gnu::alias("__asan_memcpy")]]; extern "C" decltype(__asan_memmove) memmove[[gnu::alias("__asan_memmove")]]; extern "C" decltype(__asan_memset) memset[[gnu::alias("__asan_memset")]]; +#else // SANITIZER_FUCHSIA + +#define COMMON_INTERCEPTOR_MEMMOVE_IMPL(ctx, to, from, size) \ + do { \ + ASAN_INTERCEPTOR_ENTER(ctx, memmove); \ + ASAN_MEMMOVE_IMPL(ctx, to, from, size); \ + } while (false) + +#define COMMON_INTERCEPTOR_MEMCPY_IMPL(ctx, to, from, size) \ + do { \ + ASAN_INTERCEPTOR_ENTER(ctx, memcpy); \ + ASAN_MEMCPY_IMPL(ctx, to, from, size); \ + } while (false) + +#define COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, block, c, size) \ + do { \ + ASAN_INTERCEPTOR_ENTER(ctx, memset); \ + ASAN_MEMSET_IMPL(ctx, block, c, size); \ + } while (false) + +#include "sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc" + #endif // SANITIZER_FUCHSIA diff --git a/libsanitizer/asan/asan_interceptors_memintrinsics.h b/libsanitizer/asan/asan_interceptors_memintrinsics.h index bbc5390ceaa4..eb44f8f2f729 100644 --- a/libsanitizer/asan/asan_interceptors_memintrinsics.h +++ b/libsanitizer/asan/asan_interceptors_memintrinsics.h @@ -79,43 +79,6 @@ struct AsanInterceptorContext { } \ } while (0) -// memcpy is called during __asan_init() from the internals of printf(...). -// We do not treat memcpy with to==from as a bug. -// See http://llvm.org/bugs/show_bug.cgi?id=11763. -#define ASAN_MEMCPY_IMPL(ctx, to, from, size) \ - do { \ - if (LIKELY(replace_intrin_cached)) { \ - if (LIKELY(to != from)) { \ - CHECK_RANGES_OVERLAP("memcpy", to, size, from, size); \ - } \ - ASAN_READ_RANGE(ctx, from, size); \ - ASAN_WRITE_RANGE(ctx, to, size); \ - } else if (UNLIKELY(!asan_inited)) { \ - return internal_memcpy(to, from, size); \ - } \ - return REAL(memcpy)(to, from, size); \ - } while (0) - -// memset is called inside Printf. -#define ASAN_MEMSET_IMPL(ctx, block, c, size) \ - do { \ - if (LIKELY(replace_intrin_cached)) { \ - ASAN_WRITE_RANGE(ctx, block, size); \ - } else if (UNLIKELY(!asan_inited)) { \ - return internal_memset(block, c, size); \ - } \ - return REAL(memset)(block, c, size); \ - } while (0) - -#define ASAN_MEMMOVE_IMPL(ctx, to, from, size) \ - do { \ - if (LIKELY(replace_intrin_cached)) { \ - ASAN_READ_RANGE(ctx, from, size); \ - ASAN_WRITE_RANGE(ctx, to, size); \ - } \ - return internal_memmove(to, from, size); \ - } while (0) - #define ASAN_READ_RANGE(ctx, offset, size) \ ACCESS_MEMORY_RANGE(ctx, offset, size, false) #define ASAN_WRITE_RANGE(ctx, offset, size) \ diff --git a/libsanitizer/asan/asan_internal.h b/libsanitizer/asan/asan_internal.h index a5348e35b297..e2b1e9800f5b 100644 --- a/libsanitizer/asan/asan_internal.h +++ b/libsanitizer/asan/asan_internal.h @@ -130,9 +130,8 @@ void InstallAtExitCheckLeaks(); if (&__asan_on_error) \ __asan_on_error() -extern int asan_inited; -// Used to avoid infinite recursion in __asan_init(). -extern bool asan_init_is_running; +bool AsanInited(); +bool AsanInitIsRunning(); // Used to avoid infinite recursion in __asan_init(). extern bool replace_intrin_cached; extern void (*death_callback)(void); // These magic values are written to shadow for better error diff --git a/libsanitizer/asan/asan_mac.cpp b/libsanitizer/asan/asan_mac.cpp index c9bd5fb8e1a8..5d5146e0cde0 100644 --- a/libsanitizer/asan/asan_mac.cpp +++ b/libsanitizer/asan/asan_mac.cpp @@ -130,6 +130,18 @@ typedef void* dispatch_source_t; typedef u64 dispatch_time_t; typedef void (*dispatch_function_t)(void *block); typedef void* (*worker_t)(void *block); +typedef unsigned long dispatch_mach_reason; +typedef void *dispatch_mach_msg_t; +typedef int mach_error_t; +typedef void *dispatch_mach_t; + +typedef void (*dispatch_mach_handler_function_t)(void *context, + dispatch_mach_reason reason, + dispatch_mach_msg_t message, + mach_error_t error); +typedef void (^dispatch_mach_handler_t)(dispatch_mach_reason reason, + dispatch_mach_msg_t message, + mach_error_t error); // A wrapper for the ObjC blocks used to support libdispatch. typedef struct { @@ -142,8 +154,7 @@ ALWAYS_INLINE void asan_register_worker_thread(int parent_tid, StackTrace *stack) { AsanThread *t = GetCurrentThread(); if (!t) { - t = AsanThread::Create(/* start_routine */ nullptr, /* arg */ nullptr, - parent_tid, stack, /* detached */ true); + t = AsanThread::Create(parent_tid, stack, /* detached */ true); t->Init(); asanThreadRegistry().StartThread(t->tid(), GetTid(), ThreadType::Worker, nullptr); @@ -160,7 +171,7 @@ void asan_dispatch_call_block_and_release(void *block) { VReport(2, "asan_dispatch_call_block_and_release(): " "context: %p, pthread_self: %p\n", - block, pthread_self()); + block, (void*)pthread_self()); asan_register_worker_thread(context->parent_tid, &stack); // Call the original dispatcher for the block. context->func(context->block); @@ -193,7 +204,7 @@ asan_block_context_t *alloc_asan_context(void *ctxt, dispatch_function_t func, asan_block_context_t *asan_ctxt = alloc_asan_context(ctxt, func, &stack); \ if (Verbosity() >= 2) { \ Report(#dispatch_x_f "(): context: %p, pthread_self: %p\n", \ - asan_ctxt, pthread_self()); \ + (void*)asan_ctxt, (void*)pthread_self()); \ PRINT_CURRENT_STACK(); \ } \ return REAL(dispatch_x_f)(dq, (void*)asan_ctxt, \ @@ -210,7 +221,7 @@ INTERCEPTOR(void, dispatch_after_f, dispatch_time_t when, GET_STACK_TRACE_THREAD; asan_block_context_t *asan_ctxt = alloc_asan_context(ctxt, func, &stack); if (Verbosity() >= 2) { - Report("dispatch_after_f: %p\n", asan_ctxt); + Report("dispatch_after_f: %p\n", (void*)asan_ctxt); PRINT_CURRENT_STACK(); } return REAL(dispatch_after_f)(when, dq, (void*)asan_ctxt, @@ -224,7 +235,7 @@ INTERCEPTOR(void, dispatch_group_async_f, dispatch_group_t group, asan_block_context_t *asan_ctxt = alloc_asan_context(ctxt, func, &stack); if (Verbosity() >= 2) { Report("dispatch_group_async_f(): context: %p, pthread_self: %p\n", - asan_ctxt, pthread_self()); + (void*)asan_ctxt, (void*)pthread_self()); PRINT_CURRENT_STACK(); } REAL(dispatch_group_async_f)(group, dq, (void*)asan_ctxt, @@ -241,6 +252,8 @@ void dispatch_after(dispatch_time_t when, dispatch_queue_t queue, void dispatch_source_set_cancel_handler(dispatch_source_t ds, void(^work)(void)); void dispatch_source_set_event_handler(dispatch_source_t ds, void(^work)(void)); +dispatch_mach_t dispatch_mach_create(const char *label, dispatch_queue_t queue, + dispatch_mach_handler_t handler); } #define GET_ASAN_BLOCK(work) \ @@ -290,6 +303,34 @@ INTERCEPTOR(void, dispatch_source_set_event_handler, GET_ASAN_BLOCK(work); REAL(dispatch_source_set_event_handler)(ds, asan_block); } + +INTERCEPTOR(void *, dispatch_mach_create, const char *label, + dispatch_queue_t dq, dispatch_mach_handler_t handler) { + int parent_tid = GetCurrentTidOrInvalid(); + return REAL(dispatch_mach_create)( + label, dq, + ^(dispatch_mach_reason reason, dispatch_mach_msg_t message, + mach_error_t error) { + GET_STACK_TRACE_THREAD; + asan_register_worker_thread(parent_tid, &stack); + handler(reason, message, error); + }); +} + +INTERCEPTOR(void *, dispatch_mach_create_f, const char *label, + dispatch_queue_t dq, void *ctxt, + dispatch_mach_handler_function_t handler) { + int parent_tid = GetCurrentTidOrInvalid(); + return REAL(dispatch_mach_create)( + label, dq, + ^(dispatch_mach_reason reason, dispatch_mach_msg_t message, + mach_error_t error) { + GET_STACK_TRACE_THREAD; + asan_register_worker_thread(parent_tid, &stack); + handler(ctxt, reason, message, error); + }); +} + #endif #endif // SANITIZER_APPLE diff --git a/libsanitizer/asan/asan_malloc_linux.cpp b/libsanitizer/asan/asan_malloc_linux.cpp index bab80b96f584..0ba74c5d7143 100644 --- a/libsanitizer/asan/asan_malloc_linux.cpp +++ b/libsanitizer/asan/asan_malloc_linux.cpp @@ -31,7 +31,7 @@ using namespace __asan; struct DlsymAlloc : public DlSymAllocator { - static bool UseImpl() { return asan_init_is_running; } + static bool UseImpl() { return AsanInitIsRunning(); } static void OnAllocate(const void *ptr, uptr size) { # if CAN_SANITIZE_LEAKS // Suppress leaks from dlerror(). Previously dlsym hack on global array was diff --git a/libsanitizer/asan/asan_malloc_mac.cpp b/libsanitizer/asan/asan_malloc_mac.cpp index 924d1f12640a..d2380ee62bf3 100644 --- a/libsanitizer/asan/asan_malloc_mac.cpp +++ b/libsanitizer/asan/asan_malloc_mac.cpp @@ -23,45 +23,44 @@ using namespace __asan; #define COMMON_MALLOC_ZONE_NAME "asan" #define COMMON_MALLOC_ENTER() ENSURE_ASAN_INITED() -#define COMMON_MALLOC_SANITIZER_INITIALIZED asan_inited -#define COMMON_MALLOC_FORCE_LOCK() asan_mz_force_lock() -#define COMMON_MALLOC_FORCE_UNLOCK() asan_mz_force_unlock() -#define COMMON_MALLOC_MEMALIGN(alignment, size) \ - GET_STACK_TRACE_MALLOC; \ - void *p = asan_memalign(alignment, size, &stack, FROM_MALLOC) -#define COMMON_MALLOC_MALLOC(size) \ - GET_STACK_TRACE_MALLOC; \ - void *p = asan_malloc(size, &stack) -#define COMMON_MALLOC_REALLOC(ptr, size) \ - GET_STACK_TRACE_MALLOC; \ - void *p = asan_realloc(ptr, size, &stack); -#define COMMON_MALLOC_CALLOC(count, size) \ - GET_STACK_TRACE_MALLOC; \ - void *p = asan_calloc(count, size, &stack); -#define COMMON_MALLOC_POSIX_MEMALIGN(memptr, alignment, size) \ - GET_STACK_TRACE_MALLOC; \ - int res = asan_posix_memalign(memptr, alignment, size, &stack); -#define COMMON_MALLOC_VALLOC(size) \ - GET_STACK_TRACE_MALLOC; \ - void *p = asan_memalign(GetPageSizeCached(), size, &stack, FROM_MALLOC); -#define COMMON_MALLOC_FREE(ptr) \ - GET_STACK_TRACE_FREE; \ - asan_free(ptr, &stack, FROM_MALLOC); -#define COMMON_MALLOC_SIZE(ptr) \ - uptr size = asan_mz_size(ptr); -#define COMMON_MALLOC_FILL_STATS(zone, stats) \ - AsanMallocStats malloc_stats; \ - FillMallocStatistics(&malloc_stats); \ - CHECK(sizeof(malloc_statistics_t) == sizeof(AsanMallocStats)); \ - internal_memcpy(stats, &malloc_stats, sizeof(malloc_statistics_t)); -#define COMMON_MALLOC_REPORT_UNKNOWN_REALLOC(ptr, zone_ptr, zone_name) \ - GET_STACK_TRACE_FREE; \ - ReportMacMzReallocUnknown((uptr)ptr, (uptr)zone_ptr, zone_name, &stack); -#define COMMON_MALLOC_NAMESPACE __asan -#define COMMON_MALLOC_HAS_ZONE_ENUMERATOR 0 -#define COMMON_MALLOC_HAS_EXTRA_INTROSPECTION_INIT 1 +# define COMMON_MALLOC_SANITIZER_INITIALIZED AsanInited() +# define COMMON_MALLOC_FORCE_LOCK() asan_mz_force_lock() +# define COMMON_MALLOC_FORCE_UNLOCK() asan_mz_force_unlock() +# define COMMON_MALLOC_MEMALIGN(alignment, size) \ + GET_STACK_TRACE_MALLOC; \ + void *p = asan_memalign(alignment, size, &stack, FROM_MALLOC) +# define COMMON_MALLOC_MALLOC(size) \ + GET_STACK_TRACE_MALLOC; \ + void *p = asan_malloc(size, &stack) +# define COMMON_MALLOC_REALLOC(ptr, size) \ + GET_STACK_TRACE_MALLOC; \ + void *p = asan_realloc(ptr, size, &stack); +# define COMMON_MALLOC_CALLOC(count, size) \ + GET_STACK_TRACE_MALLOC; \ + void *p = asan_calloc(count, size, &stack); +# define COMMON_MALLOC_POSIX_MEMALIGN(memptr, alignment, size) \ + GET_STACK_TRACE_MALLOC; \ + int res = asan_posix_memalign(memptr, alignment, size, &stack); +# define COMMON_MALLOC_VALLOC(size) \ + GET_STACK_TRACE_MALLOC; \ + void *p = asan_memalign(GetPageSizeCached(), size, &stack, FROM_MALLOC); +# define COMMON_MALLOC_FREE(ptr) \ + GET_STACK_TRACE_FREE; \ + asan_free(ptr, &stack, FROM_MALLOC); +# define COMMON_MALLOC_SIZE(ptr) uptr size = asan_mz_size(ptr); +# define COMMON_MALLOC_FILL_STATS(zone, stats) \ + AsanMallocStats malloc_stats; \ + FillMallocStatistics(&malloc_stats); \ + CHECK(sizeof(malloc_statistics_t) == sizeof(AsanMallocStats)); \ + internal_memcpy(stats, &malloc_stats, sizeof(malloc_statistics_t)); +# define COMMON_MALLOC_REPORT_UNKNOWN_REALLOC(ptr, zone_ptr, zone_name) \ + GET_STACK_TRACE_FREE; \ + ReportMacMzReallocUnknown((uptr)ptr, (uptr)zone_ptr, zone_name, &stack); +# define COMMON_MALLOC_NAMESPACE __asan +# define COMMON_MALLOC_HAS_ZONE_ENUMERATOR 0 +# define COMMON_MALLOC_HAS_EXTRA_INTROSPECTION_INIT 1 -#include "sanitizer_common/sanitizer_malloc_mac.inc" +# include "sanitizer_common/sanitizer_malloc_mac.inc" namespace COMMON_MALLOC_NAMESPACE { diff --git a/libsanitizer/asan/asan_malloc_win.cpp b/libsanitizer/asan/asan_malloc_win.cpp index ff78d7646a90..7e1d04c36dd5 100644 --- a/libsanitizer/asan/asan_malloc_win.cpp +++ b/libsanitizer/asan/asan_malloc_win.cpp @@ -211,7 +211,7 @@ INTERCEPTOR_WINAPI(size_t, HeapSize, HANDLE hHeap, DWORD dwFlags, // interception takes place, so if it is not owned by the RTL heap we can // pass it to the ASAN heap for inspection. if (flags()->windows_hook_rtl_allocators) { - if (!asan_inited || OWNED_BY_RTL(hHeap, lpMem)) + if (!AsanInited() || OWNED_BY_RTL(hHeap, lpMem)) return REAL(HeapSize)(hHeap, dwFlags, lpMem); } else { CHECK(dwFlags == 0 && "unsupported heap flags"); @@ -226,7 +226,7 @@ INTERCEPTOR_WINAPI(LPVOID, HeapAlloc, HANDLE hHeap, DWORD dwFlags, // If the ASAN runtime is not initialized, or we encounter an unsupported // flag, fall back to the original allocator. if (flags()->windows_hook_rtl_allocators) { - if (UNLIKELY(!asan_inited || + if (UNLIKELY(!AsanInited() || (dwFlags & HEAP_ALLOCATE_UNSUPPORTED_FLAGS) != 0)) { return REAL(HeapAlloc)(hHeap, dwFlags, dwBytes); } @@ -297,7 +297,7 @@ void *SharedReAlloc(ReAllocFunction reallocFunc, SizeFunction heapSizeFunc, // If this heap block which was allocated before the ASAN // runtime came up, use the real HeapFree function. - if (UNLIKELY(!asan_inited)) { + if (UNLIKELY(!AsanInited())) { return reallocFunc(hHeap, dwFlags, lpMem, dwBytes); } bool only_asan_supported_flags = @@ -420,7 +420,7 @@ size_t RtlSizeHeap(void* HeapHandle, DWORD Flags, void* BaseAddress); INTERCEPTOR_WINAPI(size_t, RtlSizeHeap, HANDLE HeapHandle, DWORD Flags, void* BaseAddress) { if (!flags()->windows_hook_rtl_allocators || - UNLIKELY(!asan_inited || OWNED_BY_RTL(HeapHandle, BaseAddress))) { + UNLIKELY(!AsanInited() || OWNED_BY_RTL(HeapHandle, BaseAddress))) { return REAL(RtlSizeHeap)(HeapHandle, Flags, BaseAddress); } GET_CURRENT_PC_BP_SP; @@ -448,7 +448,7 @@ INTERCEPTOR_WINAPI(void*, RtlAllocateHeap, HANDLE HeapHandle, DWORD Flags, // If the ASAN runtime is not initialized, or we encounter an unsupported // flag, fall back to the original allocator. if (!flags()->windows_hook_rtl_allocators || - UNLIKELY(!asan_inited || + UNLIKELY(!AsanInited() || (Flags & HEAP_ALLOCATE_UNSUPPORTED_FLAGS) != 0)) { return REAL(RtlAllocateHeap)(HeapHandle, Flags, Size); } diff --git a/libsanitizer/asan/asan_mapping.h b/libsanitizer/asan/asan_mapping.h index 47ccf8444d31..c5f95c07a210 100644 --- a/libsanitizer/asan/asan_mapping.h +++ b/libsanitizer/asan/asan_mapping.h @@ -190,7 +190,7 @@ # elif defined(__aarch64__) # define ASAN_SHADOW_OFFSET_CONST 0x0000001000000000 # elif defined(__powerpc64__) -# define ASAN_SHADOW_OFFSET_CONST 0x0000020000000000 +# define ASAN_SHADOW_OFFSET_CONST 0x0000100000000000 # elif defined(__s390x__) # define ASAN_SHADOW_OFFSET_CONST 0x0010000000000000 # elif SANITIZER_FREEBSD diff --git a/libsanitizer/asan/asan_poisoning.cpp b/libsanitizer/asan/asan_poisoning.cpp index 5164b7d860f4..746ad61813c6 100644 --- a/libsanitizer/asan/asan_poisoning.cpp +++ b/libsanitizer/asan/asan_poisoning.cpp @@ -160,10 +160,6 @@ void __asan_unpoison_memory_region(void const volatile *addr, uptr size) { return; } CHECK_LT(beg.chunk, end.chunk); - if (beg.offset > 0) { - *beg.chunk = 0; - beg.chunk++; - } REAL(memset)(beg.chunk, 0, end.chunk - beg.chunk); if (end.offset > 0 && end.value != 0) { *end.chunk = Max(end.value, end.offset); @@ -449,11 +445,14 @@ void __sanitizer_annotate_contiguous_container(const void *beg_p, // FIXME: Two of these three checks are disabled until we fix // https://github.com/google/sanitizers/issues/258. // if (d1 != d2) - // CHECK_EQ(*(u8*)MemToShadow(d1), old_mid - d1); - if (a + granularity <= d1) - CHECK_EQ(*(u8 *)MemToShadow(a), 0); + // DCHECK_EQ(*(u8*)MemToShadow(d1), old_mid - d1); + // + // NOTE: curly brackets for the "if" below to silence a MSVC warning. + if (a + granularity <= d1) { + DCHECK_EQ(*(u8 *)MemToShadow(a), 0); + } // if (d2 + granularity <= c && c <= end) - // CHECK_EQ(*(u8 *)MemToShadow(c - granularity), + // DCHECK_EQ(*(u8 *)MemToShadow(c - granularity), // kAsanContiguousContainerOOBMagic); uptr b1 = RoundDownTo(new_end, granularity); diff --git a/libsanitizer/asan/asan_posix.cpp b/libsanitizer/asan/asan_posix.cpp index 765f4a26cd7a..e1f66641617c 100644 --- a/libsanitizer/asan/asan_posix.cpp +++ b/libsanitizer/asan/asan_posix.cpp @@ -138,6 +138,12 @@ void PlatformTSDDtor(void *tsd) { CHECK_EQ(0, pthread_setspecific(tsd_key, tsd)); return; } +# if SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD || \ + SANITIZER_SOLARIS + // After this point it's unsafe to execute signal handlers which may be + // instrumented. It's probably not just a Linux issue. + BlockSignals(); +# endif AsanThread::TSDDtor(tsd); } #endif diff --git a/libsanitizer/asan/asan_report.cpp b/libsanitizer/asan/asan_report.cpp index f2c04342e778..7603e8131154 100644 --- a/libsanitizer/asan/asan_report.cpp +++ b/libsanitizer/asan/asan_report.cpp @@ -60,9 +60,9 @@ void AppendToErrorMessageBuffer(const char *buffer) { void PrintMemoryByte(InternalScopedString *str, const char *before, u8 byte, bool in_shadow, const char *after) { Decorator d; - str->append("%s%s%x%x%s%s", before, - in_shadow ? d.ShadowByte(byte) : d.MemoryByte(), byte >> 4, - byte & 15, d.Default(), after); + str->AppendF("%s%s%x%x%s%s", before, + in_shadow ? d.ShadowByte(byte) : d.MemoryByte(), byte >> 4, + byte & 15, d.Default(), after); } static void PrintZoneForPointer(uptr ptr, uptr zone_ptr, diff --git a/libsanitizer/asan/asan_report.h b/libsanitizer/asan/asan_report.h index 248e30dd42bd..3540b3b4b1bf 100644 --- a/libsanitizer/asan/asan_report.h +++ b/libsanitizer/asan/asan_report.h @@ -35,7 +35,8 @@ int GetGlobalsForAddress(uptr addr, __asan_global *globals, u32 *reg_sites, const char *MaybeDemangleGlobalName(const char *name); void PrintGlobalNameIfASCII(InternalScopedString *str, const __asan_global &g); -void PrintGlobalLocation(InternalScopedString *str, const __asan_global &g); +void PrintGlobalLocation(InternalScopedString *str, const __asan_global &g, + bool print_module_name); void PrintMemoryByte(InternalScopedString *str, const char *before, u8 byte, bool in_shadow, const char *after = "\n"); diff --git a/libsanitizer/asan/asan_rtl.cpp b/libsanitizer/asan/asan_rtl.cpp index 853083182b48..d1e7856973b4 100644 --- a/libsanitizer/asan/asan_rtl.cpp +++ b/libsanitizer/asan/asan_rtl.cpp @@ -71,8 +71,17 @@ static void CheckUnwind() { } // -------------------------- Globals --------------------- {{{1 -int asan_inited; -bool asan_init_is_running; +static int asan_inited = 0; +static int asan_init_is_running = 0; + +void SetAsanInited(u32 val) { asan_inited = val; } + +void SetAsanInitIsRunning(u32 val) { asan_init_is_running = val; } + +bool AsanInited() { return asan_inited == 1; } + +bool AsanInitIsRunning() { return asan_init_is_running == 1; } + bool replace_intrin_cached; #if !ASAN_FIXED_MAPPING @@ -382,10 +391,11 @@ void PrintAddressSpaceLayout() { } static void AsanInitInternal() { - if (LIKELY(asan_inited)) return; + if (LIKELY(AsanInited())) + return; SanitizerToolName = "AddressSanitizer"; - CHECK(!asan_init_is_running && "ASan init calls itself!"); - asan_init_is_running = true; + CHECK(!AsanInitIsRunning() && "ASan init calls itself!"); + SetAsanInitIsRunning(1); CacheBinaryName(); @@ -398,7 +408,7 @@ static void AsanInitInternal() { // Stop performing init at this point if we are being loaded via // dlopen() and the platform supports it. if (SANITIZER_SUPPORTS_INIT_FOR_DLOPEN && UNLIKELY(HandleDlopenInit())) { - asan_init_is_running = false; + SetAsanInitIsRunning(0); VReport(1, "AddressSanitizer init is being performed for dlopen().\n"); return; } @@ -460,8 +470,8 @@ static void AsanInitInternal() { // On Linux AsanThread::ThreadStart() calls malloc() that's why asan_inited // should be set to 1 prior to initializing the threads. replace_intrin_cached = flags()->replace_intrin; - asan_inited = 1; - asan_init_is_running = false; + SetAsanInited(1); + SetAsanInitIsRunning(0); if (flags()->atexit) Atexit(asan_atexit); @@ -583,7 +593,7 @@ static void UnpoisonFakeStack() { using namespace __asan; void NOINLINE __asan_handle_no_return() { - if (asan_init_is_running) + if (AsanInitIsRunning()) return; if (!PlatformUnpoisonStacks()) diff --git a/libsanitizer/asan/asan_rtl_x86_64.S b/libsanitizer/asan/asan_rtl_x86_64.S index d93b5ed2a7fe..0b7363018f42 100644 --- a/libsanitizer/asan/asan_rtl_x86_64.S +++ b/libsanitizer/asan/asan_rtl_x86_64.S @@ -35,35 +35,29 @@ RLABEL(reg, op, s, add): ;\ #define ASAN_MEMORY_ACCESS_EXTRA_CHECK_1(reg, op, i) \ CLABEL(reg, op, 1, i): ;\ - push %rcx ;\ - mov %##reg,%rcx ;\ - and $0x7,%ecx ;\ - cmp %r10d,%ecx ;\ - pop %rcx ;\ + mov %##reg,%r11 ;\ + and $0x7,%r11d ;\ + cmp %r10d,%r11d ;\ jl RLABEL(reg, op, 1, i);\ mov %##reg,%rdi ;\ jmp __asan_report_##op##1_asm ;\ #define ASAN_MEMORY_ACCESS_EXTRA_CHECK_2(reg, op, i) \ CLABEL(reg, op, 2, i): ;\ - push %rcx ;\ - mov %##reg,%rcx ;\ - and $0x7,%ecx ;\ - add $0x1,%ecx ;\ - cmp %r10d,%ecx ;\ - pop %rcx ;\ + mov %##reg,%r11 ;\ + and $0x7,%r11d ;\ + add $0x1,%r11d ;\ + cmp %r10d,%r11d ;\ jl RLABEL(reg, op, 2, i);\ mov %##reg,%rdi ;\ jmp __asan_report_##op##2_asm ;\ #define ASAN_MEMORY_ACCESS_EXTRA_CHECK_4(reg, op, i) \ CLABEL(reg, op, 4, i): ;\ - push %rcx ;\ - mov %##reg,%rcx ;\ - and $0x7,%ecx ;\ - add $0x3,%ecx ;\ - cmp %r10d,%ecx ;\ - pop %rcx ;\ + mov %##reg,%r11 ;\ + and $0x7,%r11d ;\ + add $0x3,%r11d ;\ + cmp %r10d,%r11d ;\ jl RLABEL(reg, op, 4, i);\ mov %##reg,%rdi ;\ jmp __asan_report_##op##4_asm ;\ diff --git a/libsanitizer/asan/asan_stack.cpp b/libsanitizer/asan/asan_stack.cpp index 048295d6928a..764c6ac193fb 100644 --- a/libsanitizer/asan/asan_stack.cpp +++ b/libsanitizer/asan/asan_stack.cpp @@ -57,7 +57,7 @@ void __sanitizer::BufferedStackTrace::UnwindImpl( uptr pc, uptr bp, void *context, bool request_fast, u32 max_depth) { using namespace __asan; size = 0; - if (UNLIKELY(!asan_inited)) + if (UNLIKELY(!AsanInited())) return; request_fast = StackTrace::WillUseFastUnwind(request_fast); AsanThread *t = GetCurrentThread(); diff --git a/libsanitizer/asan/asan_stack.h b/libsanitizer/asan/asan_stack.h index b9575d2f427e..02a76af847ae 100644 --- a/libsanitizer/asan/asan_stack.h +++ b/libsanitizer/asan/asan_stack.h @@ -32,24 +32,24 @@ u32 GetMallocContextSize(); // as early as possible (in functions exposed to the user), as we generally // don't want stack trace to contain functions from ASan internals. -#define GET_STACK_TRACE(max_size, fast) \ - BufferedStackTrace stack; \ - if (max_size <= 2) { \ - stack.size = max_size; \ - if (max_size > 0) { \ - stack.top_frame_bp = GET_CURRENT_FRAME(); \ - stack.trace_buffer[0] = StackTrace::GetCurrentPc(); \ - if (max_size > 1) stack.trace_buffer[1] = GET_CALLER_PC(); \ - } \ - } else { \ - stack.Unwind(StackTrace::GetCurrentPc(), \ - GET_CURRENT_FRAME(), nullptr, fast, max_size); \ +#define GET_STACK_TRACE(max_size, fast) \ + UNINITIALIZED BufferedStackTrace stack; \ + if (max_size <= 2) { \ + stack.size = max_size; \ + if (max_size > 0) { \ + stack.top_frame_bp = GET_CURRENT_FRAME(); \ + stack.trace_buffer[0] = StackTrace::GetCurrentPc(); \ + if (max_size > 1) \ + stack.trace_buffer[1] = GET_CALLER_PC(); \ + } \ + } else { \ + stack.Unwind(StackTrace::GetCurrentPc(), GET_CURRENT_FRAME(), nullptr, \ + fast, max_size); \ } -#define GET_STACK_TRACE_FATAL(pc, bp) \ - BufferedStackTrace stack; \ - stack.Unwind(pc, bp, nullptr, \ - common_flags()->fast_unwind_on_fatal) +#define GET_STACK_TRACE_FATAL(pc, bp) \ + UNINITIALIZED BufferedStackTrace stack; \ + stack.Unwind(pc, bp, nullptr, common_flags()->fast_unwind_on_fatal) #define GET_STACK_TRACE_FATAL_HERE \ GET_STACK_TRACE(kStackTraceMax, common_flags()->fast_unwind_on_fatal) diff --git a/libsanitizer/asan/asan_stats.cpp b/libsanitizer/asan/asan_stats.cpp index 9a715ea76fee..78cb30ec763d 100644 --- a/libsanitizer/asan/asan_stats.cpp +++ b/libsanitizer/asan/asan_stats.cpp @@ -142,7 +142,7 @@ uptr __sanitizer_get_current_allocated_bytes() { uptr freed = stats.freed; // Return sane value if malloced < freed due to racy // way we update accumulated stats. - return (malloced > freed) ? malloced - freed : 1; + return (malloced > freed) ? malloced - freed : 0; } uptr __sanitizer_get_heap_size() { @@ -161,7 +161,7 @@ uptr __sanitizer_get_free_bytes() { + stats.malloced_redzones; // Return sane value if total_free < total_used due to racy // way we update accumulated stats. - return (total_free > total_used) ? total_free - total_used : 1; + return (total_free > total_used) ? total_free - total_used : 0; } uptr __sanitizer_get_unmapped_bytes() { diff --git a/libsanitizer/asan/asan_thread.cpp b/libsanitizer/asan/asan_thread.cpp index 3f6e58e87758..8798968947e8 100644 --- a/libsanitizer/asan/asan_thread.cpp +++ b/libsanitizer/asan/asan_thread.cpp @@ -28,7 +28,7 @@ namespace __asan { // AsanThreadContext implementation. void AsanThreadContext::OnCreated(void *arg) { - CreateThreadContextArgs *args = static_cast(arg); + CreateThreadContextArgs *args = static_cast(arg); if (args->stack) stack_id = StackDepotPut(*args->stack); thread = args->thread; @@ -40,34 +40,49 @@ void AsanThreadContext::OnFinished() { thread = nullptr; } -// MIPS requires aligned address -static ALIGNED(16) char thread_registry_placeholder[sizeof(ThreadRegistry)]; static ThreadRegistry *asan_thread_registry; +static ThreadArgRetval *thread_data; static Mutex mu_for_thread_context; -static LowLevelAllocator allocator_for_thread_context; static ThreadContextBase *GetAsanThreadContext(u32 tid) { Lock lock(&mu_for_thread_context); - return new(allocator_for_thread_context) AsanThreadContext(tid); + return new (GetGlobalLowLevelAllocator()) AsanThreadContext(tid); } -ThreadRegistry &asanThreadRegistry() { +static void InitThreads() { static bool initialized; // Don't worry about thread_safety - this should be called when there is // a single thread. - if (!initialized) { - // Never reuse ASan threads: we store pointer to AsanThreadContext - // in TSD and can't reliably tell when no more TSD destructors will - // be called. It would be wrong to reuse AsanThreadContext for another - // thread before all TSD destructors will be called for it. - asan_thread_registry = - new (thread_registry_placeholder) ThreadRegistry(GetAsanThreadContext); - initialized = true; - } + if (LIKELY(initialized)) + return; + // Never reuse ASan threads: we store pointer to AsanThreadContext + // in TSD and can't reliably tell when no more TSD destructors will + // be called. It would be wrong to reuse AsanThreadContext for another + // thread before all TSD destructors will be called for it. + + // MIPS requires aligned address + static ALIGNED(alignof( + ThreadRegistry)) char thread_registry_placeholder[sizeof(ThreadRegistry)]; + static ALIGNED(alignof( + ThreadArgRetval)) char thread_data_placeholder[sizeof(ThreadArgRetval)]; + + asan_thread_registry = + new (thread_registry_placeholder) ThreadRegistry(GetAsanThreadContext); + thread_data = new (thread_data_placeholder) ThreadArgRetval(); + initialized = true; +} + +ThreadRegistry &asanThreadRegistry() { + InitThreads(); return *asan_thread_registry; } +ThreadArgRetval &asanThreadArgRetval() { + InitThreads(); + return *thread_data; +} + AsanThreadContext *GetThreadContextByTidLocked(u32 tid) { return static_cast( asanThreadRegistry().GetThreadLocked(tid)); @@ -75,22 +90,29 @@ AsanThreadContext *GetThreadContextByTidLocked(u32 tid) { // AsanThread implementation. -AsanThread *AsanThread::Create(thread_callback_t start_routine, void *arg, +AsanThread *AsanThread::Create(const void *start_data, uptr data_size, u32 parent_tid, StackTrace *stack, bool detached) { uptr PageSize = GetPageSizeCached(); uptr size = RoundUpTo(sizeof(AsanThread), PageSize); - AsanThread *thread = (AsanThread*)MmapOrDie(size, __func__); - thread->start_routine_ = start_routine; - thread->arg_ = arg; + AsanThread *thread = (AsanThread *)MmapOrDie(size, __func__); + if (data_size) { + uptr availible_size = (uptr)thread + size - (uptr)(thread->start_data_); + CHECK_LE(data_size, availible_size); + internal_memcpy(thread->start_data_, start_data, data_size); + } AsanThreadContext::CreateThreadContextArgs args = {thread, stack}; asanThreadRegistry().CreateThread(0, detached, parent_tid, &args); return thread; } +void AsanThread::GetStartData(void *out, uptr out_size) const { + internal_memcpy(out, start_data_, out_size); +} + void AsanThread::TSDDtor(void *tsd) { - AsanThreadContext *context = (AsanThreadContext*)tsd; + AsanThreadContext *context = (AsanThreadContext *)tsd; VReport(1, "T%d TSDDtor\n", context->tid); if (context->thread) context->thread->Destroy(); @@ -144,8 +166,7 @@ void AsanThread::StartSwitchFiber(FakeStack **fake_stack_save, uptr bottom, current_fake_stack->Destroy(this->tid()); } -void AsanThread::FinishSwitchFiber(FakeStack *fake_stack_save, - uptr *bottom_old, +void AsanThread::FinishSwitchFiber(FakeStack *fake_stack_save, uptr *bottom_old, uptr *size_old) { if (!atomic_load(&stack_switching_, memory_order_relaxed)) { Report("ERROR: finishing a fiber switch that has not started\n"); @@ -171,7 +192,8 @@ void AsanThread::FinishSwitchFiber(FakeStack *fake_stack_save, inline AsanThread::StackBounds AsanThread::GetStackBounds() const { if (!atomic_load(&stack_switching_, memory_order_acquire)) { // Make sure the stack bounds are fully initialized. - if (stack_bottom_ >= stack_top_) return {0, 0}; + if (stack_bottom_ >= stack_top_) + return {0, 0}; return {stack_bottom_, stack_top_}; } char local; @@ -184,13 +206,9 @@ inline AsanThread::StackBounds AsanThread::GetStackBounds() const { return {stack_bottom_, stack_top_}; } -uptr AsanThread::stack_top() { - return GetStackBounds().top; -} +uptr AsanThread::stack_top() { return GetStackBounds().top; } -uptr AsanThread::stack_bottom() { - return GetStackBounds().bottom; -} +uptr AsanThread::stack_bottom() { return GetStackBounds().bottom; } uptr AsanThread::stack_size() { const auto bounds = GetStackBounds(); @@ -211,8 +229,8 @@ FakeStack *AsanThread::AsyncSignalSafeLazyInitFakeStack() { // This CAS checks if the state was 0 and if so changes it to state 1, // if that was successful, it initializes the pointer. if (atomic_compare_exchange_strong( - reinterpret_cast(&fake_stack_), &old_val, 1UL, - memory_order_relaxed)) { + reinterpret_cast(&fake_stack_), &old_val, 1UL, + memory_order_relaxed)) { uptr stack_size_log = Log2(RoundUpToPowerOfTwo(stack_size)); CHECK_LE(flags()->min_uar_stack_size_log, flags()->max_uar_stack_size_log); stack_size_log = @@ -261,36 +279,17 @@ void AsanThread::Init(const InitOptions *options) { // asan_fuchsia.c definies CreateMainThread and SetThreadStackAndTls. #if !SANITIZER_FUCHSIA -thread_return_t AsanThread::ThreadStart(tid_t os_id) { +void AsanThread::ThreadStart(tid_t os_id) { Init(); asanThreadRegistry().StartThread(tid(), os_id, ThreadType::Regular, nullptr); - if (common_flags()->use_sigaltstack) SetAlternateSignalStack(); - - if (!start_routine_) { - // start_routine_ == 0 if we're on the main thread or on one of the - // OS X libdispatch worker threads. But nobody is supposed to call - // ThreadStart() for the worker threads. - CHECK_EQ(tid(), 0); - return 0; - } - - thread_return_t res = start_routine_(arg_); - - // On POSIX systems we defer this to the TSD destructor. LSan will consider - // the thread's memory as non-live from the moment we call Destroy(), even - // though that memory might contain pointers to heap objects which will be - // cleaned up by a user-defined TSD destructor. Thus, calling Destroy() before - // the TSD destructors have run might cause false positives in LSan. - if (!SANITIZER_POSIX) - this->Destroy(); - - return res; + if (common_flags()->use_sigaltstack) + SetAlternateSignalStack(); } AsanThread *CreateMainThread() { AsanThread *main_thread = AsanThread::Create( - /* start_routine */ nullptr, /* arg */ nullptr, /* parent_tid */ kMainTid, + /* parent_tid */ kMainTid, /* stack */ nullptr, /* detached */ true); SetCurrentThread(main_thread); main_thread->ThreadStart(internal_getpid()); @@ -341,14 +340,14 @@ bool AsanThread::GetStackFrameAccessByAddr(uptr addr, bottom = fake_stack->AddrIsInFakeStack(addr); CHECK(bottom); access->offset = addr - bottom; - access->frame_pc = ((uptr*)bottom)[2]; - access->frame_descr = (const char *)((uptr*)bottom)[1]; + access->frame_pc = ((uptr *)bottom)[2]; + access->frame_descr = (const char *)((uptr *)bottom)[1]; return true; } uptr aligned_addr = RoundDownTo(addr, SANITIZER_WORDSIZE / 8); // align addr. uptr mem_ptr = RoundDownTo(aligned_addr, ASAN_SHADOW_GRANULARITY); - u8 *shadow_ptr = (u8*)MemToShadow(aligned_addr); - u8 *shadow_bottom = (u8*)MemToShadow(bottom); + u8 *shadow_ptr = (u8 *)MemToShadow(aligned_addr); + u8 *shadow_bottom = (u8 *)MemToShadow(bottom); while (shadow_ptr >= shadow_bottom && *shadow_ptr != kAsanStackLeftRedzoneMagic) { @@ -370,7 +369,7 @@ bool AsanThread::GetStackFrameAccessByAddr(uptr addr, CHECK(ptr[0] == kCurrentStackFrameMagic); access->offset = addr - (uptr)ptr; access->frame_pc = ptr[2]; - access->frame_descr = (const char*)ptr[1]; + access->frame_descr = (const char *)ptr[1]; return true; } @@ -388,8 +387,8 @@ uptr AsanThread::GetStackVariableShadowStart(uptr addr) { } uptr aligned_addr = RoundDownTo(addr, SANITIZER_WORDSIZE / 8); // align addr. - u8 *shadow_ptr = (u8*)MemToShadow(aligned_addr); - u8 *shadow_bottom = (u8*)MemToShadow(bottom); + u8 *shadow_ptr = (u8 *)MemToShadow(aligned_addr); + u8 *shadow_bottom = (u8 *)MemToShadow(bottom); while (shadow_ptr >= shadow_bottom && (*shadow_ptr != kAsanStackLeftRedzoneMagic && @@ -473,16 +472,23 @@ void EnsureMainThreadIDIsCorrect() { __asan::AsanThread *GetAsanThreadByOsIDLocked(tid_t os_id) { __asan::AsanThreadContext *context = static_cast<__asan::AsanThreadContext *>( __asan::asanThreadRegistry().FindThreadContextByOsIDLocked(os_id)); - if (!context) return nullptr; + if (!context) + return nullptr; return context->thread; } -} // namespace __asan +} // namespace __asan // --- Implementation of LSan-specific functions --- {{{1 namespace __lsan { -void LockThreadRegistry() { __asan::asanThreadRegistry().Lock(); } +void LockThreads() { + __asan::asanThreadRegistry().Lock(); + __asan::asanThreadArgRetval().Lock(); +} -void UnlockThreadRegistry() { __asan::asanThreadRegistry().Unlock(); } +void UnlockThreads() { + __asan::asanThreadArgRetval().Unlock(); + __asan::asanThreadRegistry().Unlock(); +} static ThreadRegistry *GetAsanThreadRegistryLocked() { __asan::asanThreadRegistry().CheckLocked(); @@ -495,7 +501,8 @@ bool GetThreadRangesLocked(tid_t os_id, uptr *stack_begin, uptr *stack_end, uptr *tls_begin, uptr *tls_end, uptr *cache_begin, uptr *cache_end, DTLS **dtls) { __asan::AsanThread *t = __asan::GetAsanThreadByOsIDLocked(os_id); - if (!t) return false; + if (!t) + return false; *stack_begin = t->stack_bottom(); *stack_end = t->stack_top(); *tls_begin = t->tls_begin(); @@ -536,33 +543,7 @@ void GetThreadExtraStackRangesLocked(InternalMmapVector *ranges) { } void GetAdditionalThreadContextPtrsLocked(InternalMmapVector *ptrs) { - GetAsanThreadRegistryLocked()->RunCallbackForEachThreadLocked( - [](ThreadContextBase *tctx, void *ptrs) { - // Look for the arg pointer of threads that have been created or are - // running. This is necessary to prevent false positive leaks due to the - // AsanThread holding the only live reference to a heap object. This - // can happen because the `pthread_create()` interceptor doesn't wait - // for the child thread to start before returning and thus loosing the - // the only live reference to the heap object on the stack. - - __asan::AsanThreadContext *atctx = - static_cast<__asan::AsanThreadContext *>(tctx); - - // Note ThreadStatusRunning is required because there is a small window - // where the thread status switches to `ThreadStatusRunning` but the - // `arg` pointer still isn't on the stack yet. - if (atctx->status != ThreadStatusCreated && - atctx->status != ThreadStatusRunning) - return; - - uptr thread_arg = reinterpret_cast(atctx->thread->get_arg()); - if (!thread_arg) - return; - - auto ptrsVec = reinterpret_cast *>(ptrs); - ptrsVec->push_back(thread_arg); - }, - ptrs); + __asan::asanThreadArgRetval().GetAllPtrsLocked(ptrs); } void GetRunningThreadsLocked(InternalMmapVector *threads) { @@ -575,11 +556,7 @@ void GetRunningThreadsLocked(InternalMmapVector *threads) { threads); } -void FinishThreadLocked(u32 tid) { - GetAsanThreadRegistryLocked()->FinishThread(tid); -} - -} // namespace __lsan +} // namespace __lsan // ---------------------- Interface ---------------- {{{1 using namespace __asan; @@ -593,20 +570,18 @@ void __sanitizer_start_switch_fiber(void **fakestacksave, const void *bottom, VReport(1, "__asan_start_switch_fiber called from unknown thread\n"); return; } - t->StartSwitchFiber((FakeStack**)fakestacksave, (uptr)bottom, size); + t->StartSwitchFiber((FakeStack **)fakestacksave, (uptr)bottom, size); } SANITIZER_INTERFACE_ATTRIBUTE -void __sanitizer_finish_switch_fiber(void* fakestack, - const void **bottom_old, +void __sanitizer_finish_switch_fiber(void *fakestack, const void **bottom_old, uptr *size_old) { AsanThread *t = GetCurrentThread(); if (!t) { VReport(1, "__asan_finish_switch_fiber called from unknown thread\n"); return; } - t->FinishSwitchFiber((FakeStack*)fakestack, - (uptr*)bottom_old, - (uptr*)size_old); + t->FinishSwitchFiber((FakeStack *)fakestack, (uptr *)bottom_old, + (uptr *)size_old); } } diff --git a/libsanitizer/asan/asan_thread.h b/libsanitizer/asan/asan_thread.h index 801a3960ec6c..62f1b5337fe4 100644 --- a/libsanitizer/asan/asan_thread.h +++ b/libsanitizer/asan/asan_thread.h @@ -15,11 +15,12 @@ #define ASAN_THREAD_H #include "asan_allocator.h" -#include "asan_internal.h" #include "asan_fake_stack.h" +#include "asan_internal.h" #include "asan_stats.h" #include "sanitizer_common/sanitizer_common.h" #include "sanitizer_common/sanitizer_libc.h" +#include "sanitizer_common/sanitizer_thread_arg_retval.h" #include "sanitizer_common/sanitizer_thread_registry.h" namespace __sanitizer { @@ -55,18 +56,32 @@ class AsanThreadContext final : public ThreadContextBase { // AsanThreadContext objects are never freed, so we need many of them. COMPILER_CHECK(sizeof(AsanThreadContext) <= 256); +#if defined(_MSC_VER) && !defined(__clang__) +// MSVC raises a warning about a nonstandard extension being used for the 0 +// sized element in this array. Disable this for warn-as-error builds. +# pragma warning(push) +# pragma warning(disable : 4200) +#endif + // AsanThread are stored in TSD and destroyed when the thread dies. class AsanThread { public: - static AsanThread *Create(thread_callback_t start_routine, void *arg, - u32 parent_tid, StackTrace *stack, bool detached); + template + static AsanThread *Create(const T &data, u32 parent_tid, StackTrace *stack, + bool detached) { + return Create(&data, sizeof(data), parent_tid, stack, detached); + } + static AsanThread *Create(u32 parent_tid, StackTrace *stack, bool detached) { + return Create(nullptr, 0, parent_tid, stack, detached); + } static void TSDDtor(void *tsd); void Destroy(); struct InitOptions; void Init(const InitOptions *options = nullptr); - thread_return_t ThreadStart(tid_t os_id); + void ThreadStart(tid_t os_id); + thread_return_t RunThread(); uptr stack_top(); uptr stack_bottom(); @@ -129,12 +144,18 @@ class AsanThread { void *extra_spill_area() { return &extra_spill_area_; } - void *get_arg() { return arg_; } + template + void GetStartData(T &data) const { + GetStartData(&data, sizeof(data)); + } private: // NOTE: There is no AsanThread constructor. It is allocated // via mmap() and *must* be valid in zero-initialized state. + static AsanThread *Create(const void *start_data, uptr data_size, + u32 parent_tid, StackTrace *stack, bool detached); + void SetThreadStackAndTls(const InitOptions *options); void ClearShadowForThreadStackAndTLS(); @@ -146,9 +167,9 @@ class AsanThread { }; StackBounds GetStackBounds() const; + void GetStartData(void *out, uptr out_size) const; + AsanThreadContext *context_; - thread_callback_t start_routine_; - void *arg_; uptr stack_top_; uptr stack_bottom_; @@ -167,10 +188,17 @@ class AsanThread { AsanStats stats_; bool unwinding_; uptr extra_spill_area_; + + char start_data_[]; }; +#if defined(_MSC_VER) && !defined(__clang__) +# pragma warning(pop) +#endif + // Returns a single instance of registry. ThreadRegistry &asanThreadRegistry(); +ThreadArgRetval &asanThreadArgRetval(); // Must be called under ThreadRegistryLock. AsanThreadContext *GetThreadContextByTidLocked(u32 tid); diff --git a/libsanitizer/asan/asan_win.cpp b/libsanitizer/asan/asan_win.cpp index 7dbd7ab98a17..d5a30f471e2b 100644 --- a/libsanitizer/asan/asan_win.cpp +++ b/libsanitizer/asan/asan_win.cpp @@ -131,10 +131,22 @@ INTERCEPTOR(int, _except_handler4, void *a, void *b, void *c, void *d) { } #endif +struct ThreadStartParams { + thread_callback_t start_routine; + void *arg; +}; + static thread_return_t THREAD_CALLING_CONV asan_thread_start(void *arg) { AsanThread *t = (AsanThread *)arg; SetCurrentThread(t); - return t->ThreadStart(GetTid()); + t->ThreadStart(GetTid()); + + ThreadStartParams params; + t->GetStartData(params); + + auto res = (*params.start_routine)(params.arg); + t->Destroy(); // POSIX calls this from TSD destructor. + return res; } INTERCEPTOR_WINAPI(HANDLE, CreateThread, LPSECURITY_ATTRIBUTES security, @@ -148,8 +160,8 @@ INTERCEPTOR_WINAPI(HANDLE, CreateThread, LPSECURITY_ATTRIBUTES security, // one. This is a bandaid fix for PR22025. bool detached = false; // FIXME: how can we determine it on Windows? u32 current_tid = GetCurrentTidOrInvalid(); - AsanThread *t = - AsanThread::Create(start_routine, arg, current_tid, &stack, detached); + ThreadStartParams params = {start_routine, arg}; + AsanThread *t = AsanThread::Create(params, current_tid, &stack, detached); return REAL(CreateThread)(security, stack_size, asan_thread_start, t, thr_flags, tid); } @@ -159,6 +171,8 @@ INTERCEPTOR_WINAPI(HANDLE, CreateThread, LPSECURITY_ATTRIBUTES security, namespace __asan { void InitializePlatformInterceptors() { + __interception::SetErrorReportCallback(Report); + // The interceptors were not designed to be removable, so we have to keep this // module alive for the life of the process. HMODULE pinned; @@ -194,9 +208,12 @@ void AsanApplyToGlobals(globals_op_fptr op, const void *needle) { } void FlushUnneededASanShadowMemory(uptr p, uptr size) { + // Only asan on 64-bit Windows supports committing shadow memory on demand. +#if SANITIZER_WINDOWS64 // Since asan's mapping is compacting, the shadow chunk may be // not page-aligned, so we only flush the page-aligned portion. ReleaseMemoryPagesToOS(MemToShadow(p), MemToShadow(p + size)); +#endif } // ---------------------- TSD ---------------- {{{ diff --git a/libsanitizer/asan/asan_win_dll_thunk.cpp b/libsanitizer/asan/asan_win_dll_thunk.cpp index e3a90f18ed81..0fa636bec0d0 100644 --- a/libsanitizer/asan/asan_win_dll_thunk.cpp +++ b/libsanitizer/asan/asan_win_dll_thunk.cpp @@ -65,6 +65,7 @@ INTERCEPT_WRAP_W_W(_expand_dbg) INTERCEPT_LIBRARY_FUNCTION(atoi); INTERCEPT_LIBRARY_FUNCTION(atol); +INTERCEPT_LIBRARY_FUNCTION(atoll); INTERCEPT_LIBRARY_FUNCTION(frexp); INTERCEPT_LIBRARY_FUNCTION(longjmp); #if SANITIZER_INTERCEPT_MEMCHR @@ -91,6 +92,7 @@ INTERCEPT_LIBRARY_FUNCTION(strspn); INTERCEPT_LIBRARY_FUNCTION(strstr); INTERCEPT_LIBRARY_FUNCTION(strtok); INTERCEPT_LIBRARY_FUNCTION(strtol); +INTERCEPT_LIBRARY_FUNCTION(strtoll); INTERCEPT_LIBRARY_FUNCTION(wcslen); INTERCEPT_LIBRARY_FUNCTION(wcsnlen); diff --git a/libsanitizer/hwasan/hwasan.cpp b/libsanitizer/hwasan/hwasan.cpp index 26aae9b4869b..2f6cb10caf1b 100644 --- a/libsanitizer/hwasan/hwasan.cpp +++ b/libsanitizer/hwasan/hwasan.cpp @@ -86,9 +86,11 @@ static void InitializeFlags() { cf.clear_shadow_mmap_threshold = 4096 * (SANITIZER_ANDROID ? 2 : 8); // Sigtrap is used in error reporting. cf.handle_sigtrap = kHandleSignalExclusive; - // For now only tested on Linux. Other plantforms can be turned on as they - // become ready. - cf.detect_leaks = cf.detect_leaks && SANITIZER_LINUX && !SANITIZER_ANDROID; + // For now only tested on Linux and Fuchsia. Other plantforms can be turned + // on as they become ready. + constexpr bool can_detect_leaks = + (SANITIZER_LINUX && !SANITIZER_ANDROID) || SANITIZER_FUCHSIA; + cf.detect_leaks = cf.detect_leaks && can_detect_leaks; #if SANITIZER_ANDROID // Let platform handle other signals. It is better at reporting them then we @@ -170,7 +172,7 @@ static void HwasanFormatMemoryUsage(InternalScopedString &s) { auto sds = StackDepotGetStats(); AllocatorStatCounters asc; GetAllocatorStats(asc); - s.append( + s.AppendF( "HWASAN pid: %d rss: %zd threads: %zd stacks: %zd" " thr_aux: %zd stack_depot: %zd uniq_stacks: %zd" " heap: %zd", @@ -290,14 +292,20 @@ static bool InitializeSingleGlobal(const hwasan_global &global) { } static void InitLoadedGlobals() { - dl_iterate_phdr( - [](dl_phdr_info *info, size_t /* size */, void * /* data */) -> int { - for (const hwasan_global &global : HwasanGlobalsFor( - info->dlpi_addr, info->dlpi_phdr, info->dlpi_phnum)) - InitializeSingleGlobal(global); - return 0; - }, - nullptr); + // Fuchsia's libc provides a hook (__sanitizer_module_loaded) that runs on + // the startup path which calls into __hwasan_library_loaded on all + // initially loaded modules, so explicitly registering the globals here + // isn't needed. + if constexpr (!SANITIZER_FUCHSIA) { + dl_iterate_phdr( + [](dl_phdr_info *info, size_t /* size */, void * /* data */) -> int { + for (const hwasan_global &global : HwasanGlobalsFor( + info->dlpi_addr, info->dlpi_phdr, info->dlpi_phnum)) + InitializeSingleGlobal(global); + return 0; + }, + nullptr); + } } // Prepare to run instrumented code on the main thread. @@ -364,13 +372,7 @@ __attribute__((constructor(0))) void __hwasan_init() { DisableCoreDumperIfNecessary(); InitInstrumentation(); - if constexpr (!SANITIZER_FUCHSIA) { - // Fuchsia's libc provides a hook (__sanitizer_module_loaded) that runs on - // the startup path which calls into __hwasan_library_loaded on all - // initially loaded modules, so explicitly registering the globals here - // isn't needed. - InitLoadedGlobals(); - } + InitLoadedGlobals(); // Needs to be called here because flags()->random_tags might not have been // initialized when InitInstrumentation() was called. @@ -530,6 +532,56 @@ void __hwasan_load16_noabort(uptr p) { CheckAddress(p); } +void __hwasan_loadN_match_all(uptr p, uptr sz, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddressSized(p, sz); +} +void __hwasan_load1_match_all(uptr p, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddress(p); +} +void __hwasan_load2_match_all(uptr p, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddress(p); +} +void __hwasan_load4_match_all(uptr p, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddress(p); +} +void __hwasan_load8_match_all(uptr p, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddress(p); +} +void __hwasan_load16_match_all(uptr p, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddress(p); +} + +void __hwasan_loadN_match_all_noabort(uptr p, uptr sz, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddressSized(p, sz); +} +void __hwasan_load1_match_all_noabort(uptr p, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddress(p); +} +void __hwasan_load2_match_all_noabort(uptr p, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddress(p); +} +void __hwasan_load4_match_all_noabort(uptr p, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddress(p); +} +void __hwasan_load8_match_all_noabort(uptr p, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddress(p); +} +void __hwasan_load16_match_all_noabort(uptr p, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddress(p); +} + void __hwasan_storeN(uptr p, uptr sz) { CheckAddressSized(p, sz); } @@ -568,6 +620,56 @@ void __hwasan_store16_noabort(uptr p) { CheckAddress(p); } +void __hwasan_storeN_match_all(uptr p, uptr sz, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddressSized(p, sz); +} +void __hwasan_store1_match_all(uptr p, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddress(p); +} +void __hwasan_store2_match_all(uptr p, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddress(p); +} +void __hwasan_store4_match_all(uptr p, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddress(p); +} +void __hwasan_store8_match_all(uptr p, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddress(p); +} +void __hwasan_store16_match_all(uptr p, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddress(p); +} + +void __hwasan_storeN_match_all_noabort(uptr p, uptr sz, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddressSized(p, sz); +} +void __hwasan_store1_match_all_noabort(uptr p, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddress(p); +} +void __hwasan_store2_match_all_noabort(uptr p, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddress(p); +} +void __hwasan_store4_match_all_noabort(uptr p, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddress(p); +} +void __hwasan_store8_match_all_noabort(uptr p, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddress(p); +} +void __hwasan_store16_match_all_noabort(uptr p, u8 match_all_tag) { + if (GetTagFromPointer(p) != match_all_tag) + CheckAddress(p); +} + void __hwasan_tag_memory(uptr p, u8 tag, uptr sz) { TagMemoryAligned(UntagAddr(p), sz, tag); } @@ -579,7 +681,7 @@ uptr __hwasan_tag_pointer(uptr p, u8 tag) { void __hwasan_handle_longjmp(const void *sp_dst) { uptr dst = (uptr)sp_dst; // HWASan does not support tagged SP. - CHECK(GetTagFromPointer(dst) == 0); + CHECK_EQ(GetTagFromPointer(dst), 0); uptr sp = (uptr)__builtin_frame_address(0); static const uptr kMaxExpectedCleanupSize = 64 << 20; // 64M diff --git a/libsanitizer/hwasan/hwasan_allocation_functions.cpp b/libsanitizer/hwasan/hwasan_allocation_functions.cpp index 59ad633879bd..75d91ed09ce1 100644 --- a/libsanitizer/hwasan/hwasan_allocation_functions.cpp +++ b/libsanitizer/hwasan/hwasan_allocation_functions.cpp @@ -159,13 +159,13 @@ void *__sanitizer_malloc(uptr size) { // Fuchsia does not use WRAP/wrappers used for the interceptor infrastructure. # define INTERCEPTOR_ALIAS(RET, FN, ARGS...) \ extern "C" SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE RET FN( \ - ARGS) ALIAS("__sanitizer_" #FN) + ARGS) ALIAS(__sanitizer_##FN) #else # define INTERCEPTOR_ALIAS(RET, FN, ARGS...) \ extern "C" SANITIZER_INTERFACE_ATTRIBUTE RET WRAP(FN)(ARGS) \ - ALIAS("__sanitizer_" #FN); \ + ALIAS(__sanitizer_##FN); \ extern "C" SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE RET FN( \ - ARGS) ALIAS("__sanitizer_" #FN) + ARGS) ALIAS(__sanitizer_##FN) #endif INTERCEPTOR_ALIAS(int, posix_memalign, void **memptr, SIZE_T alignment, diff --git a/libsanitizer/hwasan/hwasan_allocator.cpp b/libsanitizer/hwasan/hwasan_allocator.cpp index 3b59741df6e3..d21ba024a20e 100644 --- a/libsanitizer/hwasan/hwasan_allocator.cpp +++ b/libsanitizer/hwasan/hwasan_allocator.cpp @@ -149,8 +149,9 @@ void HwasanAllocatorInit() { atomic_store_relaxed(&hwasan_allocator_tagging_enabled, !flags()->disable_allocator_tagging); SetAllocatorMayReturnNull(common_flags()->allocator_may_return_null); - allocator.Init(common_flags()->allocator_release_to_os_interval_ms, - GetAliasRegionStart()); + allocator.InitLinkerInitialized( + common_flags()->allocator_release_to_os_interval_ms, + GetAliasRegionStart()); for (uptr i = 0; i < sizeof(tail_magic); i++) tail_magic[i] = GetCurrentThread()->GenerateRandomTag(); if (common_flags()->max_allocation_size_mb) { @@ -165,8 +166,11 @@ void HwasanAllocatorLock() { allocator.ForceLock(); } void HwasanAllocatorUnlock() { allocator.ForceUnlock(); } -void AllocatorSwallowThreadLocalCache(AllocatorCache *cache) { +void AllocatorThreadStart(AllocatorCache *cache) { allocator.InitCache(cache); } + +void AllocatorThreadFinish(AllocatorCache *cache) { allocator.SwallowCache(cache); + allocator.DestroyCache(cache); } static uptr TaggedSize(uptr size) { @@ -230,28 +234,23 @@ static void *HwasanAllocate(StackTrace *stack, uptr orig_size, uptr alignment, } void *user_ptr = allocated; - // Tagging can only be skipped when both tag_in_malloc and tag_in_free are - // false. When tag_in_malloc = false and tag_in_free = true malloc needs to - // retag to 0. if (InTaggableRegion(reinterpret_cast(user_ptr)) && - (flags()->tag_in_malloc || flags()->tag_in_free) && - atomic_load_relaxed(&hwasan_allocator_tagging_enabled)) { - if (flags()->tag_in_malloc && malloc_bisect(stack, orig_size)) { - tag_t tag = t ? t->GenerateRandomTag() : kFallbackAllocTag; - uptr tag_size = orig_size ? orig_size : 1; - uptr full_granule_size = RoundDownTo(tag_size, kShadowAlignment); - user_ptr = - (void *)TagMemoryAligned((uptr)user_ptr, full_granule_size, tag); - if (full_granule_size != tag_size) { - u8 *short_granule = - reinterpret_cast(allocated) + full_granule_size; - TagMemoryAligned((uptr)short_granule, kShadowAlignment, - tag_size % kShadowAlignment); - short_granule[kShadowAlignment - 1] = tag; - } - } else { - user_ptr = (void *)TagMemoryAligned((uptr)user_ptr, size, 0); + atomic_load_relaxed(&hwasan_allocator_tagging_enabled) && + flags()->tag_in_malloc && malloc_bisect(stack, orig_size)) { + tag_t tag = t ? t->GenerateRandomTag() : kFallbackAllocTag; + uptr tag_size = orig_size ? orig_size : 1; + uptr full_granule_size = RoundDownTo(tag_size, kShadowAlignment); + user_ptr = (void *)TagMemoryAligned((uptr)user_ptr, full_granule_size, tag); + if (full_granule_size != tag_size) { + u8 *short_granule = reinterpret_cast(allocated) + full_granule_size; + TagMemoryAligned((uptr)short_granule, kShadowAlignment, + tag_size % kShadowAlignment); + short_granule[kShadowAlignment - 1] = tag; } + } else { + // Tagging can not be completely skipped. If it's disabled, we need to tag + // with zeros. + user_ptr = (void *)TagMemoryAligned((uptr)user_ptr, size, 0); } Metadata *meta = @@ -261,7 +260,7 @@ static void *HwasanAllocate(StackTrace *stack, uptr orig_size, uptr alignment, : __lsan::kDirectlyLeaked); #endif meta->SetAllocated(StackDepotPut(*stack), orig_size); - RunMallocHooks(user_ptr, size); + RunMallocHooks(user_ptr, orig_size); return user_ptr; } @@ -288,8 +287,6 @@ static bool CheckInvalidFree(StackTrace *stack, void *untagged_ptr, static void HwasanDeallocate(StackTrace *stack, void *tagged_ptr) { CHECK(tagged_ptr); - RunFreeHooks(tagged_ptr); - void *untagged_ptr = UntagPtr(tagged_ptr); if (CheckInvalidFree(stack, untagged_ptr, tagged_ptr)) @@ -304,6 +301,9 @@ static void HwasanDeallocate(StackTrace *stack, void *tagged_ptr) { ReportInvalidFree(stack, reinterpret_cast(tagged_ptr)); return; } + + RunFreeHooks(tagged_ptr); + uptr orig_size = meta->GetRequestedSize(); u32 free_context_id = StackDepotPut(*stack); u32 alloc_context_id = meta->GetAllocStackId(); @@ -340,7 +340,8 @@ static void HwasanDeallocate(StackTrace *stack, void *tagged_ptr) { internal_memset(aligned_ptr, flags()->free_fill_byte, fill_size); } if (in_taggable_region && flags()->tag_in_free && malloc_bisect(stack, 0) && - atomic_load_relaxed(&hwasan_allocator_tagging_enabled)) { + atomic_load_relaxed(&hwasan_allocator_tagging_enabled) && + allocator.FromPrimary(untagged_ptr) /* Secondary 0-tag and unmap.*/) { // Always store full 8-bit tags on free to maximize UAF detection. tag_t tag; if (t) { @@ -437,6 +438,15 @@ static uptr AllocationSize(const void *p) { return b->GetRequestedSize(); } +static uptr AllocationSizeFast(const void *p) { + const void *untagged_ptr = UntagPtr(p); + void *aligned_ptr = reinterpret_cast( + RoundDownTo(reinterpret_cast(untagged_ptr), kShadowAlignment)); + Metadata *meta = + reinterpret_cast(allocator.GetMetaData(aligned_ptr)); + return meta->GetRequestedSize(); +} + void *hwasan_malloc(uptr size, StackTrace *stack) { return SetErrnoOnNull(HwasanAllocate(stack, size, sizeof(u64), false)); } @@ -675,4 +685,11 @@ const void *__sanitizer_get_allocated_begin(const void *p) { uptr __sanitizer_get_allocated_size(const void *p) { return AllocationSize(p); } +uptr __sanitizer_get_allocated_size_fast(const void *p) { + DCHECK_EQ(p, __sanitizer_get_allocated_begin(p)); + uptr ret = AllocationSizeFast(p); + DCHECK_EQ(ret, __sanitizer_get_allocated_size(p)); + return ret; +} + void __sanitizer_purge_allocator() { allocator.ForceReleaseToOS(); } diff --git a/libsanitizer/hwasan/hwasan_allocator.h b/libsanitizer/hwasan/hwasan_allocator.h index ecf3f6816fc7..2ada2a0b1851 100644 --- a/libsanitizer/hwasan/hwasan_allocator.h +++ b/libsanitizer/hwasan/hwasan_allocator.h @@ -54,6 +54,10 @@ static_assert(sizeof(Metadata) == 16); struct HwasanMapUnmapCallback { void OnMap(uptr p, uptr size) const { UpdateMemoryUsage(); } + void OnMapSecondary(uptr p, uptr size, uptr user_begin, + uptr user_size) const { + UpdateMemoryUsage(); + } void OnUnmap(uptr p, uptr size) const { // We are about to unmap a chunk of user memory. // It can return as user-requested mmap() or another thread stack. @@ -88,7 +92,8 @@ typedef SizeClassAllocator64 PrimaryAllocator; typedef CombinedAllocator Allocator; typedef Allocator::AllocatorCache AllocatorCache; -void AllocatorSwallowThreadLocalCache(AllocatorCache *cache); +void AllocatorThreadStart(AllocatorCache *cache); +void AllocatorThreadFinish(AllocatorCache *cache); class HwasanChunkView { public: diff --git a/libsanitizer/hwasan/hwasan_exceptions.cpp b/libsanitizer/hwasan/hwasan_exceptions.cpp index c9968a5e3603..bf700bf56838 100644 --- a/libsanitizer/hwasan/hwasan_exceptions.cpp +++ b/libsanitizer/hwasan/hwasan_exceptions.cpp @@ -62,7 +62,8 @@ __hwasan_personality_wrapper(int version, _Unwind_Action actions, #error Unsupported architecture #endif uptr sp = get_cfa(context); - TagMemory(sp, fp - sp, 0); + TagMemory(UntagAddr(sp), UntagAddr(fp) - UntagAddr(sp), + GetTagFromPointer(sp)); } return rc; diff --git a/libsanitizer/hwasan/hwasan_globals.cpp b/libsanitizer/hwasan/hwasan_globals.cpp index d71bcd792e1f..7e0f3df20dd0 100644 --- a/libsanitizer/hwasan/hwasan_globals.cpp +++ b/libsanitizer/hwasan/hwasan_globals.cpp @@ -13,6 +13,8 @@ #include "hwasan_globals.h" +#include "sanitizer_common/sanitizer_array_ref.h" + namespace __hwasan { enum { NT_LLVM_HWASAN_GLOBALS = 3 }; diff --git a/libsanitizer/hwasan/hwasan_globals.h b/libsanitizer/hwasan/hwasan_globals.h index fd7adf7a0588..94cd53e1888c 100644 --- a/libsanitizer/hwasan/hwasan_globals.h +++ b/libsanitizer/hwasan/hwasan_globals.h @@ -16,6 +16,7 @@ #include +#include "sanitizer_common/sanitizer_array_ref.h" #include "sanitizer_common/sanitizer_common.h" #include "sanitizer_common/sanitizer_internal_defs.h" diff --git a/libsanitizer/hwasan/hwasan_interceptors.cpp b/libsanitizer/hwasan/hwasan_interceptors.cpp index 67edba40b5b9..d9237cf9b8e3 100644 --- a/libsanitizer/hwasan/hwasan_interceptors.cpp +++ b/libsanitizer/hwasan/hwasan_interceptors.cpp @@ -14,10 +14,17 @@ // sanitizer_common/sanitizer_common_interceptors.h //===----------------------------------------------------------------------===// +#define SANITIZER_COMMON_NO_REDEFINE_BUILTINS + #include "hwasan.h" +#include "hwasan_allocator.h" #include "hwasan_checks.h" +#include "hwasan_mapping.h" +#include "hwasan_platform_interceptors.h" #include "hwasan_thread.h" +#include "hwasan_thread_list.h" #include "interception/interception.h" +#include "sanitizer_common/sanitizer_errno.h" #include "sanitizer_common/sanitizer_linux.h" #include "sanitizer_common/sanitizer_stackdepot.h" @@ -25,21 +32,47 @@ using namespace __hwasan; -#if HWASAN_WITH_INTERCEPTORS - -struct ThreadStartArg { - thread_callback_t callback; - void *param; - __sanitizer_sigset_t starting_sigset_; +struct HWAsanInterceptorContext { + const char *interceptor_name; }; -static void *HwasanThreadStartFunc(void *arg) { - __hwasan_thread_enter(); - ThreadStartArg A = *reinterpret_cast(arg); - SetSigProcMask(&A.starting_sigset_, nullptr); - UnmapOrDie(arg, GetPageSizeCached()); - return A.callback(A.param); -} +# define ACCESS_MEMORY_RANGE(ctx, offset, size, access) \ + do { \ + __hwasan::CheckAddressSized((uptr)offset, \ + size); \ + } while (0) + +# define HWASAN_READ_RANGE(ctx, offset, size) \ + ACCESS_MEMORY_RANGE(ctx, offset, size, AccessType::Load) +# define HWASAN_WRITE_RANGE(ctx, offset, size) \ + ACCESS_MEMORY_RANGE(ctx, offset, size, AccessType::Store) + +# if !SANITIZER_APPLE +# define HWASAN_INTERCEPT_FUNC(name) \ + do { \ + if (!INTERCEPT_FUNCTION(name)) \ + VReport(1, "HWAddressSanitizer: failed to intercept '%s'\n", #name); \ + } while (0) +# define HWASAN_INTERCEPT_FUNC_VER(name, ver) \ + do { \ + if (!INTERCEPT_FUNCTION_VER(name, ver)) \ + VReport(1, "HWAddressSanitizer: failed to intercept '%s@@%s'\n", \ + #name, ver); \ + } while (0) +# define HWASAN_INTERCEPT_FUNC_VER_UNVERSIONED_FALLBACK(name, ver) \ + do { \ + if (!INTERCEPT_FUNCTION_VER(name, ver) && !INTERCEPT_FUNCTION(name)) \ + VReport( \ + 1, "HWAddressSanitizer: failed to intercept '%s@@%s' or '%s'\n", \ + #name, ver, #name); \ + } while (0) + +# else +// OS X interceptors don't need to be initialized with INTERCEPT_FUNCTION. +# define HWASAN_INTERCEPT_FUNC(name) +# endif // SANITIZER_APPLE + +# if HWASAN_WITH_INTERCEPTORS # define COMMON_SYSCALL_PRE_READ_RANGE(p, s) __hwasan_loadN((uptr)p, (uptr)s) # define COMMON_SYSCALL_PRE_WRITE_RANGE(p, s) \ @@ -57,26 +90,251 @@ static void *HwasanThreadStartFunc(void *arg) { # include "sanitizer_common/sanitizer_common_syscalls.inc" # include "sanitizer_common/sanitizer_syscalls_netbsd.inc" -INTERCEPTOR(int, pthread_create, void *th, void *attr, void *(*callback)(void*), - void * param) { +# define COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ptr, size) \ + HWASAN_WRITE_RANGE(ctx, ptr, size) + +# define COMMON_INTERCEPTOR_READ_RANGE(ctx, ptr, size) \ + HWASAN_READ_RANGE(ctx, ptr, size) + +# define COMMON_INTERCEPTOR_ENTER(ctx, func, ...) \ + HWAsanInterceptorContext _ctx = {#func}; \ + ctx = (void *)&_ctx; \ + do { \ + (void)(ctx); \ + (void)(func); \ + } while (false) + +# define COMMON_INTERCEPTOR_DIR_ACQUIRE(ctx, path) \ + do { \ + (void)(ctx); \ + (void)(path); \ + } while (false) + +# define COMMON_INTERCEPTOR_FD_ACQUIRE(ctx, fd) \ + do { \ + (void)(ctx); \ + (void)(fd); \ + } while (false) + +# define COMMON_INTERCEPTOR_FD_RELEASE(ctx, fd) \ + do { \ + (void)(ctx); \ + (void)(fd); \ + } while (false) + +# define COMMON_INTERCEPTOR_FD_SOCKET_ACCEPT(ctx, fd, newfd) \ + do { \ + (void)(ctx); \ + (void)(fd); \ + (void)(newfd); \ + } while (false) + +# define COMMON_INTERCEPTOR_SET_THREAD_NAME(ctx, name) \ + do { \ + (void)(ctx); \ + (void)(name); \ + } while (false) + +# define COMMON_INTERCEPTOR_SET_PTHREAD_NAME(ctx, thread, name) \ + do { \ + (void)(ctx); \ + (void)(thread); \ + (void)(name); \ + } while (false) + +# define COMMON_INTERCEPTOR_BLOCK_REAL(name) \ + do { \ + (void)(name); \ + } while (false) + +# define COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, dst, v, size) \ + { \ + if (COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED) \ + return internal_memset(dst, v, size); \ + COMMON_INTERCEPTOR_ENTER(ctx, memset, dst, v, size); \ + if (MemIsApp(UntagAddr(reinterpret_cast(dst))) && \ + common_flags()->intercept_intrin) \ + COMMON_INTERCEPTOR_WRITE_RANGE(ctx, dst, size); \ + return REAL(memset)(dst, v, size); \ + } + +# define COMMON_INTERCEPTOR_STRERROR() \ + do { \ + } while (false) + +# define COMMON_INTERCEPT_FUNCTION(name) HWASAN_INTERCEPT_FUNC(name) + +# define COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED (!hwasan_inited) + +// The main purpose of the mmap interceptor is to prevent the user from +// allocating on top of shadow pages. +// +// For compatibility, it does not tag pointers, nor does it allow +// MAP_FIXED in combination with a tagged pointer. (Since mmap itself +// will not return a tagged pointer, the tagged pointer must have come +// from elsewhere, such as the secondary allocator, which makes it a +// very odd usecase.) +template +static void *mmap_interceptor(Mmap real_mmap, void *addr, SIZE_T length, + int prot, int flags, int fd, OFF64_T offset) { + if (addr) { + if (flags & map_fixed) CHECK_EQ(addr, UntagPtr(addr)); + + addr = UntagPtr(addr); + } + SIZE_T rounded_length = RoundUpTo(length, GetPageSize()); + void *end_addr = (char *)addr + (rounded_length - 1); + if (addr && length && + (!MemIsApp(reinterpret_cast(addr)) || + !MemIsApp(reinterpret_cast(end_addr)))) { + // User requested an address that is incompatible with HWASan's + // memory layout. Use a different address if allowed, else fail. + if (flags & map_fixed) { + errno = errno_EINVAL; + return (void *)-1; + } else { + addr = nullptr; + } + } + void *res = real_mmap(addr, length, prot, flags, fd, offset); + if (length && res != (void *)-1) { + uptr beg = reinterpret_cast(res); + DCHECK(IsAligned(beg, GetPageSize())); + if (!MemIsApp(beg) || !MemIsApp(beg + rounded_length - 1)) { + // Application has attempted to map more memory than is supported by + // HWASan. Act as if we ran out of memory. + internal_munmap(res, length); + errno = errno_ENOMEM; + return (void *)-1; + } + __hwasan::TagMemoryAligned(beg, rounded_length, 0); + } + + return res; +} + +template +static int munmap_interceptor(Munmap real_munmap, void *addr, SIZE_T length) { + // We should not tag if munmap fail, but it's to late to tag after + // real_munmap, as the pages could be mmaped by another thread. + uptr beg = reinterpret_cast(addr); + if (length && IsAligned(beg, GetPageSize())) { + SIZE_T rounded_length = RoundUpTo(length, GetPageSize()); + // Protect from unmapping the shadow. + if (!MemIsApp(beg) || !MemIsApp(beg + rounded_length - 1)) { + errno = errno_EINVAL; + return -1; + } + __hwasan::TagMemoryAligned(beg, rounded_length, 0); + } + return real_munmap(addr, length); +} + +# define COMMON_INTERCEPTOR_MMAP_IMPL(ctx, mmap, addr, length, prot, flags, \ + fd, offset) \ + do { \ + (void)(ctx); \ + return mmap_interceptor(REAL(mmap), addr, sz, prot, flags, fd, off); \ + } while (false) + +# define COMMON_INTERCEPTOR_MUNMAP_IMPL(ctx, addr, length) \ + do { \ + (void)(ctx); \ + return munmap_interceptor(REAL(munmap), addr, sz); \ + } while (false) + +# include "sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc" +# include "sanitizer_common/sanitizer_common_interceptors.inc" + +struct ThreadStartArg { + __sanitizer_sigset_t starting_sigset_; +}; + +static void *HwasanThreadStartFunc(void *arg) { + __hwasan_thread_enter(); + SetSigProcMask(&reinterpret_cast(arg)->starting_sigset_, + nullptr); + InternalFree(arg); + auto self = GetThreadSelf(); + auto args = hwasanThreadArgRetval().GetArgs(self); + void *retval = (*args.routine)(args.arg_retval); + hwasanThreadArgRetval().Finish(self, retval); + return retval; +} + +extern "C" { +int pthread_attr_getdetachstate(void *attr, int *v); +} + +INTERCEPTOR(int, pthread_create, void *thread, void *attr, + void *(*callback)(void *), void *param) { EnsureMainThreadIDIsCorrect(); ScopedTaggingDisabler tagging_disabler; - ThreadStartArg *A = reinterpret_cast (MmapOrDie( - GetPageSizeCached(), "pthread_create")); - A->callback = callback; - A->param = param; + bool detached = [attr]() { + int d = 0; + return attr && !pthread_attr_getdetachstate(attr, &d) && IsStateDetached(d); + }(); + ThreadStartArg *A = (ThreadStartArg *)InternalAlloc(sizeof(ThreadStartArg)); ScopedBlockSignals block(&A->starting_sigset_); // ASAN uses the same approach to disable leaks from pthread_create. # if CAN_SANITIZE_LEAKS __lsan::ScopedInterceptorDisabler lsan_disabler; # endif - return REAL(pthread_create)(th, attr, &HwasanThreadStartFunc, A); + + int result; + hwasanThreadArgRetval().Create(detached, {callback, param}, [&]() -> uptr { + result = REAL(pthread_create)(thread, attr, &HwasanThreadStartFunc, A); + return result ? 0 : *(uptr *)(thread); + }); + if (result != 0) + InternalFree(A); + return result; } -INTERCEPTOR(int, pthread_join, void *t, void **arg) { - return REAL(pthread_join)(t, arg); +INTERCEPTOR(int, pthread_join, void *thread, void **retval) { + int result; + hwasanThreadArgRetval().Join((uptr)thread, [&]() { + result = REAL(pthread_join)(thread, retval); + return !result; + }); + return result; } +INTERCEPTOR(int, pthread_detach, void *thread) { + int result; + hwasanThreadArgRetval().Detach((uptr)thread, [&]() { + result = REAL(pthread_detach)(thread); + return !result; + }); + return result; +} + +INTERCEPTOR(void, pthread_exit, void *retval) { + hwasanThreadArgRetval().Finish(GetThreadSelf(), retval); + REAL(pthread_exit)(retval); +} + +# if SANITIZER_GLIBC +INTERCEPTOR(int, pthread_tryjoin_np, void *thread, void **ret) { + int result; + hwasanThreadArgRetval().Join((uptr)thread, [&]() { + result = REAL(pthread_tryjoin_np)(thread, ret); + return !result; + }); + return result; +} + +INTERCEPTOR(int, pthread_timedjoin_np, void *thread, void **ret, + const struct timespec *abstime) { + int result; + hwasanThreadArgRetval().Join((uptr)thread, [&]() { + result = REAL(pthread_timedjoin_np)(thread, ret, abstime); + return !result; + }); + return result; +} +# endif + DEFINE_REAL_PTHREAD_FUNCTIONS DEFINE_REAL(int, vfork) @@ -85,13 +343,13 @@ DECLARE_EXTERN_INTERCEPTOR_AND_WRAPPER(int, vfork) // Get and/or change the set of blocked signals. extern "C" int sigprocmask(int __how, const __hw_sigset_t *__restrict __set, __hw_sigset_t *__restrict __oset); -#define SIG_BLOCK 0 -#define SIG_SETMASK 2 +# define SIG_BLOCK 0 +# define SIG_SETMASK 2 extern "C" int __sigjmp_save(__hw_sigjmp_buf env, int savemask) { env[0].__magic = kHwJmpBufMagic; env[0].__mask_was_saved = - (savemask && sigprocmask(SIG_BLOCK, (__hw_sigset_t *)0, - &env[0].__saved_mask) == 0); + (savemask && + sigprocmask(SIG_BLOCK, (__hw_sigset_t *)0, &env[0].__saved_mask) == 0); return 0; } @@ -120,26 +378,27 @@ InternalLongjmp(__hw_register_buf env, int retval) { # if defined(__aarch64__) register long int retval_tmp asm("x1") = retval; register void *env_address asm("x0") = &env[0]; - asm volatile("ldp x19, x20, [%0, #0<<3];" - "ldp x21, x22, [%0, #2<<3];" - "ldp x23, x24, [%0, #4<<3];" - "ldp x25, x26, [%0, #6<<3];" - "ldp x27, x28, [%0, #8<<3];" - "ldp x29, x30, [%0, #10<<3];" - "ldp d8, d9, [%0, #14<<3];" - "ldp d10, d11, [%0, #16<<3];" - "ldp d12, d13, [%0, #18<<3];" - "ldp d14, d15, [%0, #20<<3];" - "ldr x5, [%0, #13<<3];" - "mov sp, x5;" - // Return the value requested to return through arguments. - // This should be in x1 given what we requested above. - "cmp %1, #0;" - "mov x0, #1;" - "csel x0, %1, x0, ne;" - "br x30;" - : "+r"(env_address) - : "r"(retval_tmp)); + asm volatile( + "ldp x19, x20, [%0, #0<<3];" + "ldp x21, x22, [%0, #2<<3];" + "ldp x23, x24, [%0, #4<<3];" + "ldp x25, x26, [%0, #6<<3];" + "ldp x27, x28, [%0, #8<<3];" + "ldp x29, x30, [%0, #10<<3];" + "ldp d8, d9, [%0, #14<<3];" + "ldp d10, d11, [%0, #16<<3];" + "ldp d12, d13, [%0, #18<<3];" + "ldp d14, d15, [%0, #20<<3];" + "ldr x5, [%0, #13<<3];" + "mov sp, x5;" + // Return the value requested to return through arguments. + // This should be in x1 given what we requested above. + "cmp %1, #0;" + "mov x0, #1;" + "csel x0, %1, x0, ne;" + "br x30;" + : "+r"(env_address) + : "r"(retval_tmp)); # elif defined(__x86_64__) register long int retval_tmp asm("%rsi") = retval; register void *env_address asm("%rdi") = &env[0]; @@ -215,8 +474,7 @@ INTERCEPTOR(void, siglongjmp, __hw_sigjmp_buf env, int val) { if (env[0].__mask_was_saved) // Restore the saved signal mask. - (void)sigprocmask(SIG_SETMASK, &env[0].__saved_mask, - (__hw_sigset_t *)0); + (void)sigprocmask(SIG_SETMASK, &env[0].__saved_mask, (__hw_sigset_t *)0); InternalLongjmp(env[0].__jmpbuf, val); } @@ -238,8 +496,8 @@ INTERCEPTOR(void, longjmp, __hw_jmp_buf env, int val) { } InternalLongjmp(env[0].__jmpbuf, val); } -#undef SIG_BLOCK -#undef SIG_SETMASK +# undef SIG_BLOCK +# undef SIG_SETMASK # endif // HWASAN_WITH_INTERCEPTORS @@ -254,7 +512,7 @@ int OnExit() { return 0; } -} // namespace __hwasan +} // namespace __hwasan namespace __hwasan { @@ -262,19 +520,30 @@ void InitializeInterceptors() { static int inited = 0; CHECK_EQ(inited, 0); -#if HWASAN_WITH_INTERCEPTORS -#if defined(__linux__) +# if HWASAN_WITH_INTERCEPTORS + InitializeCommonInterceptors(); + + (void)(read_iovec); + (void)(write_iovec); + +# if defined(__linux__) INTERCEPT_FUNCTION(__libc_longjmp); INTERCEPT_FUNCTION(longjmp); INTERCEPT_FUNCTION(siglongjmp); INTERCEPT_FUNCTION(vfork); -#endif // __linux__ +# endif // __linux__ INTERCEPT_FUNCTION(pthread_create); INTERCEPT_FUNCTION(pthread_join); + INTERCEPT_FUNCTION(pthread_detach); + INTERCEPT_FUNCTION(pthread_exit); +# if SANITIZER_GLIBC + INTERCEPT_FUNCTION(pthread_tryjoin_np); + INTERCEPT_FUNCTION(pthread_timedjoin_np); +# endif # endif inited = 1; } -} // namespace __hwasan +} // namespace __hwasan #endif // #if !SANITIZER_FUCHSIA diff --git a/libsanitizer/hwasan/hwasan_interface_internal.h b/libsanitizer/hwasan/hwasan_interface_internal.h index d1ecbb592a21..e7804cc49033 100644 --- a/libsanitizer/hwasan/hwasan_interface_internal.h +++ b/libsanitizer/hwasan/hwasan_interface_internal.h @@ -76,6 +76,32 @@ void __hwasan_load8_noabort(uptr); SANITIZER_INTERFACE_ATTRIBUTE void __hwasan_load16_noabort(uptr); +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_loadN_match_all(uptr, uptr, u8); +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_load1_match_all(uptr, u8); +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_load2_match_all(uptr, u8); +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_load4_match_all(uptr, u8); +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_load8_match_all(uptr, u8); +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_load16_match_all(uptr, u8); + +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_loadN_match_all_noabort(uptr, uptr, u8); +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_load1_match_all_noabort(uptr, u8); +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_load2_match_all_noabort(uptr, u8); +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_load4_match_all_noabort(uptr, u8); +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_load8_match_all_noabort(uptr, u8); +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_load16_match_all_noabort(uptr, u8); + SANITIZER_INTERFACE_ATTRIBUTE void __hwasan_storeN(uptr, uptr); SANITIZER_INTERFACE_ATTRIBUTE @@ -102,6 +128,32 @@ void __hwasan_store8_noabort(uptr); SANITIZER_INTERFACE_ATTRIBUTE void __hwasan_store16_noabort(uptr); +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_storeN_match_all(uptr, uptr, u8); +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_store1_match_all(uptr, u8); +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_store2_match_all(uptr, u8); +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_store4_match_all(uptr, u8); +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_store8_match_all(uptr, u8); +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_store16_match_all(uptr, u8); + +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_storeN_match_all_noabort(uptr, uptr, u8); +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_store1_match_all_noabort(uptr, u8); +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_store2_match_all_noabort(uptr, u8); +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_store4_match_all_noabort(uptr, u8); +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_store8_match_all_noabort(uptr, u8); +SANITIZER_INTERFACE_ATTRIBUTE +void __hwasan_store16_match_all_noabort(uptr, u8); + SANITIZER_INTERFACE_ATTRIBUTE void __hwasan_tag_memory(uptr p, u8 tag, uptr sz); @@ -183,6 +235,13 @@ void *__hwasan_memset(void *s, int c, uptr n); SANITIZER_INTERFACE_ATTRIBUTE void *__hwasan_memmove(void *dest, const void *src, uptr n); +SANITIZER_INTERFACE_ATTRIBUTE +void *__hwasan_memcpy_match_all(void *dst, const void *src, uptr size, u8); +SANITIZER_INTERFACE_ATTRIBUTE +void *__hwasan_memset_match_all(void *s, int c, uptr n, u8); +SANITIZER_INTERFACE_ATTRIBUTE +void *__hwasan_memmove_match_all(void *dest, const void *src, uptr n, u8); + SANITIZER_INTERFACE_ATTRIBUTE void __hwasan_set_error_report_callback(void (*callback)(const char *)); } // extern "C" diff --git a/libsanitizer/hwasan/hwasan_linux.cpp b/libsanitizer/hwasan/hwasan_linux.cpp index d3e4b5390e82..6f5e9432974e 100644 --- a/libsanitizer/hwasan/hwasan_linux.cpp +++ b/libsanitizer/hwasan/hwasan_linux.cpp @@ -283,7 +283,7 @@ void InitThreads() { bool MemIsApp(uptr p) { // Memory outside the alias range has non-zero tags. # if !defined(HWASAN_ALIASING_MODE) - CHECK(GetTagFromPointer(p) == 0); + CHECK_EQ(GetTagFromPointer(p), 0); # endif return (p >= kHighMemStart && p <= kHighMemEnd) || @@ -302,8 +302,15 @@ extern "C" void __hwasan_thread_exit() { Thread *t = GetCurrentThread(); // Make sure that signal handler can not see a stale current thread pointer. atomic_signal_fence(memory_order_seq_cst); - if (t) + if (t) { + // Block async signals on the thread as the handler can be instrumented. + // After this point instrumented code can't access essential data from TLS + // and will crash. + // Bionic already calls __hwasan_thread_exit with blocked signals. + if (SANITIZER_GLIBC) + BlockSignals(); hwasanThreadList().ReleaseThread(t); + } } # if HWASAN_WITH_INTERCEPTORS diff --git a/libsanitizer/hwasan/hwasan_memintrinsics.cpp b/libsanitizer/hwasan/hwasan_memintrinsics.cpp index ea7f5ce40b07..16d6f9085924 100644 --- a/libsanitizer/hwasan/hwasan_memintrinsics.cpp +++ b/libsanitizer/hwasan/hwasan_memintrinsics.cpp @@ -42,3 +42,33 @@ void *__hwasan_memmove(void *to, const void *from, uptr size) { reinterpret_cast(from), size); return memmove(to, from, size); } + +void *__hwasan_memset_match_all(void *block, int c, uptr size, + u8 match_all_tag) { + if (GetTagFromPointer(reinterpret_cast(block)) != match_all_tag) + CheckAddressSized( + reinterpret_cast(block), size); + return memset(block, c, size); +} + +void *__hwasan_memcpy_match_all(void *to, const void *from, uptr size, + u8 match_all_tag) { + if (GetTagFromPointer(reinterpret_cast(to)) != match_all_tag) + CheckAddressSized( + reinterpret_cast(to), size); + if (GetTagFromPointer(reinterpret_cast(from)) != match_all_tag) + CheckAddressSized( + reinterpret_cast(from), size); + return memcpy(to, from, size); +} + +void *__hwasan_memmove_match_all(void *to, const void *from, uptr size, + u8 match_all_tag) { + if (GetTagFromPointer(reinterpret_cast(to)) != match_all_tag) + CheckAddressSized( + reinterpret_cast(to), size); + if (GetTagFromPointer(reinterpret_cast(from)) != match_all_tag) + CheckAddressSized( + reinterpret_cast(from), size); + return memmove(to, from, size); +} diff --git a/libsanitizer/hwasan/hwasan_platform_interceptors.h b/libsanitizer/hwasan/hwasan_platform_interceptors.h new file mode 100644 index 000000000000..d92b51052194 --- /dev/null +++ b/libsanitizer/hwasan/hwasan_platform_interceptors.h @@ -0,0 +1,1001 @@ +#ifndef HWASAN_PLATFORM_INTERCEPTORS_H +#define HWASAN_PLATFORM_INTERCEPTORS_H + +#include "sanitizer_common/sanitizer_platform_interceptors.h" + +// This file cancels out most of the sanitizer_common interception, thus +// allowing HWASan to selectively reuse some of the interceptors. +// +// To re-enable sanitizer_common's interception of a function, comment out +// the corresponding '#undef SANITIZER_INTERCEPT_fn' and +// '#define SANITIZER_INTERCEPT_fn 0': +// - We prefer to comment out rather than delete the lines, to show that +// it is deliberate, rather than an accidental omission. +// - We do not use '#define SANITIZE_INTERCEPT_fn 1', because +// interception is usually conditional (e.g., based on SI_POSIX); we let +// the condition in sanitizers_platform_interceptors.h take effect. + +// Originally generated with: +// cat ../sanitizer_common/sanitizer_platform_interceptors.h | grep '^#define SANITIZER_INTERCEPT' | cut -d ' ' -f 2 | while read x; do echo "#undef $x"; echo "#define $x 0"; echo; done +#undef SANITIZER_INTERCEPT_STRLEN +#define SANITIZER_INTERCEPT_STRLEN 0 + +#undef SANITIZER_INTERCEPT_STRNLEN +#define SANITIZER_INTERCEPT_STRNLEN 0 + +#undef SANITIZER_INTERCEPT_STRCMP +#define SANITIZER_INTERCEPT_STRCMP 0 + +#undef SANITIZER_INTERCEPT_STRSTR +#define SANITIZER_INTERCEPT_STRSTR 0 + +#undef SANITIZER_INTERCEPT_STRCASESTR +#define SANITIZER_INTERCEPT_STRCASESTR 0 + +#undef SANITIZER_INTERCEPT_STRTOK +#define SANITIZER_INTERCEPT_STRTOK 0 + +#undef SANITIZER_INTERCEPT_STRCHR +#define SANITIZER_INTERCEPT_STRCHR 0 + +#undef SANITIZER_INTERCEPT_STRCHRNUL +#define SANITIZER_INTERCEPT_STRCHRNUL 0 + +#undef SANITIZER_INTERCEPT_STRRCHR +#define SANITIZER_INTERCEPT_STRRCHR 0 + +#undef SANITIZER_INTERCEPT_STRSPN +#define SANITIZER_INTERCEPT_STRSPN 0 + +#undef SANITIZER_INTERCEPT_STRPBRK +#define SANITIZER_INTERCEPT_STRPBRK 0 + +#undef SANITIZER_INTERCEPT_TEXTDOMAIN +#define SANITIZER_INTERCEPT_TEXTDOMAIN 0 + +#undef SANITIZER_INTERCEPT_STRCASECMP +#define SANITIZER_INTERCEPT_STRCASECMP 0 + +// #undef SANITIZER_INTERCEPT_MEMSET +// #define SANITIZER_INTERCEPT_MEMSET 0 + +// #undef SANITIZER_INTERCEPT_MEMMOVE +// #define SANITIZER_INTERCEPT_MEMMOVE 0 + +// #undef SANITIZER_INTERCEPT_MEMCPY +// #define SANITIZER_INTERCEPT_MEMCPY 0 + +// #undef SANITIZER_INTERCEPT_MEMCMP +// #define SANITIZER_INTERCEPT_MEMCMP 0 + +// #undef SANITIZER_INTERCEPT_BCMP +// #define SANITIZER_INTERCEPT_BCMP 0 + +#undef SANITIZER_INTERCEPT_STRNDUP +#define SANITIZER_INTERCEPT_STRNDUP 0 + +#undef SANITIZER_INTERCEPT___STRNDUP +#define SANITIZER_INTERCEPT___STRNDUP 0 + +#undef SANITIZER_INTERCEPT_MEMMEM +#define SANITIZER_INTERCEPT_MEMMEM 0 + +#undef SANITIZER_INTERCEPT_MEMCHR +#define SANITIZER_INTERCEPT_MEMCHR 0 + +#undef SANITIZER_INTERCEPT_MEMRCHR +#define SANITIZER_INTERCEPT_MEMRCHR 0 + +#undef SANITIZER_INTERCEPT_READ +#define SANITIZER_INTERCEPT_READ 0 + +#undef SANITIZER_INTERCEPT_PREAD +#define SANITIZER_INTERCEPT_PREAD 0 + +#undef SANITIZER_INTERCEPT_WRITE +#define SANITIZER_INTERCEPT_WRITE 0 + +#undef SANITIZER_INTERCEPT_PWRITE +#define SANITIZER_INTERCEPT_PWRITE 0 + +#undef SANITIZER_INTERCEPT_FREAD +#define SANITIZER_INTERCEPT_FREAD 0 + +#undef SANITIZER_INTERCEPT_FWRITE +#define SANITIZER_INTERCEPT_FWRITE 0 + +#undef SANITIZER_INTERCEPT_FGETS +#define SANITIZER_INTERCEPT_FGETS 0 + +#undef SANITIZER_INTERCEPT_FPUTS +#define SANITIZER_INTERCEPT_FPUTS 0 + +#undef SANITIZER_INTERCEPT_PUTS +#define SANITIZER_INTERCEPT_PUTS 0 + +#undef SANITIZER_INTERCEPT_PREAD64 +#define SANITIZER_INTERCEPT_PREAD64 0 + +#undef SANITIZER_INTERCEPT_PWRITE64 +#define SANITIZER_INTERCEPT_PWRITE64 0 + +#undef SANITIZER_INTERCEPT_READV +#define SANITIZER_INTERCEPT_READV 0 + +#undef SANITIZER_INTERCEPT_WRITEV +#define SANITIZER_INTERCEPT_WRITEV 0 + +#undef SANITIZER_INTERCEPT_PREADV +#define SANITIZER_INTERCEPT_PREADV 0 + +#undef SANITIZER_INTERCEPT_PWRITEV +#define SANITIZER_INTERCEPT_PWRITEV 0 + +#undef SANITIZER_INTERCEPT_PREADV64 +#define SANITIZER_INTERCEPT_PREADV64 0 + +#undef SANITIZER_INTERCEPT_PWRITEV64 +#define SANITIZER_INTERCEPT_PWRITEV64 0 + +#undef SANITIZER_INTERCEPT_PRCTL +#define SANITIZER_INTERCEPT_PRCTL 0 + +#undef SANITIZER_INTERCEPT_LOCALTIME_AND_FRIENDS +#define SANITIZER_INTERCEPT_LOCALTIME_AND_FRIENDS 0 + +#undef SANITIZER_INTERCEPT_STRPTIME +#define SANITIZER_INTERCEPT_STRPTIME 0 + +#undef SANITIZER_INTERCEPT_SCANF +#define SANITIZER_INTERCEPT_SCANF 0 + +#undef SANITIZER_INTERCEPT_ISOC99_SCANF +#define SANITIZER_INTERCEPT_ISOC99_SCANF 0 + +#undef SANITIZER_INTERCEPT_PRINTF +#define SANITIZER_INTERCEPT_PRINTF 0 + +#undef SANITIZER_INTERCEPT_PRINTF_L +#define SANITIZER_INTERCEPT_PRINTF_L 0 + +#undef SANITIZER_INTERCEPT_ISOC99_PRINTF +#define SANITIZER_INTERCEPT_ISOC99_PRINTF 0 + +#undef SANITIZER_INTERCEPT___PRINTF_CHK +#define SANITIZER_INTERCEPT___PRINTF_CHK 0 + +#undef SANITIZER_INTERCEPT_FREXP +#define SANITIZER_INTERCEPT_FREXP 0 + +#undef SANITIZER_INTERCEPT_FREXPF_FREXPL +#define SANITIZER_INTERCEPT_FREXPF_FREXPL 0 + +#undef SANITIZER_INTERCEPT_GETPWNAM_AND_FRIENDS +#define SANITIZER_INTERCEPT_GETPWNAM_AND_FRIENDS 0 + +#undef SANITIZER_INTERCEPT_GETPWNAM_R_AND_FRIENDS +#define SANITIZER_INTERCEPT_GETPWNAM_R_AND_FRIENDS 0 + +#undef SANITIZER_INTERCEPT_GETPWENT +#define SANITIZER_INTERCEPT_GETPWENT 0 + +#undef SANITIZER_INTERCEPT_FGETGRENT_R +#define SANITIZER_INTERCEPT_FGETGRENT_R 0 + +#undef SANITIZER_INTERCEPT_FGETPWENT +#define SANITIZER_INTERCEPT_FGETPWENT 0 + +#undef SANITIZER_INTERCEPT_GETPWENT_R +#define SANITIZER_INTERCEPT_GETPWENT_R 0 + +#undef SANITIZER_INTERCEPT_FGETPWENT_R +#define SANITIZER_INTERCEPT_FGETPWENT_R 0 + +#undef SANITIZER_INTERCEPT_SETPWENT +#define SANITIZER_INTERCEPT_SETPWENT 0 + +#undef SANITIZER_INTERCEPT_CLOCK_GETTIME +#define SANITIZER_INTERCEPT_CLOCK_GETTIME 0 + +#undef SANITIZER_INTERCEPT_CLOCK_GETCPUCLOCKID +#define SANITIZER_INTERCEPT_CLOCK_GETCPUCLOCKID 0 + +#undef SANITIZER_INTERCEPT_GETITIMER +#define SANITIZER_INTERCEPT_GETITIMER 0 + +#undef SANITIZER_INTERCEPT_TIME +#define SANITIZER_INTERCEPT_TIME 0 + +#undef SANITIZER_INTERCEPT_GLOB +#define SANITIZER_INTERCEPT_GLOB 0 + +#undef SANITIZER_INTERCEPT_GLOB64 +#define SANITIZER_INTERCEPT_GLOB64 0 + +#undef SANITIZER_INTERCEPT___B64_TO +#define SANITIZER_INTERCEPT___B64_TO 0 + +#undef SANITIZER_INTERCEPT_DN_COMP_EXPAND +#define SANITIZER_INTERCEPT_DN_COMP_EXPAND 0 + +#undef SANITIZER_INTERCEPT_POSIX_SPAWN +#define SANITIZER_INTERCEPT_POSIX_SPAWN 0 + +#undef SANITIZER_INTERCEPT_WAIT +#define SANITIZER_INTERCEPT_WAIT 0 + +#undef SANITIZER_INTERCEPT_INET +#define SANITIZER_INTERCEPT_INET 0 + +#undef SANITIZER_INTERCEPT_PTHREAD_GETSCHEDPARAM +#define SANITIZER_INTERCEPT_PTHREAD_GETSCHEDPARAM 0 + +#undef SANITIZER_INTERCEPT_GETADDRINFO +#define SANITIZER_INTERCEPT_GETADDRINFO 0 + +#undef SANITIZER_INTERCEPT_GETNAMEINFO +#define SANITIZER_INTERCEPT_GETNAMEINFO 0 + +#undef SANITIZER_INTERCEPT_GETSOCKNAME +#define SANITIZER_INTERCEPT_GETSOCKNAME 0 + +#undef SANITIZER_INTERCEPT_GETHOSTBYNAME +#define SANITIZER_INTERCEPT_GETHOSTBYNAME 0 + +#undef SANITIZER_INTERCEPT_GETHOSTBYNAME2 +#define SANITIZER_INTERCEPT_GETHOSTBYNAME2 0 + +#undef SANITIZER_INTERCEPT_GETHOSTBYNAME_R +#define SANITIZER_INTERCEPT_GETHOSTBYNAME_R 0 + +#undef SANITIZER_INTERCEPT_GETHOSTBYNAME2_R +#define SANITIZER_INTERCEPT_GETHOSTBYNAME2_R 0 + +#undef SANITIZER_INTERCEPT_GETHOSTBYADDR_R +#define SANITIZER_INTERCEPT_GETHOSTBYADDR_R 0 + +#undef SANITIZER_INTERCEPT_GETHOSTENT_R +#define SANITIZER_INTERCEPT_GETHOSTENT_R 0 + +#undef SANITIZER_INTERCEPT_GETSOCKOPT +#define SANITIZER_INTERCEPT_GETSOCKOPT 0 + +#undef SANITIZER_INTERCEPT_ACCEPT +#define SANITIZER_INTERCEPT_ACCEPT 0 + +#undef SANITIZER_INTERCEPT_ACCEPT4 +#define SANITIZER_INTERCEPT_ACCEPT4 0 + +#undef SANITIZER_INTERCEPT_PACCEPT +#define SANITIZER_INTERCEPT_PACCEPT 0 + +#undef SANITIZER_INTERCEPT_MODF +#define SANITIZER_INTERCEPT_MODF 0 + +#undef SANITIZER_INTERCEPT_RECVMSG +#define SANITIZER_INTERCEPT_RECVMSG 0 + +#undef SANITIZER_INTERCEPT_SENDMSG +#define SANITIZER_INTERCEPT_SENDMSG 0 + +#undef SANITIZER_INTERCEPT_RECVMMSG +#define SANITIZER_INTERCEPT_RECVMMSG 0 + +#undef SANITIZER_INTERCEPT_SENDMMSG +#define SANITIZER_INTERCEPT_SENDMMSG 0 + +#undef SANITIZER_INTERCEPT_SYSMSG +#define SANITIZER_INTERCEPT_SYSMSG 0 + +#undef SANITIZER_INTERCEPT_GETPEERNAME +#define SANITIZER_INTERCEPT_GETPEERNAME 0 + +#undef SANITIZER_INTERCEPT_IOCTL +#define SANITIZER_INTERCEPT_IOCTL 0 + +#undef SANITIZER_INTERCEPT_INET_ATON +#define SANITIZER_INTERCEPT_INET_ATON 0 + +#undef SANITIZER_INTERCEPT_SYSINFO +#define SANITIZER_INTERCEPT_SYSINFO 0 + +#undef SANITIZER_INTERCEPT_READDIR +#define SANITIZER_INTERCEPT_READDIR 0 + +#undef SANITIZER_INTERCEPT_READDIR64 +#define SANITIZER_INTERCEPT_READDIR64 0 + +#undef SANITIZER_INTERCEPT_PTRACE +#define SANITIZER_INTERCEPT_PTRACE 0 + +#undef SANITIZER_INTERCEPT_PTRACE +#define SANITIZER_INTERCEPT_PTRACE 0 + +#undef SANITIZER_INTERCEPT_SETLOCALE +#define SANITIZER_INTERCEPT_SETLOCALE 0 + +#undef SANITIZER_INTERCEPT_GETCWD +#define SANITIZER_INTERCEPT_GETCWD 0 + +#undef SANITIZER_INTERCEPT_GET_CURRENT_DIR_NAME +#define SANITIZER_INTERCEPT_GET_CURRENT_DIR_NAME 0 + +#undef SANITIZER_INTERCEPT_STRTOIMAX +#define SANITIZER_INTERCEPT_STRTOIMAX 0 + +#undef SANITIZER_INTERCEPT_MBSTOWCS +#define SANITIZER_INTERCEPT_MBSTOWCS 0 + +#undef SANITIZER_INTERCEPT_MBSNRTOWCS +#define SANITIZER_INTERCEPT_MBSNRTOWCS 0 + +#undef SANITIZER_INTERCEPT_WCSTOMBS +#define SANITIZER_INTERCEPT_WCSTOMBS 0 + +#undef SANITIZER_INTERCEPT_STRXFRM +#define SANITIZER_INTERCEPT_STRXFRM 0 + +#undef SANITIZER_INTERCEPT___STRXFRM_L +#define SANITIZER_INTERCEPT___STRXFRM_L 0 + +#undef SANITIZER_INTERCEPT_WCSXFRM +#define SANITIZER_INTERCEPT_WCSXFRM 0 + +#undef SANITIZER_INTERCEPT___WCSXFRM_L +#define SANITIZER_INTERCEPT___WCSXFRM_L 0 + +#undef SANITIZER_INTERCEPT_WCSNRTOMBS +#define SANITIZER_INTERCEPT_WCSNRTOMBS 0 + +#undef SANITIZER_INTERCEPT_WCRTOMB +#define SANITIZER_INTERCEPT_WCRTOMB 0 + +#undef SANITIZER_INTERCEPT_WCTOMB +#define SANITIZER_INTERCEPT_WCTOMB 0 + +#undef SANITIZER_INTERCEPT_TCGETATTR +#define SANITIZER_INTERCEPT_TCGETATTR 0 + +#undef SANITIZER_INTERCEPT_REALPATH +#define SANITIZER_INTERCEPT_REALPATH 0 + +#undef SANITIZER_INTERCEPT_CANONICALIZE_FILE_NAME +#define SANITIZER_INTERCEPT_CANONICALIZE_FILE_NAME 0 + +#undef SANITIZER_INTERCEPT_CONFSTR +#define SANITIZER_INTERCEPT_CONFSTR 0 + +#undef SANITIZER_INTERCEPT_SCHED_GETAFFINITY +#define SANITIZER_INTERCEPT_SCHED_GETAFFINITY 0 + +#undef SANITIZER_INTERCEPT_SCHED_GETPARAM +#define SANITIZER_INTERCEPT_SCHED_GETPARAM 0 + +#undef SANITIZER_INTERCEPT_STRERROR +#define SANITIZER_INTERCEPT_STRERROR 0 + +#undef SANITIZER_INTERCEPT_STRERROR_R +#define SANITIZER_INTERCEPT_STRERROR_R 0 + +#undef SANITIZER_INTERCEPT_XPG_STRERROR_R +#define SANITIZER_INTERCEPT_XPG_STRERROR_R 0 + +#undef SANITIZER_INTERCEPT_SCANDIR +#define SANITIZER_INTERCEPT_SCANDIR 0 + +#undef SANITIZER_INTERCEPT_SCANDIR64 +#define SANITIZER_INTERCEPT_SCANDIR64 0 + +#undef SANITIZER_INTERCEPT_GETGROUPS +#define SANITIZER_INTERCEPT_GETGROUPS 0 + +#undef SANITIZER_INTERCEPT_POLL +#define SANITIZER_INTERCEPT_POLL 0 + +#undef SANITIZER_INTERCEPT_PPOLL +#define SANITIZER_INTERCEPT_PPOLL 0 + +#undef SANITIZER_INTERCEPT_WORDEXP +#define SANITIZER_INTERCEPT_WORDEXP 0 + +#undef SANITIZER_INTERCEPT_SIGWAIT +#define SANITIZER_INTERCEPT_SIGWAIT 0 + +#undef SANITIZER_INTERCEPT_SIGWAITINFO +#define SANITIZER_INTERCEPT_SIGWAITINFO 0 + +#undef SANITIZER_INTERCEPT_SIGTIMEDWAIT +#define SANITIZER_INTERCEPT_SIGTIMEDWAIT 0 + +#undef SANITIZER_INTERCEPT_SIGSETOPS +#define SANITIZER_INTERCEPT_SIGSETOPS 0 + +#undef SANITIZER_INTERCEPT_SIGSET_LOGICOPS +#define SANITIZER_INTERCEPT_SIGSET_LOGICOPS 0 + +#undef SANITIZER_INTERCEPT_SIGPENDING +#define SANITIZER_INTERCEPT_SIGPENDING 0 + +#undef SANITIZER_INTERCEPT_SIGPROCMASK +#define SANITIZER_INTERCEPT_SIGPROCMASK 0 + +#undef SANITIZER_INTERCEPT_PTHREAD_SIGMASK +#define SANITIZER_INTERCEPT_PTHREAD_SIGMASK 0 + +#undef SANITIZER_INTERCEPT_BACKTRACE +#define SANITIZER_INTERCEPT_BACKTRACE 0 + +#undef SANITIZER_INTERCEPT_GETMNTENT +#define SANITIZER_INTERCEPT_GETMNTENT 0 + +#undef SANITIZER_INTERCEPT_GETMNTENT_R +#define SANITIZER_INTERCEPT_GETMNTENT_R 0 + +#undef SANITIZER_INTERCEPT_STATFS +#define SANITIZER_INTERCEPT_STATFS 0 + +#undef SANITIZER_INTERCEPT_STATFS64 +#define SANITIZER_INTERCEPT_STATFS64 0 + +#undef SANITIZER_INTERCEPT_STATVFS +#define SANITIZER_INTERCEPT_STATVFS 0 + +#undef SANITIZER_INTERCEPT_STATVFS64 +#define SANITIZER_INTERCEPT_STATVFS64 0 + +#undef SANITIZER_INTERCEPT_INITGROUPS +#define SANITIZER_INTERCEPT_INITGROUPS 0 + +#undef SANITIZER_INTERCEPT_ETHER_NTOA_ATON +#define SANITIZER_INTERCEPT_ETHER_NTOA_ATON 0 + +#undef SANITIZER_INTERCEPT_ETHER_HOST +#define SANITIZER_INTERCEPT_ETHER_HOST 0 + +#undef SANITIZER_INTERCEPT_ETHER_R +#define SANITIZER_INTERCEPT_ETHER_R 0 + +#undef SANITIZER_INTERCEPT_SHMCTL +#define SANITIZER_INTERCEPT_SHMCTL 0 + +#undef SANITIZER_INTERCEPT_RANDOM_R +#define SANITIZER_INTERCEPT_RANDOM_R 0 + +#undef SANITIZER_INTERCEPT_PTHREAD_ATTR_GET +#define SANITIZER_INTERCEPT_PTHREAD_ATTR_GET 0 + +#undef SANITIZER_INTERCEPT_PTHREAD_ATTR_GETINHERITSCHED +#define SANITIZER_INTERCEPT_PTHREAD_ATTR_GETINHERITSCHED 0 + +#undef SANITIZER_INTERCEPT_PTHREAD_ATTR_GETAFFINITY_NP +#define SANITIZER_INTERCEPT_PTHREAD_ATTR_GETAFFINITY_NP 0 + +#undef SANITIZER_INTERCEPT_PTHREAD_GETAFFINITY_NP +#define SANITIZER_INTERCEPT_PTHREAD_GETAFFINITY_NP 0 + +#undef SANITIZER_INTERCEPT_PTHREAD_ATTR_GET_SCHED +#define SANITIZER_INTERCEPT_PTHREAD_ATTR_GET_SCHED 0 + +#undef SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETPSHARED +#define SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETPSHARED 0 + +#undef SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETTYPE +#define SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETTYPE 0 + +#undef SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETPROTOCOL +#define SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETPROTOCOL 0 + +#undef SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETPRIOCEILING +#define SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETPRIOCEILING 0 + +#undef SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETROBUST +#define SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETROBUST 0 + +#undef SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETROBUST_NP +#define SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETROBUST_NP 0 + +#undef SANITIZER_INTERCEPT_PTHREAD_RWLOCKATTR_GETPSHARED +#define SANITIZER_INTERCEPT_PTHREAD_RWLOCKATTR_GETPSHARED 0 + +#undef SANITIZER_INTERCEPT_PTHREAD_RWLOCKATTR_GETKIND_NP +#define SANITIZER_INTERCEPT_PTHREAD_RWLOCKATTR_GETKIND_NP 0 + +#undef SANITIZER_INTERCEPT_PTHREAD_CONDATTR_GETPSHARED +#define SANITIZER_INTERCEPT_PTHREAD_CONDATTR_GETPSHARED 0 + +#undef SANITIZER_INTERCEPT_PTHREAD_CONDATTR_GETCLOCK +#define SANITIZER_INTERCEPT_PTHREAD_CONDATTR_GETCLOCK 0 + +#undef SANITIZER_INTERCEPT_PTHREAD_BARRIERATTR_GETPSHARED +#define SANITIZER_INTERCEPT_PTHREAD_BARRIERATTR_GETPSHARED 0 + +#undef SANITIZER_INTERCEPT_TRYJOIN +#define SANITIZER_INTERCEPT_TRYJOIN 0 + +#undef SANITIZER_INTERCEPT_TIMEDJOIN +#define SANITIZER_INTERCEPT_TIMEDJOIN 0 + +#undef SANITIZER_INTERCEPT_THR_EXIT +#define SANITIZER_INTERCEPT_THR_EXIT 0 + +#undef SANITIZER_INTERCEPT_TMPNAM +#define SANITIZER_INTERCEPT_TMPNAM 0 + +#undef SANITIZER_INTERCEPT_TMPNAM_R +#define SANITIZER_INTERCEPT_TMPNAM_R 0 + +#undef SANITIZER_INTERCEPT_PTSNAME +#define SANITIZER_INTERCEPT_PTSNAME 0 + +#undef SANITIZER_INTERCEPT_PTSNAME_R +#define SANITIZER_INTERCEPT_PTSNAME_R 0 + +#undef SANITIZER_INTERCEPT_TTYNAME +#define SANITIZER_INTERCEPT_TTYNAME 0 + +#undef SANITIZER_INTERCEPT_TTYNAME_R +#define SANITIZER_INTERCEPT_TTYNAME_R 0 + +#undef SANITIZER_INTERCEPT_TEMPNAM +#define SANITIZER_INTERCEPT_TEMPNAM 0 + +#undef SANITIZER_INTERCEPT_SINCOS +#define SANITIZER_INTERCEPT_SINCOS 0 + +#undef SANITIZER_INTERCEPT_REMQUO +#define SANITIZER_INTERCEPT_REMQUO 0 + +#undef SANITIZER_INTERCEPT_REMQUOL +#define SANITIZER_INTERCEPT_REMQUOL 0 + +#undef SANITIZER_INTERCEPT_LGAMMA +#define SANITIZER_INTERCEPT_LGAMMA 0 + +#undef SANITIZER_INTERCEPT_LGAMMAL +#define SANITIZER_INTERCEPT_LGAMMAL 0 + +#undef SANITIZER_INTERCEPT_LGAMMA_R +#define SANITIZER_INTERCEPT_LGAMMA_R 0 + +#undef SANITIZER_INTERCEPT_LGAMMAL_R +#define SANITIZER_INTERCEPT_LGAMMAL_R 0 + +#undef SANITIZER_INTERCEPT_DRAND48_R +#define SANITIZER_INTERCEPT_DRAND48_R 0 + +#undef SANITIZER_INTERCEPT_RAND_R +#define SANITIZER_INTERCEPT_RAND_R 0 + +#undef SANITIZER_INTERCEPT_ICONV +#define SANITIZER_INTERCEPT_ICONV 0 + +#undef SANITIZER_INTERCEPT_TIMES +#define SANITIZER_INTERCEPT_TIMES 0 + +#undef SANITIZER_INTERCEPT_GETLINE +#define SANITIZER_INTERCEPT_GETLINE 0 + +#undef SANITIZER_INTERCEPT__EXIT +#define SANITIZER_INTERCEPT__EXIT 0 + +#undef SANITIZER_INTERCEPT___LIBC_MUTEX +#define SANITIZER_INTERCEPT___LIBC_MUTEX 0 + +#undef SANITIZER_INTERCEPT_PTHREAD_SETNAME_NP +#define SANITIZER_INTERCEPT_PTHREAD_SETNAME_NP 0 + +#undef SANITIZER_INTERCEPT_PTHREAD_GETNAME_NP +#define SANITIZER_INTERCEPT_PTHREAD_GETNAME_NP 0 + +#undef SANITIZER_INTERCEPT_TLS_GET_ADDR +#define SANITIZER_INTERCEPT_TLS_GET_ADDR 0 + +#undef SANITIZER_INTERCEPT_LISTXATTR +#define SANITIZER_INTERCEPT_LISTXATTR 0 + +#undef SANITIZER_INTERCEPT_GETXATTR +#define SANITIZER_INTERCEPT_GETXATTR 0 + +#undef SANITIZER_INTERCEPT_GETRESID +#define SANITIZER_INTERCEPT_GETRESID 0 + +#undef SANITIZER_INTERCEPT_GETIFADDRS +#define SANITIZER_INTERCEPT_GETIFADDRS 0 + +#undef SANITIZER_INTERCEPT_IF_INDEXTONAME +#define SANITIZER_INTERCEPT_IF_INDEXTONAME 0 + +#undef SANITIZER_INTERCEPT_CAPGET +#define SANITIZER_INTERCEPT_CAPGET 0 + +#undef SANITIZER_INTERCEPT_AEABI_MEM +#define SANITIZER_INTERCEPT_AEABI_MEM 0 + +#undef SANITIZER_INTERCEPT_AEABI_MEM +#define SANITIZER_INTERCEPT_AEABI_MEM 0 + +#undef SANITIZER_INTERCEPT___BZERO +#define SANITIZER_INTERCEPT___BZERO 0 + +#undef SANITIZER_INTERCEPT_BZERO +#define SANITIZER_INTERCEPT_BZERO 0 + +#undef SANITIZER_INTERCEPT_FTIME +#define SANITIZER_INTERCEPT_FTIME 0 + +#undef SANITIZER_INTERCEPT_XDR +#define SANITIZER_INTERCEPT_XDR 0 + +#undef SANITIZER_INTERCEPT_XDRREC +#define SANITIZER_INTERCEPT_XDRREC 0 + +#undef SANITIZER_INTERCEPT_TSEARCH +#define SANITIZER_INTERCEPT_TSEARCH 0 + +#undef SANITIZER_INTERCEPT_LIBIO_INTERNALS +#define SANITIZER_INTERCEPT_LIBIO_INTERNALS 0 + +#undef SANITIZER_INTERCEPT_FOPEN +#define SANITIZER_INTERCEPT_FOPEN 0 + +#undef SANITIZER_INTERCEPT_FOPEN64 +#define SANITIZER_INTERCEPT_FOPEN64 0 + +#undef SANITIZER_INTERCEPT_OPEN_MEMSTREAM +#define SANITIZER_INTERCEPT_OPEN_MEMSTREAM 0 + +#undef SANITIZER_INTERCEPT_OBSTACK +#define SANITIZER_INTERCEPT_OBSTACK 0 + +#undef SANITIZER_INTERCEPT_FFLUSH +#define SANITIZER_INTERCEPT_FFLUSH 0 + +#undef SANITIZER_INTERCEPT_FCLOSE +#define SANITIZER_INTERCEPT_FCLOSE 0 + +#undef SANITIZER_INTERCEPT_DLOPEN_DLCLOSE +#define SANITIZER_INTERCEPT_DLOPEN_DLCLOSE 0 + +#undef SANITIZER_INTERCEPT_GETPASS +#define SANITIZER_INTERCEPT_GETPASS 0 + +#undef SANITIZER_INTERCEPT_TIMERFD +#define SANITIZER_INTERCEPT_TIMERFD 0 + +#undef SANITIZER_INTERCEPT_MLOCKX +#define SANITIZER_INTERCEPT_MLOCKX 0 + +#undef SANITIZER_INTERCEPT_FOPENCOOKIE +#define SANITIZER_INTERCEPT_FOPENCOOKIE 0 + +#undef SANITIZER_INTERCEPT_SEM +#define SANITIZER_INTERCEPT_SEM 0 + +#undef SANITIZER_INTERCEPT_PTHREAD_SETCANCEL +#define SANITIZER_INTERCEPT_PTHREAD_SETCANCEL 0 + +#undef SANITIZER_INTERCEPT_MINCORE +#define SANITIZER_INTERCEPT_MINCORE 0 + +#undef SANITIZER_INTERCEPT_PROCESS_VM_READV +#define SANITIZER_INTERCEPT_PROCESS_VM_READV 0 + +#undef SANITIZER_INTERCEPT_CTERMID +#define SANITIZER_INTERCEPT_CTERMID 0 + +#undef SANITIZER_INTERCEPT_CTERMID_R +#define SANITIZER_INTERCEPT_CTERMID_R 0 + +#undef SANITIZER_INTERCEPTOR_HOOKS +#define SANITIZER_INTERCEPTOR_HOOKS 0 + +#undef SANITIZER_INTERCEPT_RECV_RECVFROM +#define SANITIZER_INTERCEPT_RECV_RECVFROM 0 + +#undef SANITIZER_INTERCEPT_SEND_SENDTO +#define SANITIZER_INTERCEPT_SEND_SENDTO 0 + +#undef SANITIZER_INTERCEPT_EVENTFD_READ_WRITE +#define SANITIZER_INTERCEPT_EVENTFD_READ_WRITE 0 + +#undef SANITIZER_INTERCEPT_STAT +#define SANITIZER_INTERCEPT_STAT 0 + +#undef SANITIZER_INTERCEPT_STAT64 +#define SANITIZER_INTERCEPT_STAT64 0 + +#undef SANITIZER_INTERCEPT_LSTAT +#define SANITIZER_INTERCEPT_LSTAT 0 + +#undef SANITIZER_INTERCEPT___XSTAT +#define SANITIZER_INTERCEPT___XSTAT 0 + +#undef SANITIZER_INTERCEPT___XSTAT64 +#define SANITIZER_INTERCEPT___XSTAT64 0 + +#undef SANITIZER_INTERCEPT___LXSTAT +#define SANITIZER_INTERCEPT___LXSTAT 0 + +#undef SANITIZER_INTERCEPT___LXSTAT64 +#define SANITIZER_INTERCEPT___LXSTAT64 0 + +#undef SANITIZER_INTERCEPT_UTMP +#define SANITIZER_INTERCEPT_UTMP 0 + +#undef SANITIZER_INTERCEPT_UTMPX +#define SANITIZER_INTERCEPT_UTMPX 0 + +#undef SANITIZER_INTERCEPT_GETLOADAVG +#define SANITIZER_INTERCEPT_GETLOADAVG 0 + +// #undef SANITIZER_INTERCEPT_MMAP +// #define SANITIZER_INTERCEPT_MMAP 0 + +#undef SANITIZER_INTERCEPT_MMAP64 +#define SANITIZER_INTERCEPT_MMAP64 0 + +#undef SANITIZER_INTERCEPT_MALLOPT_AND_MALLINFO +#define SANITIZER_INTERCEPT_MALLOPT_AND_MALLINFO 0 + +#undef SANITIZER_INTERCEPT_MEMALIGN +#define SANITIZER_INTERCEPT_MEMALIGN 0 + +#undef SANITIZER_INTERCEPT___LIBC_MEMALIGN +#define SANITIZER_INTERCEPT___LIBC_MEMALIGN 0 + +#undef SANITIZER_INTERCEPT_PVALLOC +#define SANITIZER_INTERCEPT_PVALLOC 0 + +#undef SANITIZER_INTERCEPT_CFREE +#define SANITIZER_INTERCEPT_CFREE 0 + +#undef SANITIZER_INTERCEPT_REALLOCARRAY +#define SANITIZER_INTERCEPT_REALLOCARRAY 0 + +#undef SANITIZER_INTERCEPT_ALIGNED_ALLOC +#define SANITIZER_INTERCEPT_ALIGNED_ALLOC 0 + +#undef SANITIZER_INTERCEPT_MALLOC_USABLE_SIZE +#define SANITIZER_INTERCEPT_MALLOC_USABLE_SIZE 0 + +#undef SANITIZER_INTERCEPT_MCHECK_MPROBE +#define SANITIZER_INTERCEPT_MCHECK_MPROBE 0 + +#undef SANITIZER_INTERCEPT_WCSLEN +#define SANITIZER_INTERCEPT_WCSLEN 0 + +#undef SANITIZER_INTERCEPT_WCSCAT +#define SANITIZER_INTERCEPT_WCSCAT 0 + +#undef SANITIZER_INTERCEPT_WCSDUP +#define SANITIZER_INTERCEPT_WCSDUP 0 + +#undef SANITIZER_INTERCEPT_SIGNAL_AND_SIGACTION +#define SANITIZER_INTERCEPT_SIGNAL_AND_SIGACTION 0 + +#undef SANITIZER_INTERCEPT_BSD_SIGNAL +#define SANITIZER_INTERCEPT_BSD_SIGNAL 0 + +#undef SANITIZER_INTERCEPT_ACCT +#define SANITIZER_INTERCEPT_ACCT 0 + +#undef SANITIZER_INTERCEPT_USER_FROM_UID +#define SANITIZER_INTERCEPT_USER_FROM_UID 0 + +#undef SANITIZER_INTERCEPT_UID_FROM_USER +#define SANITIZER_INTERCEPT_UID_FROM_USER 0 + +#undef SANITIZER_INTERCEPT_GROUP_FROM_GID +#define SANITIZER_INTERCEPT_GROUP_FROM_GID 0 + +#undef SANITIZER_INTERCEPT_GID_FROM_GROUP +#define SANITIZER_INTERCEPT_GID_FROM_GROUP 0 + +#undef SANITIZER_INTERCEPT_ACCESS +#define SANITIZER_INTERCEPT_ACCESS 0 + +#undef SANITIZER_INTERCEPT_FACCESSAT +#define SANITIZER_INTERCEPT_FACCESSAT 0 + +#undef SANITIZER_INTERCEPT_GETGROUPLIST +#define SANITIZER_INTERCEPT_GETGROUPLIST 0 + +#undef SANITIZER_INTERCEPT_STRLCPY +#define SANITIZER_INTERCEPT_STRLCPY 0 + +#undef SANITIZER_INTERCEPT_NAME_TO_HANDLE_AT +#define SANITIZER_INTERCEPT_NAME_TO_HANDLE_AT 0 + +#undef SANITIZER_INTERCEPT_OPEN_BY_HANDLE_AT +#define SANITIZER_INTERCEPT_OPEN_BY_HANDLE_AT 0 + +#undef SANITIZER_INTERCEPT_READLINK +#define SANITIZER_INTERCEPT_READLINK 0 + +#undef SANITIZER_INTERCEPT_READLINKAT +#define SANITIZER_INTERCEPT_READLINKAT 0 + +#undef SANITIZER_INTERCEPT_DEVNAME +#define SANITIZER_INTERCEPT_DEVNAME 0 + +#undef SANITIZER_INTERCEPT_DEVNAME_R +#define SANITIZER_INTERCEPT_DEVNAME_R 0 + +#undef SANITIZER_INTERCEPT_FGETLN +#define SANITIZER_INTERCEPT_FGETLN 0 + +#undef SANITIZER_INTERCEPT_STRMODE +#define SANITIZER_INTERCEPT_STRMODE 0 + +#undef SANITIZER_INTERCEPT_TTYENT +#define SANITIZER_INTERCEPT_TTYENT 0 + +#undef SANITIZER_INTERCEPT_TTYENTPATH +#define SANITIZER_INTERCEPT_TTYENTPATH 0 + +#undef SANITIZER_INTERCEPT_PROTOENT +#define SANITIZER_INTERCEPT_PROTOENT 0 + +#undef SANITIZER_INTERCEPT_PROTOENT_R +#define SANITIZER_INTERCEPT_PROTOENT_R 0 + +#undef SANITIZER_INTERCEPT_NETENT +#define SANITIZER_INTERCEPT_NETENT 0 + +#undef SANITIZER_INTERCEPT_SETVBUF +#define SANITIZER_INTERCEPT_SETVBUF 0 + +#undef SANITIZER_INTERCEPT_GETMNTINFO +#define SANITIZER_INTERCEPT_GETMNTINFO 0 + +#undef SANITIZER_INTERCEPT_MI_VECTOR_HASH +#define SANITIZER_INTERCEPT_MI_VECTOR_HASH 0 + +#undef SANITIZER_INTERCEPT_GETVFSSTAT +#define SANITIZER_INTERCEPT_GETVFSSTAT 0 + +#undef SANITIZER_INTERCEPT_REGEX +#define SANITIZER_INTERCEPT_REGEX 0 + +#undef SANITIZER_INTERCEPT_REGEXSUB +#define SANITIZER_INTERCEPT_REGEXSUB 0 + +#undef SANITIZER_INTERCEPT_FTS +#define SANITIZER_INTERCEPT_FTS 0 + +#undef SANITIZER_INTERCEPT_SYSCTL +#define SANITIZER_INTERCEPT_SYSCTL 0 + +#undef SANITIZER_INTERCEPT_ASYSCTL +#define SANITIZER_INTERCEPT_ASYSCTL 0 + +#undef SANITIZER_INTERCEPT_SYSCTLGETMIBINFO +#define SANITIZER_INTERCEPT_SYSCTLGETMIBINFO 0 + +#undef SANITIZER_INTERCEPT_NL_LANGINFO +#define SANITIZER_INTERCEPT_NL_LANGINFO 0 + +#undef SANITIZER_INTERCEPT_MODCTL +#define SANITIZER_INTERCEPT_MODCTL 0 + +#undef SANITIZER_INTERCEPT_CAPSICUM +#define SANITIZER_INTERCEPT_CAPSICUM 0 + +#undef SANITIZER_INTERCEPT_STRTONUM +#define SANITIZER_INTERCEPT_STRTONUM 0 + +#undef SANITIZER_INTERCEPT_FPARSELN +#define SANITIZER_INTERCEPT_FPARSELN 0 + +#undef SANITIZER_INTERCEPT_STATVFS1 +#define SANITIZER_INTERCEPT_STATVFS1 0 + +#undef SANITIZER_INTERCEPT_STRTOI +#define SANITIZER_INTERCEPT_STRTOI 0 + +#undef SANITIZER_INTERCEPT_CAPSICUM +#define SANITIZER_INTERCEPT_CAPSICUM 0 + +#undef SANITIZER_INTERCEPT_SHA1 +#define SANITIZER_INTERCEPT_SHA1 0 + +#undef SANITIZER_INTERCEPT_MD4 +#define SANITIZER_INTERCEPT_MD4 0 + +#undef SANITIZER_INTERCEPT_RMD160 +#define SANITIZER_INTERCEPT_RMD160 0 + +#undef SANITIZER_INTERCEPT_MD5 +#define SANITIZER_INTERCEPT_MD5 0 + +#undef SANITIZER_INTERCEPT_FSEEK +#define SANITIZER_INTERCEPT_FSEEK 0 + +#undef SANITIZER_INTERCEPT_MD2 +#define SANITIZER_INTERCEPT_MD2 0 + +#undef SANITIZER_INTERCEPT_SHA2 +#define SANITIZER_INTERCEPT_SHA2 0 + +#undef SANITIZER_INTERCEPT_CDB +#define SANITIZER_INTERCEPT_CDB 0 + +#undef SANITIZER_INTERCEPT_VIS +#define SANITIZER_INTERCEPT_VIS 0 + +#undef SANITIZER_INTERCEPT_POPEN +#define SANITIZER_INTERCEPT_POPEN 0 + +#undef SANITIZER_INTERCEPT_POPENVE +#define SANITIZER_INTERCEPT_POPENVE 0 + +#undef SANITIZER_INTERCEPT_PCLOSE +#define SANITIZER_INTERCEPT_PCLOSE 0 + +#undef SANITIZER_INTERCEPT_FUNOPEN +#define SANITIZER_INTERCEPT_FUNOPEN 0 + +#undef SANITIZER_INTERCEPT_FUNOPEN2 +#define SANITIZER_INTERCEPT_FUNOPEN2 0 + +#undef SANITIZER_INTERCEPT_GETFSENT +#define SANITIZER_INTERCEPT_GETFSENT 0 + +#undef SANITIZER_INTERCEPT_ARC4RANDOM +#define SANITIZER_INTERCEPT_ARC4RANDOM 0 + +#undef SANITIZER_INTERCEPT_FDEVNAME +#define SANITIZER_INTERCEPT_FDEVNAME 0 + +#undef SANITIZER_INTERCEPT_GETUSERSHELL +#define SANITIZER_INTERCEPT_GETUSERSHELL 0 + +#undef SANITIZER_INTERCEPT_SL_INIT +#define SANITIZER_INTERCEPT_SL_INIT 0 + +#undef SANITIZER_INTERCEPT_GETRANDOM +#define SANITIZER_INTERCEPT_GETRANDOM 0 + +#undef SANITIZER_INTERCEPT___CXA_ATEXIT +#define SANITIZER_INTERCEPT___CXA_ATEXIT 0 + +#undef SANITIZER_INTERCEPT_ATEXIT +#define SANITIZER_INTERCEPT_ATEXIT 0 + +#undef SANITIZER_INTERCEPT_PTHREAD_ATFORK +#define SANITIZER_INTERCEPT_PTHREAD_ATFORK 0 + +#undef SANITIZER_INTERCEPT_GETENTROPY +#define SANITIZER_INTERCEPT_GETENTROPY 0 + +#undef SANITIZER_INTERCEPT_QSORT +#define SANITIZER_INTERCEPT_QSORT 0 + +#undef SANITIZER_INTERCEPT_QSORT_R +#define SANITIZER_INTERCEPT_QSORT_R 0 + +#undef SANITIZER_INTERCEPT_BSEARCH +#define SANITIZER_INTERCEPT_BSEARCH 0 + +#undef SANITIZER_INTERCEPT_SIGALTSTACK +#define SANITIZER_INTERCEPT_SIGALTSTACK 0 + +#undef SANITIZER_INTERCEPT_UNAME +#define SANITIZER_INTERCEPT_UNAME 0 + +#undef SANITIZER_INTERCEPT___XUNAME +#define SANITIZER_INTERCEPT___XUNAME 0 + +#undef SANITIZER_INTERCEPT_FLOPEN +#define SANITIZER_INTERCEPT_FLOPEN 0 + +#undef SANITIZER_INTERCEPT_PROCCTL +#define SANITIZER_INTERCEPT_PROCCTL 0 + +#undef SANITIZER_INTERCEPT_HEXDUMP +#define SANITIZER_INTERCEPT_HEXDUMP 0 + +#undef SANITIZER_INTERCEPT_ARGP_PARSE +#define SANITIZER_INTERCEPT_ARGP_PARSE 0 + +#endif // HWASAN_PLATFORM_INTERCEPTORS_H diff --git a/libsanitizer/hwasan/hwasan_report.cpp b/libsanitizer/hwasan/hwasan_report.cpp index 8f9dc6cf13e0..5e8aa315801b 100644 --- a/libsanitizer/hwasan/hwasan_report.cpp +++ b/libsanitizer/hwasan/hwasan_report.cpp @@ -22,8 +22,10 @@ #include "hwasan_thread.h" #include "hwasan_thread_list.h" #include "sanitizer_common/sanitizer_allocator_internal.h" +#include "sanitizer_common/sanitizer_array_ref.h" #include "sanitizer_common/sanitizer_common.h" #include "sanitizer_common/sanitizer_flags.h" +#include "sanitizer_common/sanitizer_internal_defs.h" #include "sanitizer_common/sanitizer_mutex.h" #include "sanitizer_common/sanitizer_report_decorator.h" #include "sanitizer_common/sanitizer_stackdepot.h" @@ -36,7 +38,7 @@ namespace __hwasan { class ScopedReport { public: - ScopedReport(bool fatal = false) : error_message_(1), fatal(fatal) { + explicit ScopedReport(bool fatal) : fatal(fatal) { Lock lock(&error_message_lock_); error_message_ptr_ = fatal ? &error_message_ : nullptr; ++hwasan_report_count; @@ -64,11 +66,7 @@ class ScopedReport { Lock lock(&error_message_lock_); if (!error_message_ptr_) return; - uptr len = internal_strlen(msg); - uptr old_size = error_message_ptr_->size(); - error_message_ptr_->resize(old_size + len); - // overwrite old trailing '\0', keep new trailing '\0' untouched. - internal_memcpy(&(*error_message_ptr_)[old_size - 1], msg, len); + error_message_ptr_->Append(msg); } static void SetErrorReportCallback(void (*callback)(const char *)) { @@ -77,17 +75,17 @@ class ScopedReport { } private: - ScopedErrorReportLock error_report_lock_; - InternalMmapVector error_message_; + InternalScopedString error_message_; bool fatal; - static InternalMmapVector *error_message_ptr_; static Mutex error_message_lock_; + static InternalScopedString *error_message_ptr_ + SANITIZER_GUARDED_BY(error_message_lock_); static void (*error_report_callback_)(const char *); }; -InternalMmapVector *ScopedReport::error_message_ptr_; Mutex ScopedReport::error_message_lock_; +InternalScopedString *ScopedReport::error_message_ptr_; void (*ScopedReport::error_report_callback_)(const char *); // If there is an active ScopedReport, append to its error message. @@ -111,29 +109,45 @@ static void MaybePrintAndroidHelpUrl() { #endif } +namespace { // A RAII object that holds a copy of the current thread stack ring buffer. // The actual stack buffer may change while we are iterating over it (for // example, Printf may call syslog() which can itself be built with hwasan). class SavedStackAllocations { public: - SavedStackAllocations(StackAllocationsRingBuffer *rb) { + SavedStackAllocations() = default; + + explicit SavedStackAllocations(Thread *t) { CopyFrom(t); } + + void CopyFrom(Thread *t) { + StackAllocationsRingBuffer *rb = t->stack_allocations(); uptr size = rb->size() * sizeof(uptr); void *storage = MmapAlignedOrDieOnFatalError(size, size * 2, "saved stack allocations"); new (&rb_) StackAllocationsRingBuffer(*rb, storage); + thread_id_ = t->unique_id(); } ~SavedStackAllocations() { - StackAllocationsRingBuffer *rb = get(); - UnmapOrDie(rb->StartOfStorage(), rb->size() * sizeof(uptr)); + if (rb_) { + StackAllocationsRingBuffer *rb = get(); + UnmapOrDie(rb->StartOfStorage(), rb->size() * sizeof(uptr)); + } + } + + const StackAllocationsRingBuffer *get() const { + return (const StackAllocationsRingBuffer *)&rb_; } StackAllocationsRingBuffer *get() { return (StackAllocationsRingBuffer *)&rb_; } + u32 thread_id() const { return thread_id_; } + private: - uptr rb_; + uptr rb_ = 0; + u32 thread_id_; }; class Decorator: public __sanitizer::SanitizerCommonDecorator { @@ -146,6 +160,7 @@ class Decorator: public __sanitizer::SanitizerCommonDecorator { const char *Location() { return Green(); } const char *Thread() { return Green(); } }; +} // namespace static bool FindHeapAllocation(HeapAllocationsRingBuffer *rb, uptr tagged_addr, HeapAllocationRecord *har, uptr *ring_index, @@ -186,7 +201,7 @@ static bool FindHeapAllocation(HeapAllocationsRingBuffer *rb, uptr tagged_addr, return false; } -static void PrintStackAllocations(StackAllocationsRingBuffer *sa, +static void PrintStackAllocations(const StackAllocationsRingBuffer *sa, tag_t addr_tag, uptr untagged_addr) { uptr frames = Min((uptr)flags()->stack_history_size, sa->size()); bool found_local = false; @@ -242,12 +257,13 @@ static void PrintStackAllocations(StackAllocationsRingBuffer *sa, break; uptr pc_mask = (1ULL << 48) - 1; uptr pc = record & pc_mask; - frame_desc.append(" record_addr:0x%zx record:0x%zx", - reinterpret_cast(record_addr), record); + frame_desc.AppendF(" record_addr:0x%zx record:0x%zx", + reinterpret_cast(record_addr), record); if (SymbolizedStack *frame = Symbolizer::GetOrInit()->SymbolizePC(pc)) { - RenderFrame(&frame_desc, " %F %L", 0, frame->info.address, &frame->info, - common_flags()->symbolize_vs_style, - common_flags()->strip_path_prefix); + StackTracePrinter::GetOrInit()->RenderFrame( + &frame_desc, " %F %L", 0, frame->info.address, &frame->info, + common_flags()->symbolize_vs_style, + common_flags()->strip_path_prefix); frame->ClearAll(); } Printf("%s\n", frame_desc.data()); @@ -305,22 +321,342 @@ static uptr GetGlobalSizeFromDescriptor(uptr ptr) { return 0; } -static void ShowHeapOrGlobalCandidate(uptr untagged_addr, tag_t *candidate, - tag_t *left, tag_t *right) { - Decorator d; - uptr mem = ShadowToMem(reinterpret_cast(candidate)); - HwasanChunkView chunk = FindHeapChunkByAddress(mem); +void ReportStats() {} + +constexpr uptr kDumpWidth = 16; +constexpr uptr kShadowLines = 17; +constexpr uptr kShadowDumpSize = kShadowLines * kDumpWidth; + +constexpr uptr kShortLines = 3; +constexpr uptr kShortDumpSize = kShortLines * kDumpWidth; +constexpr uptr kShortDumpOffset = (kShadowLines - kShortLines) / 2 * kDumpWidth; + +static uptr GetPrintTagStart(uptr addr) { + addr = MemToShadow(addr); + addr = RoundDownTo(addr, kDumpWidth); + addr -= kDumpWidth * (kShadowLines / 2); + return addr; +} + +template +static void PrintTagInfoAroundAddr(uptr addr, uptr num_rows, + InternalScopedString &s, + PrintTag print_tag) { + uptr center_row_beg = RoundDownTo(addr, kDumpWidth); + uptr beg_row = center_row_beg - kDumpWidth * (num_rows / 2); + uptr end_row = center_row_beg + kDumpWidth * ((num_rows + 1) / 2); + for (uptr row = beg_row; row < end_row; row += kDumpWidth) { + s.Append(row == center_row_beg ? "=>" : " "); + s.AppendF("%p:", (void *)ShadowToMem(row)); + for (uptr i = 0; i < kDumpWidth; i++) { + s.Append(row + i == addr ? "[" : " "); + print_tag(s, row + i); + s.Append(row + i == addr ? "]" : " "); + } + s.AppendF("\n"); + } +} + +template +static void PrintTagsAroundAddr(uptr addr, GetTag get_tag, + GetShortTag get_short_tag) { + InternalScopedString s; + addr = MemToShadow(addr); + s.AppendF( + "Memory tags around the buggy address (one tag corresponds to %zd " + "bytes):\n", + kShadowAlignment); + PrintTagInfoAroundAddr(addr, kShadowLines, s, + [&](InternalScopedString &s, uptr tag_addr) { + tag_t tag = get_tag(tag_addr); + s.AppendF("%02x", tag); + }); + + s.AppendF( + "Tags for short granules around the buggy address (one tag corresponds " + "to %zd bytes):\n", + kShadowAlignment); + PrintTagInfoAroundAddr(addr, kShortLines, s, + [&](InternalScopedString &s, uptr tag_addr) { + tag_t tag = get_tag(tag_addr); + if (tag >= 1 && tag <= kShadowAlignment) { + tag_t short_tag = get_short_tag(tag_addr); + s.AppendF("%02x", short_tag); + } else { + s.AppendF(".."); + } + }); + s.AppendF( + "See " + "https://clang.llvm.org/docs/" + "HardwareAssistedAddressSanitizerDesign.html#short-granules for a " + "description of short granule tags\n"); + Printf("%s", s.data()); +} + +static uptr GetTopPc(const StackTrace *stack) { + return stack->size ? StackTrace::GetPreviousInstructionPc(stack->trace[0]) + : 0; +} + +namespace { +class BaseReport { + public: + BaseReport(StackTrace *stack, bool fatal, uptr tagged_addr, uptr access_size) + : scoped_report(fatal), + stack(stack), + tagged_addr(tagged_addr), + access_size(access_size), + untagged_addr(UntagAddr(tagged_addr)), + ptr_tag(GetTagFromPointer(tagged_addr)), + mismatch_offset(FindMismatchOffset()), + heap(CopyHeapChunk()), + allocations(CopyAllocations()), + candidate(FindBufferOverflowCandidate()), + shadow(CopyShadow()) {} + + protected: + struct OverflowCandidate { + uptr untagged_addr = 0; + bool after = false; + bool is_close = false; + + struct { + uptr begin = 0; + uptr end = 0; + u32 thread_id = 0; + u32 stack_id = 0; + bool is_allocated = false; + } heap; + }; + + struct HeapAllocation { + HeapAllocationRecord har = {}; + uptr ring_index = 0; + uptr num_matching_addrs = 0; + uptr num_matching_addrs_4b = 0; + u32 free_thread_id = 0; + }; + + struct Allocations { + ArrayRef stack; + ArrayRef heap; + }; + + struct HeapChunk { + uptr begin = 0; + uptr size = 0; + u32 stack_id = 0; + bool from_small_heap = false; + bool is_allocated = false; + }; + + struct Shadow { + uptr addr = 0; + tag_t tags[kShadowDumpSize] = {}; + tag_t short_tags[kShortDumpSize] = {}; + }; + + sptr FindMismatchOffset() const; + Shadow CopyShadow() const; + tag_t GetTagCopy(uptr addr) const; + tag_t GetShortTagCopy(uptr addr) const; + HeapChunk CopyHeapChunk() const; + Allocations CopyAllocations(); + OverflowCandidate FindBufferOverflowCandidate() const; + void PrintAddressDescription() const; + void PrintHeapOrGlobalCandidate() const; + void PrintTags(uptr addr) const; + + SavedStackAllocations stack_allocations_storage[16]; + HeapAllocation heap_allocations_storage[256]; + + const ScopedReport scoped_report; + const StackTrace *stack = nullptr; + const uptr tagged_addr = 0; + const uptr access_size = 0; + const uptr untagged_addr = 0; + const tag_t ptr_tag = 0; + const sptr mismatch_offset = 0; + + const HeapChunk heap; + const Allocations allocations; + const OverflowCandidate candidate; + + const Shadow shadow; +}; + +sptr BaseReport::FindMismatchOffset() const { + if (!access_size) + return 0; + sptr offset = + __hwasan_test_shadow(reinterpret_cast(tagged_addr), access_size); + CHECK_GE(offset, 0); + CHECK_LT(offset, static_cast(access_size)); + tag_t *tag_ptr = + reinterpret_cast(MemToShadow(untagged_addr + offset)); + tag_t mem_tag = *tag_ptr; + + if (mem_tag && mem_tag < kShadowAlignment) { + tag_t *granule_ptr = reinterpret_cast((untagged_addr + offset) & + ~(kShadowAlignment - 1)); + // If offset is 0, (untagged_addr + offset) is not aligned to granules. + // This is the offset of the leftmost accessed byte within the bad granule. + u8 in_granule_offset = (untagged_addr + offset) & (kShadowAlignment - 1); + tag_t short_tag = granule_ptr[kShadowAlignment - 1]; + // The first mismatch was a short granule that matched the ptr_tag. + if (short_tag == ptr_tag) { + // If the access starts after the end of the short granule, then the first + // bad byte is the first byte of the access; otherwise it is the first + // byte past the end of the short granule + if (mem_tag > in_granule_offset) { + offset += mem_tag - in_granule_offset; + } + } + } + return offset; +} + +BaseReport::Shadow BaseReport::CopyShadow() const { + Shadow result; + if (!MemIsApp(untagged_addr)) + return result; + + result.addr = GetPrintTagStart(untagged_addr + mismatch_offset); + uptr tag_addr = result.addr; + uptr short_end = kShortDumpOffset + ARRAY_SIZE(shadow.short_tags); + for (uptr i = 0; i < ARRAY_SIZE(result.tags); ++i, ++tag_addr) { + if (!MemIsShadow(tag_addr)) + continue; + result.tags[i] = *reinterpret_cast(tag_addr); + if (i < kShortDumpOffset || i >= short_end) + continue; + uptr granule_addr = ShadowToMem(tag_addr); + if (1 <= result.tags[i] && result.tags[i] <= kShadowAlignment && + IsAccessibleMemoryRange(granule_addr, kShadowAlignment)) { + result.short_tags[i - kShortDumpOffset] = + *reinterpret_cast(granule_addr + kShadowAlignment - 1); + } + } + return result; +} + +tag_t BaseReport::GetTagCopy(uptr addr) const { + CHECK_GE(addr, shadow.addr); + uptr idx = addr - shadow.addr; + CHECK_LT(idx, ARRAY_SIZE(shadow.tags)); + return shadow.tags[idx]; +} + +tag_t BaseReport::GetShortTagCopy(uptr addr) const { + CHECK_GE(addr, shadow.addr + kShortDumpOffset); + uptr idx = addr - shadow.addr - kShortDumpOffset; + CHECK_LT(idx, ARRAY_SIZE(shadow.short_tags)); + return shadow.short_tags[idx]; +} + +BaseReport::HeapChunk BaseReport::CopyHeapChunk() const { + HeapChunk result = {}; + if (MemIsShadow(untagged_addr)) + return result; + HwasanChunkView chunk = FindHeapChunkByAddress(untagged_addr); + result.begin = chunk.Beg(); + if (result.begin) { + result.size = chunk.ActualSize(); + result.from_small_heap = chunk.FromSmallHeap(); + result.is_allocated = chunk.IsAllocated(); + result.stack_id = chunk.GetAllocStackId(); + } + return result; +} + +BaseReport::Allocations BaseReport::CopyAllocations() { + if (MemIsShadow(untagged_addr)) + return {}; + uptr stack_allocations_count = 0; + uptr heap_allocations_count = 0; + hwasanThreadList().VisitAllLiveThreads([&](Thread *t) { + if (stack_allocations_count < ARRAY_SIZE(stack_allocations_storage) && + t->AddrIsInStack(untagged_addr)) { + stack_allocations_storage[stack_allocations_count++].CopyFrom(t); + } + + if (heap_allocations_count < ARRAY_SIZE(heap_allocations_storage)) { + // Scan all threads' ring buffers to find if it's a heap-use-after-free. + HeapAllocationRecord har; + uptr ring_index, num_matching_addrs, num_matching_addrs_4b; + if (FindHeapAllocation(t->heap_allocations(), tagged_addr, &har, + &ring_index, &num_matching_addrs, + &num_matching_addrs_4b)) { + auto &ha = heap_allocations_storage[heap_allocations_count++]; + ha.har = har; + ha.ring_index = ring_index; + ha.num_matching_addrs = num_matching_addrs; + ha.num_matching_addrs_4b = num_matching_addrs_4b; + ha.free_thread_id = t->unique_id(); + } + } + }); + + return {{stack_allocations_storage, stack_allocations_count}, + {heap_allocations_storage, heap_allocations_count}}; +} + +BaseReport::OverflowCandidate BaseReport::FindBufferOverflowCandidate() const { + OverflowCandidate result = {}; + if (MemIsShadow(untagged_addr)) + return result; + // Check if this looks like a heap buffer overflow by scanning + // the shadow left and right and looking for the first adjacent + // object with a different memory tag. If that tag matches ptr_tag, + // check the allocator if it has a live chunk there. + tag_t *tag_ptr = reinterpret_cast(MemToShadow(untagged_addr)); + tag_t *candidate_tag_ptr = nullptr, *left = tag_ptr, *right = tag_ptr; + uptr candidate_distance = 0; + for (; candidate_distance < 1000; candidate_distance++) { + if (MemIsShadow(reinterpret_cast(left)) && TagsEqual(ptr_tag, left)) { + candidate_tag_ptr = left; + break; + } + --left; + if (MemIsShadow(reinterpret_cast(right)) && + TagsEqual(ptr_tag, right)) { + candidate_tag_ptr = right; + break; + } + ++right; + } + + constexpr auto kCloseCandidateDistance = 1; + result.is_close = candidate_distance <= kCloseCandidateDistance; + + result.after = candidate_tag_ptr == left; + result.untagged_addr = ShadowToMem(reinterpret_cast(candidate_tag_ptr)); + HwasanChunkView chunk = FindHeapChunkByAddress(result.untagged_addr); if (chunk.IsAllocated()) { + result.heap.is_allocated = true; + result.heap.begin = chunk.Beg(); + result.heap.end = chunk.End(); + result.heap.thread_id = chunk.GetAllocThreadId(); + result.heap.stack_id = chunk.GetAllocStackId(); + } + return result; +} + +void BaseReport::PrintHeapOrGlobalCandidate() const { + Decorator d; + if (candidate.heap.is_allocated) { uptr offset; const char *whence; - if (untagged_addr < chunk.End() && untagged_addr >= chunk.Beg()) { - offset = untagged_addr - chunk.Beg(); + if (candidate.heap.begin <= untagged_addr && + untagged_addr < candidate.heap.end) { + offset = untagged_addr - candidate.heap.begin; whence = "inside"; - } else if (candidate == left) { - offset = untagged_addr - chunk.End(); + } else if (candidate.after) { + offset = untagged_addr - candidate.heap.end; whence = "after"; } else { - offset = chunk.Beg() - untagged_addr; + offset = candidate.heap.begin - untagged_addr; whence = "before"; } Printf("%s", d.Error()); @@ -328,12 +664,13 @@ static void ShowHeapOrGlobalCandidate(uptr untagged_addr, tag_t *candidate, Printf("%s", d.Default()); Printf("%s", d.Location()); Printf("%p is located %zd bytes %s a %zd-byte region [%p,%p)\n", - untagged_addr, offset, whence, chunk.UsedSize(), chunk.Beg(), - chunk.End()); + untagged_addr, offset, whence, + candidate.heap.end - candidate.heap.begin, candidate.heap.begin, + candidate.heap.end); Printf("%s", d.Allocation()); - Printf("allocated by thread T%u here:\n", chunk.GetAllocThreadId()); + Printf("allocated by thread T%u here:\n", candidate.heap.thread_id); Printf("%s", d.Default()); - GetStackTraceFromId(chunk.GetAllocStackId()).Print(); + GetStackTraceFromId(candidate.heap.stack_id).Print(); return; } // Check whether the address points into a loaded library. If so, this is @@ -341,47 +678,45 @@ static void ShowHeapOrGlobalCandidate(uptr untagged_addr, tag_t *candidate, const char *module_name; uptr module_address; Symbolizer *sym = Symbolizer::GetOrInit(); - if (sym->GetModuleNameAndOffsetForPC(mem, &module_name, &module_address)) { + if (sym->GetModuleNameAndOffsetForPC(candidate.untagged_addr, &module_name, + &module_address)) { Printf("%s", d.Error()); Printf("\nCause: global-overflow\n"); Printf("%s", d.Default()); DataInfo info; Printf("%s", d.Location()); - if (sym->SymbolizeData(mem, &info) && info.start) { + if (sym->SymbolizeData(candidate.untagged_addr, &info) && info.start) { Printf( "%p is located %zd bytes %s a %zd-byte global variable " "%s [%p,%p) in %s\n", untagged_addr, - candidate == left ? untagged_addr - (info.start + info.size) - : info.start - untagged_addr, - candidate == left ? "after" : "before", info.size, info.name, + candidate.after ? untagged_addr - (info.start + info.size) + : info.start - untagged_addr, + candidate.after ? "after" : "before", info.size, info.name, info.start, info.start + info.size, module_name); } else { - uptr size = GetGlobalSizeFromDescriptor(mem); + uptr size = GetGlobalSizeFromDescriptor(candidate.untagged_addr); if (size == 0) // We couldn't find the size of the global from the descriptors. Printf( "%p is located %s a global variable in " "\n #0 0x%x (%s+0x%x)\n", - untagged_addr, candidate == left ? "after" : "before", mem, - module_name, module_address); + untagged_addr, candidate.after ? "after" : "before", + candidate.untagged_addr, module_name, module_address); else Printf( "%p is located %s a %zd-byte global variable in " "\n #0 0x%x (%s+0x%x)\n", - untagged_addr, candidate == left ? "after" : "before", size, mem, - module_name, module_address); + untagged_addr, candidate.after ? "after" : "before", size, + candidate.untagged_addr, module_name, module_address); } Printf("%s", d.Default()); } } -void PrintAddressDescription( - uptr tagged_addr, uptr access_size, - StackAllocationsRingBuffer *current_stack_allocations) { +void BaseReport::PrintAddressDescription() const { Decorator d; int num_descriptions_printed = 0; - uptr untagged_addr = UntagAddr(tagged_addr); if (MemIsShadow(untagged_addr)) { Printf("%s%p is HWAsan shadow memory.\n%s", d.Location(), untagged_addr, @@ -390,113 +725,80 @@ void PrintAddressDescription( } // Print some very basic information about the address, if it's a heap. - HwasanChunkView chunk = FindHeapChunkByAddress(untagged_addr); - if (uptr beg = chunk.Beg()) { - uptr size = chunk.ActualSize(); - Printf("%s[%p,%p) is a %s %s heap chunk; " - "size: %zd offset: %zd\n%s", - d.Location(), - beg, beg + size, - chunk.FromSmallHeap() ? "small" : "large", - chunk.IsAllocated() ? "allocated" : "unallocated", - size, untagged_addr - beg, - d.Default()); + if (heap.begin) { + Printf( + "%s[%p,%p) is a %s %s heap chunk; " + "size: %zd offset: %zd\n%s", + d.Location(), heap.begin, heap.begin + heap.size, + heap.from_small_heap ? "small" : "large", + heap.is_allocated ? "allocated" : "unallocated", heap.size, + untagged_addr - heap.begin, d.Default()); } - tag_t addr_tag = GetTagFromPointer(tagged_addr); + auto announce_by_id = [](u32 thread_id) { + hwasanThreadList().VisitAllLiveThreads([&](Thread *t) { + if (thread_id == t->unique_id()) + t->Announce(); + }); + }; - bool on_stack = false; // Check stack first. If the address is on the stack of a live thread, we // know it cannot be a heap / global overflow. - hwasanThreadList().VisitAllLiveThreads([&](Thread *t) { - if (t->AddrIsInStack(untagged_addr)) { - on_stack = true; - // TODO(fmayer): figure out how to distinguish use-after-return and - // stack-buffer-overflow. - Printf("%s", d.Error()); - Printf("\nCause: stack tag-mismatch\n"); - Printf("%s", d.Location()); - Printf("Address %p is located in stack of thread T%zd\n", untagged_addr, - t->unique_id()); - Printf("%s", d.Default()); - t->Announce(); - - auto *sa = (t == GetCurrentThread() && current_stack_allocations) - ? current_stack_allocations - : t->stack_allocations(); - PrintStackAllocations(sa, addr_tag, untagged_addr); - num_descriptions_printed++; - } - }); - - // Check if this looks like a heap buffer overflow by scanning - // the shadow left and right and looking for the first adjacent - // object with a different memory tag. If that tag matches addr_tag, - // check the allocator if it has a live chunk there. - tag_t *tag_ptr = reinterpret_cast(MemToShadow(untagged_addr)); - tag_t *candidate = nullptr, *left = tag_ptr, *right = tag_ptr; - uptr candidate_distance = 0; - for (; candidate_distance < 1000; candidate_distance++) { - if (MemIsShadow(reinterpret_cast(left)) && - TagsEqual(addr_tag, left)) { - candidate = left; - break; - } - --left; - if (MemIsShadow(reinterpret_cast(right)) && - TagsEqual(addr_tag, right)) { - candidate = right; - break; - } - ++right; - } - - constexpr auto kCloseCandidateDistance = 1; - - if (!on_stack && candidate && candidate_distance <= kCloseCandidateDistance) { - ShowHeapOrGlobalCandidate(untagged_addr, candidate, left, right); + for (const auto &sa : allocations.stack) { + // TODO(fmayer): figure out how to distinguish use-after-return and + // stack-buffer-overflow. + Printf("%s", d.Error()); + Printf("\nCause: stack tag-mismatch\n"); + Printf("%s", d.Location()); + Printf("Address %p is located in stack of thread T%zd\n", untagged_addr, + sa.thread_id()); + Printf("%s", d.Default()); + announce_by_id(sa.thread_id()); + PrintStackAllocations(sa.get(), ptr_tag, untagged_addr); num_descriptions_printed++; } - hwasanThreadList().VisitAllLiveThreads([&](Thread *t) { - // Scan all threads' ring buffers to find if it's a heap-use-after-free. - HeapAllocationRecord har; - uptr ring_index, num_matching_addrs, num_matching_addrs_4b; - if (FindHeapAllocation(t->heap_allocations(), tagged_addr, &har, - &ring_index, &num_matching_addrs, - &num_matching_addrs_4b)) { - Printf("%s", d.Error()); - Printf("\nCause: use-after-free\n"); - Printf("%s", d.Location()); - Printf("%p is located %zd bytes inside a %zd-byte region [%p,%p)\n", - untagged_addr, untagged_addr - UntagAddr(har.tagged_addr), - har.requested_size, UntagAddr(har.tagged_addr), - UntagAddr(har.tagged_addr) + har.requested_size); - Printf("%s", d.Allocation()); - Printf("freed by thread T%u here:\n", t->unique_id()); - Printf("%s", d.Default()); - GetStackTraceFromId(har.free_context_id).Print(); + if (allocations.stack.empty() && candidate.untagged_addr && + candidate.is_close) { + PrintHeapOrGlobalCandidate(); + num_descriptions_printed++; + } - Printf("%s", d.Allocation()); - Printf("previously allocated by thread T%u here:\n", har.alloc_thread_id); - Printf("%s", d.Default()); - GetStackTraceFromId(har.alloc_context_id).Print(); + for (const auto &ha : allocations.heap) { + const HeapAllocationRecord har = ha.har; - // Print a developer note: the index of this heap object - // in the thread's deallocation ring buffer. - Printf("hwasan_dev_note_heap_rb_distance: %zd %zd\n", ring_index + 1, - flags()->heap_history_size); - Printf("hwasan_dev_note_num_matching_addrs: %zd\n", num_matching_addrs); - Printf("hwasan_dev_note_num_matching_addrs_4b: %zd\n", - num_matching_addrs_4b); + Printf("%s", d.Error()); + Printf("\nCause: use-after-free\n"); + Printf("%s", d.Location()); + Printf("%p is located %zd bytes inside a %zd-byte region [%p,%p)\n", + untagged_addr, untagged_addr - UntagAddr(har.tagged_addr), + har.requested_size, UntagAddr(har.tagged_addr), + UntagAddr(har.tagged_addr) + har.requested_size); + Printf("%s", d.Allocation()); + Printf("freed by thread T%u here:\n", ha.free_thread_id); + Printf("%s", d.Default()); + GetStackTraceFromId(har.free_context_id).Print(); - t->Announce(); - num_descriptions_printed++; - } - }); + Printf("%s", d.Allocation()); + Printf("previously allocated by thread T%u here:\n", har.alloc_thread_id); + Printf("%s", d.Default()); + GetStackTraceFromId(har.alloc_context_id).Print(); - if (candidate && num_descriptions_printed == 0) { - ShowHeapOrGlobalCandidate(untagged_addr, candidate, left, right); + // Print a developer note: the index of this heap object + // in the thread's deallocation ring buffer. + Printf("hwasan_dev_note_heap_rb_distance: %zd %zd\n", ha.ring_index + 1, + flags()->heap_history_size); + Printf("hwasan_dev_note_num_matching_addrs: %zd\n", ha.num_matching_addrs); + Printf("hwasan_dev_note_num_matching_addrs_4b: %zd\n", + ha.num_matching_addrs_4b); + + announce_by_id(ha.free_thread_id); + // TODO: announce_by_id(har.alloc_thread_id); + num_descriptions_printed++; + } + + if (candidate.untagged_addr && num_descriptions_printed == 0) { + PrintHeapOrGlobalCandidate(); num_descriptions_printed++; } @@ -515,77 +817,24 @@ void PrintAddressDescription( } } -void ReportStats() {} - -static void PrintTagInfoAroundAddr(tag_t *tag_ptr, uptr num_rows, - void (*print_tag)(InternalScopedString &s, - tag_t *tag)) { - const uptr row_len = 16; // better be power of two. - tag_t *center_row_beg = reinterpret_cast( - RoundDownTo(reinterpret_cast(tag_ptr), row_len)); - tag_t *beg_row = center_row_beg - row_len * (num_rows / 2); - tag_t *end_row = center_row_beg + row_len * ((num_rows + 1) / 2); - InternalScopedString s; - for (tag_t *row = beg_row; row < end_row; row += row_len) { - s.append("%s", row == center_row_beg ? "=>" : " "); - s.append("%p:", (void *)ShadowToMem(reinterpret_cast(row))); - for (uptr i = 0; i < row_len; i++) { - s.append("%s", row + i == tag_ptr ? "[" : " "); - print_tag(s, &row[i]); - s.append("%s", row + i == tag_ptr ? "]" : " "); - } - s.append("\n"); +void BaseReport::PrintTags(uptr addr) const { + if (shadow.addr) { + PrintTagsAroundAddr( + addr, [&](uptr addr) { return GetTagCopy(addr); }, + [&](uptr addr) { return GetShortTagCopy(addr); }); } - Printf("%s", s.data()); } -static void PrintTagsAroundAddr(tag_t *tag_ptr) { - Printf( - "Memory tags around the buggy address (one tag corresponds to %zd " - "bytes):\n", kShadowAlignment); - PrintTagInfoAroundAddr(tag_ptr, 17, [](InternalScopedString &s, tag_t *tag) { - s.append("%02x", *tag); - }); +class InvalidFreeReport : public BaseReport { + public: + InvalidFreeReport(StackTrace *stack, uptr tagged_addr) + : BaseReport(stack, flags()->halt_on_error, tagged_addr, 0) {} + ~InvalidFreeReport(); - Printf( - "Tags for short granules around the buggy address (one tag corresponds " - "to %zd bytes):\n", - kShadowAlignment); - PrintTagInfoAroundAddr(tag_ptr, 3, [](InternalScopedString &s, tag_t *tag) { - if (*tag >= 1 && *tag <= kShadowAlignment) { - uptr granule_addr = ShadowToMem(reinterpret_cast(tag)); - s.append("%02x", - *reinterpret_cast(granule_addr + kShadowAlignment - 1)); - } else { - s.append(".."); - } - }); - Printf( - "See " - "https://clang.llvm.org/docs/" - "HardwareAssistedAddressSanitizerDesign.html#short-granules for a " - "description of short granule tags\n"); -} + private: +}; -uptr GetTopPc(StackTrace *stack) { - return stack->size ? StackTrace::GetPreviousInstructionPc(stack->trace[0]) - : 0; -} - -void ReportInvalidFree(StackTrace *stack, uptr tagged_addr) { - ScopedReport R(flags()->halt_on_error); - - uptr untagged_addr = UntagAddr(tagged_addr); - tag_t ptr_tag = GetTagFromPointer(tagged_addr); - tag_t *tag_ptr = nullptr; - tag_t mem_tag = 0; - if (MemIsApp(untagged_addr)) { - tag_ptr = reinterpret_cast(MemToShadow(untagged_addr)); - if (MemIsShadow(reinterpret_cast(tag_ptr))) - mem_tag = *tag_ptr; - else - tag_ptr = nullptr; - } +InvalidFreeReport::~InvalidFreeReport() { Decorator d; Printf("%s", d.Error()); uptr pc = GetTopPc(stack); @@ -599,36 +848,49 @@ void ReportInvalidFree(StackTrace *stack, uptr tagged_addr) { SanitizerToolName, bug_type, untagged_addr, pc); } Printf("%s", d.Access()); - if (tag_ptr) - Printf("tags: %02x/%02x (ptr/mem)\n", ptr_tag, mem_tag); + if (shadow.addr) { + Printf("tags: %02x/%02x (ptr/mem)\n", ptr_tag, + GetTagCopy(MemToShadow(untagged_addr))); + } Printf("%s", d.Default()); stack->Print(); - PrintAddressDescription(tagged_addr, 0, nullptr); - - if (tag_ptr) - PrintTagsAroundAddr(tag_ptr); - + PrintAddressDescription(); + PrintTags(untagged_addr); MaybePrintAndroidHelpUrl(); ReportErrorSummary(bug_type, stack); } -void ReportTailOverwritten(StackTrace *stack, uptr tagged_addr, uptr orig_size, - const u8 *expected) { - uptr tail_size = kShadowAlignment - (orig_size % kShadowAlignment); - u8 actual_expected[kShadowAlignment]; - internal_memcpy(actual_expected, expected, tail_size); - tag_t ptr_tag = GetTagFromPointer(tagged_addr); - // Short granule is stashed in the last byte of the magic string. To avoid - // confusion, make the expected magic string contain the short granule tag. - if (orig_size % kShadowAlignment != 0) { - actual_expected[tail_size - 1] = ptr_tag; +class TailOverwrittenReport : public BaseReport { + public: + explicit TailOverwrittenReport(StackTrace *stack, uptr tagged_addr, + uptr orig_size, const u8 *expected) + : BaseReport(stack, flags()->halt_on_error, tagged_addr, 0), + orig_size(orig_size), + tail_size(kShadowAlignment - (orig_size % kShadowAlignment)) { + CHECK_GT(tail_size, 0U); + CHECK_LT(tail_size, kShadowAlignment); + internal_memcpy(tail_copy, + reinterpret_cast(untagged_addr + orig_size), + tail_size); + internal_memcpy(actual_expected, expected, tail_size); + // Short granule is stashed in the last byte of the magic string. To avoid + // confusion, make the expected magic string contain the short granule tag. + if (orig_size % kShadowAlignment != 0) + actual_expected[tail_size - 1] = ptr_tag; } + ~TailOverwrittenReport(); - ScopedReport R(flags()->halt_on_error); + private: + const uptr orig_size = 0; + const uptr tail_size = 0; + u8 actual_expected[kShadowAlignment] = {}; + u8 tail_copy[kShadowAlignment] = {}; +}; + +TailOverwrittenReport::~TailOverwrittenReport() { Decorator d; - uptr untagged_addr = UntagAddr(tagged_addr); Printf("%s", d.Error()); const char *bug_type = "allocation-tail-overwritten"; Report("ERROR: %s: %s; heap object [%p,%p) of size %zd\n", SanitizerToolName, @@ -641,61 +903,62 @@ void ReportTailOverwritten(StackTrace *stack, uptr tagged_addr, uptr orig_size, Printf("deallocated here:\n"); Printf("%s", d.Default()); stack->Print(); - HwasanChunkView chunk = FindHeapChunkByAddress(untagged_addr); - if (chunk.Beg()) { + if (heap.begin) { Printf("%s", d.Allocation()); Printf("allocated here:\n"); Printf("%s", d.Default()); - GetStackTraceFromId(chunk.GetAllocStackId()).Print(); + GetStackTraceFromId(heap.stack_id).Print(); } InternalScopedString s; - CHECK_GT(tail_size, 0U); - CHECK_LT(tail_size, kShadowAlignment); - u8 *tail = reinterpret_cast(untagged_addr + orig_size); - s.append("Tail contains: "); - for (uptr i = 0; i < kShadowAlignment - tail_size; i++) - s.append(".. "); + u8 *tail = tail_copy; + s.AppendF("Tail contains: "); + for (uptr i = 0; i < kShadowAlignment - tail_size; i++) s.AppendF(".. "); + for (uptr i = 0; i < tail_size; i++) s.AppendF("%02x ", tail[i]); + s.AppendF("\n"); + s.AppendF("Expected: "); + for (uptr i = 0; i < kShadowAlignment - tail_size; i++) s.AppendF(".. "); + for (uptr i = 0; i < tail_size; i++) s.AppendF("%02x ", actual_expected[i]); + s.AppendF("\n"); + s.AppendF(" "); + for (uptr i = 0; i < kShadowAlignment - tail_size; i++) s.AppendF(" "); for (uptr i = 0; i < tail_size; i++) - s.append("%02x ", tail[i]); - s.append("\n"); - s.append("Expected: "); - for (uptr i = 0; i < kShadowAlignment - tail_size; i++) - s.append(".. "); - for (uptr i = 0; i < tail_size; i++) s.append("%02x ", actual_expected[i]); - s.append("\n"); - s.append(" "); - for (uptr i = 0; i < kShadowAlignment - tail_size; i++) - s.append(" "); - for (uptr i = 0; i < tail_size; i++) - s.append("%s ", actual_expected[i] != tail[i] ? "^^" : " "); + s.AppendF("%s ", actual_expected[i] != tail[i] ? "^^" : " "); - s.append("\nThis error occurs when a buffer overflow overwrites memory\n" - "after a heap object, but within the %zd-byte granule, e.g.\n" - " char *x = new char[20];\n" - " x[25] = 42;\n" - "%s does not detect such bugs in uninstrumented code at the time of write," - "\nbut can detect them at the time of free/delete.\n" - "To disable this feature set HWASAN_OPTIONS=free_checks_tail_magic=0\n", - kShadowAlignment, SanitizerToolName); + s.AppendF( + "\nThis error occurs when a buffer overflow overwrites memory\n" + "after a heap object, but within the %zd-byte granule, e.g.\n" + " char *x = new char[20];\n" + " x[25] = 42;\n" + "%s does not detect such bugs in uninstrumented code at the time of " + "write," + "\nbut can detect them at the time of free/delete.\n" + "To disable this feature set HWASAN_OPTIONS=free_checks_tail_magic=0\n", + kShadowAlignment, SanitizerToolName); Printf("%s", s.data()); GetCurrentThread()->Announce(); - - tag_t *tag_ptr = reinterpret_cast(MemToShadow(untagged_addr)); - PrintTagsAroundAddr(tag_ptr); - + PrintTags(untagged_addr); MaybePrintAndroidHelpUrl(); ReportErrorSummary(bug_type, stack); } -void ReportTagMismatch(StackTrace *stack, uptr tagged_addr, uptr access_size, - bool is_store, bool fatal, uptr *registers_frame) { - ScopedReport R(fatal); - SavedStackAllocations current_stack_allocations( - GetCurrentThread()->stack_allocations()); +class TagMismatchReport : public BaseReport { + public: + explicit TagMismatchReport(StackTrace *stack, uptr tagged_addr, + uptr access_size, bool is_store, bool fatal, + uptr *registers_frame) + : BaseReport(stack, fatal, tagged_addr, access_size), + is_store(is_store), + registers_frame(registers_frame) {} + ~TagMismatchReport(); + private: + const bool is_store; + const uptr *registers_frame; +}; + +TagMismatchReport::~TagMismatchReport() { Decorator d; - uptr untagged_addr = UntagAddr(tagged_addr); // TODO: when possible, try to print heap-use-after-free, etc. const char *bug_type = "tag-mismatch"; uptr pc = GetTopPc(stack); @@ -705,31 +968,12 @@ void ReportTagMismatch(StackTrace *stack, uptr tagged_addr, uptr access_size, Thread *t = GetCurrentThread(); - sptr offset = - __hwasan_test_shadow(reinterpret_cast(tagged_addr), access_size); - CHECK(offset >= 0 && offset < static_cast(access_size)); - tag_t ptr_tag = GetTagFromPointer(tagged_addr); - tag_t *tag_ptr = - reinterpret_cast(MemToShadow(untagged_addr + offset)); - tag_t mem_tag = *tag_ptr; + tag_t mem_tag = GetTagCopy(MemToShadow(untagged_addr + mismatch_offset)); Printf("%s", d.Access()); if (mem_tag && mem_tag < kShadowAlignment) { - tag_t *granule_ptr = reinterpret_cast((untagged_addr + offset) & - ~(kShadowAlignment - 1)); - // If offset is 0, (untagged_addr + offset) is not aligned to granules. - // This is the offset of the leftmost accessed byte within the bad granule. - u8 in_granule_offset = (untagged_addr + offset) & (kShadowAlignment - 1); - tag_t short_tag = granule_ptr[kShadowAlignment - 1]; - // The first mismatch was a short granule that matched the ptr_tag. - if (short_tag == ptr_tag) { - // If the access starts after the end of the short granule, then the first - // bad byte is the first byte of the access; otherwise it is the first - // byte past the end of the short granule - if (mem_tag > in_granule_offset) { - offset += mem_tag - in_granule_offset; - } - } + tag_t short_tag = + GetShortTagCopy(MemToShadow(untagged_addr + mismatch_offset)); Printf( "%s of size %zu at %p tags: %02x/%02x(%02x) (ptr/mem) in thread T%zd\n", is_store ? "WRITE" : "READ", access_size, untagged_addr, ptr_tag, @@ -739,17 +983,16 @@ void ReportTagMismatch(StackTrace *stack, uptr tagged_addr, uptr access_size, is_store ? "WRITE" : "READ", access_size, untagged_addr, ptr_tag, mem_tag, t->unique_id()); } - if (offset != 0) - Printf("Invalid access starting at offset %zu\n", offset); + if (mismatch_offset) + Printf("Invalid access starting at offset %zu\n", mismatch_offset); Printf("%s", d.Default()); stack->Print(); - PrintAddressDescription(tagged_addr, access_size, - current_stack_allocations.get()); + PrintAddressDescription(); t->Announce(); - PrintTagsAroundAddr(tag_ptr); + PrintTags(untagged_addr + mismatch_offset); if (registers_frame) ReportRegisters(registers_frame, pc); @@ -757,10 +1000,26 @@ void ReportTagMismatch(StackTrace *stack, uptr tagged_addr, uptr access_size, MaybePrintAndroidHelpUrl(); ReportErrorSummary(bug_type, stack); } +} // namespace + +void ReportInvalidFree(StackTrace *stack, uptr tagged_addr) { + InvalidFreeReport R(stack, tagged_addr); +} + +void ReportTailOverwritten(StackTrace *stack, uptr tagged_addr, uptr orig_size, + const u8 *expected) { + TailOverwrittenReport R(stack, tagged_addr, orig_size, expected); +} + +void ReportTagMismatch(StackTrace *stack, uptr tagged_addr, uptr access_size, + bool is_store, bool fatal, uptr *registers_frame) { + TagMismatchReport R(stack, tagged_addr, access_size, is_store, fatal, + registers_frame); +} // See the frame breakdown defined in __hwasan_tag_mismatch (from // hwasan_tag_mismatch_{aarch64,riscv64}.S). -void ReportRegisters(uptr *frame, uptr pc) { +void ReportRegisters(const uptr *frame, uptr pc) { Printf("Registers where the failure occurred (pc %p):\n", pc); // We explicitly print a single line (4 registers/line) each iteration to @@ -772,7 +1031,8 @@ void ReportRegisters(uptr *frame, uptr pc) { frame[0], frame[1], frame[2], frame[3]); #elif SANITIZER_RISCV64 Printf(" sp %016llx x1 %016llx x2 %016llx x3 %016llx\n", - reinterpret_cast(frame) + 256, frame[1], frame[2], frame[3]); + reinterpret_cast(frame) + 256, frame[1], frame[2], + frame[3]); #endif Printf(" x4 %016llx x5 %016llx x6 %016llx x7 %016llx\n", frame[4], frame[5], frame[6], frame[7]); @@ -790,7 +1050,7 @@ void ReportRegisters(uptr *frame, uptr pc) { // passes it to this function. #if defined(__aarch64__) Printf(" x28 %016llx x29 %016llx x30 %016llx sp %016llx\n", frame[28], - frame[29], frame[30], reinterpret_cast(frame) + 256); + frame[29], frame[30], reinterpret_cast(frame) + 256); #elif SANITIZER_RISCV64 Printf(" x28 %016llx x29 %016llx x30 %016llx x31 %016llx\n", frame[28], frame[29], frame[30], frame[31]); diff --git a/libsanitizer/hwasan/hwasan_report.h b/libsanitizer/hwasan/hwasan_report.h index de86c38fc01f..bb9492a18cf9 100644 --- a/libsanitizer/hwasan/hwasan_report.h +++ b/libsanitizer/hwasan/hwasan_report.h @@ -26,7 +26,7 @@ void ReportTagMismatch(StackTrace *stack, uptr addr, uptr access_size, void ReportInvalidFree(StackTrace *stack, uptr addr); void ReportTailOverwritten(StackTrace *stack, uptr addr, uptr orig_size, const u8 *expected); -void ReportRegisters(uptr *registers_frame, uptr pc); +void ReportRegisters(const uptr *registers_frame, uptr pc); void ReportAtExitStatistics(); diff --git a/libsanitizer/hwasan/hwasan_setjmp_aarch64.S b/libsanitizer/hwasan/hwasan_setjmp_aarch64.S index 744748a5101f..0c0abb6de861 100644 --- a/libsanitizer/hwasan/hwasan_setjmp_aarch64.S +++ b/libsanitizer/hwasan/hwasan_setjmp_aarch64.S @@ -31,33 +31,37 @@ .section .text .file "hwasan_setjmp_aarch64.S" -.global __interceptor_setjmp -ASM_TYPE_FUNCTION(__interceptor_setjmp) -__interceptor_setjmp: +.global ASM_WRAPPER_NAME(setjmp) +ASM_TYPE_FUNCTION(ASM_WRAPPER_NAME(setjmp)) +ASM_WRAPPER_NAME(setjmp): CFI_STARTPROC BTI_C mov x1, #0 - b __interceptor_sigsetjmp + b ASM_WRAPPER_NAME(sigsetjmp) CFI_ENDPROC -ASM_SIZE(__interceptor_setjmp) +ASM_SIZE(ASM_WRAPPER_NAME(setjmp)) + +ASM_INTERCEPTOR_TRAMPOLINE(setjmp) #if SANITIZER_ANDROID // Bionic also defines a function `setjmp` that calls `sigsetjmp` saving the // current signal. -.global __interceptor_setjmp_bionic -ASM_TYPE_FUNCTION(__interceptor_setjmp_bionic) -__interceptor_setjmp_bionic: +.global ASM_WRAPPER_NAME(setjmp_bionic) +ASM_TYPE_FUNCTION(ASM_WRAPPER_NAME(setjmp_bionic)) +ASM_WRAPPER_NAME(setjmp_bionic): CFI_STARTPROC BTI_C mov x1, #1 - b __interceptor_sigsetjmp + b ASM_WRAPPER_NAME(sigsetjmp) CFI_ENDPROC -ASM_SIZE(__interceptor_setjmp_bionic) +ASM_SIZE(ASM_WRAPPER_NAME(setjmp_bionic)) + +ASM_INTERCEPTOR_TRAMPOLINE(setjmp_bionic) #endif -.global __interceptor_sigsetjmp -ASM_TYPE_FUNCTION(__interceptor_sigsetjmp) -__interceptor_sigsetjmp: +.global ASM_WRAPPER_NAME(sigsetjmp) +ASM_TYPE_FUNCTION(ASM_WRAPPER_NAME(sigsetjmp)) +ASM_WRAPPER_NAME(sigsetjmp): CFI_STARTPROC BTI_C stp x19, x20, [x0, #0<<3] @@ -77,22 +81,19 @@ __interceptor_sigsetjmp: // This function is defined in hwasan_interceptors.cc b __sigjmp_save CFI_ENDPROC -ASM_SIZE(__interceptor_sigsetjmp) +ASM_SIZE(ASM_WRAPPER_NAME(sigsetjmp)) +ASM_INTERCEPTOR_TRAMPOLINE(sigsetjmp) -.macro WEAK_ALIAS first second - .weak \second - .equ \second\(), \first -.endm #if SANITIZER_ANDROID -WEAK_ALIAS __interceptor_sigsetjmp, sigsetjmp -WEAK_ALIAS __interceptor_setjmp_bionic, setjmp +ASM_TRAMPOLINE_ALIAS(sigsetjmp, sigsetjmp) +ASM_TRAMPOLINE_ALIAS(setjmp, setjmp_bionic) #else -WEAK_ALIAS __interceptor_sigsetjmp, __sigsetjmp +ASM_TRAMPOLINE_ALIAS(__sigsetjmp, sigsetjmp) #endif -WEAK_ALIAS __interceptor_setjmp, _setjmp +ASM_TRAMPOLINE_ALIAS(_setjmp, setjmp) #endif // We do not need executable stack. diff --git a/libsanitizer/hwasan/hwasan_setjmp_riscv64.S b/libsanitizer/hwasan/hwasan_setjmp_riscv64.S index 43f9c3c26b4e..c01f4e25e8a4 100644 --- a/libsanitizer/hwasan/hwasan_setjmp_riscv64.S +++ b/libsanitizer/hwasan/hwasan_setjmp_riscv64.S @@ -31,18 +31,18 @@ .section .text .file "hwasan_setjmp_riscv64.S" -.global __interceptor_setjmp -ASM_TYPE_FUNCTION(__interceptor_setjmp) -__interceptor_setjmp: +.global ASM_WRAPPER_NAME(setjmp) +ASM_TYPE_FUNCTION(ASM_WRAPPER_NAME(setjmp)) +ASM_WRAPPER_NAME(setjmp): CFI_STARTPROC addi x11, x0, 0 - tail __interceptor_sigsetjmp + tail ASM_WRAPPER_NAME(sigsetjmp) CFI_ENDPROC -ASM_SIZE(__interceptor_setjmp) +ASM_SIZE(ASM_WRAPPER_NAME(setjmp)) -.global __interceptor_sigsetjmp -ASM_TYPE_FUNCTION(__interceptor_sigsetjmp) -__interceptor_sigsetjmp: +.global ASM_WRAPPER_NAME(sigsetjmp) +ASM_TYPE_FUNCTION(ASM_WRAPPER_NAME(sigsetjmp)) +ASM_WRAPPER_NAME(sigsetjmp): CFI_STARTPROC sd ra, 0<<3(x10) sd s0, 1<<3(x10) @@ -80,17 +80,12 @@ __interceptor_sigsetjmp: // This function is defined in hwasan_interceptors.cc tail __sigjmp_save CFI_ENDPROC -ASM_SIZE(__interceptor_sigsetjmp) +ASM_SIZE(ASM_WRAPPER_NAME(sigsetjmp)) - -.macro WEAK_ALIAS first second - .weak \second - .equ \second\(), \first -.endm - -WEAK_ALIAS __interceptor_sigsetjmp, __sigsetjmp - -WEAK_ALIAS __interceptor_setjmp, _setjmp +ASM_INTERCEPTOR_TRAMPOLINE(sigsetjmp) +ASM_TRAMPOLINE_ALIAS(__sigsetjmp, sigsetjmp) +ASM_INTERCEPTOR_TRAMPOLINE(setjmp) +ASM_TRAMPOLINE_ALIAS(_setjmp, setjmp) #endif // We do not need executable stack. diff --git a/libsanitizer/hwasan/hwasan_setjmp_x86_64.S b/libsanitizer/hwasan/hwasan_setjmp_x86_64.S index a5a3858d94dc..9804e8d7ceca 100644 --- a/libsanitizer/hwasan/hwasan_setjmp_x86_64.S +++ b/libsanitizer/hwasan/hwasan_setjmp_x86_64.S @@ -31,19 +31,19 @@ .section .text .file "hwasan_setjmp_x86_64.S" -.global __interceptor_setjmp -ASM_TYPE_FUNCTION(__interceptor_setjmp) -__interceptor_setjmp: +.global ASM_WRAPPER_NAME(setjmp) +ASM_TYPE_FUNCTION(ASM_WRAPPER_NAME(setjmp)) +ASM_WRAPPER_NAME(setjmp): CFI_STARTPROC _CET_ENDBR xorl %esi, %esi jmp .Linterceptor_sigsetjmp CFI_ENDPROC -ASM_SIZE(__interceptor_setjmp) +ASM_SIZE(ASM_WRAPPER_NAME(setjmp)) -.global __interceptor_sigsetjmp -ASM_TYPE_FUNCTION(__interceptor_sigsetjmp) -__interceptor_sigsetjmp: +.global ASM_WRAPPER_NAME(sigsetjmp) +ASM_TYPE_FUNCTION(ASM_WRAPPER_NAME(sigsetjmp)) +ASM_WRAPPER_NAME(sigsetjmp): .Linterceptor_sigsetjmp: CFI_STARTPROC _CET_ENDBR @@ -67,16 +67,12 @@ __interceptor_sigsetjmp: jmp __sigjmp_save CFI_ENDPROC -ASM_SIZE(__interceptor_sigsetjmp) +ASM_SIZE(ASM_WRAPPER_NAME(sigsetjmp)) - -.macro WEAK_ALIAS first second - .weak \second - .equ \second\(), \first -.endm - -WEAK_ALIAS __interceptor_sigsetjmp, __sigsetjmp -WEAK_ALIAS __interceptor_setjmp, _setjmp +ASM_INTERCEPTOR_TRAMPOLINE(sigsetjmp) +ASM_TRAMPOLINE_ALIAS(__sigsetjmp, sigsetjmp) +ASM_INTERCEPTOR_TRAMPOLINE(setjmp) +ASM_TRAMPOLINE_ALIAS(_setjmp, setjmp) #endif // We do not need executable stack. diff --git a/libsanitizer/hwasan/hwasan_tag_mismatch_aarch64.S b/libsanitizer/hwasan/hwasan_tag_mismatch_aarch64.S index bcb0df420190..fd060c51cd8e 100644 --- a/libsanitizer/hwasan/hwasan_tag_mismatch_aarch64.S +++ b/libsanitizer/hwasan/hwasan_tag_mismatch_aarch64.S @@ -89,16 +89,16 @@ __hwasan_tag_mismatch: ubfx x16, x0, #4, #52 ldrb w16, [x9, x16] cmp w16, #0xf - b.hi __hwasan_tag_mismatch_v2 + b.hi mismatch cmp w16, w17 - b.lo __hwasan_tag_mismatch_v2 + b.lo mismatch // Load the real tag from the last byte of the granule and compare against // the pointer tag. orr x16, x0, #0xf ldrb w16, [x16] cmp x16, x0, lsr #56 - b.ne __hwasan_tag_mismatch_v2 + b.ne mismatch // Restore x0, x1 and sp to their values from before the __hwasan_tag_mismatch // call and resume execution. @@ -108,6 +108,8 @@ __hwasan_tag_mismatch: .global __hwasan_tag_mismatch_v2 .type __hwasan_tag_mismatch_v2, %function __hwasan_tag_mismatch_v2: +// Avoid using global label, to prevent "relocation out of range". +mismatch: CFI_STARTPROC BTI_J diff --git a/libsanitizer/hwasan/hwasan_thread.cpp b/libsanitizer/hwasan/hwasan_thread.cpp index 3375782ef29b..ce36547580e6 100644 --- a/libsanitizer/hwasan/hwasan_thread.cpp +++ b/libsanitizer/hwasan/hwasan_thread.cpp @@ -58,6 +58,16 @@ void Thread::Init(uptr stack_buffer_start, uptr stack_buffer_size, #endif InitStackAndTls(state); dtls_ = DTLS_Get(); + AllocatorThreadStart(allocator_cache()); + + if (flags()->verbose_threads) { + if (IsMainThread()) { + Printf("sizeof(Thread): %zd sizeof(HeapRB): %zd sizeof(StackRB): %zd\n", + sizeof(Thread), heap_allocations_->SizeInBytes(), + stack_allocations_->size() * sizeof(uptr)); + } + Print("Creating : "); + } } void Thread::InitStackRingBuffer(uptr stack_buffer_start, @@ -79,28 +89,23 @@ void Thread::InitStackRingBuffer(uptr stack_buffer_start, CHECK(MemIsApp(stack_bottom_)); CHECK(MemIsApp(stack_top_ - 1)); } - - if (flags()->verbose_threads) { - if (IsMainThread()) { - Printf("sizeof(Thread): %zd sizeof(HeapRB): %zd sizeof(StackRB): %zd\n", - sizeof(Thread), heap_allocations_->SizeInBytes(), - stack_allocations_->size() * sizeof(uptr)); - } - Print("Creating : "); - } } void Thread::ClearShadowForThreadStackAndTLS() { if (stack_top_ != stack_bottom_) - TagMemory(stack_bottom_, stack_top_ - stack_bottom_, 0); + TagMemory(UntagAddr(stack_bottom_), + UntagAddr(stack_top_) - UntagAddr(stack_bottom_), + GetTagFromPointer(stack_top_)); if (tls_begin_ != tls_end_) - TagMemory(tls_begin_, tls_end_ - tls_begin_, 0); + TagMemory(UntagAddr(tls_begin_), + UntagAddr(tls_end_) - UntagAddr(tls_begin_), + GetTagFromPointer(tls_begin_)); } void Thread::Destroy() { if (flags()->verbose_threads) Print("Destroying: "); - AllocatorSwallowThreadLocalCache(allocator_cache()); + AllocatorThreadFinish(allocator_cache()); ClearShadowForThreadStackAndTLS(); if (heap_allocations_) heap_allocations_->Delete(); @@ -173,9 +178,15 @@ static __hwasan::Thread *GetThreadByOsIDLocked(tid_t os_id) { [os_id](__hwasan::Thread *t) { return t->os_id() == os_id; }); } -void LockThreadRegistry() { __hwasan::hwasanThreadList().Lock(); } +void LockThreads() { + __hwasan::hwasanThreadList().Lock(); + __hwasan::hwasanThreadArgRetval().Lock(); +} -void UnlockThreadRegistry() { __hwasan::hwasanThreadList().Unlock(); } +void UnlockThreads() { + __hwasan::hwasanThreadArgRetval().Unlock(); + __hwasan::hwasanThreadList().Unlock(); +} void EnsureMainThreadIDIsCorrect() { __hwasan::EnsureMainThreadIDIsCorrect(); } @@ -202,7 +213,10 @@ void GetThreadExtraStackRangesLocked(tid_t os_id, InternalMmapVector *ranges) {} void GetThreadExtraStackRangesLocked(InternalMmapVector *ranges) {} -void GetAdditionalThreadContextPtrsLocked(InternalMmapVector *ptrs) {} +void GetAdditionalThreadContextPtrsLocked(InternalMmapVector *ptrs) { + __hwasan::hwasanThreadArgRetval().GetAllPtrsLocked(ptrs); +} + void GetRunningThreadsLocked(InternalMmapVector *threads) {} } // namespace __lsan diff --git a/libsanitizer/hwasan/hwasan_thread_list.cpp b/libsanitizer/hwasan/hwasan_thread_list.cpp index fa46e658b69d..7df4dd3d7851 100644 --- a/libsanitizer/hwasan/hwasan_thread_list.cpp +++ b/libsanitizer/hwasan/hwasan_thread_list.cpp @@ -1,15 +1,28 @@ #include "hwasan_thread_list.h" +#include "sanitizer_common/sanitizer_thread_arg_retval.h" + namespace __hwasan { -static ALIGNED(16) char thread_list_placeholder[sizeof(HwasanThreadList)]; + static HwasanThreadList *hwasan_thread_list; +static ThreadArgRetval *thread_data; HwasanThreadList &hwasanThreadList() { return *hwasan_thread_list; } +ThreadArgRetval &hwasanThreadArgRetval() { return *thread_data; } void InitThreadList(uptr storage, uptr size) { - CHECK(hwasan_thread_list == nullptr); + CHECK_EQ(hwasan_thread_list, nullptr); + + static ALIGNED(alignof( + HwasanThreadList)) char thread_list_placeholder[sizeof(HwasanThreadList)]; hwasan_thread_list = new (thread_list_placeholder) HwasanThreadList(storage, size); + + CHECK_EQ(thread_data, nullptr); + + static ALIGNED(alignof( + ThreadArgRetval)) char thread_data_placeholder[sizeof(ThreadArgRetval)]; + thread_data = new (thread_data_placeholder) ThreadArgRetval(); } -} // namespace __hwasan +} // namespace __hwasan diff --git a/libsanitizer/hwasan/hwasan_thread_list.h b/libsanitizer/hwasan/hwasan_thread_list.h index 97485b195b64..82f6c70a03f8 100644 --- a/libsanitizer/hwasan/hwasan_thread_list.h +++ b/libsanitizer/hwasan/hwasan_thread_list.h @@ -47,8 +47,8 @@ #include "hwasan_allocator.h" #include "hwasan_flags.h" #include "hwasan_thread.h" - #include "sanitizer_common/sanitizer_placement_new.h" +#include "sanitizer_common/sanitizer_thread_arg_retval.h" namespace __hwasan { @@ -131,9 +131,9 @@ class SANITIZER_MUTEX HwasanThreadList { void ReleaseThread(Thread *t) SANITIZER_EXCLUDES(free_list_mutex_) { RemoveThreadStats(t); + RemoveThreadFromLiveList(t); t->Destroy(); DontNeedThread(t); - RemoveThreadFromLiveList(t); SpinMutexLock l(&free_list_mutex_); free_list_.push_back(t); } @@ -157,7 +157,7 @@ class SANITIZER_MUTEX HwasanThreadList { } template - Thread *FindThreadLocked(CB cb) SANITIZER_CHECK_LOCKED(stats_mutex_) { + Thread *FindThreadLocked(CB cb) SANITIZER_CHECK_LOCKED(live_list_mutex_) { CheckLocked(); for (Thread *t : live_list_) if (cb(t)) @@ -199,7 +199,7 @@ class SANITIZER_MUTEX HwasanThreadList { CHECK(IsAligned(free_space_, align)); Thread *t = (Thread *)(free_space_ + ring_buffer_size_); free_space_ += thread_alloc_size_; - CHECK(free_space_ <= free_space_end_ && "out of thread memory"); + CHECK_LE(free_space_, free_space_end_); return t; } @@ -222,5 +222,6 @@ class SANITIZER_MUTEX HwasanThreadList { void InitThreadList(uptr storage, uptr size); HwasanThreadList &hwasanThreadList(); +ThreadArgRetval &hwasanThreadArgRetval(); } // namespace __hwasan diff --git a/libsanitizer/include/sanitizer/allocator_interface.h b/libsanitizer/include/sanitizer/allocator_interface.h index d0cfce79c1ae..a792e9f0136e 100644 --- a/libsanitizer/include/sanitizer/allocator_interface.h +++ b/libsanitizer/include/sanitizer/allocator_interface.h @@ -11,82 +11,89 @@ #ifndef SANITIZER_ALLOCATOR_INTERFACE_H #define SANITIZER_ALLOCATOR_INTERFACE_H +#include #include #ifdef __cplusplus extern "C" { #endif - /* Returns the estimated number of bytes that will be reserved by allocator - for request of "size" bytes. If allocator can't allocate that much - memory, returns the maximal possible allocation size, otherwise returns - "size". */ - size_t __sanitizer_get_estimated_allocated_size(size_t size); +/* Returns the estimated number of bytes that will be reserved by allocator + for request of "size" bytes. If allocator can't allocate that much + memory, returns the maximal possible allocation size, otherwise returns + "size". */ +size_t SANITIZER_CDECL __sanitizer_get_estimated_allocated_size(size_t size); - /* Returns true if p was returned by the allocator and - is not yet freed. */ - int __sanitizer_get_ownership(const volatile void *p); +/* Returns true if p was returned by the allocator and + is not yet freed. */ +int SANITIZER_CDECL __sanitizer_get_ownership(const volatile void *p); - /* If a pointer lies within an allocation, it will return the start address - of the allocation. Otherwise, it returns nullptr. */ - const void *__sanitizer_get_allocated_begin(const void *p); +/* If a pointer lies within an allocation, it will return the start address + of the allocation. Otherwise, it returns nullptr. */ +const void *SANITIZER_CDECL __sanitizer_get_allocated_begin(const void *p); - /* Returns the number of bytes reserved for the pointer p. - Requires (get_ownership(p) == true) or (p == 0). */ - size_t __sanitizer_get_allocated_size(const volatile void *p); +/* Returns the number of bytes reserved for the pointer p. + Requires (get_ownership(p) == true) or (p == 0). */ +size_t SANITIZER_CDECL __sanitizer_get_allocated_size(const volatile void *p); - /* Number of bytes, allocated and not yet freed by the application. */ - size_t __sanitizer_get_current_allocated_bytes(void); +/* Returns the number of bytes reserved for the pointer p. + Requires __sanitizer_get_allocated_begin(p) == p. */ +size_t SANITIZER_CDECL +__sanitizer_get_allocated_size_fast(const volatile void *p); - /* Number of bytes, mmaped by the allocator to fulfill allocation requests. - Generally, for request of X bytes, allocator can reserve and add to free - lists a large number of chunks of size X to use them for future requests. - All these chunks count toward the heap size. Currently, allocator never - releases memory to OS (instead, it just puts freed chunks to free - lists). */ - size_t __sanitizer_get_heap_size(void); +/* Number of bytes, allocated and not yet freed by the application. */ +size_t SANITIZER_CDECL __sanitizer_get_current_allocated_bytes(void); - /* Number of bytes, mmaped by the allocator, which can be used to fulfill - allocation requests. When a user program frees memory chunk, it can first - fall into quarantine and will count toward __sanitizer_get_free_bytes() - later. */ - size_t __sanitizer_get_free_bytes(void); +/* Number of bytes, mmaped by the allocator to fulfill allocation requests. + Generally, for request of X bytes, allocator can reserve and add to free + lists a large number of chunks of size X to use them for future requests. + All these chunks count toward the heap size. Currently, allocator never + releases memory to OS (instead, it just puts freed chunks to free + lists). */ +size_t SANITIZER_CDECL __sanitizer_get_heap_size(void); - /* Number of bytes in unmapped pages, that are released to OS. Currently, - always returns 0. */ - size_t __sanitizer_get_unmapped_bytes(void); +/* Number of bytes, mmaped by the allocator, which can be used to fulfill + allocation requests. When a user program frees memory chunk, it can first + fall into quarantine and will count toward __sanitizer_get_free_bytes() + later. */ +size_t SANITIZER_CDECL __sanitizer_get_free_bytes(void); - /* Malloc hooks that may be optionally provided by user. - __sanitizer_malloc_hook(ptr, size) is called immediately after - allocation of "size" bytes, which returned "ptr". - __sanitizer_free_hook(ptr) is called immediately before - deallocation of "ptr". */ - void __sanitizer_malloc_hook(const volatile void *ptr, size_t size); - void __sanitizer_free_hook(const volatile void *ptr); +/* Number of bytes in unmapped pages, that are released to OS. Currently, + always returns 0. */ +size_t SANITIZER_CDECL __sanitizer_get_unmapped_bytes(void); - /* Installs a pair of hooks for malloc/free. - Several (currently, 5) hook pairs may be installed, they are executed - in the order they were installed and after calling - __sanitizer_malloc_hook/__sanitizer_free_hook. - Unlike __sanitizer_malloc_hook/__sanitizer_free_hook these hooks can be - chained and do not rely on weak symbols working on the platform, but - require __sanitizer_install_malloc_and_free_hooks to be called at startup - and thus will not be called on malloc/free very early in the process. - Returns the number of hooks currently installed or 0 on failure. - Not thread-safe, should be called in the main thread before starting - other threads. - */ - int __sanitizer_install_malloc_and_free_hooks( - void (*malloc_hook)(const volatile void *, size_t), - void (*free_hook)(const volatile void *)); +/* Malloc hooks that may be optionally provided by user. + __sanitizer_malloc_hook(ptr, size) is called immediately after + allocation of "size" bytes, which returned "ptr". + __sanitizer_free_hook(ptr) is called immediately before + deallocation of "ptr". */ +void SANITIZER_CDECL __sanitizer_malloc_hook(const volatile void *ptr, + size_t size); +void SANITIZER_CDECL __sanitizer_free_hook(const volatile void *ptr); - /* Drains allocator quarantines (calling thread's and global ones), returns - freed memory back to OS and releases other non-essential internal allocator - resources in attempt to reduce process RSS. - Currently available with ASan only. - */ - void __sanitizer_purge_allocator(void); +/* Installs a pair of hooks for malloc/free. + Several (currently, 5) hook pairs may be installed, they are executed + in the order they were installed and after calling + __sanitizer_malloc_hook/__sanitizer_free_hook. + Unlike __sanitizer_malloc_hook/__sanitizer_free_hook these hooks can be + chained and do not rely on weak symbols working on the platform, but + require __sanitizer_install_malloc_and_free_hooks to be called at startup + and thus will not be called on malloc/free very early in the process. + Returns the number of hooks currently installed or 0 on failure. + Not thread-safe, should be called in the main thread before starting + other threads. +*/ +int SANITIZER_CDECL __sanitizer_install_malloc_and_free_hooks( + void(SANITIZER_CDECL *malloc_hook)(const volatile void *, size_t), + void(SANITIZER_CDECL *free_hook)(const volatile void *)); + +/* Drains allocator quarantines (calling thread's and global ones), returns + freed memory back to OS and releases other non-essential internal allocator + resources in attempt to reduce process RSS. + Currently available with ASan only. +*/ +void SANITIZER_CDECL __sanitizer_purge_allocator(void); #ifdef __cplusplus -} // extern "C" +} // extern "C" #endif #endif diff --git a/libsanitizer/include/sanitizer/asan_interface.h b/libsanitizer/include/sanitizer/asan_interface.h index 9bff21c117b3..37b6d08f4db1 100644 --- a/libsanitizer/include/sanitizer/asan_interface.h +++ b/libsanitizer/include/sanitizer/asan_interface.h @@ -31,7 +31,8 @@ extern "C" { /// /// \param addr Start of memory region. /// \param size Size of memory region. -void __asan_poison_memory_region(void const volatile *addr, size_t size); +void SANITIZER_CDECL __asan_poison_memory_region(void const volatile *addr, + size_t size); /// Marks a memory region ([addr, addr+size)) as addressable. /// @@ -45,10 +46,19 @@ void __asan_poison_memory_region(void const volatile *addr, size_t size); /// /// \param addr Start of memory region. /// \param size Size of memory region. -void __asan_unpoison_memory_region(void const volatile *addr, size_t size); +void SANITIZER_CDECL __asan_unpoison_memory_region(void const volatile *addr, + size_t size); // Macros provided for convenience. -#if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__) +#ifdef __has_feature +#if __has_feature(address_sanitizer) +#define ASAN_DEFINE_REGION_MACROS +#endif +#elif defined(__SANITIZE_ADDRESS__) +#define ASAN_DEFINE_REGION_MACROS +#endif + +#ifdef ASAN_DEFINE_REGION_MACROS /// Marks a memory region as unaddressable. /// /// \note Macro provided for convenience; defined as a no-op if ASan is not @@ -56,7 +66,7 @@ void __asan_unpoison_memory_region(void const volatile *addr, size_t size); /// /// \param addr Start of memory region. /// \param size Size of memory region. -#define ASAN_POISON_MEMORY_REGION(addr, size) \ +#define ASAN_POISON_MEMORY_REGION(addr, size) \ __asan_poison_memory_region((addr), (size)) /// Marks a memory region as addressable. @@ -66,14 +76,13 @@ void __asan_unpoison_memory_region(void const volatile *addr, size_t size); /// /// \param addr Start of memory region. /// \param size Size of memory region. -#define ASAN_UNPOISON_MEMORY_REGION(addr, size) \ +#define ASAN_UNPOISON_MEMORY_REGION(addr, size) \ __asan_unpoison_memory_region((addr), (size)) #else -#define ASAN_POISON_MEMORY_REGION(addr, size) \ - ((void)(addr), (void)(size)) -#define ASAN_UNPOISON_MEMORY_REGION(addr, size) \ - ((void)(addr), (void)(size)) +#define ASAN_POISON_MEMORY_REGION(addr, size) ((void)(addr), (void)(size)) +#define ASAN_UNPOISON_MEMORY_REGION(addr, size) ((void)(addr), (void)(size)) #endif +#undef ASAN_DEFINE_REGION_MACROS /// Checks if an address is poisoned. /// @@ -85,7 +94,7 @@ void __asan_unpoison_memory_region(void const volatile *addr, size_t size); /// /// \retval 1 Address is poisoned. /// \retval 0 Address is not poisoned. -int __asan_address_is_poisoned(void const volatile *addr); +int SANITIZER_CDECL __asan_address_is_poisoned(void const volatile *addr); /// Checks if a region is poisoned. /// @@ -95,14 +104,14 @@ int __asan_address_is_poisoned(void const volatile *addr); /// \param beg Start of memory region. /// \param size Start of memory region. /// \returns Address of first poisoned byte. -void *__asan_region_is_poisoned(void *beg, size_t size); +void *SANITIZER_CDECL __asan_region_is_poisoned(void *beg, size_t size); /// Describes an address (useful for calling from the debugger). /// /// Prints the description of addr. /// /// \param addr Address to describe. -void __asan_describe_address(void *addr); +void SANITIZER_CDECL __asan_describe_address(void *addr); /// Checks if an error has been or is being reported (useful for calling from /// the debugger to get information about an ASan error). @@ -111,7 +120,7 @@ void __asan_describe_address(void *addr); /// /// \returns 1 if an error has been (or is being) reported. Otherwise returns /// 0. -int __asan_report_present(void); +int SANITIZER_CDECL __asan_report_present(void); /// Gets the PC (program counter) register value of an ASan error (useful for /// calling from the debugger). @@ -120,7 +129,7 @@ int __asan_report_present(void); /// Otherwise returns 0. /// /// \returns PC value. -void *__asan_get_report_pc(void); +void *SANITIZER_CDECL __asan_get_report_pc(void); /// Gets the BP (base pointer) register value of an ASan error (useful for /// calling from the debugger). @@ -129,7 +138,7 @@ void *__asan_get_report_pc(void); /// Otherwise returns 0. /// /// \returns BP value. -void *__asan_get_report_bp(void); +void *SANITIZER_CDECL __asan_get_report_bp(void); /// Gets the SP (stack pointer) register value of an ASan error (useful for /// calling from the debugger). @@ -138,7 +147,7 @@ void *__asan_get_report_bp(void); /// Otherwise returns 0. /// /// \returns SP value. -void *__asan_get_report_sp(void); +void *SANITIZER_CDECL __asan_get_report_sp(void); /// Gets the address of the report buffer of an ASan error (useful for calling /// from the debugger). @@ -147,7 +156,7 @@ void *__asan_get_report_sp(void); /// reported. Otherwise returns 0. /// /// \returns Address of report buffer. -void *__asan_get_report_address(void); +void *SANITIZER_CDECL __asan_get_report_address(void); /// Gets access type of an ASan error (useful for calling from the debugger). /// @@ -155,7 +164,7 @@ void *__asan_get_report_address(void); /// reported. Otherwise returns 0. /// /// \returns Access type (0 = read, 1 = write). -int __asan_get_report_access_type(void); +int SANITIZER_CDECL __asan_get_report_access_type(void); /// Gets access size of an ASan error (useful for calling from the debugger). /// @@ -163,7 +172,7 @@ int __asan_get_report_access_type(void); /// returns 0. /// /// \returns Access size in bytes. -size_t __asan_get_report_access_size(void); +size_t SANITIZER_CDECL __asan_get_report_access_size(void); /// Gets the bug description of an ASan error (useful for calling from a /// debugger). @@ -171,7 +180,7 @@ size_t __asan_get_report_access_size(void); /// \returns Returns a bug description if an error has been (or is being) /// reported - for example, "heap-use-after-free". Otherwise returns an empty /// string. -const char *__asan_get_report_description(void); +const char *SANITIZER_CDECL __asan_get_report_description(void); /// Gets information about a pointer (useful for calling from the debugger). /// @@ -192,8 +201,10 @@ const char *__asan_get_report_description(void); /// \param[out] region_size Size of the region in bytes. /// /// \returns Returns the category of the given pointer as a constant string. -const char *__asan_locate_address(void *addr, char *name, size_t name_size, - void **region_address, size_t *region_size); +const char *SANITIZER_CDECL __asan_locate_address(void *addr, char *name, + size_t name_size, + void **region_address, + size_t *region_size); /// Gets the allocation stack trace and thread ID for a heap address (useful /// for calling from the debugger). @@ -207,8 +218,8 @@ const char *__asan_locate_address(void *addr, char *name, size_t name_size, /// \param[out] thread_id The thread ID of the address. /// /// \returns Returns the number of stored frames or 0 on error. -size_t __asan_get_alloc_stack(void *addr, void **trace, size_t size, - int *thread_id); +size_t SANITIZER_CDECL __asan_get_alloc_stack(void *addr, void **trace, + size_t size, int *thread_id); /// Gets the free stack trace and thread ID for a heap address (useful for /// calling from the debugger). @@ -222,15 +233,16 @@ size_t __asan_get_alloc_stack(void *addr, void **trace, size_t size, /// \param[out] thread_id The thread ID of the address. /// /// \returns Returns the number of stored frames or 0 on error. -size_t __asan_get_free_stack(void *addr, void **trace, size_t size, - int *thread_id); +size_t SANITIZER_CDECL __asan_get_free_stack(void *addr, void **trace, + size_t size, int *thread_id); /// Gets the current shadow memory mapping (useful for calling from the /// debugger). /// /// \param[out] shadow_scale Shadow scale value. /// \param[out] shadow_offset Offset value. -void __asan_get_shadow_mapping(size_t *shadow_scale, size_t *shadow_offset); +void SANITIZER_CDECL __asan_get_shadow_mapping(size_t *shadow_scale, + size_t *shadow_offset); /// This is an internal function that is called to report an error. However, /// it is still a part of the interface because you might want to set a @@ -242,29 +254,31 @@ void __asan_get_shadow_mapping(size_t *shadow_scale, size_t *shadow_offset); /// \param addr Address of the ASan error. /// \param is_write True if the error is a write error; false otherwise. /// \param access_size Size of the memory access of the ASan error. -void __asan_report_error(void *pc, void *bp, void *sp, - void *addr, int is_write, size_t access_size); +void SANITIZER_CDECL __asan_report_error(void *pc, void *bp, void *sp, + void *addr, int is_write, + size_t access_size); // Deprecated. Call __sanitizer_set_death_callback instead. -void __asan_set_death_callback(void (*callback)(void)); +void SANITIZER_CDECL __asan_set_death_callback(void (*callback)(void)); /// Sets the callback function to be called during ASan error reporting. /// /// The callback provides a string pointer to the report. /// /// \param callback User-provided function. -void __asan_set_error_report_callback(void (*callback)(const char *)); +void SANITIZER_CDECL +__asan_set_error_report_callback(void (*callback)(const char *)); /// User-provided callback on ASan errors. /// /// You can provide a function that would be called immediately when ASan /// detects an error. This is useful in cases when ASan detects an error but /// your program crashes before the ASan report is printed. -void __asan_on_error(void); +void SANITIZER_CDECL __asan_on_error(void); /// Prints accumulated statistics to stderr (useful for calling from the /// debugger). -void __asan_print_accumulated_stats(void); +void SANITIZER_CDECL __asan_print_accumulated_stats(void); /// User-provided default option settings. /// @@ -273,7 +287,7 @@ void __asan_print_accumulated_stats(void); /// verbosity=1:halt_on_error=0). /// /// \returns Default options string. -const char* __asan_default_options(void); +const char *SANITIZER_CDECL __asan_default_options(void); // The following two functions facilitate garbage collection in presence of // ASan's fake stack. @@ -285,7 +299,7 @@ const char* __asan_default_options(void); /// does not have a fake stack. /// /// \returns An opaque handler to the fake stack or NULL. -void *__asan_get_current_fake_stack(void); +void *SANITIZER_CDECL __asan_get_current_fake_stack(void); /// Checks if an address belongs to a given fake stack. /// @@ -305,22 +319,22 @@ void *__asan_get_current_fake_stack(void); /// \param[out] beg Beginning of fake frame. /// \param[out] end End of fake frame. /// \returns Stack address or NULL. -void *__asan_addr_is_in_fake_stack(void *fake_stack, void *addr, void **beg, - void **end); +void *SANITIZER_CDECL __asan_addr_is_in_fake_stack(void *fake_stack, void *addr, + void **beg, void **end); /// Performs shadow memory cleanup of the current thread's stack before a /// function marked with the [[noreturn]] attribute is called. /// /// To avoid false positives on the stack, must be called before no-return /// functions like _exit() and execl(). -void __asan_handle_no_return(void); +void SANITIZER_CDECL __asan_handle_no_return(void); /// Update allocation stack trace for the given allocation to the current stack /// trace. Returns 1 if successful, 0 if not. -int __asan_update_allocation_context(void* addr); +int SANITIZER_CDECL __asan_update_allocation_context(void *addr); #ifdef __cplusplus -} // extern "C" +} // extern "C" #endif -#endif // SANITIZER_ASAN_INTERFACE_H +#endif // SANITIZER_ASAN_INTERFACE_H diff --git a/libsanitizer/include/sanitizer/common_interface_defs.h b/libsanitizer/include/sanitizer/common_interface_defs.h index 2f415bd9e854..56d9e008fa06 100644 --- a/libsanitizer/include/sanitizer/common_interface_defs.h +++ b/libsanitizer/include/sanitizer/common_interface_defs.h @@ -15,9 +15,12 @@ #include #include -// GCC does not understand __has_feature. -#if !defined(__has_feature) -#define __has_feature(x) 0 +// Windows allows a user to set their default calling convention, but we always +// use __cdecl +#ifdef _WIN32 +#define SANITIZER_CDECL __cdecl +#else +#define SANITIZER_CDECL #endif #ifdef __cplusplus @@ -39,71 +42,73 @@ typedef struct { } __sanitizer_sandbox_arguments; // Tell the tools to write their reports to "path." instead of stderr. -void __sanitizer_set_report_path(const char *path); +void SANITIZER_CDECL __sanitizer_set_report_path(const char *path); // Tell the tools to write their reports to the provided file descriptor // (casted to void *). -void __sanitizer_set_report_fd(void *fd); +void SANITIZER_CDECL __sanitizer_set_report_fd(void *fd); // Get the current full report file path, if a path was specified by // an earlier call to __sanitizer_set_report_path. Returns null otherwise. -const char *__sanitizer_get_report_path(); +const char *SANITIZER_CDECL __sanitizer_get_report_path(); // Notify the tools that the sandbox is going to be turned on. The reserved // parameter will be used in the future to hold a structure with functions // that the tools may call to bypass the sandbox. -void __sanitizer_sandbox_on_notify(__sanitizer_sandbox_arguments *args); +void SANITIZER_CDECL +__sanitizer_sandbox_on_notify(__sanitizer_sandbox_arguments *args); // This function is called by the tool when it has just finished reporting // an error. 'error_summary' is a one-line string that summarizes // the error message. This function can be overridden by the client. -void __sanitizer_report_error_summary(const char *error_summary); +void SANITIZER_CDECL +__sanitizer_report_error_summary(const char *error_summary); // Some of the sanitizers (for example ASan/TSan) could miss bugs that happen // in unaligned loads/stores. To find such bugs reliably, you need to replace // plain unaligned loads/stores with these calls. /// Loads a 16-bit unaligned value. -/// +// /// \param p Pointer to unaligned memory. /// /// \returns Loaded value. -uint16_t __sanitizer_unaligned_load16(const void *p); +uint16_t SANITIZER_CDECL __sanitizer_unaligned_load16(const void *p); /// Loads a 32-bit unaligned value. /// /// \param p Pointer to unaligned memory. /// /// \returns Loaded value. -uint32_t __sanitizer_unaligned_load32(const void *p); +uint32_t SANITIZER_CDECL __sanitizer_unaligned_load32(const void *p); /// Loads a 64-bit unaligned value. /// /// \param p Pointer to unaligned memory. /// /// \returns Loaded value. -uint64_t __sanitizer_unaligned_load64(const void *p); +uint64_t SANITIZER_CDECL __sanitizer_unaligned_load64(const void *p); /// Stores a 16-bit unaligned value. /// /// \param p Pointer to unaligned memory. /// \param x 16-bit value to store. -void __sanitizer_unaligned_store16(void *p, uint16_t x); +void SANITIZER_CDECL __sanitizer_unaligned_store16(void *p, uint16_t x); /// Stores a 32-bit unaligned value. /// /// \param p Pointer to unaligned memory. /// \param x 32-bit value to store. -void __sanitizer_unaligned_store32(void *p, uint32_t x); +void SANITIZER_CDECL __sanitizer_unaligned_store32(void *p, uint32_t x); /// Stores a 64-bit unaligned value. /// /// \param p Pointer to unaligned memory. /// \param x 64-bit value to store. -void __sanitizer_unaligned_store64(void *p, uint64_t x); +void SANITIZER_CDECL __sanitizer_unaligned_store64(void *p, uint64_t x); // Returns 1 on the first call, then returns 0 thereafter. Called by the tool // to ensure only one report is printed when multiple errors occur // simultaneously. -int __sanitizer_acquire_crash_state(); +int SANITIZER_CDECL __sanitizer_acquire_crash_state(); /// Annotates the current state of a contiguous container, such as /// std::vector, std::string, or similar. @@ -129,35 +134,30 @@ int __sanitizer_acquire_crash_state(); /// state mid == end, so that should be the final state when the /// container is destroyed or when the container reallocates the storage. /// -/// For ASan, beg should be 8-aligned and end -/// should be either 8-aligned or it should point to the end of a separate -/// heap-, stack-, or global-allocated buffer. So the following example will -/// not work: +/// For ASan, beg no longer needs to be 8-aligned, +/// first and last granule may be shared with other objects +/// and therefore the function can be used for any allocator. +/// +/// The following example shows how to use the function: /// /// \code -/// int64_t x[2]; // 16 bytes, 8-aligned -/// char *beg = (char *)&x[0]; -/// char *end = beg + 12; // Not 8-aligned, not the end of the buffer -/// \endcode -/// -/// The following, however, will work: -/// \code -/// int32_t x[3]; // 12 bytes, but 8-aligned under ASan. +/// int32_t x[3]; // 12 bytes /// char *beg = (char*)&x[0]; -/// char *end = beg + 12; // Not 8-aligned, but is the end of the buffer +/// char *end = beg + 12; +/// __sanitizer_annotate_contiguous_container(beg, end, beg, end); /// \endcode /// /// \note Use this function with caution and do not use for anything other /// than vector-like classes. +/// \note Unaligned beg or end may miss bugs in +/// these granules. /// /// \param beg Beginning of memory region. /// \param end End of memory region. /// \param old_mid Old middle of memory region. /// \param new_mid New middle of memory region. -void __sanitizer_annotate_contiguous_container(const void *beg, - const void *end, - const void *old_mid, - const void *new_mid); +void SANITIZER_CDECL __sanitizer_annotate_contiguous_container( + const void *beg, const void *end, const void *old_mid, const void *new_mid); /// Similar to __sanitizer_annotate_contiguous_container. /// @@ -188,7 +188,7 @@ void __sanitizer_annotate_contiguous_container(const void *beg, /// \param old_container_end End of used region. /// \param new_container_beg New beginning of used region. /// \param new_container_end New end of used region. -void __sanitizer_annotate_double_ended_contiguous_container( +void SANITIZER_CDECL __sanitizer_annotate_double_ended_contiguous_container( const void *storage_beg, const void *storage_end, const void *old_container_beg, const void *old_container_end, const void *new_container_beg, const void *new_container_end); @@ -209,8 +209,9 @@ void __sanitizer_annotate_double_ended_contiguous_container( /// /// \returns True if the contiguous container [beg, end) is properly /// poisoned. -int __sanitizer_verify_contiguous_container(const void *beg, const void *mid, - const void *end); +int SANITIZER_CDECL __sanitizer_verify_contiguous_container(const void *beg, + const void *mid, + const void *end); /// Returns true if the double ended contiguous /// container [storage_beg, storage_end) is properly poisoned. @@ -233,7 +234,7 @@ int __sanitizer_verify_contiguous_container(const void *beg, const void *mid, /// \returns True if the double-ended contiguous container [storage_beg, /// container_beg, container_end, end) is properly poisoned - only /// [container_beg; container_end) is addressable. -int __sanitizer_verify_double_ended_contiguous_container( +int SANITIZER_CDECL __sanitizer_verify_double_ended_contiguous_container( const void *storage_beg, const void *container_beg, const void *container_end, const void *storage_end); @@ -247,9 +248,8 @@ int __sanitizer_verify_double_ended_contiguous_container( /// \param end Old end of memory region. /// /// \returns The bad address or NULL. -const void *__sanitizer_contiguous_container_find_bad_address(const void *beg, - const void *mid, - const void *end); +const void *SANITIZER_CDECL __sanitizer_contiguous_container_find_bad_address( + const void *beg, const void *mid, const void *end); /// returns the address of the first improperly poisoned byte. /// @@ -261,13 +261,14 @@ const void *__sanitizer_contiguous_container_find_bad_address(const void *beg, /// \param storage_end End of memory region. /// /// \returns The bad address or NULL. -const void *__sanitizer_double_ended_contiguous_container_find_bad_address( +const void *SANITIZER_CDECL +__sanitizer_double_ended_contiguous_container_find_bad_address( const void *storage_beg, const void *container_beg, const void *container_end, const void *storage_end); /// Prints the stack trace leading to this call (useful for calling from the /// debugger). -void __sanitizer_print_stack_trace(void); +void SANITIZER_CDECL __sanitizer_print_stack_trace(void); // Symbolizes the supplied 'pc' using the format string 'fmt'. // Outputs at most 'out_buf_size' bytes into 'out_buf'. @@ -279,17 +280,20 @@ void __sanitizer_print_stack_trace(void); // Inlined frames can be removed with 'symbolize_inline_frames=0'. // The format syntax is described in // lib/sanitizer_common/sanitizer_stacktrace_printer.h. -void __sanitizer_symbolize_pc(void *pc, const char *fmt, char *out_buf, - size_t out_buf_size); +void SANITIZER_CDECL __sanitizer_symbolize_pc(void *pc, const char *fmt, + char *out_buf, + size_t out_buf_size); // Same as __sanitizer_symbolize_pc, but for data section (i.e. globals). -void __sanitizer_symbolize_global(void *data_ptr, const char *fmt, - char *out_buf, size_t out_buf_size); +void SANITIZER_CDECL __sanitizer_symbolize_global(void *data_ptr, + const char *fmt, + char *out_buf, + size_t out_buf_size); // Determine the return address. #if !defined(_MSC_VER) || defined(__clang__) #define __sanitizer_return_address() \ __builtin_extract_return_addr(__builtin_return_address(0)) #else -extern "C" void *_ReturnAddress(void); +void *SANITIZER_CDECL _ReturnAddress(void); #pragma intrinsic(_ReturnAddress) #define __sanitizer_return_address() _ReturnAddress() #endif @@ -299,8 +303,7 @@ extern "C" void *_ReturnAddress(void); /// Passing 0 will unset the callback. /// /// \param callback User-provided callback. -void __sanitizer_set_death_callback(void (*callback)(void)); - +void SANITIZER_CDECL __sanitizer_set_death_callback(void (*callback)(void)); // Interceptor hooks. // Whenever a libc function interceptor is called, it checks if the @@ -316,8 +319,10 @@ void __sanitizer_set_death_callback(void (*callback)(void)); /// \param s2 Pointer to block of memory. /// \param n Number of bytes to compare. /// \param result Value returned by the intercepted function. -void __sanitizer_weak_hook_memcmp(void *called_pc, const void *s1, - const void *s2, size_t n, int result); +void SANITIZER_CDECL __sanitizer_weak_hook_memcmp(void *called_pc, + const void *s1, + const void *s2, size_t n, + int result); /// Interceptor hook for strncmp(). /// @@ -326,8 +331,10 @@ void __sanitizer_weak_hook_memcmp(void *called_pc, const void *s1, /// \param s2 Pointer to block of memory. /// \param n Number of bytes to compare. /// \param result Value returned by the intercepted function. -void __sanitizer_weak_hook_strncmp(void *called_pc, const char *s1, - const char *s2, size_t n, int result); +void SANITIZER_CDECL __sanitizer_weak_hook_strncmp(void *called_pc, + const char *s1, + const char *s2, size_t n, + int result); /// Interceptor hook for strncasecmp(). /// @@ -336,8 +343,10 @@ void __sanitizer_weak_hook_strncmp(void *called_pc, const char *s1, /// \param s2 Pointer to block of memory. /// \param n Number of bytes to compare. /// \param result Value returned by the intercepted function. -void __sanitizer_weak_hook_strncasecmp(void *called_pc, const char *s1, - const char *s2, size_t n, int result); +void SANITIZER_CDECL __sanitizer_weak_hook_strncasecmp(void *called_pc, + const char *s1, + const char *s2, size_t n, + int result); /// Interceptor hook for strcmp(). /// @@ -345,8 +354,9 @@ void __sanitizer_weak_hook_strncasecmp(void *called_pc, const char *s1, /// \param s1 Pointer to block of memory. /// \param s2 Pointer to block of memory. /// \param result Value returned by the intercepted function. -void __sanitizer_weak_hook_strcmp(void *called_pc, const char *s1, - const char *s2, int result); +void SANITIZER_CDECL __sanitizer_weak_hook_strcmp(void *called_pc, + const char *s1, + const char *s2, int result); /// Interceptor hook for strcasecmp(). /// @@ -354,8 +364,10 @@ void __sanitizer_weak_hook_strcmp(void *called_pc, const char *s1, /// \param s1 Pointer to block of memory. /// \param s2 Pointer to block of memory. /// \param result Value returned by the intercepted function. -void __sanitizer_weak_hook_strcasecmp(void *called_pc, const char *s1, - const char *s2, int result); +void SANITIZER_CDECL __sanitizer_weak_hook_strcasecmp(void *called_pc, + const char *s1, + const char *s2, + int result); /// Interceptor hook for strstr(). /// @@ -363,23 +375,27 @@ void __sanitizer_weak_hook_strcasecmp(void *called_pc, const char *s1, /// \param s1 Pointer to block of memory. /// \param s2 Pointer to block of memory. /// \param result Value returned by the intercepted function. -void __sanitizer_weak_hook_strstr(void *called_pc, const char *s1, - const char *s2, char *result); +void SANITIZER_CDECL __sanitizer_weak_hook_strstr(void *called_pc, + const char *s1, + const char *s2, char *result); -void __sanitizer_weak_hook_strcasestr(void *called_pc, const char *s1, - const char *s2, char *result); +void SANITIZER_CDECL __sanitizer_weak_hook_strcasestr(void *called_pc, + const char *s1, + const char *s2, + char *result); -void __sanitizer_weak_hook_memmem(void *called_pc, - const void *s1, size_t len1, - const void *s2, size_t len2, void *result); +void SANITIZER_CDECL __sanitizer_weak_hook_memmem(void *called_pc, + const void *s1, size_t len1, + const void *s2, size_t len2, + void *result); // Prints stack traces for all live heap allocations ordered by total // allocation size until top_percent of total live heap is shown. top_percent // should be between 1 and 100. At most max_number_of_contexts contexts // (stack traces) are printed. // Experimental feature currently available only with ASan on Linux/x86_64. -void __sanitizer_print_memory_profile(size_t top_percent, - size_t max_number_of_contexts); +void SANITIZER_CDECL __sanitizer_print_memory_profile( + size_t top_percent, size_t max_number_of_contexts); /// Notify ASan that a fiber switch has started (required only if implementing /// your own fiber library). @@ -408,8 +424,9 @@ void __sanitizer_print_memory_profile(size_t top_percent, /// \param[out] fake_stack_save Fake stack save location. /// \param bottom Bottom address of stack. /// \param size Size of stack in bytes. -void __sanitizer_start_switch_fiber(void **fake_stack_save, - const void *bottom, size_t size); +void SANITIZER_CDECL __sanitizer_start_switch_fiber(void **fake_stack_save, + const void *bottom, + size_t size); /// Notify ASan that a fiber switch has completed (required only if /// implementing your own fiber library). @@ -422,18 +439,17 @@ void __sanitizer_start_switch_fiber(void **fake_stack_save, /// \param fake_stack_save Fake stack save location. /// \param[out] bottom_old Bottom address of old stack. /// \param[out] size_old Size of old stack in bytes. -void __sanitizer_finish_switch_fiber(void *fake_stack_save, - const void **bottom_old, - size_t *size_old); +void SANITIZER_CDECL __sanitizer_finish_switch_fiber(void *fake_stack_save, + const void **bottom_old, + size_t *size_old); // Get full module name and calculate pc offset within it. // Returns 1 if pc belongs to some module, 0 if module was not found. -int __sanitizer_get_module_and_offset_for_pc(void *pc, char *module_path, - size_t module_path_len, - void **pc_offset); +int SANITIZER_CDECL __sanitizer_get_module_and_offset_for_pc( + void *pc, char *module_path, size_t module_path_len, void **pc_offset); #ifdef __cplusplus -} // extern "C" +} // extern "C" #endif -#endif // SANITIZER_COMMON_INTERFACE_DEFS_H +#endif // SANITIZER_COMMON_INTERFACE_DEFS_H diff --git a/libsanitizer/include/sanitizer/coverage_interface.h b/libsanitizer/include/sanitizer/coverage_interface.h index c063cfe60c5b..6235dfc2d4ba 100644 --- a/libsanitizer/include/sanitizer/coverage_interface.h +++ b/libsanitizer/include/sanitizer/coverage_interface.h @@ -18,18 +18,19 @@ extern "C" { #endif - // Record and dump coverage info. - void __sanitizer_cov_dump(void); +// Record and dump coverage info. +void SANITIZER_CDECL __sanitizer_cov_dump(void); - // Clear collected coverage info. - void __sanitizer_cov_reset(void); +// Clear collected coverage info. +void SANITIZER_CDECL __sanitizer_cov_reset(void); - // Dump collected coverage info. Sorts pcs by module into individual .sancov - // files. - void __sanitizer_dump_coverage(const uintptr_t *pcs, uintptr_t len); +// Dump collected coverage info. Sorts pcs by module into individual .sancov +// files. +void SANITIZER_CDECL __sanitizer_dump_coverage(const uintptr_t *pcs, + uintptr_t len); #ifdef __cplusplus -} // extern "C" +} // extern "C" #endif -#endif // SANITIZER_COVERAG_INTERFACE_H +#endif // SANITIZER_COVERAG_INTERFACE_H diff --git a/libsanitizer/include/sanitizer/dfsan_interface.h b/libsanitizer/include/sanitizer/dfsan_interface.h index 519bfffa9a20..4e52e1b54cd8 100644 --- a/libsanitizer/include/sanitizer/dfsan_interface.h +++ b/libsanitizer/include/sanitizer/dfsan_interface.h @@ -13,9 +13,9 @@ #ifndef DFSAN_INTERFACE_H #define DFSAN_INTERFACE_H +#include #include #include -#include #ifdef __cplusplus extern "C" { @@ -25,29 +25,30 @@ typedef uint8_t dfsan_label; typedef uint32_t dfsan_origin; /// Signature of the callback argument to dfsan_set_write_callback(). -typedef void (*dfsan_write_callback_t)(int fd, const void *buf, size_t count); +typedef void(SANITIZER_CDECL *dfsan_write_callback_t)(int fd, const void *buf, + size_t count); /// Signature of the callback argument to dfsan_set_conditional_callback(). -typedef void (*dfsan_conditional_callback_t)(dfsan_label label, - dfsan_origin origin); +typedef void(SANITIZER_CDECL *dfsan_conditional_callback_t)( + dfsan_label label, dfsan_origin origin); /// Signature of the callback argument to dfsan_set_reaches_function_callback(). /// The description is intended to hold the name of the variable. -typedef void (*dfsan_reaches_function_callback_t)(dfsan_label label, - dfsan_origin origin, - const char *file, - unsigned int line, - const char *function); +typedef void(SANITIZER_CDECL *dfsan_reaches_function_callback_t)( + dfsan_label label, dfsan_origin origin, const char *file, unsigned int line, + const char *function); /// Computes the union of \c l1 and \c l2, resulting in a union label. -dfsan_label dfsan_union(dfsan_label l1, dfsan_label l2); +dfsan_label SANITIZER_CDECL dfsan_union(dfsan_label l1, dfsan_label l2); /// Sets the label for each address in [addr,addr+size) to \c label. -void dfsan_set_label(dfsan_label label, void *addr, size_t size); +void SANITIZER_CDECL dfsan_set_label(dfsan_label label, void *addr, + size_t size); /// Sets the label for each address in [addr,addr+size) to the union of the /// current label for that address and \c label. -void dfsan_add_label(dfsan_label label, void *addr, size_t size); +void SANITIZER_CDECL dfsan_add_label(dfsan_label label, void *addr, + size_t size); /// Retrieves the label associated with the given data. /// @@ -55,23 +56,24 @@ void dfsan_add_label(dfsan_label label, void *addr, size_t size); /// which can be truncated or extended (implicitly or explicitly) as necessary. /// The truncation/extension operations will preserve the label of the original /// value. -dfsan_label dfsan_get_label(long data); +dfsan_label SANITIZER_CDECL dfsan_get_label(long data); /// Retrieves the immediate origin associated with the given data. The returned /// origin may point to another origin. /// /// The type of 'data' is arbitrary. -dfsan_origin dfsan_get_origin(long data); +dfsan_origin SANITIZER_CDECL dfsan_get_origin(long data); /// Retrieves the label associated with the data at the given address. -dfsan_label dfsan_read_label(const void *addr, size_t size); +dfsan_label SANITIZER_CDECL dfsan_read_label(const void *addr, size_t size); /// Return the origin associated with the first taint byte in the size bytes /// from the address addr. -dfsan_origin dfsan_read_origin_of_first_taint(const void *addr, size_t size); +dfsan_origin SANITIZER_CDECL dfsan_read_origin_of_first_taint(const void *addr, + size_t size); -/// Returns whether the given label label contains the label elem. -int dfsan_has_label(dfsan_label label, dfsan_label elem); +/// Returns whether the given label contains the label elem. +int SANITIZER_CDECL dfsan_has_label(dfsan_label label, dfsan_label elem); /// Flushes the DFSan shadow, i.e. forgets about all labels currently associated /// with the application memory. Use this call to start over the taint tracking @@ -79,37 +81,39 @@ int dfsan_has_label(dfsan_label label, dfsan_label elem); /// /// Note: If another thread is working with tainted data during the flush, that /// taint could still be written to shadow after the flush. -void dfsan_flush(void); +void SANITIZER_CDECL dfsan_flush(void); /// Sets a callback to be invoked on calls to write(). The callback is invoked /// before the write is done. The write is not guaranteed to succeed when the /// callback executes. Pass in NULL to remove any callback. -void dfsan_set_write_callback(dfsan_write_callback_t labeled_write_callback); +void SANITIZER_CDECL +dfsan_set_write_callback(dfsan_write_callback_t labeled_write_callback); /// Sets a callback to be invoked on any conditional expressions which have a /// taint label set. This can be used to find where tainted data influences /// the behavior of the program. /// These callbacks will only be added when -dfsan-conditional-callbacks=true. -void dfsan_set_conditional_callback(dfsan_conditional_callback_t callback); +void SANITIZER_CDECL +dfsan_set_conditional_callback(dfsan_conditional_callback_t callback); /// Conditional expressions occur during signal handlers. /// Making callbacks that handle signals well is tricky, so when /// -dfsan-conditional-callbacks=true, conditional expressions used in signal /// handlers will add the labels they see into a global (bitwise-or together). /// This function returns all label bits seen in signal handler conditions. -dfsan_label dfsan_get_labels_in_signal_conditional(); +dfsan_label SANITIZER_CDECL dfsan_get_labels_in_signal_conditional(); /// Sets a callback to be invoked when tainted data reaches a function. /// This could occur at function entry, or at a load instruction. /// These callbacks will only be added if -dfsan-reaches-function-callbacks=1. -void dfsan_set_reaches_function_callback( - dfsan_reaches_function_callback_t callback); +void SANITIZER_CDECL +dfsan_set_reaches_function_callback(dfsan_reaches_function_callback_t callback); /// Making callbacks that handle signals well is tricky, so when /// -dfsan-reaches-function-callbacks=true, functions reached in signal /// handlers will add the labels they see into a global (bitwise-or together). /// This function returns all label bits seen during signal handlers. -dfsan_label dfsan_get_labels_in_signal_reaches_function(); +dfsan_label SANITIZER_CDECL dfsan_get_labels_in_signal_reaches_function(); /// Interceptor hooks. /// Whenever a dfsan's custom function is called the corresponding @@ -117,20 +121,25 @@ dfsan_label dfsan_get_labels_in_signal_reaches_function(); /// The primary use case is taint-guided fuzzing, where the fuzzer /// needs to see the parameters of the function and the labels. /// FIXME: implement more hooks. -void dfsan_weak_hook_memcmp(void *caller_pc, const void *s1, const void *s2, - size_t n, dfsan_label s1_label, - dfsan_label s2_label, dfsan_label n_label); -void dfsan_weak_hook_strncmp(void *caller_pc, const char *s1, const char *s2, - size_t n, dfsan_label s1_label, - dfsan_label s2_label, dfsan_label n_label); +void SANITIZER_CDECL dfsan_weak_hook_memcmp(void *caller_pc, const void *s1, + const void *s2, size_t n, + dfsan_label s1_label, + dfsan_label s2_label, + dfsan_label n_label); +void SANITIZER_CDECL dfsan_weak_hook_strncmp(void *caller_pc, const char *s1, + const char *s2, size_t n, + dfsan_label s1_label, + dfsan_label s2_label, + dfsan_label n_label); /// Prints the origin trace of the label at the address addr to stderr. It also /// prints description at the beginning of the trace. If origin tracking is not /// on, or the address is not labeled, it prints nothing. -void dfsan_print_origin_trace(const void *addr, const char *description); +void SANITIZER_CDECL dfsan_print_origin_trace(const void *addr, + const char *description); /// As above, but use an origin id from dfsan_get_origin() instead of address. /// Does not include header line with taint label and address information. -void dfsan_print_origin_id_trace(dfsan_origin origin); +void SANITIZER_CDECL dfsan_print_origin_id_trace(dfsan_origin origin); /// Prints the origin trace of the label at the address \p addr to a /// pre-allocated output buffer. If origin tracking is not on, or the address is @@ -166,12 +175,15 @@ void dfsan_print_origin_id_trace(dfsan_origin origin); /// \returns The number of symbols that should have been written to \p out_buf /// (not including trailing null byte '\0'). Thus, the string is truncated iff /// return value is not less than \p out_buf_size. -size_t dfsan_sprint_origin_trace(const void *addr, const char *description, - char *out_buf, size_t out_buf_size); +size_t SANITIZER_CDECL dfsan_sprint_origin_trace(const void *addr, + const char *description, + char *out_buf, + size_t out_buf_size); /// As above, but use an origin id from dfsan_get_origin() instead of address. /// Does not include header line with taint label and address information. -size_t dfsan_sprint_origin_id_trace(dfsan_origin origin, char *out_buf, - size_t out_buf_size); +size_t SANITIZER_CDECL dfsan_sprint_origin_id_trace(dfsan_origin origin, + char *out_buf, + size_t out_buf_size); /// Prints the stack trace leading to this call to a pre-allocated output /// buffer. @@ -184,19 +196,20 @@ size_t dfsan_sprint_origin_id_trace(dfsan_origin origin, char *out_buf, /// \returns The number of symbols that should have been written to \p out_buf /// (not including trailing null byte '\0'). Thus, the string is truncated iff /// return value is not less than \p out_buf_size. -size_t dfsan_sprint_stack_trace(char *out_buf, size_t out_buf_size); +size_t SANITIZER_CDECL dfsan_sprint_stack_trace(char *out_buf, + size_t out_buf_size); /// Retrieves the very first origin associated with the data at the given /// address. -dfsan_origin dfsan_get_init_origin(const void *addr); +dfsan_origin SANITIZER_CDECL dfsan_get_init_origin(const void *addr); /// Returns the value of -dfsan-track-origins. /// * 0: do not track origins. /// * 1: track origins at memory store operations. /// * 2: track origins at memory load and store operations. -int dfsan_get_track_origins(void); +int SANITIZER_CDECL dfsan_get_track_origins(void); #ifdef __cplusplus -} // extern "C" +} // extern "C" template void dfsan_set_label(dfsan_label label, T &data) { dfsan_set_label(label, (void *)&data, sizeof(T)); @@ -204,4 +217,4 @@ template void dfsan_set_label(dfsan_label label, T &data) { #endif -#endif // DFSAN_INTERFACE_H +#endif // DFSAN_INTERFACE_H diff --git a/libsanitizer/include/sanitizer/hwasan_interface.h b/libsanitizer/include/sanitizer/hwasan_interface.h index ee742c7f3031..abe310c06669 100644 --- a/libsanitizer/include/sanitizer/hwasan_interface.h +++ b/libsanitizer/include/sanitizer/hwasan_interface.h @@ -18,82 +18,88 @@ #ifdef __cplusplus extern "C" { #endif - // Libc hook for program startup in statically linked executables. - // Initializes enough of the runtime to run instrumented code. This function - // should only be called in statically linked executables because it modifies - // the GOT, which won't work in regular binaries because RELRO will already - // have been applied by the time the function is called. This also means that - // the function should be called before libc applies RELRO. - // Does not call libc unless there is an error. - // Can be called multiple times. - void __hwasan_init_static(void); +// Libc hook for program startup in statically linked executables. +// Initializes enough of the runtime to run instrumented code. This function +// should only be called in statically linked executables because it modifies +// the GOT, which won't work in regular binaries because RELRO will already +// have been applied by the time the function is called. This also means that +// the function should be called before libc applies RELRO. +// Does not call libc unless there is an error. +// Can be called multiple times. +void SANITIZER_CDECL __hwasan_init_static(void); - // This function may be optionally provided by user and should return - // a string containing HWASan runtime options. See asan_flags.h for details. - const char* __hwasan_default_options(void); +// This function may be optionally provided by user and should return +// a string containing HWASan runtime options. See asan_flags.h for details. +const char *SANITIZER_CDECL __hwasan_default_options(void); - void __hwasan_enable_allocator_tagging(void); - void __hwasan_disable_allocator_tagging(void); +void SANITIZER_CDECL __hwasan_enable_allocator_tagging(void); +void SANITIZER_CDECL __hwasan_disable_allocator_tagging(void); - // Mark region of memory with the given tag. Both address and size need to be - // 16-byte aligned. - void __hwasan_tag_memory(const volatile void *p, unsigned char tag, - size_t size); +// Mark region of memory with the given tag. Both address and size need to be +// 16-byte aligned. +void SANITIZER_CDECL __hwasan_tag_memory(const volatile void *p, + unsigned char tag, size_t size); - /// Set pointer tag. Previous tag is lost. - void *__hwasan_tag_pointer(const volatile void *p, unsigned char tag); +/// Set pointer tag. Previous tag is lost. +void *SANITIZER_CDECL __hwasan_tag_pointer(const volatile void *p, + unsigned char tag); - // Set memory tag from the current SP address to the given address to zero. - // This is meant to annotate longjmp and other non-local jumps. - // This function needs to know the (almost) exact destination frame address; - // clearing shadow for the entire thread stack like __asan_handle_no_return - // does would cause false reports. - void __hwasan_handle_longjmp(const void *sp_dst); +// Set memory tag from the current SP address to the given address to zero. +// This is meant to annotate longjmp and other non-local jumps. +// This function needs to know the (almost) exact destination frame address; +// clearing shadow for the entire thread stack like __asan_handle_no_return +// does would cause false reports. +void SANITIZER_CDECL __hwasan_handle_longjmp(const void *sp_dst); - // Set memory tag for the part of the current thread stack below sp_dst to - // zero. Call this in vfork() before returning in the parent process. - void __hwasan_handle_vfork(const void *sp_dst); +// Set memory tag for the part of the current thread stack below sp_dst to +// zero. Call this in vfork() before returning in the parent process. +void SANITIZER_CDECL __hwasan_handle_vfork(const void *sp_dst); - // Libc hook for thread creation. Should be called in the child thread before - // any instrumented code. - void __hwasan_thread_enter(); +// Libc hook for thread creation. Should be called in the child thread before +// any instrumented code. +void SANITIZER_CDECL __hwasan_thread_enter(); - // Libc hook for thread destruction. No instrumented code should run after - // this call. - void __hwasan_thread_exit(); +// Libc hook for thread destruction. No instrumented code should run after +// this call. +void SANITIZER_CDECL __hwasan_thread_exit(); - // Print shadow and origin for the memory range to stderr in a human-readable - // format. - void __hwasan_print_shadow(const volatile void *x, size_t size); +// Print shadow and origin for the memory range to stderr in a human-readable +// format. +void SANITIZER_CDECL __hwasan_print_shadow(const volatile void *x, size_t size); - // Print one-line report about the memory usage of the current process. - void __hwasan_print_memory_usage(); +// Print one-line report about the memory usage of the current process. +void SANITIZER_CDECL __hwasan_print_memory_usage(); - /* Returns the offset of the first byte in the memory range that can not be - * accessed through the pointer in x, or -1 if the whole range is good. */ - intptr_t __hwasan_test_shadow(const volatile void *x, size_t size); +/* Returns the offset of the first byte in the memory range that can not be + * accessed through the pointer in x, or -1 if the whole range is good. */ +intptr_t SANITIZER_CDECL __hwasan_test_shadow(const volatile void *x, + size_t size); - /* Sets the callback function to be called during HWASan error reporting. */ - void __hwasan_set_error_report_callback(void (*callback)(const char *)); +/* Sets the callback function to be called during HWASan error reporting. */ +void SANITIZER_CDECL +__hwasan_set_error_report_callback(void (*callback)(const char *)); - int __sanitizer_posix_memalign(void **memptr, size_t alignment, size_t size); - void * __sanitizer_memalign(size_t alignment, size_t size); - void * __sanitizer_aligned_alloc(size_t alignment, size_t size); - void * __sanitizer___libc_memalign(size_t alignment, size_t size); - void * __sanitizer_valloc(size_t size); - void * __sanitizer_pvalloc(size_t size); - void __sanitizer_free(void *ptr); - void __sanitizer_cfree(void *ptr); - size_t __sanitizer_malloc_usable_size(const void *ptr); - struct mallinfo __sanitizer_mallinfo(); - int __sanitizer_mallopt(int cmd, int value); - void __sanitizer_malloc_stats(void); - void * __sanitizer_calloc(size_t nmemb, size_t size); - void * __sanitizer_realloc(void *ptr, size_t size); - void * __sanitizer_reallocarray(void *ptr, size_t nmemb, size_t size); - void * __sanitizer_malloc(size_t size); +int SANITIZER_CDECL __sanitizer_posix_memalign(void **memptr, size_t alignment, + size_t size); +void *SANITIZER_CDECL __sanitizer_memalign(size_t alignment, size_t size); +void *SANITIZER_CDECL __sanitizer_aligned_alloc(size_t alignment, size_t size); +void *SANITIZER_CDECL __sanitizer___libc_memalign(size_t alignment, + size_t size); +void *SANITIZER_CDECL __sanitizer_valloc(size_t size); +void *SANITIZER_CDECL __sanitizer_pvalloc(size_t size); +void SANITIZER_CDECL __sanitizer_free(void *ptr); +void SANITIZER_CDECL __sanitizer_cfree(void *ptr); +size_t SANITIZER_CDECL __sanitizer_malloc_usable_size(const void *ptr); +struct mallinfo SANITIZER_CDECL __sanitizer_mallinfo(); +int SANITIZER_CDECL __sanitizer_mallopt(int cmd, int value); +void SANITIZER_CDECL __sanitizer_malloc_stats(void); +void *SANITIZER_CDECL __sanitizer_calloc(size_t nmemb, size_t size); +void *SANITIZER_CDECL __sanitizer_realloc(void *ptr, size_t size); +void *SANITIZER_CDECL __sanitizer_reallocarray(void *ptr, size_t nmemb, + size_t size); +void *SANITIZER_CDECL __sanitizer_malloc(size_t size); #ifdef __cplusplus -} // extern "C" +} // extern "C" #endif -#endif // SANITIZER_HWASAN_INTERFACE_H +#endif // SANITIZER_HWASAN_INTERFACE_H diff --git a/libsanitizer/include/sanitizer/lsan_interface.h b/libsanitizer/include/sanitizer/lsan_interface.h index 2bb992672f2e..18f3456a126c 100644 --- a/libsanitizer/include/sanitizer/lsan_interface.h +++ b/libsanitizer/include/sanitizer/lsan_interface.h @@ -18,72 +18,72 @@ #ifdef __cplusplus extern "C" { #endif - // Allocations made between calls to __lsan_disable() and __lsan_enable() will - // be treated as non-leaks. Disable/enable pairs may be nested. - void __lsan_disable(void); - void __lsan_enable(void); +// Allocations made between calls to __lsan_disable() and __lsan_enable() will +// be treated as non-leaks. Disable/enable pairs may be nested. +void SANITIZER_CDECL __lsan_disable(void); +void SANITIZER_CDECL __lsan_enable(void); - // The heap object into which p points will be treated as a non-leak. - void __lsan_ignore_object(const void *p); +// The heap object into which p points will be treated as a non-leak. +void SANITIZER_CDECL __lsan_ignore_object(const void *p); - // Memory regions registered through this interface will be treated as sources - // of live pointers during leak checking. Useful if you store pointers in - // mapped memory. - // Points of note: - // - __lsan_unregister_root_region() must be called with the same pointer and - // size that have earlier been passed to __lsan_register_root_region() - // - LSan will skip any inaccessible memory when scanning a root region. E.g., - // if you map memory within a larger region that you have mprotect'ed, you can - // register the entire large region. - // - the implementation is not optimized for performance. This interface is - // intended to be used for a small number of relatively static regions. - void __lsan_register_root_region(const void *p, size_t size); - void __lsan_unregister_root_region(const void *p, size_t size); +// Memory regions registered through this interface will be treated as sources +// of live pointers during leak checking. Useful if you store pointers in +// mapped memory. +// Points of note: +// - __lsan_unregister_root_region() must be called with the same pointer and +// size that have earlier been passed to __lsan_register_root_region() +// - LSan will skip any inaccessible memory when scanning a root region. E.g., +// if you map memory within a larger region that you have mprotect'ed, you can +// register the entire large region. +// - the implementation is not optimized for performance. This interface is +// intended to be used for a small number of relatively static regions. +void SANITIZER_CDECL __lsan_register_root_region(const void *p, size_t size); +void SANITIZER_CDECL __lsan_unregister_root_region(const void *p, size_t size); - // Check for leaks now. This function behaves identically to the default - // end-of-process leak check. In particular, it will terminate the process if - // leaks are found and the exitcode runtime flag is non-zero. - // Subsequent calls to this function will have no effect and end-of-process - // leak check will not run. Effectively, end-of-process leak check is moved to - // the time of first invocation of this function. - // By calling this function early during process shutdown, you can instruct - // LSan to ignore shutdown-only leaks which happen later on. - void __lsan_do_leak_check(void); +// Check for leaks now. This function behaves identically to the default +// end-of-process leak check. In particular, it will terminate the process if +// leaks are found and the exitcode runtime flag is non-zero. +// Subsequent calls to this function will have no effect and end-of-process +// leak check will not run. Effectively, end-of-process leak check is moved to +// the time of first invocation of this function. +// By calling this function early during process shutdown, you can instruct +// LSan to ignore shutdown-only leaks which happen later on. +void SANITIZER_CDECL __lsan_do_leak_check(void); - // Check for leaks now. Returns zero if no leaks have been found or if leak - // detection is disabled, non-zero otherwise. - // This function may be called repeatedly, e.g. to periodically check a - // long-running process. It prints a leak report if appropriate, but does not - // terminate the process. It does not affect the behavior of - // __lsan_do_leak_check() or the end-of-process leak check, and is not - // affected by them. - int __lsan_do_recoverable_leak_check(void); +// Check for leaks now. Returns zero if no leaks have been found or if leak +// detection is disabled, non-zero otherwise. +// This function may be called repeatedly, e.g. to periodically check a +// long-running process. It prints a leak report if appropriate, but does not +// terminate the process. It does not affect the behavior of +// __lsan_do_leak_check() or the end-of-process leak check, and is not +// affected by them. +int SANITIZER_CDECL __lsan_do_recoverable_leak_check(void); - // The user may optionally provide this function to disallow leak checking - // for the program it is linked into (if the return value is non-zero). This - // function must be defined as returning a constant value; any behavior beyond - // that is unsupported. - // To avoid dead stripping, you may need to define this function with - // __attribute__((used)) - int __lsan_is_turned_off(void); +// The user may optionally provide this function to disallow leak checking +// for the program it is linked into (if the return value is non-zero). This +// function must be defined as returning a constant value; any behavior beyond +// that is unsupported. +// To avoid dead stripping, you may need to define this function with +// __attribute__((used)) +int SANITIZER_CDECL __lsan_is_turned_off(void); - // This function may be optionally provided by user and should return - // a string containing LSan runtime options. See lsan_flags.inc for details. - const char *__lsan_default_options(void); +// This function may be optionally provided by user and should return +// a string containing LSan runtime options. See lsan_flags.inc for details. +const char *SANITIZER_CDECL __lsan_default_options(void); - // This function may be optionally provided by the user and should return - // a string containing LSan suppressions. - const char *__lsan_default_suppressions(void); +// This function may be optionally provided by the user and should return +// a string containing LSan suppressions. +const char *SANITIZER_CDECL __lsan_default_suppressions(void); #ifdef __cplusplus -} // extern "C" +} // extern "C" namespace __lsan { class ScopedDisabler { - public: +public: ScopedDisabler() { __lsan_disable(); } ~ScopedDisabler() { __lsan_enable(); } }; -} // namespace __lsan +} // namespace __lsan #endif -#endif // SANITIZER_LSAN_INTERFACE_H +#endif // SANITIZER_LSAN_INTERFACE_H diff --git a/libsanitizer/include/sanitizer/memprof_interface.h b/libsanitizer/include/sanitizer/memprof_interface.h index 76031de4014c..fe0a2fc5ef02 100644 --- a/libsanitizer/include/sanitizer/memprof_interface.h +++ b/libsanitizer/include/sanitizer/memprof_interface.h @@ -24,25 +24,26 @@ extern "C" { /// /// \param addr Start of memory region. /// \param size Size of memory region. -void __memprof_record_access_range(void const volatile *addr, size_t size); +void SANITIZER_CDECL __memprof_record_access_range(void const volatile *addr, + size_t size); /// Records access to a memory address addr. /// /// This memory must be previously allocated by your program. /// /// \param addr Accessed memory address -void __memprof_record_access(void const volatile *addr); +void SANITIZER_CDECL __memprof_record_access(void const volatile *addr); /// User-provided callback on MemProf errors. /// /// You can provide a function that would be called immediately when MemProf /// detects an error. This is useful in cases when MemProf detects an error but /// your program crashes before the MemProf report is printed. -void __memprof_on_error(void); +void SANITIZER_CDECL __memprof_on_error(void); /// Prints accumulated statistics to stderr (useful for calling from the /// debugger). -void __memprof_print_accumulated_stats(void); +void SANITIZER_CDECL __memprof_print_accumulated_stats(void); /// User-provided default option settings. /// @@ -51,12 +52,12 @@ void __memprof_print_accumulated_stats(void); /// verbosity=1:print_stats=1). /// /// \returns Default options string. -const char *__memprof_default_options(void); +const char *SANITIZER_CDECL __memprof_default_options(void); /// Prints the memory profile to the current profile file. /// /// \returns 0 on success. -int __memprof_profile_dump(void); +int SANITIZER_CDECL __memprof_profile_dump(void); #ifdef __cplusplus } // extern "C" diff --git a/libsanitizer/include/sanitizer/msan_interface.h b/libsanitizer/include/sanitizer/msan_interface.h index 854b12cda36e..6fedc0312545 100644 --- a/libsanitizer/include/sanitizer/msan_interface.h +++ b/libsanitizer/include/sanitizer/msan_interface.h @@ -18,109 +18,118 @@ #ifdef __cplusplus extern "C" { #endif - /* Set raw origin for the memory range. */ - void __msan_set_origin(const volatile void *a, size_t size, uint32_t origin); +/* Set raw origin for the memory range. */ +void SANITIZER_CDECL __msan_set_origin(const volatile void *a, size_t size, + uint32_t origin); - /* Get raw origin for an address. */ - uint32_t __msan_get_origin(const volatile void *a); +/* Get raw origin for an address. */ +uint32_t SANITIZER_CDECL __msan_get_origin(const volatile void *a); - /* Test that this_id is a descendant of prev_id (or they are simply equal). - * "descendant" here means they are part of the same chain, created with - * __msan_chain_origin. */ - int __msan_origin_is_descendant_or_same(uint32_t this_id, uint32_t prev_id); +/* Test that this_id is a descendant of prev_id (or they are simply equal). + * "descendant" here means they are part of the same chain, created with + * __msan_chain_origin. */ +int SANITIZER_CDECL __msan_origin_is_descendant_or_same(uint32_t this_id, + uint32_t prev_id); - /* Returns non-zero if tracking origins. */ - int __msan_get_track_origins(void); +/* Returns non-zero if tracking origins. */ +int SANITIZER_CDECL __msan_get_track_origins(void); - /* Returns the origin id of the latest UMR in the calling thread. */ - uint32_t __msan_get_umr_origin(void); +/* Returns the origin id of the latest UMR in the calling thread. */ +uint32_t SANITIZER_CDECL __msan_get_umr_origin(void); - /* Make memory region fully initialized (without changing its contents). */ - void __msan_unpoison(const volatile void *a, size_t size); +/* Make memory region fully initialized (without changing its contents). */ +void SANITIZER_CDECL __msan_unpoison(const volatile void *a, size_t size); - /* Make a null-terminated string fully initialized (without changing its - contents). */ - void __msan_unpoison_string(const volatile char *a); +/* Make a null-terminated string fully initialized (without changing its + contents). */ +void SANITIZER_CDECL __msan_unpoison_string(const volatile char *a); - /* Make first n parameters of the next function call fully initialized. */ - void __msan_unpoison_param(size_t n); +/* Make first n parameters of the next function call fully initialized. */ +void SANITIZER_CDECL __msan_unpoison_param(size_t n); - /* Make memory region fully uninitialized (without changing its contents). - This is a legacy interface that does not update origin information. Use - __msan_allocated_memory() instead. */ - void __msan_poison(const volatile void *a, size_t size); +/* Make memory region fully uninitialized (without changing its contents). + This is a legacy interface that does not update origin information. Use + __msan_allocated_memory() instead. */ +void SANITIZER_CDECL __msan_poison(const volatile void *a, size_t size); - /* Make memory region partially uninitialized (without changing its contents). - */ - void __msan_partial_poison(const volatile void *data, void *shadow, - size_t size); +/* Make memory region partially uninitialized (without changing its contents). + */ +void SANITIZER_CDECL __msan_partial_poison(const volatile void *data, + void *shadow, size_t size); - /* Returns the offset of the first (at least partially) poisoned byte in the - memory range, or -1 if the whole range is good. */ - intptr_t __msan_test_shadow(const volatile void *x, size_t size); +/* Returns the offset of the first (at least partially) poisoned byte in the + memory range, or -1 if the whole range is good. */ +intptr_t SANITIZER_CDECL __msan_test_shadow(const volatile void *x, + size_t size); - /* Checks that memory range is fully initialized, and reports an error if it - * is not. */ - void __msan_check_mem_is_initialized(const volatile void *x, size_t size); +/* Checks that memory range is fully initialized, and reports an error if it + * is not. */ +void SANITIZER_CDECL __msan_check_mem_is_initialized(const volatile void *x, + size_t size); - /* For testing: - __msan_set_expect_umr(1); - ... some buggy code ... - __msan_set_expect_umr(0); - The last line will verify that a UMR happened. */ - void __msan_set_expect_umr(int expect_umr); +/* For testing: + __msan_set_expect_umr(1); + ... some buggy code ... + __msan_set_expect_umr(0); + The last line will verify that a UMR happened. */ +void SANITIZER_CDECL __msan_set_expect_umr(int expect_umr); - /* Change the value of keep_going flag. Non-zero value means don't terminate - program execution when an error is detected. This will not affect error in - modules that were compiled without the corresponding compiler flag. */ - void __msan_set_keep_going(int keep_going); +/* Change the value of keep_going flag. Non-zero value means don't terminate + program execution when an error is detected. This will not affect error in + modules that were compiled without the corresponding compiler flag. */ +void SANITIZER_CDECL __msan_set_keep_going(int keep_going); - /* Print shadow and origin for the memory range to stderr in a human-readable - format. */ - void __msan_print_shadow(const volatile void *x, size_t size); +/* Print shadow and origin for the memory range to stderr in a human-readable + format. */ +void SANITIZER_CDECL __msan_print_shadow(const volatile void *x, size_t size); - /* Print shadow for the memory range to stderr in a minimalistic - human-readable format. */ - void __msan_dump_shadow(const volatile void *x, size_t size); +/* Print shadow for the memory range to stderr in a minimalistic + human-readable format. */ +void SANITIZER_CDECL __msan_dump_shadow(const volatile void *x, size_t size); - /* Returns true if running under a dynamic tool (DynamoRio-based). */ - int __msan_has_dynamic_component(void); +/* Returns true if running under a dynamic tool (DynamoRio-based). */ +int SANITIZER_CDECL __msan_has_dynamic_component(void); - /* Tell MSan about newly allocated memory (ex.: custom allocator). - Memory will be marked uninitialized, with origin at the call site. */ - void __msan_allocated_memory(const volatile void* data, size_t size); +/* Tell MSan about newly allocated memory (ex.: custom allocator). + Memory will be marked uninitialized, with origin at the call site. */ +void SANITIZER_CDECL __msan_allocated_memory(const volatile void *data, + size_t size); - /* Tell MSan about newly destroyed memory. Mark memory as uninitialized. */ - void __sanitizer_dtor_callback(const volatile void* data, size_t size); - void __sanitizer_dtor_callback_fields(const volatile void *data, size_t size); - void __sanitizer_dtor_callback_vptr(const volatile void *data); +/* Tell MSan about newly destroyed memory. Mark memory as uninitialized. */ +void SANITIZER_CDECL __sanitizer_dtor_callback(const volatile void *data, + size_t size); +void SANITIZER_CDECL __sanitizer_dtor_callback_fields(const volatile void *data, + size_t size); +void SANITIZER_CDECL __sanitizer_dtor_callback_vptr(const volatile void *data); - /* This function may be optionally provided by user and should return - a string containing Msan runtime options. See msan_flags.h for details. */ - const char* __msan_default_options(void); +/* This function may be optionally provided by user and should return + a string containing Msan runtime options. See msan_flags.h for details. */ +const char *SANITIZER_CDECL __msan_default_options(void); - /* Deprecated. Call __sanitizer_set_death_callback instead. */ - void __msan_set_death_callback(void (*callback)(void)); +/* Deprecated. Call __sanitizer_set_death_callback instead. */ +void SANITIZER_CDECL +__msan_set_death_callback(void(SANITIZER_CDECL *callback)(void)); - /* Update shadow for the application copy of size bytes from src to dst. - Src and dst are application addresses. This function does not copy the - actual application memory, it only updates shadow and origin for such - copy. Source and destination regions can overlap. */ - void __msan_copy_shadow(const volatile void *dst, const volatile void *src, - size_t size); +/* Update shadow for the application copy of size bytes from src to dst. + Src and dst are application addresses. This function does not copy the + actual application memory, it only updates shadow and origin for such + copy. Source and destination regions can overlap. */ +void SANITIZER_CDECL __msan_copy_shadow(const volatile void *dst, + const volatile void *src, size_t size); - /* Disables uninitialized memory checks in interceptors. */ - void __msan_scoped_disable_interceptor_checks(void); +/* Disables uninitialized memory checks in interceptors. */ +void SANITIZER_CDECL __msan_scoped_disable_interceptor_checks(void); - /* Re-enables uninitialized memory checks in interceptors after a previous - call to __msan_scoped_disable_interceptor_checks. */ - void __msan_scoped_enable_interceptor_checks(void); +/* Re-enables uninitialized memory checks in interceptors after a previous + call to __msan_scoped_disable_interceptor_checks. */ +void SANITIZER_CDECL __msan_scoped_enable_interceptor_checks(void); - void __msan_start_switch_fiber(const void *bottom, size_t size); - void __msan_finish_switch_fiber(const void **bottom_old, size_t *size_old); +void SANITIZER_CDECL __msan_start_switch_fiber(const void *bottom, size_t size); +void SANITIZER_CDECL __msan_finish_switch_fiber(const void **bottom_old, + size_t *size_old); #ifdef __cplusplus -} // extern "C" +} // extern "C" #endif #endif diff --git a/libsanitizer/include/sanitizer/scudo_interface.h b/libsanitizer/include/sanitizer/scudo_interface.h index dd522c1efc21..37fd7bfeccf0 100644 --- a/libsanitizer/include/sanitizer/scudo_interface.h +++ b/libsanitizer/include/sanitizer/scudo_interface.h @@ -17,22 +17,22 @@ #ifdef __cplusplus extern "C" { #endif - // This function may be optionally provided by a user and should return - // a string containing Scudo runtime options. See scudo_flags.h for details. - const char* __scudo_default_options(void); +// This function may be optionally provided by a user and should return +// a string containing Scudo runtime options. See scudo_flags.h for details. +const char *SANITIZER_CDECL __scudo_default_options(void); - // This function allows to set the RSS limit at runtime. This can be either - // the hard limit (HardLimit=1) or the soft limit (HardLimit=0). The limit - // can be removed by setting LimitMb to 0. This function's parameters should - // be fully trusted to avoid security mishaps. - void __scudo_set_rss_limit(size_t LimitMb, int HardLimit); +// This function allows to set the RSS limit at runtime. This can be either +// the hard limit (HardLimit=1) or the soft limit (HardLimit=0). The limit +// can be removed by setting LimitMb to 0. This function's parameters should +// be fully trusted to avoid security mishaps. +void SANITIZER_CDECL __scudo_set_rss_limit(size_t LimitMb, int HardLimit); - // This function outputs various allocator statistics for both the Primary - // and Secondary allocators, including memory usage, number of allocations - // and deallocations. - void __scudo_print_stats(void); +// This function outputs various allocator statistics for both the Primary +// and Secondary allocators, including memory usage, number of allocations +// and deallocations. +void SANITIZER_CDECL __scudo_print_stats(void); #ifdef __cplusplus -} // extern "C" +} // extern "C" #endif -#endif // SANITIZER_SCUDO_INTERFACE_H_ +#endif // SANITIZER_SCUDO_INTERFACE_H_ diff --git a/libsanitizer/include/sanitizer/tsan_interface.h b/libsanitizer/include/sanitizer/tsan_interface.h index 58f2513734ec..e11a4175cd8e 100644 --- a/libsanitizer/include/sanitizer/tsan_interface.h +++ b/libsanitizer/include/sanitizer/tsan_interface.h @@ -21,8 +21,8 @@ extern "C" { // __tsan_release establishes a happens-before relation with a preceding // __tsan_acquire on the same address. -void __tsan_acquire(void *addr); -void __tsan_release(void *addr); +void SANITIZER_CDECL __tsan_acquire(void *addr); +void SANITIZER_CDECL __tsan_release(void *addr); // Annotations for custom mutexes. // The annotations allow to get better reports (with sets of locked mutexes), @@ -52,16 +52,16 @@ static const unsigned __tsan_mutex_not_static = 1 << 8; // Mutex operation flags: // Denotes read lock operation. -static const unsigned __tsan_mutex_read_lock = 1 << 3; +static const unsigned __tsan_mutex_read_lock = 1 << 3; // Denotes try lock operation. -static const unsigned __tsan_mutex_try_lock = 1 << 4; +static const unsigned __tsan_mutex_try_lock = 1 << 4; // Denotes that a try lock operation has failed to acquire the mutex. -static const unsigned __tsan_mutex_try_lock_failed = 1 << 5; +static const unsigned __tsan_mutex_try_lock_failed = 1 << 5; // Denotes that the lock operation acquires multiple recursion levels. // Number of levels is passed in recursion parameter. // This is useful for annotation of e.g. Java builtin monitors, // for which wait operation releases all recursive acquisitions of the mutex. -static const unsigned __tsan_mutex_recursive_lock = 1 << 6; +static const unsigned __tsan_mutex_recursive_lock = 1 << 6; // Denotes that the unlock operation releases all recursion levels. // Number of released levels is returned and later must be passed to // the corresponding __tsan_mutex_post_lock annotation. @@ -75,20 +75,20 @@ static const unsigned __tsan_mutex_try_read_lock_failed = // Annotate creation of a mutex. // Supported flags: mutex creation flags. -void __tsan_mutex_create(void *addr, unsigned flags); +void SANITIZER_CDECL __tsan_mutex_create(void *addr, unsigned flags); // Annotate destruction of a mutex. // Supported flags: // - __tsan_mutex_linker_init // - __tsan_mutex_not_static -void __tsan_mutex_destroy(void *addr, unsigned flags); +void SANITIZER_CDECL __tsan_mutex_destroy(void *addr, unsigned flags); // Annotate start of lock operation. // Supported flags: // - __tsan_mutex_read_lock // - __tsan_mutex_try_lock // - all mutex creation flags -void __tsan_mutex_pre_lock(void *addr, unsigned flags); +void SANITIZER_CDECL __tsan_mutex_pre_lock(void *addr, unsigned flags); // Annotate end of lock operation. // Supported flags: @@ -97,23 +97,24 @@ void __tsan_mutex_pre_lock(void *addr, unsigned flags); // - __tsan_mutex_try_lock_failed // - __tsan_mutex_recursive_lock // - all mutex creation flags -void __tsan_mutex_post_lock(void *addr, unsigned flags, int recursion); +void SANITIZER_CDECL __tsan_mutex_post_lock(void *addr, unsigned flags, + int recursion); // Annotate start of unlock operation. // Supported flags: // - __tsan_mutex_read_lock // - __tsan_mutex_recursive_unlock -int __tsan_mutex_pre_unlock(void *addr, unsigned flags); +int SANITIZER_CDECL __tsan_mutex_pre_unlock(void *addr, unsigned flags); // Annotate end of unlock operation. // Supported flags: // - __tsan_mutex_read_lock (must match __tsan_mutex_pre_unlock) -void __tsan_mutex_post_unlock(void *addr, unsigned flags); +void SANITIZER_CDECL __tsan_mutex_post_unlock(void *addr, unsigned flags); // Annotate start/end of notify/signal/broadcast operation. // Supported flags: none. -void __tsan_mutex_pre_signal(void *addr, unsigned flags); -void __tsan_mutex_post_signal(void *addr, unsigned flags); +void SANITIZER_CDECL __tsan_mutex_pre_signal(void *addr, unsigned flags); +void SANITIZER_CDECL __tsan_mutex_post_signal(void *addr, unsigned flags); // Annotate start/end of a region of code where lock/unlock/signal operation // diverts to do something else unrelated to the mutex. This can be used to @@ -123,8 +124,12 @@ void __tsan_mutex_post_signal(void *addr, unsigned flags); // __tsan_mutex_pre/post_lock, __tsan_mutex_pre/post_unlock, // __tsan_mutex_pre/post_signal regions. // Supported flags: none. -void __tsan_mutex_pre_divert(void *addr, unsigned flags); -void __tsan_mutex_post_divert(void *addr, unsigned flags); +void SANITIZER_CDECL __tsan_mutex_pre_divert(void *addr, unsigned flags); +void SANITIZER_CDECL __tsan_mutex_post_divert(void *addr, unsigned flags); + +// Check that the current thread does not hold any mutexes, +// report a bug report otherwise. +void SANITIZER_CDECL __tsan_check_no_mutexes_held(); // External race detection API. // Can be used by non-instrumented libraries to detect when their objects are @@ -136,11 +141,14 @@ void __tsan_mutex_post_divert(void *addr, unsigned flags); // - __tsan_external_register_tag registers a 'tag' with the specified name, // which is later used in read/write annotations to denote the object type // - __tsan_external_assign_tag can optionally mark a heap object with a tag -void *__tsan_external_register_tag(const char *object_type); -void __tsan_external_register_header(void *tag, const char *header); -void __tsan_external_assign_tag(void *addr, void *tag); -void __tsan_external_read(void *addr, void *caller_pc, void *tag); -void __tsan_external_write(void *addr, void *caller_pc, void *tag); +void *SANITIZER_CDECL __tsan_external_register_tag(const char *object_type); +void SANITIZER_CDECL __tsan_external_register_header(void *tag, + const char *header); +void SANITIZER_CDECL __tsan_external_assign_tag(void *addr, void *tag); +void SANITIZER_CDECL __tsan_external_read(void *addr, void *caller_pc, + void *tag); +void SANITIZER_CDECL __tsan_external_write(void *addr, void *caller_pc, + void *tag); // Fiber switching API. // - TSAN context for fiber can be created by __tsan_create_fiber @@ -150,36 +158,159 @@ void __tsan_external_write(void *addr, void *caller_pc, void *tag); // - __tsan_switch_to_fiber should be called immediately before switch // to fiber, such as call of swapcontext. // - Fiber name can be set by __tsan_set_fiber_name. -void *__tsan_get_current_fiber(void); -void *__tsan_create_fiber(unsigned flags); -void __tsan_destroy_fiber(void *fiber); -void __tsan_switch_to_fiber(void *fiber, unsigned flags); -void __tsan_set_fiber_name(void *fiber, const char *name); +void *SANITIZER_CDECL __tsan_get_current_fiber(void); +void *SANITIZER_CDECL __tsan_create_fiber(unsigned flags); +void SANITIZER_CDECL __tsan_destroy_fiber(void *fiber); +void SANITIZER_CDECL __tsan_switch_to_fiber(void *fiber, unsigned flags); +void SANITIZER_CDECL __tsan_set_fiber_name(void *fiber, const char *name); // Flags for __tsan_switch_to_fiber: // Do not establish a happens-before relation between fibers static const unsigned __tsan_switch_to_fiber_no_sync = 1 << 0; // User-provided callback invoked on TSan initialization. -void __tsan_on_initialize(); +void SANITIZER_CDECL __tsan_on_initialize(); // User-provided callback invoked on TSan shutdown. // `failed` - Nonzero if TSan did detect issues, zero otherwise. // Return `0` if TSan should exit as if no issues were detected. Return nonzero // if TSan should exit as if issues were detected. -int __tsan_on_finalize(int failed); +int SANITIZER_CDECL __tsan_on_finalize(int failed); // Release TSan internal memory in a best-effort manner. -void __tsan_flush_memory(); +void SANITIZER_CDECL __tsan_flush_memory(); // User-provided default TSAN options. -const char* __tsan_default_options(void); +const char *SANITIZER_CDECL __tsan_default_options(void); // User-provided default TSAN suppressions. -const char* __tsan_default_suppressions(void); +const char *SANITIZER_CDECL __tsan_default_suppressions(void); + +/// Returns a report's description. +/// +/// Returns a report's description (issue type), number of duplicate issues +/// found, counts of array data (stack traces, memory operations, locations, +/// mutexes, threads, unique thread IDs) and a stack trace of a sleep() +/// call (if one was involved in the issue). +/// +/// \param report Opaque pointer to the current report. +/// \param[out] description Report type description. +/// \param[out] count Count of duplicate issues. +/// \param[out] stack_count Count of stack traces. +/// \param[out] mop_count Count of memory operations. +/// \param[out] loc_count Count of locations. +/// \param[out] mutex_count Count of mutexes. +/// \param[out] thread_count Count of threads. +/// \param[out] unique_tid_count Count of unique thread IDs. +/// \param sleep_trace A buffer to store the stack trace of a sleep() +/// call. +/// \param trace_size Size in bytes of the trace buffer. +/// \returns Returns 1 if successful, 0 if not. +int SANITIZER_CDECL __tsan_get_report_data( + void *report, const char **description, int *count, int *stack_count, + int *mop_count, int *loc_count, int *mutex_count, int *thread_count, + int *unique_tid_count, void **sleep_trace, unsigned long trace_size); + +/// Returns information about stack traces included in the report. +/// +/// \param report Opaque pointer to the current report. +/// \param idx Index to the report's stacks. +/// \param trace A buffer to store the stack trace. +/// \param trace_size Size in bytes of the trace buffer. +/// \returns Returns 1 if successful, 0 if not. +int SANITIZER_CDECL __tsan_get_report_stack(void *report, unsigned long idx, + void **trace, + unsigned long trace_size); + +/// Returns information about memory operations included in the report. +/// +/// \param report Opaque pointer to the current report. +/// \param idx Index to the report's memory operations. +/// \param[out] tid Thread ID of the memory operation. +/// \param[out] addr Address of the memory operation. +/// \param[out] size Size of the memory operation. +/// \param[out] write Write flag of the memory operation. +/// \param[out] atomic Atomicity flag of the memory operation. +/// \param trace A buffer to store the stack trace. +/// \param trace_size Size in bytes of the trace buffer. +/// \returns Returns 1 if successful, 0 if not. +int SANITIZER_CDECL __tsan_get_report_mop(void *report, unsigned long idx, + int *tid, void **addr, int *size, + int *write, int *atomic, void **trace, + unsigned long trace_size); + +/// Returns information about locations included in the report. +/// +/// \param report Opaque pointer to the current report. +/// \param idx Index to the report's locations. +/// \param[out] type Type of the location. +/// \param[out] addr Address of the location. +/// \param[out] start Start of the location. +/// \param[out] size Size of the location. +/// \param[out] tid Thread ID of the location. +/// \param[out] fd File descriptor of the location. +/// \param[out] suppressable Suppressable flag. +/// \param trace A buffer to store the stack trace. +/// \param trace_size Size in bytes of the trace buffer. +/// \returns Returns 1 if successful, 0 if not. +int SANITIZER_CDECL __tsan_get_report_loc(void *report, unsigned long idx, + const char **type, void **addr, + void **start, unsigned long *size, + int *tid, int *fd, int *suppressable, + void **trace, + unsigned long trace_size); + +/// Returns information about mutexes included in the report. +/// +/// \param report Opaque pointer to the current report. +/// \param idx Index to the report's mutexes. +/// \param[out] mutex_id Id of the mutex. +/// \param[out] addr Address of the mutex. +/// \param[out] destroyed Destroyed mutex flag. +/// \param trace A buffer to store the stack trace. +/// \param trace_size Size in bytes of the trace buffer. +/// \returns Returns 1 if successful, 0 if not. +int SANITIZER_CDECL __tsan_get_report_mutex(void *report, unsigned long idx, + uint64_t *mutex_id, void **addr, + int *destroyed, void **trace, + unsigned long trace_size); + +/// Returns information about threads included in the report. +/// +/// \param report Opaque pointer to the current report. +/// \param idx Index to the report's threads. +/// \param[out] tid Thread ID of the thread. +/// \param[out] os_id Operating system's ID of the thread. +/// \param[out] running Running flag of the thread. +/// \param[out] name Name of the thread. +/// \param[out] parent_tid ID of the parent thread. +/// \param trace A buffer to store the stack trace. +/// \param trace_size Size in bytes of the trace buffer. +/// \returns Returns 1 if successful, 0 if not. +int SANITIZER_CDECL __tsan_get_report_thread(void *report, unsigned long idx, + int *tid, uint64_t *os_id, + int *running, const char **name, + int *parent_tid, void **trace, + unsigned long trace_size); + +/// Returns information about unique thread IDs included in the report. +/// +/// \param report Opaque pointer to the current report. +/// \param idx Index to the report's unique thread IDs. +/// \param[out] tid Unique thread ID of the report. +/// \returns Returns 1 if successful, 0 if not. +int SANITIZER_CDECL __tsan_get_report_unique_tid(void *report, + unsigned long idx, int *tid); + +/// Returns the current report. +/// +/// If TSan is currently reporting a detected issue on the current thread, +/// returns an opaque pointer to the current report. Otherwise returns NULL. +/// \returns An opaque pointer to the current report. Otherwise returns NULL. +void *SANITIZER_CDECL __tsan_get_current_report(); #ifdef __cplusplus -} // extern "C" +} // extern "C" #endif -#endif // SANITIZER_TSAN_INTERFACE_H +#endif // SANITIZER_TSAN_INTERFACE_H diff --git a/libsanitizer/include/sanitizer/tsan_interface_atomic.h b/libsanitizer/include/sanitizer/tsan_interface_atomic.h index 5e41e2256c30..de3a1c393609 100644 --- a/libsanitizer/include/sanitizer/tsan_interface_atomic.h +++ b/libsanitizer/include/sanitizer/tsan_interface_atomic.h @@ -13,6 +13,8 @@ #ifndef TSAN_INTERFACE_ATOMIC_H #define TSAN_INTERFACE_ATOMIC_H +#include + #ifdef __cplusplus extern "C" { #endif @@ -21,12 +23,12 @@ typedef char __tsan_atomic8; typedef short __tsan_atomic16; typedef int __tsan_atomic32; typedef long __tsan_atomic64; -#if defined(__SIZEOF_INT128__) \ - || (__clang_major__ * 100 + __clang_minor__ >= 302) +#if defined(__SIZEOF_INT128__) || \ + (__clang_major__ * 100 + __clang_minor__ >= 302) __extension__ typedef __int128 __tsan_atomic128; -# define __TSAN_HAS_INT128 1 +#define __TSAN_HAS_INT128 1 #else -# define __TSAN_HAS_INT128 0 +#define __TSAN_HAS_INT128 0 #endif // Part of ABI, do not change. @@ -40,182 +42,187 @@ typedef enum { __tsan_memory_order_seq_cst } __tsan_memory_order; -__tsan_atomic8 __tsan_atomic8_load(const volatile __tsan_atomic8 *a, - __tsan_memory_order mo); -__tsan_atomic16 __tsan_atomic16_load(const volatile __tsan_atomic16 *a, - __tsan_memory_order mo); -__tsan_atomic32 __tsan_atomic32_load(const volatile __tsan_atomic32 *a, - __tsan_memory_order mo); -__tsan_atomic64 __tsan_atomic64_load(const volatile __tsan_atomic64 *a, - __tsan_memory_order mo); +__tsan_atomic8 SANITIZER_CDECL +__tsan_atomic8_load(const volatile __tsan_atomic8 *a, __tsan_memory_order mo); +__tsan_atomic16 SANITIZER_CDECL +__tsan_atomic16_load(const volatile __tsan_atomic16 *a, __tsan_memory_order mo); +__tsan_atomic32 SANITIZER_CDECL +__tsan_atomic32_load(const volatile __tsan_atomic32 *a, __tsan_memory_order mo); +__tsan_atomic64 SANITIZER_CDECL +__tsan_atomic64_load(const volatile __tsan_atomic64 *a, __tsan_memory_order mo); #if __TSAN_HAS_INT128 -__tsan_atomic128 __tsan_atomic128_load(const volatile __tsan_atomic128 *a, - __tsan_memory_order mo); +__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_load( + const volatile __tsan_atomic128 *a, __tsan_memory_order mo); #endif -void __tsan_atomic8_store(volatile __tsan_atomic8 *a, __tsan_atomic8 v, - __tsan_memory_order mo); -void __tsan_atomic16_store(volatile __tsan_atomic16 *a, __tsan_atomic16 v, - __tsan_memory_order mo); -void __tsan_atomic32_store(volatile __tsan_atomic32 *a, __tsan_atomic32 v, - __tsan_memory_order mo); -void __tsan_atomic64_store(volatile __tsan_atomic64 *a, __tsan_atomic64 v, - __tsan_memory_order mo); +void SANITIZER_CDECL __tsan_atomic8_store(volatile __tsan_atomic8 *a, + __tsan_atomic8 v, + __tsan_memory_order mo); +void SANITIZER_CDECL __tsan_atomic16_store(volatile __tsan_atomic16 *a, + __tsan_atomic16 v, + __tsan_memory_order mo); +void SANITIZER_CDECL __tsan_atomic32_store(volatile __tsan_atomic32 *a, + __tsan_atomic32 v, + __tsan_memory_order mo); +void SANITIZER_CDECL __tsan_atomic64_store(volatile __tsan_atomic64 *a, + __tsan_atomic64 v, + __tsan_memory_order mo); #if __TSAN_HAS_INT128 -void __tsan_atomic128_store(volatile __tsan_atomic128 *a, __tsan_atomic128 v, - __tsan_memory_order mo); +void SANITIZER_CDECL __tsan_atomic128_store(volatile __tsan_atomic128 *a, + __tsan_atomic128 v, + __tsan_memory_order mo); #endif -__tsan_atomic8 __tsan_atomic8_exchange(volatile __tsan_atomic8 *a, - __tsan_atomic8 v, __tsan_memory_order mo); -__tsan_atomic16 __tsan_atomic16_exchange(volatile __tsan_atomic16 *a, - __tsan_atomic16 v, __tsan_memory_order mo); -__tsan_atomic32 __tsan_atomic32_exchange(volatile __tsan_atomic32 *a, - __tsan_atomic32 v, __tsan_memory_order mo); -__tsan_atomic64 __tsan_atomic64_exchange(volatile __tsan_atomic64 *a, - __tsan_atomic64 v, __tsan_memory_order mo); +__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_exchange( + volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo); +__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_exchange( + volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo); +__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_exchange( + volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo); +__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_exchange( + volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo); #if __TSAN_HAS_INT128 -__tsan_atomic128 __tsan_atomic128_exchange(volatile __tsan_atomic128 *a, - __tsan_atomic128 v, __tsan_memory_order mo); +__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_exchange( + volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo); #endif -__tsan_atomic8 __tsan_atomic8_fetch_add(volatile __tsan_atomic8 *a, - __tsan_atomic8 v, __tsan_memory_order mo); -__tsan_atomic16 __tsan_atomic16_fetch_add(volatile __tsan_atomic16 *a, - __tsan_atomic16 v, __tsan_memory_order mo); -__tsan_atomic32 __tsan_atomic32_fetch_add(volatile __tsan_atomic32 *a, - __tsan_atomic32 v, __tsan_memory_order mo); -__tsan_atomic64 __tsan_atomic64_fetch_add(volatile __tsan_atomic64 *a, - __tsan_atomic64 v, __tsan_memory_order mo); +__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_add( + volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo); +__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_add( + volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo); +__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_add( + volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo); +__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_add( + volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo); #if __TSAN_HAS_INT128 -__tsan_atomic128 __tsan_atomic128_fetch_add(volatile __tsan_atomic128 *a, - __tsan_atomic128 v, __tsan_memory_order mo); +__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_add( + volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo); #endif -__tsan_atomic8 __tsan_atomic8_fetch_sub(volatile __tsan_atomic8 *a, - __tsan_atomic8 v, __tsan_memory_order mo); -__tsan_atomic16 __tsan_atomic16_fetch_sub(volatile __tsan_atomic16 *a, - __tsan_atomic16 v, __tsan_memory_order mo); -__tsan_atomic32 __tsan_atomic32_fetch_sub(volatile __tsan_atomic32 *a, - __tsan_atomic32 v, __tsan_memory_order mo); -__tsan_atomic64 __tsan_atomic64_fetch_sub(volatile __tsan_atomic64 *a, - __tsan_atomic64 v, __tsan_memory_order mo); +__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_sub( + volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo); +__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_sub( + volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo); +__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_sub( + volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo); +__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_sub( + volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo); #if __TSAN_HAS_INT128 -__tsan_atomic128 __tsan_atomic128_fetch_sub(volatile __tsan_atomic128 *a, - __tsan_atomic128 v, __tsan_memory_order mo); +__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_sub( + volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo); #endif -__tsan_atomic8 __tsan_atomic8_fetch_and(volatile __tsan_atomic8 *a, - __tsan_atomic8 v, __tsan_memory_order mo); -__tsan_atomic16 __tsan_atomic16_fetch_and(volatile __tsan_atomic16 *a, - __tsan_atomic16 v, __tsan_memory_order mo); -__tsan_atomic32 __tsan_atomic32_fetch_and(volatile __tsan_atomic32 *a, - __tsan_atomic32 v, __tsan_memory_order mo); -__tsan_atomic64 __tsan_atomic64_fetch_and(volatile __tsan_atomic64 *a, - __tsan_atomic64 v, __tsan_memory_order mo); +__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_and( + volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo); +__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_and( + volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo); +__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_and( + volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo); +__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_and( + volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo); #if __TSAN_HAS_INT128 -__tsan_atomic128 __tsan_atomic128_fetch_and(volatile __tsan_atomic128 *a, - __tsan_atomic128 v, __tsan_memory_order mo); +__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_and( + volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo); #endif -__tsan_atomic8 __tsan_atomic8_fetch_or(volatile __tsan_atomic8 *a, - __tsan_atomic8 v, __tsan_memory_order mo); -__tsan_atomic16 __tsan_atomic16_fetch_or(volatile __tsan_atomic16 *a, - __tsan_atomic16 v, __tsan_memory_order mo); -__tsan_atomic32 __tsan_atomic32_fetch_or(volatile __tsan_atomic32 *a, - __tsan_atomic32 v, __tsan_memory_order mo); -__tsan_atomic64 __tsan_atomic64_fetch_or(volatile __tsan_atomic64 *a, - __tsan_atomic64 v, __tsan_memory_order mo); +__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_or( + volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo); +__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_or( + volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo); +__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_or( + volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo); +__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_or( + volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo); #if __TSAN_HAS_INT128 -__tsan_atomic128 __tsan_atomic128_fetch_or(volatile __tsan_atomic128 *a, - __tsan_atomic128 v, __tsan_memory_order mo); +__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_or( + volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo); #endif -__tsan_atomic8 __tsan_atomic8_fetch_xor(volatile __tsan_atomic8 *a, - __tsan_atomic8 v, __tsan_memory_order mo); -__tsan_atomic16 __tsan_atomic16_fetch_xor(volatile __tsan_atomic16 *a, - __tsan_atomic16 v, __tsan_memory_order mo); -__tsan_atomic32 __tsan_atomic32_fetch_xor(volatile __tsan_atomic32 *a, - __tsan_atomic32 v, __tsan_memory_order mo); -__tsan_atomic64 __tsan_atomic64_fetch_xor(volatile __tsan_atomic64 *a, - __tsan_atomic64 v, __tsan_memory_order mo); +__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_xor( + volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo); +__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_xor( + volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo); +__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_xor( + volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo); +__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_xor( + volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo); #if __TSAN_HAS_INT128 -__tsan_atomic128 __tsan_atomic128_fetch_xor(volatile __tsan_atomic128 *a, - __tsan_atomic128 v, __tsan_memory_order mo); +__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_xor( + volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo); #endif -__tsan_atomic8 __tsan_atomic8_fetch_nand(volatile __tsan_atomic8 *a, - __tsan_atomic8 v, __tsan_memory_order mo); -__tsan_atomic16 __tsan_atomic16_fetch_nand(volatile __tsan_atomic16 *a, - __tsan_atomic16 v, __tsan_memory_order mo); -__tsan_atomic32 __tsan_atomic32_fetch_nand(volatile __tsan_atomic32 *a, - __tsan_atomic32 v, __tsan_memory_order mo); -__tsan_atomic64 __tsan_atomic64_fetch_nand(volatile __tsan_atomic64 *a, - __tsan_atomic64 v, __tsan_memory_order mo); +__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_nand( + volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo); +__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_nand( + volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo); +__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_nand( + volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo); +__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_nand( + volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo); #if __TSAN_HAS_INT128 -__tsan_atomic128 __tsan_atomic128_fetch_nand(volatile __tsan_atomic128 *a, - __tsan_atomic128 v, __tsan_memory_order mo); +__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_nand( + volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo); #endif -int __tsan_atomic8_compare_exchange_weak(volatile __tsan_atomic8 *a, - __tsan_atomic8 *c, __tsan_atomic8 v, __tsan_memory_order mo, - __tsan_memory_order fail_mo); -int __tsan_atomic16_compare_exchange_weak(volatile __tsan_atomic16 *a, - __tsan_atomic16 *c, __tsan_atomic16 v, __tsan_memory_order mo, - __tsan_memory_order fail_mo); -int __tsan_atomic32_compare_exchange_weak(volatile __tsan_atomic32 *a, - __tsan_atomic32 *c, __tsan_atomic32 v, __tsan_memory_order mo, - __tsan_memory_order fail_mo); -int __tsan_atomic64_compare_exchange_weak(volatile __tsan_atomic64 *a, - __tsan_atomic64 *c, __tsan_atomic64 v, __tsan_memory_order mo, - __tsan_memory_order fail_mo); +int SANITIZER_CDECL __tsan_atomic8_compare_exchange_weak( + volatile __tsan_atomic8 *a, __tsan_atomic8 *c, __tsan_atomic8 v, + __tsan_memory_order mo, __tsan_memory_order fail_mo); +int SANITIZER_CDECL __tsan_atomic16_compare_exchange_weak( + volatile __tsan_atomic16 *a, __tsan_atomic16 *c, __tsan_atomic16 v, + __tsan_memory_order mo, __tsan_memory_order fail_mo); +int SANITIZER_CDECL __tsan_atomic32_compare_exchange_weak( + volatile __tsan_atomic32 *a, __tsan_atomic32 *c, __tsan_atomic32 v, + __tsan_memory_order mo, __tsan_memory_order fail_mo); +int SANITIZER_CDECL __tsan_atomic64_compare_exchange_weak( + volatile __tsan_atomic64 *a, __tsan_atomic64 *c, __tsan_atomic64 v, + __tsan_memory_order mo, __tsan_memory_order fail_mo); #if __TSAN_HAS_INT128 -int __tsan_atomic128_compare_exchange_weak(volatile __tsan_atomic128 *a, - __tsan_atomic128 *c, __tsan_atomic128 v, __tsan_memory_order mo, - __tsan_memory_order fail_mo); +int SANITIZER_CDECL __tsan_atomic128_compare_exchange_weak( + volatile __tsan_atomic128 *a, __tsan_atomic128 *c, __tsan_atomic128 v, + __tsan_memory_order mo, __tsan_memory_order fail_mo); #endif -int __tsan_atomic8_compare_exchange_strong(volatile __tsan_atomic8 *a, - __tsan_atomic8 *c, __tsan_atomic8 v, __tsan_memory_order mo, - __tsan_memory_order fail_mo); -int __tsan_atomic16_compare_exchange_strong(volatile __tsan_atomic16 *a, - __tsan_atomic16 *c, __tsan_atomic16 v, __tsan_memory_order mo, - __tsan_memory_order fail_mo); -int __tsan_atomic32_compare_exchange_strong(volatile __tsan_atomic32 *a, - __tsan_atomic32 *c, __tsan_atomic32 v, __tsan_memory_order mo, - __tsan_memory_order fail_mo); -int __tsan_atomic64_compare_exchange_strong(volatile __tsan_atomic64 *a, - __tsan_atomic64 *c, __tsan_atomic64 v, __tsan_memory_order mo, - __tsan_memory_order fail_mo); +int SANITIZER_CDECL __tsan_atomic8_compare_exchange_strong( + volatile __tsan_atomic8 *a, __tsan_atomic8 *c, __tsan_atomic8 v, + __tsan_memory_order mo, __tsan_memory_order fail_mo); +int SANITIZER_CDECL __tsan_atomic16_compare_exchange_strong( + volatile __tsan_atomic16 *a, __tsan_atomic16 *c, __tsan_atomic16 v, + __tsan_memory_order mo, __tsan_memory_order fail_mo); +int SANITIZER_CDECL __tsan_atomic32_compare_exchange_strong( + volatile __tsan_atomic32 *a, __tsan_atomic32 *c, __tsan_atomic32 v, + __tsan_memory_order mo, __tsan_memory_order fail_mo); +int SANITIZER_CDECL __tsan_atomic64_compare_exchange_strong( + volatile __tsan_atomic64 *a, __tsan_atomic64 *c, __tsan_atomic64 v, + __tsan_memory_order mo, __tsan_memory_order fail_mo); #if __TSAN_HAS_INT128 -int __tsan_atomic128_compare_exchange_strong(volatile __tsan_atomic128 *a, - __tsan_atomic128 *c, __tsan_atomic128 v, __tsan_memory_order mo, - __tsan_memory_order fail_mo); +int SANITIZER_CDECL __tsan_atomic128_compare_exchange_strong( + volatile __tsan_atomic128 *a, __tsan_atomic128 *c, __tsan_atomic128 v, + __tsan_memory_order mo, __tsan_memory_order fail_mo); #endif -__tsan_atomic8 __tsan_atomic8_compare_exchange_val( +__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_compare_exchange_val( volatile __tsan_atomic8 *a, __tsan_atomic8 c, __tsan_atomic8 v, __tsan_memory_order mo, __tsan_memory_order fail_mo); -__tsan_atomic16 __tsan_atomic16_compare_exchange_val( +__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_compare_exchange_val( volatile __tsan_atomic16 *a, __tsan_atomic16 c, __tsan_atomic16 v, __tsan_memory_order mo, __tsan_memory_order fail_mo); -__tsan_atomic32 __tsan_atomic32_compare_exchange_val( +__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_compare_exchange_val( volatile __tsan_atomic32 *a, __tsan_atomic32 c, __tsan_atomic32 v, __tsan_memory_order mo, __tsan_memory_order fail_mo); -__tsan_atomic64 __tsan_atomic64_compare_exchange_val( +__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_compare_exchange_val( volatile __tsan_atomic64 *a, __tsan_atomic64 c, __tsan_atomic64 v, __tsan_memory_order mo, __tsan_memory_order fail_mo); #if __TSAN_HAS_INT128 -__tsan_atomic128 __tsan_atomic128_compare_exchange_val( +__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_compare_exchange_val( volatile __tsan_atomic128 *a, __tsan_atomic128 c, __tsan_atomic128 v, __tsan_memory_order mo, __tsan_memory_order fail_mo); #endif -void __tsan_atomic_thread_fence(__tsan_memory_order mo); -void __tsan_atomic_signal_fence(__tsan_memory_order mo); +void SANITIZER_CDECL __tsan_atomic_thread_fence(__tsan_memory_order mo); +void SANITIZER_CDECL __tsan_atomic_signal_fence(__tsan_memory_order mo); #ifdef __cplusplus -} // extern "C" +} // extern "C" #endif -#endif // TSAN_INTERFACE_ATOMIC_H +#endif // TSAN_INTERFACE_ATOMIC_H diff --git a/libsanitizer/include/sanitizer/ubsan_interface.h b/libsanitizer/include/sanitizer/ubsan_interface.h index 59fc6c3c184c..435eb1ae332c 100644 --- a/libsanitizer/include/sanitizer/ubsan_interface.h +++ b/libsanitizer/include/sanitizer/ubsan_interface.h @@ -23,10 +23,10 @@ extern "C" { /// verbosity=1:halt_on_error=0). /// /// \returns Default options string. -const char* __ubsan_default_options(void); +const char *SANITIZER_CDECL __ubsan_default_options(void); #ifdef __cplusplus -} // extern "C" +} // extern "C" #endif -#endif // SANITIZER_UBSAN_INTERFACE_H +#endif // SANITIZER_UBSAN_INTERFACE_H diff --git a/libsanitizer/interception/interception.h b/libsanitizer/interception/interception.h index d97974ee9074..069f73d276f3 100644 --- a/libsanitizer/interception/interception.h +++ b/libsanitizer/interception/interception.h @@ -14,9 +14,10 @@ #ifndef INTERCEPTION_H #define INTERCEPTION_H +#include "sanitizer_common/sanitizer_asm.h" #include "sanitizer_common/sanitizer_internal_defs.h" -#if !SANITIZER_LINUX && !SANITIZER_FREEBSD && !SANITIZER_APPLE && \ +#if !SANITIZER_LINUX && !SANITIZER_FREEBSD && !SANITIZER_APPLE && \ !SANITIZER_NETBSD && !SANITIZER_WINDOWS && !SANITIZER_FUCHSIA && \ !SANITIZER_SOLARIS # error "Interception doesn't work on this operating system." @@ -67,24 +68,50 @@ typedef __sanitizer::OFF64_T OFF64_T; // for more details). To intercept such functions you need to use the // INTERCEPTOR_WITH_SUFFIX(...) macro. -// How it works: -// To replace system functions on Linux we just need to declare functions -// with same names in our library and then obtain the real function pointers -// using dlsym(). -// There is one complication. A user may also intercept some of the functions -// we intercept. To resolve this we declare our interceptors with __interceptor_ -// prefix, and then make actual interceptors weak aliases to __interceptor_ -// functions. +// How it works on Linux +// --------------------- +// +// To replace system functions on Linux we just need to declare functions with +// the same names in our library and then obtain the real function pointers +// using dlsym(). +// +// There is one complication: a user may also intercept some of the functions we +// intercept. To allow for up to 3 interceptors (including ours) of a given +// function "func", the interceptor implementation is in ___interceptor_func, +// which is aliased by a weak function __interceptor_func, which in turn is +// aliased (via a trampoline) by weak wrapper function "func". +// +// Most user interceptors should define a foreign interceptor as follows: +// +// - provide a non-weak function "func" that performs interception; +// - if __interceptor_func exists, call it to perform the real functionality; +// - if it does not exist, figure out the real function and call it instead. +// +// In rare cases, a foreign interceptor (of another dynamic analysis runtime) +// may be defined as follows (on supported architectures): +// +// - provide a non-weak function __interceptor_func that performs interception; +// - if ___interceptor_func exists, call it to perform the real functionality; +// - if it does not exist, figure out the real function and call it instead; +// - provide a weak function "func" that is an alias to __interceptor_func. +// +// With this protocol, sanitizer interceptors, foreign user interceptors, and +// foreign interceptors of other dynamic analysis runtimes, or any combination +// thereof, may co-exist simultaneously. +// +// How it works on Mac OS +// ---------------------- +// +// This is not so on Mac OS, where the two-level namespace makes our replacement +// functions invisible to other libraries. This may be overcomed using the +// DYLD_FORCE_FLAT_NAMESPACE, but some errors loading the shared libraries in +// Chromium were noticed when doing so. // -// This is not so on Mac OS, where the two-level namespace makes -// our replacement functions invisible to other libraries. This may be overcomed -// using the DYLD_FORCE_FLAT_NAMESPACE, but some errors loading the shared -// libraries in Chromium were noticed when doing so. // Instead we create a dylib containing a __DATA,__interpose section that // associates library functions with their wrappers. When this dylib is -// preloaded before an executable using DYLD_INSERT_LIBRARIES, it routes all -// the calls to interposed functions done through stubs to the wrapper -// functions. +// preloaded before an executable using DYLD_INSERT_LIBRARIES, it routes all the +// calls to interposed functions done through stubs to the wrapper functions. +// // As it's decided at compile time which functions are to be intercepted on Mac, // INTERCEPT_FUNCTION() is effectively a no-op on this system. @@ -100,53 +127,102 @@ struct interpose_substitution { // For a function foo() create a global pair of pointers { wrap_foo, foo } in // the __DATA,__interpose section. // As a result all the calls to foo() will be routed to wrap_foo() at runtime. -#define INTERPOSER(func_name) __attribute__((used)) \ +#define INTERPOSER(func_name) __attribute__((used)) \ const interpose_substitution substitution_##func_name[] \ __attribute__((section("__DATA, __interpose"))) = { \ - { reinterpret_cast(WRAP(func_name)), \ - reinterpret_cast(func_name) } \ + { reinterpret_cast(WRAP(func_name)), \ + reinterpret_cast(func_name) } \ } // For a function foo() and a wrapper function bar() create a global pair // of pointers { bar, foo } in the __DATA,__interpose section. // As a result all the calls to foo() will be routed to bar() at runtime. #define INTERPOSER_2(func_name, wrapper_name) __attribute__((used)) \ -const interpose_substitution substitution_##func_name[] \ - __attribute__((section("__DATA, __interpose"))) = { \ - { reinterpret_cast(wrapper_name), \ - reinterpret_cast(func_name) } \ +const interpose_substitution substitution_##func_name[] \ + __attribute__((section("__DATA, __interpose"))) = { \ + { reinterpret_cast(wrapper_name), \ + reinterpret_cast(func_name) } \ } # define WRAP(x) wrap_##x -# define WRAPPER_NAME(x) "wrap_"#x +# define TRAMPOLINE(x) WRAP(x) # define INTERCEPTOR_ATTRIBUTE # define DECLARE_WRAPPER(ret_type, func, ...) #elif SANITIZER_WINDOWS # define WRAP(x) __asan_wrap_##x -# define WRAPPER_NAME(x) "__asan_wrap_"#x +# define TRAMPOLINE(x) WRAP(x) # define INTERCEPTOR_ATTRIBUTE __declspec(dllexport) -# define DECLARE_WRAPPER(ret_type, func, ...) \ +# define DECLARE_WRAPPER(ret_type, func, ...) \ extern "C" ret_type func(__VA_ARGS__); -# define DECLARE_WRAPPER_WINAPI(ret_type, func, ...) \ +# define DECLARE_WRAPPER_WINAPI(ret_type, func, ...) \ extern "C" __declspec(dllimport) ret_type __stdcall func(__VA_ARGS__); -#elif SANITIZER_FREEBSD || SANITIZER_NETBSD -# define WRAP(x) __interceptor_ ## x -# define WRAPPER_NAME(x) "__interceptor_" #x +#elif !SANITIZER_FUCHSIA // LINUX, FREEBSD, NETBSD, SOLARIS # define INTERCEPTOR_ATTRIBUTE __attribute__((visibility("default"))) +# if ASM_INTERCEPTOR_TRAMPOLINE_SUPPORT +// Weak aliases of weak aliases do not work, therefore we need to set up a +// trampoline function. The function "func" is a weak alias to the trampoline +// (so that we may check if "func" was overridden), which calls the weak +// function __interceptor_func, which in turn aliases the actual interceptor +// implementation ___interceptor_func: +// +// [wrapper "func": weak] --(alias)--> [TRAMPOLINE(func)] +// | +// +--------(tail call)-------+ +// | +// v +// [__interceptor_func: weak] --(alias)--> [WRAP(func)] +// +// We use inline assembly to define most of this, because not all compilers +// support functions with the "naked" attribute with every architecture. +# define WRAP(x) ___interceptor_ ## x +# define TRAMPOLINE(x) __interceptor_trampoline_ ## x +# if SANITIZER_FREEBSD || SANITIZER_NETBSD // FreeBSD's dynamic linker (incompliantly) gives non-weak symbols higher // priority than weak ones so weak aliases won't work for indirect calls // in position-independent (-fPIC / -fPIE) mode. -# define DECLARE_WRAPPER(ret_type, func, ...) \ - extern "C" ret_type func(__VA_ARGS__) \ - __attribute__((alias("__interceptor_" #func), visibility("default"))); -#elif !SANITIZER_FUCHSIA -# define WRAP(x) __interceptor_ ## x -# define WRAPPER_NAME(x) "__interceptor_" #x -# define INTERCEPTOR_ATTRIBUTE __attribute__((visibility("default"))) -# define DECLARE_WRAPPER(ret_type, func, ...) \ - extern "C" ret_type func(__VA_ARGS__) \ - __attribute__((weak, alias("__interceptor_" #func), visibility("default"))); +# define __ASM_WEAK_WRAPPER(func) ".globl " #func "\n" +# else +# define __ASM_WEAK_WRAPPER(func) ".weak " #func "\n" +# endif // SANITIZER_FREEBSD || SANITIZER_NETBSD +// Keep trampoline implementation in sync with sanitizer_common/sanitizer_asm.h +# define DECLARE_WRAPPER(ret_type, func, ...) \ + extern "C" ret_type func(__VA_ARGS__); \ + extern "C" ret_type TRAMPOLINE(func)(__VA_ARGS__); \ + extern "C" ret_type __interceptor_##func(__VA_ARGS__) \ + INTERCEPTOR_ATTRIBUTE __attribute__((weak)) ALIAS(WRAP(func)); \ + asm( \ + ".text\n" \ + __ASM_WEAK_WRAPPER(func) \ + ".set " #func ", " SANITIZER_STRINGIFY(TRAMPOLINE(func)) "\n" \ + ".globl " SANITIZER_STRINGIFY(TRAMPOLINE(func)) "\n" \ + ".type " SANITIZER_STRINGIFY(TRAMPOLINE(func)) ", %function\n" \ + SANITIZER_STRINGIFY(TRAMPOLINE(func)) ":\n" \ + SANITIZER_STRINGIFY(CFI_STARTPROC) "\n" \ + SANITIZER_STRINGIFY(ASM_TAIL_CALL) " __interceptor_" \ + SANITIZER_STRINGIFY(ASM_PREEMPTIBLE_SYM(func)) "\n" \ + SANITIZER_STRINGIFY(CFI_ENDPROC) "\n" \ + ".size " SANITIZER_STRINGIFY(TRAMPOLINE(func)) ", " \ + ".-" SANITIZER_STRINGIFY(TRAMPOLINE(func)) "\n" \ + ); +# else // ASM_INTERCEPTOR_TRAMPOLINE_SUPPORT +// Some architectures cannot implement efficient interceptor trampolines with +// just a plain jump due to complexities of resolving a preemptible symbol. In +// those cases, revert to just this scheme: +// +// [wrapper "func": weak] --(alias)--> [WRAP(func)] +// +# define WRAP(x) __interceptor_ ## x +# define TRAMPOLINE(x) WRAP(x) +# if SANITIZER_FREEBSD || SANITIZER_NETBSD +# define __ATTRIBUTE_WEAK_WRAPPER +# else +# define __ATTRIBUTE_WEAK_WRAPPER __attribute__((weak)) +# endif // SANITIZER_FREEBSD || SANITIZER_NETBSD +# define DECLARE_WRAPPER(ret_type, func, ...) \ + extern "C" ret_type func(__VA_ARGS__) \ + INTERCEPTOR_ATTRIBUTE __ATTRIBUTE_WEAK_WRAPPER ALIAS(WRAP(func)); +# endif // ASM_INTERCEPTOR_TRAMPOLINE_SUPPORT #endif #if SANITIZER_FUCHSIA @@ -162,10 +238,10 @@ const interpose_substitution substitution_##func_name[] \ # define REAL(x) __interception::PTR_TO_REAL(x) # define FUNC_TYPE(x) x##_type -# define DECLARE_REAL(ret_type, func, ...) \ +# define DECLARE_REAL(ret_type, func, ...) \ typedef ret_type (*FUNC_TYPE(func))(__VA_ARGS__); \ - namespace __interception { \ - extern FUNC_TYPE(func) PTR_TO_REAL(func); \ + namespace __interception { \ + extern FUNC_TYPE(func) PTR_TO_REAL(func); \ } # define ASSIGN_REAL(dst, src) REAL(dst) = REAL(src) #else // SANITIZER_APPLE @@ -176,14 +252,16 @@ const interpose_substitution substitution_##func_name[] \ #endif // SANITIZER_APPLE #if !SANITIZER_FUCHSIA -# define DECLARE_REAL_AND_INTERCEPTOR(ret_type, func, ...) \ +# define DECLARE_REAL_AND_INTERCEPTOR(ret_type, func, ...) \ DECLARE_REAL(ret_type, func, __VA_ARGS__) \ + extern "C" ret_type TRAMPOLINE(func)(__VA_ARGS__); \ extern "C" ret_type WRAP(func)(__VA_ARGS__); // Declare an interceptor and its wrapper defined in a different translation // unit (ex. asm). -# define DECLARE_EXTERN_INTERCEPTOR_AND_WRAPPER(ret_type, func, ...) \ - extern "C" ret_type WRAP(func)(__VA_ARGS__); \ - extern "C" ret_type func(__VA_ARGS__); +# define DECLARE_EXTERN_INTERCEPTOR_AND_WRAPPER(ret_type, func, ...) \ + extern "C" ret_type TRAMPOLINE(func)(__VA_ARGS__); \ + extern "C" ret_type WRAP(func)(__VA_ARGS__); \ + extern "C" ret_type func(__VA_ARGS__); #else # define DECLARE_REAL_AND_INTERCEPTOR(ret_type, func, ...) # define DECLARE_EXTERN_INTERCEPTOR_AND_WRAPPER(ret_type, func, ...) @@ -215,12 +293,10 @@ const interpose_substitution substitution_##func_name[] \ #elif !SANITIZER_APPLE -#define INTERCEPTOR(ret_type, func, ...) \ - DEFINE_REAL(ret_type, func, __VA_ARGS__) \ - DECLARE_WRAPPER(ret_type, func, __VA_ARGS__) \ - extern "C" \ - INTERCEPTOR_ATTRIBUTE \ - ret_type WRAP(func)(__VA_ARGS__) +#define INTERCEPTOR(ret_type, func, ...) \ + DEFINE_REAL(ret_type, func, __VA_ARGS__) \ + DECLARE_WRAPPER(ret_type, func, __VA_ARGS__) \ + extern "C" INTERCEPTOR_ATTRIBUTE ret_type WRAP(func)(__VA_ARGS__) // We don't need INTERCEPTOR_WITH_SUFFIX on non-Darwin for now. #define INTERCEPTOR_WITH_SUFFIX(ret_type, func, ...) \ @@ -228,10 +304,10 @@ const interpose_substitution substitution_##func_name[] \ #else // SANITIZER_APPLE -#define INTERCEPTOR_ZZZ(suffix, ret_type, func, ...) \ - extern "C" ret_type func(__VA_ARGS__) suffix; \ - extern "C" ret_type WRAP(func)(__VA_ARGS__); \ - INTERPOSER(func); \ +#define INTERCEPTOR_ZZZ(suffix, ret_type, func, ...) \ + extern "C" ret_type func(__VA_ARGS__) suffix; \ + extern "C" ret_type WRAP(func)(__VA_ARGS__); \ + INTERPOSER(func); \ extern "C" INTERCEPTOR_ATTRIBUTE ret_type WRAP(func)(__VA_ARGS__) #define INTERCEPTOR(ret_type, func, ...) \ @@ -246,14 +322,12 @@ const interpose_substitution substitution_##func_name[] \ #endif #if SANITIZER_WINDOWS -# define INTERCEPTOR_WINAPI(ret_type, func, ...) \ +# define INTERCEPTOR_WINAPI(ret_type, func, ...) \ typedef ret_type (__stdcall *FUNC_TYPE(func))(__VA_ARGS__); \ - namespace __interception { \ - FUNC_TYPE(func) PTR_TO_REAL(func); \ - } \ - extern "C" \ - INTERCEPTOR_ATTRIBUTE \ - ret_type __stdcall WRAP(func)(__VA_ARGS__) + namespace __interception { \ + FUNC_TYPE(func) PTR_TO_REAL(func); \ + } \ + extern "C" INTERCEPTOR_ATTRIBUTE ret_type __stdcall WRAP(func)(__VA_ARGS__) #endif // ISO C++ forbids casting between pointer-to-function and pointer-to-object, diff --git a/libsanitizer/interception/interception_linux.cpp b/libsanitizer/interception/interception_linux.cpp index 5111a87f0a6c..ef8136eb4fc7 100644 --- a/libsanitizer/interception/interception_linux.cpp +++ b/libsanitizer/interception/interception_linux.cpp @@ -33,7 +33,7 @@ static int StrCmp(const char *s1, const char *s2) { } #endif -static void *GetFuncAddr(const char *name, uptr wrapper_addr) { +static void *GetFuncAddr(const char *name, uptr trampoline) { #if SANITIZER_NETBSD // FIXME: Find a better way to handle renames if (StrCmp(name, "sigaction")) @@ -50,17 +50,17 @@ static void *GetFuncAddr(const char *name, uptr wrapper_addr) { // In case `name' is not loaded, dlsym ends up finding the actual wrapper. // We don't want to intercept the wrapper and have it point to itself. - if ((uptr)addr == wrapper_addr) + if ((uptr)addr == trampoline) addr = nullptr; } return addr; } bool InterceptFunction(const char *name, uptr *ptr_to_real, uptr func, - uptr wrapper) { - void *addr = GetFuncAddr(name, wrapper); + uptr trampoline) { + void *addr = GetFuncAddr(name, trampoline); *ptr_to_real = (uptr)addr; - return addr && (func == wrapper); + return addr && (func == trampoline); } // dlvsym is a GNU extension supported by some other platforms. @@ -70,12 +70,12 @@ static void *GetFuncAddr(const char *name, const char *ver) { } bool InterceptFunction(const char *name, const char *ver, uptr *ptr_to_real, - uptr func, uptr wrapper) { + uptr func, uptr trampoline) { void *addr = GetFuncAddr(name, ver); *ptr_to_real = (uptr)addr; - return addr && (func == wrapper); + return addr && (func == trampoline); } -#endif // SANITIZER_GLIBC || SANITIZER_FREEBSD || SANITIZER_NETBSD +# endif // SANITIZER_GLIBC || SANITIZER_FREEBSD || SANITIZER_NETBSD } // namespace __interception diff --git a/libsanitizer/interception/interception_linux.h b/libsanitizer/interception/interception_linux.h index a08f8cb98c40..433a3d9bd7fa 100644 --- a/libsanitizer/interception/interception_linux.h +++ b/libsanitizer/interception/interception_linux.h @@ -15,7 +15,7 @@ SANITIZER_SOLARIS #if !defined(INCLUDED_FROM_INTERCEPTION_LIB) -# error "interception_linux.h should be included from interception library only" +# error interception_linux.h should be included from interception library only #endif #ifndef INTERCEPTION_LINUX_H @@ -23,26 +23,26 @@ namespace __interception { bool InterceptFunction(const char *name, uptr *ptr_to_real, uptr func, - uptr wrapper); + uptr trampoline); bool InterceptFunction(const char *name, const char *ver, uptr *ptr_to_real, - uptr func, uptr wrapper); + uptr func, uptr trampoline); } // namespace __interception #define INTERCEPT_FUNCTION_LINUX_OR_FREEBSD(func) \ ::__interception::InterceptFunction( \ #func, \ - (::__interception::uptr *) & REAL(func), \ - (::__interception::uptr) & (func), \ - (::__interception::uptr) & WRAP(func)) + (::__interception::uptr *)&REAL(func), \ + (::__interception::uptr)&(func), \ + (::__interception::uptr)&TRAMPOLINE(func)) // dlvsym is a GNU extension supported by some other platforms. #if SANITIZER_GLIBC || SANITIZER_FREEBSD || SANITIZER_NETBSD #define INTERCEPT_FUNCTION_VER_LINUX_OR_FREEBSD(func, symver) \ ::__interception::InterceptFunction( \ #func, symver, \ - (::__interception::uptr *) & REAL(func), \ - (::__interception::uptr) & (func), \ - (::__interception::uptr) & WRAP(func)) + (::__interception::uptr *)&REAL(func), \ + (::__interception::uptr)&(func), \ + (::__interception::uptr)&TRAMPOLINE(func)) #else #define INTERCEPT_FUNCTION_VER_LINUX_OR_FREEBSD(func, symver) \ INTERCEPT_FUNCTION_LINUX_OR_FREEBSD(func) diff --git a/libsanitizer/interception/interception_win.cpp b/libsanitizer/interception/interception_win.cpp index faaa8ee15381..1b681ada37b1 100644 --- a/libsanitizer/interception/interception_win.cpp +++ b/libsanitizer/interception/interception_win.cpp @@ -1,4 +1,4 @@ -//===-- interception_linux.cpp ----------------------------------*- C++ -*-===// +//===-- interception_win.cpp ------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -141,8 +141,29 @@ static const int kBranchLength = FIRST_32_SECOND_64(kJumpInstructionLength, kIndirectJumpInstructionLength); static const int kDirectBranchLength = kBranchLength + kAddressLength; +# if defined(_MSC_VER) +# define INTERCEPTION_FORMAT(f, a) +# else +# define INTERCEPTION_FORMAT(f, a) __attribute__((format(printf, f, a))) +# endif + +static void (*ErrorReportCallback)(const char *format, ...) + INTERCEPTION_FORMAT(1, 2); + +void SetErrorReportCallback(void (*callback)(const char *format, ...)) { + ErrorReportCallback = callback; +} + +# define ReportError(...) \ + do { \ + if (ErrorReportCallback) \ + ErrorReportCallback(__VA_ARGS__); \ + } while (0) + static void InterceptionFailed() { - // Do we have a good way to abort with an error message here? + ReportError("interception_win: failed due to an unrecoverable error.\n"); + // This acts like an abort when no debugger is attached. According to an old + // comment, calling abort() leads to an infinite recursion in CheckFailed. __debugbreak(); } @@ -249,8 +270,13 @@ static void WritePadding(uptr from, uptr size) { } static void WriteJumpInstruction(uptr from, uptr target) { - if (!DistanceIsWithin2Gig(from + kJumpInstructionLength, target)) + if (!DistanceIsWithin2Gig(from + kJumpInstructionLength, target)) { + ReportError( + "interception_win: cannot write jmp further than 2GB away, from %p to " + "%p.\n", + (void *)from, (void *)target); InterceptionFailed(); + } ptrdiff_t offset = target - from - kJumpInstructionLength; *(u8*)from = 0xE9; *(u32*)(from + 1) = offset; @@ -274,6 +300,10 @@ static void WriteIndirectJumpInstruction(uptr from, uptr indirect_target) { int offset = indirect_target - from - kIndirectJumpInstructionLength; if (!DistanceIsWithin2Gig(from + kIndirectJumpInstructionLength, indirect_target)) { + ReportError( + "interception_win: cannot write indirect jmp with target further than " + "2GB away, from %p to %p.\n", + (void *)from, (void *)indirect_target); InterceptionFailed(); } *(u16*)from = 0x25FF; @@ -427,6 +457,11 @@ static const u8 kPrologueWithShortJump2[] = { // Returns 0 on error. static size_t GetInstructionSize(uptr address, size_t* rel_offset = nullptr) { +#if SANITIZER_ARM64 + // An ARM64 instruction is 4 bytes long. + return 4; +#endif + #if SANITIZER_WINDOWS64 if (memcmp((u8*)address, kPrologueWithShortJump1, sizeof(kPrologueWithShortJump1)) == 0 || @@ -492,6 +527,7 @@ static size_t GetInstructionSize(uptr address, size_t* rel_offset = nullptr) { case 0xFF8B: // 8B FF : mov edi, edi case 0xEC8B: // 8B EC : mov ebp, esp case 0xc889: // 89 C8 : mov eax, ecx + case 0xE589: // 89 E5 : mov ebp, esp case 0xC18B: // 8B C1 : mov eax, ecx case 0xC033: // 33 C0 : xor eax, eax case 0xC933: // 33 C9 : xor ecx, ecx @@ -588,7 +624,7 @@ static size_t GetInstructionSize(uptr address, size_t* rel_offset = nullptr) { // mov rax, QWORD PTR [rip + XXXXXXXX] case 0x25ff48: // 48 ff 25 XX XX XX XX : // rex.W jmp QWORD PTR [rip + XXXXXXXX] - + case 0x158D4C: // 4c 8d 15 XX XX XX XX : lea r10, [rip + XX] // Instructions having offset relative to 'rip' need offset adjustment. if (rel_offset) *rel_offset = 3; @@ -641,6 +677,8 @@ static size_t GetInstructionSize(uptr address, size_t* rel_offset = nullptr) { case 0x24448B: // 8B 44 24 XX : mov eax, dword ptr [esp + XX] case 0x244C8B: // 8B 4C 24 XX : mov ecx, dword ptr [esp + XX] case 0x24548B: // 8B 54 24 XX : mov edx, dword ptr [esp + XX] + case 0x245C8B: // 8B 5C 24 XX : mov ebx, dword ptr [esp + XX] + case 0x246C8B: // 8B 6C 24 XX : mov ebp, dword ptr [esp + XX] case 0x24748B: // 8B 74 24 XX : mov esi, dword ptr [esp + XX] case 0x247C8B: // 8B 7C 24 XX : mov edi, dword ptr [esp + XX] return 4; @@ -652,12 +690,20 @@ static size_t GetInstructionSize(uptr address, size_t* rel_offset = nullptr) { } #endif - // Unknown instruction! - // FIXME: Unknown instruction failures might happen when we add a new - // interceptor or a new compiler version. In either case, they should result - // in visible and readable error messages. However, merely calling abort() - // leads to an infinite recursion in CheckFailed. - InterceptionFailed(); + // Unknown instruction! This might happen when we add a new interceptor, use + // a new compiler version, or if Windows changed how some functions are + // compiled. In either case, we print the address and 8 bytes of instructions + // to notify the user about the error and to help identify the unknown + // instruction. Don't treat this as a fatal error, though we can break the + // debugger if one has been attached. + u8 *bytes = (u8 *)address; + ReportError( + "interception_win: unhandled instruction at %p: %02x %02x %02x %02x %02x " + "%02x %02x %02x\n", + (void *)address, bytes[0], bytes[1], bytes[2], bytes[3], bytes[4], + bytes[5], bytes[6], bytes[7]); + if (::IsDebuggerPresent()) + __debugbreak(); return 0; } @@ -678,16 +724,24 @@ static bool CopyInstructions(uptr to, uptr from, size_t size) { while (cursor != size) { size_t rel_offset = 0; size_t instruction_size = GetInstructionSize(from + cursor, &rel_offset); - _memcpy((void*)(to + cursor), (void*)(from + cursor), + if (!instruction_size) + return false; + _memcpy((void *)(to + cursor), (void *)(from + cursor), (size_t)instruction_size); if (rel_offset) { - uptr delta = to - from; - uptr relocated_offset = *(u32*)(to + cursor + rel_offset) - delta; -#if SANITIZER_WINDOWS64 - if (relocated_offset + 0x80000000U >= 0xFFFFFFFFU) +# if SANITIZER_WINDOWS64 + // we want to make sure that the new relative offset still fits in 32-bits + // this will be untrue if relocated_offset \notin [-2**31, 2**31) + s64 delta = to - from; + s64 relocated_offset = *(s32 *)(to + cursor + rel_offset) - delta; + if (-0x8000'0000ll > relocated_offset || relocated_offset > 0x7FFF'FFFFll) return false; -#endif - *(u32*)(to + cursor + rel_offset) = relocated_offset; +# else + // on 32-bit, the relative offset will always be correct + s32 delta = to - from; + s32 relocated_offset = *(s32 *)(to + cursor + rel_offset) - delta; +# endif + *(s32 *)(to + cursor + rel_offset) = relocated_offset; } cursor += instruction_size; } @@ -895,6 +949,10 @@ static void **InterestingDLLsAvailable() { "msvcr120.dll", // VS2013 "vcruntime140.dll", // VS2015 "ucrtbase.dll", // Universal CRT +#if (defined(__MINGW32__) && defined(__i386__)) + "libc++.dll", // libc++ + "libunwind.dll", // libunwind +#endif // NTDLL should go last as it exports some functions that we should // override in the CRT [presumably only used internally]. "ntdll.dll", NULL}; diff --git a/libsanitizer/interception/interception_win.h b/libsanitizer/interception/interception_win.h index 4590013019e3..f6eca82191cb 100644 --- a/libsanitizer/interception/interception_win.h +++ b/libsanitizer/interception/interception_win.h @@ -41,6 +41,11 @@ bool OverrideImportedFunction(const char *module_to_patch, const char *function_name, uptr new_function, uptr *orig_old_func); +// Sets a callback to be used for reporting errors by interception_win. The +// callback will be called with printf-like arguments. Intended to be used with +// __sanitizer::Report. Pass nullptr to disable error reporting (default). +void SetErrorReportCallback(void (*callback)(const char *format, ...)); + #if !SANITIZER_WINDOWS64 // Exposed for unittests bool OverrideFunctionWithDetour( diff --git a/libsanitizer/lsan/lsan.cpp b/libsanitizer/lsan/lsan.cpp index 319f399e60f5..6b223603c6a7 100644 --- a/libsanitizer/lsan/lsan.cpp +++ b/libsanitizer/lsan/lsan.cpp @@ -97,7 +97,7 @@ extern "C" void __lsan_init() { ReplaceSystemMalloc(); InitTlsSize(); InitializeInterceptors(); - InitializeThreadRegistry(); + InitializeThreads(); InstallDeadlySignalHandlers(LsanOnDeadlySignal); InitializeMainThread(); InstallAtExitCheckLeaks(); diff --git a/libsanitizer/lsan/lsan_allocator.cpp b/libsanitizer/lsan/lsan_allocator.cpp index ee7facac6ea7..12d579a9385b 100644 --- a/libsanitizer/lsan/lsan_allocator.cpp +++ b/libsanitizer/lsan/lsan_allocator.cpp @@ -49,8 +49,11 @@ void InitializeAllocator() { max_malloc_size = kMaxAllowedMallocSize; } +void AllocatorThreadStart() { allocator.InitCache(GetAllocatorCache()); } + void AllocatorThreadFinish() { allocator.SwallowCache(GetAllocatorCache()); + allocator.DestroyCache(GetAllocatorCache()); } static ChunkMetadata *Metadata(const void *p) { @@ -65,12 +68,14 @@ static void RegisterAllocation(const StackTrace &stack, void *p, uptr size) { m->stack_trace_id = StackDepotPut(stack); m->requested_size = size; atomic_store(reinterpret_cast(m), 1, memory_order_relaxed); + RunMallocHooks(p, size); } static void RegisterDeallocation(void *p) { if (!p) return; ChunkMetadata *m = Metadata(p); CHECK(m); + RunFreeHooks(p); atomic_store(reinterpret_cast(m), 0, memory_order_relaxed); } @@ -104,7 +109,6 @@ void *Allocate(const StackTrace &stack, uptr size, uptr alignment, if (cleared && allocator.FromPrimary(p)) memset(p, 0, size); RegisterAllocation(stack, p, size); - RunMallocHooks(p, size); return p; } @@ -119,7 +123,6 @@ static void *Calloc(uptr nmemb, uptr size, const StackTrace &stack) { } void Deallocate(void *p) { - RunFreeHooks(p); RegisterDeallocation(p); allocator.Deallocate(GetAllocatorCache(), p); } @@ -169,6 +172,10 @@ uptr GetMallocUsableSize(const void *p) { return m->requested_size; } +uptr GetMallocUsableSizeFast(const void *p) { + return Metadata(p)->requested_size; +} + int lsan_posix_memalign(void **memptr, uptr alignment, uptr size, const StackTrace &stack) { if (UNLIKELY(!CheckPosixMemalignAlignment(alignment))) { @@ -339,15 +346,6 @@ IgnoreObjectResult IgnoreObject(const void *p) { } } -void GetAdditionalThreadContextPtrsLocked(InternalMmapVector *ptrs) { - // This function can be used to treat memory reachable from `tctx` as live. - // This is useful for threads that have been created but not yet started. - - // This is currently a no-op because the LSan `pthread_create()` interceptor - // blocks until the child thread starts which keeps the thread's `arg` pointer - // live. -} - } // namespace __lsan using namespace __lsan; @@ -368,7 +366,7 @@ uptr __sanitizer_get_heap_size() { } SANITIZER_INTERFACE_ATTRIBUTE -uptr __sanitizer_get_free_bytes() { return 0; } +uptr __sanitizer_get_free_bytes() { return 1; } SANITIZER_INTERFACE_ATTRIBUTE uptr __sanitizer_get_unmapped_bytes() { return 0; } @@ -377,7 +375,9 @@ SANITIZER_INTERFACE_ATTRIBUTE uptr __sanitizer_get_estimated_allocated_size(uptr size) { return size; } SANITIZER_INTERFACE_ATTRIBUTE -int __sanitizer_get_ownership(const void *p) { return Metadata(p) != nullptr; } +int __sanitizer_get_ownership(const void *p) { + return GetMallocBegin(p) != nullptr; +} SANITIZER_INTERFACE_ATTRIBUTE const void * __sanitizer_get_allocated_begin(const void *p) { @@ -389,4 +389,15 @@ uptr __sanitizer_get_allocated_size(const void *p) { return GetMallocUsableSize(p); } +SANITIZER_INTERFACE_ATTRIBUTE +uptr __sanitizer_get_allocated_size_fast(const void *p) { + DCHECK_EQ(p, __sanitizer_get_allocated_begin(p)); + uptr ret = GetMallocUsableSizeFast(p); + DCHECK_EQ(ret, __sanitizer_get_allocated_size(p)); + return ret; +} + +SANITIZER_INTERFACE_ATTRIBUTE +void __sanitizer_purge_allocator() { allocator.ForceReleaseToOS(); } + } // extern "C" diff --git a/libsanitizer/lsan/lsan_allocator.h b/libsanitizer/lsan/lsan_allocator.h index 10c1672ec5e3..5eed0cbdb309 100644 --- a/libsanitizer/lsan/lsan_allocator.h +++ b/libsanitizer/lsan/lsan_allocator.h @@ -32,6 +32,7 @@ template void ForEachChunk(const Callable &callback); void GetAllocatorCacheRange(uptr *begin, uptr *end); +void AllocatorThreadStart(); void AllocatorThreadFinish(); void InitializeAllocator(); @@ -67,20 +68,42 @@ using PrimaryAllocator = PrimaryAllocatorASVT; #else # if SANITIZER_FUCHSIA || defined(__powerpc64__) const uptr kAllocatorSpace = ~(uptr)0; +# if SANITIZER_RISCV64 +// See the comments in compiler-rt/lib/asan/asan_allocator.h for why these +// values were chosen. +const uptr kAllocatorSize = UINT64_C(1) << 33; // 8GB +using LSanSizeClassMap = SizeClassMap; +static_assert(LSanSizeClassMap::kNumClassesRounded <= 32, + "32 size classes is the optimal number to ensure tests run " + "effieciently on Fuchsia."); +# else const uptr kAllocatorSize = 0x40000000000ULL; // 4T. +using LSanSizeClassMap = DefaultSizeClassMap; +# endif +# elif SANITIZER_RISCV64 +const uptr kAllocatorSpace = ~(uptr)0; +const uptr kAllocatorSize = 0x2000000000ULL; // 128G. +using LSanSizeClassMap = DefaultSizeClassMap; # elif SANITIZER_APPLE const uptr kAllocatorSpace = 0x600000000000ULL; const uptr kAllocatorSize = 0x40000000000ULL; // 4T. +using LSanSizeClassMap = DefaultSizeClassMap; # else const uptr kAllocatorSpace = 0x500000000000ULL; const uptr kAllocatorSize = 0x40000000000ULL; // 4T. +using LSanSizeClassMap = DefaultSizeClassMap; # endif template struct AP64 { // Allocator64 parameters. Deliberately using a short name. static const uptr kSpaceBeg = kAllocatorSpace; static const uptr kSpaceSize = kAllocatorSize; static const uptr kMetadataSize = sizeof(ChunkMetadata); - typedef DefaultSizeClassMap SizeClassMap; + using SizeClassMap = LSanSizeClassMap; typedef NoOpMapUnmapCallback MapUnmapCallback; static const uptr kFlags = 0; using AddressSpaceView = AddressSpaceViewTy; diff --git a/libsanitizer/lsan/lsan_common.cpp b/libsanitizer/lsan/lsan_common.cpp index ae29e4a21fd1..8b1af5b629fb 100644 --- a/libsanitizer/lsan/lsan_common.cpp +++ b/libsanitizer/lsan/lsan_common.cpp @@ -34,15 +34,13 @@ # else # define OBJC_DATA_MASK 0x00007ffffffffff8UL # endif -// https://github.com/apple-oss-distributions/objc4/blob/8701d5672d3fd3cd817aeb84db1077aafe1a1604/runtime/objc-runtime-new.h#L139 -# define OBJC_FAST_IS_RW 0x8000000000000000UL # endif namespace __lsan { // This mutex is used to prevent races between DoLeakCheck and IgnoreObject, and // also to protect the global list of root regions. -Mutex global_mutex; +static Mutex global_mutex; Flags lsan_flags; @@ -173,13 +171,11 @@ static uptr GetCallerPC(const StackTrace &stack) { } # if SANITIZER_APPLE -// Objective-C class data pointers are stored with flags in the low bits, so -// they need to be transformed back into something that looks like a pointer. -static inline void *MaybeTransformPointer(void *p) { +// Several pointers in the Objective-C runtime (method cache and class_rw_t, +// for example) are tagged with additional bits we need to strip. +static inline void *TransformPointer(void *p) { uptr ptr = reinterpret_cast(p); - if ((ptr & OBJC_FAST_IS_RW) == OBJC_FAST_IS_RW) - ptr &= OBJC_DATA_MASK; - return reinterpret_cast(ptr); + return reinterpret_cast(ptr & OBJC_DATA_MASK); } # endif @@ -241,12 +237,6 @@ static LeakSuppressionContext *GetSuppressionContext() { return suppression_ctx; } -static InternalMmapVectorNoCtor root_regions; - -InternalMmapVectorNoCtor const *GetRootRegions() { - return &root_regions; -} - void InitCommonLsan() { if (common_flags()->detect_leaks) { // Initialization which can fail or print warnings should only be done if @@ -270,9 +260,14 @@ static inline bool MaybeUserPointer(uptr p) { if (p < kMinAddress) return false; # if defined(__x86_64__) - // TODO: add logic similar to ARM when Intel LAM is available. - // Accept only canonical form user-space addresses. - return ((p >> 47) == 0); + // TODO: support LAM48 and 5 level page tables. + // LAM_U57 mask format + // * top byte: 0x81 because the format is: [0] [6-bit tag] [0] + // * top-1 byte: 0xff because it should be 0 + // * top-2 byte: 0x80 because Linux uses 128 TB VMA ending at 0x7fffffffffff + constexpr uptr kLAM_U57Mask = 0x81ff80; + constexpr uptr kPointerMask = kLAM_U57Mask << 40; + return ((p & kPointerMask) == 0); # elif defined(__mips64) return ((p >> 40) == 0); # elif defined(__aarch64__) @@ -307,7 +302,7 @@ void ScanRangeForPointers(uptr begin, uptr end, Frontier *frontier, for (; pp + sizeof(void *) <= end; pp += alignment) { void *p = *reinterpret_cast(pp); # if SANITIZER_APPLE - p = MaybeTransformPointer(p); + p = TransformPointer(p); # endif if (!MaybeUserPointer(reinterpret_cast(p))) continue; @@ -527,38 +522,52 @@ static void ProcessThreads(SuspendedThreadsList const &suspended_threads, # endif // SANITIZER_FUCHSIA -void ScanRootRegion(Frontier *frontier, const RootRegion &root_region, - uptr region_begin, uptr region_end, bool is_readable) { - uptr intersection_begin = Max(root_region.begin, region_begin); - uptr intersection_end = Min(region_end, root_region.begin + root_region.size); - if (intersection_begin >= intersection_end) - return; - LOG_POINTERS("Root region %p-%p intersects with mapped region %p-%p (%s)\n", - (void *)root_region.begin, - (void *)(root_region.begin + root_region.size), - (void *)region_begin, (void *)region_end, - is_readable ? "readable" : "unreadable"); - if (is_readable) - ScanRangeForPointers(intersection_begin, intersection_end, frontier, "ROOT", - kReachable); +// A map that contains [region_begin, region_end) pairs. +using RootRegions = DenseMap, uptr>; + +static RootRegions &GetRootRegionsLocked() { + global_mutex.CheckLocked(); + static RootRegions *regions = nullptr; + alignas(RootRegions) static char placeholder[sizeof(RootRegions)]; + if (!regions) + regions = new (placeholder) RootRegions(); + return *regions; } -static void ProcessRootRegion(Frontier *frontier, - const RootRegion &root_region) { - MemoryMappingLayout proc_maps(/*cache_enabled*/ true); - MemoryMappedSegment segment; - while (proc_maps.Next(&segment)) { - ScanRootRegion(frontier, root_region, segment.start, segment.end, - segment.IsReadable()); +bool HasRootRegions() { return !GetRootRegionsLocked().empty(); } + +void ScanRootRegions(Frontier *frontier, + const InternalMmapVectorNoCtor &mapped_regions) { + if (!flags()->use_root_regions) + return; + + InternalMmapVector regions; + GetRootRegionsLocked().forEach([&](const auto &kv) { + regions.push_back({kv.first.first, kv.first.second}); + return true; + }); + + InternalMmapVector intersection; + Intersect(mapped_regions, regions, intersection); + + for (const Region &r : intersection) { + LOG_POINTERS("Root region intersects with mapped region at %p-%p\n", + (void *)r.begin, (void *)r.end); + ScanRangeForPointers(r.begin, r.end, frontier, "ROOT", kReachable); } } // Scans root regions for heap pointers. static void ProcessRootRegions(Frontier *frontier) { - if (!flags()->use_root_regions) + if (!flags()->use_root_regions || !HasRootRegions()) return; - for (uptr i = 0; i < root_regions.size(); i++) - ProcessRootRegion(frontier, root_regions[i]); + MemoryMappingLayout proc_maps(/*cache_enabled*/ true); + MemoryMappedSegment segment; + InternalMmapVector mapped_regions; + while (proc_maps.Next(&segment)) + if (segment.IsReadable()) + mapped_regions.push_back({segment.start, segment.end}); + ScanRootRegions(frontier, mapped_regions); } static void FloodFillTag(Frontier *frontier, ChunkTag tag) { @@ -941,8 +950,8 @@ void LeakReport::PrintSummary() { allocations += leaks_[i].hit_count; } InternalScopedString summary; - summary.append("%zu byte(s) leaked in %zu allocation(s).", bytes, - allocations); + summary.AppendF("%zu byte(s) leaked in %zu allocation(s).", bytes, + allocations); ReportErrorSummary(summary.data()); } @@ -1013,36 +1022,37 @@ void __lsan_ignore_object(const void *p) { SANITIZER_INTERFACE_ATTRIBUTE void __lsan_register_root_region(const void *begin, uptr size) { #if CAN_SANITIZE_LEAKS - Lock l(&global_mutex); - RootRegion region = {reinterpret_cast(begin), size}; - root_regions.push_back(region); VReport(1, "Registered root region at %p of size %zu\n", begin, size); + uptr b = reinterpret_cast(begin); + uptr e = b + size; + CHECK_LT(b, e); + + Lock l(&global_mutex); + ++GetRootRegionsLocked()[{b, e}]; #endif // CAN_SANITIZE_LEAKS } SANITIZER_INTERFACE_ATTRIBUTE void __lsan_unregister_root_region(const void *begin, uptr size) { #if CAN_SANITIZE_LEAKS - Lock l(&global_mutex); - bool removed = false; - for (uptr i = 0; i < root_regions.size(); i++) { - RootRegion region = root_regions[i]; - if (region.begin == reinterpret_cast(begin) && region.size == size) { - removed = true; - uptr last_index = root_regions.size() - 1; - root_regions[i] = root_regions[last_index]; - root_regions.pop_back(); - VReport(1, "Unregistered root region at %p of size %zu\n", begin, size); - break; + uptr b = reinterpret_cast(begin); + uptr e = b + size; + CHECK_LT(b, e); + VReport(1, "Unregistered root region at %p of size %zu\n", begin, size); + + { + Lock l(&global_mutex); + if (auto *f = GetRootRegionsLocked().find({b, e})) { + if (--(f->second) == 0) + GetRootRegionsLocked().erase(f); + return; } } - if (!removed) { - Report( - "__lsan_unregister_root_region(): region at %p of size %zu has not " - "been registered.\n", - begin, size); - Die(); - } + Report( + "__lsan_unregister_root_region(): region at %p of size %zu has not " + "been registered.\n", + begin, size); + Die(); #endif // CAN_SANITIZE_LEAKS } diff --git a/libsanitizer/lsan/lsan_common.h b/libsanitizer/lsan/lsan_common.h index a1f2d1a349bc..d3e768363e93 100644 --- a/libsanitizer/lsan/lsan_common.h +++ b/libsanitizer/lsan/lsan_common.h @@ -18,6 +18,7 @@ #include "sanitizer_common/sanitizer_common.h" #include "sanitizer_common/sanitizer_internal_defs.h" #include "sanitizer_common/sanitizer_platform.h" +#include "sanitizer_common/sanitizer_range.h" #include "sanitizer_common/sanitizer_stackdepot.h" #include "sanitizer_common/sanitizer_stoptheworld.h" #include "sanitizer_common/sanitizer_symbolizer.h" @@ -79,11 +80,6 @@ enum IgnoreObjectResult { kIgnoreObjectInvalid }; -struct Range { - uptr begin; - uptr end; -}; - //// -------------------------------------------------------------------------- //// Poisoning prototypes. //// -------------------------------------------------------------------------- @@ -96,8 +92,8 @@ bool WordIsPoisoned(uptr addr); //// -------------------------------------------------------------------------- // Wrappers for ThreadRegistry access. -void LockThreadRegistry() SANITIZER_NO_THREAD_SAFETY_ANALYSIS; -void UnlockThreadRegistry() SANITIZER_NO_THREAD_SAFETY_ANALYSIS; +void LockThreads() SANITIZER_NO_THREAD_SAFETY_ANALYSIS; +void UnlockThreads() SANITIZER_NO_THREAD_SAFETY_ANALYSIS; // If called from the main thread, updates the main thread's TID in the thread // registry. We need this to handle processes that fork() without a subsequent // exec(), which invalidates the recorded TID. To update it, we must call @@ -160,13 +156,13 @@ IgnoreObjectResult IgnoreObject(const void *p); struct ScopedStopTheWorldLock { ScopedStopTheWorldLock() { - LockThreadRegistry(); + LockThreads(); LockAllocator(); } ~ScopedStopTheWorldLock() { UnlockAllocator(); - UnlockThreadRegistry(); + UnlockThreads(); } ScopedStopTheWorldLock &operator=(const ScopedStopTheWorldLock &) = delete; @@ -239,11 +235,6 @@ void InitializePlatformSpecificModules(); void ProcessGlobalRegions(Frontier *frontier); void ProcessPlatformSpecificAllocations(Frontier *frontier); -struct RootRegion { - uptr begin; - uptr size; -}; - // LockStuffAndStopTheWorld can start to use Scan* calls to collect into // this Frontier vector before the StopTheWorldCallback actually runs. // This is used when the OS has a unified callback API for suspending @@ -256,9 +247,11 @@ struct CheckForLeaksParam { bool success = false; }; -InternalMmapVectorNoCtor const *GetRootRegions(); -void ScanRootRegion(Frontier *frontier, RootRegion const ®ion, - uptr region_begin, uptr region_end, bool is_readable); +using Region = Range; + +bool HasRootRegions(); +void ScanRootRegions(Frontier *frontier, + const InternalMmapVectorNoCtor ®ion); // Run stoptheworld while holding any platform-specific locks, as well as the // allocator and thread registry locks. void LockStuffAndStopTheWorld(StopTheWorldCallback callback, diff --git a/libsanitizer/lsan/lsan_common_fuchsia.cpp b/libsanitizer/lsan/lsan_common_fuchsia.cpp index bcad1c205fc7..cb3fe1f859f7 100644 --- a/libsanitizer/lsan/lsan_common_fuchsia.cpp +++ b/libsanitizer/lsan/lsan_common_fuchsia.cpp @@ -119,7 +119,8 @@ void LockStuffAndStopTheWorld(StopTheWorldCallback callback, auto i = __sanitizer::InternalLowerBound(params->allocator_caches, begin); if (i < params->allocator_caches.size() && params->allocator_caches[i] >= begin && - end - params->allocator_caches[i] <= sizeof(AllocatorCache)) { + params->allocator_caches[i] <= end && + end - params->allocator_caches[i] >= sizeof(AllocatorCache)) { // Split the range in two and omit the allocator cache within. ScanRangeForPointers(begin, params->allocator_caches[i], ¶ms->argument->frontier, "TLS", kReachable); diff --git a/libsanitizer/lsan/lsan_common_mac.cpp b/libsanitizer/lsan/lsan_common_mac.cpp index 9ccf098a6567..4e5198979b95 100644 --- a/libsanitizer/lsan/lsan_common_mac.cpp +++ b/libsanitizer/lsan/lsan_common_mac.cpp @@ -165,7 +165,8 @@ void ProcessPlatformSpecificAllocations(Frontier *frontier) { vm_address_t address = 0; kern_return_t err = KERN_SUCCESS; - InternalMmapVectorNoCtor const *root_regions = GetRootRegions(); + InternalMmapVector mapped_regions; + bool use_root_regions = flags()->use_root_regions && HasRootRegions(); RegionScanState scan_state; while (err == KERN_SUCCESS) { @@ -203,8 +204,7 @@ void ProcessPlatformSpecificAllocations(Frontier *frontier) { // Recursing over the full memory map is very slow, break out // early if we don't need the full iteration. - if (scan_state.seen_regions == SeenRegion::All && - !(flags()->use_root_regions && root_regions->size() > 0)) { + if (scan_state.seen_regions == SeenRegion::All && !use_root_regions) { break; } @@ -215,15 +215,12 @@ void ProcessPlatformSpecificAllocations(Frontier *frontier) { // // TODO(fjricci) - remove this once sanitizer_procmaps_mac has the same // behavior as sanitizer_procmaps_linux and traverses all memory regions - if (flags()->use_root_regions) { - for (uptr i = 0; i < root_regions->size(); i++) { - ScanRootRegion(frontier, (*root_regions)[i], address, end_address, - info.protection & kProtectionRead); - } - } + if (use_root_regions && (info.protection & kProtectionRead)) + mapped_regions.push_back({address, end_address}); address = end_address; } + ScanRootRegions(frontier, mapped_regions); } // On darwin, we can intercept _exit gracefully, and return a failing exit code diff --git a/libsanitizer/lsan/lsan_interceptors.cpp b/libsanitizer/lsan/lsan_interceptors.cpp index 3f8ef3fe48c2..885f7ad5ddba 100644 --- a/libsanitizer/lsan/lsan_interceptors.cpp +++ b/libsanitizer/lsan/lsan_interceptors.cpp @@ -197,7 +197,7 @@ INTERCEPTOR(void*, pvalloc, uptr size) { #endif // SANITIZER_INTERCEPT_PVALLOC #if SANITIZER_INTERCEPT_CFREE -INTERCEPTOR(void, cfree, void *p) ALIAS(WRAPPER_NAME(free)); +INTERCEPTOR(void, cfree, void *p) ALIAS(WRAP(free)); #define LSAN_MAYBE_INTERCEPT_CFREE INTERCEPT_FUNCTION(cfree) #else #define LSAN_MAYBE_INTERCEPT_CFREE @@ -415,16 +415,10 @@ INTERCEPTOR(char *, strerror, int errnum) { #if SANITIZER_POSIX -struct ThreadParam { - void *(*callback)(void *arg); - void *param; - atomic_uintptr_t tid; -}; - -extern "C" void *__lsan_thread_start_func(void *arg) { - ThreadParam *p = (ThreadParam*)arg; - void* (*callback)(void *arg) = p->callback; - void *param = p->param; +template +static void *ThreadStartFunc(void *arg) { + u32 parent_tid = (uptr)arg; + uptr tid = ThreadCreate(parent_tid, Detached); // Wait until the last iteration to maximize the chance that we are the last // destructor to run. #if !SANITIZER_NETBSD && !SANITIZER_FREEBSD @@ -433,56 +427,104 @@ extern "C" void *__lsan_thread_start_func(void *arg) { Report("LeakSanitizer: failed to set thread key.\n"); Die(); } -#endif - int tid = 0; - while ((tid = atomic_load(&p->tid, memory_order_acquire)) == 0) - internal_sched_yield(); +# endif ThreadStart(tid, GetTid()); - atomic_store(&p->tid, 0, memory_order_release); - return callback(param); + auto self = GetThreadSelf(); + auto args = GetThreadArgRetval().GetArgs(self); + void *retval = (*args.routine)(args.arg_retval); + GetThreadArgRetval().Finish(self, retval); + return retval; } INTERCEPTOR(int, pthread_create, void *th, void *attr, void *(*callback)(void *), void *param) { ENSURE_LSAN_INITED; EnsureMainThreadIDIsCorrect(); + + bool detached = [attr]() { + int d = 0; + return attr && !pthread_attr_getdetachstate(attr, &d) && IsStateDetached(d); + }(); + __sanitizer_pthread_attr_t myattr; if (!attr) { pthread_attr_init(&myattr); attr = &myattr; } AdjustStackSize(attr); - int detached = 0; - pthread_attr_getdetachstate(attr, &detached); - ThreadParam p; - p.callback = callback; - p.param = param; - atomic_store(&p.tid, 0, memory_order_relaxed); - int res; + uptr this_tid = GetCurrentThreadId(); + int result; { // Ignore all allocations made by pthread_create: thread stack/TLS may be // stored by pthread for future reuse even after thread destruction, and // the linked list it's stored in doesn't even hold valid pointers to the // objects, the latter are calculated by obscure pointer arithmetic. ScopedInterceptorDisabler disabler; - res = REAL(pthread_create)(th, attr, __lsan_thread_start_func, &p); - } - if (res == 0) { - int tid = ThreadCreate(GetCurrentThreadId(), IsStateDetached(detached)); - CHECK_NE(tid, kMainTid); - atomic_store(&p.tid, tid, memory_order_release); - while (atomic_load(&p.tid, memory_order_acquire) != 0) - internal_sched_yield(); + GetThreadArgRetval().Create(detached, {callback, param}, [&]() -> uptr { + result = REAL(pthread_create)( + th, attr, detached ? ThreadStartFunc : ThreadStartFunc, + (void *)this_tid); + return result ? 0 : *(uptr *)(th); + }); } if (attr == &myattr) pthread_attr_destroy(&myattr); - return res; + return result; } -INTERCEPTOR(int, pthread_join, void *t, void **arg) { - return REAL(pthread_join)(t, arg); +INTERCEPTOR(int, pthread_join, void *thread, void **retval) { + int result; + GetThreadArgRetval().Join((uptr)thread, [&]() { + result = REAL(pthread_join)(thread, retval); + return !result; + }); + return result; } +INTERCEPTOR(int, pthread_detach, void *thread) { + int result; + GetThreadArgRetval().Detach((uptr)thread, [&]() { + result = REAL(pthread_detach)(thread); + return !result; + }); + return result; +} + +INTERCEPTOR(void, pthread_exit, void *retval) { + GetThreadArgRetval().Finish(GetThreadSelf(), retval); + REAL(pthread_exit)(retval); +} + +# if SANITIZER_INTERCEPT_TRYJOIN +INTERCEPTOR(int, pthread_tryjoin_np, void *thread, void **ret) { + int result; + GetThreadArgRetval().Join((uptr)thread, [&]() { + result = REAL(pthread_tryjoin_np)(thread, ret); + return !result; + }); + return result; +} +# define LSAN_MAYBE_INTERCEPT_TRYJOIN INTERCEPT_FUNCTION(pthread_tryjoin_np) +# else +# define LSAN_MAYBE_INTERCEPT_TRYJOIN +# endif // SANITIZER_INTERCEPT_TRYJOIN + +# if SANITIZER_INTERCEPT_TIMEDJOIN +INTERCEPTOR(int, pthread_timedjoin_np, void *thread, void **ret, + const struct timespec *abstime) { + int result; + GetThreadArgRetval().Join((uptr)thread, [&]() { + result = REAL(pthread_timedjoin_np)(thread, ret, abstime); + return !result; + }); + return result; +} +# define LSAN_MAYBE_INTERCEPT_TIMEDJOIN \ + INTERCEPT_FUNCTION(pthread_timedjoin_np) +# else +# define LSAN_MAYBE_INTERCEPT_TIMEDJOIN +# endif // SANITIZER_INTERCEPT_TIMEDJOIN + DEFINE_REAL_PTHREAD_FUNCTIONS INTERCEPTOR(void, _exit, int status) { @@ -491,6 +533,7 @@ INTERCEPTOR(void, _exit, int status) { } #define COMMON_INTERCEPT_FUNCTION(name) INTERCEPT_FUNCTION(name) +#define SIGNAL_INTERCEPTOR_ENTER() ENSURE_LSAN_INITED #include "sanitizer_common/sanitizer_signal_interceptors.inc" #endif // SANITIZER_POSIX @@ -518,6 +561,10 @@ void InitializeInterceptors() { LSAN_MAYBE_INTERCEPT_MALLOPT; INTERCEPT_FUNCTION(pthread_create); INTERCEPT_FUNCTION(pthread_join); + INTERCEPT_FUNCTION(pthread_detach); + INTERCEPT_FUNCTION(pthread_exit); + LSAN_MAYBE_INTERCEPT_TIMEDJOIN; + LSAN_MAYBE_INTERCEPT_TRYJOIN; INTERCEPT_FUNCTION(_exit); LSAN_MAYBE_INTERCEPT__LWP_EXIT; diff --git a/libsanitizer/lsan/lsan_mac.cpp b/libsanitizer/lsan/lsan_mac.cpp index 2bcd0057f24b..990954a8b687 100644 --- a/libsanitizer/lsan/lsan_mac.cpp +++ b/libsanitizer/lsan/lsan_mac.cpp @@ -80,7 +80,7 @@ extern "C" void lsan_dispatch_call_block_and_release(void *block) { VReport(2, "lsan_dispatch_call_block_and_release(): " "context: %p, pthread_self: %p\n", - block, pthread_self()); + block, (void*)pthread_self()); lsan_register_worker_thread(context->parent_tid); // Call the original dispatcher for the block. context->func(context->block); diff --git a/libsanitizer/lsan/lsan_thread.cpp b/libsanitizer/lsan/lsan_thread.cpp index 9da42f32e06b..8aa3111eecf7 100644 --- a/libsanitizer/lsan/lsan_thread.cpp +++ b/libsanitizer/lsan/lsan_thread.cpp @@ -24,6 +24,7 @@ namespace __lsan { static ThreadRegistry *thread_registry; +static ThreadArgRetval *thread_arg_retval; static Mutex mu_for_thread_context; static LowLevelAllocator allocator_for_thread_context; @@ -33,16 +34,26 @@ static ThreadContextBase *CreateThreadContext(u32 tid) { return new (allocator_for_thread_context) ThreadContext(tid); } -void InitializeThreadRegistry() { - static ALIGNED(64) char thread_registry_placeholder[sizeof(ThreadRegistry)]; +void InitializeThreads() { + static ALIGNED(alignof( + ThreadRegistry)) char thread_registry_placeholder[sizeof(ThreadRegistry)]; thread_registry = new (thread_registry_placeholder) ThreadRegistry(CreateThreadContext); + + static ALIGNED(alignof(ThreadArgRetval)) char + thread_arg_retval_placeholder[sizeof(ThreadArgRetval)]; + thread_arg_retval = new (thread_arg_retval_placeholder) ThreadArgRetval(); } +ThreadArgRetval &GetThreadArgRetval() { return *thread_arg_retval; } + ThreadContextLsanBase::ThreadContextLsanBase(int tid) : ThreadContextBase(tid) {} -void ThreadContextLsanBase::OnStarted(void *arg) { SetCurrentThread(this); } +void ThreadContextLsanBase::OnStarted(void *arg) { + SetCurrentThread(this); + AllocatorThreadStart(); +} void ThreadContextLsanBase::OnFinished() { AllocatorThreadFinish(); @@ -72,9 +83,15 @@ void GetThreadExtraStackRangesLocked(tid_t os_id, InternalMmapVector *ranges) {} void GetThreadExtraStackRangesLocked(InternalMmapVector *ranges) {} -void LockThreadRegistry() { thread_registry->Lock(); } +void LockThreads() { + thread_registry->Lock(); + thread_arg_retval->Lock(); +} -void UnlockThreadRegistry() { thread_registry->Unlock(); } +void UnlockThreads() { + thread_arg_retval->Unlock(); + thread_registry->Unlock(); +} ThreadRegistry *GetLsanThreadRegistryLocked() { thread_registry->CheckLocked(); @@ -92,4 +109,8 @@ void GetRunningThreadsLocked(InternalMmapVector *threads) { threads); } +void GetAdditionalThreadContextPtrsLocked(InternalMmapVector *ptrs) { + GetThreadArgRetval().GetAllPtrsLocked(ptrs); +} + } // namespace __lsan diff --git a/libsanitizer/lsan/lsan_thread.h b/libsanitizer/lsan/lsan_thread.h index 709a02915c2d..222066ee93cd 100644 --- a/libsanitizer/lsan/lsan_thread.h +++ b/libsanitizer/lsan/lsan_thread.h @@ -14,6 +14,7 @@ #ifndef LSAN_THREAD_H #define LSAN_THREAD_H +#include "sanitizer_common/sanitizer_thread_arg_retval.h" #include "sanitizer_common/sanitizer_thread_registry.h" namespace __lsan { @@ -43,10 +44,11 @@ class ThreadContextLsanBase : public ThreadContextBase { // This subclass of ThreadContextLsanBase is declared in an OS-specific header. class ThreadContext; -void InitializeThreadRegistry(); +void InitializeThreads(); void InitializeMainThread(); ThreadRegistry *GetLsanThreadRegistryLocked(); +ThreadArgRetval &GetThreadArgRetval(); u32 ThreadCreate(u32 tid, bool detached, void *arg = nullptr); void ThreadFinish(); diff --git a/libsanitizer/sanitizer_common/Makefile.am b/libsanitizer/sanitizer_common/Makefile.am index cd8a9bf145dc..02afe65620a2 100644 --- a/libsanitizer/sanitizer_common/Makefile.am +++ b/libsanitizer/sanitizer_common/Makefile.am @@ -31,6 +31,7 @@ sanitizer_common_files = \ sanitizer_coverage_libcdep_new.cpp \ sanitizer_deadlock_detector1.cpp \ sanitizer_deadlock_detector2.cpp \ + sanitizer_dl.cpp \ sanitizer_errno.cpp \ sanitizer_file.cpp \ sanitizer_flags.cpp \ @@ -57,6 +58,7 @@ sanitizer_common_files = \ sanitizer_procmaps_linux.cpp \ sanitizer_procmaps_mac.cpp \ sanitizer_procmaps_solaris.cpp \ + sanitizer_range.cpp \ sanitizer_solaris.cpp \ sanitizer_stack_store.cpp \ sanitizer_stackdepot.cpp \ @@ -75,6 +77,7 @@ sanitizer_common_files = \ sanitizer_symbolizer_posix_libcdep.cpp \ sanitizer_symbolizer_win.cpp \ sanitizer_termination.cpp \ + sanitizer_thread_arg_retval.cpp \ sanitizer_thread_registry.cpp \ sanitizer_tls_get_addr.cpp \ sanitizer_unwind_linux_libcdep.cpp \ diff --git a/libsanitizer/sanitizer_common/Makefile.in b/libsanitizer/sanitizer_common/Makefile.in index 6499036726be..881df60331b9 100644 --- a/libsanitizer/sanitizer_common/Makefile.in +++ b/libsanitizer/sanitizer_common/Makefile.in @@ -125,9 +125,10 @@ am__objects_1 = sancov_flags.lo sanitizer_allocator.lo \ sanitizer_common.lo sanitizer_common_libcdep.lo \ sanitizer_coverage_libcdep_new.lo \ sanitizer_deadlock_detector1.lo \ - sanitizer_deadlock_detector2.lo sanitizer_errno.lo \ - sanitizer_file.lo sanitizer_flags.lo sanitizer_flag_parser.lo \ - sanitizer_libc.lo sanitizer_libignore.lo sanitizer_linux.lo \ + sanitizer_deadlock_detector2.lo sanitizer_dl.lo \ + sanitizer_errno.lo sanitizer_file.lo sanitizer_flags.lo \ + sanitizer_flag_parser.lo sanitizer_libc.lo \ + sanitizer_libignore.lo sanitizer_linux.lo \ sanitizer_linux_libcdep.lo sanitizer_linux_s390.lo \ sanitizer_mac.lo sanitizer_mac_libcdep.lo sanitizer_mutex.lo \ sanitizer_netbsd.lo sanitizer_platform_limits_freebsd.lo \ @@ -138,20 +139,21 @@ am__objects_1 = sancov_flags.lo sanitizer_allocator.lo \ sanitizer_posix_libcdep.lo sanitizer_printf.lo \ sanitizer_procmaps_bsd.lo sanitizer_procmaps_common.lo \ sanitizer_procmaps_linux.lo sanitizer_procmaps_mac.lo \ - sanitizer_procmaps_solaris.lo sanitizer_solaris.lo \ - sanitizer_stack_store.lo sanitizer_stackdepot.lo \ - sanitizer_stacktrace.lo sanitizer_stacktrace_libcdep.lo \ - sanitizer_stacktrace_sparc.lo sanitizer_symbolizer_mac.lo \ - sanitizer_symbolizer_report.lo sanitizer_stacktrace_printer.lo \ + sanitizer_procmaps_solaris.lo sanitizer_range.lo \ + sanitizer_solaris.lo sanitizer_stack_store.lo \ + sanitizer_stackdepot.lo sanitizer_stacktrace.lo \ + sanitizer_stacktrace_libcdep.lo sanitizer_stacktrace_sparc.lo \ + sanitizer_symbolizer_mac.lo sanitizer_symbolizer_report.lo \ + sanitizer_stacktrace_printer.lo \ sanitizer_stoptheworld_linux_libcdep.lo \ sanitizer_stoptheworld_mac.lo sanitizer_suppressions.lo \ sanitizer_symbolizer.lo sanitizer_symbolizer_libbacktrace.lo \ sanitizer_symbolizer_libcdep.lo \ sanitizer_symbolizer_posix_libcdep.lo \ sanitizer_symbolizer_win.lo sanitizer_termination.lo \ - sanitizer_thread_registry.lo sanitizer_tls_get_addr.lo \ - sanitizer_unwind_linux_libcdep.lo sanitizer_unwind_win.lo \ - sanitizer_win.lo + sanitizer_thread_arg_retval.lo sanitizer_thread_registry.lo \ + sanitizer_tls_get_addr.lo sanitizer_unwind_linux_libcdep.lo \ + sanitizer_unwind_win.lo sanitizer_win.lo am_libsanitizer_common_la_OBJECTS = $(am__objects_1) libsanitizer_common_la_OBJECTS = $(am_libsanitizer_common_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) @@ -390,6 +392,7 @@ sanitizer_common_files = \ sanitizer_coverage_libcdep_new.cpp \ sanitizer_deadlock_detector1.cpp \ sanitizer_deadlock_detector2.cpp \ + sanitizer_dl.cpp \ sanitizer_errno.cpp \ sanitizer_file.cpp \ sanitizer_flags.cpp \ @@ -416,6 +419,7 @@ sanitizer_common_files = \ sanitizer_procmaps_linux.cpp \ sanitizer_procmaps_mac.cpp \ sanitizer_procmaps_solaris.cpp \ + sanitizer_range.cpp \ sanitizer_solaris.cpp \ sanitizer_stack_store.cpp \ sanitizer_stackdepot.cpp \ @@ -434,6 +438,7 @@ sanitizer_common_files = \ sanitizer_symbolizer_posix_libcdep.cpp \ sanitizer_symbolizer_win.cpp \ sanitizer_termination.cpp \ + sanitizer_thread_arg_retval.cpp \ sanitizer_thread_registry.cpp \ sanitizer_tls_get_addr.cpp \ sanitizer_unwind_linux_libcdep.cpp \ @@ -546,6 +551,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_coverage_libcdep_new.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_deadlock_detector1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_deadlock_detector2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_dl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_errno.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_file.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_flag_parser.Plo@am__quote@ @@ -572,6 +578,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_procmaps_linux.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_procmaps_mac.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_procmaps_solaris.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_range.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_solaris.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_stack_store.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_stackdepot.Plo@am__quote@ @@ -590,6 +597,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_symbolizer_report.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_symbolizer_win.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_termination.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_thread_arg_retval.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_thread_registry.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_tls_get_addr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_unwind_linux_libcdep.Plo@am__quote@ diff --git a/libsanitizer/sanitizer_common/sanitizer_allocator.cpp b/libsanitizer/sanitizer_common/sanitizer_allocator.cpp index 03392b61503b..0513ae36fbc7 100644 --- a/libsanitizer/sanitizer_common/sanitizer_allocator.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_allocator.cpp @@ -138,14 +138,20 @@ void InternalAllocatorUnlock() SANITIZER_NO_THREAD_SAFETY_ANALYSIS { // LowLevelAllocator constexpr uptr kLowLevelAllocatorDefaultAlignment = 8; +constexpr uptr kMinNumPagesRounded = 16; +constexpr uptr kMinRoundedSize = 65536; static uptr low_level_alloc_min_alignment = kLowLevelAllocatorDefaultAlignment; static LowLevelAllocateCallback low_level_alloc_callback; +static LowLevelAllocator Alloc; +LowLevelAllocator &GetGlobalLowLevelAllocator() { return Alloc; } + void *LowLevelAllocator::Allocate(uptr size) { // Align allocation size. size = RoundUpTo(size, low_level_alloc_min_alignment); if (allocated_end_ - allocated_current_ < (sptr)size) { - uptr size_to_allocate = RoundUpTo(size, GetPageSizeCached()); + uptr size_to_allocate = RoundUpTo( + size, Min(GetPageSizeCached() * kMinNumPagesRounded, kMinRoundedSize)); allocated_current_ = (char *)MmapOrDie(size_to_allocate, __func__); allocated_end_ = allocated_current_ + size_to_allocate; if (low_level_alloc_callback) { diff --git a/libsanitizer/sanitizer_common/sanitizer_allocator.h b/libsanitizer/sanitizer_common/sanitizer_allocator.h index 76b936ff5eaa..0b28f86d1408 100644 --- a/libsanitizer/sanitizer_common/sanitizer_allocator.h +++ b/libsanitizer/sanitizer_common/sanitizer_allocator.h @@ -62,6 +62,13 @@ inline void RandomShuffle(T *a, u32 n, u32 *rand_state) { *rand_state = state; } +struct NoOpMapUnmapCallback { + void OnMap(uptr p, uptr size) const {} + void OnMapSecondary(uptr p, uptr size, uptr user_begin, + uptr user_size) const {} + void OnUnmap(uptr p, uptr size) const {} +}; + #include "sanitizer_allocator_size_class_map.h" #include "sanitizer_allocator_stats.h" #include "sanitizer_allocator_primary64.h" diff --git a/libsanitizer/sanitizer_common/sanitizer_allocator_combined.h b/libsanitizer/sanitizer_common/sanitizer_allocator_combined.h index b76d36dcf5a4..49940d9b5d50 100644 --- a/libsanitizer/sanitizer_common/sanitizer_allocator_combined.h +++ b/libsanitizer/sanitizer_common/sanitizer_allocator_combined.h @@ -29,9 +29,9 @@ class CombinedAllocator { LargeMmapAllocatorPtrArray, typename PrimaryAllocator::AddressSpaceView>; - void InitLinkerInitialized(s32 release_to_os_interval_ms) { - stats_.InitLinkerInitialized(); - primary_.Init(release_to_os_interval_ms); + void InitLinkerInitialized(s32 release_to_os_interval_ms, + uptr heap_start = 0) { + primary_.Init(release_to_os_interval_ms, heap_start); secondary_.InitLinkerInitialized(); } diff --git a/libsanitizer/sanitizer_common/sanitizer_allocator_interface.h b/libsanitizer/sanitizer_common/sanitizer_allocator_interface.h index 8f3b71eb6ce7..de2b271fb0ed 100644 --- a/libsanitizer/sanitizer_common/sanitizer_allocator_interface.h +++ b/libsanitizer/sanitizer_common/sanitizer_allocator_interface.h @@ -25,6 +25,8 @@ SANITIZER_INTERFACE_ATTRIBUTE const void *__sanitizer_get_allocated_begin( const void *p); SANITIZER_INTERFACE_ATTRIBUTE uptr __sanitizer_get_allocated_size(const void *p); +SANITIZER_INTERFACE_ATTRIBUTE uptr +__sanitizer_get_allocated_size_fast(const void *p); SANITIZER_INTERFACE_ATTRIBUTE uptr __sanitizer_get_current_allocated_bytes(); SANITIZER_INTERFACE_ATTRIBUTE uptr __sanitizer_get_heap_size(); SANITIZER_INTERFACE_ATTRIBUTE uptr __sanitizer_get_free_bytes(); diff --git a/libsanitizer/sanitizer_common/sanitizer_allocator_primary32.h b/libsanitizer/sanitizer_common/sanitizer_allocator_primary32.h index f2471efced61..52fe3fe3d15b 100644 --- a/libsanitizer/sanitizer_common/sanitizer_allocator_primary32.h +++ b/libsanitizer/sanitizer_common/sanitizer_allocator_primary32.h @@ -353,7 +353,7 @@ class SizeClassAllocator32 { DCHECK_GT(max_count, 0); TransferBatch *b = nullptr; constexpr uptr kShuffleArraySize = 48; - uptr shuffle_array[kShuffleArraySize]; + UNINITIALIZED uptr shuffle_array[kShuffleArraySize]; uptr count = 0; for (uptr i = region; i < region + n_chunks * size; i += size) { shuffle_array[count++] = i; diff --git a/libsanitizer/sanitizer_common/sanitizer_allocator_primary64.h b/libsanitizer/sanitizer_common/sanitizer_allocator_primary64.h index 66ba71d325da..d77bc05b7802 100644 --- a/libsanitizer/sanitizer_common/sanitizer_allocator_primary64.h +++ b/libsanitizer/sanitizer_common/sanitizer_allocator_primary64.h @@ -635,8 +635,9 @@ class SizeClassAllocator64 { return kUsingConstantSpaceBeg ? kSpaceBeg : NonConstSpaceBeg; } uptr SpaceEnd() const { return SpaceBeg() + kSpaceSize; } - // kRegionSize must be >= 2^32. - COMPILER_CHECK((kRegionSize) >= (1ULL << (SANITIZER_WORDSIZE / 2))); + // kRegionSize should be able to satisfy the largest size class. + static_assert(kRegionSize >= SizeClassMap::kMaxSize, + "Region size exceed largest size"); // kRegionSize must be <= 2^36, see CompactPtrT. COMPILER_CHECK((kRegionSize) <= (1ULL << (SANITIZER_WORDSIZE / 2 + 4))); // Call mmap for user memory with at least this size. diff --git a/libsanitizer/sanitizer_common/sanitizer_allocator_secondary.h b/libsanitizer/sanitizer_common/sanitizer_allocator_secondary.h index 157645555604..0607819e7ef7 100644 --- a/libsanitizer/sanitizer_common/sanitizer_allocator_secondary.h +++ b/libsanitizer/sanitizer_common/sanitizer_allocator_secondary.h @@ -82,7 +82,7 @@ class LargeMmapAllocator { InitLinkerInitialized(); } - void *Allocate(AllocatorStats *stat, uptr size, uptr alignment) { + void *Allocate(AllocatorStats *stat, const uptr size, uptr alignment) { CHECK(IsPowerOfTwo(alignment)); uptr map_size = RoundUpMapSize(size); if (alignment > page_size_) @@ -99,11 +99,11 @@ class LargeMmapAllocator { if (!map_beg) return nullptr; CHECK(IsAligned(map_beg, page_size_)); - MapUnmapCallback().OnMap(map_beg, map_size); uptr map_end = map_beg + map_size; uptr res = map_beg + page_size_; if (res & (alignment - 1)) // Align. res += alignment - (res & (alignment - 1)); + MapUnmapCallback().OnMapSecondary(map_beg, map_size, res, size); CHECK(IsAligned(res, alignment)); CHECK(IsAligned(res, page_size_)); CHECK_GE(res + size, map_beg); diff --git a/libsanitizer/sanitizer_common/sanitizer_allocator_stats.h b/libsanitizer/sanitizer_common/sanitizer_allocator_stats.h index 6f14e3863c31..ae4dac9c8c96 100644 --- a/libsanitizer/sanitizer_common/sanitizer_allocator_stats.h +++ b/libsanitizer/sanitizer_common/sanitizer_allocator_stats.h @@ -25,19 +25,13 @@ typedef uptr AllocatorStatCounters[AllocatorStatCount]; // Per-thread stats, live in per-thread cache. class AllocatorStats { public: - void Init() { - internal_memset(this, 0, sizeof(*this)); - } - void InitLinkerInitialized() {} - + void Init() { internal_memset(this, 0, sizeof(*this)); } void Add(AllocatorStat i, uptr v) { - v += atomic_load(&stats_[i], memory_order_relaxed); - atomic_store(&stats_[i], v, memory_order_relaxed); + atomic_fetch_add(&stats_[i], v, memory_order_relaxed); } void Sub(AllocatorStat i, uptr v) { - v = atomic_load(&stats_[i], memory_order_relaxed) - v; - atomic_store(&stats_[i], v, memory_order_relaxed); + atomic_fetch_sub(&stats_[i], v, memory_order_relaxed); } void Set(AllocatorStat i, uptr v) { @@ -58,17 +52,13 @@ class AllocatorStats { // Global stats, used for aggregation and querying. class AllocatorGlobalStats : public AllocatorStats { public: - void InitLinkerInitialized() { - next_ = this; - prev_ = this; - } void Init() { internal_memset(this, 0, sizeof(*this)); - InitLinkerInitialized(); } void Register(AllocatorStats *s) { SpinMutexLock l(&mu_); + LazyInit(); s->next_ = next_; s->prev_ = this; next_->prev_ = s; @@ -87,7 +77,7 @@ class AllocatorGlobalStats : public AllocatorStats { internal_memset(s, 0, AllocatorStatCount * sizeof(uptr)); SpinMutexLock l(&mu_); const AllocatorStats *stats = this; - for (;;) { + for (; stats;) { for (int i = 0; i < AllocatorStatCount; i++) s[i] += stats->Get(AllocatorStat(i)); stats = stats->next_; @@ -100,6 +90,13 @@ class AllocatorGlobalStats : public AllocatorStats { } private: + void LazyInit() { + if (!next_) { + next_ = this; + prev_ = this; + } + } + mutable StaticSpinMutex mu_; }; diff --git a/libsanitizer/sanitizer_common/sanitizer_array_ref.h b/libsanitizer/sanitizer_common/sanitizer_array_ref.h new file mode 100644 index 000000000000..28d125383da4 --- /dev/null +++ b/libsanitizer/sanitizer_common/sanitizer_array_ref.h @@ -0,0 +1,123 @@ +//===-- sanitizer_array_ref.h -----------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef SANITIZER_ARRAY_REF_H +#define SANITIZER_ARRAY_REF_H + +#include "sanitizer_internal_defs.h" + +namespace __sanitizer { + +/// ArrayRef - Represent a constant reference to an array (0 or more elements +/// consecutively in memory), i.e. a start pointer and a length. It allows +/// various APIs to take consecutive elements easily and conveniently. +/// +/// This class does not own the underlying data, it is expected to be used in +/// situations where the data resides in some other buffer, whose lifetime +/// extends past that of the ArrayRef. For this reason, it is not in general +/// safe to store an ArrayRef. +/// +/// This is intended to be trivially copyable, so it should be passed by +/// value. +template +class ArrayRef { + public: + constexpr ArrayRef() {} + constexpr ArrayRef(const T *begin, const T *end) : begin_(begin), end_(end) { + DCHECK(empty() || begin); + } + constexpr ArrayRef(const T *data, uptr length) + : ArrayRef(data, data + length) {} + template + constexpr ArrayRef(const T (&src)[N]) : ArrayRef(src, src + N) {} + template + constexpr ArrayRef(const C &src) + : ArrayRef(src.data(), src.data() + src.size()) {} + ArrayRef(const T &one_elt) : ArrayRef(&one_elt, &one_elt + 1) {} + + const T *data() const { return empty() ? nullptr : begin_; } + + const T *begin() const { return begin_; } + const T *end() const { return end_; } + + bool empty() const { return begin_ == end_; } + + uptr size() const { return end_ - begin_; } + + /// equals - Check for element-wise equality. + bool equals(ArrayRef rhs) const { + if (size() != rhs.size()) + return false; + auto r = rhs.begin(); + for (auto &l : *this) { + if (!(l == *r)) + return false; + ++r; + } + return true; + } + + /// slice(n, m) - Chop off the first N elements of the array, and keep M + /// elements in the array. + ArrayRef slice(uptr N, uptr M) const { + DCHECK_LE(N + M, size()); + return ArrayRef(data() + N, M); + } + + /// slice(n) - Chop off the first N elements of the array. + ArrayRef slice(uptr N) const { return slice(N, size() - N); } + + /// Drop the first \p N elements of the array. + ArrayRef drop_front(uptr N = 1) const { + DCHECK_GE(size(), N); + return slice(N, size() - N); + } + + /// Drop the last \p N elements of the array. + ArrayRef drop_back(uptr N = 1) const { + DCHECK_GE(size(), N); + return slice(0, size() - N); + } + + /// Return a copy of *this with only the first \p N elements. + ArrayRef take_front(uptr N = 1) const { + if (N >= size()) + return *this; + return drop_back(size() - N); + } + + /// Return a copy of *this with only the last \p N elements. + ArrayRef take_back(uptr N = 1) const { + if (N >= size()) + return *this; + return drop_front(size() - N); + } + + const T &operator[](uptr index) const { + DCHECK_LT(index, size()); + return begin_[index]; + } + + private: + const T *begin_ = nullptr; + const T *end_ = nullptr; +}; + +template +inline bool operator==(ArrayRef lhs, ArrayRef rhs) { + return lhs.equals(rhs); +} + +template +inline bool operator!=(ArrayRef lhs, ArrayRef rhs) { + return !(lhs == rhs); +} + +} // namespace __sanitizer + +#endif // SANITIZER_ARRAY_REF_H diff --git a/libsanitizer/sanitizer_common/sanitizer_asm.h b/libsanitizer/sanitizer_common/sanitizer_asm.h index 9ebba91da73f..3c9bbdc9678b 100644 --- a/libsanitizer/sanitizer_common/sanitizer_asm.h +++ b/libsanitizer/sanitizer_common/sanitizer_asm.h @@ -42,13 +42,57 @@ # define CFI_RESTORE(reg) #endif +#if defined(__x86_64__) || defined(__i386__) || defined(__sparc__) +# define ASM_TAIL_CALL jmp +#elif defined(__arm__) || defined(__aarch64__) || defined(__mips__) || \ + defined(__powerpc__) || defined(__loongarch_lp64) +# define ASM_TAIL_CALL b +#elif defined(__s390__) +# define ASM_TAIL_CALL jg +#elif defined(__riscv) +# define ASM_TAIL_CALL tail +#endif + +#if defined(__ELF__) && defined(__x86_64__) || defined(__i386__) || \ + defined(__riscv) +# define ASM_PREEMPTIBLE_SYM(sym) sym@plt +#else +# define ASM_PREEMPTIBLE_SYM(sym) sym +#endif + #if !defined(__APPLE__) # define ASM_HIDDEN(symbol) .hidden symbol # define ASM_TYPE_FUNCTION(symbol) .type symbol, %function # define ASM_SIZE(symbol) .size symbol, .-symbol # define ASM_SYMBOL(symbol) symbol # define ASM_SYMBOL_INTERCEPTOR(symbol) symbol -# define ASM_WRAPPER_NAME(symbol) __interceptor_##symbol +# if defined(__i386__) || defined(__powerpc__) || defined(__s390__) || \ + defined(__sparc__) +// For details, see interception.h +# define ASM_WRAPPER_NAME(symbol) __interceptor_##symbol +# define ASM_TRAMPOLINE_ALIAS(symbol, name) \ + .weak symbol; \ + .set symbol, ASM_WRAPPER_NAME(name) +# define ASM_INTERCEPTOR_TRAMPOLINE(name) +# define ASM_INTERCEPTOR_TRAMPOLINE_SUPPORT 0 +# else // Architecture supports interceptor trampoline +// Keep trampoline implementation in sync with interception/interception.h +# define ASM_WRAPPER_NAME(symbol) ___interceptor_##symbol +# define ASM_TRAMPOLINE_ALIAS(symbol, name) \ + .weak symbol; \ + .set symbol, __interceptor_trampoline_##name +# define ASM_INTERCEPTOR_TRAMPOLINE(name) \ + .weak __interceptor_##name; \ + .set __interceptor_##name, ASM_WRAPPER_NAME(name); \ + .globl __interceptor_trampoline_##name; \ + ASM_TYPE_FUNCTION(__interceptor_trampoline_##name); \ + __interceptor_trampoline_##name: \ + CFI_STARTPROC; \ + ASM_TAIL_CALL ASM_PREEMPTIBLE_SYM(__interceptor_##name); \ + CFI_ENDPROC; \ + ASM_SIZE(__interceptor_trampoline_##name) +# define ASM_INTERCEPTOR_TRAMPOLINE_SUPPORT 1 +# endif // Architecture supports interceptor trampoline #else # define ASM_HIDDEN(symbol) # define ASM_TYPE_FUNCTION(symbol) diff --git a/libsanitizer/sanitizer_common/sanitizer_common.cpp b/libsanitizer/sanitizer_common/sanitizer_common.cpp index 79b7748b8f6e..5efdd864295b 100644 --- a/libsanitizer/sanitizer_common/sanitizer_common.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_common.cpp @@ -115,8 +115,9 @@ void ReportErrorSummary(const char *error_message, const char *alt_tool_name) { if (!common_flags()->print_summary) return; InternalScopedString buff; - buff.append("SUMMARY: %s: %s", - alt_tool_name ? alt_tool_name : SanitizerToolName, error_message); + buff.AppendF("SUMMARY: %s: %s", + alt_tool_name ? alt_tool_name : SanitizerToolName, + error_message); __sanitizer_report_error_summary(buff.data()); } diff --git a/libsanitizer/sanitizer_common/sanitizer_common.h b/libsanitizer/sanitizer_common/sanitizer_common.h index 61d44020ed99..6b327a4aa16f 100644 --- a/libsanitizer/sanitizer_common/sanitizer_common.h +++ b/libsanitizer/sanitizer_common/sanitizer_common.h @@ -117,6 +117,7 @@ void *MmapAlignedOrDieOnFatalError(uptr size, uptr alignment, // unaccessible memory. bool MprotectNoAccess(uptr addr, uptr size); bool MprotectReadOnly(uptr addr, uptr size); +bool MprotectReadWrite(uptr addr, uptr size); void MprotectMallocZones(void *addr, int prot); @@ -207,6 +208,11 @@ void ParseUnixMemoryProfile(fill_profile_f cb, uptr *stats, char *smaps, // Simple low-level (mmap-based) allocator for internal use. Doesn't have // constructor, so all instances of LowLevelAllocator should be // linker initialized. +// +// NOTE: Users should instead use the singleton provided via +// `GetGlobalLowLevelAllocator()` rather than create a new one. This way, the +// number of mmap fragments can be reduced and use the same contiguous mmap +// provided by this singleton. class LowLevelAllocator { public: // Requires an external lock. @@ -223,6 +229,8 @@ typedef void (*LowLevelAllocateCallback)(uptr ptr, uptr size); // Passing NULL removes the callback. void SetLowLevelAllocateCallback(LowLevelAllocateCallback callback); +LowLevelAllocator &GetGlobalLowLevelAllocator(); + // IO void CatastrophicErrorWrite(const char *buffer, uptr length); void RawWrite(const char *buffer); @@ -519,8 +527,8 @@ class InternalMmapVectorNoCtor { return data_[i]; } void push_back(const T &element) { - CHECK_LE(size_, capacity()); - if (size_ == capacity()) { + if (UNLIKELY(size_ >= capacity())) { + CHECK_EQ(size_, capacity()); uptr new_capacity = RoundUpToPowerOfTwo(size_ + 1); Realloc(new_capacity); } @@ -580,7 +588,7 @@ class InternalMmapVectorNoCtor { } private: - void Realloc(uptr new_capacity) { + NOINLINE void Realloc(uptr new_capacity) { CHECK_GT(new_capacity, 0); CHECK_LE(size_, new_capacity); uptr new_capacity_bytes = @@ -635,7 +643,8 @@ class InternalScopedString { buffer_.resize(1); buffer_[0] = '\0'; } - void append(const char *format, ...) FORMAT(2, 3); + void Append(const char *str); + void AppendF(const char *format, ...) FORMAT(2, 3); const char *data() const { return buffer_.data(); } char *data() { return buffer_.data(); } @@ -796,7 +805,11 @@ inline const char *ModuleArchToString(ModuleArch arch) { return ""; } +#if SANITIZER_APPLE +const uptr kModuleUUIDSize = 16; +#else const uptr kModuleUUIDSize = 32; +#endif const uptr kMaxSegName = 16; // Represents a binary loaded into virtual memory (e.g. this can be an @@ -1079,20 +1092,6 @@ inline u32 GetNumberOfCPUsCached() { return NumberOfCPUsCached; } -template -class ArrayRef { - public: - ArrayRef() {} - ArrayRef(T *begin, T *end) : begin_(begin), end_(end) {} - - T *begin() { return begin_; } - T *end() { return end_; } - - private: - T *begin_ = nullptr; - T *end_ = nullptr; -}; - } // namespace __sanitizer inline void *operator new(__sanitizer::operator_new_size_type size, diff --git a/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc b/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc index 490a8b12d8b1..607ecae6808b 100644 --- a/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc +++ b/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc @@ -26,25 +26,24 @@ // COMMON_INTERCEPTOR_SET_PTHREAD_NAME // COMMON_INTERCEPTOR_HANDLE_RECVMSG // COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED -// COMMON_INTERCEPTOR_MEMSET_IMPL -// COMMON_INTERCEPTOR_MEMMOVE_IMPL -// COMMON_INTERCEPTOR_MEMCPY_IMPL // COMMON_INTERCEPTOR_MMAP_IMPL +// COMMON_INTERCEPTOR_MUNMAP_IMPL // COMMON_INTERCEPTOR_COPY_STRING // COMMON_INTERCEPTOR_STRNDUP_IMPL // COMMON_INTERCEPTOR_STRERROR //===----------------------------------------------------------------------===// +#include + #include "interception/interception.h" #include "sanitizer_addrhashmap.h" +#include "sanitizer_dl.h" #include "sanitizer_errno.h" #include "sanitizer_placement_new.h" #include "sanitizer_platform_interceptors.h" #include "sanitizer_symbolizer.h" #include "sanitizer_tls_get_addr.h" -#include - #if SANITIZER_INTERCEPTOR_HOOKS #define CALL_WEAK_INTERCEPTOR_HOOK(f, ...) f(__VA_ARGS__); #define DECLARE_WEAK_INTERCEPTOR_HOOK(f, ...) \ @@ -198,15 +197,6 @@ extern const short *_tolower_tab_; #define wait4 __wait4_time64 #endif -// Platform-specific options. -#if SANITIZER_APPLE -#define PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE 0 -#elif SANITIZER_WINDOWS64 -#define PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE 0 -#else -#define PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE 1 -#endif // SANITIZER_APPLE - #ifndef COMMON_INTERCEPTOR_INITIALIZE_RANGE #define COMMON_INTERCEPTOR_INITIALIZE_RANGE(p, size) {} #endif @@ -302,53 +292,17 @@ extern const short *_tolower_tab_; COMMON_INTERCEPT_FUNCTION(fn) #endif -#ifndef COMMON_INTERCEPTOR_MEMSET_IMPL -#define COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, dst, v, size) \ - { \ - if (COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED) \ - return internal_memset(dst, v, size); \ - COMMON_INTERCEPTOR_ENTER(ctx, memset, dst, v, size); \ - if (common_flags()->intercept_intrin) \ - COMMON_INTERCEPTOR_WRITE_RANGE(ctx, dst, size); \ - return REAL(memset)(dst, v, size); \ - } -#endif - -#ifndef COMMON_INTERCEPTOR_MEMMOVE_IMPL -#define COMMON_INTERCEPTOR_MEMMOVE_IMPL(ctx, dst, src, size) \ - { \ - if (COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED) \ - return internal_memmove(dst, src, size); \ - COMMON_INTERCEPTOR_ENTER(ctx, memmove, dst, src, size); \ - if (common_flags()->intercept_intrin) { \ - COMMON_INTERCEPTOR_WRITE_RANGE(ctx, dst, size); \ - COMMON_INTERCEPTOR_READ_RANGE(ctx, src, size); \ - } \ - return REAL(memmove)(dst, src, size); \ - } -#endif - -#ifndef COMMON_INTERCEPTOR_MEMCPY_IMPL -#define COMMON_INTERCEPTOR_MEMCPY_IMPL(ctx, dst, src, size) \ - { \ - if (COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED) { \ - return internal_memmove(dst, src, size); \ - } \ - COMMON_INTERCEPTOR_ENTER(ctx, memcpy, dst, src, size); \ - if (common_flags()->intercept_intrin) { \ - COMMON_INTERCEPTOR_WRITE_RANGE(ctx, dst, size); \ - COMMON_INTERCEPTOR_READ_RANGE(ctx, src, size); \ - } \ - return REAL(memcpy)(dst, src, size); \ - } -#endif - #ifndef COMMON_INTERCEPTOR_MMAP_IMPL #define COMMON_INTERCEPTOR_MMAP_IMPL(ctx, mmap, addr, sz, prot, flags, fd, \ off) \ { return REAL(mmap)(addr, sz, prot, flags, fd, off); } #endif +#ifndef COMMON_INTERCEPTOR_MUNMAP_IMPL +#define COMMON_INTERCEPTOR_MUNMAP_IMPL(ctx, addr, sz) \ + { return REAL(munmap)(addr, sz); } +#endif + #ifndef COMMON_INTERCEPTOR_COPY_STRING #define COMMON_INTERCEPTOR_COPY_STRING(ctx, to, from, size) {} #endif @@ -492,11 +446,13 @@ INTERCEPTOR(char*, textdomain, const char *domainname) { #define INIT_TEXTDOMAIN #endif -#if SANITIZER_INTERCEPT_STRCMP +#if SANITIZER_INTERCEPT_STRCMP || SANITIZER_INTERCEPT_MEMCMP static inline int CharCmpX(unsigned char c1, unsigned char c2) { return (c1 == c2) ? 0 : (c1 < c2) ? -1 : 1; } +#endif +#if SANITIZER_INTERCEPT_STRCMP DECLARE_WEAK_INTERCEPTOR_HOOK(__sanitizer_weak_hook_strcmp, uptr called_pc, const char *s1, const char *s2, int result) @@ -841,57 +797,6 @@ INTERCEPTOR(char *, strpbrk, const char *s1, const char *s2) { #define INIT_STRPBRK #endif -#if SANITIZER_INTERCEPT_MEMSET -INTERCEPTOR(void *, memset, void *dst, int v, uptr size) { - void *ctx; - COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, dst, v, size); -} - -#define INIT_MEMSET COMMON_INTERCEPT_FUNCTION(memset) -#else -#define INIT_MEMSET -#endif - -#if SANITIZER_INTERCEPT_MEMMOVE -INTERCEPTOR(void *, memmove, void *dst, const void *src, uptr size) { - void *ctx; - COMMON_INTERCEPTOR_MEMMOVE_IMPL(ctx, dst, src, size); -} - -#define INIT_MEMMOVE COMMON_INTERCEPT_FUNCTION(memmove) -#else -#define INIT_MEMMOVE -#endif - -#if SANITIZER_INTERCEPT_MEMCPY -INTERCEPTOR(void *, memcpy, void *dst, const void *src, uptr size) { - // On OS X, calling internal_memcpy here will cause memory corruptions, - // because memcpy and memmove are actually aliases of the same - // implementation. We need to use internal_memmove here. - // N.B.: If we switch this to internal_ we'll have to use internal_memmove - // due to memcpy being an alias of memmove on OS X. - void *ctx; -#if PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE - COMMON_INTERCEPTOR_MEMCPY_IMPL(ctx, dst, src, size); -#else - COMMON_INTERCEPTOR_MEMMOVE_IMPL(ctx, dst, src, size); -#endif -} - -#define INIT_MEMCPY \ - do { \ - if (PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE) { \ - COMMON_INTERCEPT_FUNCTION(memcpy); \ - } else { \ - ASSIGN_REAL(memcpy, memmove); \ - } \ - CHECK(REAL(memcpy)); \ - } while (false) - -#else -#define INIT_MEMCPY -#endif - #if SANITIZER_INTERCEPT_MEMCMP DECLARE_WEAK_INTERCEPTOR_HOOK(__sanitizer_weak_hook_memcmp, uptr called_pc, const void *s1, const void *s2, uptr n, @@ -1589,6 +1494,16 @@ VSCANF_INTERCEPTOR_IMPL(__isoc99_vsscanf, false, str, format, ap) INTERCEPTOR(int, __isoc99_vfscanf, void *stream, const char *format, va_list ap) VSCANF_INTERCEPTOR_IMPL(__isoc99_vfscanf, false, stream, format, ap) + +INTERCEPTOR(int, __isoc23_vscanf, const char *format, va_list ap) +VSCANF_INTERCEPTOR_IMPL(__isoc23_vscanf, false, format, ap) + +INTERCEPTOR(int, __isoc23_vsscanf, const char *str, const char *format, + va_list ap) +VSCANF_INTERCEPTOR_IMPL(__isoc23_vsscanf, false, str, format, ap) + +INTERCEPTOR(int, __isoc23_vfscanf, void *stream, const char *format, va_list ap) +VSCANF_INTERCEPTOR_IMPL(__isoc23_vfscanf, false, stream, format, ap) #endif // SANITIZER_INTERCEPT_ISOC99_SCANF INTERCEPTOR(int, scanf, const char *format, ...) @@ -1609,6 +1524,15 @@ FORMAT_INTERCEPTOR_IMPL(__isoc99_fscanf, __isoc99_vfscanf, stream, format) INTERCEPTOR(int, __isoc99_sscanf, const char *str, const char *format, ...) FORMAT_INTERCEPTOR_IMPL(__isoc99_sscanf, __isoc99_vsscanf, str, format) + +INTERCEPTOR(int, __isoc23_scanf, const char *format, ...) +FORMAT_INTERCEPTOR_IMPL(__isoc23_scanf, __isoc23_vscanf, format) + +INTERCEPTOR(int, __isoc23_fscanf, void *stream, const char *format, ...) +FORMAT_INTERCEPTOR_IMPL(__isoc23_fscanf, __isoc23_vfscanf, stream, format) + +INTERCEPTOR(int, __isoc23_sscanf, const char *str, const char *format, ...) +FORMAT_INTERCEPTOR_IMPL(__isoc23_sscanf, __isoc23_vsscanf, str, format) #endif #endif @@ -1632,7 +1556,13 @@ FORMAT_INTERCEPTOR_IMPL(__isoc99_sscanf, __isoc99_vsscanf, str, format) COMMON_INTERCEPT_FUNCTION(__isoc99_fscanf); \ COMMON_INTERCEPT_FUNCTION(__isoc99_vscanf); \ COMMON_INTERCEPT_FUNCTION(__isoc99_vsscanf); \ - COMMON_INTERCEPT_FUNCTION(__isoc99_vfscanf); + COMMON_INTERCEPT_FUNCTION(__isoc99_vfscanf); \ + COMMON_INTERCEPT_FUNCTION(__isoc23_scanf); \ + COMMON_INTERCEPT_FUNCTION(__isoc23_sscanf); \ + COMMON_INTERCEPT_FUNCTION(__isoc23_fscanf); \ + COMMON_INTERCEPT_FUNCTION(__isoc23_vscanf); \ + COMMON_INTERCEPT_FUNCTION(__isoc23_vsscanf); \ + COMMON_INTERCEPT_FUNCTION(__isoc23_vfscanf); #else #define INIT_ISOC99_SCANF #endif @@ -3416,7 +3346,8 @@ INTERCEPTOR(__sanitizer_dirent *, readdir, void *dirp) { // its metadata. See // https://github.com/google/sanitizers/issues/321. __sanitizer_dirent *res = REAL(readdir)(dirp); - if (res) COMMON_INTERCEPTOR_WRITE_RANGE(ctx, res, res->d_reclen); + if (res) + COMMON_INTERCEPTOR_WRITE_RANGE(ctx, res, __sanitizer_dirsiz(res)); return res; } @@ -3431,7 +3362,7 @@ INTERCEPTOR(int, readdir_r, void *dirp, __sanitizer_dirent *entry, if (!res) { COMMON_INTERCEPTOR_WRITE_RANGE(ctx, result, sizeof(*result)); if (*result) - COMMON_INTERCEPTOR_WRITE_RANGE(ctx, *result, (*result)->d_reclen); + COMMON_INTERCEPTOR_WRITE_RANGE(ctx, *result, __sanitizer_dirsiz(*result)); } return res; } @@ -3452,7 +3383,8 @@ INTERCEPTOR(__sanitizer_dirent64 *, readdir64, void *dirp) { // its metadata. See // https://github.com/google/sanitizers/issues/321. __sanitizer_dirent64 *res = REAL(readdir64)(dirp); - if (res) COMMON_INTERCEPTOR_WRITE_RANGE(ctx, res, res->d_reclen); + if (res) + COMMON_INTERCEPTOR_WRITE_RANGE(ctx, res, __sanitizer_dirsiz(res)); return res; } @@ -3467,7 +3399,7 @@ INTERCEPTOR(int, readdir64_r, void *dirp, __sanitizer_dirent64 *entry, if (!res) { COMMON_INTERCEPTOR_WRITE_RANGE(ctx, result, sizeof(*result)); if (*result) - COMMON_INTERCEPTOR_WRITE_RANGE(ctx, *result, (*result)->d_reclen); + COMMON_INTERCEPTOR_WRITE_RANGE(ctx, *result, __sanitizer_dirsiz(*result)); } return res; } @@ -3635,30 +3567,26 @@ UNUSED static inline void StrtolFixAndCheck(void *ctx, const char *nptr, (real_endptr - nptr) + 1 : 0); } - #if SANITIZER_INTERCEPT_STRTOIMAX -INTERCEPTOR(INTMAX_T, strtoimax, const char *nptr, char **endptr, int base) { - void *ctx; - COMMON_INTERCEPTOR_ENTER(ctx, strtoimax, nptr, endptr, base); - // FIXME: under ASan the call below may write to freed memory and corrupt - // its metadata. See - // https://github.com/google/sanitizers/issues/321. +template +static ALWAYS_INLINE auto StrtoimaxImpl(void *ctx, Fn real, const char *nptr, + char **endptr, int base) + -> decltype(real(nullptr, nullptr, 0)) { char *real_endptr; - INTMAX_T res = REAL(strtoimax)(nptr, &real_endptr, base); + auto res = real(nptr, &real_endptr, base); StrtolFixAndCheck(ctx, nptr, endptr, real_endptr, base); return res; } +INTERCEPTOR(INTMAX_T, strtoimax, const char *nptr, char **endptr, int base) { + void *ctx; + COMMON_INTERCEPTOR_ENTER(ctx, strtoimax, nptr, endptr, base); + return StrtoimaxImpl(ctx, REAL(strtoimax), nptr, endptr, base); +} INTERCEPTOR(UINTMAX_T, strtoumax, const char *nptr, char **endptr, int base) { void *ctx; COMMON_INTERCEPTOR_ENTER(ctx, strtoumax, nptr, endptr, base); - // FIXME: under ASan the call below may write to freed memory and corrupt - // its metadata. See - // https://github.com/google/sanitizers/issues/321. - char *real_endptr; - UINTMAX_T res = REAL(strtoumax)(nptr, &real_endptr, base); - StrtolFixAndCheck(ctx, nptr, endptr, real_endptr, base); - return res; + return StrtoimaxImpl(ctx, REAL(strtoumax), nptr, endptr, base); } #define INIT_STRTOIMAX \ @@ -3668,6 +3596,25 @@ INTERCEPTOR(UINTMAX_T, strtoumax, const char *nptr, char **endptr, int base) { #define INIT_STRTOIMAX #endif +#if SANITIZER_INTERCEPT_STRTOIMAX && SANITIZER_GLIBC +INTERCEPTOR(INTMAX_T, __isoc23_strtoimax, const char *nptr, char **endptr, int base) { + void *ctx; + COMMON_INTERCEPTOR_ENTER(ctx, __isoc23_strtoimax, nptr, endptr, base); + return StrtoimaxImpl(ctx, REAL(__isoc23_strtoimax), nptr, endptr, base); +} +INTERCEPTOR(UINTMAX_T, __isoc23_strtoumax, const char *nptr, char **endptr, int base) { + void *ctx; + COMMON_INTERCEPTOR_ENTER(ctx, __isoc23_strtoumax, nptr, endptr, base); + return StrtoimaxImpl(ctx, REAL(__isoc23_strtoumax), nptr, endptr, base); +} + +# define INIT_STRTOIMAX_C23 \ + COMMON_INTERCEPT_FUNCTION(__isoc23_strtoimax); \ + COMMON_INTERCEPT_FUNCTION(__isoc23_strtoumax); +#else +# define INIT_STRTOIMAX_C23 +#endif + #if SANITIZER_INTERCEPT_MBSTOWCS INTERCEPTOR(SIZE_T, mbstowcs, wchar_t *dest, const char *src, SIZE_T len) { void *ctx; @@ -4039,7 +3986,7 @@ static THREADLOCAL scandir_compar_f scandir_compar; static int wrapped_scandir_filter(const struct __sanitizer_dirent *dir) { COMMON_INTERCEPTOR_UNPOISON_PARAM(1); - COMMON_INTERCEPTOR_INITIALIZE_RANGE(dir, dir->d_reclen); + COMMON_INTERCEPTOR_INITIALIZE_RANGE(dir, __sanitizer_dirsiz(dir)); return scandir_filter(dir); } @@ -4047,9 +3994,9 @@ static int wrapped_scandir_compar(const struct __sanitizer_dirent **a, const struct __sanitizer_dirent **b) { COMMON_INTERCEPTOR_UNPOISON_PARAM(2); COMMON_INTERCEPTOR_INITIALIZE_RANGE(a, sizeof(*a)); - COMMON_INTERCEPTOR_INITIALIZE_RANGE(*a, (*a)->d_reclen); + COMMON_INTERCEPTOR_INITIALIZE_RANGE(*a, __sanitizer_dirsiz(*a)); COMMON_INTERCEPTOR_INITIALIZE_RANGE(b, sizeof(*b)); - COMMON_INTERCEPTOR_INITIALIZE_RANGE(*b, (*b)->d_reclen); + COMMON_INTERCEPTOR_INITIALIZE_RANGE(*b, __sanitizer_dirsiz(*b)); return scandir_compar(a, b); } @@ -4073,7 +4020,7 @@ INTERCEPTOR(int, scandir, char *dirp, __sanitizer_dirent ***namelist, COMMON_INTERCEPTOR_WRITE_RANGE(ctx, *namelist, sizeof(**namelist) * res); for (int i = 0; i < res; ++i) COMMON_INTERCEPTOR_WRITE_RANGE(ctx, (*namelist)[i], - (*namelist)[i]->d_reclen); + __sanitizer_dirsiz((*namelist)[i])); } return res; } @@ -4092,7 +4039,7 @@ static THREADLOCAL scandir64_compar_f scandir64_compar; static int wrapped_scandir64_filter(const struct __sanitizer_dirent64 *dir) { COMMON_INTERCEPTOR_UNPOISON_PARAM(1); - COMMON_INTERCEPTOR_INITIALIZE_RANGE(dir, dir->d_reclen); + COMMON_INTERCEPTOR_INITIALIZE_RANGE(dir, __sanitizer_dirsiz(dir)); return scandir64_filter(dir); } @@ -4100,9 +4047,9 @@ static int wrapped_scandir64_compar(const struct __sanitizer_dirent64 **a, const struct __sanitizer_dirent64 **b) { COMMON_INTERCEPTOR_UNPOISON_PARAM(2); COMMON_INTERCEPTOR_INITIALIZE_RANGE(a, sizeof(*a)); - COMMON_INTERCEPTOR_INITIALIZE_RANGE(*a, (*a)->d_reclen); + COMMON_INTERCEPTOR_INITIALIZE_RANGE(*a, __sanitizer_dirsiz(*a)); COMMON_INTERCEPTOR_INITIALIZE_RANGE(b, sizeof(*b)); - COMMON_INTERCEPTOR_INITIALIZE_RANGE(*b, (*b)->d_reclen); + COMMON_INTERCEPTOR_INITIALIZE_RANGE(*b, __sanitizer_dirsiz(*b)); return scandir64_compar(a, b); } @@ -4127,7 +4074,7 @@ INTERCEPTOR(int, scandir64, char *dirp, __sanitizer_dirent64 ***namelist, COMMON_INTERCEPTOR_WRITE_RANGE(ctx, *namelist, sizeof(**namelist) * res); for (int i = 0; i < res; ++i) COMMON_INTERCEPTOR_WRITE_RANGE(ctx, (*namelist)[i], - (*namelist)[i]->d_reclen); + __sanitizer_dirsiz((*namelist)[i])); } return res; } @@ -4404,12 +4351,16 @@ INTERCEPTOR(int, pthread_sigmask, int how, __sanitizer_sigset_t *set, INTERCEPTOR(int, backtrace, void **buffer, int size) { void *ctx; COMMON_INTERCEPTOR_ENTER(ctx, backtrace, buffer, size); - // FIXME: under ASan the call below may write to freed memory and corrupt - // its metadata. See - // https://github.com/google/sanitizers/issues/321. - int res = REAL(backtrace)(buffer, size); - if (res && buffer) + // 'buffer' might be freed memory, hence it is unsafe to directly call + // REAL(backtrace)(buffer, size). Instead, we use our own known-good + // scratch buffer. + void **scratch = (void**)InternalAlloc(sizeof(void*) * size); + int res = REAL(backtrace)(scratch, size); + if (res && buffer) { COMMON_INTERCEPTOR_WRITE_RANGE(ctx, buffer, res * sizeof(*buffer)); + internal_memcpy(buffer, scratch, res * sizeof(*buffer)); + } + InternalFree(scratch); return res; } @@ -4418,9 +4369,8 @@ INTERCEPTOR(char **, backtrace_symbols, void **buffer, int size) { COMMON_INTERCEPTOR_ENTER(ctx, backtrace_symbols, buffer, size); if (buffer && size) COMMON_INTERCEPTOR_READ_RANGE(ctx, buffer, size * sizeof(*buffer)); - // FIXME: under ASan the call below may write to freed memory and corrupt - // its metadata. See - // https://github.com/google/sanitizers/issues/321. + // The COMMON_INTERCEPTOR_READ_RANGE above ensures that 'buffer' is + // valid for reading. char **res = REAL(backtrace_symbols)(buffer, size); if (res && size) { COMMON_INTERCEPTOR_WRITE_RANGE(ctx, res, size * sizeof(*res)); @@ -4453,7 +4403,7 @@ INTERCEPTOR(void, _exit, int status) { #if SANITIZER_INTERCEPT___LIBC_MUTEX INTERCEPTOR(int, __libc_thr_setcancelstate, int state, int *oldstate) -ALIAS(WRAPPER_NAME(pthread_setcancelstate)); +ALIAS(WRAP(pthread_setcancelstate)); #define INIT___LIBC_THR_SETCANCELSTATE \ COMMON_INTERCEPT_FUNCTION(__libc_thr_setcancelstate) @@ -5484,9 +5434,7 @@ INTERCEPTOR(void *, __tls_get_addr, void *arg) { // On PowerPC, we also need to intercept __tls_get_addr_opt, which has // mostly the same semantics as __tls_get_addr, but its presence enables // some optimizations in linker (which are safe to ignore here). -extern "C" __attribute__((alias("__interceptor___tls_get_addr"), - visibility("default"))) -void *__tls_get_addr_opt(void *arg); +INTERCEPTOR(void *, __tls_get_addr_opt, void *arg) ALIAS(WRAP(__tls_get_addr)); #endif #else // SANITIZER_S390 // On s390, we have to intercept two functions here: @@ -5520,21 +5468,20 @@ INTERCEPTOR(uptr, __tls_get_addr_internal, void *arg) { #if SANITIZER_S390 && \ (SANITIZER_INTERCEPT_TLS_GET_ADDR || SANITIZER_INTERCEPT_TLS_GET_OFFSET) -extern "C" uptr __tls_get_offset(void *arg); -extern "C" uptr __interceptor___tls_get_offset(void *arg); // We need a hidden symbol aliasing the above, so that we can jump // directly to it from the assembly below. -extern "C" __attribute__((alias("__interceptor___tls_get_addr_internal"), - visibility("hidden"))) -uptr __tls_get_addr_hidden(void *arg); +extern "C" __attribute__((visibility("hidden"))) uptr __tls_get_addr_hidden( + void *arg) ALIAS(WRAP(__tls_get_addr_internal)); +extern "C" uptr __tls_get_offset(void *arg); +extern "C" uptr TRAMPOLINE(__tls_get_offset)(void *arg); +extern "C" uptr WRAP(__tls_get_offset)(void *arg); // Now carefully intercept __tls_get_offset. asm( ".text\n" // The __intercept_ version has to exist, so that gen_dynamic_list.py // exports our symbol. ".weak __tls_get_offset\n" - ".type __tls_get_offset, @function\n" - "__tls_get_offset:\n" + ".set __tls_get_offset, __interceptor___tls_get_offset\n" ".global __interceptor___tls_get_offset\n" ".type __interceptor___tls_get_offset, @function\n" "__interceptor___tls_get_offset:\n" @@ -5790,105 +5737,6 @@ INTERCEPTOR(int, capset, void *hdrp, const void *datap) { #define INIT_CAPGET #endif -#if SANITIZER_INTERCEPT_AEABI_MEM -INTERCEPTOR(void *, __aeabi_memmove, void *to, const void *from, uptr size) { - void *ctx; - COMMON_INTERCEPTOR_MEMMOVE_IMPL(ctx, to, from, size); -} - -INTERCEPTOR(void *, __aeabi_memmove4, void *to, const void *from, uptr size) { - void *ctx; - COMMON_INTERCEPTOR_MEMMOVE_IMPL(ctx, to, from, size); -} - -INTERCEPTOR(void *, __aeabi_memmove8, void *to, const void *from, uptr size) { - void *ctx; - COMMON_INTERCEPTOR_MEMMOVE_IMPL(ctx, to, from, size); -} - -INTERCEPTOR(void *, __aeabi_memcpy, void *to, const void *from, uptr size) { - void *ctx; - COMMON_INTERCEPTOR_MEMCPY_IMPL(ctx, to, from, size); -} - -INTERCEPTOR(void *, __aeabi_memcpy4, void *to, const void *from, uptr size) { - void *ctx; - COMMON_INTERCEPTOR_MEMCPY_IMPL(ctx, to, from, size); -} - -INTERCEPTOR(void *, __aeabi_memcpy8, void *to, const void *from, uptr size) { - void *ctx; - COMMON_INTERCEPTOR_MEMCPY_IMPL(ctx, to, from, size); -} - -// Note the argument order. -INTERCEPTOR(void *, __aeabi_memset, void *block, uptr size, int c) { - void *ctx; - COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, block, c, size); -} - -INTERCEPTOR(void *, __aeabi_memset4, void *block, uptr size, int c) { - void *ctx; - COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, block, c, size); -} - -INTERCEPTOR(void *, __aeabi_memset8, void *block, uptr size, int c) { - void *ctx; - COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, block, c, size); -} - -INTERCEPTOR(void *, __aeabi_memclr, void *block, uptr size) { - void *ctx; - COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, block, 0, size); -} - -INTERCEPTOR(void *, __aeabi_memclr4, void *block, uptr size) { - void *ctx; - COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, block, 0, size); -} - -INTERCEPTOR(void *, __aeabi_memclr8, void *block, uptr size) { - void *ctx; - COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, block, 0, size); -} - -#define INIT_AEABI_MEM \ - COMMON_INTERCEPT_FUNCTION(__aeabi_memmove); \ - COMMON_INTERCEPT_FUNCTION(__aeabi_memmove4); \ - COMMON_INTERCEPT_FUNCTION(__aeabi_memmove8); \ - COMMON_INTERCEPT_FUNCTION(__aeabi_memcpy); \ - COMMON_INTERCEPT_FUNCTION(__aeabi_memcpy4); \ - COMMON_INTERCEPT_FUNCTION(__aeabi_memcpy8); \ - COMMON_INTERCEPT_FUNCTION(__aeabi_memset); \ - COMMON_INTERCEPT_FUNCTION(__aeabi_memset4); \ - COMMON_INTERCEPT_FUNCTION(__aeabi_memset8); \ - COMMON_INTERCEPT_FUNCTION(__aeabi_memclr); \ - COMMON_INTERCEPT_FUNCTION(__aeabi_memclr4); \ - COMMON_INTERCEPT_FUNCTION(__aeabi_memclr8); -#else -#define INIT_AEABI_MEM -#endif // SANITIZER_INTERCEPT_AEABI_MEM - -#if SANITIZER_INTERCEPT___BZERO -INTERCEPTOR(void *, __bzero, void *block, uptr size) { - void *ctx; - COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, block, 0, size); -} -#define INIT___BZERO COMMON_INTERCEPT_FUNCTION(__bzero); -#else -#define INIT___BZERO -#endif // SANITIZER_INTERCEPT___BZERO - -#if SANITIZER_INTERCEPT_BZERO -INTERCEPTOR(void *, bzero, void *block, uptr size) { - void *ctx; - COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, block, 0, size); -} -#define INIT_BZERO COMMON_INTERCEPT_FUNCTION(bzero); -#else -#define INIT_BZERO -#endif // SANITIZER_INTERCEPT_BZERO - #if SANITIZER_INTERCEPT_FTIME INTERCEPTOR(int, ftime, __sanitizer_timeb *tp) { void *ctx; @@ -6460,7 +6308,36 @@ INTERCEPTOR(int, fclose, __sanitizer_FILE *fp) { INTERCEPTOR(void*, dlopen, const char *filename, int flag) { void *ctx; COMMON_INTERCEPTOR_ENTER_NOIGNORE(ctx, dlopen, filename, flag); - if (filename) COMMON_INTERCEPTOR_READ_STRING(ctx, filename, 0); + + if (filename) { + COMMON_INTERCEPTOR_READ_STRING(ctx, filename, 0); + +# if !SANITIZER_DYNAMIC + // We care about a very specific use-case: dladdr on + // statically-linked ASan may return
+ // instead of the library. + // We therefore only take effect if the sanitizer is statically + // linked, and we don't bother canonicalizing paths because + // dladdr should return the same address both times (we assume + // the user did not canonicalize the result from dladdr). + if (common_flags()->test_only_replace_dlopen_main_program) { + VPrintf(1, "dlopen interceptor: filename: %s\n", filename); + + const char *SelfFName = DladdrSelfFName(); + VPrintf(1, "dlopen interceptor: DladdrSelfFName: %p %s\n", + (void *)SelfFName, SelfFName); + + if (internal_strcmp(SelfFName, filename) == 0) { + // It's possible they copied the string from dladdr, so + // we do a string comparison rather than pointer comparison. + VPrintf(1, "dlopen interceptor: replacing %s because it matches %s\n", + filename, SelfFName); + filename = (char *)0; // RTLD_DEFAULT + } + } +# endif // !SANITIZER_DYNAMIC + } + void *res = COMMON_INTERCEPTOR_DLOPEN(filename, flag); Symbolizer::GetOrInit()->InvalidateModuleList(); COMMON_INTERCEPTOR_LIBRARY_LOADED(filename, res); @@ -7173,6 +7050,7 @@ INTERCEPTOR(int, mprobe, void *ptr) { } #endif +#if SANITIZER_INTERCEPT_WCSLEN INTERCEPTOR(SIZE_T, wcslen, const wchar_t *s) { void *ctx; COMMON_INTERCEPTOR_ENTER(ctx, wcslen, s); @@ -7191,6 +7069,9 @@ INTERCEPTOR(SIZE_T, wcsnlen, const wchar_t *s, SIZE_T n) { #define INIT_WCSLEN \ COMMON_INTERCEPT_FUNCTION(wcslen); \ COMMON_INTERCEPT_FUNCTION(wcsnlen); +#else +#define INIT_WCSLEN +#endif #if SANITIZER_INTERCEPT_WCSCAT INTERCEPTOR(wchar_t *, wcscat, wchar_t *dst, const wchar_t *src) { @@ -7599,6 +7480,14 @@ INTERCEPTOR(void *, mmap, void *addr, SIZE_T sz, int prot, int flags, int fd, COMMON_INTERCEPTOR_MMAP_IMPL(ctx, mmap, addr, sz, prot, flags, fd, off); } +INTERCEPTOR(int, munmap, void *addr, SIZE_T sz) { + void *ctx; + if (COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED) + return (int)internal_munmap(addr, sz); + COMMON_INTERCEPTOR_ENTER(ctx, munmap, addr, sz); + COMMON_INTERCEPTOR_MUNMAP_IMPL(ctx, addr, sz); +} + INTERCEPTOR(int, mprotect, void *addr, SIZE_T sz, int prot) { void *ctx; if (common_flags()->detect_write_exec) @@ -7611,6 +7500,7 @@ INTERCEPTOR(int, mprotect, void *addr, SIZE_T sz, int prot) { } #define INIT_MMAP \ COMMON_INTERCEPT_FUNCTION(mmap); \ + COMMON_INTERCEPT_FUNCTION(munmap); \ COMMON_INTERCEPT_FUNCTION(mprotect); #else #define INIT_MMAP @@ -10355,14 +10245,33 @@ INTERCEPTOR(int, argp_parse, const struct argp *argp, int argc, char **argv, #define INIT_ARGP_PARSE #endif +#if SANITIZER_INTERCEPT_CPUSET_GETAFFINITY +INTERCEPTOR(int, cpuset_getaffinity, int level, int which, __int64_t id, SIZE_T cpusetsize, __sanitizer_cpuset_t *mask) { + void *ctx; + COMMON_INTERCEPTOR_ENTER(ctx, cpuset_getaffinity, level, which, id, cpusetsize, mask); + int res = REAL(cpuset_getaffinity)(level, which, id, cpusetsize, mask); + if (mask && !res) COMMON_INTERCEPTOR_WRITE_RANGE(ctx, mask, cpusetsize); + return res; +} +#define INIT_CPUSET_GETAFFINITY COMMON_INTERCEPT_FUNCTION(cpuset_getaffinity); +#else +#define INIT_CPUSET_GETAFFINITY +#endif + #include "sanitizer_common_interceptors_netbsd_compat.inc" +namespace __sanitizer { +void InitializeMemintrinsicInterceptors(); +} // namespace __sanitizer + static void InitializeCommonInterceptors() { #if SI_POSIX static u64 metadata_mem[sizeof(MetadataHashMap) / sizeof(u64) + 1]; interceptor_metadata_map = new ((void *)&metadata_mem) MetadataHashMap(); #endif + __sanitizer::InitializeMemintrinsicInterceptors(); + INIT_MMAP; INIT_MMAP64; INIT_TEXTDOMAIN; @@ -10384,9 +10293,6 @@ static void InitializeCommonInterceptors() { INIT_STRPBRK; INIT_STRXFRM; INIT___STRXFRM_L; - INIT_MEMSET; - INIT_MEMMOVE; - INIT_MEMCPY; INIT_MEMCHR; INIT_MEMCMP; INIT_BCMP; @@ -10470,6 +10376,7 @@ static void InitializeCommonInterceptors() { INIT_GETCWD; INIT_GET_CURRENT_DIR_NAME; INIT_STRTOIMAX; + INIT_STRTOIMAX_C23; INIT_MBSTOWCS; INIT_MBSNRTOWCS; INIT_WCSTOMBS; @@ -10558,9 +10465,6 @@ static void InitializeCommonInterceptors() { INIT_GETIFADDRS; INIT_IF_INDEXTONAME; INIT_CAPGET; - INIT_AEABI_MEM; - INIT___BZERO; - INIT_BZERO; INIT_FTIME; INIT_XDR; INIT_XDRREC_LINUX; @@ -10673,6 +10577,7 @@ static void InitializeCommonInterceptors() { INIT___XUNAME; INIT_HEXDUMP; INIT_ARGP_PARSE; + INIT_CPUSET_GETAFFINITY; INIT___PRINTF_CHK; } diff --git a/libsanitizer/sanitizer_common/sanitizer_common_interceptors_format.inc b/libsanitizer/sanitizer_common/sanitizer_common_interceptors_format.inc index 220abb89c3be..24e5dc0fb22f 100644 --- a/libsanitizer/sanitizer_common/sanitizer_common_interceptors_format.inc +++ b/libsanitizer/sanitizer_common/sanitizer_common_interceptors_format.inc @@ -340,11 +340,19 @@ static void scanf_common(void *ctx, int n_inputs, bool allowGnuMalloc, size = 0; } COMMON_INTERCEPTOR_WRITE_RANGE(ctx, argp, size); - // For %ms/%mc, write the allocated output buffer as well. + // For %mc/%mC/%ms/%m[/%mS, write the allocated output buffer as well. if (dir.allocate) { - char *buf = *(char **)argp; - if (buf) - COMMON_INTERCEPTOR_WRITE_RANGE(ctx, buf, internal_strlen(buf) + 1); + if (char *buf = *(char **)argp) { + if (dir.convSpecifier == 'c') + size = 1; + else if (dir.convSpecifier == 'C') + size = sizeof(wchar_t); + else if (dir.convSpecifier == 'S') + size = (internal_wcslen((wchar_t *)buf) + 1) * sizeof(wchar_t); + else // 's' or '[' + size = internal_strlen(buf) + 1; + COMMON_INTERCEPTOR_WRITE_RANGE(ctx, buf, size); + } } } } @@ -539,24 +547,25 @@ static void printf_common(void *ctx, const char *format, va_list aq) { continue; } else if (size == FSS_STRLEN) { if (void *argp = va_arg(aq, void *)) { + uptr len; if (dir.starredPrecision) { // FIXME: properly support starred precision for strings. - size = 0; + len = 0; } else if (dir.fieldPrecision > 0) { // Won't read more than "precision" symbols. - size = internal_strnlen((const char *)argp, dir.fieldPrecision); - if (size < dir.fieldPrecision) size++; + len = internal_strnlen((const char *)argp, dir.fieldPrecision); + if (len < (uptr)dir.fieldPrecision) + len++; } else { // Whole string will be accessed. - size = internal_strlen((const char *)argp) + 1; + len = internal_strlen((const char *)argp) + 1; } - COMMON_INTERCEPTOR_READ_RANGE(ctx, argp, size); + COMMON_INTERCEPTOR_READ_RANGE(ctx, argp, len); } } else if (size == FSS_WCSLEN) { if (void *argp = va_arg(aq, void *)) { // FIXME: Properly support wide-character strings (via wcsrtombs). - size = 0; - COMMON_INTERCEPTOR_READ_RANGE(ctx, argp, size); + COMMON_INTERCEPTOR_READ_RANGE(ctx, argp, 0); } } else { // Skip non-pointer args diff --git a/libsanitizer/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc b/libsanitizer/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc new file mode 100644 index 000000000000..52e489d02cda --- /dev/null +++ b/libsanitizer/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc @@ -0,0 +1,244 @@ +//===-- sanitizer_common_interceptors_memintrinsics.inc ---------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// Memintrinsic function interceptors for tools like AddressSanitizer, +// ThreadSanitizer, MemorySanitizer, etc. +// +// These interceptors are part of the common interceptors, but separated out so +// that implementations may add them, if necessary, to a separate source file +// that should define SANITIZER_COMMON_NO_REDEFINE_BUILTINS at the top. +// +// This file should be included into the tool's memintrinsic interceptor file, +// which has to define its own macros: +// COMMON_INTERCEPTOR_ENTER +// COMMON_INTERCEPTOR_READ_RANGE +// COMMON_INTERCEPTOR_WRITE_RANGE +// COMMON_INTERCEPTOR_MEMSET_IMPL +// COMMON_INTERCEPTOR_MEMMOVE_IMPL +// COMMON_INTERCEPTOR_MEMCPY_IMPL +// COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED +//===----------------------------------------------------------------------===// + +#ifdef SANITIZER_REDEFINE_BUILTINS_H +#error "Define SANITIZER_COMMON_NO_REDEFINE_BUILTINS in .cpp file" +#endif + +#include "interception/interception.h" +#include "sanitizer_platform_interceptors.h" + +// Platform-specific options. +#if SANITIZER_APPLE +#define PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE 0 +#elif SANITIZER_WINDOWS64 +#define PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE 0 +#else +#define PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE 1 +#endif // SANITIZER_APPLE + +#ifndef COMMON_INTERCEPTOR_MEMSET_IMPL +#define COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, dst, v, size) \ + { \ + if (COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED) \ + return internal_memset(dst, v, size); \ + COMMON_INTERCEPTOR_ENTER(ctx, memset, dst, v, size); \ + if (common_flags()->intercept_intrin) \ + COMMON_INTERCEPTOR_WRITE_RANGE(ctx, dst, size); \ + return REAL(memset)(dst, v, size); \ + } +#endif + +#ifndef COMMON_INTERCEPTOR_MEMMOVE_IMPL +#define COMMON_INTERCEPTOR_MEMMOVE_IMPL(ctx, dst, src, size) \ + { \ + if (COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED) \ + return internal_memmove(dst, src, size); \ + COMMON_INTERCEPTOR_ENTER(ctx, memmove, dst, src, size); \ + if (common_flags()->intercept_intrin) { \ + COMMON_INTERCEPTOR_WRITE_RANGE(ctx, dst, size); \ + COMMON_INTERCEPTOR_READ_RANGE(ctx, src, size); \ + } \ + return REAL(memmove)(dst, src, size); \ + } +#endif + +#ifndef COMMON_INTERCEPTOR_MEMCPY_IMPL +#define COMMON_INTERCEPTOR_MEMCPY_IMPL(ctx, dst, src, size) \ + { \ + if (COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED) { \ + return internal_memmove(dst, src, size); \ + } \ + COMMON_INTERCEPTOR_ENTER(ctx, memcpy, dst, src, size); \ + if (common_flags()->intercept_intrin) { \ + COMMON_INTERCEPTOR_WRITE_RANGE(ctx, dst, size); \ + COMMON_INTERCEPTOR_READ_RANGE(ctx, src, size); \ + } \ + return REAL(memcpy)(dst, src, size); \ + } +#endif + +#if SANITIZER_INTERCEPT_MEMSET +INTERCEPTOR(void *, memset, void *dst, int v, uptr size) { + void *ctx; + COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, dst, v, size); +} + +#define INIT_MEMSET COMMON_INTERCEPT_FUNCTION(memset) +#else +#define INIT_MEMSET +#endif + +#if SANITIZER_INTERCEPT_MEMMOVE +INTERCEPTOR(void *, memmove, void *dst, const void *src, uptr size) { + void *ctx; + COMMON_INTERCEPTOR_MEMMOVE_IMPL(ctx, dst, src, size); +} + +#define INIT_MEMMOVE COMMON_INTERCEPT_FUNCTION(memmove) +#else +#define INIT_MEMMOVE +#endif + +#if SANITIZER_INTERCEPT_MEMCPY +INTERCEPTOR(void *, memcpy, void *dst, const void *src, uptr size) { + // On OS X, calling internal_memcpy here will cause memory corruptions, + // because memcpy and memmove are actually aliases of the same + // implementation. We need to use internal_memmove here. + // N.B.: If we switch this to internal_ we'll have to use internal_memmove + // due to memcpy being an alias of memmove on OS X. + void *ctx; +#if PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE + COMMON_INTERCEPTOR_MEMCPY_IMPL(ctx, dst, src, size); +#else + COMMON_INTERCEPTOR_MEMMOVE_IMPL(ctx, dst, src, size); +#endif +} + +#define INIT_MEMCPY \ + do { \ + if (PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE) { \ + COMMON_INTERCEPT_FUNCTION(memcpy); \ + } else { \ + ASSIGN_REAL(memcpy, memmove); \ + } \ + CHECK(REAL(memcpy)); \ + } while (false) + +#else +#define INIT_MEMCPY +#endif + +#if SANITIZER_INTERCEPT_AEABI_MEM +INTERCEPTOR(void *, __aeabi_memmove, void *to, const void *from, uptr size) { + void *ctx; + COMMON_INTERCEPTOR_MEMMOVE_IMPL(ctx, to, from, size); +} + +INTERCEPTOR(void *, __aeabi_memmove4, void *to, const void *from, uptr size) { + void *ctx; + COMMON_INTERCEPTOR_MEMMOVE_IMPL(ctx, to, from, size); +} + +INTERCEPTOR(void *, __aeabi_memmove8, void *to, const void *from, uptr size) { + void *ctx; + COMMON_INTERCEPTOR_MEMMOVE_IMPL(ctx, to, from, size); +} + +INTERCEPTOR(void *, __aeabi_memcpy, void *to, const void *from, uptr size) { + void *ctx; + COMMON_INTERCEPTOR_MEMCPY_IMPL(ctx, to, from, size); +} + +INTERCEPTOR(void *, __aeabi_memcpy4, void *to, const void *from, uptr size) { + void *ctx; + COMMON_INTERCEPTOR_MEMCPY_IMPL(ctx, to, from, size); +} + +INTERCEPTOR(void *, __aeabi_memcpy8, void *to, const void *from, uptr size) { + void *ctx; + COMMON_INTERCEPTOR_MEMCPY_IMPL(ctx, to, from, size); +} + +// Note the argument order. +INTERCEPTOR(void *, __aeabi_memset, void *block, uptr size, int c) { + void *ctx; + COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, block, c, size); +} + +INTERCEPTOR(void *, __aeabi_memset4, void *block, uptr size, int c) { + void *ctx; + COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, block, c, size); +} + +INTERCEPTOR(void *, __aeabi_memset8, void *block, uptr size, int c) { + void *ctx; + COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, block, c, size); +} + +INTERCEPTOR(void *, __aeabi_memclr, void *block, uptr size) { + void *ctx; + COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, block, 0, size); +} + +INTERCEPTOR(void *, __aeabi_memclr4, void *block, uptr size) { + void *ctx; + COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, block, 0, size); +} + +INTERCEPTOR(void *, __aeabi_memclr8, void *block, uptr size) { + void *ctx; + COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, block, 0, size); +} + +#define INIT_AEABI_MEM \ + COMMON_INTERCEPT_FUNCTION(__aeabi_memmove); \ + COMMON_INTERCEPT_FUNCTION(__aeabi_memmove4); \ + COMMON_INTERCEPT_FUNCTION(__aeabi_memmove8); \ + COMMON_INTERCEPT_FUNCTION(__aeabi_memcpy); \ + COMMON_INTERCEPT_FUNCTION(__aeabi_memcpy4); \ + COMMON_INTERCEPT_FUNCTION(__aeabi_memcpy8); \ + COMMON_INTERCEPT_FUNCTION(__aeabi_memset); \ + COMMON_INTERCEPT_FUNCTION(__aeabi_memset4); \ + COMMON_INTERCEPT_FUNCTION(__aeabi_memset8); \ + COMMON_INTERCEPT_FUNCTION(__aeabi_memclr); \ + COMMON_INTERCEPT_FUNCTION(__aeabi_memclr4); \ + COMMON_INTERCEPT_FUNCTION(__aeabi_memclr8); +#else +#define INIT_AEABI_MEM +#endif // SANITIZER_INTERCEPT_AEABI_MEM + +#if SANITIZER_INTERCEPT___BZERO +INTERCEPTOR(void *, __bzero, void *block, uptr size) { + void *ctx; + COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, block, 0, size); +} +#define INIT___BZERO COMMON_INTERCEPT_FUNCTION(__bzero); +#else +#define INIT___BZERO +#endif // SANITIZER_INTERCEPT___BZERO + +#if SANITIZER_INTERCEPT_BZERO +INTERCEPTOR(void *, bzero, void *block, uptr size) { + void *ctx; + COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, block, 0, size); +} +#define INIT_BZERO COMMON_INTERCEPT_FUNCTION(bzero); +#else +#define INIT_BZERO +#endif // SANITIZER_INTERCEPT_BZERO + +namespace __sanitizer { +// This does not need to be called if InitializeCommonInterceptors() is called. +void InitializeMemintrinsicInterceptors() { + INIT_MEMSET; + INIT_MEMMOVE; + INIT_MEMCPY; + INIT_AEABI_MEM; + INIT___BZERO; + INIT_BZERO; +} +} // namespace __sanitizer diff --git a/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S b/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S index 72e482754b62..cdfa6f1d7f53 100644 --- a/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S +++ b/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S @@ -40,8 +40,8 @@ ASM_WRAPPER_NAME(vfork): ret ASM_SIZE(vfork) -.weak vfork -.set vfork, ASM_WRAPPER_NAME(vfork) +ASM_INTERCEPTOR_TRAMPOLINE(vfork) +ASM_TRAMPOLINE_ALIAS(vfork, vfork) GNU_PROPERTY_BTI_PAC diff --git a/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_arm.inc.S b/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_arm.inc.S index 780a9d46e26a..87bb48380569 100644 --- a/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_arm.inc.S +++ b/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_arm.inc.S @@ -43,7 +43,7 @@ ASM_WRAPPER_NAME(vfork): ASM_SIZE(vfork) -.weak vfork -.set vfork, ASM_WRAPPER_NAME(vfork) +ASM_INTERCEPTOR_TRAMPOLINE(vfork) +ASM_TRAMPOLINE_ALIAS(vfork, vfork) #endif diff --git a/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_i386.inc.S b/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_i386.inc.S index f60b05d157bb..c633014e2daa 100644 --- a/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_i386.inc.S +++ b/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_i386.inc.S @@ -58,7 +58,7 @@ ASM_WRAPPER_NAME(vfork): ret ASM_SIZE(vfork) -.weak vfork -.set vfork, ASM_WRAPPER_NAME(vfork) +ASM_INTERCEPTOR_TRAMPOLINE(vfork) +ASM_TRAMPOLINE_ALIAS(vfork, vfork) #endif diff --git a/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_loongarch64.inc.S b/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_loongarch64.inc.S index 68782acb379d..8429d57d669c 100644 --- a/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_loongarch64.inc.S +++ b/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_loongarch64.inc.S @@ -51,7 +51,7 @@ ASM_WRAPPER_NAME(vfork): jr $ra ASM_SIZE(vfork) -.weak vfork -.set vfork, ASM_WRAPPER_NAME(vfork) +ASM_INTERCEPTOR_TRAMPOLINE(vfork) +ASM_TRAMPOLINE_ALIAS(vfork, vfork) #endif diff --git a/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_riscv64.inc.S b/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_riscv64.inc.S index b7ec27859b8a..5b6ea6fe6c7a 100644 --- a/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_riscv64.inc.S +++ b/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_riscv64.inc.S @@ -50,7 +50,7 @@ ASM_WRAPPER_NAME(vfork): ret ASM_SIZE(vfork) -.weak vfork -.set vfork, ASM_WRAPPER_NAME(vfork) +ASM_INTERCEPTOR_TRAMPOLINE(vfork) +ASM_TRAMPOLINE_ALIAS(vfork, vfork) #endif diff --git a/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_x86_64.inc.S b/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_x86_64.inc.S index 8fd18ea67ffd..5500f817aec5 100644 --- a/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_x86_64.inc.S +++ b/libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_x86_64.inc.S @@ -34,9 +34,9 @@ ASM_WRAPPER_NAME(vfork): .L_exit: pop %rax ret -ASM_SIZE(vfork) +ASM_SIZE(ASM_WRAPPER_NAME(vfork)) -.weak vfork -.set vfork, ASM_WRAPPER_NAME(vfork) +ASM_INTERCEPTOR_TRAMPOLINE(vfork) +ASM_TRAMPOLINE_ALIAS(vfork, vfork) #endif diff --git a/libsanitizer/sanitizer_common/sanitizer_common_interface.inc b/libsanitizer/sanitizer_common/sanitizer_common_interface.inc index 01be600e33ba..557207fe62ac 100644 --- a/libsanitizer/sanitizer_common/sanitizer_common_interface.inc +++ b/libsanitizer/sanitizer_common/sanitizer_common_interface.inc @@ -34,6 +34,7 @@ INTERFACE_FUNCTION(__sanitizer_symbolize_pc) // Allocator interface. INTERFACE_FUNCTION(__sanitizer_get_allocated_begin) INTERFACE_FUNCTION(__sanitizer_get_allocated_size) +INTERFACE_FUNCTION(__sanitizer_get_allocated_size_fast) INTERFACE_FUNCTION(__sanitizer_get_current_allocated_bytes) INTERFACE_FUNCTION(__sanitizer_get_estimated_allocated_size) INTERFACE_FUNCTION(__sanitizer_get_free_bytes) @@ -45,3 +46,7 @@ INTERFACE_FUNCTION(__sanitizer_purge_allocator) INTERFACE_FUNCTION(__sanitizer_print_memory_profile) INTERFACE_WEAK_FUNCTION(__sanitizer_free_hook) INTERFACE_WEAK_FUNCTION(__sanitizer_malloc_hook) +// Memintrinsic functions. +INTERFACE_FUNCTION(__sanitizer_internal_memcpy) +INTERFACE_FUNCTION(__sanitizer_internal_memmove) +INTERFACE_FUNCTION(__sanitizer_internal_memset) diff --git a/libsanitizer/sanitizer_common/sanitizer_common_interface_posix.inc b/libsanitizer/sanitizer_common/sanitizer_common_interface_posix.inc index a5259be9335a..6b567edc97a8 100644 --- a/libsanitizer/sanitizer_common/sanitizer_common_interface_posix.inc +++ b/libsanitizer/sanitizer_common/sanitizer_common_interface_posix.inc @@ -9,6 +9,7 @@ //===----------------------------------------------------------------------===// INTERFACE_WEAK_FUNCTION(__sanitizer_symbolize_code) INTERFACE_WEAK_FUNCTION(__sanitizer_symbolize_data) +INTERFACE_WEAK_FUNCTION(__sanitizer_symbolize_frame) INTERFACE_WEAK_FUNCTION(__sanitizer_symbolize_demangle) INTERFACE_WEAK_FUNCTION(__sanitizer_symbolize_flush) INTERFACE_WEAK_FUNCTION(__sanitizer_symbolize_set_demangle) diff --git a/libsanitizer/sanitizer_common/sanitizer_common_libcdep.cpp b/libsanitizer/sanitizer_common/sanitizer_common_libcdep.cpp index 8fd398564280..7b74bb1a7e0f 100644 --- a/libsanitizer/sanitizer_common/sanitizer_common_libcdep.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_common_libcdep.cpp @@ -67,6 +67,8 @@ void *BackgroundThread(void *arg) { } else if (soft_rss_limit_mb >= current_rss_mb && reached_soft_rss_limit) { reached_soft_rss_limit = false; + Report("%s: soft rss limit unexhausted (%zdMb vs %zdMb)\n", + SanitizerToolName, soft_rss_limit_mb, current_rss_mb); SetRssLimitExceeded(false); } } @@ -117,8 +119,10 @@ void MaybeStartBackgroudThread() {} #endif void WriteToSyslog(const char *msg) { + if (!msg) + return; InternalScopedString msg_copy; - msg_copy.append("%s", msg); + msg_copy.Append(msg); const char *p = msg_copy.data(); // Print one line at a time. diff --git a/libsanitizer/sanitizer_common/sanitizer_common_syscalls.inc b/libsanitizer/sanitizer_common/sanitizer_common_syscalls.inc index 3900bcf22b7a..c10943b3e487 100644 --- a/libsanitizer/sanitizer_common/sanitizer_common_syscalls.inc +++ b/libsanitizer/sanitizer_common/sanitizer_common_syscalls.inc @@ -2135,7 +2135,7 @@ PRE_SYSCALL(epoll_pwait2) const sanitizer_kernel_timespec *timeout, const kernel_sigset_t *sigmask, long sigsetsize) { if (timeout) - PRE_READ(timeout, sizeof(timeout)); + PRE_READ(timeout, sizeof(*timeout)); if (sigmask) PRE_READ(sigmask, sigsetsize); } diff --git a/libsanitizer/sanitizer_common/sanitizer_dl.cpp b/libsanitizer/sanitizer_common/sanitizer_dl.cpp new file mode 100644 index 000000000000..e957d529c2fe --- /dev/null +++ b/libsanitizer/sanitizer_common/sanitizer_dl.cpp @@ -0,0 +1,37 @@ +//===-- sanitizer_dl.cpp --------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file has helper functions that depend on libc's dynamic loading +// introspection. +// +//===----------------------------------------------------------------------===// + +#include "sanitizer_dl.h" + +#include "sanitizer_common/sanitizer_platform.h" + +#if SANITIZER_GLIBC +# include +#endif + +namespace __sanitizer { +extern const char *SanitizerToolName; + +const char *DladdrSelfFName(void) { +#if SANITIZER_GLIBC + Dl_info info; + int ret = dladdr((void *)&SanitizerToolName, &info); + if (ret) { + return info.dli_fname; + } +#endif + + return nullptr; +} + +} // namespace __sanitizer diff --git a/libsanitizer/sanitizer_common/sanitizer_dl.h b/libsanitizer/sanitizer_common/sanitizer_dl.h new file mode 100644 index 000000000000..ecde0664eb04 --- /dev/null +++ b/libsanitizer/sanitizer_common/sanitizer_dl.h @@ -0,0 +1,26 @@ +//===-- sanitizer_dl.h ----------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file has helper functions that depend on libc's dynamic loading +// introspection. +// +//===----------------------------------------------------------------------===// + +#ifndef SANITIZER_DL_H +#define SANITIZER_DL_H + +namespace __sanitizer { + +// Returns the path to the shared object or - in the case of statically linked +// sanitizers +// - the main program itself, that contains the sanitizer. +const char* DladdrSelfFName(void); + +} // namespace __sanitizer + +#endif // SANITIZER_DL_H diff --git a/libsanitizer/sanitizer_common/sanitizer_file.h b/libsanitizer/sanitizer_common/sanitizer_file.h index 9459c6b00acc..bef2c842d9f2 100644 --- a/libsanitizer/sanitizer_common/sanitizer_file.h +++ b/libsanitizer/sanitizer_common/sanitizer_file.h @@ -84,7 +84,7 @@ bool IsPathSeparator(const char c); bool IsAbsolutePath(const char *path); // Returns true on success, false on failure. bool CreateDir(const char *pathname); -// Starts a subprocess and returs its pid. +// Starts a subprocess and returns its pid. // If *_fd parameters are not kInvalidFd their corresponding input/output // streams will be redirect to the file. The files will always be closed // in parent process even in case of an error. diff --git a/libsanitizer/sanitizer_common/sanitizer_flag_parser.cpp b/libsanitizer/sanitizer_common/sanitizer_flag_parser.cpp index c620da7f220a..ca37df348580 100644 --- a/libsanitizer/sanitizer_common/sanitizer_flag_parser.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_flag_parser.cpp @@ -19,8 +19,6 @@ namespace __sanitizer { -LowLevelAllocator FlagParser::Alloc; - class UnknownFlags { static const int kMaxUnknownFlags = 20; const char *unknown_flags_[kMaxUnknownFlags]; @@ -49,7 +47,7 @@ void ReportUnrecognizedFlags() { char *FlagParser::ll_strndup(const char *s, uptr n) { uptr len = internal_strnlen(s, n); - char *s2 = (char*)Alloc.Allocate(len + 1); + char *s2 = (char *)GetGlobalLowLevelAllocator().Allocate(len + 1); internal_memcpy(s2, s, len); s2[len] = 0; return s2; @@ -185,7 +183,8 @@ void FlagParser::RegisterHandler(const char *name, FlagHandlerBase *handler, } FlagParser::FlagParser() : n_flags_(0), buf_(nullptr), pos_(0) { - flags_ = (Flag *)Alloc.Allocate(sizeof(Flag) * kMaxFlags); + flags_ = + (Flag *)GetGlobalLowLevelAllocator().Allocate(sizeof(Flag) * kMaxFlags); } } // namespace __sanitizer diff --git a/libsanitizer/sanitizer_common/sanitizer_flag_parser.h b/libsanitizer/sanitizer_common/sanitizer_flag_parser.h index ae49294dde95..dccdee4da2bd 100644 --- a/libsanitizer/sanitizer_common/sanitizer_flag_parser.h +++ b/libsanitizer/sanitizer_common/sanitizer_flag_parser.h @@ -178,8 +178,6 @@ class FlagParser { bool ParseFile(const char *path, bool ignore_missing); void PrintFlagDescriptions(); - static LowLevelAllocator Alloc; - private: void fatal_error(const char *err); bool is_space(char c); @@ -193,7 +191,7 @@ class FlagParser { template static void RegisterFlag(FlagParser *parser, const char *name, const char *desc, T *var) { - FlagHandler *fh = new (FlagParser::Alloc) FlagHandler(var); + FlagHandler *fh = new (GetGlobalLowLevelAllocator()) FlagHandler(var); parser->RegisterHandler(name, fh, desc); } diff --git a/libsanitizer/sanitizer_common/sanitizer_flags.cpp b/libsanitizer/sanitizer_common/sanitizer_flags.cpp index d52e96a7c381..849a122386a4 100644 --- a/libsanitizer/sanitizer_common/sanitizer_flags.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_flags.cpp @@ -108,11 +108,11 @@ class FlagHandlerInclude final : public FlagHandlerBase { }; void RegisterIncludeFlags(FlagParser *parser, CommonFlags *cf) { - FlagHandlerInclude *fh_include = new (FlagParser::Alloc) + FlagHandlerInclude *fh_include = new (GetGlobalLowLevelAllocator()) FlagHandlerInclude(parser, /*ignore_missing*/ false); parser->RegisterHandler("include", fh_include, "read more options from the given file"); - FlagHandlerInclude *fh_include_if_exists = new (FlagParser::Alloc) + FlagHandlerInclude *fh_include_if_exists = new (GetGlobalLowLevelAllocator()) FlagHandlerInclude(parser, /*ignore_missing*/ true); parser->RegisterHandler( "include_if_exists", fh_include_if_exists, diff --git a/libsanitizer/sanitizer_common/sanitizer_flags.inc b/libsanitizer/sanitizer_common/sanitizer_flags.inc index 6148ae56067c..949bdbd148b6 100644 --- a/libsanitizer/sanitizer_common/sanitizer_flags.inc +++ b/libsanitizer/sanitizer_common/sanitizer_flags.inc @@ -269,3 +269,9 @@ COMMON_FLAG(bool, detect_write_exec, false, COMMON_FLAG(bool, test_only_emulate_no_memorymap, false, "TEST ONLY fail to read memory mappings to emulate sanitized " "\"init\"") +// With static linking, dladdr((void*)pthread_join) or similar will return the +// path to the main program. This flag will replace dlopen(
+// with dlopen(NULL,...), which is the correct way to get a handle to the main +// program. +COMMON_FLAG(bool, test_only_replace_dlopen_main_program, false, + "TEST ONLY replace dlopen(
,...) with dlopen(NULL)") diff --git a/libsanitizer/sanitizer_common/sanitizer_flat_map.h b/libsanitizer/sanitizer_common/sanitizer_flat_map.h index 05fb554d20c1..8bb8304910c7 100644 --- a/libsanitizer/sanitizer_common/sanitizer_flat_map.h +++ b/libsanitizer/sanitizer_common/sanitizer_flat_map.h @@ -21,12 +21,6 @@ namespace __sanitizer { -// Call these callbacks on mmap/munmap. -struct NoOpMapUnmapCallback { - void OnMap(uptr p, uptr size) const {} - void OnUnmap(uptr p, uptr size) const {} -}; - // Maps integers in rage [0, kSize) to values. template @@ -62,8 +56,7 @@ class FlatMap { // Each value is initially zero and can be set to something else only once. // Setting and getting values from multiple threads is safe w/o extra locking. template + typename AddressSpaceViewTy = LocalAddressSpaceView> class TwoLevelMap { static_assert(IsPowerOfTwo(kSize2), "Use a power of two for performance."); @@ -79,7 +72,6 @@ class TwoLevelMap { T *p = Get(i); if (!p) continue; - MapUnmapCallback().OnUnmap(reinterpret_cast(p), MmapSize()); UnmapOrDie(p, kSize2); } Init(); @@ -149,7 +141,6 @@ class TwoLevelMap { T *res = Get(idx); if (!res) { res = reinterpret_cast(MmapOrDie(MmapSize(), "TwoLevelMap")); - MapUnmapCallback().OnMap(reinterpret_cast(res), kSize2); atomic_store(&map1_[idx], reinterpret_cast(res), memory_order_release); } @@ -164,10 +155,8 @@ template using FlatByteMap = FlatMap; template -using TwoLevelByteMap = - TwoLevelMap; + typename AddressSpaceViewTy = LocalAddressSpaceView> +using TwoLevelByteMap = TwoLevelMap; } // namespace __sanitizer #endif diff --git a/libsanitizer/sanitizer_common/sanitizer_fuchsia.cpp b/libsanitizer/sanitizer_common/sanitizer_fuchsia.cpp index a92e84cb8ecf..0245164403c5 100644 --- a/libsanitizer/sanitizer_common/sanitizer_fuchsia.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_fuchsia.cpp @@ -226,13 +226,14 @@ static uptr DoMmapFixedOrDie(zx_handle_t vmar, uptr fixed_addr, uptr map_size, uptr ReservedAddressRange::Map(uptr fixed_addr, uptr map_size, const char *name) { - return DoMmapFixedOrDie(os_handle_, fixed_addr, map_size, base_, name_, - false); + return DoMmapFixedOrDie(os_handle_, fixed_addr, map_size, base_, + name ? name : name_, false); } uptr ReservedAddressRange::MapOrDie(uptr fixed_addr, uptr map_size, const char *name) { - return DoMmapFixedOrDie(os_handle_, fixed_addr, map_size, base_, name_, true); + return DoMmapFixedOrDie(os_handle_, fixed_addr, map_size, base_, + name ? name : name_, true); } void UnmapOrDieVmar(void *addr, uptr size, zx_handle_t target_vmar) { @@ -285,6 +286,12 @@ bool MprotectReadOnly(uptr addr, uptr size) { ZX_OK; } +bool MprotectReadWrite(uptr addr, uptr size) { + return _zx_vmar_protect(_zx_vmar_root_self(), + ZX_VM_PERM_READ | ZX_VM_PERM_WRITE, addr, + size) == ZX_OK; +} + void *MmapAlignedOrDieOnFatalError(uptr size, uptr alignment, const char *mem_type) { CHECK_GE(size, GetPageSize()); diff --git a/libsanitizer/sanitizer_common/sanitizer_internal_defs.h b/libsanitizer/sanitizer_common/sanitizer_internal_defs.h index 98186c429e9c..3809669dd48b 100644 --- a/libsanitizer/sanitizer_common/sanitizer_internal_defs.h +++ b/libsanitizer/sanitizer_common/sanitizer_internal_defs.h @@ -13,6 +13,12 @@ #define SANITIZER_DEFS_H #include "sanitizer_platform.h" +#include "sanitizer_redefine_builtins.h" + +// GCC does not understand __has_feature. +#if !defined(__has_feature) +#define __has_feature(x) 0 +#endif #ifndef SANITIZER_DEBUG # define SANITIZER_DEBUG 0 @@ -217,7 +223,7 @@ typedef u64 tid_t; # define WARN_UNUSED_RESULT #else // _MSC_VER # define ALWAYS_INLINE inline __attribute__((always_inline)) -# define ALIAS(x) __attribute__((alias(x))) +# define ALIAS(x) __attribute__((alias(SANITIZER_STRINGIFY(x)))) // Please only use the ALIGNED macro before the type. // Using ALIGNED after the variable declaration is not portable! # define ALIGNED(x) __attribute__((aligned(x))) @@ -258,6 +264,12 @@ typedef u64 tid_t; # define FALLTHROUGH #endif +#if __has_attribute(uninitialized) +# define UNINITIALIZED __attribute__((uninitialized)) +#else +# define UNINITIALIZED +#endif + // Unaligned versions of basic types. typedef ALIGNED(1) u16 uu16; typedef ALIGNED(1) u32 uu32; diff --git a/libsanitizer/sanitizer_common/sanitizer_libc.cpp b/libsanitizer/sanitizer_common/sanitizer_libc.cpp index d3076f0da489..9318066afed2 100644 --- a/libsanitizer/sanitizer_common/sanitizer_libc.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_libc.cpp @@ -10,6 +10,9 @@ // run-time libraries. See sanitizer_libc.h for details. //===----------------------------------------------------------------------===// +// Do not redefine builtins; this file is defining the builtin replacements. +#define SANITIZER_COMMON_NO_REDEFINE_BUILTINS + #include "sanitizer_allocator_internal.h" #include "sanitizer_common.h" #include "sanitizer_libc.h" @@ -46,7 +49,10 @@ int internal_memcmp(const void* s1, const void* s2, uptr n) { return 0; } -void *internal_memcpy(void *dest, const void *src, uptr n) { +extern "C" { +SANITIZER_INTERFACE_ATTRIBUTE void *__sanitizer_internal_memcpy(void *dest, + const void *src, + uptr n) { char *d = (char*)dest; const char *s = (const char *)src; for (uptr i = 0; i < n; ++i) @@ -54,7 +60,8 @@ void *internal_memcpy(void *dest, const void *src, uptr n) { return dest; } -void *internal_memmove(void *dest, const void *src, uptr n) { +SANITIZER_INTERFACE_ATTRIBUTE void *__sanitizer_internal_memmove( + void *dest, const void *src, uptr n) { char *d = (char*)dest; const char *s = (const char *)src; sptr i, signed_n = (sptr)n; @@ -72,7 +79,8 @@ void *internal_memmove(void *dest, const void *src, uptr n) { return dest; } -void *internal_memset(void* s, int c, uptr n) { +SANITIZER_INTERFACE_ATTRIBUTE void *__sanitizer_internal_memset(void *s, int c, + uptr n) { // Optimize for the most performance-critical case: if ((reinterpret_cast(s) % 16) == 0 && (n % 16) == 0) { u64 *p = reinterpret_cast(s); @@ -95,6 +103,7 @@ void *internal_memset(void* s, int c, uptr n) { } return s; } +} // extern "C" uptr internal_strcspn(const char *s, const char *reject) { uptr i; @@ -190,6 +199,14 @@ char *internal_strncat(char *dst, const char *src, uptr n) { return dst; } +wchar_t *internal_wcscpy(wchar_t *dst, const wchar_t *src) { + wchar_t *dst_it = dst; + do { + *dst_it++ = *src++; + } while (*src); + return dst; +} + uptr internal_strlcpy(char *dst, const char *src, uptr maxlen) { const uptr srclen = internal_strlen(src); if (srclen < maxlen) { @@ -209,6 +226,14 @@ char *internal_strncpy(char *dst, const char *src, uptr n) { return dst; } +wchar_t *internal_wcsncpy(wchar_t *dst, const wchar_t *src, uptr n) { + uptr i; + for (i = 0; i < n && src[i]; ++i) + dst[i] = src[i]; + internal_memset(dst + i, 0, (n - i) * sizeof(wchar_t)); + return dst; +} + uptr internal_strnlen(const char *s, uptr maxlen) { uptr i = 0; while (i < maxlen && s[i]) i++; diff --git a/libsanitizer/sanitizer_common/sanitizer_libc.h b/libsanitizer/sanitizer_common/sanitizer_libc.h index 39a212665d0a..1906569e2a5f 100644 --- a/libsanitizer/sanitizer_common/sanitizer_libc.h +++ b/libsanitizer/sanitizer_common/sanitizer_libc.h @@ -24,15 +24,33 @@ namespace __sanitizer { // internal_X() is a custom implementation of X() for use in RTL. +extern "C" { +// These are used as builtin replacements; see sanitizer_redefine_builtins.h. +// In normal runtime code, use the __sanitizer::internal_X() aliases instead. +SANITIZER_INTERFACE_ATTRIBUTE void *__sanitizer_internal_memcpy(void *dest, + const void *src, + uptr n); +SANITIZER_INTERFACE_ATTRIBUTE void *__sanitizer_internal_memmove( + void *dest, const void *src, uptr n); +SANITIZER_INTERFACE_ATTRIBUTE void *__sanitizer_internal_memset(void *s, int c, + uptr n); +} // extern "C" + // String functions s64 internal_atoll(const char *nptr); void *internal_memchr(const void *s, int c, uptr n); void *internal_memrchr(const void *s, int c, uptr n); int internal_memcmp(const void* s1, const void* s2, uptr n); -void *internal_memcpy(void *dest, const void *src, uptr n); -void *internal_memmove(void *dest, const void *src, uptr n); +ALWAYS_INLINE void *internal_memcpy(void *dest, const void *src, uptr n) { + return __sanitizer_internal_memcpy(dest, src, n); +} +ALWAYS_INLINE void *internal_memmove(void *dest, const void *src, uptr n) { + return __sanitizer_internal_memmove(dest, src, n); +} // Should not be used in performance-critical places. -void *internal_memset(void *s, int c, uptr n); +ALWAYS_INLINE void *internal_memset(void *s, int c, uptr n) { + return __sanitizer_internal_memset(s, c, n); +} char* internal_strchr(const char *s, int c); char *internal_strchrnul(const char *s, int c); int internal_strcmp(const char *s1, const char *s2); @@ -53,7 +71,8 @@ int internal_snprintf(char *buffer, uptr length, const char *format, ...) FORMAT(3, 4); uptr internal_wcslen(const wchar_t *s); uptr internal_wcsnlen(const wchar_t *s, uptr maxlen); - +wchar_t *internal_wcscpy(wchar_t *dst, const wchar_t *src); +wchar_t *internal_wcsncpy(wchar_t *dst, const wchar_t *src, uptr maxlen); // Return true if all bytes in [mem, mem+size) are zero. // Optimized for the case when the result is true. bool mem_is_zero(const char *mem, uptr size); diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.cpp b/libsanitizer/sanitizer_common/sanitizer_linux.cpp index 24c6acaa9e5a..d2b3b63f3a7a 100644 --- a/libsanitizer/sanitizer_common/sanitizer_linux.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_linux.cpp @@ -156,11 +156,11 @@ const int FUTEX_WAKE_PRIVATE = FUTEX_WAKE | FUTEX_PRIVATE_FLAG; namespace __sanitizer { -void SetSigProcMask(__sanitizer_sigset_t *set, __sanitizer_sigset_t *old) { - CHECK_EQ(0, internal_sigprocmask(SIG_SETMASK, set, old)); +void SetSigProcMask(__sanitizer_sigset_t *set, __sanitizer_sigset_t *oldset) { + CHECK_EQ(0, internal_sigprocmask(SIG_SETMASK, set, oldset)); } -ScopedBlockSignals::ScopedBlockSignals(__sanitizer_sigset_t *copy) { +void BlockSignals(__sanitizer_sigset_t *oldset) { __sanitizer_sigset_t set; internal_sigfillset(&set); # if SANITIZER_LINUX && !SANITIZER_ANDROID @@ -175,7 +175,11 @@ ScopedBlockSignals::ScopedBlockSignals(__sanitizer_sigset_t *copy) { // hang. internal_sigdelset(&set, 31); # endif - SetSigProcMask(&set, &saved_); + SetSigProcMask(&set, oldset); +} + +ScopedBlockSignals::ScopedBlockSignals(__sanitizer_sigset_t *copy) { + BlockSignals(&saved_); if (copy) internal_memcpy(copy, &saved_, sizeof(saved_)); } diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.h b/libsanitizer/sanitizer_common/sanitizer_linux.h index c84c04a87759..7454369fa419 100644 --- a/libsanitizer/sanitizer_common/sanitizer_linux.h +++ b/libsanitizer/sanitizer_common/sanitizer_linux.h @@ -51,6 +51,7 @@ uptr internal_sigprocmask(int how, __sanitizer_sigset_t *set, __sanitizer_sigset_t *oldset); void SetSigProcMask(__sanitizer_sigset_t *set, __sanitizer_sigset_t *oldset); +void BlockSignals(__sanitizer_sigset_t *oldset = nullptr); struct ScopedBlockSignals { explicit ScopedBlockSignals(__sanitizer_sigset_t *copy); ~ScopedBlockSignals(); diff --git a/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp b/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp index 2720a3cab2c9..fcfaa0c36c22 100644 --- a/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp @@ -148,7 +148,7 @@ void GetThreadStackTopAndBottom(bool at_initialization, uptr *stack_top, pthread_attr_t attr; pthread_attr_init(&attr); CHECK_EQ(pthread_getattr_np(pthread_self(), &attr), 0); - my_pthread_attr_getstack(&attr, &stackaddr, &stacksize); + internal_pthread_attr_getstack(&attr, &stackaddr, &stacksize); pthread_attr_destroy(&attr); #endif // SANITIZER_SOLARIS @@ -698,11 +698,8 @@ static int dl_iterate_phdr_cb(dl_phdr_info *info, size_t size, void *arg) { return AddModuleSegments(module_name.data(), info, data->modules); } - if (info->dlpi_name) { - InternalScopedString module_name; - module_name.append("%s", info->dlpi_name); - return AddModuleSegments(module_name.data(), info, data->modules); - } + if (info->dlpi_name) + return AddModuleSegments(info->dlpi_name, info, data->modules); return 0; } @@ -838,13 +835,9 @@ u32 GetNumberOfCPUs() { #elif SANITIZER_SOLARIS return sysconf(_SC_NPROCESSORS_ONLN); #else -#if defined(CPU_COUNT) cpu_set_t CPUs; CHECK_EQ(sched_getaffinity(0, sizeof(cpu_set_t), &CPUs), 0); return CPU_COUNT(&CPUs); -#else - return 1; -#endif #endif } diff --git a/libsanitizer/sanitizer_common/sanitizer_mac.cpp b/libsanitizer/sanitizer_common/sanitizer_mac.cpp index e1f83e4002a5..24e3d1112520 100644 --- a/libsanitizer/sanitizer_common/sanitizer_mac.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_mac.cpp @@ -38,7 +38,7 @@ extern char **environ; # endif -# if defined(__has_include) && __has_include() && defined(__BLOCKS__) +# if defined(__has_include) && __has_include() # define SANITIZER_OS_TRACE 1 # include # else @@ -71,15 +71,7 @@ extern char ***_NSGetArgv(void); # include # include # include -# if defined(__has_builtin) && __has_builtin(__builtin_os_log_format) -# include -# else - /* Without support for __builtin_os_log_format, fall back to the older - method. */ -# define OS_LOG_DEFAULT 0 -# define os_log_error(A,B,C) \ - asl_log(nullptr, nullptr, ASL_LEVEL_ERR, "%s", (C)); -# endif +# include # include # include # include diff --git a/libsanitizer/sanitizer_common/sanitizer_mac.h b/libsanitizer/sanitizer_common/sanitizer_mac.h index 1cf2e298cc91..f0a97d098eea 100644 --- a/libsanitizer/sanitizer_common/sanitizer_mac.h +++ b/libsanitizer/sanitizer_common/sanitizer_mac.h @@ -14,26 +14,6 @@ #include "sanitizer_common.h" #include "sanitizer_platform.h" - -/* TARGET_OS_OSX is not present in SDKs before Darwin16 (macOS 10.12) use - TARGET_OS_MAC (we have no support for iOS in any form for these versions, - so there's no ambiguity). */ -#if !defined(TARGET_OS_OSX) && TARGET_OS_MAC -# define TARGET_OS_OSX 1 -#endif - -/* Other TARGET_OS_xxx are not present on earlier versions, define them to - 0 (we have no support for them; they are not valid targets anyway). */ -#ifndef TARGET_OS_IOS -#define TARGET_OS_IOS 0 -#endif -#ifndef TARGET_OS_TV -#define TARGET_OS_TV 0 -#endif -#ifndef TARGET_OS_WATCH -#define TARGET_OS_WATCH 0 -#endif - #if SANITIZER_APPLE #include "sanitizer_posix.h" diff --git a/libsanitizer/sanitizer_common/sanitizer_malloc_mac.inc b/libsanitizer/sanitizer_common/sanitizer_malloc_mac.inc index fe76b3f8aa05..6343eb284afb 100644 --- a/libsanitizer/sanitizer_common/sanitizer_malloc_mac.inc +++ b/libsanitizer/sanitizer_common/sanitizer_malloc_mac.inc @@ -123,7 +123,7 @@ INTERCEPTOR(void, malloc_set_zone_name, malloc_zone_t *zone, const char *name) { COMMON_MALLOC_ENTER(); InternalScopedString new_name; if (name && zone->introspect == sanitizer_zone.introspect) { - new_name.append(COMMON_MALLOC_ZONE_NAME "-%s", name); + new_name.AppendF(COMMON_MALLOC_ZONE_NAME "-%s", name); name = new_name.data(); } diff --git a/libsanitizer/sanitizer_common/sanitizer_platform.h b/libsanitizer/sanitizer_common/sanitizer_platform.h index 764996e57355..3e1b078a0212 100644 --- a/libsanitizer/sanitizer_common/sanitizer_platform.h +++ b/libsanitizer/sanitizer_common/sanitizer_platform.h @@ -284,7 +284,8 @@ // For such platforms build this code with -DSANITIZER_CAN_USE_ALLOCATOR64=0 or // change the definition of SANITIZER_CAN_USE_ALLOCATOR64 here. #ifndef SANITIZER_CAN_USE_ALLOCATOR64 -# if SANITIZER_RISCV64 || SANITIZER_IOS +# if (SANITIZER_RISCV64 && !SANITIZER_FUCHSIA) || SANITIZER_IOS || \ + SANITIZER_DRIVERKIT # define SANITIZER_CAN_USE_ALLOCATOR64 0 # elif defined(__mips64) || defined(__hexagon__) # define SANITIZER_CAN_USE_ALLOCATOR64 0 @@ -303,7 +304,15 @@ # define SANITIZER_MMAP_RANGE_SIZE FIRST_32_SECOND_64(1ULL << 32, 1ULL << 40) # endif #elif SANITIZER_RISCV64 -# define SANITIZER_MMAP_RANGE_SIZE FIRST_32_SECOND_64(1ULL << 32, 1ULL << 38) +// FIXME: Rather than hardcoding the VMA here, we should rely on +// GetMaxUserVirtualAddress(). This will require some refactoring though since +// many places either hardcode some value or SANITIZER_MMAP_RANGE_SIZE is +// assumed to be some constant integer. +# if SANITIZER_FUCHSIA +# define SANITIZER_MMAP_RANGE_SIZE (1ULL << 38) +# else +# define SANITIZER_MMAP_RANGE_SIZE FIRST_32_SECOND_64(1ULL << 32, 1ULL << 47) +# endif #elif defined(__aarch64__) # if SANITIZER_APPLE # if SANITIZER_OSX || SANITIZER_IOSSIM diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_interceptors.h b/libsanitizer/sanitizer_common/sanitizer_platform_interceptors.h index c82ab5c21056..8c7c00de6d12 100644 --- a/libsanitizer/sanitizer_common/sanitizer_platform_interceptors.h +++ b/libsanitizer/sanitizer_common/sanitizer_platform_interceptors.h @@ -347,7 +347,8 @@ #define SANITIZER_INTERCEPT_PTHREAD_ATTR_GETINHERITSCHED \ (SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID || SI_SOLARIS) #define SANITIZER_INTERCEPT_PTHREAD_ATTR_GETAFFINITY_NP SI_GLIBC -#define SANITIZER_INTERCEPT_PTHREAD_GETAFFINITY_NP SI_LINUX_NOT_ANDROID +#define SANITIZER_INTERCEPT_PTHREAD_GETAFFINITY_NP \ + (SI_LINUX_NOT_ANDROID || SI_FREEBSD) #define SANITIZER_INTERCEPT_PTHREAD_ATTR_GET_SCHED SI_POSIX #define SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETPSHARED \ (SI_POSIX && !SI_NETBSD) @@ -367,6 +368,8 @@ (SI_LINUX_NOT_ANDROID || SI_SOLARIS) #define SANITIZER_INTERCEPT_PTHREAD_BARRIERATTR_GETPSHARED \ (SI_LINUX_NOT_ANDROID && !SI_NETBSD) +#define SANITIZER_INTERCEPT_TRYJOIN SI_GLIBC +#define SANITIZER_INTERCEPT_TIMEDJOIN SI_GLIBC #define SANITIZER_INTERCEPT_THR_EXIT SI_FREEBSD #define SANITIZER_INTERCEPT_TMPNAM SI_POSIX #define SANITIZER_INTERCEPT_TMPNAM_R (SI_GLIBC || SI_SOLARIS) @@ -492,6 +495,7 @@ #define SANITIZER_INTERCEPT_ALIGNED_ALLOC (!SI_MAC) #define SANITIZER_INTERCEPT_MALLOC_USABLE_SIZE (!SI_MAC && !SI_NETBSD) #define SANITIZER_INTERCEPT_MCHECK_MPROBE SI_LINUX_NOT_ANDROID +#define SANITIZER_INTERCEPT_WCSLEN 1 #define SANITIZER_INTERCEPT_WCSCAT SI_POSIX #define SANITIZER_INTERCEPT_WCSDUP SI_POSIX #define SANITIZER_INTERCEPT_SIGNAL_AND_SIGACTION (!SI_WINDOWS && SI_NOT_FUCHSIA) @@ -571,11 +575,12 @@ #define SANITIZER_INTERCEPT_SL_INIT (SI_FREEBSD || SI_NETBSD) #define SANITIZER_INTERCEPT_GETRANDOM \ - ((SI_LINUX && __GLIBC_PREREQ(2, 25)) || SI_FREEBSD) + ((SI_LINUX && __GLIBC_PREREQ(2, 25)) || SI_FREEBSD || SI_SOLARIS) #define SANITIZER_INTERCEPT___CXA_ATEXIT SI_NETBSD #define SANITIZER_INTERCEPT_ATEXIT SI_NETBSD #define SANITIZER_INTERCEPT_PTHREAD_ATFORK SI_NETBSD -#define SANITIZER_INTERCEPT_GETENTROPY SI_FREEBSD +#define SANITIZER_INTERCEPT_GETENTROPY \ + ((SI_LINUX && __GLIBC_PREREQ(2, 25)) || SI_FREEBSD || SI_SOLARIS) #define SANITIZER_INTERCEPT_QSORT \ (SI_POSIX && !SI_IOSSIM && !SI_WATCHOS && !SI_TVOS && !SI_ANDROID) #define SANITIZER_INTERCEPT_QSORT_R SI_GLIBC @@ -591,6 +596,7 @@ #define SANITIZER_INTERCEPT_PROCCTL SI_FREEBSD #define SANITIZER_INTERCEPT_HEXDUMP SI_FREEBSD #define SANITIZER_INTERCEPT_ARGP_PARSE SI_GLIBC +#define SANITIZER_INTERCEPT_CPUSET_GETAFFINITY SI_FREEBSD // This macro gives a way for downstream users to override the above // interceptor macros irrespective of the platform they are on. They have diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_freebsd.cpp b/libsanitizer/sanitizer_common/sanitizer_platform_limits_freebsd.cpp index 37e72cd5d45e..38f968d533b1 100644 --- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_freebsd.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_freebsd.cpp @@ -17,6 +17,7 @@ #include #include +#include #include #include #include @@ -103,6 +104,7 @@ void *__sanitizer_get_link_map_by_dlopen_handle(void *handle) { return internal_dlinfo(handle, RTLD_DI_LINKMAP, &p) == 0 ? p : nullptr; } +unsigned struct_cpuset_sz = sizeof(cpuset_t); unsigned struct_cap_rights_sz = sizeof(cap_rights_t); unsigned struct_utsname_sz = sizeof(struct utsname); unsigned struct_stat_sz = sizeof(struct stat); @@ -173,6 +175,12 @@ uptr __sanitizer_in_addr_sz(int af) { return 0; } +// For FreeBSD the actual size of a directory entry is not always in d_reclen. +// Use the appropriate macro to get the correct size for all cases (e.g. NFS). +u16 __sanitizer_dirsiz(const __sanitizer_dirent *dp) { + return _GENERIC_DIRSIZ(dp); +} + unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); int glob_nomatch = GLOB_NOMATCH; int glob_altdirfunc = GLOB_ALTDIRFUNC; @@ -558,4 +566,5 @@ COMPILER_CHECK(__sanitizer_XDR_FREE == XDR_FREE); CHECK_TYPE_SIZE(sem_t); COMPILER_CHECK(sizeof(__sanitizer_cap_rights_t) >= sizeof(cap_rights_t)); +COMPILER_CHECK(sizeof(__sanitizer_cpuset_t) >= sizeof(cpuset_t)); #endif // SANITIZER_FREEBSD diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_freebsd.h b/libsanitizer/sanitizer_common/sanitizer_platform_limits_freebsd.h index daef1177a2db..b119f059007d 100644 --- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_freebsd.h +++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_freebsd.h @@ -249,9 +249,15 @@ struct __sanitizer_dirent { unsigned int d_fileno; # endif unsigned short d_reclen; - // more fields that we don't care about + u8 d_type; + u8 d_pad0; + u16 d_namlen; + u16 d_pad1; + char d_name[256]; }; +u16 __sanitizer_dirsiz(const __sanitizer_dirent *dp); + // 'clock_t' is 32 bits wide on x64 FreeBSD typedef int __sanitizer_clock_t; typedef int __sanitizer_clockid_t; @@ -709,6 +715,17 @@ extern unsigned struct_cap_rights_sz; extern unsigned struct_fstab_sz; extern unsigned struct_StringList_sz; + +struct __sanitizer_cpuset { +#if __FreeBSD_version >= 1400090 + long __bits[(1024 + (sizeof(long) * 8) - 1) / (sizeof(long) * 8)]; +#else + long __bits[(256 + (sizeof(long) * 8) - 1) / (sizeof(long) * 8)]; +#endif +}; + +typedef struct __sanitizer_cpuset __sanitizer_cpuset_t; +extern unsigned struct_cpuset_sz; } // namespace __sanitizer # define CHECK_TYPE_SIZE(TYPE) \ diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_linux.cpp b/libsanitizer/sanitizer_common/sanitizer_platform_limits_linux.cpp index c278c8797f75..bf0f355847cb 100644 --- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_linux.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_linux.cpp @@ -26,10 +26,7 @@ // With old kernels (and even new kernels on powerpc) asm/stat.h uses types that // are not defined anywhere in userspace headers. Fake them. This seems to work -// fine with newer headers, too. Beware that with , struct stat -// takes the form of struct stat64 on 32-bit platforms if _FILE_OFFSET_BITS=64. -// Also, for some platforms (e.g. mips) there are additional members in the -// struct stat:s. +// fine with newer headers, too. #include # if defined(__x86_64__) || defined(__mips__) || defined(__hexagon__) # include diff --git a/libsanitizer/sanitizer_common/sanitizer_posix.cpp b/libsanitizer/sanitizer_common/sanitizer_posix.cpp index f6b0bbd3a5db..8d2c5b2cefbe 100644 --- a/libsanitizer/sanitizer_common/sanitizer_posix.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_posix.cpp @@ -154,6 +154,10 @@ bool MprotectReadOnly(uptr addr, uptr size) { return 0 == internal_mprotect((void *)addr, size, PROT_READ); } +bool MprotectReadWrite(uptr addr, uptr size) { + return 0 == internal_mprotect((void *)addr, size, PROT_READ | PROT_WRITE); +} + #if !SANITIZER_APPLE void MprotectMallocZones(void *addr, int prot) {} #endif diff --git a/libsanitizer/sanitizer_common/sanitizer_posix.h b/libsanitizer/sanitizer_common/sanitizer_posix.h index f91e26e74b87..c5811dffea94 100644 --- a/libsanitizer/sanitizer_common/sanitizer_posix.h +++ b/libsanitizer/sanitizer_common/sanitizer_posix.h @@ -90,7 +90,7 @@ int real_pthread_join(void *th, void **ret); } \ } // namespace __sanitizer -int my_pthread_attr_getstack(void *attr, void **addr, uptr *size); +int internal_pthread_attr_getstack(void *attr, void **addr, uptr *size); // A routine named real_sigaction() must be implemented by each sanitizer in // order for internal_sigaction() to bypass interceptors. @@ -120,6 +120,9 @@ int GetNamedMappingFd(const char *name, uptr size, int *flags); // alive at least as long as the mapping exists. void DecorateMapping(uptr addr, uptr size, const char *name); +# if !SANITIZER_FREEBSD +# define __sanitizer_dirsiz(dp) ((dp)->d_reclen) +# endif } // namespace __sanitizer diff --git a/libsanitizer/sanitizer_common/sanitizer_posix_libcdep.cpp b/libsanitizer/sanitizer_common/sanitizer_posix_libcdep.cpp index 46e41c669738..e88e654eec5a 100644 --- a/libsanitizer/sanitizer_common/sanitizer_posix_libcdep.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_posix_libcdep.cpp @@ -383,7 +383,7 @@ SANITIZER_WEAK_ATTRIBUTE int real_pthread_attr_getstack(void *attr, void **addr, size_t *size); } // extern "C" -int my_pthread_attr_getstack(void *attr, void **addr, uptr *size) { +int internal_pthread_attr_getstack(void *attr, void **addr, uptr *size) { #if !SANITIZER_GO && !SANITIZER_APPLE if (&real_pthread_attr_getstack) return real_pthread_attr_getstack((pthread_attr_t *)attr, addr, @@ -397,7 +397,7 @@ void AdjustStackSize(void *attr_) { pthread_attr_t *attr = (pthread_attr_t *)attr_; uptr stackaddr = 0; uptr stacksize = 0; - my_pthread_attr_getstack(attr, (void**)&stackaddr, &stacksize); + internal_pthread_attr_getstack(attr, (void **)&stackaddr, &stacksize); // GLibC will return (0 - stacksize) as the stack address in the case when // stacksize is set, but stackaddr is not. bool stack_set = (stackaddr != 0) && (stackaddr + stacksize != 0); diff --git a/libsanitizer/sanitizer_common/sanitizer_printf.cpp b/libsanitizer/sanitizer_common/sanitizer_printf.cpp index 3a9e366d2df9..62c1cf4abe42 100644 --- a/libsanitizer/sanitizer_common/sanitizer_printf.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_printf.cpp @@ -337,7 +337,14 @@ int internal_snprintf(char *buffer, uptr length, const char *format, ...) { return needed_length; } -void InternalScopedString::append(const char *format, ...) { +void InternalScopedString::Append(const char *str) { + uptr prev_len = length(); + uptr str_len = internal_strlen(str); + buffer_.resize(prev_len + str_len + 1); + internal_memcpy(buffer_.data() + prev_len, str, str_len + 1); +} + +void InternalScopedString::AppendF(const char *format, ...) { uptr prev_len = length(); while (true) { diff --git a/libsanitizer/sanitizer_common/sanitizer_procmaps_mac.cpp b/libsanitizer/sanitizer_common/sanitizer_procmaps_mac.cpp index f2f384671211..b44e016a0e5b 100644 --- a/libsanitizer/sanitizer_common/sanitizer_procmaps_mac.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_procmaps_mac.cpp @@ -146,13 +146,8 @@ static bool IsDyldHdr(const mach_header *hdr) { // until we hit a Mach header matching dyld instead. These recurse // calls are expensive, but the first memory map generation occurs // early in the process, when dyld is one of the only images loaded, -// so it will be hit after only a few iterations. These assumptions don't -// hold on macOS 13+ anymore (dyld itself has moved into the shared cache). - -// FIXME: Unfortunately, the upstream revised version to deal with macOS 13+ -// is incompatible with GCC and also uses APIs not available on earlier -// systems which we support; backed out for now. - +// so it will be hit after only a few iterations. These assumptions don't hold +// on macOS 13+ anymore (dyld itself has moved into the shared cache). static mach_header *GetDyldImageHeaderViaVMRegion() { vm_address_t address = 0; @@ -176,17 +171,64 @@ static mach_header *GetDyldImageHeaderViaVMRegion() { } } +extern "C" { +struct dyld_shared_cache_dylib_text_info { + uint64_t version; // current version 2 + // following fields all exist in version 1 + uint64_t loadAddressUnslid; + uint64_t textSegmentSize; + uuid_t dylibUuid; + const char *path; // pointer invalid at end of iterations + // following fields all exist in version 2 + uint64_t textSegmentOffset; // offset from start of cache +}; +typedef struct dyld_shared_cache_dylib_text_info + dyld_shared_cache_dylib_text_info; + +extern bool _dyld_get_shared_cache_uuid(uuid_t uuid); +extern const void *_dyld_get_shared_cache_range(size_t *length); +extern int dyld_shared_cache_iterate_text( + const uuid_t cacheUuid, + void (^callback)(const dyld_shared_cache_dylib_text_info *info)); +} // extern "C" + +static mach_header *GetDyldImageHeaderViaSharedCache() { + uuid_t uuid; + bool hasCache = _dyld_get_shared_cache_uuid(uuid); + if (!hasCache) + return nullptr; + + size_t cacheLength; + __block uptr cacheStart = (uptr)_dyld_get_shared_cache_range(&cacheLength); + CHECK(cacheStart && cacheLength); + + __block mach_header *dyldHdr = nullptr; + int res = dyld_shared_cache_iterate_text( + uuid, ^(const dyld_shared_cache_dylib_text_info *info) { + CHECK_GE(info->version, 2); + mach_header *hdr = + (mach_header *)(cacheStart + info->textSegmentOffset); + if (IsDyldHdr(hdr)) + dyldHdr = hdr; + }); + CHECK_EQ(res, 0); + + return dyldHdr; +} + const mach_header *get_dyld_hdr() { if (!dyld_hdr) { // On macOS 13+, dyld itself has moved into the shared cache. Looking it up // via vm_region_recurse_64() causes spins/hangs/crashes. - // FIXME: find a way to do this compatible with GCC. if (GetMacosAlignedVersion() >= MacosVersion(13, 0)) { + dyld_hdr = GetDyldImageHeaderViaSharedCache(); + if (!dyld_hdr) { VReport(1, - "looking up the dyld image header in the shared cache on " - "macOS 13+ is not yet supported. Falling back to " + "Failed to lookup the dyld image header in the shared cache on " + "macOS 13+ (or no shared cache in use). Falling back to " "lookup via vm_region_recurse_64().\n"); dyld_hdr = GetDyldImageHeaderViaVMRegion(); + } } else { dyld_hdr = GetDyldImageHeaderViaVMRegion(); } diff --git a/libsanitizer/sanitizer_common/sanitizer_quarantine.h b/libsanitizer/sanitizer_common/sanitizer_quarantine.h index 4aa605485166..460d96ea681b 100644 --- a/libsanitizer/sanitizer_common/sanitizer_quarantine.h +++ b/libsanitizer/sanitizer_common/sanitizer_quarantine.h @@ -68,10 +68,6 @@ struct QuarantineBatch { COMPILER_CHECK(sizeof(QuarantineBatch) <= (1 << 13)); // 8Kb. -// The callback interface is: -// void Callback::Recycle(Node *ptr); -// void *cb.Allocate(uptr size); -// void cb.Deallocate(void *ptr); template class Quarantine { public: @@ -94,21 +90,20 @@ class Quarantine { recycle_mutex_.Init(); } - uptr GetSize() const { return atomic_load_relaxed(&max_size_); } - uptr GetCacheSize() const { - return atomic_load_relaxed(&max_cache_size_); - } + uptr GetMaxSize() const { return atomic_load_relaxed(&max_size_); } + uptr GetMaxCacheSize() const { return atomic_load_relaxed(&max_cache_size_); } void Put(Cache *c, Callback cb, Node *ptr, uptr size) { - uptr cache_size = GetCacheSize(); - if (cache_size) { + uptr max_cache_size = GetMaxCacheSize(); + if (max_cache_size && size <= GetMaxSize()) { + cb.PreQuarantine(ptr); c->Enqueue(cb, ptr, size); } else { - // GetCacheSize() == 0 only when GetSize() == 0 (see Init). - cb.Recycle(ptr); + // GetMaxCacheSize() == 0 only when GetMaxSize() == 0 (see Init). + cb.RecyclePassThrough(ptr); } // Check cache size anyway to accommodate for runtime cache_size change. - if (c->Size() > cache_size) + if (c->Size() > max_cache_size) Drain(c, cb); } @@ -117,7 +112,7 @@ class Quarantine { SpinMutexLock l(&cache_mutex_); cache_.Transfer(c); } - if (cache_.Size() > GetSize() && recycle_mutex_.TryLock()) + if (cache_.Size() > GetMaxSize() && recycle_mutex_.TryLock()) Recycle(atomic_load_relaxed(&min_size_), cb); } @@ -133,7 +128,7 @@ class Quarantine { void PrintStats() const { // It assumes that the world is stopped, just as the allocator's PrintStats. Printf("Quarantine limits: global: %zdMb; thread local: %zdKb\n", - GetSize() >> 20, GetCacheSize() >> 10); + GetMaxSize() >> 20, GetMaxCacheSize() >> 10); cache_.PrintStats(); } diff --git a/libsanitizer/sanitizer_common/sanitizer_range.cpp b/libsanitizer/sanitizer_common/sanitizer_range.cpp new file mode 100644 index 000000000000..68d79f18ac8d --- /dev/null +++ b/libsanitizer/sanitizer_common/sanitizer_range.cpp @@ -0,0 +1,62 @@ +//===-- sanitizer_range.cpp -----------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "sanitizer_range.h" + +#include "sanitizer_common/sanitizer_array_ref.h" + +namespace __sanitizer { + +void Intersect(ArrayRef a, ArrayRef b, + InternalMmapVectorNoCtor &output) { + output.clear(); + + struct Event { + uptr val; + s8 diff1; + s8 diff2; + }; + + InternalMmapVector events; + for (const Range &r : a) { + CHECK_LE(r.begin, r.end); + events.push_back({r.begin, 1, 0}); + events.push_back({r.end, -1, 0}); + } + + for (const Range &r : b) { + CHECK_LE(r.begin, r.end); + events.push_back({r.begin, 0, 1}); + events.push_back({r.end, 0, -1}); + } + + Sort(events.data(), events.size(), + [](const Event &lh, const Event &rh) { return lh.val < rh.val; }); + + uptr start = 0; + sptr state1 = 0; + sptr state2 = 0; + for (const auto &e : events) { + if (e.val != start) { + DCHECK_GE(state1, 0); + DCHECK_GE(state2, 0); + if (state1 && state2) { + if (!output.empty() && start == output.back().end) + output.back().end = e.val; + else + output.push_back({start, e.val}); + } + start = e.val; + } + + state1 += e.diff1; + state2 += e.diff2; + } +} + +} // namespace __sanitizer diff --git a/libsanitizer/sanitizer_common/sanitizer_range.h b/libsanitizer/sanitizer_common/sanitizer_range.h new file mode 100644 index 000000000000..7c593e171ba2 --- /dev/null +++ b/libsanitizer/sanitizer_common/sanitizer_range.h @@ -0,0 +1,40 @@ +//===-- sanitizer_range.h ---------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// Contais Range and related utilities. +// +//===----------------------------------------------------------------------===// + +#ifndef SANITIZER_RANGE_H +#define SANITIZER_RANGE_H + +#include "sanitizer_common.h" +#include "sanitizer_common/sanitizer_array_ref.h" + +namespace __sanitizer { + +struct Range { + uptr begin; + uptr end; +}; + +inline bool operator==(const Range &lhs, const Range &rhs) { + return lhs.begin == rhs.begin && lhs.end == rhs.end; +} + +inline bool operator!=(const Range &lhs, const Range &rhs) { + return !(lhs == rhs); +} + +// Calculates intersection of two sets of regions in O(N log N) time. +void Intersect(ArrayRef a, ArrayRef b, + InternalMmapVectorNoCtor &output); + +} // namespace __sanitizer + +#endif // SANITIZER_RANGE_H diff --git a/libsanitizer/sanitizer_common/sanitizer_redefine_builtins.h b/libsanitizer/sanitizer_common/sanitizer_redefine_builtins.h new file mode 100644 index 000000000000..d24b179ef320 --- /dev/null +++ b/libsanitizer/sanitizer_common/sanitizer_redefine_builtins.h @@ -0,0 +1,56 @@ +//===-- sanitizer_redefine_builtins.h ---------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// Redefine builtin functions to use internal versions. This is needed where +// compiler optimizations end up producing unwanted libcalls! +// +//===----------------------------------------------------------------------===// +#ifndef SANITIZER_COMMON_NO_REDEFINE_BUILTINS +# ifndef SANITIZER_REDEFINE_BUILTINS_H +# define SANITIZER_REDEFINE_BUILTINS_H + +// The asm hack only works with GCC and Clang. +# if !defined(_WIN32) + +asm("memcpy = __sanitizer_internal_memcpy"); +asm("memmove = __sanitizer_internal_memmove"); +asm("memset = __sanitizer_internal_memset"); + +# if defined(__cplusplus) && \ + !defined(SANITIZER_COMMON_REDEFINE_BUILTINS_IN_STD) + +// The builtins should not be redefined in source files that make use of C++ +// standard libraries, in particular where C++STL headers with inline functions +// are used. The redefinition in such cases would lead to ODR violations. +// +// Try to break the build in common cases where builtins shouldn't be redefined. +namespace std { +class Define_SANITIZER_COMMON_NO_REDEFINE_BUILTINS_in_cpp_file { + Define_SANITIZER_COMMON_NO_REDEFINE_BUILTINS_in_cpp_file( + const Define_SANITIZER_COMMON_NO_REDEFINE_BUILTINS_in_cpp_file&) = delete; + Define_SANITIZER_COMMON_NO_REDEFINE_BUILTINS_in_cpp_file& operator=( + const Define_SANITIZER_COMMON_NO_REDEFINE_BUILTINS_in_cpp_file&) = delete; +}; +using array = Define_SANITIZER_COMMON_NO_REDEFINE_BUILTINS_in_cpp_file; +using atomic = Define_SANITIZER_COMMON_NO_REDEFINE_BUILTINS_in_cpp_file; +using function = Define_SANITIZER_COMMON_NO_REDEFINE_BUILTINS_in_cpp_file; +using map = Define_SANITIZER_COMMON_NO_REDEFINE_BUILTINS_in_cpp_file; +using set = Define_SANITIZER_COMMON_NO_REDEFINE_BUILTINS_in_cpp_file; +using shared_ptr = Define_SANITIZER_COMMON_NO_REDEFINE_BUILTINS_in_cpp_file; +using string = Define_SANITIZER_COMMON_NO_REDEFINE_BUILTINS_in_cpp_file; +using unique_ptr = Define_SANITIZER_COMMON_NO_REDEFINE_BUILTINS_in_cpp_file; +using unordered_map = Define_SANITIZER_COMMON_NO_REDEFINE_BUILTINS_in_cpp_file; +using unordered_set = Define_SANITIZER_COMMON_NO_REDEFINE_BUILTINS_in_cpp_file; +using vector = Define_SANITIZER_COMMON_NO_REDEFINE_BUILTINS_in_cpp_file; +} // namespace std + +# endif // __cpluplus +# endif // !_WIN32 + +# endif // SANITIZER_REDEFINE_BUILTINS_H +#endif // SANITIZER_COMMON_NO_REDEFINE_BUILTINS diff --git a/libsanitizer/sanitizer_common/sanitizer_ring_buffer.h b/libsanitizer/sanitizer_common/sanitizer_ring_buffer.h index f22e40cac284..6222a958b116 100644 --- a/libsanitizer/sanitizer_common/sanitizer_ring_buffer.h +++ b/libsanitizer/sanitizer_common/sanitizer_ring_buffer.h @@ -47,7 +47,9 @@ class RingBuffer { void push(T t) { *next_ = t; next_--; - // The condition below works only if sizeof(T) is divisible by sizeof(T*). + static_assert((sizeof(T) % sizeof(T *)) == 0, + "The condition below works only if sizeof(T) is divisible by " + "sizeof(T*)."); if (next_ <= reinterpret_cast(&next_)) next_ = last_; } diff --git a/libsanitizer/sanitizer_common/sanitizer_signal_interceptors.inc b/libsanitizer/sanitizer_common/sanitizer_signal_interceptors.inc index 475e577d9982..94e4e2954a3b 100644 --- a/libsanitizer/sanitizer_common/sanitizer_signal_interceptors.inc +++ b/libsanitizer/sanitizer_common/sanitizer_signal_interceptors.inc @@ -43,6 +43,7 @@ using namespace __sanitizer; #if SANITIZER_INTERCEPT_BSD_SIGNAL INTERCEPTOR(uptr, bsd_signal, int signum, uptr handler) { + SIGNAL_INTERCEPTOR_ENTER(); if (GetHandleSignalMode(signum) == kHandleSignalExclusive) return 0; SIGNAL_INTERCEPTOR_SIGNAL_IMPL(bsd_signal, signum, handler); } @@ -53,6 +54,7 @@ INTERCEPTOR(uptr, bsd_signal, int signum, uptr handler) { #if SANITIZER_INTERCEPT_SIGNAL_AND_SIGACTION INTERCEPTOR(uptr, signal, int signum, uptr handler) { + SIGNAL_INTERCEPTOR_ENTER(); if (GetHandleSignalMode(signum) == kHandleSignalExclusive) return (uptr) nullptr; SIGNAL_INTERCEPTOR_SIGNAL_IMPL(signal, signum, handler); @@ -61,6 +63,7 @@ INTERCEPTOR(uptr, signal, int signum, uptr handler) { INTERCEPTOR(int, sigaction_symname, int signum, const __sanitizer_sigaction *act, __sanitizer_sigaction *oldact) { + SIGNAL_INTERCEPTOR_ENTER(); if (GetHandleSignalMode(signum) == kHandleSignalExclusive) { if (!oldact) return 0; act = nullptr; diff --git a/libsanitizer/sanitizer_common/sanitizer_stacktrace.cpp b/libsanitizer/sanitizer_common/sanitizer_stacktrace.cpp index 661495e23405..d24fae98213a 100644 --- a/libsanitizer/sanitizer_common/sanitizer_stacktrace.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_stacktrace.cpp @@ -87,8 +87,8 @@ static inline uhwptr *GetCanonicFrame(uptr bp, // Nope, this does not look right either. This means the frame after next does // not have a valid frame pointer, but we can still extract the caller PC. // Unfortunately, there is no way to decide between GCC and LLVM frame - // layouts. Assume GCC. - return bp_prev - 1; + // layouts. Assume LLVM. + return bp_prev; #else return (uhwptr*)bp; #endif @@ -111,21 +111,14 @@ void BufferedStackTrace::UnwindFast(uptr pc, uptr bp, uptr stack_top, IsAligned((uptr)frame, sizeof(*frame)) && size < max_depth) { #ifdef __powerpc__ - // PowerPC ABIs specify that the return address is saved on the - // *caller's* stack frame. Thus we must dereference the back chain - // to find the caller frame before extracting it. + // PowerPC ABIs specify that the return address is saved at offset + // 16 of the *caller's* stack frame. Thus we must dereference the + // back chain to find the caller frame before extracting it. uhwptr *caller_frame = (uhwptr*)frame[0]; if (!IsValidFrame((uptr)caller_frame, stack_top, bottom) || !IsAligned((uptr)caller_frame, sizeof(uhwptr))) break; - // For most ABIs the offset where the return address is saved is two - // register sizes. The exception is the SVR4 ABI, which uses an - // offset of only one register size. -#ifdef _CALL_SYSV - uhwptr pc1 = caller_frame[1]; -#else uhwptr pc1 = caller_frame[2]; -#endif #elif defined(__s390__) uhwptr pc1 = frame[14]; #elif defined(__loongarch__) || defined(__riscv) diff --git a/libsanitizer/sanitizer_common/sanitizer_stacktrace_libcdep.cpp b/libsanitizer/sanitizer_common/sanitizer_stacktrace_libcdep.cpp index 47983ee7ec71..9a4c80fcfdd1 100644 --- a/libsanitizer/sanitizer_common/sanitizer_stacktrace_libcdep.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_stacktrace_libcdep.cpp @@ -29,7 +29,8 @@ class StackTraceTextPrinter { frame_delimiter_(frame_delimiter), output_(output), dedup_token_(dedup_token), - symbolize_(RenderNeedsSymbolization(stack_trace_fmt)) {} + symbolize_(StackTracePrinter::GetOrInit()->RenderNeedsSymbolization( + stack_trace_fmt)) {} bool ProcessAddressFrames(uptr pc) { SymbolizedStack *frames = symbolize_ @@ -40,13 +41,13 @@ class StackTraceTextPrinter { for (SymbolizedStack *cur = frames; cur; cur = cur->next) { uptr prev_len = output_->length(); - RenderFrame(output_, stack_trace_fmt_, frame_num_++, cur->info.address, - symbolize_ ? &cur->info : nullptr, - common_flags()->symbolize_vs_style, - common_flags()->strip_path_prefix); + StackTracePrinter::GetOrInit()->RenderFrame( + output_, stack_trace_fmt_, frame_num_++, cur->info.address, + symbolize_ ? &cur->info : nullptr, common_flags()->symbolize_vs_style, + common_flags()->strip_path_prefix); if (prev_len != output_->length()) - output_->append("%c", frame_delimiter_); + output_->AppendF("%c", frame_delimiter_); ExtendDedupToken(cur); } @@ -62,9 +63,9 @@ class StackTraceTextPrinter { if (dedup_frames_-- > 0) { if (dedup_token_->length()) - dedup_token_->append("--"); - if (stack->info.function != nullptr) - dedup_token_->append("%s", stack->info.function); + dedup_token_->AppendF("--"); + if (stack->info.function) + dedup_token_->Append(stack->info.function); } } @@ -98,7 +99,7 @@ void StackTrace::PrintTo(InternalScopedString *output) const { output, &dedup_token); if (trace == nullptr || size == 0) { - output->append(" \n\n"); + output->AppendF(" \n\n"); return; } @@ -110,11 +111,11 @@ void StackTrace::PrintTo(InternalScopedString *output) const { } // Always add a trailing empty line after stack trace. - output->append("\n"); + output->AppendF("\n"); // Append deduplication token, if non-empty. if (dedup_token.length()) - output->append("DEDUP_TOKEN: %s\n", dedup_token.data()); + output->AppendF("DEDUP_TOKEN: %s\n", dedup_token.data()); } uptr StackTrace::PrintTo(char *out_buf, uptr out_buf_size) const { @@ -197,7 +198,7 @@ void __sanitizer_symbolize_pc(uptr pc, const char *fmt, char *out_buf, StackTraceTextPrinter printer(fmt, '\0', &output, nullptr); if (!printer.ProcessAddressFrames(pc)) { output.clear(); - output.append(""); + output.AppendF(""); } CopyStringToBuffer(output, out_buf, out_buf_size); } @@ -210,7 +211,8 @@ void __sanitizer_symbolize_global(uptr data_addr, const char *fmt, DataInfo DI; if (!Symbolizer::GetOrInit()->SymbolizeData(data_addr, &DI)) return; InternalScopedString data_desc; - RenderData(&data_desc, fmt, &DI, common_flags()->strip_path_prefix); + StackTracePrinter::GetOrInit()->RenderData(&data_desc, fmt, &DI, + common_flags()->strip_path_prefix); internal_strncpy(out_buf, data_desc.data(), out_buf_size); out_buf[out_buf_size - 1] = 0; } diff --git a/libsanitizer/sanitizer_common/sanitizer_stacktrace_printer.cpp b/libsanitizer/sanitizer_common/sanitizer_stacktrace_printer.cpp index 2d0eccc1602a..8db321051e1a 100644 --- a/libsanitizer/sanitizer_common/sanitizer_stacktrace_printer.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_stacktrace_printer.cpp @@ -11,25 +11,62 @@ //===----------------------------------------------------------------------===// #include "sanitizer_stacktrace_printer.h" + #include "sanitizer_file.h" +#include "sanitizer_flags.h" #include "sanitizer_fuchsia.h" namespace __sanitizer { -// sanitizer_symbolizer_markup.cpp implements these differently. -#if !SANITIZER_SYMBOLIZER_MARKUP +StackTracePrinter *StackTracePrinter::GetOrInit() { + static StackTracePrinter *stacktrace_printer; + static StaticSpinMutex init_mu; + SpinMutexLock l(&init_mu); + if (stacktrace_printer) + return stacktrace_printer; -static const char *StripFunctionName(const char *function, const char *prefix) { - if (!function) return nullptr; - if (!prefix) return function; - uptr prefix_len = internal_strlen(prefix); - if (0 == internal_strncmp(function, prefix, prefix_len)) - return function + prefix_len; + stacktrace_printer = + new (GetGlobalLowLevelAllocator()) FormattedStackTracePrinter(); + + CHECK(stacktrace_printer); + return stacktrace_printer; +} + +const char *FormattedStackTracePrinter::StripFunctionName( + const char *function) { + if (!common_flags()->demangle) + return function; + if (!function) + return nullptr; + auto try_strip = [function](const char *prefix) -> const char * { + const uptr prefix_len = internal_strlen(prefix); + if (!internal_strncmp(function, prefix, prefix_len)) + return function + prefix_len; + return nullptr; + }; + if (SANITIZER_APPLE) { + if (const char *s = try_strip("wrap_")) + return s; + } else if (SANITIZER_WINDOWS) { + if (const char *s = try_strip("__asan_wrap_")) + return s; + } else { + if (const char *s = try_strip("___interceptor_")) + return s; + if (const char *s = try_strip("__interceptor_")) + return s; + } return function; } +// sanitizer_symbolizer_markup.cpp implements these differently. +#if !SANITIZER_SYMBOLIZER_MARKUP + static const char *DemangleFunctionName(const char *function) { - if (!function) return nullptr; + if (!common_flags()->demangle) + return function; + if (!function) + return nullptr; // NetBSD uses indirection for old threading functions for historical reasons // The mangled names are internal implementation detail and should not be @@ -108,20 +145,23 @@ static void MaybeBuildIdToBuffer(const AddressInfo &info, bool PrefixSpace, InternalScopedString *buffer) { if (info.uuid_size) { if (PrefixSpace) - buffer->append(" "); - buffer->append("(BuildId: "); + buffer->AppendF(" "); + buffer->AppendF("(BuildId: "); for (uptr i = 0; i < info.uuid_size; ++i) { - buffer->append("%02x", info.uuid[i]); + buffer->AppendF("%02x", info.uuid[i]); } - buffer->append(")"); + buffer->AppendF(")"); } } static const char kDefaultFormat[] = " #%n %p %F %L"; -void RenderFrame(InternalScopedString *buffer, const char *format, int frame_no, - uptr address, const AddressInfo *info, bool vs_style, - const char *strip_path_prefix, const char *strip_func_prefix) { +void FormattedStackTracePrinter::RenderFrame(InternalScopedString *buffer, + const char *format, int frame_no, + uptr address, + const AddressInfo *info, + bool vs_style, + const char *strip_path_prefix) { // info will be null in the case where symbolization is not needed for the // given format. This ensures that the code below will get a hard failure // rather than print incorrect information in case RenderNeedsSymbolization @@ -132,56 +172,56 @@ void RenderFrame(InternalScopedString *buffer, const char *format, int frame_no, format = kDefaultFormat; for (const char *p = format; *p != '\0'; p++) { if (*p != '%') { - buffer->append("%c", *p); + buffer->AppendF("%c", *p); continue; } p++; switch (*p) { case '%': - buffer->append("%%"); + buffer->Append("%"); break; // Frame number and all fields of AddressInfo structure. case 'n': - buffer->append("%u", frame_no); + buffer->AppendF("%u", frame_no); break; case 'p': - buffer->append("0x%zx", address); + buffer->AppendF("0x%zx", address); break; case 'm': - buffer->append("%s", StripPathPrefix(info->module, strip_path_prefix)); + buffer->AppendF("%s", StripPathPrefix(info->module, strip_path_prefix)); break; case 'o': - buffer->append("0x%zx", info->module_offset); + buffer->AppendF("0x%zx", info->module_offset); break; case 'b': MaybeBuildIdToBuffer(*info, /*PrefixSpace=*/false, buffer); break; case 'f': - buffer->append("%s", DemangleFunctionName(StripFunctionName( - info->function, strip_func_prefix))); + buffer->AppendF("%s", + DemangleFunctionName(StripFunctionName(info->function))); break; case 'q': - buffer->append("0x%zx", info->function_offset != AddressInfo::kUnknown - ? info->function_offset - : 0x0); + buffer->AppendF("0x%zx", info->function_offset != AddressInfo::kUnknown + ? info->function_offset + : 0x0); break; case 's': - buffer->append("%s", StripPathPrefix(info->file, strip_path_prefix)); + buffer->AppendF("%s", StripPathPrefix(info->file, strip_path_prefix)); break; case 'l': - buffer->append("%d", info->line); + buffer->AppendF("%d", info->line); break; case 'c': - buffer->append("%d", info->column); + buffer->AppendF("%d", info->column); break; // Smarter special cases. case 'F': // Function name and offset, if file is unknown. if (info->function) { - buffer->append("in %s", DemangleFunctionName(StripFunctionName( - info->function, strip_func_prefix))); + buffer->AppendF( + "in %s", DemangleFunctionName(StripFunctionName(info->function))); if (!info->file && info->function_offset != AddressInfo::kUnknown) - buffer->append("+0x%zx", info->function_offset); + buffer->AppendF("+0x%zx", info->function_offset); } break; case 'S': @@ -198,9 +238,11 @@ void RenderFrame(InternalScopedString *buffer, const char *format, int frame_no, RenderModuleLocation(buffer, info->module, info->module_offset, info->module_arch, strip_path_prefix); +#if !SANITIZER_APPLE MaybeBuildIdToBuffer(*info, /*PrefixSpace=*/true, buffer); +#endif } else { - buffer->append("()"); + buffer->AppendF("()"); } break; case 'M': @@ -211,9 +253,11 @@ void RenderFrame(InternalScopedString *buffer, const char *format, int frame_no, // Always strip the module name for %M. RenderModuleLocation(buffer, StripModuleName(info->module), info->module_offset, info->module_arch, ""); +#if !SANITIZER_APPLE MaybeBuildIdToBuffer(*info, /*PrefixSpace=*/true, buffer); +#endif } else { - buffer->append("(%p)", (void *)address); + buffer->AppendF("(%p)", (void *)address); } break; default: @@ -224,7 +268,7 @@ void RenderFrame(InternalScopedString *buffer, const char *format, int frame_no, } } -bool RenderNeedsSymbolization(const char *format) { +bool FormattedStackTracePrinter::RenderNeedsSymbolization(const char *format) { if (0 == internal_strcmp(format, "DEFAULT")) format = kDefaultFormat; for (const char *p = format; *p != '\0'; p++) { @@ -247,26 +291,28 @@ bool RenderNeedsSymbolization(const char *format) { return false; } -void RenderData(InternalScopedString *buffer, const char *format, - const DataInfo *DI, const char *strip_path_prefix) { +void FormattedStackTracePrinter::RenderData(InternalScopedString *buffer, + const char *format, + const DataInfo *DI, + const char *strip_path_prefix) { for (const char *p = format; *p != '\0'; p++) { if (*p != '%') { - buffer->append("%c", *p); + buffer->AppendF("%c", *p); continue; } p++; switch (*p) { case '%': - buffer->append("%%"); + buffer->Append("%"); break; case 's': - buffer->append("%s", StripPathPrefix(DI->file, strip_path_prefix)); + buffer->AppendF("%s", StripPathPrefix(DI->file, strip_path_prefix)); break; case 'l': - buffer->append("%zu", DI->line); + buffer->AppendF("%zu", DI->line); break; case 'g': - buffer->append("%s", DI->name); + buffer->AppendF("%s", DI->name); break; default: Report("Unsupported specifier in stack frame format: %c (%p)!\n", *p, @@ -278,33 +324,33 @@ void RenderData(InternalScopedString *buffer, const char *format, #endif // !SANITIZER_SYMBOLIZER_MARKUP -void RenderSourceLocation(InternalScopedString *buffer, const char *file, - int line, int column, bool vs_style, - const char *strip_path_prefix) { +void FormattedStackTracePrinter::RenderSourceLocation( + InternalScopedString *buffer, const char *file, int line, int column, + bool vs_style, const char *strip_path_prefix) { if (vs_style && line > 0) { - buffer->append("%s(%d", StripPathPrefix(file, strip_path_prefix), line); + buffer->AppendF("%s(%d", StripPathPrefix(file, strip_path_prefix), line); if (column > 0) - buffer->append(",%d", column); - buffer->append(")"); + buffer->AppendF(",%d", column); + buffer->AppendF(")"); return; } - buffer->append("%s", StripPathPrefix(file, strip_path_prefix)); + buffer->AppendF("%s", StripPathPrefix(file, strip_path_prefix)); if (line > 0) { - buffer->append(":%d", line); + buffer->AppendF(":%d", line); if (column > 0) - buffer->append(":%d", column); + buffer->AppendF(":%d", column); } } -void RenderModuleLocation(InternalScopedString *buffer, const char *module, - uptr offset, ModuleArch arch, - const char *strip_path_prefix) { - buffer->append("(%s", StripPathPrefix(module, strip_path_prefix)); +void FormattedStackTracePrinter::RenderModuleLocation( + InternalScopedString *buffer, const char *module, uptr offset, + ModuleArch arch, const char *strip_path_prefix) { + buffer->AppendF("(%s", StripPathPrefix(module, strip_path_prefix)); if (arch != kModuleArchUnknown) { - buffer->append(":%s", ModuleArchToString(arch)); + buffer->AppendF(":%s", ModuleArchToString(arch)); } - buffer->append("+0x%zx)", offset); + buffer->AppendF("+0x%zx)", offset); } } // namespace __sanitizer diff --git a/libsanitizer/sanitizer_common/sanitizer_stacktrace_printer.h b/libsanitizer/sanitizer_common/sanitizer_stacktrace_printer.h index 96119b2ee9e9..3e02333a8c8d 100644 --- a/libsanitizer/sanitizer_common/sanitizer_stacktrace_printer.h +++ b/libsanitizer/sanitizer_common/sanitizer_stacktrace_printer.h @@ -13,60 +13,102 @@ #define SANITIZER_STACKTRACE_PRINTER_H #include "sanitizer_common.h" +#include "sanitizer_internal_defs.h" #include "sanitizer_symbolizer.h" namespace __sanitizer { -// Render the contents of "info" structure, which represents the contents of -// stack frame "frame_no" and appends it to the "buffer". "format" is a -// string with placeholders, which is copied to the output with -// placeholders substituted with the contents of "info". For example, -// format string -// " frame %n: function %F at %S" -// will be turned into -// " frame 10: function foo::bar() at my/file.cc:10" -// You may additionally pass "strip_path_prefix" to strip prefixes of paths to -// source files and modules, and "strip_func_prefix" to strip prefixes of -// function names. -// Here's the full list of available placeholders: -// %% - represents a '%' character; -// %n - frame number (copy of frame_no); -// %p - PC in hex format; -// %m - path to module (binary or shared object); -// %o - offset in the module in hex format; -// %f - function name; -// %q - offset in the function in hex format (*if available*); -// %s - path to source file; -// %l - line in the source file; -// %c - column in the source file; -// %F - if function is known to be , prints "in ", possibly -// followed by the offset in this function, but only if source file -// is unknown; -// %S - prints file/line/column information; -// %L - prints location information: file/line/column, if it is known, or -// module+offset if it is known, or () string. -// %M - prints module basename and offset, if it is known, or PC. -void RenderFrame(InternalScopedString *buffer, const char *format, int frame_no, - uptr address, const AddressInfo *info, bool vs_style, - const char *strip_path_prefix = "", - const char *strip_func_prefix = ""); +// StacktracePrinter is an interface that is implemented by +// classes that can perform rendering of the different parts +// of a stacktrace. +class StackTracePrinter { + public: + static StackTracePrinter *GetOrInit(); -bool RenderNeedsSymbolization(const char *format); + virtual const char *StripFunctionName(const char *function) = 0; -void RenderSourceLocation(InternalScopedString *buffer, const char *file, - int line, int column, bool vs_style, - const char *strip_path_prefix); + virtual void RenderFrame(InternalScopedString *buffer, const char *format, + int frame_no, uptr address, const AddressInfo *info, + bool vs_style, + const char *strip_path_prefix = "") = 0; -void RenderModuleLocation(InternalScopedString *buffer, const char *module, - uptr offset, ModuleArch arch, - const char *strip_path_prefix); + virtual bool RenderNeedsSymbolization(const char *format) = 0; -// Same as RenderFrame, but for data section (global variables). -// Accepts %s, %l from above. -// Also accepts: -// %g - name of the global variable. -void RenderData(InternalScopedString *buffer, const char *format, - const DataInfo *DI, const char *strip_path_prefix = ""); + virtual void RenderSourceLocation(InternalScopedString *buffer, + const char *file, int line, int column, + bool vs_style, + const char *strip_path_prefix) = 0; + + virtual void RenderModuleLocation(InternalScopedString *buffer, + const char *module, uptr offset, + ModuleArch arch, + const char *strip_path_prefix) = 0; + virtual void RenderData(InternalScopedString *buffer, const char *format, + const DataInfo *DI, + const char *strip_path_prefix = "") = 0; + + protected: + ~StackTracePrinter() {} +}; + +class FormattedStackTracePrinter : public StackTracePrinter { + public: + // Strip interceptor prefixes from function name. + const char *StripFunctionName(const char *function) override; + + // Render the contents of "info" structure, which represents the contents of + // stack frame "frame_no" and appends it to the "buffer". "format" is a + // string with placeholders, which is copied to the output with + // placeholders substituted with the contents of "info". For example, + // format string + // " frame %n: function %F at %S" + // will be turned into + // " frame 10: function foo::bar() at my/file.cc:10" + // You may additionally pass "strip_path_prefix" to strip prefixes of paths to + // source files and modules. + // Here's the full list of available placeholders: + // %% - represents a '%' character; + // %n - frame number (copy of frame_no); + // %p - PC in hex format; + // %m - path to module (binary or shared object); + // %o - offset in the module in hex format; + // %f - function name; + // %q - offset in the function in hex format (*if available*); + // %s - path to source file; + // %l - line in the source file; + // %c - column in the source file; + // %F - if function is known to be , prints "in ", possibly + // followed by the offset in this function, but only if source file + // is unknown; + // %S - prints file/line/column information; + // %L - prints location information: file/line/column, if it is known, or + // module+offset if it is known, or () string. + // %M - prints module basename and offset, if it is known, or PC. + void RenderFrame(InternalScopedString *buffer, const char *format, + int frame_no, uptr address, const AddressInfo *info, + bool vs_style, const char *strip_path_prefix = "") override; + + bool RenderNeedsSymbolization(const char *format) override; + + void RenderSourceLocation(InternalScopedString *buffer, const char *file, + int line, int column, bool vs_style, + const char *strip_path_prefix) override; + + void RenderModuleLocation(InternalScopedString *buffer, const char *module, + uptr offset, ModuleArch arch, + const char *strip_path_prefix) override; + + // Same as RenderFrame, but for data section (global variables). + // Accepts %s, %l from above. + // Also accepts: + // %g - name of the global variable. + void RenderData(InternalScopedString *buffer, const char *format, + const DataInfo *DI, + const char *strip_path_prefix = "") override; + + protected: + ~FormattedStackTracePrinter() {} +}; } // namespace __sanitizer diff --git a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp index 13b90ce9bf51..25c4af708560 100644 --- a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp @@ -565,7 +565,7 @@ PtraceRegistersStatus SuspendedThreadsListLinux::GetRegistersAndSP( constexpr uptr uptr_sz = sizeof(uptr); int pterrno; #ifdef ARCH_IOVEC_FOR_GETREGSET - auto append = [&](uptr regset) { + auto AppendF = [&](uptr regset) { uptr size = buffer->size(); // NT_X86_XSTATE requires 64bit alignment. uptr size_up = RoundUpTo(size, 8 / uptr_sz); @@ -596,11 +596,11 @@ PtraceRegistersStatus SuspendedThreadsListLinux::GetRegistersAndSP( }; buffer->clear(); - bool fail = !append(NT_PRSTATUS); + bool fail = !AppendF(NT_PRSTATUS); if (!fail) { // Accept the first available and do not report errors. for (uptr regs : kExtraRegs) - if (regs && append(regs)) + if (regs && AppendF(regs)) break; } #else diff --git a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_mac.cpp b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_mac.cpp index 3ebeac52280a..813616467656 100644 --- a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_mac.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_mac.cpp @@ -154,12 +154,10 @@ PtraceRegistersStatus SuspendedThreadsListMac::GetRegistersAndSP( ®_count); if (err != KERN_SUCCESS) { VReport(1, "Error - unable to get registers for a thread\n"); - // KERN_INVALID_ARGUMENT indicates that either the flavor is invalid, - // or the thread does not exist. The other possible error case, // MIG_ARRAY_TOO_LARGE, means that the state is too large, but it's // still safe to proceed. - return err == KERN_INVALID_ARGUMENT ? REGISTERS_UNAVAILABLE_FATAL - : REGISTERS_UNAVAILABLE; + return err == MIG_ARRAY_TOO_LARGE ? REGISTERS_UNAVAILABLE + : REGISTERS_UNAVAILABLE_FATAL; } buffer->resize(RoundUpTo(sizeof(regs), sizeof(uptr)) / sizeof(uptr)); diff --git a/libsanitizer/sanitizer_common/sanitizer_symbolizer.cpp b/libsanitizer/sanitizer_common/sanitizer_symbolizer.cpp index d3cffaa6eeff..519f768f8969 100644 --- a/libsanitizer/sanitizer_common/sanitizer_symbolizer.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_symbolizer.cpp @@ -10,6 +10,8 @@ // run-time libraries. //===----------------------------------------------------------------------===// +#include + #include "sanitizer_allocator_internal.h" #include "sanitizer_common.h" #include "sanitizer_internal_defs.h" @@ -128,7 +130,7 @@ Symbolizer::Symbolizer(IntrusiveList tools) start_hook_(0), end_hook_(0) {} Symbolizer::SymbolizerScope::SymbolizerScope(const Symbolizer *sym) - : sym_(sym) { + : sym_(sym), errno_(errno) { if (sym_->start_hook_) sym_->start_hook_(); } @@ -136,6 +138,7 @@ Symbolizer::SymbolizerScope::SymbolizerScope(const Symbolizer *sym) Symbolizer::SymbolizerScope::~SymbolizerScope() { if (sym_->end_hook_) sym_->end_hook_(); + errno = errno_; } } // namespace __sanitizer diff --git a/libsanitizer/sanitizer_common/sanitizer_symbolizer.h b/libsanitizer/sanitizer_common/sanitizer_symbolizer.h index bad4761e345f..7fb7928dce0d 100644 --- a/libsanitizer/sanitizer_common/sanitizer_symbolizer.h +++ b/libsanitizer/sanitizer_common/sanitizer_symbolizer.h @@ -136,7 +136,7 @@ class Symbolizer final { // Release internal caches (if any). void Flush(); - // Attempts to demangle the provided C++ mangled name. + // Attempts to demangle the provided C++ mangled name. Never returns nullptr. const char *Demangle(const char *name); // Allow user to install hooks that would be called before/after Symbolizer @@ -187,7 +187,7 @@ class Symbolizer final { // If stale, need to reload the modules before looking up addresses. bool modules_fresh_; - // Platform-specific default demangler, must not return nullptr. + // Platform-specific default demangler, returns nullptr on failure. const char *PlatformDemangle(const char *name); static Symbolizer *symbolizer_; @@ -212,6 +212,7 @@ class Symbolizer final { ~SymbolizerScope(); private: const Symbolizer *sym_; + int errno_; // Backup errno in case symbolizer change the value. }; }; diff --git a/libsanitizer/sanitizer_common/sanitizer_symbolizer_internal.h b/libsanitizer/sanitizer_common/sanitizer_symbolizer_internal.h index 3ec4d80105a2..2345aee98554 100644 --- a/libsanitizer/sanitizer_common/sanitizer_symbolizer_internal.h +++ b/libsanitizer/sanitizer_common/sanitizer_symbolizer_internal.h @@ -160,6 +160,15 @@ void ParseSymbolizePCOutput(const char *str, SymbolizedStack *res); // Used by LLVMSymbolizer and InternalSymbolizer. void ParseSymbolizeDataOutput(const char *str, DataInfo *info); +// Parses repeated strings in the following format: +// +// +// :[:] +// [|??] [|??] [|??] +// Used by LLVMSymbolizer and InternalSymbolizer. +void ParseSymbolizeFrameOutput(const char *str, + InternalMmapVector *locals); + } // namespace __sanitizer #endif // SANITIZER_SYMBOLIZER_INTERNAL_H diff --git a/libsanitizer/sanitizer_common/sanitizer_symbolizer_libbacktrace.cpp b/libsanitizer/sanitizer_common/sanitizer_symbolizer_libbacktrace.cpp index cc02c77bccdc..d78dab93487f 100644 --- a/libsanitizer/sanitizer_common/sanitizer_symbolizer_libbacktrace.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_symbolizer_libbacktrace.cpp @@ -199,7 +199,7 @@ static char *DemangleAlloc(const char *name, bool always_alloc) { #endif if (always_alloc) return internal_strdup(name); - return 0; + return nullptr; } const char *LibbacktraceSymbolizer::Demangle(const char *name) { diff --git a/libsanitizer/sanitizer_common/sanitizer_symbolizer_libcdep.cpp b/libsanitizer/sanitizer_common/sanitizer_symbolizer_libcdep.cpp index a6f82ced2036..81141023386e 100644 --- a/libsanitizer/sanitizer_common/sanitizer_symbolizer_libcdep.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_symbolizer_libcdep.cpp @@ -117,7 +117,7 @@ bool Symbolizer::SymbolizeData(uptr addr, DataInfo *info) { return true; } } - return true; + return false; } bool Symbolizer::SymbolizeFrame(uptr addr, FrameInfo *info) { @@ -133,7 +133,7 @@ bool Symbolizer::SymbolizeFrame(uptr addr, FrameInfo *info) { return true; } } - return true; + return false; } bool Symbolizer::GetModuleNameAndOffsetForPC(uptr pc, const char **module_name, @@ -159,13 +159,16 @@ void Symbolizer::Flush() { } const char *Symbolizer::Demangle(const char *name) { + CHECK(name); Lock l(&mu_); for (auto &tool : tools_) { SymbolizerScope sym_scope(this); if (const char *demangled = tool.Demangle(name)) return demangled; } - return PlatformDemangle(name); + if (const char *demangled = PlatformDemangle(name)) + return demangled; + return name; } bool Symbolizer::FindModuleNameAndOffsetForAddress(uptr address, @@ -382,8 +385,8 @@ void ParseSymbolizeDataOutput(const char *str, DataInfo *info) { str = ExtractUptr(str, "\n", &info->line); } -static void ParseSymbolizeFrameOutput(const char *str, - InternalMmapVector *locals) { +void ParseSymbolizeFrameOutput(const char *str, + InternalMmapVector *locals) { if (internal_strncmp(str, "??", 2) == 0) return; diff --git a/libsanitizer/sanitizer_common/sanitizer_symbolizer_mac.cpp b/libsanitizer/sanitizer_common/sanitizer_symbolizer_mac.cpp index a9c958b2d100..f1cc0b5e1e8a 100644 --- a/libsanitizer/sanitizer_common/sanitizer_symbolizer_mac.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_symbolizer_mac.cpp @@ -42,7 +42,8 @@ bool DlAddrSymbolizer::SymbolizePC(uptr addr, SymbolizedStack *stack) { } const char *demangled = DemangleSwiftAndCXX(info.dli_sname); - if (!demangled) return false; + if (!demangled) + demangled = info.dli_sname; stack->info.function = internal_strdup(demangled); return true; } @@ -52,6 +53,8 @@ bool DlAddrSymbolizer::SymbolizeData(uptr addr, DataInfo *datainfo) { int result = dladdr((const void *)addr, &info); if (!result) return false; const char *demangled = DemangleSwiftAndCXX(info.dli_sname); + if (!demangled) + demangled = info.dli_sname; datainfo->name = internal_strdup(demangled); datainfo->start = (uptr)info.dli_saddr; return true; diff --git a/libsanitizer/sanitizer_common/sanitizer_symbolizer_markup.cpp b/libsanitizer/sanitizer_common/sanitizer_symbolizer_markup.cpp index 1ec0c5cad7a2..d1b0f46004ef 100644 --- a/libsanitizer/sanitizer_common/sanitizer_symbolizer_markup.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_symbolizer_markup.cpp @@ -22,6 +22,7 @@ # include # include "sanitizer_stacktrace.h" +# include "sanitizer_stacktrace_printer.h" # include "sanitizer_symbolizer.h" namespace __sanitizer { @@ -81,19 +82,26 @@ bool Symbolizer::SymbolizeData(uptr addr, DataInfo *info) { } // We ignore the format argument to __sanitizer_symbolize_global. -void RenderData(InternalScopedString *buffer, const char *format, - const DataInfo *DI, const char *strip_path_prefix) { - buffer->append(kFormatData, DI->start); +void FormattedStackTracePrinter::RenderData(InternalScopedString *buffer, + const char *format, + const DataInfo *DI, + const char *strip_path_prefix) { + buffer->AppendF(kFormatData, DI->start); } -bool RenderNeedsSymbolization(const char *format) { return false; } +bool FormattedStackTracePrinter::RenderNeedsSymbolization(const char *format) { + return false; +} // We don't support the stack_trace_format flag at all. -void RenderFrame(InternalScopedString *buffer, const char *format, int frame_no, - uptr address, const AddressInfo *info, bool vs_style, - const char *strip_path_prefix, const char *strip_func_prefix) { +void FormattedStackTracePrinter::RenderFrame(InternalScopedString *buffer, + const char *format, int frame_no, + uptr address, + const AddressInfo *info, + bool vs_style, + const char *strip_path_prefix) { CHECK(!RenderNeedsSymbolization(format)); - buffer->append(kFormatFrame, frame_no, address); + buffer->AppendF(kFormatFrame, frame_no, address); } Symbolizer *Symbolizer::PlatformInit() { diff --git a/libsanitizer/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp b/libsanitizer/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp index 1a5e38faea88..d92349c04fff 100644 --- a/libsanitizer/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp @@ -56,7 +56,7 @@ const char *DemangleCXXABI(const char *name) { __cxxabiv1::__cxa_demangle(name, 0, 0, 0)) return demangled_name; - return name; + return nullptr; } // As of now, there are no headers for the Swift runtime. Once they are @@ -324,9 +324,12 @@ __sanitizer_symbolize_code(const char *ModuleName, u64 ModuleOffset, SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE bool __sanitizer_symbolize_data(const char *ModuleName, u64 ModuleOffset, char *Buffer, int MaxLength); +SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE bool +__sanitizer_symbolize_frame(const char *ModuleName, u64 ModuleOffset, + char *Buffer, int MaxLength); SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void __sanitizer_symbolize_flush(); -SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE int +SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE bool __sanitizer_symbolize_demangle(const char *Name, char *Buffer, int MaxLength); SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE bool __sanitizer_symbolize_set_demangle(bool Demangle); @@ -337,19 +340,20 @@ __sanitizer_symbolize_set_inline_frames(bool InlineFrames); class InternalSymbolizer final : public SymbolizerTool { public: static InternalSymbolizer *get(LowLevelAllocator *alloc) { - if (__sanitizer_symbolize_set_demangle) + if (&__sanitizer_symbolize_set_demangle) CHECK(__sanitizer_symbolize_set_demangle(common_flags()->demangle)); - if (__sanitizer_symbolize_set_inline_frames) + if (&__sanitizer_symbolize_set_inline_frames) CHECK(__sanitizer_symbolize_set_inline_frames( common_flags()->symbolize_inline_frames)); - if (__sanitizer_symbolize_code && __sanitizer_symbolize_data) + // These are essential, we don't have InternalSymbolizer without them. + if (&__sanitizer_symbolize_code && &__sanitizer_symbolize_data) return new (*alloc) InternalSymbolizer(); return 0; } bool SymbolizePC(uptr addr, SymbolizedStack *stack) override { bool result = __sanitizer_symbolize_code( - stack->info.module, stack->info.module_offset, buffer_, kBufferSize); + stack->info.module, stack->info.module_offset, buffer_, sizeof(buffer_)); if (result) ParseSymbolizePCOutput(buffer_, stack); return result; @@ -357,7 +361,7 @@ class InternalSymbolizer final : public SymbolizerTool { bool SymbolizeData(uptr addr, DataInfo *info) override { bool result = __sanitizer_symbolize_data(info->module, info->module_offset, - buffer_, kBufferSize); + buffer_, sizeof(buffer_)); if (result) { ParseSymbolizeDataOutput(buffer_, info); info->start += (addr - info->module_offset); // Add the base address. @@ -365,34 +369,35 @@ class InternalSymbolizer final : public SymbolizerTool { return result; } + bool SymbolizeFrame(uptr addr, FrameInfo *info) override { + if (&__sanitizer_symbolize_frame == nullptr) + return false; + bool result = __sanitizer_symbolize_frame(info->module, info->module_offset, + buffer_, sizeof(buffer_)); + if (result) + ParseSymbolizeFrameOutput(buffer_, &info->locals); + return result; + } + void Flush() override { - if (__sanitizer_symbolize_flush) + if (&__sanitizer_symbolize_flush) __sanitizer_symbolize_flush(); } const char *Demangle(const char *name) override { - if (__sanitizer_symbolize_demangle) { - for (uptr res_length = 1024; - res_length <= InternalSizeClassMap::kMaxSize;) { - char *res_buff = static_cast(InternalAlloc(res_length)); - uptr req_length = - __sanitizer_symbolize_demangle(name, res_buff, res_length); - if (req_length > res_length) { - res_length = req_length + 1; - InternalFree(res_buff); - continue; - } - return res_buff; - } + if (&__sanitizer_symbolize_demangle && + __sanitizer_symbolize_demangle(name, buffer_, sizeof(buffer_))) { + char *res_buff = nullptr; + ExtractToken(buffer_, "", &res_buff); + return res_buff; } - return name; + return nullptr; } private: InternalSymbolizer() {} - static const int kBufferSize = 16 * 1024; - char buffer_[kBufferSize]; + char buffer_[16 * 1024]; }; # else // SANITIZER_SUPPORTS_WEAK_HOOKS diff --git a/libsanitizer/sanitizer_common/sanitizer_symbolizer_report.cpp b/libsanitizer/sanitizer_common/sanitizer_symbolizer_report.cpp index 73915715c5ba..3e4417ae3f57 100644 --- a/libsanitizer/sanitizer_common/sanitizer_symbolizer_report.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_symbolizer_report.cpp @@ -32,10 +32,10 @@ void ReportErrorSummary(const char *error_type, const AddressInfo &info, const char *alt_tool_name) { if (!common_flags()->print_summary) return; InternalScopedString buff; - buff.append("%s ", error_type); - RenderFrame(&buff, "%L %F", 0, info.address, &info, - common_flags()->symbolize_vs_style, - common_flags()->strip_path_prefix); + buff.AppendF("%s ", error_type); + StackTracePrinter::GetOrInit()->RenderFrame( + &buff, "%L %F", 0, info.address, &info, + common_flags()->symbolize_vs_style, common_flags()->strip_path_prefix); ReportErrorSummary(buff.data(), alt_tool_name); } #endif @@ -148,22 +148,22 @@ static void MaybeReportNonExecRegion(uptr pc) { static void PrintMemoryByte(InternalScopedString *str, const char *before, u8 byte) { SanitizerCommonDecorator d; - str->append("%s%s%x%x%s ", before, d.MemoryByte(), byte >> 4, byte & 15, - d.Default()); + str->AppendF("%s%s%x%x%s ", before, d.MemoryByte(), byte >> 4, byte & 15, + d.Default()); } static void MaybeDumpInstructionBytes(uptr pc) { if (!common_flags()->dump_instruction_bytes || (pc < GetPageSizeCached())) return; InternalScopedString str; - str.append("First 16 instruction bytes at pc: "); + str.AppendF("First 16 instruction bytes at pc: "); if (IsAccessibleMemoryRange(pc, 16)) { for (int i = 0; i < 16; ++i) { PrintMemoryByte(&str, "", ((u8 *)pc)[i]); } - str.append("\n"); + str.AppendF("\n"); } else { - str.append("unaccessible\n"); + str.AppendF("unaccessible\n"); } Report("%s", str.data()); } diff --git a/libsanitizer/sanitizer_common/sanitizer_symbolizer_win.cpp b/libsanitizer/sanitizer_common/sanitizer_symbolizer_win.cpp index 2a7137fe1f84..aae3e76ea229 100644 --- a/libsanitizer/sanitizer_common/sanitizer_symbolizer_win.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_symbolizer_win.cpp @@ -175,9 +175,7 @@ const char *WinSymbolizerTool::Demangle(const char *name) { return name; } -const char *Symbolizer::PlatformDemangle(const char *name) { - return name; -} +const char *Symbolizer::PlatformDemangle(const char *name) { return nullptr; } namespace { struct ScopedHandle { @@ -233,7 +231,7 @@ bool SymbolizerProcess::StartSymbolizerSubprocess() { CHECK(!internal_strchr(arg, '"') && "quotes in args unsupported"); CHECK(arglen > 0 && arg[arglen - 1] != '\\' && "args ending in backslash and empty args unsupported"); - command_line.append("\"%s\" ", arg); + command_line.AppendF("\"%s\" ", arg); } VReport(3, "Launching symbolizer command: %s\n", command_line.data()); @@ -292,15 +290,15 @@ static void ChooseSymbolizerTools(IntrusiveList *list, const char *path = user_path ? user_path : FindPathToBinary("llvm-symbolizer.exe"); if (path) { - VReport(2, "Using llvm-symbolizer at %spath: %s\n", - user_path ? "user-specified " : "", path); - list->push_back(new(*allocator) LLVMSymbolizer(path, allocator)); - } else { if (user_path && user_path[0] == '\0') { VReport(2, "External symbolizer is explicitly disabled.\n"); } else { - VReport(2, "External symbolizer is not present.\n"); + VReport(2, "Using llvm-symbolizer at %spath: %s\n", + user_path ? "user-specified " : "", path); + list->push_back(new (*allocator) LLVMSymbolizer(path, allocator)); } + } else { + VReport(2, "External symbolizer is not present.\n"); } // Add the dbghelp based symbolizer. diff --git a/libsanitizer/sanitizer_common/sanitizer_thread_arg_retval.cpp b/libsanitizer/sanitizer_common/sanitizer_thread_arg_retval.cpp new file mode 100644 index 000000000000..bddb28521408 --- /dev/null +++ b/libsanitizer/sanitizer_common/sanitizer_thread_arg_retval.cpp @@ -0,0 +1,94 @@ +//===-- sanitizer_thread_arg_retval.cpp -------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file is shared between sanitizer tools. +// +// Tracks thread arguments and return value for leak checking. +//===----------------------------------------------------------------------===// + +#include "sanitizer_thread_arg_retval.h" + +#include "sanitizer_placement_new.h" + +namespace __sanitizer { + +void ThreadArgRetval::CreateLocked(uptr thread, bool detached, + const Args& args) { + CheckLocked(); + Data& t = data_[thread]; + t = {}; + t.gen = gen_++; + t.detached = detached; + t.args = args; +} + +ThreadArgRetval::Args ThreadArgRetval::GetArgs(uptr thread) const { + __sanitizer::Lock lock(&mtx_); + auto t = data_.find(thread); + CHECK(t); + if (t->second.done) + return {}; + return t->second.args; +} + +void ThreadArgRetval::Finish(uptr thread, void* retval) { + __sanitizer::Lock lock(&mtx_); + auto t = data_.find(thread); + if (!t) + return; + if (t->second.detached) { + // Retval of detached thread connot be retrieved. + data_.erase(t); + return; + } + t->second.done = true; + t->second.args.arg_retval = retval; +} + +u32 ThreadArgRetval::BeforeJoin(uptr thread) const { + __sanitizer::Lock lock(&mtx_); + auto t = data_.find(thread); + CHECK(t); + CHECK(!t->second.detached); + return t->second.gen; +} + +void ThreadArgRetval::AfterJoin(uptr thread, u32 gen) { + __sanitizer::Lock lock(&mtx_); + auto t = data_.find(thread); + if (!t || gen != t->second.gen) { + // Thread was reused and erased by any other event. + return; + } + CHECK(!t->second.detached); + data_.erase(t); +} + +void ThreadArgRetval::DetachLocked(uptr thread) { + CheckLocked(); + auto t = data_.find(thread); + CHECK(t); + CHECK(!t->second.detached); + if (t->second.done) { + // We can't retrive retval after detached thread finished. + data_.erase(t); + return; + } + t->second.detached = true; +} + +void ThreadArgRetval::GetAllPtrsLocked(InternalMmapVector* ptrs) { + CheckLocked(); + CHECK(ptrs); + data_.forEach([&](DenseMap::value_type& kv) -> bool { + ptrs->push_back((uptr)kv.second.args.arg_retval); + return true; + }); +} + +} // namespace __sanitizer diff --git a/libsanitizer/sanitizer_common/sanitizer_thread_arg_retval.h b/libsanitizer/sanitizer_common/sanitizer_thread_arg_retval.h new file mode 100644 index 000000000000..c77021beb67d --- /dev/null +++ b/libsanitizer/sanitizer_common/sanitizer_thread_arg_retval.h @@ -0,0 +1,116 @@ +//===-- sanitizer_thread_arg_retval.h ---------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file is shared between sanitizer tools. +// +// Tracks thread arguments and return value for leak checking. +//===----------------------------------------------------------------------===// + +#ifndef SANITIZER_THREAD_ARG_RETVAL_H +#define SANITIZER_THREAD_ARG_RETVAL_H + +#include "sanitizer_common.h" +#include "sanitizer_dense_map.h" +#include "sanitizer_list.h" +#include "sanitizer_mutex.h" + +namespace __sanitizer { + +// Primary goal of the class is to keep alive arg and retval pointer for leak +// checking. However it can be used to pass those pointer into wrappers used by +// interceptors. The difference from ThreadRegistry/ThreadList is that this +// class keeps data up to the detach or join, as exited thread still can be +// joined to retrive retval. ThreadRegistry/ThreadList can discard exited +// threads immediately. +class SANITIZER_MUTEX ThreadArgRetval { + public: + struct Args { + void* (*routine)(void*); + void* arg_retval; // Either arg or retval. + }; + void Lock() SANITIZER_ACQUIRE() { mtx_.Lock(); } + void CheckLocked() const SANITIZER_CHECK_LOCKED() { mtx_.CheckLocked(); } + void Unlock() SANITIZER_RELEASE() { mtx_.Unlock(); } + + // Wraps pthread_create or similar. We need to keep object locked, to + // prevent child thread from proceeding without thread handle. + template + void Create(bool detached, const Args& args, const CreateFn& fn) { + // No need to track detached threads with no args, but we will to do as it's + // not expensive and less edge-cases. + __sanitizer::Lock lock(&mtx_); + if (uptr thread = fn()) + CreateLocked(thread, detached, args); + } + + // Returns thread arg and routine. + Args GetArgs(uptr thread) const; + + // Mark thread as done and stores retval or remove if detached. Should be + // called by the thread. + void Finish(uptr thread, void* retval); + + // Mark thread as detached or remove if done. + template + void Detach(uptr thread, const DetachFn& fn) { + // Lock to prevent re-use of the thread between fn() and DetachLocked() + // calls. + __sanitizer::Lock lock(&mtx_); + if (fn()) + DetachLocked(thread); + } + + // Joins the thread. + template + void Join(uptr thread, const JoinFn& fn) { + // Remember internal id of the thread to prevent re-use of the thread + // between fn() and AfterJoin() calls. Locking JoinFn, like in + // Detach(), implementation can cause deadlock. + auto gen = BeforeJoin(thread); + if (fn()) + AfterJoin(thread, gen); + } + + // Returns all arg and retval which are considered alive. + void GetAllPtrsLocked(InternalMmapVector* ptrs); + + uptr size() const { + __sanitizer::Lock lock(&mtx_); + return data_.size(); + } + + // FIXME: Add fork support. Expected users of the class are sloppy with forks + // anyway. We likely should lock/unlock the object to avoid deadlocks, and + // erase all but the current threads, so we can detect leaked arg or retval in + // child process. + + // FIXME: Add cancelation support. Now if a thread was canceled, the class + // will keep pointers alive forever, missing leaks caused by cancelation. + + private: + struct Data { + Args args; + u32 gen; // Avoid collision if thread id re-used. + bool detached; + bool done; + }; + + void CreateLocked(uptr thread, bool detached, const Args& args); + u32 BeforeJoin(uptr thread) const; + void AfterJoin(uptr thread, u32 gen); + void DetachLocked(uptr thread); + + mutable Mutex mtx_; + + DenseMap data_; + u32 gen_ = 0; +}; + +} // namespace __sanitizer + +#endif // SANITIZER_THREAD_ARG_RETVAL_H diff --git a/libsanitizer/sanitizer_common/sanitizer_win.cpp b/libsanitizer/sanitizer_common/sanitizer_win.cpp index 1c9b2dd8a5e4..06e496523eea 100644 --- a/libsanitizer/sanitizer_common/sanitizer_win.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_win.cpp @@ -362,6 +362,11 @@ bool MprotectReadOnly(uptr addr, uptr size) { return VirtualProtect((LPVOID)addr, size, PAGE_READONLY, &old_protection); } +bool MprotectReadWrite(uptr addr, uptr size) { + DWORD old_protection; + return VirtualProtect((LPVOID)addr, size, PAGE_READWRITE, &old_protection); +} + void ReleaseMemoryPagesToOS(uptr beg, uptr end) { uptr beg_aligned = RoundDownTo(beg, GetPageSizeCached()), end_aligned = RoundDownTo(end, GetPageSizeCached()); diff --git a/libsanitizer/sanitizer_common/sanitizer_win_dll_thunk.h b/libsanitizer/sanitizer_common/sanitizer_win_dll_thunk.h index 48c73c4c98ad..639d91a2edae 100644 --- a/libsanitizer/sanitizer_common/sanitizer_win_dll_thunk.h +++ b/libsanitizer/sanitizer_common/sanitizer_win_dll_thunk.h @@ -84,7 +84,7 @@ extern "C" int __dll_thunk_init(); // which isn't a big deal. #define INTERCEPT_LIBRARY_FUNCTION(name) \ extern "C" void name(); \ - INTERCEPT_OR_DIE(WRAPPER_NAME(name), name) + INTERCEPT_OR_DIE(STRINGIFY(WRAP(name)), name) // Use these macros for functions that could be called before __dll_thunk_init() // is executed and don't lead to errors if defined (free, malloc, etc). diff --git a/libsanitizer/tsan/Makefile.am b/libsanitizer/tsan/Makefile.am index 01290b0313d7..cb8bf2e705e4 100644 --- a/libsanitizer/tsan/Makefile.am +++ b/libsanitizer/tsan/Makefile.am @@ -22,6 +22,7 @@ tsan_files = \ tsan_ignoreset.cpp \ tsan_interceptors_posix.cpp \ tsan_interceptors_mac.cpp \ + tsan_interceptors_memintrinsics.cpp \ tsan_interface_ann.cpp \ tsan_interface_atomic.cpp \ tsan_interface.cpp \ @@ -49,7 +50,7 @@ tsan_files = \ tsan_vector_clock.cpp libtsan_la_SOURCES = $(tsan_files) -EXTRA_libtsan_la_SOURCES = tsan_rtl_amd64.S tsan_rtl_aarch64.S tsan_rtl_mips64.S tsan_rtl_ppc64.S tsan_rtl_s390x.S +EXTRA_libtsan_la_SOURCES = tsan_rtl_amd64.S tsan_rtl_aarch64.S tsan_rtl_mips64.S tsan_rtl_ppc64.S tsan_rtl_s390x.S tsan_rtl_riscv64.S libtsan_la_LIBADD = $(top_builddir)/sanitizer_common/libsanitizer_common.la $(top_builddir)/interception/libinterception.la $(TSAN_TARGET_DEPENDENT_OBJECTS) libtsan_la_DEPENDENCIES = $(top_builddir)/sanitizer_common/libsanitizer_common.la $(top_builddir)/interception/libinterception.la $(TSAN_TARGET_DEPENDENT_OBJECTS) if LIBBACKTRACE_SUPPORTED diff --git a/libsanitizer/tsan/Makefile.in b/libsanitizer/tsan/Makefile.in index 95011584bcb3..fc14a42c082c 100644 --- a/libsanitizer/tsan/Makefile.in +++ b/libsanitizer/tsan/Makefile.in @@ -148,10 +148,10 @@ LTLIBRARIES = $(toolexeclib_LTLIBRARIES) am__DEPENDENCIES_1 = am__objects_1 = tsan_debugging.lo tsan_external.lo tsan_fd.lo \ tsan_flags.lo tsan_ignoreset.lo tsan_interceptors_posix.lo \ - tsan_interceptors_mac.lo tsan_interface_ann.lo \ - tsan_interface_atomic.lo tsan_interface.lo \ - tsan_interface_java.lo tsan_malloc_mac.lo tsan_md5.lo \ - tsan_mman.lo tsan_mutexset.lo tsan_new_delete.lo \ + tsan_interceptors_mac.lo tsan_interceptors_memintrinsics.lo \ + tsan_interface_ann.lo tsan_interface_atomic.lo \ + tsan_interface.lo tsan_interface_java.lo tsan_malloc_mac.lo \ + tsan_md5.lo tsan_mman.lo tsan_mutexset.lo tsan_new_delete.lo \ tsan_platform_linux.lo tsan_platform_mac.lo \ tsan_platform_posix.lo tsan_platform_windows.lo tsan_report.lo \ tsan_rtl.lo tsan_rtl_access.lo tsan_rtl_mutex.lo \ @@ -427,6 +427,7 @@ tsan_files = \ tsan_ignoreset.cpp \ tsan_interceptors_posix.cpp \ tsan_interceptors_mac.cpp \ + tsan_interceptors_memintrinsics.cpp \ tsan_interface_ann.cpp \ tsan_interface_atomic.cpp \ tsan_interface.cpp \ @@ -454,7 +455,7 @@ tsan_files = \ tsan_vector_clock.cpp libtsan_la_SOURCES = $(tsan_files) -EXTRA_libtsan_la_SOURCES = tsan_rtl_amd64.S tsan_rtl_aarch64.S tsan_rtl_mips64.S tsan_rtl_ppc64.S tsan_rtl_s390x.S +EXTRA_libtsan_la_SOURCES = tsan_rtl_amd64.S tsan_rtl_aarch64.S tsan_rtl_mips64.S tsan_rtl_ppc64.S tsan_rtl_s390x.S tsan_rtl_riscv64.S libtsan_la_LIBADD = \ $(top_builddir)/sanitizer_common/libsanitizer_common.la \ $(top_builddir)/interception/libinterception.la \ @@ -592,6 +593,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tsan_flags.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tsan_ignoreset.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tsan_interceptors_mac.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tsan_interceptors_memintrinsics.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tsan_interceptors_posix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tsan_interface.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tsan_interface_ann.Plo@am__quote@ @@ -616,6 +618,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tsan_rtl_ppc64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tsan_rtl_proc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tsan_rtl_report.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tsan_rtl_riscv64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tsan_rtl_s390x.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tsan_rtl_thread.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tsan_stack_trace.Plo@am__quote@ diff --git a/libsanitizer/tsan/tsan_debugging.cpp b/libsanitizer/tsan/tsan_debugging.cpp index 1e61c31c5a97..41fa293dbaaa 100644 --- a/libsanitizer/tsan/tsan_debugging.cpp +++ b/libsanitizer/tsan/tsan_debugging.cpp @@ -35,7 +35,9 @@ static const char *ReportTypeDescription(ReportType typ) { case ReportTypeSignalUnsafe: return "signal-unsafe-call"; case ReportTypeErrnoInSignal: return "errno-in-signal-handler"; case ReportTypeDeadlock: return "lock-order-inversion"; - // No default case so compiler warns us if we miss one + case ReportTypeMutexHeldWrongContext: + return "mutex-held-in-wrong-context"; + // No default case so compiler warns us if we miss one } UNREACHABLE("missing case"); } diff --git a/libsanitizer/tsan/tsan_interceptors.h b/libsanitizer/tsan/tsan_interceptors.h index 60fbc58f988a..a357a870fdf8 100644 --- a/libsanitizer/tsan/tsan_interceptors.h +++ b/libsanitizer/tsan/tsan_interceptors.h @@ -29,6 +29,11 @@ class ScopedInterceptor { void EnableIgnoresImpl(); }; +struct TsanInterceptorContext { + ThreadState *thr; + const uptr pc; +}; + LibIgnore *libignore(); #if !SANITIZER_GO @@ -82,7 +87,7 @@ inline bool MustIgnoreInterceptor(ThreadState *thr) { #if SANITIZER_FREEBSD # define TSAN_INTERCEPTOR_FREEBSD_ALIAS(ret, func, ...) \ TSAN_INTERCEPTOR(ret, _pthread_##func, __VA_ARGS__) \ - ALIAS(WRAPPER_NAME(pthread_##func)); + ALIAS(WRAP(pthread_##func)); #else # define TSAN_INTERCEPTOR_FREEBSD_ALIAS(ret, func, ...) #endif @@ -90,17 +95,38 @@ inline bool MustIgnoreInterceptor(ThreadState *thr) { #if SANITIZER_NETBSD # define TSAN_INTERCEPTOR_NETBSD_ALIAS(ret, func, ...) \ TSAN_INTERCEPTOR(ret, __libc_##func, __VA_ARGS__) \ - ALIAS(WRAPPER_NAME(pthread_##func)); + ALIAS(WRAP(pthread_##func)); # define TSAN_INTERCEPTOR_NETBSD_ALIAS_THR(ret, func, ...) \ TSAN_INTERCEPTOR(ret, __libc_thr_##func, __VA_ARGS__) \ - ALIAS(WRAPPER_NAME(pthread_##func)); + ALIAS(WRAP(pthread_##func)); # define TSAN_INTERCEPTOR_NETBSD_ALIAS_THR2(ret, func, func2, ...) \ TSAN_INTERCEPTOR(ret, __libc_thr_##func, __VA_ARGS__) \ - ALIAS(WRAPPER_NAME(pthread_##func2)); + ALIAS(WRAP(pthread_##func2)); #else # define TSAN_INTERCEPTOR_NETBSD_ALIAS(ret, func, ...) # define TSAN_INTERCEPTOR_NETBSD_ALIAS_THR(ret, func, ...) # define TSAN_INTERCEPTOR_NETBSD_ALIAS_THR2(ret, func, func2, ...) #endif +#define COMMON_INTERCEPT_FUNCTION(name) INTERCEPT_FUNCTION(name) + +#define COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED \ + (!cur_thread_init()->is_inited) + +#define COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ptr, size) \ + MemoryAccessRange(((TsanInterceptorContext *)ctx)->thr, \ + ((TsanInterceptorContext *)ctx)->pc, (uptr)ptr, size, \ + true) + +#define COMMON_INTERCEPTOR_READ_RANGE(ctx, ptr, size) \ + MemoryAccessRange(((TsanInterceptorContext *) ctx)->thr, \ + ((TsanInterceptorContext *) ctx)->pc, (uptr) ptr, size, \ + false) + +#define COMMON_INTERCEPTOR_ENTER(ctx, func, ...) \ + SCOPED_TSAN_INTERCEPTOR(func, __VA_ARGS__); \ + TsanInterceptorContext _ctx = {thr, pc}; \ + ctx = (void *)&_ctx; \ + (void)ctx; + #endif // TSAN_INTERCEPTORS_H diff --git a/libsanitizer/tsan/tsan_interceptors_libdispatch.cpp b/libsanitizer/tsan/tsan_interceptors_libdispatch.cpp index 88d5f0a48119..2104fe7fd059 100644 --- a/libsanitizer/tsan/tsan_interceptors_libdispatch.cpp +++ b/libsanitizer/tsan/tsan_interceptors_libdispatch.cpp @@ -558,7 +558,7 @@ TSAN_INTERCEPTOR(void, dispatch_apply_f, size_t iterations, } DECLARE_REAL_AND_INTERCEPTOR(void, free, void *ptr) -DECLARE_REAL_AND_INTERCEPTOR(int, munmap, void *addr, long_t sz) +DECLARE_REAL_AND_INTERCEPTOR(int, munmap, void *addr, SIZE_T sz) TSAN_INTERCEPTOR(dispatch_data_t, dispatch_data_create, const void *buffer, size_t size, dispatch_queue_t q, dispatch_block_t destructor) { diff --git a/libsanitizer/tsan/tsan_interceptors_memintrinsics.cpp b/libsanitizer/tsan/tsan_interceptors_memintrinsics.cpp new file mode 100644 index 000000000000..c8b6b2ef1948 --- /dev/null +++ b/libsanitizer/tsan/tsan_interceptors_memintrinsics.cpp @@ -0,0 +1,43 @@ +//===-- tsan_interceptors_posix.cpp ---------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file is a part of ThreadSanitizer (TSan), a race detector. +// +//===----------------------------------------------------------------------===// + +#define SANITIZER_COMMON_NO_REDEFINE_BUILTINS + +#include "tsan_interceptors.h" +#include "tsan_interface.h" + +using namespace __tsan; + +#include "sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc" + +extern "C" { + +void *__tsan_memcpy(void *dst, const void *src, uptr size) { + void *ctx; +#if PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE + COMMON_INTERCEPTOR_MEMCPY_IMPL(ctx, dst, src, size); +#else + COMMON_INTERCEPTOR_MEMMOVE_IMPL(ctx, dst, src, size); +#endif +} + +void *__tsan_memset(void *dst, int c, uptr size) { + void *ctx; + COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, dst, c, size); +} + +void *__tsan_memmove(void *dst, const void *src, uptr size) { + void *ctx; + COMMON_INTERCEPTOR_MEMMOVE_IMPL(ctx, dst, src, size); +} + +} // extern "C" diff --git a/libsanitizer/tsan/tsan_interceptors_posix.cpp b/libsanitizer/tsan/tsan_interceptors_posix.cpp index 6ac6ac6a7fb4..80f86ca98ed9 100644 --- a/libsanitizer/tsan/tsan_interceptors_posix.cpp +++ b/libsanitizer/tsan/tsan_interceptors_posix.cpp @@ -35,6 +35,9 @@ using namespace __tsan; +DECLARE_REAL(void *, memcpy, void *to, const void *from, SIZE_T size) +DECLARE_REAL(void *, memset, void *block, int c, SIZE_T size) + #if SANITIZER_FREEBSD || SANITIZER_APPLE #define stdout __stdoutp #define stderr __stderrp @@ -78,6 +81,8 @@ struct ucontext_t { #define PTHREAD_ABI_BASE "GLIBC_2.17" #elif SANITIZER_LOONGARCH64 #define PTHREAD_ABI_BASE "GLIBC_2.36" +#elif SANITIZER_RISCV64 +# define PTHREAD_ABI_BASE "GLIBC_2.27" #endif extern "C" int pthread_attr_init(void *attr); @@ -128,7 +133,9 @@ const int SIGSYS = 12; const int SIGBUS = 7; const int SIGSYS = 31; #endif +#if SANITIZER_HAS_SIGINFO const int SI_TIMER = -2; +#endif void *const MAP_FAILED = (void*)-1; #if SANITIZER_NETBSD const int PTHREAD_BARRIER_SERIAL_THREAD = 1234567; @@ -156,9 +163,6 @@ const int SA_SIGINFO = 4; const int SIG_SETMASK = 2; #endif -#define COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED \ - (!cur_thread_init()->is_inited) - namespace __tsan { struct SignalDesc { bool armed; @@ -592,58 +596,27 @@ TSAN_INTERCEPTOR(int, sigsetjmp, void *env); #define sigsetjmp_symname sigsetjmp #endif -#define TSAN_INTERCEPTOR_SETJMP_(x) __interceptor_ ## x -#define TSAN_INTERCEPTOR_SETJMP__(x) TSAN_INTERCEPTOR_SETJMP_(x) -#define TSAN_INTERCEPTOR_SETJMP TSAN_INTERCEPTOR_SETJMP__(setjmp_symname) -#define TSAN_INTERCEPTOR_SIGSETJMP TSAN_INTERCEPTOR_SETJMP__(sigsetjmp_symname) - -#define TSAN_STRING_SETJMP SANITIZER_STRINGIFY(setjmp_symname) -#define TSAN_STRING_SIGSETJMP SANITIZER_STRINGIFY(sigsetjmp_symname) - -// Not called. Merely to satisfy TSAN_INTERCEPT(). -extern "C" SANITIZER_INTERFACE_ATTRIBUTE -int TSAN_INTERCEPTOR_SETJMP(void *env); -extern "C" int TSAN_INTERCEPTOR_SETJMP(void *env) { - CHECK(0); - return 0; -} - -// FIXME: any reason to have a separate declaration? -extern "C" SANITIZER_INTERFACE_ATTRIBUTE -int __interceptor__setjmp(void *env); -extern "C" int __interceptor__setjmp(void *env) { - CHECK(0); - return 0; -} - -extern "C" SANITIZER_INTERFACE_ATTRIBUTE -int TSAN_INTERCEPTOR_SIGSETJMP(void *env); -extern "C" int TSAN_INTERCEPTOR_SIGSETJMP(void *env) { - CHECK(0); - return 0; -} - -#if !SANITIZER_NETBSD -extern "C" SANITIZER_INTERFACE_ATTRIBUTE -int __interceptor___sigsetjmp(void *env); -extern "C" int __interceptor___sigsetjmp(void *env) { - CHECK(0); - return 0; -} -#endif - -extern "C" int setjmp_symname(void *env); -extern "C" int _setjmp(void *env); -extern "C" int sigsetjmp_symname(void *env); -#if !SANITIZER_NETBSD -extern "C" int __sigsetjmp(void *env); -#endif DEFINE_REAL(int, setjmp_symname, void *env) DEFINE_REAL(int, _setjmp, void *env) DEFINE_REAL(int, sigsetjmp_symname, void *env) #if !SANITIZER_NETBSD DEFINE_REAL(int, __sigsetjmp, void *env) #endif + +// The real interceptor for setjmp is special, and implemented in pure asm. We +// just need to initialize the REAL functions so that they can be used in asm. +static void InitializeSetjmpInterceptors() { + // We can not use TSAN_INTERCEPT to get setjmp addr, because it does &setjmp and + // setjmp is not present in some versions of libc. + using __interception::InterceptFunction; + InterceptFunction(SANITIZER_STRINGIFY(setjmp_symname), (uptr*)&REAL(setjmp_symname), 0, 0); + InterceptFunction("_setjmp", (uptr*)&REAL(_setjmp), 0, 0); + InterceptFunction(SANITIZER_STRINGIFY(sigsetjmp_symname), (uptr*)&REAL(sigsetjmp_symname), 0, + 0); +#if !SANITIZER_NETBSD + InterceptFunction("__sigsetjmp", (uptr*)&REAL(__sigsetjmp), 0, 0); +#endif +} #endif // SANITIZER_APPLE #if SANITIZER_NETBSD @@ -824,10 +797,11 @@ static void *mmap_interceptor(ThreadState *thr, uptr pc, Mmap real_mmap, return res; } -TSAN_INTERCEPTOR(int, munmap, void *addr, long_t sz) { - SCOPED_TSAN_INTERCEPTOR(munmap, addr, sz); +template +static int munmap_interceptor(ThreadState *thr, uptr pc, Munmap real_munmap, + void *addr, SIZE_T sz) { UnmapShadow(thr, (uptr)addr, sz); - int res = REAL(munmap)(addr, sz); + int res = real_munmap(addr, sz); return res; } @@ -2420,11 +2394,6 @@ static int OnExit(ThreadState *thr) { return status; } -struct TsanInterceptorContext { - ThreadState *thr; - const uptr pc; -}; - #if !SANITIZER_APPLE static void HandleRecvmsg(ThreadState *thr, uptr pc, __sanitizer_msghdr *msg) { @@ -2446,28 +2415,11 @@ static void HandleRecvmsg(ThreadState *thr, uptr pc, #define SANITIZER_INTERCEPT_TLS_GET_OFFSET 1 #undef SANITIZER_INTERCEPT_PTHREAD_SIGMASK -#define COMMON_INTERCEPT_FUNCTION(name) INTERCEPT_FUNCTION(name) #define COMMON_INTERCEPT_FUNCTION_VER(name, ver) \ INTERCEPT_FUNCTION_VER(name, ver) #define COMMON_INTERCEPT_FUNCTION_VER_UNVERSIONED_FALLBACK(name, ver) \ (INTERCEPT_FUNCTION_VER(name, ver) || INTERCEPT_FUNCTION(name)) -#define COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ptr, size) \ - MemoryAccessRange(((TsanInterceptorContext *)ctx)->thr, \ - ((TsanInterceptorContext *)ctx)->pc, (uptr)ptr, size, \ - true) - -#define COMMON_INTERCEPTOR_READ_RANGE(ctx, ptr, size) \ - MemoryAccessRange(((TsanInterceptorContext *) ctx)->thr, \ - ((TsanInterceptorContext *) ctx)->pc, (uptr) ptr, size, \ - false) - -#define COMMON_INTERCEPTOR_ENTER(ctx, func, ...) \ - SCOPED_TSAN_INTERCEPTOR(func, __VA_ARGS__); \ - TsanInterceptorContext _ctx = {thr, pc}; \ - ctx = (void *)&_ctx; \ - (void)ctx; - #define COMMON_INTERCEPTOR_ENTER_NOIGNORE(ctx, func, ...) \ SCOPED_INTERCEPTOR_RAW(func, __VA_ARGS__); \ TsanInterceptorContext _ctx = {thr, pc}; \ @@ -2555,6 +2507,11 @@ static void HandleRecvmsg(ThreadState *thr, uptr pc, off); \ } while (false) +#define COMMON_INTERCEPTOR_MUNMAP_IMPL(ctx, addr, sz) \ + do { \ + return munmap_interceptor(thr, pc, REAL(munmap), addr, sz); \ + } while (false) + #if !SANITIZER_APPLE #define COMMON_INTERCEPTOR_HANDLE_RECVMSG(ctx, msg) \ HandleRecvmsg(((TsanInterceptorContext *)ctx)->thr, \ @@ -2588,6 +2545,8 @@ static __sanitizer_sighandler_ptr signal_impl(int sig, #define SIGNAL_INTERCEPTOR_SIGNAL_IMPL(func, signo, handler) \ { return (uptr)signal_impl(signo, (__sanitizer_sighandler_ptr)handler); } +#define SIGNAL_INTERCEPTOR_ENTER() LazyInitialize(cur_thread_init()) + #include "sanitizer_common/sanitizer_signal_interceptors.inc" int sigaction_impl(int sig, const __sanitizer_sigaction *act, @@ -2608,7 +2567,7 @@ int sigaction_impl(int sig, const __sanitizer_sigaction *act, // Copy act into sigactions[sig]. // Can't use struct copy, because compiler can emit call to memcpy. // Can't use internal_memcpy, because it copies byte-by-byte, - // and signal handler reads the handler concurrently. It it can read + // and signal handler reads the handler concurrently. It can read // some bytes from old value and some bytes from new value. // Use volatile to prevent insertion of memcpy. sigactions[sig].handler = @@ -2893,16 +2852,7 @@ void InitializeInterceptors() { InitializeLibdispatchInterceptors(); #if !SANITIZER_APPLE - // We can not use TSAN_INTERCEPT to get setjmp addr, - // because it does &setjmp and setjmp is not present in some versions of libc. - using __interception::InterceptFunction; - InterceptFunction(TSAN_STRING_SETJMP, (uptr*)&REAL(setjmp_symname), 0, 0); - InterceptFunction("_setjmp", (uptr*)&REAL(_setjmp), 0, 0); - InterceptFunction(TSAN_STRING_SIGSETJMP, (uptr*)&REAL(sigsetjmp_symname), 0, - 0); -#if !SANITIZER_NETBSD - InterceptFunction("__sigsetjmp", (uptr*)&REAL(__sigsetjmp), 0, 0); -#endif + InitializeSetjmpInterceptors(); #endif TSAN_INTERCEPT(longjmp_symname); @@ -3169,22 +3119,4 @@ SANITIZER_INTERFACE_ATTRIBUTE void __tsan_testonly_barrier_wait( } } -void *__tsan_memcpy(void *dst, const void *src, uptr size) { - void *ctx; -#if PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE - COMMON_INTERCEPTOR_MEMCPY_IMPL(ctx, dst, src, size); -#else - COMMON_INTERCEPTOR_MEMMOVE_IMPL(ctx, dst, src, size); -#endif -} - -void *__tsan_memset(void *dst, int c, uptr size) { - void *ctx; - COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, dst, c, size); -} - -void *__tsan_memmove(void *dst, const void *src, uptr size) { - void *ctx; - COMMON_INTERCEPTOR_MEMMOVE_IMPL(ctx, dst, src, size); -} -} +} // extern "C" diff --git a/libsanitizer/tsan/tsan_interface.h b/libsanitizer/tsan/tsan_interface.h index d53c1e3935df..3731c90d4591 100644 --- a/libsanitizer/tsan/tsan_interface.h +++ b/libsanitizer/tsan/tsan_interface.h @@ -419,6 +419,14 @@ void __tsan_go_atomic32_fetch_add(ThreadState *thr, uptr cpc, uptr pc, u8 *a); SANITIZER_INTERFACE_ATTRIBUTE void __tsan_go_atomic64_fetch_add(ThreadState *thr, uptr cpc, uptr pc, u8 *a); SANITIZER_INTERFACE_ATTRIBUTE +void __tsan_go_atomic32_fetch_and(ThreadState *thr, uptr cpc, uptr pc, u8 *a); +SANITIZER_INTERFACE_ATTRIBUTE +void __tsan_go_atomic64_fetch_and(ThreadState *thr, uptr cpc, uptr pc, u8 *a); +SANITIZER_INTERFACE_ATTRIBUTE +void __tsan_go_atomic32_fetch_or(ThreadState *thr, uptr cpc, uptr pc, u8 *a); +SANITIZER_INTERFACE_ATTRIBUTE +void __tsan_go_atomic64_fetch_or(ThreadState *thr, uptr cpc, uptr pc, u8 *a); +SANITIZER_INTERFACE_ATTRIBUTE void __tsan_go_atomic32_exchange(ThreadState *thr, uptr cpc, uptr pc, u8 *a); SANITIZER_INTERFACE_ATTRIBUTE void __tsan_go_atomic64_exchange(ThreadState *thr, uptr cpc, uptr pc, u8 *a); diff --git a/libsanitizer/tsan/tsan_interface_ann.cpp b/libsanitizer/tsan/tsan_interface_ann.cpp index 6bd72e18d942..5154662034c5 100644 --- a/libsanitizer/tsan/tsan_interface_ann.cpp +++ b/libsanitizer/tsan/tsan_interface_ann.cpp @@ -435,4 +435,26 @@ void __tsan_mutex_post_divert(void *addr, unsigned flagz) { ThreadIgnoreBegin(thr, 0); ThreadIgnoreSyncBegin(thr, 0); } + +static void ReportMutexHeldWrongContext(ThreadState *thr, uptr pc) { + ThreadRegistryLock l(&ctx->thread_registry); + ScopedReport rep(ReportTypeMutexHeldWrongContext); + for (uptr i = 0; i < thr->mset.Size(); ++i) { + MutexSet::Desc desc = thr->mset.Get(i); + rep.AddMutex(desc.addr, desc.stack_id); + } + VarSizeStackTrace trace; + ObtainCurrentStack(thr, pc, &trace); + rep.AddStack(trace, true); + OutputReport(thr, rep); +} + +INTERFACE_ATTRIBUTE +void __tsan_check_no_mutexes_held() { + SCOPED_ANNOTATION(__tsan_check_no_mutexes_held); + if (thr->mset.Size() == 0) { + return; + } + ReportMutexHeldWrongContext(thr, pc); +} } // extern "C" diff --git a/libsanitizer/tsan/tsan_interface_atomic.cpp b/libsanitizer/tsan/tsan_interface_atomic.cpp index f794a2fcdd0d..2b5a2c6ef79b 100644 --- a/libsanitizer/tsan/tsan_interface_atomic.cpp +++ b/libsanitizer/tsan/tsan_interface_atomic.cpp @@ -894,6 +894,30 @@ void __tsan_go_atomic64_fetch_add(ThreadState *thr, uptr cpc, uptr pc, u8 *a) { ATOMIC_RET(FetchAdd, *(a64*)(a+16), *(a64**)a, *(a64*)(a+8), mo_acq_rel); } +SANITIZER_INTERFACE_ATTRIBUTE +void __tsan_go_atomic32_fetch_and(ThreadState *thr, uptr cpc, uptr pc, u8 *a) { + ATOMIC_RET(FetchAnd, *(a32 *)(a + 16), *(a32 **)a, *(a32 *)(a + 8), + mo_acq_rel); +} + +SANITIZER_INTERFACE_ATTRIBUTE +void __tsan_go_atomic64_fetch_and(ThreadState *thr, uptr cpc, uptr pc, u8 *a) { + ATOMIC_RET(FetchAnd, *(a64 *)(a + 16), *(a64 **)a, *(a64 *)(a + 8), + mo_acq_rel); +} + +SANITIZER_INTERFACE_ATTRIBUTE +void __tsan_go_atomic32_fetch_or(ThreadState *thr, uptr cpc, uptr pc, u8 *a) { + ATOMIC_RET(FetchOr, *(a32 *)(a + 16), *(a32 **)a, *(a32 *)(a + 8), + mo_acq_rel); +} + +SANITIZER_INTERFACE_ATTRIBUTE +void __tsan_go_atomic64_fetch_or(ThreadState *thr, uptr cpc, uptr pc, u8 *a) { + ATOMIC_RET(FetchOr, *(a64 *)(a + 16), *(a64 **)a, *(a64 *)(a + 8), + mo_acq_rel); +} + SANITIZER_INTERFACE_ATTRIBUTE void __tsan_go_atomic32_exchange(ThreadState *thr, uptr cpc, uptr pc, u8 *a) { ATOMIC_RET(Exchange, *(a32*)(a+16), *(a32**)a, *(a32*)(a+8), mo_acq_rel); diff --git a/libsanitizer/tsan/tsan_malloc_mac.cpp b/libsanitizer/tsan/tsan_malloc_mac.cpp index ac844ae8a44a..e973be963e57 100644 --- a/libsanitizer/tsan/tsan_malloc_mac.cpp +++ b/libsanitizer/tsan/tsan_malloc_mac.cpp @@ -17,6 +17,7 @@ #include "sanitizer_common/sanitizer_errno.h" #include "tsan_interceptors.h" #include "tsan_stack_trace.h" +#include "tsan_mman.h" using namespace __tsan; #define COMMON_MALLOC_ZONE_NAME "tsan" @@ -29,16 +30,30 @@ using namespace __tsan; user_memalign(cur_thread(), StackTrace::GetCurrentPc(), alignment, size) #define COMMON_MALLOC_MALLOC(size) \ if (in_symbolizer()) return InternalAlloc(size); \ - SCOPED_INTERCEPTOR_RAW(malloc, size); \ - void *p = user_alloc(thr, pc, size) + void *p = 0; \ + { \ + SCOPED_INTERCEPTOR_RAW(malloc, size); \ + p = user_alloc(thr, pc, size); \ + } \ + invoke_malloc_hook(p, size) #define COMMON_MALLOC_REALLOC(ptr, size) \ if (in_symbolizer()) return InternalRealloc(ptr, size); \ - SCOPED_INTERCEPTOR_RAW(realloc, ptr, size); \ - void *p = user_realloc(thr, pc, ptr, size) + if (ptr) \ + invoke_free_hook(ptr); \ + void *p = 0; \ + { \ + SCOPED_INTERCEPTOR_RAW(realloc, ptr, size); \ + p = user_realloc(thr, pc, ptr, size); \ + } \ + invoke_malloc_hook(p, size) #define COMMON_MALLOC_CALLOC(count, size) \ if (in_symbolizer()) return InternalCalloc(count, size); \ - SCOPED_INTERCEPTOR_RAW(calloc, size, count); \ - void *p = user_calloc(thr, pc, size, count) + void *p = 0; \ + { \ + SCOPED_INTERCEPTOR_RAW(calloc, size, count); \ + p = user_calloc(thr, pc, size, count); \ + } \ + invoke_malloc_hook(p, size * count) #define COMMON_MALLOC_POSIX_MEMALIGN(memptr, alignment, size) \ if (in_symbolizer()) { \ void *p = InternalAlloc(size, nullptr, alignment); \ @@ -55,6 +70,7 @@ using namespace __tsan; void *p = user_valloc(thr, pc, size) #define COMMON_MALLOC_FREE(ptr) \ if (in_symbolizer()) return InternalFree(ptr); \ + invoke_free_hook(ptr); \ SCOPED_INTERCEPTOR_RAW(free, ptr); \ user_free(thr, pc, ptr) #define COMMON_MALLOC_SIZE(ptr) uptr size = user_alloc_usable_size(ptr); diff --git a/libsanitizer/tsan/tsan_mman.cpp b/libsanitizer/tsan/tsan_mman.cpp index e5271cf5697f..6f118e0979e2 100644 --- a/libsanitizer/tsan/tsan_mman.cpp +++ b/libsanitizer/tsan/tsan_mman.cpp @@ -25,6 +25,8 @@ namespace __tsan { struct MapUnmapCallback { void OnMap(uptr p, uptr size) const { } + void OnMapSecondary(uptr p, uptr size, uptr user_begin, + uptr user_size) const {}; void OnUnmap(uptr p, uptr size) const { // We are about to unmap a chunk of user memory. // Mark the corresponding shadow memory as not needed. @@ -377,6 +379,17 @@ uptr user_alloc_usable_size(const void *p) { return b->siz; } +uptr user_alloc_usable_size_fast(const void *p) { + MBlock *b = ctx->metamap.GetBlock((uptr)p); + // Static objects may have malloc'd before tsan completes + // initialization, and may believe returned ptrs to be valid. + if (!b) + return 0; // Not a valid pointer. + if (b->siz == 0) + return 1; // Zero-sized allocations are actually 1 byte. + return b->siz; +} + void invoke_malloc_hook(void *ptr, uptr size) { ThreadState *thr = cur_thread(); if (ctx == 0 || !ctx->initialized || thr->ignore_interceptors) @@ -452,6 +465,17 @@ uptr __sanitizer_get_allocated_size(const void *p) { return user_alloc_usable_size(p); } +uptr __sanitizer_get_allocated_size_fast(const void *p) { + DCHECK_EQ(p, __sanitizer_get_allocated_begin(p)); + uptr ret = user_alloc_usable_size_fast(p); + DCHECK_EQ(ret, __sanitizer_get_allocated_size(p)); + return ret; +} + +void __sanitizer_purge_allocator() { + allocator()->ForceReleaseToOS(); +} + void __tsan_on_thread_idle() { ThreadState *thr = cur_thread(); allocator()->SwallowCache(&thr->proc()->alloc_cache); diff --git a/libsanitizer/tsan/tsan_platform.h b/libsanitizer/tsan/tsan_platform.h index f0cdaf48eaa3..d9ed3979b69e 100644 --- a/libsanitizer/tsan/tsan_platform.h +++ b/libsanitizer/tsan/tsan_platform.h @@ -46,17 +46,16 @@ enum { /* C/C++ on linux/x86_64 and freebsd/x86_64 -0000 0000 1000 - 0080 0000 0000: main binary and/or MAP_32BIT mappings (512GB) -0040 0000 0000 - 0100 0000 0000: - -0100 0000 0000 - 1000 0000 0000: shadow -1000 0000 0000 - 3000 0000 0000: - -3000 0000 0000 - 3400 0000 0000: metainfo (memory blocks and sync objects) -3400 0000 0000 - 5500 0000 0000: - -5500 0000 0000 - 5680 0000 0000: pie binaries without ASLR or on 4.1+ kernels -5680 0000 0000 - 7d00 0000 0000: - -7b00 0000 0000 - 7c00 0000 0000: heap -7c00 0000 0000 - 7e80 0000 0000: - -7e80 0000 0000 - 8000 0000 0000: modules and main thread stack +0000 0000 1000 - 0200 0000 0000: main binary and/or MAP_32BIT mappings (2TB) +0200 0000 0000 - 1000 0000 0000: - +1000 0000 0000 - 3000 0000 0000: shadow (32TB) +3000 0000 0000 - 3800 0000 0000: metainfo (memory blocks and sync objects; 8TB) +3800 0000 0000 - 5500 0000 0000: - +5500 0000 0000 - 5a00 0000 0000: pie binaries without ASLR or on 4.1+ kernels +5a00 0000 0000 - 7200 0000 0000: - +7200 0000 0000 - 7300 0000 0000: heap (1TB) +7300 0000 0000 - 7a00 0000 0000: - +7a00 0000 0000 - 8000 0000 0000: modules and main thread stack (6TB) C/C++ on netbsd/amd64 can reuse the same mapping: * The address space starts from 0x1000 (option with 0x0) and ends with @@ -72,20 +71,20 @@ C/C++ on netbsd/amd64 can reuse the same mapping: */ struct Mapping48AddressSpace { static const uptr kMetaShadowBeg = 0x300000000000ull; - static const uptr kMetaShadowEnd = 0x340000000000ull; - static const uptr kShadowBeg = 0x010000000000ull; - static const uptr kShadowEnd = 0x100000000000ull; - static const uptr kHeapMemBeg = 0x7b0000000000ull; - static const uptr kHeapMemEnd = 0x7c0000000000ull; + static const uptr kMetaShadowEnd = 0x380000000000ull; + static const uptr kShadowBeg = 0x100000000000ull; + static const uptr kShadowEnd = 0x300000000000ull; + static const uptr kHeapMemBeg = 0x720000000000ull; + static const uptr kHeapMemEnd = 0x730000000000ull; static const uptr kLoAppMemBeg = 0x000000001000ull; - static const uptr kLoAppMemEnd = 0x008000000000ull; + static const uptr kLoAppMemEnd = 0x020000000000ull; static const uptr kMidAppMemBeg = 0x550000000000ull; - static const uptr kMidAppMemEnd = 0x568000000000ull; - static const uptr kHiAppMemBeg = 0x7e8000000000ull; + static const uptr kMidAppMemEnd = 0x5a0000000000ull; + static const uptr kHiAppMemBeg = 0x7a0000000000ull; static const uptr kHiAppMemEnd = 0x800000000000ull; - static const uptr kShadowMsk = 0x780000000000ull; - static const uptr kShadowXor = 0x040000000000ull; - static const uptr kShadowAdd = 0x000000000000ull; + static const uptr kShadowMsk = 0x700000000000ull; + static const uptr kShadowXor = 0x000000000000ull; + static const uptr kShadowAdd = 0x100000000000ull; static const uptr kVdsoBeg = 0xf000000000000000ull; }; @@ -377,6 +376,71 @@ struct MappingPPC64_47 { static const uptr kMidAppMemEnd = 0; }; +/* +C/C++ on linux/riscv64 (39-bit VMA) +0000 0010 00 - 0200 0000 00: main binary ( 8 GB) +0200 0000 00 - 1000 0000 00: - +1000 0000 00 - 4000 0000 00: shadow memory (64 GB) +4000 0000 00 - 4800 0000 00: metainfo (16 GB) +4800 0000 00 - 5500 0000 00: - +5500 0000 00 - 5a00 0000 00: main binary (PIE) (~8 GB) +5600 0000 00 - 7c00 0000 00: - +7d00 0000 00 - 7fff ffff ff: libraries and main thread stack ( 8 GB) + +mmap by default allocates from top downwards +VDSO sits below loader and above dynamic libraries, within HiApp region. +Heap starts after program region whose position depends on pie or non-pie. +Disable tracking them since their locations are not fixed. +*/ +struct MappingRiscv64_39 { + static const uptr kLoAppMemBeg = 0x0000001000ull; + static const uptr kLoAppMemEnd = 0x0200000000ull; + static const uptr kShadowBeg = 0x1000000000ull; + static const uptr kShadowEnd = 0x2000000000ull; + static const uptr kMetaShadowBeg = 0x2000000000ull; + static const uptr kMetaShadowEnd = 0x2400000000ull; + static const uptr kMidAppMemBeg = 0x2aaaaaa000ull; + static const uptr kMidAppMemEnd = 0x2c00000000ull; + static const uptr kHeapMemBeg = 0x2c00000000ull; + static const uptr kHeapMemEnd = 0x2c00000000ull; + static const uptr kHiAppMemBeg = 0x3c00000000ull; + static const uptr kHiAppMemEnd = 0x3fffffffffull; + static const uptr kShadowMsk = 0x3800000000ull; + static const uptr kShadowXor = 0x0800000000ull; + static const uptr kShadowAdd = 0x0000000000ull; + static const uptr kVdsoBeg = 0x4000000000ull; +}; + +/* +C/C++ on linux/riscv64 (48-bit VMA) +0000 0000 1000 - 0500 0000 0000: main binary ( 5 TB) +0500 0000 0000 - 2000 0000 0000: - +2000 0000 0000 - 4000 0000 0000: shadow memory (32 TB) +4000 0000 0000 - 4800 0000 0000: metainfo ( 8 TB) +4800 0000 0000 - 5555 5555 5000: - +5555 5555 5000 - 5a00 0000 0000: main binary (PIE) (~5 TB) +5a00 0000 0000 - 7a00 0000 0000: - +7a00 0000 0000 - 7fff ffff ffff: libraries and main thread stack ( 5 TB) +*/ +struct MappingRiscv64_48 { + static const uptr kLoAppMemBeg = 0x000000001000ull; + static const uptr kLoAppMemEnd = 0x050000000000ull; + static const uptr kShadowBeg = 0x200000000000ull; + static const uptr kShadowEnd = 0x400000000000ull; + static const uptr kMetaShadowBeg = 0x400000000000ull; + static const uptr kMetaShadowEnd = 0x480000000000ull; + static const uptr kMidAppMemBeg = 0x555555555000ull; + static const uptr kMidAppMemEnd = 0x5a0000000000ull; + static const uptr kHeapMemBeg = 0x5a0000000000ull; + static const uptr kHeapMemEnd = 0x5a0000000000ull; + static const uptr kHiAppMemBeg = 0x7a0000000000ull; + static const uptr kHiAppMemEnd = 0x7fffffffffffull; + static const uptr kShadowMsk = 0x700000000000ull; + static const uptr kShadowXor = 0x100000000000ull; + static const uptr kShadowAdd = 0x000000000000ull; + static const uptr kVdsoBeg = 0x800000000000ull; +}; + /* C/C++ on linux/s390x While the kernel provides a 64-bit address space, we have to restrict ourselves @@ -665,6 +729,13 @@ ALWAYS_INLINE auto SelectMapping(Arg arg) { } # elif defined(__mips64) return Func::template Apply(arg); +# elif SANITIZER_RISCV64 + switch (vmaSize) { + case 39: + return Func::template Apply(arg); + case 48: + return Func::template Apply(arg); + } # elif defined(__s390x__) return Func::template Apply(arg); # else @@ -686,6 +757,8 @@ void ForEachMapping() { Func::template Apply(); Func::template Apply(); Func::template Apply(); + Func::template Apply(); + Func::template Apply(); Func::template Apply(); Func::template Apply(); Func::template Apply(); @@ -894,7 +967,7 @@ struct RestoreAddrImpl { Mapping::kMidAppMemEnd, Mapping::kHiAppMemBeg, Mapping::kHiAppMemEnd, Mapping::kHeapMemBeg, Mapping::kHeapMemEnd, }; - const uptr indicator = 0x0e0000000000ull; + const uptr indicator = 0x0f0000000000ull; const uptr ind_lsb = 1ull << LeastSignificantSetBitIndex(indicator); for (uptr i = 0; i < ARRAY_SIZE(ranges); i += 2) { uptr beg = ranges[i]; diff --git a/libsanitizer/tsan/tsan_platform_linux.cpp b/libsanitizer/tsan/tsan_platform_linux.cpp index 384a443c16b0..369509ed0a60 100644 --- a/libsanitizer/tsan/tsan_platform_linux.cpp +++ b/libsanitizer/tsan/tsan_platform_linux.cpp @@ -152,7 +152,7 @@ void WriteMemoryProfile(char *buf, uptr buf_size, u64 uptime_ns) { #if !SANITIZER_GO // Mark shadow for .rodata sections with the special Shadow::kRodata marker. // Accesses to .rodata can't race, so this saves time, memory and trace space. -static void MapRodata() { +static NOINLINE void MapRodata(char* buffer, uptr size) { // First create temp file. const char *tmpdir = GetEnv("TMPDIR"); if (tmpdir == 0) @@ -163,13 +163,12 @@ static void MapRodata() { #endif if (tmpdir == 0) return; - char name[256]; - internal_snprintf(name, sizeof(name), "%s/tsan.rodata.%d", + internal_snprintf(buffer, size, "%s/tsan.rodata.%d", tmpdir, (int)internal_getpid()); - uptr openrv = internal_open(name, O_RDWR | O_CREAT | O_EXCL, 0600); + uptr openrv = internal_open(buffer, O_RDWR | O_CREAT | O_EXCL, 0600); if (internal_iserror(openrv)) return; - internal_unlink(name); // Unlink it now, so that we can reuse the buffer. + internal_unlink(buffer); // Unlink it now, so that we can reuse the buffer. fd_t fd = openrv; // Fill the file with Shadow::kRodata. const uptr kMarkerSize = 512 * 1024 / sizeof(RawShadow); @@ -188,8 +187,8 @@ static void MapRodata() { } // Map the file into shadow of .rodata sections. MemoryMappingLayout proc_maps(/*cache_enabled*/true); - // Reusing the buffer 'name'. - MemoryMappedSegment segment(name, ARRAY_SIZE(name)); + // Reusing the buffer 'buffer'. + MemoryMappedSegment segment(buffer, size); while (proc_maps.Next(&segment)) { if (segment.filename[0] != 0 && segment.filename[0] != '[' && segment.IsReadable() && segment.IsExecutable() && @@ -209,7 +208,8 @@ static void MapRodata() { } void InitializeShadowMemoryPlatform() { - MapRodata(); + char buffer[256]; // Keep in a different frame. + MapRodata(buffer, sizeof(buffer)); } #endif // #if !SANITIZER_GO @@ -267,7 +267,17 @@ void InitializePlatformEarly() { Die(); } # endif -#endif +# elif SANITIZER_RISCV64 + // the bottom half of vma is allocated for userspace + vmaSize = vmaSize + 1; +# if !SANITIZER_GO + if (vmaSize != 39 && vmaSize != 48) { + Printf("FATAL: ThreadSanitizer: unsupported VMA range\n"); + Printf("FATAL: Found %zd - Supported 39 and 48\n", vmaSize); + Die(); + } +# endif +# endif } void InitializePlatform() { @@ -399,13 +409,15 @@ static uptr UnmangleLongJmpSp(uptr mangled_sp) { return mangled_sp ^ xor_key; #elif defined(__mips__) return mangled_sp; -#elif defined(__s390x__) +# elif SANITIZER_RISCV64 + return mangled_sp; +# elif defined(__s390x__) // tcbhead_t.stack_guard uptr xor_key = ((uptr *)__builtin_thread_pointer())[5]; return mangled_sp ^ xor_key; -#else - #error "Unknown platform" -#endif +# else +# error "Unknown platform" +# endif } #if SANITIZER_NETBSD @@ -429,11 +441,13 @@ static uptr UnmangleLongJmpSp(uptr mangled_sp) { # define LONG_JMP_SP_ENV_SLOT 1 # elif defined(__mips64) # define LONG_JMP_SP_ENV_SLOT 1 -# elif defined(__s390x__) -# define LONG_JMP_SP_ENV_SLOT 9 -# else -# define LONG_JMP_SP_ENV_SLOT 6 -# endif +# elif SANITIZER_RISCV64 +# define LONG_JMP_SP_ENV_SLOT 13 +# elif defined(__s390x__) +# define LONG_JMP_SP_ENV_SLOT 9 +# else +# define LONG_JMP_SP_ENV_SLOT 6 +# endif #endif uptr ExtractLongJmpSp(uptr *env) { diff --git a/libsanitizer/tsan/tsan_report.cpp b/libsanitizer/tsan/tsan_report.cpp index 9b03adc16b99..35cb6710a54f 100644 --- a/libsanitizer/tsan/tsan_report.cpp +++ b/libsanitizer/tsan/tsan_report.cpp @@ -93,17 +93,13 @@ static const char *ReportTypeString(ReportType typ, uptr tag) { return "signal handler spoils errno"; case ReportTypeDeadlock: return "lock-order-inversion (potential deadlock)"; - // No default case so compiler warns us if we miss one + case ReportTypeMutexHeldWrongContext: + return "mutex held in the wrong context"; + // No default case so compiler warns us if we miss one } UNREACHABLE("missing case"); } -#if SANITIZER_APPLE -static const char *const kInterposedFunctionPrefix = "wrap_"; -#else -static const char *const kInterposedFunctionPrefix = "__interceptor_"; -#endif - void PrintStack(const ReportStack *ent) { if (ent == 0 || ent->frames == 0) { Printf(" [failed to restore the stack]\n\n"); @@ -112,10 +108,10 @@ void PrintStack(const ReportStack *ent) { SymbolizedStack *frame = ent->frames; for (int i = 0; frame && frame->info.address; frame = frame->next, i++) { InternalScopedString res; - RenderFrame(&res, common_flags()->stack_trace_format, i, - frame->info.address, &frame->info, - common_flags()->symbolize_vs_style, - common_flags()->strip_path_prefix, kInterposedFunctionPrefix); + StackTracePrinter::GetOrInit()->RenderFrame( + &res, common_flags()->stack_trace_format, i, frame->info.address, + &frame->info, common_flags()->symbolize_vs_style, + common_flags()->strip_path_prefix); Printf("%s\n", res.data()); } Printf("\n"); @@ -284,6 +280,7 @@ static bool FrameIsInternal(const SymbolizedStack *frame) { const char *module = frame->info.module; if (file != 0 && (internal_strstr(file, "tsan_interceptors_posix.cpp") || + internal_strstr(file, "tsan_interceptors_memintrinsics.cpp") || internal_strstr(file, "sanitizer_common_interceptors.inc") || internal_strstr(file, "tsan_interface_"))) return true; diff --git a/libsanitizer/tsan/tsan_report.h b/libsanitizer/tsan/tsan_report.h index 3c88864af147..bfe470797f8f 100644 --- a/libsanitizer/tsan/tsan_report.h +++ b/libsanitizer/tsan/tsan_report.h @@ -34,7 +34,8 @@ enum ReportType { ReportTypeMutexBadReadUnlock, ReportTypeSignalUnsafe, ReportTypeErrnoInSignal, - ReportTypeDeadlock + ReportTypeDeadlock, + ReportTypeMutexHeldWrongContext }; struct ReportStack { diff --git a/libsanitizer/tsan/tsan_rtl.cpp b/libsanitizer/tsan/tsan_rtl.cpp index 6b1ec1d04fdb..fd9441dfcb53 100644 --- a/libsanitizer/tsan/tsan_rtl.cpp +++ b/libsanitizer/tsan/tsan_rtl.cpp @@ -446,7 +446,7 @@ static bool InitializeMemoryProfiler() { ctx->memprof_fd = 2; } else { InternalScopedString filename; - filename.append("%s.%d", fname, (int)internal_getpid()); + filename.AppendF("%s.%d", fname, (int)internal_getpid()); ctx->memprof_fd = OpenFile(filename.data(), WrOnly); if (ctx->memprof_fd == kInvalidFd) { Printf("ThreadSanitizer: failed to open memory profile file '%s'\n", diff --git a/libsanitizer/tsan/tsan_rtl.h b/libsanitizer/tsan/tsan_rtl.h index a5606dbc7f88..de4ea0bb5f48 100644 --- a/libsanitizer/tsan/tsan_rtl.h +++ b/libsanitizer/tsan/tsan_rtl.h @@ -56,8 +56,8 @@ namespace __tsan { #if !SANITIZER_GO struct MapUnmapCallback; -#if defined(__mips64) || defined(__aarch64__) || defined(__loongarch__) || \ - defined(__powerpc__) +# if defined(__mips64) || defined(__aarch64__) || defined(__loongarch__) || \ + defined(__powerpc__) || SANITIZER_RISCV64 struct AP32 { static const uptr kSpaceBeg = 0; diff --git a/libsanitizer/tsan/tsan_rtl_ppc64.S b/libsanitizer/tsan/tsan_rtl_ppc64.S index 9e533a71a9c4..8285e21aa1ec 100644 --- a/libsanitizer/tsan/tsan_rtl_ppc64.S +++ b/libsanitizer/tsan/tsan_rtl_ppc64.S @@ -1,6 +1,5 @@ #include "tsan_ppc_regs.h" - .machine altivec .section .text .hidden __tsan_setjmp .globl _setjmp diff --git a/libsanitizer/tsan/tsan_rtl_riscv64.S b/libsanitizer/tsan/tsan_rtl_riscv64.S new file mode 100644 index 000000000000..8e6b9b9432ef --- /dev/null +++ b/libsanitizer/tsan/tsan_rtl_riscv64.S @@ -0,0 +1,203 @@ +#include "sanitizer_common/sanitizer_asm.h" + +.section .text + +.comm _ZN14__interception11real_setjmpE,8,8 +.globl ASM_SYMBOL_INTERCEPTOR(setjmp) +ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(setjmp)) +ASM_SYMBOL_INTERCEPTOR(setjmp): + CFI_STARTPROC + + // Save frame pointer and return address register + addi sp, sp, -32 + sd ra, 24(sp) + sd s0, 16(sp) + CFI_DEF_CFA_OFFSET (32) + CFI_OFFSET (1, -8) + CFI_OFFSET (8, -16) + + // Adjust the SP for previous frame + addi s0, sp, 32 + CFI_DEF_CFA_REGISTER (8) + + // Save env parameter + sd a0, 8(sp) + CFI_OFFSET (10, -24) + + // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)` + addi a0, s0, 0 + + // call tsan interceptor + call ASM_SYMBOL(__tsan_setjmp) + + // Restore env parameter + ld a0, 8(sp) + CFI_RESTORE (10) + + // Restore frame/link register + ld s0, 16(sp) + ld ra, 24(sp) + addi sp, sp, 32 + CFI_RESTORE (8) + CFI_RESTORE (1) + CFI_DEF_CFA (2, 0) + + // tail jump to libc setjmp + la t1, _ZN14__interception11real_setjmpE + ld t1, 0(t1) + jr t1 + + CFI_ENDPROC +ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(setjmp)) + +.comm _ZN14__interception12real__setjmpE,8,8 +.globl ASM_SYMBOL_INTERCEPTOR(_setjmp) +ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(_setjmp)) +ASM_SYMBOL_INTERCEPTOR(_setjmp): + CFI_STARTPROC + + // Save frame pointer and return address register + addi sp, sp, -32 + sd ra, 24(sp) + sd s0, 16(sp) + CFI_DEF_CFA_OFFSET (32) + CFI_OFFSET (1, -8) + CFI_OFFSET (8, -16) + + // Adjust the SP for previous frame + addi s0, sp, 32 + CFI_DEF_CFA_REGISTER (8) + + // Save env parameter + sd a0, 8(sp) + CFI_OFFSET (10, -24) + + // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)` + addi a0, s0, 0 + + // call tsan interceptor + call ASM_SYMBOL(__tsan_setjmp) + + // Restore env parameter + ld a0, 8(sp) + CFI_RESTORE (10) + + // Restore frame/link register + ld s0, 16(sp) + ld ra, 24(sp) + addi sp, sp, 32 + CFI_RESTORE (8) + CFI_RESTORE (1) + CFI_DEF_CFA (2, 0) + + // tail jump to libc setjmp + la t1, _ZN14__interception12real__setjmpE + ld t1, 0(t1) + jr t1 + + CFI_ENDPROC +ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(_setjmp)) + +.comm _ZN14__interception14real_sigsetjmpE,8,8 +.globl ASM_SYMBOL_INTERCEPTOR(sigsetjmp) +ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(sigsetjmp)) +ASM_SYMBOL_INTERCEPTOR(sigsetjmp): + CFI_STARTPROC + + // Save frame pointer and return address register + addi sp, sp, -32 + sd ra, 24(sp) + sd s0, 16(sp) + CFI_DEF_CFA_OFFSET (32) + CFI_OFFSET (1, -8) + CFI_OFFSET (8, -16) + + // Adjust the SP for previous frame + addi s0, sp, 32 + CFI_DEF_CFA_REGISTER (8) + + // Save env parameter + sd a0, 8(sp) + sd a1, 0(sp) + CFI_OFFSET (10, -24) + CFI_OFFSET (11, -32) + + // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)` + addi a0, s0, 0 + + // call tsan interceptor + call ASM_SYMBOL(__tsan_setjmp) + + // Restore env parameter + ld a0, 8(sp) + ld a1, 0(sp) + CFI_RESTORE (10) + CFI_RESTORE (11) + + // Restore frame/link register + ld s0, 16(sp) + ld ra, 24(sp) + addi sp, sp, 32 + CFI_RESTORE (8) + CFI_RESTORE (1) + CFI_DEF_CFA (2, 0) + + // tail jump to libc setjmp + la t1, _ZN14__interception14real_sigsetjmpE + ld t1, 0(t1) + jr t1 + + CFI_ENDPROC +ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(sigsetjmp)) + +.comm _ZN14__interception16real___sigsetjmpE,8,8 +.globl ASM_SYMBOL_INTERCEPTOR(__sigsetjmp) +ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp)) +ASM_SYMBOL_INTERCEPTOR(__sigsetjmp): + CFI_STARTPROC + + // Save frame pointer and return address register + addi sp, sp, -32 + sd ra, 24(sp) + sd s0, 16(sp) + CFI_DEF_CFA_OFFSET (32) + CFI_OFFSET (1, -8) + CFI_OFFSET (8, -16) + + // Adjust the SP for previous frame + addi s0, sp, 32 + CFI_DEF_CFA_REGISTER (8) + + // Save env parameter + sd a0, 8(sp) + sd a1, 0(sp) + CFI_OFFSET (10, -24) + CFI_OFFSET (11, -32) + + // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)` + addi a0, s0, 0 + + // call tsan interceptor + call ASM_SYMBOL(__tsan_setjmp) + + // Restore env parameter + ld a0, 8(sp) + ld a1, 0(sp) + CFI_RESTORE (10) + CFI_RESTORE (11) + + // Restore frame/link register + ld s0, 16(sp) + ld ra, 24(sp) + addi sp, sp, 32 + CFI_RESTORE (8) + CFI_RESTORE (1) + CFI_DEF_CFA (2, 0) + + // tail jump to libc setjmp + la t1, _ZN14__interception16real___sigsetjmpE + ld t1, 0(t1) + jr t1 + + CFI_ENDPROC +ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp)) diff --git a/libsanitizer/tsan/tsan_suppressions.cpp b/libsanitizer/tsan/tsan_suppressions.cpp index 9cdfa32a9343..70642124990d 100644 --- a/libsanitizer/tsan/tsan_suppressions.cpp +++ b/libsanitizer/tsan/tsan_suppressions.cpp @@ -81,6 +81,7 @@ static const char *conv(ReportType typ) { case ReportTypeMutexBadUnlock: case ReportTypeMutexBadReadLock: case ReportTypeMutexBadReadUnlock: + case ReportTypeMutexHeldWrongContext: return kSuppressionMutex; case ReportTypeSignalUnsafe: case ReportTypeErrnoInSignal: diff --git a/libsanitizer/ubsan/ubsan_diag.cpp b/libsanitizer/ubsan/ubsan_diag.cpp index dd99613abbe3..aac270415318 100644 --- a/libsanitizer/ubsan/ubsan_diag.cpp +++ b/libsanitizer/ubsan/ubsan_diag.cpp @@ -134,9 +134,9 @@ Diag &Diag::operator<<(const Value &V) { /// Hexadecimal printing for numbers too large for Printf to handle directly. static void RenderHex(InternalScopedString *Buffer, UIntMax Val) { #if HAVE_INT128_T - Buffer->append("0x%08x%08x%08x%08x", (unsigned int)(Val >> 96), - (unsigned int)(Val >> 64), (unsigned int)(Val >> 32), - (unsigned int)(Val)); + Buffer->AppendF("0x%08x%08x%08x%08x", (unsigned int)(Val >> 96), + (unsigned int)(Val >> 64), (unsigned int)(Val >> 32), + (unsigned int)(Val)); #else UNREACHABLE("long long smaller than 64 bits?"); #endif @@ -147,31 +147,34 @@ static void RenderLocation(InternalScopedString *Buffer, Location Loc) { case Location::LK_Source: { SourceLocation SLoc = Loc.getSourceLocation(); if (SLoc.isInvalid()) - Buffer->append(""); + Buffer->AppendF(""); else - RenderSourceLocation(Buffer, SLoc.getFilename(), SLoc.getLine(), - SLoc.getColumn(), common_flags()->symbolize_vs_style, - common_flags()->strip_path_prefix); + StackTracePrinter::GetOrInit()->RenderSourceLocation( + Buffer, SLoc.getFilename(), SLoc.getLine(), SLoc.getColumn(), + common_flags()->symbolize_vs_style, + common_flags()->strip_path_prefix); return; } case Location::LK_Memory: - Buffer->append("%p", reinterpret_cast(Loc.getMemoryLocation())); + Buffer->AppendF("%p", reinterpret_cast(Loc.getMemoryLocation())); return; case Location::LK_Symbolized: { const AddressInfo &Info = Loc.getSymbolizedStack()->info; if (Info.file) - RenderSourceLocation(Buffer, Info.file, Info.line, Info.column, - common_flags()->symbolize_vs_style, - common_flags()->strip_path_prefix); + StackTracePrinter::GetOrInit()->RenderSourceLocation( + Buffer, Info.file, Info.line, Info.column, + common_flags()->symbolize_vs_style, + common_flags()->strip_path_prefix); else if (Info.module) - RenderModuleLocation(Buffer, Info.module, Info.module_offset, - Info.module_arch, common_flags()->strip_path_prefix); + StackTracePrinter::GetOrInit()->RenderModuleLocation( + Buffer, Info.module, Info.module_offset, Info.module_arch, + common_flags()->strip_path_prefix); else - Buffer->append("%p", reinterpret_cast(Info.address)); + Buffer->AppendF("%p", reinterpret_cast(Info.address)); return; } case Location::LK_Null: - Buffer->append(""); + Buffer->AppendF(""); return; } } @@ -180,32 +183,32 @@ static void RenderText(InternalScopedString *Buffer, const char *Message, const Diag::Arg *Args) { for (const char *Msg = Message; *Msg; ++Msg) { if (*Msg != '%') { - Buffer->append("%c", *Msg); + Buffer->AppendF("%c", *Msg); continue; } const Diag::Arg &A = Args[*++Msg - '0']; switch (A.Kind) { case Diag::AK_String: - Buffer->append("%s", A.String); + Buffer->AppendF("%s", A.String); break; case Diag::AK_TypeName: { if (SANITIZER_WINDOWS) // The Windows implementation demangles names early. - Buffer->append("'%s'", A.String); + Buffer->AppendF("'%s'", A.String); else - Buffer->append("'%s'", Symbolizer::GetOrInit()->Demangle(A.String)); + Buffer->AppendF("'%s'", Symbolizer::GetOrInit()->Demangle(A.String)); break; } case Diag::AK_SInt: // 'long long' is guaranteed to be at least 64 bits wide. if (A.SInt >= INT64_MIN && A.SInt <= INT64_MAX) - Buffer->append("%lld", (long long)A.SInt); + Buffer->AppendF("%lld", (long long)A.SInt); else RenderHex(Buffer, A.SInt); break; case Diag::AK_UInt: if (A.UInt <= UINT64_MAX) - Buffer->append("%llu", (unsigned long long)A.UInt); + Buffer->AppendF("%llu", (unsigned long long)A.UInt); else RenderHex(Buffer, A.UInt); break; @@ -223,11 +226,11 @@ static void RenderText(InternalScopedString *Buffer, const char *Message, #else snprintf(FloatBuffer, sizeof(FloatBuffer), "%Lg", (long double)A.Float); #endif - Buffer->append("%s", FloatBuffer); + Buffer->Append(FloatBuffer); break; } case Diag::AK_Pointer: - Buffer->append("%p", A.Pointer); + Buffer->AppendF("%p", A.Pointer); break; } } @@ -284,12 +287,12 @@ static void PrintMemorySnippet(const Decorator &Decor, MemoryLocation Loc, InternalScopedString Buffer; for (uptr P = Min; P != Max; ++P) { unsigned char C = *reinterpret_cast(P); - Buffer.append("%s%02x", (P % 8 == 0) ? " " : " ", C); + Buffer.AppendF("%s%02x", (P % 8 == 0) ? " " : " ", C); } - Buffer.append("\n"); + Buffer.AppendF("\n"); // Emit highlights. - Buffer.append("%s", Decor.Highlight()); + Buffer.Append(Decor.Highlight()); Range *InRange = upperBound(Min, Ranges, NumRanges); for (uptr P = Min; P != Max; ++P) { char Pad = ' ', Byte = ' '; @@ -302,12 +305,12 @@ static void PrintMemorySnippet(const Decorator &Decor, MemoryLocation Loc, if (InRange && InRange->getStart().getMemoryLocation() <= P) Byte = '~'; if (P % 8 == 0) - Buffer.append("%c", Pad); - Buffer.append("%c", Pad); - Buffer.append("%c", P == Loc ? '^' : Byte); - Buffer.append("%c", Byte); + Buffer.AppendF("%c", Pad); + Buffer.AppendF("%c", Pad); + Buffer.AppendF("%c", P == Loc ? '^' : Byte); + Buffer.AppendF("%c", Byte); } - Buffer.append("%s\n", Decor.Default()); + Buffer.AppendF("%s\n", Decor.Default()); // Go over the line again, and print names for the ranges. InRange = 0; @@ -322,9 +325,9 @@ static void PrintMemorySnippet(const Decorator &Decor, MemoryLocation Loc, if (InRange && InRange->getStart().getMemoryLocation() == P) { while (Spaces--) - Buffer.append(" "); + Buffer.AppendF(" "); RenderText(&Buffer, InRange->getText(), Args); - Buffer.append("\n"); + Buffer.AppendF("\n"); // FIXME: We only support naming one range for now! break; } @@ -358,24 +361,24 @@ Diag::~Diag() { Buffer.clear(); } - Buffer.append("%s", Decor.Bold()); + Buffer.Append(Decor.Bold()); RenderLocation(&Buffer, Loc); - Buffer.append(":"); + Buffer.AppendF(":"); switch (Level) { case DL_Error: - Buffer.append("%s runtime error: %s%s", Decor.Warning(), Decor.Default(), - Decor.Bold()); + Buffer.AppendF("%s runtime error: %s%s", Decor.Warning(), Decor.Default(), + Decor.Bold()); break; case DL_Note: - Buffer.append("%s note: %s", Decor.Note(), Decor.Default()); + Buffer.AppendF("%s note: %s", Decor.Note(), Decor.Default()); break; } RenderText(&Buffer, Message, Args); - Buffer.append("%s\n", Decor.Default()); + Buffer.AppendF("%s\n", Decor.Default()); Printf("%s", Buffer.data()); if (Loc.isMemoryLocation()) diff --git a/libsanitizer/ubsan/ubsan_flags.cpp b/libsanitizer/ubsan/ubsan_flags.cpp index 9a66bd37518b..25cefd46ce27 100644 --- a/libsanitizer/ubsan/ubsan_flags.cpp +++ b/libsanitizer/ubsan/ubsan_flags.cpp @@ -50,7 +50,6 @@ void InitializeFlags() { { CommonFlags cf; cf.CopyFrom(*common_flags()); - cf.print_summary = false; cf.external_symbolizer_path = GetFlag("UBSAN_SYMBOLIZER_PATH"); OverrideCommonFlags(cf); } diff --git a/libsanitizer/ubsan/ubsan_handlers.cpp b/libsanitizer/ubsan/ubsan_handlers.cpp index 970075e69a66..0f16507d5d88 100644 --- a/libsanitizer/ubsan/ubsan_handlers.cpp +++ b/libsanitizer/ubsan/ubsan_handlers.cpp @@ -894,21 +894,6 @@ void __ubsan_handle_cfi_bad_type(CFICheckFailData *Data, ValueHandle Vtable, } // namespace __ubsan -void __ubsan::__ubsan_handle_cfi_bad_icall(CFIBadIcallData *CallData, - ValueHandle Function) { - GET_REPORT_OPTIONS(false); - CFICheckFailData Data = {CFITCK_ICall, CallData->Loc, CallData->Type}; - handleCFIBadIcall(&Data, Function, Opts); -} - -void __ubsan::__ubsan_handle_cfi_bad_icall_abort(CFIBadIcallData *CallData, - ValueHandle Function) { - GET_REPORT_OPTIONS(true); - CFICheckFailData Data = {CFITCK_ICall, CallData->Loc, CallData->Type}; - handleCFIBadIcall(&Data, Function, Opts); - Die(); -} - void __ubsan::__ubsan_handle_cfi_check_fail(CFICheckFailData *Data, ValueHandle Value, uptr ValidVtable) { @@ -930,4 +915,39 @@ void __ubsan::__ubsan_handle_cfi_check_fail_abort(CFICheckFailData *Data, Die(); } +static bool handleFunctionTypeMismatch(FunctionTypeMismatchData *Data, + ValueHandle Function, + ReportOptions Opts) { + SourceLocation CallLoc = Data->Loc.acquire(); + ErrorType ET = ErrorType::FunctionTypeMismatch; + if (ignoreReport(CallLoc, Opts, ET)) + return true; + + ScopedReport R(Opts, CallLoc, ET); + + SymbolizedStackHolder FLoc(getSymbolizedLocation(Function)); + const char *FName = FLoc.get()->info.function; + if (!FName) + FName = "(unknown)"; + + Diag(CallLoc, DL_Error, ET, + "call to function %0 through pointer to incorrect function type %1") + << FName << Data->Type; + Diag(FLoc, DL_Note, ET, "%0 defined here") << FName; + return true; +} + +void __ubsan::__ubsan_handle_function_type_mismatch( + FunctionTypeMismatchData *Data, ValueHandle Function) { + GET_REPORT_OPTIONS(false); + handleFunctionTypeMismatch(Data, Function, Opts); +} + +void __ubsan::__ubsan_handle_function_type_mismatch_abort( + FunctionTypeMismatchData *Data, ValueHandle Function) { + GET_REPORT_OPTIONS(true); + if (handleFunctionTypeMismatch(Data, Function, Opts)) + Die(); +} + #endif // CAN_SANITIZE_UB diff --git a/libsanitizer/ubsan/ubsan_handlers.h b/libsanitizer/ubsan/ubsan_handlers.h index 9f412353fc0e..3bd5046de3d7 100644 --- a/libsanitizer/ubsan/ubsan_handlers.h +++ b/libsanitizer/ubsan/ubsan_handlers.h @@ -215,20 +215,12 @@ enum CFITypeCheckKind : unsigned char { CFITCK_VMFCall, }; -struct CFIBadIcallData { - SourceLocation Loc; - const TypeDescriptor &Type; -}; - struct CFICheckFailData { CFITypeCheckKind CheckKind; SourceLocation Loc; const TypeDescriptor &Type; }; -/// \brief Handle control flow integrity failure for indirect function calls. -RECOVERABLE(cfi_bad_icall, CFIBadIcallData *Data, ValueHandle Function) - /// \brief Handle control flow integrity failures. RECOVERABLE(cfi_check_fail, CFICheckFailData *Data, ValueHandle Function, uptr VtableIsValid) @@ -239,6 +231,17 @@ extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __ubsan_handle_cfi_bad_type( CFICheckFailData *Data, ValueHandle Vtable, bool ValidVtable, ReportOptions Opts); +struct FunctionTypeMismatchData { + SourceLocation Loc; + const TypeDescriptor &Type; +}; + +extern "C" SANITIZER_INTERFACE_ATTRIBUTE void +__ubsan_handle_function_type_mismatch(FunctionTypeMismatchData *Data, + ValueHandle Val); +extern "C" SANITIZER_INTERFACE_ATTRIBUTE void +__ubsan_handle_function_type_mismatch_abort(FunctionTypeMismatchData *Data, + ValueHandle Val); } #endif // UBSAN_HANDLERS_H diff --git a/libsanitizer/ubsan/ubsan_handlers_cxx.cpp b/libsanitizer/ubsan/ubsan_handlers_cxx.cpp index 0317a3d1428c..206a0bb485a9 100644 --- a/libsanitizer/ubsan/ubsan_handlers_cxx.cpp +++ b/libsanitizer/ubsan/ubsan_handlers_cxx.cpp @@ -156,50 +156,6 @@ void __ubsan_handle_cfi_bad_type(CFICheckFailData *Data, ValueHandle Vtable, Diag(Loc, DL_Note, ET, "check failed in %0, vtable located in %1") << SrcModule << DstModule; } - -static bool handleFunctionTypeMismatch(FunctionTypeMismatchData *Data, - ValueHandle Function, - ValueHandle calleeRTTI, - ValueHandle fnRTTI, ReportOptions Opts) { - if (checkTypeInfoEquality(reinterpret_cast(calleeRTTI), - reinterpret_cast(fnRTTI))) - return false; - - SourceLocation CallLoc = Data->Loc.acquire(); - ErrorType ET = ErrorType::FunctionTypeMismatch; - - if (ignoreReport(CallLoc, Opts, ET)) - return true; - - ScopedReport R(Opts, CallLoc, ET); - - SymbolizedStackHolder FLoc(getSymbolizedLocation(Function)); - const char *FName = FLoc.get()->info.function; - if (!FName) - FName = "(unknown)"; - - Diag(CallLoc, DL_Error, ET, - "call to function %0 through pointer to incorrect function type %1") - << FName << Data->Type; - Diag(FLoc, DL_Note, ET, "%0 defined here") << FName; - return true; -} - -void __ubsan_handle_function_type_mismatch_v1(FunctionTypeMismatchData *Data, - ValueHandle Function, - ValueHandle calleeRTTI, - ValueHandle fnRTTI) { - GET_REPORT_OPTIONS(false); - handleFunctionTypeMismatch(Data, Function, calleeRTTI, fnRTTI, Opts); -} - -void __ubsan_handle_function_type_mismatch_v1_abort( - FunctionTypeMismatchData *Data, ValueHandle Function, - ValueHandle calleeRTTI, ValueHandle fnRTTI) { - GET_REPORT_OPTIONS(true); - if (handleFunctionTypeMismatch(Data, Function, calleeRTTI, fnRTTI, Opts)) - Die(); -} } // namespace __ubsan #endif // CAN_SANITIZE_UB diff --git a/libsanitizer/ubsan/ubsan_handlers_cxx.h b/libsanitizer/ubsan/ubsan_handlers_cxx.h index fd534c2573f6..71695cbdc090 100644 --- a/libsanitizer/ubsan/ubsan_handlers_cxx.h +++ b/libsanitizer/ubsan/ubsan_handlers_cxx.h @@ -33,22 +33,6 @@ void __ubsan_handle_dynamic_type_cache_miss( extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __ubsan_handle_dynamic_type_cache_miss_abort( DynamicTypeCacheMissData *Data, ValueHandle Pointer, ValueHandle Hash); - -struct FunctionTypeMismatchData { - SourceLocation Loc; - const TypeDescriptor &Type; -}; - -extern "C" SANITIZER_INTERFACE_ATTRIBUTE void -__ubsan_handle_function_type_mismatch_v1(FunctionTypeMismatchData *Data, - ValueHandle Val, - ValueHandle calleeRTTI, - ValueHandle fnRTTI); -extern "C" SANITIZER_INTERFACE_ATTRIBUTE void -__ubsan_handle_function_type_mismatch_v1_abort(FunctionTypeMismatchData *Data, - ValueHandle Val, - ValueHandle calleeRTTI, - ValueHandle fnRTTI); } #endif // UBSAN_HANDLERS_CXX_H diff --git a/libsanitizer/ubsan/ubsan_interface.inc b/libsanitizer/ubsan/ubsan_interface.inc index 94337d85017b..cb27feb5d7e9 100644 --- a/libsanitizer/ubsan/ubsan_interface.inc +++ b/libsanitizer/ubsan/ubsan_interface.inc @@ -21,8 +21,8 @@ INTERFACE_FUNCTION(__ubsan_handle_dynamic_type_cache_miss) INTERFACE_FUNCTION(__ubsan_handle_dynamic_type_cache_miss_abort) INTERFACE_FUNCTION(__ubsan_handle_float_cast_overflow) INTERFACE_FUNCTION(__ubsan_handle_float_cast_overflow_abort) -INTERFACE_FUNCTION(__ubsan_handle_function_type_mismatch_v1) -INTERFACE_FUNCTION(__ubsan_handle_function_type_mismatch_v1_abort) +INTERFACE_FUNCTION(__ubsan_handle_function_type_mismatch) +INTERFACE_FUNCTION(__ubsan_handle_function_type_mismatch_abort) INTERFACE_FUNCTION(__ubsan_handle_implicit_conversion) INTERFACE_FUNCTION(__ubsan_handle_implicit_conversion_abort) INTERFACE_FUNCTION(__ubsan_handle_invalid_builtin) diff --git a/libsanitizer/ubsan/ubsan_monitor.cpp b/libsanitizer/ubsan/ubsan_monitor.cpp index 69dd986f9bdf..caed9726d48b 100644 --- a/libsanitizer/ubsan/ubsan_monitor.cpp +++ b/libsanitizer/ubsan/ubsan_monitor.cpp @@ -23,7 +23,8 @@ UndefinedBehaviorReport::UndefinedBehaviorReport(const char *IssueKind, RegisterUndefinedBehaviorReport(this); // Make a copy of the diagnostic. - Buffer.append("%s", Msg.data()); + if (Msg.length()) + Buffer.Append(Msg.data()); // Let the monitor know that a report is available. __ubsan_on_report(); diff --git a/libsanitizer/ubsan/ubsan_platform.h b/libsanitizer/ubsan/ubsan_platform.h index ad3e883f0f35..d2cc2e10bd2f 100644 --- a/libsanitizer/ubsan/ubsan_platform.h +++ b/libsanitizer/ubsan/ubsan_platform.h @@ -12,7 +12,6 @@ #ifndef UBSAN_PLATFORM_H #define UBSAN_PLATFORM_H -#ifndef CAN_SANITIZE_UB // Other platforms should be easy to add, and probably work as-is. #if defined(__linux__) || defined(__FreeBSD__) || defined(__APPLE__) || \ defined(__NetBSD__) || defined(__DragonFly__) || \ @@ -22,6 +21,5 @@ #else # define CAN_SANITIZE_UB 0 #endif -#endif //CAN_SANITIZE_UB #endif diff --git a/libsanitizer/ubsan/ubsan_signals_standalone.cpp b/libsanitizer/ubsan/ubsan_signals_standalone.cpp index 2c91db8ca397..354f847fab71 100644 --- a/libsanitizer/ubsan/ubsan_signals_standalone.cpp +++ b/libsanitizer/ubsan/ubsan_signals_standalone.cpp @@ -34,7 +34,12 @@ void InitializeDeadlySignals() {} #else +namespace __ubsan { +void InitializeDeadlySignals(); +} // namespace __ubsan + #define COMMON_INTERCEPT_FUNCTION(name) INTERCEPT_FUNCTION(name) +#define SIGNAL_INTERCEPTOR_ENTER() __ubsan::InitializeDeadlySignals() #include "sanitizer_common/sanitizer_signal_interceptors.inc" // TODO(yln): Temporary workaround. Will be removed. From aaf0f12175bfc0a7bdc6c80b8d481fb09ae44e25 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 15 Nov 2023 12:46:56 +0100 Subject: [PATCH 064/169] libsanitizer: Apply local patches This patch just reapplies local patches (will be noted in LOCAL_PATCHES). --- libsanitizer/asan/asan_globals.cpp | 19 ------ libsanitizer/asan/asan_interceptors.h | 7 ++- libsanitizer/asan/asan_mapping.h | 2 +- .../sanitizer_linux_libcdep.cpp | 4 ++ .../sanitizer_common/sanitizer_mac.cpp | 12 +++- libsanitizer/sanitizer_common/sanitizer_mac.h | 20 ++++++ .../sanitizer_platform_limits_linux.cpp | 5 +- .../sanitizer_procmaps_mac.cpp | 62 +++---------------- .../sanitizer_common/sanitizer_stacktrace.cpp | 17 +++-- libsanitizer/tsan/tsan_rtl_ppc64.S | 1 + libsanitizer/ubsan/ubsan_flags.cpp | 1 + libsanitizer/ubsan/ubsan_handlers.cpp | 15 +++++ libsanitizer/ubsan/ubsan_handlers.h | 8 +++ libsanitizer/ubsan/ubsan_platform.h | 2 + 14 files changed, 94 insertions(+), 81 deletions(-) diff --git a/libsanitizer/asan/asan_globals.cpp b/libsanitizer/asan/asan_globals.cpp index 6ac64c4b776b..1b419928c36e 100644 --- a/libsanitizer/asan/asan_globals.cpp +++ b/libsanitizer/asan/asan_globals.cpp @@ -158,23 +158,6 @@ static void CheckODRViolationViaIndicator(const Global *g) { } } -// Check ODR violation for given global G by checking if it's already poisoned. -// We use this method in case compiler doesn't use private aliases for global -// variables. -static void CheckODRViolationViaPoisoning(const Global *g) { - if (__asan_region_is_poisoned(g->beg, g->size_with_redzone)) { - // This check may not be enough: if the first global is much larger - // the entire redzone of the second global may be within the first global. - for (ListOfGlobals *l = list_of_all_globals; l; l = l->next) { - if (g->beg == l->g->beg && - (flags()->detect_odr_violation >= 2 || g->size != l->g->size) && - !IsODRViolationSuppressed(g->name)) - ReportODRViolation(g, FindRegistrationSite(g), - l->g, FindRegistrationSite(l->g)); - } - } -} - // Clang provides two different ways for global variables protection: // it can poison the global itself or its private alias. In former // case we may poison same symbol multiple times, that can help us to @@ -220,8 +203,6 @@ static void RegisterGlobal(const Global *g) { // where two globals with the same name are defined in different modules. if (UseODRIndicator(g)) CheckODRViolationViaIndicator(g); - else - CheckODRViolationViaPoisoning(g); } if (CanPoisonMemory()) PoisonRedZones(*g); diff --git a/libsanitizer/asan/asan_interceptors.h b/libsanitizer/asan/asan_interceptors.h index e355c1258a9f..8e9ed5d1ef4e 100644 --- a/libsanitizer/asan/asan_interceptors.h +++ b/libsanitizer/asan/asan_interceptors.h @@ -79,7 +79,12 @@ void InitializePlatformInterceptors(); #if ASAN_HAS_EXCEPTIONS && !SANITIZER_SOLARIS && !SANITIZER_NETBSD && \ (!SANITIZER_WINDOWS || (defined(__MINGW32__) && defined(__i386__))) # define ASAN_INTERCEPT___CXA_THROW 1 -# define ASAN_INTERCEPT___CXA_RETHROW_PRIMARY_EXCEPTION 1 +# if ! defined(ASAN_HAS_CXA_RETHROW_PRIMARY_EXCEPTION) \ + || ASAN_HAS_CXA_RETHROW_PRIMARY_EXCEPTION +# define ASAN_INTERCEPT___CXA_RETHROW_PRIMARY_EXCEPTION 1 +# else +# define ASAN_INTERCEPT___CXA_RETHROW_PRIMARY_EXCEPTION 0 +# endif # if defined(_GLIBCXX_SJLJ_EXCEPTIONS) || (SANITIZER_IOS && defined(__arm__)) # define ASAN_INTERCEPT__UNWIND_SJLJ_RAISEEXCEPTION 1 # else diff --git a/libsanitizer/asan/asan_mapping.h b/libsanitizer/asan/asan_mapping.h index c5f95c07a210..47ccf8444d31 100644 --- a/libsanitizer/asan/asan_mapping.h +++ b/libsanitizer/asan/asan_mapping.h @@ -190,7 +190,7 @@ # elif defined(__aarch64__) # define ASAN_SHADOW_OFFSET_CONST 0x0000001000000000 # elif defined(__powerpc64__) -# define ASAN_SHADOW_OFFSET_CONST 0x0000100000000000 +# define ASAN_SHADOW_OFFSET_CONST 0x0000020000000000 # elif defined(__s390x__) # define ASAN_SHADOW_OFFSET_CONST 0x0010000000000000 # elif SANITIZER_FREEBSD diff --git a/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp b/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp index fcfaa0c36c22..62b5f092cb32 100644 --- a/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp @@ -835,9 +835,13 @@ u32 GetNumberOfCPUs() { #elif SANITIZER_SOLARIS return sysconf(_SC_NPROCESSORS_ONLN); #else +#if defined(CPU_COUNT) cpu_set_t CPUs; CHECK_EQ(sched_getaffinity(0, sizeof(cpu_set_t), &CPUs), 0); return CPU_COUNT(&CPUs); +#else + return 1; +#endif #endif } diff --git a/libsanitizer/sanitizer_common/sanitizer_mac.cpp b/libsanitizer/sanitizer_common/sanitizer_mac.cpp index 24e3d1112520..e1f83e4002a5 100644 --- a/libsanitizer/sanitizer_common/sanitizer_mac.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_mac.cpp @@ -38,7 +38,7 @@ extern char **environ; # endif -# if defined(__has_include) && __has_include() +# if defined(__has_include) && __has_include() && defined(__BLOCKS__) # define SANITIZER_OS_TRACE 1 # include # else @@ -71,7 +71,15 @@ extern char ***_NSGetArgv(void); # include # include # include -# include +# if defined(__has_builtin) && __has_builtin(__builtin_os_log_format) +# include +# else + /* Without support for __builtin_os_log_format, fall back to the older + method. */ +# define OS_LOG_DEFAULT 0 +# define os_log_error(A,B,C) \ + asl_log(nullptr, nullptr, ASL_LEVEL_ERR, "%s", (C)); +# endif # include # include # include diff --git a/libsanitizer/sanitizer_common/sanitizer_mac.h b/libsanitizer/sanitizer_common/sanitizer_mac.h index f0a97d098eea..1cf2e298cc91 100644 --- a/libsanitizer/sanitizer_common/sanitizer_mac.h +++ b/libsanitizer/sanitizer_common/sanitizer_mac.h @@ -14,6 +14,26 @@ #include "sanitizer_common.h" #include "sanitizer_platform.h" + +/* TARGET_OS_OSX is not present in SDKs before Darwin16 (macOS 10.12) use + TARGET_OS_MAC (we have no support for iOS in any form for these versions, + so there's no ambiguity). */ +#if !defined(TARGET_OS_OSX) && TARGET_OS_MAC +# define TARGET_OS_OSX 1 +#endif + +/* Other TARGET_OS_xxx are not present on earlier versions, define them to + 0 (we have no support for them; they are not valid targets anyway). */ +#ifndef TARGET_OS_IOS +#define TARGET_OS_IOS 0 +#endif +#ifndef TARGET_OS_TV +#define TARGET_OS_TV 0 +#endif +#ifndef TARGET_OS_WATCH +#define TARGET_OS_WATCH 0 +#endif + #if SANITIZER_APPLE #include "sanitizer_posix.h" diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_linux.cpp b/libsanitizer/sanitizer_common/sanitizer_platform_limits_linux.cpp index bf0f355847cb..c278c8797f75 100644 --- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_linux.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_linux.cpp @@ -26,7 +26,10 @@ // With old kernels (and even new kernels on powerpc) asm/stat.h uses types that // are not defined anywhere in userspace headers. Fake them. This seems to work -// fine with newer headers, too. +// fine with newer headers, too. Beware that with , struct stat +// takes the form of struct stat64 on 32-bit platforms if _FILE_OFFSET_BITS=64. +// Also, for some platforms (e.g. mips) there are additional members in the +// struct stat:s. #include # if defined(__x86_64__) || defined(__mips__) || defined(__hexagon__) # include diff --git a/libsanitizer/sanitizer_common/sanitizer_procmaps_mac.cpp b/libsanitizer/sanitizer_common/sanitizer_procmaps_mac.cpp index b44e016a0e5b..f2f384671211 100644 --- a/libsanitizer/sanitizer_common/sanitizer_procmaps_mac.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_procmaps_mac.cpp @@ -146,8 +146,13 @@ static bool IsDyldHdr(const mach_header *hdr) { // until we hit a Mach header matching dyld instead. These recurse // calls are expensive, but the first memory map generation occurs // early in the process, when dyld is one of the only images loaded, -// so it will be hit after only a few iterations. These assumptions don't hold -// on macOS 13+ anymore (dyld itself has moved into the shared cache). +// so it will be hit after only a few iterations. These assumptions don't +// hold on macOS 13+ anymore (dyld itself has moved into the shared cache). + +// FIXME: Unfortunately, the upstream revised version to deal with macOS 13+ +// is incompatible with GCC and also uses APIs not available on earlier +// systems which we support; backed out for now. + static mach_header *GetDyldImageHeaderViaVMRegion() { vm_address_t address = 0; @@ -171,64 +176,17 @@ static mach_header *GetDyldImageHeaderViaVMRegion() { } } -extern "C" { -struct dyld_shared_cache_dylib_text_info { - uint64_t version; // current version 2 - // following fields all exist in version 1 - uint64_t loadAddressUnslid; - uint64_t textSegmentSize; - uuid_t dylibUuid; - const char *path; // pointer invalid at end of iterations - // following fields all exist in version 2 - uint64_t textSegmentOffset; // offset from start of cache -}; -typedef struct dyld_shared_cache_dylib_text_info - dyld_shared_cache_dylib_text_info; - -extern bool _dyld_get_shared_cache_uuid(uuid_t uuid); -extern const void *_dyld_get_shared_cache_range(size_t *length); -extern int dyld_shared_cache_iterate_text( - const uuid_t cacheUuid, - void (^callback)(const dyld_shared_cache_dylib_text_info *info)); -} // extern "C" - -static mach_header *GetDyldImageHeaderViaSharedCache() { - uuid_t uuid; - bool hasCache = _dyld_get_shared_cache_uuid(uuid); - if (!hasCache) - return nullptr; - - size_t cacheLength; - __block uptr cacheStart = (uptr)_dyld_get_shared_cache_range(&cacheLength); - CHECK(cacheStart && cacheLength); - - __block mach_header *dyldHdr = nullptr; - int res = dyld_shared_cache_iterate_text( - uuid, ^(const dyld_shared_cache_dylib_text_info *info) { - CHECK_GE(info->version, 2); - mach_header *hdr = - (mach_header *)(cacheStart + info->textSegmentOffset); - if (IsDyldHdr(hdr)) - dyldHdr = hdr; - }); - CHECK_EQ(res, 0); - - return dyldHdr; -} - const mach_header *get_dyld_hdr() { if (!dyld_hdr) { // On macOS 13+, dyld itself has moved into the shared cache. Looking it up // via vm_region_recurse_64() causes spins/hangs/crashes. + // FIXME: find a way to do this compatible with GCC. if (GetMacosAlignedVersion() >= MacosVersion(13, 0)) { - dyld_hdr = GetDyldImageHeaderViaSharedCache(); - if (!dyld_hdr) { VReport(1, - "Failed to lookup the dyld image header in the shared cache on " - "macOS 13+ (or no shared cache in use). Falling back to " + "looking up the dyld image header in the shared cache on " + "macOS 13+ is not yet supported. Falling back to " "lookup via vm_region_recurse_64().\n"); dyld_hdr = GetDyldImageHeaderViaVMRegion(); - } } else { dyld_hdr = GetDyldImageHeaderViaVMRegion(); } diff --git a/libsanitizer/sanitizer_common/sanitizer_stacktrace.cpp b/libsanitizer/sanitizer_common/sanitizer_stacktrace.cpp index d24fae98213a..661495e23405 100644 --- a/libsanitizer/sanitizer_common/sanitizer_stacktrace.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_stacktrace.cpp @@ -87,8 +87,8 @@ static inline uhwptr *GetCanonicFrame(uptr bp, // Nope, this does not look right either. This means the frame after next does // not have a valid frame pointer, but we can still extract the caller PC. // Unfortunately, there is no way to decide between GCC and LLVM frame - // layouts. Assume LLVM. - return bp_prev; + // layouts. Assume GCC. + return bp_prev - 1; #else return (uhwptr*)bp; #endif @@ -111,14 +111,21 @@ void BufferedStackTrace::UnwindFast(uptr pc, uptr bp, uptr stack_top, IsAligned((uptr)frame, sizeof(*frame)) && size < max_depth) { #ifdef __powerpc__ - // PowerPC ABIs specify that the return address is saved at offset - // 16 of the *caller's* stack frame. Thus we must dereference the - // back chain to find the caller frame before extracting it. + // PowerPC ABIs specify that the return address is saved on the + // *caller's* stack frame. Thus we must dereference the back chain + // to find the caller frame before extracting it. uhwptr *caller_frame = (uhwptr*)frame[0]; if (!IsValidFrame((uptr)caller_frame, stack_top, bottom) || !IsAligned((uptr)caller_frame, sizeof(uhwptr))) break; + // For most ABIs the offset where the return address is saved is two + // register sizes. The exception is the SVR4 ABI, which uses an + // offset of only one register size. +#ifdef _CALL_SYSV + uhwptr pc1 = caller_frame[1]; +#else uhwptr pc1 = caller_frame[2]; +#endif #elif defined(__s390__) uhwptr pc1 = frame[14]; #elif defined(__loongarch__) || defined(__riscv) diff --git a/libsanitizer/tsan/tsan_rtl_ppc64.S b/libsanitizer/tsan/tsan_rtl_ppc64.S index 8285e21aa1ec..9e533a71a9c4 100644 --- a/libsanitizer/tsan/tsan_rtl_ppc64.S +++ b/libsanitizer/tsan/tsan_rtl_ppc64.S @@ -1,5 +1,6 @@ #include "tsan_ppc_regs.h" + .machine altivec .section .text .hidden __tsan_setjmp .globl _setjmp diff --git a/libsanitizer/ubsan/ubsan_flags.cpp b/libsanitizer/ubsan/ubsan_flags.cpp index 25cefd46ce27..9a66bd37518b 100644 --- a/libsanitizer/ubsan/ubsan_flags.cpp +++ b/libsanitizer/ubsan/ubsan_flags.cpp @@ -50,6 +50,7 @@ void InitializeFlags() { { CommonFlags cf; cf.CopyFrom(*common_flags()); + cf.print_summary = false; cf.external_symbolizer_path = GetFlag("UBSAN_SYMBOLIZER_PATH"); OverrideCommonFlags(cf); } diff --git a/libsanitizer/ubsan/ubsan_handlers.cpp b/libsanitizer/ubsan/ubsan_handlers.cpp index 0f16507d5d88..85ec961841ff 100644 --- a/libsanitizer/ubsan/ubsan_handlers.cpp +++ b/libsanitizer/ubsan/ubsan_handlers.cpp @@ -894,6 +894,21 @@ void __ubsan_handle_cfi_bad_type(CFICheckFailData *Data, ValueHandle Vtable, } // namespace __ubsan +void __ubsan::__ubsan_handle_cfi_bad_icall(CFIBadIcallData *CallData, + ValueHandle Function) { + GET_REPORT_OPTIONS(false); + CFICheckFailData Data = {CFITCK_ICall, CallData->Loc, CallData->Type}; + handleCFIBadIcall(&Data, Function, Opts); +} + +void __ubsan::__ubsan_handle_cfi_bad_icall_abort(CFIBadIcallData *CallData, + ValueHandle Function) { + GET_REPORT_OPTIONS(true); + CFICheckFailData Data = {CFITCK_ICall, CallData->Loc, CallData->Type}; + handleCFIBadIcall(&Data, Function, Opts); + Die(); +} + void __ubsan::__ubsan_handle_cfi_check_fail(CFICheckFailData *Data, ValueHandle Value, uptr ValidVtable) { diff --git a/libsanitizer/ubsan/ubsan_handlers.h b/libsanitizer/ubsan/ubsan_handlers.h index 3bd5046de3d7..f717bc773b1b 100644 --- a/libsanitizer/ubsan/ubsan_handlers.h +++ b/libsanitizer/ubsan/ubsan_handlers.h @@ -215,12 +215,20 @@ enum CFITypeCheckKind : unsigned char { CFITCK_VMFCall, }; +struct CFIBadIcallData { + SourceLocation Loc; + const TypeDescriptor &Type; +}; + struct CFICheckFailData { CFITypeCheckKind CheckKind; SourceLocation Loc; const TypeDescriptor &Type; }; +/// \brief Handle control flow integrity failure for indirect function calls. +RECOVERABLE(cfi_bad_icall, CFIBadIcallData *Data, ValueHandle Function) + /// \brief Handle control flow integrity failures. RECOVERABLE(cfi_check_fail, CFICheckFailData *Data, ValueHandle Function, uptr VtableIsValid) diff --git a/libsanitizer/ubsan/ubsan_platform.h b/libsanitizer/ubsan/ubsan_platform.h index d2cc2e10bd2f..ad3e883f0f35 100644 --- a/libsanitizer/ubsan/ubsan_platform.h +++ b/libsanitizer/ubsan/ubsan_platform.h @@ -12,6 +12,7 @@ #ifndef UBSAN_PLATFORM_H #define UBSAN_PLATFORM_H +#ifndef CAN_SANITIZE_UB // Other platforms should be easy to add, and probably work as-is. #if defined(__linux__) || defined(__FreeBSD__) || defined(__APPLE__) || \ defined(__NetBSD__) || defined(__DragonFly__) || \ @@ -21,5 +22,6 @@ #else # define CAN_SANITIZE_UB 0 #endif +#endif //CAN_SANITIZE_UB #endif From fab2571c7fe7e9d5372fb7ff1218b17ebe771720 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 15 Nov 2023 12:48:20 +0100 Subject: [PATCH 065/169] libsanitizer: Adjust the asan/sanity-check-pure-c-1.c test The updated libasan doesn't print __interceptor_free (or __interceptor_malloc) but free (or malloc), the following patch adjusts the testcase so that it accepts it. 2023-11-15 Jakub Jelinek * c-c++-common/asan/sanity-check-pure-c-1.c: Adjust for interceptor_ or wrap_ substrings possibly not being emitted in newer libasan. --- gcc/testsuite/c-c++-common/asan/sanity-check-pure-c-1.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/testsuite/c-c++-common/asan/sanity-check-pure-c-1.c b/gcc/testsuite/c-c++-common/asan/sanity-check-pure-c-1.c index 219fcf8ac321..434d5688c0b1 100644 --- a/gcc/testsuite/c-c++-common/asan/sanity-check-pure-c-1.c +++ b/gcc/testsuite/c-c++-common/asan/sanity-check-pure-c-1.c @@ -10,7 +10,7 @@ int main() { } /* { dg-output "heap-use-after-free.*(\n|\r\n|\r)" } */ -/* { dg-output " #0 \[^\n\r]*(in _*(interceptor_|wrap_)free|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ +/* { dg-output " #0 \[^\n\r]*(in _*(interceptor_|wrap_)?free|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ /* { dg-output " #1 \[^\n\r]*(in _*main (\[^\n\r]*sanity-check-pure-c-1.c:8|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */ -/* { dg-output " #0 \[^\n\r]*(in _*(interceptor_|wrap_)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ +/* { dg-output " #0 \[^\n\r]*(in _*(interceptor_|wrap_)?malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ /* { dg-output " #1 \[^\n\r]*(in _*main (\[^\n\r]*sanity-check-pure-c-1.c:7|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ From 95710d75ec8b12a4981a71de7de270fb1ade8fd2 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 15 Nov 2023 12:49:10 +0100 Subject: [PATCH 066/169] libsanitizer: Readd __ubsan_handle_function_type_mismatch_v1{,_abort} So that we don't have to bump libubsan.so.1 SONAME, the following patch reverts part of the changes which removed two handlers. While we don't actually use them from GCC, we shouldn't remove supported entrypoints unless SONAME is changed (removal of __interceptor_* or ___interceptor_* is fine). This is the only removal, other libraries just added some symbols. 2023-11-15 Jakub Jelinek * ubsan/ubsan_handlers_cxx.h (FunctionTypeMismatchData): Forward declare. (__ubsan_handle_function_type_mismatch_v1, __ubsan_handle_function_type_mismatch_v1_abort): Declare. * ubsan/ubsan_handlers_cxx.cpp (handleFunctionTypeMismatch, __ubsan_handle_function_type_mismatch_v1, __ubsan_handle_function_type_mismatch_v1_abort): New functions readded for backwards compatibility from older ubsan. * ubsan/ubsan_interface.inc (__ubsan_handle_function_type_mismatch_v1, __ubsan_handle_function_type_mismatch_v1_abort): Readd. --- libsanitizer/ubsan/ubsan_handlers_cxx.cpp | 44 +++++++++++++++++++++++ libsanitizer/ubsan/ubsan_handlers_cxx.h | 13 +++++++ libsanitizer/ubsan/ubsan_interface.inc | 2 ++ 3 files changed, 59 insertions(+) diff --git a/libsanitizer/ubsan/ubsan_handlers_cxx.cpp b/libsanitizer/ubsan/ubsan_handlers_cxx.cpp index 206a0bb485a9..0317a3d1428c 100644 --- a/libsanitizer/ubsan/ubsan_handlers_cxx.cpp +++ b/libsanitizer/ubsan/ubsan_handlers_cxx.cpp @@ -156,6 +156,50 @@ void __ubsan_handle_cfi_bad_type(CFICheckFailData *Data, ValueHandle Vtable, Diag(Loc, DL_Note, ET, "check failed in %0, vtable located in %1") << SrcModule << DstModule; } + +static bool handleFunctionTypeMismatch(FunctionTypeMismatchData *Data, + ValueHandle Function, + ValueHandle calleeRTTI, + ValueHandle fnRTTI, ReportOptions Opts) { + if (checkTypeInfoEquality(reinterpret_cast(calleeRTTI), + reinterpret_cast(fnRTTI))) + return false; + + SourceLocation CallLoc = Data->Loc.acquire(); + ErrorType ET = ErrorType::FunctionTypeMismatch; + + if (ignoreReport(CallLoc, Opts, ET)) + return true; + + ScopedReport R(Opts, CallLoc, ET); + + SymbolizedStackHolder FLoc(getSymbolizedLocation(Function)); + const char *FName = FLoc.get()->info.function; + if (!FName) + FName = "(unknown)"; + + Diag(CallLoc, DL_Error, ET, + "call to function %0 through pointer to incorrect function type %1") + << FName << Data->Type; + Diag(FLoc, DL_Note, ET, "%0 defined here") << FName; + return true; +} + +void __ubsan_handle_function_type_mismatch_v1(FunctionTypeMismatchData *Data, + ValueHandle Function, + ValueHandle calleeRTTI, + ValueHandle fnRTTI) { + GET_REPORT_OPTIONS(false); + handleFunctionTypeMismatch(Data, Function, calleeRTTI, fnRTTI, Opts); +} + +void __ubsan_handle_function_type_mismatch_v1_abort( + FunctionTypeMismatchData *Data, ValueHandle Function, + ValueHandle calleeRTTI, ValueHandle fnRTTI) { + GET_REPORT_OPTIONS(true); + if (handleFunctionTypeMismatch(Data, Function, calleeRTTI, fnRTTI, Opts)) + Die(); +} } // namespace __ubsan #endif // CAN_SANITIZE_UB diff --git a/libsanitizer/ubsan/ubsan_handlers_cxx.h b/libsanitizer/ubsan/ubsan_handlers_cxx.h index 71695cbdc090..f6f24e8d63ca 100644 --- a/libsanitizer/ubsan/ubsan_handlers_cxx.h +++ b/libsanitizer/ubsan/ubsan_handlers_cxx.h @@ -33,6 +33,19 @@ void __ubsan_handle_dynamic_type_cache_miss( extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __ubsan_handle_dynamic_type_cache_miss_abort( DynamicTypeCacheMissData *Data, ValueHandle Pointer, ValueHandle Hash); + +struct FunctionTypeMismatchData; + +extern "C" SANITIZER_INTERFACE_ATTRIBUTE void +__ubsan_handle_function_type_mismatch_v1(FunctionTypeMismatchData *Data, + ValueHandle Val, + ValueHandle calleeRTTI, + ValueHandle fnRTTI); +extern "C" SANITIZER_INTERFACE_ATTRIBUTE void +__ubsan_handle_function_type_mismatch_v1_abort(FunctionTypeMismatchData *Data, + ValueHandle Val, + ValueHandle calleeRTTI, + ValueHandle fnRTTI); } #endif // UBSAN_HANDLERS_CXX_H diff --git a/libsanitizer/ubsan/ubsan_interface.inc b/libsanitizer/ubsan/ubsan_interface.inc index cb27feb5d7e9..f95f71af3ed1 100644 --- a/libsanitizer/ubsan/ubsan_interface.inc +++ b/libsanitizer/ubsan/ubsan_interface.inc @@ -21,6 +21,8 @@ INTERFACE_FUNCTION(__ubsan_handle_dynamic_type_cache_miss) INTERFACE_FUNCTION(__ubsan_handle_dynamic_type_cache_miss_abort) INTERFACE_FUNCTION(__ubsan_handle_float_cast_overflow) INTERFACE_FUNCTION(__ubsan_handle_float_cast_overflow_abort) +INTERFACE_FUNCTION(__ubsan_handle_function_type_mismatch_v1) +INTERFACE_FUNCTION(__ubsan_handle_function_type_mismatch_v1_abort) INTERFACE_FUNCTION(__ubsan_handle_function_type_mismatch) INTERFACE_FUNCTION(__ubsan_handle_function_type_mismatch_abort) INTERFACE_FUNCTION(__ubsan_handle_implicit_conversion) From b648bc5c6e3d97f356c4e573e323787cc424ba78 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 15 Nov 2023 12:53:53 +0100 Subject: [PATCH 067/169] libsanitizer: update LOCAL_PATCHES 2023-11-15 Jakub Jelinek * LOCAL_PATCHES: Update revisions. --- libsanitizer/LOCAL_PATCHES | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libsanitizer/LOCAL_PATCHES b/libsanitizer/LOCAL_PATCHES index abfc0a143266..a47e298dd34c 100644 --- a/libsanitizer/LOCAL_PATCHES +++ b/libsanitizer/LOCAL_PATCHES @@ -1 +1,2 @@ -401f46e630d52b0fdd2f0df10a3ad59c0e74825f +aaf0f12175bfc0a7bdc6c80b8d481fb09ae44e25 +95710d75ec8b12a4981a71de7de270fb1ade8fd2 From bcef48b59e4b4f86595929b490a8303da1239ac0 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Wed, 15 Nov 2023 09:49:31 +0100 Subject: [PATCH 068/169] Fix ICE with SLP and -fdbg-cnt We have to clear the visited flag on stmts. * tree-vect-slp.cc (vect_slp_region): Also clear visited flag when we skipped an instance due to -fdbg-cnt. --- gcc/tree-vect-slp.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index 80e279d8f506..33c4d1308f61 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -7652,6 +7652,7 @@ vect_slp_region (vec bbs, vec datarefs, bb_vinfo->shared->check_datarefs (); + bool force_clear = false; auto_vec profitable_subgraphs; for (slp_instance instance : BB_VINFO_SLP_INSTANCES (bb_vinfo)) { @@ -7674,15 +7675,17 @@ vect_slp_region (vec bbs, vec datarefs, vect_location = saved_vect_location; if (!dbg_cnt (vect_slp)) - continue; + { + force_clear = true; + continue; + } profitable_subgraphs.safe_push (instance); } /* When we're vectorizing an if-converted loop body make sure we vectorized all if-converted code. */ - if (!profitable_subgraphs.is_empty () - && orig_loop) + if ((!profitable_subgraphs.is_empty () || force_clear) && orig_loop) { gcc_assert (bb_vinfo->bbs.length () == 1); for (gimple_stmt_iterator gsi = gsi_start_bb (bb_vinfo->bbs[0]); From 5cb8610d3a8f8849a4bb6a0f81a2934484d6a15a Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Wed, 15 Nov 2023 12:24:46 +0100 Subject: [PATCH 069/169] tree-optimization/112282 - wrong-code with ifcvt hoisting The following avoids hoisting of invariants from conditionally executed parts of an if-converted loop. That now makes a difference since we perform bitfield lowering even when we do not actually if-convert the loop. if-conversion deals with resetting flow-sensitive info when necessary already. PR tree-optimization/112282 * tree-if-conv.cc (ifcvt_hoist_invariants): Only hoist from the loop header. * gcc.dg/torture/pr112282.c: New testcase. --- gcc/testsuite/gcc.dg/torture/pr112282.c | 132 ++++++++++++++++++++++++ gcc/tree-if-conv.cc | 44 ++++---- 2 files changed, 153 insertions(+), 23 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr112282.c diff --git a/gcc/testsuite/gcc.dg/torture/pr112282.c b/gcc/testsuite/gcc.dg/torture/pr112282.c new file mode 100644 index 000000000000..23e0ed64b828 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr112282.c @@ -0,0 +1,132 @@ +/* { dg-do run } */ + +int printf(const char *, ...); +void __assert_fail(); +int a, g, h, i, v, w = 2, x, y, ab, ac, ad, ae, af, ag; +static int f, j, m, n, p, r, u, aa; +struct b { + int c : 20; + int d : 20; + int e : 10; +}; +static struct b l, o, q = {3, 3, 5}; +int s(int z) { + struct b ah; + int ai = 1, aj[7] = {1, 1, 1, 1, 1, 1, 1}; +ak: + for (u = -22; u < 2; ++u) { + struct b al[8] = {{2, 7, 9}, {8, 7, 1}, {2, 7, 9}, {8, 7, 1}, {2, 7, 9}, {8, 7, 1}, {2, 7, 9}}; + y = z = 0; + for (; z < 2; z++) { + int am[18], k; + ab = ac = 0; + for (; ac < 1; ac++) + for (k = 0; k < 9; k++) + am[k] = 0; + n = 0; + while (1) { + v = u < 0 || a; + h = z < ~u && 4 & q.c; + if ((aa <= l.c) > q.d && p) + return o.c; + if (w) + break; + return q.e; + } + a = j; + } + } + for (x = 0; x < 2; x++) { + struct b an = {1, 8, 4}; + int ao[28] = {5, 0, 0, 9, 0, 3, 0, 5, 0, 0, 9, 0, 3, 0, 5, 0, 0, 9, 0, 3, 0, 5, 0, 0, 9, 0, 3, 0}; + if (q.e) { + int ap = ai || l.c + q.c, aq = q.d, ar = p & f; + q.d = q.d || ar || ap; + p = 0; + if (!j && ai) + goto as; + if (q.d) { + printf("", l); + q.d = f >> j; + } + p = l.c = aq; + an = q; + } else { + int at[12][1] = {{9}, {9}, {5}, {9}, {9}, {5}, {9}, {9}, {5}, {9}, {9}, {5}}; + struct b au; + if (o.c) + aa = ah.e; + if (an.d) + ah.e = (j & (aa * m)) ^ au.d; + o.c = m + aa; + int av = o.c || 0, aw = ai || q.c & l.c, ax = n; + if (q.e < ai) + q = an; + if (r) + break; + ai = aw - av; + an.e = 0; + if (ai) { + an.e = l.c || 0; + f = q.c; + ah.e = l.c % q.d; + q.c = au.e; + if ((q.d && q.c) || ah.e) + __assert_fail(); + q.c = 0; + if (au.d > m || ah.e) + w = au.c | (n & ah.c); + as: + ae = af = ah.c; + int ay = au.d & q.e & au.c || o.c, az = 0 || o.c, ba = m & ah.d; + if (n) + au.c = au.e = (q.e || ah.d) ^ (o.c + (az / au.e)); + n = au.c || au.e; + if (ba) { + printf("", ax); + x = q.e | m; + continue; + } + m = ay; + n = printf("", au); + } + if (ah.d) + o.c = l.c & o.c & q.c; + if (q.d) + __assert_fail(); + printf("", an); + printf("", q); + printf("", au); + if (ah.e) + while (u++) { + struct b al[7] = {{7, 9, 8}, {7, 1, 2}, {7, 9, 8}, {7, 1, 2}, {7, 9, 8}, {7, 1, 2}, {7, 9, 0}}; + if (an.d) { + int d[8] = {0, 1, 0, 1, 0, 1, 0, 1}; + if (ad) + goto ak; + while (ag) + g = an.d = i = m; + f = j; + } + n++; + } + f = q.d; + } + if (l.c && m) { + int d[7] = {1, 0, 1, 0, 1, 0, 1}; + if (x) + h = an.d; + else + g = 0; + } + } + int bb = (q.d ^ ah.c) | aa | (q.e & q.c) | (f & ah.d); + if (bb) + return x; + return 0; +} +int main() { + j = 1; + s(0); + return 0; +} diff --git a/gcc/tree-if-conv.cc b/gcc/tree-if-conv.cc index 0190cf2369eb..0bde281c2468 100644 --- a/gcc/tree-if-conv.cc +++ b/gcc/tree-if-conv.cc @@ -3468,30 +3468,28 @@ ifcvt_can_hoist (class loop *loop, edge pe, gimple *stmt) static void ifcvt_hoist_invariants (class loop *loop, edge pe) { + /* Only hoist from the now unconditionally executed part of the loop. */ + basic_block bb = loop->header; gimple_stmt_iterator hoist_gsi = {}; - unsigned int num_blocks = loop->num_nodes; - basic_block *body = get_loop_body (loop); - for (unsigned int i = 0; i < num_blocks; ++i) - for (gimple_stmt_iterator gsi = gsi_start_bb (body[i]); !gsi_end_p (gsi);) - { - gimple *stmt = gsi_stmt (gsi); - if (ifcvt_can_hoist (loop, pe, stmt)) - { - /* Once we've hoisted one statement, insert other statements - after it. */ - gsi_remove (&gsi, false); - if (hoist_gsi.ptr) - gsi_insert_after (&hoist_gsi, stmt, GSI_NEW_STMT); - else - { - gsi_insert_on_edge_immediate (pe, stmt); - hoist_gsi = gsi_for_stmt (stmt); - } - continue; - } - gsi_next (&gsi); - } - free (body); + for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi);) + { + gimple *stmt = gsi_stmt (gsi); + if (ifcvt_can_hoist (loop, pe, stmt)) + { + /* Once we've hoisted one statement, insert other statements + after it. */ + gsi_remove (&gsi, false); + if (hoist_gsi.ptr) + gsi_insert_after (&hoist_gsi, stmt, GSI_NEW_STMT); + else + { + gsi_insert_on_edge_immediate (pe, stmt); + hoist_gsi = gsi_for_stmt (stmt); + } + continue; + } + gsi_next (&gsi); + } } /* Returns the DECL_FIELD_BIT_OFFSET of the bitfield accesse in stmt iff its From 8747ef47134a5cd251371c204ecaffe0139835f6 Mon Sep 17 00:00:00 2001 From: Stefan Schulze Frielinghaus Date: Wed, 15 Nov 2023 14:42:22 +0100 Subject: [PATCH 070/169] s390: Fix generation of s390-gen-builtins.h By default the preprocessed output includes linemarkers. This leads to an error if -pedantic is used as e.g. during bootstrap: s390-gen-builtins.h:1:3: error: style of line directive is a GCC extension [-Werror] Fixed by omitting linemarkers while generating s390-gen-builtins.h. gcc/ChangeLog: * config/s390/t-s390: Generate s390-gen-builtins.h without linemarkers. --- gcc/config/s390/t-s390 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/s390/t-s390 b/gcc/config/s390/t-s390 index 4ab9718f6e27..2e884c367de0 100644 --- a/gcc/config/s390/t-s390 +++ b/gcc/config/s390/t-s390 @@ -33,4 +33,4 @@ s390-d.o: $(srcdir)/config/s390/s390-d.cc $(POSTCOMPILE) s390-gen-builtins.h: $(srcdir)/config/s390/s390-builtins.h - $(COMPILER) -E $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< > $@ + $(COMPILER) -E -P $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< > $@ From a0e6306b7ee16ce4ef067c00609d1303fed71c74 Mon Sep 17 00:00:00 2001 From: Andrew Stubbs Date: Fri, 6 Oct 2023 11:14:05 +0100 Subject: [PATCH 071/169] amdgcn: simplify secondary reload patterns Remove some unnecessary complexity; no functional change is intended, although LRA appears to use the constraints from the reload_in/out patterns, so it's probably an improvement for it to see the real sgprbase constraints. gcc/ChangeLog: * config/gcn/gcn-valu.md (mov_sgprbase): Add @ modifier. (reload_in): Delete. (reload_out): Delete. * config/gcn/gcn.cc (CODE_FOR): Delete. (get_code_for_##PREFIX##vN##SUFFIX): Delete. (CODE_FOR_OP): Delete. (get_code_for_##PREFIX): Delete. (gcn_secondary_reload): Replace "get_code_for" with "code_for". --- gcc/config/gcn/gcn-valu.md | 31 ++----------------- gcc/config/gcn/gcn.cc | 63 +------------------------------------- 2 files changed, 4 insertions(+), 90 deletions(-) diff --git a/gcc/config/gcn/gcn-valu.md b/gcc/config/gcn/gcn-valu.md index 8c441696ca40..8dc93e8c82e9 100644 --- a/gcc/config/gcn/gcn-valu.md +++ b/gcc/config/gcn/gcn-valu.md @@ -641,7 +641,7 @@ ; vT += Sv ; flat_load v, vT -(define_insn "mov_sgprbase" +(define_insn "@mov_sgprbase" [(set (match_operand:V_1REG 0 "nonimmediate_operand") (unspec:V_1REG [(match_operand:V_1REG 1 "general_operand")] @@ -655,7 +655,7 @@ [m,v ,&v;* ,12] # }) -(define_insn "mov_sgprbase" +(define_insn "@mov_sgprbase" [(set (match_operand:V_2REG 0 "nonimmediate_operand" "= v, v, m") (unspec:V_2REG [(match_operand:V_2REG 1 "general_operand" "vDB, m, v")] @@ -672,7 +672,7 @@ [(set_attr "type" "vmult,*,*") (set_attr "length" "8,12,12")]) -(define_insn "mov_sgprbase" +(define_insn "@mov_sgprbase" [(set (match_operand:V_4REG 0 "nonimmediate_operand") (unspec:V_4REG [(match_operand:V_4REG 1 "general_operand")] @@ -685,31 +685,6 @@ [m,v ,&v;* ,12] # }) -; reload_in was once a standard name, but here it's only referenced by -; gcn_secondary_reload. It allows a reload with a scratch register. - -(define_expand "reload_in" - [(set (match_operand:V_MOV 0 "register_operand" "= v") - (match_operand:V_MOV 1 "memory_operand" " m")) - (clobber (match_operand: 2 "register_operand" "=&v"))] - "" - { - emit_insn (gen_mov_sgprbase (operands[0], operands[1], operands[2])); - DONE; - }) - -; reload_out is similar to reload_in, above. - -(define_expand "reload_out" - [(set (match_operand:V_MOV 0 "memory_operand" "= m") - (match_operand:V_MOV 1 "register_operand" " v")) - (clobber (match_operand: 2 "register_operand" "=&v"))] - "" - { - emit_insn (gen_mov_sgprbase (operands[0], operands[1], operands[2])); - DONE; - }) - ; Expand scalar addresses into gather/scatter patterns (define_split diff --git a/gcc/config/gcn/gcn.cc b/gcc/config/gcn/gcn.cc index ac2992592134..28065c50bfd3 100644 --- a/gcc/config/gcn/gcn.cc +++ b/gcc/config/gcn/gcn.cc @@ -1388,64 +1388,6 @@ GEN_VN_NOEXEC (vec_series,si, A(rtx dest, rtx x, rtx c), A(dest, x, c)) #undef GET_VN_FN #undef A -/* Get icode for vector instructions without an optab. */ - -#define CODE_FOR(PREFIX, SUFFIX) \ -static int \ -get_code_for_##PREFIX##vN##SUFFIX (int nunits) \ -{ \ - switch (nunits) \ - { \ - case 2: return CODE_FOR_##PREFIX##v2##SUFFIX; \ - case 4: return CODE_FOR_##PREFIX##v4##SUFFIX; \ - case 8: return CODE_FOR_##PREFIX##v8##SUFFIX; \ - case 16: return CODE_FOR_##PREFIX##v16##SUFFIX; \ - case 32: return CODE_FOR_##PREFIX##v32##SUFFIX; \ - case 64: return CODE_FOR_##PREFIX##v64##SUFFIX; \ - } \ - \ - gcc_unreachable (); \ - return CODE_FOR_nothing; \ -} - -#define CODE_FOR_OP(PREFIX) \ - CODE_FOR (PREFIX, qi) \ - CODE_FOR (PREFIX, hi) \ - CODE_FOR (PREFIX, hf) \ - CODE_FOR (PREFIX, si) \ - CODE_FOR (PREFIX, sf) \ - CODE_FOR (PREFIX, di) \ - CODE_FOR (PREFIX, df) \ - CODE_FOR (PREFIX, ti) \ -static int \ -get_code_for_##PREFIX (machine_mode mode) \ -{ \ - int vf = GET_MODE_NUNITS (mode); \ - machine_mode smode = GET_MODE_INNER (mode); \ - \ - switch (smode) \ - { \ - case E_QImode: return get_code_for_##PREFIX##vNqi (vf); \ - case E_HImode: return get_code_for_##PREFIX##vNhi (vf); \ - case E_HFmode: return get_code_for_##PREFIX##vNhf (vf); \ - case E_SImode: return get_code_for_##PREFIX##vNsi (vf); \ - case E_SFmode: return get_code_for_##PREFIX##vNsf (vf); \ - case E_DImode: return get_code_for_##PREFIX##vNdi (vf); \ - case E_DFmode: return get_code_for_##PREFIX##vNdf (vf); \ - case E_TImode: return get_code_for_##PREFIX##vNti (vf); \ - default: break; \ - } \ - \ - gcc_unreachable (); \ - return CODE_FOR_nothing; \ -} - -CODE_FOR_OP (reload_in) -CODE_FOR_OP (reload_out) - -#undef CODE_FOR_OP -#undef CODE_FOR - /* Return true if OP is a PARALLEL of CONST_INTs that form a linear series with step STEP. */ @@ -2472,10 +2414,7 @@ gcn_secondary_reload (bool in_p, rtx x, reg_class_t rclass, if (GET_MODE_CLASS (reload_mode) == MODE_VECTOR_INT || GET_MODE_CLASS (reload_mode) == MODE_VECTOR_FLOAT) { - if (in_p) - sri->icode = get_code_for_reload_in (reload_mode); - else - sri->icode = get_code_for_reload_out (reload_mode); + sri->icode = code_for_mov_sgprbase (reload_mode); break; } /* Fallthrough. */ From ae0d2c240213c5a7f6959c032bfc9f0703cab787 Mon Sep 17 00:00:00 2001 From: Andrew Stubbs Date: Tue, 3 Oct 2023 14:03:49 +0100 Subject: [PATCH 072/169] amdgcn: Add Accelerator VGPR registers Add the new CDNA register file. We don't support any of the specialized instructions that use these registers, but they're useful to relieve register pressure without spilling to stack. Co-authored-by: Andrew Jenner gcc/ChangeLog: * config/gcn/constraints.md: Add "a" AVGPR constraint. * config/gcn/gcn-valu.md (*mov): Add AVGPR alternatives. (*mov_4reg): Likewise. (@mov_sgprbase): Likewise. (gather_insn_1offset): Likewise. (gather_insn_1offset_ds): Likewise. (gather_insn_2offsets): Likewise. (scatter_expr): Likewise. (scatter_insn_1offset_ds): Likewise. (scatter_insn_2offsets): Likewise. * config/gcn/gcn.cc (MAX_NORMAL_AVGPR_COUNT): Define. (gcn_class_max_nregs): Handle AVGPR_REGS and ALL_VGPR_REGS. (gcn_hard_regno_mode_ok): Likewise. (gcn_regno_reg_class): Likewise. (gcn_spill_class): Allow spilling to AVGPRs on TARGET_CDNA1_PLUS. (gcn_sgpr_move_p): Handle AVGPRs. (gcn_secondary_reload): Reload AVGPRs via VGPRs. (gcn_conditional_register_usage): Handle AVGPRs. (gcn_vgpr_equivalent_register_operand): New function. (gcn_valid_move_p): Check for validity of AVGPR moves. (gcn_compute_frame_offsets): Handle AVGPRs. (gcn_memory_move_cost): Likewise. (gcn_register_move_cost): Likewise. (gcn_vmem_insn_p): Handle TYPE_VOP3P_MAI. (gcn_md_reorg): Handle AVGPRs. (gcn_hsa_declare_function_name): Likewise. (print_reg): Likewise. (gcn_dwarf_register_number): Likewise. * config/gcn/gcn.h (FIRST_AVGPR_REG): Define. (AVGPR_REGNO): Define. (LAST_AVGPR_REG): Define. (SOFT_ARG_REG): Update. (FRAME_POINTER_REGNUM): Update. (DWARF_LINK_REGISTER): Update. (FIRST_PSEUDO_REGISTER): Update. (AVGPR_REGNO_P): Define. (enum reg_class): Add AVGPR_REGS and ALL_VGPR_REGS. (REG_CLASS_CONTENTS): Add new register classes and add entries for AVGPRs to all classes. (REGISTER_NAMES): Add AVGPRs. * config/gcn/gcn.md (FIRST_AVGPR_REG, LAST_AVGPR_REG): Define. (AP_REGNUM, FP_REGNUM): Update. (define_attr "type"): Add vop3p_mai. (define_attr "unit"): Handle vop3p_mai. (define_attr "gcn_version"): Add "cdna2". (define_attr "enabled"): Handle cdna2. (*mov_insn): Add AVGPR alternatives. (*movti_insn): Likewise. * config/gcn/mkoffload.cc (isa_has_combined_avgprs): New. (process_asm): Process avgpr_count. * config/gcn/predicates.md (gcn_avgpr_register_operand): New. (gcn_avgpr_hard_register_operand): New. * doc/md.texi: Document the "a" constraint. gcc/testsuite/ChangeLog: * gcc.target/gcn/avgpr-mem-double.c: New test. * gcc.target/gcn/avgpr-mem-int.c: New test. * gcc.target/gcn/avgpr-mem-long.c: New test. * gcc.target/gcn/avgpr-mem-short.c: New test. * gcc.target/gcn/avgpr-spill-double.c: New test. * gcc.target/gcn/avgpr-spill-int.c: New test. * gcc.target/gcn/avgpr-spill-long.c: New test. * gcc.target/gcn/avgpr-spill-short.c: New test. libgomp/ChangeLog: * plugin/plugin-gcn.c (max_isa_vgprs): New. (run_kernel): CDNA2 devices have more VGPRs. --- gcc/config/gcn/constraints.md | 3 + gcc/config/gcn/gcn-valu.md | 172 ++++++++++------- gcc/config/gcn/gcn.cc | 181 ++++++++++++++---- gcc/config/gcn/gcn.h | 138 ++++++++++++- gcc/config/gcn/gcn.md | 175 ++++++++++------- gcc/config/gcn/mkoffload.cc | 29 +++ gcc/config/gcn/predicates.md | 24 +++ gcc/doc/md.texi | 3 + .../gcc.target/gcn/avgpr-mem-double.c | 9 + gcc/testsuite/gcc.target/gcn/avgpr-mem-int.c | 116 +++++++++++ gcc/testsuite/gcc.target/gcn/avgpr-mem-long.c | 9 + .../gcc.target/gcn/avgpr-mem-short.c | 9 + .../gcc.target/gcn/avgpr-spill-double.c | 8 + .../gcc.target/gcn/avgpr-spill-int.c | 115 +++++++++++ .../gcc.target/gcn/avgpr-spill-long.c | 8 + .../gcc.target/gcn/avgpr-spill-short.c | 8 + libgomp/plugin/plugin-gcn.c | 24 ++- 17 files changed, 839 insertions(+), 192 deletions(-) create mode 100644 gcc/testsuite/gcc.target/gcn/avgpr-mem-double.c create mode 100644 gcc/testsuite/gcc.target/gcn/avgpr-mem-int.c create mode 100644 gcc/testsuite/gcc.target/gcn/avgpr-mem-long.c create mode 100644 gcc/testsuite/gcc.target/gcn/avgpr-mem-short.c create mode 100644 gcc/testsuite/gcc.target/gcn/avgpr-spill-double.c create mode 100644 gcc/testsuite/gcc.target/gcn/avgpr-spill-int.c create mode 100644 gcc/testsuite/gcc.target/gcn/avgpr-spill-long.c create mode 100644 gcc/testsuite/gcc.target/gcn/avgpr-spill-short.c diff --git a/gcc/config/gcn/constraints.md b/gcc/config/gcn/constraints.md index efe462a0bd65..b29dc5b66436 100644 --- a/gcc/config/gcn/constraints.md +++ b/gcc/config/gcn/constraints.md @@ -77,6 +77,9 @@ (define_register_constraint "v" "VGPR_REGS" "VGPR registers") +(define_register_constraint "a" "TARGET_CDNA1_PLUS ? AVGPR_REGS : NO_REGS" + "Accumulator VGPR registers") + (define_register_constraint "Sg" "SGPR_REGS" "SGPR registers") diff --git a/gcc/config/gcn/gcn-valu.md b/gcc/config/gcn/gcn-valu.md index 8dc93e8c82e9..23f2bbe454ba 100644 --- a/gcc/config/gcn/gcn-valu.md +++ b/gcc/config/gcn/gcn-valu.md @@ -449,12 +449,16 @@ (set_attr "length" "0")]) (define_insn "*mov" - [(set (match_operand:V_1REG 0 "nonimmediate_operand" "=v,v") - (match_operand:V_1REG 1 "general_operand" "vA,B"))] + [(set (match_operand:V_1REG 0 "nonimmediate_operand") + (match_operand:V_1REG 1 "general_operand"))] "" - "v_mov_b32\t%0, %1" - [(set_attr "type" "vop1,vop1") - (set_attr "length" "4,8")]) + {@ [cons: =0, 1; attrs: type, length, gcn_version] + [v ,vA;vop1 ,4,* ] v_mov_b32\t%0, %1 + [v ,B ;vop1 ,8,* ] ^ + [v ,a ;vop3p_mai,8,* ] v_accvgpr_read_b32\t%0, %1 + [$a ,v ;vop3p_mai,8,* ] v_accvgpr_write_b32\t%0, %1 + [a ,a ;vop1 ,4,cdna2] v_accvgpr_mov_b32\t%0, %1 + }) (define_insn "mov_exec" [(set (match_operand:V_1REG 0 "nonimmediate_operand") @@ -493,17 +497,29 @@ ; (set_attr "length" "4,8,16,16")]) (define_insn "*mov" - [(set (match_operand:V_2REG 0 "nonimmediate_operand" "=v") - (match_operand:V_2REG 1 "general_operand" "vDB"))] + [(set (match_operand:V_2REG 0 "nonimmediate_operand" "=v, v,$a,a") + (match_operand:V_2REG 1 "general_operand" "vDB,a, v,a"))] "" - { - if (!REG_P (operands[1]) || REGNO (operands[0]) <= REGNO (operands[1])) - return "v_mov_b32\t%L0, %L1\;v_mov_b32\t%H0, %H1"; - else - return "v_mov_b32\t%H0, %H1\;v_mov_b32\t%L0, %L1"; - } - [(set_attr "type" "vmult") - (set_attr "length" "16")]) + "@ + * if (!REG_P (operands[1]) || REGNO (operands[0]) <= REGNO (operands[1])) \ + return \"v_mov_b32\t%L0, %L1\;v_mov_b32\t%H0, %H1\"; \ + else \ + return \"v_mov_b32\t%H0, %H1\;v_mov_b32\t%L0, %L1\"; + * if (REGNO (operands[0]) <= REGNO (operands[1])) \ + return \"v_accvgpr_read_b32\t%L0, %L1\;v_accvgpr_read_b32\t%H0, %H1\"; \ + else \ + return \"v_accvgpr_read_b32\t%H0, %H1\;v_accvgpr_read_b32\t%L0, %L1\"; + * if (REGNO (operands[0]) <= REGNO (operands[1])) \ + return \"v_accvgpr_write_b32\t%L0, %L1\;v_accvgpr_write_b32\t%H0, %H1\"; \ + else \ + return \"v_accvgpr_write_b32\t%H0, %H1\;v_accvgpr_write_b32\t%L0, %L1\"; + * if (REGNO (operands[0]) <= REGNO (operands[1])) \ + return \"v_accvgpr_mov_b32\t%L0, %L1\;v_accvgpr_mov_b32\t%H0, %H1\"; \ + else \ + return \"v_accvgpr_mov_b32\t%H0, %H1\;v_accvgpr_mov_b32\t%L0, %L1\";" + [(set_attr "type" "vmult,vmult,vmult,vmult") + (set_attr "length" "16,16,16,8") + (set_attr "gcn_version" "*,*,*,cdna2")]) (define_insn "mov_exec" [(set (match_operand:V_2REG 0 "nonimmediate_operand" "= v, v, v, v, m") @@ -546,17 +562,15 @@ (set_attr "length" "16,16,16,16,16")]) (define_insn "*mov_4reg" - [(set (match_operand:V_4REG 0 "nonimmediate_operand" "=v") - (match_operand:V_4REG 1 "general_operand" "vDB"))] + [(set (match_operand:V_4REG 0 "nonimmediate_operand") + (match_operand:V_4REG 1 "general_operand"))] "" - { - return "v_mov_b32\t%L0, %L1\;" - "v_mov_b32\t%H0, %H1\;" - "v_mov_b32\t%J0, %J1\;" - "v_mov_b32\t%K0, %K1\;"; - } - [(set_attr "type" "vmult") - (set_attr "length" "16")]) + {@ [cons: =0, 1; attrs: type, length, gcn_version] + [v,vDB;vmult,16,* ] v_mov_b32\t%L0, %L1\; v_mov_b32\t%H0, %H1\; v_mov_b32\t%J0, %J1\; v_mov_b32\t%K0, %K1 + [v,a ;vmult,32,* ] v_accvgpr_read_b32\t%L0, %L1\; v_accvgpr_read_b32\t%H0, %H1\; v_accvgpr_read_b32\t%J0, %J1\; v_accvgpr_read_b32\t%K0, %K1 + [a,v ;vmult,32,* ] v_accvgpr_write_b32\t%L0, %L1\;v_accvgpr_write_b32\t%H0, %H1\;v_accvgpr_write_b32\t%J0, %J1\;v_accvgpr_write_b32\t%K0, %K1 + [a,a ;vmult,32,cdna2] v_accvgpr_mov_b32\t%L0, %L1\; v_accvgpr_mov_b32\t%H0, %H1\; v_accvgpr_mov_b32\t%J0, %J1\; v_accvgpr_mov_b32\t%K0, %K1 + }) (define_insn "mov_exec" [(set (match_operand:V_4REG 0 "nonimmediate_operand" "= v, v, v, v, m") @@ -648,19 +662,21 @@ UNSPEC_SGPRBASE)) (clobber (match_operand: 2 "register_operand"))] "lra_in_progress || reload_completed" - {@ [cons: =0, 1, =2; attrs: type, length] - [v,vA,&v;vop1,4 ] v_mov_b32\t%0, %1 - [v,vB,&v;vop1,8 ] ^ - [v,m ,&v;* ,12] # - [m,v ,&v;* ,12] # + {@ [cons: =0, 1, =2; attrs: type, length, gcn_version] + [v,vA,&v;vop1,4 ,* ] v_mov_b32\t%0, %1 + [v,vB,&v;vop1,8 ,* ] ^ + [v,m ,&v;* ,12,* ] # + [m,v ,&v;* ,12,* ] # + [a,m ,&v;* ,12,cdna2] # + [m,a ,&v;* ,12,cdna2] # }) (define_insn "@mov_sgprbase" - [(set (match_operand:V_2REG 0 "nonimmediate_operand" "= v, v, m") + [(set (match_operand:V_2REG 0 "nonimmediate_operand" "= v, v, m, a, m") (unspec:V_2REG - [(match_operand:V_2REG 1 "general_operand" "vDB, m, v")] + [(match_operand:V_2REG 1 "general_operand" "vDB, m, v, m, a")] UNSPEC_SGPRBASE)) - (clobber (match_operand: 2 "register_operand" "=&v,&v,&v"))] + (clobber (match_operand: 2 "register_operand" "=&v,&v,&v,&v,&v"))] "lra_in_progress || reload_completed" "@ * if (!REG_P (operands[1]) || REGNO (operands[0]) <= REGNO (operands[1])) \ @@ -668,9 +684,12 @@ else \ return \"v_mov_b32\t%H0, %H1\;v_mov_b32\t%L0, %L1\"; # + # + # #" - [(set_attr "type" "vmult,*,*") - (set_attr "length" "8,12,12")]) + [(set_attr "type" "vmult,*,*,*,*") + (set_attr "length" "8,12,12,12,12") + (set_attr "gcn_version" "*,*,*,cdna2,cdna2")]) (define_insn "@mov_sgprbase" [(set (match_operand:V_4REG 0 "nonimmediate_operand") @@ -1126,13 +1145,13 @@ {}) (define_insn "gather_insn_1offset" - [(set (match_operand:V_MOV 0 "register_operand" "=v") + [(set (match_operand:V_MOV 0 "register_operand" "=v,a") (unspec:V_MOV - [(plus: (match_operand: 1 "register_operand" " v") + [(plus: (match_operand: 1 "register_operand" " v,v") (vec_duplicate: - (match_operand 2 "immediate_operand" " n"))) - (match_operand 3 "immediate_operand" " n") - (match_operand 4 "immediate_operand" " n") + (match_operand 2 "immediate_operand" " n,n"))) + (match_operand 3 "immediate_operand" " n,n") + (match_operand 4 "immediate_operand" " n,n") (mem:BLK (scratch))] UNSPEC_GATHER))] "(AS_FLAT_P (INTVAL (operands[3])) @@ -1162,16 +1181,17 @@ return buf; } [(set_attr "type" "flat") - (set_attr "length" "12")]) + (set_attr "length" "12") + (set_attr "gcn_version" "*,cdna2")]) (define_insn "gather_insn_1offset_ds" - [(set (match_operand:V_MOV 0 "register_operand" "=v") + [(set (match_operand:V_MOV 0 "register_operand" "=v,a") (unspec:V_MOV - [(plus: (match_operand: 1 "register_operand" " v") + [(plus: (match_operand: 1 "register_operand" " v,v") (vec_duplicate: - (match_operand 2 "immediate_operand" " n"))) - (match_operand 3 "immediate_operand" " n") - (match_operand 4 "immediate_operand" " n") + (match_operand 2 "immediate_operand" " n,n"))) + (match_operand 3 "immediate_operand" " n,n") + (match_operand 4 "immediate_operand" " n,n") (mem:BLK (scratch))] UNSPEC_GATHER))] "(AS_ANY_DS_P (INTVAL (operands[3])) @@ -1184,20 +1204,22 @@ return buf; } [(set_attr "type" "ds") - (set_attr "length" "12")]) + (set_attr "length" "12") + (set_attr "gcn_version" "*,cdna2")]) (define_insn "gather_insn_2offsets" - [(set (match_operand:V_MOV 0 "register_operand" "=v") + [(set (match_operand:V_MOV 0 "register_operand" "=v,a") (unspec:V_MOV [(plus: (plus: (vec_duplicate: - (match_operand:DI 1 "register_operand" "Sv")) + (match_operand:DI 1 "register_operand" "Sv,Sv")) (sign_extend: - (match_operand: 2 "register_operand" " v"))) - (vec_duplicate: (match_operand 3 "immediate_operand" " n"))) - (match_operand 4 "immediate_operand" " n") - (match_operand 5 "immediate_operand" " n") + (match_operand: 2 "register_operand" " v,v"))) + (vec_duplicate: (match_operand 3 "immediate_operand" + " n,n"))) + (match_operand 4 "immediate_operand" " n,n") + (match_operand 5 "immediate_operand" " n,n") (mem:BLK (scratch))] UNSPEC_GATHER))] "(AS_GLOBAL_P (INTVAL (operands[4])) @@ -1216,7 +1238,8 @@ return buf; } [(set_attr "type" "flat") - (set_attr "length" "12")]) + (set_attr "length" "12") + (set_attr "gcn_version" "*,cdna2")]) (define_expand "scatter_store" [(match_operand:DI 0 "register_operand") @@ -1255,12 +1278,12 @@ (define_insn "scatter_insn_1offset" [(set (mem:BLK (scratch)) (unspec:BLK - [(plus: (match_operand: 0 "register_operand" "v") + [(plus: (match_operand: 0 "register_operand" "v,v") (vec_duplicate: - (match_operand 1 "immediate_operand" "n"))) - (match_operand:V_MOV 2 "register_operand" "v") - (match_operand 3 "immediate_operand" "n") - (match_operand 4 "immediate_operand" "n")] + (match_operand 1 "immediate_operand" "n,n"))) + (match_operand:V_MOV 2 "register_operand" "v,a") + (match_operand 3 "immediate_operand" "n,n") + (match_operand 4 "immediate_operand" "n,n")] UNSPEC_SCATTER))] "(AS_FLAT_P (INTVAL (operands[3])) && (INTVAL(operands[1]) == 0 @@ -1288,17 +1311,18 @@ return buf; } [(set_attr "type" "flat") - (set_attr "length" "12")]) + (set_attr "length" "12") + (set_attr "gcn_version" "*,cdna2")]) (define_insn "scatter_insn_1offset_ds" [(set (mem:BLK (scratch)) (unspec:BLK - [(plus: (match_operand: 0 "register_operand" "v") + [(plus: (match_operand: 0 "register_operand" "v,v") (vec_duplicate: - (match_operand 1 "immediate_operand" "n"))) - (match_operand:V_MOV 2 "register_operand" "v") - (match_operand 3 "immediate_operand" "n") - (match_operand 4 "immediate_operand" "n")] + (match_operand 1 "immediate_operand" "n,n"))) + (match_operand:V_MOV 2 "register_operand" "v,a") + (match_operand 3 "immediate_operand" "n,n") + (match_operand 4 "immediate_operand" "n,n")] UNSPEC_SCATTER))] "(AS_ANY_DS_P (INTVAL (operands[3])) && ((unsigned HOST_WIDE_INT)INTVAL(operands[1]) < 0x10000))" @@ -1310,7 +1334,8 @@ return buf; } [(set_attr "type" "ds") - (set_attr "length" "12")]) + (set_attr "length" "12") + (set_attr "gcn_version" "*,cdna2")]) (define_insn "scatter_insn_2offsets" [(set (mem:BLK (scratch)) @@ -1318,13 +1343,13 @@ [(plus: (plus: (vec_duplicate: - (match_operand:DI 0 "register_operand" "Sv")) + (match_operand:DI 0 "register_operand" "Sv,Sv")) (sign_extend: - (match_operand: 1 "register_operand" " v"))) - (vec_duplicate: (match_operand 2 "immediate_operand" " n"))) - (match_operand:V_MOV 3 "register_operand" " v") - (match_operand 4 "immediate_operand" " n") - (match_operand 5 "immediate_operand" " n")] + (match_operand: 1 "register_operand" "v,v"))) + (vec_duplicate: (match_operand 2 "immediate_operand" "n,n"))) + (match_operand:V_MOV 3 "register_operand" "v,a") + (match_operand 4 "immediate_operand" "n,n") + (match_operand 5 "immediate_operand" "n,n")] UNSPEC_SCATTER))] "(AS_GLOBAL_P (INTVAL (operands[4])) && (((unsigned HOST_WIDE_INT)INTVAL(operands[2]) + 0x1000) < 0x2000))" @@ -1341,7 +1366,8 @@ return buf; } [(set_attr "type" "flat") - (set_attr "length" "12")]) + (set_attr "length" "12") + (set_attr "gcn_version" "*,cdna2")]) ;; }}} ;; {{{ Permutations diff --git a/gcc/config/gcn/gcn.cc b/gcc/config/gcn/gcn.cc index 28065c50bfd3..52c8a0e409cd 100644 --- a/gcc/config/gcn/gcn.cc +++ b/gcc/config/gcn/gcn.cc @@ -96,6 +96,7 @@ static hash_map lds_allocs; #define MAX_NORMAL_SGPR_COUNT 62 // i.e. 64 with VCC #define MAX_NORMAL_VGPR_COUNT 24 +#define MAX_NORMAL_AVGPR_COUNT 24 /* }}} */ /* {{{ Initialization and options. */ @@ -483,7 +484,8 @@ gcn_class_max_nregs (reg_class_t rclass, machine_mode mode) { /* Scalar registers are 32bit, vector registers are in fact tuples of 64 lanes. */ - if (rclass == VGPR_REGS) + if (rclass == VGPR_REGS || rclass == AVGPR_REGS + || rclass == ALL_VGPR_REGS) { if (vgpr_1reg_mode_p (mode)) return 1; @@ -583,7 +585,7 @@ gcn_hard_regno_mode_ok (unsigned int regno, machine_mode mode) return (sgpr_1reg_mode_p (mode) || (!((regno - FIRST_SGPR_REG) & 1) && sgpr_2reg_mode_p (mode)) || (((regno - FIRST_SGPR_REG) & 3) == 0 && mode == TImode)); - if (VGPR_REGNO_P (regno)) + if (VGPR_REGNO_P (regno) || (AVGPR_REGNO_P (regno) && TARGET_CDNA1_PLUS)) /* Vector instructions do not care about the alignment of register pairs, but where there is no 64-bit instruction, many of the define_split do not work if the input and output registers partially @@ -623,6 +625,8 @@ gcn_regno_reg_class (int regno) } if (VGPR_REGNO_P (regno)) return VGPR_REGS; + if (AVGPR_REGNO_P (regno)) + return AVGPR_REGS; if (SGPR_REGNO_P (regno)) return SGPR_REGS; if (regno < FIRST_VGPR_REG) @@ -813,7 +817,7 @@ gcn_spill_class (reg_class_t c, machine_mode /*mode */ ) || c == VCC_CONDITIONAL_REG || c == EXEC_MASK_REG) return SGPR_REGS; else - return NO_REGS; + return c == VGPR_REGS && TARGET_CDNA1_PLUS ? AVGPR_REGS : NO_REGS; } /* Implement TARGET_IRA_CHANGE_PSEUDO_ALLOCNO_CLASS. @@ -2348,12 +2352,15 @@ gcn_sgpr_move_p (rtx op0, rtx op1) return true; if (MEM_P (op1) && AS_SCALAR_FLAT_P (MEM_ADDR_SPACE (op1))) return true; - if (!REG_P (op0) || REGNO (op0) >= FIRST_PSEUDO_REGISTER - || VGPR_REGNO_P (REGNO (op0))) + if (!REG_P (op0) + || REGNO (op0) >= FIRST_PSEUDO_REGISTER + || VGPR_REGNO_P (REGNO (op0)) + || AVGPR_REGNO_P (REGNO (op0))) return false; if (REG_P (op1) && REGNO (op1) < FIRST_PSEUDO_REGISTER - && !VGPR_REGNO_P (REGNO (op1))) + && !VGPR_REGNO_P (REGNO (op1)) + && !AVGPR_REGNO_P (REGNO (op1))) return true; return immediate_operand (op1, VOIDmode) || memory_operand (op1, VOIDmode); } @@ -2424,6 +2431,11 @@ gcn_secondary_reload (bool in_p, rtx x, reg_class_t rclass, result = (rclass == VGPR_REGS ? NO_REGS : VGPR_REGS); break; } + + /* CDNA1 doesn't have an instruction for going between the accumulator + registers and memory. Go via a VGPR in this case. */ + if (TARGET_CDNA1 && rclass == AVGPR_REGS && result != VGPR_REGS) + result = VGPR_REGS; } if (dump_file && (dump_flags & TDF_DETAILS)) @@ -2445,7 +2457,8 @@ gcn_conditional_register_usage (void) if (cfun->machine->normal_function) { - /* Restrict the set of SGPRs and VGPRs used by non-kernel functions. */ + /* Restrict the set of SGPRs, VGPRs and AVGPRs used by non-kernel + functions. */ for (int i = SGPR_REGNO (MAX_NORMAL_SGPR_COUNT); i <= LAST_SGPR_REG; i++) fixed_regs[i] = 1, call_used_regs[i] = 1; @@ -2454,6 +2467,9 @@ gcn_conditional_register_usage (void) i <= LAST_VGPR_REG; i++) fixed_regs[i] = 1, call_used_regs[i] = 1; + for (int i = AVGPR_REGNO (MAX_NORMAL_AVGPR_COUNT); + i <= LAST_AVGPR_REG; i++) + fixed_regs[i] = 1, call_used_regs[i] = 1; return; } @@ -2507,6 +2523,16 @@ gcn_conditional_register_usage (void) fixed_regs[cfun->machine->args.reg[WORK_ITEM_ID_Z_ARG]] = 1; } +static bool +gcn_vgpr_equivalent_register_operand (rtx x, machine_mode mode) +{ + if (gcn_vgpr_register_operand (x, mode)) + return true; + if (TARGET_CDNA2_PLUS && gcn_avgpr_register_operand (x, mode)) + return true; + return false; +} + /* Determine if a load or store is valid, according to the register classes and address space. Used primarily by the machine description to decide when to split a move into two steps. */ @@ -2515,21 +2541,36 @@ bool gcn_valid_move_p (machine_mode mode, rtx dest, rtx src) { if (!MEM_P (dest) && !MEM_P (src)) - return true; + { + if (gcn_vgpr_register_operand (src, mode) + && gcn_avgpr_register_operand (dest, mode)) + return true; + if (gcn_avgpr_register_operand (src, mode) + && gcn_vgpr_register_operand (dest, mode)) + return true; + if (TARGET_CDNA2_PLUS + && gcn_avgpr_register_operand (src, mode) + && gcn_avgpr_register_operand (dest, mode)) + return true; + if (gcn_avgpr_hard_register_operand (src, mode) + || gcn_avgpr_hard_register_operand (dest, mode)) + return false; + return true; + } if (MEM_P (dest) && AS_FLAT_P (MEM_ADDR_SPACE (dest)) && (gcn_flat_address_p (XEXP (dest, 0), mode) || GET_CODE (XEXP (dest, 0)) == SYMBOL_REF || GET_CODE (XEXP (dest, 0)) == LABEL_REF) - && gcn_vgpr_register_operand (src, mode)) + && gcn_vgpr_equivalent_register_operand (src, mode)) return true; else if (MEM_P (src) && AS_FLAT_P (MEM_ADDR_SPACE (src)) && (gcn_flat_address_p (XEXP (src, 0), mode) || GET_CODE (XEXP (src, 0)) == SYMBOL_REF || GET_CODE (XEXP (src, 0)) == LABEL_REF) - && gcn_vgpr_register_operand (dest, mode)) + && gcn_vgpr_equivalent_register_operand (dest, mode)) return true; if (MEM_P (dest) @@ -2537,14 +2578,14 @@ gcn_valid_move_p (machine_mode mode, rtx dest, rtx src) && (gcn_global_address_p (XEXP (dest, 0)) || GET_CODE (XEXP (dest, 0)) == SYMBOL_REF || GET_CODE (XEXP (dest, 0)) == LABEL_REF) - && gcn_vgpr_register_operand (src, mode)) + && gcn_vgpr_equivalent_register_operand (src, mode)) return true; else if (MEM_P (src) && AS_GLOBAL_P (MEM_ADDR_SPACE (src)) && (gcn_global_address_p (XEXP (src, 0)) || GET_CODE (XEXP (src, 0)) == SYMBOL_REF || GET_CODE (XEXP (src, 0)) == LABEL_REF) - && gcn_vgpr_register_operand (dest, mode)) + && gcn_vgpr_equivalent_register_operand (dest, mode)) return true; if (MEM_P (dest) @@ -2565,12 +2606,12 @@ gcn_valid_move_p (machine_mode mode, rtx dest, rtx src) if (MEM_P (dest) && AS_ANY_DS_P (MEM_ADDR_SPACE (dest)) && gcn_ds_address_p (XEXP (dest, 0)) - && gcn_vgpr_register_operand (src, mode)) + && gcn_vgpr_equivalent_register_operand (src, mode)) return true; else if (MEM_P (src) && AS_ANY_DS_P (MEM_ADDR_SPACE (src)) && gcn_ds_address_p (XEXP (src, 0)) - && gcn_vgpr_register_operand (dest, mode)) + && gcn_vgpr_equivalent_register_operand (dest, mode)) return true; return false; @@ -3006,7 +3047,8 @@ gcn_compute_frame_offsets (void) if ((df_regs_ever_live_p (regno) && !call_used_or_fixed_reg_p (regno)) || ((regno & ~1) == HARD_FRAME_POINTER_REGNUM && frame_pointer_needed)) - offsets->callee_saves += (VGPR_REGNO_P (regno) ? 256 : 4); + offsets->callee_saves += (VGPR_REGNO_P (regno) + || AVGPR_REGNO_P (regno) ? 256 : 4); /* Round up to 64-bit boundary to maintain stack alignment. */ offsets->callee_saves = (offsets->callee_saves + 7) & ~7; @@ -3949,6 +3991,11 @@ gcn_memory_move_cost (machine_mode mode, reg_class_t regclass, bool in) if (in) return (LOAD_COST + 2) * nregs; return STORE_COST * nregs; + case AVGPR_REGS: + case ALL_VGPR_REGS: + if (in) + return (LOAD_COST + (TARGET_CDNA2_PLUS ? 2 : 4)) * nregs; + return (STORE_COST + (TARGET_CDNA2_PLUS ? 0 : 2)) * nregs; case ALL_REGS: case ALL_GPR_REGS: case SRCDST_REGS: @@ -3968,6 +4015,15 @@ gcn_memory_move_cost (machine_mode mode, reg_class_t regclass, bool in) static int gcn_register_move_cost (machine_mode, reg_class_t dst, reg_class_t src) { + if (src == AVGPR_REGS) + { + if (dst == AVGPR_REGS) + return TARGET_CDNA1 ? 6 : 2; + if (dst != VGPR_REGS) + return 6; + } + if (dst == AVGPR_REGS && src != VGPR_REGS) + return 6; /* Increase cost of moving from and to vector registers. While this is fast in hardware (I think), it has hidden cost of setting up the exec flags. */ @@ -5674,6 +5730,7 @@ gcn_vmem_insn_p (attr_type type) case TYPE_MUBUF: case TYPE_MTBUF: case TYPE_FLAT: + case TYPE_VOP3P_MAI: return true; case TYPE_UNKNOWN: case TYPE_SOP1: @@ -5913,7 +5970,8 @@ gcn_md_reorg (void) FOR_EACH_SUBRTX (iter, array, PATTERN (insn), NONCONST) { const_rtx x = *iter; - if (REG_P (x) && VGPR_REGNO_P (REGNO (x))) + if (REG_P (x) && (VGPR_REGNO_P (REGNO (x)) + || AVGPR_REGNO_P (REGNO (x)))) { if (VECTOR_MODE_P (GET_MODE (x))) { @@ -6069,17 +6127,16 @@ gcn_md_reorg (void) if (!prev_insn->insn) continue; + HARD_REG_SET depregs = prev_insn->writes & ireads; + /* VALU writes SGPR followed by VMEM reading the same SGPR requires 5 wait states. */ if ((prev_insn->age + nops_rqd) < 5 && prev_insn->unit == UNIT_VECTOR - && gcn_vmem_insn_p (itype)) - { - HARD_REG_SET regs = prev_insn->writes & ireads; - if (hard_reg_set_intersect_p - (regs, reg_class_contents[(int) SGPR_REGS])) - nops_rqd = 5 - prev_insn->age; - } + && gcn_vmem_insn_p (itype) + && hard_reg_set_intersect_p + (depregs, reg_class_contents[(int) SGPR_REGS])) + nops_rqd = 5 - prev_insn->age; /* VALU sets VCC/EXEC followed by VALU uses VCCZ/EXECZ requires 5 wait states. */ @@ -6101,15 +6158,12 @@ gcn_md_reorg (void) SGPR/VCC as lane select requires 4 wait states. */ if ((prev_insn->age + nops_rqd) < 4 && prev_insn->unit == UNIT_VECTOR - && get_attr_laneselect (insn) == LANESELECT_YES) - { - HARD_REG_SET regs = prev_insn->writes & ireads; - if (hard_reg_set_intersect_p - (regs, reg_class_contents[(int) SGPR_REGS]) + && get_attr_laneselect (insn) == LANESELECT_YES + && (hard_reg_set_intersect_p + (depregs, reg_class_contents[(int) SGPR_REGS]) || hard_reg_set_intersect_p - (regs, reg_class_contents[(int) VCC_CONDITIONAL_REG])) - nops_rqd = 4 - prev_insn->age; - } + (depregs, reg_class_contents[(int) VCC_CONDITIONAL_REG]))) + nops_rqd = 4 - prev_insn->age; /* VALU writes VGPR followed by VALU_DPP reading that VGPR requires 2 wait states. */ @@ -6117,9 +6171,8 @@ gcn_md_reorg (void) && prev_insn->unit == UNIT_VECTOR && itype == TYPE_VOP_DPP) { - HARD_REG_SET regs = prev_insn->writes & ireads; if (hard_reg_set_intersect_p - (regs, reg_class_contents[(int) VGPR_REGS])) + (depregs, reg_class_contents[(int) VGPR_REGS])) nops_rqd = 2 - prev_insn->age; } @@ -6138,6 +6191,35 @@ gcn_md_reorg (void) (prev_insn->writes, reg_class_contents[(int)VCC_CONDITIONAL_REG]))) nops_rqd = ivccwait - prev_insn->age; + + /* CDNA1: write VGPR before v_accvgpr_write reads it. */ + if (TARGET_CDNA1 + && (prev_insn->age + nops_rqd) < 2 + && hard_reg_set_intersect_p + (depregs, reg_class_contents[(int) VGPR_REGS]) + && hard_reg_set_intersect_p + (iwrites, reg_class_contents[(int) AVGPR_REGS])) + nops_rqd = 2 - prev_insn->age; + + /* CDNA1: v_accvgpr_write writes AVGPR before v_accvgpr_read. */ + if (TARGET_CDNA1 + && (prev_insn->age + nops_rqd) < 3 + && hard_reg_set_intersect_p + (depregs, reg_class_contents[(int) AVGPR_REGS]) + && hard_reg_set_intersect_p + (iwrites, reg_class_contents[(int) VGPR_REGS])) + nops_rqd = 3 - prev_insn->age; + + /* CDNA1: Undocumented(?!) read-after-write when restoring values + from AVGPRs to VGPRS. Observed problem was for address register + of flat_load instruction, but others may be affected? */ + if (TARGET_CDNA1 + && (prev_insn->age + nops_rqd) < 2 + && hard_reg_set_intersect_p + (prev_insn->reads, reg_class_contents[(int) AVGPR_REGS]) + && hard_reg_set_intersect_p + (depregs, reg_class_contents[(int) VGPR_REGS])) + nops_rqd = 2 - prev_insn->age; } /* Insert the required number of NOPs. */ @@ -6429,7 +6511,7 @@ output_file_start (void) void gcn_hsa_declare_function_name (FILE *file, const char *name, tree) { - int sgpr, vgpr; + int sgpr, vgpr, avgpr; bool xnack_enabled = TARGET_XNACK; fputs ("\n\n", file); @@ -6454,6 +6536,12 @@ gcn_hsa_declare_function_name (FILE *file, const char *name, tree) if (df_regs_ever_live_p (FIRST_VGPR_REG + vgpr)) break; vgpr++; + for (avgpr = 255; avgpr >= 0; avgpr--) + if (df_regs_ever_live_p (FIRST_AVGPR_REG + avgpr)) + break; + avgpr++; + vgpr = (vgpr + 3) & ~3; + avgpr = (avgpr + 3) & ~3; if (!leaf_function_p ()) { @@ -6462,6 +6550,8 @@ gcn_hsa_declare_function_name (FILE *file, const char *name, tree) vgpr = MAX_NORMAL_VGPR_COUNT; if (sgpr < MAX_NORMAL_SGPR_COUNT) sgpr = MAX_NORMAL_SGPR_COUNT; + if (avgpr < MAX_NORMAL_AVGPR_COUNT) + avgpr = MAX_NORMAL_AVGPR_COUNT; } /* The gfx90a accum_offset field can't represent 0 registers. */ @@ -6519,6 +6609,11 @@ gcn_hsa_declare_function_name (FILE *file, const char *name, tree) ? 2 : cfun->machine->args.requested & (1 << WORK_ITEM_ID_Y_ARG) ? 1 : 0); + int next_free_vgpr = vgpr; + if (TARGET_CDNA1 && avgpr > vgpr) + next_free_vgpr = avgpr; + if (TARGET_CDNA2_PLUS) + next_free_vgpr += avgpr; fprintf (file, "\t .amdhsa_next_free_vgpr\t%i\n" "\t .amdhsa_next_free_sgpr\t%i\n" @@ -6529,7 +6624,7 @@ gcn_hsa_declare_function_name (FILE *file, const char *name, tree) "\t .amdhsa_group_segment_fixed_size\t%u\n" "\t .amdhsa_float_denorm_mode_32\t3\n" "\t .amdhsa_float_denorm_mode_16_64\t3\n", - vgpr, + next_free_vgpr, sgpr, xnack_enabled, LDS_SIZE); @@ -6537,7 +6632,7 @@ gcn_hsa_declare_function_name (FILE *file, const char *name, tree) fprintf (file, "\t .amdhsa_accum_offset\t%i\n" "\t .amdhsa_tg_split\t0\n", - (vgpr+3)&~3); // I think this means the AGPRs come after the VGPRs + vgpr); /* The AGPRs come after the VGPRs. */ fputs ("\t.end_amdhsa_kernel\n", file); #if 1 @@ -6564,9 +6659,9 @@ gcn_hsa_declare_function_name (FILE *file, const char *name, tree) cfun->machine->kernarg_segment_byte_size, cfun->machine->kernarg_segment_alignment, LDS_SIZE, - sgpr, vgpr); - if (gcn_arch == PROCESSOR_GFX90a) - fprintf (file, " .agpr_count: 0\n"); // AGPRs are not used, yet + sgpr, next_free_vgpr); + if (gcn_arch == PROCESSOR_GFX90a || gcn_arch == PROCESSOR_GFX908) + fprintf (file, " .agpr_count: %i\n", avgpr); fputs (" .end_amdgpu_metadata\n", file); #endif @@ -6662,6 +6757,9 @@ print_reg (FILE *file, rtx x) else if (VGPR_REGNO_P (REGNO (x))) fprintf (file, "v[%i:%i]", REGNO (x) - FIRST_VGPR_REG, REGNO (x) - FIRST_VGPR_REG + 1); + else if (AVGPR_REGNO_P (REGNO (x))) + fprintf (file, "a[%i:%i]", REGNO (x) - FIRST_AVGPR_REG, + REGNO (x) - FIRST_AVGPR_REG + 1); else if (REGNO (x) == FLAT_SCRATCH_REG) fprintf (file, "flat_scratch"); else if (REGNO (x) == EXEC_REG) @@ -6680,6 +6778,9 @@ print_reg (FILE *file, rtx x) else if (VGPR_REGNO_P (REGNO (x))) fprintf (file, "v[%i:%i]", REGNO (x) - FIRST_VGPR_REG, REGNO (x) - FIRST_VGPR_REG + 3); + else if (AVGPR_REGNO_P (REGNO (x))) + fprintf (file, "a[%i:%i]", REGNO (x) - FIRST_AVGPR_REG, + REGNO (x) - FIRST_AVGPR_REG + 3); else gcc_unreachable (); } @@ -7603,6 +7704,8 @@ gcn_dwarf_register_number (unsigned int regno) } else if (VGPR_REGNO_P (regno)) return (regno - FIRST_VGPR_REG + 2560); + else if (AVGPR_REGNO_P (regno)) + return (regno - FIRST_AVGPR_REG + 3072); /* Otherwise, there's nothing sensible to do. */ return regno + 100000; diff --git a/gcc/config/gcn/gcn.h b/gcc/config/gcn/gcn.h index 6372f49d3792..cb52be7a3a19 100644 --- a/gcc/config/gcn/gcn.h +++ b/gcc/config/gcn/gcn.h @@ -146,6 +146,9 @@ #define FIRST_VGPR_REG 160 #define VGPR_REGNO(N) ((N)+FIRST_VGPR_REG) #define LAST_VGPR_REG 415 +#define FIRST_AVGPR_REG 416 +#define AVGPR_REGNO(N) ((N)+FIRST_AVGPR_REG) +#define LAST_AVGPR_REG 671 /* Frame Registers, and other registers */ @@ -157,10 +160,10 @@ #define RETURN_VALUE_REG 168 /* Must be divisible by 4. */ #define STATIC_CHAIN_REGNUM 30 #define WORK_ITEM_ID_Z_REG 162 -#define SOFT_ARG_REG 416 -#define FRAME_POINTER_REGNUM 418 -#define DWARF_LINK_REGISTER 420 -#define FIRST_PSEUDO_REGISTER 421 +#define SOFT_ARG_REG 672 +#define FRAME_POINTER_REGNUM 674 +#define DWARF_LINK_REGISTER 676 +#define FIRST_PSEUDO_REGISTER 677 #define FIRST_PARM_REG (FIRST_SGPR_REG + 24) #define FIRST_VPARM_REG (FIRST_VGPR_REG + 8) @@ -176,6 +179,7 @@ #define SGPR_OR_VGPR_REGNO_P(N) ((N)>=FIRST_VGPR_REG && (N) <= LAST_SGPR_REG) #define SGPR_REGNO_P(N) ((N) <= LAST_SGPR_REG) #define VGPR_REGNO_P(N) ((N)>=FIRST_VGPR_REG && (N) <= LAST_VGPR_REG) +#define AVGPR_REGNO_P(N) ((N)>=FIRST_AVGPR_REG && (N) <= LAST_AVGPR_REG) #define SSRC_REGNO_P(N) ((N) <= SCC_REG && (N) != VCCZ_REG) #define SDST_REGNO_P(N) ((N) <= EXEC_HI_REG && (N) != VCCZ_REG) #define CC_REG_P(X) (REG_P (X) && CC_REGNO_P (REGNO (X))) @@ -206,7 +210,7 @@ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, \ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ - /* VGRPs */ \ + /* VGPRs */ \ 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -223,6 +227,23 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + /* Accumulation VGPRs */ \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ /* Other registers. */ \ 1, 1, 1, 1, 1 \ } @@ -244,7 +265,7 @@ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ - /* VGRPs */ \ + /* VGPRs */ \ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -261,6 +282,23 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + /* Accumulation VGPRs */ \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ /* Other registers. */ \ 1, 1, 1, 1, 1 \ } @@ -320,6 +358,8 @@ enum reg_class SGPR_SRC_REGS, GENERAL_REGS, VGPR_REGS, + AVGPR_REGS, + ALL_VGPR_REGS, ALL_GPR_REGS, SRCDST_REGS, AFP_REGS, @@ -345,6 +385,8 @@ enum reg_class "SGPR_SRC_REGS", \ "GENERAL_REGS", \ "VGPR_REGS", \ + "AVGPR_REGS", \ + "ALL_VGPR_REGS", \ "ALL_GPR_REGS", \ "SRCDST_REGS", \ "AFP_REGS", \ @@ -357,40 +399,58 @@ enum reg_class #define REG_CLASS_CONTENTS { \ /* NO_REGS. */ \ {0, 0, 0, 0, \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, \ 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0}, \ /* SCC_CONDITIONAL_REG. */ \ {0, 0, 0, 0, \ NAMED_REG_MASK2 (SCC_REG), 0, 0, 0, \ - 0, 0, 0, 0, 0}, \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0}, \ /* VCCZ_CONDITIONAL_REG. */ \ {0, 0, 0, NAMED_REG_MASK (VCCZ_REG), \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, \ 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0}, \ /* VCC_CONDITIONAL_REG. */ \ {0, 0, 0, NAMED_REG_MASK (VCC_LO_REG)|NAMED_REG_MASK (VCC_HI_REG), \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, \ 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0}, \ /* EXECZ_CONDITIONAL_REG. */ \ {0, 0, 0, 0, \ NAMED_REG_MASK2 (EXECZ_REG), 0, 0, 0, \ - 0, 0, 0, 0, 0}, \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0}, \ /* ALL_CONDITIONAL_REGS. */ \ {0, 0, 0, NAMED_REG_MASK (VCCZ_REG), \ NAMED_REG_MASK2 (EXECZ_REG) | NAMED_REG_MASK2 (SCC_REG), 0, 0, 0, \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0}, \ /* EXEC_MASK_REG. */ \ {0, 0, 0, NAMED_REG_MASK (EXEC_LO_REG) | NAMED_REG_MASK (EXEC_HI_REG), \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, \ 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0}, \ /* SGPR_REGS. */ \ {0xffffffff, 0xffffffff, 0xffffffff, 0xf1, \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, \ 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0}, \ /* SGPR_EXEC_REGS. */ \ {0xffffffff, 0xffffffff, 0xffffffff, \ 0xf1 | NAMED_REG_MASK (EXEC_LO_REG) | NAMED_REG_MASK (EXEC_HI_REG), \ 0, 0, 0, 0, \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0}, \ /* SGPR_VOP_SRC_REGS. */ \ {0xffffffff, 0xffffffff, 0xffffffff, \ @@ -398,12 +458,16 @@ enum reg_class -NAMED_REG_MASK (EXEC_LO_REG) \ -NAMED_REG_MASK (EXEC_HI_REG), \ NAMED_REG_MASK2 (SCC_REG), 0, 0, 0, \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0}, \ /* SGPR_MEM_SRC_REGS. */ \ {0xffffffff, 0xffffffff, 0xffffffff, \ 0xffffffff-NAMED_REG_MASK (VCCZ_REG)-NAMED_REG_MASK (M0_REG) \ -NAMED_REG_MASK (EXEC_LO_REG)-NAMED_REG_MASK (EXEC_HI_REG), \ 0, 0, 0, 0, \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0}, \ /* SGPR_DST_REGS. */ \ {0xffffffff, 0xffffffff, 0xffffffff, \ @@ -413,30 +477,56 @@ enum reg_class /* SGPR_SRC_REGS. */ \ {0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, \ NAMED_REG_MASK2 (EXECZ_REG) | NAMED_REG_MASK2 (SCC_REG), 0, 0, 0, \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0}, \ /* GENERAL_REGS. */ \ {0xffffffff, 0xffffffff, 0xffffffff, 0xf1, \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, \ 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0}, \ /* VGPR_REGS. */ \ {0, 0, 0, 0, \ 0, 0xffffffff, 0xffffffff, 0xffffffff, \ + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, \ + 0xffffffff, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0}, \ + /* AVGPR_REGS. */ \ + {0, 0, 0, 0, \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, \ + 0, 0xffffffff, 0xffffffff, 0xffffffff, \ + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0}, \ + /* ALL_VGPR_REGS. */ \ + {0, 0, 0, 0, \ + 0, 0xffffffff, 0xffffffff, 0xffffffff, \ + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, \ + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, \ 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0}, \ /* ALL_GPR_REGS. */ \ {0xffffffff, 0xffffffff, 0xffffffff, 0xf1, \ 0, 0xffffffff, 0xffffffff, 0xffffffff, \ - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0}, \ + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, \ + 0xffffffff, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0}, \ /* SRCDST_REGS. */ \ {0xffffffff, 0xffffffff, 0xffffffff, \ 0xffffffff-NAMED_REG_MASK (VCCZ_REG), \ 0, 0xffffffff, 0xffffffff, 0xffffffff, \ - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0}, \ + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, \ + 0xffffffff, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0}, \ /* AFP_REGS. */ \ {0, 0, 0, 0, \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, \ 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0xf}, \ /* ALL_REGS. */ \ {0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, \ + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, \ + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, \ 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, \ 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0 }} @@ -541,6 +631,34 @@ enum gcn_address_spaces "v236", "v237", "v238", "v239", "v240", "v241", "v242", "v243", "v244", \ "v245", "v246", "v247", "v248", "v249", "v250", "v251", "v252", "v253", \ "v254", "v255", \ + "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", \ + "a11", "a12", "a13", "a14", "a15", "a16", "a17", "a18", "a19", "a20", \ + "a21", "a22", "a23", "a24", "a25", "a26", "a27", "a28", "a29", "a30", \ + "a31", "a32", "a33", "a34", "a35", "a36", "a37", "a38", "a39", "a40", \ + "a41", "a42", "a43", "a44", "a45", "a46", "a47", "a48", "a49", "a50", \ + "a51", "a52", "a53", "a54", "a55", "a56", "a57", "a58", "a59", "a60", \ + "a61", "a62", "a63", "a64", "a65", "a66", "a67", "a68", "a69", "a70", \ + "a71", "a72", "a73", "a74", "a75", "a76", "a77", "a78", "a79", "a80", \ + "a81", "a82", "a83", "a84", "a85", "a86", "a87", "a88", "a89", "a90", \ + "a91", "a92", "a93", "a94", "a95", "a96", "a97", "a98", "a99", "a100", \ + "a101", "a102", "a103", "a104", "a105", "a106", "a107", "a108", "a109", \ + "a110", "a111", "a112", "a113", "a114", "a115", "a116", "a117", "a118", \ + "a119", "a120", "a121", "a122", "a123", "a124", "a125", "a126", "a127", \ + "a128", "a129", "a130", "a131", "a132", "a133", "a134", "a135", "a136", \ + "a137", "a138", "a139", "a140", "a141", "a142", "a143", "a144", "a145", \ + "a146", "a147", "a148", "a149", "a150", "a151", "a152", "a153", "a154", \ + "a155", "a156", "a157", "a158", "a159", "a160", "a161", "a162", "a163", \ + "a164", "a165", "a166", "a167", "a168", "a169", "a170", "a171", "a172", \ + "a173", "a174", "a175", "a176", "a177", "a178", "a179", "a180", "a181", \ + "a182", "a183", "a184", "a185", "a186", "a187", "a188", "a189", "a190", \ + "a191", "a192", "a193", "a194", "a195", "a196", "a197", "a198", "a199", \ + "a200", "a201", "a202", "a203", "a204", "a205", "a206", "a207", "a208", \ + "a209", "a210", "a211", "a212", "a213", "a214", "a215", "a216", "a217", \ + "a218", "a219", "a220", "a221", "a222", "a223", "a224", "a225", "a226", \ + "a227", "a228", "a229", "a230", "a231", "a232", "a233", "a234", "a235", \ + "a236", "a237", "a238", "a239", "a240", "a241", "a242", "a243", "a244", \ + "a245", "a246", "a247", "a248", "a249", "a250", "a251", "a252", "a253", \ + "a254", "a255", \ "?ap0", "?ap1", "?fp0", "?fp1", "?dwlr" } #define PRINT_OPERAND(FILE, X, CODE) print_operand(FILE, X, CODE) diff --git a/gcc/config/gcn/gcn.md b/gcc/config/gcn/gcn.md index e6a9ac60b57d..b7fbbaf830b0 100644 --- a/gcc/config/gcn/gcn.md +++ b/gcc/config/gcn/gcn.md @@ -51,13 +51,15 @@ (EXECZ_REG 128) (SCC_REG 129) (FIRST_VGPR_REG 160) - (LAST_VGPR_REG 415)]) + (LAST_VGPR_REG 415) + (FIRST_AVGPR_REG 416) + (LAST_AVGPR_REG 671)]) (define_constants [(SP_REGNUM 16) (LR_REGNUM 18) - (AP_REGNUM 416) - (FP_REGNUM 418)]) + (AP_REGNUM 672) + (FP_REGNUM 674)]) (define_c_enum "unspecv" [ UNSPECV_PROLOGUE_USE @@ -171,6 +173,11 @@ ; vdst: vgpr0-255 ; sdst: sgpr0-103/vcc/tba/tma/ttmp0-11 ; +; vop3p_mai - vector, three inputs, one vector output +; vsrc0,vsrc1,vsrc2: inline constant -16 to -64, fp inline immediate, +; (acc or arch) vgpr0-255 +; vdst: (acc or arch) vgpr0-255 +; ; vop_sdwa - second dword for vop1/vop2/vopc for specifying sub-dword address ; src0: vgpr0-255 ; dst_sel: BYTE_0-3, WORD_0-1, DWORD @@ -229,7 +236,8 @@ (define_attr "type" "unknown,sop1,sop2,sopk,sopc,sopp,smem,ds,vop2,vop1,vopc, - vop3a,vop3b,vop_sdwa,vop_dpp,mubuf,mtbuf,flat,mult,vmult" + vop3a,vop3b,vop3p_mai,vop_sdwa,vop_dpp,mubuf,mtbuf,flat,mult, + vmult" (const_string "unknown")) ; Set if instruction is executed in scalar or vector unit @@ -237,7 +245,7 @@ (define_attr "unit" "unknown,scalar,vector" (cond [(eq_attr "type" "sop1,sop2,sopk,sopc,sopp,smem,mult") (const_string "scalar") - (eq_attr "type" "vop2,vop1,vopc,vop3a,vop3b,ds, + (eq_attr "type" "vop2,vop1,vopc,vop3a,vop3b,ds,vop3p_mai, vop_sdwa,vop_dpp,flat,vmult") (const_string "vector")] (const_string "unknown"))) @@ -284,7 +292,7 @@ ; Disable alternatives that only apply to specific ISA variants. -(define_attr "gcn_version" "gcn3,gcn5" (const_string "gcn3")) +(define_attr "gcn_version" "gcn3,gcn5,cdna2" (const_string "gcn3")) (define_attr "rdna" "any,no,yes" (const_string "any")) (define_attr "enabled" "" @@ -297,6 +305,9 @@ (eq_attr "gcn_version" "gcn3") (const_int 1) (and (eq_attr "gcn_version" "gcn5") (ne (symbol_ref "TARGET_GCN5_PLUS") (const_int 0))) + (const_int 1) + (and (eq_attr "gcn_version" "cdna2") + (ne (symbol_ref "TARGET_CDNA2_PLUS") (const_int 0))) (const_int 1)] (const_int 0))) @@ -552,25 +563,32 @@ [(set (match_operand:SISF 0 "nonimmediate_operand") (match_operand:SISF 1 "gcn_load_operand"))] "" - {@ [cons: =0, 1; attrs: type, exec, length] - [SD ,SSA ;sop1 ,* ,4 ] s_mov_b32\t%0, %1 - [SD ,J ;sopk ,* ,4 ] s_movk_i32\t%0, %1 - [SD ,B ;sop1 ,* ,8 ] s_mov_b32\t%0, %1 - [SD ,RB ;smem ,* ,12] s_buffer_load%s0\t%0, s[0:3], %1\;s_waitcnt\tlgkmcnt(0) - [RB ,Sm ;smem ,* ,12] s_buffer_store%s1\t%1, s[0:3], %0 - [Sm ,RS ;smem ,* ,12] s_load_dword\t%0, %A1\;s_waitcnt\tlgkmcnt(0) - [RS ,Sm ;smem ,* ,12] s_store_dword\t%1, %A0 - [v ,v ;vop1 ,* ,4 ] v_mov_b32\t%0, %1 - [Sg ,v ;vop3a,none,8 ] v_readlane_b32\t%0, %1, 0 - [v ,Sv ;vop3a,none,8 ] v_writelane_b32\t%0, %1, 0 - [v ,RF ;flat ,* ,12] flat_load_dword\t%0, %A1%O1%g1\;s_waitcnt\t0 - [RF ,v ;flat ,* ,12] flat_store_dword\t%A0, %1%O0%g0 - [v ,B ;vop1 ,* ,8 ] v_mov_b32\t%0, %1 - [RLRG,v ;ds ,* ,12] ds_write_b32\t%A0, %1%O0\;s_waitcnt\tlgkmcnt(0) - [v ,RLRG;ds ,* ,12] ds_read_b32\t%0, %A1%O1\;s_waitcnt\tlgkmcnt(0) - [SD ,Y ;sop1 ,* ,8 ] s_mov_b32\t%0, %1 - [v ,RM ;flat ,* ,12] global_load_dword\t%0, %A1%O1%g1\;s_waitcnt\tvmcnt(0) - [RM ,v ;flat ,* ,12] global_store_dword\t%A0, %1%O0%g0 + {@ [cons: =0, 1; attrs: type, exec, length, gcn_version] + [SD ,SSA ;sop1 ,* ,4 ,* ] s_mov_b32\t%0, %1 + [SD ,J ;sopk ,* ,4 ,* ] s_movk_i32\t%0, %1 + [SD ,B ;sop1 ,* ,8 ,* ] s_mov_b32\t%0, %1 + [SD ,RB ;smem ,* ,12,* ] s_buffer_load%s0\t%0, s[0:3], %1\;s_waitcnt\tlgkmcnt(0) + [RB ,Sm ;smem ,* ,12,* ] s_buffer_store%s1\t%1, s[0:3], %0 + [Sm ,RS ;smem ,* ,12,* ] s_load_dword\t%0, %A1\;s_waitcnt\tlgkmcnt(0) + [RS ,Sm ;smem ,* ,12,* ] s_store_dword\t%1, %A0 + [v ,v ;vop1 ,* ,4 ,* ] v_mov_b32\t%0, %1 + [Sg ,v ;vop3a,none,8 ,* ] v_readlane_b32\t%0, %1, 0 + [v ,Sv ;vop3a,none,8 ,* ] v_writelane_b32\t%0, %1, 0 + [v ,^a ;vop3p_mai,*,8,* ] v_accvgpr_read_b32\t%0, %1 + [a ,v ;vop3p_mai,*,8,* ] v_accvgpr_write_b32\t%0, %1 + [a ,a ;vop1 ,* ,4,cdna2] v_accvgpr_mov_b32\t%0, %1 + [v ,RF ;flat ,* ,12,* ] flat_load_dword\t%0, %A1%O1%g1\;s_waitcnt\t0 + [^a ,RF ;flat ,* ,12,cdna2] ^ + [RF ,v ;flat ,* ,12,* ] flat_store_dword\t%A0, %1%O0%g0 + [RF ,a ;flat ,* ,12,cdna2] ^ + [v ,B ;vop1 ,* ,8 ,* ] v_mov_b32\t%0, %1 + [RLRG,v ;ds ,* ,12,* ] ds_write_b32\t%A0, %1%O0\;s_waitcnt\tlgkmcnt(0) + [v ,RLRG;ds ,* ,12,* ] ds_read_b32\t%0, %A1%O1\;s_waitcnt\tlgkmcnt(0) + [SD ,Y ;sop1 ,* ,8 ,* ] s_mov_b32\t%0, %1 + [v ,RM ;flat ,* ,12,* ] global_load_dword\t%0, %A1%O1%g1\;s_waitcnt\tvmcnt(0) + [^a ,RM ;flat ,* ,12,cdna2] ^ + [RM ,v ;flat ,* ,12,* ] global_store_dword\t%A0, %1%O0%g0 + [RM ,a ;flat ,* ,12,cdna2] ^ }) ; 8/16bit move pattern @@ -580,20 +598,27 @@ [(set (match_operand:QIHI 0 "nonimmediate_operand") (match_operand:QIHI 1 "gcn_load_operand"))] "gcn_valid_move_p (mode, operands[0], operands[1])" - {@ [cons: =0, 1; attrs: type, exec, length] - [SD ,SSA ;sop1 ,* ,4 ] s_mov_b32\t%0, %1 - [SD ,J ;sopk ,* ,4 ] s_movk_i32\t%0, %1 - [SD ,B ;sop1 ,* ,8 ] s_mov_b32\t%0, %1 - [v ,v ;vop1 ,* ,4 ] v_mov_b32\t%0, %1 - [Sg ,v ;vop3a,none,4 ] v_readlane_b32\t%0, %1, 0 - [v ,Sv ;vop3a,none,4 ] v_writelane_b32\t%0, %1, 0 - [v ,RF ;flat ,* ,12] flat_load%o1\t%0, %A1%O1%g1\;s_waitcnt\t0 - [RF ,v ;flat ,* ,12] flat_store%s0\t%A0, %1%O0%g0 - [v ,B ;vop1 ,* ,8 ] v_mov_b32\t%0, %1 - [RLRG,v ;ds ,* ,12] ds_write%b0\t%A0, %1%O0\;s_waitcnt\tlgkmcnt(0) - [v ,RLRG;ds ,* ,12] ds_read%u1\t%0, %A1%O1\;s_waitcnt\tlgkmcnt(0) - [v ,RM ;flat ,* ,12] global_load%o1\t%0, %A1%O1%g1\;s_waitcnt\tvmcnt(0) - [RM ,v ;flat ,* ,12] global_store%s0\t%A0, %1%O0%g0 + {@ [cons: =0, 1; attrs: type, exec, length, gcn_version] + [SD ,SSA ;sop1 ,* ,4 ,* ] s_mov_b32\t%0, %1 + [SD ,J ;sopk ,* ,4 ,* ] s_movk_i32\t%0, %1 + [SD ,B ;sop1 ,* ,8 ,* ] s_mov_b32\t%0, %1 + [v ,v ;vop1 ,* ,4 ,* ] v_mov_b32\t%0, %1 + [Sg ,v ;vop3a,none,4 ,* ] v_readlane_b32\t%0, %1, 0 + [v ,Sv ;vop3a,none,4 ,* ] v_writelane_b32\t%0, %1, 0 + [v ,^a ;vop3p_mai,*,8,* ] v_accvgpr_read_b32\t%0, %1 + [a ,v ;vop3p_mai,*,8,* ] v_accvgpr_write_b32\t%0, %1 + [a ,a ;vop1 ,* ,8,cdna2] v_accvgpr_mov_b32\t%0, %1 + [v ,RF ;flat ,* ,12,* ] flat_load%o1\t%0, %A1%O1%g1\;s_waitcnt\t0 + [^a ,RF ;flat ,* ,12,cdna2] ^ + [RF ,v ;flat ,* ,12,* ] flat_store%s0\t%A0, %1%O0%g0 + [RF ,a ;flat ,* ,12,cdna2] ^ + [v ,B ;vop1 ,* ,8 ,* ] v_mov_b32\t%0, %1 + [RLRG,v ;ds ,* ,12,* ] ds_write%b0\t%A0, %1%O0\;s_waitcnt\tlgkmcnt(0) + [v ,RLRG;ds ,* ,12,* ] ds_read%u1\t%0, %A1%O1\;s_waitcnt\tlgkmcnt(0) + [v ,RM ;flat ,* ,12,* ] global_load%o1\t%0, %A1%O1%g1\;s_waitcnt\tvmcnt(0) + [^a ,RM ;flat ,* ,12,cdna2] ^ + [RM ,v ;flat ,* ,12,* ] global_store%s0\t%A0, %1%O0%g0 + [RM ,a ;flat ,* ,12,cdna2] ^ }) ; 64bit move pattern @@ -602,22 +627,29 @@ [(set (match_operand:DIDF 0 "nonimmediate_operand") (match_operand:DIDF 1 "general_operand"))] "GET_CODE(operands[1]) != SYMBOL_REF" - {@ [cons: =0, 1; attrs: type, length] - [SD ,SSA ;sop1 ,4 ] s_mov_b64\t%0, %1 - [SD ,C ;sop1 ,8 ] ^ - [SD ,DB ;mult ,* ] # - [RS ,Sm ;smem ,12] s_store_dwordx2\t%1, %A0 - [Sm ,RS ;smem ,12] s_load_dwordx2\t%0, %A1\;s_waitcnt\tlgkmcnt(0) - [v ,v ;vmult,* ] # - [v ,DB ;vmult,* ] # - [Sg ,v ;vmult,* ] # - [v ,Sv ;vmult,* ] # - [v ,RF ;flat ,12] flat_load_dwordx2\t%0, %A1%O1%g1\;s_waitcnt\t0 - [RF ,v ;flat ,12] flat_store_dwordx2\t%A0, %1%O0%g0 - [RLRG,v ;ds ,12] ds_write_b64\t%A0, %1%O0\;s_waitcnt\tlgkmcnt(0) - [v ,RLRG;ds ,12] ds_read_b64\t%0, %A1%O1\;s_waitcnt\tlgkmcnt(0) - [v ,RM ;flat ,12] global_load_dwordx2\t%0, %A1%O1%g1\;s_waitcnt\tvmcnt(0) - [RM ,v ;flat ,12] global_store_dwordx2\t%A0, %1%O0%g0 + {@ [cons: =0, 1; attrs: type, length, gcn_version] + [SD ,SSA ;sop1 ,4 ,* ] s_mov_b64\t%0, %1 + [SD ,C ;sop1 ,8 ,* ] ^ + [SD ,DB ;mult ,* ,* ] # + [RS ,Sm ;smem ,12,* ] s_store_dwordx2\t%1, %A0 + [Sm ,RS ;smem ,12,* ] s_load_dwordx2\t%0, %A1\;s_waitcnt\tlgkmcnt(0) + [v ,v ;vmult,* ,* ] # + [v ,DB ;vmult,* ,* ] # + [Sg ,v ;vmult,* ,* ] # + [v ,Sv ;vmult,* ,* ] # + [v ,^a ;vmult,* ,* ] # + [a ,v ;vmult,* ,* ] # + [a ,a ;vmult,* ,cdna2] # + [v ,RF ;flat ,12,* ] flat_load_dwordx2\t%0, %A1%O1%g1\;s_waitcnt\t0 + [^a ,RF ;flat ,12,cdna2] ^ + [RF ,v ;flat ,12,* ] flat_store_dwordx2\t%A0, %1%O0%g0 + [RF ,a ;flat ,12,cdna2] ^ + [RLRG,v ;ds ,12,* ] ds_write_b64\t%A0, %1%O0\;s_waitcnt\tlgkmcnt(0) + [v ,RLRG;ds ,12,* ] ds_read_b64\t%0, %A1%O1\;s_waitcnt\tlgkmcnt(0) + [v ,RM ;flat ,12,* ] global_load_dwordx2\t%0, %A1%O1%g1\;s_waitcnt\tvmcnt(0) + [^a ,RM ;flat ,12,cdna2] ^ + [RM ,v ;flat ,12,* ] global_store_dwordx2\t%A0, %1%O0%g0 + [RM ,a ;flat ,12,cdna2] ^ } "reload_completed && ((!MEM_P (operands[0]) && !MEM_P (operands[1]) @@ -655,19 +687,26 @@ [(set (match_operand:TI 0 "nonimmediate_operand") (match_operand:TI 1 "general_operand" ))] "" - {@ [cons: =0, 1; attrs: type, delayeduse, length] - [SD,SSB;mult ,* ,* ] # - [RS,Sm ;smem ,* ,12] s_store_dwordx4\t%1, %A0 - [Sm,RS ;smem ,yes,12] s_load_dwordx4\t%0, %A1\;s_waitcnt\tlgkmcnt(0) - [RF,v ;flat ,* ,12] flat_store_dwordx4\t%A0, %1%O0%g0 - [v ,RF ;flat ,* ,12] flat_load_dwordx4\t%0, %A1%O1%g1\;s_waitcnt\t0 - [v ,v ;vmult,* ,* ] # - [v ,Sv ;vmult,* ,* ] # - [SD,v ;vmult,* ,* ] # - [RM,v ;flat ,yes,12] global_store_dwordx4\t%A0, %1%O0%g0 - [v ,RM ;flat ,* ,12] global_load_dwordx4\t%0, %A1%O1%g1\;s_waitcnt\tvmcnt(0) - [RL,v ;ds ,* ,12] ds_write_b128\t%A0, %1%O0\;s_waitcnt\tlgkmcnt(0) - [v ,RL ;ds ,* ,12] ds_read_b128\t%0, %A1%O1\;s_waitcnt\tlgkmcnt(0) + {@ [cons: =0, 1; attrs: type, delayeduse, length, gcn_version] + [SD,SSB;mult ,* ,* ,* ] # + [RS,Sm ;smem ,* ,12,* ] s_store_dwordx4\t%1, %A0 + [Sm,RS ;smem ,yes,12,* ] s_load_dwordx4\t%0, %A1\;s_waitcnt\tlgkmcnt(0) + [RF,v ;flat ,* ,12,* ] flat_store_dwordx4\t%A0, %1%O0%g0 + [RF,a ;flat ,* ,12,cdna2] ^ + [v ,RF ;flat ,* ,12,* ] flat_load_dwordx4\t%0, %A1%O1%g1\;s_waitcnt\t0 + [^a,RF ;flat ,* ,12,cdna2] ^ + [v ,v ;vmult,* ,* ,* ] # + [v ,Sv ;vmult,* ,* ,* ] # + [SD,v ;vmult,* ,* ,* ] # + [RM,v ;flat ,yes,12,* ] global_store_dwordx4\t%A0, %1%O0%g0 + [RM,a ;flat ,yes,12,cdna2] ^ + [v ,RM ;flat ,* ,12,* ] global_load_dwordx4\t%0, %A1%O1%g1\;s_waitcnt\tvmcnt(0) + [^a,RM ;flat ,* ,12,cdna2] ^ + [RL,v ;ds ,* ,12,* ] ds_write_b128\t%A0, %1%O0\;s_waitcnt\tlgkmcnt(0) + [v ,RL ;ds ,* ,12,* ] ds_read_b128\t%0, %A1%O1\;s_waitcnt\tlgkmcnt(0) + [v ,^a ;vmult,* ,* ,* ] # + [a ,v ;vmult,* ,* ,* ] # + [a ,a ;vmult,* ,* ,cdna2] # } "reload_completed && REG_P (operands[0]) diff --git a/gcc/config/gcn/mkoffload.cc b/gcc/config/gcn/mkoffload.cc index 0e224ca8f65c..ee8bde381501 100644 --- a/gcc/config/gcn/mkoffload.cc +++ b/gcc/config/gcn/mkoffload.cc @@ -471,6 +471,26 @@ copy_early_debug_info (const char *infile, const char *outfile) return true; } +/* CDNA2 devices have twice as many VGPRs compared to older devices, + but the AVGPRS are allocated from the same pool. */ + +static int +isa_has_combined_avgprs (int isa) +{ + switch (isa) + { + case EF_AMDGPU_MACH_AMDGCN_GFX803: + case EF_AMDGPU_MACH_AMDGCN_GFX900: + case EF_AMDGPU_MACH_AMDGCN_GFX906: + case EF_AMDGPU_MACH_AMDGCN_GFX908: + case EF_AMDGPU_MACH_AMDGCN_GFX1030: + return false; + case EF_AMDGPU_MACH_AMDGCN_GFX90a: + return true; + } + fatal_error (input_location, "unhandled ISA in isa_has_combined_avgprs"); +} + /* Parse an input assembler file, extract the offload tables etc., and output (1) the assembler code, minus the tables (which can contain problematic relocations), and (2) a C file with the offload tables @@ -496,6 +516,7 @@ process_asm (FILE *in, FILE *out, FILE *cfile) { int sgpr_count; int vgpr_count; + int avgpr_count; char *kernel_name; } regcount = { -1, -1, NULL }; @@ -543,6 +564,12 @@ process_asm (FILE *in, FILE *out, FILE *cfile) gcc_assert (regcount.kernel_name); break; } + else if (sscanf (buf, " .agpr_count: %d\n", + ®count.avgpr_count) == 1) + { + gcc_assert (regcount.kernel_name); + break; + } break; } @@ -685,6 +712,8 @@ process_asm (FILE *in, FILE *out, FILE *cfile) { sgpr_count = regcounts[j].sgpr_count; vgpr_count = regcounts[j].vgpr_count; + if (isa_has_combined_avgprs (elf_arch)) + vgpr_count += regcounts[j].avgpr_count; break; } diff --git a/gcc/config/gcn/predicates.md b/gcc/config/gcn/predicates.md index 5554a06b63b5..d3bf83de1661 100644 --- a/gcc/config/gcn/predicates.md +++ b/gcc/config/gcn/predicates.md @@ -70,6 +70,30 @@ return VGPR_REGNO_P (REGNO (op)) || REGNO (op) >= FIRST_PSEUDO_REGISTER; }) +(define_predicate "gcn_avgpr_register_operand" + (match_operand 0 "register_operand") + { + if (GET_CODE (op) == SUBREG) + op = SUBREG_REG (op); + + if (!REG_P (op)) + return false; + + return AVGPR_REGNO_P (REGNO (op)) || REGNO (op) >= FIRST_PSEUDO_REGISTER; +}) + +(define_predicate "gcn_avgpr_hard_register_operand" + (match_operand 0 "register_operand") + { + if (GET_CODE (op) == SUBREG) + op = SUBREG_REG (op); + + if (!REG_P (op)) + return false; + + return AVGPR_REGNO_P (REGNO (op)); +}) + (define_predicate "gcn_inline_immediate_operand" (match_code "const_int,const_double,const_vector") { diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi index 5d86152e5dd9..e01cdcbe22c8 100644 --- a/gcc/doc/md.texi +++ b/gcc/doc/md.texi @@ -2010,6 +2010,9 @@ Any @code{symbol_ref} or @code{label_ref} @item v VGPR register +@item a +Accelerator VGPR register (CDNA1 onwards) + @item Sg SGPR register diff --git a/gcc/testsuite/gcc.target/gcn/avgpr-mem-double.c b/gcc/testsuite/gcc.target/gcn/avgpr-mem-double.c new file mode 100644 index 000000000000..ce089fb198d2 --- /dev/null +++ b/gcc/testsuite/gcc.target/gcn/avgpr-mem-double.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=gfx90a -O1" } */ +/* { dg-skip-if "incompatible ISA" { *-*-* } { "-march=gfx90[068]" } } */ +/* { dg-final { scan-assembler {load[^\n]*a[0-9[]} } } */ +/* { dg-final { scan-assembler {store[^\n]*a[0-9[]} } } */ + +#define TYPE double + +#include "avgpr-mem-int.c" diff --git a/gcc/testsuite/gcc.target/gcn/avgpr-mem-int.c b/gcc/testsuite/gcc.target/gcn/avgpr-mem-int.c new file mode 100644 index 000000000000..03d814864664 --- /dev/null +++ b/gcc/testsuite/gcc.target/gcn/avgpr-mem-int.c @@ -0,0 +1,116 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=gfx90a -O1" } */ +/* { dg-skip-if "incompatible ISA" { *-*-* } { "-march=gfx90[068]" } } */ +/* { dg-final { scan-assembler {load[^\n]*a[0-9[]} } } */ +/* { dg-final { scan-assembler {store[^\n]*a[0-9[]} } } */ + +#ifndef TYPE +#define TYPE int +#endif + +TYPE a[50]; + +int f() +{ + __asm__ volatile ("; fake -> %0" :: "va"(a[0])); + __asm__ volatile ("; fake -> %0" :: "va"(a[1])); + __asm__ volatile ("; fake -> %0" :: "va"(a[2])); + __asm__ volatile ("; fake -> %0" :: "va"(a[3])); + __asm__ volatile ("; fake -> %0" :: "va"(a[4])); + __asm__ volatile ("; fake -> %0" :: "va"(a[5])); + __asm__ volatile ("; fake -> %0" :: "va"(a[6])); + __asm__ volatile ("; fake -> %0" :: "va"(a[7])); + __asm__ volatile ("; fake -> %0" :: "va"(a[8])); + __asm__ volatile ("; fake -> %0" :: "va"(a[9])); + __asm__ volatile ("; fake -> %0" :: "va"(a[10])); + __asm__ volatile ("; fake -> %0" :: "va"(a[11])); + __asm__ volatile ("; fake -> %0" :: "va"(a[12])); + __asm__ volatile ("; fake -> %0" :: "va"(a[13])); + __asm__ volatile ("; fake -> %0" :: "va"(a[14])); + __asm__ volatile ("; fake -> %0" :: "va"(a[15])); + __asm__ volatile ("; fake -> %0" :: "va"(a[16])); + __asm__ volatile ("; fake -> %0" :: "va"(a[17])); + __asm__ volatile ("; fake -> %0" :: "va"(a[18])); + __asm__ volatile ("; fake -> %0" :: "va"(a[19])); + __asm__ volatile ("; fake -> %0" :: "va"(a[20])); + __asm__ volatile ("; fake -> %0" :: "va"(a[21])); + __asm__ volatile ("; fake -> %0" :: "va"(a[22])); + __asm__ volatile ("; fake -> %0" :: "va"(a[23])); + __asm__ volatile ("; fake -> %0" :: "va"(a[24])); + __asm__ volatile ("; fake -> %0" :: "va"(a[25])); + __asm__ volatile ("; fake -> %0" :: "va"(a[26])); + __asm__ volatile ("; fake -> %0" :: "va"(a[27])); + __asm__ volatile ("; fake -> %0" :: "va"(a[28])); + __asm__ volatile ("; fake -> %0" :: "va"(a[29])); + __asm__ volatile ("; fake -> %0" :: "va"(a[30])); + __asm__ volatile ("; fake -> %0" :: "va"(a[31])); + __asm__ volatile ("; fake -> %0" :: "va"(a[32])); + __asm__ volatile ("; fake -> %0" :: "va"(a[33])); + __asm__ volatile ("; fake -> %0" :: "va"(a[34])); + __asm__ volatile ("; fake -> %0" :: "va"(a[35])); + __asm__ volatile ("; fake -> %0" :: "va"(a[36])); + __asm__ volatile ("; fake -> %0" :: "va"(a[37])); + __asm__ volatile ("; fake -> %0" :: "va"(a[38])); + __asm__ volatile ("; fake -> %0" :: "va"(a[39])); + __asm__ volatile ("; fake -> %0" :: "va"(a[40])); + __asm__ volatile ("; fake -> %0" :: "va"(a[41])); + __asm__ volatile ("; fake -> %0" :: "va"(a[42])); + __asm__ volatile ("; fake -> %0" :: "va"(a[43])); + __asm__ volatile ("; fake -> %0" :: "va"(a[44])); + __asm__ volatile ("; fake -> %0" :: "va"(a[45])); + __asm__ volatile ("; fake -> %0" :: "va"(a[46])); + __asm__ volatile ("; fake -> %0" :: "va"(a[47])); + __asm__ volatile ("; fake -> %0" :: "va"(a[48])); + __asm__ volatile ("; fake -> %0" :: "va"(a[49])); + + __asm__ volatile ("; fake <- %0" : "+va"(a[0])); + __asm__ volatile ("; fake <- %0" : "+va"(a[1])); + __asm__ volatile ("; fake <- %0" : "+va"(a[2])); + __asm__ volatile ("; fake <- %0" : "+va"(a[3])); + __asm__ volatile ("; fake <- %0" : "+va"(a[4])); + __asm__ volatile ("; fake <- %0" : "+va"(a[5])); + __asm__ volatile ("; fake <- %0" : "+va"(a[6])); + __asm__ volatile ("; fake <- %0" : "+va"(a[7])); + __asm__ volatile ("; fake <- %0" : "+va"(a[8])); + __asm__ volatile ("; fake <- %0" : "+va"(a[9])); + __asm__ volatile ("; fake <- %0" : "+va"(a[10])); + __asm__ volatile ("; fake <- %0" : "+va"(a[11])); + __asm__ volatile ("; fake <- %0" : "+va"(a[12])); + __asm__ volatile ("; fake <- %0" : "+va"(a[13])); + __asm__ volatile ("; fake <- %0" : "+va"(a[14])); + __asm__ volatile ("; fake <- %0" : "+va"(a[15])); + __asm__ volatile ("; fake <- %0" : "+va"(a[16])); + __asm__ volatile ("; fake <- %0" : "+va"(a[17])); + __asm__ volatile ("; fake <- %0" : "+va"(a[18])); + __asm__ volatile ("; fake <- %0" : "+va"(a[19])); + __asm__ volatile ("; fake <- %0" : "+va"(a[20])); + __asm__ volatile ("; fake <- %0" : "+va"(a[21])); + __asm__ volatile ("; fake <- %0" : "+va"(a[22])); + __asm__ volatile ("; fake <- %0" : "+va"(a[23])); + __asm__ volatile ("; fake <- %0" : "+va"(a[24])); + __asm__ volatile ("; fake <- %0" : "+va"(a[25])); + __asm__ volatile ("; fake <- %0" : "+va"(a[26])); + __asm__ volatile ("; fake <- %0" : "+va"(a[27])); + __asm__ volatile ("; fake <- %0" : "+va"(a[28])); + __asm__ volatile ("; fake <- %0" : "+va"(a[29])); + __asm__ volatile ("; fake <- %0" : "+va"(a[30])); + __asm__ volatile ("; fake <- %0" : "+va"(a[31])); + __asm__ volatile ("; fake <- %0" : "+va"(a[32])); + __asm__ volatile ("; fake <- %0" : "+va"(a[33])); + __asm__ volatile ("; fake <- %0" : "+va"(a[34])); + __asm__ volatile ("; fake <- %0" : "+va"(a[35])); + __asm__ volatile ("; fake <- %0" : "+va"(a[36])); + __asm__ volatile ("; fake <- %0" : "+va"(a[37])); + __asm__ volatile ("; fake <- %0" : "+va"(a[38])); + __asm__ volatile ("; fake <- %0" : "+va"(a[39])); + __asm__ volatile ("; fake <- %0" : "+va"(a[40])); + __asm__ volatile ("; fake <- %0" : "+va"(a[41])); + __asm__ volatile ("; fake <- %0" : "+va"(a[42])); + __asm__ volatile ("; fake <- %0" : "+va"(a[43])); + __asm__ volatile ("; fake <- %0" : "+va"(a[44])); + __asm__ volatile ("; fake <- %0" : "+va"(a[45])); + __asm__ volatile ("; fake <- %0" : "+va"(a[46])); + __asm__ volatile ("; fake <- %0" : "+va"(a[47])); + __asm__ volatile ("; fake <- %0" : "+va"(a[48])); + __asm__ volatile ("; fake <- %0" : "+va"(a[49])); +} diff --git a/gcc/testsuite/gcc.target/gcn/avgpr-mem-long.c b/gcc/testsuite/gcc.target/gcn/avgpr-mem-long.c new file mode 100644 index 000000000000..dcfb483f3f3c --- /dev/null +++ b/gcc/testsuite/gcc.target/gcn/avgpr-mem-long.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=gfx90a -O1" } */ +/* { dg-skip-if "incompatible ISA" { *-*-* } { "-march=gfx90[068]" } } */ +/* { dg-final { scan-assembler {load[^\n]*a[0-9[]} } } */ +/* { dg-final { scan-assembler {store[^\n]*a[0-9[]} } } */ + +#define TYPE long + +#include "avgpr-mem-int.c" diff --git a/gcc/testsuite/gcc.target/gcn/avgpr-mem-short.c b/gcc/testsuite/gcc.target/gcn/avgpr-mem-short.c new file mode 100644 index 000000000000..91cc14ef181b --- /dev/null +++ b/gcc/testsuite/gcc.target/gcn/avgpr-mem-short.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=gfx90a -O1" } */ +/* { dg-skip-if "incompatible ISA" { *-*-* } { "-march=gfx90[068]" } } */ +/* { dg-final { scan-assembler {load[^\n]*a[0-9[]} } } */ +/* { dg-final { scan-assembler {store[^\n]*a[0-9[]} } } */ + +#define TYPE short + +#include "avgpr-mem-int.c" diff --git a/gcc/testsuite/gcc.target/gcn/avgpr-spill-double.c b/gcc/testsuite/gcc.target/gcn/avgpr-spill-double.c new file mode 100644 index 000000000000..3e9996d3d102 --- /dev/null +++ b/gcc/testsuite/gcc.target/gcn/avgpr-spill-double.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=gfx908 -O1" } */ +/* { dg-skip-if "incompatible ISA" { *-*-* } { "-march=gfx90[06]" } } */ +/* { dg-final { scan-assembler "accvgpr" } } */ + +#define TYPE double + +#include "avgpr-spill-int.c" diff --git a/gcc/testsuite/gcc.target/gcn/avgpr-spill-int.c b/gcc/testsuite/gcc.target/gcn/avgpr-spill-int.c new file mode 100644 index 000000000000..0b64c8ec176c --- /dev/null +++ b/gcc/testsuite/gcc.target/gcn/avgpr-spill-int.c @@ -0,0 +1,115 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=gfx908 -O1" } */ +/* { dg-skip-if "incompatible ISA" { *-*-* } { "-march=gfx90[06]" } } */ +/* { dg-final { scan-assembler "accvgpr" } } */ + +#ifndef TYPE +#define TYPE int +#endif + +TYPE a[50]; + +int f() +{ + __asm__ volatile ("; fake <- %0" : "=v"(a[0])); + __asm__ volatile ("; fake <- %0" : "=v"(a[1])); + __asm__ volatile ("; fake <- %0" : "=v"(a[2])); + __asm__ volatile ("; fake <- %0" : "=v"(a[3])); + __asm__ volatile ("; fake <- %0" : "=v"(a[4])); + __asm__ volatile ("; fake <- %0" : "=v"(a[5])); + __asm__ volatile ("; fake <- %0" : "=v"(a[6])); + __asm__ volatile ("; fake <- %0" : "=v"(a[7])); + __asm__ volatile ("; fake <- %0" : "=v"(a[8])); + __asm__ volatile ("; fake <- %0" : "=v"(a[9])); + __asm__ volatile ("; fake <- %0" : "=v"(a[10])); + __asm__ volatile ("; fake <- %0" : "=v"(a[11])); + __asm__ volatile ("; fake <- %0" : "=v"(a[12])); + __asm__ volatile ("; fake <- %0" : "=v"(a[13])); + __asm__ volatile ("; fake <- %0" : "=v"(a[14])); + __asm__ volatile ("; fake <- %0" : "=v"(a[15])); + __asm__ volatile ("; fake <- %0" : "=v"(a[16])); + __asm__ volatile ("; fake <- %0" : "=v"(a[17])); + __asm__ volatile ("; fake <- %0" : "=v"(a[18])); + __asm__ volatile ("; fake <- %0" : "=v"(a[19])); + __asm__ volatile ("; fake <- %0" : "=v"(a[20])); + __asm__ volatile ("; fake <- %0" : "=v"(a[21])); + __asm__ volatile ("; fake <- %0" : "=v"(a[22])); + __asm__ volatile ("; fake <- %0" : "=v"(a[23])); + __asm__ volatile ("; fake <- %0" : "=v"(a[24])); + __asm__ volatile ("; fake <- %0" : "=v"(a[25])); + __asm__ volatile ("; fake <- %0" : "=v"(a[26])); + __asm__ volatile ("; fake <- %0" : "=v"(a[27])); + __asm__ volatile ("; fake <- %0" : "=v"(a[28])); + __asm__ volatile ("; fake <- %0" : "=v"(a[29])); + __asm__ volatile ("; fake <- %0" : "=v"(a[30])); + __asm__ volatile ("; fake <- %0" : "=v"(a[31])); + __asm__ volatile ("; fake <- %0" : "=v"(a[32])); + __asm__ volatile ("; fake <- %0" : "=v"(a[33])); + __asm__ volatile ("; fake <- %0" : "=v"(a[34])); + __asm__ volatile ("; fake <- %0" : "=v"(a[35])); + __asm__ volatile ("; fake <- %0" : "=v"(a[36])); + __asm__ volatile ("; fake <- %0" : "=v"(a[37])); + __asm__ volatile ("; fake <- %0" : "=v"(a[38])); + __asm__ volatile ("; fake <- %0" : "=v"(a[39])); + __asm__ volatile ("; fake <- %0" : "=v"(a[40])); + __asm__ volatile ("; fake <- %0" : "=v"(a[41])); + __asm__ volatile ("; fake <- %0" : "=v"(a[42])); + __asm__ volatile ("; fake <- %0" : "=v"(a[43])); + __asm__ volatile ("; fake <- %0" : "=v"(a[44])); + __asm__ volatile ("; fake <- %0" : "=v"(a[45])); + __asm__ volatile ("; fake <- %0" : "=v"(a[46])); + __asm__ volatile ("; fake <- %0" : "=v"(a[47])); + __asm__ volatile ("; fake <- %0" : "=v"(a[48])); + __asm__ volatile ("; fake <- %0" : "=v"(a[49])); + + __asm__ volatile ("; fake -> %0" :: "v"(a[0])); + __asm__ volatile ("; fake -> %0" :: "v"(a[1])); + __asm__ volatile ("; fake -> %0" :: "v"(a[2])); + __asm__ volatile ("; fake -> %0" :: "v"(a[3])); + __asm__ volatile ("; fake -> %0" :: "v"(a[4])); + __asm__ volatile ("; fake -> %0" :: "v"(a[5])); + __asm__ volatile ("; fake -> %0" :: "v"(a[6])); + __asm__ volatile ("; fake -> %0" :: "v"(a[7])); + __asm__ volatile ("; fake -> %0" :: "v"(a[8])); + __asm__ volatile ("; fake -> %0" :: "v"(a[9])); + __asm__ volatile ("; fake -> %0" :: "v"(a[10])); + __asm__ volatile ("; fake -> %0" :: "v"(a[11])); + __asm__ volatile ("; fake -> %0" :: "v"(a[12])); + __asm__ volatile ("; fake -> %0" :: "v"(a[13])); + __asm__ volatile ("; fake -> %0" :: "v"(a[14])); + __asm__ volatile ("; fake -> %0" :: "v"(a[15])); + __asm__ volatile ("; fake -> %0" :: "v"(a[16])); + __asm__ volatile ("; fake -> %0" :: "v"(a[17])); + __asm__ volatile ("; fake -> %0" :: "v"(a[18])); + __asm__ volatile ("; fake -> %0" :: "v"(a[19])); + __asm__ volatile ("; fake -> %0" :: "v"(a[20])); + __asm__ volatile ("; fake -> %0" :: "v"(a[21])); + __asm__ volatile ("; fake -> %0" :: "v"(a[22])); + __asm__ volatile ("; fake -> %0" :: "v"(a[23])); + __asm__ volatile ("; fake -> %0" :: "v"(a[24])); + __asm__ volatile ("; fake -> %0" :: "v"(a[25])); + __asm__ volatile ("; fake -> %0" :: "v"(a[26])); + __asm__ volatile ("; fake -> %0" :: "v"(a[27])); + __asm__ volatile ("; fake -> %0" :: "v"(a[28])); + __asm__ volatile ("; fake -> %0" :: "v"(a[29])); + __asm__ volatile ("; fake -> %0" :: "v"(a[30])); + __asm__ volatile ("; fake -> %0" :: "v"(a[31])); + __asm__ volatile ("; fake -> %0" :: "v"(a[32])); + __asm__ volatile ("; fake -> %0" :: "v"(a[33])); + __asm__ volatile ("; fake -> %0" :: "v"(a[34])); + __asm__ volatile ("; fake -> %0" :: "v"(a[35])); + __asm__ volatile ("; fake -> %0" :: "v"(a[36])); + __asm__ volatile ("; fake -> %0" :: "v"(a[37])); + __asm__ volatile ("; fake -> %0" :: "v"(a[38])); + __asm__ volatile ("; fake -> %0" :: "v"(a[39])); + __asm__ volatile ("; fake -> %0" :: "v"(a[40])); + __asm__ volatile ("; fake -> %0" :: "v"(a[41])); + __asm__ volatile ("; fake -> %0" :: "v"(a[42])); + __asm__ volatile ("; fake -> %0" :: "v"(a[43])); + __asm__ volatile ("; fake -> %0" :: "v"(a[44])); + __asm__ volatile ("; fake -> %0" :: "v"(a[45])); + __asm__ volatile ("; fake -> %0" :: "v"(a[46])); + __asm__ volatile ("; fake -> %0" :: "v"(a[47])); + __asm__ volatile ("; fake -> %0" :: "v"(a[48])); + __asm__ volatile ("; fake -> %0" :: "v"(a[49])); +} diff --git a/gcc/testsuite/gcc.target/gcn/avgpr-spill-long.c b/gcc/testsuite/gcc.target/gcn/avgpr-spill-long.c new file mode 100644 index 000000000000..516890de14c7 --- /dev/null +++ b/gcc/testsuite/gcc.target/gcn/avgpr-spill-long.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=gfx908 -O1" } */ +/* { dg-skip-if "incompatible ISA" { *-*-* } { "-march=gfx90[06]" } } */ +/* { dg-final { scan-assembler "accvgpr" } } */ + +#define TYPE long + +#include "avgpr-spill-int.c" diff --git a/gcc/testsuite/gcc.target/gcn/avgpr-spill-short.c b/gcc/testsuite/gcc.target/gcn/avgpr-spill-short.c new file mode 100644 index 000000000000..1e556840e0f5 --- /dev/null +++ b/gcc/testsuite/gcc.target/gcn/avgpr-spill-short.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=gfx908 -O1" } */ +/* { dg-skip-if "incompatible ISA" { *-*-* } { "-march=gfx90[06]" } } */ +/* { dg-final { scan-assembler "accvgpr" } } */ + +#define TYPE short + +#include "avgpr-spill-int.c" diff --git a/libgomp/plugin/plugin-gcn.c b/libgomp/plugin/plugin-gcn.c index 7e7e2d6edfe5..8aabbd998816 100644 --- a/libgomp/plugin/plugin-gcn.c +++ b/libgomp/plugin/plugin-gcn.c @@ -1702,6 +1702,25 @@ isa_code(const char *isa) { return -1; } +/* CDNA2 devices have twice as many VGPRs compared to older devices. */ + +static int +max_isa_vgprs (int isa) +{ + switch (isa) + { + case EF_AMDGPU_MACH_AMDGCN_GFX803: + case EF_AMDGPU_MACH_AMDGCN_GFX900: + case EF_AMDGPU_MACH_AMDGCN_GFX906: + case EF_AMDGPU_MACH_AMDGCN_GFX908: + case EF_AMDGPU_MACH_AMDGCN_GFX1030: + return 256; + case EF_AMDGPU_MACH_AMDGCN_GFX90a: + return 512; + } + GOMP_PLUGIN_fatal ("unhandled ISA in max_isa_vgprs"); +} + /* }}} */ /* {{{ Run */ @@ -2143,6 +2162,7 @@ run_kernel (struct kernel_info *kernel, void *vars, struct GOMP_kernel_launch_attributes *kla, struct goacc_asyncqueue *aq, bool module_locked) { + struct agent_info *agent = kernel->agent; GCN_DEBUG ("SGPRs: %d, VGPRs: %d\n", kernel->description->sgpr_count, kernel->description->vpgr_count); @@ -2150,8 +2170,9 @@ run_kernel (struct kernel_info *kernel, void *vars, VGPRs available to run the kernels together. */ if (kla->ndim == 3 && kernel->description->vpgr_count > 0) { + int max_vgprs = max_isa_vgprs (agent->device_isa); int granulated_vgprs = (kernel->description->vpgr_count + 3) & ~3; - int max_threads = (256 / granulated_vgprs) * 4; + int max_threads = (max_vgprs / granulated_vgprs) * 4; if (kla->gdims[2] > max_threads) { GCN_WARNING ("Too many VGPRs required to support %d threads/workers" @@ -2188,7 +2209,6 @@ run_kernel (struct kernel_info *kernel, void *vars, DEBUG_PRINT ("]\n"); DEBUG_FLUSH (); - struct agent_info *agent = kernel->agent; if (!module_locked && pthread_rwlock_rdlock (&agent->module_rwlock)) GOMP_PLUGIN_fatal ("Unable to read-lock a GCN agent rwlock"); From 61c45c055a5ccfc59463c21ab057dece822d973c Mon Sep 17 00:00:00 2001 From: Thomas Schwinge Date: Mon, 4 Sep 2023 23:06:27 +0200 Subject: [PATCH 073/169] nvptx: Extend 'brev' test cases In order to observe effects of a later patch, extend the 'brev' test cases added in commit c09471fbc7588db2480f036aa56a2403d3c03ae5 "nvptx: Add suppport for __builtin_nvptx_brev instrinsic". gcc/testsuite/ * gcc.target/nvptx/brev-1.c: Extend. * gcc.target/nvptx/brev-2.c: Rename to... * gcc.target/nvptx/brev-2-O2.c: ... this, and extend. Copy to... * gcc.target/nvptx/brev-2-O0.c: ... this, and adapt for '-O0'. * gcc.target/nvptx/brevll-1.c: Extend. * gcc.target/nvptx/brevll-2.c: Rename to... * gcc.target/nvptx/brevll-2-O2.c: ... this, and extend. Copy to... * gcc.target/nvptx/brevll-2-O0.c: ... this, and adapt for '-O0'. --- gcc/testsuite/gcc.target/nvptx/brev-1.c | 12 +- gcc/testsuite/gcc.target/nvptx/brev-2-O0.c | 129 ++++++++++++ .../nvptx/{brev-2.c => brev-2-O2.c} | 27 +++ gcc/testsuite/gcc.target/nvptx/brevll-1.c | 12 +- gcc/testsuite/gcc.target/nvptx/brevll-2-O0.c | 189 ++++++++++++++++++ .../nvptx/{brevll-2.c => brevll-2-O2.c} | 27 +++ 6 files changed, 392 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.target/nvptx/brev-2-O0.c rename gcc/testsuite/gcc.target/nvptx/{brev-2.c => brev-2-O2.c} (80%) create mode 100644 gcc/testsuite/gcc.target/nvptx/brevll-2-O0.c rename gcc/testsuite/gcc.target/nvptx/{brevll-2.c => brevll-2-O2.c} (90%) diff --git a/gcc/testsuite/gcc.target/nvptx/brev-1.c b/gcc/testsuite/gcc.target/nvptx/brev-1.c index fbb4fff1e59b..af875dd4dccd 100644 --- a/gcc/testsuite/gcc.target/nvptx/brev-1.c +++ b/gcc/testsuite/gcc.target/nvptx/brev-1.c @@ -1,8 +1,16 @@ /* { dg-do compile } */ /* { dg-options "-O2" } */ +/* { dg-final { check-function-bodies {**} {} } } */ + unsigned int foo(unsigned int x) { return __builtin_nvptx_brev(x); } - -/* { dg-final { scan-assembler "brev.b32" } } */ +/* +** foo: +** ... +** mov\.u32 (%r[0-9]+), %ar0; +** brev\.b32 %value, \1; +** st\.param\.u32 \[%value_out\], %value; +** ret; +*/ diff --git a/gcc/testsuite/gcc.target/nvptx/brev-2-O0.c b/gcc/testsuite/gcc.target/nvptx/brev-2-O0.c new file mode 100644 index 000000000000..ca011ebf472c --- /dev/null +++ b/gcc/testsuite/gcc.target/nvptx/brev-2-O0.c @@ -0,0 +1,129 @@ +/* { dg-do run } */ +/* { dg-options "-O0" } */ +/* { dg-additional-options -save-temps } */ +/* { dg-final { check-function-bodies {**} {} } } */ + +inline __attribute__((always_inline)) +unsigned int bitreverse32(unsigned int x) +{ + return __builtin_nvptx_brev(x); +} + +int main(void) +{ + if (bitreverse32(0x00000000) != 0x00000000) + __builtin_abort(); + if (bitreverse32(0xffffffff) != 0xffffffff) + __builtin_abort(); + + if (bitreverse32(0x00000001) != 0x80000000) + __builtin_abort(); + if (bitreverse32(0x00000002) != 0x40000000) + __builtin_abort(); + if (bitreverse32(0x00000004) != 0x20000000) + __builtin_abort(); + if (bitreverse32(0x00000008) != 0x10000000) + __builtin_abort(); + if (bitreverse32(0x00000010) != 0x08000000) + __builtin_abort(); + if (bitreverse32(0x00000020) != 0x04000000) + __builtin_abort(); + if (bitreverse32(0x00000040) != 0x02000000) + __builtin_abort(); + if (bitreverse32(0x00000080) != 0x01000000) + __builtin_abort(); + if (bitreverse32(0x00000100) != 0x00800000) + __builtin_abort(); + if (bitreverse32(0x00000200) != 0x00400000) + __builtin_abort(); + if (bitreverse32(0x00000400) != 0x00200000) + __builtin_abort(); + if (bitreverse32(0x00000800) != 0x00100000) + __builtin_abort(); + if (bitreverse32(0x00001000) != 0x00080000) + __builtin_abort(); + if (bitreverse32(0x00002000) != 0x00040000) + __builtin_abort(); + if (bitreverse32(0x00004000) != 0x00020000) + __builtin_abort(); + if (bitreverse32(0x00008000) != 0x00010000) + __builtin_abort(); + if (bitreverse32(0x00010000) != 0x00008000) + __builtin_abort(); + if (bitreverse32(0x00020000) != 0x00004000) + __builtin_abort(); + if (bitreverse32(0x00040000) != 0x00002000) + __builtin_abort(); + if (bitreverse32(0x00080000) != 0x00001000) + __builtin_abort(); + if (bitreverse32(0x00100000) != 0x00000800) + __builtin_abort(); + if (bitreverse32(0x00200000) != 0x00000400) + __builtin_abort(); + if (bitreverse32(0x00400000) != 0x00000200) + __builtin_abort(); + if (bitreverse32(0x00800000) != 0x00000100) + __builtin_abort(); + if (bitreverse32(0x01000000) != 0x00000080) + __builtin_abort(); + if (bitreverse32(0x02000000) != 0x00000040) + __builtin_abort(); + if (bitreverse32(0x04000000) != 0x00000020) + __builtin_abort(); + if (bitreverse32(0x08000000) != 0x00000010) + __builtin_abort(); + if (bitreverse32(0x10000000) != 0x00000008) + __builtin_abort(); + if (bitreverse32(0x20000000) != 0x00000004) + __builtin_abort(); + if (bitreverse32(0x40000000) != 0x00000002) + __builtin_abort(); + if (bitreverse32(0x80000000) != 0x00000001) + __builtin_abort(); + + if (bitreverse32(0x01234567) != 0xe6a2c480) + __builtin_abort(); + if (bitreverse32(0xe6a2c480) != 0x01234567) + __builtin_abort(); + if (bitreverse32(0xdeadbeef) != 0xf77db57b) + __builtin_abort(); + if (bitreverse32(0xf77db57b) != 0xdeadbeef) + __builtin_abort(); + if (bitreverse32(0xcafebabe) != 0x7d5d7f53) + __builtin_abort(); + if (bitreverse32(0x7d5d7f53) != 0xcafebabe) + __builtin_abort(); + + return 0; +} +/* +** main: +** ... +** mov\.u32 (%r[0-9]+), 0; +** st\.u32 (\[%frame[+0-9]*\]), \1; +** ld\.u32 (%r[0-9]+), \2; +** brev\.b32 (%r[0-9]+), \3; +** setp\.[^.]+\.u32 %r[0-9]+, \4, 0; +** ... +** mov\.u32 (%r[0-9]+), -1; +** st\.u32 (\[%frame[+0-9]*\]), \5; +** ld\.u32 (%r[0-9]+), \6; +** brev\.b32 (%r[0-9]+), \7; +** setp\.[^.]+\.u32 %r[0-9]+, \8, -1; +** ... +** mov\.u32 (%r[0-9]+), 1; +** st\.u32 (\[%frame[+0-9]*\]), \9; +** ld\.u32 (%r[0-9]+), \10; +** brev\.b32 (%r[0-9]+), \11; +** setp\.[^.]+\.u32 %r[0-9]+, \12, -2147483648; +** ... +** mov\.u32 (%r[0-9]+), 2; +** st\.u32 (\[%frame[+0-9]*\]), \13; +** ld\.u32 (%r[0-9]+), \14; +** brev\.b32 (%r[0-9]+), \15; +** setp\.[^.]+\.u32 %r[0-9]+, \16, 1073741824; +** ... +*/ + +/* { dg-final { scan-assembler-times {\tbrev\.b32\t} 40 } } */ +/* { dg-final { scan-assembler {\mabort\M} } } */ diff --git a/gcc/testsuite/gcc.target/nvptx/brev-2.c b/gcc/testsuite/gcc.target/nvptx/brev-2-O2.c similarity index 80% rename from gcc/testsuite/gcc.target/nvptx/brev-2.c rename to gcc/testsuite/gcc.target/nvptx/brev-2-O2.c index 9d0defe80bb6..e35052208d0b 100644 --- a/gcc/testsuite/gcc.target/nvptx/brev-2.c +++ b/gcc/testsuite/gcc.target/nvptx/brev-2-O2.c @@ -1,5 +1,9 @@ /* { dg-do run } */ /* { dg-options "-O2" } */ +/* { dg-additional-options -save-temps } */ +/* { dg-final { check-function-bodies {**} {} } } */ + +inline __attribute__((always_inline)) unsigned int bitreverse32(unsigned int x) { return __builtin_nvptx_brev(x); @@ -89,6 +93,29 @@ int main(void) __builtin_abort(); if (bitreverse32(0x7d5d7f53) != 0xcafebabe) __builtin_abort(); + return 0; } +/* +** main: +** ... +** mov\.u32 (%r[0-9]+), 0; +** brev\.b32 (%r[0-9]+), \1; +** setp\.[^.]+\.u32 %r[0-9]+, \2, 0; +** ... +** mov\.u32 (%r[0-9]+), -1; +** brev\.b32 (%r[0-9]+), \3; +** setp\.[^.]+\.u32 %r[0-9]+, \4, -1; +** ... +** mov\.u32 (%r[0-9]+), 1; +** brev\.b32 (%r[0-9]+), \5; +** setp\.[^.]+\.u32 %r[0-9]+, \6, -2147483648; +** ... +** mov\.u32 (%r[0-9]+), 2; +** brev\.b32 (%r[0-9]+), \7; +** setp\.[^.]+\.u32 %r[0-9]+, \8, 1073741824; +** ... +*/ +/* { dg-final { scan-assembler-times {\tbrev\.b32\t} 40 } } */ +/* { dg-final { scan-assembler {\mabort\M} } } */ diff --git a/gcc/testsuite/gcc.target/nvptx/brevll-1.c b/gcc/testsuite/gcc.target/nvptx/brevll-1.c index 7009d5f5f8ca..0b03fee92926 100644 --- a/gcc/testsuite/gcc.target/nvptx/brevll-1.c +++ b/gcc/testsuite/gcc.target/nvptx/brevll-1.c @@ -1,8 +1,16 @@ /* { dg-do compile } */ /* { dg-options "-O2" } */ +/* { dg-final { check-function-bodies {**} {} } } */ + unsigned long foo(unsigned long x) { return __builtin_nvptx_brevll(x); } - -/* { dg-final { scan-assembler "brev.b64" } } */ +/* +** foo: +** ... +** mov\.u64 (%r[0-9]+), %ar0; +** brev\.b64 %value, \1; +** st\.param\.u64 \[%value_out\], %value; +** ret; +*/ diff --git a/gcc/testsuite/gcc.target/nvptx/brevll-2-O0.c b/gcc/testsuite/gcc.target/nvptx/brevll-2-O0.c new file mode 100644 index 000000000000..32bbfbf7ad6d --- /dev/null +++ b/gcc/testsuite/gcc.target/nvptx/brevll-2-O0.c @@ -0,0 +1,189 @@ +/* { dg-do run } */ +/* { dg-options "-O0" } */ +/* { dg-additional-options -save-temps } */ +/* { dg-final { check-function-bodies {**} {} } } */ + +inline __attribute__((always_inline)) +unsigned long long bitreverse64(unsigned long long x) +{ + return __builtin_nvptx_brevll(x); +} + +int main(void) +{ + if (bitreverse64(0x0000000000000000ll) != 0x0000000000000000ll) + __builtin_abort(); + if (bitreverse64(0xffffffffffffffffll) != 0xffffffffffffffffll) + __builtin_abort(); + + if (bitreverse64(0x0000000000000001ll) != 0x8000000000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000000002ll) != 0x4000000000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000000004ll) != 0x2000000000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000000008ll) != 0x1000000000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000000010ll) != 0x0800000000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000000020ll) != 0x0400000000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000000040ll) != 0x0200000000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000000080ll) != 0x0100000000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000000100ll) != 0x0080000000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000000200ll) != 0x0040000000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000000400ll) != 0x0020000000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000000800ll) != 0x0010000000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000001000ll) != 0x0008000000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000002000ll) != 0x0004000000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000004000ll) != 0x0002000000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000008000ll) != 0x0001000000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000010000ll) != 0x0000800000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000020000ll) != 0x0000400000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000040000ll) != 0x0000200000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000080000ll) != 0x0000100000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000100000ll) != 0x0000080000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000200000ll) != 0x0000040000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000400000ll) != 0x0000020000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000000800000ll) != 0x0000010000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000001000000ll) != 0x0000008000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000002000000ll) != 0x0000004000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000004000000ll) != 0x0000002000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000008000000ll) != 0x0000001000000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000010000000ll) != 0x0000000800000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000020000000ll) != 0x0000000400000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000040000000ll) != 0x0000000200000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000080000000ll) != 0x0000000100000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000100000000ll) != 0x0000000080000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000200000000ll) != 0x0000000040000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000400000000ll) != 0x0000000020000000ll) + __builtin_abort(); + if (bitreverse64(0x0000000800000000ll) != 0x0000000010000000ll) + __builtin_abort(); + if (bitreverse64(0x0000001000000000ll) != 0x0000000008000000ll) + __builtin_abort(); + if (bitreverse64(0x0000002000000000ll) != 0x0000000004000000ll) + __builtin_abort(); + if (bitreverse64(0x0000004000000000ll) != 0x0000000002000000ll) + __builtin_abort(); + if (bitreverse64(0x0000008000000000ll) != 0x0000000001000000ll) + __builtin_abort(); + if (bitreverse64(0x0000010000000000ll) != 0x0000000000800000ll) + __builtin_abort(); + if (bitreverse64(0x0000020000000000ll) != 0x0000000000400000ll) + __builtin_abort(); + if (bitreverse64(0x0000040000000000ll) != 0x0000000000200000ll) + __builtin_abort(); + if (bitreverse64(0x0000080000000000ll) != 0x0000000000100000ll) + __builtin_abort(); + if (bitreverse64(0x0000100000000000ll) != 0x0000000000080000ll) + __builtin_abort(); + if (bitreverse64(0x0000200000000000ll) != 0x0000000000040000ll) + __builtin_abort(); + if (bitreverse64(0x0000400000000000ll) != 0x0000000000020000ll) + __builtin_abort(); + if (bitreverse64(0x0000800000000000ll) != 0x0000000000010000ll) + __builtin_abort(); + if (bitreverse64(0x0001000000000000ll) != 0x0000000000008000ll) + __builtin_abort(); + if (bitreverse64(0x0002000000000000ll) != 0x0000000000004000ll) + __builtin_abort(); + if (bitreverse64(0x0004000000000000ll) != 0x0000000000002000ll) + __builtin_abort(); + if (bitreverse64(0x0008000000000000ll) != 0x0000000000001000ll) + __builtin_abort(); + if (bitreverse64(0x0010000000000000ll) != 0x0000000000000800ll) + __builtin_abort(); + if (bitreverse64(0x0020000000000000ll) != 0x0000000000000400ll) + __builtin_abort(); + if (bitreverse64(0x0040000000000000ll) != 0x0000000000000200ll) + __builtin_abort(); + if (bitreverse64(0x0080000000000000ll) != 0x0000000000000100ll) + __builtin_abort(); + if (bitreverse64(0x0100000000000000ll) != 0x0000000000000080ll) + __builtin_abort(); + if (bitreverse64(0x0200000000000000ll) != 0x0000000000000040ll) + __builtin_abort(); + if (bitreverse64(0x0400000000000000ll) != 0x0000000000000020ll) + __builtin_abort(); + if (bitreverse64(0x0800000000000000ll) != 0x0000000000000010ll) + __builtin_abort(); + if (bitreverse64(0x1000000000000000ll) != 0x0000000000000008ll) + __builtin_abort(); + if (bitreverse64(0x2000000000000000ll) != 0x0000000000000004ll) + __builtin_abort(); + if (bitreverse64(0x4000000000000000ll) != 0x0000000000000002ll) + __builtin_abort(); + if (bitreverse64(0x8000000000000000ll) != 0x0000000000000001ll) + __builtin_abort(); + + if (bitreverse64(0x0123456789abcdefll) != 0xf7b3d591e6a2c480ll) + __builtin_abort(); + if (bitreverse64(0xf7b3d591e6a2c480ll) != 0x0123456789abcdefll) + __builtin_abort(); + if (bitreverse64(0xdeadbeefcafebabell) != 0x7d5d7f53f77db57bll) + __builtin_abort(); + if (bitreverse64(0x7d5d7f53f77db57bll) != 0xdeadbeefcafebabell) + __builtin_abort(); + + return 0; +} +/* +** main: +** ... +** mov\.u64 (%r[0-9]+), 0; +** st\.u64 (\[%frame[+0-9]*\]), \1; +** ld\.u64 (%r[0-9]+), \2; +** brev\.b64 (%r[0-9]+), \3; +** setp\.[^.]+\.u64 %r[0-9]+, \4, 0; +** ... +** mov\.u64 (%r[0-9]+), -1; +** st\.u64 (\[%frame[+0-9]*\]), \5; +** ld\.u64 (%r[0-9]+), \6; +** brev\.b64 (%r[0-9]+), \7; +** setp\.[^.]+\.u64 %r[0-9]+, \8, -1; +** ... +** mov\.u64 (%r[0-9]+), 1; +** st\.u64 (\[%frame[+0-9]*\]), \9; +** ld\.u64 (%r[0-9]+), \10; +** brev\.b64 (%r[0-9]+), \11; +** setp\.[^.]+\.u64 %r[0-9]+, \12, -9223372036854775808; +** ... +** mov\.u64 (%r[0-9]+), 2; +** st\.u64 (\[%frame[+0-9]*\]), \13; +** ld\.u64 (%r[0-9]+), \14; +** brev\.b64 (%r[0-9]+), \15; +** setp\.[^.]+\.u64 %r[0-9]+, \16, 4611686018427387904; +** ... +*/ + +/* { dg-final { scan-assembler-times {\tbrev\.b64\t} 70 } } */ +/* { dg-final { scan-assembler {\mabort\M} } } */ diff --git a/gcc/testsuite/gcc.target/nvptx/brevll-2.c b/gcc/testsuite/gcc.target/nvptx/brevll-2-O2.c similarity index 90% rename from gcc/testsuite/gcc.target/nvptx/brevll-2.c rename to gcc/testsuite/gcc.target/nvptx/brevll-2-O2.c index 56054b1e92a0..cbfda1b9601d 100644 --- a/gcc/testsuite/gcc.target/nvptx/brevll-2.c +++ b/gcc/testsuite/gcc.target/nvptx/brevll-2-O2.c @@ -1,5 +1,9 @@ /* { dg-do run } */ /* { dg-options "-O2" } */ +/* { dg-additional-options -save-temps } */ +/* { dg-final { check-function-bodies {**} {} } } */ + +inline __attribute__((always_inline)) unsigned long long bitreverse64(unsigned long long x) { return __builtin_nvptx_brevll(x); @@ -149,6 +153,29 @@ int main(void) __builtin_abort(); if (bitreverse64(0x7d5d7f53f77db57bll) != 0xdeadbeefcafebabell) __builtin_abort(); + return 0; } +/* +** main: +** ... +** mov\.u64 (%r[0-9]+), 0; +** brev\.b64 (%r[0-9]+), \1; +** setp\.[^.]+\.u64 %r[0-9]+, \2, 0; +** ... +** mov\.u64 (%r[0-9]+), -1; +** brev\.b64 (%r[0-9]+), \3; +** setp\.[^.]+\.u64 %r[0-9]+, \4, -1; +** ... +** mov\.u64 (%r[0-9]+), 1; +** brev\.b64 (%r[0-9]+), \5; +** setp\.[^.]+\.u64 %r[0-9]+, \6, -9223372036854775808; +** ... +** mov\.u64 (%r[0-9]+), 2; +** brev\.b64 (%r[0-9]+), \7; +** setp\.[^.]+\.u64 %r[0-9]+, \8, 4611686018427387904; +** ... +*/ +/* { dg-final { scan-assembler-times {\tbrev\.b64\t} 70 } } */ +/* { dg-final { scan-assembler {\mabort\M} } } */ From 75c20a99b3a242121eef8a532f5224c00c471b56 Mon Sep 17 00:00:00 2001 From: Roger Sayle Date: Thu, 8 Jun 2023 00:09:00 +0100 Subject: [PATCH 074/169] Update nvptx's bitrev2 pattern to use BITREVERSE rtx. This minor tweak to the nvptx backend switches the representation of of the brev instruction from an UNSPEC to instead use the new BITREVERSE rtx. This allows various RTL optimizations including evaluation (constant folding) of integer constant arguments at compile-time. gcc/ * config/nvptx/nvptx.md (UNSPEC_BITREV): Delete. (bitrev2): Represent using bitreverse. gcc/testsuite/ * gcc.target/nvptx/brev-2-O2.c: Adjust. * gcc.target/nvptx/brevll-2-O2.c: Likewise. Co-authored-by: Thomas Schwinge --- gcc/config/nvptx/nvptx.md | 5 +--- gcc/testsuite/gcc.target/nvptx/brev-2-O2.c | 25 ++------------------ gcc/testsuite/gcc.target/nvptx/brevll-2-O2.c | 25 ++------------------ 3 files changed, 5 insertions(+), 50 deletions(-) diff --git a/gcc/config/nvptx/nvptx.md b/gcc/config/nvptx/nvptx.md index 1bb930454031..7a7c9948f45e 100644 --- a/gcc/config/nvptx/nvptx.md +++ b/gcc/config/nvptx/nvptx.md @@ -34,8 +34,6 @@ UNSPEC_FPINT_CEIL UNSPEC_FPINT_NEARBYINT - UNSPEC_BITREV - UNSPEC_ALLOCA UNSPEC_SET_SOFTSTACK @@ -636,8 +634,7 @@ (define_insn "bitrev2" [(set (match_operand:SDIM 0 "nvptx_register_operand" "=R") - (unspec:SDIM [(match_operand:SDIM 1 "nvptx_register_operand" "R")] - UNSPEC_BITREV))] + (bitreverse:SDIM (match_operand:SDIM 1 "nvptx_register_operand" "R")))] "" "%.\\tbrev.b%T0\\t%0, %1;") diff --git a/gcc/testsuite/gcc.target/nvptx/brev-2-O2.c b/gcc/testsuite/gcc.target/nvptx/brev-2-O2.c index e35052208d0b..c707a87f3566 100644 --- a/gcc/testsuite/gcc.target/nvptx/brev-2-O2.c +++ b/gcc/testsuite/gcc.target/nvptx/brev-2-O2.c @@ -1,7 +1,6 @@ /* { dg-do run } */ /* { dg-options "-O2" } */ /* { dg-additional-options -save-temps } */ -/* { dg-final { check-function-bodies {**} {} } } */ inline __attribute__((always_inline)) unsigned int bitreverse32(unsigned int x) @@ -96,26 +95,6 @@ int main(void) return 0; } -/* -** main: -** ... -** mov\.u32 (%r[0-9]+), 0; -** brev\.b32 (%r[0-9]+), \1; -** setp\.[^.]+\.u32 %r[0-9]+, \2, 0; -** ... -** mov\.u32 (%r[0-9]+), -1; -** brev\.b32 (%r[0-9]+), \3; -** setp\.[^.]+\.u32 %r[0-9]+, \4, -1; -** ... -** mov\.u32 (%r[0-9]+), 1; -** brev\.b32 (%r[0-9]+), \5; -** setp\.[^.]+\.u32 %r[0-9]+, \6, -2147483648; -** ... -** mov\.u32 (%r[0-9]+), 2; -** brev\.b32 (%r[0-9]+), \7; -** setp\.[^.]+\.u32 %r[0-9]+, \8, 1073741824; -** ... -*/ -/* { dg-final { scan-assembler-times {\tbrev\.b32\t} 40 } } */ -/* { dg-final { scan-assembler {\mabort\M} } } */ +/* { dg-final { scan-assembler-not {\tbrev\.b32\t} } } */ +/* { dg-final { scan-assembler-not {\mabort\M} } } */ diff --git a/gcc/testsuite/gcc.target/nvptx/brevll-2-O2.c b/gcc/testsuite/gcc.target/nvptx/brevll-2-O2.c index cbfda1b9601d..c89be9627f85 100644 --- a/gcc/testsuite/gcc.target/nvptx/brevll-2-O2.c +++ b/gcc/testsuite/gcc.target/nvptx/brevll-2-O2.c @@ -1,7 +1,6 @@ /* { dg-do run } */ /* { dg-options "-O2" } */ /* { dg-additional-options -save-temps } */ -/* { dg-final { check-function-bodies {**} {} } } */ inline __attribute__((always_inline)) unsigned long long bitreverse64(unsigned long long x) @@ -156,26 +155,6 @@ int main(void) return 0; } -/* -** main: -** ... -** mov\.u64 (%r[0-9]+), 0; -** brev\.b64 (%r[0-9]+), \1; -** setp\.[^.]+\.u64 %r[0-9]+, \2, 0; -** ... -** mov\.u64 (%r[0-9]+), -1; -** brev\.b64 (%r[0-9]+), \3; -** setp\.[^.]+\.u64 %r[0-9]+, \4, -1; -** ... -** mov\.u64 (%r[0-9]+), 1; -** brev\.b64 (%r[0-9]+), \5; -** setp\.[^.]+\.u64 %r[0-9]+, \6, -9223372036854775808; -** ... -** mov\.u64 (%r[0-9]+), 2; -** brev\.b64 (%r[0-9]+), \7; -** setp\.[^.]+\.u64 %r[0-9]+, \8, 4611686018427387904; -** ... -*/ -/* { dg-final { scan-assembler-times {\tbrev\.b64\t} 70 } } */ -/* { dg-final { scan-assembler {\mabort\M} } } */ +/* { dg-final { scan-assembler-not {\tbrev\.b64\t} } } */ +/* { dg-final { scan-assembler-not {\mabort\M} } } */ From 4450984d0a18cd4e352d396231ba2c457d20feea Mon Sep 17 00:00:00 2001 From: Thomas Schwinge Date: Mon, 4 Sep 2023 17:20:28 +0200 Subject: [PATCH 075/169] nvptx: Fix copy'n'paste-o in '__builtin_nvptx_brev' description Minor fix-up for commit c09471fbc7588db2480f036aa56a2403d3c03ae5 "nvptx: Add suppport for __builtin_nvptx_brev instrinsic". gcc/ * doc/extend.texi (Nvidia PTX Built-in Functions): Fix copy'n'paste-o in '__builtin_nvptx_brev' description. --- gcc/doc/extend.texi | 1 - 1 file changed, 1 deletion(-) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 406ccc9bc751..a95121b01247 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -18471,7 +18471,6 @@ These built-in functions are available for the Nvidia PTX target: @defbuiltin{unsigned int __builtin_nvptx_brev (unsigned int @var{x})} Reverse the bit order of a 32-bit unsigned integer. -Disable global interrupt. @enddefbuiltin @defbuiltin{unsigned long long __builtin_nvptx_brevll (unsigned long long @var{x})} From deff85c1e490c5594eb626697b8052a4e555e51b Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Wed, 15 Nov 2023 16:11:30 +0100 Subject: [PATCH 076/169] i386: Fix strict_low_part QImode insn with high input register patterns [PR112540] PR target/112540 gcc/ChangeLog: * config/i386/i386.md (*addqi_ext_1_slp): Correct operand numbers in split pattern. Replace !Q constraint of operand 1 with !qm. Add insn constrain. (*subqi_ext_1_slp): Ditto. (*qi_ext_1_slp): Ditto. --- gcc/config/i386/i386.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 6136e46b1bcf..29ec94252003 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -6624,9 +6624,9 @@ [(match_operand 2 "int248_register_operand" "Q,Q") (const_int 8) (const_int 8)]) 0) - (match_operand:QI 1 "nonimmediate_operand" "0,!Q"))) + (match_operand:QI 1 "nonimmediate_operand" "0,!qm"))) (clobber (reg:CC FLAGS_REG))] - "" + "!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun)" "@ add{b}\t{%h2, %0|%0, %h2} #" @@ -6638,8 +6638,8 @@ (plus:QI (subreg:QI (match_op_dup 3 - [(match_dup 0) (const_int 8) (const_int 8)]) 0) - (match_dup 1))) + [(match_dup 2) (const_int 8) (const_int 8)]) 0) + (match_dup 0))) (clobber (reg:CC FLAGS_REG))])] "" [(set_attr "type" "alu") @@ -7662,14 +7662,14 @@ (define_insn_and_split "*subqi_ext_1_slp" [(set (strict_low_part (match_operand:QI 0 "register_operand" "+Q,&Q")) (minus:QI - (match_operand:QI 1 "nonimmediate_operand" "0,!Q") + (match_operand:QI 1 "nonimmediate_operand" "0,!qm") (subreg:QI (match_operator:SWI248 3 "extract_operator" [(match_operand 2 "int248_register_operand" "Q,Q") (const_int 8) (const_int 8)]) 0))) (clobber (reg:CC FLAGS_REG))] - "" + "!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun)" "@ sub{b}\t{%h2, %0|%0, %h2} #" @@ -7679,10 +7679,10 @@ (parallel [(set (strict_low_part (match_dup 0)) (minus:QI - (match_dup 1) + (match_dup 0) (subreg:QI (match_op_dup 3 - [(match_dup 0) (const_int 8) (const_int 8)]) 0))) + [(match_dup 2) (const_int 8) (const_int 8)]) 0))) (clobber (reg:CC FLAGS_REG))])] "" [(set_attr "type" "alu") @@ -11492,9 +11492,9 @@ [(match_operand 2 "int248_register_operand" "Q,Q") (const_int 8) (const_int 8)]) 0) - (match_operand:QI 1 "nonimmediate_operand" "0,!Q"))) + (match_operand:QI 1 "nonimmediate_operand" "0,!qm"))) (clobber (reg:CC FLAGS_REG))] - "" + "!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun)" "@ {b}\t{%h2, %0|%0, %h2} #" @@ -11504,10 +11504,10 @@ (parallel [(set (strict_low_part (match_dup 0)) (any_logic:QI - (match_dup 1) (subreg:QI (match_op_dup 3 - [(match_dup 0) (const_int 8) (const_int 8)]) 0))) + [(match_dup 2) (const_int 8) (const_int 8)]) 0))) + (match_dup 0) (clobber (reg:CC FLAGS_REG))])] "" [(set_attr "type" "alu") From 93d85b80605aa787d2cc103e7a70d10487c01bea Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Wed, 15 Nov 2023 16:45:21 +0100 Subject: [PATCH 077/169] i386: Fix split condition of *qi_ext_1_slp patterns gcc/ChangeLog: * config/i386/i386.md (*addqi_ext_1_slp): Add "&& " before "reload_completed" in split condition. (*subqi_ext_1_slp): Ditto. (*qi_ext_1_slp): Ditto. --- gcc/config/i386/i386.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 29ec94252003..32535621db48 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -6630,7 +6630,7 @@ "@ add{b}\t{%h2, %0|%0, %h2} #" - "reload_completed + "&& reload_completed && !rtx_equal_p (operands[0], operands[1])" [(set (strict_low_part (match_dup 0)) (match_dup 1)) (parallel @@ -7673,7 +7673,7 @@ "@ sub{b}\t{%h2, %0|%0, %h2} #" - "reload_completed + "&& reload_completed && !rtx_equal_p (operands[0], operands[1])" [(set (strict_low_part (match_dup 0)) (match_dup 1)) (parallel @@ -11498,7 +11498,7 @@ "@ {b}\t{%h2, %0|%0, %h2} #" - "reload_completed + "&& reload_completed && !rtx_equal_p (operands[0], operands[1])" [(set (strict_low_part (match_dup 0)) (match_dup 1)) (parallel From 6665a8572c8f24bd55c6081c91f461442c94dcfb Mon Sep 17 00:00:00 2001 From: Patrick Palka Date: Wed, 15 Nov 2023 12:03:16 -0500 Subject: [PATCH 078/169] c++: constantness of local var in constexpr fn [PR111703, PR112269] potential_constant_expression was incorrectly treating most local variables from a constexpr function as constant because it wasn't considering the 'now' parameter. This patch fixes this by relaxing its var_in_maybe_constexpr_fn checks accordingly, which turns out to partially fix two recently reported regressions: PR111703 is a regression caused by r11-550-gf65a3299a521a4 for restricting constexpr evaluation during warning-dependent folding. The mechanism is intended to restrict only constant evaluation of the instantiated non-dependent expression, but it also ends up restricting constant evaluation occurring during instantiation of the expression, in particular when instantiating the converted argument 'x' (a VIEW_CONVERT_EXPR) into a copy constructor call. This seems like a flaw in the mechanism, though I don't know if we want to fix the mechanism or get rid of it completely since the original testcases which motivated the mechanism are fixed more simply by r13-1225-gb00b95198e6720. In any case, this patch partially fixes this by making us correctly treat 'x' as non-constant which prevents the problematic warning-dependent folding from occurring at all. PR112269 is caused by r14-4796-g3e3d73ed5e85e7 for merging tsubst_copy into tsubst_copy_and_build. tsubst_copy used to exit early when 'args' was empty, behavior which that commit deliberately didn't preserve. This early exit masked the fact that COMPLEX_EXPR wasn't handled by tsubst at all, and is a tree code that apparently we could see during warning-dependent folding on some targets. A complete fix is to add handling for this tree code in tsubst_expr, but this patch should fix the reported testsuite failures since the COMPLEX_EXPRs that crop up in are considered non-constant expressions after this patch. PR c++/111703 PR c++/112269 gcc/cp/ChangeLog: * constexpr.cc (potential_constant_expression_1) : Only consider var_in_maybe_constexpr_fn if 'now' is false. : Likewise. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/concepts-fn8.C: New test. --- gcc/cp/constexpr.cc | 4 ++-- gcc/testsuite/g++.dg/cpp2a/concepts-fn8.C | 24 +++++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp2a/concepts-fn8.C diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc index c05760e6789d..8a6b210144af 100644 --- a/gcc/cp/constexpr.cc +++ b/gcc/cp/constexpr.cc @@ -9623,7 +9623,7 @@ potential_constant_expression_1 (tree t, bool want_rval, bool strict, bool now, return RECUR (DECL_VALUE_EXPR (t), rval); } if (want_rval - && !var_in_maybe_constexpr_fn (t) + && (now || !var_in_maybe_constexpr_fn (t)) && !type_dependent_expression_p (t) && !decl_maybe_constant_var_p (t) && (strict @@ -9737,7 +9737,7 @@ potential_constant_expression_1 (tree t, bool want_rval, bool strict, bool now, STRIP_NOPS (x); if (is_this_parameter (x) && !is_capture_proxy (x)) { - if (!var_in_maybe_constexpr_fn (x)) + if (now || !var_in_maybe_constexpr_fn (x)) { if (flags & tf_error) constexpr_error (loc, fundef_p, "use of % in a " diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-fn8.C b/gcc/testsuite/g++.dg/cpp2a/concepts-fn8.C new file mode 100644 index 000000000000..3f63a5b28d70 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/concepts-fn8.C @@ -0,0 +1,24 @@ +// PR c++/111703 +// { dg-do compile { target c++20 } } + +template +constexpr bool always_true() { return true; } + +struct P { + P() = default; + + template + requires (always_true()) // { dg-bogus "used before its definition" } + constexpr P(const T&) { } + + int n, m; +}; + +void (*f)(P); + +template +constexpr bool g() { + P x; + f(x); // { dg-bogus "from here" } + return true; +} From d3f48f682271ed94ab6e9f6bc62418a62bd8ff26 Mon Sep 17 00:00:00 2001 From: Patrick Palka Date: Wed, 15 Nov 2023 12:10:16 -0500 Subject: [PATCH 079/169] c++: non-dependent .* operand folding [PR112427] Here when building up the non-dependent .* expression, we crash from fold_convert on 'b.a' due to this (templated) COMPONENT_REF having an IDENTIFIER_NODE instead of FIELD_DECL operand that middle-end routines expect. Like in r14-4899-gd80a26cca02587, this patch fixes this by replacing the problematic piecemeal folding with a single call to cp_fully_fold. Also, don't bother building the POINTER_PLUS_EXPR in a template context. This means the returned non-dependent tree might not have TREE_SIDE_EFFECTS set when it used to, so we need to compensate by making build_min_non_dep propagate TREE_SIDE_EFFECTS from the original arguments like buildN and build_min do. PR c++/112427 gcc/cp/ChangeLog: * tree.cc (build_min_non_dep): Propagate TREE_SIDE_EFFECTS from the original arguments. (build_min_non_dep_call_vec): Likewise. * typeck2.cc (build_m_component_ref): Use cp_convert, build2 and cp_fully_fold instead of fold_build_pointer_plus and fold_convert. Don't build the POINTER_PLUS_EXPR in a template context. gcc/testsuite/ChangeLog: * g++.dg/template/non-dependent29.C: New test. --- gcc/cp/tree.cc | 11 ++++++++++- gcc/cp/typeck2.cc | 6 +++++- gcc/testsuite/g++.dg/template/non-dependent29.C | 13 +++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/template/non-dependent29.C diff --git a/gcc/cp/tree.cc b/gcc/cp/tree.cc index 417c92ba76fc..dc4126f935c3 100644 --- a/gcc/cp/tree.cc +++ b/gcc/cp/tree.cc @@ -3601,7 +3601,12 @@ build_min_non_dep (enum tree_code code, tree non_dep, ...) TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep); for (i = 0; i < length; i++) - TREE_OPERAND (t, i) = va_arg (p, tree); + { + tree x = va_arg (p, tree); + TREE_OPERAND (t, i) = x; + if (x && !TYPE_P (x)) + TREE_SIDE_EFFECTS (t) |= TREE_SIDE_EFFECTS (x); + } va_end (p); return convert_from_reference (t); @@ -3636,6 +3641,10 @@ build_min_non_dep_call_vec (tree non_dep, tree fn, vec *argvec) non_dep = TREE_OPERAND (non_dep, 0); TREE_TYPE (t) = TREE_TYPE (non_dep); TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep); + if (argvec) + for (tree x : *argvec) + if (x && !TYPE_P (x)) + TREE_SIDE_EFFECTS (t) |= TREE_SIDE_EFFECTS (x); return convert_from_reference (t); } diff --git a/gcc/cp/typeck2.cc b/gcc/cp/typeck2.cc index 309903afed8b..a75f4f8c2d26 100644 --- a/gcc/cp/typeck2.cc +++ b/gcc/cp/typeck2.cc @@ -2378,7 +2378,11 @@ build_m_component_ref (tree datum, tree component, tsubst_flags_t complain) /* Build an expression for "object + offset" where offset is the value stored in the pointer-to-data-member. */ ptype = build_pointer_type (type); - datum = fold_build_pointer_plus (fold_convert (ptype, datum), component); + datum = cp_convert (ptype, datum, complain); + if (!processing_template_decl) + datum = build2 (POINTER_PLUS_EXPR, ptype, + datum, convert_to_ptrofftype (component)); + datum = cp_fully_fold (datum); datum = cp_build_fold_indirect_ref (datum); if (datum == error_mark_node) return error_mark_node; diff --git a/gcc/testsuite/g++.dg/template/non-dependent29.C b/gcc/testsuite/g++.dg/template/non-dependent29.C new file mode 100644 index 000000000000..41bd11ae6b49 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/non-dependent29.C @@ -0,0 +1,13 @@ +// PR c++/112427 + +struct A { int m; void f(); }; +struct B { A a; }; + +template +void f(B b) { + int A::*pd = &A::m; + b.a.*pd; + + void (A::*pf)() = &A::f; + (b.a.*pf)(); +} From 40a7707a7ea3568cee2cd80cd7e83b7eda678410 Mon Sep 17 00:00:00 2001 From: Patrick Palka Date: Wed, 15 Nov 2023 12:17:55 -0500 Subject: [PATCH 080/169] c++: partially inst requires-expr in noexcept-spec [PR101043] Here we're ICEing from strip_typedefs for the partially instantiated requires-expression when walking its REQUIRES_EXPR_EXTRA_ARGS which in this case is a TREE_LIST with non-empty TREE_PURPOSE (to hold the captured local specialization 't' as per build_extra_args) which strip_typedefs doesn't expect. We can probably skip walking REQUIRES_EXPR_EXTRA_ARGS at all since it shouldn't contain any typedefs in the first place, but it seems safer and more generally useful to just teach strip_typedefs to handle non-empty TREE_PURPOSE the obvious way. (The code asserts TREE_PURPOSE was empty even since since its inception i.e. r189298.) PR c++/101043 gcc/cp/ChangeLog: * tree.cc (strip_typedefs_expr) : Handle non-empty TREE_PURPOSE. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/concepts-requires37.C: New test. --- gcc/cp/tree.cc | 19 ++++++++++++------- .../g++.dg/cpp2a/concepts-requires37.C | 11 +++++++++++ 2 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp2a/concepts-requires37.C diff --git a/gcc/cp/tree.cc b/gcc/cp/tree.cc index dc4126f935c3..0736e8d8f485 100644 --- a/gcc/cp/tree.cc +++ b/gcc/cp/tree.cc @@ -1911,19 +1911,24 @@ strip_typedefs_expr (tree t, bool *remove_attributes, unsigned int flags) case TREE_LIST: { bool changed = false; - releasing_vec vec; + auto_vec vec; r = t; for (; t; t = TREE_CHAIN (t)) { - gcc_assert (!TREE_PURPOSE (t)); - tree elt = strip_typedefs (TREE_VALUE (t), - remove_attributes, flags); - if (elt != TREE_VALUE (t)) + tree purpose = strip_typedefs (TREE_PURPOSE (t), + remove_attributes, flags); + tree value = strip_typedefs (TREE_VALUE (t), + remove_attributes, flags); + if (purpose != TREE_PURPOSE (t) || value != TREE_VALUE (t)) changed = true; - vec_safe_push (vec, elt); + vec.safe_push ({purpose, value}); } if (changed) - r = build_tree_list_vec (vec); + { + r = NULL_TREE; + for (int i = vec.length () - 1; i >= 0; i--) + r = tree_cons (vec[i].first, vec[i].second, r); + } return r; } diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-requires37.C b/gcc/testsuite/g++.dg/cpp2a/concepts-requires37.C new file mode 100644 index 000000000000..fa4095ed494f --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/concepts-requires37.C @@ -0,0 +1,11 @@ +// PR c++/101043 +// { dg-do compile { target c++20 } } + +template +void f(T t) { + [&](auto) noexcept(requires { t.g(); }) { }(0); +} + +int main() { + f(0); +} From b126f3ffbef59b0b08c2c2a664133d7d6f5ca235 Mon Sep 17 00:00:00 2001 From: Patrick Palka Date: Wed, 15 Nov 2023 12:24:38 -0500 Subject: [PATCH 081/169] c++: direct enum init from type-dep elt [PR112515] The NON_DEPENDENT_EXPR removal exposed that is_direct_enum_init can be called in a template context on a CONSTRUCTOR that isn't type-dependent but whose element is. PR c++/112515 gcc/cp/ChangeLog: * decl.cc (is_direct_enum_init): Check type-dependence of the single element. gcc/testsuite/ChangeLog: * g++.dg/template/non-dependent30.C: New test. --- gcc/cp/decl.cc | 1 + gcc/testsuite/g++.dg/template/non-dependent30.C | 9 +++++++++ 2 files changed, 10 insertions(+) create mode 100644 gcc/testsuite/g++.dg/template/non-dependent30.C diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc index d2ed46b14531..b8e1098d4822 100644 --- a/gcc/cp/decl.cc +++ b/gcc/cp/decl.cc @@ -6614,6 +6614,7 @@ is_direct_enum_init (tree type, tree init) && CONSTRUCTOR_NELTS (init) == 1 /* DR 2374: The single element needs to be implicitly convertible to the underlying type of the enum. */ + && !type_dependent_expression_p (CONSTRUCTOR_ELT (init, 0)->value) && can_convert_arg (ENUM_UNDERLYING_TYPE (type), TREE_TYPE (CONSTRUCTOR_ELT (init, 0)->value), CONSTRUCTOR_ELT (init, 0)->value, diff --git a/gcc/testsuite/g++.dg/template/non-dependent30.C b/gcc/testsuite/g++.dg/template/non-dependent30.C new file mode 100644 index 000000000000..32d48e44c098 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/non-dependent30.C @@ -0,0 +1,9 @@ +// PR c++/112515 +// { dg-do compile { target c++11 } } + +enum E : int { }; + +template +E f(T t) { + return E{t.e}; +} From fb4e2c1648ea4cf1b1d34205a1da519702328d92 Mon Sep 17 00:00:00 2001 From: Vineet Gupta Date: Tue, 24 Oct 2023 20:38:49 -0700 Subject: [PATCH 082/169] RISC-V: elide unnecessary sign extend when expanding cmp_and_jump RV64 compare and branch instructions only support 64-bit operands. At Expand time, the backend conservatively zero/sign extends its operands even if not needed, such as incoming function args which ABI/ISA guarantee to be sign-extended already (this is true for SI, HI, QI operands) And subsequently REE fails to eliminate them as "missing defintion(s)" or "multiple definition(s) since function args don't have explicit definition. So during expand riscv_extend_comparands (), if an operand is a subreg-promoted SI with inner DI, which is representative of a function arg, just peel away the subreg to expose the DI, eliding the sign extension. As Jeff noted this routine is also used in if-conversion so potentially can also help there. Note there's currently patches floating around to improve REE and also a new pass to eliminate unneccesary extensions, but it is still beneficial to not generate those extra extensions in first place. It is obviously less work for post-reload passes such as REE, but even for earlier passes, such as combine, having to deal with one less thing and ensuing fewer combinations is a win too. Way too many existing tests used to observe this issue. e.g. gcc.c-torture/compile/20190827-1.c -O2 -march=rv64gc It elimiates the SEXT.W gcc/ChangeLog: * config/riscv/riscv.cc (riscv_sign_extend_if_not_subreg_prom): New. * (riscv_extend_comparands): Call New function on operands. Tested-by: Patrick O'Neill # pre-commit-CI #676 Signed-off-by: Vineet Gupta --- gcc/config/riscv/riscv.cc | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index e919850fc6cb..e466d4f168af 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -3695,6 +3695,24 @@ riscv_zero_if_equal (rtx cmp0, rtx cmp1) cmp0, cmp1, 0, 0, OPTAB_DIRECT); } +/* Helper function for riscv_extend_comparands to Sign-extend the OP. + However if the OP is SI subreg promoted with an inner DI, such as + (subreg/s/v:SI (reg/v:DI) 0) + just peel off the SUBREG to get DI, avoiding extraneous extension. */ + +static void +riscv_sign_extend_if_not_subreg_prom (rtx *op) +{ + if (GET_CODE (*op) == SUBREG + && SUBREG_PROMOTED_VAR_P (*op) + && SUBREG_PROMOTED_SIGNED_P (*op) + && (GET_MODE_SIZE (GET_MODE (XEXP (*op, 0))).to_constant () + == GET_MODE_SIZE (word_mode))) + *op = XEXP (*op, 0); + else + *op = gen_rtx_SIGN_EXTEND (word_mode, *op); +} + /* Sign- or zero-extend OP0 and OP1 for integer comparisons. */ static void @@ -3724,9 +3742,10 @@ riscv_extend_comparands (rtx_code code, rtx *op0, rtx *op1) } else { - *op0 = gen_rtx_SIGN_EXTEND (word_mode, *op0); + riscv_sign_extend_if_not_subreg_prom (op0); + if (*op1 != const0_rtx) - *op1 = gen_rtx_SIGN_EXTEND (word_mode, *op1); + riscv_sign_extend_if_not_subreg_prom (op1); } } } From d1189ceefc1da1515e039c9cfd2f5a67b5820207 Mon Sep 17 00:00:00 2001 From: Juzhe-Zhong Date: Tue, 14 Nov 2023 19:23:19 -0800 Subject: [PATCH 083/169] RISC-V: fix vsetvli pass testsuite failure [PR/112447] Fixes: f0e28d8c1371 ("RISC-V: Fix failed hoist in LICM of vmv.v.x instruction") Since above commit, we have following failure: FAIL: gcc.c-torture/execute/memset-3.c -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions execution test FAIL: gcc.c-torture/execute/memset-3.c -O3 -g execution test The issue was not the commit but rather it unravelled an issue in the vsetvli pass. Here's Juzhe's analysis: We have 2 types of global vsetvls insertion. One is earliest fusion of each end of the block. The other is LCM suggested edge vsetvls. So before this patch, insertion as follows: | (insn 2817 2820 2818 361 (set (reg:SI 67 vtype) | (unspec:SI [ | (const_int 8 [0x8]) | (const_int 7 [0x7]) | (const_int 1 [0x1]) repeated x2 | ] UNSPEC_VSETVL)) 1708 {vsetvl_vtype_change_only} | (nil)) | (insn 2818 2817 999 361 (set (reg:SI 67 vtype) | (unspec:SI [ | (const_int 32 [0x20]) | (const_int 1 [0x1]) repeated x3 | ] UNSPEC_VSETVL)) 1708 {vsetvl_vtype_change_only} | (nil)) After this patch: | (insn 2817 2820 2819 361 (set (reg:SI 67 vtype) | (unspec:SI [ | (const_int 32 [0x20]) | (const_int 1 [0x1]) repeated x3 | ] UNSPEC_VSETVL)) 1708 {vsetvl_vtype_change_only} | (nil)) | (insn 2819 2817 999 361 (set (reg:SI 67 vtype) | (unspec:SI [ | (const_int 8 [0x8]) | (const_int 7 [0x7]) | (const_int 1 [0x1]) repeated x2 | ] UNSPEC_VSETVL)) 1708 {vsetvl_vtype_change_only} | (nil)) The original insertion order is incorrect. We should first insert earliest fusion since it is the vsetvls information already there which was seen by later LCM. We just delay the insertion. So it should be come before the LCM suggested insertion. PR target/112447 gcc/ChangeLog: * config/riscv/riscv-vsetvl.cc (pre_vsetvl::emit_vsetvl): Insert local vsetvl info before LCM suggested one. Tested-by: Patrick O'Neill # pre-commit-CI #679 Co-developed-by: Vineet Gupta --- gcc/config/riscv/riscv-vsetvl.cc | 70 ++++++++++++++++---------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/gcc/config/riscv/riscv-vsetvl.cc b/gcc/config/riscv/riscv-vsetvl.cc index 8466b5d019ea..74367ec8d8e9 100644 --- a/gcc/config/riscv/riscv-vsetvl.cc +++ b/gcc/config/riscv/riscv-vsetvl.cc @@ -3229,6 +3229,41 @@ pre_vsetvl::emit_vsetvl () remove_vsetvl_insn (item); } + /* Insert vsetvl info that was not deleted after lift up. */ + for (const bb_info *bb : crtl->ssa->bbs ()) + { + const vsetvl_block_info &block_info = get_block_info (bb); + if (!block_info.has_info ()) + continue; + + const vsetvl_info &footer_info = block_info.get_exit_info (); + + if (footer_info.delete_p ()) + continue; + + edge eg; + edge_iterator eg_iterator; + FOR_EACH_EDGE (eg, eg_iterator, bb->cfg_bb ()->succs) + { + gcc_assert (!(eg->flags & EDGE_ABNORMAL)); + if (dump_file) + { + fprintf ( + dump_file, + "\n Insert missed vsetvl info at edge(bb %u -> bb %u): ", + eg->src->index, eg->dest->index); + footer_info.dump (dump_file, " "); + } + start_sequence (); + insert_vsetvl_insn (EMIT_DIRECT, footer_info); + rtx_insn *rinsn = get_insns (); + end_sequence (); + default_rtl_profile (); + insert_insn_on_edge (rinsn, eg); + need_commit = true; + } + } + /* m_insert vsetvl as LCM suggest. */ for (int ed = 0; ed < NUM_EDGES (m_edges); ed++) { @@ -3267,41 +3302,6 @@ pre_vsetvl::emit_vsetvl () insert_insn_on_edge (rinsn, eg); } - /* Insert vsetvl info that was not deleted after lift up. */ - for (const bb_info *bb : crtl->ssa->bbs ()) - { - const vsetvl_block_info &block_info = get_block_info (bb); - if (!block_info.has_info ()) - continue; - - const vsetvl_info &footer_info = block_info.get_exit_info (); - - if (footer_info.delete_p ()) - continue; - - edge eg; - edge_iterator eg_iterator; - FOR_EACH_EDGE (eg, eg_iterator, bb->cfg_bb ()->succs) - { - gcc_assert (!(eg->flags & EDGE_ABNORMAL)); - if (dump_file) - { - fprintf ( - dump_file, - "\n Insert missed vsetvl info at edge(bb %u -> bb %u): ", - eg->src->index, eg->dest->index); - footer_info.dump (dump_file, " "); - } - start_sequence (); - insert_vsetvl_insn (EMIT_DIRECT, footer_info); - rtx_insn *rinsn = get_insns (); - end_sequence (); - default_rtl_profile (); - insert_insn_on_edge (rinsn, eg); - need_commit = true; - } - } - if (need_commit) commit_edge_insertions (); } From 186331063dfbcf1eacb445c473d92634c9baa90f Mon Sep 17 00:00:00 2001 From: Bernhard Reutner-Fischer Date: Thu, 1 Jun 2023 19:44:19 +0200 Subject: [PATCH 084/169] c++, analyzer: Expand CAN_HAVE_LOCATION_P macro. r14-985-gca2007a9bb3074 used the collapsed macro definition CAN_HAVE_LOCATION_P in gcc-rich-location.cc and r14-977-g8861c80733da5c in c++'s build_cplus_array_type (). However, although otherwise correct, the usage of CAN_HAVE_LOCATION_P in these two spots is misleading, so this patch reverts aforementioned two hunks. gcc/cp/ChangeLog: * tree.cc (build_cplus_array_type): Revert using the macro CAN_HAVE_LOCATION_P. gcc/ChangeLog: * gcc-rich-location.cc (maybe_range_label_for_tree_type_mismatch::get_text): Revert using the macro CAN_HAVE_LOCATION_P. --- gcc/cp/tree.cc | 2 +- gcc/gcc-rich-location.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/cp/tree.cc b/gcc/cp/tree.cc index 0736e8d8f485..5279579c2010 100644 --- a/gcc/cp/tree.cc +++ b/gcc/cp/tree.cc @@ -1171,7 +1171,7 @@ build_cplus_array_type (tree elt_type, tree index_type, int dependent) } /* Avoid spurious warnings with VLAs (c++/54583). */ - if (CAN_HAVE_LOCATION_P (TYPE_SIZE (t))) + if (TYPE_SIZE (t) && EXPR_P (TYPE_SIZE (t))) suppress_warning (TYPE_SIZE (t), OPT_Wunused); /* Push these needs up to the ARRAY_TYPE so that initialization takes diff --git a/gcc/gcc-rich-location.cc b/gcc/gcc-rich-location.cc index 068df1c51a8c..2fb0cc7ce92b 100644 --- a/gcc/gcc-rich-location.cc +++ b/gcc/gcc-rich-location.cc @@ -203,7 +203,7 @@ maybe_range_label_for_tree_type_mismatch::get_text (unsigned range_idx) const tree expr_type = TREE_TYPE (m_expr); tree other_type = NULL_TREE; - if (CAN_HAVE_LOCATION_P (m_other_expr)) + if (m_other_expr && EXPR_P (m_other_expr)) other_type = TREE_TYPE (m_other_expr); range_label_for_type_mismatch inner (expr_type, other_type); From 026d9454b1d9971061ad2e7d47c3ef4b0b96495d Mon Sep 17 00:00:00 2001 From: Patrick O'Neill Date: Tue, 14 Nov 2023 15:08:31 -0800 Subject: [PATCH 085/169] RISC-V: Fix ICE in non-canonical march parsing Passing in a base extension in non-canonical order (i, e, g) causes GCC to ICE: xgcc: error: '-march=rv64ge': ISA string is not in canonical order. 'e' xgcc: internal compiler error: in add, at common/config/riscv/riscv-common.cc:671 ... This is fixed by skipping to the next extension when a non-canonical order is detected. gcc/ChangeLog: * common/config/riscv/riscv-common.cc (riscv_subset_list::parse_std_ext): Emit an error and skip to the next extension when a non-canonical ordering is detected. gcc/testsuite/ChangeLog: * gcc.target/riscv/arch-27.c: New test. * gcc.target/riscv/arch-28.c: New test. Signed-off-by: Patrick O'Neill --- gcc/common/config/riscv/riscv-common.cc | 17 +++++++++++++---- gcc/testsuite/gcc.target/riscv/arch-27.c | 7 +++++++ gcc/testsuite/gcc.target/riscv/arch-28.c | 7 +++++++ 3 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/arch-27.c create mode 100644 gcc/testsuite/gcc.target/riscv/arch-28.c diff --git a/gcc/common/config/riscv/riscv-common.cc b/gcc/common/config/riscv/riscv-common.cc index 526dbb7603be..5111626157b7 100644 --- a/gcc/common/config/riscv/riscv-common.cc +++ b/gcc/common/config/riscv/riscv-common.cc @@ -1017,15 +1017,24 @@ riscv_subset_list::parse_std_ext (const char *p) std_ext = *p; /* Checking canonical order. */ + const char *prior_std_exts = std_exts; + while (*std_exts && std_ext != *std_exts) std_exts++; subset[0] = std_ext; if (std_ext != *std_exts && standard_extensions_p (subset)) - error_at (m_loc, - "%<-march=%s%>: ISA string is not in canonical order. " - "%<%c%>", - m_arch, *p); + { + error_at (m_loc, + "%<-march=%s%>: ISA string is not in canonical order. " + "%<%c%>", + m_arch, *p); + /* Extension ordering is invalid. Ignore this extension and keep + searching for other issues with remaining extensions. */ + std_exts = prior_std_exts; + p++; + continue; + } std_exts++; diff --git a/gcc/testsuite/gcc.target/riscv/arch-27.c b/gcc/testsuite/gcc.target/riscv/arch-27.c new file mode 100644 index 000000000000..70143b2156f3 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/arch-27.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64ge -mabi=lp64d" } */ +int foo() +{ +} + +/* { dg-error "ISA string is not in canonical order. 'e'" "" { target *-*-* } 0 } */ diff --git a/gcc/testsuite/gcc.target/riscv/arch-28.c b/gcc/testsuite/gcc.target/riscv/arch-28.c new file mode 100644 index 000000000000..934399a7b3a2 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/arch-28.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64imaefcv -mabi=lp64d" } */ +int foo() +{ +} + +/* { dg-error "ISA string is not in canonical order. 'e'" "" { target *-*-* } 0 } */ From 01bc30b222a9d2ff0269325d9e367f8f1fcef942 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 15 Nov 2023 20:27:08 +0100 Subject: [PATCH 086/169] Regenerate libiberty/aclocal.m4 with aclocal 1.15.1 There is a new buildbot check that all autotool files are generated with the correct versions (automake 1.15.1 and autoconf 2.69). https://builder.sourceware.org/buildbot/#/builders/gcc-autoregen Correct one file that was generated with the wrong version. libiberty/ * aclocal.m4: Rebuild. --- libiberty/aclocal.m4 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libiberty/aclocal.m4 b/libiberty/aclocal.m4 index f327865aaf9b..0757688d52a4 100644 --- a/libiberty/aclocal.m4 +++ b/libiberty/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.5 -*- Autoconf -*- +# generated automatically by aclocal 1.15.1 -*- Autoconf -*- -# Copyright (C) 1996-2021 Free Software Foundation, Inc. +# Copyright (C) 1996-2017 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, From e8676f9ded71f5e04c4e9d81ec656809f6ba54e6 Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Wed, 15 Nov 2023 22:21:10 +0100 Subject: [PATCH 087/169] i386: Optimize strict_low_part QImode insn with high input registers Following testcase: struct S1 { unsigned char val; unsigned char pad1; unsigned short pad2; }; struct S2 { unsigned char pad1; unsigned char val; unsigned short pad2; }; struct S1 test_add (struct S1 a, struct S2 b, struct S2 c) { a.val = b.val + c.val; return a; } compiles with -O2 to: movl %edi, %eax movzbl %dh, %edx movl %esi, %ecx movb %dl, %al addb %ch, %al The insert to %al can go directly from %dh: movl %edi, %eax movl %esi, %ecx movb %dh, %al addb %ch, %al Patch introduces strict_low_part QImode insn patterns with both of their input arguments extracted from high register. This invalid insn is split after reload to a lowpart insert from the high register and qi_ext_1_slp instruction. PR target/78904 gcc/ChangeLog: * config/i386/i386.md (*movstrictqi_ext_1): New insn pattern. (*addqi_ext_2_slp): New define_insn_and_split pattern. (*subqi_ext_2_slp): Ditto. (*qi_ext_2_slp): Ditto. gcc/testsuite/ChangeLog: * gcc.target/i386/pr78904-8.c: New test. * gcc.target/i386/pr78904-8a.c: New test. * gcc.target/i386/pr78904-8b.c: New test. * gcc.target/i386/pr78904-9.c: New test. * gcc.target/i386/pr78904-9a.c: New test. * gcc.target/i386/pr78904-9b.c: New test. --- gcc/config/i386/i386.md | 112 +++++++++++++++++++++ gcc/testsuite/gcc.target/i386/pr78904-8.c | 25 +++++ gcc/testsuite/gcc.target/i386/pr78904-8a.c | 23 +++++ gcc/testsuite/gcc.target/i386/pr78904-8b.c | 27 +++++ gcc/testsuite/gcc.target/i386/pr78904-9.c | 63 ++++++++++++ gcc/testsuite/gcc.target/i386/pr78904-9a.c | 61 +++++++++++ gcc/testsuite/gcc.target/i386/pr78904-9b.c | 65 ++++++++++++ 7 files changed, 376 insertions(+) create mode 100644 gcc/testsuite/gcc.target/i386/pr78904-8.c create mode 100644 gcc/testsuite/gcc.target/i386/pr78904-8a.c create mode 100644 gcc/testsuite/gcc.target/i386/pr78904-8b.c create mode 100644 gcc/testsuite/gcc.target/i386/pr78904-9.c create mode 100644 gcc/testsuite/gcc.target/i386/pr78904-9a.c create mode 100644 gcc/testsuite/gcc.target/i386/pr78904-9b.c diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 32535621db48..26cdb21d3c00 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -3335,6 +3335,19 @@ (set_attr "mode" "") (set_attr "length_immediate" "0")]) +(define_insn "*movstrictqi_ext_1" + [(set (strict_low_part + (match_operand:QI 0 "register_operand" "+Q")) + (subreg:QI + (match_operator:SWI248 2 "extract_operator" + [(match_operand 1 "int248_register_operand" "Q") + (const_int 8) + (const_int 8)]) 0))] + "!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun)" + "mov{b}\t{%h1, %0|%0, %h1}" + [(set_attr "type" "imov") + (set_attr "mode" "QI")]) + (define_expand "extv" [(set (match_operand:SWI24 0 "register_operand") (sign_extract:SWI24 (match_operand:SWI24 1 "register_operand") @@ -6645,6 +6658,39 @@ [(set_attr "type" "alu") (set_attr "mode" "QI")]) +(define_insn_and_split "*addqi_ext_2_slp" + [(set (strict_low_part (match_operand:QI 0 "register_operand" "+&Q")) + (plus:QI + (subreg:QI + (match_operator:SWI248 3 "extract_operator" + [(match_operand 1 "int248_register_operand" "Q") + (const_int 8) + (const_int 8)]) 0) + (subreg:QI + (match_operator:SWI248 4 "extract_operator" + [(match_operand 2 "int248_register_operand" "Q") + (const_int 8) + (const_int 8)]) 0))) + (clobber (reg:CC FLAGS_REG))] + "!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun)" + "#" + "&& reload_completed" + [(set (strict_low_part (match_dup 0)) + (subreg:QI + (match_op_dup 4 + [(match_dup 2) (const_int 8) (const_int 8)]) 0)) + (parallel + [(set (strict_low_part (match_dup 0)) + (plus:QI + (subreg:QI + (match_op_dup 3 + [(match_dup 1) (const_int 8) (const_int 8)]) 0) + (match_dup 0))) + (clobber (reg:CC FLAGS_REG))])] + "" + [(set_attr "type" "alu") + (set_attr "mode" "QI")]) + ;; Split non destructive adds if we cannot use lea. (define_split [(set (match_operand:SWI48 0 "register_operand") @@ -7688,6 +7734,39 @@ [(set_attr "type" "alu") (set_attr "mode" "QI")]) +(define_insn_and_split "*subqi_ext_2_slp" + [(set (strict_low_part (match_operand:QI 0 "register_operand" "+&Q")) + (minus:QI + (subreg:QI + (match_operator:SWI248 3 "extract_operator" + [(match_operand 1 "int248_register_operand" "Q") + (const_int 8) + (const_int 8)]) 0) + (subreg:QI + (match_operator:SWI248 4 "extract_operator" + [(match_operand 2 "int248_register_operand" "Q") + (const_int 8) + (const_int 8)]) 0))) + (clobber (reg:CC FLAGS_REG))] + "!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun)" + "#" + "&& reload_completed" + [(set (strict_low_part (match_dup 0)) + (subreg:QI + (match_op_dup 3 + [(match_dup 1) (const_int 8) (const_int 8)]) 0)) + (parallel + [(set (strict_low_part (match_dup 0)) + (minus:QI + (match_dup 0) + (subreg:QI + (match_op_dup 4 + [(match_dup 2) (const_int 8) (const_int 8)]) 0))) + (clobber (reg:CC FLAGS_REG))])] + "" + [(set_attr "type" "alu") + (set_attr "mode" "QI")]) + (define_insn "*sub_2" [(set (reg FLAGS_REG) (compare @@ -11513,6 +11592,39 @@ [(set_attr "type" "alu") (set_attr "mode" "QI")]) +(define_insn_and_split "*qi_ext_2_slp" + [(set (strict_low_part (match_operand:QI 0 "register_operand" "+&Q")) + (any_logic:QI + (subreg:QI + (match_operator:SWI248 3 "extract_operator" + [(match_operand 1 "int248_register_operand" "Q") + (const_int 8) + (const_int 8)]) 0) + (subreg:QI + (match_operator:SWI248 4 "extract_operator" + [(match_operand 2 "int248_register_operand" "Q") + (const_int 8) + (const_int 8)]) 0))) + (clobber (reg:CC FLAGS_REG))] + "!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun)" + "#" + "&& reload_completed" + [(set (strict_low_part (match_dup 0)) + (subreg:QI + (match_op_dup 4 + [(match_dup 2) (const_int 8) (const_int 8)]) 0)) + (parallel + [(set (strict_low_part (match_dup 0)) + (any_logic:QI + (subreg:QI + (match_op_dup 3 + [(match_dup 1) (const_int 8) (const_int 8)]) 0) + (match_dup 0))) + (clobber (reg:CC FLAGS_REG))])] + "" + [(set_attr "type" "alu") + (set_attr "mode" "QI")]) + (define_split [(set (match_operand:SWI248 0 "register_operand") (and:SWI248 (match_operand:SWI248 1 "nonimmediate_operand") diff --git a/gcc/testsuite/gcc.target/i386/pr78904-8.c b/gcc/testsuite/gcc.target/i386/pr78904-8.c new file mode 100644 index 000000000000..3ca1d424c7e9 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr78904-8.c @@ -0,0 +1,25 @@ +/* PR target/78904 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -masm=att" } */ +/* { dg-final { scan-assembler-not "movzbl" } } */ + +struct S1 +{ + unsigned char val; + unsigned char pad1; + unsigned short pad2; +}; + +struct S2 +{ + unsigned char pad1; + unsigned char val; + unsigned short pad2; +}; + +struct S1 test (struct S1 a, struct S2 b) +{ + a.val = b.val; + + return a; +} diff --git a/gcc/testsuite/gcc.target/i386/pr78904-8a.c b/gcc/testsuite/gcc.target/i386/pr78904-8a.c new file mode 100644 index 000000000000..fe484a79a393 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr78904-8a.c @@ -0,0 +1,23 @@ +/* PR target/78904 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -masm=att" } */ +/* { dg-final { scan-assembler-not "movzbl" } } */ + +struct S1 +{ + unsigned char val; + unsigned char pad1; +}; + +struct S2 +{ + unsigned char pad1; + unsigned char val; +}; + +struct S1 test (struct S1 a, struct S2 b) +{ + a.val = b.val; + + return a; +} diff --git a/gcc/testsuite/gcc.target/i386/pr78904-8b.c b/gcc/testsuite/gcc.target/i386/pr78904-8b.c new file mode 100644 index 000000000000..cfed7c18b093 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr78904-8b.c @@ -0,0 +1,27 @@ +/* PR target/78904 */ +/* { dg-do compile { target { ! ia32 } } } */ +/* { dg-options "-O2 -masm=att" } */ +/* { dg-final { scan-assembler-not "movzbl" } } */ + +struct S1 +{ + unsigned char val; + unsigned char pad1; + unsigned short pad2; + unsigned int pad3; +}; + +struct S2 +{ + unsigned char pad1; + unsigned char val; + unsigned short pad2; + unsigned int pad3; +}; + +struct S1 test (struct S1 a, struct S2 b) +{ + a.val = b.val; + + return a; +} diff --git a/gcc/testsuite/gcc.target/i386/pr78904-9.c b/gcc/testsuite/gcc.target/i386/pr78904-9.c new file mode 100644 index 000000000000..aa80be4c8b5c --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr78904-9.c @@ -0,0 +1,63 @@ +/* PR target/78904 */ +/* { dg-do compile { target { ! ia32 } } } */ +/* { dg-options "-O2 -masm=att" } */ +/* { dg-final { scan-assembler-not "movzbl" } } */ + +struct S1 +{ + unsigned char val; + unsigned char pad1; + unsigned short pad2; +}; + +struct S2 +{ + unsigned char pad1; + unsigned char val; + unsigned short pad2; +}; + +struct S1 test_and (struct S1 a, struct S2 b, struct S2 c) +{ + a.val = b.val & c.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]andb" } } */ + +struct S1 test_or (struct S1 a, struct S2 b, struct S2 c) +{ + a.val = b.val | c.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]orb" } } */ + +struct S1 test_xor (struct S1 a, struct S2 b, struct S2 c) +{ + a.val = b.val ^ c.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]xorb" } } */ + +struct S1 test_add (struct S1 a, struct S2 b, struct S2 c) +{ + a.val = b.val + c.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]addb" } } */ + +struct S1 test_sub (struct S1 a, struct S2 b, struct S2 c) +{ + a.val = b.val - c.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]subb" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr78904-9a.c b/gcc/testsuite/gcc.target/i386/pr78904-9a.c new file mode 100644 index 000000000000..009ae2411997 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr78904-9a.c @@ -0,0 +1,61 @@ +/* PR target/78904 */ +/* { dg-do compile { target { ! ia32 } } } */ +/* { dg-options "-O2 -masm=att" } */ +/* { dg-final { scan-assembler-not "movzbl" } } */ + +struct S1 +{ + unsigned char val; + unsigned char pad1; +}; + +struct S2 +{ + unsigned char pad1; + unsigned char val; +}; + +struct S1 test_and (struct S1 a, struct S2 b, struct S2 c) +{ + a.val = b.val & c.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]andb" } } */ + +struct S1 test_or (struct S1 a, struct S2 b, struct S2 c) +{ + a.val = b.val | c.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]orb" } } */ + +struct S1 test_xor (struct S1 a, struct S2 b, struct S2 c) +{ + a.val = b.val ^ c.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]xorb" } } */ + +struct S1 test_add (struct S1 a, struct S2 b, struct S2 c) +{ + a.val = b.val + c.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]addb" } } */ + +struct S1 test_sub (struct S1 a, struct S2 b, struct S2 c) +{ + a.val = b.val - c.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]subb" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr78904-9b.c b/gcc/testsuite/gcc.target/i386/pr78904-9b.c new file mode 100644 index 000000000000..bf68f8bef200 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr78904-9b.c @@ -0,0 +1,65 @@ +/* PR target/78904 */ +/* { dg-do compile { target { ! ia32 } } } */ +/* { dg-options "-O2 -masm=att" } */ +/* { dg-final { scan-assembler-not "movzbl" } } */ + +struct S1 +{ + unsigned char val; + unsigned char pad1; + unsigned short pad2; + unsigned int pad3; +}; + +struct S2 +{ + unsigned char pad1; + unsigned char val; + unsigned short pad2; + unsigned int pad3; +}; + +struct S1 test_and (struct S1 a, struct S2 b, struct S2 c) +{ + a.val = b.val & c.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]andb" } } */ + +struct S1 test_or (struct S1 a, struct S2 b, struct S2 c) +{ + a.val = b.val | c.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]orb" } } */ + +struct S1 test_xor (struct S1 a, struct S2 b, struct S2 c) +{ + a.val = b.val ^ c.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]xorb" } } */ + +struct S1 test_add (struct S1 a, struct S2 b, struct S2 c) +{ + a.val = b.val + c.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]addb" } } */ + +struct S1 test_sub (struct S1 a, struct S2 b, struct S2 c) +{ + a.val = b.val - c.val; + + return a; +} + +/* { dg-final { scan-assembler "\[ \t\]subb" } } */ From 17cc2e57f41d88a0a828b4239b5ce852e8ec1406 Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Thu, 16 Nov 2023 00:17:42 +0000 Subject: [PATCH 088/169] Daily bump. --- gcc/ChangeLog | 197 ++++++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/cp/ChangeLog | 56 ++++++++++++ gcc/testsuite/ChangeLog | 151 ++++++++++++++++++++++++++++++ libgomp/ChangeLog | 6 ++ libiberty/ChangeLog | 4 + libsanitizer/ChangeLog | 17 ++++ libstdc++-v3/ChangeLog | 26 ++++++ 8 files changed, 458 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 337381fabe02..f72344d7cc03 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,200 @@ +2023-11-15 Uros Bizjak + + PR target/78904 + * config/i386/i386.md (*movstrictqi_ext_1): New insn pattern. + (*addqi_ext_2_slp): New define_insn_and_split pattern. + (*subqi_ext_2_slp): Ditto. + (*qi_ext_2_slp): Ditto. + +2023-11-15 Patrick O'Neill + + * common/config/riscv/riscv-common.cc + (riscv_subset_list::parse_std_ext): Emit an error and skip to + the next extension when a non-canonical ordering is detected. + +2023-11-15 Bernhard Reutner-Fischer + + * gcc-rich-location.cc (maybe_range_label_for_tree_type_mismatch::get_text): + Revert using the macro CAN_HAVE_LOCATION_P. + +2023-11-15 Juzhe-Zhong + + PR target/112447 + * config/riscv/riscv-vsetvl.cc (pre_vsetvl::emit_vsetvl): Insert + local vsetvl info before LCM suggested one. + Tested-by: Patrick O'Neill # pre-commit-CI #679 + Co-developed-by: Vineet Gupta + +2023-11-15 Vineet Gupta + + * config/riscv/riscv.cc (riscv_sign_extend_if_not_subreg_prom): New. + * (riscv_extend_comparands): Call New function on operands. + +2023-11-15 Uros Bizjak + + * config/i386/i386.md (*addqi_ext_1_slp): + Add "&& " before "reload_completed" in split condition. + (*subqi_ext_1_slp): Ditto. + (*qi_ext_1_slp): Ditto. + +2023-11-15 Uros Bizjak + + PR target/112540 + * config/i386/i386.md (*addqi_ext_1_slp): + Correct operand numbers in split pattern. Replace !Q constraint + of operand 1 with !qm. Add insn constrain. + (*subqi_ext_1_slp): Ditto. + (*qi_ext_1_slp): Ditto. + +2023-11-15 Thomas Schwinge + + * doc/extend.texi (Nvidia PTX Built-in Functions): Fix + copy'n'paste-o in '__builtin_nvptx_brev' description. + +2023-11-15 Roger Sayle + Thomas Schwinge + + * config/nvptx/nvptx.md (UNSPEC_BITREV): Delete. + (bitrev2): Represent using bitreverse. + +2023-11-15 Andrew Stubbs + Andrew Jenner + + * config/gcn/constraints.md: Add "a" AVGPR constraint. + * config/gcn/gcn-valu.md (*mov): Add AVGPR alternatives. + (*mov_4reg): Likewise. + (@mov_sgprbase): Likewise. + (gather_insn_1offset): Likewise. + (gather_insn_1offset_ds): Likewise. + (gather_insn_2offsets): Likewise. + (scatter_expr): Likewise. + (scatter_insn_1offset_ds): Likewise. + (scatter_insn_2offsets): Likewise. + * config/gcn/gcn.cc (MAX_NORMAL_AVGPR_COUNT): Define. + (gcn_class_max_nregs): Handle AVGPR_REGS and ALL_VGPR_REGS. + (gcn_hard_regno_mode_ok): Likewise. + (gcn_regno_reg_class): Likewise. + (gcn_spill_class): Allow spilling to AVGPRs on TARGET_CDNA1_PLUS. + (gcn_sgpr_move_p): Handle AVGPRs. + (gcn_secondary_reload): Reload AVGPRs via VGPRs. + (gcn_conditional_register_usage): Handle AVGPRs. + (gcn_vgpr_equivalent_register_operand): New function. + (gcn_valid_move_p): Check for validity of AVGPR moves. + (gcn_compute_frame_offsets): Handle AVGPRs. + (gcn_memory_move_cost): Likewise. + (gcn_register_move_cost): Likewise. + (gcn_vmem_insn_p): Handle TYPE_VOP3P_MAI. + (gcn_md_reorg): Handle AVGPRs. + (gcn_hsa_declare_function_name): Likewise. + (print_reg): Likewise. + (gcn_dwarf_register_number): Likewise. + * config/gcn/gcn.h (FIRST_AVGPR_REG): Define. + (AVGPR_REGNO): Define. + (LAST_AVGPR_REG): Define. + (SOFT_ARG_REG): Update. + (FRAME_POINTER_REGNUM): Update. + (DWARF_LINK_REGISTER): Update. + (FIRST_PSEUDO_REGISTER): Update. + (AVGPR_REGNO_P): Define. + (enum reg_class): Add AVGPR_REGS and ALL_VGPR_REGS. + (REG_CLASS_CONTENTS): Add new register classes and add entries for + AVGPRs to all classes. + (REGISTER_NAMES): Add AVGPRs. + * config/gcn/gcn.md (FIRST_AVGPR_REG, LAST_AVGPR_REG): Define. + (AP_REGNUM, FP_REGNUM): Update. + (define_attr "type"): Add vop3p_mai. + (define_attr "unit"): Handle vop3p_mai. + (define_attr "gcn_version"): Add "cdna2". + (define_attr "enabled"): Handle cdna2. + (*mov_insn): Add AVGPR alternatives. + (*movti_insn): Likewise. + * config/gcn/mkoffload.cc (isa_has_combined_avgprs): New. + (process_asm): Process avgpr_count. + * config/gcn/predicates.md (gcn_avgpr_register_operand): New. + (gcn_avgpr_hard_register_operand): New. + * doc/md.texi: Document the "a" constraint. + +2023-11-15 Andrew Stubbs + + * config/gcn/gcn-valu.md (mov_sgprbase): Add @ modifier. + (reload_in): Delete. + (reload_out): Delete. + * config/gcn/gcn.cc (CODE_FOR): Delete. + (get_code_for_##PREFIX##vN##SUFFIX): Delete. + (CODE_FOR_OP): Delete. + (get_code_for_##PREFIX): Delete. + (gcn_secondary_reload): Replace "get_code_for" with "code_for". + +2023-11-15 Stefan Schulze Frielinghaus + + * config/s390/t-s390: Generate s390-gen-builtins.h without + linemarkers. + +2023-11-15 Richard Biener + + PR tree-optimization/112282 + * tree-if-conv.cc (ifcvt_hoist_invariants): Only hoist from + the loop header. + +2023-11-15 Richard Biener + + * tree-vect-slp.cc (vect_slp_region): Also clear visited flag when + we skipped an instance due to -fdbg-cnt. + +2023-11-15 Xi Ruoyao + + * config/loongarch/loongarch.cc + (loongarch_memmodel_needs_release_fence): Remove. + (loongarch_cas_failure_memorder_needs_acquire): New static + function. + (loongarch_print_operand): Redefine 'G' for the barrier on CAS + failure. + * config/loongarch/sync.md (atomic_cas_value_strong): + Remove the redundant barrier before the LL instruction, and + emit an acquire barrier on failure if needed by + failure_memorder. + (atomic_cas_value_cmp_and_7_): Likewise. + (atomic_cas_value_add_7_): Remove the unnecessary barrier + before the LL instruction. + (atomic_cas_value_sub_7_): Likewise. + (atomic_cas_value_and_7_): Likewise. + (atomic_cas_value_xor_7_): Likewise. + (atomic_cas_value_or_7_): Likewise. + (atomic_cas_value_nand_7_): Likewise. + (atomic_cas_value_exchange_7_): Likewise. + +2023-11-15 Juzhe-Zhong + + * config/riscv/riscv-v.cc (expand_vector_init_trailing_same_elem): New function. + (expand_vec_init): Add trailing optimization. + +2023-11-15 Pan Li + + * config/riscv/riscv-v.cc (rvv_builder::get_merge_scalar_mask): + Add inner_mode mask arg for mask int mode. + (get_repeating_sequence_dup_machine_mode): Add mask_bit_mode arg + to get the good enough vector int mode on precision. + (expand_vector_init_merge_repeating_sequence): Pass required args + to above func. + +2023-11-15 Juzhe-Zhong + + PR target/112535 + * config/riscv/riscv.cc (riscv_legitimate_address_p): Disallow RVV modes base address. + +2023-11-15 David Malcolm + + * json.cc (selftest::assert_print_eq): Add "loc" param and use + ASSERT_STREQ_AT. + (ASSERT_PRINT_EQ): New macro. + (selftest::test_writing_objects): Use ASSERT_PRINT_EQ to capture + source location of assertion. + (selftest::test_writing_arrays): Likewise. + (selftest::test_writing_float_numbers): Likewise. + (selftest::test_writing_integer_numbers): Likewise. + (selftest::test_writing_strings): Likewise. + (selftest::test_writing_literals): Likewise. + 2023-11-14 David Malcolm PR analyzer/103533 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 697a5fceddd1..7c322b01344c 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20231115 +20231116 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 462f35aae738..7702a660653a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,59 @@ +2023-11-15 Bernhard Reutner-Fischer + + * tree.cc (build_cplus_array_type): Revert using the macro + CAN_HAVE_LOCATION_P. + +2023-11-15 Patrick Palka + + PR c++/112515 + * decl.cc (is_direct_enum_init): Check type-dependence of the + single element. + +2023-11-15 Patrick Palka + + PR c++/101043 + * tree.cc (strip_typedefs_expr) : Handle + non-empty TREE_PURPOSE. + +2023-11-15 Patrick Palka + + PR c++/112427 + * tree.cc (build_min_non_dep): Propagate TREE_SIDE_EFFECTS from + the original arguments. + (build_min_non_dep_call_vec): Likewise. + * typeck2.cc (build_m_component_ref): Use cp_convert, build2 and + cp_fully_fold instead of fold_build_pointer_plus and fold_convert. + Don't build the POINTER_PLUS_EXPR in a template context. + +2023-11-15 Patrick Palka + + PR c++/111703 + PR c++/112269 + * constexpr.cc (potential_constant_expression_1) : + Only consider var_in_maybe_constexpr_fn if 'now' is false. + : Likewise. + +2023-11-15 Jakub Jelinek + + * typeck.cc: Implement C++26 P2864R2 - Remove Deprecated Arithmetic + Conversion on Enumerations From C++26. + (do_warn_enum_conversions): Return bool rather than void, add COMPLAIN + argument. Use pedwarn rather than warning_at for C++26 and remove + " is deprecated" part of the diagnostics in that case. For SFINAE + in C++26 return true on newly erroneous cases. + (cp_build_binary_op): For C++26 call do_warn_enum_conversions + unconditionally, pass complain argument to it and if it returns true, + return error_mark_node. + * call.cc (build_conditional_expr): Use pedwarn rather than warning_at + for C++26 and remove " is deprecated" part of the diagnostics in that + case and check for complain & tf_warning_or_error. Use emit_diagnostic + with cxx_dialect >= cxx26 ? DK_PEDWARN : DK_WARNING. For SFINAE in + C++26 return error_mark_node on newly erroneous cases. + (build_new_op): Use emit_diagnostic with cxx_dialect >= cxx26 + ? DK_PEDWARN : DK_WARNING and complain & tf_warning_or_error check + for C++26. For SFINAE in C++26 return error_mark_node on newly + erroneous cases. + 2023-11-14 Nathaniel Shead PR c++/103499 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f4d80909bc1d..77eb93d0340b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,154 @@ +2023-11-15 Uros Bizjak + + PR target/78904 + * gcc.target/i386/pr78904-8.c: New test. + * gcc.target/i386/pr78904-8a.c: New test. + * gcc.target/i386/pr78904-8b.c: New test. + * gcc.target/i386/pr78904-9.c: New test. + * gcc.target/i386/pr78904-9a.c: New test. + * gcc.target/i386/pr78904-9b.c: New test. + +2023-11-15 Patrick O'Neill + + * gcc.target/riscv/arch-27.c: New test. + * gcc.target/riscv/arch-28.c: New test. + +2023-11-15 Patrick Palka + + PR c++/112515 + * g++.dg/template/non-dependent30.C: New test. + +2023-11-15 Patrick Palka + + PR c++/101043 + * g++.dg/cpp2a/concepts-requires37.C: New test. + +2023-11-15 Patrick Palka + + PR c++/112427 + * g++.dg/template/non-dependent29.C: New test. + +2023-11-15 Patrick Palka + + PR c++/111703 + PR c++/112269 + * g++.dg/cpp2a/concepts-fn8.C: New test. + +2023-11-15 Roger Sayle + Thomas Schwinge + + * gcc.target/nvptx/brev-2-O2.c: Adjust. + * gcc.target/nvptx/brevll-2-O2.c: Likewise. + +2023-11-15 Thomas Schwinge + + * gcc.target/nvptx/brev-1.c: Extend. + * gcc.target/nvptx/brev-2.c: Rename to... + * gcc.target/nvptx/brev-2-O2.c: ... this, and extend. Copy to... + * gcc.target/nvptx/brev-2-O0.c: ... this, and adapt for '-O0'. + * gcc.target/nvptx/brevll-1.c: Extend. + * gcc.target/nvptx/brevll-2.c: Rename to... + * gcc.target/nvptx/brevll-2-O2.c: ... this, and extend. Copy to... + * gcc.target/nvptx/brevll-2-O0.c: ... this, and adapt for '-O0'. + +2023-11-15 Andrew Stubbs + Andrew Jenner + + * gcc.target/gcn/avgpr-mem-double.c: New test. + * gcc.target/gcn/avgpr-mem-int.c: New test. + * gcc.target/gcn/avgpr-mem-long.c: New test. + * gcc.target/gcn/avgpr-mem-short.c: New test. + * gcc.target/gcn/avgpr-spill-double.c: New test. + * gcc.target/gcn/avgpr-spill-int.c: New test. + * gcc.target/gcn/avgpr-spill-long.c: New test. + * gcc.target/gcn/avgpr-spill-short.c: New test. + +2023-11-15 Richard Biener + + PR tree-optimization/112282 + * gcc.dg/torture/pr112282.c: New testcase. + +2023-11-15 Jakub Jelinek + + * c-c++-common/asan/sanity-check-pure-c-1.c: Adjust for interceptor_ + or wrap_ substrings possibly not being emitted in newer libasan. + +2023-11-15 Xi Ruoyao + + * gcc.target/loongarch/cas-acquire.c: New test. + +2023-11-15 Richard Earnshaw + + * lib/target-supports.exp (check_effective_target_arm_arch_v6t2_hw_ok): + Rename to... + (check_effective_target_arm_arch_v6t2_hw): ... this. Fix checks. + * gcc.target/arm/acle/data-intrinsics-armv6.c: Update pre-check. + * gcc.target/arm/acle/data-intrinsics-rbit.c: Likewise. + +2023-11-15 Juzhe-Zhong + + * gcc.target/riscv/rvv/autovec/vls/def.h: Add trailing tests. + * gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-1.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-2.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-1.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-2.c: New test. + * gcc.target/riscv/rvv/autovec/vls/trailing-1.c: New test. + * gcc.target/riscv/rvv/autovec/vls/trailing-2.c: New test. + * gcc.target/riscv/rvv/autovec/vls/trailing-3.c: New test. + * gcc.target/riscv/rvv/autovec/vls/trailing-4.c: New test. + * gcc.target/riscv/rvv/autovec/vls/trailing-5.c: New test. + * gcc.target/riscv/rvv/autovec/vls/trailing-6.c: New test. + * gcc.target/riscv/rvv/autovec/vls/trailing-7.c: New test. + +2023-11-15 Jakub Jelinek + + * gcc.dg/cpp/if-2.c: Adjust expected diagnostics for 16-bit targets. + +2023-11-15 Pan Li + + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-10.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-11.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-12.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-13.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-14.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-15.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-6.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-7.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-8.c: New test. + * gcc.target/riscv/rvv/autovec/vls-vlmax/init-repeat-sequence-9.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-0.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-1.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-2.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-3.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-4.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-5.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-6.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-7.c: New test. + * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-8.c: New test. + +2023-11-15 Juzhe-Zhong + + PR target/112535 + * gcc.target/riscv/rvv/autovec/pr112535.c: New test. + +2023-11-15 Jakub Jelinek + + * g++.dg/cpp26/enum-conv1.C: New test. + * g++.dg/cpp2a/enum-conv1.C: Adjust expected diagnostics in C++26. + * g++.dg/diagnostic/enum3.C: Likewise. + * g++.dg/parse/attr3.C: Likewise. + * g++.dg/cpp0x/linkage2.C: Likewise. + +2023-11-15 Alexandre Oliva + + * g++.dg/tsan/pthread_cond_clockwait.C: Add fallback overload. + +2023-11-15 Alexandre Oliva + + * gcc.target/i386/pr95126-m32-3.c: Add + -mno-accumulate-outgoing-args. + * gcc.target/i386/pr95126-m32-4.c: Likewise. + 2023-11-14 Lewis Hyatt PR pch/9471 diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index ec3bb886006c..8d2b812cea29 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,9 @@ +2023-11-15 Andrew Stubbs + Andrew Jenner + + * plugin/plugin-gcn.c (max_isa_vgprs): New. + (run_kernel): CDNA2 devices have more VGPRs. + 2023-11-10 Tobias Burnus * libgomp.texi (OpenMP Impl. Status): Update for OpenMP TR12; diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index c9d4d81e8563..c4527444f81f 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,7 @@ +2023-11-15 Mark Wielaard + + * aclocal.m4: Rebuild. + 2023-11-10 Brendan Shanks * configure.ac (AC_CHECK_HEADERS): Add spawn.h. diff --git a/libsanitizer/ChangeLog b/libsanitizer/ChangeLog index 5903f2c1c7c1..7b8ee622f14d 100644 --- a/libsanitizer/ChangeLog +++ b/libsanitizer/ChangeLog @@ -1,3 +1,20 @@ +2023-11-15 Jakub Jelinek + + * LOCAL_PATCHES: Update revisions. + +2023-11-15 Jakub Jelinek + + * ubsan/ubsan_handlers_cxx.h (FunctionTypeMismatchData): Forward + declare. + (__ubsan_handle_function_type_mismatch_v1, + __ubsan_handle_function_type_mismatch_v1_abort): Declare. + * ubsan/ubsan_handlers_cxx.cpp (handleFunctionTypeMismatch, + __ubsan_handle_function_type_mismatch_v1, + __ubsan_handle_function_type_mismatch_v1_abort): New functions readded + for backwards compatibility from older ubsan. + * ubsan/ubsan_interface.inc (__ubsan_handle_function_type_mismatch_v1, + __ubsan_handle_function_type_mismatch_v1_abort): Readd. + 2023-10-22 Iain Sandoe * asan/Makefile.am: Handle Darwin rpaths. diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 323daf937a81..5ee3cf86312b 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,29 @@ +2023-11-15 Jonathan Wakely + + PR libstdc++/112491 + * python/libstdcxx/v6/xmethods.py (DequeWorkerBase.index): + Correctly handle unused capacity at the start of the first node. + * testsuite/libstdc++-xmethods/deque.cc: Check index operator + when elements have been removed from the front. + +2023-11-15 Jonathan Wakely + + * include/std/stacktrace (basic_stacktrace::at): Fix class name + in exception message. + * testsuite/19_diagnostics/stacktrace/hash.cc: Do not fail if + current() returns a non-empty stacktrace. + +2023-11-15 Alexandre Oliva + + Revert: + 2023-11-15 Alexandre Oliva + + * include/bits/stl_bvector.h (_GLIBCXX_ALWAYS_INLINE): Undef. + +2023-11-15 Alexandre Oliva + + * include/bits/stl_bvector.h (_GLIBCXX_ALWAYS_INLINE): Undef. + 2023-11-14 Cassio Neri * include/std/chrono (operator-(const weekday&, const weekday&)): From 9251db0dabc8e75c31b49a5b589124e9a2bc8299 Mon Sep 17 00:00:00 2001 From: Hongyu Wang Date: Thu, 9 Nov 2023 13:11:41 +0800 Subject: [PATCH 089/169] [i386] APX: Fix EGPR usage in several patterns. For vextract/insert{if}128 they cannot adopt EGPR in their memory operand, all related pattern should be adjusted to disable EGPR usage on them. Also fix a wrong gpr16 attr for insertps. gcc/ChangeLog: * config/i386/sse.md (vec_extract_hi_): Add noavx512vl alternative with attr addr gpr16 and "jm" constraint. (vec_extract_hi_): Likewise for SF vector modes. (@vec_extract_hi_): Likewise. (*vec_extractv2ti): Likewise. (vec_set_hi_): Likewise. * config/i386/mmx.md (@sse4_1_insertps_): Correct gpr16 attr for each alternative. --- gcc/config/i386/mmx.md | 2 +- gcc/config/i386/sse.md | 32 ++++++++++++++++++++------------ 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/gcc/config/i386/mmx.md b/gcc/config/i386/mmx.md index a3d08bb9d3b1..355538749d16 100644 --- a/gcc/config/i386/mmx.md +++ b/gcc/config/i386/mmx.md @@ -1215,7 +1215,7 @@ } } [(set_attr "isa" "noavx,noavx,avx") - (set_attr "addr" "*,*,gpr16") + (set_attr "addr" "gpr16,gpr16,*") (set_attr "type" "sselog") (set_attr "prefix_data16" "1,1,*") (set_attr "prefix_extra" "1") diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index af482f24df4d..d250a6cb802f 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -12049,9 +12049,9 @@ (set_attr "mode" "")]) (define_insn "vec_extract_hi_" - [(set (match_operand: 0 "nonimmediate_operand" "=vm") + [(set (match_operand: 0 "nonimmediate_operand" "=xjm,vm") (vec_select: - (match_operand:VI8F_256 1 "register_operand" "v") + (match_operand:VI8F_256 1 "register_operand" "x,v") (parallel [(const_int 2) (const_int 3)])))] "TARGET_AVX" { @@ -12065,7 +12065,9 @@ else return "vextract\t{$0x1, %1, %0|%0, %1, 0x1}"; } - [(set_attr "type" "sselog1") + [(set_attr "isa" "noavx512vl,avx512vl") + (set_attr "addr" "gpr16,*") + (set_attr "type" "sselog1") (set_attr "prefix_extra" "1") (set_attr "length_immediate" "1") (set_attr "prefix" "vex") @@ -12132,7 +12134,7 @@ (set_attr "mode" "")]) (define_insn "vec_extract_hi_" - [(set (match_operand: 0 "nonimmediate_operand" "=xm, vm") + [(set (match_operand: 0 "nonimmediate_operand" "=xjm, vm") (vec_select: (match_operand:VI4F_256 1 "register_operand" "x, v") (parallel [(const_int 4) (const_int 5) @@ -12141,7 +12143,8 @@ "@ vextract\t{$0x1, %1, %0|%0, %1, 0x1} vextract32x4\t{$0x1, %1, %0|%0, %1, 0x1}" - [(set_attr "isa" "*, avx512vl") + [(set_attr "isa" "noavx512vl, avx512vl") + (set_attr "addr" "gpr16,*") (set_attr "prefix" "vex, evex") (set_attr "type" "sselog1") (set_attr "length_immediate" "1") @@ -12222,7 +12225,7 @@ "operands[1] = gen_lowpart (mode, operands[1]);") (define_insn "@vec_extract_hi_" - [(set (match_operand: 0 "nonimmediate_operand" "=xm,vm") + [(set (match_operand: 0 "nonimmediate_operand" "=xjm,vm") (vec_select: (match_operand:V16_256 1 "register_operand" "x,v") (parallel [(const_int 8) (const_int 9) @@ -12236,7 +12239,8 @@ [(set_attr "type" "sselog1") (set_attr "prefix_extra" "1") (set_attr "length_immediate" "1") - (set_attr "isa" "*,avx512vl") + (set_attr "isa" "noavx512vl,avx512vl") + (set_attr "addr" "gpr16,*") (set_attr "prefix" "vex,evex") (set_attr "mode" "OI")]) @@ -20465,7 +20469,7 @@ }) (define_insn "*vec_extractv2ti" - [(set (match_operand:TI 0 "nonimmediate_operand" "=xm,vm") + [(set (match_operand:TI 0 "nonimmediate_operand" "=xjm,vm") (vec_select:TI (match_operand:V2TI 1 "register_operand" "x,v") (parallel @@ -20477,6 +20481,8 @@ [(set_attr "type" "sselog") (set_attr "prefix_extra" "1") (set_attr "length_immediate" "1") + (set_attr "isa" "noavx512vl,avx512vl") + (set_attr "addr" "gpr16,*") (set_attr "prefix" "vex,evex") (set_attr "mode" "OI")]) @@ -27556,12 +27562,12 @@ (set_attr "mode" "")]) (define_insn "vec_set_hi_" - [(set (match_operand:VI8F_256 0 "register_operand" "=v") + [(set (match_operand:VI8F_256 0 "register_operand" "=x,v") (vec_concat:VI8F_256 (vec_select: - (match_operand:VI8F_256 1 "register_operand" "v") + (match_operand:VI8F_256 1 "register_operand" "x,v") (parallel [(const_int 0) (const_int 1)])) - (match_operand: 2 "nonimmediate_operand" "vm")))] + (match_operand: 2 "nonimmediate_operand" "xjm,vm")))] "TARGET_AVX && " { if (TARGET_AVX512DQ) @@ -27571,7 +27577,9 @@ else return "vinsert\t{$0x1, %2, %1, %0|%0, %1, %2, 0x1}"; } - [(set_attr "type" "sselog") + [(set_attr "isa" "noavx512vl,avx512vl") + (set_attr "addr" "gpr16,*") + (set_attr "type" "sselog") (set_attr "prefix_extra" "1") (set_attr "length_immediate" "1") (set_attr "prefix" "vex") From 70060dadfbf0d0af5f4cab5f3aff3223a4523606 Mon Sep 17 00:00:00 2001 From: Marek Polacek Date: Thu, 9 Nov 2023 12:25:25 -0500 Subject: [PATCH 090/169] c++: fix parsing with auto(x) [PR112410] Here we are wrongly parsing int y(auto(42)); which uses the C++23 cast-to-prvalue feature, and initializes y to 42. However, we were treating the auto as an implicit template parameter. Fixing the auto{42} case is easy, but when auto is followed by a (, I found the fix to be much more involved. For instance, we cannot use cp_parser_expression, because that can give hard errors. It's also necessary to disambiguate 'auto(i)' as 'auto i', not a cast. auto(), auto(int), auto(f)(int), auto(*), auto(i[]), auto(...), etc. are all function declarations. This patch rectifies that by undoing the implicit function template modification. In the test above, we should notice that the parameter list is ill-formed, and since we've synthesized an implicit template parameter, we undo it by calling abort_fully_implicit_template. Then, we'll parse the "(auto(42))" as an initializer. PR c++/112410 gcc/cp/ChangeLog: * parser.cc (cp_parser_direct_declarator): Maybe call abort_fully_implicit_template if it turned out the parameter list was ill-formed. gcc/testsuite/ChangeLog: * g++.dg/cpp23/auto-fncast13.C: New test. * g++.dg/cpp23/auto-fncast14.C: New test. --- gcc/cp/parser.cc | 13 +++++ gcc/testsuite/g++.dg/cpp23/auto-fncast13.C | 61 ++++++++++++++++++++++ gcc/testsuite/g++.dg/cpp23/auto-fncast14.C | 9 ++++ 3 files changed, 83 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp23/auto-fncast13.C create mode 100644 gcc/testsuite/g++.dg/cpp23/auto-fncast14.C diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index 5116bcb78f6d..d11043362150 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -23594,6 +23594,19 @@ cp_parser_direct_declarator (cp_parser* parser, /* Consume the `)'. */ parens.require_close (parser); + /* For code like + int x(auto(42)); + A a(auto(i), 42); + we have synthesized an implicit template parameter and marked + what we thought was a function as an implicit function template. + But now, having seen the whole parameter list, we know it's not + a function declaration, so undo that. */ + if (cp_parser_error_occurred (parser) + && parser->fully_implicit_function_template_p + /* Don't do this for the inner (). */ + && parser->default_arg_ok_p) + abort_fully_implicit_template (parser); + /* If all went well, parse the cv-qualifier-seq, ref-qualifier and the exception-specification. */ if (member_p || cp_parser_parse_definitely (parser)) diff --git a/gcc/testsuite/g++.dg/cpp23/auto-fncast13.C b/gcc/testsuite/g++.dg/cpp23/auto-fncast13.C new file mode 100644 index 000000000000..1bceffb70cf4 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp23/auto-fncast13.C @@ -0,0 +1,61 @@ +// PR c++/112410 +// { dg-do compile { target c++23 } } + +int f1 (auto(int) -> char); +int f2 (auto x); +int f3 (auto); +int f4 (auto(i)); + +int v1 (auto(42)); +int v2 (auto{42}); +int e1 (auto{i}); // { dg-error "not declared" } +int i; +int v3 (auto{i}); +int v4 (auto(i + 1)); +int v5 (auto(+i)); +int v6 (auto(i = 4)); + +int f5 (auto(i)); +int f6 (auto()); +int f7 (auto(int)); +int f8 (auto(f)(int)); +int f9 (auto(...) -> char); +// FIXME: ICEs (PR c++/89867) +//int f10 (auto(__attribute__((unused)) i)); +int f11 (auto((i))); +int f12 (auto(i[])); +int f13 (auto(*i)); +int f14 (auto(*)); + +int e2 (auto{}); // { dg-error "invalid use of .auto." } +int e3 (auto(i, i)); // { dg-error "invalid use of .auto." } + +char bar (int); +char baz (); +char qux (...); + +void +g (int i) +{ + f1 (bar); + f2 (42); + f3 (42); + f4 (42); + f5 (42); + f6 (baz); + f7 (bar); + f8 (bar); + f9 (qux); +// f10 (42); + f11 (42); + f12 (&i); + f13 (&i); + f14 (&i); + + v1 = 1; + v2 = 2; + v3 = 3; + v4 = 4; + v5 = 5; + v6 = 6; +} diff --git a/gcc/testsuite/g++.dg/cpp23/auto-fncast14.C b/gcc/testsuite/g++.dg/cpp23/auto-fncast14.C new file mode 100644 index 000000000000..9e7a06c87d51 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp23/auto-fncast14.C @@ -0,0 +1,9 @@ +// PR c++/112410 +// { dg-do compile { target c++23 } } + +struct A { + A(int,int); +}; + +int a; +A b1(auto(a), 42); From 6d16e460240fe547cb7d9648f91494126213c835 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Tue, 14 Nov 2023 22:27:52 -0700 Subject: [PATCH 091/169] Fix crash in libcc1 The gdb tests of the libcc1 plugin have been failing lately. I tracked this down to a crash trying to access an enum's underlying type. This patch fixes the crash by setting this type. * libcc1plugin.cc (plugin_build_enum_type): Set ENUM_UNDERLYING_TYPE. --- libcc1/libcc1plugin.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/libcc1/libcc1plugin.cc b/libcc1/libcc1plugin.cc index 283eaf206850..34dcd89b1b33 100644 --- a/libcc1/libcc1plugin.cc +++ b/libcc1/libcc1plugin.cc @@ -454,6 +454,7 @@ plugin_build_enum_type (cc1_plugin::connection *self, TYPE_PRECISION (result) = TYPE_PRECISION (underlying_int_type); TYPE_UNSIGNED (result) = TYPE_UNSIGNED (underlying_int_type); + ENUM_UNDERLYING_TYPE (result) = underlying_int_type; plugin_context *ctx = static_cast (self); return convert_out (ctx->preserve (result)); From fc6f7ab4e078aaf52c37739da73eb6416f5ec788 Mon Sep 17 00:00:00 2001 From: Juzhe-Zhong Date: Thu, 16 Nov 2023 10:58:16 +0800 Subject: [PATCH 092/169] VECT: Clear LOOP_VINFO_USING_SELECT_VL_P when loop is not partial vectorized This patch fixes ICE: https://godbolt.org/z/z8T6o6qov : In function 'b': :2:6: error: missing definition 2 | void b() { | ^ for SSA_NAME: loop_len_8 in statement: _1 = -loop_len_8; during GIMPLE pass: vect :2:6: internal compiler error: verify_ssa failed 0x7f1b56331082 __libc_start_main ???:0 Please submit a full bug report, with preprocessed source (by using -freport-bug). Please include the complete backtrace with any bug report. See for instructions. Compiler returned: 1 The root cause is we generate such IR in vectorization: _1 = -loop_len_8; vect_cst__11 = {_1, _1}; _18 = vect_vec_iv_.6_14 + vect_cst__11; loop_len_8 is uninitialized value. The IR _18 = vect_vec_iv_.6_14 + vect_cst__11; is generated because of we are adding induction variable with the result of SELECT_VL instead of VF. The code is: else if (LOOP_VINFO_USING_SELECT_VL_P (loop_vinfo)) { /* When we're using loop_len produced by SELEC_VL, the non-final iterations are not always processing VF elements. So vectorize induction variable instead of _21 = vect_vec_iv_.6_22 + { VF, ... }; We should generate: _35 = .SELECT_VL (ivtmp_33, VF); vect_cst__22 = [vec_duplicate_expr] _35; _21 = vect_vec_iv_.6_22 + vect_cst__22; */ gcc_assert (!slp_node); gimple_seq seq = NULL; vec_loop_lens *lens = &LOOP_VINFO_LENS (loop_vinfo); tree len = vect_get_loop_len (loop_vinfo, NULL, lens, 1, vectype, 0, 0); expr = force_gimple_operand (fold_convert (TREE_TYPE (step_expr), unshare_expr (len)), &seq, true, NULL_TREE); new_name = gimple_build (&seq, MULT_EXPR, TREE_TYPE (step_expr), expr, step_expr); gsi_insert_seq_before (&si, seq, GSI_SAME_STMT); step_iv_si = &si; } LOOP_VINFO_USING_SELECT_VL_P is set before loop vectorization analysis so we don't know whether it is partial vectorization or not but the induction variable depends on SELECT_VL_P is true. So update SELECT_VL_P as false when it is not partial vectorization. PR middle-end/112554 gcc/ChangeLog: * tree-vect-loop.cc (vect_determine_partial_vectors_and_peeling): Clear SELECT_VL_P for non-partial vectorization. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/pr112554.c: New test. --- .../gcc.target/riscv/rvv/autovec/pr112554.c | 12 ++++++++++++ gcc/tree-vect-loop.cc | 13 +++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112554.c diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112554.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112554.c new file mode 100644 index 000000000000..4afa7c2b15cd --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112554.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 --param=riscv-autovec-preference=fixed-vlmax" } */ + +int a; +void b() { + unsigned long c = 18446744073709551612UL; +d: + --c; + a ^= c; + if (c) + goto d; +} diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index fb8d999ee6bf..3f59139cb013 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -2657,6 +2657,19 @@ vect_determine_partial_vectors_and_peeling (loop_vec_info loop_vinfo) = (!LOOP_VINFO_USING_PARTIAL_VECTORS_P (loop_vinfo) && need_peeling_or_partial_vectors_p); + /* We set LOOP_VINFO_USING_SELECT_VL_P as true before loop vectorization + analysis that we don't know whether the loop is vectorized by partial + vectors (More details see tree-vect-loop-manip.cc). + + However, SELECT_VL vectorizaton style should only applied on partial + vectorization since SELECT_VL is the GIMPLE IR that calculates the + number of elements to be process for each iteration. + + After loop vectorization analysis, Clear LOOP_VINFO_USING_SELECT_VL_P + if it is not partial vectorized loop. */ + if (!LOOP_VINFO_USING_PARTIAL_VECTORS_P (loop_vinfo)) + LOOP_VINFO_USING_SELECT_VL_P (loop_vinfo) = false; + return opt_result::success (); } From 31bf21c78029434b7515a94477ce3565bff0743f Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Thu, 16 Nov 2023 08:03:55 +0100 Subject: [PATCH 093/169] tree-optimization/112282 - fix testcase Avoid requiring a glibc specific symbol. PR tree-optimization/112282 * gcc.dg/torture/pr112282.c: Do not use __assert_fail. --- gcc/testsuite/gcc.dg/torture/pr112282.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/gcc/testsuite/gcc.dg/torture/pr112282.c b/gcc/testsuite/gcc.dg/torture/pr112282.c index 23e0ed64b828..6190b90cf66f 100644 --- a/gcc/testsuite/gcc.dg/torture/pr112282.c +++ b/gcc/testsuite/gcc.dg/torture/pr112282.c @@ -1,7 +1,12 @@ /* { dg-do run } */ int printf(const char *, ...); -void __assert_fail(); +void abort (); +/* We need an abort that isn't noreturn. */ +void __attribute__((noipa)) my_abort () +{ + abort (); +} int a, g, h, i, v, w = 2, x, y, ab, ac, ad, ae, af, ag; static int f, j, m, n, p, r, u, aa; struct b { @@ -72,7 +77,7 @@ ak: ah.e = l.c % q.d; q.c = au.e; if ((q.d && q.c) || ah.e) - __assert_fail(); + my_abort (); q.c = 0; if (au.d > m || ah.e) w = au.c | (n & ah.c); @@ -93,7 +98,7 @@ ak: if (ah.d) o.c = l.c & o.c & q.c; if (q.d) - __assert_fail(); + my_abort (); printf("", an); printf("", q); printf("", au); From 9f35d8cd767155e9c24f5ef0944168711d38bc6b Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 16 Nov 2023 08:32:24 +0100 Subject: [PATCH 094/169] slp: Fix handling of IFN_CLZ/CTZ [PR112536] We ICE on the following testcase now that IFN_C[LT]Z calls can have one or two arguments (where 2 mean it is well defined at zero). The following patch makes us create child node only for the first argument and compatible_calls_p ensures the other argument is the same, which at least according to the testcase seems sufficient because of vect patterns. 2023-11-16 Jakub Jelinek PR tree-optimization/112536 * tree-vect-slp.cc (arg0_map): New variable. (vect_get_operand_map): For IFN_CLZ or IFN_CTZ, return arg0_map. * gcc.dg/pr112536.c: New test. --- gcc/testsuite/gcc.dg/pr112536.c | 58 +++++++++++++++++++++++++++++++++ gcc/tree-vect-slp.cc | 5 +++ 2 files changed, 63 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/pr112536.c diff --git a/gcc/testsuite/gcc.dg/pr112536.c b/gcc/testsuite/gcc.dg/pr112536.c new file mode 100644 index 000000000000..633e1312063a --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr112536.c @@ -0,0 +1,58 @@ +/* PR tree-optimization/112536 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-ipa-icf" } */ +/* { dg-additional-options "-mlzcnt -mavx512cd -mavx512vl" { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-final { scan-assembler-times "\tvplzcntd\t" 3 { target { i?86-*-* x86_64-*-* } } } } */ + +unsigned a[12]; + +void +foo (void) +{ + int i = a[0]; + int j = a[1]; + int k = a[2]; + int l = a[3]; + int e = i ? __builtin_clz (i) : __SIZEOF_INT__ * __CHAR_BIT__; + int f = j ? __builtin_clz (j) : __SIZEOF_INT__ * __CHAR_BIT__; + int g = k ? __builtin_clz (k) : __SIZEOF_INT__ * __CHAR_BIT__; + int h = l ? __builtin_clz (l) : __SIZEOF_INT__ * __CHAR_BIT__; + a[0] = e; + a[1] = f; + a[2] = g; + a[3] = h; +} + +void +bar (void) +{ + int i = a[4]; + int j = a[5]; + int k = a[6]; + int l = a[7]; + int e = i ? __builtin_clz (i) : __SIZEOF_INT__ * __CHAR_BIT__; + int f = __builtin_clz (j); + int g = __builtin_clz (k); + int h = l ? __builtin_clz (l) : __SIZEOF_INT__ * __CHAR_BIT__; + a[4] = e; + a[5] = f; + a[6] = g; + a[7] = h; +} + +void +baz (void) +{ + int i = a[8]; + int j = a[9]; + int k = a[10]; + int l = a[11]; + int e = __builtin_clz (i); + int f = j ? __builtin_clz (j) : __SIZEOF_INT__ * __CHAR_BIT__; + int g = __builtin_clz (k); + int h = l ? __builtin_clz (l) : __SIZEOF_INT__ * __CHAR_BIT__; + a[8] = e; + a[9] = f; + a[10] = g; + a[11] = h; +} diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index 33c4d1308f61..4a09b3c2aca4 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -505,6 +505,7 @@ static const int cond_expr_maps[3][5] = { { 4, -2, -1, 1, 2 }, { 4, -1, -2, 2, 1 } }; +static const int arg0_map[] = { 1, 0 }; static const int arg1_map[] = { 1, 1 }; static const int arg2_map[] = { 1, 2 }; static const int arg1_arg4_map[] = { 2, 1, 4 }; @@ -580,6 +581,10 @@ vect_get_operand_map (const gimple *stmt, bool gather_scatter_p = false, return nullptr; } + case IFN_CLZ: + case IFN_CTZ: + return arg0_map; + default: break; } From f158bd511df1f55ebbbc0df3dee52c4400291984 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 16 Nov 2023 08:33:18 +0100 Subject: [PATCH 095/169] i386: Fix mov imm,%rax; mov %rdi,%rdx; mulx %rax -> mov imm,%rdx; mulx %rdi peephole2 [PR112526] The following testcase is miscompiled on x86_64 since PR110551 r14-4968 commit. That commit added 2 peephole2s, one for mov imm,%rXX; mov %rYY,%rax; mulq %rXX -> mov imm,%rax; mulq %rYY which I believe is ok, and another one for mov imm,%rXX; mov %rYY,%rdx; mulx %rXX, %rZZ, %rWW -> mov imm,%rdx; mulx %rYY, %rZZ, %rWW which is wrong. Both peephole2s verify that %rXX above is dead at the end of the pattern, by checking if %rXX is either one of the registers overwritten in the multiplication (%rdx:%rax in the first case, the 2 destination registers of mulx in the latter case), because we no longer set %rXX to that immediate (we set %rax resp. %rdx to it instead) when the peephole2 replaces it. But, we also need to ensure that the other register previously set to the value of %rYY and newly to imm isn't used after the multiplication, and neither of the peephole2s does that. Now, for the first one (at least assuming in the % pattern the matching operand (i.e. hardcoded %rax resp. %rdx) after RA will always go first) I think it is always the case, because operands[2] if it must be %rax register will be overwritten by mulq writing to %rdx:%rax. But in the second case, there is no reason why %rdx couldn't be used after the pattern, and if it is (like in the testcase), we can't make those changes. So, the patch checks similarly to operands[0] that operands[2] (which ought to be %rdx if RA puts the % match_dup operand first and nothing swaps it afterwards) is either the same register as one of the destination registers of mulx or dies at the end of the multiplication. 2023-11-16 Jakub Jelinek PR target/112526 * config/i386/i386.md (mov imm,%rax; mov %rdi,%rdx; mulx %rax -> mov imm,%rdx; mulx %rdi): Verify in define_peephole2 that operands[2] dies or is overwritten at the end of multiplication. * gcc.target/i386/bmi2-pr112526.c: New test. --- gcc/config/i386/i386.md | 5 +++- gcc/testsuite/gcc.target/i386/bmi2-pr112526.c | 27 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/i386/bmi2-pr112526.c diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 26cdb21d3c00..a364c43641fe 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -9997,7 +9997,10 @@ && REGNO (operands[0]) != REGNO (operands[3]) && (REGNO (operands[0]) == REGNO (operands[4]) || REGNO (operands[0]) == REGNO (operands[5]) - || peep2_reg_dead_p (3, operands[0]))" + || peep2_reg_dead_p (3, operands[0])) + && (REGNO (operands[2]) == REGNO (operands[4]) + || REGNO (operands[2]) == REGNO (operands[5]) + || peep2_reg_dead_p (3, operands[2]))" [(set (match_dup 2) (match_dup 1)) (parallel [(set (match_dup 4) (mult:DWIH (match_dup 2) (match_dup 3))) diff --git a/gcc/testsuite/gcc.target/i386/bmi2-pr112526.c b/gcc/testsuite/gcc.target/i386/bmi2-pr112526.c new file mode 100644 index 000000000000..7a3c6f14982f --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/bmi2-pr112526.c @@ -0,0 +1,27 @@ +/* PR target/112526 */ +/* { dg-do run { target { bmi2 && int128 } } } */ +/* { dg-options "-O2 -mbmi2" } */ + +#include "bmi2-check.h" + +__attribute__((noipa)) void +foo (unsigned long x, unsigned __int128 *y, unsigned long z, unsigned long *w) +{ + register unsigned long a __asm ("%r10") = x + z; + register unsigned __int128 b __asm ("%r8") = ((unsigned __int128) a) * 257342423UL; + asm volatile ("" : "+r" (b)); + asm volatile ("" : "+d" (a)); + *y = b; + *w = a; +} + +static void +bmi2_test () +{ + unsigned __int128 y; + unsigned long w; + foo (10268318293806702989UL, &y, 4702524958196331333UL, &w); + if (y != ((((unsigned __int128) 0xc72d2c9UL) << 64) | 0x9586adfdc95b225eUL) + || w != 14970843252003034322UL) + abort (); +} From 17aca35c0ecd23de40c1352c0a7220bad3f11cfc Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 14 Nov 2023 15:48:03 +0000 Subject: [PATCH 096/169] libstdc++: Adjust feature test in and We don't need any library concepts to define the constraints for rvalue stream overloads, only compiler support. So change the test from using __cpp_lib_concepts to __cpp_concepts >= 201907L. libstdc++-v3/ChangeLog: * include/std/istream (__rvalue_stream_extraction_t): Test __cpp_concepts instead of __cpp_lib_concepts. * include/std/ostream (__derived_from_ios_base): Likewise. (__rvalue_stream_insertion_t): Likewise. --- libstdc++-v3/include/std/istream | 2 +- libstdc++-v3/include/std/ostream | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/include/std/istream b/libstdc++-v3/include/std/istream index 25d36973f4b0..c2b30b75957b 100644 --- a/libstdc++-v3/include/std/istream +++ b/libstdc++-v3/include/std/istream @@ -1069,7 +1069,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // 2328. Rvalue stream extraction should use perfect forwarding // 1203. More useful rvalue stream insertion -#if __cpp_lib_concepts +#if __cpp_concepts >= 201907L template requires __derived_from_ios_base<_Is> && requires (_Is& __is, _Tp&& __t) { __is >> std::forward<_Tp>(__t); } diff --git a/libstdc++-v3/include/std/ostream b/libstdc++-v3/include/std/ostream index 5f973fa11ed6..1de1c1bd359d 100644 --- a/libstdc++-v3/include/std/ostream +++ b/libstdc++-v3/include/std/ostream @@ -763,7 +763,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // _GLIBCXX_RESOLVE_LIB_DEFECTS // 1203. More useful rvalue stream insertion -#if __cpp_lib_concepts +#if __cpp_concepts >= 201907L // Use concepts if possible because they're cheaper to evaluate. template concept __derived_from_ios_base = is_class_v<_Tp> From e469f9003dd1188ef87ddb62e3ab4d5cbeb905b4 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 14 Nov 2023 19:22:47 +0000 Subject: [PATCH 097/169] libstdc++: Use 202100L as feature test check for C++23 I noticed that our C++23 features were not being defined when using Clang 16 with -std=c++2b, because it only defines __cplusplus=202101L but uses 202302L since my r14-3252-g0c316669b092fb change. This changes to use 202100 instead of the final 202302 value so that we support Clang 16's -std=c++2b mode. libstdc++-v3/ChangeLog: * include/bits/version.def (stds): Use >= 202100 for C++23 condition. * include/bits/version.h: Regenerate. * include/std/thread: Use > C++20 instead of >= C++23 for __cplusplus condition. --- libstdc++-v3/include/bits/version.def | 2 +- libstdc++-v3/include/bits/version.h | 76 +++++++++++++-------------- libstdc++-v3/include/std/thread | 2 +- 3 files changed, 40 insertions(+), 40 deletions(-) diff --git a/libstdc++-v3/include/bits/version.def b/libstdc++-v3/include/bits/version.def index 8f008f9048fc..2aab9426ecc1 100644 --- a/libstdc++-v3/include/bits/version.def +++ b/libstdc++-v3/include/bits/version.def @@ -1640,7 +1640,7 @@ stds[11] = ">= 201103L"; stds[14] = ">= 201402L"; stds[17] = ">= 201703L"; stds[20] = ">= 202002L"; -stds[23] = ">= 202302L"; +stds[23] = ">= 202100L"; // Should be 202302L but Clang 16 uses 202101L stds[26] = "> 202302L"; // TODO: update when finalized // Local Variables: diff --git a/libstdc++-v3/include/bits/version.h b/libstdc++-v3/include/bits/version.h index b6cb8906b4dc..6829c70cf48b 100644 --- a/libstdc++-v3/include/bits/version.h +++ b/libstdc++-v3/include/bits/version.h @@ -993,7 +993,7 @@ // from version.def line 813 #if !defined(__cpp_lib_optional) -# if (__cplusplus >= 202302L) && (__glibcxx_concepts) +# if (__cplusplus >= 202100L) && (__glibcxx_concepts) # define __glibcxx_optional 202110L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_optional) # define __cpp_lib_optional 202110L @@ -1294,7 +1294,7 @@ // from version.def line 1053 #if !defined(__cpp_lib_ranges) -# if (__cplusplus >= 202302L) && (__glibcxx_concepts) +# if (__cplusplus >= 202100L) && (__glibcxx_concepts) # define __glibcxx_ranges 202211L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges) # define __cpp_lib_ranges 202211L @@ -1354,7 +1354,7 @@ // from version.def line 1099 #if !defined(__cpp_lib_constexpr_memory) -# if (__cplusplus >= 202302L) && (__cpp_constexpr_dynamic_alloc) +# if (__cplusplus >= 202100L) && (__cpp_constexpr_dynamic_alloc) # define __glibcxx_constexpr_memory 202202L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_memory) # define __cpp_lib_constexpr_memory 202202L @@ -1583,7 +1583,7 @@ // from version.def line 1314 #if !defined(__cpp_lib_byteswap) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_byteswap 202110L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_byteswap) # define __cpp_lib_byteswap 202110L @@ -1594,7 +1594,7 @@ // from version.def line 1322 #if !defined(__cpp_lib_constexpr_charconv) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_constexpr_charconv 202207L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_charconv) # define __cpp_lib_constexpr_charconv 202207L @@ -1605,7 +1605,7 @@ // from version.def line 1330 #if !defined(__cpp_lib_constexpr_typeinfo) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_constexpr_typeinfo 202106L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_typeinfo) # define __cpp_lib_constexpr_typeinfo 202106L @@ -1616,7 +1616,7 @@ // from version.def line 1338 #if !defined(__cpp_lib_expected) -# if (__cplusplus >= 202302L) && (__cpp_concepts >= 202002L) +# if (__cplusplus >= 202100L) && (__cpp_concepts >= 202002L) # define __glibcxx_expected 202211L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_expected) # define __cpp_lib_expected 202211L @@ -1627,7 +1627,7 @@ // from version.def line 1347 #if !defined(__cpp_lib_invoke_r) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_invoke_r 202106L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_invoke_r) # define __cpp_lib_invoke_r 202106L @@ -1638,7 +1638,7 @@ // from version.def line 1355 #if !defined(__cpp_lib_is_scoped_enum) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_is_scoped_enum 202011L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_scoped_enum) # define __cpp_lib_is_scoped_enum 202011L @@ -1649,7 +1649,7 @@ // from version.def line 1363 #if !defined(__cpp_lib_reference_from_temporary) -# if (__cplusplus >= 202302L) && (__has_builtin(__reference_constructs_from_temporary) && __has_builtin(__reference_converts_from_temporary)) +# if (__cplusplus >= 202100L) && (__has_builtin(__reference_constructs_from_temporary) && __has_builtin(__reference_converts_from_temporary)) # define __glibcxx_reference_from_temporary 202202L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_reference_from_temporary) # define __cpp_lib_reference_from_temporary 202202L @@ -1660,7 +1660,7 @@ // from version.def line 1374 #if !defined(__cpp_lib_to_underlying) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_to_underlying 202102L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_underlying) # define __cpp_lib_to_underlying 202102L @@ -1671,7 +1671,7 @@ // from version.def line 1382 #if !defined(__cpp_lib_unreachable) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_unreachable 202202L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_unreachable) # define __cpp_lib_unreachable 202202L @@ -1682,7 +1682,7 @@ // from version.def line 1390 #if !defined(__cpp_lib_ranges_zip) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_ranges_zip 202110L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_zip) # define __cpp_lib_ranges_zip 202110L @@ -1693,7 +1693,7 @@ // from version.def line 1398 #if !defined(__cpp_lib_ranges_chunk) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_ranges_chunk 202202L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_chunk) # define __cpp_lib_ranges_chunk 202202L @@ -1704,7 +1704,7 @@ // from version.def line 1406 #if !defined(__cpp_lib_ranges_slide) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_ranges_slide 202202L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_slide) # define __cpp_lib_ranges_slide 202202L @@ -1715,7 +1715,7 @@ // from version.def line 1414 #if !defined(__cpp_lib_ranges_chunk_by) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_ranges_chunk_by 202202L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_chunk_by) # define __cpp_lib_ranges_chunk_by 202202L @@ -1726,7 +1726,7 @@ // from version.def line 1422 #if !defined(__cpp_lib_ranges_join_with) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_ranges_join_with 202202L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_join_with) # define __cpp_lib_ranges_join_with 202202L @@ -1737,7 +1737,7 @@ // from version.def line 1430 #if !defined(__cpp_lib_ranges_repeat) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_ranges_repeat 202207L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_repeat) # define __cpp_lib_ranges_repeat 202207L @@ -1748,7 +1748,7 @@ // from version.def line 1438 #if !defined(__cpp_lib_ranges_stride) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_ranges_stride 202207L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_stride) # define __cpp_lib_ranges_stride 202207L @@ -1759,7 +1759,7 @@ // from version.def line 1446 #if !defined(__cpp_lib_ranges_cartesian_product) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_ranges_cartesian_product 202207L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_cartesian_product) # define __cpp_lib_ranges_cartesian_product 202207L @@ -1770,7 +1770,7 @@ // from version.def line 1454 #if !defined(__cpp_lib_ranges_as_rvalue) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_ranges_as_rvalue 202207L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_as_rvalue) # define __cpp_lib_ranges_as_rvalue 202207L @@ -1781,7 +1781,7 @@ // from version.def line 1462 #if !defined(__cpp_lib_ranges_as_const) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_ranges_as_const 202207L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_as_const) # define __cpp_lib_ranges_as_const 202207L @@ -1792,7 +1792,7 @@ // from version.def line 1470 #if !defined(__cpp_lib_ranges_enumerate) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_ranges_enumerate 202302L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_enumerate) # define __cpp_lib_ranges_enumerate 202302L @@ -1803,7 +1803,7 @@ // from version.def line 1478 #if !defined(__cpp_lib_ranges_fold) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_ranges_fold 202207L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_fold) # define __cpp_lib_ranges_fold 202207L @@ -1814,7 +1814,7 @@ // from version.def line 1486 #if !defined(__cpp_lib_ranges_contains) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_ranges_contains 202207L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_contains) # define __cpp_lib_ranges_contains 202207L @@ -1825,7 +1825,7 @@ // from version.def line 1494 #if !defined(__cpp_lib_ranges_iota) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_ranges_iota 202202L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_iota) # define __cpp_lib_ranges_iota 202202L @@ -1836,7 +1836,7 @@ // from version.def line 1502 #if !defined(__cpp_lib_ranges_find_last) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_ranges_find_last 202207L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_find_last) # define __cpp_lib_ranges_find_last 202207L @@ -1847,7 +1847,7 @@ // from version.def line 1510 #if !defined(__cpp_lib_constexpr_bitset) -# if (__cplusplus >= 202302L) && _GLIBCXX_HOSTED && (__cpp_constexpr_dynamic_alloc) +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED && (__cpp_constexpr_dynamic_alloc) # define __glibcxx_constexpr_bitset 202202L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_bitset) # define __cpp_lib_constexpr_bitset 202202L @@ -1858,7 +1858,7 @@ // from version.def line 1520 #if !defined(__cpp_lib_stdatomic_h) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_stdatomic_h 202011L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_stdatomic_h) # define __cpp_lib_stdatomic_h 202011L @@ -1869,7 +1869,7 @@ // from version.def line 1528 #if !defined(__cpp_lib_adaptor_iterator_pair_constructor) -# if (__cplusplus >= 202302L) && _GLIBCXX_HOSTED +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED # define __glibcxx_adaptor_iterator_pair_constructor 202106L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_adaptor_iterator_pair_constructor) # define __cpp_lib_adaptor_iterator_pair_constructor 202106L @@ -1880,7 +1880,7 @@ // from version.def line 1537 #if !defined(__cpp_lib_formatters) -# if (__cplusplus >= 202302L) && _GLIBCXX_HOSTED +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED # define __glibcxx_formatters 202302L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_formatters) # define __cpp_lib_formatters 202302L @@ -1891,7 +1891,7 @@ // from version.def line 1546 #if !defined(__cpp_lib_forward_like) -# if (__cplusplus >= 202302L) +# if (__cplusplus >= 202100L) # define __glibcxx_forward_like 202207L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_forward_like) # define __cpp_lib_forward_like 202207L @@ -1902,7 +1902,7 @@ // from version.def line 1554 #if !defined(__cpp_lib_ios_noreplace) -# if (__cplusplus >= 202302L) && _GLIBCXX_HOSTED +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED # define __glibcxx_ios_noreplace 202207L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_ios_noreplace) # define __cpp_lib_ios_noreplace 202207L @@ -1913,7 +1913,7 @@ // from version.def line 1563 #if !defined(__cpp_lib_move_only_function) -# if (__cplusplus >= 202302L) && _GLIBCXX_HOSTED +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED # define __glibcxx_move_only_function 202110L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_move_only_function) # define __cpp_lib_move_only_function 202110L @@ -1924,7 +1924,7 @@ // from version.def line 1572 #if !defined(__cpp_lib_spanstream) -# if (__cplusplus >= 202302L) && _GLIBCXX_HOSTED && (__glibcxx_span) +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED && (__glibcxx_span) # define __glibcxx_spanstream 202106L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_spanstream) # define __cpp_lib_spanstream 202106L @@ -1935,7 +1935,7 @@ // from version.def line 1582 #if !defined(__cpp_lib_stacktrace) -# if (__cplusplus >= 202302L) && _GLIBCXX_HOSTED && (_GLIBCXX_HAVE_STACKTRACE) +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED && (_GLIBCXX_HAVE_STACKTRACE) # define __glibcxx_stacktrace 202011L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_stacktrace) # define __cpp_lib_stacktrace 202011L @@ -1946,7 +1946,7 @@ // from version.def line 1592 #if !defined(__cpp_lib_string_contains) -# if (__cplusplus >= 202302L) && _GLIBCXX_HOSTED +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED # define __glibcxx_string_contains 202011L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_contains) # define __cpp_lib_string_contains 202011L @@ -1957,7 +1957,7 @@ // from version.def line 1601 #if !defined(__cpp_lib_string_resize_and_overwrite) -# if (__cplusplus >= 202302L) && _GLIBCXX_HOSTED +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED # define __glibcxx_string_resize_and_overwrite 202110L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_resize_and_overwrite) # define __cpp_lib_string_resize_and_overwrite 202110L diff --git a/libstdc++-v3/include/std/thread b/libstdc++-v3/include/std/thread index c182a4d56c1d..39042d7cdf55 100644 --- a/libstdc++-v3/include/std/thread +++ b/libstdc++-v3/include/std/thread @@ -42,7 +42,7 @@ # include // std::stop_source, std::stop_token, std::nostopstate #endif -#if __cplusplus >= 202302L +#if __cplusplus > 202002L # include #endif From f4ab68469ccffa83f23c321e8cb675b1eaf35f0c Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 19 Sep 2023 17:46:32 +0100 Subject: [PATCH 098/169] libstdc++: Test for feature test macros more accurately Tests which check for feature test macros should use the no_pch option, so that we're really testing for the definition being in the intended header, and not just testing that it's present in (which includes all the standard headers and so defines all the macros). libstdc++-v3/ChangeLog: * testsuite/18_support/byte/requirements.cc: Disable PCH. * testsuite/18_support/destroying_delete.cc: Likewise. * testsuite/18_support/source_location/1.cc: Likewise. * testsuite/18_support/source_location/version.cc: Likewise. * testsuite/18_support/type_info/constexpr.cc: Likewise. * testsuite/18_support/uncaught_exceptions/uncaught_exceptions.cc: Likewise. * testsuite/19_diagnostics/stacktrace/output.cc: Likewise. * testsuite/19_diagnostics/stacktrace/synopsis.cc: Likewise. * testsuite/19_diagnostics/stacktrace/version.cc: Likewise. * testsuite/20_util/addressof/requirements/constexpr.cc: Likewise. * testsuite/20_util/allocator_traits/header-2.cc: Likewise. * testsuite/20_util/allocator_traits/header.cc: Likewise. * testsuite/20_util/as_const/1.cc: Likewise. Likewise. * testsuite/20_util/bitset/cons/constexpr_c++23.cc: Likewise. * testsuite/20_util/bitset/version.cc: Likewise. * testsuite/20_util/duration/arithmetic/constexpr_c++17.cc: Likewise. * testsuite/20_util/duration_cast/rounding.cc: Likewise. * testsuite/20_util/enable_shared_from_this/members/weak_from_this.cc: Likewise. * testsuite/20_util/exchange/constexpr.cc: Likewise. * testsuite/20_util/expected/synopsis.cc: Likewise. * testsuite/20_util/expected/version.cc: Likewise. * testsuite/20_util/function_objects/bind_front/1.cc: Likewise. * testsuite/20_util/function_objects/bind_front/2.cc: Likewise. * testsuite/20_util/function_objects/invoke/3.cc: Likewise. * testsuite/20_util/function_objects/invoke/4.cc: Likewise. * testsuite/20_util/function_objects/invoke/constexpr.cc: Likewise. * testsuite/20_util/function_objects/invoke/version.cc: Likewise. * testsuite/20_util/function_objects/searchers.cc: Likewise. * testsuite/20_util/integer_comparisons/1.cc: Likewise. * testsuite/20_util/integer_comparisons/2.cc: Likewise. * testsuite/20_util/is_bounded_array/value.cc: Likewise. * testsuite/20_util/is_layout_compatible/value.cc: Likewise. * testsuite/20_util/is_layout_compatible/version.cc: Likewise. * testsuite/20_util/is_nothrow_swappable/requirements/explicit_instantiation.cc: Likewise. * testsuite/20_util/is_nothrow_swappable/requirements/typedefs.cc: Likewise. * testsuite/20_util/is_nothrow_swappable/value.cc: Likewise. * testsuite/20_util/is_nothrow_swappable/value.h: Likewise. * testsuite/20_util/is_nothrow_swappable_with/requirements/explicit_instantiation.cc: Remove redundant checks already tested elsewhere. * testsuite/20_util/is_nothrow_swappable_with/requirements/typedefs.cc: Likewise. * testsuite/20_util/is_nothrow_swappable_with/value.cc: Disable PCH. * testsuite/20_util/is_pointer_interconvertible/value.cc: Likewise. * testsuite/20_util/is_pointer_interconvertible/version.cc: Likewise. * testsuite/20_util/is_scoped_enum/value.cc: Likewise. * testsuite/20_util/is_scoped_enum/version.cc: Likewise. * testsuite/20_util/is_swappable/requirements/explicit_instantiation.cc: Remove redundant checks already tested elsewhere. * testsuite/20_util/is_swappable/requirements/typedefs.cc: Remove redundant checks already tested elsewhere. * testsuite/20_util/is_swappable/value.cc: Disable PCH. * testsuite/20_util/is_swappable/value.h: Reorder headers. * testsuite/20_util/is_swappable_with/requirements/explicit_instantiation.cc: Remove redundant checks already tested elsewhere. * testsuite/20_util/is_swappable_with/requirements/typedefs.cc: Remove redundant checks already tested elsewhere. * testsuite/20_util/is_swappable_with/value.cc: Disable PCH. * testsuite/20_util/is_unbounded_array/value.cc: Likewise. * testsuite/20_util/move_only_function/cons.cc: Likewise. * testsuite/20_util/move_only_function/version.cc: Likewise. * testsuite/20_util/optional/monadic/and_then.cc: Likewise. * testsuite/20_util/optional/requirements.cc: Likewise. * testsuite/20_util/optional/version.cc: Likewise. * testsuite/20_util/owner_less/void.cc: Likewise. * testsuite/20_util/reference_from_temporary/value.cc: Likewise. * testsuite/20_util/reference_from_temporary/version.cc: Likewise. * testsuite/20_util/shared_ptr/atomic/atomic_shared_ptr.cc: Likewise. * testsuite/20_util/shared_ptr/creation/array.cc: Likewise. * testsuite/20_util/shared_ptr/creation/overwrite.cc: Likewise. * testsuite/20_util/shared_ptr/creation/version.cc: Likewise. * testsuite/20_util/time_point_cast/rounding.cc: Likewise. * testsuite/20_util/to_chars/constexpr.cc: Likewise. * testsuite/20_util/to_chars/result.cc: Likewise. * testsuite/20_util/to_chars/version.cc: Likewise. * testsuite/20_util/to_underlying/1.cc: Likewise. * testsuite/20_util/to_underlying/version.cc: Likewise. * testsuite/20_util/tuple/apply/1.cc: Likewise. * testsuite/20_util/tuple/cons/constexpr_allocator_arg_t.cc: Likewise. * testsuite/20_util/tuple/make_from_tuple/1.cc: Likewise. * testsuite/20_util/tuple/p2321r2.cc: Likewise. * testsuite/20_util/tuple/tuple_element_t.cc: Likewise. * testsuite/20_util/unique_ptr/cons/constexpr_c++20.cc: Likewise. * testsuite/20_util/unique_ptr/creation/for_overwrite.cc: Likewise. * testsuite/20_util/unreachable/1.cc: Likewise. * testsuite/20_util/unreachable/version.cc: Likewise. * testsuite/20_util/unwrap_reference/1.cc: Likewise. * testsuite/20_util/unwrap_reference/3.cc: Likewise. * testsuite/20_util/variant/constexpr.cc: Likewise. * testsuite/20_util/variant/version.cc: Likewise. * testsuite/20_util/variant/visit_inherited.cc: Likewise. * testsuite/20_util/void_t/1.cc: Likewise. * testsuite/21_strings/basic_string/capacity/char/resize_and_overwrite.cc: Likewise. * testsuite/21_strings/basic_string/cons/char/constexpr.cc: Likewise. * testsuite/21_strings/basic_string/cons/wchar_t/constexpr.cc: Likewise. * testsuite/21_strings/basic_string/erasure.cc: Likewise. * testsuite/21_strings/basic_string/numeric_conversions/char/to_string_float.cc: Likewise. * testsuite/21_strings/basic_string/numeric_conversions/version.cc: Likewise. * testsuite/21_strings/basic_string/version.cc: Likewise. * testsuite/21_strings/basic_string_view/operations/contains/char.cc: Likewise. * testsuite/21_strings/basic_string_view/operations/contains/char/2.cc: Likewise. * testsuite/21_strings/basic_string_view/operations/copy/char/constexpr.cc: Likewise. * testsuite/21_strings/char_traits/requirements/constexpr_functions_c++17.cc: Likewise. * testsuite/21_strings/char_traits/requirements/constexpr_functions_c++20.cc: Likewise. * testsuite/21_strings/char_traits/requirements/version.cc: Likewise. * testsuite/23_containers/array/comparison_operators/constexpr.cc: Likewise. * testsuite/23_containers/array/creation/1.cc: Likewise. * testsuite/23_containers/array/creation/2.cc: Likewise. * testsuite/23_containers/array/element_access/constexpr_c++17.cc: Likewise. * testsuite/23_containers/array/requirements/constexpr_fill.cc: Likewise. * testsuite/23_containers/array/requirements/constexpr_iter.cc: Likewise. * testsuite/23_containers/deque/erasure.cc: Likewise. * testsuite/23_containers/forward_list/erasure.cc: Likewise. * testsuite/23_containers/list/erasure.cc: Likewise. * testsuite/23_containers/map/erasure.cc: Likewise. * testsuite/23_containers/queue/cons_from_iters.cc: Likewise. * testsuite/23_containers/set/erasure.cc: Likewise. * testsuite/23_containers/span/1.cc: Likewise. * testsuite/23_containers/span/2.cc: Likewise. * testsuite/23_containers/stack/cons_from_iters.cc: Likewise. * testsuite/23_containers/unordered_map/erasure.cc: Likewise. * testsuite/23_containers/unordered_map/operations/1.cc: Likewise. * testsuite/23_containers/unordered_set/erasure.cc: Likewise. * testsuite/23_containers/unordered_set/operations/1.cc: Likewise. * testsuite/23_containers/vector/cons/constexpr.cc: Likewise. * testsuite/23_containers/vector/erasure.cc: Likewise. * testsuite/23_containers/vector/requirements/version.cc: Likewise. * testsuite/24_iterators/insert_iterator/constexpr.cc: Likewise. * testsuite/25_algorithms/clamp/constexpr.cc: Likewise. * testsuite/25_algorithms/clamp/requirements/explicit_instantiation/1.cc: Remove redundant checks already tested elsewhere. * testsuite/25_algorithms/constexpr_macro.cc: Likewise. * testsuite/25_algorithms/cpp_lib_constexpr.cc: Likewise. * testsuite/25_algorithms/fold_left/1.cc: Likewise. * testsuite/25_algorithms/pstl/feature_test-2.cc: Likewise. * testsuite/25_algorithms/pstl/feature_test-3.cc: Likewise. * testsuite/25_algorithms/pstl/feature_test-4.cc: Likewise. * testsuite/25_algorithms/pstl/feature_test-5.cc: Likewise. * testsuite/25_algorithms/pstl/feature_test.cc: Likewise. * testsuite/26_numerics/bit/bit.byteswap/byteswap.cc: Likewise. * testsuite/26_numerics/bit/bit.byteswap/version.cc: Likewise. * testsuite/26_numerics/bit/bit.cast/bit_cast.cc: Likewise. * testsuite/26_numerics/bit/bit.cast/version.cc: Likewise. * testsuite/26_numerics/bit/header-2.cc: Likewise. * testsuite/26_numerics/bit/header.cc: Likewise. * testsuite/26_numerics/complex/1.cc: Likewise. * testsuite/26_numerics/complex/2.cc: Likewise. * testsuite/26_numerics/endian/2.cc: Likewise. * testsuite/26_numerics/endian/3.cc: Likewise. * testsuite/26_numerics/gcd/1.cc: Likewise. * testsuite/26_numerics/lcm/1.cc: Likewise. * testsuite/26_numerics/lerp/1.cc: Likewise. * testsuite/26_numerics/lerp/version.cc: Likewise. * testsuite/26_numerics/midpoint/integral.cc: Likewise. * testsuite/26_numerics/midpoint/version.cc: Likewise. * testsuite/26_numerics/numbers/1.cc: Likewise. * testsuite/26_numerics/numbers/2.cc: Likewise. * testsuite/27_io/basic_filebuf/native_handle/char/1.cc: Likewise. * testsuite/27_io/basic_filebuf/native_handle/version.cc: Likewise. * testsuite/27_io/basic_ofstream/open/char/noreplace.cc: Likewise. * testsuite/27_io/basic_ofstream/open/wchar_t/noreplace.cc: Likewise. * testsuite/27_io/basic_syncbuf/1.cc: Likewise. * testsuite/27_io/basic_syncbuf/2.cc: Likewise. * testsuite/27_io/basic_syncstream/1.cc: Likewise. * testsuite/27_io/basic_syncstream/2.cc: Likewise. * testsuite/27_io/spanstream/1.cc: Likewise. * testsuite/27_io/spanstream/version.cc: Likewise. * testsuite/29_atomics/atomic/cons/value_init.cc: Likewise. * testsuite/29_atomics/atomic/lock_free_aliases.cc: Likewise. * testsuite/29_atomics/atomic/wait_notify/1.cc: Likewise. * testsuite/29_atomics/atomic/wait_notify/2.cc: Likewise. * testsuite/29_atomics/headers/stdatomic.h/c_compat.cc: Likewise. * testsuite/29_atomics/headers/stdatomic.h/version.cc: Likewise. * testsuite/30_threads/barrier/1.cc: Likewise. * testsuite/30_threads/barrier/2.cc: Likewise. * testsuite/30_threads/condition_variable_any/stop_token/1.cc: Likewise. * testsuite/30_threads/condition_variable_any/stop_token/2.cc: Likewise. * testsuite/30_threads/jthread/1.cc: Likewise. * testsuite/30_threads/jthread/version.cc: Likewise. * testsuite/30_threads/latch/1.cc: Likewise. * testsuite/30_threads/latch/2.cc: Likewise. * testsuite/30_threads/scoped_lock/requirements/typedefs.cc: Likewise. * testsuite/30_threads/semaphore/1.cc: Likewise. * testsuite/30_threads/semaphore/2.cc: Likewise. * testsuite/30_threads/stop_token/1.cc: Likewise. * testsuite/30_threads/stop_token/2.cc: Likewise. * testsuite/experimental/feat-char8_t.cc: Likewise. * testsuite/experimental/iterator/ostream_joiner.cc: Likewise. * testsuite/experimental/numeric/gcd.cc: Likewise. * testsuite/experimental/scopeguard/uniqueres.cc: Likewise. * testsuite/std/concepts/1.cc: Likewise. * testsuite/std/concepts/2.cc: Likewise. * testsuite/std/ranges/adaptors/as_const/1.cc: Likewise. * testsuite/std/ranges/adaptors/as_rvalue/1.cc: Likewise. * testsuite/std/ranges/adaptors/chunk/1.cc: Likewise. * testsuite/std/ranges/adaptors/chunk_by/1.cc: Likewise. * testsuite/std/ranges/adaptors/enumerate/1.cc: Likewise. * testsuite/std/ranges/adaptors/join_with/1.cc: Likewise. * testsuite/std/ranges/adaptors/slide/1.cc: Likewise. * testsuite/std/ranges/adaptors/stride/1.cc: Likewise. * testsuite/std/ranges/cartesian_product/1.cc: Likewise. * testsuite/std/ranges/headers/ranges/synopsis.cc: Likewise. * testsuite/std/ranges/repeat/1.cc: Likewise. * testsuite/std/ranges/version_c++23.cc: Likewise. * testsuite/std/ranges/zip/1.cc: Likewise. * testsuite/std/time/syn_c++20.cc: Likewise. * testsuite/experimental/feat-cxx14.cc: Likewise. Include and . * testsuite/23_containers/array/tuple_interface/get_neg.cc: Adjust dg-error line numbers. --- .../testsuite/18_support/byte/requirements.cc | 1 + .../testsuite/18_support/destroying_delete.cc | 1 + .../testsuite/18_support/source_location/1.cc | 3 +- .../18_support/source_location/version.cc | 1 + .../18_support/type_info/constexpr.cc | 1 + .../uncaught_exceptions.cc | 1 + .../19_diagnostics/stacktrace/output.cc | 1 + .../19_diagnostics/stacktrace/synopsis.cc | 1 + .../19_diagnostics/stacktrace/version.cc | 1 + .../addressof/requirements/constexpr.cc | 1 + .../20_util/allocator_traits/header-2.cc | 1 + .../20_util/allocator_traits/header.cc | 1 + libstdc++-v3/testsuite/20_util/as_const/1.cc | 1 + .../20_util/bitset/cons/constexpr_c++23.cc | 1 + .../testsuite/20_util/bitset/version.cc | 1 + .../duration/arithmetic/constexpr_c++17.cc | 1 + .../20_util/duration_cast/rounding.cc | 1 + .../members/weak_from_this.cc | 1 + .../testsuite/20_util/exchange/constexpr.cc | 1 + .../testsuite/20_util/expected/synopsis.cc | 1 + .../testsuite/20_util/expected/version.cc | 1 + .../20_util/function_objects/bind_front/1.cc | 8 +++-- .../20_util/function_objects/bind_front/2.cc | 12 ++++--- .../20_util/function_objects/invoke/3.cc | 1 + .../20_util/function_objects/invoke/4.cc | 1 + .../function_objects/invoke/constexpr.cc | 5 +-- .../function_objects/invoke/version.cc | 1 + .../20_util/function_objects/searchers.cc | 18 +++++----- .../20_util/integer_comparisons/1.cc | 1 + .../20_util/integer_comparisons/2.cc | 1 + .../20_util/is_bounded_array/value.cc | 8 +++-- .../20_util/is_layout_compatible/value.cc | 2 ++ .../20_util/is_layout_compatible/version.cc | 1 + .../requirements/explicit_instantiation.cc | 1 + .../requirements/typedefs.cc | 1 + .../20_util/is_nothrow_swappable/value.cc | 1 + .../20_util/is_nothrow_swappable/value.h | 13 ++++---- .../requirements/explicit_instantiation.cc | 6 ---- .../requirements/typedefs.cc | 6 ---- .../is_nothrow_swappable_with/value.cc | 4 ++- .../is_pointer_interconvertible/value.cc | 2 ++ .../is_pointer_interconvertible/version.cc | 1 + .../testsuite/20_util/is_scoped_enum/value.cc | 1 + .../20_util/is_scoped_enum/version.cc | 1 + .../requirements/explicit_instantiation.cc | 6 ---- .../is_swappable/requirements/typedefs.cc | 6 ---- .../testsuite/20_util/is_swappable/value.cc | 1 + .../testsuite/20_util/is_swappable/value.h | 13 ++++---- .../requirements/explicit_instantiation.cc | 6 ---- .../requirements/typedefs.cc | 6 ---- .../20_util/is_swappable_with/value.cc | 4 ++- .../20_util/is_unbounded_array/value.cc | 4 ++- .../20_util/move_only_function/cons.cc | 1 + .../20_util/move_only_function/version.cc | 1 + .../20_util/optional/monadic/and_then.cc | 1 + .../20_util/optional/requirements.cc | 1 + .../testsuite/20_util/optional/version.cc | 1 + .../testsuite/20_util/owner_less/void.cc | 3 +- .../20_util/reference_from_temporary/value.cc | 8 +++-- .../reference_from_temporary/version.cc | 1 + .../shared_ptr/atomic/atomic_shared_ptr.cc | 1 + .../20_util/shared_ptr/creation/array.cc | 1 + .../20_util/shared_ptr/creation/overwrite.cc | 1 + .../20_util/shared_ptr/creation/version.cc | 1 + .../20_util/time_point_cast/rounding.cc | 1 + .../testsuite/20_util/to_chars/constexpr.cc | 1 + .../testsuite/20_util/to_chars/result.cc | 4 ++- .../testsuite/20_util/to_chars/version.cc | 1 + .../testsuite/20_util/to_underlying/1.cc | 1 + .../20_util/to_underlying/version.cc | 1 + .../testsuite/20_util/tuple/apply/1.cc | 4 ++- .../tuple/cons/constexpr_allocator_arg_t.cc | 1 + .../20_util/tuple/make_from_tuple/1.cc | 8 +++-- .../testsuite/20_util/tuple/p2321r2.cc | 6 ++-- .../20_util/tuple/tuple_element_t.cc | 1 + .../unique_ptr/cons/constexpr_c++20.cc | 1 + .../unique_ptr/creation/for_overwrite.cc | 1 + .../testsuite/20_util/unreachable/1.cc | 1 + .../testsuite/20_util/unreachable/version.cc | 1 + .../testsuite/20_util/unwrap_reference/1.cc | 1 + .../testsuite/20_util/unwrap_reference/3.cc | 1 + .../testsuite/20_util/variant/constexpr.cc | 1 + .../testsuite/20_util/variant/version.cc | 1 + .../20_util/variant/visit_inherited.cc | 1 + libstdc++-v3/testsuite/20_util/void_t/1.cc | 1 + .../capacity/char/resize_and_overwrite.cc | 2 +- .../basic_string/cons/char/constexpr.cc | 1 + .../basic_string/cons/wchar_t/constexpr.cc | 1 + .../21_strings/basic_string/erasure.cc | 4 ++- .../char/to_string_float.cc | 33 +++++++++++-------- .../numeric_conversions/version.cc | 2 ++ .../21_strings/basic_string/version.cc | 1 + .../operations/contains/char.cc | 1 + .../operations/contains/char/2.cc | 1 + .../operations/copy/char/constexpr.cc | 1 + .../requirements/constexpr_functions_c++17.cc | 1 + .../requirements/constexpr_functions_c++20.cc | 1 + .../char_traits/requirements/version.cc | 1 + .../array/comparison_operators/constexpr.cc | 3 +- .../23_containers/array/creation/1.cc | 1 + .../23_containers/array/creation/2.cc | 1 + .../array/element_access/constexpr_c++17.cc | 1 + .../array/requirements/constexpr_fill.cc | 3 +- .../array/requirements/constexpr_iter.cc | 3 +- .../array/tuple_interface/get_neg.cc | 6 ++-- .../testsuite/23_containers/deque/erasure.cc | 4 ++- .../23_containers/forward_list/erasure.cc | 4 ++- .../testsuite/23_containers/list/erasure.cc | 4 ++- .../testsuite/23_containers/map/erasure.cc | 6 ++-- .../23_containers/queue/cons_from_iters.cc | 1 + .../testsuite/23_containers/set/erasure.cc | 4 ++- .../testsuite/23_containers/span/1.cc | 1 + .../testsuite/23_containers/span/2.cc | 1 + .../23_containers/stack/cons_from_iters.cc | 1 + .../23_containers/unordered_map/erasure.cc | 6 ++-- .../unordered_map/operations/1.cc | 1 + .../23_containers/unordered_set/erasure.cc | 4 ++- .../unordered_set/operations/1.cc | 1 + .../23_containers/vector/cons/constexpr.cc | 1 + .../testsuite/23_containers/vector/erasure.cc | 4 ++- .../vector/requirements/version.cc | 1 + .../24_iterators/insert_iterator/constexpr.cc | 1 + .../25_algorithms/clamp/constexpr.cc | 8 +++-- .../requirements/explicit_instantiation/1.cc | 6 ---- .../25_algorithms/constexpr_macro.cc | 1 + .../25_algorithms/cpp_lib_constexpr.cc | 1 + .../testsuite/25_algorithms/fold_left/1.cc | 6 ++-- .../25_algorithms/pstl/feature_test-2.cc | 1 + .../25_algorithms/pstl/feature_test-3.cc | 1 + .../25_algorithms/pstl/feature_test-4.cc | 1 + .../25_algorithms/pstl/feature_test-5.cc | 1 + .../25_algorithms/pstl/feature_test.cc | 1 + .../26_numerics/bit/bit.byteswap/byteswap.cc | 1 + .../26_numerics/bit/bit.byteswap/version.cc | 1 + .../26_numerics/bit/bit.cast/bit_cast.cc | 1 + .../26_numerics/bit/bit.cast/version.cc | 1 + .../testsuite/26_numerics/bit/header-2.cc | 1 + .../testsuite/26_numerics/bit/header.cc | 1 + .../testsuite/26_numerics/complex/1.cc | 1 + .../testsuite/26_numerics/complex/2.cc | 1 + .../testsuite/26_numerics/endian/2.cc | 1 + .../testsuite/26_numerics/endian/3.cc | 1 + libstdc++-v3/testsuite/26_numerics/gcd/1.cc | 1 + libstdc++-v3/testsuite/26_numerics/lcm/1.cc | 1 + libstdc++-v3/testsuite/26_numerics/lerp/1.cc | 1 + .../testsuite/26_numerics/lerp/version.cc | 1 + .../26_numerics/midpoint/integral.cc | 1 + .../testsuite/26_numerics/midpoint/version.cc | 1 + .../testsuite/26_numerics/numbers/1.cc | 1 + .../testsuite/26_numerics/numbers/2.cc | 1 + .../basic_filebuf/native_handle/char/1.cc | 1 + .../basic_filebuf/native_handle/version.cc | 1 + .../basic_ofstream/open/char/noreplace.cc | 1 + .../basic_ofstream/open/wchar_t/noreplace.cc | 1 + .../testsuite/27_io/basic_syncbuf/1.cc | 1 + .../testsuite/27_io/basic_syncbuf/2.cc | 1 + .../testsuite/27_io/basic_syncstream/1.cc | 1 + .../testsuite/27_io/basic_syncstream/2.cc | 1 + libstdc++-v3/testsuite/27_io/spanstream/1.cc | 1 + .../testsuite/27_io/spanstream/version.cc | 1 + .../29_atomics/atomic/cons/value_init.cc | 1 + .../29_atomics/atomic/lock_free_aliases.cc | 1 + .../29_atomics/atomic/wait_notify/1.cc | 1 + .../29_atomics/atomic/wait_notify/2.cc | 1 + .../headers/stdatomic.h/c_compat.cc | 1 + .../29_atomics/headers/stdatomic.h/version.cc | 1 + .../testsuite/30_threads/barrier/1.cc | 1 + .../testsuite/30_threads/barrier/2.cc | 1 + .../condition_variable_any/stop_token/1.cc | 1 + .../condition_variable_any/stop_token/2.cc | 1 + .../testsuite/30_threads/jthread/1.cc | 1 + .../testsuite/30_threads/jthread/version.cc | 1 + libstdc++-v3/testsuite/30_threads/latch/1.cc | 1 + libstdc++-v3/testsuite/30_threads/latch/2.cc | 1 + .../scoped_lock/requirements/typedefs.cc | 2 +- .../testsuite/30_threads/semaphore/1.cc | 1 + .../testsuite/30_threads/semaphore/2.cc | 1 + .../testsuite/30_threads/stop_token/1.cc | 1 + .../testsuite/30_threads/stop_token/2.cc | 1 + .../testsuite/experimental/feat-char8_t.cc | 1 + .../testsuite/experimental/feat-cxx14.cc | 3 ++ .../experimental/iterator/ostream_joiner.cc | 6 ++-- .../testsuite/experimental/numeric/gcd.cc | 4 ++- .../experimental/scopeguard/uniqueres.cc | 4 ++- libstdc++-v3/testsuite/std/concepts/1.cc | 1 + libstdc++-v3/testsuite/std/concepts/2.cc | 1 + .../std/ranges/adaptors/as_const/1.cc | 10 +++--- .../std/ranges/adaptors/as_rvalue/1.cc | 10 +++--- .../testsuite/std/ranges/adaptors/chunk/1.cc | 10 +++--- .../std/ranges/adaptors/chunk_by/1.cc | 10 +++--- .../std/ranges/adaptors/enumerate/1.cc | 10 +++--- .../std/ranges/adaptors/join_with/1.cc | 10 +++--- .../testsuite/std/ranges/adaptors/slide/1.cc | 10 +++--- .../testsuite/std/ranges/adaptors/stride/1.cc | 8 +++-- .../std/ranges/cartesian_product/1.cc | 10 +++--- .../std/ranges/headers/ranges/synopsis.cc | 1 + libstdc++-v3/testsuite/std/ranges/repeat/1.cc | 8 +++-- .../testsuite/std/ranges/version_c++23.cc | 1 + libstdc++-v3/testsuite/std/ranges/zip/1.cc | 10 +++--- libstdc++-v3/testsuite/std/time/syn_c++20.cc | 1 + 200 files changed, 368 insertions(+), 174 deletions(-) diff --git a/libstdc++-v3/testsuite/18_support/byte/requirements.cc b/libstdc++-v3/testsuite/18_support/byte/requirements.cc index 1d3b269a677f..1c62f762e873 100644 --- a/libstdc++-v3/testsuite/18_support/byte/requirements.cc +++ b/libstdc++-v3/testsuite/18_support/byte/requirements.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/18_support/destroying_delete.cc b/libstdc++-v3/testsuite/18_support/destroying_delete.cc index 2ee927225a0a..e6c5f28d3e4a 100644 --- a/libstdc++-v3/testsuite/18_support/destroying_delete.cc +++ b/libstdc++-v3/testsuite/18_support/destroying_delete.cc @@ -16,6 +16,7 @@ // . // { dg-do run { target c++20 } } +// { dg-add-options no_pch } #include #include diff --git a/libstdc++-v3/testsuite/18_support/source_location/1.cc b/libstdc++-v3/testsuite/18_support/source_location/1.cc index 48707b3c3e72..f89944cedd16 100644 --- a/libstdc++-v3/testsuite/18_support/source_location/1.cc +++ b/libstdc++-v3/testsuite/18_support/source_location/1.cc @@ -20,6 +20,7 @@ // { dg-options "-include string -include stdexcept" } // { dg-do run { target c++20 } } +// { dg-add-options no_pch } #include @@ -125,7 +126,7 @@ int main () member_defaulted_sl.member.file_name()); std::string_view member_defaulted_sl_fn_name( member_defaulted_sl.member.function_name()); - VERIFY(member_defaulted_sl.member.line() == 46); + VERIFY(member_defaulted_sl.member.line() == 47); // closing paren of constructor declaration VERIFY(member_defaulted_sl.member.column() == 25); VERIFY(member_defaulted_sl_fn_name.starts_with("s::s(int)"sv)); diff --git a/libstdc++-v3/testsuite/18_support/source_location/version.cc b/libstdc++-v3/testsuite/18_support/source_location/version.cc index 8cb59023e129..8cf8c5b39170 100644 --- a/libstdc++-v3/testsuite/18_support/source_location/version.cc +++ b/libstdc++-v3/testsuite/18_support/source_location/version.cc @@ -16,6 +16,7 @@ // . // { dg-do preprocess { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/18_support/type_info/constexpr.cc b/libstdc++-v3/testsuite/18_support/type_info/constexpr.cc index 9390aa45f80c..bb4bb4485c25 100644 --- a/libstdc++-v3/testsuite/18_support/type_info/constexpr.cc +++ b/libstdc++-v3/testsuite/18_support/type_info/constexpr.cc @@ -1,6 +1,7 @@ // { dg-options "-frtti" } // { dg-do compile { target c++23 } } // { dg-additional-options "-fdelete-null-pointer-checks" } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/18_support/uncaught_exceptions/uncaught_exceptions.cc b/libstdc++-v3/testsuite/18_support/uncaught_exceptions/uncaught_exceptions.cc index 7f3ddf05103b..405f81cae4d2 100644 --- a/libstdc++-v3/testsuite/18_support/uncaught_exceptions/uncaught_exceptions.cc +++ b/libstdc++-v3/testsuite/18_support/uncaught_exceptions/uncaught_exceptions.cc @@ -16,6 +16,7 @@ // . // { dg-do run { target c++17 } } +// { dg-add-options no_pch } #include #include diff --git a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/output.cc b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/output.cc index 35389ecbd85a..4960ccb85b8b 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/output.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/output.cc @@ -1,5 +1,6 @@ // { dg-do compile { target c++23 } } // { dg-require-effective-target stacktrace } +// { dg-add-options no_pch } #include #include diff --git a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/synopsis.cc b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/synopsis.cc index 5e32527b88b4..9e775b86ac97 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/synopsis.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/synopsis.cc @@ -1,6 +1,7 @@ // { dg-do compile { target c++23 } } // { dg-require-effective-target stacktrace } // { dg-require-normal-namespace "" } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/version.cc b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/version.cc index ecfaf4165c3c..21c2d48b7b50 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/version.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/version.cc @@ -1,5 +1,6 @@ // { dg-do preprocess { target c++23 } } // { dg-require-effective-target stacktrace } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/addressof/requirements/constexpr.cc b/libstdc++-v3/testsuite/20_util/addressof/requirements/constexpr.cc index bc024d69292d..38c4f0495cdb 100644 --- a/libstdc++-v3/testsuite/20_util/addressof/requirements/constexpr.cc +++ b/libstdc++-v3/testsuite/20_util/addressof/requirements/constexpr.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/allocator_traits/header-2.cc b/libstdc++-v3/testsuite/20_util/allocator_traits/header-2.cc index 9393d8a885d1..0ebef20dec3f 100644 --- a/libstdc++-v3/testsuite/20_util/allocator_traits/header-2.cc +++ b/libstdc++-v3/testsuite/20_util/allocator_traits/header-2.cc @@ -17,6 +17,7 @@ // { dg-do compile { target c++20 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/allocator_traits/header.cc b/libstdc++-v3/testsuite/20_util/allocator_traits/header.cc index 4a88abaadb73..de9327f935ad 100644 --- a/libstdc++-v3/testsuite/20_util/allocator_traits/header.cc +++ b/libstdc++-v3/testsuite/20_util/allocator_traits/header.cc @@ -17,6 +17,7 @@ // { dg-do compile { target c++20 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/as_const/1.cc b/libstdc++-v3/testsuite/20_util/as_const/1.cc index bcff9f78dda3..eae340180020 100644 --- a/libstdc++-v3/testsuite/20_util/as_const/1.cc +++ b/libstdc++-v3/testsuite/20_util/as_const/1.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/bitset/cons/constexpr_c++23.cc b/libstdc++-v3/testsuite/20_util/bitset/cons/constexpr_c++23.cc index 871d17d9b04b..7e2eba5095d2 100644 --- a/libstdc++-v3/testsuite/20_util/bitset/cons/constexpr_c++23.cc +++ b/libstdc++-v3/testsuite/20_util/bitset/cons/constexpr_c++23.cc @@ -1,6 +1,7 @@ // { dg-do compile { target c++23 } } // This test relies on std::string. // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/bitset/version.cc b/libstdc++-v3/testsuite/20_util/bitset/version.cc index 1badb29507a9..8117092b417e 100644 --- a/libstdc++-v3/testsuite/20_util/bitset/version.cc +++ b/libstdc++-v3/testsuite/20_util/bitset/version.cc @@ -1,5 +1,6 @@ // { dg-do preprocess { target c++23 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/duration/arithmetic/constexpr_c++17.cc b/libstdc++-v3/testsuite/20_util/duration/arithmetic/constexpr_c++17.cc index 6fe5475caf02..d06c5c836f31 100644 --- a/libstdc++-v3/testsuite/20_util/duration/arithmetic/constexpr_c++17.cc +++ b/libstdc++-v3/testsuite/20_util/duration/arithmetic/constexpr_c++17.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } // Copyright (C) 2011-2023 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/20_util/duration_cast/rounding.cc b/libstdc++-v3/testsuite/20_util/duration_cast/rounding.cc index 0be51916942a..77c3497a8906 100644 --- a/libstdc++-v3/testsuite/20_util/duration_cast/rounding.cc +++ b/libstdc++-v3/testsuite/20_util/duration_cast/rounding.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/enable_shared_from_this/members/weak_from_this.cc b/libstdc++-v3/testsuite/20_util/enable_shared_from_this/members/weak_from_this.cc index bd1573259456..fd47e839baa5 100644 --- a/libstdc++-v3/testsuite/20_util/enable_shared_from_this/members/weak_from_this.cc +++ b/libstdc++-v3/testsuite/20_util/enable_shared_from_this/members/weak_from_this.cc @@ -17,6 +17,7 @@ // { dg-do run { target c++17 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include #include diff --git a/libstdc++-v3/testsuite/20_util/exchange/constexpr.cc b/libstdc++-v3/testsuite/20_util/exchange/constexpr.cc index 2a7d79201b16..3c687187a24b 100644 --- a/libstdc++-v3/testsuite/20_util/exchange/constexpr.cc +++ b/libstdc++-v3/testsuite/20_util/exchange/constexpr.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/expected/synopsis.cc b/libstdc++-v3/testsuite/20_util/expected/synopsis.cc index 237754dd7800..a0d2d5bea22d 100644 --- a/libstdc++-v3/testsuite/20_util/expected/synopsis.cc +++ b/libstdc++-v3/testsuite/20_util/expected/synopsis.cc @@ -1,5 +1,6 @@ // { dg-do compile { target c++23 } } // { dg-require-normal-namespace "" } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/expected/version.cc b/libstdc++-v3/testsuite/20_util/expected/version.cc index b592e6410036..6deaa68a75e8 100644 --- a/libstdc++-v3/testsuite/20_util/expected/version.cc +++ b/libstdc++-v3/testsuite/20_util/expected/version.cc @@ -1,4 +1,5 @@ // { dg-do preprocess { target c++23 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/function_objects/bind_front/1.cc b/libstdc++-v3/testsuite/20_util/function_objects/bind_front/1.cc index 8a8c11a79c2e..3baa7219b5c6 100644 --- a/libstdc++-v3/testsuite/20_util/function_objects/bind_front/1.cc +++ b/libstdc++-v3/testsuite/20_util/function_objects/bind_front/1.cc @@ -16,16 +16,18 @@ // . // { dg-do run { target c++20 } } +// { dg-add-options no_pch } #include -#include #ifndef __cpp_lib_bind_front -# error "Feature test macro for bind_front is missing" +# error "Feature test macro for bind_front is missing in " #elif __cpp_lib_bind_front < 201902L -# error "Feature test macro for bind_front has wrong value" +# error "Feature test macro for bind_front has wrong value in " #endif +#include + using std::bind_front; using std::is_same_v; using std::is_invocable_v; diff --git a/libstdc++-v3/testsuite/20_util/function_objects/bind_front/2.cc b/libstdc++-v3/testsuite/20_util/function_objects/bind_front/2.cc index 0ea892612f66..7d349377c895 100644 --- a/libstdc++-v3/testsuite/20_util/function_objects/bind_front/2.cc +++ b/libstdc++-v3/testsuite/20_util/function_objects/bind_front/2.cc @@ -16,20 +16,22 @@ // . // { dg-do run { target c++20 } } +// { dg-add-options no_pch } #include -#include -#include -#include // P1651R0 bind_front should not unwrap reference_wrapper #ifndef __cpp_lib_bind_front -# error "Feature test macro for bind_front is missing" +# error "Feature test macro for bind_front is missing in " #elif __cpp_lib_bind_front < 201907L -# error "Feature test macro for bind_front has wrong value" +# error "Feature test macro for bind_front has wrong value in " #endif +#include +#include +#include + void functionAcceptingStringView(std::string_view) { } void diff --git a/libstdc++-v3/testsuite/20_util/function_objects/invoke/3.cc b/libstdc++-v3/testsuite/20_util/function_objects/invoke/3.cc index 1a4c9327f63e..6cb0875c3602 100644 --- a/libstdc++-v3/testsuite/20_util/function_objects/invoke/3.cc +++ b/libstdc++-v3/testsuite/20_util/function_objects/invoke/3.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/function_objects/invoke/4.cc b/libstdc++-v3/testsuite/20_util/function_objects/invoke/4.cc index 38367f70534a..9356a400c016 100644 --- a/libstdc++-v3/testsuite/20_util/function_objects/invoke/4.cc +++ b/libstdc++-v3/testsuite/20_util/function_objects/invoke/4.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++23 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/function_objects/invoke/constexpr.cc b/libstdc++-v3/testsuite/20_util/function_objects/invoke/constexpr.cc index 122e2116f1a4..4e13e8701daa 100644 --- a/libstdc++-v3/testsuite/20_util/function_objects/invoke/constexpr.cc +++ b/libstdc++-v3/testsuite/20_util/function_objects/invoke/constexpr.cc @@ -16,13 +16,14 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include #ifndef __cpp_lib_constexpr_functional -# error "Feature test macro for constexpr invoke is missing" +# error "Feature test macro for constexpr invoke is missing in " #elif __cpp_lib_constexpr_functional < 201907L -# error "Feature test macro for constexpr invoke has wrong value" +# error "Feature test macro for constexpr invoke has wrong value in " #endif constexpr int inc(int i) { return i + 1; } diff --git a/libstdc++-v3/testsuite/20_util/function_objects/invoke/version.cc b/libstdc++-v3/testsuite/20_util/function_objects/invoke/version.cc index 2dc71aea504f..cdd5505ba442 100644 --- a/libstdc++-v3/testsuite/20_util/function_objects/invoke/version.cc +++ b/libstdc++-v3/testsuite/20_util/function_objects/invoke/version.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/function_objects/searchers.cc b/libstdc++-v3/testsuite/20_util/function_objects/searchers.cc index 6f1a8dd31756..eb9f49f3da3b 100644 --- a/libstdc++-v3/testsuite/20_util/function_objects/searchers.cc +++ b/libstdc++-v3/testsuite/20_util/function_objects/searchers.cc @@ -16,22 +16,24 @@ // . // { dg-do run { target c++17 } } +// { dg-add-options no_pch } #include + +#if __STDC_HOSTED__ +# ifndef __cpp_lib_boyer_moore_searcher +# error "Feature-test macro for searchers missing in " +# elif __cpp_lib_boyer_moore_searcher < 201603 +# error "Feature-test macro for searchers has wrong value in " +# endif +#endif // HOSTED + #include #include #include #include #include -#if __STDC_HOSTED__ -# ifndef __cpp_lib_boyer_moore_searcher -# error "Feature-test macro for searchers missing" -# elif __cpp_lib_boyer_moore_searcher < 201603 -# error "Feature-test macro for searchers has wrong value" -# endif -#endif // HOSTED - using std::default_searcher; #if __STDC_HOSTED__ using std::boyer_moore_searcher; diff --git a/libstdc++-v3/testsuite/20_util/integer_comparisons/1.cc b/libstdc++-v3/testsuite/20_util/integer_comparisons/1.cc index 245fec96315e..585d8a1d3825 100644 --- a/libstdc++-v3/testsuite/20_util/integer_comparisons/1.cc +++ b/libstdc++-v3/testsuite/20_util/integer_comparisons/1.cc @@ -16,6 +16,7 @@ // . // { dg-do preprocess { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/integer_comparisons/2.cc b/libstdc++-v3/testsuite/20_util/integer_comparisons/2.cc index 3e2bf573c0b9..3979e16319f1 100644 --- a/libstdc++-v3/testsuite/20_util/integer_comparisons/2.cc +++ b/libstdc++-v3/testsuite/20_util/integer_comparisons/2.cc @@ -16,6 +16,7 @@ // . // { dg-do preprocess { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/is_bounded_array/value.cc b/libstdc++-v3/testsuite/20_util/is_bounded_array/value.cc index dd417cf6a2a4..4c7d848dcb5d 100644 --- a/libstdc++-v3/testsuite/20_util/is_bounded_array/value.cc +++ b/libstdc++-v3/testsuite/20_util/is_bounded_array/value.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } // Copyright (C) 2019-2023 Free Software Foundation, Inc. // @@ -18,14 +19,15 @@ // . #include -#include #ifndef __cpp_lib_bounded_array_traits -# error "Feature test macro for is_bounded_array is missing" +# error "Feature test macro for is_bounded_array is missing in " #elif __cpp_lib_bounded_array_traits < 201902L -# error "Feature test macro for is_bounded_array has wrong value" +# error "Feature test macro for is_bounded_array has wrong value in " #endif +#include + void test01() { using std::is_bounded_array; diff --git a/libstdc++-v3/testsuite/20_util/is_layout_compatible/value.cc b/libstdc++-v3/testsuite/20_util/is_layout_compatible/value.cc index 6232f6ac6713..51ca384ee715 100644 --- a/libstdc++-v3/testsuite/20_util/is_layout_compatible/value.cc +++ b/libstdc++-v3/testsuite/20_util/is_layout_compatible/value.cc @@ -1,4 +1,6 @@ // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } + #include #ifndef __cpp_lib_is_layout_compatible diff --git a/libstdc++-v3/testsuite/20_util/is_layout_compatible/version.cc b/libstdc++-v3/testsuite/20_util/is_layout_compatible/version.cc index be6079d6b5e9..d44442e6a2c9 100644 --- a/libstdc++-v3/testsuite/20_util/is_layout_compatible/version.cc +++ b/libstdc++-v3/testsuite/20_util/is_layout_compatible/version.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_swappable/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_swappable/requirements/explicit_instantiation.cc index 87695bcd6e88..27268eec08f5 100644 --- a/libstdc++-v3/testsuite/20_util/is_nothrow_swappable/requirements/explicit_instantiation.cc +++ b/libstdc++-v3/testsuite/20_util/is_nothrow_swappable/requirements/explicit_instantiation.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } // Copyright (C) 2015-2023 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_swappable/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_swappable/requirements/typedefs.cc index ac39c8c7b2fd..c5d4afbe7097 100644 --- a/libstdc++-v3/testsuite/20_util/is_nothrow_swappable/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/20_util/is_nothrow_swappable/requirements/typedefs.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } // Copyright (C) 2015-2023 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_swappable/value.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_swappable/value.cc index 247daf21fab5..185f4aaee746 100644 --- a/libstdc++-v3/testsuite/20_util/is_nothrow_swappable/value.cc +++ b/libstdc++-v3/testsuite/20_util/is_nothrow_swappable/value.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } // Copyright (C) 2015-2023 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_swappable/value.h b/libstdc++-v3/testsuite/20_util/is_nothrow_swappable/value.h index 45cee6915f06..fa5a642197fb 100644 --- a/libstdc++-v3/testsuite/20_util/is_nothrow_swappable/value.h +++ b/libstdc++-v3/testsuite/20_util/is_nothrow_swappable/value.h @@ -16,12 +16,6 @@ // . #include -#include -#include -#include -#include -#include -#include #if defined(test_std_is_nothrow_swappable) # ifndef __cpp_lib_is_swappable @@ -41,6 +35,13 @@ using is_nothrow_swappable = std::__is_nothrow_swappable; "test_std_is_nothrow_swappable_ext need to be defined" #endif +#include +#include +#include +#include +#include +#include + namespace funny { struct F {}; void swap(F&, F&) = delete; diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_swappable_with/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_swappable_with/requirements/explicit_instantiation.cc index aa2bade16c26..1b0dc1e2a8c2 100644 --- a/libstdc++-v3/testsuite/20_util/is_nothrow_swappable_with/requirements/explicit_instantiation.cc +++ b/libstdc++-v3/testsuite/20_util/is_nothrow_swappable_with/requirements/explicit_instantiation.cc @@ -19,12 +19,6 @@ #include -#ifndef __cpp_lib_is_swappable -# error "Feature-test macro for is_nothrow_swappable_with missing" -#elif __cpp_lib_is_swappable != 201603 -# error "Feature-test macro for is_nothrow_swappable_with has wrong value" -#endif - namespace std { typedef short test_type; diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_swappable_with/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_swappable_with/requirements/typedefs.cc index f90f19cb7476..509b5e78d3f5 100644 --- a/libstdc++-v3/testsuite/20_util/is_nothrow_swappable_with/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/20_util/is_nothrow_swappable_with/requirements/typedefs.cc @@ -19,12 +19,6 @@ #include -#ifndef __cpp_lib_is_swappable -# error "Feature-test macro for is_nothrow_swappable_with missing" -#elif __cpp_lib_is_swappable != 201603 -# error "Feature-test macro for is_nothrow_swappable_with has wrong value" -#endif - void test01() { // Check for required typedefs diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_swappable_with/value.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_swappable_with/value.cc index 50fa29723c5b..b138f84ddab9 100644 --- a/libstdc++-v3/testsuite/20_util/is_nothrow_swappable_with/value.cc +++ b/libstdc++-v3/testsuite/20_util/is_nothrow_swappable_with/value.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } // Copyright (C) 2016-2023 Free Software Foundation, Inc. // @@ -18,7 +19,6 @@ // . #include -#include #ifndef __cpp_lib_is_swappable # error "Feature-test macro for is_nothrow_swappable_with missing" @@ -26,6 +26,8 @@ # error "Feature-test macro for is_nothrow_swappable_with has wrong value" #endif +#include + namespace funny { struct T0 {}; diff --git a/libstdc++-v3/testsuite/20_util/is_pointer_interconvertible/value.cc b/libstdc++-v3/testsuite/20_util/is_pointer_interconvertible/value.cc index fb4652d932db..4d67c8c8df17 100644 --- a/libstdc++-v3/testsuite/20_util/is_pointer_interconvertible/value.cc +++ b/libstdc++-v3/testsuite/20_util/is_pointer_interconvertible/value.cc @@ -1,4 +1,6 @@ // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } + #include #ifndef __cpp_lib_is_pointer_interconvertible diff --git a/libstdc++-v3/testsuite/20_util/is_pointer_interconvertible/version.cc b/libstdc++-v3/testsuite/20_util/is_pointer_interconvertible/version.cc index 82882237e9d0..9347cc0a2ce6 100644 --- a/libstdc++-v3/testsuite/20_util/is_pointer_interconvertible/version.cc +++ b/libstdc++-v3/testsuite/20_util/is_pointer_interconvertible/version.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/is_scoped_enum/value.cc b/libstdc++-v3/testsuite/20_util/is_scoped_enum/value.cc index 43dc03be8a8b..9f3bd0277ece 100644 --- a/libstdc++-v3/testsuite/20_util/is_scoped_enum/value.cc +++ b/libstdc++-v3/testsuite/20_util/is_scoped_enum/value.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++23 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/is_scoped_enum/version.cc b/libstdc++-v3/testsuite/20_util/is_scoped_enum/version.cc index 698cb48d3b30..7ef8a2574013 100644 --- a/libstdc++-v3/testsuite/20_util/is_scoped_enum/version.cc +++ b/libstdc++-v3/testsuite/20_util/is_scoped_enum/version.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++23 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/is_swappable/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_swappable/requirements/explicit_instantiation.cc index ad3e12e5a71a..0d47bd59ca81 100644 --- a/libstdc++-v3/testsuite/20_util/is_swappable/requirements/explicit_instantiation.cc +++ b/libstdc++-v3/testsuite/20_util/is_swappable/requirements/explicit_instantiation.cc @@ -19,12 +19,6 @@ #include -#ifndef __cpp_lib_is_swappable -# error "Feature-test macro for is_swappable missing" -#elif __cpp_lib_is_swappable != 201603 -# error "Feature-test macro for is_swappable has wrong value" -#endif - namespace std { typedef short test_type; diff --git a/libstdc++-v3/testsuite/20_util/is_swappable/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_swappable/requirements/typedefs.cc index 3356d08ef697..ac742473066e 100644 --- a/libstdc++-v3/testsuite/20_util/is_swappable/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/20_util/is_swappable/requirements/typedefs.cc @@ -19,12 +19,6 @@ #include -#ifndef __cpp_lib_is_swappable -# error "Feature-test macro for is_swappable missing" -#elif __cpp_lib_is_swappable != 201603 -# error "Feature-test macro for is_swappable has wrong value" -#endif - void test01() { // Check for required typedefs diff --git a/libstdc++-v3/testsuite/20_util/is_swappable/value.cc b/libstdc++-v3/testsuite/20_util/is_swappable/value.cc index ac8753931581..6b3ee1857bd6 100644 --- a/libstdc++-v3/testsuite/20_util/is_swappable/value.cc +++ b/libstdc++-v3/testsuite/20_util/is_swappable/value.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } // Copyright (C) 2015-2023 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/20_util/is_swappable/value.h b/libstdc++-v3/testsuite/20_util/is_swappable/value.h index c532c8323d11..210509a2e7b1 100644 --- a/libstdc++-v3/testsuite/20_util/is_swappable/value.h +++ b/libstdc++-v3/testsuite/20_util/is_swappable/value.h @@ -16,12 +16,6 @@ // . #include -#include -#include -#include -#include -#include -#include #if defined(test_std_is_swappable) # ifndef __cpp_lib_is_swappable @@ -41,6 +35,13 @@ using is_swappable = std::__is_swappable; "need to be defined" #endif +#include +#include +#include +#include +#include +#include + namespace funny { struct F {}; void swap(F&, F&) = delete; diff --git a/libstdc++-v3/testsuite/20_util/is_swappable_with/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_swappable_with/requirements/explicit_instantiation.cc index 1f3bc6b12d88..c1c90aef5a2b 100644 --- a/libstdc++-v3/testsuite/20_util/is_swappable_with/requirements/explicit_instantiation.cc +++ b/libstdc++-v3/testsuite/20_util/is_swappable_with/requirements/explicit_instantiation.cc @@ -19,12 +19,6 @@ #include -#ifndef __cpp_lib_is_swappable -# error "Feature-test macro for is_swappable_with missing" -#elif __cpp_lib_is_swappable != 201603 -# error "Feature-test macro for is_swappable_with has wrong value" -#endif - namespace std { typedef short test_type; diff --git a/libstdc++-v3/testsuite/20_util/is_swappable_with/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_swappable_with/requirements/typedefs.cc index d7354e74351c..8fc3b9a5d52a 100644 --- a/libstdc++-v3/testsuite/20_util/is_swappable_with/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/20_util/is_swappable_with/requirements/typedefs.cc @@ -19,12 +19,6 @@ #include -#ifndef __cpp_lib_is_swappable -# error "Feature-test macro for is_swappable_with missing" -#elif __cpp_lib_is_swappable != 201603 -# error "Feature-test macro for is_swappable_with has wrong value" -#endif - void test01() { // Check for required typedefs diff --git a/libstdc++-v3/testsuite/20_util/is_swappable_with/value.cc b/libstdc++-v3/testsuite/20_util/is_swappable_with/value.cc index c5294485ae15..51ee09abf91b 100644 --- a/libstdc++-v3/testsuite/20_util/is_swappable_with/value.cc +++ b/libstdc++-v3/testsuite/20_util/is_swappable_with/value.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } // Copyright (C) 2016-2023 Free Software Foundation, Inc. // @@ -18,7 +19,6 @@ // . #include -#include #ifndef __cpp_lib_is_swappable # error "Feature-test macro for is_swappable_with missing" @@ -26,6 +26,8 @@ # error "Feature-test macro for is_swappable_with has wrong value" #endif +#include + namespace funny { struct T0 {}; diff --git a/libstdc++-v3/testsuite/20_util/is_unbounded_array/value.cc b/libstdc++-v3/testsuite/20_util/is_unbounded_array/value.cc index 495e1e9d89e6..7c0b422746e5 100644 --- a/libstdc++-v3/testsuite/20_util/is_unbounded_array/value.cc +++ b/libstdc++-v3/testsuite/20_util/is_unbounded_array/value.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } // Copyright (C) 2019-2023 Free Software Foundation, Inc. // @@ -18,7 +19,6 @@ // . #include -#include #ifndef __cpp_lib_bounded_array_traits # error "Feature test macro for is_unbounded_array is missing" @@ -26,6 +26,8 @@ # error "Feature test macro for is_unbounded_array has wrong value" #endif +#include + void test01() { using std::is_unbounded_array; diff --git a/libstdc++-v3/testsuite/20_util/move_only_function/cons.cc b/libstdc++-v3/testsuite/20_util/move_only_function/cons.cc index ffe2398f80c8..5498f42add58 100644 --- a/libstdc++-v3/testsuite/20_util/move_only_function/cons.cc +++ b/libstdc++-v3/testsuite/20_util/move_only_function/cons.cc @@ -1,5 +1,6 @@ // { dg-do compile { target c++23 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/move_only_function/version.cc b/libstdc++-v3/testsuite/20_util/move_only_function/version.cc index b051a63f729f..7721141b8b47 100644 --- a/libstdc++-v3/testsuite/20_util/move_only_function/version.cc +++ b/libstdc++-v3/testsuite/20_util/move_only_function/version.cc @@ -1,5 +1,6 @@ // { dg-do compile { target c++23 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/optional/monadic/and_then.cc b/libstdc++-v3/testsuite/20_util/optional/monadic/and_then.cc index a969ca5077e7..dd392e2ec00d 100644 --- a/libstdc++-v3/testsuite/20_util/optional/monadic/and_then.cc +++ b/libstdc++-v3/testsuite/20_util/optional/monadic/and_then.cc @@ -1,4 +1,5 @@ // { dg-do run { target c++23 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/optional/requirements.cc b/libstdc++-v3/testsuite/20_util/optional/requirements.cc index 3edfb5cf9b16..cb523c8dc168 100644 --- a/libstdc++-v3/testsuite/20_util/optional/requirements.cc +++ b/libstdc++-v3/testsuite/20_util/optional/requirements.cc @@ -1,4 +1,5 @@ // { dg-do run { target c++17 } } +// { dg-add-options no_pch } // Copyright (C) 2013-2023 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/20_util/optional/version.cc b/libstdc++-v3/testsuite/20_util/optional/version.cc index 2fd52f7c1944..7e63d4257962 100644 --- a/libstdc++-v3/testsuite/20_util/optional/version.cc +++ b/libstdc++-v3/testsuite/20_util/optional/version.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/owner_less/void.cc b/libstdc++-v3/testsuite/20_util/owner_less/void.cc index 3c86eda9e653..e5de0bf8de63 100644 --- a/libstdc++-v3/testsuite/20_util/owner_less/void.cc +++ b/libstdc++-v3/testsuite/20_util/owner_less/void.cc @@ -17,13 +17,14 @@ // { dg-do compile { target c++11 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include #if __cplusplus >= 201402L // The feature-test macro is only defined for C++14 and later. # if __cpp_lib_transparent_operators < 201510 -# error "__cpp_lib_transparent_operators < 201510" +# error "__cpp_lib_transparent_operators < 201510 in " # endif #endif diff --git a/libstdc++-v3/testsuite/20_util/reference_from_temporary/value.cc b/libstdc++-v3/testsuite/20_util/reference_from_temporary/value.cc index 2df559bd0ddf..877c1c93b46f 100644 --- a/libstdc++-v3/testsuite/20_util/reference_from_temporary/value.cc +++ b/libstdc++-v3/testsuite/20_util/reference_from_temporary/value.cc @@ -16,16 +16,18 @@ // . // { dg-do compile { target c++23 } } +// { dg-add-options no_pch } #include -#include #ifndef __cpp_lib_reference_from_temporary -# error "Feature test macro for reference_from_temporary is missing in " +# error "Feature test macro for reference_from_temporary is missing in " #elif __cpp_lib_reference_from_temporary < 202202L -# error "Feature test macro for reference_from_temporary has wrong value in " +# error "Feature test macro for reference_from_temporary has wrong value in " #endif +#include + void test01() { using std::reference_constructs_from_temporary; diff --git a/libstdc++-v3/testsuite/20_util/reference_from_temporary/version.cc b/libstdc++-v3/testsuite/20_util/reference_from_temporary/version.cc index 7f42c1909617..761b9505c347 100644 --- a/libstdc++-v3/testsuite/20_util/reference_from_temporary/version.cc +++ b/libstdc++-v3/testsuite/20_util/reference_from_temporary/version.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++23 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/atomic/atomic_shared_ptr.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/atomic/atomic_shared_ptr.cc index 6f790ac6c8ea..e972f8af9e56 100644 --- a/libstdc++-v3/testsuite/20_util/shared_ptr/atomic/atomic_shared_ptr.cc +++ b/libstdc++-v3/testsuite/20_util/shared_ptr/atomic/atomic_shared_ptr.cc @@ -2,6 +2,7 @@ // { dg-require-effective-target gthreads } // { dg-additional-options "-pthread" { target pthread } } // { dg-add-options libatomic } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/creation/array.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/creation/array.cc index 534036287fce..5062a3d1ebff 100644 --- a/libstdc++-v3/testsuite/20_util/shared_ptr/creation/array.cc +++ b/libstdc++-v3/testsuite/20_util/shared_ptr/creation/array.cc @@ -1,4 +1,5 @@ // { dg-do run { target c++20 } } +// { dg-add-options no_pch } // C++20 20.11.3.7 shared_ptr Creation [util.smartptr.shared.create] diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/creation/overwrite.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/creation/overwrite.cc index d78ee698eb1c..5b8af326b672 100644 --- a/libstdc++-v3/testsuite/20_util/shared_ptr/creation/overwrite.cc +++ b/libstdc++-v3/testsuite/20_util/shared_ptr/creation/overwrite.cc @@ -1,6 +1,7 @@ // { dg-options "-fno-lifetime-dse -O0" } // { dg-do run { target c++20 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } // C++20 20.11.3.7 shared_ptr Creation [util.smartptr.shared.create] diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/creation/version.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/creation/version.cc index 9c0fc5dda39e..bc83c3325641 100644 --- a/libstdc++-v3/testsuite/20_util/shared_ptr/creation/version.cc +++ b/libstdc++-v3/testsuite/20_util/shared_ptr/creation/version.cc @@ -1,5 +1,6 @@ // { dg-do preprocess { target c++20 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } // C++20 20.11.3.7 shared_ptr Creation [util.smartptr.shared.create] diff --git a/libstdc++-v3/testsuite/20_util/time_point_cast/rounding.cc b/libstdc++-v3/testsuite/20_util/time_point_cast/rounding.cc index ae1ee684a500..43d902f37687 100644 --- a/libstdc++-v3/testsuite/20_util/time_point_cast/rounding.cc +++ b/libstdc++-v3/testsuite/20_util/time_point_cast/rounding.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/to_chars/constexpr.cc b/libstdc++-v3/testsuite/20_util/to_chars/constexpr.cc index e51ea4dbbbe3..86b01ee30535 100644 --- a/libstdc++-v3/testsuite/20_util/to_chars/constexpr.cc +++ b/libstdc++-v3/testsuite/20_util/to_chars/constexpr.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++23 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/to_chars/result.cc b/libstdc++-v3/testsuite/20_util/to_chars/result.cc index 5284680460a3..c1010534e80c 100644 --- a/libstdc++-v3/testsuite/20_util/to_chars/result.cc +++ b/libstdc++-v3/testsuite/20_util/to_chars/result.cc @@ -1,12 +1,14 @@ // { dg-do run { target c++26 } } +// { dg-add-options no_pch } #include -#include #if defined(__cpp_lib_to_chars) && __cpp_lib_to_chars < 202306L # error "Feature-test macro for std::to_chars has wrong value in " #endif +#include + void test_result() { diff --git a/libstdc++-v3/testsuite/20_util/to_chars/version.cc b/libstdc++-v3/testsuite/20_util/to_chars/version.cc index df1804e1ff4d..41bb35b93f6d 100644 --- a/libstdc++-v3/testsuite/20_util/to_chars/version.cc +++ b/libstdc++-v3/testsuite/20_util/to_chars/version.cc @@ -1,5 +1,6 @@ // { dg-do preprocess { target c++23 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/to_underlying/1.cc b/libstdc++-v3/testsuite/20_util/to_underlying/1.cc index c970238b2970..520f3f4405b3 100644 --- a/libstdc++-v3/testsuite/20_util/to_underlying/1.cc +++ b/libstdc++-v3/testsuite/20_util/to_underlying/1.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++23 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/to_underlying/version.cc b/libstdc++-v3/testsuite/20_util/to_underlying/version.cc index f800d7c09e5e..0002eb8985c6 100644 --- a/libstdc++-v3/testsuite/20_util/to_underlying/version.cc +++ b/libstdc++-v3/testsuite/20_util/to_underlying/version.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++23 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/tuple/apply/1.cc b/libstdc++-v3/testsuite/20_util/tuple/apply/1.cc index 39678408b83f..7863e283a61e 100644 --- a/libstdc++-v3/testsuite/20_util/tuple/apply/1.cc +++ b/libstdc++-v3/testsuite/20_util/tuple/apply/1.cc @@ -16,14 +16,16 @@ // . // { dg-do run { target c++17 } } +// { dg-add-options no_pch } #include -#include #if __cpp_lib_apply < 201603 # error "__cpp_lib_apply < 201603" #endif +#include + void test01() { diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr_allocator_arg_t.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr_allocator_arg_t.cc index 8f672c96d029..5e843038f752 100644 --- a/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr_allocator_arg_t.cc +++ b/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr_allocator_arg_t.cc @@ -1,6 +1,7 @@ // { dg-do compile { target c++20 } } // FIXME [!HOSTED]: avoidable std::allocator usage // { dg-require-effective-target hosted } +// { dg-add-options no_pch } // // Copyright (C) 2019-2023 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/20_util/tuple/make_from_tuple/1.cc b/libstdc++-v3/testsuite/20_util/tuple/make_from_tuple/1.cc index bacb401b9571..a1fac7d34de3 100644 --- a/libstdc++-v3/testsuite/20_util/tuple/make_from_tuple/1.cc +++ b/libstdc++-v3/testsuite/20_util/tuple/make_from_tuple/1.cc @@ -16,16 +16,18 @@ // . // { dg-do run { target c++17 } } +// { dg-add-options no_pch } #include -#include #ifndef __cpp_lib_make_from_tuple -# error "Feature-test macro for make_from_tuple missing." +# error "Feature-test macro for make_from_tuple missing in " #elif __cpp_lib_make_from_tuple < 201606 -# error "Feature-test macro for make_from_tuple has the wrong value." +# error "Feature-test macro for make_from_tuple has the wrong value in " #endif +#include + template struct ThreeParam { diff --git a/libstdc++-v3/testsuite/20_util/tuple/p2321r2.cc b/libstdc++-v3/testsuite/20_util/tuple/p2321r2.cc index 774968d87e5f..1d04ab03abd4 100644 --- a/libstdc++-v3/testsuite/20_util/tuple/p2321r2.cc +++ b/libstdc++-v3/testsuite/20_util/tuple/p2321r2.cc @@ -2,15 +2,17 @@ // { dg-do run { target c++23 } } // FIXME [!HOSTED]: avoidable std::allocator usage // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include -#include -#include #if __cpp_lib_ranges_zip != 202110L # error "Feature-test macro __cpp_lib_ranges_zip has wrong value in " #endif +#include +#include + using std::tuple; using std::pair; using std::allocator; diff --git a/libstdc++-v3/testsuite/20_util/tuple/tuple_element_t.cc b/libstdc++-v3/testsuite/20_util/tuple/tuple_element_t.cc index 79624288c210..78e5ef8fae91 100644 --- a/libstdc++-v3/testsuite/20_util/tuple/tuple_element_t.cc +++ b/libstdc++-v3/testsuite/20_util/tuple/tuple_element_t.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++14 } } +// { dg-add-options no_pch } // Copyright (C) 2014-2023 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/constexpr_c++20.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/constexpr_c++20.cc index 02cbd929c941..3c6957c5531c 100644 --- a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/constexpr_c++20.cc +++ b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/constexpr_c++20.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++23 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/creation/for_overwrite.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/creation/for_overwrite.cc index 37ef1b7356a9..8976e6be0c89 100644 --- a/libstdc++-v3/testsuite/20_util/unique_ptr/creation/for_overwrite.cc +++ b/libstdc++-v3/testsuite/20_util/unique_ptr/creation/for_overwrite.cc @@ -2,6 +2,7 @@ // { dg-do run { target c++20 } } // { dg-xfail-run-if "AIX operator new" { powerpc-ibm-aix* } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } // Copyright (C) 2020-2023 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/20_util/unreachable/1.cc b/libstdc++-v3/testsuite/20_util/unreachable/1.cc index 98d801b39690..f0a93cdaa85f 100644 --- a/libstdc++-v3/testsuite/20_util/unreachable/1.cc +++ b/libstdc++-v3/testsuite/20_util/unreachable/1.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++23 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/unreachable/version.cc b/libstdc++-v3/testsuite/20_util/unreachable/version.cc index b64a6cd82c0f..66753f0232e8 100644 --- a/libstdc++-v3/testsuite/20_util/unreachable/version.cc +++ b/libstdc++-v3/testsuite/20_util/unreachable/version.cc @@ -1,4 +1,5 @@ // { dg-do preprocess { target c++23 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/unwrap_reference/1.cc b/libstdc++-v3/testsuite/20_util/unwrap_reference/1.cc index d3a33f842ca0..ae9643b13490 100644 --- a/libstdc++-v3/testsuite/20_util/unwrap_reference/1.cc +++ b/libstdc++-v3/testsuite/20_util/unwrap_reference/1.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/unwrap_reference/3.cc b/libstdc++-v3/testsuite/20_util/unwrap_reference/3.cc index e2e91fdb34b9..12090e132d23 100644 --- a/libstdc++-v3/testsuite/20_util/unwrap_reference/3.cc +++ b/libstdc++-v3/testsuite/20_util/unwrap_reference/3.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/variant/constexpr.cc b/libstdc++-v3/testsuite/20_util/variant/constexpr.cc index 55fac029aafb..886fd2dab5cd 100644 --- a/libstdc++-v3/testsuite/20_util/variant/constexpr.cc +++ b/libstdc++-v3/testsuite/20_util/variant/constexpr.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/variant/version.cc b/libstdc++-v3/testsuite/20_util/variant/version.cc index de04c5eb2944..fd251dd37684 100644 --- a/libstdc++-v3/testsuite/20_util/variant/version.cc +++ b/libstdc++-v3/testsuite/20_util/variant/version.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/variant/visit_inherited.cc b/libstdc++-v3/testsuite/20_util/variant/visit_inherited.cc index ade83096475e..76e881dec751 100644 --- a/libstdc++-v3/testsuite/20_util/variant/visit_inherited.cc +++ b/libstdc++-v3/testsuite/20_util/variant/visit_inherited.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/20_util/void_t/1.cc b/libstdc++-v3/testsuite/20_util/void_t/1.cc index bff88a2898a4..b18ee44e3a1c 100644 --- a/libstdc++-v3/testsuite/20_util/void_t/1.cc +++ b/libstdc++-v3/testsuite/20_util/void_t/1.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/resize_and_overwrite.cc b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/resize_and_overwrite.cc index 3c88b7c163b9..edef8c9f9118 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/resize_and_overwrite.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/resize_and_overwrite.cc @@ -1,4 +1,5 @@ // { dg-do run { target c++23 } } +// { dg-add-options no_pch } #include @@ -10,7 +11,6 @@ #endif #endif - #include #include diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/constexpr.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/constexpr.cc index 8c60708a3d3a..7822c89497b1 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/constexpr.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/constexpr.cc @@ -1,5 +1,6 @@ // { dg-do compile { target c++20 } } // { dg-require-effective-target cxx11_abi } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/constexpr.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/constexpr.cc index 40cea53b5907..44c8391ebc2a 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/constexpr.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/constexpr.cc @@ -1,5 +1,6 @@ // { dg-do compile { target c++20 } } // { dg-require-effective-target cxx11_abi } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/erasure.cc b/libstdc++-v3/testsuite/21_strings/basic_string/erasure.cc index b85496a16f10..23aae3c4dd22 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/erasure.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/erasure.cc @@ -1,4 +1,5 @@ // { dg-do run { target c++20 } } +// { dg-add-options no_pch } // Copyright (C) 2018-2023 Free Software Foundation, Inc. // @@ -18,7 +19,6 @@ // . #include -#include #ifndef __cpp_lib_erase_if # error "Feature-test macro for erase_if missing in " @@ -26,6 +26,8 @@ # error "Feature-test macro for erase_if has wrong value in " #endif +#include + void test01() { diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/to_string_float.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/to_string_float.cc index 3837c896f6b0..727e96012716 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/to_string_float.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/to_string_float.cc @@ -1,9 +1,27 @@ // { dg-do run { target c++11 } } // { dg-require-namedlocale "de_DE.ISO8859-15" } +// { dg-add-options no_pch } // C++11 21.5 Numeric Conversions [string.conversions] #include + +#if __cplusplus > 202302L + +#ifndef __cpp_lib_to_string +# error "Feature-test macro for std::to_string missing in " +#elif __cpp_lib_to_string != 202306L +# error "Feature-test macro for std::to_string has wrong value in " +#endif + +#else + +#ifdef __cpp_lib_to_string +# error "__cpp_lib_to_string should not be defined for C++23" +#endif + +#endif + #include #include #include @@ -14,24 +32,11 @@ namespace test { // Canonical version of std::to_string(double) as specified in the standard. -#if __cplusplus > 202302L - -#ifndef __cpp_lib_to_string -# error "Feature-test macro for std::to_string missing in " -#elif __cpp_lib_to_string != 202306L -# error "Feature-test macro for std::to_string has wrong value in " -#endif - +#if __cpp_lib_to_string static std::string to_string(float val) { return std::format("{}", val); } static std::string to_string(double val) { return std::format("{}", val); } static std::string to_string(long double val) { return std::format("{}", val); } - #else - -#ifdef __cpp_lib_to_string -# error "__cpp_lib_to_string should not be defined for C++23" -#endif - static std::string to_string(double val) { std::string str(100, '9'); diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/version.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/version.cc index 630e06fff8ff..669becc36f14 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/version.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/version.cc @@ -1,4 +1,6 @@ // { dg-do compile } +// { dg-add-options no_pch } + #include #if __cplusplus > 202302L diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/version.cc b/libstdc++-v3/testsuite/21_strings/basic_string/version.cc index 865b17905ff4..71dd4dfb67f6 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/version.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/version.cc @@ -1,5 +1,6 @@ // { dg-do compile { target c++17 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/contains/char.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/contains/char.cc index f59cad377227..629af6a9971c 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/contains/char.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/contains/char.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++23 } } +// { dg-add-options no_pch } // Copyright (C) 2021-2023 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/contains/char/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/contains/char/2.cc index 2f1b6848b76a..c351d3061809 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/contains/char/2.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/contains/char/2.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++23 } } +// { dg-add-options no_pch } // Copyright (C) 2021-2023 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/copy/char/constexpr.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/copy/char/constexpr.cc index b91fea03c626..92919155cb3c 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/copy/char/constexpr.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/copy/char/constexpr.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions_c++17.cc b/libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions_c++17.cc index 0db1673d8d38..34fb51a096b4 100644 --- a/libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions_c++17.cc +++ b/libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions_c++17.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } // Copyright (C) 2017-2023 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions_c++20.cc b/libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions_c++20.cc index 805b84dea588..efddcb23fabf 100644 --- a/libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions_c++20.cc +++ b/libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions_c++20.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } // Copyright (C) 2017-2023 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/21_strings/char_traits/requirements/version.cc b/libstdc++-v3/testsuite/21_strings/char_traits/requirements/version.cc index 908163a2635a..1a6fde2bbb78 100644 --- a/libstdc++-v3/testsuite/21_strings/char_traits/requirements/version.cc +++ b/libstdc++-v3/testsuite/21_strings/char_traits/requirements/version.cc @@ -1,5 +1,6 @@ // { dg-do compile { target c++17 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/23_containers/array/comparison_operators/constexpr.cc b/libstdc++-v3/testsuite/23_containers/array/comparison_operators/constexpr.cc index e4029bdc06bc..ff773fd9fabe 100644 --- a/libstdc++-v3/testsuite/23_containers/array/comparison_operators/constexpr.cc +++ b/libstdc++-v3/testsuite/23_containers/array/comparison_operators/constexpr.cc @@ -1,5 +1,6 @@ // { dg-do compile { target c++20 } } -// +// { dg-add-options no_pch } + // Copyright (C) 2019-2023 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free diff --git a/libstdc++-v3/testsuite/23_containers/array/creation/1.cc b/libstdc++-v3/testsuite/23_containers/array/creation/1.cc index 9c2eedb5c15a..1e158abc275b 100644 --- a/libstdc++-v3/testsuite/23_containers/array/creation/1.cc +++ b/libstdc++-v3/testsuite/23_containers/array/creation/1.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } // Copyright (C) 2019-2023 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/23_containers/array/creation/2.cc b/libstdc++-v3/testsuite/23_containers/array/creation/2.cc index be83073dc3d7..a192073bdd48 100644 --- a/libstdc++-v3/testsuite/23_containers/array/creation/2.cc +++ b/libstdc++-v3/testsuite/23_containers/array/creation/2.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } // Copyright (C) 2019-2023 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/23_containers/array/element_access/constexpr_c++17.cc b/libstdc++-v3/testsuite/23_containers/array/element_access/constexpr_c++17.cc index 266df756db97..234a4f01a8b4 100644 --- a/libstdc++-v3/testsuite/23_containers/array/element_access/constexpr_c++17.cc +++ b/libstdc++-v3/testsuite/23_containers/array/element_access/constexpr_c++17.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } // Copyright (C) 2011-2023 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_fill.cc b/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_fill.cc index 6acf1837a68f..07a64003c8e6 100644 --- a/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_fill.cc +++ b/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_fill.cc @@ -1,5 +1,6 @@ // { dg-do compile { target c++20 } } -// +// { dg-add-options no_pch } + // Copyright (C) 2019-2023 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free diff --git a/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_iter.cc b/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_iter.cc index 7bccd1f79aa7..5d06f2dda937 100644 --- a/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_iter.cc +++ b/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_iter.cc @@ -1,5 +1,6 @@ // { dg-do compile { target c++17 } } -// +// { dg-add-options no_pch } + // Copyright (C) 2019-2023 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free diff --git a/libstdc++-v3/testsuite/23_containers/array/tuple_interface/get_neg.cc b/libstdc++-v3/testsuite/23_containers/array/tuple_interface/get_neg.cc index 889d4aa2e0b4..bf64d298579d 100644 --- a/libstdc++-v3/testsuite/23_containers/array/tuple_interface/get_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/array/tuple_interface/get_neg.cc @@ -26,6 +26,6 @@ int n1 = std::get<1>(a); int n2 = std::get<1>(std::move(a)); int n3 = std::get<1>(ca); -// { dg-error "static assertion failed" "" { target *-*-* } 389 } -// { dg-error "static assertion failed" "" { target *-*-* } 398 } -// { dg-error "static assertion failed" "" { target *-*-* } 407 } +// { dg-error "static assertion failed" "" { target *-*-* } 391 } +// { dg-error "static assertion failed" "" { target *-*-* } 400 } +// { dg-error "static assertion failed" "" { target *-*-* } 409 } diff --git a/libstdc++-v3/testsuite/23_containers/deque/erasure.cc b/libstdc++-v3/testsuite/23_containers/deque/erasure.cc index 30885d1476a8..317ce50fc57e 100644 --- a/libstdc++-v3/testsuite/23_containers/deque/erasure.cc +++ b/libstdc++-v3/testsuite/23_containers/deque/erasure.cc @@ -1,4 +1,5 @@ // { dg-do run { target c++20 } } +// { dg-add-options no_pch } // Copyright (C) 2018-2023 Free Software Foundation, Inc. // @@ -18,7 +19,6 @@ // . #include -#include #ifndef __cpp_lib_erase_if # error "Feature-test macro for erase_if missing in " @@ -26,6 +26,8 @@ # error "Feature-test macro for erase_if has wrong value in " #endif +#include + void test01() { diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/erasure.cc b/libstdc++-v3/testsuite/23_containers/forward_list/erasure.cc index 2a73b98a293e..973a6323f05c 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/erasure.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/erasure.cc @@ -1,4 +1,5 @@ // { dg-do run { target c++20 } } +// { dg-add-options no_pch } // Copyright (C) 2018-2023 Free Software Foundation, Inc. // @@ -18,7 +19,6 @@ // . #include -#include #ifndef __cpp_lib_erase_if # error "Feature-test macro for erase_if missing in " @@ -26,6 +26,8 @@ # error "Feature-test macro for erase_if has wrong value in " #endif +#include + void test01() { diff --git a/libstdc++-v3/testsuite/23_containers/list/erasure.cc b/libstdc++-v3/testsuite/23_containers/list/erasure.cc index d6b06b13326d..5d32098c17d4 100644 --- a/libstdc++-v3/testsuite/23_containers/list/erasure.cc +++ b/libstdc++-v3/testsuite/23_containers/list/erasure.cc @@ -1,4 +1,5 @@ // { dg-do run { target c++20 } } +// { dg-add-options no_pch } // Copyright (C) 2018-2023 Free Software Foundation, Inc. // @@ -18,7 +19,6 @@ // . #include -#include #ifndef __cpp_lib_erase_if # error "Feature-test macro for erase_if missing in " @@ -26,6 +26,8 @@ # error "Feature-test macro for erase_if has wrong value in " #endif +#include + void test01() { diff --git a/libstdc++-v3/testsuite/23_containers/map/erasure.cc b/libstdc++-v3/testsuite/23_containers/map/erasure.cc index 078d12974048..61090eb810e1 100644 --- a/libstdc++-v3/testsuite/23_containers/map/erasure.cc +++ b/libstdc++-v3/testsuite/23_containers/map/erasure.cc @@ -1,4 +1,5 @@ // { dg-do run { target c++20 } } +// { dg-add-options no_pch } // Copyright (C) 2018-2023 Free Software Foundation, Inc. // @@ -18,8 +19,6 @@ // . #include -#include -#include #ifndef __cpp_lib_erase_if # error "Feature-test macro for erase_if missing in " @@ -27,6 +26,9 @@ # error "Feature-test macro for erase_if has wrong value in " #endif +#include +#include + auto is_odd_pair = [](const std::pair& p) { return p.first % 2 != 0; diff --git a/libstdc++-v3/testsuite/23_containers/queue/cons_from_iters.cc b/libstdc++-v3/testsuite/23_containers/queue/cons_from_iters.cc index 334ef00b79e4..1a1009e34b35 100644 --- a/libstdc++-v3/testsuite/23_containers/queue/cons_from_iters.cc +++ b/libstdc++-v3/testsuite/23_containers/queue/cons_from_iters.cc @@ -16,6 +16,7 @@ // . // { dg-do run { target c++23 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/23_containers/set/erasure.cc b/libstdc++-v3/testsuite/23_containers/set/erasure.cc index a2bbf3ad6039..8e629fa9e0ce 100644 --- a/libstdc++-v3/testsuite/23_containers/set/erasure.cc +++ b/libstdc++-v3/testsuite/23_containers/set/erasure.cc @@ -1,4 +1,5 @@ // { dg-do run { target c++20 } } +// { dg-add-options no_pch } // Copyright (C) 2018-2023 Free Software Foundation, Inc. // @@ -18,7 +19,6 @@ // . #include -#include #ifndef __cpp_lib_erase_if # error "Feature-test macro for erase_if missing in " @@ -26,6 +26,8 @@ # error "Feature-test macro for erase_if has wrong value in " #endif +#include + auto is_odd = [](const int i) { return i % 2 != 0; }; void diff --git a/libstdc++-v3/testsuite/23_containers/span/1.cc b/libstdc++-v3/testsuite/23_containers/span/1.cc index 40bb7a0b1f3f..c1c0a7e619b0 100644 --- a/libstdc++-v3/testsuite/23_containers/span/1.cc +++ b/libstdc++-v3/testsuite/23_containers/span/1.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/23_containers/span/2.cc b/libstdc++-v3/testsuite/23_containers/span/2.cc index 533d1721a534..2931c0b14ed6 100644 --- a/libstdc++-v3/testsuite/23_containers/span/2.cc +++ b/libstdc++-v3/testsuite/23_containers/span/2.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/23_containers/stack/cons_from_iters.cc b/libstdc++-v3/testsuite/23_containers/stack/cons_from_iters.cc index 772409529095..8df4d33b729e 100644 --- a/libstdc++-v3/testsuite/23_containers/stack/cons_from_iters.cc +++ b/libstdc++-v3/testsuite/23_containers/stack/cons_from_iters.cc @@ -16,6 +16,7 @@ // . // { dg-do run { target c++23 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/erasure.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/erasure.cc index 696fc05afa43..201145a651c1 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_map/erasure.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/erasure.cc @@ -1,4 +1,5 @@ // { dg-do run { target c++20 } } +// { dg-add-options no_pch } // Copyright (C) 2018-2023 Free Software Foundation, Inc. // @@ -18,8 +19,6 @@ // . #include -#include -#include #ifndef __cpp_lib_erase_if # error "Feature-test macro for erase_if missing in " @@ -27,6 +26,9 @@ # error "Feature-test macro for erase_if has wrong value in " #endif +#include +#include + auto is_odd_pair = [](const std::pair& p) { return p.first % 2 != 0; diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/operations/1.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/operations/1.cc index cfeca606c55a..cf6ee50f9ef1 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_map/operations/1.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/operations/1.cc @@ -16,6 +16,7 @@ // . // { dg-do run { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/erasure.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/erasure.cc index 2384136e769e..7a298b7a11ca 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_set/erasure.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/erasure.cc @@ -1,4 +1,5 @@ // { dg-do run { target c++20 } } +// { dg-add-options no_pch } // Copyright (C) 2018-2023 Free Software Foundation, Inc. // @@ -18,7 +19,6 @@ // . #include -#include #ifndef __cpp_lib_erase_if # error "Feature-test macro for erase_if missing in " @@ -26,6 +26,8 @@ # error "Feature-test macro for erase_if has wrong value in " #endif +#include + void test01() { diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/operations/1.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/operations/1.cc index b2f13990b56e..5da7c31cc525 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_set/operations/1.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/operations/1.cc @@ -16,6 +16,7 @@ // . // { dg-do run { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/23_containers/vector/cons/constexpr.cc b/libstdc++-v3/testsuite/23_containers/vector/cons/constexpr.cc index 9a784583304a..7bf865112406 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/cons/constexpr.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/cons/constexpr.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } // { dg-xfail-if "not supported" { debug_mode } } #include diff --git a/libstdc++-v3/testsuite/23_containers/vector/erasure.cc b/libstdc++-v3/testsuite/23_containers/vector/erasure.cc index 2135b6b8fb3a..780a9ca54ba9 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/erasure.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/erasure.cc @@ -1,4 +1,5 @@ // { dg-do run { target c++20 } } +// { dg-add-options no_pch } // Copyright (C) 2018-2023 Free Software Foundation, Inc. // @@ -18,7 +19,6 @@ // . #include -#include #ifndef __cpp_lib_erase_if # error "Feature-test macro for erase_if missing in " @@ -26,6 +26,8 @@ # error "Feature-test macro for erase_if has wrong value in " #endif +#include + void test01() { diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/version.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/version.cc index 50a10d217f62..ef11ebbbfc6d 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/requirements/version.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/version.cc @@ -1,5 +1,6 @@ // { dg-do preprocess { target c++20 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/24_iterators/insert_iterator/constexpr.cc b/libstdc++-v3/testsuite/24_iterators/insert_iterator/constexpr.cc index ed2b64885166..24d208cff2bd 100644 --- a/libstdc++-v3/testsuite/24_iterators/insert_iterator/constexpr.cc +++ b/libstdc++-v3/testsuite/24_iterators/insert_iterator/constexpr.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/25_algorithms/clamp/constexpr.cc b/libstdc++-v3/testsuite/25_algorithms/clamp/constexpr.cc index 92db53885958..5fcfb1e2e62a 100644 --- a/libstdc++-v3/testsuite/25_algorithms/clamp/constexpr.cc +++ b/libstdc++-v3/testsuite/25_algorithms/clamp/constexpr.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } // Copyright (C) 2016-2023 Free Software Foundation, Inc. // @@ -18,13 +19,14 @@ // . #include -#include #ifndef __cpp_lib_clamp -# error "Feature-test macro for clamp missing" +# error "Feature-test macro for clamp missing in " #elif __cpp_lib_clamp != 201603 -# error "Feature-test macro for clamp has wrong value" +# error "Feature-test macro for clamp has wrong value in " #endif +#include + static_assert(std::clamp(2, 0, 1) == 1); static_assert(std::clamp(2, 1, 0, std::greater()) == 1); diff --git a/libstdc++-v3/testsuite/25_algorithms/clamp/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/25_algorithms/clamp/requirements/explicit_instantiation/1.cc index f696e1354775..8cbe6c148357 100644 --- a/libstdc++-v3/testsuite/25_algorithms/clamp/requirements/explicit_instantiation/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/clamp/requirements/explicit_instantiation/1.cc @@ -21,12 +21,6 @@ #include #include -#ifndef __cpp_lib_clamp -# error "Feature-test macro for clamp missing" -#elif __cpp_lib_clamp != 201603 -# error "Feature-test macro for clamp has wrong value" -#endif - namespace std { using __gnu_test::NonDefaultConstructible; diff --git a/libstdc++-v3/testsuite/25_algorithms/constexpr_macro.cc b/libstdc++-v3/testsuite/25_algorithms/constexpr_macro.cc index d591b11bd5ff..258b7495a5d5 100644 --- a/libstdc++-v3/testsuite/25_algorithms/constexpr_macro.cc +++ b/libstdc++-v3/testsuite/25_algorithms/constexpr_macro.cc @@ -17,6 +17,7 @@ // { dg-do compile { target c++20 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/25_algorithms/cpp_lib_constexpr.cc b/libstdc++-v3/testsuite/25_algorithms/cpp_lib_constexpr.cc index 0774032b0a02..0f4143ea7948 100644 --- a/libstdc++-v3/testsuite/25_algorithms/cpp_lib_constexpr.cc +++ b/libstdc++-v3/testsuite/25_algorithms/cpp_lib_constexpr.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/25_algorithms/fold_left/1.cc b/libstdc++-v3/testsuite/25_algorithms/fold_left/1.cc index b08a06511748..d5cbc2254127 100644 --- a/libstdc++-v3/testsuite/25_algorithms/fold_left/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/fold_left/1.cc @@ -1,13 +1,15 @@ // { dg-do run { target c++23 } } +// { dg-add-options no_pch } #include -#include -#include #if __cpp_lib_ranges_fold != 202207L # error "Feature-test macro __cpp_lib_ranges_fold has wrong value in " #endif +#include +#include + namespace ranges = std::ranges; namespace views = std::views; diff --git a/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-2.cc b/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-2.cc index bac78011837a..f8dc94f640dd 100644 --- a/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-2.cc +++ b/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-2.cc @@ -17,6 +17,7 @@ // { dg-do preprocess { target c++17 } } // { dg-require-effective-target tbb_backend } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-3.cc b/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-3.cc index 27ae1e42c5ba..000b2e0a144c 100644 --- a/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-3.cc +++ b/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-3.cc @@ -17,6 +17,7 @@ // { dg-do preprocess { target c++17 } } // { dg-require-effective-target tbb_backend } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-4.cc b/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-4.cc index a397c3db8aeb..c128695a309f 100644 --- a/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-4.cc +++ b/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-4.cc @@ -17,6 +17,7 @@ // { dg-do preprocess { target c++17 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-5.cc b/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-5.cc index da5b73e58592..7b9ae1bc75e5 100644 --- a/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-5.cc +++ b/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-5.cc @@ -17,6 +17,7 @@ // { dg-do preprocess { target c++17 } } // { dg-require-effective-target tbb_backend } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test.cc b/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test.cc index 4d758eb92921..da593562428b 100644 --- a/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test.cc +++ b/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test.cc @@ -17,6 +17,7 @@ // { dg-do preprocess { target c++17 } } // { dg-require-effective-target tbb_backend } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/26_numerics/bit/bit.byteswap/byteswap.cc b/libstdc++-v3/testsuite/26_numerics/bit/bit.byteswap/byteswap.cc index 034019b3da24..37b42957e37d 100644 --- a/libstdc++-v3/testsuite/26_numerics/bit/bit.byteswap/byteswap.cc +++ b/libstdc++-v3/testsuite/26_numerics/bit/bit.byteswap/byteswap.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++23 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/26_numerics/bit/bit.byteswap/version.cc b/libstdc++-v3/testsuite/26_numerics/bit/bit.byteswap/version.cc index c179944e6e83..aa59604d1866 100644 --- a/libstdc++-v3/testsuite/26_numerics/bit/bit.byteswap/version.cc +++ b/libstdc++-v3/testsuite/26_numerics/bit/bit.byteswap/version.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++23 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/26_numerics/bit/bit.cast/bit_cast.cc b/libstdc++-v3/testsuite/26_numerics/bit/bit.cast/bit_cast.cc index dc7249df68a2..b488a8b2df21 100644 --- a/libstdc++-v3/testsuite/26_numerics/bit/bit.cast/bit_cast.cc +++ b/libstdc++-v3/testsuite/26_numerics/bit/bit.cast/bit_cast.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/26_numerics/bit/bit.cast/version.cc b/libstdc++-v3/testsuite/26_numerics/bit/bit.cast/version.cc index 296adf75682e..079780a81b09 100644 --- a/libstdc++-v3/testsuite/26_numerics/bit/bit.cast/version.cc +++ b/libstdc++-v3/testsuite/26_numerics/bit/bit.cast/version.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/26_numerics/bit/header-2.cc b/libstdc++-v3/testsuite/26_numerics/bit/header-2.cc index 07d0865214ec..94db9e15eb64 100644 --- a/libstdc++-v3/testsuite/26_numerics/bit/header-2.cc +++ b/libstdc++-v3/testsuite/26_numerics/bit/header-2.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/26_numerics/bit/header.cc b/libstdc++-v3/testsuite/26_numerics/bit/header.cc index 36207bb51492..ecb6e1bdb119 100644 --- a/libstdc++-v3/testsuite/26_numerics/bit/header.cc +++ b/libstdc++-v3/testsuite/26_numerics/bit/header.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/26_numerics/complex/1.cc b/libstdc++-v3/testsuite/26_numerics/complex/1.cc index 229926cd82c1..f4d7bce23356 100644 --- a/libstdc++-v3/testsuite/26_numerics/complex/1.cc +++ b/libstdc++-v3/testsuite/26_numerics/complex/1.cc @@ -16,6 +16,7 @@ // . // { dg-do preprocess { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/26_numerics/complex/2.cc b/libstdc++-v3/testsuite/26_numerics/complex/2.cc index 6276e2de4054..2b1a5a932f46 100644 --- a/libstdc++-v3/testsuite/26_numerics/complex/2.cc +++ b/libstdc++-v3/testsuite/26_numerics/complex/2.cc @@ -17,6 +17,7 @@ // { dg-do preprocess { target c++20 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/26_numerics/endian/2.cc b/libstdc++-v3/testsuite/26_numerics/endian/2.cc index 2822be355633..24a40e47cf40 100644 --- a/libstdc++-v3/testsuite/26_numerics/endian/2.cc +++ b/libstdc++-v3/testsuite/26_numerics/endian/2.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/26_numerics/endian/3.cc b/libstdc++-v3/testsuite/26_numerics/endian/3.cc index 7e02cab40869..5f6ad56600c3 100644 --- a/libstdc++-v3/testsuite/26_numerics/endian/3.cc +++ b/libstdc++-v3/testsuite/26_numerics/endian/3.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/26_numerics/gcd/1.cc b/libstdc++-v3/testsuite/26_numerics/gcd/1.cc index 1475a5a73482..3083682bd1ad 100644 --- a/libstdc++-v3/testsuite/26_numerics/gcd/1.cc +++ b/libstdc++-v3/testsuite/26_numerics/gcd/1.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/26_numerics/lcm/1.cc b/libstdc++-v3/testsuite/26_numerics/lcm/1.cc index 18828a7d403b..1fa16af8316f 100644 --- a/libstdc++-v3/testsuite/26_numerics/lcm/1.cc +++ b/libstdc++-v3/testsuite/26_numerics/lcm/1.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++17 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/26_numerics/lerp/1.cc b/libstdc++-v3/testsuite/26_numerics/lerp/1.cc index 65b715437f54..8aedc47f1ce6 100644 --- a/libstdc++-v3/testsuite/26_numerics/lerp/1.cc +++ b/libstdc++-v3/testsuite/26_numerics/lerp/1.cc @@ -16,6 +16,7 @@ // . // { dg-do run { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/26_numerics/lerp/version.cc b/libstdc++-v3/testsuite/26_numerics/lerp/version.cc index 63206ba8e3fe..a6a57733a0ff 100644 --- a/libstdc++-v3/testsuite/26_numerics/lerp/version.cc +++ b/libstdc++-v3/testsuite/26_numerics/lerp/version.cc @@ -1,5 +1,6 @@ // { dg-do preprocess { target c++20 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/26_numerics/midpoint/integral.cc b/libstdc++-v3/testsuite/26_numerics/midpoint/integral.cc index 0f8a16e656e7..51218f38f2d5 100644 --- a/libstdc++-v3/testsuite/26_numerics/midpoint/integral.cc +++ b/libstdc++-v3/testsuite/26_numerics/midpoint/integral.cc @@ -16,6 +16,7 @@ // . // { dg-do run { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/26_numerics/midpoint/version.cc b/libstdc++-v3/testsuite/26_numerics/midpoint/version.cc index 63206ba8e3fe..a6a57733a0ff 100644 --- a/libstdc++-v3/testsuite/26_numerics/midpoint/version.cc +++ b/libstdc++-v3/testsuite/26_numerics/midpoint/version.cc @@ -1,5 +1,6 @@ // { dg-do preprocess { target c++20 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/26_numerics/numbers/1.cc b/libstdc++-v3/testsuite/26_numerics/numbers/1.cc index f41551c21486..8443efba0861 100644 --- a/libstdc++-v3/testsuite/26_numerics/numbers/1.cc +++ b/libstdc++-v3/testsuite/26_numerics/numbers/1.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/26_numerics/numbers/2.cc b/libstdc++-v3/testsuite/26_numerics/numbers/2.cc index d9e791e2843b..d55b44c02570 100644 --- a/libstdc++-v3/testsuite/26_numerics/numbers/2.cc +++ b/libstdc++-v3/testsuite/26_numerics/numbers/2.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/native_handle/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/native_handle/char/1.cc index 749451a4c816..0551f260ade5 100644 --- a/libstdc++-v3/testsuite/27_io/basic_filebuf/native_handle/char/1.cc +++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/native_handle/char/1.cc @@ -1,5 +1,6 @@ // { dg-options "-fno-inline" } // { dg-do run { target c++26 } } +// { dg-add-options no_pch } // { dg-additional-files "filebuf_members-1.txt" } #include diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/native_handle/version.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/native_handle/version.cc index 46c400d12cee..10a559859e32 100644 --- a/libstdc++-v3/testsuite/27_io/basic_filebuf/native_handle/version.cc +++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/native_handle/version.cc @@ -1,5 +1,6 @@ // { dg-do preprocess { target c++26 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/27_io/basic_ofstream/open/char/noreplace.cc b/libstdc++-v3/testsuite/27_io/basic_ofstream/open/char/noreplace.cc index 2e99707df86d..c34882fa4e97 100644 --- a/libstdc++-v3/testsuite/27_io/basic_ofstream/open/char/noreplace.cc +++ b/libstdc++-v3/testsuite/27_io/basic_ofstream/open/char/noreplace.cc @@ -1,4 +1,5 @@ // { dg-do run { xfail *-*-vxworks* } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/27_io/basic_ofstream/open/wchar_t/noreplace.cc b/libstdc++-v3/testsuite/27_io/basic_ofstream/open/wchar_t/noreplace.cc index ddb7fd691608..55c7ad4876fe 100644 --- a/libstdc++-v3/testsuite/27_io/basic_ofstream/open/wchar_t/noreplace.cc +++ b/libstdc++-v3/testsuite/27_io/basic_ofstream/open/wchar_t/noreplace.cc @@ -1,4 +1,5 @@ // { dg-do run { xfail *-*-vxworks* } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/27_io/basic_syncbuf/1.cc b/libstdc++-v3/testsuite/27_io/basic_syncbuf/1.cc index d48ad0900864..01ce127fbda4 100644 --- a/libstdc++-v3/testsuite/27_io/basic_syncbuf/1.cc +++ b/libstdc++-v3/testsuite/27_io/basic_syncbuf/1.cc @@ -17,6 +17,7 @@ // { dg-do compile { target c++20 } } // { dg-require-effective-target cxx11_abi } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/27_io/basic_syncbuf/2.cc b/libstdc++-v3/testsuite/27_io/basic_syncbuf/2.cc index ad1ab383b1c6..a973c448404c 100644 --- a/libstdc++-v3/testsuite/27_io/basic_syncbuf/2.cc +++ b/libstdc++-v3/testsuite/27_io/basic_syncbuf/2.cc @@ -18,6 +18,7 @@ // { dg-do compile { target c++20 } } // { dg-require-effective-target cxx11_abi } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/27_io/basic_syncstream/1.cc b/libstdc++-v3/testsuite/27_io/basic_syncstream/1.cc index d48ad0900864..01ce127fbda4 100644 --- a/libstdc++-v3/testsuite/27_io/basic_syncstream/1.cc +++ b/libstdc++-v3/testsuite/27_io/basic_syncstream/1.cc @@ -17,6 +17,7 @@ // { dg-do compile { target c++20 } } // { dg-require-effective-target cxx11_abi } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/27_io/basic_syncstream/2.cc b/libstdc++-v3/testsuite/27_io/basic_syncstream/2.cc index ad1ab383b1c6..a973c448404c 100644 --- a/libstdc++-v3/testsuite/27_io/basic_syncstream/2.cc +++ b/libstdc++-v3/testsuite/27_io/basic_syncstream/2.cc @@ -18,6 +18,7 @@ // { dg-do compile { target c++20 } } // { dg-require-effective-target cxx11_abi } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/27_io/spanstream/1.cc b/libstdc++-v3/testsuite/27_io/spanstream/1.cc index bd45a38ae3c8..4f384dbdd541 100644 --- a/libstdc++-v3/testsuite/27_io/spanstream/1.cc +++ b/libstdc++-v3/testsuite/27_io/spanstream/1.cc @@ -1,4 +1,5 @@ // { dg-do run { target c++23 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/27_io/spanstream/version.cc b/libstdc++-v3/testsuite/27_io/spanstream/version.cc index 7434e3b292e4..4e01113ff985 100644 --- a/libstdc++-v3/testsuite/27_io/spanstream/version.cc +++ b/libstdc++-v3/testsuite/27_io/spanstream/version.cc @@ -1,5 +1,6 @@ // { dg-do compile { target c++23 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/cons/value_init.cc b/libstdc++-v3/testsuite/29_atomics/atomic/cons/value_init.cc index 809c6c024433..a852c42f3977 100644 --- a/libstdc++-v3/testsuite/29_atomics/atomic/cons/value_init.cc +++ b/libstdc++-v3/testsuite/29_atomics/atomic/cons/value_init.cc @@ -17,6 +17,7 @@ // { dg-do run { target c++20 } } // { dg-require-thread-fence "" } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/lock_free_aliases.cc b/libstdc++-v3/testsuite/29_atomics/atomic/lock_free_aliases.cc index 8192f73dd478..372a63129ff7 100644 --- a/libstdc++-v3/testsuite/29_atomics/atomic/lock_free_aliases.cc +++ b/libstdc++-v3/testsuite/29_atomics/atomic/lock_free_aliases.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/1.cc b/libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/1.cc index 3ded103b4fe0..2fe83d58aaaa 100644 --- a/libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/1.cc +++ b/libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/1.cc @@ -18,6 +18,7 @@ // { dg-do compile { target c++20 } } // { dg-require-effective-target gthreads } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/2.cc b/libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/2.cc index d07bdeece203..35bff9fcf7a0 100644 --- a/libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/2.cc +++ b/libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/2.cc @@ -18,6 +18,7 @@ // { dg-do compile { target c++20 } } // { dg-require-effective-target gthreads } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/c_compat.cc b/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/c_compat.cc index 70d37d4d8cde..bcdb969b0c0f 100644 --- a/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/c_compat.cc +++ b/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/c_compat.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++23 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/version.cc b/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/version.cc index 26fa76d0229c..5feb08936d83 100644 --- a/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/version.cc +++ b/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/version.cc @@ -1,4 +1,5 @@ // { dg-do preprocess { target c++23 } } +// { dg-add-options no_pch } // is not freestanding. // { dg-require-effective-target hosted } diff --git a/libstdc++-v3/testsuite/30_threads/barrier/1.cc b/libstdc++-v3/testsuite/30_threads/barrier/1.cc index e7f62a17f241..f1e981eb2f87 100644 --- a/libstdc++-v3/testsuite/30_threads/barrier/1.cc +++ b/libstdc++-v3/testsuite/30_threads/barrier/1.cc @@ -17,6 +17,7 @@ // { dg-do compile { target c++20 } } // { dg-require-effective-target gthreads } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/30_threads/barrier/2.cc b/libstdc++-v3/testsuite/30_threads/barrier/2.cc index d33597a0c409..d11eacc825b4 100644 --- a/libstdc++-v3/testsuite/30_threads/barrier/2.cc +++ b/libstdc++-v3/testsuite/30_threads/barrier/2.cc @@ -18,6 +18,7 @@ // { dg-do compile { target c++20 } } // { dg-require-effective-target gthreads } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable_any/stop_token/1.cc b/libstdc++-v3/testsuite/30_threads/condition_variable_any/stop_token/1.cc index 8c173977bcb2..03a867c3131c 100644 --- a/libstdc++-v3/testsuite/30_threads/condition_variable_any/stop_token/1.cc +++ b/libstdc++-v3/testsuite/30_threads/condition_variable_any/stop_token/1.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable_any/stop_token/2.cc b/libstdc++-v3/testsuite/30_threads/condition_variable_any/stop_token/2.cc index 754bd912eb4d..e698915ed6fd 100644 --- a/libstdc++-v3/testsuite/30_threads/condition_variable_any/stop_token/2.cc +++ b/libstdc++-v3/testsuite/30_threads/condition_variable_any/stop_token/2.cc @@ -17,6 +17,7 @@ // { dg-do compile { target c++20 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/30_threads/jthread/1.cc b/libstdc++-v3/testsuite/30_threads/jthread/1.cc index e4063af37840..ff3d428efeca 100644 --- a/libstdc++-v3/testsuite/30_threads/jthread/1.cc +++ b/libstdc++-v3/testsuite/30_threads/jthread/1.cc @@ -17,6 +17,7 @@ // { dg-do compile { target c++20 } } // { dg-require-gthreads "" } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/30_threads/jthread/version.cc b/libstdc++-v3/testsuite/30_threads/jthread/version.cc index 48241e981eac..00dfbd881a93 100644 --- a/libstdc++-v3/testsuite/30_threads/jthread/version.cc +++ b/libstdc++-v3/testsuite/30_threads/jthread/version.cc @@ -18,6 +18,7 @@ // { dg-do compile { target c++20 } } // { dg-require-gthreads "" } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/30_threads/latch/1.cc b/libstdc++-v3/testsuite/30_threads/latch/1.cc index 6f4da1120129..ba0a95bad88c 100644 --- a/libstdc++-v3/testsuite/30_threads/latch/1.cc +++ b/libstdc++-v3/testsuite/30_threads/latch/1.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/30_threads/latch/2.cc b/libstdc++-v3/testsuite/30_threads/latch/2.cc index 4ebd9e67ec78..15e325bd950f 100644 --- a/libstdc++-v3/testsuite/30_threads/latch/2.cc +++ b/libstdc++-v3/testsuite/30_threads/latch/2.cc @@ -17,6 +17,7 @@ // { dg-do compile { target c++20 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/30_threads/scoped_lock/requirements/typedefs.cc b/libstdc++-v3/testsuite/30_threads/scoped_lock/requirements/typedefs.cc index c171afc6a7cc..438b62f4814b 100644 --- a/libstdc++-v3/testsuite/30_threads/scoped_lock/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/30_threads/scoped_lock/requirements/typedefs.cc @@ -1,5 +1,6 @@ // { dg-do compile { target c++17 } } // { dg-require-gthreads "" } +// { dg-add-options no_pch } // Copyright (C) 2017-2023 Free Software Foundation, Inc. // @@ -18,7 +19,6 @@ // with this library; see the file COPYING3. If not see // . - // NB: This file is for testing with NO OTHER INCLUDES. #include diff --git a/libstdc++-v3/testsuite/30_threads/semaphore/1.cc b/libstdc++-v3/testsuite/30_threads/semaphore/1.cc index f58e7f522dff..ced3c6c700c5 100644 --- a/libstdc++-v3/testsuite/30_threads/semaphore/1.cc +++ b/libstdc++-v3/testsuite/30_threads/semaphore/1.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/30_threads/semaphore/2.cc b/libstdc++-v3/testsuite/30_threads/semaphore/2.cc index 0bab29417acf..111984d8e0f6 100644 --- a/libstdc++-v3/testsuite/30_threads/semaphore/2.cc +++ b/libstdc++-v3/testsuite/30_threads/semaphore/2.cc @@ -17,6 +17,7 @@ // { dg-do compile { target c++20 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/30_threads/stop_token/1.cc b/libstdc++-v3/testsuite/30_threads/stop_token/1.cc index 099c6c1c271f..c2f1d8d4d761 100644 --- a/libstdc++-v3/testsuite/30_threads/stop_token/1.cc +++ b/libstdc++-v3/testsuite/30_threads/stop_token/1.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/30_threads/stop_token/2.cc b/libstdc++-v3/testsuite/30_threads/stop_token/2.cc index 754bd912eb4d..e698915ed6fd 100644 --- a/libstdc++-v3/testsuite/30_threads/stop_token/2.cc +++ b/libstdc++-v3/testsuite/30_threads/stop_token/2.cc @@ -17,6 +17,7 @@ // { dg-do compile { target c++20 } } // { dg-require-effective-target hosted } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/experimental/feat-char8_t.cc b/libstdc++-v3/testsuite/experimental/feat-char8_t.cc index c9b277a46266..05c1aa21541a 100644 --- a/libstdc++-v3/testsuite/experimental/feat-char8_t.cc +++ b/libstdc++-v3/testsuite/experimental/feat-char8_t.cc @@ -1,5 +1,6 @@ // { dg-do preprocess { target c++11 } } // { dg-options "-fchar8_t" } +// { dg-add-options no_pch } #include #include diff --git a/libstdc++-v3/testsuite/experimental/feat-cxx14.cc b/libstdc++-v3/testsuite/experimental/feat-cxx14.cc index effe382e06e6..c009062b55cd 100644 --- a/libstdc++-v3/testsuite/experimental/feat-cxx14.cc +++ b/libstdc++-v3/testsuite/experimental/feat-cxx14.cc @@ -1,4 +1,5 @@ // { dg-do preprocess { target c++14 } } +// { dg-add-options no_pch } #include #include @@ -8,10 +9,12 @@ #include #include #include +#include #include #include #include #include +#include #ifndef __cpp_lib_integer_sequence # error "__cpp_lib_integer_sequence" diff --git a/libstdc++-v3/testsuite/experimental/iterator/ostream_joiner.cc b/libstdc++-v3/testsuite/experimental/iterator/ostream_joiner.cc index 61af30058bb4..ed2c4da91ede 100644 --- a/libstdc++-v3/testsuite/experimental/iterator/ostream_joiner.cc +++ b/libstdc++-v3/testsuite/experimental/iterator/ostream_joiner.cc @@ -16,10 +16,9 @@ // . // { dg-do run { target c++14 } } +// { dg-add-options no_pch } #include -#include -#include #ifndef __cpp_lib_experimental_ostream_joiner # error Feature-test macro is not defined. @@ -27,6 +26,9 @@ # error Feature-test macro has bad value. #endif +#include +#include + using std::experimental::ostream_joiner; void diff --git a/libstdc++-v3/testsuite/experimental/numeric/gcd.cc b/libstdc++-v3/testsuite/experimental/numeric/gcd.cc index 505675d618cd..6d447c36ed88 100644 --- a/libstdc++-v3/testsuite/experimental/numeric/gcd.cc +++ b/libstdc++-v3/testsuite/experimental/numeric/gcd.cc @@ -16,9 +16,9 @@ // . // { dg-do compile { target c++14 } } +// { dg-add-options no_pch } #include -#include #ifndef __cpp_lib_experimental_gcd_lcm # error "Feature-test macro for gcd missing" @@ -26,6 +26,8 @@ # error "Feature-test macro for gcd has wrong value" #endif +#include + using std::experimental::fundamentals_v2::gcd; using std::experimental::is_same_v; diff --git a/libstdc++-v3/testsuite/experimental/scopeguard/uniqueres.cc b/libstdc++-v3/testsuite/experimental/scopeguard/uniqueres.cc index 27a427f7ea86..4deb60a14228 100644 --- a/libstdc++-v3/testsuite/experimental/scopeguard/uniqueres.cc +++ b/libstdc++-v3/testsuite/experimental/scopeguard/uniqueres.cc @@ -1,7 +1,7 @@ // { dg-do run { target c++20 } } +// { dg-add-options no_pch } #include -#include #ifndef __cpp_lib_experimental_scope # error Feature-test macro is not defined. @@ -9,6 +9,8 @@ # error Feature-test macro has bad value. #endif +#include + using std::experimental::unique_resource; void diff --git a/libstdc++-v3/testsuite/std/concepts/1.cc b/libstdc++-v3/testsuite/std/concepts/1.cc index 0301b91e8690..0d056d68de8e 100644 --- a/libstdc++-v3/testsuite/std/concepts/1.cc +++ b/libstdc++-v3/testsuite/std/concepts/1.cc @@ -16,6 +16,7 @@ // . // { dg-do preprocess { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/std/concepts/2.cc b/libstdc++-v3/testsuite/std/concepts/2.cc index 53a1e0069933..ebb054ac33b9 100644 --- a/libstdc++-v3/testsuite/std/concepts/2.cc +++ b/libstdc++-v3/testsuite/std/concepts/2.cc @@ -16,6 +16,7 @@ // . // { dg-do preprocess { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/as_const/1.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/as_const/1.cc index 48c7d38a0a35..2d36e0a47122 100644 --- a/libstdc++-v3/testsuite/std/ranges/adaptors/as_const/1.cc +++ b/libstdc++-v3/testsuite/std/ranges/adaptors/as_const/1.cc @@ -1,6 +1,12 @@ // { dg-do run { target c++23 } } +// { dg-add-options no_pch } #include + +#if __cpp_lib_ranges_as_const != 202207L +# error "Feature-test macro __cpp_lib_ranges_as_const has wrong value in " +#endif + #include #include #include @@ -8,10 +14,6 @@ #include #include -#if __cpp_lib_ranges_as_const != 202207L -# error "Feature-test macro __cpp_lib_ranges_as_const has wrong value in " -#endif - namespace ranges = std::ranges; namespace views = std::views; diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/as_rvalue/1.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/as_rvalue/1.cc index 74223a699b68..487700773705 100644 --- a/libstdc++-v3/testsuite/std/ranges/adaptors/as_rvalue/1.cc +++ b/libstdc++-v3/testsuite/std/ranges/adaptors/as_rvalue/1.cc @@ -1,15 +1,17 @@ // { dg-do run { target c++23 } } +// { dg-add-options no_pch } #include -#include -#include -#include -#include #if __cpp_lib_ranges_as_rvalue != 202207L # error "Feature-test macro __cpp_lib_ranges_as_rvalue has wrong value in " #endif +#include +#include +#include +#include + namespace ranges = std::ranges; namespace views = std::views; diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/chunk/1.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/chunk/1.cc index 7b8d4bacc0c9..90eb608ca5eb 100644 --- a/libstdc++-v3/testsuite/std/ranges/adaptors/chunk/1.cc +++ b/libstdc++-v3/testsuite/std/ranges/adaptors/chunk/1.cc @@ -1,15 +1,17 @@ // { dg-do run { target c++23 } } +// { dg-add-options no_pch } #include -#include -#include -#include -#include #if __cpp_lib_ranges_chunk != 202202L # error "Feature-test macro __cpp_lib_ranges_chunk has wrong value in " #endif +#include +#include +#include +#include + namespace ranges = std::ranges; namespace views = std::views; diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/chunk_by/1.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/chunk_by/1.cc index 656c3c0d15e8..5d1ce55b4854 100644 --- a/libstdc++-v3/testsuite/std/ranges/adaptors/chunk_by/1.cc +++ b/libstdc++-v3/testsuite/std/ranges/adaptors/chunk_by/1.cc @@ -1,15 +1,17 @@ // { dg-do run { target c++23 } } +// { dg-add-options no_pch } #include -#include -#include -#include -#include #if __cpp_lib_ranges_chunk_by != 202202L # error "Feature-test macro __cpp_lib_ranges_chunk_by has wrong value in " #endif +#include +#include +#include +#include + namespace ranges = std::ranges; namespace views = std::views; diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/enumerate/1.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/enumerate/1.cc index d5221680d6b8..c33aa9ff51e1 100644 --- a/libstdc++-v3/testsuite/std/ranges/adaptors/enumerate/1.cc +++ b/libstdc++-v3/testsuite/std/ranges/adaptors/enumerate/1.cc @@ -1,15 +1,17 @@ // { dg-do run { target c++23 } } +// { dg-add-options no_pch } #include -#include -#include -#include -#include #if __cpp_lib_ranges_enumerate != 202302L # error "Feature-test macro __cpp_lib_ranges_enumerate has wrong value in " #endif +#include +#include +#include +#include + namespace ranges = std::ranges; namespace views = std::views; diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/join_with/1.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/join_with/1.cc index 7bed169d127a..8ab30a5277da 100644 --- a/libstdc++-v3/testsuite/std/ranges/adaptors/join_with/1.cc +++ b/libstdc++-v3/testsuite/std/ranges/adaptors/join_with/1.cc @@ -1,15 +1,17 @@ // { dg-do run { target c++23 } } +// { dg-add-options no_pch } #include -#include -#include -#include -#include #if __cpp_lib_ranges_join_with != 202202L # error "Feature-test macro __cpp_lib_ranges_join_with has wrong value in " #endif +#include +#include +#include +#include + namespace ranges = std::ranges; namespace views = std::views; using namespace std::literals; diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/slide/1.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/slide/1.cc index 8dfb8715e5a7..bafe9fbc4bf7 100644 --- a/libstdc++-v3/testsuite/std/ranges/adaptors/slide/1.cc +++ b/libstdc++-v3/testsuite/std/ranges/adaptors/slide/1.cc @@ -1,15 +1,17 @@ // { dg-do run { target c++23 } } +// { dg-add-options no_pch } #include -#include -#include -#include -#include #if __cpp_lib_ranges_slide != 202202L # error "Feature-test macro __cpp_lib_ranges_slide has wrong value in " #endif +#include +#include +#include +#include + namespace ranges = std::ranges; namespace views = std::views; diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/stride/1.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/stride/1.cc index dfc413dbb66e..e0af8c874fd5 100644 --- a/libstdc++-v3/testsuite/std/ranges/adaptors/stride/1.cc +++ b/libstdc++-v3/testsuite/std/ranges/adaptors/stride/1.cc @@ -1,14 +1,16 @@ // { dg-do run { target c++23 } } +// { dg-add-options no_pch } #include -#include -#include -#include #if __cpp_lib_ranges_stride != 202207L # error "Feature-test macro __cpp_lib_ranges_stride has wrong value in " #endif +#include +#include +#include + namespace ranges = std::ranges; namespace views = std::views; diff --git a/libstdc++-v3/testsuite/std/ranges/cartesian_product/1.cc b/libstdc++-v3/testsuite/std/ranges/cartesian_product/1.cc index 8938e92158dd..f69f965c0ce3 100644 --- a/libstdc++-v3/testsuite/std/ranges/cartesian_product/1.cc +++ b/libstdc++-v3/testsuite/std/ranges/cartesian_product/1.cc @@ -1,15 +1,17 @@ // { dg-do run { target c++23 } } +// { dg-add-options no_pch } #include -#include -#include -#include -#include #if __cpp_lib_ranges_cartesian_product != 202207L # error "Feature-test macro __cpp_lib_ranges_cartesian_product has wrong value in " #endif +#include +#include +#include +#include + namespace ranges = std::ranges; namespace views = std::views; diff --git a/libstdc++-v3/testsuite/std/ranges/headers/ranges/synopsis.cc b/libstdc++-v3/testsuite/std/ranges/headers/ranges/synopsis.cc index dfa3fcaa37e5..e9fef0dce48a 100644 --- a/libstdc++-v3/testsuite/std/ranges/headers/ranges/synopsis.cc +++ b/libstdc++-v3/testsuite/std/ranges/headers/ranges/synopsis.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/std/ranges/repeat/1.cc b/libstdc++-v3/testsuite/std/ranges/repeat/1.cc index 0f6e551c1e96..cad8c8dcbe72 100644 --- a/libstdc++-v3/testsuite/std/ranges/repeat/1.cc +++ b/libstdc++-v3/testsuite/std/ranges/repeat/1.cc @@ -1,14 +1,16 @@ // { dg-do run { target c++23 } } +// { dg-add-options no_pch } #include -#include -#include -#include #if __cpp_lib_ranges_repeat != 202207L # error "Feature-test macro __cpp_lib_ranges_repeat has wrong value in " #endif +#include +#include +#include + namespace ranges = std::ranges; namespace views = std::views; diff --git a/libstdc++-v3/testsuite/std/ranges/version_c++23.cc b/libstdc++-v3/testsuite/std/ranges/version_c++23.cc index f68df67d3b3e..823264f32aa5 100644 --- a/libstdc++-v3/testsuite/std/ranges/version_c++23.cc +++ b/libstdc++-v3/testsuite/std/ranges/version_c++23.cc @@ -1,4 +1,5 @@ // { dg-do preprocess { target c++23 } } +// { dg-add-options no_pch } #include diff --git a/libstdc++-v3/testsuite/std/ranges/zip/1.cc b/libstdc++-v3/testsuite/std/ranges/zip/1.cc index f7c2c00a2cdc..b7717aed92c7 100644 --- a/libstdc++-v3/testsuite/std/ranges/zip/1.cc +++ b/libstdc++-v3/testsuite/std/ranges/zip/1.cc @@ -1,16 +1,18 @@ // { dg-do run { target c++23 } } +// { dg-add-options no_pch } #include + +#if __cpp_lib_ranges_zip != 202110L +# error "Feature-test macro __cpp_lib_ranges_zip has wrong value in " +#endif + #include #include #include #include #include -#if __cpp_lib_ranges_zip != 202110L -# error "Feature-test macro __cpp_lib_ranges_zip has wrong value in " -#endif - namespace ranges = std::ranges; namespace views = std::views; diff --git a/libstdc++-v3/testsuite/std/time/syn_c++20.cc b/libstdc++-v3/testsuite/std/time/syn_c++20.cc index 9f0e5ee5a9d0..dd9e4059c1bc 100644 --- a/libstdc++-v3/testsuite/std/time/syn_c++20.cc +++ b/libstdc++-v3/testsuite/std/time/syn_c++20.cc @@ -16,6 +16,7 @@ // . // { dg-do compile { target c++20 } } +// { dg-add-options no_pch } #include From 7ffa63df8f5281bcd81bbb9842b698bc91fbb4fd Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 19 Sep 2023 17:46:32 +0100 Subject: [PATCH 099/169] libstdc++: Only declare feature test macros in standard headers This change moves the definitions of feature test macros (or strictly speaking, the requests for to define them) so that only standard headers define them. For example, will no longer define macros related to std::shared_ptr, only and will define them. This means that __cpp_lib_shared_ptr_arrays will not be defined by or by other headers that include . It will only be defined when has been included. This will discourage users from relying on transitive includes. As a result, internal headers that need to query the macros should use the internal macros like __glibcxx_shared_ptr_arrays instead of __cpp_lib_shared_ptr_arrays, as those internal macros are defined by the internal headers after icluding . There are some exceptions to this rule, because __cpp_lib_is_constant_evaluated is defined by bits/c++config.h and so is available everywhere, and __cpp_lib_three_way_comparison is defined by which several headers are explicitly specified to include, so its macro is guaranteed to be usable too. N.B. not many internal headers actually need an explicit include of , because most of them include and so get all the __glibcxx_foo internal macros from there. libstdc++-v3/ChangeLog: * include/bits/algorithmfwd.h: Do not define standard feature test macro here. * include/bits/align.h: Likewise. Test internal macros instead of standard macros. * include/bits/alloc_traits.h: Likewise. * include/bits/allocator.h: Likewise. * include/bits/atomic_base.h: Likewise. * include/bits/atomic_timed_wait.h: Likewise. * include/bits/atomic_wait.h: Likewise. * include/bits/basic_string.h: Likewise. * include/bits/basic_string.tcc: Likewise. * include/bits/char_traits.h: Likewise. * include/bits/chrono.h: Likewise. * include/bits/cow_string.h: Likewise. * include/bits/forward_list.h: Likewise. * include/bits/hashtable.h: Likewise. * include/bits/ios_base.h: Likewise. * include/bits/memory_resource.h: Likewise. * include/bits/move.h: Likewise. * include/bits/move_only_function.h: Likewise. * include/bits/node_handle.h: Likewise. * include/bits/ptr_traits.h: Likewise. * include/bits/range_access.h: Likewise. * include/bits/ranges_algo.h: Likewise. * include/bits/ranges_cmp.h: Likewise. * include/bits/ranges_util.h: Likewise. * include/bits/semaphore_base.h: Likewise. * include/bits/shared_ptr.h: Likewise. * include/bits/shared_ptr_atomic.h: Likewise. * include/bits/shared_ptr_base.h: Likewise. * include/bits/stl_algo.h: Likewise. * include/bits/stl_algobase.h: Likewise. * include/bits/stl_function.h: Likewise. * include/bits/stl_iterator.h: Likewise. * include/bits/stl_list.h: Likewise. * include/bits/stl_map.h: Likewise. * include/bits/stl_pair.h: Likewise. * include/bits/stl_queue.h: Likewise. * include/bits/stl_stack.h: Likewise. * include/bits/stl_tree.h: Likewise. * include/bits/stl_uninitialized.h: Likewise. * include/bits/stl_vector.h: Likewise. * include/bits/unique_ptr.h: Likewise. * include/bits/unordered_map.h: Likewise. * include/bits/uses_allocator_args.h: Likewise. * include/bits/utility.h: Likewise. * include/bits/erase_if.h: Add comment. * include/std/algorithm: Define standard feature test macros here. * include/std/atomic: Likewise. * include/std/array: Likewise. * include/std/chrono: Likewise. * include/std/condition_variable: Likewise. * include/std/deque: Likewise. * include/std/format: Likewise. * include/std/functional: Likewise. * include/std/forward_list: Likewise. * include/std/ios: Likewise. * include/std/iterator: Likewise. * include/std/list: Likewise. * include/std/map: Likewise. * include/std/memory: Likewise. * include/std/numeric: Likewise. * include/std/queue: Likewise. * include/std/ranges: Likewise. * include/std/regex: Likewise. * include/std/set: Likewise. * include/std/stack: Likewise. * include/std/stop_token: Likewise. * include/std/string: Likewise. * include/std/string_view: * include/std/tuple: Likewise. * include/std/unordered_map: * include/std/unordered_set: * include/std/utility: Likewise. * include/std/vector: Likewise. * include/std/scoped_allocator: Query internal macros instead of standard macros. --- libstdc++-v3/include/bits/algorithmfwd.h | 3 - libstdc++-v3/include/bits/align.h | 10 +-- libstdc++-v3/include/bits/alloc_traits.h | 4 -- libstdc++-v3/include/bits/allocator.h | 3 - libstdc++-v3/include/bits/atomic_base.h | 42 ++++++----- libstdc++-v3/include/bits/atomic_timed_wait.h | 2 +- libstdc++-v3/include/bits/atomic_wait.h | 5 +- libstdc++-v3/include/bits/basic_string.h | 22 +++--- libstdc++-v3/include/bits/basic_string.tcc | 6 +- libstdc++-v3/include/bits/char_traits.h | 3 - libstdc++-v3/include/bits/chrono.h | 16 ++--- libstdc++-v3/include/bits/cow_string.h | 11 ++- libstdc++-v3/include/bits/erase_if.h | 4 +- libstdc++-v3/include/bits/forward_list.h | 5 +- libstdc++-v3/include/bits/hashtable.h | 7 +- libstdc++-v3/include/bits/ios_base.h | 5 +- libstdc++-v3/include/bits/memory_resource.h | 6 +- libstdc++-v3/include/bits/move.h | 3 - .../include/bits/move_only_function.h | 5 +- libstdc++-v3/include/bits/node_handle.h | 5 +- libstdc++-v3/include/bits/ptr_traits.h | 8 +-- libstdc++-v3/include/bits/range_access.h | 12 ++-- libstdc++-v3/include/bits/ranges_algo.h | 25 +++---- libstdc++-v3/include/bits/ranges_cmp.h | 7 +- libstdc++-v3/include/bits/ranges_util.h | 2 +- libstdc++-v3/include/bits/semaphore_base.h | 6 +- libstdc++-v3/include/bits/shared_ptr.h | 22 +++--- libstdc++-v3/include/bits/shared_ptr_atomic.h | 18 +++-- libstdc++-v3/include/bits/shared_ptr_base.h | 28 ++++---- libstdc++-v3/include/bits/stl_algo.h | 12 ++-- libstdc++-v3/include/bits/stl_algobase.h | 11 ++- libstdc++-v3/include/bits/stl_function.h | 25 +++---- libstdc++-v3/include/bits/stl_iterator.h | 72 +++++++++---------- libstdc++-v3/include/bits/stl_list.h | 5 +- libstdc++-v3/include/bits/stl_map.h | 5 +- libstdc++-v3/include/bits/stl_pair.h | 8 +-- libstdc++-v3/include/bits/stl_queue.h | 7 +- libstdc++-v3/include/bits/stl_stack.h | 7 +- libstdc++-v3/include/bits/stl_tree.h | 3 - libstdc++-v3/include/bits/stl_uninitialized.h | 7 +- libstdc++-v3/include/bits/stl_vector.h | 3 - libstdc++-v3/include/bits/unique_ptr.h | 6 +- libstdc++-v3/include/bits/unordered_map.h | 7 +- .../include/bits/uses_allocator_args.h | 5 +- libstdc++-v3/include/bits/utility.h | 11 +-- libstdc++-v3/include/std/algorithm | 8 +++ libstdc++-v3/include/std/array | 2 + libstdc++-v3/include/std/atomic | 3 + libstdc++-v3/include/std/chrono | 4 ++ libstdc++-v3/include/std/condition_variable | 2 +- libstdc++-v3/include/std/deque | 1 + libstdc++-v3/include/std/format | 5 +- libstdc++-v3/include/std/forward_list | 5 +- libstdc++-v3/include/std/functional | 19 ++--- libstdc++-v3/include/std/ios | 3 + libstdc++-v3/include/std/iterator | 7 ++ libstdc++-v3/include/std/list | 3 + libstdc++-v3/include/std/map | 7 ++ libstdc++-v3/include/std/memory | 14 ++++ libstdc++-v3/include/std/numeric | 1 + libstdc++-v3/include/std/queue | 3 + libstdc++-v3/include/std/ranges | 1 + libstdc++-v3/include/std/regex | 3 + libstdc++-v3/include/std/scoped_allocator | 6 +- libstdc++-v3/include/std/set | 6 ++ libstdc++-v3/include/std/stack | 3 + libstdc++-v3/include/std/stop_token | 2 +- libstdc++-v3/include/std/string | 6 ++ libstdc++-v3/include/std/string_view | 1 + libstdc++-v3/include/std/tuple | 2 + libstdc++-v3/include/std/unordered_map | 7 ++ libstdc++-v3/include/std/unordered_set | 6 ++ libstdc++-v3/include/std/utility | 24 ++++--- libstdc++-v3/include/std/vector | 3 + 74 files changed, 313 insertions(+), 333 deletions(-) diff --git a/libstdc++-v3/include/bits/algorithmfwd.h b/libstdc++-v3/include/bits/algorithmfwd.h index bc757c340a43..ab7641815b98 100644 --- a/libstdc++-v3/include/bits/algorithmfwd.h +++ b/libstdc++-v3/include/bits/algorithmfwd.h @@ -39,9 +39,6 @@ #include #endif -#define __glibcxx_want_constexpr_algorithms -#include - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION diff --git a/libstdc++-v3/include/bits/align.h b/libstdc++-v3/include/bits/align.h index 4152639622e6..68bacf4edd99 100644 --- a/libstdc++-v3/include/bits/align.h +++ b/libstdc++-v3/include/bits/align.h @@ -30,14 +30,10 @@ #ifndef _GLIBCXX_ALIGN_H #define _GLIBCXX_ALIGN_H 1 -#include - -#define __glibcxx_want_assume_aligned -#include - #include // std::has_single_bit #include // uintptr_t #include // _GLIBCXX_DEBUG_ASSERT +#include namespace std _GLIBCXX_VISIBILITY(default) { @@ -78,7 +74,7 @@ align(size_t __align, size_t __size, void*& __ptr, size_t& __space) noexcept } } -#ifdef __cpp_lib_assume_aligned // C++ >= 20 +#ifdef __glibcxx_assume_aligned // C++ >= 20 /** @brief Inform the compiler that a pointer is aligned. * * @tparam _Align An alignment value (i.e. a power of two) @@ -105,7 +101,7 @@ align(size_t __align, size_t __size, void*& __ptr, size_t& __space) noexcept return static_cast<_Tp*>(__builtin_assume_aligned(__ptr, _Align)); } } -#endif // __cpp_lib_assume_aligned +#endif // __glibcxx_assume_aligned _GLIBCXX_END_NAMESPACE_VERSION } // namespace diff --git a/libstdc++-v3/include/bits/alloc_traits.h b/libstdc++-v3/include/bits/alloc_traits.h index 453278e5348d..611615d60526 100644 --- a/libstdc++-v3/include/bits/alloc_traits.h +++ b/libstdc++-v3/include/bits/alloc_traits.h @@ -40,10 +40,6 @@ # endif #endif -#define __glibcxx_want_constexpr_dynamic_alloc -#define __glibcxx_want_allocator_traits_is_always_equal -#include - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION diff --git a/libstdc++-v3/include/bits/allocator.h b/libstdc++-v3/include/bits/allocator.h index 41e35f876f00..af7951a02a55 100644 --- a/libstdc++-v3/include/bits/allocator.h +++ b/libstdc++-v3/include/bits/allocator.h @@ -49,9 +49,6 @@ #include #endif -#define __glibcxx_want_incomplete_container_elements -#include - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION diff --git a/libstdc++-v3/include/bits/atomic_base.h b/libstdc++-v3/include/bits/atomic_base.h index 974872ad7a63..f4ce0fa5324a 100644 --- a/libstdc++-v3/include/bits/atomic_base.h +++ b/libstdc++-v3/include/bits/atomic_base.h @@ -46,8 +46,6 @@ #define _GLIBCXX_ALWAYS_INLINE inline __attribute__((__always_inline__)) #endif -#define __glibcxx_want_atomic_value_initialization -#define __glibcxx_want_atomic_flag_test #include namespace std _GLIBCXX_VISIBILITY(default) @@ -161,7 +159,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } /// @cond undocumented -#if __cpp_lib_atomic_value_initialization +#if __glibcxx_atomic_value_initialization # define _GLIBCXX20_INIT(I) = I #else # define _GLIBCXX20_INIT(I) @@ -234,7 +232,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __atomic_test_and_set (&_M_i, int(__m)); } -#ifdef __cpp_lib_atomic_flag_test // C++ >= 20 +#ifdef __glibcxx_atomic_flag_test // C++ >= 20 _GLIBCXX_ALWAYS_INLINE bool test(memory_order __m = memory_order_seq_cst) const noexcept { @@ -252,7 +250,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } #endif -#if __cpp_lib_atomic_wait // C++ >= 20 && (linux_futex || gthread) +#if __glibcxx_atomic_wait // C++ >= 20 && (linux_futex || gthread) _GLIBCXX_ALWAYS_INLINE void wait(bool __old, memory_order __m = memory_order_seq_cst) const noexcept @@ -277,7 +275,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { std::__atomic_notify_address(&_M_i, true); } // TODO add const volatile overload -#endif // __cpp_lib_atomic_wait +#endif // __glibcxx_atomic_wait _GLIBCXX_ALWAYS_INLINE void clear(memory_order __m = memory_order_seq_cst) noexcept @@ -603,7 +601,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __cmpexch_failure_order(__m)); } -#if __cpp_lib_atomic_wait +#if __glibcxx_atomic_wait _GLIBCXX_ALWAYS_INLINE void wait(__int_type __old, memory_order __m = memory_order_seq_cst) const noexcept @@ -625,7 +623,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { std::__atomic_notify_address(&_M_i, true); } // TODO add const volatile overload -#endif // __cpp_lib_atomic_wait +#endif // __glibcxx_atomic_wait _GLIBCXX_ALWAYS_INLINE __int_type fetch_add(__int_type __i, @@ -905,7 +903,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION int(__m1), int(__m2)); } -#if __cpp_lib_atomic_wait +#if __glibcxx_atomic_wait _GLIBCXX_ALWAYS_INLINE void wait(__pointer_type __old, memory_order __m = memory_order_seq_cst) const noexcept @@ -928,7 +926,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { std::__atomic_notify_address(&_M_p, true); } // TODO add const volatile overload -#endif // __cpp_lib_atomic_wait +#endif // __glibcxx_atomic_wait _GLIBCXX_ALWAYS_INLINE __pointer_type fetch_add(ptrdiff_t __d, @@ -1138,7 +1136,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION *__ptr, __expected, __desired, false, __success, __failure); } -#if __cpp_lib_atomic_wait +#if __glibcxx_atomic_wait template _GLIBCXX_ALWAYS_INLINE void wait(const _Tp* __ptr, _Val<_Tp> __old, @@ -1163,7 +1161,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { std::__atomic_notify_address(__ptr, true); } // TODO add const volatile overload -#endif // __cpp_lib_atomic_wait +#endif // __glibcxx_atomic_wait template _GLIBCXX_ALWAYS_INLINE _Tp @@ -1418,7 +1416,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __cmpexch_failure_order(__order)); } -#if __cpp_lib_atomic_wait +#if __glibcxx_atomic_wait _GLIBCXX_ALWAYS_INLINE void wait(_Fp __old, memory_order __m = memory_order_seq_cst) const noexcept { __atomic_impl::wait(&_M_fp, __old, __m); } @@ -1436,7 +1434,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { __atomic_impl::notify_all(&_M_fp); } // TODO add const volatile overload -#endif // __cpp_lib_atomic_wait +#endif // __glibcxx_atomic_wait value_type fetch_add(value_type __i, @@ -1573,7 +1571,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __cmpexch_failure_order(__order)); } -#if __cpp_lib_atomic_wait +#if __glibcxx_atomic_wait _GLIBCXX_ALWAYS_INLINE void wait(_Tp __old, memory_order __m = memory_order_seq_cst) const noexcept { __atomic_impl::wait(_M_ptr, __old, __m); } @@ -1591,7 +1589,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { __atomic_impl::notify_all(_M_ptr); } // TODO add const volatile overload -#endif // __cpp_lib_atomic_wait +#endif // __glibcxx_atomic_wait private: _Tp* _M_ptr; @@ -1686,7 +1684,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __cmpexch_failure_order(__order)); } -#if __cpp_lib_atomic_wait +#if __glibcxx_atomic_wait _GLIBCXX_ALWAYS_INLINE void wait(_Tp __old, memory_order __m = memory_order_seq_cst) const noexcept { __atomic_impl::wait(_M_ptr, __old, __m); } @@ -1704,7 +1702,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { __atomic_impl::notify_all(_M_ptr); } // TODO add const volatile overload -#endif // __cpp_lib_atomic_wait +#endif // __glibcxx_atomic_wait value_type fetch_add(value_type __i, @@ -1859,7 +1857,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __cmpexch_failure_order(__order)); } -#if __cpp_lib_atomic_wait +#if __glibcxx_atomic_wait _GLIBCXX_ALWAYS_INLINE void wait(_Fp __old, memory_order __m = memory_order_seq_cst) const noexcept { __atomic_impl::wait(_M_ptr, __old, __m); } @@ -1877,7 +1875,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { __atomic_impl::notify_all(_M_ptr); } // TODO add const volatile overload -#endif // __cpp_lib_atomic_wait +#endif // __glibcxx_atomic_wait value_type fetch_add(value_type __i, @@ -1986,7 +1984,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __cmpexch_failure_order(__order)); } -#if __cpp_lib_atomic_wait +#if __glibcxx_atomic_wait _GLIBCXX_ALWAYS_INLINE void wait(_Tp* __old, memory_order __m = memory_order_seq_cst) const noexcept { __atomic_impl::wait(_M_ptr, __old, __m); } @@ -2004,7 +2002,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { __atomic_impl::notify_all(_M_ptr); } // TODO add const volatile overload -#endif // __cpp_lib_atomic_wait +#endif // __glibcxx_atomic_wait _GLIBCXX_ALWAYS_INLINE value_type fetch_add(difference_type __d, diff --git a/libstdc++-v3/include/bits/atomic_timed_wait.h b/libstdc++-v3/include/bits/atomic_timed_wait.h index 8bb731db7872..ba21ab20a111 100644 --- a/libstdc++-v3/include/bits/atomic_timed_wait.h +++ b/libstdc++-v3/include/bits/atomic_timed_wait.h @@ -34,7 +34,7 @@ #include -#if __cpp_lib_atomic_wait +#if __glibcxx_atomic_wait #include #include #include diff --git a/libstdc++-v3/include/bits/atomic_wait.h b/libstdc++-v3/include/bits/atomic_wait.h index 9cbfb99a7c22..506b7f0cc9dc 100644 --- a/libstdc++-v3/include/bits/atomic_wait.h +++ b/libstdc++-v3/include/bits/atomic_wait.h @@ -32,10 +32,9 @@ #pragma GCC system_header -#define __glibcxx_want_atomic_wait #include -#if __cpp_lib_atomic_wait +#if __glibcxx_atomic_wait #include #include #include @@ -476,5 +475,5 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } _GLIBCXX_END_NAMESPACE_VERSION } // namespace std -#endif // __cpp_lib_atomic_wait +#endif // __glibcxx_atomic_wait #endif // _GLIBCXX_ATOMIC_WAIT_H diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h index 0fa32afeb846..9956a76f40cd 100644 --- a/libstdc++-v3/include/bits/basic_string.h +++ b/libstdc++-v3/include/bits/basic_string.h @@ -51,10 +51,6 @@ # include #endif -#define __glibcxx_want_constexpr_string -#define __glibcxx_want_string_resize_and_overwrite -#define __glibcxx_want_string_udls -#define __glibcxx_want_to_string #include #if ! _GLIBCXX_USE_CXX11_ABI @@ -133,7 +129,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 _S_allocate(_Char_alloc_type& __a, size_type __n) { pointer __p = _Alloc_traits::allocate(__a, __n); -#if __cpp_lib_constexpr_string >= 201907L +#if __glibcxx_constexpr_string >= 201907L // std::char_traits begins the lifetime of characters, // but custom traits might not, so do it here. if constexpr (!is_same_v<_Traits, char_traits<_CharT>>) @@ -356,7 +352,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 void _M_init_local_buf() _GLIBCXX_NOEXCEPT { -#if __cpp_lib_is_constant_evaluated +#if __glibcxx_is_constant_evaluated if (std::is_constant_evaluated()) for (size_type __i = 0; __i <= _S_local_capacity; ++__i) _M_local_buf[__i] = _CharT(); @@ -1133,7 +1129,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 #pragma GCC diagnostic pop #endif -#ifdef __cpp_lib_string_resize_and_overwrite // C++ >= 23 +#ifdef __glibcxx_string_resize_and_overwrite // C++ >= 23 /** Resize the string and call a function to fill it. * * @param __n The maximum size requested. @@ -4339,7 +4335,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 return __str; } -#if __cpp_lib_to_string >= 202306L +#if __glibcxx_to_string >= 202306L // C++ >= 26 [[nodiscard]] inline string @@ -4518,7 +4514,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 } } -#if __cpp_lib_constexpr_string >= 201907L +#if __glibcxx_constexpr_string >= 201907L constexpr #endif inline wstring @@ -4575,7 +4571,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 to_wstring(unsigned long long __val) { return std::__to_wstring_numeric(std::to_string(__val)); } -#if __cpp_lib_to_string || _GLIBCXX_USE_C99_STDIO +#if __glibcxx_to_string || _GLIBCXX_USE_C99_STDIO _GLIBCXX_NODISCARD inline wstring to_wstring(float __val) @@ -4678,7 +4674,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { }; #endif -#ifdef __cpp_lib_string_udls // C++ >= 14 +#ifdef __glibcxx_string_udls // C++ >= 14 inline namespace literals { inline namespace string_literals @@ -4686,7 +4682,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wliteral-suffix" -#if __cpp_lib_constexpr_string >= 201907L +#if __glibcxx_constexpr_string >= 201907L # define _GLIBCXX_STRING_CONSTEXPR constexpr #else # define _GLIBCXX_STRING_CONSTEXPR @@ -4723,7 +4719,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #pragma GCC diagnostic pop } // inline namespace string_literals } // inline namespace literals -#endif // __cpp_lib_string_udls +#endif // __glibcxx_string_udls #if __cplusplus >= 201703L namespace __detail::__variant diff --git a/libstdc++-v3/include/bits/basic_string.tcc b/libstdc++-v3/include/bits/basic_string.tcc index f0a44e5e8815..1568fc320077 100644 --- a/libstdc++-v3/include/bits/basic_string.tcc +++ b/libstdc++-v3/include/bits/basic_string.tcc @@ -566,7 +566,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __n; } -#ifdef __cpp_lib_string_resize_and_overwrite // C++ >= 23 +#ifdef __glibcxx_string_resize_and_overwrite // C++ >= 23 template template [[__gnu__::__always_inline__]] @@ -581,7 +581,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template _GLIBCXX20_CONSTEXPR void basic_string<_CharT, _Traits, _Alloc>:: -#ifdef __cpp_lib_string_resize_and_overwrite // C++ >= 23 +#ifdef __glibcxx_string_resize_and_overwrite // C++ >= 23 resize_and_overwrite(const size_type __n, _Operation __op) #else __resize_and_overwrite(const size_type __n, _Operation __op) @@ -615,7 +615,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #endif // _GLIBCXX_USE_CXX11_ABI -#if __cpp_lib_constexpr_string >= 201907L +#if __glibcxx_constexpr_string >= 201907L # define _GLIBCXX_STRING_CONSTEXPR constexpr #else # define _GLIBCXX_STRING_CONSTEXPR diff --git a/libstdc++-v3/include/bits/char_traits.h b/libstdc++-v3/include/bits/char_traits.h index e9b4e84af994..824630842eef 100644 --- a/libstdc++-v3/include/bits/char_traits.h +++ b/libstdc++-v3/include/bits/char_traits.h @@ -61,9 +61,6 @@ # define _GLIBCXX_ALWAYS_INLINE inline __attribute__((__always_inline__)) #endif -#define __glibcxx_want_constexpr_char_traits -#include - namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION diff --git a/libstdc++-v3/include/bits/chrono.h b/libstdc++-v3/include/bits/chrono.h index 50aca84f142f..1f6daa34bcd9 100644 --- a/libstdc++-v3/include/bits/chrono.h +++ b/libstdc++-v3/include/bits/chrono.h @@ -32,10 +32,6 @@ #pragma GCC system_header -#define __glibcxx_want_chrono -#define __glibcxx_want_chrono_udls -#include - #if __cplusplus >= 201103L #include @@ -48,6 +44,8 @@ # include #endif +#include + namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -374,7 +372,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { }; #endif // C++20 -#ifdef __cpp_lib_chrono // C++ >= 17 && HOSTED +#ifdef __glibcxx_chrono // C++ >= 17 && HOSTED /** Convert a `duration` to type `ToDur` and round down. * * If the duration cannot be represented exactly in the result type, @@ -468,7 +466,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Make chrono::ceil also usable as chrono::__detail::ceil. namespace __detail { using chrono::ceil; } -#else // ! __cpp_lib_chrono +#else // ! __glibcxx_chrono // We want to use ceil even when compiling for earlier standards versions. // C++11 only allows a single statement in a constexpr function, so we @@ -490,7 +488,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __detail::__ceil_impl(chrono::duration_cast<_ToDur>(__d), __d); } } -#endif // __cpp_lib_chrono +#endif // __glibcxx_chrono /// duration_values template @@ -1314,7 +1312,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) #endif // C++20 } // namespace chrono -#ifdef __cpp_lib_chrono_udls // C++ >= 14 && HOSTED +#ifdef __glibcxx_chrono_udls // C++ >= 14 && HOSTED inline namespace literals { /** ISO C++ 2014 namespace for suffixes for duration literals. @@ -1435,7 +1433,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) { using namespace literals::chrono_literals; } // namespace chrono -#endif // __cpp_lib_chrono_udls +#endif // __glibcxx_chrono_udls #if __cplusplus >= 201703L namespace filesystem diff --git a/libstdc++-v3/include/bits/cow_string.h b/libstdc++-v3/include/bits/cow_string.h index 5411dfe32a9f..414f10a49933 100644 --- a/libstdc++-v3/include/bits/cow_string.h +++ b/libstdc++-v3/include/bits/cow_string.h @@ -36,9 +36,6 @@ #include // _Atomic_word, __is_single_threaded -#define __glibcxx_want_constexpr_string -#include - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -965,7 +962,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #pragma GCC diagnostic pop #endif -#ifdef __cpp_lib_string_resize_and_overwrite // C++ >= 23 +#ifdef __glibcxx_string_resize_and_overwrite // C++ >= 23 /** Resize the string and call a function to fill it. * * @param __n The maximum size requested. @@ -998,7 +995,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template void resize_and_overwrite(size_type __n, _Operation __op); -#endif // __cpp_lib_string_resize_and_overwrite +#endif // __glibcxx_string_resize_and_overwrite #if __cplusplus >= 201103L /// Non-standard version of resize_and_overwrite for C++11 and above. @@ -3754,7 +3751,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __n; } -#ifdef __cpp_lib_string_resize_and_overwrite // C++ >= 23 +#ifdef __glibcxx_string_resize_and_overwrite // C++ >= 23 template template [[__gnu__::__always_inline__]] @@ -3769,7 +3766,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template void basic_string<_CharT, _Traits, _Alloc>:: -#ifdef __cpp_lib_string_resize_and_overwrite // C++ >= 23 +#ifdef __glibcxx_string_resize_and_overwrite // C++ >= 23 resize_and_overwrite(const size_type __n, _Operation __op) #else __resize_and_overwrite(const size_type __n, _Operation __op) diff --git a/libstdc++-v3/include/bits/erase_if.h b/libstdc++-v3/include/bits/erase_if.h index 4ff81e0f98f3..b807a4515b4a 100644 --- a/libstdc++-v3/include/bits/erase_if.h +++ b/libstdc++-v3/include/bits/erase_if.h @@ -34,9 +34,7 @@ #include -#define __glibcxx_want_erase_if -#include - +// Used by C++17 containers and Library Fundamentals v2 headers. #if __cplusplus >= 201402L namespace std { diff --git a/libstdc++-v3/include/bits/forward_list.h b/libstdc++-v3/include/bits/forward_list.h index c56e430b0682..5f7972d1a69e 100644 --- a/libstdc++-v3/include/bits/forward_list.h +++ b/libstdc++-v3/include/bits/forward_list.h @@ -41,9 +41,6 @@ #include #include -#define __glibcxx_want_list_remove_return_type -#include - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -1183,7 +1180,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER /// @} private: -#ifdef __cpp_lib_list_remove_return_type // C++20 && HOSTED +#ifdef __glibcxx_list_remove_return_type // C++20 && HOSTED using __remove_return_type = size_type; # define _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG \ __attribute__((__abi_tag__("__cxx20"))) diff --git a/libstdc++-v3/include/bits/hashtable.h b/libstdc++-v3/include/bits/hashtable.h index 89132430f3e8..9ff9104a2abc 100644 --- a/libstdc++-v3/include/bits/hashtable.h +++ b/libstdc++-v3/include/bits/hashtable.h @@ -39,9 +39,6 @@ # include #endif -#define __glibcxx_want_generic_unordered_lookup -#include - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -760,7 +757,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION std::pair equal_range(const key_type& __k) const; -#ifdef __cpp_lib_generic_unordered_lookup // C++ >= 20 && HOSTED +#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED template, typename = __has_is_transparent_t<_Equal, _Kt>> @@ -790,7 +787,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typename = __has_is_transparent_t<_Equal, _Kt>> pair _M_equal_range_tr(const _Kt& __k) const; -#endif // __cpp_lib_generic_unordered_lookup +#endif // __glibcxx_generic_unordered_lookup private: // Bucket index computation helpers. diff --git a/libstdc++-v3/include/bits/ios_base.h b/libstdc++-v3/include/bits/ios_base.h index 3253eaaa2335..9e775ccff64f 100644 --- a/libstdc++-v3/include/bits/ios_base.h +++ b/libstdc++-v3/include/bits/ios_base.h @@ -46,9 +46,6 @@ # include #endif -#define __glibcxx_want_ios_noreplace -#include - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -476,7 +473,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const openmode __noreplace = _S_noreplace; -#ifdef __cpp_lib_ios_noreplace // C++ >= 23 && HOSTED +#ifdef __glibcxx_ios_noreplace // C++ >= 23 && HOSTED /// Open a file in exclusive mode. static const openmode noreplace = _S_noreplace; #endif diff --git a/libstdc++-v3/include/bits/memory_resource.h b/libstdc++-v3/include/bits/memory_resource.h index f12555d42158..97bcdd5e5723 100644 --- a/libstdc++-v3/include/bits/memory_resource.h +++ b/libstdc++-v3/include/bits/memory_resource.h @@ -42,7 +42,7 @@ #include // __int_traits #include -#if ! __cpp_lib_make_obj_using_allocator +#if ! __glibcxx_make_obj_using_allocator # include // index_sequence # include // tuple, forward_as_tuple #endif @@ -220,7 +220,7 @@ namespace pmr } #endif // C++2a -#if ! __cpp_lib_make_obj_using_allocator +#if ! __glibcxx_make_obj_using_allocator template __attribute__((__nonnull__)) typename __not_pair<_Tp1>::type @@ -337,7 +337,7 @@ namespace pmr #endif private: -#if ! __cpp_lib_make_obj_using_allocator +#if ! __glibcxx_make_obj_using_allocator using __uses_alloc1_ = __uses_alloc1; using __uses_alloc2_ = __uses_alloc2; diff --git a/libstdc++-v3/include/bits/move.h b/libstdc++-v3/include/bits/move.h index 0151d78aff93..54606cd4e8f5 100644 --- a/libstdc++-v3/include/bits/move.h +++ b/libstdc++-v3/include/bits/move.h @@ -37,9 +37,6 @@ # include // Brings in std::declval too. #endif -#define __glibcxx_want_addressof_constexpr -#include - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION diff --git a/libstdc++-v3/include/bits/move_only_function.h b/libstdc++-v3/include/bits/move_only_function.h index 0aa5980324a7..2a40ff400dec 100644 --- a/libstdc++-v3/include/bits/move_only_function.h +++ b/libstdc++-v3/include/bits/move_only_function.h @@ -32,10 +32,9 @@ #pragma GCC system_header -#define __glibcxx_want_move_only_function #include -#ifdef __cpp_lib_move_only_function // C++ >= 23 && HOSTED +#ifdef __glibcxx_move_only_function // C++ >= 23 && HOSTED #include #include @@ -213,5 +212,5 @@ _GLIBCXX_END_NAMESPACE_VERSION #define _GLIBCXX_MOF_REF && #include "mofunc_impl.h" -#endif // __cpp_lib_move_only_function +#endif // __glibcxx_move_only_function #endif // _GLIBCXX_MOVE_ONLY_FUNCTION_H diff --git a/libstdc++-v3/include/bits/node_handle.h b/libstdc++-v3/include/bits/node_handle.h index 16471355c19b..d3c75c7c3ef9 100644 --- a/libstdc++-v3/include/bits/node_handle.h +++ b/libstdc++-v3/include/bits/node_handle.h @@ -33,10 +33,9 @@ #pragma GCC system_header -#define __glibcxx_want_node_extract #include -#ifdef __cpp_lib_node_extract // C++ >= 17 && HOSTED +#ifdef __glibcxx_node_extract // C++ >= 17 && HOSTED #include #include @@ -392,5 +391,5 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _GLIBCXX_END_NAMESPACE_VERSION } // namespace std -#endif // __cpp_lib_node_extract +#endif // __glibcxx_node_extract #endif diff --git a/libstdc++-v3/include/bits/ptr_traits.h b/libstdc++-v3/include/bits/ptr_traits.h index 9e2f4f3f2163..66c39cc83fd4 100644 --- a/libstdc++-v3/include/bits/ptr_traits.h +++ b/libstdc++-v3/include/bits/ptr_traits.h @@ -34,10 +34,6 @@ #include -#define __glibcxx_want_constexpr_memory -#define __glibcxx_want_to_address -#include - #if __cplusplus > 201703L #include namespace __gnu_debug { struct _Safe_iterator_base; } @@ -212,7 +208,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __ptr; } -#ifndef __cpp_lib_to_address // C++ < 20 +#ifndef __glibcxx_to_address // C++ < 20 template constexpr typename std::pointer_traits<_Ptr>::element_type* __to_address(const _Ptr& __ptr) @@ -256,7 +252,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION constexpr auto to_address(const _Ptr& __ptr) noexcept { return std::__to_address(__ptr); } -#endif // __cpp_lib_to_address +#endif // __glibcxx_to_address _GLIBCXX_END_NAMESPACE_VERSION } // namespace std diff --git a/libstdc++-v3/include/bits/range_access.h b/libstdc++-v3/include/bits/range_access.h index 9751b8e88d57..63fc06dd4bf3 100644 --- a/libstdc++-v3/include/bits/range_access.h +++ b/libstdc++-v3/include/bits/range_access.h @@ -32,10 +32,6 @@ #pragma GCC system_header -#define __glibcxx_want_nonmember_container_access -#define __glibcxx_want_ssize -#include - #if __cplusplus >= 201103L #include #include // common_type_t, make_signed_t @@ -255,7 +251,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #endif // C++14 -#ifdef __cpp_lib_nonmember_container_access // C++ >= 17 +#ifdef __glibcxx_nonmember_container_access // C++ >= 17 /** * @brief Return the size of a container. * @param __cont Container. @@ -347,9 +343,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION constexpr const _Tp* data(initializer_list<_Tp> __il) noexcept { return __il.begin(); } -#endif // __cpp_lib_nonmember_container_access +#endif // __glibcxx_nonmember_container_access -#ifdef __cpp_lib_ssize // C++ >= 20 +#ifdef __glibcxx_ssize // C++ >= 20 template [[nodiscard, __gnu__::__always_inline__]] constexpr auto @@ -366,7 +362,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION constexpr ptrdiff_t ssize(const _Tp (&)[_Num]) noexcept { return _Num; } -#endif // __cpp_lib_ssize +#endif // __glibcxx_ssize _GLIBCXX_END_NAMESPACE_VERSION } // namespace diff --git a/libstdc++-v3/include/bits/ranges_algo.h b/libstdc++-v3/include/bits/ranges_algo.h index a06794c02c9d..460893353de4 100644 --- a/libstdc++-v3/include/bits/ranges_algo.h +++ b/libstdc++-v3/include/bits/ranges_algo.h @@ -39,14 +39,7 @@ #include #include // concept uniform_random_bit_generator -#define __glibcxx_want_ranges_contains -#define __glibcxx_want_ranges_find_last -#define __glibcxx_want_ranges_fold -#define __glibcxx_want_ranges_iota -#define __glibcxx_want_shift -#include - -#if __cpp_lib_concepts +#if __glibcxx_concepts namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -3472,7 +3465,7 @@ namespace ranges inline constexpr __prev_permutation_fn prev_permutation{}; -#if __cpp_lib_ranges_contains >= 202207L // C++ >= 23 +#if __glibcxx_ranges_contains >= 202207L // C++ >= 23 struct __contains_fn { template _Sent, @@ -3526,9 +3519,9 @@ namespace ranges inline constexpr __contains_subrange_fn contains_subrange{}; -#endif // __cpp_lib_ranges_contains +#endif // __glibcxx_ranges_contains -#if __cpp_lib_ranges_iota >= 202202L // C++ >= 23 +#if __glibcxx_ranges_iota >= 202202L // C++ >= 23 template struct out_value_result @@ -3578,9 +3571,9 @@ namespace ranges inline constexpr __iota_fn iota{}; -#endif // __cpp_lib_ranges_iota +#endif // __glibcxx_ranges_iota -#if __cpp_lib_ranges_find_last >= 202207L // C++ >= 23 +#if __glibcxx_ranges_find_last >= 202207L // C++ >= 23 struct __find_last_fn { @@ -3708,9 +3701,9 @@ namespace ranges inline constexpr __find_last_if_not_fn find_last_if_not{}; -#endif // __cpp_lib_ranges_find_last +#endif // __glibcxx_ranges_find_last -#if __cpp_lib_ranges_fold >= 202207L // C++ >= 23 +#if __glibcxx_ranges_fold >= 202207L // C++ >= 23 template struct in_value_result @@ -3957,7 +3950,7 @@ namespace ranges }; inline constexpr __fold_right_last_fn fold_right_last{}; -#endif // __cpp_lib_ranges_fold +#endif // __glibcxx_ranges_fold } // namespace ranges template diff --git a/libstdc++-v3/include/bits/ranges_cmp.h b/libstdc++-v3/include/bits/ranges_cmp.h index 96fa79667e6f..420d8bd24482 100644 --- a/libstdc++-v3/include/bits/ranges_cmp.h +++ b/libstdc++-v3/include/bits/ranges_cmp.h @@ -30,9 +30,6 @@ #ifndef _RANGES_CMP_H #define _RANGES_CMP_H 1 -#define __glibcxx_want_ranges -#include - #if __cplusplus > 201703L # include # include @@ -58,7 +55,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION using is_transparent = __is_transparent; }; -#ifdef __cpp_lib_ranges // C++ >= 20 +#ifdef __glibcxx_ranges // C++ >= 20 namespace ranges { namespace __detail @@ -175,7 +172,7 @@ namespace ranges }; } // namespace ranges -#endif // __cpp_lib_ranges +#endif // __glibcxx_ranges _GLIBCXX_END_NAMESPACE_VERSION } // namespace std #endif // C++20 diff --git a/libstdc++-v3/include/bits/ranges_util.h b/libstdc++-v3/include/bits/ranges_util.h index f7e3538af97f..ab6c69c57d0b 100644 --- a/libstdc++-v3/include/bits/ranges_util.h +++ b/libstdc++-v3/include/bits/ranges_util.h @@ -34,7 +34,7 @@ # include # include -#ifdef __cpp_lib_ranges +#ifdef __glibcxx_ranges namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION diff --git a/libstdc++-v3/include/bits/semaphore_base.h b/libstdc++-v3/include/bits/semaphore_base.h index 2b3c196040ba..7e07b308cdca 100644 --- a/libstdc++-v3/include/bits/semaphore_base.h +++ b/libstdc++-v3/include/bits/semaphore_base.h @@ -34,7 +34,7 @@ #include #include -#if __cpp_lib_atomic_wait +#if __glibcxx_atomic_wait #include #include #endif // __cpp_lib_atomic_wait @@ -181,7 +181,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; #endif // _GLIBCXX_HAVE_POSIX_SEMAPHORE -#if __cpp_lib_atomic_wait +#if __glibcxx_atomic_wait struct __atomic_semaphore { static constexpr ptrdiff_t _S_max = __gnu_cxx::__int_traits::__max; @@ -266,7 +266,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Note: the _GLIBCXX_USE_POSIX_SEMAPHORE macro can be used to force the // use of Posix semaphores (sem_t). Doing so however, alters the ABI. -#if defined __cpp_lib_atomic_wait && !_GLIBCXX_USE_POSIX_SEMAPHORE +#if defined __glibcxx_atomic_wait && !_GLIBCXX_USE_POSIX_SEMAPHORE using __semaphore_impl = __atomic_semaphore; #elif _GLIBCXX_HAVE_POSIX_SEMAPHORE using __semaphore_impl = __platform_semaphore; diff --git a/libstdc++-v3/include/bits/shared_ptr.h b/libstdc++-v3/include/bits/shared_ptr.h index 9b5ee571c3e0..02bfdabfd1ca 100644 --- a/libstdc++-v3/include/bits/shared_ptr.h +++ b/libstdc++-v3/include/bits/shared_ptr.h @@ -52,10 +52,6 @@ #include // std::basic_ostream #include -#define __glibcxx_want_shared_ptr_weak_type -#define __glibcxx_want_enable_shared_from_this -#include - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -107,7 +103,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// @cond undocumented // Constraint for overloads taking non-array types. -#if __cpp_concepts && __cpp_lib_type_trait_variable_templates +#if __cpp_concepts && __glibcxx_type_trait_variable_templates template requires (!is_array_v<_Tp>) using _NonArray = _Tp; @@ -116,7 +112,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION using _NonArray = __enable_if_t::value, _Tp>; #endif -#if __cpp_lib_shared_ptr_arrays >= 201707L +#if __glibcxx_shared_ptr_arrays >= 201707L // Constraint for overloads taking array types with unknown bound, U[]. #if __cpp_concepts template @@ -139,7 +135,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION = __enable_if_t<__is_array_known_bounds<_Tp>::value, _Tp>; #endif -#if __cpp_lib_smart_ptr_for_overwrite +#if __glibcxx_smart_ptr_for_overwrite // Constraint for overloads taking either non-array or bounded array, U[N]. #if __cpp_concepts template @@ -193,7 +189,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// The type pointed to by the stored pointer, remove_extent_t<_Tp> using element_type = typename __shared_ptr<_Tp>::element_type; -#ifdef __cpp_lib_shared_ptr_weak_type // C++ >= 17 && HOSTED +#ifdef __glibcxx_shared_ptr_weak_type // C++ >= 17 && HOSTED /// The corresponding weak_ptr type for this shared_ptr /// @since C++17 using weak_type = weak_ptr<_Tp>; @@ -475,7 +471,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION friend shared_ptr<_NonArray<_Yp>> make_shared(_Args&&...); -#if __cpp_lib_shared_ptr_arrays >= 201707L +#if __glibcxx_shared_ptr_arrays >= 201707L // This constructor is non-standard, it is used by allocate_shared. template*> shared_ptr(const _Sp_counted_array_base<_Alloc>& __a, @@ -515,7 +511,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION friend shared_ptr<_BoundedArray<_Yp>> make_shared(const remove_extent_t<_Yp>&); -#if __cpp_lib_smart_ptr_for_overwrite +#if __glibcxx_smart_ptr_for_overwrite template friend shared_ptr<_NotUnboundedArray<_Yp>> allocate_shared_for_overwrite(const _Alloc&); @@ -941,7 +937,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION shared_from_this() const { return shared_ptr(this->_M_weak_this); } -#ifdef __cpp_lib_enable_shared_from_this // C++ >= 17 && HOSTED +#ifdef __glibcxx_enable_shared_from_this // C++ >= 17 && HOSTED /** @{ * Get a `weak_ptr` referring to the object that has `*this` as its base. * @since C++17 @@ -1012,7 +1008,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION std::forward<_Args>(__args)...); } -#if __cpp_lib_shared_ptr_arrays >= 201707L +#if __glibcxx_shared_ptr_arrays >= 201707L /// @cond undocumented template> auto @@ -1100,7 +1096,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION std::__addressof(__u)); } -#if __cpp_lib_smart_ptr_for_overwrite +#if __glibcxx_smart_ptr_for_overwrite template inline shared_ptr<_NotUnboundedArray<_Tp>> allocate_shared_for_overwrite(const _Alloc& __a) diff --git a/libstdc++-v3/include/bits/shared_ptr_atomic.h b/libstdc++-v3/include/bits/shared_ptr_atomic.h index 5b818fe44568..d0be43aec2da 100644 --- a/libstdc++-v3/include/bits/shared_ptr_atomic.h +++ b/libstdc++-v3/include/bits/shared_ptr_atomic.h @@ -31,9 +31,7 @@ #define _SHARED_PTR_ATOMIC_H 1 #include - -#define __glibcxx_want_atomic_shared_ptr -#include +#include // Annotations for the custom locking in atomic>. #if defined _GLIBCXX_TSAN && __has_include() @@ -380,7 +378,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// @} group pointer_abstractions -#ifdef __cpp_lib_atomic_shared_ptr // C++ >= 20 && HOSTED +#ifdef __glibcxx_atomic_shared_ptr // C++ >= 20 && HOSTED template struct atomic; @@ -451,7 +449,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION auto __current = _M_val.load(memory_order_relaxed); while (__current & _S_lock_bit) { -#if __cpp_lib_atomic_wait +#if __glibcxx_atomic_wait __detail::__thread_relax(); #endif __current = _M_val.load(memory_order_relaxed); @@ -465,7 +463,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION memory_order_relaxed)) { _GLIBCXX_TSAN_MUTEX_TRY_LOCK_FAILED(&_M_val); -#if __cpp_lib_atomic_wait +#if __glibcxx_atomic_wait __detail::__thread_relax(); #endif __current = __current & ~_S_lock_bit; @@ -498,7 +496,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __c._M_pi = reinterpret_cast(__x & ~_S_lock_bit); } -#if __cpp_lib_atomic_wait +#if __glibcxx_atomic_wait // Precondition: caller holds lock! void _M_wait_unlock(memory_order __o) const noexcept @@ -608,7 +606,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __result; } -#if __cpp_lib_atomic_wait +#if __glibcxx_atomic_wait void wait(value_type __old, memory_order __o) const noexcept { @@ -731,7 +729,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return compare_exchange_strong(__expected, std::move(__desired), __o); } -#if __cpp_lib_atomic_wait +#if __glibcxx_atomic_wait void wait(value_type __old, memory_order __o = memory_order_seq_cst) const noexcept @@ -844,7 +842,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return compare_exchange_strong(__expected, std::move(__desired), __o); } -#if __cpp_lib_atomic_wait +#if __glibcxx_atomic_wait void wait(value_type __old, memory_order __o = memory_order_seq_cst) const noexcept diff --git a/libstdc++-v3/include/bits/shared_ptr_base.h b/libstdc++-v3/include/bits/shared_ptr_base.h index 33282e596b20..edb3eb654ea0 100644 --- a/libstdc++-v3/include/bits/shared_ptr_base.h +++ b/libstdc++-v3/include/bits/shared_ptr_base.h @@ -67,10 +67,6 @@ # include #endif -#define __glibcxx_want_smart_ptr_for_overwrite -#define __glibcxx_want_shared_ptr_arrays -#include - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -413,7 +409,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<_Lock_policy _Lp = __default_lock_policy> class __shared_count; -#if __cplusplus >= 202002L +#ifdef __glibcxx_atomic_shared_ptr template class _Sp_atomic; #endif @@ -656,7 +652,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _Impl _M_impl; }; -#ifdef __cpp_lib_smart_ptr_for_overwrite // C++ >= 20 && HOSTED +#ifdef __glibcxx_smart_ptr_for_overwrite // C++ >= 20 && HOSTED struct _Sp_overwrite_tag { }; // Partial specialization used for make_shared_for_overwrite(). @@ -715,9 +711,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_get_deleter(const std::type_info&) noexcept override { return nullptr; } }; -#endif // __cpp_lib_smart_ptr_for_overwrite +#endif // __glibcxx_smart_ptr_for_overwrite -#if __cpp_lib_shared_ptr_arrays >= 201707L // C++ >= 20 && HOSTED +#if __glibcxx_shared_ptr_arrays >= 201707L // C++ >= 20 && HOSTED struct _Sp_overwrite_tag; // For make_shared, make_shared, allocate_shared etc. @@ -879,7 +875,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_get_deleter(const std::type_info&) noexcept override { return nullptr; } }; -#endif // __cpp_lib_shared_ptr_arrays >= 201707L +#endif // __glibcxx_shared_ptr_arrays >= 201707L // The default deleter for shared_ptr and shared_ptr. struct __sp_array_delete @@ -898,7 +894,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template struct __not_alloc_shared_tag<_Sp_alloc_shared_tag<_Tp>> { }; -#if __cpp_lib_shared_ptr_arrays >= 201707L // C++ >= 20 && HOSTED +#if __glibcxx_shared_ptr_arrays >= 201707L // C++ >= 20 && HOSTED template struct __not_alloc_shared_tag<_Sp_counted_array_base<_Alloc>> { }; #endif @@ -974,7 +970,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __p = __pi->_M_ptr(); } -#if __cpp_lib_shared_ptr_arrays >= 201707L // C++ >= 20 && HOSTED +#if __glibcxx_shared_ptr_arrays >= 201707L // C++ >= 20 && HOSTED template __shared_count(_Tp*& __p, const _Sp_counted_array_base<_Alloc>& __a, _Init __init) @@ -1127,7 +1123,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION private: friend class __weak_count<_Lp>; -#if __cplusplus >= 202002L +#ifdef __glibcxx_atomic_shared_ptr template friend class _Sp_atomic; #endif @@ -1227,7 +1223,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION private: friend class __shared_count<_Lp>; -#if __cplusplus >= 202002L +#ifdef __glibcxx_atomic_shared_ptr template friend class _Sp_atomic; #endif @@ -1716,7 +1712,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION friend __shared_ptr<_Tp1, _Lp1> __allocate_shared(const _Alloc& __a, _Args&&... __args); -#if __cpp_lib_shared_ptr_arrays >= 201707L // C++ >= 20 && HOSTED +#if __glibcxx_shared_ptr_arrays >= 201707L // C++ >= 20 && HOSTED // This constructor is non-standard, it is used by allocate_shared. template*> __shared_ptr(const _Sp_counted_array_base<_Alloc>& __a, @@ -1777,7 +1773,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template friend _Del* get_deleter(const shared_ptr<_Tp1>&) noexcept; -#if __cplusplus >= 202002L +#ifdef __glibcxx_atomic_shared_ptr friend _Sp_atomic>; #endif @@ -2111,7 +2107,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template friend class __weak_ptr; friend class __enable_shared_from_this<_Tp, _Lp>; friend class enable_shared_from_this<_Tp>; -#if __cplusplus >= 202002L +#ifdef __glibcxx_atomic_shared_ptr friend _Sp_atomic>; #endif diff --git a/libstdc++-v3/include/bits/stl_algo.h b/libstdc++-v3/include/bits/stl_algo.h index 637d53d6b951..0b34a4f86b08 100644 --- a/libstdc++-v3/include/bits/stl_algo.h +++ b/libstdc++-v3/include/bits/stl_algo.h @@ -72,10 +72,6 @@ # endif #endif -#define __glibcxx_want_clamp -#define __glibcxx_want_sample -#include - // See concept_check.h for the __glibcxx_*_requires macros. namespace std _GLIBCXX_VISIBILITY(default) @@ -3604,7 +3600,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) } #endif // C++14 -#ifdef __cpp_lib_clamp // C++ >= 17 +#ifdef __glibcxx_clamp // C++ >= 17 /** * @brief Returns the value clamped between lo and hi. * @ingroup sorting_algorithms @@ -3643,7 +3639,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __glibcxx_assert(!__comp(__hi, __lo)); return std::min(std::max(__val, __lo, __comp), __hi, __comp); } -#endif // __cpp_lib_clamp +#endif // __glibcxx_clamp /** * @brief Generate two uniformly distributed integers using a @@ -5815,7 +5811,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO } #endif // C++14 -#ifdef __cpp_lib_sample // C++ >= 17 +#ifdef __glibcxx_sample // C++ >= 17 /// Take a random sample from a population. template @@ -5843,7 +5839,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __sample(__first, __last, __pop_cat{}, __out, __samp_cat{}, __d, std::forward<_UniformRandomBitGenerator>(__g)); } -#endif // __cpp_lib_sample +#endif // __glibcxx_sample _GLIBCXX_END_NAMESPACE_ALGO _GLIBCXX_END_NAMESPACE_VERSION diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h index 2f5a4bd4fd4b..6276d85b86fc 100644 --- a/libstdc++-v3/include/bits/stl_algobase.h +++ b/libstdc++-v3/include/bits/stl_algobase.h @@ -79,9 +79,6 @@ # include #endif -#define __glibcxx_want_robust_nonmodifying_seq_ops -#include - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -1382,7 +1379,7 @@ _GLIBCXX_END_NAMESPACE_CONTAINER (__is_memcmp_ordered_with<_ValueType1, _ValueType2>::__value && __is_pointer<_II1>::__value && __is_pointer<_II2>::__value -#if __cplusplus > 201703L && __cpp_lib_concepts +#if __cplusplus > 201703L && __glibcxx_concepts // For C++20 iterator_traits::value_type is non-volatile // so __is_byte could be true, but we can't use memcmp with // volatile data. @@ -1648,7 +1645,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO } #endif // C++11 -#ifdef __cpp_lib_robust_nonmodifying_seq_ops // C++ >= 14 +#ifdef __glibcxx_robust_nonmodifying_seq_ops // C++ >= 14 /** * @brief Tests a range for element-wise equality. * @ingroup non_mutating_algorithms @@ -1710,7 +1707,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO return _GLIBCXX_STD_A::__equal4(__first1, __last1, __first2, __last2, __binary_pred); } -#endif // __cpp_lib_robust_nonmodifying_seq_ops +#endif // __glibcxx_robust_nonmodifying_seq_ops /** * @brief Performs @b dictionary comparison on ranges. @@ -1952,7 +1949,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); } -#if __cpp_lib_robust_nonmodifying_seq_ops // C++ >= 14 +#if __glibcxx_robust_nonmodifying_seq_ops // C++ >= 14 template _GLIBCXX20_CONSTEXPR diff --git a/libstdc++-v3/include/bits/stl_function.h b/libstdc++-v3/include/bits/stl_function.h index 608d4e96fb2c..23d6da34d191 100644 --- a/libstdc++-v3/include/bits/stl_function.h +++ b/libstdc++-v3/include/bits/stl_function.h @@ -60,9 +60,6 @@ #include #endif -#define __glibcxx_want_transparent_operators -#include - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -156,7 +153,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @{ */ -#if __cpp_lib_transparent_operators // C++ >= 14 +#if __glibcxx_transparent_operators // C++ >= 14 struct __is_transparent; // undefined template @@ -244,7 +241,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; #pragma GCC diagnostic pop -#ifdef __cpp_lib_transparent_operators // C++ >= 14 +#ifdef __glibcxx_transparent_operators // C++ >= 14 template<> struct plus { @@ -345,7 +342,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * * @{ */ -#if __cpp_lib_transparent_operators // C++ >= 14 +#if __glibcxx_transparent_operators // C++ >= 14 template struct equal_to; @@ -489,7 +486,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; #pragma GCC diagnostic pop -#ifdef __cpp_lib_transparent_operators // C++ >= 14 +#ifdef __glibcxx_transparent_operators // C++ >= 14 /// One of the @link comparison_functors comparison functors@endlink. template<> struct equal_to @@ -765,7 +762,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION is_convertible<_Tp, const volatile void*>, is_convertible<_Up, const volatile void*>>; }; -#endif // __cpp_lib_transparent_operators +#endif // __glibcxx_transparent_operators /** @} */ // 20.3.4 logical operations @@ -777,7 +774,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * * @{ */ -#ifdef __cpp_lib_transparent_operators // C++ >= 14 +#ifdef __glibcxx_transparent_operators // C++ >= 14 template struct logical_and; @@ -822,7 +819,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; #pragma GCC diagnostic pop -#ifdef __cpp_lib_transparent_operators // C++ >= 14 +#ifdef __glibcxx_transparent_operators // C++ >= 14 /// One of the @link logical_functors Boolean operations functors@endlink. template<> struct logical_and @@ -867,10 +864,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typedef __is_transparent is_transparent; }; -#endif // __cpp_lib_transparent_operators +#endif // __glibcxx_transparent_operators /** @} */ -#ifdef __cpp_lib_transparent_operators // C++ >= 14 +#ifdef __glibcxx_transparent_operators // C++ >= 14 template struct bit_and; @@ -926,7 +923,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; #pragma GCC diagnostic pop -#ifdef __cpp_lib_transparent_operators // C++ >= 14 +#ifdef __glibcxx_transparent_operators // C++ >= 14 template <> struct bit_and { @@ -1416,7 +1413,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /** @} */ -#ifdef __cpp_lib_transparent_operators // C++ >= 14 +#ifdef __glibcxx_transparent_operators // C++ >= 14 template> struct __has_is_transparent { }; diff --git a/libstdc++-v3/include/bits/stl_iterator.h b/libstdc++-v3/include/bits/stl_iterator.h index b75f87e056de..919b1633930c 100644 --- a/libstdc++-v3/include/bits/stl_iterator.h +++ b/libstdc++-v3/include/bits/stl_iterator.h @@ -70,12 +70,6 @@ # include #endif -#define __glibcxx_want_constexpr_iterator -#define __glibcxx_want_array_constexpr -#define __glibcxx_want_make_reverse_iterator -#define __glibcxx_want_move_iterator_concept -#include - #if __cplusplus >= 202002L # include # include @@ -93,7 +87,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @{ */ -#if __cpp_lib_concepts +#if __glibcxx_concepts namespace __detail { // Weaken iterator_category _Cat to _Limit if it is derived from that, @@ -142,7 +136,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template friend class reverse_iterator; -#if __cpp_lib_concepts +#if __glibcxx_concepts // _GLIBCXX_RESOLVE_LIB_DEFECTS // 3435. three_way_comparable_with, [...]> template @@ -158,7 +152,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION public: typedef _Iterator iterator_type; typedef typename __traits_type::pointer pointer; -#if ! __cpp_lib_concepts +#if ! __glibcxx_concepts typedef typename __traits_type::difference_type difference_type; typedef typename __traits_type::reference reference; #else @@ -214,7 +208,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * underlying %iterator can be converted to the type of @c current. */ template -#if __cpp_lib_concepts +#if __glibcxx_concepts requires __convertible<_Iter> #endif _GLIBCXX17_CONSTEXPR @@ -225,7 +219,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #if __cplusplus >= 201103L template -#if __cpp_lib_concepts +#if __glibcxx_concepts requires __convertible<_Iter> && assignable_from<_Iterator&, const _Iter&> #endif @@ -392,7 +386,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION operator[](difference_type __n) const { return *(*this + __n); } -#if __cplusplus > 201703L && __cpp_lib_concepts +#if __cplusplus > 201703L && __glibcxx_concepts [[nodiscard]] friend constexpr iter_rvalue_reference_t<_Iterator> iter_move(const reverse_iterator& __i) @@ -440,7 +434,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * iterators. * */ -#if __cplusplus <= 201703L || ! defined __cpp_lib_concepts +#if __cplusplus <= 201703L || ! defined __glibcxx_concepts template _GLIBCXX_NODISCARD inline _GLIBCXX17_CONSTEXPR bool @@ -641,7 +635,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __make_reverse_iterator(_Iterator __i) { return reverse_iterator<_Iterator>(__i); } -# ifdef __cpp_lib_make_reverse_iterator // C++ >= 14 +# ifdef __glibcxx_make_reverse_iterator // C++ >= 14 // _GLIBCXX_RESOLVE_LIB_DEFECTS // DR 2285. make_reverse_iterator /// Generator function for reverse_iterator. @@ -651,14 +645,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION make_reverse_iterator(_Iterator __i) { return reverse_iterator<_Iterator>(__i); } -# if __cplusplus > 201703L && defined __cpp_lib_concepts +# if __cplusplus > 201703L && defined __glibcxx_concepts template requires (!sized_sentinel_for<_Iterator1, _Iterator2>) inline constexpr bool disable_sized_sentinel_for, reverse_iterator<_Iterator2>> = true; # endif // C++20 -# endif // __cpp_lib_make_reverse_iterator +# endif // __glibcxx_make_reverse_iterator template _GLIBCXX20_CONSTEXPR @@ -901,7 +895,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION class insert_iterator : public iterator { -#if __cplusplus > 201703L && defined __cpp_lib_concepts +#if __cplusplus > 201703L && defined __glibcxx_concepts using _Iter = std::__detail::__range_iter_t<_Container>; #else typedef typename _Container::iterator _Iter; @@ -914,7 +908,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// A nested typedef for the type of whatever container you used. typedef _Container container_type; -#if __cplusplus > 201703L && defined __cpp_lib_concepts +#if __cplusplus > 201703L && defined __glibcxx_concepts using difference_type = ptrdiff_t; #endif @@ -1010,7 +1004,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * template parameter deduction, making the compiler match the correct * types for you. */ -#if __cplusplus > 201703L && defined __cpp_lib_concepts +#if __cplusplus > 201703L && defined __glibcxx_concepts template [[nodiscard]] constexpr insert_iterator<_Container> @@ -1062,7 +1056,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typedef typename __traits_type::reference reference; typedef typename __traits_type::pointer pointer; -#if __cplusplus > 201703L && __cpp_lib_concepts +#if __cplusplus > 201703L && __glibcxx_concepts using iterator_concept = std::__detail::__iter_concept<_Iterator>; #endif @@ -1373,7 +1367,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @{ */ -#if __cplusplus > 201703L && __cpp_lib_concepts +#if __cplusplus > 201703L && __glibcxx_concepts template class move_sentinel { @@ -1417,7 +1411,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION namespace __detail { -#if __cplusplus > 201703L && __cpp_lib_concepts +#if __cplusplus > 201703L && __glibcxx_concepts template struct __move_iter_cat { }; @@ -1444,21 +1438,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION */ template class move_iterator -#if __cplusplus > 201703L && __cpp_lib_concepts +#if __cplusplus > 201703L && __glibcxx_concepts : public __detail::__move_iter_cat<_Iterator> #endif { _Iterator _M_current; using __traits_type = iterator_traits<_Iterator>; -#if ! (__cplusplus > 201703L && __cpp_lib_concepts) +#if ! (__cplusplus > 201703L && __glibcxx_concepts) using __base_ref = typename __traits_type::reference; #endif template friend class move_iterator; -#if __cpp_lib_concepts // C++20 && concepts +#if __glibcxx_concepts // C++20 && concepts // _GLIBCXX_RESOLVE_LIB_DEFECTS // 3435. three_way_comparable_with, [...]> template @@ -1466,7 +1460,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION && convertible_to; #endif -#if __cplusplus > 201703L && __cpp_lib_concepts +#if __cplusplus > 201703L && __glibcxx_concepts static auto _S_iter_concept() { @@ -1484,7 +1478,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION public: using iterator_type = _Iterator; -#ifdef __cpp_lib_move_iterator_concept // C++ >= 20 && lib_concepts +#ifdef __glibcxx_move_iterator_concept // C++ >= 20 && lib_concepts using iterator_concept = decltype(_S_iter_concept()); // iterator_category defined in __move_iter_cat @@ -1515,7 +1509,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION : _M_current(std::move(__i)) { } template -#if __cpp_lib_concepts +#if __glibcxx_concepts requires __convertible<_Iter> #endif _GLIBCXX17_CONSTEXPR @@ -1523,7 +1517,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION : _M_current(__i._M_current) { } template -#if __cpp_lib_concepts +#if __glibcxx_concepts requires __convertible<_Iter> && assignable_from<_Iterator&, const _Iter&> #endif @@ -1554,7 +1548,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION [[__nodiscard__]] _GLIBCXX17_CONSTEXPR reference operator*() const -#if __cplusplus > 201703L && __cpp_lib_concepts +#if __cplusplus > 201703L && __glibcxx_concepts { return ranges::iter_move(_M_current); } #else { return static_cast(*_M_current); } @@ -1580,7 +1574,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __tmp; } -#if __cpp_lib_concepts +#if __glibcxx_concepts constexpr void operator++(int) requires (!forward_iterator<_Iterator>) { ++_M_current; } @@ -1628,13 +1622,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION [[__nodiscard__]] _GLIBCXX17_CONSTEXPR reference operator[](difference_type __n) const -#if __cplusplus > 201703L && __cpp_lib_concepts +#if __cplusplus > 201703L && __glibcxx_concepts { return ranges::iter_move(_M_current + __n); } #else { return std::move(_M_current[__n]); } #endif -#if __cplusplus > 201703L && __cpp_lib_concepts +#if __cplusplus > 201703L && __glibcxx_concepts template _Sent> [[nodiscard]] friend constexpr bool @@ -1672,7 +1666,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION inline _GLIBCXX17_CONSTEXPR bool operator==(const move_iterator<_IteratorL>& __x, const move_iterator<_IteratorR>& __y) -#if __cplusplus > 201703L && __cpp_lib_concepts +#if __cplusplus > 201703L && __glibcxx_concepts requires requires { { __x.base() == __y.base() } -> convertible_to; } #endif { return __x.base() == __y.base(); } @@ -1699,7 +1693,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION inline _GLIBCXX17_CONSTEXPR bool operator<(const move_iterator<_IteratorL>& __x, const move_iterator<_IteratorR>& __y) -#if __cplusplus > 201703L && __cpp_lib_concepts +#if __cplusplus > 201703L && __glibcxx_concepts requires requires { { __x.base() < __y.base() } -> convertible_to; } #endif { return __x.base() < __y.base(); } @@ -1709,7 +1703,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION inline _GLIBCXX17_CONSTEXPR bool operator<=(const move_iterator<_IteratorL>& __x, const move_iterator<_IteratorR>& __y) -#if __cplusplus > 201703L && __cpp_lib_concepts +#if __cplusplus > 201703L && __glibcxx_concepts requires requires { { __y.base() < __x.base() } -> convertible_to; } #endif { return !(__y < __x); } @@ -1719,7 +1713,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION inline _GLIBCXX17_CONSTEXPR bool operator>(const move_iterator<_IteratorL>& __x, const move_iterator<_IteratorR>& __y) -#if __cplusplus > 201703L && __cpp_lib_concepts +#if __cplusplus > 201703L && __glibcxx_concepts requires requires { { __y.base() < __x.base() } -> convertible_to; } #endif { return __y < __x; } @@ -1729,7 +1723,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION inline _GLIBCXX17_CONSTEXPR bool operator>=(const move_iterator<_IteratorL>& __x, const move_iterator<_IteratorR>& __y) -#if __cplusplus > 201703L && __cpp_lib_concepts +#if __cplusplus > 201703L && __glibcxx_concepts requires requires { { __x.base() < __y.base() } -> convertible_to; } #endif { return !(__x < __y); } @@ -1827,7 +1821,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __make_move_if_noexcept_iterator(_Tp* __i) { return _ReturnType(__i); } -#if __cplusplus > 201703L && __cpp_lib_concepts +#if __cplusplus > 201703L && __glibcxx_concepts // [iterators.common] Common iterators namespace __detail diff --git a/libstdc++-v3/include/bits/stl_list.h b/libstdc++-v3/include/bits/stl_list.h index 82256b7f1c5c..6192f227dbdc 100644 --- a/libstdc++-v3/include/bits/stl_list.h +++ b/libstdc++-v3/include/bits/stl_list.h @@ -65,9 +65,6 @@ #include #endif -#define __glibcxx_want_list_remove_return_type -#include - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -1764,7 +1761,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 #endif private: -#ifdef __cpp_lib_list_remove_return_type // C++ >= 20 && HOSTED +#ifdef __glibcxx_list_remove_return_type // C++ >= 20 && HOSTED typedef size_type __remove_return_type; # define _GLIBCXX_LIST_REMOVE_RETURN_TYPE_TAG \ __attribute__((__abi_tag__("__cxx20"))) diff --git a/libstdc++-v3/include/bits/stl_map.h b/libstdc++-v3/include/bits/stl_map.h index 02cce9b37d8c..1221bb9c59fe 100644 --- a/libstdc++-v3/include/bits/stl_map.h +++ b/libstdc++-v3/include/bits/stl_map.h @@ -63,9 +63,6 @@ #include #endif -#define __glibcxx_want_map_try_emplace -#include - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -699,7 +696,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER { merge(__source); } #endif // C++17 -#ifdef __cpp_lib_map_try_emplace // C++ >= 17 && HOSTED +#ifdef __glibcxx_map_try_emplace // C++ >= 17 && HOSTED /** * @brief Attempts to build and insert a std::pair into the %map. * diff --git a/libstdc++-v3/include/bits/stl_pair.h b/libstdc++-v3/include/bits/stl_pair.h index 197a90987e61..0f1495aad73c 100644 --- a/libstdc++-v3/include/bits/stl_pair.h +++ b/libstdc++-v3/include/bits/stl_pair.h @@ -65,10 +65,6 @@ # include #endif -#define __glibcxx_want_constexpr_utility -#define __glibcxx_want_tuples_by_type -#include - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -1054,7 +1050,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __pair_get<_Int>::__const_move_get(std::move(__in)); } -#ifdef __cpp_lib_tuples_by_type // C++ >= 14 +#ifdef __glibcxx_tuples_by_type // C++ >= 14 template constexpr _Tp& get(pair<_Tp, _Up>& __p) noexcept @@ -1094,7 +1090,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION constexpr const _Tp&& get(const pair<_Up, _Tp>&& __p) noexcept { return std::move(__p.second); } -#endif // __cpp_lib_tuples_by_type +#endif // __glibcxx_tuples_by_type #if __cplusplus > 202002L diff --git a/libstdc++-v3/include/bits/stl_queue.h b/libstdc++-v3/include/bits/stl_queue.h index 1d22578eb1e6..63373f3a7f41 100644 --- a/libstdc++-v3/include/bits/stl_queue.h +++ b/libstdc++-v3/include/bits/stl_queue.h @@ -62,9 +62,6 @@ # include #endif -#define __glibcxx_want_adaptor_iterator_pair_constructor -#include - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -199,7 +196,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION : c(std::move(__q.c), __a) { } #endif -#ifdef __cpp_lib_adaptor_iterator_pair_constructor // C++ >= 23 && HOSTED +#ifdef __glibcxx_adaptor_iterator_pair_constructor // C++ >= 23 && HOSTED template> queue(_InputIterator __first, _InputIterator __last) @@ -347,7 +344,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION queue(_Container, _Allocator) -> queue; -#ifdef __cpp_lib_adaptor_iterator_pair_constructor +#ifdef __glibcxx_adaptor_iterator_pair_constructor template::value_type, diff --git a/libstdc++-v3/include/bits/stl_stack.h b/libstdc++-v3/include/bits/stl_stack.h index 2d09098ca867..4a211e452e63 100644 --- a/libstdc++-v3/include/bits/stl_stack.h +++ b/libstdc++-v3/include/bits/stl_stack.h @@ -62,9 +62,6 @@ # include #endif -#define __glibcxx_want_adaptor_iterator_pair_constructor -#include - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -173,7 +170,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION stack(_Sequence&& __c) : c(std::move(__c)) { } -#ifdef __cpp_lib_adaptor_iterator_pair_constructor // C++ >= 23 && HOSTED +#ifdef __glibcxx_adaptor_iterator_pair_constructor // C++ >= 23 && HOSTED template> stack(_InputIterator __first, _InputIterator __last) @@ -322,7 +319,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION stack(_Container, _Allocator) -> stack; -#ifdef __cpp_lib_adaptor_iterator_pair_constructor +#ifdef __glibcxx_adaptor_iterator_pair_constructor template::value_type, diff --git a/libstdc++-v3/include/bits/stl_tree.h b/libstdc++-v3/include/bits/stl_tree.h index 1cf887b028ec..943bedb57f6b 100644 --- a/libstdc++-v3/include/bits/stl_tree.h +++ b/libstdc++-v3/include/bits/stl_tree.h @@ -72,9 +72,6 @@ # include #endif -#define __glibcxx_want_generic_associative_lookup -#include - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION diff --git a/libstdc++-v3/include/bits/stl_uninitialized.h b/libstdc++-v3/include/bits/stl_uninitialized.h index 5174cfbcbe2c..1282af3bc43f 100644 --- a/libstdc++-v3/include/bits/stl_uninitialized.h +++ b/libstdc++-v3/include/bits/stl_uninitialized.h @@ -67,9 +67,6 @@ #include #endif -#define __glibcxx_want_raw_memory_algorithms -#include - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -966,7 +963,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// @endcond #endif -#ifdef __cpp_lib_raw_memory_algorithms // C++ >= 17 +#ifdef __glibcxx_raw_memory_algorithms // C++ >= 17 /** * @brief Default-initializes objects in the range [first,last). * @param __first A forward iterator. @@ -1059,7 +1056,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __count, __result); return {__res.first.base(), __res.second}; } -#endif // __cpp_lib_raw_memory_algorithms +#endif // __glibcxx_raw_memory_algorithms #if __cplusplus >= 201103L /// @cond undocumented diff --git a/libstdc++-v3/include/bits/stl_vector.h b/libstdc++-v3/include/bits/stl_vector.h index 1a353397e073..5e18f6eedce7 100644 --- a/libstdc++-v3/include/bits/stl_vector.h +++ b/libstdc++-v3/include/bits/stl_vector.h @@ -66,9 +66,6 @@ # include #endif -#define __glibcxx_want_constexpr_vector -#include - #include #if _GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR diff --git a/libstdc++-v3/include/bits/unique_ptr.h b/libstdc++-v3/include/bits/unique_ptr.h index d92fe79e2f2e..164f5f7e9454 100644 --- a/libstdc++-v3/include/bits/unique_ptr.h +++ b/libstdc++-v3/include/bits/unique_ptr.h @@ -44,10 +44,6 @@ # endif #endif -#define __glibcxx_want_constexpr_memory -#define __glibcxx_want_make_unique -#include - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -1027,7 +1023,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION public __uniq_ptr_hash> { }; -#ifdef __cpp_lib_make_unique // C++ >= 14 && HOSTED +#ifdef __glibcxx_make_unique // C++ >= 14 && HOSTED /// @cond undocumented namespace __detail { diff --git a/libstdc++-v3/include/bits/unordered_map.h b/libstdc++-v3/include/bits/unordered_map.h index 4c9a6bae2fd7..1c99a83bc1eb 100644 --- a/libstdc++-v3/include/bits/unordered_map.h +++ b/libstdc++-v3/include/bits/unordered_map.h @@ -35,9 +35,6 @@ #include // hash #include // equal_to -#define __glibcxx_want_unordered_map_try_emplace -#include - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -454,7 +451,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER { return _M_h._M_reinsert_node(std::move(__nh)).position; } #endif // C++17 -#ifdef __cpp_lib_unordered_map_try_emplace // C++ >= 17 && HOSTED +#ifdef __glibcxx_unordered_map_try_emplace // C++ >= 17 && HOSTED /** * @brief Attempts to build and insert a std::pair into the * %unordered_map. @@ -538,7 +535,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER return _M_h.try_emplace(__hint, std::move(__k), std::forward<_Args>(__args)...).first; } -#endif // __cpp_lib_unordered_map_try_emplace +#endif // __glibcxx_unordered_map_try_emplace ///@{ /** diff --git a/libstdc++-v3/include/bits/uses_allocator_args.h b/libstdc++-v3/include/bits/uses_allocator_args.h index a4eae74d5e96..ede11db5b462 100644 --- a/libstdc++-v3/include/bits/uses_allocator_args.h +++ b/libstdc++-v3/include/bits/uses_allocator_args.h @@ -32,10 +32,9 @@ #pragma GCC system_header -#define __glibcxx_want_make_obj_using_allocator #include -#ifdef __cpp_lib_make_obj_using_allocator // C++ >= 20 && concepts +#ifdef __glibcxx_make_obj_using_allocator // C++ >= 20 && concepts #include // for placement operator new #include // for tuple, make_tuple, make_from_tuple #include // construct_at @@ -245,5 +244,5 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// @} _GLIBCXX_END_NAMESPACE_VERSION } // namespace std -#endif // __cpp_lib_make_obj_using_allocator +#endif // __glibcxx_make_obj_using_allocator #endif // _USES_ALLOCATOR_ARGS diff --git a/libstdc++-v3/include/bits/utility.h b/libstdc++-v3/include/bits/utility.h index ebcf5ba36b28..bfcb8e78ebae 100644 --- a/libstdc++-v3/include/bits/utility.h +++ b/libstdc++-v3/include/bits/utility.h @@ -35,11 +35,6 @@ #pragma GCC system_header -#define __glibcxx_want_tuple_element_t -#define __glibcxx_want_integer_sequence -#define __glibcxx_want_ranges_zip -#include - #if __cplusplus >= 201103L #include @@ -135,7 +130,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // _GLIBCXX_RESOLVE_LIB_DEFECTS // 3378. tuple_size_v/tuple_element_t should be available when // tuple_size/tuple_element are -#ifdef __cpp_lib_tuple_element_t // C++ >= 14 +#ifdef __glibcxx_tuple_element_t // C++ >= 14 template using tuple_element_t = typename tuple_element<__i, _Tp>::type; #endif @@ -160,7 +155,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #endif }; -#ifdef __cpp_lib_integer_sequence // C++ >= 14 +#ifdef __glibcxx_integer_sequence // C++ >= 14 /// Class template integer_sequence template @@ -193,7 +188,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// Alias template index_sequence_for template using index_sequence_for = make_index_sequence; -#endif // __cpp_lib_integer_sequence +#endif // __glibcxx_integer_sequence #if __cplusplus >= 201703L diff --git a/libstdc++-v3/include/std/algorithm b/libstdc++-v3/include/std/algorithm index c6ebb86e6a94..d7fab417111b 100644 --- a/libstdc++-v3/include/std/algorithm +++ b/libstdc++-v3/include/std/algorithm @@ -63,7 +63,15 @@ # include #endif +#define __glibcxx_want_clamp +#define __glibcxx_want_constexpr_algorithms #define __glibcxx_want_parallel_algorithm +#define __glibcxx_want_ranges_contains +#define __glibcxx_want_ranges_find_last +#define __glibcxx_want_ranges_fold +#define __glibcxx_want_robust_nonmodifying_seq_ops +#define __glibcxx_want_sample +#define __glibcxx_want_shift #include #if __cpp_lib_parallel_algorithm // C++ >= 17 && HOSTED diff --git a/libstdc++-v3/include/std/array b/libstdc++-v3/include/std/array index c4d534c3a349..d34ec5c7c433 100644 --- a/libstdc++-v3/include/std/array +++ b/libstdc++-v3/include/std/array @@ -45,6 +45,8 @@ #include // std::index_sequence, std::tuple_size #include +#define __glibcxx_want_array_constexpr +#define __glibcxx_want_nonmember_container_access #define __glibcxx_want_to_array #include diff --git a/libstdc++-v3/include/std/atomic b/libstdc++-v3/include/std/atomic index 713ee2cc5397..09bbe2a7245b 100644 --- a/libstdc++-v3/include/std/atomic +++ b/libstdc++-v3/include/std/atomic @@ -39,9 +39,12 @@ #else #define __glibcxx_want_atomic_is_always_lock_free +#define __glibcxx_want_atomic_flag_test #define __glibcxx_want_atomic_float #define __glibcxx_want_atomic_ref #define __glibcxx_want_atomic_lock_free_type_aliases +#define __glibcxx_want_atomic_value_initialization +#define __glibcxx_want_atomic_wait #include #include diff --git a/libstdc++-v3/include/std/chrono b/libstdc++-v3/include/std/chrono index 10bdd1c4edeb..e4ba6eafcebc 100644 --- a/libstdc++-v3/include/std/chrono +++ b/libstdc++-v3/include/std/chrono @@ -50,6 +50,10 @@ # include #endif +#define __glibcxx_want_chrono +#define __glibcxx_want_chrono_udls +#include + namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION diff --git a/libstdc++-v3/include/std/condition_variable b/libstdc++-v3/include/std/condition_variable index 5ed4d3b25195..a4c4f8400ec0 100644 --- a/libstdc++-v3/include/std/condition_variable +++ b/libstdc++-v3/include/std/condition_variable @@ -363,7 +363,7 @@ _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2) const chrono::duration<_Rep, _Period>& __rtime, _Predicate __p) { return wait_until(__lock, __clock_t::now() + __rtime, std::move(__p)); } -#ifdef __cpp_lib_jthread +#ifdef __glibcxx_jthread template bool wait(_Lock& __lock, stop_token __stoken, diff --git a/libstdc++-v3/include/std/deque b/libstdc++-v3/include/std/deque index c0b05ddfc647..e48dc9968e82 100644 --- a/libstdc++-v3/include/std/deque +++ b/libstdc++-v3/include/std/deque @@ -69,6 +69,7 @@ #include #define __glibcxx_want_erase_if +#define __glibcxx_want_nonmember_container_access #include #ifdef _GLIBCXX_DEBUG diff --git a/libstdc++-v3/include/std/format b/libstdc++-v3/include/std/format index 1e7172575ecc..8ec1c8a0b9a7 100644 --- a/libstdc++-v3/include/std/format +++ b/libstdc++-v3/include/std/format @@ -34,6 +34,7 @@ #include // for std::string #define __glibcxx_want_format +#define __glibcxx_want_format_ranges #include #ifdef __cpp_lib_format // C++ >= 20 && HOSTED @@ -2041,7 +2042,7 @@ namespace __format }; #endif -#if defined __cpp_lib_to_chars +#if defined __glibcxx_to_chars /// Format a floating-point value. template<__format::__formattable_float _Tp, __format::__char _CharT> struct formatter<_Tp, _CharT> @@ -3246,7 +3247,7 @@ namespace __format return std::forward<_Visitor>(__vis)(_M_val._M_ll); case _Arg_ull: return std::forward<_Visitor>(__vis)(_M_val._M_ull); -#if __cpp_lib_to_chars // FIXME: need to be able to format these types! +#if __glibcxx_to_chars // FIXME: need to be able to format these types! case _Arg_flt: return std::forward<_Visitor>(__vis)(_M_val._M_flt); case _Arg_dbl: diff --git a/libstdc++-v3/include/std/forward_list b/libstdc++-v3/include/std/forward_list index bd642a16e421..0870bc22f470 100644 --- a/libstdc++-v3/include/std/forward_list +++ b/libstdc++-v3/include/std/forward_list @@ -46,6 +46,9 @@ #endif #define __glibcxx_want_erase_if +#define __glibcxx_want_incomplete_container_elements +#define __glibcxx_want_list_remove_return_type +#define __glibcxx_want_nonmember_container_access #include #if __cplusplus >= 201703L @@ -67,7 +70,7 @@ namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION template - inline typename forward_list<_Tp, _Alloc>::size_type + inline typename forward_list<_Tp, _Alloc>::size_type erase_if(forward_list<_Tp, _Alloc>& __cont, _Predicate __pred) { return __cont.remove_if(__pred); } diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional index 9551e38dfdb6..729d11c98047 100644 --- a/libstdc++-v3/include/std/functional +++ b/libstdc++-v3/include/std/functional @@ -48,14 +48,6 @@ #include #include // std::equal_to, std::unary_function etc. -#define __glibcxx_want_invoke -#define __glibcxx_want_constexpr_functional -#define __glibcxx_want_invoke_r -#define __glibcxx_want_bind_front -#define __glibcxx_want_not_fn -#define __glibcxx_want_boyer_moore_searcher -#include - #if __cplusplus >= 201103L #include @@ -82,6 +74,17 @@ # include #endif +#define __glibcxx_want_boyer_moore_searcher +#define __glibcxx_want_bind_front +#define __glibcxx_want_constexpr_functional +#define __glibcxx_want_invoke +#define __glibcxx_want_invoke_r +#define __glibcxx_want_move_only_function +#define __glibcxx_want_not_fn +#define __glibcxx_want_ranges +#define __glibcxx_want_transparent_operators +#include + #endif // C++11 namespace std _GLIBCXX_VISIBILITY(default) diff --git a/libstdc++-v3/include/std/ios b/libstdc++-v3/include/std/ios index 80be29f461ee..3f4ad1c2cd61 100644 --- a/libstdc++-v3/include/std/ios +++ b/libstdc++-v3/include/std/ios @@ -45,4 +45,7 @@ #include #include +#define __glibcxx_want_ios_noreplace +#include + #endif /* _GLIBCXX_IOS */ diff --git a/libstdc++-v3/include/std/iterator b/libstdc++-v3/include/std/iterator index 8c8670fbdf08..7461efbdeb5a 100644 --- a/libstdc++-v3/include/std/iterator +++ b/libstdc++-v3/include/std/iterator @@ -67,7 +67,14 @@ #endif #include +#define __glibcxx_want_array_constexpr +#define __glibcxx_want_constexpr_iterator +#define __glibcxx_want_make_reverse_iterator +#define __glibcxx_want_move_iterator_concept +#define __glibcxx_want_nonmember_container_access #define __glibcxx_want_null_iterators +#define __glibcxx_want_ranges +#define __glibcxx_want_ssize #include #if __cplusplus >= 202002L diff --git a/libstdc++-v3/include/std/list b/libstdc++-v3/include/std/list index 98415919dd4a..b5185a9dec22 100644 --- a/libstdc++-v3/include/std/list +++ b/libstdc++-v3/include/std/list @@ -70,6 +70,9 @@ #endif #define __glibcxx_want_erase_if +#define __glibcxx_want_incomplete_container_elements +#define __glibcxx_want_list_remove_return_type +#define __glibcxx_want_nonmember_container_access #include #if __cplusplus >= 201703L diff --git a/libstdc++-v3/include/std/map b/libstdc++-v3/include/std/map index a0f3fce7b28e..008d8d3bdef5 100644 --- a/libstdc++-v3/include/std/map +++ b/libstdc++-v3/include/std/map @@ -69,6 +69,13 @@ # include #endif +#define __glibcxx_want_erase_if +#define __glibcxx_want_generic_associative_lookup +#define __glibcxx_want_map_try_emplace +#define __glibcxx_want_node_extract +#define __glibcxx_want_nonmember_container_access +#include + #if __cplusplus >= 201703L #include namespace std _GLIBCXX_VISIBILITY(default) diff --git a/libstdc++-v3/include/std/memory b/libstdc++-v3/include/std/memory index 3cce72cc0362..ac83761a26ce 100644 --- a/libstdc++-v3/include/std/memory +++ b/libstdc++-v3/include/std/memory @@ -91,8 +91,22 @@ # include #endif +#define __glibcxx_want_allocator_traits_is_always_equal +#define __glibcxx_want_assume_aligned +#define __glibcxx_want_atomic_shared_ptr #define __glibcxx_want_atomic_value_initialization +#define __glibcxx_want_constexpr_dynamic_alloc +#define __glibcxx_want_constexpr_memory +#define __glibcxx_want_enable_shared_from_this +#define __glibcxx_want_make_unique #define __glibcxx_want_parallel_algorithm +#define __glibcxx_want_ranges +#define __glibcxx_want_raw_memory_algorithms +#define __glibcxx_want_shared_ptr_arrays +#define __glibcxx_want_shared_ptr_weak_type +#define __glibcxx_want_smart_ptr_for_overwrite +#define __glibcxx_want_to_address +#define __glibcxx_want_transparent_operators #include #if __cplusplus >= 201103L && __cplusplus <= 202002L && _GLIBCXX_HOSTED diff --git a/libstdc++-v3/include/std/numeric b/libstdc++-v3/include/std/numeric index 8c8d200021f5..559e6242e929 100644 --- a/libstdc++-v3/include/std/numeric +++ b/libstdc++-v3/include/std/numeric @@ -85,6 +85,7 @@ #define __glibcxx_want_interpolate #define __glibcxx_want_lcm #define __glibcxx_want_parallel_algorithm +#define __glibcxx_want_ranges_iota #include /** diff --git a/libstdc++-v3/include/std/queue b/libstdc++-v3/include/std/queue index ec620ac6d62d..8980ba8a5786 100644 --- a/libstdc++-v3/include/std/queue +++ b/libstdc++-v3/include/std/queue @@ -65,4 +65,7 @@ #include #include +#define __glibcxx_want_adaptor_iterator_pair_constructor +#include + #endif /* _GLIBCXX_QUEUE */ diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges index 41f95dc8f780..26d6c013ad04 100644 --- a/libstdc++-v3/include/std/ranges +++ b/libstdc++-v3/include/std/ranges @@ -51,6 +51,7 @@ #include #include +#define __glibcxx_want_ranges #define __glibcxx_want_ranges_as_const #define __glibcxx_want_ranges_as_rvalue #define __glibcxx_want_ranges_cartesian_product diff --git a/libstdc++-v3/include/std/regex b/libstdc++-v3/include/std/regex index 7f63d8606f79..ff3320522c1b 100644 --- a/libstdc++-v3/include/std/regex +++ b/libstdc++-v3/include/std/regex @@ -68,6 +68,9 @@ #include #include +#define __glibcxx_want_nonmember_container_access +#include + #if __cplusplus >= 201703L && _GLIBCXX_USE_CXX11_ABI #include namespace std _GLIBCXX_VISIBILITY(default) diff --git a/libstdc++-v3/include/std/scoped_allocator b/libstdc++-v3/include/std/scoped_allocator index 8af432ada425..2f10479763e8 100644 --- a/libstdc++-v3/include/std/scoped_allocator +++ b/libstdc++-v3/include/std/scoped_allocator @@ -196,7 +196,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION using __outermost_alloc_traits = allocator_traits::type>; -#if ! __cpp_lib_make_obj_using_allocator +#if ! __glibcxx_make_obj_using_allocator template void _M_construct(__uses_alloc0, _Tp* __p, _Args&&... __args) @@ -373,7 +373,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION size_type max_size() const { return __traits::max_size(outer_allocator()); } -#if ! __cpp_lib_make_obj_using_allocator +#if ! __glibcxx_make_obj_using_allocator template typename __not_pair<_Tp>::type construct(_Tp* __p, _Args&&... __args) @@ -473,7 +473,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION const scoped_allocator_adaptor<_OutA2, _InA...>& __b) noexcept; private: -#if ! __cpp_lib_make_obj_using_allocator +#if ! __glibcxx_make_obj_using_allocator template tuple<_Args&&...> _M_construct_p(__uses_alloc0, _Ind, tuple<_Args...>& __t) diff --git a/libstdc++-v3/include/std/set b/libstdc++-v3/include/std/set index 5641b7916686..55cabda0c2e3 100644 --- a/libstdc++-v3/include/std/set +++ b/libstdc++-v3/include/std/set @@ -69,6 +69,12 @@ # include #endif +#define __glibcxx_want_erase_if +#define __glibcxx_want_generic_associative_lookup +#define __glibcxx_want_node_extract +#define __glibcxx_want_nonmember_container_access +#include + #if __cplusplus >= 201703L #include namespace std _GLIBCXX_VISIBILITY(default) diff --git a/libstdc++-v3/include/std/stack b/libstdc++-v3/include/std/stack index 4cc89f0d5851..dda18b6222e3 100644 --- a/libstdc++-v3/include/std/stack +++ b/libstdc++-v3/include/std/stack @@ -62,4 +62,7 @@ #include #include +#define __glibcxx_want_adaptor_iterator_pair_constructor +#include + #endif /* _GLIBCXX_STACK */ diff --git a/libstdc++-v3/include/std/stop_token b/libstdc++-v3/include/std/stop_token index 3be0f5a3ac48..fce1cf59b88d 100644 --- a/libstdc++-v3/include/std/stop_token +++ b/libstdc++-v3/include/std/stop_token @@ -109,7 +109,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION this_thread::yield(); } -#ifndef __cpp_lib_semaphore +#ifndef __glibcxx_semaphore struct binary_semaphore { explicit binary_semaphore(int __d) : _M_counter(__d > 0) { } diff --git a/libstdc++-v3/include/std/string b/libstdc++-v3/include/std/string index 832e9d8915fa..78e8bacc0076 100644 --- a/libstdc++-v3/include/std/string +++ b/libstdc++-v3/include/std/string @@ -54,7 +54,13 @@ #include #include +#define __glibcxx_want_constexpr_char_traits +#define __glibcxx_want_constexpr_string #define __glibcxx_want_erase_if +#define __glibcxx_want_nonmember_container_access +#define __glibcxx_want_string_resize_and_overwrite +#define __glibcxx_want_string_udls +#define __glibcxx_want_to_string #include #if __cplusplus >= 201703L && _GLIBCXX_USE_CXX11_ABI diff --git a/libstdc++-v3/include/std/string_view b/libstdc++-v3/include/std/string_view index cf288ed3a366..cbb6bb0928fa 100644 --- a/libstdc++-v3/include/std/string_view +++ b/libstdc++-v3/include/std/string_view @@ -35,6 +35,7 @@ #pragma GCC system_header +#define __glibcxx_want_constexpr_char_traits #define __glibcxx_want_string_view #define __glibcxx_want_constexpr_string_view #define __glibcxx_want_starts_ends_with diff --git a/libstdc++-v3/include/std/tuple b/libstdc++-v3/include/std/tuple index 797d8c031125..f2e008be34fa 100644 --- a/libstdc++-v3/include/std/tuple +++ b/libstdc++-v3/include/std/tuple @@ -45,9 +45,11 @@ #endif #define __glibcxx_want_constexpr_tuple +#define __glibcxx_want_tuple_element_t #define __glibcxx_want_tuples_by_type #define __glibcxx_want_apply #define __glibcxx_want_make_from_tuple +#define __glibcxx_want_ranges_zip #include namespace std _GLIBCXX_VISIBILITY(default) diff --git a/libstdc++-v3/include/std/unordered_map b/libstdc++-v3/include/std/unordered_map index b72845be18e9..ec92492e8edb 100644 --- a/libstdc++-v3/include/std/unordered_map +++ b/libstdc++-v3/include/std/unordered_map @@ -46,6 +46,13 @@ # include #endif +#define __glibcxx_want_erase_if +#define __glibcxx_want_generic_unordered_lookup +#define __glibcxx_want_node_extract +#define __glibcxx_want_nonmember_container_access +#define __glibcxx_want_unordered_map_try_emplace +#include + #if __cplusplus >= 201703L #include namespace std _GLIBCXX_VISIBILITY(default) diff --git a/libstdc++-v3/include/std/unordered_set b/libstdc++-v3/include/std/unordered_set index 22a1c7ca24d0..b77b6229fc2a 100644 --- a/libstdc++-v3/include/std/unordered_set +++ b/libstdc++-v3/include/std/unordered_set @@ -46,6 +46,12 @@ # include #endif +#define __glibcxx_want_erase_if +#define __glibcxx_want_generic_unordered_lookup +#define __glibcxx_want_node_extract +#define __glibcxx_want_nonmember_container_access +#include + #if __cplusplus >= 201703L #include namespace std _GLIBCXX_VISIBILITY(default) diff --git a/libstdc++-v3/include/std/utility b/libstdc++-v3/include/std/utility index bdaf5d4c31b9..18bef7adccdd 100644 --- a/libstdc++-v3/include/std/utility +++ b/libstdc++-v3/include/std/utility @@ -68,15 +68,6 @@ #include #include -#define __glibcxx_want_as_const -#define __glibcxx_want_constexpr_algorithms -#define __glibcxx_want_exchange_function -#define __glibcxx_want_forward_like -#define __glibcxx_want_integer_comparison_functions -#define __glibcxx_want_to_underlying -#define __glibcxx_want_unreachable -#include - #if __cplusplus >= 201103L #include @@ -88,6 +79,21 @@ #include // __is_standard_integer, __int_traits #endif +#define __glibcxx_want_addressof_constexpr +#define __glibcxx_want_as_const +#define __glibcxx_want_constexpr_algorithms +#define __glibcxx_want_constexpr_utility +#define __glibcxx_want_exchange_function +#define __glibcxx_want_forward_like +#define __glibcxx_want_integer_comparison_functions +#define __glibcxx_want_integer_sequence +#define __glibcxx_want_ranges_zip +#define __glibcxx_want_to_underlying +#define __glibcxx_want_tuple_element_t +#define __glibcxx_want_tuples_by_type +#define __glibcxx_want_unreachable +#include + namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION diff --git a/libstdc++-v3/include/std/vector b/libstdc++-v3/include/std/vector index ecd9f7108f65..5e1d54a04acf 100644 --- a/libstdc++-v3/include/std/vector +++ b/libstdc++-v3/include/std/vector @@ -76,7 +76,10 @@ # include #endif +#define __glibcxx_want_constexpr_vector #define __glibcxx_want_erase_if +#define __glibcxx_want_incomplete_container_elements +#define __glibcxx_want_nonmember_container_access #include #if __cplusplus >= 201703L From c7f6537db94f7c6320a5a8ecaa387c9b9ce1f0ac Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 15 Nov 2023 23:02:34 +0000 Subject: [PATCH 100/169] libstdc++: Implement std::out_ptr and std::inout_ptr for C++23 [PR111667] This implements that changes from P1132R8, including optimized paths for std::shared_ptr and std::unique_ptr. For std::shared_ptr we pre-allocate a new control block in the std::out_ptr_t constructor so that the destructor is non-throwing. This requires some care because unlike the shared_ptr(Y*, D, A) constructor, we don't want to invoke the deleter if allocating the control block throws, because we don't own any pointer yet. In order to avoid the unwanted deleter invocation, we create the control block manually. We also want to avoid invoking the deleter on a null pointer on destruction, so we destroy the control block manually if there is no pointer to take ownership of. For std::unique_ptr and for raw pointers, the out_ptr_t object hands out direct access to the pointer, so that we don't have anything to do (except possibly assign a new deleter) in the ~out_ptr_t destructor. These optimizations avoid requiring additional temporary storage for the pointer (and optional arguments), and avoid additional instructions to copy that pointer into the smart pointer at the end. libstdc++-v3/ChangeLog: PR libstdc++/111667 * include/Makefile.am: Add new header. * include/Makefile.in: Regenerate. * include/bits/out_ptr.h: New file. * include/bits/shared_ptr.h (__is_shared_ptr): Move definition to here ... * include/bits/shared_ptr_atomic.h (__is_shared_ptr): ... from here. * include/bits/shared_ptr_base.h (__shared_count): Declare out_ptr_t as a friend. (_Sp_counted_deleter, __shared_ptr): Likewise. * include/bits/unique_ptr.h (unique_ptr, unique_ptr): Declare out_ptr_t and inout_ptr_t as friends. (__is_unique_ptr): Define new variable template. * include/bits/version.def (out_ptr): Define. * include/bits/version.h: Regenerate. * include/std/memory: Include new header. * testsuite/20_util/smartptr.adapt/inout_ptr/1.cc: New test. * testsuite/20_util/smartptr.adapt/inout_ptr/2.cc: New test. * testsuite/20_util/smartptr.adapt/inout_ptr/shared_ptr_neg.cc: New test. * testsuite/20_util/smartptr.adapt/inout_ptr/void_ptr.cc: New test. * testsuite/20_util/smartptr.adapt/out_ptr/1.cc: New test. * testsuite/20_util/smartptr.adapt/out_ptr/2.cc: New test. * testsuite/20_util/smartptr.adapt/out_ptr/shared_ptr_neg.cc: New test. * testsuite/20_util/smartptr.adapt/out_ptr/void_ptr.cc: New test. --- libstdc++-v3/include/Makefile.am | 1 + libstdc++-v3/include/Makefile.in | 1 + libstdc++-v3/include/bits/out_ptr.h | 432 ++++++++++++++++++ libstdc++-v3/include/bits/shared_ptr.h | 7 + libstdc++-v3/include/bits/shared_ptr_atomic.h | 5 - libstdc++-v3/include/bits/shared_ptr_base.h | 9 + libstdc++-v3/include/bits/unique_ptr.h | 21 + libstdc++-v3/include/bits/version.def | 8 + libstdc++-v3/include/bits/version.h | 23 +- libstdc++-v3/include/std/memory | 5 + .../20_util/smartptr.adapt/inout_ptr/1.cc | 47 ++ .../20_util/smartptr.adapt/inout_ptr/2.cc | 102 +++++ .../inout_ptr/shared_ptr_neg.cc | 11 + .../smartptr.adapt/inout_ptr/void_ptr.cc | 35 ++ .../20_util/smartptr.adapt/out_ptr/1.cc | 116 +++++ .../20_util/smartptr.adapt/out_ptr/2.cc | 273 +++++++++++ .../smartptr.adapt/out_ptr/shared_ptr_neg.cc | 7 + .../smartptr.adapt/out_ptr/void_ptr.cc | 60 +++ 18 files changed, 1152 insertions(+), 11 deletions(-) create mode 100644 libstdc++-v3/include/bits/out_ptr.h create mode 100644 libstdc++-v3/testsuite/20_util/smartptr.adapt/inout_ptr/1.cc create mode 100644 libstdc++-v3/testsuite/20_util/smartptr.adapt/inout_ptr/2.cc create mode 100644 libstdc++-v3/testsuite/20_util/smartptr.adapt/inout_ptr/shared_ptr_neg.cc create mode 100644 libstdc++-v3/testsuite/20_util/smartptr.adapt/inout_ptr/void_ptr.cc create mode 100644 libstdc++-v3/testsuite/20_util/smartptr.adapt/out_ptr/1.cc create mode 100644 libstdc++-v3/testsuite/20_util/smartptr.adapt/out_ptr/2.cc create mode 100644 libstdc++-v3/testsuite/20_util/smartptr.adapt/out_ptr/shared_ptr_neg.cc create mode 100644 libstdc++-v3/testsuite/20_util/smartptr.adapt/out_ptr/void_ptr.cc diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am index 6209f390e087..dab9f720cbb3 100644 --- a/libstdc++-v3/include/Makefile.am +++ b/libstdc++-v3/include/Makefile.am @@ -130,6 +130,7 @@ bits_freestanding = \ ${bits_srcdir}/max_size_type.h \ ${bits_srcdir}/memoryfwd.h \ ${bits_srcdir}/move.h \ + ${bits_srcdir}/out_ptr.h \ ${bits_srcdir}/predefined_ops.h \ ${bits_srcdir}/parse_numbers.h \ ${bits_srcdir}/ptr_traits.h \ diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in index 596fa0d23908..4f7ab2dfbaba 100644 --- a/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in @@ -485,6 +485,7 @@ bits_freestanding = \ ${bits_srcdir}/max_size_type.h \ ${bits_srcdir}/memoryfwd.h \ ${bits_srcdir}/move.h \ + ${bits_srcdir}/out_ptr.h \ ${bits_srcdir}/predefined_ops.h \ ${bits_srcdir}/parse_numbers.h \ ${bits_srcdir}/ptr_traits.h \ diff --git a/libstdc++-v3/include/bits/out_ptr.h b/libstdc++-v3/include/bits/out_ptr.h new file mode 100644 index 000000000000..49712fa7e31c --- /dev/null +++ b/libstdc++-v3/include/bits/out_ptr.h @@ -0,0 +1,432 @@ +// Smart pointer adaptors -*- C++ -*- + +// Copyright The GNU Toolchain Authors. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/bits/out_ptr.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{memory} + */ + +#ifndef _GLIBCXX_OUT_PTR_H +#define _GLIBCXX_OUT_PTR_H 1 + +#pragma GCC system_header + +#include + +#ifdef __glibcxx_out_ptr // C++ >= 23 + +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +#ifdef __glibcxx_out_ptr // C++ >= 23 + /// Adapt a smart pointer for functions taking an output pointer parameter. + template + class out_ptr_t + { + static_assert(!__is_shared_ptr<_Smart> || sizeof...(_Args) != 0, + "a deleter must be used when adapting std::shared_ptr " + "with std::out_ptr"); + + public: + explicit + out_ptr_t(_Smart& __smart, _Args... __args) + : _M_impl{__smart, std::forward<_Args>(__args)...} + { + if constexpr (requires { _M_impl._M_out_init(); }) + _M_impl._M_out_init(); + } + + out_ptr_t(const out_ptr_t&) = delete; + + ~out_ptr_t() = default; + + operator _Pointer*() const noexcept + { return _M_impl._M_get(); } + + operator void**() const noexcept requires (!same_as<_Pointer, void*>) + { + static_assert(is_pointer_v<_Pointer>); + _Pointer* __p = *this; + return static_cast(static_cast(__p)); + } + + private: + // TODO: Move this to namespace scope? e.g. __detail::_Ptr_adapt_impl + template + struct _Impl + { + // This constructor must not modify __s because out_ptr_t and + // inout_ptr_t want to do different things. After construction + // they call _M_out_init() or _M_inout_init() respectively. + _Impl(_Smart& __s, _Args&&... __args) + : _M_smart(__s), _M_args(std::forward<_Args>(__args)...) + { } + + // Called by out_ptr_t to clear the smart pointer before using it. + void + _M_out_init() + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3734. Inconsistency in inout_ptr and out_ptr for empty case + if constexpr (requires { _M_smart.reset(); }) + _M_smart.reset(); + else + _M_smart = _Smart(); + } + + // Called by inout_ptr_t to copy the smart pointer's value + // to the pointer that is returned from _M_get(). + void + _M_inout_init() + { _M_ptr = _M_smart.release(); } + + // The pointer value returned by operator Pointer*(). + _Pointer* + _M_get() const + { return __builtin_addressof(const_cast<_Pointer&>(_M_ptr)); } + + // Finalize the effects on the smart pointer. + ~_Impl() noexcept(false); + + _Smart& _M_smart; + [[no_unique_address]] _Pointer _M_ptr{}; + [[no_unique_address]] tuple<_Args...> _M_args; + }; + + // Partial specialization for raw pointers. + template + struct _Impl<_Tp*, _Tp*> + { + void + _M_out_init() + { _M_p = nullptr; } + + void + _M_inout_init() + { } + + _Tp** + _M_get() const + { return __builtin_addressof(const_cast<_Tp*&>(_M_p)); } + + _Tp*& _M_p; + }; + + // Partial specialization for raw pointers, with conversion. + template requires (!is_same_v<_Ptr, _Tp*>) + struct _Impl<_Tp*, _Ptr> + { + explicit + _Impl(_Tp*& __p) + : _M_p(__p) + { } + + void + _M_out_init() + { _M_p = nullptr; } + + void + _M_inout_init() + { _M_ptr = _M_p; } + + _Pointer* + _M_get() const + { return __builtin_addressof(const_cast<_Pointer&>(_M_ptr)); } + + ~_Impl() { _M_p = static_cast<_Tp*>(_M_ptr); } + + _Tp*& _M_p; + _Pointer _M_ptr{}; + }; + + // Partial specialization for std::unique_ptr. + // This specialization gives direct access to the private member + // of the unique_ptr, avoiding the overhead of storing a separate + // pointer and then resetting the unique_ptr in the destructor. + // FIXME: constrain to only match the primary template, + // not program-defined specializations of unique_ptr. + template + struct _Impl, + typename unique_ptr<_Tp, _Del>::pointer> + { + void + _M_out_init() + { _M_smart.reset(); } + + _Pointer* + _M_get() const noexcept + { return __builtin_addressof(_M_smart._M_t._M_ptr()); } + + _Smart& _M_smart; + }; + + // Partial specialization for std::unique_ptr with replacement deleter. + // FIXME: constrain to only match the primary template, + // not program-defined specializations of unique_ptr. + template + struct _Impl, + typename unique_ptr<_Tp, _Del>::pointer, _Del2> + { + void + _M_out_init() + { _M_smart.reset(); } + + _Pointer* + _M_get() const noexcept + { return __builtin_addressof(_M_smart._M_t._M_ptr()); } + + ~_Impl() + { + if (_M_smart.get()) + _M_smart._M_t._M_deleter() = std::forward<_Del2>(_M_del); + } + + _Smart& _M_smart; + [[no_unique_address]] _Del2 _M_del; + }; + + // Partial specialization for std::shared_ptr. + // This specialization gives direct access to the private member + // of the shared_ptr, avoiding the overhead of storing a separate + // pointer and then resetting the shared_ptr in the destructor. + // A new control block is allocated in the constructor, so that if + // allocation fails it doesn't throw an exception from the destructor. + template + requires (is_base_of_v<__shared_ptr<_Tp>, shared_ptr<_Tp>>) + struct _Impl, + typename shared_ptr<_Tp>::element_type*, _Del, _Alloc> + { + _Impl(_Smart& __s, _Del __d, _Alloc __a = _Alloc()) + : _M_smart(__s) + { + // We know shared_ptr cannot be used with inout_ptr_t + // so we can do all set up here, instead of in _M_out_init(). + _M_smart.reset(); + + // Similar to the shared_ptr(Y*, D, A) constructor, except that if + // the allocation throws we do not need (or want) to call deleter. + typename _Scd::__allocator_type __a2(__a); + auto __mem = __a2.allocate(1); + ::new (__mem) _Scd(nullptr, std::forward<_Del>(__d), + std::forward<_Alloc>(__a)); + _M_smart._M_refcount._M_pi = __mem; + } + + _Pointer* + _M_get() const noexcept + { return __builtin_addressof(_M_smart._M_ptr); } + + ~_Impl() + { + auto& __pi = _M_smart._M_refcount._M_pi; + + if (_Sp __ptr = _M_smart.get()) + static_cast<_Scd*>(__pi)->_M_impl._M_ptr = __ptr; + else // Destroy the control block manually without invoking deleter. + std::__exchange(__pi, nullptr)->_M_destroy(); + } + + _Smart& _M_smart; + + using _Sp = typename _Smart::element_type*; + using _Scd = _Sp_counted_deleter<_Sp, decay_t<_Del>, + remove_cvref_t<_Alloc>, + __default_lock_policy>; + }; + + // Partial specialization for std::shared_ptr, without custom allocator. + template + requires (is_base_of_v<__shared_ptr<_Tp>, shared_ptr<_Tp>>) + struct _Impl, + typename shared_ptr<_Tp>::element_type*, _Del> + : _Impl<_Smart, _Pointer, _Del, allocator> + { + using _Impl<_Smart, _Pointer, _Del, allocator>::_Impl; + }; + + using _Impl_t = _Impl<_Smart, _Pointer, _Args...>; + + _Impl_t _M_impl; + + template friend class inout_ptr_t; + }; + + /// Adapt a smart pointer for functions taking an output pointer parameter. + template + class inout_ptr_t + { + static_assert(!__is_shared_ptr<_Smart>, + "std::inout_ptr can not be used to wrap std::shared_ptr"); + + public: + explicit + inout_ptr_t(_Smart& __smart, _Args... __args) + : _M_impl{__smart, std::forward<_Args>(__args)...} + { + if constexpr (requires { _M_impl._M_inout_init(); }) + _M_impl._M_inout_init(); + } + + inout_ptr_t(const inout_ptr_t&) = delete; + + ~inout_ptr_t() = default; + + operator _Pointer*() const noexcept + { return _M_impl._M_get(); } + + operator void**() const noexcept requires (!same_as<_Pointer, void*>) + { + static_assert(is_pointer_v<_Pointer>); + _Pointer* __p = *this; + return static_cast(static_cast(__p)); + } + + private: + // Avoid an invalid instantiation of out_ptr_t, ...> + using _Out_ptr_t + = __conditional_t<__is_shared_ptr<_Smart>, + out_ptr_t, + out_ptr_t<_Smart, _Pointer, _Args...>>; + using _Impl_t = typename _Out_ptr_t::_Impl_t; + _Impl_t _M_impl; + }; + +/// @cond undocumented +namespace __detail +{ + // POINTER_OF metafunction + template + consteval auto + __pointer_of() + { + if constexpr (requires { typename _Tp::pointer; }) + return type_identity{}; + else if constexpr (requires { typename _Tp::element_type; }) + return type_identity{}; + else + { + using _Traits = pointer_traits<_Tp>; + if constexpr (requires { typename _Traits::element_type; }) + return type_identity{}; + } + // else POINTER_OF(S) is not a valid type, return void. + } + + // POINTER_OF_OR metafunction + template + consteval auto + __pointer_of_or() + { + using _TypeId = decltype(__detail::__pointer_of<_Smart>()); + if constexpr (is_void_v<_TypeId>) + return type_identity<_Ptr>{}; + else + return _TypeId{}; + } + + // Returns Pointer if !is_void_v, otherwise POINTER_OF(Smart). + template + consteval auto + __choose_ptr() + { + if constexpr (!is_void_v<_Ptr>) + return type_identity<_Ptr>{}; + else + return __detail::__pointer_of<_Smart>(); + } + + template + concept __resettable = requires (_Smart& __s) { + __s.reset(std::declval<_Sp>(), std::declval<_Args>()...); + }; +} +/// @endcond + + template + inline auto + out_ptr(_Smart& __s, _Args&&... __args) + { + using _TypeId = decltype(__detail::__choose_ptr<_Pointer, _Smart>()); + static_assert(!is_void_v<_TypeId>, "first argument to std::out_ptr " + "must be a pointer-like type"); + + using _Ret = out_ptr_t<_Smart, typename _TypeId::type, _Args&&...>; + return _Ret(__s, std::forward<_Args>(__args)...); + } + + template + inline auto + inout_ptr(_Smart& __s, _Args&&... __args) + { + using _TypeId = decltype(__detail::__choose_ptr<_Pointer, _Smart>()); + static_assert(!is_void_v<_TypeId>, "first argument to std::inout_ptr " + "must be a pointer-like type"); + + using _Ret = inout_ptr_t<_Smart, typename _TypeId::type, _Args&&...>; + return _Ret(__s, std::forward<_Args>(__args)...); + } + + template + template + inline + out_ptr_t<_Smart, _Pointer, _Args...>:: + _Impl<_Smart2, _Pointer2, _Args2...>::~_Impl() + { + using _TypeId = decltype(__detail::__pointer_of_or<_Smart, _Pointer>()); + using _Sp = typename _TypeId::type; + + if (!_M_ptr) + return; + + _Smart& __s = _M_smart; + _Pointer& __p = _M_ptr; + + auto __reset = [&](auto&&... __args) { + if constexpr (__detail::__resettable<_Smart, _Sp, _Args...>) + __s.reset(static_cast<_Sp>(__p), std::forward<_Args>(__args)...); + else if constexpr (is_constructible_v<_Smart, _Sp, _Args...>) + __s = _Smart(static_cast<_Sp>(__p), std::forward<_Args>(__args)...); + else + static_assert(is_constructible_v<_Smart, _Sp, _Args...>); + }; + + if constexpr (sizeof...(_Args) >= 2) + std::apply(__reset, std::move(_M_args)); + else if constexpr (sizeof...(_Args) == 1) + __reset(std::get<0>(std::move(_M_args))); + else + __reset(); + } +#endif // __glibcxx_out_ptr + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif // __glibcxx_out_ptr +#endif /* _GLIBCXX_OUT_PTR_H */ + diff --git a/libstdc++-v3/include/bits/shared_ptr.h b/libstdc++-v3/include/bits/shared_ptr.h index 02bfdabfd1ca..e3c48dead723 100644 --- a/libstdc++-v3/include/bits/shared_ptr.h +++ b/libstdc++-v3/include/bits/shared_ptr.h @@ -1158,6 +1158,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } }; +#if __cpp_variable_templates + template + static constexpr bool __is_shared_ptr = false; + template + static constexpr bool __is_shared_ptr> = true; +#endif + /// @} relates shared_ptr /// @} group pointer_abstractions diff --git a/libstdc++-v3/include/bits/shared_ptr_atomic.h b/libstdc++-v3/include/bits/shared_ptr_atomic.h index d0be43aec2da..22b1a1d6c500 100644 --- a/libstdc++-v3/include/bits/shared_ptr_atomic.h +++ b/libstdc++-v3/include/bits/shared_ptr_atomic.h @@ -388,11 +388,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @{ */ - template - static constexpr bool __is_shared_ptr = false; - template - static constexpr bool __is_shared_ptr> = true; - template class _Sp_atomic { diff --git a/libstdc++-v3/include/bits/shared_ptr_base.h b/libstdc++-v3/include/bits/shared_ptr_base.h index edb3eb654ea0..1961a9ae9e92 100644 --- a/libstdc++-v3/include/bits/shared_ptr_base.h +++ b/libstdc++-v3/include/bits/shared_ptr_base.h @@ -549,6 +549,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } private: +#ifdef __glibcxx_out_ptr + template friend class out_ptr_t; +#endif _Impl _M_impl; }; @@ -1126,6 +1129,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #ifdef __glibcxx_atomic_shared_ptr template friend class _Sp_atomic; #endif +#ifdef __glibcxx_out_ptr + template friend class out_ptr_t; +#endif _Sp_counted_base<_Lp>* _M_pi; }; @@ -1776,6 +1782,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #ifdef __glibcxx_atomic_shared_ptr friend _Sp_atomic>; #endif +#ifdef __glibcxx_out_ptr + template friend class out_ptr_t; +#endif element_type* _M_ptr; // Contained pointer. __shared_count<_Lp> _M_refcount; // Reference counter. diff --git a/libstdc++-v3/include/bits/unique_ptr.h b/libstdc++-v3/include/bits/unique_ptr.h index 164f5f7e9454..9d6f5af0a043 100644 --- a/libstdc++-v3/include/bits/unique_ptr.h +++ b/libstdc++-v3/include/bits/unique_ptr.h @@ -515,6 +515,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Disable copy from lvalue. unique_ptr(const unique_ptr&) = delete; unique_ptr& operator=(const unique_ptr&) = delete; + + private: +#ifdef __glibcxx_out_ptr + template + friend class out_ptr_t; + template + friend class inout_ptr_t; +#endif }; // 20.7.1.3 unique_ptr for array objects with a runtime length @@ -789,6 +797,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Disable copy from lvalue. unique_ptr(const unique_ptr&) = delete; unique_ptr& operator=(const unique_ptr&) = delete; + + private: +#ifdef __glibcxx_out_ptr + template friend class out_ptr_t; + template friend class inout_ptr_t; +#endif }; /// @{ @@ -1140,6 +1154,13 @@ namespace __detail } #endif // C++20 && HOSTED +#if __cpp_variable_templates + template + static constexpr bool __is_unique_ptr = false; + template + static constexpr bool __is_unique_ptr> = true; +#endif + /// @} group pointer_abstractions #if __cplusplus >= 201703L diff --git a/libstdc++-v3/include/bits/version.def b/libstdc++-v3/include/bits/version.def index 2aab9426ecc1..60400b3b8d24 100644 --- a/libstdc++-v3/include/bits/version.def +++ b/libstdc++-v3/include/bits/version.def @@ -1568,6 +1568,14 @@ ftms = { }; }; +ftms = { + name = out_ptr; + values = { + v = 202106; + cxxmin = 23; + }; +}; + ftms = { name = spanstream; values = { diff --git a/libstdc++-v3/include/bits/version.h b/libstdc++-v3/include/bits/version.h index 6829c70cf48b..2e2af3e0c414 100644 --- a/libstdc++-v3/include/bits/version.h +++ b/libstdc++-v3/include/bits/version.h @@ -1923,6 +1923,17 @@ #undef __glibcxx_want_move_only_function // from version.def line 1572 +#if !defined(__cpp_lib_out_ptr) +# if (__cplusplus >= 202100L) +# define __glibcxx_out_ptr 202106L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_out_ptr) +# define __cpp_lib_out_ptr 202106L +# endif +# endif +#endif /* !defined(__cpp_lib_out_ptr) && defined(__glibcxx_want_out_ptr) */ +#undef __glibcxx_want_out_ptr + +// from version.def line 1580 #if !defined(__cpp_lib_spanstream) # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED && (__glibcxx_span) # define __glibcxx_spanstream 202106L @@ -1933,7 +1944,7 @@ #endif /* !defined(__cpp_lib_spanstream) && defined(__glibcxx_want_spanstream) */ #undef __glibcxx_want_spanstream -// from version.def line 1582 +// from version.def line 1590 #if !defined(__cpp_lib_stacktrace) # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED && (_GLIBCXX_HAVE_STACKTRACE) # define __glibcxx_stacktrace 202011L @@ -1944,7 +1955,7 @@ #endif /* !defined(__cpp_lib_stacktrace) && defined(__glibcxx_want_stacktrace) */ #undef __glibcxx_want_stacktrace -// from version.def line 1592 +// from version.def line 1600 #if !defined(__cpp_lib_string_contains) # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED # define __glibcxx_string_contains 202011L @@ -1955,7 +1966,7 @@ #endif /* !defined(__cpp_lib_string_contains) && defined(__glibcxx_want_string_contains) */ #undef __glibcxx_want_string_contains -// from version.def line 1601 +// from version.def line 1609 #if !defined(__cpp_lib_string_resize_and_overwrite) # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED # define __glibcxx_string_resize_and_overwrite 202110L @@ -1966,7 +1977,7 @@ #endif /* !defined(__cpp_lib_string_resize_and_overwrite) && defined(__glibcxx_want_string_resize_and_overwrite) */ #undef __glibcxx_want_string_resize_and_overwrite -// from version.def line 1610 +// from version.def line 1618 #if !defined(__cpp_lib_fstream_native_handle) # if (__cplusplus > 202302L) && _GLIBCXX_HOSTED # define __glibcxx_fstream_native_handle 202306L @@ -1977,7 +1988,7 @@ #endif /* !defined(__cpp_lib_fstream_native_handle) && defined(__glibcxx_want_fstream_native_handle) */ #undef __glibcxx_want_fstream_native_handle -// from version.def line 1619 +// from version.def line 1627 #if !defined(__cpp_lib_ratio) # if (__cplusplus > 202302L) # define __glibcxx_ratio 202306L @@ -1988,7 +1999,7 @@ #endif /* !defined(__cpp_lib_ratio) && defined(__glibcxx_want_ratio) */ #undef __glibcxx_want_ratio -// from version.def line 1627 +// from version.def line 1635 #if !defined(__cpp_lib_to_string) # if (__cplusplus > 202302L) && _GLIBCXX_HOSTED && (__glibcxx_to_chars) # define __glibcxx_to_string 202306L diff --git a/libstdc++-v3/include/std/memory b/libstdc++-v3/include/std/memory index ac83761a26ce..a526173b8cc1 100644 --- a/libstdc++-v3/include/std/memory +++ b/libstdc++-v3/include/std/memory @@ -91,6 +91,10 @@ # include #endif +#if __cplusplus > 202002L +# include +#endif + #define __glibcxx_want_allocator_traits_is_always_equal #define __glibcxx_want_assume_aligned #define __glibcxx_want_atomic_shared_ptr @@ -99,6 +103,7 @@ #define __glibcxx_want_constexpr_memory #define __glibcxx_want_enable_shared_from_this #define __glibcxx_want_make_unique +#define __glibcxx_want_out_ptr #define __glibcxx_want_parallel_algorithm #define __glibcxx_want_ranges #define __glibcxx_want_raw_memory_algorithms diff --git a/libstdc++-v3/testsuite/20_util/smartptr.adapt/inout_ptr/1.cc b/libstdc++-v3/testsuite/20_util/smartptr.adapt/inout_ptr/1.cc new file mode 100644 index 000000000000..c42e5e13b75f --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/smartptr.adapt/inout_ptr/1.cc @@ -0,0 +1,47 @@ +// { dg-do run { target c++23 } } + +#include +#include + +// C++23 [inout.ptr.t] Class template inout_ptr_t + +struct star_fish* star_fish_alloc(); +int star_fish_populate(struct star_fish** ps, const char* description); + +struct star_fish_deleter { + void operator() (struct star_fish* c) const noexcept; +}; + +using star_fish_ptr = std::unique_ptr; + +// Example 1 from [inout.ptr.t] +int main(int, char**) +{ + star_fish_ptr peach(star_fish_alloc()); + // ... + // used, need to re-make + int err = star_fish_populate(std::inout_ptr(peach), "caring clown-fish liker"); + return 0; +} + +#include + +star_fish* star_fish_alloc() +{ + static std::uintptr_t counter = 1; + return reinterpret_cast(counter++); +} + +void star_fish_deleter::operator()(star_fish* c) const noexcept +{ + static std::uintptr_t counter = 1; + VERIFY(reinterpret_cast(c) == counter++); +} + +int star_fish_populate(star_fish** ps, const char*) +{ + VERIFY(ps); + star_fish_deleter()(*ps); + *ps = star_fish_alloc(); + return 0; +} diff --git a/libstdc++-v3/testsuite/20_util/smartptr.adapt/inout_ptr/2.cc b/libstdc++-v3/testsuite/20_util/smartptr.adapt/inout_ptr/2.cc new file mode 100644 index 000000000000..ca6076209c2f --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/smartptr.adapt/inout_ptr/2.cc @@ -0,0 +1,102 @@ +// { dg-do run { target c++23 } } + +#include +#include + +// C++23 [inout.ptr.t] Class template inout_ptr_t + +int counter = 0; + +void +test_unique_ptr() +{ + int* ip = new int(1); + std::unique_ptr up(ip); + { + auto iop = std::inout_ptr(up); + int** ipp = iop; + VERIFY( *ipp == ip ); + delete *ipp; + *ipp = new int(2); + } + VERIFY( *up == 2 ); + + ip = up.get(); + { + std::default_delete d; + auto iop = std::inout_ptr(up, d); + int** ipp = iop; + VERIFY( *ipp == ip ); + delete *ipp; + *ipp = new int(3); + } + VERIFY( *up == 3 ); + + struct D + { + explicit D(int id) : id(id) { } + void operator()(long* p) const { ++counter; delete p; } + int id; + }; + counter = 0; + std::unique_ptr upd(new long(3), D(11)); + { + auto iop = std::inout_ptr(upd); + VERIFY( counter == 0 ); + long** lpp = iop; + VERIFY( **lpp == 3 ); + delete *lpp; + *lpp = new long(4); + } + VERIFY( *upd == 4 ); + VERIFY( upd.get_deleter().id == 11 ); + VERIFY( counter == 0 ); + + { + D d(22); + auto iop = std::inout_ptr(upd, d); + VERIFY( counter == 0 ); + long** lpp = iop; + VERIFY( **lpp == 4 ); + delete *lpp; + *lpp = nullptr; + } + VERIFY( upd == nullptr ); + VERIFY( upd.get_deleter().id == 11 ); // Deleter not replaced if p is null. + VERIFY( counter == 0 ); + + upd.reset(new long(5)); + { + D d(33); + auto iop = std::inout_ptr(upd, d); + VERIFY( counter == 0 ); + long** lpp = iop; + VERIFY( **lpp == 5 ); + delete *lpp; + *lpp = new long(6); + } + VERIFY( *upd == 6 ); + VERIFY( upd.get_deleter().id == 33 ); + VERIFY( counter == 0 ); + + struct Base { }; + struct Derived : Base + { + Derived(int id) : id(id) { } + int id; + }; + std::unique_ptr upbd(new Derived(1)); + { + auto iop = std::inout_ptr(upbd); + Base** bpp = iop; + VERIFY( static_cast(*bpp)->id == 1 ); + delete (Derived*)*bpp; + *bpp = new Derived(2); + } + VERIFY( upbd->id == 2 ); +} + +int main() +{ + test_unique_ptr(); +} diff --git a/libstdc++-v3/testsuite/20_util/smartptr.adapt/inout_ptr/shared_ptr_neg.cc b/libstdc++-v3/testsuite/20_util/smartptr.adapt/inout_ptr/shared_ptr_neg.cc new file mode 100644 index 000000000000..b4ecf936105c --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/smartptr.adapt/inout_ptr/shared_ptr_neg.cc @@ -0,0 +1,11 @@ +// { dg-do compile { target c++23 } } + +#include + +std::shared_ptr sp; +auto iop = std::inout_ptr(sp); // { dg-error "here" } +std::shared_ptr sp2; +std::default_delete d; +auto iop2 = std::inout_ptr(sp2, d); // { dg-error "here" } + +// { dg-error "can not be used" "" { target *-*-* } 0 } diff --git a/libstdc++-v3/testsuite/20_util/smartptr.adapt/inout_ptr/void_ptr.cc b/libstdc++-v3/testsuite/20_util/smartptr.adapt/inout_ptr/void_ptr.cc new file mode 100644 index 000000000000..4fce3df6b306 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/smartptr.adapt/inout_ptr/void_ptr.cc @@ -0,0 +1,35 @@ +// { dg-do compile { target c++23 } } + +#include +#include + +std::unique_ptr intptr; + +void +val_inout(void** p) +{ + // The smart pointer should have been released by the inout_ptr_t constructor + VERIFY( intptr == nullptr ); + // The initial value of the pointer should be non-null. + VERIFY( *(int*)*p == 5678 ); + // Although the implementation is allowed to access the unique_ptr's + // pointer directly, it can't do that here because the unique_ptr stores + // an int* and we are reading from and writing to a void*. + VERIFY( intptr.get() != *p ); + + // Return a heap-allocated int in *p. + *p = (void*) new int(999); +} + +void +test_inout_ptr_void() +{ + intptr.reset(new int(5678)); + val_inout(std::inout_ptr(intptr)); + VERIFY( *intptr == 999 ); +} + +int main() +{ + test_inout_ptr_void(); +} diff --git a/libstdc++-v3/testsuite/20_util/smartptr.adapt/out_ptr/1.cc b/libstdc++-v3/testsuite/20_util/smartptr.adapt/out_ptr/1.cc new file mode 100644 index 000000000000..ed542a04fc99 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/smartptr.adapt/out_ptr/1.cc @@ -0,0 +1,116 @@ +// { dg-do run { target c++23 } } +// { dg-require-fileio "" } +// { dg-additional-files "thirty_years_among_the_dead_preproc.txt" } + +#include +#include +#include + +// C++23 [out.ptr.t] Class template out_ptr_t + +int fopen_s(std::FILE** f, const char* name, const char* mode); + +struct fclose_deleter { + void operator()(std::FILE* f) const noexcept { + std::fclose(f); + } +}; + +// Example 1 from [out.ptr.t] +void +test_example_1() +{ + constexpr const char* file_name = "thirty_years_among_the_dead_preproc.txt"; + std::unique_ptr file_ptr; + int err = fopen_s(std::out_ptr(file_ptr), file_name, "r+b"); + if (err != 0) + VERIFY(false); + // *file_ptr is valid + VERIFY(file_ptr != nullptr); +} + +// Same again without explicit template argument list. +void +test_example_1_2() +{ + constexpr const char* file_name = "thirty_years_among_the_dead_preproc.txt"; + std::unique_ptr file_ptr; + int err = fopen_s(std::out_ptr(file_ptr), file_name, "r+b"); + if (err != 0) + VERIFY(false); + // *file_ptr is valid + VERIFY(file_ptr != nullptr); +} + +// And again with a deleter argument. +void +test_example_1_3() +{ + constexpr const char* file_name = "thirty_years_among_the_dead_preproc.txt"; + std::unique_ptr file_ptr; + int err = fopen_s(std::out_ptr(file_ptr, fclose_deleter()), file_name, "r+b"); + if (err != 0) + VERIFY(false); + // *file_ptr is valid + VERIFY(file_ptr != nullptr); +} + +// Same again using std::shared_ptr +void +test_example_1_sp() +{ + constexpr const char* file_name = "thirty_years_among_the_dead_preproc.txt"; + std::shared_ptr file_ptr; + int err = fopen_s(std::out_ptr(file_ptr, fclose_deleter()), + file_name, "r+b"); + if (err != 0) + VERIFY(false); + // *file_ptr is valid + VERIFY(file_ptr != nullptr); +} + +// And again without explicit template argument list. +void +test_example_1_sp_2() +{ + constexpr const char* file_name = "thirty_years_among_the_dead_preproc.txt"; + std::shared_ptr file_ptr; + int err = fopen_s(std::out_ptr(file_ptr, fclose_deleter()), file_name, "r+b"); + if (err != 0) + VERIFY(false); + // *file_ptr is valid + VERIFY(file_ptr != nullptr); +} + +// And again using a raw pointer. +void +test_example_1_raw() +{ + constexpr const char* file_name = "thirty_years_among_the_dead_preproc.txt"; + std::FILE* file_ptr; + int err = fopen_s(std::out_ptr(file_ptr), file_name, "r+b"); + if (err != 0) + VERIFY(false); + // *file_ptr is valid + VERIFY(file_ptr != nullptr); + std::fclose(file_ptr); +} + +int main() +{ + test_example_1(); + test_example_1_2(); + test_example_1_3(); + test_example_1_sp(); + test_example_1_sp_2(); + test_example_1_raw(); +} + +#include + +int fopen_s(std::FILE** f, const char* name, const char* mode) +{ + if ((*f = std::fopen(name, mode))) + return 0; + return errno; +} diff --git a/libstdc++-v3/testsuite/20_util/smartptr.adapt/out_ptr/2.cc b/libstdc++-v3/testsuite/20_util/smartptr.adapt/out_ptr/2.cc new file mode 100644 index 000000000000..77f952238ebd --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/smartptr.adapt/out_ptr/2.cc @@ -0,0 +1,273 @@ +// { dg-do compile { target c++23 } } + +#include +#include + +int counter = 0; + +void +test_unique_ptr() +{ + std::unique_ptr up(new int(1)); + { + auto op = std::out_ptr(up); + VERIFY( up == nullptr ); + int** p = op; + VERIFY( *p == nullptr ); + *p = new int(2); + + const auto& cop = op; + VERIFY( static_cast(cop) == static_cast(op) ); + } + VERIFY( *up == 2 ); + + { + std::default_delete d; + auto op = std::out_ptr(up, d); + VERIFY( up == nullptr ); + int** p = op; + VERIFY( *p == nullptr ); + *p = new int(3); + + const auto& cop = op; + VERIFY( static_cast(cop) == static_cast(op) ); + } + VERIFY( *up == 3 ); + + struct D + { + explicit D(int id) : id(id) { } + void operator()(long* p) const { ++counter; delete p; } + int id; + }; + counter = 0; + std::unique_ptr upd(new long(1), D(11)); + { + auto op = std::out_ptr(upd); + VERIFY( counter == 1 ); + VERIFY( upd == nullptr ); + long** p = op; + VERIFY( *p == nullptr ); + *p = new long(4); + + const auto& cop = op; + VERIFY( static_cast(cop) == static_cast(op) ); + } + VERIFY( *upd == 4 ); + VERIFY( upd.get_deleter().id == 11 ); + VERIFY( counter == 1 ); + + { + D d(33); + auto op = std::out_ptr(upd, d); + VERIFY( counter == 2 ); + VERIFY( upd == nullptr ); + long** p = op; + VERIFY( *p == nullptr ); + + const auto& cop = op; + VERIFY( static_cast(cop) == static_cast(op) ); + } + VERIFY( upd == nullptr ); + VERIFY( upd.get_deleter().id == 11 ); // Deleter not replaced if p is null. + VERIFY( counter == 2 ); + + { + D d(33); + auto op = std::out_ptr(upd, d); + VERIFY( counter == 2 ); + VERIFY( upd == nullptr ); + long** p = op; + VERIFY( *p == nullptr ); + *p = new long(5); + } + VERIFY( *upd == 5 ); + VERIFY( upd.get_deleter().id == 33 ); + VERIFY( counter == 2 ); + + struct Base { }; + struct Derived : Base + { + Derived(int id) : id(id) { } + int id; + }; + std::unique_ptr upbd(new Derived(1)); + { + auto op = std::out_ptr(upbd); + Base** bpp = op; + VERIFY( *bpp == nullptr ); + *bpp = new Derived(2); + + const auto& cop = op; + VERIFY( static_cast(cop) == static_cast(op) ); + } + VERIFY( upbd->id == 2 ); +} + +void deleter_function(float* p) { delete p; } + +void +test_shared_ptr() +{ + using DD = std::default_delete; + + std::shared_ptr sp(new int(1)); + { + auto op = std::out_ptr(sp, DD{}); + VERIFY( sp == nullptr ); + int** p = op; + VERIFY( *p == nullptr ); + *p = new int(2); + + const auto& cop = op; + VERIFY( static_cast(cop) == static_cast(op) ); + } + VERIFY( *sp == 2 ); + + { + auto op = std::out_ptr(sp, DD{}); + VERIFY( sp == nullptr ); + int** p = op; + VERIFY( *p == nullptr ); + *p = new int(3); + } + VERIFY( *sp == 3 ); + + struct D + { + explicit D(int id) : id(id) { } + void operator()(long* p) const { ++counter; delete p; } + int id; + }; + counter = 0; + std::shared_ptr spd(new long(1), D(11)); + { + auto op = std::out_ptr(spd, D(22)); + VERIFY( counter == 1 ); + VERIFY( spd == nullptr ); + long** p = op; + VERIFY( *p == nullptr ); + *p = new long(5); + } + VERIFY( counter == 1 ); + VERIFY( *spd == 5 ); + VERIFY( std::get_deleter(spd)->id == 22 ); + + struct Base { }; + struct Derived : Base + { + Derived(int id) : id(id) { } + int id; + }; + std::shared_ptr spbd(new Derived(1)); + { + auto op = std::out_ptr(spbd, std::default_delete()); + Base** bpp = op; + VERIFY( *bpp == nullptr ); + *bpp = new Derived(2); + } + VERIFY( spbd->id == 2 ); + + std::shared_ptr spf; + { + auto op = std::out_ptr(spf, deleter_function); + float** fpp = op; + *fpp = new float(0.5); + } + VERIFY( std::get_deleter(spf) != nullptr ); + VERIFY( *std::get_deleter(spf) == &deleter_function ); + VERIFY( *spf == 0.5 ); +} + +void +test_custom_ptr() +{ + struct UPtr : std::unique_ptr + { + using std::unique_ptr::unique_ptr; + }; + + UPtr up(new int(1)); + { + auto op = std::out_ptr(up); + VERIFY( up == nullptr ); + int** p = op; + VERIFY( *p == nullptr ); + *p = new int(2); + + const auto& cop = op; + VERIFY( static_cast(cop) == static_cast(op) ); + } + VERIFY( *up == 2 ); + + { + auto op = std::out_ptr(up, std::default_delete{}); + VERIFY( up == nullptr ); + int** p = op; + VERIFY( *p == nullptr ); + *p = new int(3); + } + VERIFY( *up == 3 ); + + struct D + { + explicit D(int id) : id(id) { } + void operator()(long* p) const { ++counter; delete p; } + int id; + }; + counter = 0; + struct UDPtr : std::unique_ptr + { + using std::unique_ptr::unique_ptr; + }; + UDPtr upd(new long(1), D(11)); + { + auto op = std::out_ptr(upd); + VERIFY( counter == 1 ); + VERIFY( upd == nullptr ); + long** p = op; + VERIFY( *p == nullptr ); + *p = new long(4); + } + VERIFY( counter == 1 ); + VERIFY( *upd == 4 ); + VERIFY( upd.get_deleter().id == 11 ); + + { + auto op = std::out_ptr(upd, D(22)); + VERIFY( upd == nullptr ); + VERIFY( counter == 2 ); + long** p = op; + VERIFY( *p == nullptr ); + *p = new long(5); + } + VERIFY( counter == 2 ); + VERIFY( *upd == 5 ); + VERIFY( upd.get_deleter().id == 22 ); +} + +void +test_raw_ptr() +{ + long l = 5, l2 = 6; + long* lp = &l; + { + auto op = std::out_ptr(lp); + VERIFY( lp == nullptr ); + long** p = op; + VERIFY( *p == nullptr ); + *p = &l2; + + const auto& cop = op; + VERIFY( static_cast(cop) == static_cast(op) ); + } + VERIFY( *lp == 6 ); +} + +int main() +{ + test_unique_ptr(); + test_shared_ptr(); + test_custom_ptr(); + test_raw_ptr(); +} diff --git a/libstdc++-v3/testsuite/20_util/smartptr.adapt/out_ptr/shared_ptr_neg.cc b/libstdc++-v3/testsuite/20_util/smartptr.adapt/out_ptr/shared_ptr_neg.cc new file mode 100644 index 000000000000..b2532dc7f727 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/smartptr.adapt/out_ptr/shared_ptr_neg.cc @@ -0,0 +1,7 @@ +// { dg-do compile { target c++23 } } + +#include + +std::shared_ptr sp; +auto op = std::out_ptr(sp); // { dg-error "here" } +// { dg-error "deleter must be used" "" { target *-*-* } 0 } diff --git a/libstdc++-v3/testsuite/20_util/smartptr.adapt/out_ptr/void_ptr.cc b/libstdc++-v3/testsuite/20_util/smartptr.adapt/out_ptr/void_ptr.cc new file mode 100644 index 000000000000..3ff84a3aeafa --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/smartptr.adapt/out_ptr/void_ptr.cc @@ -0,0 +1,60 @@ +// { dg-do compile { target c++23 } } + +#include +#include + +std::unique_ptr intptr; + +void +val_out(void** p) +{ + // The smart pointer should be reset by the out_ptr_t constructor. + VERIFY( intptr == nullptr ); + // The initial value of the pointer should be null. + VERIFY( *p == nullptr ); + // Although the implementation is allowed to access the unique_ptr's + // pointer directly, it can't do that here because the unique_ptr stores + // an int* and we are writing to a void*. + VERIFY( intptr.get() != *p ); + + // Return a heap-allocated int in *p. + *p = (void*) new int(1234); +} + +void +test_out_ptr_void() +{ + intptr.reset(new int); + val_out(std::out_ptr(intptr)); + VERIFY( *intptr == 1234 ); +} + +void +val_inout(void** p) +{ + // The smart pointer should have been released by the inout_ptr_t constructor + VERIFY( intptr == nullptr ); + // The initial value of the pointer should be non-null. + VERIFY( *(int*)*p == 5678 ); + // Although the implementation is allowed to access the unique_ptr's + // pointer directly, it can't do that here because the unique_ptr stores + // an int* and we are reading from and writing to a void*. + VERIFY( intptr.get() != *p ); + + // Return a heap-allocated int in *p. + *p = (void*) new int(999); +} + +void +test_inout_ptr_void() +{ + intptr.reset(new int(5678)); + val_inout(std::inout_ptr(intptr)); + VERIFY( *intptr == 999 ); +} + +int main() +{ + test_out_ptr_void(); + test_inout_ptr_void(); +} From e36d5f424a0dcb984620a172c73da989f215dc42 Mon Sep 17 00:00:00 2001 From: liuhongt Date: Wed, 15 Nov 2023 16:50:44 +0800 Subject: [PATCH 101/169] Fix ICE of unrecognizable insn. The new added splitter will generate (insn 58 56 59 2 (set (reg:V4HI 20 xmm0 [129]) (vec_duplicate:V4HI (reg:HI 22 xmm2 [123]))) "testcase.c":16:21 -1 But we only have (define_insn "*vec_dupv4hi" [(set (match_operand:V4HI 0 "register_operand" "=y,Yw") (vec_duplicate:V4HI (truncate:HI (match_operand:SI 1 "register_operand" "0,Yw"))))] The patch add patterns for V4HI and V2HI. gcc/ChangeLog: PR target/112532 * config/i386/mmx.md (*vec_dup): Extend for V4HI and V2HI. gcc/testsuite/ChangeLog: * gcc.target/i386/pr112532.c: New test. --- gcc/config/i386/mmx.md | 8 ++++---- gcc/testsuite/gcc.target/i386/pr112532.c | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr112532.c diff --git a/gcc/config/i386/mmx.md b/gcc/config/i386/mmx.md index 355538749d16..0f16d2ad1097 100644 --- a/gcc/config/i386/mmx.md +++ b/gcc/config/i386/mmx.md @@ -5277,8 +5277,8 @@ (set_attr "mode" "DI,TI")]) (define_insn "*vec_dup" - [(set (match_operand:V4F_64 0 "register_operand" "=Yw") - (vec_duplicate:V4F_64 + [(set (match_operand:V4FI_64 0 "register_operand" "=Yw") + (vec_duplicate:V4FI_64 (match_operand: 1 "register_operand" "Yw")))] "TARGET_MMX_WITH_SSE" "%vpshuflw\t{$0, %1, %0|%0, %1, 0}" @@ -5869,8 +5869,8 @@ (set_attr "mode" "TI")]) (define_insn "*vec_dup" - [(set (match_operand:V2F_32 0 "register_operand" "=Yw") - (vec_duplicate:V2F_32 + [(set (match_operand:V2FI_32 0 "register_operand" "=Yw") + (vec_duplicate:V2FI_32 (match_operand: 1 "register_operand" "Yw")))] "TARGET_SSE2" "%vpshuflw\t{$0, %1, %0|%0, %1, 0}" diff --git a/gcc/testsuite/gcc.target/i386/pr112532.c b/gcc/testsuite/gcc.target/i386/pr112532.c new file mode 100644 index 000000000000..690f1d9670dd --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr112532.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-msse4 -O2" } */ + +typedef char __attribute__((__vector_size__(2))) v16u8; +typedef int __attribute__((__vector_size__(8))) v64u8; +typedef unsigned short __attribute__((__vector_size__(2))) v16u16; +typedef unsigned short __attribute__((__vector_size__(8))) v64u16; +v64u16 foo0_v64u16_0; +int __attribute__((__vector_size__(4 * sizeof(int)))) foo0_v128u32_0; +__attribute__((__vector_size__(8 * sizeof(short)))) unsigned short foo0_v128u16_0; +v16u16 foo0_v16u16_0; +v16u8 foo0() { + v16u16 v16u16_1 = __builtin_shufflevector(__builtin_shufflevector(__builtin_convertvector(foo0_v128u32_0, v64u16),foo0_v16u16_0, 1, 4, 2, 0, 0, 2, 2, 2),foo0_v16u16_0, 7); + foo0_v64u16_0 -= (short)v16u16_1; + v64u16 v64u16_3 = __builtin_shufflevector(v16u16_1, __builtin_shufflevector((v16u16){}, foo0_v128u16_0, 7, 0), 0, 1, 2, 2); + return (union {v16u8 b;}) + {((union { + v64u8 a; + int b; + })(v64u8)v64u16_3).b}.b + (v16u8)v16u16_1; +} From defa8681d951c6d6c43c71e3636ce4db9de04a28 Mon Sep 17 00:00:00 2001 From: Kito Cheng Date: Tue, 14 Nov 2023 11:17:45 +0800 Subject: [PATCH 102/169] RISC-V: Save/restore ra register correctly [PR112478] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We set ra to fixed register now, but we still need to save/restore that at prologue/epilogue if that has used. gcc/ChangeLog: PR target/112478 * config/riscv/riscv.cc (riscv_save_return_addr_reg_p): Check ra is ever lived. gcc/testsuite/ChangeLog: PR target/112478 * gcc.target/riscv/pr112478.c: New. Reviewed-by: Christoph Müllner Tested-by: Christoph Müllner --- gcc/config/riscv/riscv.cc | 4 ++++ gcc/testsuite/gcc.target/riscv/pr112478.c | 8 ++++++++ 2 files changed, 12 insertions(+) create mode 100644 gcc/testsuite/gcc.target/riscv/pr112478.c diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index e466d4f168af..aada6ac76c8b 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -5825,6 +5825,10 @@ riscv_save_return_addr_reg_p (void) if (riscv_far_jump_used_p ()) return true; + /* We need to save it if anyone has used that. */ + if (df_regs_ever_live_p (RETURN_ADDR_REGNUM)) + return true; + /* Need not to use ra for leaf when frame pointer is turned off by option whatever the omit-leaf-frame's value. */ if (frame_pointer_needed && crtl->is_leaf diff --git a/gcc/testsuite/gcc.target/riscv/pr112478.c b/gcc/testsuite/gcc.target/riscv/pr112478.c new file mode 100644 index 000000000000..0bbde20b71bc --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr112478.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-ffat-lto-objects" } */ + +void foo() { + asm volatile("# " : ::"ra"); +} + +/* { dg-final { scan-assembler "s(w|d)\[ \t\]*ra" } } */ From 5f1105612b592650566a54846dd5f9ccdfed01a9 Mon Sep 17 00:00:00 2001 From: Kito Cheng Date: Mon, 9 Oct 2023 21:13:05 -0700 Subject: [PATCH 103/169] RISC-V: Implement target attribute MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The target attribute which proposed in [1], target attribute allow user to specify a local setting per-function basis. The syntax of target attribute is `__attribute__((target("")))`. and the syntax of `` describes below: ``` ATTR-STRING := ATTR-STRING ';' ATTR | ATTR ATTR := ARCH-ATTR | CPU-ATTR | TUNE-ATTR ARCH-ATTR := 'arch=' EXTENSIONS-OR-FULLARCH EXTENSIONS-OR-FULLARCH := | EXTENSIONS := ',' | FULLARCHSTR := EXTENSION := OP := '+' VERSION := [0-9]+ 'p' [0-9]+ | [1-9][0-9]* | EXTENSION-NAME := Naming rule is defined in RISC-V ISA manual CPU-ATTR := 'cpu=' TUNE-ATTR := 'tune=' ``` Changes since v1: - Use std::unique_ptr rather than alloca to prevent memory issue. - Error rather than warning when attribute duplicated. [1] https://github.com/riscv-non-isa/riscv-c-api-doc/pull/35 gcc/ChangeLog: * config.gcc (riscv): Add riscv-target-attr.o. * config/riscv/riscv-protos.h (riscv_declare_function_size) New. (riscv_option_valid_attribute_p): New. (riscv_override_options_internal): New. (struct riscv_tune_info): New. (riscv_parse_tune): New. * config/riscv/riscv-target-attr.cc (class riscv_target_attr_parser): New. (struct riscv_attribute_info): New. (riscv_attributes): New. (riscv_target_attr_parser::parse_arch): New. (riscv_target_attr_parser::handle_arch): New. (riscv_target_attr_parser::handle_cpu): New. (riscv_target_attr_parser::handle_tune): New. (riscv_target_attr_parser::update_settings): New. (riscv_process_one_target_attr): New. (num_occurences_in_str): New. (riscv_process_target_attr): New. (riscv_option_valid_attribute_p): New. * config/riscv/riscv.cc: Include target-globals.h and riscv-subset.h. (struct riscv_tune_info): Move to riscv-protos.h. (get_tune_str): New. (riscv_parse_tune): New parameter null_p. (riscv_declare_function_size): New. (riscv_option_override): Build target_option_default_node and target_option_current_node. (riscv_save_restore_target_globals): New. (riscv_option_restore): New. (riscv_previous_fndecl): New. (riscv_set_current_function): Apply the target attribute. (TARGET_OPTION_RESTORE): Define. (TARGET_OPTION_VALID_ATTRIBUTE_P): Ditto. * config/riscv/riscv.h (SWITCHABLE_TARGET): Define to 1. (ASM_DECLARE_FUNCTION_SIZE) Define. * config/riscv/riscv.opt (mtune=): Add Save attribute. (mcpu=): Ditto. (mcmodel=): Ditto. * config/riscv/t-riscv: Add build rule for riscv-target-attr.o * doc/extend.texi: Add doc for target attribute. gcc/testsuite/ChangeLog: * gcc.target/riscv/target-attr-01.c: New. * gcc.target/riscv/target-attr-02.c: Ditto. * gcc.target/riscv/target-attr-03.c: Ditto. * gcc.target/riscv/target-attr-04.c: Ditto. * gcc.target/riscv/target-attr-05.c: Ditto. * gcc.target/riscv/target-attr-06.c: Ditto. * gcc.target/riscv/target-attr-07.c: Ditto. * gcc.target/riscv/target-attr-bad-01.c: Ditto. * gcc.target/riscv/target-attr-bad-02.c: Ditto. * gcc.target/riscv/target-attr-bad-03.c: Ditto. * gcc.target/riscv/target-attr-bad-04.c: Ditto. * gcc.target/riscv/target-attr-bad-05.c: Ditto. * gcc.target/riscv/target-attr-bad-06.c: Ditto. * gcc.target/riscv/target-attr-bad-07.c: Ditto. * gcc.target/riscv/target-attr-bad-08.c: Ditto. * gcc.target/riscv/target-attr-bad-09.c: Ditto. * gcc.target/riscv/target-attr-bad-10.c: Ditto. Reviewed-by: Christoph Müllner --- gcc/config.gcc | 2 +- gcc/config/riscv/riscv-protos.h | 21 + gcc/config/riscv/riscv-target-attr.cc | 395 ++++++++++++++++++ gcc/config/riscv/riscv.cc | 194 +++++++-- gcc/config/riscv/riscv.h | 6 + gcc/config/riscv/riscv.opt | 6 +- gcc/config/riscv/t-riscv | 5 + gcc/doc/extend.texi | 58 +++ .../gcc.target/riscv/target-attr-01.c | 31 ++ .../gcc.target/riscv/target-attr-02.c | 31 ++ .../gcc.target/riscv/target-attr-03.c | 26 ++ .../gcc.target/riscv/target-attr-04.c | 28 ++ .../gcc.target/riscv/target-attr-05.c | 27 ++ .../gcc.target/riscv/target-attr-06.c | 27 ++ .../gcc.target/riscv/target-attr-07.c | 25 ++ .../gcc.target/riscv/target-attr-bad-01.c | 13 + .../gcc.target/riscv/target-attr-bad-02.c | 13 + .../gcc.target/riscv/target-attr-bad-03.c | 13 + .../gcc.target/riscv/target-attr-bad-04.c | 13 + .../gcc.target/riscv/target-attr-bad-05.c | 13 + .../gcc.target/riscv/target-attr-bad-06.c | 13 + .../gcc.target/riscv/target-attr-bad-07.c | 13 + .../gcc.target/riscv/target-attr-bad-08.c | 8 + .../gcc.target/riscv/target-attr-bad-09.c | 8 + .../gcc.target/riscv/target-attr-bad-10.c | 8 + 25 files changed, 951 insertions(+), 46 deletions(-) create mode 100644 gcc/config/riscv/riscv-target-attr.cc create mode 100644 gcc/testsuite/gcc.target/riscv/target-attr-01.c create mode 100644 gcc/testsuite/gcc.target/riscv/target-attr-02.c create mode 100644 gcc/testsuite/gcc.target/riscv/target-attr-03.c create mode 100644 gcc/testsuite/gcc.target/riscv/target-attr-04.c create mode 100644 gcc/testsuite/gcc.target/riscv/target-attr-05.c create mode 100644 gcc/testsuite/gcc.target/riscv/target-attr-06.c create mode 100644 gcc/testsuite/gcc.target/riscv/target-attr-07.c create mode 100644 gcc/testsuite/gcc.target/riscv/target-attr-bad-01.c create mode 100644 gcc/testsuite/gcc.target/riscv/target-attr-bad-02.c create mode 100644 gcc/testsuite/gcc.target/riscv/target-attr-bad-03.c create mode 100644 gcc/testsuite/gcc.target/riscv/target-attr-bad-04.c create mode 100644 gcc/testsuite/gcc.target/riscv/target-attr-bad-05.c create mode 100644 gcc/testsuite/gcc.target/riscv/target-attr-bad-06.c create mode 100644 gcc/testsuite/gcc.target/riscv/target-attr-bad-07.c create mode 100644 gcc/testsuite/gcc.target/riscv/target-attr-bad-08.c create mode 100644 gcc/testsuite/gcc.target/riscv/target-attr-bad-09.c create mode 100644 gcc/testsuite/gcc.target/riscv/target-attr-bad-10.c diff --git a/gcc/config.gcc b/gcc/config.gcc index c1460ca354e8..6d51bd93f3ff 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -546,7 +546,7 @@ riscv*) extra_objs="riscv-builtins.o riscv-c.o riscv-sr.o riscv-shorten-memrefs.o riscv-selftests.o riscv-string.o" extra_objs="${extra_objs} riscv-v.o riscv-vsetvl.o riscv-vector-costs.o riscv-avlprop.o" extra_objs="${extra_objs} riscv-vector-builtins.o riscv-vector-builtins-shapes.o riscv-vector-builtins-bases.o" - extra_objs="${extra_objs} thead.o" + extra_objs="${extra_objs} thead.o riscv-target-attr.o" d_target_objs="riscv-d.o" extra_headers="riscv_vector.h" target_gtfiles="$target_gtfiles \$(srcdir)/config/riscv/riscv-vector-builtins.cc" diff --git a/gcc/config/riscv/riscv-protos.h b/gcc/config/riscv/riscv-protos.h index 8cdfadbcf10a..196b53f10f3d 100644 --- a/gcc/config/riscv/riscv-protos.h +++ b/gcc/config/riscv/riscv-protos.h @@ -124,6 +124,7 @@ extern void riscv_split_doubleword_move (rtx, rtx); extern const char *riscv_output_move (rtx, rtx); extern const char *riscv_output_return (); extern void riscv_declare_function_name (FILE *, const char *, tree); +extern void riscv_declare_function_size (FILE *, const char *, tree); extern void riscv_asm_output_alias (FILE *, const tree, const tree); extern void riscv_asm_output_external (FILE *, const tree, const char *); extern bool @@ -647,5 +648,25 @@ extern bool th_print_operand_address (FILE *, machine_mode, rtx); extern bool riscv_use_divmod_expander (void); void riscv_init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree, int); +extern bool +riscv_option_valid_attribute_p (tree, tree, tree, int); +extern void +riscv_override_options_internal (struct gcc_options *); + +struct riscv_tune_param; +/* Information about one micro-arch we know about. */ +struct riscv_tune_info { + /* This micro-arch canonical name. */ + const char *name; + + /* Which automaton to use for tuning. */ + enum riscv_microarchitecture_type microarchitecture; + + /* Tuning parameters for this micro-arch. */ + const struct riscv_tune_param *tune_param; +}; + +const struct riscv_tune_info * +riscv_parse_tune (const char *, bool); #endif /* ! GCC_RISCV_PROTOS_H */ diff --git a/gcc/config/riscv/riscv-target-attr.cc b/gcc/config/riscv/riscv-target-attr.cc new file mode 100644 index 000000000000..78f259d0c96e --- /dev/null +++ b/gcc/config/riscv/riscv-target-attr.cc @@ -0,0 +1,395 @@ +/* Subroutines used for parsing target attribute for RISC-V. + Copyright (C) 2023 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#define IN_TARGET_CODE 1 + +#define INCLUDE_MEMORY +#define INCLUDE_STRING +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "target.h" +#include "tree.h" +#include "tm_p.h" +#include "diagnostic.h" +#include "opts.h" +#include "riscv-subset.h" + +namespace { +class riscv_target_attr_parser +{ +public: + riscv_target_attr_parser (location_t loc) + : m_found_arch_p (false) + , m_found_tune_p (false) + , m_found_cpu_p (false) + , m_subset_list (nullptr) + , m_loc (loc) + , m_cpu_info (nullptr) + , m_tune (nullptr) + { + } + + bool handle_arch (const char *); + bool handle_cpu (const char *); + bool handle_tune (const char *); + + void set_loc (location_t loc) { + m_loc = loc; + } + + void update_settings (struct gcc_options *opts) const; +private: + const char *m_raw_attr_str; + bool parse_arch (const char *); + + bool m_found_arch_p; + bool m_found_tune_p; + bool m_found_cpu_p; + riscv_subset_list *m_subset_list; + location_t m_loc; + const riscv_cpu_info *m_cpu_info; + const char *m_tune; +}; +} + +/* All the information needed to handle a target attribute. + NAME is the name of the attribute. + HANDLER is the function that takes the attribute string as an argument. */ + +struct riscv_attribute_info +{ + const char *name; + bool (riscv_target_attr_parser::*handler) (const char *); +}; + +/* The target attributes that we support. */ + +static const struct riscv_attribute_info riscv_attributes[] + = {{"arch", &riscv_target_attr_parser::handle_arch}, + {"cpu", &riscv_target_attr_parser::handle_cpu}, + {"tune", &riscv_target_attr_parser::handle_tune}}; + +bool +riscv_target_attr_parser::parse_arch (const char *str) +{ + if (m_subset_list) + delete m_subset_list; + /* Check if it's setting full arch string. */ + if (strncmp ("rv", str, strlen ("rv")) == 0) + { + m_subset_list = riscv_subset_list::parse (str, location_t ()); + + if (m_subset_list == nullptr) + goto fail; + + return true; + } + else + { + /* Parsing the extension list like "+[,+]*". */ + size_t len = strlen (str); + std::unique_ptr buf (new char[len]); + char *str_to_check = buf.get (); + strcpy (str_to_check, str); + const char *token = strtok_r (str_to_check, ",", &str_to_check); + m_subset_list = riscv_current_subset_list ()->clone (); + m_subset_list->set_loc (m_loc); + while (token) + { + if (token[0] != '+') + { + error_at ( + m_loc, + "unexpected arch for % attribute: must start " + "with + or rv"); + goto fail; + } + else + { + const char *result = m_subset_list->parse_single_ext (token + 1); + /* Check parse_single_ext has consume all string. */ + if (*result != '\0') + { + error_at ( + m_loc, + "unexpected arch for % attribute: bad " + "string found %<%s%>", token); + goto fail; + } + } + token = strtok_r (NULL, ",", &str_to_check); + } + return true; + } +fail: + if (m_subset_list != nullptr) + { + delete m_subset_list; + m_subset_list = nullptr; + } + return false; +} + +/* Handle the ARCH_STR argument to the arch= target attribute. */ + +bool +riscv_target_attr_parser::handle_arch (const char *str) +{ + if (m_found_arch_p) + error_at (m_loc, "% attribute: arch appears more than once"); + m_found_arch_p = true; + return parse_arch (str); +} + +/* Handle the CPU_STR argument to the cpu= target attribute. */ + +bool +riscv_target_attr_parser::handle_cpu (const char *str) +{ + if (m_found_cpu_p) + error_at (m_loc, "% attribute: cpu appears more than once"); + + m_found_cpu_p = true; + const riscv_cpu_info *cpu_info = riscv_find_cpu (str); + + if (!cpu_info) + { + error_at (m_loc, "% attribute: unknown CPU %qs", str); + return false; + } + + if (m_subset_list == nullptr) + { + const char *arch_str = cpu_info->arch; + m_subset_list = riscv_subset_list::parse (arch_str, m_loc); + gcc_assert (m_subset_list); + } + + m_cpu_info = cpu_info; + return true; +} + +/* Handle the TUNE_STR argument to the tune= target attribute. */ + +bool +riscv_target_attr_parser::handle_tune (const char *str) +{ + if (m_found_tune_p) + error_at (m_loc, "% attribute: tune appears more than once"); + m_found_tune_p = true; + const struct riscv_tune_info *tune = riscv_parse_tune (str, true); + + if (tune == nullptr) + { + error_at (m_loc, "% attribute: unknown TUNE %qs", str); + return false; + } + + m_tune = tune->name; + + return true; +} + +void +riscv_target_attr_parser::update_settings (struct gcc_options *opts) const +{ + if (m_subset_list) + riscv_set_arch_by_subset_list (m_subset_list, opts); + + if (m_cpu_info) + opts->x_riscv_cpu_string = m_cpu_info->name; + + if (m_tune) + opts->x_riscv_tune_string = m_tune; + else + { + if (m_cpu_info) + opts->x_riscv_tune_string = m_cpu_info->tune; + } +} + +/* Parse ARG_STR which contains the definition of one target attribute. + Show appropriate errors if any or return true if the attribute is valid. */ + +static bool +riscv_process_one_target_attr (char *arg_str, + location_t loc, + riscv_target_attr_parser &attr_parser) +{ + size_t len = strlen (arg_str); + + if (len == 0) + { + error_at (loc, "malformed % attribute"); + return false; + } + + std::unique_ptr buf (new char[len]); + char *str_to_check = buf.get(); + strcpy (str_to_check, arg_str); + + char *arg = strchr (str_to_check, '='); + + if (!arg) + { + error_at ( + loc, + "attribute % does not accept an argument", + str_to_check); + return false; + } + + arg[0] = '\0'; + ++arg; + for (const auto &attr : riscv_attributes) + { + /* If the names don't match up, or the user has given an argument + to an attribute that doesn't accept one, or didn't give an argument + to an attribute that expects one, fail to match. */ + if (strncmp (str_to_check, attr.name, strlen (attr.name)) != 0) + continue; + + return (&attr_parser->*attr.handler) (arg); + } + error_at (loc, "Got unknown attribute %", str_to_check); + + return false; +} + +/* Count how many times the character C appears in + NULL-terminated string STR. */ + +static unsigned int +num_occurences_in_str (char c, char *str) +{ + unsigned int res = 0; + while (*str != '\0') + { + if (*str == c) + res++; + + str++; + } + + return res; +} + +/* Parse the tree in ARGS that contains the target attribute information + and update the global target options space. */ + +static bool +riscv_process_target_attr (tree args, location_t loc, struct gcc_options *opts) +{ + if (TREE_CODE (args) == TREE_LIST) + { + do + { + tree head = TREE_VALUE (args); + if (head) + { + if (!riscv_process_target_attr (head, loc, opts)) + return false; + } + args = TREE_CHAIN (args); + } while (args); + + return true; + } + + if (TREE_CODE (args) != STRING_CST) + { + error_at (loc, "attribute % argument not a string"); + return false; + } + size_t len = strlen (TREE_STRING_POINTER (args)); + + /* No need to emit warning or error on empty string here, generic code already + handle this case. */ + if (len == 0) + { + return false; + } + + std::unique_ptr buf (new char[len]); + char *str_to_check = buf.get (); + strcpy (str_to_check, TREE_STRING_POINTER (args)); + + /* Used to catch empty spaces between commas i.e. + attribute ((target ("attr1;;attr2"))). */ + unsigned int num_commas = num_occurences_in_str (';', str_to_check); + + /* Handle multiple target attributes separated by ','. */ + char *token = strtok_r (str_to_check, ";", &str_to_check); + + riscv_target_attr_parser attr_parser (loc); + unsigned int num_attrs = 0; + while (token) + { + num_attrs++; + riscv_process_one_target_attr (token, loc, attr_parser); + token = strtok_r (NULL, ";", &str_to_check); + } + + if (num_attrs != num_commas + 1) + { + error_at (loc, "malformed % attribute", + TREE_STRING_POINTER (args)); + return false; + } + + /* Apply settings from target attribute. */ + attr_parser.update_settings (opts); + + return true; +} + +/* Implement TARGET_OPTION_VALID_ATTRIBUTE_P. This is used to + process attribute ((target ("..."))). */ + +bool +riscv_option_valid_attribute_p (tree fndecl, tree, tree args, int) +{ + struct cl_target_option cur_target; + bool ret; + tree new_target; + location_t loc = DECL_SOURCE_LOCATION (fndecl); + + /* Save the current target options to restore at the end. */ + cl_target_option_save (&cur_target, &global_options, &global_options_set); + + ret = riscv_process_target_attr (args, loc, &global_options); + + if (ret) + { + riscv_override_options_internal (&global_options); + new_target + = build_target_option_node (&global_options, &global_options_set); + } + else + new_target = NULL; + + if (fndecl && ret) + { + DECL_FUNCTION_SPECIFIC_TARGET (fndecl) = new_target; + } + + cl_target_option_restore (&global_options, &global_options_set, &cur_target); + return ret; +} diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index aada6ac76c8b..c2bd1c2ed297 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -73,10 +73,12 @@ along with GCC; see the file COPYING3. If not see #include "tree-vectorizer.h" #include "gcse.h" #include "tree-dfa.h" +#include "target-globals.h" /* This file should be included last. */ #include "target-def.h" #include "riscv-vector-costs.h" +#include "riscv-subset.h" /* True if X is an UNSPEC wrapper around a SYMBOL_REF or LABEL_REF. */ #define UNSPEC_ADDRESS_P(X) \ @@ -264,17 +266,6 @@ struct riscv_tune_param bool use_divmod_expansion; }; -/* Information about one micro-arch we know about. */ -struct riscv_tune_info { - /* This micro-arch canonical name. */ - const char *name; - - /* Which automaton to use for tuning. */ - enum riscv_microarchitecture_type microarchitecture; - - /* Tuning parameters for this micro-arch. */ - const struct riscv_tune_param *tune_param; -}; /* Global variables for machine-dependent things. */ @@ -501,10 +492,23 @@ riscv_min_arithmetic_precision (void) return 32; } -/* Return the riscv_tune_info entry for the given name string. */ +template +static const char * +get_tune_str (const T *opts) +{ + const char *tune_string = RISCV_TUNE_STRING_DEFAULT; + if (opts->x_riscv_tune_string) + tune_string = opts->x_riscv_tune_string; + else if (opts->x_riscv_cpu_string) + tune_string = opts->x_riscv_cpu_string; + return tune_string; +} -static const struct riscv_tune_info * -riscv_parse_tune (const char *tune_string) +/* Return the riscv_tune_info entry for the given name string, return nullptr + if NULL_P is true, otherwise return an placeholder and report error. */ + +const struct riscv_tune_info * +riscv_parse_tune (const char *tune_string, bool null_p) { const riscv_cpu_info *cpu = riscv_find_cpu (tune_string); @@ -515,6 +519,9 @@ riscv_parse_tune (const char *tune_string) if (strcmp (riscv_tune_info_table[i].name, tune_string) == 0) return riscv_tune_info_table + i; + if (null_p) + return nullptr; + error ("unknown cpu %qs for %<-mtune%>", tune_string); return riscv_tune_info_table; } @@ -7896,6 +7903,33 @@ riscv_declare_function_name (FILE *stream, const char *name, tree fndecl) riscv_asm_output_variant_cc (stream, fndecl, name); ASM_OUTPUT_TYPE_DIRECTIVE (stream, name, "function"); ASM_OUTPUT_LABEL (stream, name); + if (DECL_FUNCTION_SPECIFIC_TARGET (fndecl)) + { + fprintf (stream, "\t.option push\n"); + std::string isa = riscv_current_subset_list ()->to_string (true); + fprintf (stream, "\t.option arch, %s\n", isa.c_str ()); + + struct cl_target_option *local_cl_target = + TREE_TARGET_OPTION (DECL_FUNCTION_SPECIFIC_TARGET (fndecl)); + struct cl_target_option *global_cl_target = + TREE_TARGET_OPTION (target_option_default_node); + const char *local_tune_str = get_tune_str (local_cl_target); + const char *global_tune_str = get_tune_str (global_cl_target); + if (strcmp (local_tune_str, global_tune_str) != 0) + fprintf (stream, "\t# tune = %s\n", local_tune_str); + } +} + +void +riscv_declare_function_size (FILE *stream, const char *name, tree fndecl) +{ + if (!flag_inhibit_size_directive) + ASM_OUTPUT_MEASURED_SIZE (stream, name); + + if (DECL_FUNCTION_SPECIFIC_TARGET (fndecl)) + { + fprintf (stream, "\t.option pop\n"); + } } /* Implement ASM_OUTPUT_DEF_FROM_DECLS. */ @@ -8102,16 +8136,18 @@ riscv_override_options_internal (struct gcc_options *opts) error ("%<-mdiv%> requires %<-march%> to subsume the % extension"); /* Likewise floating-point division and square root. */ - if ((TARGET_HARD_FLOAT || TARGET_ZFINX) && (target_flags_explicit & MASK_FDIV) == 0) + if ((TARGET_HARD_FLOAT_OPTS_P (opts) || TARGET_ZFINX_OPTS_P (opts)) + && ((target_flags_explicit & MASK_FDIV) == 0)) opts->x_target_flags |= MASK_FDIV; /* Handle -mtune, use -mcpu if -mtune is not given, and use default -mtune if both -mtune and -mcpu are not given. */ - cpu = riscv_parse_tune (opts->x_riscv_tune_string ? opts->x_riscv_tune_string : - (opts->x_riscv_cpu_string ? opts->x_riscv_cpu_string : - RISCV_TUNE_STRING_DEFAULT)); + const char *tune_string = get_tune_str (opts); + cpu = riscv_parse_tune (tune_string, false); riscv_microarchitecture = cpu->microarchitecture; - tune_param = opts->x_optimize_size ? &optimize_size_tune_info : cpu->tune_param; + tune_param = opts->x_optimize_size + ? &optimize_size_tune_info + : cpu->tune_param; /* Use -mtune's setting for slow_unaligned_access, even when optimizing for size. For architectures that trap and emulate unaligned accesses, @@ -8123,7 +8159,7 @@ riscv_override_options_internal (struct gcc_options *opts) /* Make a note if user explicity passed -mstrict-align for later builtin macro generation. Can't use target_flags_explicitly since it is set even for -mno-strict-align. */ - riscv_user_wants_strict_align = TARGET_STRICT_ALIGN; + riscv_user_wants_strict_align = TARGET_STRICT_ALIGN_OPTS_P (opts); if ((target_flags_explicit & MASK_STRICT_ALIGN) == 0 && cpu->tune_param->slow_unaligned_access) @@ -8281,8 +8317,41 @@ riscv_option_override (void) init_machine_status = &riscv_init_machine_status; riscv_override_options_internal (&global_options); + + /* Save these options as the default ones in case we push and pop them later + while processing functions with potential target attributes. */ + target_option_default_node = target_option_current_node + = build_target_option_node (&global_options, &global_options_set); } +/* Restore or save the TREE_TARGET_GLOBALS from or to NEW_TREE. + Used by riscv_set_current_function to + make sure optab availability predicates are recomputed when necessary. */ + +void +riscv_save_restore_target_globals (tree new_tree) +{ + if (TREE_TARGET_GLOBALS (new_tree)) + restore_target_globals (TREE_TARGET_GLOBALS (new_tree)); + else if (new_tree == target_option_default_node) + restore_target_globals (&default_target_globals); + else + TREE_TARGET_GLOBALS (new_tree) = save_target_globals_default_opts (); +} + +/* Implements TARGET_OPTION_RESTORE. Restore the backend codegen decisions + using the information saved in PTR. */ + +static void +riscv_option_restore (struct gcc_options *opts, + struct gcc_options * /* opts_set */, + struct cl_target_option * /* ptr */) +{ + riscv_override_options_internal (opts); +} + +static GTY (()) tree riscv_previous_fndecl; + /* Implement TARGET_CONDITIONAL_REGISTER_USAGE. */ static void @@ -8528,7 +8597,12 @@ riscv_get_interrupt_type (tree decl) return MACHINE_MODE; } -/* Implement `TARGET_SET_CURRENT_FUNCTION'. */ +/* Implement `TARGET_SET_CURRENT_FUNCTION'. Unpack the codegen decisions + like tuning and ISA features from the DECL_FUNCTION_SPECIFIC_TARGET + of the function, if such exists. This function may be called multiple + times on a single function so use aarch64_previous_fndecl to avoid + setting up identical state. */ + /* Sanity cheching for above function attributes. */ static void riscv_set_current_function (tree decl) @@ -8536,36 +8610,66 @@ riscv_set_current_function (tree decl) if (decl == NULL_TREE || current_function_decl == NULL_TREE || current_function_decl == error_mark_node - || ! cfun->machine - || cfun->machine->attributes_checked_p) + || ! cfun->machine) return; - cfun->machine->naked_p = riscv_naked_function_p (decl); - cfun->machine->interrupt_handler_p - = riscv_interrupt_type_p (TREE_TYPE (decl)); - - if (cfun->machine->naked_p && cfun->machine->interrupt_handler_p) - error ("function attributes %qs and %qs are mutually exclusive", - "interrupt", "naked"); - - if (cfun->machine->interrupt_handler_p) + if (!cfun->machine->attributes_checked_p) { - tree ret = TREE_TYPE (TREE_TYPE (decl)); - tree args = TYPE_ARG_TYPES (TREE_TYPE (decl)); + cfun->machine->naked_p = riscv_naked_function_p (decl); + cfun->machine->interrupt_handler_p + = riscv_interrupt_type_p (TREE_TYPE (decl)); - if (TREE_CODE (ret) != VOID_TYPE) - error ("%qs function cannot return a value", "interrupt"); + if (cfun->machine->naked_p && cfun->machine->interrupt_handler_p) + error ("function attributes %qs and %qs are mutually exclusive", + "interrupt", "naked"); - if (args && TREE_CODE (TREE_VALUE (args)) != VOID_TYPE) - error ("%qs function cannot have arguments", "interrupt"); + if (cfun->machine->interrupt_handler_p) + { + tree ret = TREE_TYPE (TREE_TYPE (decl)); + tree args = TYPE_ARG_TYPES (TREE_TYPE (decl)); - cfun->machine->interrupt_mode = riscv_get_interrupt_type (decl); + if (TREE_CODE (ret) != VOID_TYPE) + error ("%qs function cannot return a value", "interrupt"); - gcc_assert (cfun->machine->interrupt_mode != UNKNOWN_MODE); + if (args && TREE_CODE (TREE_VALUE (args)) != VOID_TYPE) + error ("%qs function cannot have arguments", "interrupt"); + + cfun->machine->interrupt_mode = riscv_get_interrupt_type (decl); + + gcc_assert (cfun->machine->interrupt_mode != UNKNOWN_MODE); + } + + /* Don't print the above diagnostics more than once. */ + cfun->machine->attributes_checked_p = 1; } - /* Don't print the above diagnostics more than once. */ - cfun->machine->attributes_checked_p = 1; + if (!decl || decl == riscv_previous_fndecl) + return; + + tree old_tree = (riscv_previous_fndecl + ? DECL_FUNCTION_SPECIFIC_TARGET (riscv_previous_fndecl) + : NULL_TREE); + + tree new_tree = DECL_FUNCTION_SPECIFIC_TARGET (decl); + + /* If current function has no attributes but the previous one did, + use the default node. */ + if (!new_tree && old_tree) + new_tree = target_option_default_node; + + /* If nothing to do, return. #pragma GCC reset or #pragma GCC pop to + the default have been handled by aarch64_save_restore_target_globals from + aarch64_pragma_target_parse. */ + if (old_tree == new_tree) + return; + + riscv_previous_fndecl = decl; + + /* First set the target options. */ + cl_target_option_restore (&global_options, &global_options_set, + TREE_TARGET_OPTION (new_tree)); + + riscv_save_restore_target_globals (new_tree); } /* Implement TARGET_MERGE_DECL_ATTRIBUTES. */ @@ -9687,6 +9791,12 @@ riscv_preferred_else_value (unsigned ifn, tree vectype, unsigned int nops, #undef TARGET_OPTION_OVERRIDE #define TARGET_OPTION_OVERRIDE riscv_option_override +#undef TARGET_OPTION_RESTORE +#define TARGET_OPTION_RESTORE riscv_option_restore + +#undef TARGET_OPTION_VALID_ATTRIBUTE_P +#define TARGET_OPTION_VALID_ATTRIBUTE_P riscv_option_valid_attribute_p + #undef TARGET_LEGITIMIZE_ADDRESS #define TARGET_LEGITIMIZE_ADDRESS riscv_legitimize_address diff --git a/gcc/config/riscv/riscv.h b/gcc/config/riscv/riscv.h index 1e9813b4f395..6205d7533f4c 100644 --- a/gcc/config/riscv/riscv.h +++ b/gcc/config/riscv/riscv.h @@ -25,6 +25,8 @@ along with GCC; see the file COPYING3. If not see #include #include "config/riscv/riscv-opts.h" +#define SWITCHABLE_TARGET 1 + /* Target CPU builtins. */ #define TARGET_CPU_CPP_BUILTINS() riscv_cpu_cpp_builtins (pfile) @@ -1056,6 +1058,10 @@ while (0) #define ASM_DECLARE_FUNCTION_NAME(STR, NAME, DECL) \ riscv_declare_function_name (STR, NAME, DECL) +#undef ASM_DECLARE_FUNCTION_SIZE +#define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \ + riscv_declare_function_size (FILE, FNAME, DECL) + /* Add output .variant_cc directive for specific alias definition. */ #undef ASM_OUTPUT_DEF_FROM_DECLS #define ASM_OUTPUT_DEF_FROM_DECLS(STR, DECL, TARGET) \ diff --git a/gcc/config/riscv/riscv.opt b/gcc/config/riscv/riscv.opt index 70d78151cee6..1bd661a3fe49 100644 --- a/gcc/config/riscv/riscv.opt +++ b/gcc/config/riscv/riscv.opt @@ -84,11 +84,11 @@ Target RejectNegative Joined Negative(march=) lower-case. mtune= -Target RejectNegative Joined Var(riscv_tune_string) +Target RejectNegative Joined Var(riscv_tune_string) Save -mtune=PROCESSOR Optimize the output for PROCESSOR. mcpu= -Target RejectNegative Joined Var(riscv_cpu_string) +Target RejectNegative Joined Var(riscv_cpu_string) Save -mcpu=PROCESSOR Use architecture of and optimize the output for PROCESSOR. msmall-data-limit= @@ -106,7 +106,7 @@ memory accesses to be generated as compressed instructions. Currently targets 32-bit integer load/stores. mcmodel= -Target RejectNegative Joined Enum(code_model) Var(riscv_cmodel) Init(TARGET_DEFAULT_CMODEL) +Target RejectNegative Joined Enum(code_model) Var(riscv_cmodel) Init(TARGET_DEFAULT_CMODEL) Save Specify the code model. mstrict-align diff --git a/gcc/config/riscv/t-riscv b/gcc/config/riscv/t-riscv index 95becfc819b7..3b9686daa585 100644 --- a/gcc/config/riscv/t-riscv +++ b/gcc/config/riscv/t-riscv @@ -115,6 +115,11 @@ riscv-v.o: $(srcdir)/config/riscv/riscv-v.cc \ $(COMPILE) $< $(POSTCOMPILE) +riscv-target-attr.o: $(srcdir)/config/riscv/riscv-target-attr.cc $(CONFIG_H) \ + $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(DIAGNOSTIC_CORE_H) + $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + $(srcdir)/config/riscv/riscv-target-attr.cc + thead.o: $(srcdir)/config/riscv/thead.cc \ $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TARGET_H) backend.h $(RTL_H) \ memmodel.h $(EMIT_RTL_H) poly-int.h output.h diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index a95121b01247..8293a7b88a97 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -6295,8 +6295,66 @@ void f (void) __attribute__ ((interrupt ("user"))); Permissible values for this parameter are @code{user}, @code{supervisor}, and @code{machine}. If there is no parameter, then it defaults to @code{machine}. + @end table +The following target-specific function attributes are available for the +RISC-V target. For the most part, these options mirror the behavior of +similar command-line options (@pxref{RISC-V Options}), but on a +per-function basis. + +@table @code +@cindex @code{arch=} function attribute, RISC-V +@item arch= +Specifies the architecture version and architectural extensions to use +for this function. The behavior and permissible arguments are the same as +for the @option{-march=} command-line option, in addtion, it also support +extension enablement list, a list of extension name and prefixed with @code{+}, +like @code{arch=+zba} means enable @code{zba} extension. +Multiple extension can be enabled by separating them with a comma. For example: +@code{arch=+zba,+zbb}. + +@cindex @code{tune=} function attribute, RISC-V +@item tune= +Specifies the core for which to tune the performance of this function. +The behavior and permissible arguments are the same as for the @option{-mtune=} +command-line option. + +@cindex @code{cpu=} function attribute, RISC-V +@item cpu= +Specifies the core for which to tune the performance of this function and also +whose architectural features to use. The behavior and valid arguments are the +same as for the @option{-mcpu=} command-line option. + +@end table + +The above target attributes can be specified as follows: + +@smallexample +__attribute__((target("@var{attr-string}"))) +int +f (int a) +@{ + return a + 5; +@} +@end smallexample + +where @code{@var{attr-string}} is one of the attribute strings specified above. + +Multiple target function attributes can be specified by separating them with +a semicolon. For example: +@smallexample +__attribute__((target("arch=+zba,+zbb;tune=rocket"))) +int +foo (int a) +@{ + return a + 5; +@} +@end smallexample + +is valid and compiles function @code{foo} with @code{zba} +and @code{zbb} extensions and tunes it for @code{rocket}. + @node RL78 Function Attributes @subsection RL78 Function Attributes diff --git a/gcc/testsuite/gcc.target/riscv/target-attr-01.c b/gcc/testsuite/gcc.target/riscv/target-attr-01.c new file mode 100644 index 000000000000..b3f3d65d543f --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/target-attr-01.c @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ +/* { dg-options "-march=rv64gc -O2 -mabi=lp64" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + + +/* +** foo: +** ... +** sh1add\s*a0,a1,a0 +** ... +*/ + + +long foo() __attribute__((target("arch=rv64gc_zba"))); +long foo(long a, long b){ + return a + (b * 2); +} + +/* +** bar: +** ... +** slli\s*a1,a1,1 +** add\s*a0,a1,a0 +** ... +*/ + + +long bar(long a, long b){ + return a + (b * 2); +} diff --git a/gcc/testsuite/gcc.target/riscv/target-attr-02.c b/gcc/testsuite/gcc.target/riscv/target-attr-02.c new file mode 100644 index 000000000000..c010089a823b --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/target-attr-02.c @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ +/* { dg-options "-march=rv64gc -O2 -mabi=lp64" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + + +/* +** foo: +** ... +** sh1add\s*a0,a1,a0 +** ... +*/ + + +long foo() __attribute__((target("arch=+zba"))); +long foo(long a, long b){ + return a + (b * 2); +} + +/* +** bar: +** ... +** slli\s*a1,a1,1 +** add\s*a0,a1,a0 +** ... +*/ + + +long bar(long a, long b){ + return a + (b * 2); +} diff --git a/gcc/testsuite/gcc.target/riscv/target-attr-03.c b/gcc/testsuite/gcc.target/riscv/target-attr-03.c new file mode 100644 index 000000000000..b4896cb2e277 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/target-attr-03.c @@ -0,0 +1,26 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ +/* { dg-options "-march=rv64gc_zba -O2 -mabi=lp64" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +/* +** foo: +** ... +** slli\s*a1,a1,1 +** add\s*a0,a1,a0 +** ... +*/ +long foo() __attribute__((target("arch=rv64gc"))); +long foo(long a, long b){ + return a + (b * 2); +} + +/* +** bar: +** ... +** sh1add\s*a0,a1,a0 +** ... +*/ +long bar(long a, long b){ + return a + (b * 2); +} diff --git a/gcc/testsuite/gcc.target/riscv/target-attr-04.c b/gcc/testsuite/gcc.target/riscv/target-attr-04.c new file mode 100644 index 000000000000..369d6514e5aa --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/target-attr-04.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ +/* { dg-options "-march=rv64gc_zba -O2 -mabi=lp64 -mtune=rocket" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +/* +** foo: +** ... +** # tune = sifive-7-series +** ... +** slli\s*a1,a1,1 +** add\s*a0,a1,a0 +** ... +*/ +long foo() __attribute__((target("cpu=sifive-u74"))); +long foo(long a, long b){ + return a + (b * 2); +} + +/* +** bar: +** ... +** sh1add\s*a0,a1,a0 +** ... +*/ +long bar(long a, long b){ + return a + (b * 2); +} diff --git a/gcc/testsuite/gcc.target/riscv/target-attr-05.c b/gcc/testsuite/gcc.target/riscv/target-attr-05.c new file mode 100644 index 000000000000..c75368dcebf9 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/target-attr-05.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ +/* { dg-options "-march=rv64gc_zba -O2 -mabi=lp64 -mtune=rocket" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +/* +** foo: +** ... +** # tune = sifive-7-series +** ... +** sh1add\s*a0,a1,a0 +** ... +*/ +long foo() __attribute__((target("cpu=sifive-u74;arch=rv64gc_zba"))); +long foo(long a, long b){ + return a + (b * 2); +} + +/* +** bar: +** ... +** sh1add\s*a0,a1,a0 +** ... +*/ +long bar(long a, long b){ + return a + (b * 2); +} diff --git a/gcc/testsuite/gcc.target/riscv/target-attr-06.c b/gcc/testsuite/gcc.target/riscv/target-attr-06.c new file mode 100644 index 000000000000..369c95eeb54b --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/target-attr-06.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ +/* { dg-options "-march=rv64gc_zba -O2 -mabi=lp64 -mtune=rocket" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +/* +** foo: +** ... +** # tune = sifive-5-series +** ... +** sh1add\s*a0,a1,a0 +** ... +*/ +long foo() __attribute__((target("cpu=sifive-u74;tune=sifive-5-series;arch=rv64gc_zba"))); +long foo(long a, long b){ + return a + (b * 2); +} + +/* +** bar: +** ... +** sh1add\s*a0,a1,a0 +** ... +*/ +long bar(long a, long b){ + return a + (b * 2); +} diff --git a/gcc/testsuite/gcc.target/riscv/target-attr-07.c b/gcc/testsuite/gcc.target/riscv/target-attr-07.c new file mode 100644 index 000000000000..4ff81166a626 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/target-attr-07.c @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ +/* { dg-options "-march=rv64gc_zba -O2 -mabi=lp64 -mtune=rocket" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +/* +** foo: +** ... +** # tune = sifive-5-series +** ... +*/ +long foo() __attribute__((target("tune=sifive-5-series"))); +long foo(long a, long b){ + return a + (b * 2); +} + +/* +** bar: +** ... +** sh1add\s*a0,a1,a0 +** ... +*/ +long bar(long a, long b){ + return a + (b * 2); +} diff --git a/gcc/testsuite/gcc.target/riscv/target-attr-bad-01.c b/gcc/testsuite/gcc.target/riscv/target-attr-bad-01.c new file mode 100644 index 000000000000..91cbcaac21d4 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/target-attr-bad-01.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ +/* { dg-options "-march=rv64gc -O2 -mabi=lp64" } */ + + +long foo() __attribute__((target("arch=rv64gc_zba;;"))); /* { dg-error "malformed" } */ +long foo(long a, long b){ + return a + (b * 2); +} + +long bar(long a, long b){ + return a + (b * 2); +} diff --git a/gcc/testsuite/gcc.target/riscv/target-attr-bad-02.c b/gcc/testsuite/gcc.target/riscv/target-attr-bad-02.c new file mode 100644 index 000000000000..0c838bb3ca7e --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/target-attr-bad-02.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ +/* { dg-options "-march=rv64gc -O2 -mabi=lp64" } */ + + +long foo() __attribute__((target("cpu=xyz-cpu"))); /* { dg-error "unknown CPU" } */ +long foo(long a, long b){ + return a + (b * 2); +} + +long bar(long a, long b){ + return a + (b * 2); +} diff --git a/gcc/testsuite/gcc.target/riscv/target-attr-bad-03.c b/gcc/testsuite/gcc.target/riscv/target-attr-bad-03.c new file mode 100644 index 000000000000..09702d1690a1 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/target-attr-bad-03.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ +/* { dg-options "-march=rv64gc -O2 -mabi=lp64" } */ + + +long foo() __attribute__((target("tune=xyz-cpu"))); /* { dg-error "unknown TUNE" } */ +long foo(long a, long b){ + return a + (b * 2); +} + +long bar(long a, long b){ + return a + (b * 2); +} diff --git a/gcc/testsuite/gcc.target/riscv/target-attr-bad-04.c b/gcc/testsuite/gcc.target/riscv/target-attr-bad-04.c new file mode 100644 index 000000000000..1d9a0ffdd888 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/target-attr-bad-04.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ +/* { dg-options "-march=rv64gc -O2 -mabi=lp64" } */ + + +long foo() __attribute__((target(123))); /* { dg-error "argument not a string" } */ +long foo(long a, long b){ + return a + (b * 2); +} + +long bar(long a, long b){ + return a + (b * 2); +} diff --git a/gcc/testsuite/gcc.target/riscv/target-attr-bad-05.c b/gcc/testsuite/gcc.target/riscv/target-attr-bad-05.c new file mode 100644 index 000000000000..24a81c5279b8 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/target-attr-bad-05.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ +/* { dg-options "-march=rv64gc -O2 -mabi=lp64" } */ + + +long foo() __attribute__((target(""))); /* { dg-warning "empty string in attribute .target." } */ +long foo(long a, long b){ + return a + (b * 2); +} + +long bar(long a, long b){ + return a + (b * 2); +} diff --git a/gcc/testsuite/gcc.target/riscv/target-attr-bad-06.c b/gcc/testsuite/gcc.target/riscv/target-attr-bad-06.c new file mode 100644 index 000000000000..a0d65859d404 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/target-attr-bad-06.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ +/* { dg-options "-march=rv64gc -O2 -mabi=lp64" } */ + + +long foo() __attribute__((target("arch=*x"))); /* { dg-error "must start with \\+ or rv" } */ +long foo(long a, long b){ + return a + (b * 2); +} + +long bar(long a, long b){ + return a + (b * 2); +} diff --git a/gcc/testsuite/gcc.target/riscv/target-attr-bad-07.c b/gcc/testsuite/gcc.target/riscv/target-attr-bad-07.c new file mode 100644 index 000000000000..8aa82504dc1c --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/target-attr-bad-07.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ +/* { dg-options "-march=rv64gc -O2 -mabi=lp64" } */ + + +long foo() __attribute__((target("arch=+zbb_zba"))); /* { dg-error "extension 'zbb_zba' starts with 'z' but is unsupported standard extension" } */ +long foo(long a, long b){ + return a + (b * 2); +} + +long bar(long a, long b){ + return a + (b * 2); +} diff --git a/gcc/testsuite/gcc.target/riscv/target-attr-bad-08.c b/gcc/testsuite/gcc.target/riscv/target-attr-bad-08.c new file mode 100644 index 000000000000..68d211de8877 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/target-attr-bad-08.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ +/* { dg-options "-march=rv64gc -O2 -mabi=lp64" } */ + +long foo() __attribute__((target("arch=rv64gc_zba;arch=rv64gc_zba"))); /* { dg-error "arch appears more than once" } */ +long foo(long a, long b){ + return a + (b * 2); +} diff --git a/gcc/testsuite/gcc.target/riscv/target-attr-bad-09.c b/gcc/testsuite/gcc.target/riscv/target-attr-bad-09.c new file mode 100644 index 000000000000..2b6e49828945 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/target-attr-bad-09.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ +/* { dg-options "-march=rv64gc -O2 -mabi=lp64" } */ + +long foo() __attribute__((target("cpu=sifive-u74;cpu=sifive-u74"))); /* { dg-error "cpu appears more than once" } */ +long foo(long a, long b){ + return a + (b * 2); +} diff --git a/gcc/testsuite/gcc.target/riscv/target-attr-bad-10.c b/gcc/testsuite/gcc.target/riscv/target-attr-bad-10.c new file mode 100644 index 000000000000..00cefa03e414 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/target-attr-bad-10.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ +/* { dg-options "-march=rv64gc -O2 -mabi=lp64" } */ + +long foo() __attribute__((target("tune=sifive-u74;tune=sifive-u74"))); /* { dg-error "tune appears more than once" } */ +long foo(long a, long b){ + return a + (b * 2); +} From ec35fdc9576d3907973667b57932b21514ee5062 Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Thu, 16 Nov 2023 12:09:19 +0100 Subject: [PATCH 104/169] gcc.c-torture/execute/931004-13.c: Fix declaration of main gcc/testsuite/ * gcc.c-torture/execute/931004-13.c (main): Fix mistakenly swapped int/void types. --- gcc/testsuite/gcc.c-torture/execute/931004-13.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/testsuite/gcc.c-torture/execute/931004-13.c b/gcc/testsuite/gcc.c-torture/execute/931004-13.c index 8b79679087c0..e8c0c81076ce 100644 --- a/gcc/testsuite/gcc.c-torture/execute/931004-13.c +++ b/gcc/testsuite/gcc.c-torture/execute/931004-13.c @@ -43,8 +43,8 @@ f (int n, struct tiny x, struct tiny y, struct tiny z, long l) abort (); } -void -main (int) +int +main (void) { struct tiny x[3]; x[0].c = 10; From 7a496b7ce105185be12e023e749c90d5f7561879 Mon Sep 17 00:00:00 2001 From: Tamar Christina Date: Thu, 16 Nov 2023 12:11:22 +0000 Subject: [PATCH 105/169] middle-end: skip checking loop exits if loop malformed [PR111878] Before my refactoring if the loop->latch was incorrect then find_loop_location skipped checking the edges and would eventually return a dummy location. It turns out that a loop can have loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS) but also not have a latch in which case get_loop_exit_edges traps. This restores the old behavior. gcc/ChangeLog: PR tree-optimization/111878 * tree-vect-loop-manip.cc (find_loop_location): Skip edges check if latch incorrect. gcc/testsuite/ChangeLog: PR tree-optimization/111878 * gcc.dg/graphite/pr111878.c: New test. --- gcc/testsuite/gcc.dg/graphite/pr111878.c | 19 +++++++++++++++++++ gcc/tree-vect-loop-manip.cc | 4 ++++ 2 files changed, 23 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/graphite/pr111878.c diff --git a/gcc/testsuite/gcc.dg/graphite/pr111878.c b/gcc/testsuite/gcc.dg/graphite/pr111878.c new file mode 100644 index 000000000000..6722910062e4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/graphite/pr111878.c @@ -0,0 +1,19 @@ +/* { dg-options "-O3 -fgraphite-identity -fsave-optimization-record" } */ + +int long_c2i_ltmp; +int *long_c2i_cont; + +void +long_c2i (long utmp, int i) +{ + int neg = 1; + switch (long_c2i_cont[0]) + case 0: + neg = 0; + for (; i; i++) + if (neg) + utmp |= long_c2i_cont[i] ^ 5; + else + utmp |= long_c2i_cont[i]; + long_c2i_ltmp = utmp; +} diff --git a/gcc/tree-vect-loop-manip.cc b/gcc/tree-vect-loop-manip.cc index b9161274ce40..bcd90a331f5a 100644 --- a/gcc/tree-vect-loop-manip.cc +++ b/gcc/tree-vect-loop-manip.cc @@ -1792,6 +1792,10 @@ find_loop_location (class loop *loop) if (!loop) return dump_user_location_t (); + /* For the root of the loop tree return the function location. */ + if (!loop_outer (loop)) + return dump_user_location_t::from_function_decl (cfun->decl); + if (loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS)) { /* We only care about the loop location, so use any exit with location From 4547c271c455dcf54ce9c4bb820acdd3b6193f6d Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Thu, 16 Nov 2023 08:29:19 -0500 Subject: [PATCH 106/169] diagnostics: make m_lang_mask private No functional change intended. gcc/ChangeLog: * diagnostic.cc (diagnostic_context::set_option_hooks): Add "lang_mask" param. * diagnostic.h (diagnostic_context::option_enabled_p): Update for move of m_lang_mask. (diagnostic_context::set_option_hooks): Add "lang_mask" param. (diagnostic_context::get_lang_mask): New. (diagnostic_context::m_lang_mask): Move into m_option_callbacks, thus making private. * lto-wrapper.cc (main): Update for new lang_mask param of set_option_hooks. * toplev.cc (init_asm_output): Use get_lang_mask. (general_init): Move initialization of global_dc's lang_mask to new lang_mask param of set_option_hooks. Signed-off-by: David Malcolm --- gcc/diagnostic.cc | 4 +++- gcc/diagnostic.h | 16 +++++++++++----- gcc/lto-wrapper.cc | 3 ++- gcc/toplev.cc | 6 +++--- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/gcc/diagnostic.cc b/gcc/diagnostic.cc index eb0df6890564..b4ebcd29457c 100644 --- a/gcc/diagnostic.cc +++ b/gcc/diagnostic.cc @@ -423,12 +423,14 @@ diagnostic_context:: set_option_hooks (diagnostic_option_enabled_cb option_enabled_cb, void *option_state, diagnostic_make_option_name_cb make_option_name_cb, - diagnostic_make_option_url_cb make_option_url_cb) + diagnostic_make_option_url_cb make_option_url_cb, + unsigned lang_mask) { m_option_callbacks.m_option_enabled_cb = option_enabled_cb; m_option_callbacks.m_option_state = option_state; m_option_callbacks.m_make_option_name_cb = make_option_name_cb; m_option_callbacks.m_make_option_url_cb = make_option_url_cb; + m_option_callbacks.m_lang_mask = lang_mask; } void diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h index db61b0e27477..dbf972d25875 100644 --- a/gcc/diagnostic.h +++ b/gcc/diagnostic.h @@ -506,7 +506,7 @@ public: return true; return m_option_callbacks.m_option_enabled_cb (option_index, - m_lang_mask, + m_option_callbacks.m_lang_mask, m_option_callbacks.m_option_state); } @@ -532,7 +532,13 @@ public: set_option_hooks (diagnostic_option_enabled_cb option_enabled_cb, void *option_state, diagnostic_make_option_name_cb make_option_name_cb, - diagnostic_make_option_url_cb make_option_url_cb); + diagnostic_make_option_url_cb make_option_url_cb, + unsigned lang_mask); + + unsigned get_lang_mask () const + { + return m_option_callbacks.m_lang_mask; + } private: bool includes_seen_p (const line_map_ordinary *map); @@ -673,6 +679,9 @@ private: is available. May be passed 0 as well as the index of a particular option. */ diagnostic_make_option_url_cb m_make_option_url_cb; + + /* A copy of lang_hooks.option_lang_mask (). */ + unsigned m_lang_mask; } m_option_callbacks; /* An optional hook for adding URLs to quoted text strings in @@ -698,9 +707,6 @@ private: int m_lock; public: - /* A copy of lang_hooks.option_lang_mask (). */ - unsigned m_lang_mask; - bool m_inhibit_notes_p; diagnostic_source_printing_options m_source_printing; diff --git a/gcc/lto-wrapper.cc b/gcc/lto-wrapper.cc index 7c76635ef213..7b01ecc2d889 100644 --- a/gcc/lto-wrapper.cc +++ b/gcc/lto-wrapper.cc @@ -2149,7 +2149,8 @@ main (int argc, char *argv[]) global_dc->set_option_hooks (nullptr, nullptr, nullptr, - get_option_url); + get_option_url, + 0); if (atexit (lto_wrapper_cleanup) != 0) fatal_error (input_location, "% failed"); diff --git a/gcc/toplev.cc b/gcc/toplev.cc index ae2f3d52602b..8c3fcd337bee 100644 --- a/gcc/toplev.cc +++ b/gcc/toplev.cc @@ -715,7 +715,7 @@ init_asm_output (const char *name) "cannot open %qs for writing: %m", asm_file_name); } - if (!flag_syntax_only && !(global_dc->m_lang_mask & CL_LTODump)) + if (!flag_syntax_only && !(global_dc->get_lang_mask () & CL_LTODump)) { targetm.asm_out.file_start (); @@ -1020,7 +1020,6 @@ general_init (const char *argv0, bool init_signals) /* Initialize the diagnostics reporting machinery, so option parsing can give warnings and errors. */ diagnostic_initialize (global_dc, N_OPTS); - global_dc->m_lang_mask = lang_hooks.option_lang_mask (); /* Set a default printer. Language specific initializations will override it later. */ tree_diagnostics_defaults (global_dc); @@ -1048,7 +1047,8 @@ general_init (const char *argv0, bool init_signals) global_dc->set_option_hooks (option_enabled, &global_options, option_name, - get_option_url); + get_option_url, + lang_hooks.option_lang_mask ()); global_dc->set_urlifier (make_gcc_urlifier ()); if (init_signals) From 0077c0fb19981c108a01cd15af9b2d6d478c183b Mon Sep 17 00:00:00 2001 From: Patrick Palka Date: Thu, 16 Nov 2023 09:32:07 -0500 Subject: [PATCH 107/169] c++: constantness of call to function pointer [PR111703] potential_constant_expression for CALL_EXPR tests FUNCTION_POINTER_TYPE_P on the callee rather than on the type of the callee, which means we always pass want_rval=any when recursing and so may fail to identify a non-constant function pointer callee as such. Fixing this turns out to further work around PR111703. PR c++/111703 PR c++/107939 gcc/cp/ChangeLog: * constexpr.cc (potential_constant_expression_1) : Fix FUNCTION_POINTER_TYPE_P test. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/concepts-fn8.C: Extend test. * g++.dg/diagnostic/constexpr4.C: New test. --- gcc/cp/constexpr.cc | 7 ++++++- gcc/testsuite/g++.dg/cpp2a/concepts-fn8.C | 2 ++ gcc/testsuite/g++.dg/diagnostic/constexpr4.C | 9 +++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/diagnostic/constexpr4.C diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc index 8a6b210144af..344107d494b4 100644 --- a/gcc/cp/constexpr.cc +++ b/gcc/cp/constexpr.cc @@ -9547,7 +9547,12 @@ potential_constant_expression_1 (tree t, bool want_rval, bool strict, bool now, } else if (fun) { - if (RECUR (fun, FUNCTION_POINTER_TYPE_P (fun) ? rval : any)) + if (TREE_TYPE (fun) + && FUNCTION_POINTER_TYPE_P (TREE_TYPE (fun))) + want_rval = rval; + else + want_rval = any; + if (RECUR (fun, want_rval)) /* Might end up being a constant function pointer. But it could also be a function object with constexpr op(), so we pass 'any' so that the underlying VAR_DECL is deemed diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-fn8.C b/gcc/testsuite/g++.dg/cpp2a/concepts-fn8.C index 3f63a5b28d70..c63d26c931d9 100644 --- a/gcc/testsuite/g++.dg/cpp2a/concepts-fn8.C +++ b/gcc/testsuite/g++.dg/cpp2a/concepts-fn8.C @@ -15,10 +15,12 @@ struct P { }; void (*f)(P); +P (*h)(P); template constexpr bool g() { P x; f(x); // { dg-bogus "from here" } + f(h(x)); // { dg-bogus "from here" } return true; } diff --git a/gcc/testsuite/g++.dg/diagnostic/constexpr4.C b/gcc/testsuite/g++.dg/diagnostic/constexpr4.C new file mode 100644 index 000000000000..f37c01cac55a --- /dev/null +++ b/gcc/testsuite/g++.dg/diagnostic/constexpr4.C @@ -0,0 +1,9 @@ +// Verify we diagnose a call to a non-constant function pointer ahead of time. +// { dg-do compile { target c++11 } } + +bool (*f)(int); + +template +void g() { + static_assert(f(N), ""); // { dg-error "non-constant|'f' is not usable" } +} From 063d987af0e7a8329559fb116337bdb8ab20d8eb Mon Sep 17 00:00:00 2001 From: Patrick Palka Date: Thu, 16 Nov 2023 10:49:17 -0500 Subject: [PATCH 108/169] c++: add fixed testcases [PR98614, PR104802] Both of these PRs are fixed by r12-1403-gc4e50e500da7692a. PR c++/98614 PR c++/104802 gcc/testsuite/ChangeLog: * g++.dg/cpp1z/nontype-auto22.C: New test. * g++.dg/cpp2a/concepts-partial-spec14.C: New test. --- gcc/testsuite/g++.dg/cpp1z/nontype-auto22.C | 17 +++++++++++++++++ .../g++.dg/cpp2a/concepts-partial-spec14.C | 10 ++++++++++ 2 files changed, 27 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp1z/nontype-auto22.C create mode 100644 gcc/testsuite/g++.dg/cpp2a/concepts-partial-spec14.C diff --git a/gcc/testsuite/g++.dg/cpp1z/nontype-auto22.C b/gcc/testsuite/g++.dg/cpp1z/nontype-auto22.C new file mode 100644 index 000000000000..1882d2586d55 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1z/nontype-auto22.C @@ -0,0 +1,17 @@ +// PR c++/104802 +// { dg-do compile { target c++17 } } + +template +struct S { + template + void operator()() const {} +}; + +struct weird_ { + int operator&() const { return 123; } +} const weird {}; + +int main() { + S s {}; + s(); +} diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-partial-spec14.C b/gcc/testsuite/g++.dg/cpp2a/concepts-partial-spec14.C new file mode 100644 index 000000000000..c94b4013340a --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/concepts-partial-spec14.C @@ -0,0 +1,10 @@ +// PR c++/98614 +// { dg-do compile { target c++20 } } + +template +struct A; + +template requires true +struct A { + A(A const&) = default; +}; From 06ff410e0dea135d41bc5f7a9a007d7ba6822dbf Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Thu, 16 Nov 2023 16:48:07 +0100 Subject: [PATCH 109/169] i386: Fix invalid RTX in split2 pass [PR112567] Also fix some indentitation inconsistencies. PR target/112567 gcc/ChangeLog: * config/i386/i386.md (*qi_ext_1_slp): Fix generation of invalid RTX in split pattern. --- gcc/config/i386/i386.md | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index a364c43641fe..f5407ab30549 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -6652,7 +6652,7 @@ (subreg:QI (match_op_dup 3 [(match_dup 2) (const_int 8) (const_int 8)]) 0) - (match_dup 0))) + (match_dup 0))) (clobber (reg:CC FLAGS_REG))])] "" [(set_attr "type" "alu") @@ -6666,11 +6666,11 @@ [(match_operand 1 "int248_register_operand" "Q") (const_int 8) (const_int 8)]) 0) - (subreg:QI - (match_operator:SWI248 4 "extract_operator" - [(match_operand 2 "int248_register_operand" "Q") - (const_int 8) - (const_int 8)]) 0))) + (subreg:QI + (match_operator:SWI248 4 "extract_operator" + [(match_operand 2 "int248_register_operand" "Q") + (const_int 8) + (const_int 8)]) 0))) (clobber (reg:CC FLAGS_REG))] "!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun)" "#" @@ -6685,7 +6685,7 @@ (subreg:QI (match_op_dup 3 [(match_dup 1) (const_int 8) (const_int 8)]) 0) - (match_dup 0))) + (match_dup 0))) (clobber (reg:CC FLAGS_REG))])] "" [(set_attr "type" "alu") @@ -7742,11 +7742,11 @@ [(match_operand 1 "int248_register_operand" "Q") (const_int 8) (const_int 8)]) 0) - (subreg:QI - (match_operator:SWI248 4 "extract_operator" - [(match_operand 2 "int248_register_operand" "Q") - (const_int 8) - (const_int 8)]) 0))) + (subreg:QI + (match_operator:SWI248 4 "extract_operator" + [(match_operand 2 "int248_register_operand" "Q") + (const_int 8) + (const_int 8)]) 0))) (clobber (reg:CC FLAGS_REG))] "!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun)" "#" @@ -11588,8 +11588,8 @@ (any_logic:QI (subreg:QI (match_op_dup 3 - [(match_dup 2) (const_int 8) (const_int 8)]) 0))) - (match_dup 0) + [(match_dup 2) (const_int 8) (const_int 8)]) 0) + (match_dup 0))) (clobber (reg:CC FLAGS_REG))])] "" [(set_attr "type" "alu") @@ -11603,11 +11603,11 @@ [(match_operand 1 "int248_register_operand" "Q") (const_int 8) (const_int 8)]) 0) - (subreg:QI - (match_operator:SWI248 4 "extract_operator" - [(match_operand 2 "int248_register_operand" "Q") - (const_int 8) - (const_int 8)]) 0))) + (subreg:QI + (match_operator:SWI248 4 "extract_operator" + [(match_operand 2 "int248_register_operand" "Q") + (const_int 8) + (const_int 8)]) 0))) (clobber (reg:CC FLAGS_REG))] "!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun)" "#" @@ -11622,7 +11622,7 @@ (subreg:QI (match_op_dup 3 [(match_dup 1) (const_int 8) (const_int 8)]) 0) - (match_dup 0))) + (match_dup 0))) (clobber (reg:CC FLAGS_REG))])] "" [(set_attr "type" "alu") From 0fa32aeaa6da4ef9566d98a6fb541dd7427d7d36 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 16 Nov 2023 17:42:22 +0100 Subject: [PATCH 110/169] c++: Fix error recovery ICE [PR112365] check_field_decls for DECL_C_BIT_FIELD FIELD_DECLs with error_mark_node TREE_TYPE continues early and doesn't call check_bitfield_decl which would either set DECL_BIT_FIELD, or clear DECL_C_BIT_FIELD. So, the following testcase ICEs after emitting tons of errors, because SET_DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD asserts DECL_BIT_FIELD. The patch skips that for FIELD_DECLs with error_mark_node, another option would be to check DECL_BIT_FIELD in addition to DECL_C_BIT_FIELD. 2023-11-16 Jakub Jelinek PR c++/112365 * class.cc (layout_class_type): Don't SET_DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD on FIELD_DECLs with error_mark_node type. * g++.dg/cpp0x/pr112365.C: New test. --- gcc/cp/class.cc | 3 ++- gcc/testsuite/g++.dg/cpp0x/pr112365.C | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/pr112365.C diff --git a/gcc/cp/class.cc b/gcc/cp/class.cc index 9d4d95f85bf7..4766b7cf832c 100644 --- a/gcc/cp/class.cc +++ b/gcc/cp/class.cc @@ -6962,7 +6962,8 @@ layout_class_type (tree t, tree *virtuals_p) check_bitfield_decl eventually sets DECL_SIZE (field) to that width. */ && (DECL_SIZE (field) == NULL_TREE - || integer_zerop (DECL_SIZE (field)))) + || integer_zerop (DECL_SIZE (field))) + && TREE_TYPE (field) != error_mark_node) SET_DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD (field, 1); check_non_pod_aggregate (field); } diff --git a/gcc/testsuite/g++.dg/cpp0x/pr112365.C b/gcc/testsuite/g++.dg/cpp0x/pr112365.C new file mode 100644 index 000000000000..23409cba49e2 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/pr112365.C @@ -0,0 +1,8 @@ +// PR c++/112365 +// { dg-do compile { target c++11 } } +// { dg-excess-errors "" } + +template struct A; +template A foo (T; +template struct A { constexpr A : T {} } +struct { bar ( { foo (this) From 8ed7120eaaf49c00c20ccf82ed4ff6aa24a00076 Mon Sep 17 00:00:00 2001 From: Michal Jires Date: Thu, 16 Nov 2023 17:33:30 +0100 Subject: [PATCH 111/169] Add myself to write after approval ChangeLog: * MAINTAINERS: Add myself. --- MAINTAINERS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index c43167d9a752..f0112f5d0297 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -486,6 +486,7 @@ Fariborz Jahanian Surya Kumari Jangala Haochen Jiang Qian Jianhua +Michal Jires Janis Johnson Teresa Johnson Kean Johnston @@ -753,6 +754,7 @@ information. Robin Dapp Robin Dapp +Michal Jires Matthias Kretz Tim Lange Jeff Law From 23725aa53bd264941c4fb228227736be4da59761 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Thu, 16 Nov 2023 16:11:18 +0000 Subject: [PATCH 112/169] libstdc++: Fix aligned formatting of stacktrace_entry and thread::id [PR112564] The formatter for std::thread::id should default to right-align, and the formatter for std::stacktrace_entry should not just ignore the fill-and-align and width from the format-spec! libstdc++-v3/ChangeLog: PR libstdc++/112564 * include/std/stacktrace (formatter::format): Format according to format-spec. * include/std/thread (formatter::format): Use _Align_right as default. * testsuite/19_diagnostics/stacktrace/output.cc: Check fill-and-align handling. Change compile test to run. * testsuite/30_threads/thread/id/output.cc: Check fill-and-align handling. --- libstdc++-v3/include/std/stacktrace | 4 +++- libstdc++-v3/include/std/thread | 3 ++- .../19_diagnostics/stacktrace/output.cc | 18 +++++++++++++++--- .../testsuite/30_threads/thread/id/output.cc | 14 ++++++++++++-- 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/libstdc++-v3/include/std/stacktrace b/libstdc++-v3/include/std/stacktrace index 9d5f6396aed5..f570745fe516 100644 --- a/libstdc++-v3/include/std/stacktrace +++ b/libstdc++-v3/include/std/stacktrace @@ -740,7 +740,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { std::ostringstream __os; __os << __x; - return __format::__write(__fc.out(), __os.view()); + auto __str = __os.view(); + return __format::__write_padded_as_spec(__str, __str.size(), + __fc, _M_spec); } private: diff --git a/libstdc++-v3/include/std/thread b/libstdc++-v3/include/std/thread index 39042d7cdf55..ee3b8b1fcb0b 100644 --- a/libstdc++-v3/include/std/thread +++ b/libstdc++-v3/include/std/thread @@ -335,7 +335,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __os << __id; auto __str = __os.view(); return __format::__write_padded_as_spec(__str, __str.size(), - __fc, _M_spec); + __fc, _M_spec, + __format::_Align_right); } private: diff --git a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/output.cc b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/output.cc index 4960ccb85b8b..67f1e0cebaf9 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/output.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/output.cc @@ -1,4 +1,5 @@ -// { dg-do compile { target c++23 } } +// { dg-options "-lstdc++exp" } +// { dg-do run { target c++23 } } // { dg-require-effective-target stacktrace } // { dg-add-options no_pch } @@ -17,7 +18,8 @@ test_to_string() { auto trace = std::stacktrace::current(); std::string s1 = std::to_string(trace.at(0)); - VERIFY( s1.contains("test_to_string():15") ); + VERIFY( s1.contains("test_to_string()") ); + VERIFY( s1.contains("output.cc:19") ); std::string s2 = std::to_string(trace); VERIFY( s2.contains(s1) ); } @@ -47,7 +49,17 @@ test_format() std::stacktrace_entry entry = trace.at(0); std::string str = std::to_string(entry); VERIFY( std::format("{}", entry) == str ); - VERIFY( std::format("{0:!<{1}}", entry, str.size() + 3) == (str + "!!!") ); + auto len = str.size(); + // with width + VERIFY( std::format("{0:{1}}", entry, len + 1) == (str + " ") ); + // with align + width + VERIFY( std::format("{0:<{1}}", entry, len + 2) == (str + " ") ); + VERIFY( std::format("{0:^{1}}", entry, len + 3) == (" " + str + " ") ); + VERIFY( std::format("{0:>{1}}", entry, len + 4) == (" " + str) ); + // with fill-and-align + width + VERIFY( std::format("{0:!<{1}}", entry, len + 2) == (str + "!!") ); + VERIFY( std::format("{0:!^{1}}", entry, len + 3) == ("!" + str + "!!") ); + VERIFY( std::format("{0:!>{1}}", entry, len + 4) == ("!!!!" + str) ); } int main() diff --git a/libstdc++-v3/testsuite/30_threads/thread/id/output.cc b/libstdc++-v3/testsuite/30_threads/thread/id/output.cc index 08d8c899fda8..3c167202b027 100644 --- a/libstdc++-v3/testsuite/30_threads/thread/id/output.cc +++ b/libstdc++-v3/testsuite/30_threads/thread/id/output.cc @@ -80,8 +80,18 @@ test02() auto len = s1.size(); out.str(""); - auto s2 = std::format("{0:x^{1}}", j, len + 4); - VERIFY( s2 == ("xx" + s1 + "xx") ); + std::string s2; + // with width + s2 = std::format("{0:{1}}", j, len + 2); + VERIFY( s2 == (" " + s1) ); + // with align + width + s2 = std::format("{0:>{1}}", j, len + 2); + VERIFY( s2 == (" " + s1) ); + s2 = std::format("{0:<{1}}", j, len + 2); + VERIFY( s2 == (s1 + " ") ); + // with fill-and-align + width + s2 = std::format("{0:x^{1}}", j, len + 5); + VERIFY( s2 == ("xx" + s1 + "xxx") ); #ifdef _GLIBCXX_USE_WCHAR_T static_assert( std::is_default_constructible_v> ); From 4d8b41bb0512947ce13636fc460ea9fb8dea419a Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Thu, 16 Nov 2023 18:36:44 +0100 Subject: [PATCH 113/169] Fix internal error on function returning dynamically-sized type This is a tree sharing issue for the internal return type synthesized for a function returning a dynamically-sized type and taking an Out or In/Out parameter passed by copy. gcc/ada/ * gcc-interface/decl.cc (gnat_to_gnu_subprog_type): Also create a TYPE_DECL for the return type built for the CI/CO mechanism. gcc/testsuite/ * gnat.dg/varsize4.ads, gnat.dg/varsize4.adb: New test. * gnat.dg/varsize4_pkg.ads: New helper. --- gcc/ada/gcc-interface/decl.cc | 6 ++++++ gcc/testsuite/gnat.dg/varsize4.adb | 19 +++++++++++++++++++ gcc/testsuite/gnat.dg/varsize4.ads | 9 +++++++++ gcc/testsuite/gnat.dg/varsize4_pkg.ads | 5 +++++ 4 files changed, 39 insertions(+) create mode 100644 gcc/testsuite/gnat.dg/varsize4.adb create mode 100644 gcc/testsuite/gnat.dg/varsize4.ads create mode 100644 gcc/testsuite/gnat.dg/varsize4_pkg.ads diff --git a/gcc/ada/gcc-interface/decl.cc b/gcc/ada/gcc-interface/decl.cc index 95fa508c5598..9c7f6840e210 100644 --- a/gcc/ada/gcc-interface/decl.cc +++ b/gcc/ada/gcc-interface/decl.cc @@ -6329,6 +6329,12 @@ gnat_to_gnu_subprog_type (Entity_Id gnat_subprog, bool definition, if (debug_info_p) rest_of_record_type_compilation (gnu_cico_return_type); + + /* Declare it now since it will never be declared otherwise. This + is necessary to ensure that its subtrees are properly marked. */ + create_type_decl (TYPE_NAME (gnu_cico_return_type), + gnu_cico_return_type, + true, debug_info_p, gnat_subprog); } gnu_return_type = gnu_cico_return_type; diff --git a/gcc/testsuite/gnat.dg/varsize4.adb b/gcc/testsuite/gnat.dg/varsize4.adb new file mode 100644 index 000000000000..3d0430de5aab --- /dev/null +++ b/gcc/testsuite/gnat.dg/varsize4.adb @@ -0,0 +1,19 @@ +-- { dg-do compile } + +package body Varsize4 is + + function Func (bytes_read : out Natural) return Arr is + Ret : Arr := (others => False); + begin + return Ret; + end; + + function Get return Natural is + Data : Arr; + Bytes : Natural; + begin + Data := Func (Bytes); + return Bytes; + end; + +end Varsize4; diff --git a/gcc/testsuite/gnat.dg/varsize4.ads b/gcc/testsuite/gnat.dg/varsize4.ads new file mode 100644 index 000000000000..62b673fc16b4 --- /dev/null +++ b/gcc/testsuite/gnat.dg/varsize4.ads @@ -0,0 +1,9 @@ +with Varsize4_Pkg; + +package Varsize4 is + + type Arr is array (1 .. Varsize4_Pkg.F) of Boolean; + + function Get return Natural; + +end Varsize4; diff --git a/gcc/testsuite/gnat.dg/varsize4_pkg.ads b/gcc/testsuite/gnat.dg/varsize4_pkg.ads new file mode 100644 index 000000000000..e07a6b002dc1 --- /dev/null +++ b/gcc/testsuite/gnat.dg/varsize4_pkg.ads @@ -0,0 +1,5 @@ +package Varsize4_Pkg is + + function F return Natural; + +end Varsize4_Pkg; From d2934eb6ae92471484469d8ddd039eb34ef400b1 Mon Sep 17 00:00:00 2001 From: John David Anglin Date: Thu, 16 Nov 2023 17:42:26 +0000 Subject: [PATCH 114/169] hppa: Revise REG+D address support to allow long displacements before reload In analyzing PR rtl-optimization/112415, I realized that restricting REG+D offsets to 5-bits before reload results in very poor code and complexities in optimizing these instructions after reload. The general problem is long displacements are not allowed for floating point accesses when generating PA 1.1 code. Even with PA 2.0, there is a ELF linker bug that prevents using long displacements for floating point loads and stores. In the past, enabling long displacements before reload caused issues in reload. However, there have been fixes in the handling of reloads for floating-point accesses. This change allows long displacements before reload and corrects a couple of issues in the constraint handling for integer and floating-point accesses. 2023-11-16 John David Anglin gcc/ChangeLog: PR rtl-optimization/112415 * config/pa/pa.cc (pa_legitimate_address_p): Allow 14-bit displacements before reload. Simplify logic flow. Revise comments. * config/pa/pa.h (TARGET_ELF64): New define. (INT14_OK_STRICT): Update define and comment. * config/pa/pa64-linux.h (TARGET_ELF64): Define. * config/pa/predicates.md (base14_operand): Don't check alignment of short displacements. (integer_store_memory_operand): Don't return true when reload_in_progress is true. Remove INT_5_BITS check. (floating_point_store_memory_operand): Don't return true when reload_in_progress is true. Use INT14_OK_STRICT to check whether long displacements are always okay. --- gcc/config/pa/pa.cc | 30 ++++++++++++++++++------------ gcc/config/pa/pa.h | 16 ++++++++++------ gcc/config/pa/pa64-linux.h | 4 ++++ gcc/config/pa/predicates.md | 16 ++++++---------- 4 files changed, 38 insertions(+), 28 deletions(-) diff --git a/gcc/config/pa/pa.cc b/gcc/config/pa/pa.cc index 218c48b4ae00..565c948a9e61 100644 --- a/gcc/config/pa/pa.cc +++ b/gcc/config/pa/pa.cc @@ -10819,23 +10819,29 @@ pa_legitimate_address_p (machine_mode mode, rtx x, bool strict, code_helper) if (GET_CODE (index) == CONST_INT) { + /* Short 5-bit displacements always okay. */ if (INT_5_BITS (index)) return true; - /* When INT14_OK_STRICT is false, a secondary reload is needed - to adjust the displacement of SImode and DImode floating point - instructions but this may fail when the register also needs - reloading. So, we return false when STRICT is true. We - also reject long displacements for float mode addresses since - the majority of accesses will use floating point instructions - that don't support 14-bit offsets. */ - if (!INT14_OK_STRICT - && (strict || !(reload_in_progress || reload_completed)) - && mode != QImode - && mode != HImode) + if (!base14_operand (index, mode)) return false; - return base14_operand (index, mode); + /* Long 14-bit displacements always okay for these cases. */ + if (INT14_OK_STRICT + || mode == QImode + || mode == HImode) + return true; + + /* A secondary reload may be needed to adjust the displacement + of floating-point accesses when STRICT is nonzero. */ + if (strict) + return false; + + /* We get significantly better code if we allow long displacements + before reload for all accesses. Instructions must satisfy their + constraints after reload, so we must have an integer access. + Return true for both cases. */ + return true; } if (!TARGET_DISABLE_INDEXING diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h index e65af5229663..aba2cec73579 100644 --- a/gcc/config/pa/pa.h +++ b/gcc/config/pa/pa.h @@ -37,6 +37,11 @@ extern unsigned long total_code_bytes; #define TARGET_ELF32 0 #endif +/* Generate code for ELF64 ABI. */ +#ifndef TARGET_ELF64 +#define TARGET_ELF64 0 +#endif + /* Generate code for SOM 32bit ABI. */ #ifndef TARGET_SOM #define TARGET_SOM 0 @@ -823,12 +828,11 @@ extern int may_call_alloca; /* Nonzero if 14-bit offsets can be used for all loads and stores. This is not possible when generating PA 1.x code as floating point - loads and stores only support 5-bit offsets. Note that we do not - forbid the use of 14-bit offsets for integer modes. Instead, we - use secondary reloads to fix REG+D memory addresses for integer - mode floating-point loads and stores. + accesses only support 5-bit offsets. Note that we do not forbid + the use of 14-bit offsets prior to reload. Instead, we use secondary + reloads to fix REG+D memory addresses for floating-point accesses. - FIXME: the ELF32 linker clobbers the LSB of the FP register number + FIXME: the GNU ELF linker clobbers the LSB of the FP register number in PA 2.0 floating-point insns with long displacements. This is because R_PARISC_DPREL14WR and other relocations like it are not yet supported by GNU ld. For now, we reject long displacements @@ -836,7 +840,7 @@ extern int may_call_alloca; #define INT14_OK_STRICT \ (TARGET_SOFT_FLOAT \ - || (TARGET_PA_20 && !TARGET_ELF32)) + || (TARGET_PA_20 && !TARGET_ELF32 && !TARGET_ELF64)) /* The macros REG_OK_FOR..._P assume that the arg is a REG rtx and check its validity for a certain class. diff --git a/gcc/config/pa/pa64-linux.h b/gcc/config/pa/pa64-linux.h index f61c9e16f448..33fed023643d 100644 --- a/gcc/config/pa/pa64-linux.h +++ b/gcc/config/pa/pa64-linux.h @@ -17,6 +17,10 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ +/* 64-bit ELF target. */ +#undef TARGET_ELF64 +#define TARGET_ELF64 1 + #if 0 /* needs some work :-( */ /* If defined, this macro specifies a table of register pairs used to eliminate unneeded registers that point into the stack frame. */ diff --git a/gcc/config/pa/predicates.md b/gcc/config/pa/predicates.md index 08071b2d279e..1b50020e1deb 100644 --- a/gcc/config/pa/predicates.md +++ b/gcc/config/pa/predicates.md @@ -267,6 +267,10 @@ if (!INT_14_BITS (op)) return false; + /* Short displacement. */ + if (INT_5_BITS (op)) + return true; + /* Although this may not be necessary, we require that the base value is correctly aligned for its mode as this is assumed in the instruction encoding. */ @@ -304,15 +308,12 @@ if (reg_plus_base_memory_operand (op, mode)) { - if (reload_in_progress) - return true; - /* Extract CONST_INT operand. */ if (GET_CODE (op) == SUBREG) op = SUBREG_REG (op); op = XEXP (op, 0); op = REG_P (XEXP (op, 0)) ? XEXP (op, 1) : XEXP (op, 0); - return base14_operand (op, mode) || INT_5_BITS (op); + return base14_operand (op, mode); } if (!MEM_P (op)) @@ -341,17 +342,12 @@ if (reg_plus_base_memory_operand (op, mode)) { - if (reload_in_progress) - return true; - /* Extract CONST_INT operand. */ if (GET_CODE (op) == SUBREG) op = SUBREG_REG (op); op = XEXP (op, 0); op = REG_P (XEXP (op, 0)) ? XEXP (op, 1) : XEXP (op, 0); - return ((TARGET_PA_20 - && !TARGET_ELF32 - && base14_operand (op, mode)) + return ((INT14_OK_STRICT && base14_operand (op, mode)) || INT_5_BITS (op)); } From 8ebc7e0b0ddf4679cf09ed6836fac30ca01d3ba0 Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Thu, 16 Nov 2023 18:07:36 +0100 Subject: [PATCH 115/169] i386: Optimize QImode insn with high input registers Sometimes the compiler emits the following code with qi_ext_0: shrl $8, %eax addb %bh, %al Patch introduces new low part QImode insn patterns with both of their input arguments extracted from high register. This invalid insn is split after reload to a move from the high register and qi_ext_0 instruction. The combine pass is able to convert shift to zero/sign-extract sub-RTX, which we split to the optimal: movzbl %bh, %edx addb %ah, %dl PR target/78904 gcc/ChangeLog: * config/i386/i386.md (*addqi_ext2_0): New define_insn_and_split pattern. (*subqi_ext2_0): Ditto. (*qi_ext2_0): Ditto. gcc/testsuite/ChangeLog: * gcc.target/i386/pr78904-10.c: New test. * gcc.target/i386/pr78904-10a.c: New test. * gcc.target/i386/pr78904-10b.c: New test. --- gcc/config/i386/i386.md | 99 +++++++++++++++++++++ gcc/testsuite/gcc.target/i386/pr78904-10.c | 47 ++++++++++ gcc/testsuite/gcc.target/i386/pr78904-10a.c | 46 ++++++++++ gcc/testsuite/gcc.target/i386/pr78904-10b.c | 47 ++++++++++ 4 files changed, 239 insertions(+) create mode 100644 gcc/testsuite/gcc.target/i386/pr78904-10.c create mode 100644 gcc/testsuite/gcc.target/i386/pr78904-10a.c create mode 100644 gcc/testsuite/gcc.target/i386/pr78904-10b.c diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index f5407ab30549..1b5a794b9e54 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -7069,6 +7069,39 @@ (set_attr "type" "alu") (set_attr "mode" "QI")]) +(define_insn_and_split "*addqi_ext2_0" + [(set (match_operand:QI 0 "register_operand" "=&Q") + (plus:QI + (subreg:QI + (match_operator:SWI248 3 "extract_operator" + [(match_operand 1 "int248_register_operand" "Q") + (const_int 8) + (const_int 8)]) 0) + (subreg:QI + (match_operator:SWI248 4 "extract_operator" + [(match_operand 2 "int248_register_operand" "Q") + (const_int 8) + (const_int 8)]) 0))) + (clobber (reg:CC FLAGS_REG))] + "" + "#" + "&& reload_completed" + [(set (match_dup 0) + (subreg:QI + (match_op_dup 4 + [(match_dup 2) (const_int 8) (const_int 8)]) 0)) + (parallel + [(set (match_dup 0) + (plus:QI + (subreg:QI + (match_op_dup 3 + [(match_dup 1) (const_int 8) (const_int 8)]) 0) + (match_dup 0))) + (clobber (reg:CC FLAGS_REG))])] + "" + [(set_attr "type" "alu") + (set_attr "mode" "QI")]) + (define_expand "addqi_ext_1" [(parallel [(set (zero_extract:HI (match_operand:HI 0 "register_operand") @@ -7814,6 +7847,39 @@ (set_attr "type" "alu") (set_attr "mode" "QI")]) +(define_insn_and_split "*subqi_ext2_0" + [(set (match_operand:QI 0 "register_operand" "=&Q") + (minus:QI + (subreg:QI + (match_operator:SWI248 3 "extract_operator" + [(match_operand 1 "int248_register_operand" "Q") + (const_int 8) + (const_int 8)]) 0) + (subreg:QI + (match_operator:SWI248 4 "extract_operator" + [(match_operand 2 "int248_register_operand" "Q") + (const_int 8) + (const_int 8)]) 0))) + (clobber (reg:CC FLAGS_REG))] + "" + "#" + "&& reload_completed" + [(set (match_dup 0) + (subreg:QI + (match_op_dup 3 + [(match_dup 1) (const_int 8) (const_int 8)]) 0)) + (parallel + [(set (match_dup 0) + (minus:QI + (match_dup 0) + (subreg:QI + (match_op_dup 4 + [(match_dup 2) (const_int 8) (const_int 8)]) 0))) + (clobber (reg:CC FLAGS_REG))])] + "" + [(set_attr "type" "alu") + (set_attr "mode" "QI")]) + ;; Alternative 1 is needed to work around LRA limitation, see PR82524. (define_insn_and_split "*subqi_ext_1" [(set (zero_extract:SWI248 @@ -11815,6 +11881,39 @@ (set_attr "type" "alu") (set_attr "mode" "QI")]) +(define_insn_and_split "*qi_ext2_0" + [(set (match_operand:QI 0 "register_operand" "=&Q") + (any_logic:QI + (subreg:QI + (match_operator:SWI248 3 "extract_operator" + [(match_operand 1 "int248_register_operand" "Q") + (const_int 8) + (const_int 8)]) 0) + (subreg:QI + (match_operator:SWI248 4 "extract_operator" + [(match_operand 2 "int248_register_operand" "Q") + (const_int 8) + (const_int 8)]) 0))) + (clobber (reg:CC FLAGS_REG))] + "" + "#" + "&& reload_completed" + [(set (match_dup 0) + (subreg:QI + (match_op_dup 4 + [(match_dup 2) (const_int 8) (const_int 8)]) 0)) + (parallel + [(set (match_dup 0) + (any_logic:QI + (subreg:QI + (match_op_dup 3 + [(match_dup 1) (const_int 8) (const_int 8)]) 0) + (match_dup 0))) + (clobber (reg:CC FLAGS_REG))])] + "" + [(set_attr "type" "alu") + (set_attr "mode" "QI")]) + (define_expand "andqi_ext_1" [(parallel [(set (zero_extract:HI (match_operand:HI 0 "register_operand") diff --git a/gcc/testsuite/gcc.target/i386/pr78904-10.c b/gcc/testsuite/gcc.target/i386/pr78904-10.c new file mode 100644 index 000000000000..079629150df2 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr78904-10.c @@ -0,0 +1,47 @@ +/* PR target/78904 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -masm=att" } */ +/* { dg-additional-options "-mregparm=3" { target ia32 } } */ +/* { dg-final { scan-assembler-not "shr" } } */ + +struct S1 +{ + unsigned char pad1; + unsigned char val; + unsigned short pad2; +}; + +char test_and (struct S1 a, struct S1 b) +{ + return a.val & b.val; +} + +/* { dg-final { scan-assembler "\[ \t\]andb" } } */ + +char test_or (struct S1 a, struct S1 b) +{ + return a.val | b.val; +} + +/* { dg-final { scan-assembler "\[ \t\]orb" } } */ + +char test_xor (struct S1 a, struct S1 b) +{ + return a.val ^ b.val; +} + +/* { dg-final { scan-assembler "\[ \t\]xorb" } } */ + +char test_add (struct S1 a, struct S1 b) +{ + return a.val + b.val; +} + +/* { dg-final { scan-assembler "\[ \t\]addb" } } */ + +char test_sub (struct S1 a, struct S1 b) +{ + return a.val - b.val; +} + +/* { dg-final { scan-assembler "\[ \t\]subb" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr78904-10a.c b/gcc/testsuite/gcc.target/i386/pr78904-10a.c new file mode 100644 index 000000000000..101402867b0c --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr78904-10a.c @@ -0,0 +1,46 @@ +/* PR target/78904 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -masm=att" } */ +/* { dg-additional-options "-mregparm=3" { target ia32 } } */ +/* { dg-final { scan-assembler-not "shr" } } */ + +struct S1 +{ + unsigned char pad1; + unsigned char val; +}; + +char test_and (struct S1 a, struct S1 b) +{ + return a.val & b.val; +} + +/* { dg-final { scan-assembler "\[ \t\]andb" } } */ + +char test_or (struct S1 a, struct S1 b) +{ + return a.val | b.val; +} + +/* { dg-final { scan-assembler "\[ \t\]orb" } } */ + +char test_xor (struct S1 a, struct S1 b) +{ + return a.val ^ b.val; +} + +/* { dg-final { scan-assembler "\[ \t\]xorb" } } */ + +char test_add (struct S1 a, struct S1 b) +{ + return a.val + b.val; +} + +/* { dg-final { scan-assembler "\[ \t\]addb" } } */ + +char test_sub (struct S1 a, struct S1 b) +{ + return a.val - b.val; +} + +/* { dg-final { scan-assembler "\[ \t\]subb" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr78904-10b.c b/gcc/testsuite/gcc.target/i386/pr78904-10b.c new file mode 100644 index 000000000000..376acf81962b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr78904-10b.c @@ -0,0 +1,47 @@ +/* PR target/78904 */ +/* { dg-do compile { target { ! ia32 } } } */ +/* { dg-options "-O2 -masm=att" } */ +/* { dg-final { scan-assembler-not "shr" } } */ + +struct S1 +{ + unsigned char pad1; + unsigned char val; + unsigned short pad2; + unsigned int pad3; +}; + +char test_and (struct S1 a, struct S1 b) +{ + return a.val & b.val; +} + +/* { dg-final { scan-assembler "\[ \t\]andb" } } */ + +char test_or (struct S1 a, struct S1 b) +{ + return a.val | b.val; +} + +/* { dg-final { scan-assembler "\[ \t\]orb" } } */ + +char test_xor (struct S1 a, struct S1 b) +{ + return a.val ^ b.val; +} + +/* { dg-final { scan-assembler "\[ \t\]xorb" } } */ + +char test_add (struct S1 a, struct S1 b) +{ + return a.val + b.val; +} + +/* { dg-final { scan-assembler "\[ \t\]addb" } } */ + +char test_sub (struct S1 a, struct S1 b) +{ + return a.val - b.val; +} + +/* { dg-final { scan-assembler "\[ \t\]subb" } } */ From a671095c208c7cf5eb934b6a31bd9fb6f6640a6b Mon Sep 17 00:00:00 2001 From: Edwin Lu Date: Wed, 15 Nov 2023 13:22:11 -0800 Subject: [PATCH 116/169] RISC-V: Change unaligned fast/slow/avoid macros to misaligned [PR111557] Fix __riscv_unaligned_fast/slow/avoid macro name to __riscv_misaligned_fast/slow/avoid to be consistent with the RISC-V API Spec PR target/111557 gcc/ChangeLog: * config/riscv/riscv-c.cc (riscv_cpu_cpp_builtins): update macro name gcc/testsuite/ChangeLog: * gcc.target/riscv/attribute-1.c: update macro name * gcc.target/riscv/attribute-4.c: ditto * gcc.target/riscv/attribute-5.c: ditto * gcc.target/riscv/predef-align-1.c: ditto * gcc.target/riscv/predef-align-2.c: ditto * gcc.target/riscv/predef-align-3.c: ditto * gcc.target/riscv/predef-align-4.c: ditto * gcc.target/riscv/predef-align-5.c: ditto * gcc.target/riscv/predef-align-6.c: ditto Signed-off-by: Edwin Lu --- gcc/config/riscv/riscv-c.cc | 6 +++--- gcc/testsuite/gcc.target/riscv/attribute-1.c | 10 +++++----- gcc/testsuite/gcc.target/riscv/attribute-4.c | 8 ++++---- gcc/testsuite/gcc.target/riscv/attribute-5.c | 10 +++++----- gcc/testsuite/gcc.target/riscv/predef-align-1.c | 10 +++++----- gcc/testsuite/gcc.target/riscv/predef-align-2.c | 8 ++++---- gcc/testsuite/gcc.target/riscv/predef-align-3.c | 10 +++++----- gcc/testsuite/gcc.target/riscv/predef-align-4.c | 10 +++++----- gcc/testsuite/gcc.target/riscv/predef-align-5.c | 8 ++++---- gcc/testsuite/gcc.target/riscv/predef-align-6.c | 10 +++++----- 10 files changed, 45 insertions(+), 45 deletions(-) diff --git a/gcc/config/riscv/riscv-c.cc b/gcc/config/riscv/riscv-c.cc index b7f9ba204f7f..dd1bd0596fc2 100644 --- a/gcc/config/riscv/riscv-c.cc +++ b/gcc/config/riscv/riscv-c.cc @@ -109,11 +109,11 @@ riscv_cpu_cpp_builtins (cpp_reader *pfile) } if (riscv_user_wants_strict_align) - builtin_define_with_int_value ("__riscv_unaligned_avoid", 1); + builtin_define_with_int_value ("__riscv_misaligned_avoid", 1); else if (riscv_slow_unaligned_access_p) - builtin_define_with_int_value ("__riscv_unaligned_slow", 1); + builtin_define_with_int_value ("__riscv_misaligned_slow", 1); else - builtin_define_with_int_value ("__riscv_unaligned_fast", 1); + builtin_define_with_int_value ("__riscv_misaligned_fast", 1); if (TARGET_MIN_VLEN != 0) builtin_define_with_int_value ("__riscv_v_min_vlen", TARGET_MIN_VLEN); diff --git a/gcc/testsuite/gcc.target/riscv/attribute-1.c b/gcc/testsuite/gcc.target/riscv/attribute-1.c index abfb0b498e0c..a39efb3e6ff3 100644 --- a/gcc/testsuite/gcc.target/riscv/attribute-1.c +++ b/gcc/testsuite/gcc.target/riscv/attribute-1.c @@ -4,13 +4,13 @@ int foo() { /* In absence of -m[no-]strict-align, default mcpu is currently - set to rocket. rocket has slow_unaligned_access=true. */ -#if !defined(__riscv_unaligned_slow) -#error "__riscv_unaligned_slow is not set" + set to rocket. rocket has slow_misaligned_access=true. */ +#if !defined(__riscv_misaligned_slow) +#error "__riscv_misaligned_slow is not set" #endif -#if defined(__riscv_unaligned_avoid) || defined(__riscv_unaligned_fast) -#error "__riscv_unaligned_avoid or __riscv_unaligned_fast is unexpectedly set" +#if defined(__riscv_misaligned_avoid) || defined(__riscv_misaligned_fast) +#error "__riscv_misaligned_avoid or __riscv_misaligned_fast is unexpectedly set" #endif return 0; diff --git a/gcc/testsuite/gcc.target/riscv/attribute-4.c b/gcc/testsuite/gcc.target/riscv/attribute-4.c index 545f87cb8992..a5a95042a314 100644 --- a/gcc/testsuite/gcc.target/riscv/attribute-4.c +++ b/gcc/testsuite/gcc.target/riscv/attribute-4.c @@ -3,12 +3,12 @@ int foo() { -#if !defined(__riscv_unaligned_avoid) -#error "__riscv_unaligned_avoid is not set" +#if !defined(__riscv_misaligned_avoid) +#error "__riscv_misaligned_avoid is not set" #endif -#if defined(__riscv_unaligned_fast) || defined(__riscv_unaligned_slow) -#error "__riscv_unaligned_fast or __riscv_unaligned_slow is unexpectedly set" +#if defined(__riscv_misaligned_fast) || defined(__riscv_misaligned_slow) +#error "__riscv_misaligned_fast or __riscv_misaligned_slow is unexpectedly set" #endif return 0; diff --git a/gcc/testsuite/gcc.target/riscv/attribute-5.c b/gcc/testsuite/gcc.target/riscv/attribute-5.c index 753043c31e93..ad1a1811fa35 100644 --- a/gcc/testsuite/gcc.target/riscv/attribute-5.c +++ b/gcc/testsuite/gcc.target/riscv/attribute-5.c @@ -3,13 +3,13 @@ int foo() { -/* Default mcpu is rocket which has slow_unaligned_access=true. */ -#if !defined(__riscv_unaligned_slow) -#error "__riscv_unaligned_slow is not set" +/* Default mcpu is rocket which has slow_misaligned_access=true. */ +#if !defined(__riscv_misaligned_slow) +#error "__riscv_misaligned_slow is not set" #endif -#if defined(__riscv_unaligned_avoid) || defined(__riscv_unaligned_fast) -#error "__riscv_unaligned_avoid or __riscv_unaligned_fast is unexpectedly set" +#if defined(__riscv_misaligned_avoid) || defined(__riscv_misaligned_fast) +#error "__riscv_misaligned_avoid or __riscv_misaligned_fast is unexpectedly set" #endif return 0; diff --git a/gcc/testsuite/gcc.target/riscv/predef-align-1.c b/gcc/testsuite/gcc.target/riscv/predef-align-1.c index 9dde37a721ec..fb8c5f74035b 100644 --- a/gcc/testsuite/gcc.target/riscv/predef-align-1.c +++ b/gcc/testsuite/gcc.target/riscv/predef-align-1.c @@ -3,13 +3,13 @@ int main() { -/* thead-c906 default is cpu tune param unaligned access fast */ -#if !defined(__riscv_unaligned_fast) -#error "__riscv_unaligned_fast is not set" +/* thead-c906 default is cpu tune param misaligned access fast */ +#if !defined(__riscv_misaligned_fast) +#error "__riscv_misaligned_fast is not set" #endif -#if defined(__riscv_unaligned_avoid) || defined(__riscv_unaligned_slow) -#error "__riscv_unaligned_avoid or __riscv_unaligned_slow is unexpectedly set" +#if defined(__riscv_misaligned_avoid) || defined(__riscv_misaligned_slow) +#error "__riscv_misaligned_avoid or __riscv_misaligned_slow is unexpectedly set" #endif return 0; diff --git a/gcc/testsuite/gcc.target/riscv/predef-align-2.c b/gcc/testsuite/gcc.target/riscv/predef-align-2.c index 33d604f5aa0b..50ab67e04f5d 100644 --- a/gcc/testsuite/gcc.target/riscv/predef-align-2.c +++ b/gcc/testsuite/gcc.target/riscv/predef-align-2.c @@ -3,12 +3,12 @@ int main() { -#if !defined(__riscv_unaligned_avoid) -#error "__riscv_unaligned_avoid is not set" +#if !defined(__riscv_misaligned_avoid) +#error "__riscv_misaligned_avoid is not set" #endif -#if defined(__riscv_unaligned_fast) || defined(__riscv_unaligned_slow) -#error "__riscv_unaligned_fast or __riscv_unaligned_slow is unexpectedly set" +#if defined(__riscv_misaligned_fast) || defined(__riscv_misaligned_slow) +#error "__riscv_misaligned_fast or __riscv_misaligned_slow is unexpectedly set" #endif return 0; diff --git a/gcc/testsuite/gcc.target/riscv/predef-align-3.c b/gcc/testsuite/gcc.target/riscv/predef-align-3.c index daf5718a39fb..5c586907cb0f 100644 --- a/gcc/testsuite/gcc.target/riscv/predef-align-3.c +++ b/gcc/testsuite/gcc.target/riscv/predef-align-3.c @@ -3,13 +3,13 @@ int main() { -/* thead-c906 default is cpu tune param unaligned access fast */ -#if !defined(__riscv_unaligned_fast) -#error "__riscv_unaligned_fast is not set" +/* thead-c906 default is cpu tune param misaligned access fast */ +#if !defined(__riscv_misaligned_fast) +#error "__riscv_misaligned_fast is not set" #endif -#if defined(__riscv_unaligned_avoid) || defined(__riscv_unaligned_slow) -#error "__riscv_unaligned_avoid or __riscv_unaligned_slow is unexpectedly set" +#if defined(__riscv_misaligned_avoid) || defined(__riscv_misaligned_slow) +#error "__riscv_misaligned_avoid or __riscv_misaligned_slow is unexpectedly set" #endif return 0; diff --git a/gcc/testsuite/gcc.target/riscv/predef-align-4.c b/gcc/testsuite/gcc.target/riscv/predef-align-4.c index d46a46f252d1..6fbdc7f7d414 100644 --- a/gcc/testsuite/gcc.target/riscv/predef-align-4.c +++ b/gcc/testsuite/gcc.target/riscv/predef-align-4.c @@ -3,13 +3,13 @@ int main() { -/* rocket default is cpu tune param unaligned access slow */ -#if !defined(__riscv_unaligned_slow) -#error "__riscv_unaligned_slow is not set" +/* rocket default is cpu tune param misaligned access slow */ +#if !defined(__riscv_misaligned_slow) +#error "__riscv_misaligned_slow is not set" #endif -#if defined(__riscv_unaligned_avoid) || defined(__riscv_unaligned_fast) -#error "__riscv_unaligned_avoid or __riscv_unaligned_fast is unexpectedly set" +#if defined(__riscv_misaligned_avoid) || defined(__riscv_misaligned_fast) +#error "__riscv_misaligned_avoid or __riscv_misaligned_fast is unexpectedly set" #endif return 0; diff --git a/gcc/testsuite/gcc.target/riscv/predef-align-5.c b/gcc/testsuite/gcc.target/riscv/predef-align-5.c index 3aa25f8e0e00..4a40081d86d8 100644 --- a/gcc/testsuite/gcc.target/riscv/predef-align-5.c +++ b/gcc/testsuite/gcc.target/riscv/predef-align-5.c @@ -3,12 +3,12 @@ int main() { -#if !defined(__riscv_unaligned_avoid) -#error "__riscv_unaligned_avoid is not set" +#if !defined(__riscv_misaligned_avoid) +#error "__riscv_misaligned_avoid is not set" #endif -#if defined(__riscv_unaligned_fast) || defined(__riscv_unaligned_slow) -#error "__riscv_unaligned_fast or __riscv_unaligned_slow is unexpectedly set" +#if defined(__riscv_misaligned_fast) || defined(__riscv_misaligned_slow) +#error "__riscv_misaligned_fast or __riscv_misaligned_slow is unexpectedly set" #endif return 0; diff --git a/gcc/testsuite/gcc.target/riscv/predef-align-6.c b/gcc/testsuite/gcc.target/riscv/predef-align-6.c index cb64d7e77789..18eb72cfc602 100644 --- a/gcc/testsuite/gcc.target/riscv/predef-align-6.c +++ b/gcc/testsuite/gcc.target/riscv/predef-align-6.c @@ -3,13 +3,13 @@ int main() { -/* rocket default is cpu tune param unaligned access slow */ -#if !defined(__riscv_unaligned_slow) -#error "__riscv_unaligned_slow is not set" +/* rocket default is cpu tune param misaligned access slow */ +#if !defined(__riscv_misaligned_slow) +#error "__riscv_misaligned_slow is not set" #endif -#if defined(__riscv_unaligned_avoid) || defined(__riscv_unaligned_fast) -#error "__riscv_unaligned_avoid or __riscv_unaligned_fast is unexpectedly set" +#if defined(__riscv_misaligned_avoid) || defined(__riscv_misaligned_fast) +#error "__riscv_misaligned_avoid or __riscv_misaligned_fast is unexpectedly set" #endif return 0; From 1c1ee8097c3d96c74107a317f68b0ad40cf9207b Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Thu, 16 Nov 2023 22:41:53 +0100 Subject: [PATCH 117/169] Fix warning on new Ada testcase gcc/testsuite/ * gnat.dg/varsize4.adb (Func): Initialize Byte_Read parameter. --- gcc/testsuite/gnat.dg/varsize4.adb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/testsuite/gnat.dg/varsize4.adb b/gcc/testsuite/gnat.dg/varsize4.adb index 3d0430de5aab..0ea5135b7fc8 100644 --- a/gcc/testsuite/gnat.dg/varsize4.adb +++ b/gcc/testsuite/gnat.dg/varsize4.adb @@ -2,9 +2,10 @@ package body Varsize4 is - function Func (bytes_read : out Natural) return Arr is + function Func (Bytes_Read : out Natural) return Arr is Ret : Arr := (others => False); begin + Bytes_Read := 0; return Ret; end; From 9e9279fadbd1c673c875b9d20261d2de0473f63f Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Mon, 13 Nov 2023 20:18:34 +0000 Subject: [PATCH 118/169] Only allow (copysign x, NEG_CONST) -> (fneg (fabs x)) simplification for constant folding [PR112483] On targets with native copysign instructions, (copysign x, -1) is usually more efficient than (fneg (fabs x)). Since r14-5284, in the middle end we always optimize (fneg (fabs x)) to (copysign x, -1), not vice versa. If the target does not support native fcopysign, expand_COPYSIGN will expand it as (fneg (fabs x)) anyway. gcc/ChangeLog: PR rtl-optimization/112483 * simplify-rtx.cc (simplify_binary_operation_1) : Call simplify_unary_operation for NEG instead of simplify_gen_unary. --- gcc/simplify-rtx.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/simplify-rtx.cc b/gcc/simplify-rtx.cc index 2d2e5a3c1ca6..f3745d86aeaa 100644 --- a/gcc/simplify-rtx.cc +++ b/gcc/simplify-rtx.cc @@ -4392,7 +4392,7 @@ simplify_ashift: real_convert (&f1, mode, CONST_DOUBLE_REAL_VALUE (trueop1)); rtx tmp = simplify_gen_unary (ABS, mode, op0, mode); if (REAL_VALUE_NEGATIVE (f1)) - tmp = simplify_gen_unary (NEG, mode, tmp, mode); + tmp = simplify_unary_operation (NEG, mode, tmp, mode); return tmp; } if (GET_CODE (op0) == NEG || GET_CODE (op0) == ABS) From 5cb13173e85537a8a423b7b22b60ca3b6505f91e Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Fri, 17 Nov 2023 00:17:33 +0000 Subject: [PATCH 119/169] Daily bump. --- ChangeLog | 4 + gcc/ChangeLog | 151 +++++++++++++++ gcc/DATESTAMP | 2 +- gcc/ada/ChangeLog | 5 + gcc/cp/ChangeLog | 21 +++ gcc/testsuite/ChangeLog | 113 ++++++++++++ libcc1/ChangeLog | 5 + libstdc++-v3/ChangeLog | 394 ++++++++++++++++++++++++++++++++++++++++ 8 files changed, 694 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 3fd01d64af62..55cd7f039c5f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2023-11-16 Michal Jires + + * MAINTAINERS: Add myself. + 2023-11-13 Arsen Arsenović PR bootstrap/12596 diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f72344d7cc03..0140420a753b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,154 @@ +2023-11-16 Andrew Pinski + + PR rtl-optimization/112483 + * simplify-rtx.cc (simplify_binary_operation_1) : + Call simplify_unary_operation for NEG instead of + simplify_gen_unary. + +2023-11-16 Edwin Lu + + PR target/111557 + * config/riscv/riscv-c.cc (riscv_cpu_cpp_builtins): update macro name + +2023-11-16 Uros Bizjak + + PR target/78904 + * config/i386/i386.md (*addqi_ext2_0): + New define_insn_and_split pattern. + (*subqi_ext2_0): Ditto. + (*qi_ext2_0): Ditto. + +2023-11-16 John David Anglin + + PR rtl-optimization/112415 + * config/pa/pa.cc (pa_legitimate_address_p): Allow 14-bit + displacements before reload. Simplify logic flow. Revise + comments. + * config/pa/pa.h (TARGET_ELF64): New define. + (INT14_OK_STRICT): Update define and comment. + * config/pa/pa64-linux.h (TARGET_ELF64): Define. + * config/pa/predicates.md (base14_operand): Don't check + alignment of short displacements. + (integer_store_memory_operand): Don't return true when + reload_in_progress is true. Remove INT_5_BITS check. + (floating_point_store_memory_operand): Don't return true when + reload_in_progress is true. Use INT14_OK_STRICT to check + whether long displacements are always okay. + +2023-11-16 Uros Bizjak + + PR target/112567 + * config/i386/i386.md (*qi_ext_1_slp): + Fix generation of invalid RTX in split pattern. + +2023-11-16 David Malcolm + + * diagnostic.cc (diagnostic_context::set_option_hooks): Add + "lang_mask" param. + * diagnostic.h (diagnostic_context::option_enabled_p): Update for + move of m_lang_mask. + (diagnostic_context::set_option_hooks): Add "lang_mask" param. + (diagnostic_context::get_lang_mask): New. + (diagnostic_context::m_lang_mask): Move into m_option_callbacks, + thus making private. + * lto-wrapper.cc (main): Update for new lang_mask param of + set_option_hooks. + * toplev.cc (init_asm_output): Use get_lang_mask. + (general_init): Move initialization of global_dc's lang_mask to + new lang_mask param of set_option_hooks. + +2023-11-16 Tamar Christina + + PR tree-optimization/111878 + * tree-vect-loop-manip.cc (find_loop_location): Skip edges check if + latch incorrect. + +2023-11-16 Kito Cheng + + * config.gcc (riscv): Add riscv-target-attr.o. + * config/riscv/riscv-protos.h (riscv_declare_function_size) New. + (riscv_option_valid_attribute_p): New. + (riscv_override_options_internal): New. + (struct riscv_tune_info): New. + (riscv_parse_tune): New. + * config/riscv/riscv-target-attr.cc + (class riscv_target_attr_parser): New. + (struct riscv_attribute_info): New. + (riscv_attributes): New. + (riscv_target_attr_parser::parse_arch): New. + (riscv_target_attr_parser::handle_arch): New. + (riscv_target_attr_parser::handle_cpu): New. + (riscv_target_attr_parser::handle_tune): New. + (riscv_target_attr_parser::update_settings): New. + (riscv_process_one_target_attr): New. + (num_occurences_in_str): New. + (riscv_process_target_attr): New. + (riscv_option_valid_attribute_p): New. + * config/riscv/riscv.cc: Include target-globals.h and + riscv-subset.h. + (struct riscv_tune_info): Move to riscv-protos.h. + (get_tune_str): New. + (riscv_parse_tune): New parameter null_p. + (riscv_declare_function_size): New. + (riscv_option_override): Build target_option_default_node and + target_option_current_node. + (riscv_save_restore_target_globals): New. + (riscv_option_restore): New. + (riscv_previous_fndecl): New. + (riscv_set_current_function): Apply the target attribute. + (TARGET_OPTION_RESTORE): Define. + (TARGET_OPTION_VALID_ATTRIBUTE_P): Ditto. + * config/riscv/riscv.h (SWITCHABLE_TARGET): Define to 1. + (ASM_DECLARE_FUNCTION_SIZE) Define. + * config/riscv/riscv.opt (mtune=): Add Save attribute. + (mcpu=): Ditto. + (mcmodel=): Ditto. + * config/riscv/t-riscv: Add build rule for riscv-target-attr.o + * doc/extend.texi: Add doc for target attribute. + +2023-11-16 Kito Cheng + + PR target/112478 + * config/riscv/riscv.cc (riscv_save_return_addr_reg_p): Check ra + is ever lived. + +2023-11-16 liuhongt + + PR target/112532 + * config/i386/mmx.md (*vec_dup): Extend for V4HI and + V2HI. + +2023-11-16 Jakub Jelinek + + PR target/112526 + * config/i386/i386.md + (mov imm,%rax; mov %rdi,%rdx; mulx %rax -> mov imm,%rdx; mulx %rdi): + Verify in define_peephole2 that operands[2] dies or is overwritten + at the end of multiplication. + +2023-11-16 Jakub Jelinek + + PR tree-optimization/112536 + * tree-vect-slp.cc (arg0_map): New variable. + (vect_get_operand_map): For IFN_CLZ or IFN_CTZ, return arg0_map. + +2023-11-16 Juzhe-Zhong + + PR middle-end/112554 + * tree-vect-loop.cc (vect_determine_partial_vectors_and_peeling): + Clear SELECT_VL_P for non-partial vectorization. + +2023-11-16 Hongyu Wang + + * config/i386/sse.md (vec_extract_hi_): Add noavx512vl + alternative with attr addr gpr16 and "jm" constraint. + (vec_extract_hi_): Likewise for SF vector modes. + (@vec_extract_hi_): Likewise. + (*vec_extractv2ti): Likewise. + (vec_set_hi_): Likewise. + * config/i386/mmx.md (@sse4_1_insertps_): Correct gpr16 attr for + each alternative. + 2023-11-15 Uros Bizjak PR target/78904 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 7c322b01344c..01fc321fe049 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20231116 +20231117 diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index c011deb2b24d..45c3f375a211 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2023-11-16 Eric Botcazou + + * gcc-interface/decl.cc (gnat_to_gnu_subprog_type): Also create a + TYPE_DECL for the return type built for the CI/CO mechanism. + 2023-11-10 Andris Pavēnis * expect.c (__gnat_waitpid): fix syntax errors diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7702a660653a..1feb5b38d48c 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,24 @@ +2023-11-16 Jakub Jelinek + + PR c++/112365 + * class.cc (layout_class_type): Don't + SET_DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD on FIELD_DECLs with + error_mark_node type. + +2023-11-16 Patrick Palka + + PR c++/111703 + PR c++/107939 + * constexpr.cc (potential_constant_expression_1) : + Fix FUNCTION_POINTER_TYPE_P test. + +2023-11-16 Marek Polacek + + PR c++/112410 + * parser.cc (cp_parser_direct_declarator): Maybe call + abort_fully_implicit_template if it turned out the parameter list was + ill-formed. + 2023-11-15 Bernhard Reutner-Fischer * tree.cc (build_cplus_array_type): Revert using the macro diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 77eb93d0340b..a9728cda62ae 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,116 @@ +2023-11-16 Eric Botcazou + + * gnat.dg/varsize4.adb (Func): Initialize Byte_Read parameter. + +2023-11-16 Edwin Lu + + PR target/111557 + * gcc.target/riscv/attribute-1.c: update macro name + * gcc.target/riscv/attribute-4.c: ditto + * gcc.target/riscv/attribute-5.c: ditto + * gcc.target/riscv/predef-align-1.c: ditto + * gcc.target/riscv/predef-align-2.c: ditto + * gcc.target/riscv/predef-align-3.c: ditto + * gcc.target/riscv/predef-align-4.c: ditto + * gcc.target/riscv/predef-align-5.c: ditto + * gcc.target/riscv/predef-align-6.c: ditto + +2023-11-16 Uros Bizjak + + PR target/78904 + * gcc.target/i386/pr78904-10.c: New test. + * gcc.target/i386/pr78904-10a.c: New test. + * gcc.target/i386/pr78904-10b.c: New test. + +2023-11-16 Eric Botcazou + + * gnat.dg/varsize4.ads, gnat.dg/varsize4.adb: New test. + * gnat.dg/varsize4_pkg.ads: New helper. + +2023-11-16 Jakub Jelinek + + PR c++/112365 + * g++.dg/cpp0x/pr112365.C: New test. + +2023-11-16 Patrick Palka + + PR c++/98614 + PR c++/104802 + * g++.dg/cpp1z/nontype-auto22.C: New test. + * g++.dg/cpp2a/concepts-partial-spec14.C: New test. + +2023-11-16 Patrick Palka + + PR c++/111703 + PR c++/107939 + * g++.dg/cpp2a/concepts-fn8.C: Extend test. + * g++.dg/diagnostic/constexpr4.C: New test. + +2023-11-16 Tamar Christina + + PR tree-optimization/111878 + * gcc.dg/graphite/pr111878.c: New test. + +2023-11-16 Florian Weimer + + * gcc.c-torture/execute/931004-13.c (main): Fix mistakenly swapped + int/void types. + +2023-11-16 Kito Cheng + + * gcc.target/riscv/target-attr-01.c: New. + * gcc.target/riscv/target-attr-02.c: Ditto. + * gcc.target/riscv/target-attr-03.c: Ditto. + * gcc.target/riscv/target-attr-04.c: Ditto. + * gcc.target/riscv/target-attr-05.c: Ditto. + * gcc.target/riscv/target-attr-06.c: Ditto. + * gcc.target/riscv/target-attr-07.c: Ditto. + * gcc.target/riscv/target-attr-bad-01.c: Ditto. + * gcc.target/riscv/target-attr-bad-02.c: Ditto. + * gcc.target/riscv/target-attr-bad-03.c: Ditto. + * gcc.target/riscv/target-attr-bad-04.c: Ditto. + * gcc.target/riscv/target-attr-bad-05.c: Ditto. + * gcc.target/riscv/target-attr-bad-06.c: Ditto. + * gcc.target/riscv/target-attr-bad-07.c: Ditto. + * gcc.target/riscv/target-attr-bad-08.c: Ditto. + * gcc.target/riscv/target-attr-bad-09.c: Ditto. + * gcc.target/riscv/target-attr-bad-10.c: Ditto. + +2023-11-16 Kito Cheng + + PR target/112478 + * gcc.target/riscv/pr112478.c: New. + +2023-11-16 liuhongt + + * gcc.target/i386/pr112532.c: New test. + +2023-11-16 Jakub Jelinek + + PR target/112526 + * gcc.target/i386/bmi2-pr112526.c: New test. + +2023-11-16 Jakub Jelinek + + PR tree-optimization/112536 + * gcc.dg/pr112536.c: New test. + +2023-11-16 Richard Biener + + PR tree-optimization/112282 + * gcc.dg/torture/pr112282.c: Do not use __assert_fail. + +2023-11-16 Juzhe-Zhong + + PR middle-end/112554 + * gcc.target/riscv/rvv/autovec/pr112554.c: New test. + +2023-11-16 Marek Polacek + + PR c++/112410 + * g++.dg/cpp23/auto-fncast13.C: New test. + * g++.dg/cpp23/auto-fncast14.C: New test. + 2023-11-15 Uros Bizjak PR target/78904 diff --git a/libcc1/ChangeLog b/libcc1/ChangeLog index ba05a7ece850..3582cf620500 100644 --- a/libcc1/ChangeLog +++ b/libcc1/ChangeLog @@ -1,3 +1,8 @@ +2023-11-16 Tom Tromey + + * libcc1plugin.cc (plugin_build_enum_type): Set + ENUM_UNDERLYING_TYPE. + 2023-10-22 Iain Sandoe * configure: Regenerate. diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 5ee3cf86312b..2a5d0f9180b1 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,397 @@ +2023-11-16 Jonathan Wakely + + PR libstdc++/112564 + * include/std/stacktrace (formatter::format): Format according + to format-spec. + * include/std/thread (formatter::format): Use _Align_right as + default. + * testsuite/19_diagnostics/stacktrace/output.cc: Check + fill-and-align handling. Change compile test to run. + * testsuite/30_threads/thread/id/output.cc: Check fill-and-align + handling. + +2023-11-16 Jonathan Wakely + + PR libstdc++/111667 + * include/Makefile.am: Add new header. + * include/Makefile.in: Regenerate. + * include/bits/out_ptr.h: New file. + * include/bits/shared_ptr.h (__is_shared_ptr): Move definition + to here ... + * include/bits/shared_ptr_atomic.h (__is_shared_ptr): ... from + here. + * include/bits/shared_ptr_base.h (__shared_count): Declare + out_ptr_t as a friend. + (_Sp_counted_deleter, __shared_ptr): Likewise. + * include/bits/unique_ptr.h (unique_ptr, unique_ptr): + Declare out_ptr_t and inout_ptr_t as friends. + (__is_unique_ptr): Define new variable template. + * include/bits/version.def (out_ptr): Define. + * include/bits/version.h: Regenerate. + * include/std/memory: Include new header. + * testsuite/20_util/smartptr.adapt/inout_ptr/1.cc: New test. + * testsuite/20_util/smartptr.adapt/inout_ptr/2.cc: New test. + * testsuite/20_util/smartptr.adapt/inout_ptr/shared_ptr_neg.cc: + New test. + * testsuite/20_util/smartptr.adapt/inout_ptr/void_ptr.cc: New + test. + * testsuite/20_util/smartptr.adapt/out_ptr/1.cc: New test. + * testsuite/20_util/smartptr.adapt/out_ptr/2.cc: New test. + * testsuite/20_util/smartptr.adapt/out_ptr/shared_ptr_neg.cc: + New test. + * testsuite/20_util/smartptr.adapt/out_ptr/void_ptr.cc: New + test. + +2023-11-16 Jonathan Wakely + + * include/bits/algorithmfwd.h: Do not define standard feature + test macro here. + * include/bits/align.h: Likewise. Test internal macros instead + of standard macros. + * include/bits/alloc_traits.h: Likewise. + * include/bits/allocator.h: Likewise. + * include/bits/atomic_base.h: Likewise. + * include/bits/atomic_timed_wait.h: Likewise. + * include/bits/atomic_wait.h: Likewise. + * include/bits/basic_string.h: Likewise. + * include/bits/basic_string.tcc: Likewise. + * include/bits/char_traits.h: Likewise. + * include/bits/chrono.h: Likewise. + * include/bits/cow_string.h: Likewise. + * include/bits/forward_list.h: Likewise. + * include/bits/hashtable.h: Likewise. + * include/bits/ios_base.h: Likewise. + * include/bits/memory_resource.h: Likewise. + * include/bits/move.h: Likewise. + * include/bits/move_only_function.h: Likewise. + * include/bits/node_handle.h: Likewise. + * include/bits/ptr_traits.h: Likewise. + * include/bits/range_access.h: Likewise. + * include/bits/ranges_algo.h: Likewise. + * include/bits/ranges_cmp.h: Likewise. + * include/bits/ranges_util.h: Likewise. + * include/bits/semaphore_base.h: Likewise. + * include/bits/shared_ptr.h: Likewise. + * include/bits/shared_ptr_atomic.h: Likewise. + * include/bits/shared_ptr_base.h: Likewise. + * include/bits/stl_algo.h: Likewise. + * include/bits/stl_algobase.h: Likewise. + * include/bits/stl_function.h: Likewise. + * include/bits/stl_iterator.h: Likewise. + * include/bits/stl_list.h: Likewise. + * include/bits/stl_map.h: Likewise. + * include/bits/stl_pair.h: Likewise. + * include/bits/stl_queue.h: Likewise. + * include/bits/stl_stack.h: Likewise. + * include/bits/stl_tree.h: Likewise. + * include/bits/stl_uninitialized.h: Likewise. + * include/bits/stl_vector.h: Likewise. + * include/bits/unique_ptr.h: Likewise. + * include/bits/unordered_map.h: Likewise. + * include/bits/uses_allocator_args.h: Likewise. + * include/bits/utility.h: Likewise. + * include/bits/erase_if.h: Add comment. + * include/std/algorithm: Define standard feature test macros + here. + * include/std/atomic: Likewise. + * include/std/array: Likewise. + * include/std/chrono: Likewise. + * include/std/condition_variable: Likewise. + * include/std/deque: Likewise. + * include/std/format: Likewise. + * include/std/functional: Likewise. + * include/std/forward_list: Likewise. + * include/std/ios: Likewise. + * include/std/iterator: Likewise. + * include/std/list: Likewise. + * include/std/map: Likewise. + * include/std/memory: Likewise. + * include/std/numeric: Likewise. + * include/std/queue: Likewise. + * include/std/ranges: Likewise. + * include/std/regex: Likewise. + * include/std/set: Likewise. + * include/std/stack: Likewise. + * include/std/stop_token: Likewise. + * include/std/string: Likewise. + * include/std/string_view: + * include/std/tuple: Likewise. + * include/std/unordered_map: + * include/std/unordered_set: + * include/std/utility: Likewise. + * include/std/vector: Likewise. + * include/std/scoped_allocator: Query internal macros instead of + standard macros. + +2023-11-16 Jonathan Wakely + + * testsuite/18_support/byte/requirements.cc: Disable PCH. + * testsuite/18_support/destroying_delete.cc: Likewise. + * testsuite/18_support/source_location/1.cc: Likewise. + * testsuite/18_support/source_location/version.cc: Likewise. + * testsuite/18_support/type_info/constexpr.cc: Likewise. + * testsuite/18_support/uncaught_exceptions/uncaught_exceptions.cc: + Likewise. + * testsuite/19_diagnostics/stacktrace/output.cc: Likewise. + * testsuite/19_diagnostics/stacktrace/synopsis.cc: Likewise. + * testsuite/19_diagnostics/stacktrace/version.cc: Likewise. + * testsuite/20_util/addressof/requirements/constexpr.cc: + Likewise. + * testsuite/20_util/allocator_traits/header-2.cc: Likewise. + * testsuite/20_util/allocator_traits/header.cc: Likewise. + * testsuite/20_util/as_const/1.cc: Likewise. Likewise. + * testsuite/20_util/bitset/cons/constexpr_c++23.cc: Likewise. + * testsuite/20_util/bitset/version.cc: Likewise. + * testsuite/20_util/duration/arithmetic/constexpr_c++17.cc: + Likewise. + * testsuite/20_util/duration_cast/rounding.cc: Likewise. + * testsuite/20_util/enable_shared_from_this/members/weak_from_this.cc: + Likewise. + * testsuite/20_util/exchange/constexpr.cc: Likewise. + * testsuite/20_util/expected/synopsis.cc: Likewise. + * testsuite/20_util/expected/version.cc: Likewise. + * testsuite/20_util/function_objects/bind_front/1.cc: Likewise. + * testsuite/20_util/function_objects/bind_front/2.cc: Likewise. + * testsuite/20_util/function_objects/invoke/3.cc: Likewise. + * testsuite/20_util/function_objects/invoke/4.cc: Likewise. + * testsuite/20_util/function_objects/invoke/constexpr.cc: + Likewise. + * testsuite/20_util/function_objects/invoke/version.cc: + Likewise. + * testsuite/20_util/function_objects/searchers.cc: Likewise. + * testsuite/20_util/integer_comparisons/1.cc: Likewise. + * testsuite/20_util/integer_comparisons/2.cc: Likewise. + * testsuite/20_util/is_bounded_array/value.cc: Likewise. + * testsuite/20_util/is_layout_compatible/value.cc: Likewise. + * testsuite/20_util/is_layout_compatible/version.cc: Likewise. + * testsuite/20_util/is_nothrow_swappable/requirements/explicit_instantiation.cc: + Likewise. + * testsuite/20_util/is_nothrow_swappable/requirements/typedefs.cc: + Likewise. + * testsuite/20_util/is_nothrow_swappable/value.cc: Likewise. + * testsuite/20_util/is_nothrow_swappable/value.h: Likewise. + * testsuite/20_util/is_nothrow_swappable_with/requirements/explicit_instantiation.cc: + Remove redundant checks already tested elsewhere. + * testsuite/20_util/is_nothrow_swappable_with/requirements/typedefs.cc: + Likewise. + * testsuite/20_util/is_nothrow_swappable_with/value.cc: Disable + PCH. + * testsuite/20_util/is_pointer_interconvertible/value.cc: + Likewise. + * testsuite/20_util/is_pointer_interconvertible/version.cc: + Likewise. + * testsuite/20_util/is_scoped_enum/value.cc: Likewise. + * testsuite/20_util/is_scoped_enum/version.cc: Likewise. + * testsuite/20_util/is_swappable/requirements/explicit_instantiation.cc: + Remove redundant checks already tested elsewhere. + * testsuite/20_util/is_swappable/requirements/typedefs.cc: + Remove redundant checks already tested elsewhere. + * testsuite/20_util/is_swappable/value.cc: Disable PCH. + * testsuite/20_util/is_swappable/value.h: Reorder headers. + * testsuite/20_util/is_swappable_with/requirements/explicit_instantiation.cc: + Remove redundant checks already tested elsewhere. + * testsuite/20_util/is_swappable_with/requirements/typedefs.cc: + Remove redundant checks already tested elsewhere. + * testsuite/20_util/is_swappable_with/value.cc: Disable PCH. + * testsuite/20_util/is_unbounded_array/value.cc: Likewise. + * testsuite/20_util/move_only_function/cons.cc: Likewise. + * testsuite/20_util/move_only_function/version.cc: Likewise. + * testsuite/20_util/optional/monadic/and_then.cc: Likewise. + * testsuite/20_util/optional/requirements.cc: Likewise. + * testsuite/20_util/optional/version.cc: Likewise. + * testsuite/20_util/owner_less/void.cc: Likewise. + * testsuite/20_util/reference_from_temporary/value.cc: Likewise. + * testsuite/20_util/reference_from_temporary/version.cc: + Likewise. + * testsuite/20_util/shared_ptr/atomic/atomic_shared_ptr.cc: + Likewise. + * testsuite/20_util/shared_ptr/creation/array.cc: Likewise. + * testsuite/20_util/shared_ptr/creation/overwrite.cc: Likewise. + * testsuite/20_util/shared_ptr/creation/version.cc: Likewise. + * testsuite/20_util/time_point_cast/rounding.cc: Likewise. + * testsuite/20_util/to_chars/constexpr.cc: Likewise. + * testsuite/20_util/to_chars/result.cc: Likewise. + * testsuite/20_util/to_chars/version.cc: Likewise. + * testsuite/20_util/to_underlying/1.cc: Likewise. + * testsuite/20_util/to_underlying/version.cc: Likewise. + * testsuite/20_util/tuple/apply/1.cc: Likewise. + * testsuite/20_util/tuple/cons/constexpr_allocator_arg_t.cc: + Likewise. + * testsuite/20_util/tuple/make_from_tuple/1.cc: Likewise. + * testsuite/20_util/tuple/p2321r2.cc: Likewise. + * testsuite/20_util/tuple/tuple_element_t.cc: Likewise. + * testsuite/20_util/unique_ptr/cons/constexpr_c++20.cc: + Likewise. + * testsuite/20_util/unique_ptr/creation/for_overwrite.cc: + Likewise. + * testsuite/20_util/unreachable/1.cc: Likewise. + * testsuite/20_util/unreachable/version.cc: Likewise. + * testsuite/20_util/unwrap_reference/1.cc: Likewise. + * testsuite/20_util/unwrap_reference/3.cc: Likewise. + * testsuite/20_util/variant/constexpr.cc: Likewise. + * testsuite/20_util/variant/version.cc: Likewise. + * testsuite/20_util/variant/visit_inherited.cc: Likewise. + * testsuite/20_util/void_t/1.cc: Likewise. + * testsuite/21_strings/basic_string/capacity/char/resize_and_overwrite.cc: + Likewise. + * testsuite/21_strings/basic_string/cons/char/constexpr.cc: + Likewise. + * testsuite/21_strings/basic_string/cons/wchar_t/constexpr.cc: + Likewise. + * testsuite/21_strings/basic_string/erasure.cc: Likewise. + * testsuite/21_strings/basic_string/numeric_conversions/char/to_string_float.cc: + Likewise. + * testsuite/21_strings/basic_string/numeric_conversions/version.cc: + Likewise. + * testsuite/21_strings/basic_string/version.cc: Likewise. + * testsuite/21_strings/basic_string_view/operations/contains/char.cc: + Likewise. + * testsuite/21_strings/basic_string_view/operations/contains/char/2.cc: + Likewise. + * testsuite/21_strings/basic_string_view/operations/copy/char/constexpr.cc: + Likewise. + * testsuite/21_strings/char_traits/requirements/constexpr_functions_c++17.cc: + Likewise. + * testsuite/21_strings/char_traits/requirements/constexpr_functions_c++20.cc: + Likewise. + * testsuite/21_strings/char_traits/requirements/version.cc: + Likewise. + * testsuite/23_containers/array/comparison_operators/constexpr.cc: + Likewise. + * testsuite/23_containers/array/creation/1.cc: Likewise. + * testsuite/23_containers/array/creation/2.cc: Likewise. + * testsuite/23_containers/array/element_access/constexpr_c++17.cc: + Likewise. + * testsuite/23_containers/array/requirements/constexpr_fill.cc: + Likewise. + * testsuite/23_containers/array/requirements/constexpr_iter.cc: + Likewise. + * testsuite/23_containers/deque/erasure.cc: Likewise. + * testsuite/23_containers/forward_list/erasure.cc: Likewise. + * testsuite/23_containers/list/erasure.cc: Likewise. + * testsuite/23_containers/map/erasure.cc: Likewise. + * testsuite/23_containers/queue/cons_from_iters.cc: Likewise. + * testsuite/23_containers/set/erasure.cc: Likewise. + * testsuite/23_containers/span/1.cc: Likewise. + * testsuite/23_containers/span/2.cc: Likewise. + * testsuite/23_containers/stack/cons_from_iters.cc: Likewise. + * testsuite/23_containers/unordered_map/erasure.cc: Likewise. + * testsuite/23_containers/unordered_map/operations/1.cc: + Likewise. + * testsuite/23_containers/unordered_set/erasure.cc: Likewise. + * testsuite/23_containers/unordered_set/operations/1.cc: + Likewise. + * testsuite/23_containers/vector/cons/constexpr.cc: Likewise. + * testsuite/23_containers/vector/erasure.cc: Likewise. + * testsuite/23_containers/vector/requirements/version.cc: + Likewise. + * testsuite/24_iterators/insert_iterator/constexpr.cc: Likewise. + * testsuite/25_algorithms/clamp/constexpr.cc: Likewise. + * testsuite/25_algorithms/clamp/requirements/explicit_instantiation/1.cc: + Remove redundant checks already tested elsewhere. + * testsuite/25_algorithms/constexpr_macro.cc: Likewise. + * testsuite/25_algorithms/cpp_lib_constexpr.cc: Likewise. + * testsuite/25_algorithms/fold_left/1.cc: Likewise. + * testsuite/25_algorithms/pstl/feature_test-2.cc: Likewise. + * testsuite/25_algorithms/pstl/feature_test-3.cc: Likewise. + * testsuite/25_algorithms/pstl/feature_test-4.cc: Likewise. + * testsuite/25_algorithms/pstl/feature_test-5.cc: Likewise. + * testsuite/25_algorithms/pstl/feature_test.cc: Likewise. + * testsuite/26_numerics/bit/bit.byteswap/byteswap.cc: Likewise. + * testsuite/26_numerics/bit/bit.byteswap/version.cc: Likewise. + * testsuite/26_numerics/bit/bit.cast/bit_cast.cc: Likewise. + * testsuite/26_numerics/bit/bit.cast/version.cc: Likewise. + * testsuite/26_numerics/bit/header-2.cc: Likewise. + * testsuite/26_numerics/bit/header.cc: Likewise. + * testsuite/26_numerics/complex/1.cc: Likewise. + * testsuite/26_numerics/complex/2.cc: Likewise. + * testsuite/26_numerics/endian/2.cc: Likewise. + * testsuite/26_numerics/endian/3.cc: Likewise. + * testsuite/26_numerics/gcd/1.cc: Likewise. + * testsuite/26_numerics/lcm/1.cc: Likewise. + * testsuite/26_numerics/lerp/1.cc: Likewise. + * testsuite/26_numerics/lerp/version.cc: Likewise. + * testsuite/26_numerics/midpoint/integral.cc: Likewise. + * testsuite/26_numerics/midpoint/version.cc: Likewise. + * testsuite/26_numerics/numbers/1.cc: Likewise. + * testsuite/26_numerics/numbers/2.cc: Likewise. + * testsuite/27_io/basic_filebuf/native_handle/char/1.cc: + Likewise. + * testsuite/27_io/basic_filebuf/native_handle/version.cc: + Likewise. + * testsuite/27_io/basic_ofstream/open/char/noreplace.cc: + Likewise. + * testsuite/27_io/basic_ofstream/open/wchar_t/noreplace.cc: + Likewise. + * testsuite/27_io/basic_syncbuf/1.cc: Likewise. + * testsuite/27_io/basic_syncbuf/2.cc: Likewise. + * testsuite/27_io/basic_syncstream/1.cc: Likewise. + * testsuite/27_io/basic_syncstream/2.cc: Likewise. + * testsuite/27_io/spanstream/1.cc: Likewise. + * testsuite/27_io/spanstream/version.cc: Likewise. + * testsuite/29_atomics/atomic/cons/value_init.cc: Likewise. + * testsuite/29_atomics/atomic/lock_free_aliases.cc: Likewise. + * testsuite/29_atomics/atomic/wait_notify/1.cc: Likewise. + * testsuite/29_atomics/atomic/wait_notify/2.cc: Likewise. + * testsuite/29_atomics/headers/stdatomic.h/c_compat.cc: + Likewise. + * testsuite/29_atomics/headers/stdatomic.h/version.cc: Likewise. + * testsuite/30_threads/barrier/1.cc: Likewise. + * testsuite/30_threads/barrier/2.cc: Likewise. + * testsuite/30_threads/condition_variable_any/stop_token/1.cc: + Likewise. + * testsuite/30_threads/condition_variable_any/stop_token/2.cc: + Likewise. + * testsuite/30_threads/jthread/1.cc: Likewise. + * testsuite/30_threads/jthread/version.cc: Likewise. + * testsuite/30_threads/latch/1.cc: Likewise. + * testsuite/30_threads/latch/2.cc: Likewise. + * testsuite/30_threads/scoped_lock/requirements/typedefs.cc: + Likewise. + * testsuite/30_threads/semaphore/1.cc: Likewise. + * testsuite/30_threads/semaphore/2.cc: Likewise. + * testsuite/30_threads/stop_token/1.cc: Likewise. + * testsuite/30_threads/stop_token/2.cc: Likewise. + * testsuite/experimental/feat-char8_t.cc: Likewise. + * testsuite/experimental/iterator/ostream_joiner.cc: Likewise. + * testsuite/experimental/numeric/gcd.cc: Likewise. + * testsuite/experimental/scopeguard/uniqueres.cc: Likewise. + * testsuite/std/concepts/1.cc: Likewise. + * testsuite/std/concepts/2.cc: Likewise. + * testsuite/std/ranges/adaptors/as_const/1.cc: Likewise. + * testsuite/std/ranges/adaptors/as_rvalue/1.cc: Likewise. + * testsuite/std/ranges/adaptors/chunk/1.cc: Likewise. + * testsuite/std/ranges/adaptors/chunk_by/1.cc: Likewise. + * testsuite/std/ranges/adaptors/enumerate/1.cc: Likewise. + * testsuite/std/ranges/adaptors/join_with/1.cc: Likewise. + * testsuite/std/ranges/adaptors/slide/1.cc: Likewise. + * testsuite/std/ranges/adaptors/stride/1.cc: Likewise. + * testsuite/std/ranges/cartesian_product/1.cc: Likewise. + * testsuite/std/ranges/headers/ranges/synopsis.cc: Likewise. + * testsuite/std/ranges/repeat/1.cc: Likewise. + * testsuite/std/ranges/version_c++23.cc: Likewise. + * testsuite/std/ranges/zip/1.cc: Likewise. + * testsuite/std/time/syn_c++20.cc: Likewise. + * testsuite/experimental/feat-cxx14.cc: Likewise. Include + and . + * testsuite/23_containers/array/tuple_interface/get_neg.cc: + Adjust dg-error line numbers. + +2023-11-16 Jonathan Wakely + + * include/bits/version.def (stds): Use >= 202100 for C++23 + condition. + * include/bits/version.h: Regenerate. + * include/std/thread: Use > C++20 instead of >= C++23 for + __cplusplus condition. + +2023-11-16 Jonathan Wakely + + * include/std/istream (__rvalue_stream_extraction_t): Test + __cpp_concepts instead of __cpp_lib_concepts. + * include/std/ostream (__derived_from_ios_base): Likewise. + (__rvalue_stream_insertion_t): Likewise. + 2023-11-15 Jonathan Wakely PR libstdc++/112491 From fa5af4fc9924f5cd0322c0de7d0b99b83dc7d8f2 Mon Sep 17 00:00:00 2001 From: Jiahao Xu Date: Thu, 16 Nov 2023 20:31:09 +0800 Subject: [PATCH 120/169] LoongArch: Fix scan-assembler-times of lasx/lsx test case. These tests fail when they are first added,this patch adjusts the scan-assembler-times to fix them. gcc/testsuite/ChangeLog: * gcc.target/loongarch/vector/lasx/lasx-vcond-1.c: Adjust assembler times. * gcc.target/loongarch/vector/lasx/lasx-vcond-2.c: Ditto. * gcc.target/loongarch/vector/lsx/lsx-vcond-1.c: Ditto. * gcc.target/loongarch/vector/lsx/lsx-vcond-2.c: Ditto. --- .../loongarch/vector/lasx/lasx-vcond-1.c | 12 +++---- .../loongarch/vector/lasx/lasx-vcond-2.c | 36 +++++++++---------- .../loongarch/vector/lsx/lsx-vcond-1.c | 12 +++---- .../loongarch/vector/lsx/lsx-vcond-2.c | 36 +++++++++---------- 4 files changed, 48 insertions(+), 48 deletions(-) diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-vcond-1.c b/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-vcond-1.c index ee9cb1a1fa77..57064eac9dc3 100644 --- a/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-vcond-1.c +++ b/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-vcond-1.c @@ -52,13 +52,13 @@ TEST_VAR_ALL (DEF_VCOND_VAR) /* { dg-final { scan-assembler-times {\txvslt\.b} 4 } } */ /* { dg-final { scan-assembler-times {\txvslt\.h} 4 } } */ -/* { dg-final { scan-assembler-times {\txvslt\.w} 4 } } */ -/* { dg-final { scan-assembler-times {\txvslt\.d} 4 } } */ +/* { dg-final { scan-assembler-times {\txvslt\.w} 8 } } */ +/* { dg-final { scan-assembler-times {\txvslt\.d} 8 } } */ /* { dg-final { scan-assembler-times {\txvsle\.b} 4 } } */ /* { dg-final { scan-assembler-times {\txvsle\.h} 4 } } */ -/* { dg-final { scan-assembler-times {\txvsle\.w} 4 } } */ -/* { dg-final { scan-assembler-times {\txvsle\.d} 4 } } */ +/* { dg-final { scan-assembler-times {\txvsle\.w} 8 } } */ +/* { dg-final { scan-assembler-times {\txvsle\.d} 8 } } */ /* { dg-final { scan-assembler-times {\txvseq\.b} 4 } } */ /* { dg-final { scan-assembler-times {\txvseq\.h} 4 } } */ -/* { dg-final { scan-assembler-times {\txvseq\.w} 4 } } */ -/* { dg-final { scan-assembler-times {\txvseq\.d} 4 } } */ +/* { dg-final { scan-assembler-times {\txvseq\.w} 8 } } */ +/* { dg-final { scan-assembler-times {\txvseq\.d} 8 } } */ diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-vcond-2.c b/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-vcond-2.c index 5f40ed44c2d2..55d5a084c88f 100644 --- a/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-vcond-2.c +++ b/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-vcond-2.c @@ -67,21 +67,21 @@ TEST_CMP (nule) TEST_CMP (nuge) TEST_CMP (nugt) -/* { dg-final { scan-assembler-times {\txvfcmp\.ceq\.s} 2 } } */ -/* { dg-final { scan-assembler-times {\txvfcmp\.ceq\.d} 2 } } */ -/* { dg-final { scan-assembler-times {\txvfcmp\.cne\.s} 2 } } */ -/* { dg-final { scan-assembler-times {\txvfcmp\.cne\.d} 2 } } */ -/* { dg-final { scan-assembler-times {\txvfcmp\.slt\.s} 4 } } */ -/* { dg-final { scan-assembler-times {\txvfcmp\.slt\.d} 4 } } */ -/* { dg-final { scan-assembler-times {\txvfcmp\.sle\.s} 4 } } */ -/* { dg-final { scan-assembler-times {\txvfcmp\.sle\.d} 4 } } */ -/* { dg-final { scan-assembler-times {\txvfcmp\.cor\.s} 2 } } */ -/* { dg-final { scan-assembler-times {\txvfcmp\.cor\.d} 2 } } */ -/* { dg-final { scan-assembler-times {\txvfcmp\.cun\.s} 2 } } */ -/* { dg-final { scan-assembler-times {\txvfcmp\.cun\.d} 2 } } */ -/* { dg-final { scan-assembler-times {\txvfcmp\.cueq\.s} 4 } } */ -/* { dg-final { scan-assembler-times {\txvfcmp\.cueq\.d} 4 } } */ -/* { dg-final { scan-assembler-times {\txvfcmp\.cule\.s} 8 } } */ -/* { dg-final { scan-assembler-times {\txvfcmp\.cule\.d} 8 } } */ -/* { dg-final { scan-assembler-times {\txvfcmp\.cult\.s} 8 } } */ -/* { dg-final { scan-assembler-times {\txvfcmp\.cult\.d} 8 } } */ +/* { dg-final { scan-assembler-times {\txvfcmp\.ceq\.s} 3 } } */ +/* { dg-final { scan-assembler-times {\txvfcmp\.ceq\.d} 3 } } */ +/* { dg-final { scan-assembler-times {\txvfcmp\.cne\.s} 3 } } */ +/* { dg-final { scan-assembler-times {\txvfcmp\.cne\.d} 3 } } */ +/* { dg-final { scan-assembler-times {\txvfcmp\.slt\.s} 6 } } */ +/* { dg-final { scan-assembler-times {\txvfcmp\.slt\.d} 6 } } */ +/* { dg-final { scan-assembler-times {\txvfcmp\.sle\.s} 6 } } */ +/* { dg-final { scan-assembler-times {\txvfcmp\.sle\.d} 6 } } */ +/* { dg-final { scan-assembler-times {\txvfcmp\.cor\.s} 3 } } */ +/* { dg-final { scan-assembler-times {\txvfcmp\.cor\.d} 3 } } */ +/* { dg-final { scan-assembler-times {\txvfcmp\.cun\.s} 3 } } */ +/* { dg-final { scan-assembler-times {\txvfcmp\.cun\.d} 3 } } */ +/* { dg-final { scan-assembler-times {\txvfcmp\.cueq\.s} 6 } } */ +/* { dg-final { scan-assembler-times {\txvfcmp\.cueq\.d} 6 } } */ +/* { dg-final { scan-assembler-times {\txvfcmp\.cule\.s} 12 } } */ +/* { dg-final { scan-assembler-times {\txvfcmp\.cule\.d} 12 } } */ +/* { dg-final { scan-assembler-times {\txvfcmp\.cult\.s} 12 } } */ +/* { dg-final { scan-assembler-times {\txvfcmp\.cult\.d} 12 } } */ diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vcond-1.c b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vcond-1.c index 138adccfaf9f..8c69f0d9bdbd 100644 --- a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vcond-1.c +++ b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vcond-1.c @@ -52,13 +52,13 @@ TEST_VAR_ALL (DEF_VCOND_VAR) /* { dg-final { scan-assembler-times {\tvslt\.b} 4 } } */ /* { dg-final { scan-assembler-times {\tvslt\.h} 4 } } */ -/* { dg-final { scan-assembler-times {\tvslt\.w} 4 } } */ -/* { dg-final { scan-assembler-times {\tvslt\.d} 4 } } */ +/* { dg-final { scan-assembler-times {\tvslt\.w} 8 } } */ +/* { dg-final { scan-assembler-times {\tvslt\.d} 8 } } */ /* { dg-final { scan-assembler-times {\tvsle\.b} 4 } } */ /* { dg-final { scan-assembler-times {\tvsle\.h} 4 } } */ -/* { dg-final { scan-assembler-times {\tvsle\.w} 4 } } */ -/* { dg-final { scan-assembler-times {\tvsle\.d} 4 } } */ +/* { dg-final { scan-assembler-times {\tvsle\.w} 8 } } */ +/* { dg-final { scan-assembler-times {\tvsle\.d} 8 } } */ /* { dg-final { scan-assembler-times {\tvseq\.b} 4 } } */ /* { dg-final { scan-assembler-times {\tvseq\.h} 4 } } */ -/* { dg-final { scan-assembler-times {\tvseq\.w} 4 } } */ -/* { dg-final { scan-assembler-times {\tvseq\.d} 4 } } */ +/* { dg-final { scan-assembler-times {\tvseq\.w} 8 } } */ +/* { dg-final { scan-assembler-times {\tvseq\.d} 8 } } */ diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vcond-2.c b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vcond-2.c index e8fe31f8ff9e..2214afd0a89f 100644 --- a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vcond-2.c +++ b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vcond-2.c @@ -67,21 +67,21 @@ TEST_CMP (nule) TEST_CMP (nuge) TEST_CMP (nugt) -/* { dg-final { scan-assembler-times {\tvfcmp\.ceq\.s} 2 } } */ -/* { dg-final { scan-assembler-times {\tvfcmp\.ceq\.d} 2 } } */ -/* { dg-final { scan-assembler-times {\tvfcmp\.cne\.s} 2 } } */ -/* { dg-final { scan-assembler-times {\tvfcmp\.cne\.d} 2 } } */ -/* { dg-final { scan-assembler-times {\tvfcmp\.slt\.s} 4 } } */ -/* { dg-final { scan-assembler-times {\tvfcmp\.slt\.d} 4 } } */ -/* { dg-final { scan-assembler-times {\tvfcmp\.sle\.s} 4 } } */ -/* { dg-final { scan-assembler-times {\tvfcmp\.sle\.d} 4 } } */ -/* { dg-final { scan-assembler-times {\tvfcmp\.cor\.s} 2 } } */ -/* { dg-final { scan-assembler-times {\tvfcmp\.cor\.d} 2 } } */ -/* { dg-final { scan-assembler-times {\tvfcmp\.cun\.s} 2 } } */ -/* { dg-final { scan-assembler-times {\tvfcmp\.cun\.d} 2 } } */ -/* { dg-final { scan-assembler-times {\tvfcmp\.cueq\.s} 4 } } */ -/* { dg-final { scan-assembler-times {\tvfcmp\.cueq\.d} 4 } } */ -/* { dg-final { scan-assembler-times {\tvfcmp\.cule\.s} 8 } } */ -/* { dg-final { scan-assembler-times {\tvfcmp\.cule\.d} 8 } } */ -/* { dg-final { scan-assembler-times {\tvfcmp\.cult\.s} 8 } } */ -/* { dg-final { scan-assembler-times {\tvfcmp\.cult\.d} 8 } } */ +/* { dg-final { scan-assembler-times {\tvfcmp\.ceq\.s} 3 } } */ +/* { dg-final { scan-assembler-times {\tvfcmp\.ceq\.d} 3 } } */ +/* { dg-final { scan-assembler-times {\tvfcmp\.cne\.s} 3 } } */ +/* { dg-final { scan-assembler-times {\tvfcmp\.cne\.d} 3 } } */ +/* { dg-final { scan-assembler-times {\tvfcmp\.slt\.s} 6 } } */ +/* { dg-final { scan-assembler-times {\tvfcmp\.slt\.d} 6 } } */ +/* { dg-final { scan-assembler-times {\tvfcmp\.sle\.s} 6 } } */ +/* { dg-final { scan-assembler-times {\tvfcmp\.sle\.d} 6 } } */ +/* { dg-final { scan-assembler-times {\tvfcmp\.cor\.s} 3 } } */ +/* { dg-final { scan-assembler-times {\tvfcmp\.cor\.d} 3 } } */ +/* { dg-final { scan-assembler-times {\tvfcmp\.cun\.s} 3 } } */ +/* { dg-final { scan-assembler-times {\tvfcmp\.cun\.d} 3 } } */ +/* { dg-final { scan-assembler-times {\tvfcmp\.cueq\.s} 6 } } */ +/* { dg-final { scan-assembler-times {\tvfcmp\.cueq\.d} 6 } } */ +/* { dg-final { scan-assembler-times {\tvfcmp\.cule\.s} 12 } } */ +/* { dg-final { scan-assembler-times {\tvfcmp\.cule\.d} 12 } } */ +/* { dg-final { scan-assembler-times {\tvfcmp\.cult\.s} 12 } } */ +/* { dg-final { scan-assembler-times {\tvfcmp\.cult\.d} 12 } } */ From 37183018134049a70482a59b8f12180946ab8fa4 Mon Sep 17 00:00:00 2001 From: Jiahao Xu Date: Thu, 16 Nov 2023 16:44:36 +0800 Subject: [PATCH 121/169] LoongArch: Increase cost of vector aligned store/load. Based on SPEC2017 performance evaluation results, it's better to make them equal to the cost of unaligned store/load so as to avoid odd alignment peeling. gcc/ChangeLog: * config/loongarch/loongarch.cc (loongarch_builtin_vectorization_cost): Adjust. --- gcc/config/loongarch/loongarch.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index 738911661d74..d05743bec874 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -3893,11 +3893,9 @@ loongarch_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost, case scalar_stmt: case scalar_load: case vector_stmt: - case vector_load: case vec_to_scalar: case scalar_to_vec: case scalar_store: - case vector_store: return 1; case vec_promote_demote: @@ -3905,6 +3903,8 @@ loongarch_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost, return LASX_SUPPORTED_MODE_P (mode) && !LSX_SUPPORTED_MODE_P (mode) ? 2 : 1; + case vector_load: + case vector_store: case unaligned_load: case unaligned_store: return 2; From 1bcb7fe60544bba8b88028f9ffa062336d399664 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Mon, 30 Oct 2023 13:17:11 +0100 Subject: [PATCH 122/169] Assert we don't create recursive DW_AT_{abstract_origin,specification} We have a support case that shows GCC 7 sometimes creates DW_TAG_label refering to itself via a DW_AT_abstract_origin when using LTO. This for example triggers the sanity check added below during LTO bootstrap. Making this check cover more than just DW_AT_abstract_origin breaks bootstrap on trunk for /* GNU extension: Record what type our vtable lives in. */ if (TYPE_VFIELD (type)) { tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type)); gen_type_die (vtype, context_die); add_AT_die_ref (type_die, DW_AT_containing_type, lookup_type_die (vtype)); so the check is for now restricted to DW_AT_abstract_origin and DW_AT_specification both of which we follow within get_AT. * dwarf2out.cc (add_AT_die_ref): Assert we do not add a self-ref DW_AT_abstract_origin or DW_AT_specification. --- gcc/dwarf2out.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gcc/dwarf2out.cc b/gcc/dwarf2out.cc index 9850d094707e..d187be9b7863 100644 --- a/gcc/dwarf2out.cc +++ b/gcc/dwarf2out.cc @@ -4908,6 +4908,9 @@ add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_ { dw_attr_node attr; gcc_checking_assert (targ_die != NULL); + gcc_assert (targ_die != die + || (attr_kind != DW_AT_abstract_origin + && attr_kind != DW_AT_specification)); /* With LTO we can end up trying to reference something we didn't create a DIE for. Avoid crashing later on a NULL referenced DIE. */ From 5c8cb429762062f851a56801f021d81f4ecfe3d9 Mon Sep 17 00:00:00 2001 From: Li Wei Date: Fri, 17 Nov 2023 10:38:02 +0800 Subject: [PATCH 123/169] LoongArch: Implement C[LT]Z_DEFINED_VALUE_AT_ZERO The LoongArch has defined ctz and clz on the backend, but if we want GCC do CTZ transformation optimization in forwprop2 pass, GCC need to know the value of c[lt]z at zero, which may be beneficial for some test cases (like spec2017 deepsjeng_r). After implementing the macro, we test dynamic instruction count on deepsjeng_r: - before 1688423249186 - after 1660311215745 (1.66% reduction) gcc/ChangeLog: * config/loongarch/loongarch.h (CLZ_DEFINED_VALUE_AT_ZERO): Implement. (CTZ_DEFINED_VALUE_AT_ZERO): Same. gcc/testsuite/ChangeLog: * gcc.dg/pr90838.c: add clz/ctz test support on LoongArch. --- gcc/config/loongarch/loongarch.h | 5 +++++ gcc/testsuite/gcc.dg/pr90838.c | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/gcc/config/loongarch/loongarch.h b/gcc/config/loongarch/loongarch.h index ddac8e98ea9b..115222e70fdf 100644 --- a/gcc/config/loongarch/loongarch.h +++ b/gcc/config/loongarch/loongarch.h @@ -1239,3 +1239,8 @@ struct GTY (()) machine_function #define TARGET_EXPLICIT_RELOCS \ (la_opt_explicit_relocs == EXPLICIT_RELOCS_ALWAYS) + +#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) \ + ((VALUE) = GET_MODE_UNIT_BITSIZE (MODE), 2) +#define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) \ + ((VALUE) = GET_MODE_UNIT_BITSIZE (MODE), 2) diff --git a/gcc/testsuite/gcc.dg/pr90838.c b/gcc/testsuite/gcc.dg/pr90838.c index 759059683a94..40aad70499d8 100644 --- a/gcc/testsuite/gcc.dg/pr90838.c +++ b/gcc/testsuite/gcc.dg/pr90838.c @@ -83,3 +83,8 @@ int ctz4 (unsigned long x) /* { dg-final { scan-assembler-times "ctz\t" 3 { target { rv32 } } } } */ /* { dg-final { scan-assembler-times "andi\t" 1 { target { rv32 } } } } */ /* { dg-final { scan-assembler-times "mul\t" 1 { target { rv32 } } } } */ + +/* { dg-final { scan-tree-dump-times {= \.CTZ} 4 "forwprop2" { target { loongarch64*-*-* } } } } */ +/* { dg-final { scan-assembler-times "ctz.d\t" 1 { target { loongarch64*-*-* } } } } */ +/* { dg-final { scan-assembler-times "ctz.w\t" 3 { target { loongarch64*-*-* } } } } */ +/* { dg-final { scan-assembler-times "andi\t" 4 { target { loongarch64*-*-* } } } } */ From cd295a80c91040fd4d826528c8e8e07fe909ae62 Mon Sep 17 00:00:00 2001 From: Haochen Gui Date: Fri, 17 Nov 2023 17:12:32 +0800 Subject: [PATCH 124/169] rs6000: Enable vector mode for by pieces equality compare This patch adds a new expand pattern - cbranchv16qi4 to enable vector mode by pieces equality compare on rs6000. The macro MOVE_MAX_PIECES (COMPARE_MAX_PIECES) is set to 16 bytes when EFFICIENT_UNALIGNED_VSX is enabled, otherwise keeps unchanged. The macro STORE_MAX_PIECES is set to the same value as MOVE_MAX_PIECES by default, so now it's explicitly defined and keeps unchanged. gcc/ PR target/111449 * config/rs6000/altivec.md (cbranchv16qi4): New expand pattern. * config/rs6000/rs6000.cc (rs6000_generate_compare): Generate insn sequence for V16QImode equality compare. * config/rs6000/rs6000.h (MOVE_MAX_PIECES): Define. (STORE_MAX_PIECES): Define. gcc/testsuite/ PR target/111449 * gcc.target/powerpc/pr111449-1.c: New. * gcc.dg/tree-ssa/sra-17.c: Add additional options for 32-bit powerpc. * gcc.dg/tree-ssa/sra-18.c: Likewise. --- gcc/config/rs6000/altivec.md | 42 +++++++++++++++++++ gcc/config/rs6000/rs6000.cc | 12 ++++++ gcc/config/rs6000/rs6000.h | 3 ++ gcc/testsuite/gcc.dg/tree-ssa/sra-17.c | 1 + gcc/testsuite/gcc.dg/tree-ssa/sra-18.c | 1 + gcc/testsuite/gcc.target/powerpc/pr111449-1.c | 18 ++++++++ 6 files changed, 77 insertions(+) create mode 100644 gcc/testsuite/gcc.target/powerpc/pr111449-1.c diff --git a/gcc/config/rs6000/altivec.md b/gcc/config/rs6000/altivec.md index e8a596fb7e9c..8a4998c33239 100644 --- a/gcc/config/rs6000/altivec.md +++ b/gcc/config/rs6000/altivec.md @@ -2605,6 +2605,48 @@ } [(set_attr "type" "vecperm")]) +/* The cbranch_optab doesn't allow FAIL, so old cpus which are + inefficient on unaligned vsx are disabled as the cost is high + for unaligned load/store. */ +(define_expand "cbranchv16qi4" + [(use (match_operator 0 "equality_operator" + [(match_operand:V16QI 1 "reg_or_mem_operand") + (match_operand:V16QI 2 "reg_or_mem_operand")])) + (use (match_operand 3))] + "VECTOR_MEM_VSX_P (V16QImode) + && TARGET_EFFICIENT_UNALIGNED_VSX" +{ + /* Use direct move for P8 LE to skip doubleword swap, as the byte + order doesn't matter for equality compare. If any operands are + altivec indexed or indirect operands, the load can be implemented + directly by altivec aligned load instruction and swap is no + need. */ + if (!TARGET_P9_VECTOR + && !BYTES_BIG_ENDIAN + && MEM_P (operands[1]) + && !altivec_indexed_or_indirect_operand (operands[1], V16QImode) + && MEM_P (operands[2]) + && !altivec_indexed_or_indirect_operand (operands[2], V16QImode)) + { + rtx reg_op1 = gen_reg_rtx (V16QImode); + rtx reg_op2 = gen_reg_rtx (V16QImode); + rs6000_emit_le_vsx_permute (reg_op1, operands[1], V16QImode); + rs6000_emit_le_vsx_permute (reg_op2, operands[2], V16QImode); + operands[1] = reg_op1; + operands[2] = reg_op2; + } + else + { + operands[1] = force_reg (V16QImode, operands[1]); + operands[2] = force_reg (V16QImode, operands[2]); + } + + rtx_code code = GET_CODE (operands[0]); + operands[0] = gen_rtx_fmt_ee (code, V16QImode, operands[1], operands[2]); + rs6000_emit_cbranch (V16QImode, operands); + DONE; +}) + ;; Compare vectors producing a vector result and a predicate, setting CR6 to ;; indicate a combined status (define_insn "altivec_vcmpequ_p" diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc index 5f56c3ed85b5..3dfd79c4c43f 100644 --- a/gcc/config/rs6000/rs6000.cc +++ b/gcc/config/rs6000/rs6000.cc @@ -15472,6 +15472,18 @@ rs6000_generate_compare (rtx cmp, machine_mode mode) else emit_insn (gen_stack_protect_testsi (compare_result, op0, op1b)); } + else if (mode == V16QImode) + { + gcc_assert (code == EQ || code == NE); + + rtx result_vector = gen_reg_rtx (V16QImode); + rtx cc_bit = gen_reg_rtx (SImode); + emit_insn (gen_altivec_vcmpequb_p (result_vector, op0, op1)); + emit_insn (gen_cr6_test_for_lt (cc_bit)); + emit_insn (gen_rtx_SET (compare_result, + gen_rtx_COMPARE (comp_mode, cc_bit, + const1_rtx))); + } else emit_insn (gen_rtx_SET (compare_result, gen_rtx_COMPARE (comp_mode, op0, op1))); diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index 22595f6ebd77..326c45221e9c 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -1730,6 +1730,9 @@ typedef struct rs6000_args in one reasonably fast instruction. */ #define MOVE_MAX (! TARGET_POWERPC64 ? 4 : 8) #define MAX_MOVE_MAX 8 +#define MOVE_MAX_PIECES (TARGET_EFFICIENT_UNALIGNED_VSX \ + ? 16 : (TARGET_POWERPC64 ? 8 : 4)) +#define STORE_MAX_PIECES (TARGET_POWERPC64 ? 8 : 4) /* Nonzero if access to memory by bytes is no faster than for words. Also nonzero if doing byte operations (specifically shifts) in registers diff --git a/gcc/testsuite/gcc.dg/tree-ssa/sra-17.c b/gcc/testsuite/gcc.dg/tree-ssa/sra-17.c index 221d96b6cd9e..b0d4811e77bd 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/sra-17.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/sra-17.c @@ -1,6 +1,7 @@ /* { dg-do run { target { aarch64*-*-* alpha*-*-* arm*-*-* hppa*-*-* powerpc*-*-* s390*-*-* } } } */ /* { dg-options "-O2 -fdump-tree-esra --param sra-max-scalarization-size-Ospeed=32" } */ /* { dg-additional-options "-mcpu=ev4" { target alpha*-*-* } } */ +/* { dg-additional-options "-mno-vsx" { target { powerpc*-*-* && ilp32 } } } */ extern void abort (void); diff --git a/gcc/testsuite/gcc.dg/tree-ssa/sra-18.c b/gcc/testsuite/gcc.dg/tree-ssa/sra-18.c index f5e6a21c2ae6..2cdeae6e9e71 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/sra-18.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/sra-18.c @@ -1,6 +1,7 @@ /* { dg-do run { target { aarch64*-*-* alpha*-*-* arm*-*-* hppa*-*-* powerpc*-*-* s390*-*-* } } } */ /* { dg-options "-O2 -fdump-tree-esra --param sra-max-scalarization-size-Ospeed=32" } */ /* { dg-additional-options "-mcpu=ev4" { target alpha*-*-* } } */ +/* { dg-additional-options "-mno-vsx" { target { powerpc*-*-* && ilp32 } } } */ extern void abort (void); struct foo { long x; }; diff --git a/gcc/testsuite/gcc.target/powerpc/pr111449-1.c b/gcc/testsuite/gcc.target/powerpc/pr111449-1.c new file mode 100644 index 000000000000..0c9e176d2889 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr111449-1.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_p8vector_ok } */ +/* { dg-options "-mdejagnu-cpu=power8 -mvsx -O2" } */ + +/* Ensure vector mode is used for 16-byte by pieces equality compare. */ + +int compare1 (const char* s1, const char* s2) +{ + return __builtin_memcmp (s1, s2, 16) == 0; +} + +int compare2 (const char* s1) +{ + return __builtin_memcmp (s1, "0123456789012345", 16) == 0; +} + +/* { dg-final { scan-assembler-times {\mvcmpequb\.} 2 } } */ +/* { dg-final { scan-assembler-not {\mcmpd\M} } } */ From 10615c8a10d6b61e813254924d76be728dbd4688 Mon Sep 17 00:00:00 2001 From: Haochen Gui Date: Fri, 17 Nov 2023 17:17:59 +0800 Subject: [PATCH 125/169] rs6000: Fix regression cases caused 16-byte by pieces move The previous patch enables 16-byte by pieces move. Originally 16-byte move is implemented via pattern. expand_block_move does an optimization on P8 LE to leverage V2DI reversed load/store for memory to memory move. Now 16-byte move is implemented via by pieces move and finally split to two DI load/store. This patch creates an insn_and_split pattern to retake the optimization. gcc/ PR target/111449 * config/rs6000/vsx.md (*vsx_le_mem_to_mem_mov_ti): New. gcc/testsuite/ PR target/111449 * gcc.target/powerpc/pr111449-2.c: New. --- gcc/config/rs6000/vsx.md | 21 +++++++++++++++++++ gcc/testsuite/gcc.target/powerpc/pr111449-2.c | 18 ++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 gcc/testsuite/gcc.target/powerpc/pr111449-2.c diff --git a/gcc/config/rs6000/vsx.md b/gcc/config/rs6000/vsx.md index f3b40229094b..26fa32829af6 100644 --- a/gcc/config/rs6000/vsx.md +++ b/gcc/config/rs6000/vsx.md @@ -414,6 +414,27 @@ ;; VSX moves +;; TImode memory to memory move optimization on LE with p8vector +(define_insn_and_split "*vsx_le_mem_to_mem_mov_ti" + [(set (match_operand:TI 0 "indexed_or_indirect_operand" "=Z") + (match_operand:TI 1 "indexed_or_indirect_operand" "Z"))] + "!BYTES_BIG_ENDIAN + && TARGET_VSX + && !TARGET_P9_VECTOR + && can_create_pseudo_p ()" + "#" + "&& 1" + [(const_int 0)] +{ + rtx tmp = gen_reg_rtx (V2DImode); + rtx src = adjust_address (operands[1], V2DImode, 0); + emit_insn (gen_vsx_ld_elemrev_v2di (tmp, src)); + rtx dest = adjust_address (operands[0], V2DImode, 0); + emit_insn (gen_vsx_st_elemrev_v2di (dest, tmp)); + DONE; +} + [(set_attr "length" "16")]) + ;; The patterns for LE permuted loads and stores come before the general ;; VSX moves so they match first. (define_insn_and_split "*vsx_le_perm_load_" diff --git a/gcc/testsuite/gcc.target/powerpc/pr111449-2.c b/gcc/testsuite/gcc.target/powerpc/pr111449-2.c new file mode 100644 index 000000000000..7003bdc02084 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr111449-2.c @@ -0,0 +1,18 @@ +/* { dg-do compile { target { has_arch_pwr8 } } } */ +/* { dg-require-effective-target powerpc_p8vector_ok } */ +/* { dg-options "-mvsx -O2" } */ + +/* Ensure 16-byte by pieces move is enabled. */ + +void move1 (void *s1, void *s2) +{ + __builtin_memcpy (s1, s2, 16); +} + +void move2 (void *s1) +{ + __builtin_memcpy (s1, "0123456789012345", 16); +} + +/* { dg-final { scan-assembler-times {\mlxvd2x\M|\mp?lxv\M} 2 } } */ +/* { dg-final { scan-assembler-times {\mstxvd2x\M|\mstxv\M} 2 } } */ From bdf20fdfc342746d1e1785f5aaa36e33897b1574 Mon Sep 17 00:00:00 2001 From: Xi Ruoyao Date: Tue, 14 Nov 2023 00:17:19 +0800 Subject: [PATCH 126/169] LoongArch: Handle vectorized copysign (x, -1) expansion efficiently With LSX or LASX, copysign (x[i], -1) (or any negative constant) can be vectorized using [x]vbitseti.{w/d} instructions to directly set the signbits. Inspired by Tamar Christina's "AArch64: Handle copysign (x, -1) expansion efficiently" (r14-5289). gcc/ChangeLog: * config/loongarch/lsx.md (copysign3): Allow operand[2] to be an reg_or_vector_same_val_operand. If it's a const vector with same negative elements, expand the copysign with a bitset instruction. Otherwise, force it into an register. * config/loongarch/lasx.md (copysign3): Likewise. gcc/testsuite/ChangeLog: * g++.target/loongarch/vect-copysign-negconst.C: New test. * g++.target/loongarch/vect-copysign-negconst-run.C: New test. --- gcc/config/loongarch/lasx.md | 22 ++++++++- gcc/config/loongarch/lsx.md | 22 ++++++++- .../loongarch/vect-copysign-negconst-run.C | 47 +++++++++++++++++++ .../loongarch/vect-copysign-negconst.C | 27 +++++++++++ 4 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.target/loongarch/vect-copysign-negconst-run.C create mode 100644 gcc/testsuite/g++.target/loongarch/vect-copysign-negconst.C diff --git a/gcc/config/loongarch/lasx.md b/gcc/config/loongarch/lasx.md index f0f2dd08dd8b..2e11f061202d 100644 --- a/gcc/config/loongarch/lasx.md +++ b/gcc/config/loongarch/lasx.md @@ -3136,11 +3136,31 @@ (match_operand:FLASX 1 "register_operand"))) (set (match_dup 5) (and:FLASX (match_dup 3) - (match_operand:FLASX 2 "register_operand"))) + (match_operand:FLASX 2 "reg_or_vector_same_val_operand"))) (set (match_operand:FLASX 0 "register_operand") (ior:FLASX (match_dup 4) (match_dup 5)))] "ISA_HAS_LASX" { + /* copysign (x, -1) should instead be expanded as setting the sign + bit. */ + if (!REG_P (operands[2])) + { + rtx op2_elt = unwrap_const_vec_duplicate (operands[2]); + if (GET_CODE (op2_elt) == CONST_DOUBLE + && real_isneg (CONST_DOUBLE_REAL_VALUE (op2_elt))) + { + rtx n = GEN_INT (8 * GET_MODE_SIZE (mode) - 1); + operands[0] = lowpart_subreg (mode, operands[0], + mode); + operands[1] = lowpart_subreg (mode, operands[1], + mode); + emit_insn (gen_lasx_xvbitseti_ (operands[0], + operands[1], n)); + DONE; + } + } + + operands[2] = force_reg (mode, operands[2]); operands[3] = loongarch_build_signbit_mask (mode, 1, 0); operands[4] = gen_reg_rtx (mode); diff --git a/gcc/config/loongarch/lsx.md b/gcc/config/loongarch/lsx.md index 55c7d79a030c..8ea41c85b018 100644 --- a/gcc/config/loongarch/lsx.md +++ b/gcc/config/loongarch/lsx.md @@ -2873,11 +2873,31 @@ (match_operand:FLSX 1 "register_operand"))) (set (match_dup 5) (and:FLSX (match_dup 3) - (match_operand:FLSX 2 "register_operand"))) + (match_operand:FLSX 2 "reg_or_vector_same_val_operand"))) (set (match_operand:FLSX 0 "register_operand") (ior:FLSX (match_dup 4) (match_dup 5)))] "ISA_HAS_LSX" { + /* copysign (x, -1) should instead be expanded as setting the sign + bit. */ + if (!REG_P (operands[2])) + { + rtx op2_elt = unwrap_const_vec_duplicate (operands[2]); + if (GET_CODE (op2_elt) == CONST_DOUBLE + && real_isneg (CONST_DOUBLE_REAL_VALUE (op2_elt))) + { + rtx n = GEN_INT (8 * GET_MODE_SIZE (mode) - 1); + operands[0] = lowpart_subreg (mode, operands[0], + mode); + operands[1] = lowpart_subreg (mode, operands[1], + mode); + emit_insn (gen_lsx_vbitseti_ (operands[0], operands[1], + n)); + DONE; + } + } + + operands[2] = force_reg (mode, operands[2]); operands[3] = loongarch_build_signbit_mask (mode, 1, 0); operands[4] = gen_reg_rtx (mode); diff --git a/gcc/testsuite/g++.target/loongarch/vect-copysign-negconst-run.C b/gcc/testsuite/g++.target/loongarch/vect-copysign-negconst-run.C new file mode 100644 index 000000000000..d2d5d15c9337 --- /dev/null +++ b/gcc/testsuite/g++.target/loongarch/vect-copysign-negconst-run.C @@ -0,0 +1,47 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -march=loongarch64 -mlasx -mno-strict-align" } */ +/* { dg-require-effective-target loongarch_asx_hw } */ + +#include "vect-copysign-negconst.C" + +double d[] = {1.2, -3.4, -5.6, 7.8}; +float f[] = {1.2, -3.4, -5.6, 7.8, -9.0, -11.4, 51.4, 1919.810}; + +double _abs(double x) { return __builtin_fabs (x); } +float _abs(float x) { return __builtin_fabsf (x); } + +template +void +check (T *arr, T *orig, int len) +{ + for (int i = 0; i < len; i++) + { + if (arr[i] > 0) + __builtin_trap (); + if (_abs (arr[i]) != _abs (orig[i])) + __builtin_trap (); + } +} + +int +main() +{ + double test_d[4]; + float test_f[8]; + + __builtin_memcpy (test_d, d, sizeof (test_d)); + force_negative<2> (test_d); + check (test_d, d, 2); + + __builtin_memcpy (test_d, d, sizeof (test_d)); + force_negative<4> (test_d); + check (test_d, d, 4); + + __builtin_memcpy (test_f, f, sizeof (test_f)); + force_negative<4> (test_f); + check (test_f, f, 4); + + __builtin_memcpy (test_f, f, sizeof (test_f)); + force_negative<8> (test_f); + check (test_f, f, 8); +} diff --git a/gcc/testsuite/g++.target/loongarch/vect-copysign-negconst.C b/gcc/testsuite/g++.target/loongarch/vect-copysign-negconst.C new file mode 100644 index 000000000000..5e8820d2bca4 --- /dev/null +++ b/gcc/testsuite/g++.target/loongarch/vect-copysign-negconst.C @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=loongarch64 -mlasx -mno-strict-align" } */ +/* { dg-final { scan-assembler "\txvbitseti.*63" } } */ +/* { dg-final { scan-assembler "\txvbitseti.*31" } } */ +/* { dg-final { scan-assembler "\tvbitseti.*63" } } */ +/* { dg-final { scan-assembler "\tvbitseti.*31" } } */ + +template +__attribute__ ((noipa)) void +force_negative (float *arr) +{ + for (int i = 0; i < N; i++) + arr[i] = __builtin_copysignf (arr[i], -2); +} + +template +__attribute__ ((noipa)) void +force_negative (double *arr) +{ + for (int i = 0; i < N; i++) + arr[i] = __builtin_copysign (arr[i], -3); +} + +template void force_negative<4>(float *); +template void force_negative<8>(float *); +template void force_negative<2>(double *); +template void force_negative<4>(double *); From ba3f5b8465ef7b278ea33ff94cd85b9638058635 Mon Sep 17 00:00:00 2001 From: Francois-Xavier Coudert Date: Wed, 15 Nov 2023 11:22:37 +0100 Subject: [PATCH 127/169] Testsuite: silence some noise in output We introduced in commit a0673ec5f9236dca6ada23f28343c591ccd575e4 some noisy messages, which clutter output with things like: dg set al ... revised FFLAGS ... and are not really useful information. Let's remove them. gcc/testsuite/ChangeLog: * gfortran.dg/coarray/caf.exp: Remove some output. * gfortran.dg/dg.exp: Remove some output. --- gcc/testsuite/gfortran.dg/coarray/caf.exp | 1 - gcc/testsuite/gfortran.dg/dg.exp | 3 --- 2 files changed, 4 deletions(-) diff --git a/gcc/testsuite/gfortran.dg/coarray/caf.exp b/gcc/testsuite/gfortran.dg/coarray/caf.exp index a10b17a78d05..fab8238a0d5c 100644 --- a/gcc/testsuite/gfortran.dg/coarray/caf.exp +++ b/gcc/testsuite/gfortran.dg/coarray/caf.exp @@ -81,7 +81,6 @@ if [check_effective_target_libatomic_available] { } } set t [get_multilibs] - puts "maybe al $maybe_atomic_lib ml $t" } # Main loop. diff --git a/gcc/testsuite/gfortran.dg/dg.exp b/gcc/testsuite/gfortran.dg/dg.exp index 73541ea7301e..22f2ffb405fe 100644 --- a/gcc/testsuite/gfortran.dg/dg.exp +++ b/gcc/testsuite/gfortran.dg/dg.exp @@ -68,7 +68,6 @@ if [check_effective_target_libatomic_available] { set maybe_atomic_lib "" } set t [get_multilibs] - puts "dg set al $maybe_atomic_lib ml $t" } set all_flags $DEFAULT_FFLAGS @@ -78,8 +77,6 @@ if { $maybe_atomic_lib != "" } { } } -puts "revised FFLAGS $all_flags" - # Main loop. gfortran-dg-runtest [lsort \ [glob -nocomplain $srcdir/$subdir/*.\[fF\]{,90,95,03,08} ] ] "" $all_flags From 68221c54a9752dbf131c231413edfd21046f8dad Mon Sep 17 00:00:00 2001 From: Georg-Johann Lay Date: Fri, 17 Nov 2023 12:51:16 +0100 Subject: [PATCH 128/169] PR target/53372: Don't ignore section attribute with address-space. gcc/ PR target/53372 * config/avr/avr.cc (avr_asm_named_section) [AVR_SECTION_PROGMEM]: Only return some .progmem*.data section if the user did not specify a section attribute. (avr_section_type_flags) [avr_progmem_p]: Unset SECTION_NOTYPE in returned section flags. gcc/testsuite/ PR target/53372 * gcc.target/avr/pr53372-1.c: New test. * gcc.target/avr/pr53372-2.c: New test. --- gcc/config/avr/avr.cc | 8 +++++++- gcc/testsuite/gcc.target/avr/pr53372-1.c | 10 ++++++++++ gcc/testsuite/gcc.target/avr/pr53372-2.c | 10 ++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/avr/pr53372-1.c create mode 100644 gcc/testsuite/gcc.target/avr/pr53372-2.c diff --git a/gcc/config/avr/avr.cc b/gcc/config/avr/avr.cc index 5e0217de36fc..c3e0995dfc3b 100644 --- a/gcc/config/avr/avr.cc +++ b/gcc/config/avr/avr.cc @@ -10873,7 +10873,12 @@ avr_asm_init_sections (void) static void avr_asm_named_section (const char *name, unsigned int flags, tree decl) { - if (flags & AVR_SECTION_PROGMEM) + if (flags & AVR_SECTION_PROGMEM + // Only use section .progmem*.data if there is no attribute section. + && ! (decl + && DECL_SECTION_NAME (decl) + && symtab_node::get (decl) + && ! symtab_node::get (decl)->implicit_section)) { addr_space_t as = (flags & AVR_SECTION_PROGMEM) / SECTION_MACH_DEP; const char *old_prefix = ".rodata"; @@ -10942,6 +10947,7 @@ avr_section_type_flags (tree decl, const char *name, int reloc) flags |= as * SECTION_MACH_DEP; flags &= ~SECTION_WRITE; flags &= ~SECTION_BSS; + flags &= ~SECTION_NOTYPE; } return flags; diff --git a/gcc/testsuite/gcc.target/avr/pr53372-1.c b/gcc/testsuite/gcc.target/avr/pr53372-1.c new file mode 100644 index 000000000000..7d3f193e79a3 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/pr53372-1.c @@ -0,0 +1,10 @@ +/* { dg-do compile { target { ! avr_tiny } } } */ +/* { dg-options "-std=gnu99" } */ + +__attribute__((__section__("fffsection"))) +const __flash char fff = 123; + +const __flash char ppp = 124; + +/* { dg-final { scan-assembler ".section fffsection,\"a\",@progbits" } } */ +/* { dg-final { scan-assembler ".section .progmem.data,\"a\",@progbits" } } */ diff --git a/gcc/testsuite/gcc.target/avr/pr53372-2.c b/gcc/testsuite/gcc.target/avr/pr53372-2.c new file mode 100644 index 000000000000..79ef2b7bbdbd --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/pr53372-2.c @@ -0,0 +1,10 @@ +/* { dg-do compile { target { ! avr_tiny } } } */ +/* { dg-options "-std=gnu99 -fdata-sections" } */ + +__attribute__((__section__("fffsection"))) +const __flash char fff = 123; + +const __flash char ppp = 124; + +/* { dg-final { scan-assembler ".section fffsection,\"a\",@progbits" } } */ +/* { dg-final { scan-assembler ".section .progmem.data.ppp,\"a\",@progbits" } } */ From b9eba3baf54b4fc25c3006768bb945058622658b Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Fri, 17 Nov 2023 13:34:55 +0100 Subject: [PATCH 129/169] Fortran: Accept -std=f2023, update line-length for Fortran 2023 This patch accepts -std=f2023, uses it by default and bumps for the free-source form the line length to 10,000 and the statement length alias number of continuation lines to unlimited. gcc/fortran/ChangeLog: * gfortran.texi (_gfortran_set_options): Document GFC_STD_F2023. * invoke.texi (std,pedantic,Wampersand,Wtabs): Add -std=2023. * lang.opt (std=f2023): Add. * libgfortran.h (GFC_STD_F2023, GFC_STD_OPT_F23): Add. * options.cc (set_default_std_flags): Add GFC_STD_F2023. (gfc_init_options): Set max_continue_free to 1,000,000. (gfc_post_options): Set flag_free_line_length if unset. (gfc_handle_option): Add OPT_std_f2023, set max_continue_free = 255 for -std=f2003, f2008 and f2018. gcc/testsuite/ChangeLog: * gfortran.dg/goacc/warn_truncated.f90: Add -std=f2018 option. * gfortran.dg/gomp/warn_truncated.f90: Likewise. * gfortran.dg/line_length_10.f90: Likewise. * gfortran.dg/line_length_11.f90: Likewise. * gfortran.dg/line_length_2.f90: Likewise. * gfortran.dg/line_length_5.f90: Likewise. * gfortran.dg/line_length_6.f90: Likewise. * gfortran.dg/line_length_7.f90: Likewise. * gfortran.dg/line_length_8.f90: Likewise. * gfortran.dg/line_length_9.f90: Likewise. * gfortran.dg/continuation_17.f90: New test. * gfortran.dg/continuation_18.f90: New test. * gfortran.dg/continuation_19.f: New test. * gfortran.dg/line_length_12.f90: New test. * gfortran.dg/line_length_13.f90: New test. --- gcc/fortran/gfortran.texi | 11 +- gcc/fortran/invoke.texi | 21 +- gcc/fortran/lang.opt | 4 + gcc/fortran/libgfortran.h | 4 +- gcc/fortran/options.cc | 28 +- gcc/testsuite/gfortran.dg/continuation_17.f90 | 267 ++++++++++++++++++ gcc/testsuite/gfortran.dg/continuation_18.f90 | 267 ++++++++++++++++++ gcc/testsuite/gfortran.dg/continuation_19.f | 267 ++++++++++++++++++ .../gfortran.dg/goacc/warn_truncated.f90 | 1 + .../gfortran.dg/gomp/warn_truncated.f90 | 1 + gcc/testsuite/gfortran.dg/line_length_10.f90 | 2 +- gcc/testsuite/gfortran.dg/line_length_11.f90 | 2 +- gcc/testsuite/gfortran.dg/line_length_12.f90 | 31 ++ gcc/testsuite/gfortran.dg/line_length_13.f90 | 27 ++ gcc/testsuite/gfortran.dg/line_length_2.f90 | 2 +- gcc/testsuite/gfortran.dg/line_length_5.f90 | 2 +- gcc/testsuite/gfortran.dg/line_length_6.f90 | 2 +- gcc/testsuite/gfortran.dg/line_length_7.f90 | 2 +- gcc/testsuite/gfortran.dg/line_length_8.f90 | 2 +- gcc/testsuite/gfortran.dg/line_length_9.f90 | 2 +- 20 files changed, 918 insertions(+), 27 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/continuation_17.f90 create mode 100644 gcc/testsuite/gfortran.dg/continuation_18.f90 create mode 100644 gcc/testsuite/gfortran.dg/continuation_19.f create mode 100644 gcc/testsuite/gfortran.dg/line_length_12.f90 create mode 100644 gcc/testsuite/gfortran.dg/line_length_13.f90 diff --git a/gcc/fortran/gfortran.texi b/gcc/fortran/gfortran.texi index e7ffc294dc81..41857cc90385 100644 --- a/gcc/fortran/gfortran.texi +++ b/gcc/fortran/gfortran.texi @@ -3477,11 +3477,12 @@ standard. Possible values are (bitwise or-ed) @code{GFC_STD_F77} (1), @code{GFC_STD_F95} (8), @code{GFC_STD_F2003} (16), @code{GFC_STD_GNU} (32), @code{GFC_STD_LEGACY} (64), @code{GFC_STD_F2008} (128), @code{GFC_STD_F2008_OBS} (256), @code{GFC_STD_F2008_TS} (512), -@code{GFC_STD_F2018} (1024), @code{GFC_STD_F2018_OBS} (2048), and -@code{GFC_STD=F2018_DEL} (4096). Default: @code{GFC_STD_F95_OBS | -GFC_STD_F95_DEL | GFC_STD_F95 | GFC_STD_F2003 | GFC_STD_F2008 | -GFC_STD_F2008_TS | GFC_STD_F2008_OBS | GFC_STD_F77 | GFC_STD_F2018 | -GFC_STD_F2018_OBS | GFC_STD_F2018_DEL | GFC_STD_GNU | GFC_STD_LEGACY}. +@code{GFC_STD_F2018} (1024), @code{GFC_STD_F2018_OBS} (2048), +@code{GFC_STD=F2018_DEL} (4096), and @code{GFC_STD=F2023} (8192). +Default: @code{GFC_STD_F95_OBS | GFC_STD_F95_DEL | GFC_STD_F95 | +GFC_STD_F2003 | GFC_STD_F2008 | GFC_STD_F2008_TS | GFC_STD_F2008_OBS +| GFC_STD_F77 | GFC_STD_F2018 | GFC_STD_F2018_OBS | GFC_STD_F2018_DEL +| GFC_STD_F2023 | GFC_STD_GNU | GFC_STD_LEGACY}. @item @var{option}[1] @tab Standard-warning flag; prints a warning to standard error. Default: @code{GFC_STD_F95_DEL | GFC_STD_LEGACY}. @item @var{option}[2] @tab If non zero, enable pedantic checking. diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi index 10387e395010..2f1d1f284292 100644 --- a/gcc/fortran/invoke.texi +++ b/gcc/fortran/invoke.texi @@ -542,17 +542,17 @@ intermediate representation of the translated Fortran code, produced by @opindex @code{std=}@var{std} option @item -std=@var{std} Specify the standard to which the program is expected to conform, -which may be one of @samp{f95}, @samp{f2003}, @samp{f2008}, -@samp{f2018}, @samp{gnu}, or @samp{legacy}. The default value for +which may be one of @samp{f95}, @samp{f2003}, @samp{f2008}, @samp{f2018}, +@samp{f2023}, @samp{gnu}, or @samp{legacy}. The default value for @var{std} is @samp{gnu}, which specifies a superset of the latest Fortran standard that includes all of the extensions supported by GNU Fortran, although warnings will be given for obsolete extensions not recommended for use in new code. The @samp{legacy} value is equivalent but without the warnings for obsolete extensions, and may -be useful for old non-standard programs. The @samp{f95}, -@samp{f2003}, @samp{f2008}, and @samp{f2018} values specify strict -conformance to the Fortran 95, Fortran 2003, Fortran 2008 and Fortran -2018 standards, respectively; errors are given for all extensions +be useful for old non-standard programs. The @samp{f95}, @samp{f2003}, +@samp{f2008}, @samp{f2018}, and @samp{f2023} values specify strict +conformance to the Fortran 95, Fortran 2003, Fortran 2008, Fortran 2018 +and Fortran 2023 standards, respectively; errors are given for all extensions beyond the relevant language standard, and warnings are given for the Fortran 77 features that are permitted but obsolescent in later standards. The deprecated option @samp{-std=f2008ts} acts as an alias for @@ -910,7 +910,8 @@ nonstandard practices, but not all. However, improvements to GNU Fortran in this area are welcome. This should be used in conjunction with @option{-std=f95}, -@option{-std=f2003}, @option{-std=f2008} or @option{-std=f2018}. +@option{-std=f2003}, @option{-std=f2008}, @option{-std=f2018} +or @option{-std=f2023}. @opindex @code{pedantic-errors} @item -pedantic-errors @@ -958,8 +959,8 @@ The following example will trigger the warning. @item -Wampersand Warn about missing ampersand in continued character constants. The warning is given with @option{-Wampersand}, @option{-pedantic}, -@option{-std=f95}, @option{-std=f2003}, @option{-std=f2008} and -@option{-std=f2018}. Note: With no ampersand given in a continued +@option{-std=f95}, @option{-std=f2003}, @option{-std=f2008}, @option{-std=f2018} +and @option{-std=f2023}. Note: With no ampersand given in a continued character constant, GNU Fortran assumes continuation at the first non-comment, non-whitespace character after the ampersand that initiated the continuation. @@ -1108,7 +1109,7 @@ of the Fortran Character Set. For continuation lines, a tab followed by a digit between 1 and 9 is supported. @option{-Wtabs} will cause a warning to be issued if a tab is encountered. Note, @option{-Wtabs} is active for @option{-pedantic}, @option{-std=f95}, @option{-std=f2003}, -@option{-std=f2008}, @option{-std=f2018} and +@option{-std=f2008}, @option{-std=f2018}, @option{-std=f2023} and @option{-Wall}. @opindex @code{Wundefined-do-loop} diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt index 7236351a93cd..08c75394aa01 100644 --- a/gcc/fortran/lang.opt +++ b/gcc/fortran/lang.opt @@ -883,6 +883,10 @@ std=f2018 Fortran Conform to the ISO Fortran 2018 standard. +std=f2023 +Fortran +Conform to the ISO Fortran 2023 standard. + std=f95 Fortran Conform to the ISO Fortran 95 standard. diff --git a/gcc/fortran/libgfortran.h b/gcc/fortran/libgfortran.h index cb84b59c99ac..bdddb317ab01 100644 --- a/gcc/fortran/libgfortran.h +++ b/gcc/fortran/libgfortran.h @@ -19,9 +19,10 @@ along with GCC; see the file COPYING3. If not see /* Flags to specify which standard/extension contains a feature. - Note that no features were obsoleted nor deleted in F2003. + Note that no features were obsoleted nor deleted in F2003 nor in F2023. Please remember to keep those definitions in sync with gfortran.texi. */ +#define GFC_STD_F2023 (1<<12) /* New in F2023. */ #define GFC_STD_F2018_DEL (1<<11) /* Deleted in F2018. */ #define GFC_STD_F2018_OBS (1<<10) /* Obsolescent in F2018. */ #define GFC_STD_F2018 (1<<9) /* New in F2018. */ @@ -45,6 +46,7 @@ along with GCC; see the file COPYING3. If not see #define GFC_STD_OPT_F08 (GFC_STD_OPT_F03 | GFC_STD_F2008) #define GFC_STD_OPT_F18 ((GFC_STD_OPT_F08 | GFC_STD_F2018) \ & (~GFC_STD_F2018_DEL)) +#define GFC_STD_OPT_F23 (GFC_STD_OPT_F18 | GFC_STD_F2023) /* Bitmasks for the various FPE that can be enabled. These need to be straight integers e.g., 8 instead of (1<<3), because they will be included in Fortran source. */ diff --git a/gcc/fortran/options.cc b/gcc/fortran/options.cc index cfb195756a8e..b788521e8160 100644 --- a/gcc/fortran/options.cc +++ b/gcc/fortran/options.cc @@ -57,7 +57,7 @@ set_default_std_flags (void) gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F95_DEL | GFC_STD_F2003 | GFC_STD_F2008 | GFC_STD_F95 | GFC_STD_F77 | GFC_STD_F2008_OBS | GFC_STD_GNU | GFC_STD_LEGACY - | GFC_STD_F2018 | GFC_STD_F2018_DEL | GFC_STD_F2018_OBS; + | GFC_STD_F2018 | GFC_STD_F2018_DEL | GFC_STD_F2018_OBS | GFC_STD_F2023; gfc_option.warn_std = GFC_STD_F2018_DEL | GFC_STD_F95_DEL | GFC_STD_LEGACY; } @@ -143,8 +143,11 @@ gfc_init_options (unsigned int decoded_options_count, gfc_source_file = NULL; gfc_option.module_dir = NULL; gfc_option.source_form = FORM_UNKNOWN; - gfc_option.max_continue_fixed = 255; - gfc_option.max_continue_free = 255; + /* The following is not quite right as Fortran since 2023 has: "A statement + shall not have more than one million characters." This can already be + reached by 'just' 100 lines with 10,000 characters each. */ + gfc_option.max_continue_fixed = 1000000; + gfc_option.max_continue_free = 1000000; gfc_option.max_identifier_length = GFC_MAX_SYMBOL_LEN; gfc_option.max_errors = 25; @@ -266,6 +269,10 @@ gfc_post_options (const char **pfilename) cpp_warn_missing_include_dirs, 1); gfc_check_include_dirs (verbose_missing_dir_warn); + SET_OPTION_IF_UNSET (&global_options, &global_options_set, + flag_free_line_length, + (gfc_option.allow_std & GFC_STD_F2023) ? 10000 : 132); + /* Finalize DEC flags. */ post_dec_flags (flag_dec); @@ -769,6 +776,8 @@ gfc_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value, case OPT_std_f2003: gfc_option.allow_std = GFC_STD_OPT_F03; gfc_option.warn_std = GFC_STD_F95_OBS; + gfc_option.max_continue_fixed = 255; + gfc_option.max_continue_free = 255; gfc_option.max_identifier_length = 63; warn_ampersand = 1; warn_tabs = 1; @@ -777,6 +786,8 @@ gfc_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value, case OPT_std_f2008: gfc_option.allow_std = GFC_STD_OPT_F08; gfc_option.warn_std = GFC_STD_F95_OBS | GFC_STD_F2008_OBS; + gfc_option.max_continue_free = 255; + gfc_option.max_continue_fixed = 255; gfc_option.max_identifier_length = 63; warn_ampersand = 1; warn_tabs = 1; @@ -785,6 +796,17 @@ gfc_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value, case OPT_std_f2008ts: case OPT_std_f2018: gfc_option.allow_std = GFC_STD_OPT_F18; + gfc_option.warn_std = GFC_STD_F95_OBS | GFC_STD_F2008_OBS + | GFC_STD_F2018_OBS; + gfc_option.max_continue_free = 255; + gfc_option.max_continue_fixed = 255; + gfc_option.max_identifier_length = 63; + warn_ampersand = 1; + warn_tabs = 1; + break; + + case OPT_std_f2023: + gfc_option.allow_std = GFC_STD_OPT_F23; gfc_option.warn_std = GFC_STD_F95_OBS | GFC_STD_F2008_OBS | GFC_STD_F2018_OBS; gfc_option.max_identifier_length = 63; diff --git a/gcc/testsuite/gfortran.dg/continuation_17.f90 b/gcc/testsuite/gfortran.dg/continuation_17.f90 new file mode 100644 index 000000000000..6f2b11dbe4bb --- /dev/null +++ b/gcc/testsuite/gfortran.dg/continuation_17.f90 @@ -0,0 +1,267 @@ +! { dg-do compile } +! { dg-options -std=f2018 } +! +! copied from continuation_4.f90 - but use -std=f2018 +! Fortran 2018: Continuation-line limit is 255 <<< TESTED +! Fortran 2023: Maximally 1,000,000 characters per statement (implied but no explicit continuation-line line limit) +! +! PR 19262 Test limit on line continuations. Test case derived form case in PR +! by Steve Kargl. Submitted by Jerry DeLisle +print *, & + "1" // & ! 1 Counting in groups of 40. + "2" // & ! 2 + "3" // & ! 3 + "4" // & ! 4 + "5" // & ! 5 + "6" // & ! 6 + "7" // & ! 7 + "8" // & ! 8 + "9" // & ! 9 + "0" // & ! 10 + "1" // & ! 11 + "2" // & ! 12 + "3" // & ! 13 + "4" // & ! 14 + "5" // & ! 15 + "6" // & ! 16 + "7" // & ! 17 + "8" // & ! 18 + "9" // & ! 19 + "0" // & ! 20 + "1" // & ! 21 + "2" // & ! 22 + "3" // & ! 23 + "4" // & ! 24 + "5" // & ! 25 + "6" // & ! 26 + "7" // & ! 27 + "8" // & ! 28 + "9" // & ! 29 + "0" // & ! 30 + "1" // & ! 31 + "2" // & ! 32 + "3" // & ! 33 + "4" // & ! 34 + "5" // & ! 35 + "6" // & ! 36 + "7" // & ! 37 + "8" // & ! 38 + "9" // & ! 39 + "0" // & ! 40 + "1" // & ! 1 + "2" // & ! 2 + "3" // & ! 3 + "4" // & ! 4 + "5" // & ! 5 + "6" // & ! 6 + "7" // & ! 7 + "8" // & ! 8 + "9" // & ! 9 + "0" // & ! 10 + "1" // & ! 11 + "2" // & ! 12 + "3" // & ! 13 + "4" // & ! 14 + "5" // & ! 15 + "6" // & ! 16 + "7" // & ! 17 + "8" // & ! 18 + "9" // & ! 19 + "0" // & ! 20 + "1" // & ! 21 + "2" // & ! 22 + "3" // & ! 23 + "4" // & ! 24 + "5" // & ! 25 + "6" // & ! 26 + "7" // & ! 27 + "8" // & ! 28 + "9" // & ! 29 + "0" // & ! 30 + "1" // & ! 31 + "2" // & ! 32 + "3" // & ! 33 + "4" // & ! 34 + "5" // & ! 35 + "6" // & ! 36 + "7" // & ! 37 + "8" // & ! 38 + "9" // & ! 39 + "0" // & ! 80 + "1" // & ! 1 + "2" // & ! 2 + "3" // & ! 3 + "4" // & ! 4 + "5" // & ! 5 + "6" // & ! 6 + "7" // & ! 7 + "8" // & ! 8 + "9" // & ! 9 + "0" // & ! 10 + "1" // & ! 11 + "2" // & ! 12 + "3" // & ! 13 + "4" // & ! 14 + "5" // & ! 15 + "6" // & ! 16 + "7" // & ! 17 + "8" // & ! 18 + "9" // & ! 19 + "0" // & ! 20 + "1" // & ! 21 + "2" // & ! 22 + "3" // & ! 23 + "4" // & ! 24 + "5" // & ! 25 + "6" // & ! 26 + "7" // & ! 27 + "8" // & ! 28 + "9" // & ! 29 + "0" // & ! 30 + "1" // & ! 31 + "2" // & ! 32 + "3" // & ! 33 + "4" // & ! 34 + "5" // & ! 35 + "6" // & ! 36 + "7" // & ! 37 + "8" // & ! 38 + "9" // & ! 39 + "0" // & ! 120 + "1" // & ! 1 + "2" // & ! 2 + "3" // & ! 3 + "4" // & ! 4 + "5" // & ! 5 + "6" // & ! 6 + "7" // & ! 7 + "8" // & ! 8 + "9" // & ! 9 + "0" // & ! 10 + "1" // & ! 11 + "2" // & ! 12 + "3" // & ! 13 + "4" // & ! 14 + "5" // & ! 15 + "6" // & ! 16 + "7" // & ! 17 + "8" // & ! 18 + "9" // & ! 19 + "0" // & ! 20 + "1" // & ! 21 + "2" // & ! 22 + "3" // & ! 23 + "4" // & ! 24 + "5" // & ! 25 + "6" // & ! 26 + "7" // & ! 27 + "8" // & ! 28 + "9" // & ! 29 + "0" // & ! 30 + "1" // & ! 31 + "2" // & ! 32 + "3" // & ! 33 + "4" // & ! 34 + "5" // & ! 35 + "6" // & ! 36 + "7" // & ! 37 + "8" // & ! 38 + "9" // & ! 39 + "0" // & ! 160 + "1" // & ! 1 + "2" // & ! 2 + "3" // & ! 3 + "4" // & ! 4 + "5" // & ! 5 + "6" // & ! 6 + "7" // & ! 7 + "8" // & ! 8 + "9" // & ! 9 + "0" // & ! 10 + "1" // & ! 11 + "2" // & ! 12 + "3" // & ! 13 + "4" // & ! 14 + "5" // & ! 15 + "6" // & ! 16 + "7" // & ! 17 + "8" // & ! 18 + "9" // & ! 19 + "0" // & ! 20 + "1" // & ! 21 + "2" // & ! 22 + "3" // & ! 23 + "4" // & ! 24 + "5" // & ! 25 + "6" // & ! 26 + "7" // & ! 27 + "8" // & ! 28 + "9" // & ! 29 + "0" // & ! 30 + "1" // & ! 31 + "2" // & ! 32 + "3" // & ! 33 + "4" // & ! 34 + "5" // & ! 35 + "6" // & ! 36 + "7" // & ! 37 + "8" // & ! 38 + "9" // & ! 39 + "0" // & ! 200 + "1" // & ! 1 + "2" // & ! 2 + "3" // & ! 3 + "4" // & ! 4 + "5" // & ! 5 + "6" // & ! 6 + "7" // & ! 7 + "8" // & ! 8 + "9" // & ! 9 + "0" // & ! 10 + "1" // & ! 11 + "2" // & ! 12 + "3" // & ! 13 + "4" // & ! 14 + "5" // & ! 15 + "6" // & ! 16 + "7" // & ! 17 + "8" // & ! 18 + "9" // & ! 19 + "0" // & ! 20 + "1" // & ! 21 + "2" // & ! 22 + "3" // & ! 23 + "4" // & ! 24 + "5" // & ! 25 + "6" // & ! 26 + "7" // & ! 27 + "8" // & ! 28 + "9" // & ! 29 + "0" // & ! 30 + "1" // & ! 31 + "2" // & ! 32 + "3" // & ! 33 + "4" // & ! 34 + "5" // & ! 35 + "6" // & ! 36 + "7" // & ! 37 + "8" // & ! 38 + "9" // & ! 39 + "0" // & ! 240 + "1" // & ! 1 + "2" // & ! 2 + "3" // & ! 3 + "4" // & ! 4 + "5" // & ! 5 + "6" // & ! 6 + "7" // & ! 7 + "8" // & ! 8 + "9" // & ! 9 + "0" // & ! 10 + "1" // & ! 11 + "2" // & ! 12 + "3" // & ! 13 + "4" // & ! 14 + "5" // & ! 255 + "0" ! { dg-warning "Limit of 255 continuations exceeded" } +end diff --git a/gcc/testsuite/gfortran.dg/continuation_18.f90 b/gcc/testsuite/gfortran.dg/continuation_18.f90 new file mode 100644 index 000000000000..7ad887d70094 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/continuation_18.f90 @@ -0,0 +1,267 @@ +! { dg-do compile } +! { dg-options -std=f2023 } +! +! copied from continuation_4.f90 - but use -std=f2023 +! Fortran 2018: Continuation-line limit is 255 +! Fortran 2023: Maximally 1,000,000 characters per statement (implied but no explicit continuation-line line limit) <<< TESTED +! +! PR 19262 Test limit on line continuations. Test case derived form case in PR +! by Steve Kargl. Submitted by Jerry DeLisle +print *, & + "1" // & ! 1 Counting in groups of 40. + "2" // & ! 2 + "3" // & ! 3 + "4" // & ! 4 + "5" // & ! 5 + "6" // & ! 6 + "7" // & ! 7 + "8" // & ! 8 + "9" // & ! 9 + "0" // & ! 10 + "1" // & ! 11 + "2" // & ! 12 + "3" // & ! 13 + "4" // & ! 14 + "5" // & ! 15 + "6" // & ! 16 + "7" // & ! 17 + "8" // & ! 18 + "9" // & ! 19 + "0" // & ! 20 + "1" // & ! 21 + "2" // & ! 22 + "3" // & ! 23 + "4" // & ! 24 + "5" // & ! 25 + "6" // & ! 26 + "7" // & ! 27 + "8" // & ! 28 + "9" // & ! 29 + "0" // & ! 30 + "1" // & ! 31 + "2" // & ! 32 + "3" // & ! 33 + "4" // & ! 34 + "5" // & ! 35 + "6" // & ! 36 + "7" // & ! 37 + "8" // & ! 38 + "9" // & ! 39 + "0" // & ! 40 + "1" // & ! 1 + "2" // & ! 2 + "3" // & ! 3 + "4" // & ! 4 + "5" // & ! 5 + "6" // & ! 6 + "7" // & ! 7 + "8" // & ! 8 + "9" // & ! 9 + "0" // & ! 10 + "1" // & ! 11 + "2" // & ! 12 + "3" // & ! 13 + "4" // & ! 14 + "5" // & ! 15 + "6" // & ! 16 + "7" // & ! 17 + "8" // & ! 18 + "9" // & ! 19 + "0" // & ! 20 + "1" // & ! 21 + "2" // & ! 22 + "3" // & ! 23 + "4" // & ! 24 + "5" // & ! 25 + "6" // & ! 26 + "7" // & ! 27 + "8" // & ! 28 + "9" // & ! 29 + "0" // & ! 30 + "1" // & ! 31 + "2" // & ! 32 + "3" // & ! 33 + "4" // & ! 34 + "5" // & ! 35 + "6" // & ! 36 + "7" // & ! 37 + "8" // & ! 38 + "9" // & ! 39 + "0" // & ! 80 + "1" // & ! 1 + "2" // & ! 2 + "3" // & ! 3 + "4" // & ! 4 + "5" // & ! 5 + "6" // & ! 6 + "7" // & ! 7 + "8" // & ! 8 + "9" // & ! 9 + "0" // & ! 10 + "1" // & ! 11 + "2" // & ! 12 + "3" // & ! 13 + "4" // & ! 14 + "5" // & ! 15 + "6" // & ! 16 + "7" // & ! 17 + "8" // & ! 18 + "9" // & ! 19 + "0" // & ! 20 + "1" // & ! 21 + "2" // & ! 22 + "3" // & ! 23 + "4" // & ! 24 + "5" // & ! 25 + "6" // & ! 26 + "7" // & ! 27 + "8" // & ! 28 + "9" // & ! 29 + "0" // & ! 30 + "1" // & ! 31 + "2" // & ! 32 + "3" // & ! 33 + "4" // & ! 34 + "5" // & ! 35 + "6" // & ! 36 + "7" // & ! 37 + "8" // & ! 38 + "9" // & ! 39 + "0" // & ! 120 + "1" // & ! 1 + "2" // & ! 2 + "3" // & ! 3 + "4" // & ! 4 + "5" // & ! 5 + "6" // & ! 6 + "7" // & ! 7 + "8" // & ! 8 + "9" // & ! 9 + "0" // & ! 10 + "1" // & ! 11 + "2" // & ! 12 + "3" // & ! 13 + "4" // & ! 14 + "5" // & ! 15 + "6" // & ! 16 + "7" // & ! 17 + "8" // & ! 18 + "9" // & ! 19 + "0" // & ! 20 + "1" // & ! 21 + "2" // & ! 22 + "3" // & ! 23 + "4" // & ! 24 + "5" // & ! 25 + "6" // & ! 26 + "7" // & ! 27 + "8" // & ! 28 + "9" // & ! 29 + "0" // & ! 30 + "1" // & ! 31 + "2" // & ! 32 + "3" // & ! 33 + "4" // & ! 34 + "5" // & ! 35 + "6" // & ! 36 + "7" // & ! 37 + "8" // & ! 38 + "9" // & ! 39 + "0" // & ! 160 + "1" // & ! 1 + "2" // & ! 2 + "3" // & ! 3 + "4" // & ! 4 + "5" // & ! 5 + "6" // & ! 6 + "7" // & ! 7 + "8" // & ! 8 + "9" // & ! 9 + "0" // & ! 10 + "1" // & ! 11 + "2" // & ! 12 + "3" // & ! 13 + "4" // & ! 14 + "5" // & ! 15 + "6" // & ! 16 + "7" // & ! 17 + "8" // & ! 18 + "9" // & ! 19 + "0" // & ! 20 + "1" // & ! 21 + "2" // & ! 22 + "3" // & ! 23 + "4" // & ! 24 + "5" // & ! 25 + "6" // & ! 26 + "7" // & ! 27 + "8" // & ! 28 + "9" // & ! 29 + "0" // & ! 30 + "1" // & ! 31 + "2" // & ! 32 + "3" // & ! 33 + "4" // & ! 34 + "5" // & ! 35 + "6" // & ! 36 + "7" // & ! 37 + "8" // & ! 38 + "9" // & ! 39 + "0" // & ! 200 + "1" // & ! 1 + "2" // & ! 2 + "3" // & ! 3 + "4" // & ! 4 + "5" // & ! 5 + "6" // & ! 6 + "7" // & ! 7 + "8" // & ! 8 + "9" // & ! 9 + "0" // & ! 10 + "1" // & ! 11 + "2" // & ! 12 + "3" // & ! 13 + "4" // & ! 14 + "5" // & ! 15 + "6" // & ! 16 + "7" // & ! 17 + "8" // & ! 18 + "9" // & ! 19 + "0" // & ! 20 + "1" // & ! 21 + "2" // & ! 22 + "3" // & ! 23 + "4" // & ! 24 + "5" // & ! 25 + "6" // & ! 26 + "7" // & ! 27 + "8" // & ! 28 + "9" // & ! 29 + "0" // & ! 30 + "1" // & ! 31 + "2" // & ! 32 + "3" // & ! 33 + "4" // & ! 34 + "5" // & ! 35 + "6" // & ! 36 + "7" // & ! 37 + "8" // & ! 38 + "9" // & ! 39 + "0" // & ! 240 + "1" // & ! 1 + "2" // & ! 2 + "3" // & ! 3 + "4" // & ! 4 + "5" // & ! 5 + "6" // & ! 6 + "7" // & ! 7 + "8" // & ! 8 + "9" // & ! 9 + "0" // & ! 10 + "1" // & ! 11 + "2" // & ! 12 + "3" // & ! 13 + "4" // & ! 14 + "5" // & ! 255 + "0" ! No warning with -std=f2023 +end diff --git a/gcc/testsuite/gfortran.dg/continuation_19.f b/gcc/testsuite/gfortran.dg/continuation_19.f new file mode 100644 index 000000000000..2b32a333fdc7 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/continuation_19.f @@ -0,0 +1,267 @@ +! { dg-do run } +! { dg-options "-std=f2023" } + + implicit none + integer :: x + + ! 256 continuation lines - but less than 1,000,000 character + ! => Valid since Fortran 2023 + x = + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + & + 2 + + end diff --git a/gcc/testsuite/gfortran.dg/goacc/warn_truncated.f90 b/gcc/testsuite/gfortran.dg/goacc/warn_truncated.f90 index 15ef3f513aeb..101e026701d6 100644 --- a/gcc/testsuite/gfortran.dg/goacc/warn_truncated.f90 +++ b/gcc/testsuite/gfortran.dg/goacc/warn_truncated.f90 @@ -1,4 +1,5 @@ ! { dg-do compile } +! { dg-additional-options "-std=f2018" } ! PR fortran/97390 ! integer :: tempRbuffer, array, compactHaloInfo, dimsizes, nHaloLayers, gpu_nList_send, gpu_idx_send, gpu_bufferOffset_send, counter diff --git a/gcc/testsuite/gfortran.dg/gomp/warn_truncated.f90 b/gcc/testsuite/gfortran.dg/gomp/warn_truncated.f90 index 86d7eb27b307..20cd0449b9aa 100644 --- a/gcc/testsuite/gfortran.dg/gomp/warn_truncated.f90 +++ b/gcc/testsuite/gfortran.dg/gomp/warn_truncated.f90 @@ -1,4 +1,5 @@ ! { dg-do compile } +! { dg-additional-options "-std=f2018" } ! ! PR fortran/94709 ! diff --git a/gcc/testsuite/gfortran.dg/line_length_10.f90 b/gcc/testsuite/gfortran.dg/line_length_10.f90 index 390e9a163581..c244172e1628 100644 --- a/gcc/testsuite/gfortran.dg/line_length_10.f90 +++ b/gcc/testsuite/gfortran.dg/line_length_10.f90 @@ -1,5 +1,5 @@ ! { dg-do compile } -! { dg-options "-Wno-line-truncation" } +! { dg-options "-std=f2018 -Wno-line-truncation" } ! ! By default, for free-form source code: Error out ! But due to the explicit -Wno-line-truncation, compile w/o warning diff --git a/gcc/testsuite/gfortran.dg/line_length_11.f90 b/gcc/testsuite/gfortran.dg/line_length_11.f90 index 67f1e29a0ebf..2125f5458eaa 100644 --- a/gcc/testsuite/gfortran.dg/line_length_11.f90 +++ b/gcc/testsuite/gfortran.dg/line_length_11.f90 @@ -1,5 +1,5 @@ ! { dg-do compile } -! { dg-options "-Wno-all" } +! { dg-options "-Wno-all -std=f2018" } ! ! By default, for free-form source code: Error out ! But due to the explicit -Wno-all, compile w/o warning diff --git a/gcc/testsuite/gfortran.dg/line_length_12.f90 b/gcc/testsuite/gfortran.dg/line_length_12.f90 new file mode 100644 index 000000000000..c8a935a027b1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/line_length_12.f90 @@ -0,0 +1,31 @@ +! { dg-do compile } +! { dg-additional-options "-std=f2018" } +! { dg-prune-output "some warnings being treated as errors" } +! +! In Fortran 2018, the linelength is 132 characters. <<< Test this. +! In Fortran 2023, the linelength is 10,000 characters. + +implicit none +integer :: a, b, c, d + +a = & ! The next line has 9,999 characters -> OK + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 +4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 42 + +! { dg-error "Line truncated at .1. \\\[-Werror=line-truncation\\\]" "" { target *-*-* } .-2 } + +b = & ! The next line has 10,000 characters -> OK + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 +4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 42 + +! { dg-error "Line truncated at .1. \\\[-Werror=line-truncation\\\]" "" { target *-*-* } .-2 } + +c = & ! The next line has 10,001 characters -> TOO LONG + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 +4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 4242 + +! { dg-error "Line truncated at .1. \\\[-Werror=line-truncation\\\]" "" { target *-*-* } .-2 } + +d = & ! The next line has 10,002 characters -> TOO LONG + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 +4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 42424 + +! { dg-error "Line truncated at .1. \\\[-Werror=line-truncation\\\]" "" { target *-*-* } .-2 } + +end diff --git a/gcc/testsuite/gfortran.dg/line_length_13.f90 b/gcc/testsuite/gfortran.dg/line_length_13.f90 new file mode 100644 index 000000000000..861eeb9c9be9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/line_length_13.f90 @@ -0,0 +1,27 @@ +! { dg-do compile } +! { dg-additional-options "-std=f2023" } +! { dg-prune-output "some warnings being treated as errors" } +! +! In Fortran 2018, the linelength is 132 characters. +! In Fortran 2023, the linelength is 10,000 characters. <<< Test this. + +implicit none +integer :: a, b, c, d + +a = & ! The next line has 9,999 characters -> OK + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 +4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 42 + +b = & ! The next line has 10,000 characters -> OK + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 +4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 42 + +c = & ! The next line has 10,001 characters -> TOO LONG + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 +4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 4242 + +! { dg-error "Line truncated at .1. \\\[-Werror=line-truncation\\\]" "" { target *-*-* } .-2 } + +d = & ! The next line has 10,002 characters -> TOO LONG + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 +4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 42424 + +! { dg-error "Line truncated at .1. \\\[-Werror=line-truncation\\\]" "" { target *-*-* } .-2 } + +end diff --git a/gcc/testsuite/gfortran.dg/line_length_2.f90 b/gcc/testsuite/gfortran.dg/line_length_2.f90 index e1ab7220d03c..ff44d882257f 100644 --- a/gcc/testsuite/gfortran.dg/line_length_2.f90 +++ b/gcc/testsuite/gfortran.dg/line_length_2.f90 @@ -1,7 +1,7 @@ ! Testcase for -ffree-line-length-none ! See PR fortran/21302 ! { dg-do compile } -! { dg-options "-ffree-line-length-none" } +! { dg-options "-ffree-line-length-none -std=f2018" } program two if (abs(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa).gt.999.d0.or.abs(bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb).gt.999.d0.or.abs(cccccccccccccccccccc).gt.999.d0) THEN endif diff --git a/gcc/testsuite/gfortran.dg/line_length_5.f90 b/gcc/testsuite/gfortran.dg/line_length_5.f90 index 81832451ea24..ba9f2850b077 100644 --- a/gcc/testsuite/gfortran.dg/line_length_5.f90 +++ b/gcc/testsuite/gfortran.dg/line_length_5.f90 @@ -1,5 +1,5 @@ ! { dg-do compile } -! { dg-options "-Wline-truncation" } +! { dg-options "-std=f2018 -Wline-truncation" } print *, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' end ! { dg-error "Line truncated" " " { target *-*-* } 3 } diff --git a/gcc/testsuite/gfortran.dg/line_length_6.f90 b/gcc/testsuite/gfortran.dg/line_length_6.f90 index 8cdb02099814..a88e2d247c08 100644 --- a/gcc/testsuite/gfortran.dg/line_length_6.f90 +++ b/gcc/testsuite/gfortran.dg/line_length_6.f90 @@ -1,5 +1,5 @@ ! { dg-do compile } -! { dg-options "" } +! { dg-options "-std=f2018" } ! ! By default, for free-form source code: Error out ! diff --git a/gcc/testsuite/gfortran.dg/line_length_7.f90 b/gcc/testsuite/gfortran.dg/line_length_7.f90 index b4ebf49c4bff..6c6d73b01c33 100644 --- a/gcc/testsuite/gfortran.dg/line_length_7.f90 +++ b/gcc/testsuite/gfortran.dg/line_length_7.f90 @@ -1,5 +1,5 @@ ! { dg-do compile } -! { dg-options "-Wno-error" } +! { dg-options "-std=f2018 -Wno-error" } ! ! By default, for free-form source code: Error out ! But due to -Wno-error, we only expect a warning diff --git a/gcc/testsuite/gfortran.dg/line_length_8.f90 b/gcc/testsuite/gfortran.dg/line_length_8.f90 index afd6cc2df46e..822b09e803a1 100644 --- a/gcc/testsuite/gfortran.dg/line_length_8.f90 +++ b/gcc/testsuite/gfortran.dg/line_length_8.f90 @@ -1,5 +1,5 @@ ! { dg-do compile } -! { dg-options "-Wline-truncation" } +! { dg-options "-std=f2018 -Wline-truncation" } ! ! By default, for free-form source code: Error out ! Even with -Wline-truncation, we still get an error diff --git a/gcc/testsuite/gfortran.dg/line_length_9.f90 b/gcc/testsuite/gfortran.dg/line_length_9.f90 index 6c156afc1449..9f07d9a588eb 100644 --- a/gcc/testsuite/gfortran.dg/line_length_9.f90 +++ b/gcc/testsuite/gfortran.dg/line_length_9.f90 @@ -1,5 +1,5 @@ ! { dg-do compile } -! { dg-options "-Wall" } +! { dg-options "-std=f2018 -Wall" } ! ! By default, for free-form source code: Error out ! Even with -Wall, we still get an error From 1f28b2e4d8f8ea54848c332c707fa4ca5f028fa1 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Fri, 17 Nov 2023 14:47:07 +0100 Subject: [PATCH 130/169] Revert "tree-optimization/112281 - loop distribution and zero dependence distances" This reverts commit 5ea2965b499f9e491e45db19fedbccfccb75076a. --- gcc/testsuite/gcc.dg/torture/pr112281.c | 19 ------------------- gcc/tree-loop-distribution.cc | 7 +++---- 2 files changed, 3 insertions(+), 23 deletions(-) delete mode 100644 gcc/testsuite/gcc.dg/torture/pr112281.c diff --git a/gcc/testsuite/gcc.dg/torture/pr112281.c b/gcc/testsuite/gcc.dg/torture/pr112281.c deleted file mode 100644 index 3f0a61a93766..000000000000 --- a/gcc/testsuite/gcc.dg/torture/pr112281.c +++ /dev/null @@ -1,19 +0,0 @@ -/* { dg-do run } */ -/* { dg-additional-options "-ftree-loop-distribution" } */ - -struct { - int : 8; - int a; -} b, d[4] = {{0}, {0}, {0}, {5}}; -int c, e; -int main() -{ - for (c = 2; c; c--) - for (e = 0; e < 2; e++) { - d[c] = b = d[c + 1]; - d[c + 1].a = 0; - } - if (b.a != 0) - __builtin_abort(); - return 0; -} diff --git a/gcc/tree-loop-distribution.cc b/gcc/tree-loop-distribution.cc index 5ededd97c3d6..ffca535064be 100644 --- a/gcc/tree-loop-distribution.cc +++ b/gcc/tree-loop-distribution.cc @@ -2163,10 +2163,9 @@ loop_distribution::pg_add_dependence_edges (struct graph *rdg, int dir, gcc.dg/tree-ssa/pr94969.c. */ if (DDR_NUM_DIST_VECTS (ddr) != 1) this_dir = 2; - /* If the dependence distance is zero in the innermost - loop preserve stmt order. */ - else if (DDR_DIST_VECT (ddr, 0) - [DDR_LOOP_NEST (ddr).length () - 1] == 0) + /* If the overlap is exact preserve stmt order. */ + else if (lambda_vector_zerop (DDR_DIST_VECT (ddr, 0), + DDR_NB_LOOPS (ddr))) ; /* Else as the distance vector is lexicographic positive swap the dependence direction. */ From 04abafe9831f6867af1211ecae853ff373235b2d Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Fri, 17 Nov 2023 14:49:06 +0100 Subject: [PATCH 131/169] tree-optimization/112585 - new testcase The offending commit r14-5444-g5ea2965b499f9e was reverted. The following adds a testcase. PR tree-optimization/112585 * gcc.dg/torture/pr112585.c: New testcase. --- gcc/testsuite/gcc.dg/torture/pr112585.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/torture/pr112585.c diff --git a/gcc/testsuite/gcc.dg/torture/pr112585.c b/gcc/testsuite/gcc.dg/torture/pr112585.c new file mode 100644 index 000000000000..6c8cbeba3c2e --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr112585.c @@ -0,0 +1,18 @@ +/* { dg-do run } */ +/* { dg-additional-options "-ftree-loop-distribution" } */ + +static int a[10], b; +char c, *d = &c, e; +int main() +{ + int f = 0; + for (; f < 9; f++) { + a[f] = 1; + a[f + 1] = e; + for (b = 0; b < 8; b++) + *d = 0; + } + if (a[2] != 1) + __builtin_abort(); + return 0; +} From 172a72da368146e0fe34194020eb7a6636db4438 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 17 Nov 2023 15:09:44 +0100 Subject: [PATCH 132/169] vect: Fix check_reduction_path [PR112374] As mentioned in the PR, the intent of the r14-5076 changes was that it doesn't count one of the uses on the use_stmt, but what actually got implemented is that it does this processing on any op_use_stmt, even if it is not the use_stmt statement, which means that it can increase count even on debug stmts (-fcompare-debug failures), or if there would be some other use stmt with 2+ uses it could count that as a single use. Though, because it fails whenever cnt != 1 and I believe use_stmt must be one of the uses, it would probably fail in the latter case anyway. The following patch fixes that by doing this extra processing only when op_use_stmt is use_stmt, and using the normal processing otherwise (so ignore debug stmts, and increase on any uses on the stmt). 2023-11-17 Jakub Jelinek PR tree-optimization/112374 * tree-vect-loop.cc (check_reduction_path): Perform the cond_fn_p special case only if op_use_stmt == use_stmt, use as_a rather than dyn_cast in that case. * gcc.dg/pr112374-1.c: New test. * gcc.dg/pr112374-2.c: New test. * g++.dg/opt/pr112374.C: New test. --- gcc/testsuite/g++.dg/opt/pr112374.C | 24 +++++++++++++++++++++ gcc/testsuite/gcc.dg/pr112374-1.c | 20 +++++++++++++++++ gcc/testsuite/gcc.dg/pr112374-2.c | 33 +++++++++++++++++++++++++++++ gcc/tree-vect-loop.cc | 4 ++-- 4 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/opt/pr112374.C create mode 100644 gcc/testsuite/gcc.dg/pr112374-1.c create mode 100644 gcc/testsuite/gcc.dg/pr112374-2.c diff --git a/gcc/testsuite/g++.dg/opt/pr112374.C b/gcc/testsuite/g++.dg/opt/pr112374.C new file mode 100644 index 000000000000..15d8a067754e --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr112374.C @@ -0,0 +1,24 @@ +// PR tree-optimization/112374 +// { dg-do compile { target c++11 } } +// { dg-options "-fcompare-debug -gno-statement-frontiers -O2" } +// { dg-additional-options "-march=skylake-avx512" { target i?86-*-* x86_64-*-* } } +// { dg-additional-options "-march=armv9-a" { target aarch64*-*-* } } + +struct t +{ + long coef[1]; + t(const unsigned long &a) : coef{(long)a} {}; + t(const t &a); +}; +extern void gen_int_mode(t, int); +struct expand_vec_perm_d { + unsigned char perm[64]; + int vmode; + unsigned char nelt; +}; +void expand_vec_perm_blend(struct expand_vec_perm_d *d) { + unsigned long mask = 0; + for (unsigned i = 0; i < 4; ++i) + mask |= (d->perm[i] >= 4 ? 3 : 0) << (i * 2); + gen_int_mode(mask, 0); +} diff --git a/gcc/testsuite/gcc.dg/pr112374-1.c b/gcc/testsuite/gcc.dg/pr112374-1.c new file mode 100644 index 000000000000..7fbd67a12883 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr112374-1.c @@ -0,0 +1,20 @@ +/* PR tree-optimization/112374 */ +/* { dg-do compile } */ +/* { dg-options "-fcompare-debug -gno-statement-frontiers -O2 -w" } */ +/* { dg-additional-options "-march=skylake-avx512" { target i?86-*-* x86_64-*-* } } */ +/* { dg-additional-options "-march=armv9-a" { target aarch64*-*-* } } */ + +void foo (int, int); +struct S { char s[4]; }; +int a, b, c; + +void +bar () +{ + struct S d; + long e = 0; + for (c = 0; c < 4; ++c) + e |= (d.s[c] ? 3 : 0) << c; + if (e) + foo (a, b); +} diff --git a/gcc/testsuite/gcc.dg/pr112374-2.c b/gcc/testsuite/gcc.dg/pr112374-2.c new file mode 100644 index 000000000000..1598c49fc549 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr112374-2.c @@ -0,0 +1,33 @@ +/* PR tree-optimization/112374 */ +/* { dg-do compile } */ +/* { dg-options "-fcompare-debug -gno-statement-frontiers -O2" } */ +/* { dg-additional-options "-march=skylake-avx512" { target i?86-*-* x86_64-*-* } } */ +/* { dg-additional-options "-march=armv9-a" { target aarch64*-*-* } } */ + +void foo (int, int); +struct S { char s[64]; } *p; +char a, b; +unsigned char c; +int d, e; + +void +bar (void) +{ + unsigned i; + long j = 0; + for (i = 0; i < b; ++i) + j |= (p->s[i] ? 3 : 0) << i; + if (p->s[i + 1]) + lab: + for (;;) + ; + for (i = 0; i < 4; ++i) + j |= p->s[i] << i; + for (; i; i += 2) + if (c + 1 != a) + goto lab; + for (; i < 8; ++i) + j |= p->s[i] >= 6; + if (j) + foo (d, e); +} diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index 3f59139cb013..e8b8be5b7e1c 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -4118,9 +4118,9 @@ pop: /* In case of a COND_OP (mask, op1, op2, op1) reduction we might have op1 twice (once as definition, once as else) in the same operation. Allow this. */ - if (cond_fn_p) + if (cond_fn_p && op_use_stmt == use_stmt) { - gcall *call = dyn_cast (use_stmt); + gcall *call = as_a (use_stmt); unsigned else_pos = internal_fn_else_index (internal_fn (op.code)); From 6dd4c703be17fa5dd56136d067e7fdc4a61584b3 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 17 Nov 2023 15:10:51 +0100 Subject: [PATCH 133/169] match.pd: Optimize ctz/popcount/parity/ffs on extended argument [PR112566] ctz(ext(X)) is the same as ctz(X) in the UB on zero case (or could be also in the 2 argument case on large BITINT_TYPE by preserving the argument, not implemented in this patch), popcount(zext(X)) is the same as popcount(X), parity(zext(X)) is the same as parity(X), parity(sext(X)) is the same as parity(X) provided the bit difference between the extended and unextended types is even, ffs(ext(X)) is the same as ffs(X). The following patch optimizes those in match.pd if those are beneficial (always in the large BITINT_TYPE case, or if the narrower type has optab and the wider doesn't, or the wider is larger than word and narrower is one of the standard argument sizes (tested just int and long long, as long is on most targets same bitsize as one of those two). Joseph in the PR mentioned that ctz(narrow(X)) is the same as ctz(X) if UB on 0, but that can be handled incrementally (and would need different decisions when it is profitable). And clz(zext(X)) is clz(X) + bit_difference, but not sure we want to change that in match.pd at all, perhaps during insn selection? 2023-11-17 Jakub Jelinek PR tree-optimization/112566 PR tree-optimization/83171 * match.pd (ctz(ext(X)) -> ctz(X), popcount(zext(X)) -> popcount(X), parity(ext(X)) -> parity(X), ffs(ext(X)) -> ffs(X)): New simplifications. ( __builtin_ffs (X) == 0 -> X == 0): Use FFS rather than BUILT_IN_FFS BUILT_IN_FFSL BUILT_IN_FFSLL BUILT_IN_FFSIMAX. * gcc.dg/pr112566-1.c: New test. * gcc.dg/pr112566-2.c: New test. * gcc.target/i386/pr78057.c (foo): Pass another long long argument and use it in __builtin_ia32_*zcnt_u64 instead of the int one. --- gcc/match.pd | 183 +++++++++++++++++++++++- gcc/testsuite/gcc.dg/pr112566-1.c | 14 ++ gcc/testsuite/gcc.dg/pr112566-2.c | 12 ++ gcc/testsuite/gcc.target/i386/pr78057.c | 9 +- 4 files changed, 212 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr112566-1.c create mode 100644 gcc/testsuite/gcc.dg/pr112566-2.c diff --git a/gcc/match.pd b/gcc/match.pd index 59791f448512..b30de36e8362 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -8672,6 +8672,50 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) wi::shifted_mask (tree_to_uhwi (@1), 1, false, prec)); }))))))) +#if GIMPLE +/* ctz(ext(X)) == ctz(X). Valid just for the UB at zero cases though. */ +(simplify + (CTZ (convert@1 @0)) + (if (INTEGRAL_TYPE_P (TREE_TYPE (@1)) + && INTEGRAL_TYPE_P (TREE_TYPE (@0)) + && TYPE_PRECISION (TREE_TYPE (@1)) > TYPE_PRECISION (TREE_TYPE (@0))) + (with { combined_fn cfn = CFN_LAST; + tree type0 = TREE_TYPE (@0); + if (TREE_CODE (type0) == BITINT_TYPE) + { + if (TYPE_PRECISION (type0) > MAX_FIXED_MODE_SIZE) + cfn = CFN_CTZ; + else + type0 + = build_nonstandard_integer_type (TYPE_PRECISION (type0), + 1); + } + type0 = unsigned_type_for (type0); + if (cfn == CFN_LAST + && direct_internal_fn_supported_p (IFN_CTZ, type0, + OPTIMIZE_FOR_BOTH)) + cfn = CFN_CTZ; + if (cfn == CFN_LAST + && TYPE_PRECISION (TREE_TYPE (@1)) > BITS_PER_WORD + && !direct_internal_fn_supported_p (IFN_CTZ, + TREE_TYPE (@1), + OPTIMIZE_FOR_BOTH)) + { + if (TYPE_PRECISION (type0) + == TYPE_PRECISION (unsigned_type_node)) + cfn = CFN_BUILT_IN_CTZ; + else if (TYPE_PRECISION (type0) + == TYPE_PRECISION (long_long_unsigned_type_node)) + cfn = CFN_BUILT_IN_CTZLL; + } } + (if (cfn == CFN_CTZ) + (IFN_CTZ (convert:type0 @0)) + (if (cfn == CFN_BUILT_IN_CTZ) + (BUILT_IN_CTZ (convert:type0 @0)) + (if (cfn == CFN_BUILT_IN_CTZLL) + (BUILT_IN_CTZLL (convert:type0 @0)))))))) +#endif + /* POPCOUNT simplifications. */ /* popcount(X) + popcount(Y) is popcount(X|Y) when X&Y must be zero. */ (simplify @@ -8742,6 +8786,50 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (popcount:s @1)) (popcount (log2 @0 @1))))) +#if GIMPLE +/* popcount(zext(X)) == popcount(X). */ +(simplify + (POPCOUNT (convert@1 @0)) + (if (INTEGRAL_TYPE_P (TREE_TYPE (@1)) + && INTEGRAL_TYPE_P (TREE_TYPE (@0)) + && TYPE_UNSIGNED (TREE_TYPE (@0)) + && TYPE_PRECISION (TREE_TYPE (@1)) > TYPE_PRECISION (TREE_TYPE (@0))) + (with { combined_fn cfn = CFN_LAST; + tree type0 = TREE_TYPE (@0); + if (TREE_CODE (type0) == BITINT_TYPE) + { + if (TYPE_PRECISION (type0) > MAX_FIXED_MODE_SIZE) + cfn = CFN_POPCOUNT; + else + type0 + = build_nonstandard_integer_type (TYPE_PRECISION (type0), + 1); + } + if (cfn == CFN_LAST + && direct_internal_fn_supported_p (IFN_POPCOUNT, type0, + OPTIMIZE_FOR_BOTH)) + cfn = CFN_POPCOUNT; + if (cfn == CFN_LAST + && TYPE_PRECISION (TREE_TYPE (@1)) > BITS_PER_WORD + && !direct_internal_fn_supported_p (IFN_POPCOUNT, + TREE_TYPE (@1), + OPTIMIZE_FOR_BOTH)) + { + if (TYPE_PRECISION (type0) + == TYPE_PRECISION (unsigned_type_node)) + cfn = CFN_BUILT_IN_POPCOUNT; + else if (TYPE_PRECISION (type0) + == TYPE_PRECISION (long_long_unsigned_type_node)) + cfn = CFN_BUILT_IN_POPCOUNTLL; + } } + (if (cfn == CFN_POPCOUNT) + (IFN_POPCOUNT (convert:type0 @0)) + (if (cfn == CFN_BUILT_IN_POPCOUNT) + (BUILT_IN_POPCOUNT (convert:type0 @0)) + (if (cfn == CFN_BUILT_IN_POPCOUNTLL) + (BUILT_IN_POPCOUNTLL (convert:type0 @0)))))))) +#endif + /* PARITY simplifications. */ /* parity(~X) is parity(X). */ (simplify @@ -8780,6 +8868,54 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (bit_xor (PARITY:s @0) (PARITY:s @1)) (PARITY (bit_xor @0 @1))) +#if GIMPLE +/* parity(zext(X)) == parity(X). */ +/* parity(sext(X)) == parity(X) if the difference in precision is even. */ +(simplify + (PARITY (convert@1 @0)) + (if (INTEGRAL_TYPE_P (TREE_TYPE (@1)) + && INTEGRAL_TYPE_P (TREE_TYPE (@0)) + && TYPE_PRECISION (TREE_TYPE (@1)) > TYPE_PRECISION (TREE_TYPE (@0)) + && (TYPE_UNSIGNED (TREE_TYPE (@0)) + || ((TYPE_PRECISION (TREE_TYPE (@1)) + - TYPE_PRECISION (TREE_TYPE (@0))) & 1) == 0)) + (with { combined_fn cfn = CFN_LAST; + tree type0 = TREE_TYPE (@0); + if (TREE_CODE (type0) == BITINT_TYPE) + { + if (TYPE_PRECISION (type0) > MAX_FIXED_MODE_SIZE) + cfn = CFN_PARITY; + else + type0 + = build_nonstandard_integer_type (TYPE_PRECISION (type0), + 1); + } + type0 = unsigned_type_for (type0); + if (cfn == CFN_LAST + && direct_internal_fn_supported_p (IFN_PARITY, type0, + OPTIMIZE_FOR_BOTH)) + cfn = CFN_PARITY; + if (cfn == CFN_LAST + && TYPE_PRECISION (TREE_TYPE (@1)) > BITS_PER_WORD + && !direct_internal_fn_supported_p (IFN_PARITY, + TREE_TYPE (@1), + OPTIMIZE_FOR_BOTH)) + { + if (TYPE_PRECISION (type0) + == TYPE_PRECISION (unsigned_type_node)) + cfn = CFN_BUILT_IN_PARITY; + else if (TYPE_PRECISION (type0) + == TYPE_PRECISION (long_long_unsigned_type_node)) + cfn = CFN_BUILT_IN_PARITYLL; + } } + (if (cfn == CFN_PARITY) + (IFN_PARITY (convert:type0 @0)) + (if (cfn == CFN_BUILT_IN_PARITY) + (BUILT_IN_PARITY (convert:type0 @0)) + (if (cfn == CFN_BUILT_IN_PARITYLL) + (BUILT_IN_PARITYLL (convert:type0 @0)))))))) +#endif + /* a != 0 ? FUN(a) : 0 -> Fun(a) for some builtin functions. */ (for func (POPCOUNT BSWAP FFS PARITY) (simplify @@ -8987,8 +9123,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (plus (CTZ:type (convert:utype @0)) { build_one_cst (type); })))) #endif -(for ffs (BUILT_IN_FFS BUILT_IN_FFSL BUILT_IN_FFSLL - BUILT_IN_FFSIMAX) +(for ffs (FFS) /* __builtin_ffs (X) == 0 -> X == 0. __builtin_ffs (X) == 6 -> (X & 63) == 32. */ (for cmp (eq ne) @@ -9035,6 +9170,50 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) false, prec)); }) { build_zero_cst (TREE_TYPE (@0)); })))))))) +#if GIMPLE +/* ffs(ext(X)) == ffs(X). */ +(simplify + (FFS (convert@1 @0)) + (if (INTEGRAL_TYPE_P (TREE_TYPE (@1)) + && INTEGRAL_TYPE_P (TREE_TYPE (@0)) + && TYPE_PRECISION (TREE_TYPE (@1)) > TYPE_PRECISION (TREE_TYPE (@0))) + (with { combined_fn cfn = CFN_LAST; + tree type0 = TREE_TYPE (@0); + if (TREE_CODE (type0) == BITINT_TYPE) + { + if (TYPE_PRECISION (type0) > MAX_FIXED_MODE_SIZE) + cfn = CFN_FFS; + else + type0 + = build_nonstandard_integer_type (TYPE_PRECISION (type0), + 0); + } + type0 = signed_type_for (type0); + if (cfn == CFN_LAST + && direct_internal_fn_supported_p (IFN_FFS, type0, + OPTIMIZE_FOR_BOTH)) + cfn = CFN_FFS; + if (cfn == CFN_LAST + && TYPE_PRECISION (TREE_TYPE (@1)) > BITS_PER_WORD + && !direct_internal_fn_supported_p (IFN_FFS, + TREE_TYPE (@1), + OPTIMIZE_FOR_BOTH)) + { + if (TYPE_PRECISION (type0) + == TYPE_PRECISION (integer_type_node)) + cfn = CFN_BUILT_IN_FFS; + else if (TYPE_PRECISION (type0) + == TYPE_PRECISION (long_long_integer_type_node)) + cfn = CFN_BUILT_IN_FFSLL; + } } + (if (cfn == CFN_FFS) + (IFN_FFS (convert:type0 @0)) + (if (cfn == CFN_BUILT_IN_FFS) + (BUILT_IN_FFS (convert:type0 @0)) + (if (cfn == CFN_BUILT_IN_FFSLL) + (BUILT_IN_FFSLL (convert:type0 @0)))))))) +#endif + #if GIMPLE /* Simplify: diff --git a/gcc/testsuite/gcc.dg/pr112566-1.c b/gcc/testsuite/gcc.dg/pr112566-1.c new file mode 100644 index 000000000000..e7672ab5830a --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr112566-1.c @@ -0,0 +1,14 @@ +/* PR tree-optimization/112566 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ +/* { dg-additional-options "-mbmi2 -mlzcnt -mpopcnt" { target i?86-*-* x86_64-*-* } } */ +/* { dg-final { scan-tree-dump-not "ll \\\(" "optimized" { target ia32 } } } */ +/* { dg-final { scan-tree-dump-not "\\\(long long (unsigned )?int\\\)" "optimized" { target ia32 } } } */ + +int foo (unsigned int x) { return __builtin_ctzll (x); } +int bar (unsigned int x) { return __builtin_popcountll (x); } +int baz (unsigned int x) { return __builtin_parityll (x); } +int qux (int x) { return __builtin_ffsll (x); } +int corge (int x) { return __builtin_ctzll (x); } +int garply (int x) { return __builtin_parityll (x); } +int fred (unsigned int x) { return __builtin_ffsll (x); } diff --git a/gcc/testsuite/gcc.dg/pr112566-2.c b/gcc/testsuite/gcc.dg/pr112566-2.c new file mode 100644 index 000000000000..acf9ab6d8b12 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr112566-2.c @@ -0,0 +1,12 @@ +/* PR tree-optimization/112566 */ +/* { dg-do compile { target bitint575 } } */ +/* { dg-options "-O2 -fdump-tree-ccp2" } */ +/* { dg-final { scan-tree-dump-not "\\\((unsigned )?_BitInt\\\(512\\\)\\\)" "ccp2" } } */ + +int foo (unsigned _BitInt(256) x) { return __builtin_ctzg ((unsigned _BitInt(512)) x); } +int bar (unsigned _BitInt(256) x) { return __builtin_popcountg ((unsigned _BitInt(512)) x); } +int baz (unsigned _BitInt(256) x) { return __builtin_parityg ((unsigned _BitInt(512)) x); } +int qux (_BitInt(256) x) { return __builtin_ffsg ((_BitInt(512)) x); } +int corge (_BitInt(256) x) { return __builtin_ctzg ((unsigned _BitInt(512)) x); } +int garply (_BitInt(256) x) { return __builtin_parityg ((unsigned _BitInt(512)) x); } +int fred (unsigned _BitInt(256) x) { return __builtin_ffsg ((_BitInt(512)) x); } diff --git a/gcc/testsuite/gcc.target/i386/pr78057.c b/gcc/testsuite/gcc.target/i386/pr78057.c index 493a53332bb1..b1f7a24e7acf 100644 --- a/gcc/testsuite/gcc.target/i386/pr78057.c +++ b/gcc/testsuite/gcc.target/i386/pr78057.c @@ -5,7 +5,7 @@ extern void link_error (void); int -foo (int x) +foo (int x, long long y) { if (__builtin_ia32_tzcnt_u16 (16) != 4 || __builtin_ia32_tzcnt_u16 (0) != 16 @@ -24,13 +24,14 @@ foo (int x) ) link_error (); x += 2; - if (x == 0) + y += 2; + if (x == 0 || y == 0) return 5; return __builtin_ia32_tzcnt_u32 (x) + __builtin_ia32_lzcnt_u32 (x) #ifdef __x86_64__ - + __builtin_ia32_tzcnt_u64 (x) - + __builtin_ia32_lzcnt_u64 (x) + + __builtin_ia32_tzcnt_u64 (y) + + __builtin_ia32_lzcnt_u64 (y) #endif ; } From 9c950c0ad8d3f94112810d70018537b618796284 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Fri, 17 Nov 2023 12:24:03 +0000 Subject: [PATCH 134/169] libstdc++: Fix Doxygen markup libstdc++-v3/ChangeLog: * include/bits/chrono_io.h: Fix Doxygen markup. --- libstdc++-v3/include/bits/chrono_io.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libstdc++-v3/include/bits/chrono_io.h b/libstdc++-v3/include/bits/chrono_io.h index 7352df095ff4..16e8fc58dffb 100644 --- a/libstdc++-v3/include/bits/chrono_io.h +++ b/libstdc++-v3/include/bits/chrono_io.h @@ -2242,7 +2242,7 @@ namespace __detail using _Parser_t = _Parser>; } // namespace __detail -/// ~endcond +/// @endcond template> From 66c15287ddbdc9c270fca528bb641d265a370dcc Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Fri, 17 Nov 2023 12:52:45 +0000 Subject: [PATCH 135/169] libstdc++: Add more Doxygen comments and another test for std::out_ptr Improve Doxygen comments for std::out_ptr etc. and add a test for the feature test macro. Also remove a redundant preprocessor condition. Ideally the docs for std::out_ptr and std::inout_ptr would show examples of how to use them and what they do, but that would take some effort. I'll aim to do that before GCC 14 is released. libstdc++-v3/ChangeLog: * include/bits/out_ptr.h: Add Doxygen comments. Remove a redundant preprocessor condition. * testsuite/20_util/smartptr.adapt/version.cc: New test. --- libstdc++-v3/include/bits/out_ptr.h | 41 ++++++++++++++++--- .../20_util/smartptr.adapt/version.cc | 19 +++++++++ 2 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 libstdc++-v3/testsuite/20_util/smartptr.adapt/version.cc diff --git a/libstdc++-v3/include/bits/out_ptr.h b/libstdc++-v3/include/bits/out_ptr.h index 49712fa7e31c..aeeb66404418 100644 --- a/libstdc++-v3/include/bits/out_ptr.h +++ b/libstdc++-v3/include/bits/out_ptr.h @@ -43,8 +43,14 @@ namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION -#ifdef __glibcxx_out_ptr // C++ >= 23 - /// Adapt a smart pointer for functions taking an output pointer parameter. + /// Smart pointer adaptor for functions taking an output pointer parameter. + /** + * @tparam _Smart The type of pointer to adapt. + * @tparam _Pointer The type of pointer to convert to. + * @tparam _Args... Argument types used when resetting the smart pointer. + * @since C++23 + * @headerfile + */ template class out_ptr_t { @@ -276,7 +282,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template friend class inout_ptr_t; }; - /// Adapt a smart pointer for functions taking an output pointer parameter. + /// Smart pointer adaptor for functions taking an inout pointer parameter. + /** + * @tparam _Smart The type of pointer to adapt. + * @tparam _Pointer The type of pointer to convert to. + * @tparam _Args... Argument types used when resetting the smart pointer. + * @since C++23 + * @headerfile + */ template class inout_ptr_t { @@ -367,6 +380,15 @@ namespace __detail } /// @endcond + /// Adapt a smart pointer for functions taking an output pointer parameter. + /** + * @tparam _Pointer The type of pointer to convert to. + * @param __s The pointer that should take ownership of the result. + * @param __args... Arguments to use when resetting the smart pointer. + * @return A std::inout_ptr_t referring to `__s`. + * @since C++23 + * @headerfile + */ template inline auto out_ptr(_Smart& __s, _Args&&... __args) @@ -379,6 +401,15 @@ namespace __detail return _Ret(__s, std::forward<_Args>(__args)...); } + /// Adapt a smart pointer for functions taking an inout pointer parameter. + /** + * @tparam _Pointer The type of pointer to convert to. + * @param __s The pointer that should take ownership of the result. + * @param __args... Arguments to use when resetting the smart pointer. + * @return A std::inout_ptr_t referring to `__s`. + * @since C++23 + * @headerfile + */ template inline auto inout_ptr(_Smart& __s, _Args&&... __args) @@ -391,6 +422,7 @@ namespace __detail return _Ret(__s, std::forward<_Args>(__args)...); } + /// @cond undocumented template template inline @@ -422,11 +454,10 @@ namespace __detail else __reset(); } -#endif // __glibcxx_out_ptr + /// @endcond _GLIBCXX_END_NAMESPACE_VERSION } // namespace #endif // __glibcxx_out_ptr #endif /* _GLIBCXX_OUT_PTR_H */ - diff --git a/libstdc++-v3/testsuite/20_util/smartptr.adapt/version.cc b/libstdc++-v3/testsuite/20_util/smartptr.adapt/version.cc new file mode 100644 index 000000000000..5110f8b371e1 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/smartptr.adapt/version.cc @@ -0,0 +1,19 @@ +// { dg-do preprocess { target c++23 } } +// { dg-add-options no_pch } + +#include + +#ifndef __cpp_lib_out_ptr +# error "Feature test macro for out_ptr is missing in " +#elif __cpp_lib_out_ptr < 202106L +# error "Feature test macro for out_ptr has wrong value in " +#endif + +#undef __cpp_lib_out_ptr +#include + +#ifndef __cpp_lib_out_ptr +# error "Feature test macro for out_ptr is missing in " +#elif __cpp_lib_out_ptr < 202106L +# error "Feature test macro for out_ptr has wrong value in " +#endif From 97fc8851f60fda381ac3bf6213a1cc93d9fda4f0 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Fri, 17 Nov 2023 12:18:17 +0000 Subject: [PATCH 136/169] libstdc++: Adjust std::in_range template parameter name This is more consistent with the specification in the standard. libstdc++-v3/ChangeLog: * include/std/utility (in_range): Rename _Up parameter to _Res. --- libstdc++-v3/include/std/utility | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/libstdc++-v3/include/std/utility b/libstdc++-v3/include/std/utility index 18bef7adccdd..5d5fcc7da73c 100644 --- a/libstdc++-v3/include/std/utility +++ b/libstdc++-v3/include/std/utility @@ -171,22 +171,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION cmp_greater_equal(_Tp __t, _Up __u) noexcept { return !std::cmp_less(__t, __u); } - template + template constexpr bool in_range(_Tp __t) noexcept { - static_assert(__is_standard_integer<_Up>::value); + static_assert(__is_standard_integer<_Res>::value); static_assert(__is_standard_integer<_Tp>::value); using __gnu_cxx::__int_traits; - if constexpr (is_signed_v<_Tp> == is_signed_v<_Up>) - return __int_traits<_Up>::__min <= __t - && __t <= __int_traits<_Up>::__max; + if constexpr (is_signed_v<_Tp> == is_signed_v<_Res>) + return __int_traits<_Res>::__min <= __t + && __t <= __int_traits<_Res>::__max; else if constexpr (is_signed_v<_Tp>) return __t >= 0 - && make_unsigned_t<_Tp>(__t) <= __int_traits<_Up>::__max; + && make_unsigned_t<_Tp>(__t) <= __int_traits<_Res>::__max; else - return __t <= make_unsigned_t<_Up>(__int_traits<_Up>::__max); + return __t <= make_unsigned_t<_Res>(__int_traits<_Res>::__max); } #endif // __cpp_lib_integer_comparison_functions From 52eedfa00960f2d255ec542626e3531a65aa8bb8 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 17 Nov 2023 15:43:31 +0100 Subject: [PATCH 137/169] c++: Implement C++ DR 2406 - [[fallthrough]] attribute and iteration statements The following patch implements CWG 2406 - [[fallthrough]] attribute and iteration statements The genericization of some loops leaves nothing at all or just a label after a body of a loop, so if the loop is later followed by case or default label in a switch, the fallthrough statement isn't diagnosed. The following patch implements it by marking the IFN_FALLTHROUGH call in such a case, such that during gimplification it can be pedantically diagnosed even if it is followed by case or default label or some normal labels followed by case/default labels. While looking into this, I've discovered other problems. expand_FALLTHROUGH_r is removing the IFN_FALLTHROUGH calls from the IL, but wasn't telling that to walk_gimple_stmt/walk_gimple_seq_mod, so the callers would then skip the next statement after it, and it would return non-NULL if the removed stmt was last in the sequence. This could lead to wi->callback_result being set even if it didn't appear at the very end of switch sequence. The patch makes use of wi->removed_stmt such that the callers properly know what happened, and use different way to handle the end of switch sequence case. That change discovered a bug in the gimple-walk handling of wi->removed_stmt. If that flag is set, the callback is telling the callers that the current statement has been removed and so the innermost walk_gimple_seq_mod shouldn't gsi_next. The problem is that wi->removed_stmt is only reset at the start of a walk_gimple_stmt, but that can be too late for some cases. If we have two nested gimple sequences, say GIMPLE_BIND as the last stmt of some gimple seq, we remove the last statement inside of that GIMPLE_BIND, set wi->removed_stmt there, don't do gsi_next correctly because already gsi_remove moved us to the next stmt, there is no next stmt, so we return back to the caller, but wi->removed_stmt is still set and so we don't do gsi_next even in the outer sequence, despite the GIMPLE_BIND (etc.) not being removed. That means we walk the GIMPLE_BIND with its whole sequence again. The patch fixes that by resetting wi->removed_stmt after we've used that flag in walk_gimple_seq_mod. Nothing really uses that flag after the outermost walk_gimple_seq_mod, it is just a private notification that the stmt callback has removed a stmt. 2023-11-17 Jakub Jelinek PR c++/107571 gcc/ * gimplify.cc (expand_FALLTHROUGH_r): Use wi->removed_stmt after gsi_remove, change the way of passing fallthrough stmt at the end of sequence to expand_FALLTHROUGH. Diagnose IFN_FALLTHROUGH with GF_CALL_NOTHROW flag. (expand_FALLTHROUGH): Change loc into array of 2 location_t elts, don't test wi.callback_result, instead check whether first elt is not UNKNOWN_LOCATION and in that case pedwarn with the second location. * gimple-walk.cc (walk_gimple_seq_mod): Clear wi->removed_stmt after the flag has been used. * internal-fn.def (FALLTHROUGH): Mention in comment the special meaning of the TREE_NOTHROW/GF_CALL_NOTHROW flag on the calls. gcc/c-family/ * c-gimplify.cc (genericize_c_loop): For C++ mark IFN_FALLTHROUGH call at the end of loop body as TREE_NOTHROW. gcc/testsuite/ * g++.dg/DRs/dr2406.C: New test. --- gcc/c-family/c-gimplify.cc | 21 ++++++++ gcc/gimple-walk.cc | 12 ++++- gcc/gimplify.cc | 33 ++++++++++--- gcc/internal-fn.def | 4 +- gcc/testsuite/g++.dg/DRs/dr2406.C | 82 +++++++++++++++++++++++++++++++ 5 files changed, 143 insertions(+), 9 deletions(-) create mode 100644 gcc/testsuite/g++.dg/DRs/dr2406.C diff --git a/gcc/c-family/c-gimplify.cc b/gcc/c-family/c-gimplify.cc index 2f44e125f925..694ccf921a60 100644 --- a/gcc/c-family/c-gimplify.cc +++ b/gcc/c-family/c-gimplify.cc @@ -307,6 +307,27 @@ genericize_c_loop (tree *stmt_p, location_t start_locus, tree cond, tree body, } append_to_statement_list (body, &stmt_list); + if (c_dialect_cxx () + && stmt_list + && TREE_CODE (stmt_list) == STATEMENT_LIST) + { + tree_stmt_iterator tsi = tsi_last (stmt_list); + if (!tsi_end_p (tsi)) + { + tree t = *tsi; + while (TREE_CODE (t) == CLEANUP_POINT_EXPR + || TREE_CODE (t) == EXPR_STMT + || CONVERT_EXPR_CODE_P (TREE_CODE (t))) + t = TREE_OPERAND (t, 0); + /* For C++, if iteration statement body ends with fallthrough + statement, mark it such that we diagnose it even if next + statement would be labeled statement with case/default label. */ + if (TREE_CODE (t) == CALL_EXPR + && !CALL_EXPR_FN (t) + && CALL_EXPR_IFN (t) == IFN_FALLTHROUGH) + TREE_NOTHROW (t) = 1; + } + } finish_bc_block (&stmt_list, bc_continue, clab); if (incr) { diff --git a/gcc/gimple-walk.cc b/gcc/gimple-walk.cc index 9516d61ffa99..20df7e2d7e40 100644 --- a/gcc/gimple-walk.cc +++ b/gcc/gimple-walk.cc @@ -56,11 +56,21 @@ walk_gimple_seq_mod (gimple_seq *pseq, walk_stmt_fn callback_stmt, gcc_assert (wi); wi->callback_result = ret; - return wi->removed_stmt ? NULL : gsi_stmt (gsi); + gimple *g; + if (!wi->removed_stmt) + g = gsi_stmt (gsi); + else + { + g = NULL; + wi->removed_stmt = false; + } + return g; } if (!wi->removed_stmt) gsi_next (&gsi); + else + wi->removed_stmt = false; } if (wi) diff --git a/gcc/gimplify.cc b/gcc/gimplify.cc index 77f07af6ec5c..d52d71b9b6bc 100644 --- a/gcc/gimplify.cc +++ b/gcc/gimplify.cc @@ -2791,17 +2791,33 @@ expand_FALLTHROUGH_r (gimple_stmt_iterator *gsi_p, bool *handled_ops_p, *handled_ops_p = false; break; case GIMPLE_CALL: + static_cast(wi->info)[0] = UNKNOWN_LOCATION; if (gimple_call_internal_p (stmt, IFN_FALLTHROUGH)) { + location_t loc = gimple_location (stmt); gsi_remove (gsi_p, true); + wi->removed_stmt = true; + + /* nothrow flag is added by genericize_c_loop to mark fallthrough + statement at the end of some loop's body. Those should be + always diagnosed, either because they indeed don't precede + a case label or default label, or because the next statement + is not within the same iteration statement. */ + if ((stmt->subcode & GF_CALL_NOTHROW) != 0) + { + pedwarn (loc, 0, "attribute % not preceding " + "a case label or default label"); + break; + } + if (gsi_end_p (*gsi_p)) { - *static_cast(wi->info) = gimple_location (stmt); - return integer_zero_node; + static_cast(wi->info)[0] = BUILTINS_LOCATION; + static_cast(wi->info)[1] = loc; + break; } bool found = false; - location_t loc = gimple_location (stmt); gimple_stmt_iterator gsi2 = *gsi_p; stmt = gsi_stmt (gsi2); @@ -2851,6 +2867,7 @@ expand_FALLTHROUGH_r (gimple_stmt_iterator *gsi_p, bool *handled_ops_p, } break; default: + static_cast(wi->info)[0] = UNKNOWN_LOCATION; break; } return NULL_TREE; @@ -2862,14 +2879,16 @@ static void expand_FALLTHROUGH (gimple_seq *seq_p) { struct walk_stmt_info wi; - location_t loc; + location_t loc[2]; memset (&wi, 0, sizeof (wi)); - wi.info = (void *) &loc; + loc[0] = UNKNOWN_LOCATION; + loc[1] = UNKNOWN_LOCATION; + wi.info = (void *) &loc[0]; walk_gimple_seq_mod (seq_p, expand_FALLTHROUGH_r, NULL, &wi); - if (wi.callback_result == integer_zero_node) + if (loc[0] != UNKNOWN_LOCATION) /* We've found [[fallthrough]]; at the end of a switch, which the C++ standard says is ill-formed; see [dcl.attr.fallthrough]. */ - pedwarn (loc, 0, "attribute % not preceding " + pedwarn (loc[1], 0, "attribute % not preceding " "a case label or default label"); } diff --git a/gcc/internal-fn.def b/gcc/internal-fn.def index 319e0ab26cde..3d5aca0cddfe 100644 --- a/gcc/internal-fn.def +++ b/gcc/internal-fn.def @@ -533,7 +533,9 @@ DEF_INTERNAL_FN (ATOMIC_AND_FETCH_CMP_0, ECF_LEAF, NULL) DEF_INTERNAL_FN (ATOMIC_OR_FETCH_CMP_0, ECF_LEAF, NULL) DEF_INTERNAL_FN (ATOMIC_XOR_FETCH_CMP_0, ECF_LEAF, NULL) -/* To implement [[fallthrough]]. */ +/* To implement [[fallthrough]]. If the TREE_NOTHROW or GF_CALL_NOTHROW flag + is set on the call (normally redundant with ECF_NOTHROW), it marks + [[fallthrough]] at the end of C++ loop body. */ DEF_INTERNAL_FN (FALLTHROUGH, ECF_LEAF | ECF_NOTHROW, NULL) /* To implement __builtin_launder. */ diff --git a/gcc/testsuite/g++.dg/DRs/dr2406.C b/gcc/testsuite/g++.dg/DRs/dr2406.C new file mode 100644 index 000000000000..856a1ea2f91b --- /dev/null +++ b/gcc/testsuite/g++.dg/DRs/dr2406.C @@ -0,0 +1,82 @@ +// DR 2406 - [[fallthrough]] attribute and iteration statements +// PR c++/107571 +// { dg-do compile { target c++11 } } +// { dg-options "-pedantic-errors -Wimplicit-fallthrough" } + +void bar (); +void baz (); +void qux (); + +void +foo (int n) +{ + switch (n) + { + case 1: + case 2: + bar (); + [[fallthrough]]; + case 3: + do + { + [[fallthrough]]; // { dg-error "attribute 'fallthrough' not preceding a case label or default label" } + } + while (false); + case 6: + do + { + [[fallthrough]]; // { dg-error "attribute 'fallthrough' not preceding a case label or default label" } + } + while (n--); + case 7: + while (false) + { + [[fallthrough]]; // { dg-error "attribute 'fallthrough' not preceding a case label or default label" } + } + case 5: + baz (); // { dg-warning "this statement may fall through" } + case 4: // { dg-message "here" } + qux (); + [[fallthrough]]; // { dg-error "attribute 'fallthrough' not preceding a case label or default label" } + } +} + +void +corge (int n) +{ + switch (n) + { + case 1: + { + int i = 0; + do + { + [[fallthrough]]; // { dg-error "attribute 'fallthrough' not preceding a case label or default label" } + } + while (false); + } + case 2: + bar (); + break; + default: + break; + } +} + +void +fred (int n) +{ + switch (n) + { + case 1: + { + int i = 0; + [[fallthrough]]; + } + case 2: + bar (); + break; + default: + break; + } +} From 568eb2d25c8f797707309b4f3acbb76c73e1a446 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Fri, 17 Nov 2023 13:01:17 +0000 Subject: [PATCH 138/169] libstdc++: Define C++26 saturation arithmetic functions (P0543R3) This was approved for C++26 last week at the WG21 meeting in Kona. libstdc++-v3/ChangeLog: * include/Makefile.am: Add new header. * include/Makefile.in: Regenerate. * include/bits/version.def (saturation_arithmetic): Define. * include/bits/version.h: Regenerate. * include/std/numeric: Include new header. * include/bits/sat_arith.h: New file. * testsuite/26_numerics/saturation/add.cc: New test. * testsuite/26_numerics/saturation/cast.cc: New test. * testsuite/26_numerics/saturation/div.cc: New test. * testsuite/26_numerics/saturation/mul.cc: New test. * testsuite/26_numerics/saturation/sub.cc: New test. * testsuite/26_numerics/saturation/version.cc: New test. --- libstdc++-v3/include/Makefile.am | 1 + libstdc++-v3/include/Makefile.in | 1 + libstdc++-v3/include/bits/sat_arith.h | 148 ++++++++++++++++++ libstdc++-v3/include/bits/version.def | 8 + libstdc++-v3/include/bits/version.h | 11 ++ libstdc++-v3/include/std/numeric | 5 + .../testsuite/26_numerics/saturation/add.cc | 73 +++++++++ .../testsuite/26_numerics/saturation/cast.cc | 24 +++ .../testsuite/26_numerics/saturation/div.cc | 45 ++++++ .../testsuite/26_numerics/saturation/mul.cc | 34 ++++ .../testsuite/26_numerics/saturation/sub.cc | 86 ++++++++++ .../26_numerics/saturation/version.cc | 19 +++ 12 files changed, 455 insertions(+) create mode 100644 libstdc++-v3/include/bits/sat_arith.h create mode 100644 libstdc++-v3/testsuite/26_numerics/saturation/add.cc create mode 100644 libstdc++-v3/testsuite/26_numerics/saturation/cast.cc create mode 100644 libstdc++-v3/testsuite/26_numerics/saturation/div.cc create mode 100644 libstdc++-v3/testsuite/26_numerics/saturation/mul.cc create mode 100644 libstdc++-v3/testsuite/26_numerics/saturation/sub.cc create mode 100644 libstdc++-v3/testsuite/26_numerics/saturation/version.cc diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am index dab9f720cbb3..17d9d9cec313 100644 --- a/libstdc++-v3/include/Makefile.am +++ b/libstdc++-v3/include/Makefile.am @@ -142,6 +142,7 @@ bits_freestanding = \ ${bits_srcdir}/ranges_uninitialized.h \ ${bits_srcdir}/ranges_util.h \ ${bits_srcdir}/refwrap.h \ + ${bits_srcdir}/sat_arith.h \ ${bits_srcdir}/stl_algo.h \ ${bits_srcdir}/stl_algobase.h \ ${bits_srcdir}/stl_construct.h \ diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in index 4f7ab2dfbaba..f038af709cc4 100644 --- a/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in @@ -497,6 +497,7 @@ bits_freestanding = \ ${bits_srcdir}/ranges_uninitialized.h \ ${bits_srcdir}/ranges_util.h \ ${bits_srcdir}/refwrap.h \ + ${bits_srcdir}/sat_arith.h \ ${bits_srcdir}/stl_algo.h \ ${bits_srcdir}/stl_algobase.h \ ${bits_srcdir}/stl_construct.h \ diff --git a/libstdc++-v3/include/bits/sat_arith.h b/libstdc++-v3/include/bits/sat_arith.h new file mode 100644 index 000000000000..71793467984b --- /dev/null +++ b/libstdc++-v3/include/bits/sat_arith.h @@ -0,0 +1,148 @@ +// Saturation arithmetic -*- C++ -*- + +// Copyright The GNU Toolchain Authors. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/bits/sat_arith.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{numeric} + */ + +#ifndef _GLIBCXX_SAT_ARITH_H +#define _GLIBCXX_SAT_ARITH_H 1 + +#pragma GCC system_header + +#include + +#ifdef __glibcxx_saturation_arithmetic // C++ >= 26 + +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /// Add two integers, with saturation in case of overflow. + template requires __is_standard_integer<_Tp>::value + constexpr _Tp + add_sat(_Tp __x, _Tp __y) noexcept + { + _Tp __z; + if (!__builtin_add_overflow(__x, __y, &__z)) + return __z; + if constexpr (is_unsigned_v<_Tp>) + return __gnu_cxx::__int_traits<_Tp>::__max; + else if (__x < 0) + return __gnu_cxx::__int_traits<_Tp>::__min; + else + return __gnu_cxx::__int_traits<_Tp>::__max; + } + + /// Subtract one integer from another, with saturation in case of overflow. + template requires __is_standard_integer<_Tp>::value + constexpr _Tp + sub_sat(_Tp __x, _Tp __y) noexcept + { + _Tp __z; + if (!__builtin_sub_overflow(__x, __y, &__z)) + return __z; + if constexpr (is_unsigned_v<_Tp>) + return __gnu_cxx::__int_traits<_Tp>::__min; + else if (__x < 0) + return __gnu_cxx::__int_traits<_Tp>::__min; + else + return __gnu_cxx::__int_traits<_Tp>::__max; + } + + /// Multiply two integers, with saturation in case of overflow. + template requires __is_standard_integer<_Tp>::value + constexpr _Tp + mul_sat(_Tp __x, _Tp __y) noexcept + { + _Tp __z; + if (!__builtin_mul_overflow(__x, __y, &__z)) + return __z; + if constexpr (is_unsigned_v<_Tp>) + return __gnu_cxx::__int_traits<_Tp>::__max; + else if (__x < 0 != __y < 0) + return __gnu_cxx::__int_traits<_Tp>::__min; + else + return __gnu_cxx::__int_traits<_Tp>::__max; + } + + /// Divide one integer by another, with saturation in case of overflow. + template requires __is_standard_integer<_Tp>::value + constexpr _Tp + div_sat(_Tp __x, _Tp __y) noexcept + { + __glibcxx_assert(__y != 0); + if constexpr (is_signed_v<_Tp>) + if (__x == __gnu_cxx::__int_traits<_Tp>::__min && __y == _Tp(-1)) + return __gnu_cxx::__int_traits<_Tp>::__max; + return __x / __y; + } + + /// Divide one integer by another, with saturation in case of overflow. + template + requires __is_standard_integer<_Res>::value + && __is_standard_integer<_Tp>::value + constexpr _Res + saturate_cast(_Tp __x) noexcept + { + constexpr int __digits_R = __gnu_cxx::__int_traits<_Res>::__digits; + constexpr int __digits_T = __gnu_cxx::__int_traits<_Tp>::__digits; + constexpr _Res __max_Res = __gnu_cxx::__int_traits<_Res>::__max; + + if constexpr (is_signed_v<_Res> == is_signed_v<_Tp>) + { + if constexpr (__digits_R < __digits_T) + { + constexpr _Res __min_Res = __gnu_cxx::__int_traits<_Res>::__min; + + if (__x < static_cast<_Tp>(__min_Res)) + return __min_Res; + else if (__x > static_cast<_Tp>(__max_Res)) + return __max_Res; + } + } + else if constexpr (is_signed_v<_Tp>) // Res is unsigned + { + if (__x < 0) + return 0; + else if (make_unsigned_t<_Tp>(__x) > __max_Res) + return __gnu_cxx::__int_traits<_Res>::__max; + } + else // Tp is unsigned, Res is signed + { + if (__x > make_unsigned_t<_Res>(__max_Res)) + return __max_Res; + } + return static_cast<_Res>(__x); + } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif // __glibcxx_saturation_arithmetic +#endif /* _GLIBCXX_SAT_ARITH_H */ diff --git a/libstdc++-v3/include/bits/version.def b/libstdc++-v3/include/bits/version.def index 60400b3b8d24..447fdeb95193 100644 --- a/libstdc++-v3/include/bits/version.def +++ b/libstdc++-v3/include/bits/version.def @@ -1631,6 +1631,14 @@ ftms = { }; }; +ftms = { + name = saturation_arithmetic; + values = { + v = 202311; + cxxmin = 26; + }; +}; + ftms = { name = to_string; values = { diff --git a/libstdc++-v3/include/bits/version.h b/libstdc++-v3/include/bits/version.h index 2e2af3e0c414..97c6d8508f48 100644 --- a/libstdc++-v3/include/bits/version.h +++ b/libstdc++-v3/include/bits/version.h @@ -2000,6 +2000,17 @@ #undef __glibcxx_want_ratio // from version.def line 1635 +#if !defined(__cpp_lib_saturation_arithmetic) +# if (__cplusplus > 202302L) +# define __glibcxx_saturation_arithmetic 202311L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_saturation_arithmetic) +# define __cpp_lib_saturation_arithmetic 202311L +# endif +# endif +#endif /* !defined(__cpp_lib_saturation_arithmetic) && defined(__glibcxx_want_saturation_arithmetic) */ +#undef __glibcxx_want_saturation_arithmetic + +// from version.def line 1643 #if !defined(__cpp_lib_to_string) # if (__cplusplus > 202302L) && _GLIBCXX_HOSTED && (__glibcxx_to_chars) # define __glibcxx_to_string 202306L diff --git a/libstdc++-v3/include/std/numeric b/libstdc++-v3/include/std/numeric index 559e6242e929..fa8ef51c447f 100644 --- a/libstdc++-v3/include/std/numeric +++ b/libstdc++-v3/include/std/numeric @@ -86,8 +86,13 @@ #define __glibcxx_want_lcm #define __glibcxx_want_parallel_algorithm #define __glibcxx_want_ranges_iota +#define __glibcxx_want_saturation_arithmetic #include +#ifdef __glibcxx_saturation_arithmetic // C++ >= 26 +# include +#endif + /** * @defgroup numerics Numerics * diff --git a/libstdc++-v3/testsuite/26_numerics/saturation/add.cc b/libstdc++-v3/testsuite/26_numerics/saturation/add.cc new file mode 100644 index 000000000000..3eee6abca9a1 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/saturation/add.cc @@ -0,0 +1,73 @@ +// { dg-do compile { target c++26 } } + +// C++26 Saturation arithmetic [numerics.sat] + +#include +#include + +template +concept can_add_sat + = requires(T t, U u) { { std::add_sat(t, u) } -> std::same_as; }; + +static_assert( can_add_sat ); +static_assert( not can_add_sat ); +static_assert( not can_add_sat ); +static_assert( noexcept(std::add_sat(0, 0)) ); + +using std::add_sat; + +// Signed type +static_assert(add_sat(0, 0) == 0); +static_assert(add_sat(1, 1) == 2); +static_assert(add_sat(-1, -1) == -2); +static_assert(add_sat(-1, 1) == 0); +constexpr auto max = std::numeric_limits::max(); +constexpr auto min = std::numeric_limits::min(); +static_assert(add_sat(max, 1) == max); +static_assert(add_sat(1, max) == max); +static_assert(add_sat(max, max) == max); +static_assert(add_sat(min, -1) == min); +static_assert(add_sat(-1, min) == min); +static_assert(add_sat(min, min) == min); +static_assert(add_sat(max, min) == -1); +static_assert(add_sat(min, max) == -1); + +// Wider signed type than the args +static_assert(add_sat(max, max) == (long long)max * 2); +static_assert(add_sat(min, min) == (long long)min * 2); + +// Signed type that undergoes integer promotion +constexpr auto shrt_max = std::numeric_limits::max(); +constexpr auto shrt_min = std::numeric_limits::min(); +static_assert(add_sat(0, 0) == 0); +static_assert(add_sat(1, 1) == 2); +static_assert(add_sat(shrt_max, shrt_max) == shrt_max); +static_assert(add_sat(shrt_max, 1) == shrt_max); +static_assert(add_sat(1, shrt_max) == shrt_max); +static_assert(add_sat(shrt_min, (short)-1) == shrt_min); +static_assert(add_sat((short)-1, shrt_min) == shrt_min); +static_assert(add_sat(shrt_min, (short)1) == -shrt_max); +static_assert(add_sat((short)1, shrt_min) == -shrt_max); + +// Unsigned type +static_assert(add_sat(0u, 0u) == 0u); +static_assert(add_sat(1u, 1u) == 2u); +constexpr auto umax = std::numeric_limits::max(); +static_assert(add_sat(umax, 1u) == umax); +static_assert(add_sat(1u, umax) == umax); +static_assert(add_sat(umax, umax) == umax); +static_assert(add_sat(0u, umax) == umax); +static_assert(add_sat(umax, 0u) == umax); +static_assert(add_sat(0u, 1u) == 1u); +static_assert(add_sat(1u, 0u) == 1u); + +// Wider unsigned type than the args +static_assert(add_sat(umax, umax) == (long long)umax * 2); + +// Unsigned type that undergoes integer promotion +constexpr auto ushrt_max = std::numeric_limits::max(); +static_assert(add_sat(0, 0) == 0); +static_assert(add_sat(1, 1) == 2); +static_assert(add_sat(ushrt_max, ushrt_max) == ushrt_max); +static_assert(add_sat(ushrt_max, 1) == ushrt_max); +static_assert(add_sat(1, ushrt_max) == ushrt_max); diff --git a/libstdc++-v3/testsuite/26_numerics/saturation/cast.cc b/libstdc++-v3/testsuite/26_numerics/saturation/cast.cc new file mode 100644 index 000000000000..672e9c46be1c --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/saturation/cast.cc @@ -0,0 +1,24 @@ +// { dg-do compile { target c++26 } } + +// C++26 Saturation arithmetic [numerics.sat] + +#include +#include + +#if CHAR_BIT == 8 +static_assert(std::saturate_cast(999) == 255); +static_assert(std::saturate_cast(999) == 127); +#endif +static_assert(std::saturate_cast(999) == 999); +static_assert(std::saturate_cast(999) == 999); +static_assert(std::saturate_cast(INT_MAX) == SHRT_MAX); +static_assert(std::saturate_cast(UINT_MAX) == SHRT_MAX); +static_assert(std::saturate_cast(UINT_MAX) == SHRT_MAX); +static_assert(std::saturate_cast(UINT_MAX) == USHRT_MAX); +static_assert(std::saturate_cast(UINT_MAX) == INT_MAX); +static_assert(std::saturate_cast(INT_MAX) == INT_MAX); +static_assert(std::saturate_cast(-1) == 0); +static_assert(std::saturate_cast(INT_MIN) == 0); +static_assert(std::saturate_cast(UINT_MAX) == UINT_MAX); +static_assert(std::saturate_cast(LLONG_MAX) == UINT_MAX); +static_assert(std::saturate_cast(ULLONG_MAX) == UINT_MAX); diff --git a/libstdc++-v3/testsuite/26_numerics/saturation/div.cc b/libstdc++-v3/testsuite/26_numerics/saturation/div.cc new file mode 100644 index 000000000000..a3f43573651a --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/saturation/div.cc @@ -0,0 +1,45 @@ +// { dg-do compile { target c++26 } } + +// C++26 Saturation arithmetic [numerics.sat] + +#include +#include + +template +concept can_div_sat + = requires(T t, U u) { { std::div_sat(t, u) } -> std::same_as; }; + +static_assert( can_div_sat ); +static_assert( not can_div_sat ); +static_assert( not can_div_sat ); +static_assert( noexcept(std::div_sat(0, 1)) ); + +using std::div_sat; + +static_assert(std::div_sat(0, 1) == 0); +static_assert(std::div_sat(0, -1) == 0); +static_assert(std::div_sat(1, -1) == -1); +static_assert(std::div_sat(10, -2) == -5); +static_assert(std::div_sat(-10, -2) == 5); +static_assert(std::div_sat(INT_MAX, 1) == INT_MAX); +static_assert(std::div_sat(INT_MIN, 1) == INT_MIN); +static_assert(std::div_sat(INT_MIN + 1, -1) == INT_MAX); +static_assert(std::div_sat(0u, 1u) == 0u); +static_assert(std::div_sat(UINT_MAX, 1u) == UINT_MAX); +static_assert(std::div_sat(INT_MIN, -1) == INT_MAX); +static_assert(std::div_sat((short)SHRT_MIN, (short)-1) == SHRT_MAX); +static_assert(std::div_sat(LONG_MIN, -1L) == LONG_MAX); +static_assert(std::div_sat(LLONG_MIN, -1LL) == LLONG_MAX); + +template +std::integral_constant +div_sat_by_zero(); + +template +concept can_div_sat_by_zero = requires { div_sat_by_zero(); }; + +static_assert( not can_div_sat_by_zero<0> ); +static_assert( not can_div_sat_by_zero<1> ); +static_assert( not can_div_sat_by_zero<1u> ); +static_assert( not can_div_sat_by_zero<-1L> ); +static_assert( not can_div_sat_by_zero ); diff --git a/libstdc++-v3/testsuite/26_numerics/saturation/mul.cc b/libstdc++-v3/testsuite/26_numerics/saturation/mul.cc new file mode 100644 index 000000000000..1b5538c9af3b --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/saturation/mul.cc @@ -0,0 +1,34 @@ +// { dg-do compile { target c++26 } } + +// C++26 Saturation arithmetic [numerics.sat] + +#include +#include + +template +concept can_mul_sat + = requires(T t, U u) { { std::mul_sat(t, u) } -> std::same_as; }; + +static_assert( can_mul_sat ); +static_assert( not can_mul_sat ); +static_assert( not can_mul_sat ); +static_assert( noexcept(std::mul_sat(0, 0)) ); + +using std::mul_sat; + +static_assert(mul_sat(1, 1) == 1); +static_assert(mul_sat(10, 11) == 110); +static_assert(mul_sat(INT_MAX / 2, 3) == INT_MAX); +static_assert(mul_sat(INT_MAX / 2, -3) == INT_MIN); +static_assert(mul_sat(INT_MAX / -2, 3) == INT_MIN); +static_assert(mul_sat(INT_MIN / 2, -3) == INT_MAX); +static_assert(mul_sat(INT_MIN, -1) == INT_MAX); +static_assert(mul_sat(INT_MAX, -1) == INT_MIN + 1); +static_assert(mul_sat(INT_MAX, INT_MAX) == INT_MAX); +static_assert(mul_sat(INT_MAX, -INT_MAX) == INT_MIN); +static_assert(mul_sat(UINT_MAX, UINT_MAX) == UINT_MAX); +static_assert(mul_sat(UINT_MAX, 0u) == 0); +static_assert(mul_sat(0u, UINT_MAX) == 0); +static_assert(mul_sat((short)SHRT_MAX, (short)2) == SHRT_MAX); +static_assert(mul_sat((short)SHRT_MAX, (short)SHRT_MIN) == SHRT_MIN); +static_assert(mul_sat(SHRT_MAX, 2) == 2L * SHRT_MAX); diff --git a/libstdc++-v3/testsuite/26_numerics/saturation/sub.cc b/libstdc++-v3/testsuite/26_numerics/saturation/sub.cc new file mode 100644 index 000000000000..c56154a49ff5 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/saturation/sub.cc @@ -0,0 +1,86 @@ +// { dg-do compile { target c++26 } } + +// C++26 Saturation arithmetic [numerics.sat] + +#include +#include + +template +concept can_sub_sat + = requires(T t, U u) { { std::sub_sat(t, u) } -> std::same_as; }; + +static_assert( can_sub_sat ); +static_assert( not can_sub_sat ); +static_assert( not can_sub_sat ); +static_assert( noexcept(std::sub_sat(0, 0)) ); + +using std::sub_sat; + +// Signed type +static_assert(sub_sat(0, 0) == 0); +static_assert(sub_sat(1, 1) == 0); +static_assert(sub_sat(-1, -1) == 0); +static_assert(sub_sat(-1, 1) == -2); +constexpr auto max = std::numeric_limits::max(); +constexpr auto min = std::numeric_limits::min(); +static_assert(sub_sat(max, 1) == max - 1); +static_assert(sub_sat(1, max) == 1 - max); +static_assert(sub_sat(max, max) == 0); +static_assert(sub_sat(min, 1) == min); +static_assert(sub_sat(min, 123) == min); +static_assert(sub_sat(0, max) == min + 1); +static_assert(sub_sat(-1, max) == min); +static_assert(sub_sat(-2, max) == min); +static_assert(sub_sat(-2, min) == max - 1); +static_assert(sub_sat(-1, min) == max); +static_assert(sub_sat(0, min) == max); +static_assert(sub_sat(1, min) == max); +static_assert(sub_sat(min, -1) == min + 1); +static_assert(sub_sat(min, min) == 0); +static_assert(sub_sat(max, min) == max); +static_assert(sub_sat(min, max) == min); + +// Wider signed type than the args +static_assert(sub_sat(max, min) == (long long)max * 2 + 1); +static_assert(sub_sat(min, max) == (long long)min * 2 + 1); + +// Signed type that undergoes integer promotion +constexpr auto shrt_max = std::numeric_limits::max(); +constexpr auto shrt_min = std::numeric_limits::min(); +static_assert(sub_sat(0, 0) == 0); +static_assert(sub_sat(1, 1) == 0); +static_assert(sub_sat(3, 1) == 2); +static_assert(sub_sat(shrt_max, shrt_max) == 0); +static_assert(sub_sat(shrt_max, 1) == shrt_max - 1); +static_assert(sub_sat(1, shrt_max) == shrt_min + 2); +static_assert(sub_sat(shrt_max, shrt_min) == shrt_max); +static_assert(sub_sat(0, shrt_min) == shrt_max); +static_assert(sub_sat(shrt_min, (short)1) == shrt_min); +static_assert(sub_sat(shrt_min, (short)-1) == shrt_min + 1); +static_assert(sub_sat((short)-1, shrt_min) == shrt_max); +static_assert(sub_sat((short)1, shrt_min) == shrt_max); + +// Unsigned type +static_assert(sub_sat(0u, 0u) == 0u); +static_assert(sub_sat(1u, 1u) == 0u); +static_assert(sub_sat(-1u, -1u) == 0u); +static_assert(sub_sat(-1u, 1u) == -2u); +constexpr auto umax = std::numeric_limits::max(); +static_assert(sub_sat(0u, 1u) == 0u); +static_assert(sub_sat(umax, umax) == 0u); +static_assert(sub_sat(umax, 0u) == umax); +static_assert(sub_sat(0u, umax) == 0u); +static_assert(sub_sat(umax, 1u) == umax - 1u); +static_assert(sub_sat(0u, 0u) == 0u); + +// Wider unsigned type than the args +static_assert(sub_sat(0u, umax) == 0u); + +// Unsigned type that undergoes integer promotion +constexpr auto ushrt_max = std::numeric_limits::max(); +static_assert(sub_sat(0, 0) == 0); +static_assert(sub_sat(1, 1) == 0); +static_assert(sub_sat(3, 1) == 2); +static_assert(sub_sat(ushrt_max, ushrt_max) == 0); +static_assert(sub_sat(0, 1) == 0); +static_assert(sub_sat(1, ushrt_max) == 0); diff --git a/libstdc++-v3/testsuite/26_numerics/saturation/version.cc b/libstdc++-v3/testsuite/26_numerics/saturation/version.cc new file mode 100644 index 000000000000..ca94ef1212a2 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/saturation/version.cc @@ -0,0 +1,19 @@ +// { dg-do preprocess { target c++26 } } +// { dg-add-options no_pch } + +#include + +#ifndef __cpp_lib_saturation_arithmetic +# error "Feature test macro for saturation arithmetic is missing in " +#elif __cpp_lib_saturation_arithmetic < 202311L +# error "Feature test macro for saturation arithmetic has wrong value in " +#endif + +#undef __cpp_lib_saturation_arithmetic +#include + +#ifndef __cpp_lib_saturation_arithmetic +# error "Feature test macro for saturation arithmetic is missing in " +#elif __cpp_lib_saturation_arithmetic < 202311L +# error "Feature test macro for saturation arithmetic has wrong value in " +#endif From bc274b8d677212fbfc317d379acb02e0eef696a0 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Fri, 17 Nov 2023 14:38:56 +0000 Subject: [PATCH 139/169] libstdc++: Regenerate config.h.in libstdc++-v3/ChangeLog: * config.h.in: Regenerate. --- libstdc++-v3/config.h.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libstdc++-v3/config.h.in b/libstdc++-v3/config.h.in index c0aa51af3f0f..17da7bb9867b 100644 --- a/libstdc++-v3/config.h.in +++ b/libstdc++-v3/config.h.in @@ -167,7 +167,7 @@ /* Define to 1 if you have the `hypotl' function. */ #undef HAVE_HYPOTL -/* Define if you have the iconv() function. */ +/* Define if you have the iconv() function and it works. */ #undef HAVE_ICONV /* Define to 1 if you have the header file. */ From 231bb992592a9e1bd7ce6583131acb1874c8e34e Mon Sep 17 00:00:00 2001 From: Robin Dapp Date: Thu, 16 Nov 2023 20:42:10 +0100 Subject: [PATCH 140/169] vect: Pass truth type to vect_get_vec_defs. For conditional operations the mask is loop invariant and cannot be stored explicitly. By default, for reductions, we deduce the vectype from the statement or the loop but this does not work for conditional operations. Therefore this patch passes the truth type of the reduction input vectype for the mask operand instead. This will override the other choices and make sure we have the proper mask vectype. gcc/ChangeLog: PR middle-end/112406 PR middle-end/112552 * tree-vect-loop.cc (vect_transform_reduction): Pass truth vectype for mask operand. gcc/testsuite/ChangeLog: * gcc.target/aarch64/pr112406.c: New test. * gcc.target/riscv/rvv/autovec/pr112552.c: New test. --- gcc/testsuite/gcc.target/aarch64/pr112406.c | 37 +++++++++++++++++++ .../gcc.target/riscv/rvv/autovec/pr112552.c | 16 ++++++++ gcc/tree-vect-loop.cc | 31 +++++++++++----- 3 files changed, 75 insertions(+), 9 deletions(-) create mode 100644 gcc/testsuite/gcc.target/aarch64/pr112406.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112552.c diff --git a/gcc/testsuite/gcc.target/aarch64/pr112406.c b/gcc/testsuite/gcc.target/aarch64/pr112406.c new file mode 100644 index 000000000000..46459c68c4a0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/pr112406.c @@ -0,0 +1,37 @@ +/* { dg-do compile { target { aarch64*-*-* } } } */ +/* { dg-options "-march=armv8-a+sve -w -Ofast" } */ + +typedef struct { + int red +} MagickPixelPacket; + +GetImageChannelMoments_image, GetImageChannelMoments_image_0, + GetImageChannelMoments___trans_tmp_1, GetImageChannelMoments_M11_0, + GetImageChannelMoments_pixel_3, GetImageChannelMoments_y, + GetImageChannelMoments_p; + +double GetImageChannelMoments_M00_0, GetImageChannelMoments_M00_1, + GetImageChannelMoments_M01_1; + +MagickPixelPacket GetImageChannelMoments_pixel; + +SetMagickPixelPacket(int color, MagickPixelPacket *pixel) { + pixel->red = color; +} + +GetImageChannelMoments() { + for (; GetImageChannelMoments_y; GetImageChannelMoments_y++) { + SetMagickPixelPacket(GetImageChannelMoments_p, + &GetImageChannelMoments_pixel); + GetImageChannelMoments_M00_1 += GetImageChannelMoments_pixel.red; + if (GetImageChannelMoments_image) + GetImageChannelMoments_M00_1++; + GetImageChannelMoments_M01_1 += + GetImageChannelMoments_y * GetImageChannelMoments_pixel_3; + if (GetImageChannelMoments_image_0) + GetImageChannelMoments_M00_0++; + GetImageChannelMoments_M01_1 += + GetImageChannelMoments_y * GetImageChannelMoments_p++; + } + GetImageChannelMoments___trans_tmp_1 = atan(GetImageChannelMoments_M11_0); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112552.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112552.c new file mode 100644 index 000000000000..32d221ccede4 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112552.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -march=rv64gcv -mabi=lp64d --param=riscv-autovec-preference=fixed-vlmax -w" } */ + +int a, c, d; +void (*b)(); +void (*e)(); +void g(); + +void h() { + for (; a; --a) { + char *f = h; + e = b || g > 1 ? g : b; + d |= !e; + *f ^= c; + } +} diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index e8b8be5b7e1c..b7675d817123 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -8483,15 +8483,28 @@ vect_transform_reduction (loop_vec_info loop_vinfo, /* Get NCOPIES vector definitions for all operands except the reduction definition. */ - vect_get_vec_defs (loop_vinfo, stmt_info, slp_node, ncopies, - single_defuse_cycle && reduc_index == 0 - ? NULL_TREE : op.ops[0], &vec_oprnds0, - single_defuse_cycle && reduc_index == 1 - ? NULL_TREE : op.ops[1], &vec_oprnds1, - op.num_ops == 4 - || (op.num_ops == 3 - && !(single_defuse_cycle && reduc_index == 2)) - ? op.ops[2] : NULL_TREE, &vec_oprnds2); + if (!cond_fn_p) + { + vect_get_vec_defs (loop_vinfo, stmt_info, slp_node, ncopies, + single_defuse_cycle && reduc_index == 0 + ? NULL_TREE : op.ops[0], &vec_oprnds0, + single_defuse_cycle && reduc_index == 1 + ? NULL_TREE : op.ops[1], &vec_oprnds1, + op.num_ops == 3 + && !(single_defuse_cycle && reduc_index == 2) + ? op.ops[2] : NULL_TREE, &vec_oprnds2); + } + else + { + /* For a conditional operation pass the truth type as mask + vectype. */ + gcc_assert (single_defuse_cycle && reduc_index == 1); + vect_get_vec_defs (loop_vinfo, stmt_info, slp_node, ncopies, + op.ops[0], &vec_oprnds0, + truth_type_for (vectype_in), + NULL_TREE, &vec_oprnds1, NULL_TREE, + op.ops[2], &vec_oprnds2, NULL_TREE); + } /* For single def-use cycles get one copy of the vectorized reduction definition. */ From c63a0bbce57e89839317f10cefafccce9d4996a0 Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Sat, 18 Nov 2023 00:16:46 +0000 Subject: [PATCH 141/169] Daily bump. --- gcc/ChangeLog | 97 +++++++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/c-family/ChangeLog | 6 +++ gcc/fortran/ChangeLog | 12 +++++ gcc/testsuite/ChangeLog | 96 ++++++++++++++++++++++++++++++++++++++++ libstdc++-v3/ChangeLog | 33 ++++++++++++++ 6 files changed, 245 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0140420a753b..bd02c1a29911 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,100 @@ +2023-11-17 Robin Dapp + + PR middle-end/112406 + PR middle-end/112552 + * tree-vect-loop.cc (vect_transform_reduction): Pass truth + vectype for mask operand. + +2023-11-17 Jakub Jelinek + + PR c++/107571 + * gimplify.cc (expand_FALLTHROUGH_r): Use wi->removed_stmt after + gsi_remove, change the way of passing fallthrough stmt at the end + of sequence to expand_FALLTHROUGH. Diagnose IFN_FALLTHROUGH + with GF_CALL_NOTHROW flag. + (expand_FALLTHROUGH): Change loc into array of 2 location_t elts, + don't test wi.callback_result, instead check whether first + elt is not UNKNOWN_LOCATION and in that case pedwarn with the + second location. + * gimple-walk.cc (walk_gimple_seq_mod): Clear wi->removed_stmt + after the flag has been used. + * internal-fn.def (FALLTHROUGH): Mention in comment the special + meaning of the TREE_NOTHROW/GF_CALL_NOTHROW flag on the calls. + +2023-11-17 Jakub Jelinek + + PR tree-optimization/112566 + PR tree-optimization/83171 + * match.pd (ctz(ext(X)) -> ctz(X), popcount(zext(X)) -> popcount(X), + parity(ext(X)) -> parity(X), ffs(ext(X)) -> ffs(X)): New + simplifications. + ( __builtin_ffs (X) == 0 -> X == 0): Use FFS rather than + BUILT_IN_FFS BUILT_IN_FFSL BUILT_IN_FFSLL BUILT_IN_FFSIMAX. + +2023-11-17 Jakub Jelinek + + PR tree-optimization/112374 + * tree-vect-loop.cc (check_reduction_path): Perform the cond_fn_p + special case only if op_use_stmt == use_stmt, use as_a rather than + dyn_cast in that case. + +2023-11-17 Richard Biener + + Revert: + 2023-11-14 Richard Biener + + PR tree-optimization/112281 + * tree-loop-distribution.cc (pg_add_dependence_edges): + Preserve stmt order when the innermost loop has exact + overlap. + +2023-11-17 Georg-Johann Lay + + PR target/53372 + * config/avr/avr.cc (avr_asm_named_section) [AVR_SECTION_PROGMEM]: + Only return some .progmem*.data section if the user did not + specify a section attribute. + (avr_section_type_flags) [avr_progmem_p]: Unset SECTION_NOTYPE + in returned section flags. + +2023-11-17 Xi Ruoyao + + * config/loongarch/lsx.md (copysign3): Allow operand[2] to + be an reg_or_vector_same_val_operand. If it's a const vector + with same negative elements, expand the copysign with a bitset + instruction. Otherwise, force it into an register. + * config/loongarch/lasx.md (copysign3): Likewise. + +2023-11-17 Haochen Gui + + PR target/111449 + * config/rs6000/vsx.md (*vsx_le_mem_to_mem_mov_ti): New. + +2023-11-17 Haochen Gui + + PR target/111449 + * config/rs6000/altivec.md (cbranchv16qi4): New expand pattern. + * config/rs6000/rs6000.cc (rs6000_generate_compare): Generate + insn sequence for V16QImode equality compare. + * config/rs6000/rs6000.h (MOVE_MAX_PIECES): Define. + (STORE_MAX_PIECES): Define. + +2023-11-17 Li Wei + + * config/loongarch/loongarch.h (CLZ_DEFINED_VALUE_AT_ZERO): + Implement. + (CTZ_DEFINED_VALUE_AT_ZERO): Same. + +2023-11-17 Richard Biener + + * dwarf2out.cc (add_AT_die_ref): Assert we do not add + a self-ref DW_AT_abstract_origin or DW_AT_specification. + +2023-11-17 Jiahao Xu + + * config/loongarch/loongarch.cc + (loongarch_builtin_vectorization_cost): Adjust. + 2023-11-16 Andrew Pinski PR rtl-optimization/112483 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 01fc321fe049..36722b9e985e 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20231117 +20231118 diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 5cd6b2a27dd9..929cacb18a04 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,9 @@ +2023-11-17 Jakub Jelinek + + PR c++/107571 + * c-gimplify.cc (genericize_c_loop): For C++ mark IFN_FALLTHROUGH + call at the end of loop body as TREE_NOTHROW. + 2023-11-14 Lewis Hyatt PR pch/9471 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 490ab288685c..686c771fea5c 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,15 @@ +2023-11-17 Tobias Burnus + + * gfortran.texi (_gfortran_set_options): Document GFC_STD_F2023. + * invoke.texi (std,pedantic,Wampersand,Wtabs): Add -std=2023. + * lang.opt (std=f2023): Add. + * libgfortran.h (GFC_STD_F2023, GFC_STD_OPT_F23): Add. + * options.cc (set_default_std_flags): Add GFC_STD_F2023. + (gfc_init_options): Set max_continue_free to 1,000,000. + (gfc_post_options): Set flag_free_line_length if unset. + (gfc_handle_option): Add OPT_std_f2023, set max_continue_free = 255 + for -std=f2003, f2008 and f2018. + 2023-11-14 David Malcolm * error.cc (gfc_diagnostics_init): Use diagnostic_start_span. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a9728cda62ae..46da01c59385 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,99 @@ +2023-11-17 Robin Dapp + + * gcc.target/aarch64/pr112406.c: New test. + * gcc.target/riscv/rvv/autovec/pr112552.c: New test. + +2023-11-17 Jakub Jelinek + + PR c++/107571 + * g++.dg/DRs/dr2406.C: New test. + +2023-11-17 Jakub Jelinek + + PR tree-optimization/112566 + PR tree-optimization/83171 + * gcc.dg/pr112566-1.c: New test. + * gcc.dg/pr112566-2.c: New test. + * gcc.target/i386/pr78057.c (foo): Pass another long long argument + and use it in __builtin_ia32_*zcnt_u64 instead of the int one. + +2023-11-17 Jakub Jelinek + + PR tree-optimization/112374 + * gcc.dg/pr112374-1.c: New test. + * gcc.dg/pr112374-2.c: New test. + * g++.dg/opt/pr112374.C: New test. + +2023-11-17 Richard Biener + + PR tree-optimization/112585 + * gcc.dg/torture/pr112585.c: New testcase. + +2023-11-17 Richard Biener + + Revert: + 2023-11-17 Richard Biener + + PR tree-optimization/112281 + * gcc.dg/torture/pr112281.c: New testcase. + +2023-11-17 Tobias Burnus + + * gfortran.dg/goacc/warn_truncated.f90: Add -std=f2018 option. + * gfortran.dg/gomp/warn_truncated.f90: Likewise. + * gfortran.dg/line_length_10.f90: Likewise. + * gfortran.dg/line_length_11.f90: Likewise. + * gfortran.dg/line_length_2.f90: Likewise. + * gfortran.dg/line_length_5.f90: Likewise. + * gfortran.dg/line_length_6.f90: Likewise. + * gfortran.dg/line_length_7.f90: Likewise. + * gfortran.dg/line_length_8.f90: Likewise. + * gfortran.dg/line_length_9.f90: Likewise. + * gfortran.dg/continuation_17.f90: New test. + * gfortran.dg/continuation_18.f90: New test. + * gfortran.dg/continuation_19.f: New test. + * gfortran.dg/line_length_12.f90: New test. + * gfortran.dg/line_length_13.f90: New test. + +2023-11-17 Georg-Johann Lay + + PR target/53372 + * gcc.target/avr/pr53372-1.c: New test. + * gcc.target/avr/pr53372-2.c: New test. + +2023-11-17 Francois-Xavier Coudert + + * gfortran.dg/coarray/caf.exp: Remove some output. + * gfortran.dg/dg.exp: Remove some output. + +2023-11-17 Xi Ruoyao + + * g++.target/loongarch/vect-copysign-negconst.C: New test. + * g++.target/loongarch/vect-copysign-negconst-run.C: New test. + +2023-11-17 Haochen Gui + + PR target/111449 + * gcc.target/powerpc/pr111449-2.c: New. + +2023-11-17 Haochen Gui + + PR target/111449 + * gcc.target/powerpc/pr111449-1.c: New. + * gcc.dg/tree-ssa/sra-17.c: Add additional options for 32-bit powerpc. + * gcc.dg/tree-ssa/sra-18.c: Likewise. + +2023-11-17 Li Wei + + * gcc.dg/pr90838.c: add clz/ctz test support on LoongArch. + +2023-11-17 Jiahao Xu + + * gcc.target/loongarch/vector/lasx/lasx-vcond-1.c: Adjust assembler times. + * gcc.target/loongarch/vector/lasx/lasx-vcond-2.c: Ditto. + * gcc.target/loongarch/vector/lsx/lsx-vcond-1.c: Ditto. + * gcc.target/loongarch/vector/lsx/lsx-vcond-2.c: Ditto. + 2023-11-16 Eric Botcazou * gnat.dg/varsize4.adb (Func): Initialize Byte_Read parameter. diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 2a5d0f9180b1..df93c8133142 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,36 @@ +2023-11-17 Jonathan Wakely + + * config.h.in: Regenerate. + +2023-11-17 Jonathan Wakely + + * include/Makefile.am: Add new header. + * include/Makefile.in: Regenerate. + * include/bits/version.def (saturation_arithmetic): Define. + * include/bits/version.h: Regenerate. + * include/std/numeric: Include new header. + * include/bits/sat_arith.h: New file. + * testsuite/26_numerics/saturation/add.cc: New test. + * testsuite/26_numerics/saturation/cast.cc: New test. + * testsuite/26_numerics/saturation/div.cc: New test. + * testsuite/26_numerics/saturation/mul.cc: New test. + * testsuite/26_numerics/saturation/sub.cc: New test. + * testsuite/26_numerics/saturation/version.cc: New test. + +2023-11-17 Jonathan Wakely + + * include/std/utility (in_range): Rename _Up parameter to _Res. + +2023-11-17 Jonathan Wakely + + * include/bits/out_ptr.h: Add Doxygen comments. Remove a + redundant preprocessor condition. + * testsuite/20_util/smartptr.adapt/version.cc: New test. + +2023-11-17 Jonathan Wakely + + * include/bits/chrono_io.h: Fix Doxygen markup. + 2023-11-16 Jonathan Wakely PR libstdc++/112564 From 841008d3966c0fe7a80ec10703a50fbdab7620ac Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Fri, 17 Nov 2023 19:55:25 -0500 Subject: [PATCH 142/169] analyzer: new warning: -Wanalyzer-infinite-loop [PR106147] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch implements a new analyzer warning: -Wanalyzer-infinite-loop. It works by examining the exploded graph once the latter has been fully built. It attempts to detect cycles in the exploded graph in which: - no externally visible work occurs - no escape is possible from the cycle once it has been entered - the program state is "sufficiently concrete" at each step: - no unknown activity could be occurring - the worklist was fully drained for each enode in the cycle i.e. every enode in the cycle is processed For example, it correctly complains about this bogus "for" loop: int sum = 0; for (struct node *iter = n; iter; iter->next) sum += n->val; return sum; like this: infinite-loop-linked-list.c: In function ‘for_loop_noop_next’: infinite-loop-linked-list.c:110:31: warning: infinite loop [CWE-835] [-Wanalyzer-infinite-loop] 110 | for (struct node *iter = n; iter; iter->next) | ^~~~ ‘for_loop_noop_next’: events 1-5 | | 110 | for (struct node *iter = n; iter; iter->next) | | ^~~~ | | | | | (1) infinite loop here | | (2) when ‘iter’ is non-NULL: always following ‘true’ branch... | | (5) ...to here | 111 | sum += n->val; | | ~~~~~~~~~~~~~ | | | | | | | (3) ...to here | | (4) looping back... | gcc/ChangeLog: PR analyzer/106147 * Makefile.in (ANALYZER_OBJS): Add analyzer/infinite-loop.o. * doc/invoke.texi: Add -fdump-analyzer-infinite-loop and -Wanalyzer-infinite-loop. Add missing CWE link for -Wanalyzer-infinite-recursion. * timevar.def (TV_ANALYZER_INFINITE_LOOPS): New. gcc/analyzer/ChangeLog: PR analyzer/106147 * analyzer.opt (Wanalyzer-infinite-loop): New option. (fdump-analyzer-infinite-loop): New option. * checker-event.h (start_cfg_edge_event::get_desc): Drop "final". (start_cfg_edge_event::maybe_describe_condition): Convert from private to protected. * checker-path.h (checker_path::get_logger): New. * diagnostic-manager.cc (process_worklist_item): Update for new context param of maybe_update_for_edge. * engine.cc (impl_region_model_context::impl_region_model_context): Add out_could_have_done_work param to both ctors and use it to initialize mm_out_could_have_done_work. (impl_region_model_context::maybe_did_work): New vfunc implementation. (exploded_node::on_stmt): Add out_could_have_done_work param and pass to ctxt ctor. (exploded_node::on_stmt_pre): Treat setjmp and longjmp as "doing work". (exploded_node::on_longjmp): Likewise. (exploded_edge::exploded_edge): Add "could_do_work" param and use it to initialize m_could_do_work_p. (exploded_edge::dump_dot_label): Add result of could_do_work_p. (exploded_graph::add_function_entry): Mark edge as doing no work. (exploded_graph::add_edge): Add "could_do_work" param and pass to exploded_edge ctor. (add_tainted_args_callback): Treat as doing no work. (exploded_graph::process_worklist): Likewise when merging nodes. (maybe_process_run_of_before_supernode_enodes::item): Likewise. (exploded_graph::maybe_create_dynamic_call): Likewise. (exploded_graph::process_node): Likewise for phi nodes. Pass in a "could_have_done_work" bool when handling stmts and use when creating edges. Assume work is done at bifurcation. (exploded_path::feasible_p): Update for new context param of maybe_update_for_edge. (feasibility_state::feasibility_state): New ctor. (feasibility_state::operator=): New. (feasibility_state::maybe_update_for_edge): Add ctxt param and use it. Fix missing newline when logging state. (impl_run_checkers): Call exploded_graph::detect_infinite_loops. * exploded-graph.h (impl_region_model_context::impl_region_model_context): Add out_could_have_done_work param to both ctors. (impl_region_model_context::maybe_did_work): New decl. (impl_region_model_context::checking_for_infinite_loop_p): New. (impl_region_model_context::on_unusable_in_infinite_loop): New. (impl_region_model_context::m_out_could_have_done_work): New field. (exploded_node::on_stmt): Add "out_could_have_done_work" param. (exploded_edge::exploded_edge): Add "could_do_work" param. (exploded_edge::could_do_work_p): New accessor. (exploded_edge::m_could_do_work_p): New field. (exploded_graph::add_edge): Add "could_do_work" param. (exploded_graph::detect_infinite_loops): New decl. (feasibility_state::feasibility_state): New ctor. (feasibility_state::operator=): New decl. (feasibility_state::maybe_update_for_edge): Add ctxt param. * infinite-loop.cc: New file. * program-state.cc (program_state::on_edge): Log the rejected constraint when region_model::maybe_update_for_edge fails. * region-model.cc (region_model::on_assignment): Treat any writes other than to the stack as "doing work". (region_model::on_stmt_pre): Treat all asm stmts as "doing work". (region_model::on_call_post): Likewise for all calls to functions with unknown side effects. (region_model::handle_phi): Add svals_changing_meaning param. Mark widening svalue in phi nodes as changing meaning. (unusable_in_infinite_loop_constraint_p): New. (region_model::add_constraint): If we're checking for an infinite loop, bail out on unusable svalues, or if we don't have a definite true/false for the constraint. (region_model::update_for_phis): Gather all svalues changing meaning in phi nodes, and purge constraints involving them. (region_model::replay_call_summary): Treat all call summaries as doing work. (region_model::can_merge_with_p): Purge constraints involving svalues that change meaning. (model_merger::on_widening_reuse): New. (test_iteration_1): Likewise. (selftest::test_iteration_1): Remove assertion that model6 "knows" that i < 157. * region-model.h (region_model::handle_phi): Add svals_changing_meaning param (region_model_context::maybe_did_work): New pure virtual func. (region_model_context::checking_for_infinite_loop_p): Likewise. (region_model_context::on_unusable_in_infinite_loop): Likewise. (noop_region_model_context::maybe_did_work): Implement. (noop_region_model_context::checking_for_infinite_loop_p): Likewise. (noop_region_model_context::on_unusable_in_infinite_loop): Likewise. (region_model_context_decorator::maybe_did_work): Implement. (region_model_context_decorator::checking_for_infinite_loop_p): Likewise. (region_model_context_decorator::on_unusable_in_infinite_loop): Likewise. (model_merger::on_widening_reuse): New decl. (model_merger::m_svals_changing_meaning): New field. * sm-signal.cc (register_signal_handler::impl_transition): Assume the edge "does work". * supergraph.cc (supernode::get_start_location): Use CFG edge's goto_locus if available. (supernode::get_end_location): Likewise. (cfg_superedge::dump_label_to_pp): Dump edges with a "goto_locus" * supergraph.h (cfg_superedge::get_goto_locus): New. * svalue.cc (svalue::can_merge_p): Call on_widening_reuse for widening values. (involvement_visitor::visit_widening_svalue): New. (svalue::involves_p): Update assertion to allow widening svalues. gcc/testsuite/ChangeLog: PR analyzer/106147 * c-c++-common/analyzer/gzio-2.c: Add dg-warning for infinite loop, marked as xfail. * c-c++-common/analyzer/infinite-loop-2.c: New test. * c-c++-common/analyzer/infinite-loop-4.c: New test. * c-c++-common/analyzer/infinite-loop-crc32c.c: New test. * c-c++-common/analyzer/infinite-loop-doom-d_main-IdentifyVersion.c: New test. * c-c++-common/analyzer/infinite-loop-doom-v_video.c: New test. * c-c++-common/analyzer/infinite-loop-g_error.c: New test. * c-c++-common/analyzer/infinite-loop-linked-list.c: New test. * c-c++-common/analyzer/infinite-recursion-inlining.c: Add dg-warning directives for infinite loop. * c-c++-common/analyzer/inlining-4-multiline.c: Update expected paths for event 5 having a location. * gcc.dg/analyzer/boxed-malloc-1.c: Add dg-warning for infinite loop. * gcc.dg/analyzer/data-model-20.c: Likewise. Add comment about suspect code, and create... * gcc.dg/analyzer/data-model-20a.c: ...this new test by cleaning it up. * gcc.dg/analyzer/edges-1.c: Add a placeholder statement to avoid the "...to here" from the if stmt occurring at the "while", and thus being treated as a bogus event. * gcc.dg/analyzer/explode-2a.c: Add dg-warning for infinite loop. * gcc.dg/analyzer/infinite-loop-1.c: New test. * gcc.dg/analyzer/malloc-1.c: Add dg-warning for infinite loop. * gcc.dg/analyzer/out-of-bounds-coreutils.c: Add TODO. * gcc.dg/analyzer/paths-4.c: Add dg-warning for infinite loop. * gcc.dg/analyzer/pr103892.c: Likewise. * gcc.dg/analyzer/pr93546.c: Likewise. Signed-off-by: David Malcolm --- gcc/Makefile.in | 1 + gcc/analyzer/analyzer.opt | 8 + gcc/analyzer/checker-event.h | 5 +- gcc/analyzer/checker-path.h | 1 + gcc/analyzer/diagnostic-manager.cc | 2 +- gcc/analyzer/engine.cc | 122 ++-- gcc/analyzer/exploded-graph.h | 39 +- gcc/analyzer/infinite-loop.cc | 565 ++++++++++++++++++ gcc/analyzer/program-state.cc | 17 +- gcc/analyzer/region-model.cc | 77 ++- gcc/analyzer/region-model.h | 31 + gcc/analyzer/sm-signal.cc | 1 + gcc/analyzer/supergraph.cc | 16 + gcc/analyzer/supergraph.h | 2 + gcc/analyzer/svalue.cc | 10 +- gcc/doc/invoke.texi | 62 ++ gcc/testsuite/c-c++-common/analyzer/gzio-2.c | 2 +- .../c-c++-common/analyzer/infinite-loop-2.c | 34 ++ .../c-c++-common/analyzer/infinite-loop-4.c | 71 +++ .../analyzer/infinite-loop-crc32c.c | 14 + ...nfinite-loop-doom-d_main-IdentifyVersion.c | 26 + .../analyzer/infinite-loop-doom-v_video.c | 31 + .../analyzer/infinite-loop-g_error.c | 19 + .../analyzer/infinite-loop-linked-list.c | 131 ++++ .../analyzer/infinite-recursion-inlining.c | 28 +- .../analyzer/inlining-4-multiline.c | 34 +- .../gcc.dg/analyzer/boxed-malloc-1.c | 2 +- gcc/testsuite/gcc.dg/analyzer/data-model-20.c | 6 +- .../gcc.dg/analyzer/data-model-20a.c | 25 + gcc/testsuite/gcc.dg/analyzer/edges-1.c | 2 + gcc/testsuite/gcc.dg/analyzer/explode-2a.c | 2 +- .../gcc.dg/analyzer/infinite-loop-1.c | 235 ++++++++ gcc/testsuite/gcc.dg/analyzer/malloc-1.c | 2 +- .../gcc.dg/analyzer/out-of-bounds-coreutils.c | 2 +- gcc/testsuite/gcc.dg/analyzer/paths-4.c | 3 +- gcc/testsuite/gcc.dg/analyzer/pr103892.c | 2 +- gcc/testsuite/gcc.dg/analyzer/pr93546.c | 2 +- gcc/timevar.def | 1 + 38 files changed, 1547 insertions(+), 86 deletions(-) create mode 100644 gcc/analyzer/infinite-loop.cc create mode 100644 gcc/testsuite/c-c++-common/analyzer/infinite-loop-2.c create mode 100644 gcc/testsuite/c-c++-common/analyzer/infinite-loop-4.c create mode 100644 gcc/testsuite/c-c++-common/analyzer/infinite-loop-crc32c.c create mode 100644 gcc/testsuite/c-c++-common/analyzer/infinite-loop-doom-d_main-IdentifyVersion.c create mode 100644 gcc/testsuite/c-c++-common/analyzer/infinite-loop-doom-v_video.c create mode 100644 gcc/testsuite/c-c++-common/analyzer/infinite-loop-g_error.c create mode 100644 gcc/testsuite/c-c++-common/analyzer/infinite-loop-linked-list.c create mode 100644 gcc/testsuite/gcc.dg/analyzer/data-model-20a.c create mode 100644 gcc/testsuite/gcc.dg/analyzer/infinite-loop-1.c diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 7f2df4b5925f..7228b79f223a 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1324,6 +1324,7 @@ ANALYZER_OBJS = \ analyzer/engine.o \ analyzer/feasible-graph.o \ analyzer/function-set.o \ + analyzer/infinite-loop.o \ analyzer/infinite-recursion.o \ analyzer/kf.o \ analyzer/kf-analyzer.o \ diff --git a/gcc/analyzer/analyzer.opt b/gcc/analyzer/analyzer.opt index 25df89d9c06b..fae2649389a8 100644 --- a/gcc/analyzer/analyzer.opt +++ b/gcc/analyzer/analyzer.opt @@ -134,6 +134,10 @@ Wanalyzer-imprecise-fp-arithmetic Common Var(warn_analyzer_imprecise_fp_arithmetic) Init(1) Warning Warn about code paths in which floating-point arithmetic is used in locations where precise computation is needed. +Wanalyzer-infinite-loop +Common Var(warn_analyzer_infinite_loop) Init(1) Warning +Warn about code paths which appear to lead to an infinite loop. + Wanalyzer-infinite-recursion Common Var(warn_analyzer_infinite_recursion) Init(1) Warning Warn about code paths which appear to lead to infinite recursion. @@ -354,6 +358,10 @@ fdump-analyzer-feasibility Common RejectNegative Var(flag_dump_analyzer_feasibility) Dump various analyzer internals to SRCFILE.*.fg.dot and SRCFILE.*.tg.dot. +fdump-analyzer-infinite-loop +Common RejectNegative Var(flag_dump_analyzer_infinite_loop) +Dump various analyzer internals to SRCFILE.*.infinite-loop.dot. + fdump-analyzer-json Common RejectNegative Var(flag_dump_analyzer_json) Dump analyzer-specific data to a SRCFILE.analyzer.json.gz file. diff --git a/gcc/analyzer/checker-event.h b/gcc/analyzer/checker-event.h index 7ba92f196508..dcb2e27faa60 100644 --- a/gcc/analyzer/checker-event.h +++ b/gcc/analyzer/checker-event.h @@ -444,11 +444,12 @@ public: { } - label_text get_desc (bool can_colorize) const final override; + label_text get_desc (bool can_colorize) const override; - private: +protected: label_text maybe_describe_condition (bool can_colorize) const; +private: static label_text maybe_describe_condition (bool can_colorize, tree lhs, enum tree_code op, diff --git a/gcc/analyzer/checker-path.h b/gcc/analyzer/checker-path.h index 93c807c3d24b..055d5e38b3f7 100644 --- a/gcc/analyzer/checker-path.h +++ b/gcc/analyzer/checker-path.h @@ -65,6 +65,7 @@ public: void dump (pretty_printer *pp) const; void debug () const; + logger *get_logger () const { return m_logger; } void maybe_log (logger *logger, const char *desc) const; void add_event (std::unique_ptr event); diff --git a/gcc/analyzer/diagnostic-manager.cc b/gcc/analyzer/diagnostic-manager.cc index 972413a751a5..a6755f2193fe 100644 --- a/gcc/analyzer/diagnostic-manager.cc +++ b/gcc/analyzer/diagnostic-manager.cc @@ -517,7 +517,7 @@ process_worklist_item (feasible_worklist *worklist, feasibility_state succ_state (fnode->get_state ()); std::unique_ptr rc; - if (succ_state.maybe_update_for_edge (logger, succ_eedge, &rc)) + if (succ_state.maybe_update_for_edge (logger, succ_eedge, nullptr, &rc)) { gcc_assert (rc == NULL); feasible_node *succ_fnode diff --git a/gcc/analyzer/engine.cc b/gcc/analyzer/engine.cc index 4861ee54e98d..041fe6a1d400 100644 --- a/gcc/analyzer/engine.cc +++ b/gcc/analyzer/engine.cc @@ -85,7 +85,8 @@ impl_region_model_context (exploded_graph &eg, uncertainty_t *uncertainty, path_context *path_ctxt, const gimple *stmt, - stmt_finder *stmt_finder) + stmt_finder *stmt_finder, + bool *out_could_have_done_work) : m_eg (&eg), m_logger (eg.get_logger ()), m_enode_for_diag (enode_for_diag), m_old_state (old_state), @@ -94,7 +95,8 @@ impl_region_model_context (exploded_graph &eg, m_stmt_finder (stmt_finder), m_ext_state (eg.get_ext_state ()), m_uncertainty (uncertainty), - m_path_ctxt (path_ctxt) + m_path_ctxt (path_ctxt), + m_out_could_have_done_work (out_could_have_done_work) { } @@ -110,7 +112,8 @@ impl_region_model_context (program_state *state, m_stmt_finder (NULL), m_ext_state (ext_state), m_uncertainty (uncertainty), - m_path_ctxt (NULL) + m_path_ctxt (NULL), + m_out_could_have_done_work (nullptr) { } @@ -1024,6 +1027,17 @@ impl_region_model_context::on_unexpected_tree_code (tree t, m_new_state->m_valid = false; } +/* Implementation of region_model_context::maybe_did_work vfunc. + Mark that "externally visible work" has occurred, and thus we + shouldn't report an infinite loop here. */ + +void +impl_region_model_context::maybe_did_work () +{ + if (m_out_could_have_done_work) + *m_out_could_have_done_work = true; +} + /* struct point_and_state. */ /* Assert that this object is sane. */ @@ -1439,6 +1453,7 @@ exploded_node::on_stmt (exploded_graph &eg, const gimple *stmt, program_state *state, uncertainty_t *uncertainty, + bool *out_could_have_done_work, path_context *path_ctxt) { logger *logger = eg.get_logger (); @@ -1464,7 +1479,8 @@ exploded_node::on_stmt (exploded_graph &eg, impl_region_model_context ctxt (eg, this, &old_state, state, uncertainty, - path_ctxt, stmt); + path_ctxt, stmt, nullptr, + out_could_have_done_work); /* Handle call summaries here. */ if (cgraph_edge *cgedge @@ -1551,12 +1567,16 @@ exploded_node::on_stmt_pre (exploded_graph &eg, else if (is_setjmp_call_p (call)) { state->m_region_model->on_setjmp (call, this, ctxt); + if (ctxt) + ctxt->maybe_did_work (); return; } else if (is_longjmp_call_p (call)) { on_longjmp (eg, call, state, ctxt); *out_terminate_path = true; + if (ctxt) + ctxt->maybe_did_work (); return; } } @@ -1938,8 +1958,9 @@ exploded_node::on_longjmp (exploded_graph &eg, if (next) { exploded_edge *eedge - = eg.add_edge (const_cast (this), next, NULL, - make_unique (tmp_setjmp_record, longjmp_call)); + = eg.add_edge (const_cast (this), next, NULL, true, + make_unique (tmp_setjmp_record, + longjmp_call)); /* For any diagnostics that were queued here (such as leaks) we want the checker_path to show the rewinding events after the "final event" @@ -2161,10 +2182,11 @@ rewind_info_t::add_events_to_path (checker_path *emission_path, /* exploded_edge's ctor. */ exploded_edge::exploded_edge (exploded_node *src, exploded_node *dest, - const superedge *sedge, + const superedge *sedge, bool could_do_work, std::unique_ptr custom_info) : dedge (src, dest), m_sedge (sedge), - m_custom_info (std::move (custom_info)) + m_custom_info (std::move (custom_info)), + m_could_do_work_p (could_do_work) { } @@ -2228,6 +2250,9 @@ exploded_edge::dump_dot_label (pretty_printer *pp) const else if (m_custom_info) m_custom_info->print (pp); + pp_printf (pp, "%s", + could_do_work_p () ? "(could do work)" : "DOES NO WORK"); + //pp_write_text_as_dot_label_to_stream (pp, /*for_record=*/false); pp_printf (pp, "\"];\n"); @@ -2790,7 +2815,7 @@ exploded_graph::add_function_entry (function *fun) if (!enode) return NULL; - add_edge (m_origin, enode, NULL, std::move (edge_info)); + add_edge (m_origin, enode, NULL, false, std::move (edge_info)); m_functions_with_enodes.add (fun); @@ -2988,19 +3013,20 @@ exploded_graph::get_or_create_node (const program_point &point, /* Add an exploded_edge from SRC to DEST, recording its association with SEDGE (which may be NULL), and, if non-NULL, taking ownership - of CUSTOM_INFO. + of CUSTOM_INFO. COULD_DO_WORK is used for detecting infinite loops. Return the newly-created eedge. */ exploded_edge * exploded_graph::add_edge (exploded_node *src, exploded_node *dest, - const superedge *sedge, - std::unique_ptr custom_info) + const superedge *sedge, bool could_do_work, + std::unique_ptr custom_info) { if (get_logger ()) get_logger ()->log ("creating edge EN: %i -> EN: %i", src->m_index, dest->m_index); - exploded_edge *e = new exploded_edge (src, dest, sedge, - std::move (custom_info)); + exploded_edge *e + = new exploded_edge (src, dest, sedge, could_do_work, + std::move (custom_info)); digraph::add_edge (e); return e; } @@ -3249,7 +3275,7 @@ add_tainted_args_callback (exploded_graph *eg, tree field, tree fndecl, } } - eg->add_edge (eg->get_origin (), enode, NULL, + eg->add_edge (eg->get_origin (), enode, NULL, false, make_unique (field, fndecl, loc)); } @@ -3403,7 +3429,7 @@ exploded_graph::process_worklist () if (merged_state == state) { /* Then merge node_2 into node by adding an edge. */ - add_edge (node_2, node, NULL); + add_edge (node_2, node, NULL, false); /* Remove node_2 from the worklist. */ m_worklist.take_next (); @@ -3416,7 +3442,7 @@ exploded_graph::process_worklist () /* Then merge node into node_2, and leave node_2 in the worklist, to be processed on the next iteration. */ - add_edge (node, node_2, NULL); + add_edge (node, node_2, NULL, false); node->set_status (exploded_node::STATUS_MERGER); continue; } @@ -3461,7 +3487,7 @@ exploded_graph::process_worklist () m_worklist.add_node (merged_enode); else { - add_edge (node, merged_enode, NULL); + add_edge (node, merged_enode, NULL, false); node->set_status (exploded_node::STATUS_MERGER); } @@ -3469,7 +3495,7 @@ exploded_graph::process_worklist () m_worklist.add_node (merged_enode); else { - add_edge (node_2, merged_enode, NULL); + add_edge (node_2, merged_enode, NULL, false); node_2->set_status (exploded_node::STATUS_MERGER); } @@ -3704,7 +3730,8 @@ maybe_process_run_of_before_supernode_enodes (exploded_node *enode) { exploded_node *next = next_enodes[it->m_merger_idx]; if (next) - add_edge (it->m_input_enode, next, NULL); + add_edge (it->m_input_enode, next, NULL, + false); /* no "work" is done during merger. */ it->m_input_enode->set_status (exploded_node::STATUS_BULK_MERGED); } @@ -3847,6 +3874,7 @@ exploded_graph::maybe_create_dynamic_call (const gcall *call, node); if (enode) add_edge (node,enode, NULL, + false, /* No work is done by the call itself. */ make_unique (call)); return true; } @@ -4039,7 +4067,8 @@ exploded_graph::process_node (exploded_node *node) program_point next_point (point.get_next ()); exploded_node *next = get_or_create_node (next_point, next_state, node); if (next) - add_edge (node, next, NULL); + add_edge (node, next, NULL, + false); /* Assume no work is done at phi nodes. */ } break; case PK_BEFORE_STMT: @@ -4067,6 +4096,7 @@ exploded_graph::process_node (exploded_node *node) impl_path_context path_ctxt (&next_state, logger); + bool could_have_done_work = false; uncertainty_t uncertainty; const supernode *snode = point.get_supernode (); unsigned stmt_idx; @@ -4090,7 +4120,7 @@ exploded_graph::process_node (exploded_node *node) /* Process the stmt. */ exploded_node::on_stmt_flags flags = node->on_stmt (*this, snode, stmt, &next_state, &uncertainty, - &path_ctxt); + &could_have_done_work, &path_ctxt); node->m_num_processed_stmts++; /* If flags.m_terminate_path, stop analyzing; any nodes/edges @@ -4147,7 +4177,7 @@ exploded_graph::process_node (exploded_node *node) node->m_num_processed_stmts--; if (logger) logger->log ("creating edge to split_enode"); - add_edge (node, split_enode, NULL); + add_edge (node, split_enode, NULL, could_have_done_work); return; } else @@ -4174,7 +4204,7 @@ exploded_graph::process_node (exploded_node *node) exploded_node *next = get_or_create_node (next_point, next_state, node); if (next) - add_edge (node, next, NULL); + add_edge (node, next, NULL, could_have_done_work); } /* If we have custom edge infos, "bifurcate" the state @@ -4212,7 +4242,9 @@ exploded_graph::process_node (exploded_node *node) exploded_node *next2 = get_or_create_node (next_point, bifurcated_new_state, node); if (next2) - add_edge (node, next2, NULL, std::move (edge_info)); + add_edge (node, next2, NULL, + true /* assume that work could be done */, + std::move (edge_info)); } else { @@ -4327,7 +4359,8 @@ exploded_graph::process_node (exploded_node *node) next_state, node); if (next) - add_edge (node, next, succ); + add_edge (node, next, succ, + true /* assume that work is done */); } } @@ -4343,7 +4376,7 @@ exploded_graph::process_node (exploded_node *node) node); if (next) { - add_edge (node, next, succ); + add_edge (node, next, succ, false); /* We might have a function entrypoint. */ detect_infinite_recursion (next); @@ -4377,7 +4410,7 @@ exploded_graph::process_node (exploded_node *node) next_state, node); if (enode) - add_edge (node, enode, NULL, + add_edge (node, enode, NULL, false, make_unique (call, true)); } } @@ -4708,7 +4741,7 @@ exploded_path::feasible_p (logger *logger, eedge->m_dest->m_index); std::unique_ptr rc; - if (!state.maybe_update_for_edge (logger, eedge, &rc)) + if (!state.maybe_update_for_edge (logger, eedge, nullptr, &rc)) { gcc_assert (rc); if (out) @@ -4835,6 +4868,21 @@ feasibility_state::feasibility_state (const feasibility_state &other) bitmap_copy (m_snodes_visited, other.m_snodes_visited); } +feasibility_state::feasibility_state (const region_model &model, + const supergraph &sg) +: m_model (model), + m_snodes_visited (sg.m_nodes.length ()) +{ +} + +feasibility_state & +feasibility_state::operator= (const feasibility_state &other) +{ + m_model = other.m_model; + bitmap_copy (m_snodes_visited, other.m_snodes_visited); + return *this; +} + /* The heart of feasibility-checking. Attempt to update this state in-place based on traversing EEDGE @@ -4849,6 +4897,7 @@ bool feasibility_state:: maybe_update_for_edge (logger *logger, const exploded_edge *eedge, + region_model_context *ctxt, std::unique_ptr *out_rc) { const exploded_node &src_enode = *eedge->m_src; @@ -4887,12 +4936,14 @@ maybe_update_for_edge (logger *logger, } const gimple *last_stmt = src_point.get_supernode ()->get_last_stmt (); - if (!m_model.maybe_update_for_edge (*sedge, last_stmt, NULL, out_rc)) + if (!m_model.maybe_update_for_edge (*sedge, last_stmt, ctxt, out_rc)) { if (logger) { - logger->log ("rejecting due to region model"); + logger->start_log_line (); + logger->log_partial ("rejecting due to region model: "); m_model.dump_to_pp (logger->get_printer (), true, false); + logger->end_log_line (); } return false; } @@ -4908,13 +4959,13 @@ maybe_update_for_edge (logger *logger, == PK_BEFORE_SUPERNODE); function *fun = eedge->m_dest->get_function (); gcc_assert (fun); - m_model.push_frame (fun, NULL, NULL); + m_model.push_frame (fun, NULL, ctxt); if (logger) logger->log (" pushing frame for %qD", fun->decl); } else if (eedge->m_custom_info) { - eedge->m_custom_info->update_model (&m_model, eedge, NULL); + eedge->m_custom_info->update_model (&m_model, eedge, ctxt); } } @@ -4933,7 +4984,7 @@ maybe_update_for_edge (logger *logger, logger->log (" update for phis"); m_model.update_for_phis (src_enode.get_supernode (), last_cfg_superedge, - NULL); + ctxt); /* If we've entering an snode that we've already visited on this epath, then we need do fix things up for loops; see the comment for store::loop_replay_fixup. @@ -6153,6 +6204,9 @@ impl_run_checkers (logger *logger) /* Now process the worklist, exploring the graph. */ eg.process_worklist (); + if (warn_analyzer_infinite_loop) + eg.detect_infinite_loops (); + if (flag_dump_analyzer_exploded_graph) { auto_timevar tv (TV_ANALYZER_DUMP); diff --git a/gcc/analyzer/exploded-graph.h b/gcc/analyzer/exploded-graph.h index cb64c2a180ac..45ee0d1f175e 100644 --- a/gcc/analyzer/exploded-graph.h +++ b/gcc/analyzer/exploded-graph.h @@ -49,7 +49,9 @@ class impl_region_model_context : public region_model_context path_context *path_ctxt, const gimple *stmt, - stmt_finder *stmt_finder = NULL); + stmt_finder *stmt_finder = NULL, + + bool *out_could_have_done_work = nullptr); impl_region_model_context (program_state *state, const extrinsic_state &ext_state, @@ -110,6 +112,10 @@ class impl_region_model_context : public region_model_context const gimple *get_stmt () const override { return m_stmt; } const exploded_graph *get_eg () const override { return m_eg; } + void maybe_did_work () override; + bool checking_for_infinite_loop_p () const override { return false; } + void on_unusable_in_infinite_loop () override {} + exploded_graph *m_eg; log_user m_logger; exploded_node *m_enode_for_diag; @@ -120,6 +126,7 @@ class impl_region_model_context : public region_model_context const extrinsic_state &m_ext_state; uncertainty_t *m_uncertainty; path_context *m_path_ctxt; + bool *m_out_could_have_done_work; }; /* A pair, used internally by @@ -260,6 +267,7 @@ class exploded_node : public dnode const gimple *stmt, program_state *state, uncertainty_t *uncertainty, + bool *out_could_have_done_work, path_context *path_ctxt); void on_stmt_pre (exploded_graph &eg, const gimple *stmt, @@ -373,7 +381,7 @@ class exploded_edge : public dedge { public: exploded_edge (exploded_node *src, exploded_node *dest, - const superedge *sedge, + const superedge *sedge, bool could_do_work, std::unique_ptr custom_info); void dump_dot (graphviz_out *gv, const dump_args_t &args) const final override; @@ -389,8 +397,25 @@ class exploded_edge : public dedge a signal is delivered to a signal-handler. */ std::unique_ptr m_custom_info; + bool could_do_work_p () const { return m_could_do_work_p; } + private: DISABLE_COPY_AND_ASSIGN (exploded_edge); + + /* For -Wanalyzer-infinite-loop. + Set to true during processing if any of the activity along + this edge is "externally-visible work" (and thus ruling this + out as being part of an infinite loop. + + For example, given: + + while (1) + do_something (); + + although it is an infinite loop, presumably the point of the + program is the loop body, and thus reporting this as an infinite + loop is likely to be unhelpful to the user. */ + bool m_could_do_work_p; }; /* Extra data for an exploded_edge that represents dynamic call info ( calls @@ -804,7 +829,7 @@ public: const program_state &state, exploded_node *enode_for_diag); exploded_edge *add_edge (exploded_node *src, exploded_node *dest, - const superedge *sedge, + const superedge *sedge, bool could_do_work, std::unique_ptr custom = NULL); per_program_point_data * @@ -856,6 +881,9 @@ public: void on_escaped_function (tree fndecl); + /* In infinite-loop.cc */ + void detect_infinite_loops (); + /* In infinite-recursion.cc */ void detect_infinite_recursion (exploded_node *enode); exploded_node *find_previous_entry_to (function *top_of_stack_fun, @@ -970,10 +998,15 @@ class feasibility_state public: feasibility_state (region_model_manager *manager, const supergraph &sg); + feasibility_state (const region_model &model, + const supergraph &sg); feasibility_state (const feasibility_state &other); + feasibility_state &operator= (const feasibility_state &other); + bool maybe_update_for_edge (logger *logger, const exploded_edge *eedge, + region_model_context *ctxt, std::unique_ptr *out_rc); void update_for_stmt (const gimple *stmt); diff --git a/gcc/analyzer/infinite-loop.cc b/gcc/analyzer/infinite-loop.cc new file mode 100644 index 000000000000..771d698a60b7 --- /dev/null +++ b/gcc/analyzer/infinite-loop.cc @@ -0,0 +1,565 @@ +/* Detection of infinite loops. + Copyright (C) 2022-2023 Free Software Foundation, Inc. + Contributed by David Malcolm . + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#define INCLUDE_MEMORY +#define INCLUDE_VECTOR +#include "system.h" +#include "coretypes.h" +#include "tree.h" +#include "fold-const.h" +#include "gcc-rich-location.h" +#include "alloc-pool.h" +#include "fibonacci_heap.h" +#include "shortest-paths.h" +#include "diagnostic-core.h" +#include "diagnostic-event-id.h" +#include "diagnostic-path.h" +#include "diagnostic-metadata.h" +#include "function.h" +#include "pretty-print.h" +#include "sbitmap.h" +#include "bitmap.h" +#include "tristate.h" +#include "ordered-hash-map.h" +#include "selftest.h" +#include "json.h" +#include "analyzer/analyzer.h" +#include "analyzer/analyzer-logging.h" +#include "analyzer/call-string.h" +#include "analyzer/program-point.h" +#include "analyzer/store.h" +#include "analyzer/region-model.h" +#include "analyzer/constraint-manager.h" +#include "analyzer/sm.h" +#include "analyzer/pending-diagnostic.h" +#include "analyzer/diagnostic-manager.h" +#include "cfg.h" +#include "basic-block.h" +#include "gimple.h" +#include "gimple-iterator.h" +#include "gimple-pretty-print.h" +#include "cgraph.h" +#include "digraph.h" +#include "analyzer/supergraph.h" +#include "analyzer/program-state.h" +#include "analyzer/exploded-graph.h" +#include "analyzer/checker-path.h" +#include "analyzer/feasible-graph.h" +#include "make-unique.h" + +/* A bundle of data characterizing a particular infinite loop + identified within the exploded graph. */ + +struct infinite_loop +{ + infinite_loop (const exploded_node &enode, + location_t loc, + std::vector eedges, + logger *logger) + : m_enode (enode), + m_loc (loc), + m_eedge_vec (eedges) + { + LOG_SCOPE (logger); + if (logger) + { + logger->start_log_line (); + logger->log_partial ("infinite loop: EN: %i", m_enode.m_index); + for (auto eedge : m_eedge_vec) + { + logger->log_partial (" ->"); + if (const superedge *sedge = eedge->m_sedge) + { + sedge->dump_label_to_pp (logger->get_printer (), false); + } + logger->log_partial (" EN: %i", eedge->m_dest->m_index); + } + logger->end_log_line (); + } + } + + bool + operator== (const infinite_loop &other) const + { + /* Compare underlying supernode, rather than enodes, so that + we don't get duplicates in functions that are called from + elsewhere. */ + return (m_enode.get_supernode () == other.m_enode.get_supernode () + && m_loc == other.m_loc); + } + + const exploded_node &m_enode; + location_t m_loc; + std::vector m_eedge_vec; +}; + +/* A custom subclass of start_cfg_edge_event that rewords the + message to indicate that the CFG edge is *always* taken on + subsequent iterations, assuming it's been taken once. */ + +class perpetual_start_cfg_edge_event : public start_cfg_edge_event +{ +public: + perpetual_start_cfg_edge_event (const exploded_edge &eedge, + const event_loc_info &loc_info) + : start_cfg_edge_event (eedge, loc_info) + { + } + + label_text get_desc (bool can_colorize) const final override + { + bool user_facing = !flag_analyzer_verbose_edges; + label_text edge_desc (m_sedge->get_description (user_facing)); + if (user_facing) + { + if (edge_desc.get () && strlen (edge_desc.get ()) > 0) + { + label_text cond_desc = maybe_describe_condition (can_colorize); + label_text result; + if (cond_desc.get ()) + return make_label_text + (can_colorize, + "%s: always following %qs branch...", + cond_desc.get (), edge_desc.get ()); + else + return make_label_text + (can_colorize, + "if it ever follows %qs branch, it will always do so...", + edge_desc.get ()); + } + } + return start_cfg_edge_event::get_desc (can_colorize); + } +}; + +/* A subclass of pending_diagnostic for complaining about suspected + infinite loops. */ + +class infinite_loop_diagnostic +: public pending_diagnostic_subclass +{ +public: + infinite_loop_diagnostic (std::unique_ptr inf_loop) + : m_inf_loop (std::move (inf_loop)) + { + gcc_assert (m_inf_loop != nullptr); + } + + const char *get_kind () const final override + { + return "infinite_loop_diagnostic"; + } + + bool operator== (const infinite_loop_diagnostic &other) const + { + return *m_inf_loop == *other.m_inf_loop; + } + + int get_controlling_option () const final override + { + return OPT_Wanalyzer_infinite_loop; + } + + bool emit (rich_location *rich_loc, logger *) final override + { + /* "CWE-835: Loop with Unreachable Exit Condition ('Infinite Loop')". */ + diagnostic_metadata m; + m.add_cwe (835); + return warning_meta (rich_loc, m, get_controlling_option (), + "infinite loop"); + } + + bool maybe_add_custom_events_for_superedge (const exploded_edge &, + checker_path *) + final override + { + /* Don't add any regular events; instead we add them after pruning as + part of the "final" warning. */ + return true; + } + + label_text describe_final_event (const evdesc::final_event &ev) final override + { + return ev.formatted_print ("infinite loop here"); + } + + /* Customize the location where the warning_event appears. */ + void add_final_event (const state_machine *, + const exploded_node *enode, + const gimple *, + tree, + state_machine::state_t, + checker_path *emission_path) final override + { + emission_path->add_event + (make_unique + (event_loc_info (m_inf_loop->m_loc, + enode->get_function ()->decl, + enode->get_stack_depth ()), + enode, + NULL, NULL, NULL)); + + logger *logger = emission_path->get_logger (); + + /* EMISSION_PATH has the path to the entry of the infinite loop. + Add extra edges showing the loop itself. */ + for (auto eedge : m_inf_loop->m_eedge_vec) + { + if (logger) + logger->log ("EN: %i -> EN: %i", + eedge->m_src->m_index, + eedge->m_dest->m_index); + if (!eedge->m_sedge) + continue; + + const cfg_superedge *cfg_sedge + = eedge->m_sedge->dyn_cast_cfg_superedge (); + if (!cfg_sedge) + continue; + + const exploded_node *src_node = eedge->m_src; + const program_point &src_point = src_node->get_point (); + const exploded_node *dst_node = eedge->m_dest; + const program_point &dst_point = dst_node->get_point (); + const int src_stack_depth = src_point.get_stack_depth (); + const int dst_stack_depth = dst_point.get_stack_depth (); + const gimple *last_stmt = src_point.get_supernode ()->get_last_stmt (); + + event_loc_info loc_info_from + (last_stmt ? last_stmt->location : cfg_sedge->get_goto_locus (), + src_point.get_fndecl (), + src_stack_depth); + event_loc_info loc_info_to + (dst_point.get_supernode ()->get_start_location (), + dst_point.get_fndecl (), + dst_stack_depth); + + if (const switch_cfg_superedge *switch_cfg_sedge + = cfg_sedge->dyn_cast_switch_cfg_superedge ()) + { + if (switch_cfg_sedge->implicitly_created_default_p ()) + { + emission_path->add_event + (make_unique (*eedge, + loc_info_from)); + emission_path->add_event + (make_unique + (*eedge, + loc_info_to)); + } + } + + if (cfg_sedge->true_value_p ()) + { + emission_path->add_event + (make_unique (*eedge, + loc_info_from)); + emission_path->add_event + (make_unique + (*eedge, + loc_info_to)); + } + else if (cfg_sedge->false_value_p ()) + { + emission_path->add_event + (make_unique (*eedge, + loc_info_from)); + emission_path->add_event + (make_unique + (*eedge, + loc_info_to)); + } + else if (cfg_sedge->back_edge_p ()) + { + emission_path->add_event + (make_unique + (loc_info_from, "looping back...")); + emission_path->add_event + (make_unique + (*eedge, + loc_info_to)); + } + } + } + +private: + std::unique_ptr m_inf_loop; +}; + +/* If ENODE has an in-edge corresponding to a CFG backedge, return that + exploded in-edge. + Otherwise, return nullptr. */ + +static const exploded_edge * +get_in_edge_back_edge (const exploded_node &enode) +{ + for (auto in_edge : enode.m_preds) + { + const superedge *sedge = in_edge->m_sedge; + if (!sedge) + continue; + const cfg_superedge *cfg_sedge = sedge->dyn_cast_cfg_superedge (); + if (!cfg_sedge) + continue; + if (cfg_sedge->back_edge_p ()) + return in_edge; + } + return nullptr; +} + +/* Subclass of region_model_context that rejects conditional branches that + aren't known for definite. */ + +class infinite_loop_checking_context : public noop_region_model_context +{ +public: + infinite_loop_checking_context () : m_unusable (false) {} + + bool checking_for_infinite_loop_p () const override { return true; } + void on_unusable_in_infinite_loop () override { m_unusable = true; } + + bool unusable_p () const { return m_unusable; } + +private: + bool m_unusable; +}; + +/* Determine if an infinite loop starts at ENODE. + Return the loop if it is found, nullptr otherwise. + + Look for cycles in the exploded graph in which: + - no externally visible work occurs + - no escape from the cycle + - the program state is "sufficiently concrete" at each step: + - no unknown activity could be occurring + - the worklist was fully drained for each enode in the cycle + i.e. every enode in the cycle is processed. */ + +static std::unique_ptr +starts_infinite_loop_p (const exploded_node &enode, + const exploded_graph &eg, + logger *logger) +{ + LOG_FUNC_1 (logger, "considering EN: %i", enode.m_index); + + /* Only consider enodes that have a CFG back edge as an in-edge. */ + if (const exploded_edge *back_edge = get_in_edge_back_edge (enode)) + { + if (logger) + logger->log ("got backedge from EN: %i", + back_edge->m_src->m_index); + } + else + { + if (logger) + logger->log ("rejecting: no backedge in in-edges"); + return nullptr; + } + + /* Support for dumping an .infinite-loop.dot file visualizing the + traversal for this enode. */ + std::unique_ptr fg; + feasible_node *curr_fnode = nullptr; + + if (flag_dump_analyzer_infinite_loop) + fg = ::make_unique (); + + location_t first_loc = UNKNOWN_LOCATION; + const exploded_node *iter = &enode; + feasibility_state state (*enode.get_state ().m_region_model, + eg.get_supergraph ()); + + if (fg) + curr_fnode = fg->add_node (&enode, state, 0); + + hash_set visited; + std::vector eedges; + while (1) + { + if (logger) + logger->log ("iter: EN: %i", iter->m_index); + /* Analysis bailed out before processing this node. */ + if (iter->get_status () == exploded_node::STATUS_WORKLIST) + { + if (logger) + logger->log ("rejecting: EN: %i is still in worklist", + iter->m_index); + return nullptr; + } + if (visited.contains (iter)) + { + /* We've looped back on ourselves. ENODE is in the loop + itself if ENODE is the first place we looped back, + as opposed to being on a path to a loop. */ + if (iter == &enode) + { + if (logger) + logger->log ("accepting: looped back to EN: %i", + iter->m_index); + if (fg) + { + auto_timevar tv (TV_ANALYZER_DUMP); + pretty_printer pp; + pp_printf (&pp, "%s.en%i.infinite-loop.dot", + dump_base_name, enode.m_index); + char *filename = xstrdup (pp_formatted_text (&pp)); + feasible_graph::dump_args_t dump_args (eg); + fg->dump_dot (filename, nullptr, dump_args); + free (filename); + } + return ::make_unique (enode, + first_loc, + eedges, + logger); + } + else + { + if (logger) + logger->log ("rejecting: looped back to EN: %i, not to EN: %i", + iter->m_index, enode.m_index); + return nullptr; + } + } + visited.add (iter); + if (first_loc == UNKNOWN_LOCATION) + { + location_t enode_loc = iter->get_point ().get_location (); + if (enode_loc != UNKNOWN_LOCATION) + first_loc = enode_loc; + } + + /* Find the out-edges that are feasible, given the + constraints here. */ + typedef std::pair pair_t; + std::vector succs; + for (auto out_edge : iter->m_succs) + { + log_scope s (logger, "considering out-edge", + "EN:%i -> EN:%i", + out_edge->m_src->m_index, + out_edge->m_dest->m_index); + feasibility_state next_state (state); + + /* Use this context to require edge conditions to be known, + rather than be merely "possible". */ + infinite_loop_checking_context ctxt; + if (next_state.maybe_update_for_edge (logger, + out_edge, + &ctxt, + nullptr)) + succs.push_back (pair_t (next_state, out_edge)); + if (ctxt.unusable_p ()) + { + /* If we get here, then we have e.g. a gcond where + the condition is UNKNOWN, or a condition + based on a widening_svalue. Reject such paths. */ + if (logger) + logger->log ("rejecting: unusable"); + return nullptr; + } + } + + if (succs.size () != 1) + { + if (logger) + logger->log ("rejecting: %i feasible successors", + (int)succs.size ()); + return nullptr; + } + const feasibility_state &next_state = succs[0].first; + const exploded_edge *out_eedge = succs[0].second; + if (out_eedge->could_do_work_p ()) + { + if (logger) + logger->log ("rejecting: edge could do work"); + return nullptr; + } + if (fg) + { + feasible_node *next_fnode = fg->add_node (out_eedge->m_dest, + next_state, + fg->m_nodes.length ()); + fg->add_edge (new feasible_edge (curr_fnode, next_fnode, out_eedge)); + curr_fnode = next_fnode; + } + state = next_state; + eedges.push_back (out_eedge); + if (first_loc == UNKNOWN_LOCATION) + { + if (out_eedge->m_sedge) + if (::edge cfg_edge = out_eedge->m_sedge->get_any_cfg_edge ()) + if (cfg_edge->goto_locus > BUILTINS_LOCATION) + first_loc = cfg_edge->goto_locus; + } + iter = out_eedge->m_dest; + } +} + +/* Implementation of -Wanalyzer-infinite-loop. */ + +void +exploded_graph::detect_infinite_loops () +{ + LOG_FUNC (get_logger ()); + auto_timevar tv (TV_ANALYZER_INFINITE_LOOPS); + + /* Track all enodes we've warned for; both the loop entrypoints + and all the enodes within those loops. */ + hash_set warned_for; + + for (auto enode : m_nodes) + { + if (get_logger ()) + get_logger ()->log ("visited: %i out of %i", + (int)warned_for.elements (), m_nodes.length ()); + + /* Only warn about the first enode we encounter in each cycle. */ + if (warned_for.contains(enode)) + continue; + + if (std::unique_ptr inf_loop + = starts_infinite_loop_p (*enode, *this, get_logger ())) + { + const supernode *snode = enode->get_supernode (); + + if (get_logger ()) + get_logger ()->log ("EN: %i from starts_infinite_loop_p", + enode->m_index); + + for (auto iter : inf_loop->m_eedge_vec) + warned_for.add (iter->m_src); + gcc_assert (warned_for.contains(enode)); + + if (inf_loop->m_loc == UNKNOWN_LOCATION) + { + if (get_logger ()) + get_logger ()->log + ("no location available for reporting infinite loop"); + continue; + } + + pending_location ploc (enode, snode, inf_loop->m_loc); + auto d + = ::make_unique (std::move (inf_loop)); + get_diagnostic_manager ().add_diagnostic (ploc, std::move (d)); + } + } +} diff --git a/gcc/analyzer/program-state.cc b/gcc/analyzer/program-state.cc index 8dade4b5b3e0..9bb81e6ddddc 100644 --- a/gcc/analyzer/program-state.cc +++ b/gcc/analyzer/program-state.cc @@ -1145,15 +1145,22 @@ program_state::on_edge (exploded_graph &eg, this, uncertainty, &path_ctxt, last_stmt); + std::unique_ptr rc; + logger * const logger = eg.get_logger (); if (!m_region_model->maybe_update_for_edge (*succ, last_stmt, - &ctxt, NULL)) + &ctxt, + logger ? &rc : nullptr)) { - logger * const logger = eg.get_logger (); if (logger) - logger->log ("edge to SN: %i is impossible" - " due to region_model constraints", - succ->m_dest->m_index); + { + logger->start_log_line (); + logger->log_partial ("edge to SN: %i is impossible" + " due to region_model constraint: ", + succ->m_dest->m_index); + rc->dump_to_pp (logger->get_printer ()); + logger->end_log_line (); + } return false; } if (terminated) diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc index dc8344065202..052c47d38f17 100644 --- a/gcc/analyzer/region-model.cc +++ b/gcc/analyzer/region-model.cc @@ -1179,6 +1179,15 @@ region_model::on_assignment (const gassign *assign, region_model_context *ctxt) const region *lhs_reg = get_lvalue (lhs, ctxt); + /* Any writes other than to the stack are treated + as externally visible. */ + if (ctxt) + { + enum memory_space memspace = lhs_reg->get_memory_space (); + if (memspace != MEMSPACE_STACK) + ctxt->maybe_did_work (); + } + /* Most assignments are handled by: set_value (lhs_reg, SVALUE, CTXT) for some SVALUE. */ @@ -1277,6 +1286,8 @@ region_model::on_stmt_pre (const gimple *stmt, { const gasm *asm_stmt = as_a (stmt); on_asm_stmt (asm_stmt, ctxt); + if (ctxt) + ctxt->maybe_did_work (); } break; @@ -1701,7 +1712,11 @@ region_model::on_call_post (const gcall *call, } if (unknown_side_effects) - handle_unrecognized_call (call, ctxt); + { + handle_unrecognized_call (call, ctxt); + if (ctxt) + ctxt->maybe_did_work (); + } } /* Purge state involving SVAL from this region_model, using CTXT @@ -2236,6 +2251,7 @@ void region_model::handle_phi (const gphi *phi, tree lhs, tree rhs, const region_model &old_state, + hash_set &svals_changing_meaning, region_model_context *ctxt) { /* For now, don't bother tracking the .MEM SSA names. */ @@ -2247,6 +2263,10 @@ region_model::handle_phi (const gphi *phi, const svalue *src_sval = old_state.get_rvalue (rhs, ctxt); const region *dst_reg = old_state.get_lvalue (lhs, ctxt); + const svalue *sval = old_state.get_rvalue (lhs, nullptr); + if (sval->get_kind () == SK_WIDENING) + svals_changing_meaning.add (sval); + set_value (dst_reg, src_sval, ctxt); if (ctxt) @@ -4661,6 +4681,14 @@ region_model::add_constraint (tree lhs, enum tree_code op, tree rhs, return add_constraint (lhs_sval, op, rhs_sval, ctxt); } +static bool +unusable_in_infinite_loop_constraint_p (const svalue *sval) +{ + if (sval->get_kind () == SK_WIDENING) + return true; + return false; +} + /* Attempt to add the constraint "LHS OP RHS" to this region_model. If it is consistent with existing constraints, add it, and return true. Return false if it contradicts existing constraints. @@ -4672,6 +4700,20 @@ region_model::add_constraint (const svalue *lhs, const svalue *rhs, region_model_context *ctxt) { + const bool checking_for_infinite_loop + = ctxt ? ctxt->checking_for_infinite_loop_p () : false; + + if (checking_for_infinite_loop) + { + if (unusable_in_infinite_loop_constraint_p (lhs) + || unusable_in_infinite_loop_constraint_p (rhs)) + { + gcc_assert (ctxt); + ctxt->on_unusable_in_infinite_loop (); + return false; + } + } + tristate t_cond = eval_condition (lhs, op, rhs); /* If we already have the condition, do nothing. */ @@ -4683,6 +4725,15 @@ region_model::add_constraint (const svalue *lhs, if (t_cond.is_false ()) return false; + if (checking_for_infinite_loop) + { + /* Here, we don't have a definite true/false value, so bail out + when checking for infinite loops. */ + gcc_assert (ctxt); + ctxt->on_unusable_in_infinite_loop (); + return false; + } + bool out; if (add_constraints_from_binop (lhs, op, rhs, &out, ctxt)) return out; @@ -5068,6 +5119,8 @@ region_model::update_for_phis (const supernode *snode, are effectively handled simultaneously. */ const region_model old_state (*this); + hash_set svals_changing_meaning; + for (gphi_iterator gpi = const_cast(snode)->start_phis (); !gsi_end_p (gpi); gsi_next (&gpi)) { @@ -5077,8 +5130,11 @@ region_model::update_for_phis (const supernode *snode, tree lhs = gimple_phi_result (phi); /* Update next_state based on phi and old_state. */ - handle_phi (phi, lhs, src, old_state, ctxt); + handle_phi (phi, lhs, src, old_state, svals_changing_meaning, ctxt); } + + for (auto iter : svals_changing_meaning) + m_constraints->purge_state_involving (iter); } /* Attempt to update this model for taking EDGE (where the last statement @@ -5246,6 +5302,9 @@ region_model::replay_call_summary (call_summary_replay &r, m_store.replay_call_summary (r, summary.m_store); + if (r.get_ctxt ()) + r.get_ctxt ()->maybe_did_work (); + if (!m_constraints->replay_call_summary (r, *summary.m_constraints)) return false; @@ -5807,6 +5866,9 @@ region_model::can_merge_with_p (const region_model &other_model, *other_model.m_constraints, out_model->m_constraints); + for (auto iter : m.m_svals_changing_meaning) + out_model->m_constraints->purge_state_involving (iter); + return true; } @@ -6658,6 +6720,14 @@ model_merger::mergeable_svalue_p (const svalue *sval) const return true; } +/* Mark WIDENING_SVAL as changing meaning during the merge. */ + +void +model_merger::on_widening_reuse (const widening_svalue *widening_sval) +{ + m_svals_changing_meaning.add (widening_sval); +} + } // namespace ana /* Dump RMODEL fully to stderr (i.e. without summarization). */ @@ -8364,7 +8434,6 @@ test_iteration_1 () tree int_0 = build_int_cst (integer_type_node, 0); tree int_1 = build_int_cst (integer_type_node, 1); tree int_256 = build_int_cst (integer_type_node, 256); - tree int_257 = build_int_cst (integer_type_node, 257); tree i = build_global_decl ("i", integer_type_node); test_region_model_context ctxt; @@ -8426,8 +8495,6 @@ test_iteration_1 () ASSERT_TRUE (model5.can_merge_with_p (model2, point, &model6)); const svalue *merged_widening = model6.get_rvalue (i, &ctxt); ASSERT_EQ (merged_widening->get_kind (), SK_WIDENING); - - ASSERT_CONDITION_TRUE (model6, i, LT_EXPR, int_257); } /* Verify that if we mark a pointer to a malloc-ed region as non-NULL, diff --git a/gcc/analyzer/region-model.h b/gcc/analyzer/region-model.h index 4d8480df141e..e26d18713b1d 100644 --- a/gcc/analyzer/region-model.h +++ b/gcc/analyzer/region-model.h @@ -328,6 +328,7 @@ class region_model void handle_phi (const gphi *phi, tree lhs, tree rhs, const region_model &old_state, + hash_set &svals_changing_meaning, region_model_context *ctxt); bool maybe_update_for_edge (const superedge &edge, @@ -804,6 +805,11 @@ class region_model_context virtual const gimple *get_stmt () const = 0; virtual const exploded_graph *get_eg () const = 0; + + /* Hooks for detecting infinite loops. */ + virtual void maybe_did_work () = 0; + virtual bool checking_for_infinite_loop_p () const = 0; + virtual void on_unusable_in_infinite_loop () = 0; }; /* A "do nothing" subclass of region_model_context. */ @@ -861,6 +867,9 @@ public: const gimple *get_stmt () const override { return NULL; } const exploded_graph *get_eg () const override { return NULL; } + void maybe_did_work () override {} + bool checking_for_infinite_loop_p () const override { return false; } + void on_unusable_in_infinite_loop () override {} }; /* A subclass of region_model_context for determining if operations fail @@ -1036,6 +1045,24 @@ class region_model_context_decorator : public region_model_context return nullptr; } + void maybe_did_work () override + { + if (m_inner) + m_inner->maybe_did_work (); + } + + bool checking_for_infinite_loop_p () const override + { + if (m_inner) + return m_inner->checking_for_infinite_loop_p (); + return false; + } + void on_unusable_in_infinite_loop () override + { + if (m_inner) + m_inner->on_unusable_in_infinite_loop (); + } + protected: region_model_context_decorator (region_model_context *inner) : m_inner (inner) @@ -1108,6 +1135,8 @@ struct model_merger return m_point.get_function_point (); } + void on_widening_reuse (const widening_svalue *widening_sval); + const region_model *m_model_a; const region_model *m_model_b; const program_point &m_point; @@ -1116,6 +1145,8 @@ struct model_merger const extrinsic_state *m_ext_state; const program_state *m_state_a; const program_state *m_state_b; + + hash_set m_svals_changing_meaning; }; /* A record that can (optionally) be written out when diff --git a/gcc/analyzer/sm-signal.cc b/gcc/analyzer/sm-signal.cc index e3f90921df98..9ebcbdbc8e01 100644 --- a/gcc/analyzer/sm-signal.cc +++ b/gcc/analyzer/sm-signal.cc @@ -279,6 +279,7 @@ public: src_enode); if (dst_enode) eg->add_edge (src_enode, dst_enode, NULL, /*state_change (),*/ + true, /* assume does work */ make_unique ()); } diff --git a/gcc/analyzer/supergraph.cc b/gcc/analyzer/supergraph.cc index 31707e743a58..52cb8771de35 100644 --- a/gcc/analyzer/supergraph.cc +++ b/gcc/analyzer/supergraph.cc @@ -790,6 +790,13 @@ supernode::get_start_location () const if (return_p ()) return m_fun->function_end_locus; + /* We have no locations for stmts. If we have a single out-edge that's + a CFG edge, the goto_locus of that edge is a better location for this + than UNKNOWN_LOCATION. */ + if (m_succs.length () == 1) + if (const cfg_superedge *cfg_sedge = m_succs[0]->dyn_cast_cfg_superedge ()) + return cfg_sedge->get_goto_locus (); + return UNKNOWN_LOCATION; } @@ -813,6 +820,12 @@ supernode::get_end_location () const if (return_p ()) return m_fun->function_end_locus; + /* If we have a single out-edge that's a CFG edge, use the goto_locus of + that edge. */ + if (m_succs.length () == 1) + if (const cfg_superedge *cfg_sedge = m_succs[0]->dyn_cast_cfg_superedge ()) + return cfg_sedge->get_goto_locus (); + return UNKNOWN_LOCATION; } @@ -1063,6 +1076,9 @@ cfg_superedge::dump_label_to_pp (pretty_printer *pp, pp_string (pp, ")"); } + if (m_cfg_edge->goto_locus > BUILTINS_LOCATION) + pp_string (pp, " (has goto_locus)"); + /* Otherwise, no label. */ } diff --git a/gcc/analyzer/supergraph.h b/gcc/analyzer/supergraph.h index 27ebd13feb2c..0cafbb572342 100644 --- a/gcc/analyzer/supergraph.h +++ b/gcc/analyzer/supergraph.h @@ -532,6 +532,8 @@ class cfg_superedge : public superedge size_t get_phi_arg_idx () const; tree get_phi_arg (const gphi *phi) const; + location_t get_goto_locus () const { return m_cfg_edge->goto_locus; } + private: const ::edge m_cfg_edge; }; diff --git a/gcc/analyzer/svalue.cc b/gcc/analyzer/svalue.cc index 35eb8307b203..e5811bd13952 100644 --- a/gcc/analyzer/svalue.cc +++ b/gcc/analyzer/svalue.cc @@ -251,6 +251,7 @@ svalue::can_merge_p (const svalue *other, a descending chain of constraints. */ if (other == widen_arg0) { + merger->on_widening_reuse (widen_arg0); return widen_arg0; } @@ -606,6 +607,12 @@ public: m_found = true; } + void visit_widening_svalue (const widening_svalue *candidate) final override + { + if (candidate == m_needle) + m_found = true; + } + bool found_p () const { return m_found; } private: @@ -620,7 +627,8 @@ svalue::involves_p (const svalue *other) const { /* Currently only implemented for these kinds. */ gcc_assert (other->get_kind () == SK_INITIAL - || other->get_kind () == SK_CONJURED); + || other->get_kind () == SK_CONJURED + || other->get_kind () == SK_WIDENING); involvement_visitor v (other); accept (&v); diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 1748afdbfe0a..c0b571327fbd 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -448,6 +448,7 @@ Objective-C and Objective-C++ Dialects}. -fdump-analyzer-exploded-nodes-3 -fdump-analyzer-exploded-paths -fdump-analyzer-feasibility +-fdump-analyzer-infinite-loop -fdump-analyzer-json -fdump-analyzer-state-purge -fdump-analyzer-stderr @@ -467,6 +468,7 @@ Objective-C and Objective-C++ Dialects}. -Wno-analyzer-file-leak -Wno-analyzer-free-of-non-heap -Wno-analyzer-imprecise-fp-arithmetic +-Wno-analyzer-infinite-loop -Wno-analyzer-infinite-recursion -Wno-analyzer-jump-through-null -Wno-analyzer-malloc-leak @@ -10401,6 +10403,7 @@ Enabling this option effectively enables the following warnings: -Wanalyzer-file-leak -Wanalyzer-free-of-non-heap -Wanalyzer-imprecise-fp-arithmetic +-Wanalyzer-infinite-loop -Wanalyzer-infinite-recursion -Wanalyzer-jump-through-null -Wanalyzer-malloc-leak @@ -10666,6 +10669,57 @@ arithmetic is used in locations where precise computation is needed. This diagnostic only warns on use of floating-point operands inside the calculation of an allocation size at the moment. +@opindex Wanalyzer-infinite-loop +@opindex Wno-analyzer-infinite-loop +@item -Wno-analyzer-infinite-loop +This warning requires @option{-fanalyzer}, which enables it; use +@option{-Wno-analyzer-infinite-loop} to disable it. + +This diagnostics warns for paths through the code which appear to +lead to an infinite loop. + +Specifically, the analyzer will issue this warning when it "sees" a loop +in which: +@itemize @bullet +@item +no externally-visible work could be being done within the loop +@item +there is no way to escape from the loop +@item +the analyzer is sufficiently confident about the program state +throughout the loop to know that the above are true +@end itemize + +One way for this warning to be emitted is when there is an execution +path through a loop for which taking the path on one iteration implies +that the same path will be taken on all subsequent iterations. + +For example, consider: + +@smallexample + while (1) + @{ + char opcode = *cpu_state.pc; + switch (opcode) + @{ + case OPCODE_FOO: + handle_opcode_foo (&cpu_state); + break; + case OPCODE_BAR: + handle_opcode_bar (&cpu_state); + break; + @} + @} +@end smallexample + +The analyzer will complain for the above case because if @code{opcode} +ever matches none of the cases, the @code{switch} will follow the +implicit @code{default} case, making the body of the loop be a ``no-op'' +with @code{cpu_state.pc} unchanged, and thus using the same value of +@code{opcode} on all subseqent iterations, leading to an infinite loop. + +See @uref{https://cwe.mitre.org/data/definitions/835.html, CWE-835: Loop with Unreachable Exit Condition ('Infinite Loop')}. + @opindex Wanalyzer-infinite-recursion @opindex Wno-analyzer-infinite-recursion @item -Wno-analyzer-infinite-recursion @@ -10690,6 +10744,8 @@ this diagnostic. Compare with @option{-Winfinite-recursion}, which provides a similar diagnostic, but is implemented in a different way. +See @uref{https://cwe.mitre.org/data/definitions/674.html, CWE-674: Uncontrolled Recursion}. + @opindex Wanalyzer-jump-through-null @opindex Wno-analyzer-jump-through-null @item -Wno-analyzer-jump-through-null @@ -11455,6 +11511,12 @@ The details are written in a form suitable for viewing with GraphViz to filenames of the form @file{@var{file}.*.fg.dot}, @file{@var{file}.*.tg.dot}, and @file{@var{file}.*.fpath.txt}. +@opindex dump-analyzer-infinite-loop +@item -fdump-analyzer-infinite-loop +Dump internal details about the analyzer's search for infinite loops. +The details are written in a form suitable for viewing with GraphViz +to filenames of the form @file{@var{file}.*.infinite-loop.dot}. + @opindex fdump-analyzer-json @item -fdump-analyzer-json Dump a compressed JSON representation of analyzer internals to diff --git a/gcc/testsuite/c-c++-common/analyzer/gzio-2.c b/gcc/testsuite/c-c++-common/analyzer/gzio-2.c index 855ecc8f73d4..a0dd112b05d1 100644 --- a/gcc/testsuite/c-c++-common/analyzer/gzio-2.c +++ b/gcc/testsuite/c-c++-common/analyzer/gzio-2.c @@ -6,6 +6,6 @@ void gzseek (long offset, int whence) offset -= 1; if (offset < 0) return; - while (offset > 0) { + while (offset > 0) { /* { dg-warning "infinite loop" "" { xfail *-*-* } } */ } } diff --git a/gcc/testsuite/c-c++-common/analyzer/infinite-loop-2.c b/gcc/testsuite/c-c++-common/analyzer/infinite-loop-2.c new file mode 100644 index 000000000000..f2825d606faf --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/infinite-loop-2.c @@ -0,0 +1,34 @@ +extern int do_stuff (void); + +/* Various misleading "while" loops that look like do-whiles due + to proximity to another clause, but are actually empty. */ + +void not_a_do_while_1 (int flag) +{ + if (flag) { + do_stuff (); + flag = 0; + } while (flag); // TODO: should we complain here? +} + +void not_a_do_while_2 (int flag) +{ + if (!flag) { + do_stuff (); + flag = 1; + } while (flag); // TODO: should we complain here? +} + +void not_a_do_while_3 (int flag) +{ + while (!flag) { + flag = do_stuff (); + } while (flag); // TODO: should we complain here? +} + +void not_a_do_while_4 (int flag) +{ + while (flag) { + flag = do_stuff (); + } while (flag); // TODO: should we complain here? +} diff --git a/gcc/testsuite/c-c++-common/analyzer/infinite-loop-4.c b/gcc/testsuite/c-c++-common/analyzer/infinite-loop-4.c new file mode 100644 index 000000000000..032f7fd58602 --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/infinite-loop-4.c @@ -0,0 +1,71 @@ +/* Various tests for loops that aren't infinite, strictly speaking, + but look bogus. */ + +// TODO: should we complain about these? + +extern int maybe_useful_work (); + +/* Loop iteration going the wrong way, with a signed iterator + + Not infinite, as will eventually overflow and bail out, but probably + not what the user intended. */ + +void test_wrong_way_signed_1 (int n) +{ + for (int i = 0; i < n; i--) + { + } +} + +void test_wrong_way_signed_2 (int n) +{ + for (int i = 0; i < n; i--) + maybe_useful_work (); +} + +int test_wrong_way_signed_3 (int *arr, int n) +{ + int sum = 0; + for (int i = 0; i < n; i--) + sum += arr[i]; + return sum; +} + + +/* As above, but with an unsigned iterator. + + Not infinite, as will immediately overflow and bail out, but probably + not what the user intended. */ + +void test_wrong_way_unsigned_1 (unsigned n) +{ + for (unsigned i = 0; i < n; i--) + { + } +} + +void test_wrong_way_unsigned_2 (unsigned n) +{ + for (unsigned i = 0; i < n; i--) + maybe_useful_work (); +} + +int test_wrong_way_unsigned_3 (int *arr, unsigned n) +{ + int sum = 0; + for (unsigned i = 0; i < n; i--) + sum += arr[i]; + return sum; +} + +/* BUG: "n" never changes, so loop is never entered. */ + +void test_1 (void) +{ + int n = 0; + + /* [...snip...] */ + + for (int i = 0; i < n; i++) + maybe_useful_work (); +} diff --git a/gcc/testsuite/c-c++-common/analyzer/infinite-loop-crc32c.c b/gcc/testsuite/c-c++-common/analyzer/infinite-loop-crc32c.c new file mode 100644 index 000000000000..01d4e4d91f9c --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/infinite-loop-crc32c.c @@ -0,0 +1,14 @@ +/* Based on qemu's util/crc32c.c, in turn based on the + Linux kernel cryptographic crc32c module. */ + +#include + +extern const uint32_t crc32c_table[256]; + +uint32_t crc32c(uint32_t crc, const uint8_t *data, unsigned int length) +{ + while (length--) { /* { dg-bogus "infinite loop" } */ + crc = crc32c_table[(crc ^ *data++) & 0xFFL] ^ (crc >> 8); + } + return crc^0xffffffff; +} diff --git a/gcc/testsuite/c-c++-common/analyzer/infinite-loop-doom-d_main-IdentifyVersion.c b/gcc/testsuite/c-c++-common/analyzer/infinite-loop-doom-d_main-IdentifyVersion.c new file mode 100644 index 000000000000..166d6da11f95 --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/infinite-loop-doom-d_main-IdentifyVersion.c @@ -0,0 +1,26 @@ +/* Reduced from a -Wanalyzer-infinite-loop false positive seen in Doom's + d_main.c, which is under the GPLv2 or later. */ + +extern char* wadfiles[20]; + +void +D_AddFile(const char* file) +{ + int numwadfiles; + char* newfile; + + for (numwadfiles = 0; wadfiles[numwadfiles]; numwadfiles++) /* { dg-bogus "infinite loop" } */ + ; + + newfile = (char *)__builtin_malloc(__builtin_strlen(file) + 1); + __builtin_strcpy(newfile, file); /* { dg-warning "possibly-NULL" } */ + + wadfiles[numwadfiles] = newfile; +} + +void +IdentifyVersion(void) +{ + D_AddFile("doom1.wad"); + D_AddFile("data_se/texture1.lmp"); +} diff --git a/gcc/testsuite/c-c++-common/analyzer/infinite-loop-doom-v_video.c b/gcc/testsuite/c-c++-common/analyzer/infinite-loop-doom-v_video.c new file mode 100644 index 000000000000..35f420655c44 --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/infinite-loop-doom-v_video.c @@ -0,0 +1,31 @@ +/* Reduced from a -Wanalyzer-infinite-loop false positive seen in Doom's + v_video.c, which is under the GPLv2 or later. */ + +typedef unsigned char byte; + +byte* screens[5]; + +#define SCREENWIDTH 320 + +void +V_DrawBlock +( int x, + int y, + int scrn, + int width, + int height, + byte* src ) +{ + byte* dest; + + /* [...snip...] */ + + dest = screens[scrn] + y*SCREENWIDTH+x; + + while (height--) /* { dg-bogus "infinite loop" } */ + { + __builtin_memcpy (dest, src, width); + src += width; + dest += SCREENWIDTH; + } +} diff --git a/gcc/testsuite/c-c++-common/analyzer/infinite-loop-g_error.c b/gcc/testsuite/c-c++-common/analyzer/infinite-loop-g_error.c new file mode 100644 index 000000000000..5a267be0770e --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/infinite-loop-g_error.c @@ -0,0 +1,19 @@ +/* Reduced from glib, which has a g_error macro with this infinite + loop in it: + for (;;) ; + + Make sure we provide a readable warning for this case. */ + +extern void g_log_structured_standard (const char *); + +#define g_error(MSG) \ + do { \ + g_log_structured_standard (MSG); \ + for (;;) ; \ + } while (0) +/* { dg-message "5: infinite loop" "" { target *-*-* } .-2 } */ + +void test_g_error (void) +{ + g_error ("something went wrong"); /* { dg-message "in expansion of macro 'g_error'" } */ +} diff --git a/gcc/testsuite/c-c++-common/analyzer/infinite-loop-linked-list.c b/gcc/testsuite/c-c++-common/analyzer/infinite-loop-linked-list.c new file mode 100644 index 000000000000..aaa387fd3104 --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/infinite-loop-linked-list.c @@ -0,0 +1,131 @@ +/* Various correct and incorrect ways to walk a linked list, accumulating + a value. */ + +/* { dg-additional-options "-O0" } */ + +extern int maybe_useful_work (); + +struct node +{ + struct node *next; + int val; +}; + +/* Various "while" loops. */ + +int correct_while_loop (struct node *n) +{ + int sum = 0; + while (n) + { + sum += n->val; + n = n->next; + } + return sum; +} + +int while_loop_missing_next (struct node *n) +{ + int sum = 0; + while (n) /* { dg-line "while_loop_missing_next_WHILE_LINE" } */ + { + sum += n->val; /* { dg-line "while_loop_missing_next_LOOP_BODY" } */ + /* We're missing: "n = n->next;", so n does not change */ + } + return sum; + + /* { dg-warning "10: infinite loop" "" { target *-*-* } while_loop_missing_next_WHILE_LINE } */ + /* { dg-message "10: \\(2\\) when 'n' is non-NULL: always following 'true' branch\.\.\." "" { target *-*-* } while_loop_missing_next_WHILE_LINE } */ + /* { dg-message "\\(3\\) \.\.\.to here" "" { target *-*-* } while_loop_missing_next_LOOP_BODY } */ + /* { dg-message "\\(4\\) looping back\.\.\." "" { target *-*-* } while_loop_missing_next_LOOP_BODY } */ + /* { dg-message "\\(5\\) \.\.\.to here" "" { target *-*-* } while_loop_missing_next_WHILE_LINE } */ +} + +int while_loop_missing_next_with_work (struct node *n) +{ + int sum = 0; + while (n) /* { dg-bogus "infinite loop" } */ + { + sum += n->val; + /* We're missing: "n = n->next;", so n does not change */ + /* But here we do something that could be doing useful work. */ + maybe_useful_work (); + } + return sum; +} + +/* BUG: missing: "sum += ", so sum does not change. */ + +int while_loop_missing_add (struct node *n) +{ + int sum = 0; + while (n) /* { dg-warning "infinite loop" } */ + n->val; + return sum; +} + +/* Various "for" loops. */ + +int correct_for_loop (struct node *n) +{ + int sum = 0; + for (struct node *iter = n; iter; iter = iter->next) + sum += n->val; + return sum; +} + +int for_loop_missing_condition (struct node *n) +{ + int sum = 0; + for (struct node *iter = n; ; iter = iter->next) + sum += n->val; /* { dg-warning "infinite loop" } */ + return sum; +} + +int for_loop_missing_next (struct node *n) +{ + int sum = 0; + for (struct node *iter = n; iter; ) /* { dg-warning "infinite loop" } */ + sum += n->val; + return sum; +} + +/* BUG: missing: "sum += ", so sum does not change. + Not an infinite loop though, as we do iterate to the + end of the list. */ + +int for_loop_missing_add (struct node *n) +{ + int sum = 0; + for (struct node *iter = n; iter; iter = iter->next) + n->val; /* { dg-bogus "infinite loop" } */ + return sum; +} + +/* BUG: "iter->next" should be "iter = iter->next". */ + +int for_loop_noop_next (struct node *n) +{ + int sum = 0; + for (struct node *iter = n; iter; iter->next) /* { dg-line for_loop_noop_next_FOR_LINE } */ + sum += n->val; /* { dg-line for_loop_noop_next_LOOP_BODY } */ + return sum; + + /* { dg-warning "31: infinite loop" "" { target *-*-* } for_loop_noop_next_FOR_LINE } */ + /* { dg-message "31: \\(2\\) when 'iter' is non-NULL: always following 'true' branch\.\.\." "" { target *-*-* } for_loop_noop_next_FOR_LINE } */ + /* { dg-message "\\(3\\) \.\.\.to here" "" { target *-*-* } for_loop_noop_next_LOOP_BODY } */ + /* { dg-message "\\(4\\) looping back\.\.\." "" { target *-*-* } for_loop_noop_next_LOOP_BODY } */ + /* { dg-message "\\(5\\) \.\.\.to here" "" { target *-*-* } for_loop_noop_next_FOR_LINE } */ +} + +/* BUG: "iter = n->next" should be "iter = iter->next" + and so it becomes an infinite loop at the 2nd element. */ + +int for_loop_wrong_next (struct node *n) +{ + int sum = 0; + for (struct node *iter = n; iter; iter = n->next) /* { dg-warning "infinite loop" "" { xfail *-*-* } } */ + /* TODO: xfail. */ + sum += n->val; + return sum; +} diff --git a/gcc/testsuite/c-c++-common/analyzer/infinite-recursion-inlining.c b/gcc/testsuite/c-c++-common/analyzer/infinite-recursion-inlining.c index c885c922fe18..9dd5590acc04 100644 --- a/gcc/testsuite/c-c++-common/analyzer/infinite-recursion-inlining.c +++ b/gcc/testsuite/c-c++-common/analyzer/infinite-recursion-inlining.c @@ -11,13 +11,13 @@ void test_direct (void) { - test_direct (); /* Ideally would warn here, but it becomes an infinite loop. */ -} + test_direct (); +} /* { dg-warning "infinite-loop" } */ void test_guarded (int flag) { - if (flag) - test_guarded (flag); /* Ideally would warn here, but it becomes an infinite loop. */ + if (flag) /* { dg-warning "infinite-loop" } */ + test_guarded (flag); } void test_flipped_guard (int flag) @@ -34,7 +34,7 @@ void test_param_variant (int depth) void test_unguarded_param_variant (int depth) { - test_unguarded_param_variant (depth - 1); /* Ideally would warn here, but it becomes an infinite loop. */ + test_unguarded_param_variant (depth - 1); /* { dg-warning "infinite-loop" } */ } int g; @@ -90,27 +90,23 @@ int test_do_while_postdecrement_param (int n) /* Various cases of decrementing "n" as the recursion proceeds where not every path recurses, but we're not actually checking "n", so - if "flag" is true it's an infinite recursion. */ + if "flag" is true it's an infinite recursion (which looks like an + infinite loop after inlining). */ void test_partially_guarded_postdecrement (int flag, int n) { - /* Ideally we'd catch this, but it becomes an infinite loop. */ - if (flag) + if (flag) /* { dg-warning "infinite loop" } */ test_partially_guarded_postdecrement (flag, n--); } void test_partially_guarded_predecrement (int flag, int n) { - /* We fail to report this; we see that "n" is changing, - though it isn't relevant to whether we recurse. */ - if (flag) - test_partially_guarded_predecrement (flag, --n); /* { dg-warning "infinite recursion" "TODO" { xfail *-*-* } } */ + if (flag) /* { dg-warning "infinite loop" } */ + test_partially_guarded_predecrement (flag, --n); } void test_partially_guarded_subtract (int flag, int n) { - /* We fail to report this; we see that "n" is changing, - though it isn't relevant to whether we recurse. */ - if (flag) - test_partially_guarded_subtract (flag, n - 1); /* { dg-warning "infinite recursion" "TODO" { xfail *-*-* } } */ + if (flag) /* { dg-warning "infinite loop" } */ + test_partially_guarded_subtract (flag, n - 1); } diff --git a/gcc/testsuite/c-c++-common/analyzer/inlining-4-multiline.c b/gcc/testsuite/c-c++-common/analyzer/inlining-4-multiline.c index c870a9f654d9..5c971c581ae4 100644 --- a/gcc/testsuite/c-c++-common/analyzer/inlining-4-multiline.c +++ b/gcc/testsuite/c-c++-common/analyzer/inlining-4-multiline.c @@ -56,13 +56,20 @@ outer (int flag) | | | (4) following 'true' branch (when 'flag != 0')... | + 'inner': event 5 (depth 3) + | + | + | #define NULL ((void *)0) + | ^ + | | + | (5) ...to here + { dg-end-multiline-output "" { target c } } */ +/* { dg-begin-multiline-output "" } + | return NULL; + | ^~~~ + | <-------------+ | - 'outer': event 5 (depth 1) - | - |cc1: - | (5): ...to here - | 'outer': event 6 (depth 1) | | return *middle (flag); @@ -100,13 +107,20 @@ outer (int flag) | | | (4) following 'true' branch (when 'flag != 0')... | + 'const char* inner(int)': event 5 (depth 3) + | + | + | #define NULL + | + | | + | (5) ...to here + { dg-end-multiline-output "" { target c++ } } */ +/* { dg-begin-multiline-output "" } + | return NULL; + | ^~~~ + | <-------------+ | - 'char outer(int)': event 5 (depth 1) - | - |cc1plus: - | (5): ...to here - | 'char outer(int)': event 6 (depth 1) | | return *middle (flag); diff --git a/gcc/testsuite/gcc.dg/analyzer/boxed-malloc-1.c b/gcc/testsuite/gcc.dg/analyzer/boxed-malloc-1.c index 435fb4f01c34..6b6bba338aef 100644 --- a/gcc/testsuite/gcc.dg/analyzer/boxed-malloc-1.c +++ b/gcc/testsuite/gcc.dg/analyzer/boxed-malloc-1.c @@ -141,7 +141,7 @@ void test_12 (void) while (1) { - free (ptr.value); + free (ptr.value); /* { dg-warning "infinite loop" } */ free (ptr.value); /* { dg-warning "double-'free' of 'ptr.value'" } */ } } diff --git a/gcc/testsuite/gcc.dg/analyzer/data-model-20.c b/gcc/testsuite/gcc.dg/analyzer/data-model-20.c index ff65883dac10..59f62853ad6a 100644 --- a/gcc/testsuite/gcc.dg/analyzer/data-model-20.c +++ b/gcc/testsuite/gcc.dg/analyzer/data-model-20.c @@ -14,7 +14,11 @@ test (int n) { for (i = 0; i < n; i++) { if ((arr[i] = (struct foo *)malloc(sizeof(struct foo))) == NULL) { - for (; i >= 0; i++) { + for (; i >= 0; i++) { /* { dg-warning "infinite loop" } */ + /* This loop is in the wrong direction, so not technically an + infinite loop ("i" will eventually wrap around), but the + analyzer's condition handling treats the overflow as such. + In any case, the code is suspect and warrants a warning. */ free(arr[i]); /* { dg-bogus "double-'free'" } */ } free(arr); /* { dg-warning "leak" } */ diff --git a/gcc/testsuite/gcc.dg/analyzer/data-model-20a.c b/gcc/testsuite/gcc.dg/analyzer/data-model-20a.c new file mode 100644 index 000000000000..767b9912ed9c --- /dev/null +++ b/gcc/testsuite/gcc.dg/analyzer/data-model-20a.c @@ -0,0 +1,25 @@ +/* { dg-additional-options "-Wno-analyzer-too-complex" } */ + +#include + +struct foo { int dummy; }; + +struct foo ** +test (int n) { + struct foo **arr; + int i; + + if ((arr = (struct foo **)malloc(n * sizeof(struct foo *))) == NULL) + return NULL; + + for (i = 0; i < n; i++) { + if ((arr[i] = (struct foo *)malloc(sizeof(struct foo))) == NULL) { + for (; i >= 0; i--) { + free(arr[i]); /* { dg-bogus "double-'free'" } */ + } + free(arr); /* { dg-bogus "leak" "" { xfail *-*-* } } */ + return NULL; + } + } + return arr; +} diff --git a/gcc/testsuite/gcc.dg/analyzer/edges-1.c b/gcc/testsuite/gcc.dg/analyzer/edges-1.c index f08a6143d59b..644a2df8dafd 100644 --- a/gcc/testsuite/gcc.dg/analyzer/edges-1.c +++ b/gcc/testsuite/gcc.dg/analyzer/edges-1.c @@ -15,6 +15,8 @@ void test_1 (const char *path, int flag) if (!fp) /* { dg-message "when 'fp' is non-NULL" } */ return; + bar (); + /* We shouldn't report this control flow. */ while (foo ()) /* { dg-bogus "" } */ bar (); diff --git a/gcc/testsuite/gcc.dg/analyzer/explode-2a.c b/gcc/testsuite/gcc.dg/analyzer/explode-2a.c index 32c71ca44aa5..d07ce5b270a1 100644 --- a/gcc/testsuite/gcc.dg/analyzer/explode-2a.c +++ b/gcc/testsuite/gcc.dg/analyzer/explode-2a.c @@ -14,7 +14,7 @@ void test (void) explode-2.c as this code. */ int a = get (); int b = get (); - while (a) + while (a) /* { dg-warning "infinite loop" } */ { switch (b) { diff --git a/gcc/testsuite/gcc.dg/analyzer/infinite-loop-1.c b/gcc/testsuite/gcc.dg/analyzer/infinite-loop-1.c new file mode 100644 index 000000000000..c3515bb140a1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/analyzer/infinite-loop-1.c @@ -0,0 +1,235 @@ +/* { dg-additional-options "-O0" } */ + +extern int maybe_useful_work (); + +int global_var; +volatile int volatile_global_var; + +struct st +{ + int x; + int y; +}; + +static void __attribute__((noinline)) +do_nothing (void) +{ +} + +void test_empty_while_true () +{ + while (1) {} /* { dg-warning "infinite loop" } */ + /* { dg-message "looping back\.\.\." "" { target *-*-* } .-1 } */ + /* { dg-message "\.\.\.to here" "" { target *-*-* } .-2 } */ +} + +void test_empty_do_while () +{ + do {} while (1); /* { dg-warning "infinite loop" } */ + /* { dg-message "looping back\.\.\." "" { target *-*-* } .-1 } */ + /* { dg-message "\.\.\.to here" "" { target *-*-* } .-2 } */ +} + +void test_empty_for () +{ + for (;;) {} /* { dg-warning "infinite loop" } */ + /* { dg-message "looping back\.\.\." "" { target *-*-* } .-1 } */ + /* { dg-message "\.\.\.to here" "" { target *-*-* } .-2 } */ +} + +void test_while_true_maybe_useful_work () +{ + while (1) + maybe_useful_work (); +} + +void test_while_true_interproc_empty () +{ + /* Depending on optimization level, location is sometimes + on "while", sometimes on "do_nothing", and sometimes the + unknown location. */ + while (1) + do_nothing (); /* { dg-warning "infinite loop" } */ +} + +void test_while_true_increment_local () +{ + int i = 0; + while (1) + i++; /* { dg-warning "infinite loop" } */ +} + +void test_while_true_increment_global () +{ + while (1) + global_var++; +} + +void test_guarded_while_true_increment_local (int flag) +{ + if (flag) + { + int i = 0; + while (1) + i++; /* { dg-warning "infinite loop" } */ + } +} + +void test_while_local_flag_increment_local (int flag) +{ + int i = 0; + while (flag) /* { dg-warning "infinite loop" } */ + i++; +} + +extern int check_flag (void); + +void test_while_calling_fn (void) +{ + while (check_flag ()) + do_nothing (); +} + +void test_missing_parens_on_call (void) +{ + while (check_flag) + do_nothing (); /* { dg-warning "infinite loop" } */ +} + +void test_iteration_copy_and_paste_error (int m, int n) +{ + /* Wrong variable is incremented in inner "for" loop, thus + effectively an infinite loop. */ + float arr[m][n]; + for (int i = 0; i < m; i++) + for (int j = 0; j < n; i++) /* { dg-warning "infinite loop" } */ + arr[i][j] = 0.f; +} + +void test_missing_comparison_in_for_condition_1 (int n) +{ + /* Should have been "i < n", rather than just "n". */ + for (int i = 0; n; i++) /* { dg-warning "infinite loop" } */ + { + } +} + +int test_missing_comparison_in_for_condition_2 (int val, int *arr, int n) +{ + /* Should have been "i < n", rather than just "n". */ + int acc = 0; + for (int i = 0; n; i++) /* { dg-warning "infinite loop" } */ + acc += arr[i]; + return acc; +} + +void test_non_volatile_local_1 (void) +{ + int flag = 0; + while (!flag) /* { dg-warning "infinite loop" } */ + { + } +} + +void test_non_volatile_local_2a (void) +{ + int flag = 0; + + /* Perhaps should complain about this. + Although the infinite loop might be doing useful work, + "while (!flag)" is a misleading way to spell "infinite loop". */ + while (!flag) + maybe_useful_work (); +} + +void test_non_volatile_local_2b (void) +{ + int flag = 0; + + while (!flag) + flag = maybe_useful_work (); +} + +void test_non_volatile_local_3a (int n) +{ + int i = 0; + + /* Perhaps should complain about this. + Although the infinite loop might be doing useful work, + "while (i < n)" is a misleading way to spell "infinite loop". */ + while (i < n) + maybe_useful_work (); +} + +void test_non_volatile_local_3b (int n) +{ + int i = 0; + + while (i < n) + { + maybe_useful_work (); + i++; + } +} + +void test_volatile_local (void) +{ + volatile int flag = 0; + while (!flag) /* { dg-bogus "infinite loop" } */ + { + } +} + +void test_non_volatile_global (void) +{ + /* Not sure if we should warn here. */ + while (!global_var) /* { dg-warning "infinite loop" } */ + { + } +} + +void test_volatile_global (void) +{ + while (!volatile_global_var) /* { dg-bogus "infinite loop" } */ + { + } +} + +void test_field_1 (struct st *p) +{ + /* Not sure if we should warn here. */ + while (!p->x) /* { dg-warning "infinite loop" } */ + { + } +} + +void test_field_2 (struct st *p) +{ + while (!p->x) /* { dg-bogus "infinite loop" } */ + maybe_useful_work (); +} + + +int missing_init_of_i (int *arr, unsigned n) +{ + int sum = 0; + for (int i; i < n; i--) /* { dg-warning "use of uninitialized value 'i'" } */ + sum += arr[i]; + return sum; +} + +void test_switch (char *pc) +{ + while (1) + { + char opcode = *pc; /* { dg-warning "infinite loop" } */ + switch (opcode) /* { dg-message "if it ever follows 'default:' branch, it will always do so\.\.\." } */ + { + case 'A': + pc++; + break; + case 'B': + return; + } + } +} diff --git a/gcc/testsuite/gcc.dg/analyzer/malloc-1.c b/gcc/testsuite/gcc.dg/analyzer/malloc-1.c index 6b5590a433a3..2a42a05fb9e6 100644 --- a/gcc/testsuite/gcc.dg/analyzer/malloc-1.c +++ b/gcc/testsuite/gcc.dg/analyzer/malloc-1.c @@ -124,7 +124,7 @@ void test_12 (void) while (1) { - free (ptr); + free (ptr); /* { dg-warning "infinite loop" } */ free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */ } } diff --git a/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-coreutils.c b/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-coreutils.c index cd0f4b7f7b26..7af4c3794aa1 100644 --- a/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-coreutils.c +++ b/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-coreutils.c @@ -3,7 +3,7 @@ void add_zero_terminator (char *buf) { char *end = buf; - while (end++); + while (end++); /* TODO: arguably we should report this. */ if (buf < end) end[-1] = '\0'; } diff --git a/gcc/testsuite/gcc.dg/analyzer/paths-4.c b/gcc/testsuite/gcc.dg/analyzer/paths-4.c index b72e658739e1..60b3a0cfd2af 100644 --- a/gcc/testsuite/gcc.dg/analyzer/paths-4.c +++ b/gcc/testsuite/gcc.dg/analyzer/paths-4.c @@ -26,9 +26,10 @@ int test_2 (struct state *s) while (1) { __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enode" } */ + /* { dg-warning "infinite loop" "" { target *-*-* } .-1 } */ __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enode" } */ /* TODO: why does the above need an extra stmt to merge state? */ - switch (s->mode) + switch (s->mode) /* { dg-message "if it ever follows 'default:' branch, it will always do so\.\.\." } */ { case 0: __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enode" } */ diff --git a/gcc/testsuite/gcc.dg/analyzer/pr103892.c b/gcc/testsuite/gcc.dg/analyzer/pr103892.c index 95d4b17d18ba..d16cd83c472f 100644 --- a/gcc/testsuite/gcc.dg/analyzer/pr103892.c +++ b/gcc/testsuite/gcc.dg/analyzer/pr103892.c @@ -38,7 +38,7 @@ typedef struct pipecmd_sequence pipecmd_sequence_t; static char *argstr_get_word (const char **argstr) { - while (**argstr) { + while (**argstr) { /* { dg-warning "infinite loop" } */ switch (**argstr) { case ' ': case '\t': diff --git a/gcc/testsuite/gcc.dg/analyzer/pr93546.c b/gcc/testsuite/gcc.dg/analyzer/pr93546.c index 66f6805b07a9..07898e9bde56 100644 --- a/gcc/testsuite/gcc.dg/analyzer/pr93546.c +++ b/gcc/testsuite/gcc.dg/analyzer/pr93546.c @@ -5,7 +5,7 @@ void ch (int x1) { ({ bx: &&bx; }); - while (x1 == 0) + while (x1 == 0) /* { dg-warning "infinite loop" } */ { } } diff --git a/gcc/timevar.def b/gcc/timevar.def index d21b08c030d8..9628223a4365 100644 --- a/gcc/timevar.def +++ b/gcc/timevar.def @@ -342,6 +342,7 @@ DEFTIMEVAR (TV_ANALYZER_STATE_PURGE , "analyzer: state purge") DEFTIMEVAR (TV_ANALYZER_PLAN , "analyzer: planning") DEFTIMEVAR (TV_ANALYZER_SCC , "analyzer: scc") DEFTIMEVAR (TV_ANALYZER_WORKLIST , "analyzer: processing worklist") +DEFTIMEVAR (TV_ANALYZER_INFINITE_LOOPS, "analyzer: finding infinite loops") DEFTIMEVAR (TV_ANALYZER_DUMP , "analyzer: dump") DEFTIMEVAR (TV_ANALYZER_DIAGNOSTICS , "analyzer: emitting diagnostics") DEFTIMEVAR (TV_ANALYZER_SHORTEST_PATHS, "analyzer: shortest paths") From 094cca429399680cb1c8f4e65041350da71d6937 Mon Sep 17 00:00:00 2001 From: Lulu Cheng Date: Thu, 16 Nov 2023 15:06:11 +0800 Subject: [PATCH 143/169] LoongArch: Add code generation support for call36 function calls. When compiling with '-mcmodel=medium', the function call is made through 'pcaddu18i+jirl' if binutils supports call36, otherwise the native implementation 'pcalau12i+jirl' is used. gcc/ChangeLog: * config.in: Regenerate. * config/loongarch/loongarch-opts.h (HAVE_AS_SUPPORT_CALL36): Define macro. * config/loongarch/loongarch.cc (loongarch_legitimize_call_address): If binutils supports call36, the function call is not split over expand. * config/loongarch/loongarch.md: Add call36 generation code. * config/loongarch/predicates.md: Likewise. * configure: Regenerate. * configure.ac: Check whether binutils supports call36. gcc/testsuite/ChangeLog: * gcc.target/loongarch/func-call-medium-5.c: If the assembler supports call36, the test is abandoned. * gcc.target/loongarch/func-call-medium-6.c: Likewise. * gcc.target/loongarch/func-call-medium-7.c: Likewise. * gcc.target/loongarch/func-call-medium-8.c: Likewise. * lib/target-supports.exp: Added a function to see if the assembler supports the call36 relocation. * gcc.target/loongarch/func-call-medium-call36-1.c: New test. * gcc.target/loongarch/func-call-medium-call36.c: New test. Co-authored-by: Xi Ruoyao --- gcc/config.in | 6 + gcc/config/loongarch/loongarch-opts.h | 4 + gcc/config/loongarch/loongarch.cc | 12 +- gcc/config/loongarch/loongarch.md | 171 +++++++++++++++--- gcc/config/loongarch/predicates.md | 7 +- gcc/configure | 32 ++++ gcc/configure.ac | 6 + .../gcc.target/loongarch/func-call-medium-5.c | 1 + .../gcc.target/loongarch/func-call-medium-6.c | 1 + .../gcc.target/loongarch/func-call-medium-7.c | 1 + .../gcc.target/loongarch/func-call-medium-8.c | 1 + .../loongarch/func-call-medium-call36-1.c | 21 +++ .../loongarch/func-call-medium-call36.c | 32 ++++ gcc/testsuite/lib/target-supports.exp | 9 + 14 files changed, 268 insertions(+), 36 deletions(-) create mode 100644 gcc/testsuite/gcc.target/loongarch/func-call-medium-call36-1.c create mode 100644 gcc/testsuite/gcc.target/loongarch/func-call-medium-call36.c diff --git a/gcc/config.in b/gcc/config.in index 866f9fff1018..e100c20dcd06 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -781,6 +781,12 @@ #endif +/* Define if your assembler supports call36 relocation. */ +#ifndef USED_FOR_TARGET +#undef HAVE_AS_SUPPORT_CALL36 +#endif + + /* Define if your assembler and linker support thread-local storage. */ #ifndef USED_FOR_TARGET #undef HAVE_AS_TLS diff --git a/gcc/config/loongarch/loongarch-opts.h b/gcc/config/loongarch/loongarch-opts.h index 8de41bbc4f78..6dd309aad965 100644 --- a/gcc/config/loongarch/loongarch-opts.h +++ b/gcc/config/loongarch/loongarch-opts.h @@ -97,6 +97,10 @@ loongarch_update_gcc_opt_status (struct loongarch_target *target, #define HAVE_AS_EXPLICIT_RELOCS 0 #endif +#ifndef HAVE_AS_SUPPORT_CALL36 +#define HAVE_AS_SUPPORT_CALL36 0 +#endif + #ifndef HAVE_AS_MRELAX_OPTION #define HAVE_AS_MRELAX_OPTION 0 #endif diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index d05743bec874..22ca24a18784 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -3006,12 +3006,16 @@ loongarch_legitimize_call_address (rtx addr) enum loongarch_symbol_type symbol_type = loongarch_classify_symbol (addr); - /* Split function call insn 'bl sym' or 'bl %plt(sym)' to : - pcalau12i $rd, %pc_hi20(sym) - jr $rd, %pc_lo12(sym). */ + /* If add the compilation option '-cmodel=medium', and the assembler does + not support call36. The following sequence of instructions will be + used for the function call: + pcalau12i $rd, %pc_hi20(sym) + jr $rd, %pc_lo12(sym) + */ if (TARGET_CMODEL_MEDIUM - && TARGET_EXPLICIT_RELOCS + && !HAVE_AS_SUPPORT_CALL36 + && (la_opt_explicit_relocs != EXPLICIT_RELOCS_NONE) && (SYMBOL_REF_P (addr) || LABEL_REF_P (addr)) && (symbol_type == SYMBOL_PCREL || (symbol_type == SYMBOL_GOT_DISP && flag_plt))) diff --git a/gcc/config/loongarch/loongarch.md b/gcc/config/loongarch/loongarch.md index 22814a3679c9..f0b6ae3e2a27 100644 --- a/gcc/config/loongarch/loongarch.md +++ b/gcc/config/loongarch/loongarch.md @@ -3274,7 +3274,13 @@ XEXP (target, 1), operands[1])); else - emit_call_insn (gen_sibcall_internal (target, operands[1])); + { + rtx call = emit_call_insn (gen_sibcall_internal (target, operands[1])); + + if (TARGET_CMODEL_MEDIUM && !REG_P (target)) + clobber_reg (&CALL_INSN_FUNCTION_USAGE (call), + gen_rtx_REG (Pmode, T0_REGNUM)); + } DONE; }) @@ -3282,10 +3288,25 @@ [(call (mem:SI (match_operand 0 "call_insn_operand" "j,c,b")) (match_operand 1 "" ""))] "SIBLING_CALL_P (insn)" - "@ - jr\t%0 - b\t%0 - b\t%%plt(%0)" +{ + switch (which_alternative) + { + case 0: + return "jr\t%0"; + case 1: + if (TARGET_CMODEL_MEDIUM) + return "pcaddu18i\t$r12,%%call36(%0)\n\tjirl\t$r0,$r12,0"; + else + return "b\t%0"; + case 2: + if (TARGET_CMODEL_MEDIUM) + return "pcaddu18i\t$r12,%%call36(%0)\n\tjirl\t$r0,$r12,0"; + else + return "b\t%%plt(%0)"; + default: + gcc_unreachable (); + } +} [(set_attr "jirl" "indirect,direct,direct")]) (define_insn "@sibcall_internal_1" @@ -3318,9 +3339,17 @@ operands[2], arg2)); else - emit_call_insn (gen_sibcall_value_multiple_internal (arg1, target, - operands[2], - arg2)); + { + rtx call + = emit_call_insn (gen_sibcall_value_multiple_internal (arg1, + target, + operands[2], + arg2)); + + if (TARGET_CMODEL_MEDIUM && !REG_P (target)) + clobber_reg (&CALL_INSN_FUNCTION_USAGE (call), + gen_rtx_REG (Pmode, T0_REGNUM)); + } } else { @@ -3334,8 +3363,15 @@ XEXP (target, 1), operands[2])); else - emit_call_insn (gen_sibcall_value_internal (operands[0], target, - operands[2])); + { + rtx call = emit_call_insn (gen_sibcall_value_internal (operands[0], + target, + operands[2])); + + if (TARGET_CMODEL_MEDIUM && !REG_P (target)) + clobber_reg (&CALL_INSN_FUNCTION_USAGE (call), + gen_rtx_REG (Pmode, T0_REGNUM)); + } } DONE; }) @@ -3345,10 +3381,25 @@ (call (mem:SI (match_operand 1 "call_insn_operand" "j,c,b")) (match_operand 2 "" "")))] "SIBLING_CALL_P (insn)" - "@ - jr\t%1 - b\t%1 - b\t%%plt(%1)" +{ + switch (which_alternative) + { + case 0: + return "jr\t%1"; + case 1: + if (TARGET_CMODEL_MEDIUM) + return "pcaddu18i\t$r12,%%call36(%1)\n\tjirl\t$r0,$r12,0"; + else + return "b\t%1"; + case 2: + if (TARGET_CMODEL_MEDIUM) + return "pcaddu18i\t$r12,%%call36(%1)\n\tjirl\t$r0,$r12,0"; + else + return "b\t%%plt(%1)"; + default: + gcc_unreachable (); + } +} [(set_attr "jirl" "indirect,direct,direct")]) (define_insn "@sibcall_value_internal_1" @@ -3368,10 +3419,25 @@ (call (mem:SI (match_dup 1)) (match_dup 2)))] "SIBLING_CALL_P (insn)" - "@ - jr\t%1 - b\t%1 - b\t%%plt(%1)" +{ + switch (which_alternative) + { + case 0: + return "jr\t%1"; + case 1: + if (TARGET_CMODEL_MEDIUM) + return "pcaddu18i\t$r12,%%call36(%1)\n\tjirl\t$r0,$r12,0"; + else + return "b\t%1"; + case 2: + if (TARGET_CMODEL_MEDIUM) + return "pcaddu18i\t$r12,%%call36(%1)\n\tjirl\t$r0,$r12,0"; + else + return "b\t%%plt(%1)"; + default: + gcc_unreachable (); + } +} [(set_attr "jirl" "indirect,direct,direct")]) (define_insn "@sibcall_value_multiple_internal_1" @@ -3411,10 +3477,25 @@ (match_operand 1 "" "")) (clobber (reg:SI RETURN_ADDR_REGNUM))] "" - "@ - jirl\t$r1,%0,0 - bl\t%0 - bl\t%%plt(%0)" +{ + switch (which_alternative) + { + case 0: + return "jirl\t$r1,%0,0"; + case 1: + if (TARGET_CMODEL_MEDIUM) + return "pcaddu18i\t$r1,%%call36(%0)\n\tjirl\t$r1,$r1,0"; + else + return "bl\t%0"; + case 2: + if (TARGET_CMODEL_MEDIUM) + return "pcaddu18i\t$r1,%%call36(%0)\n\tjirl\t$r1,$r1,0"; + else + return "bl\t%%plt(%0)"; + default: + gcc_unreachable (); + } +} [(set_attr "jirl" "indirect,direct,direct")]) (define_insn "@call_internal_1" @@ -3473,10 +3554,25 @@ (match_operand 2 "" ""))) (clobber (reg:SI RETURN_ADDR_REGNUM))] "" - "@ - jirl\t$r1,%1,0 - bl\t%1 - bl\t%%plt(%1)" +{ + switch (which_alternative) + { + case 0: + return "jirl\t$r1,%1,0"; + case 1: + if (TARGET_CMODEL_MEDIUM) + return "pcaddu18i\t$r1,%%call36(%1)\n\tjirl\t$r1,$r1,0"; + else + return "bl\t%1"; + case 2: + if (TARGET_CMODEL_MEDIUM) + return "pcaddu18i\t$r1,%%call36(%1)\n\tjirl\t$r1,$r1,0"; + else + return "bl\t%%plt(%1)"; + default: + gcc_unreachable (); + } +} [(set_attr "jirl" "indirect,direct,direct")]) (define_insn "@call_value_internal_1" @@ -3498,10 +3594,25 @@ (match_dup 2))) (clobber (reg:SI RETURN_ADDR_REGNUM))] "" - "@ - jirl\t$r1,%1,0 - bl\t%1 - bl\t%%plt(%1)" +{ + switch (which_alternative) + { + case 0: + return "jirl\t$r1,%1,0"; + case 1: + if (TARGET_CMODEL_MEDIUM) + return "pcaddu18i\t$r1,%%call36(%1)\n\tjirl\t$r1,$r1,0"; + else + return "bl\t%1"; + case 2: + if (TARGET_CMODEL_MEDIUM) + return "pcaddu18i\t$r1,%%call36(%1)\n\tjirl\t$r1,$r1,0"; + else + return "bl\t%%plt(%1)"; + default: + gcc_unreachable (); + } +} [(set_attr "jirl" "indirect,direct,direct")]) (define_insn "@call_value_multiple_internal_1" diff --git a/gcc/config/loongarch/predicates.md b/gcc/config/loongarch/predicates.md index 946ed0d8212d..56f7c48e126b 100644 --- a/gcc/config/loongarch/predicates.md +++ b/gcc/config/loongarch/predicates.md @@ -443,7 +443,9 @@ { case SYMBOL_PCREL: if (TARGET_CMODEL_EXTREME - || (TARGET_CMODEL_MEDIUM && !TARGET_EXPLICIT_RELOCS)) + || (TARGET_CMODEL_MEDIUM + && HAVE_AS_SUPPORT_CALL36 + && (la_opt_explicit_relocs == EXPLICIT_RELOCS_NONE))) return false; else return 1; @@ -452,7 +454,8 @@ if (TARGET_CMODEL_EXTREME || !flag_plt || (flag_plt && TARGET_CMODEL_MEDIUM - && !TARGET_EXPLICIT_RELOCS)) + && HAVE_AS_SUPPORT_CALL36 + && (la_opt_explicit_relocs == EXPLICIT_RELOCS_NONE))) return false; else return 1; diff --git a/gcc/configure b/gcc/configure index ee97934ac4f6..cc0c3aad67be 100755 --- a/gcc/configure +++ b/gcc/configure @@ -30951,6 +30951,38 @@ if test $gcc_cv_as_loongarch_explicit_relocs = yes; then $as_echo "#define HAVE_AS_EXPLICIT_RELOCS 1" >>confdefs.h +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for call36 relocation support" >&5 +$as_echo_n "checking assembler for call36 relocation support... " >&6; } +if ${gcc_cv_as_loongarch_call36+:} false; then : + $as_echo_n "(cached) " >&6 +else + gcc_cv_as_loongarch_call36=no + if test x$gcc_cv_as != x; then + $as_echo 'pcaddu18i $r1, %call36(a) + jirl $r1, $r1, 0' > conftest.s + if { ac_try='$gcc_cv_as $gcc_cv_as_flags -o conftest.o conftest.s >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } + then + gcc_cv_as_loongarch_call36=yes + else + echo "configure: failed program was" >&5 + cat conftest.s >&5 + fi + rm -f conftest.o conftest.s + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_loongarch_call36" >&5 +$as_echo "$gcc_cv_as_loongarch_call36" >&6; } +if test $gcc_cv_as_loongarch_call36 = yes; then + +$as_echo "#define HAVE_AS_SUPPORT_CALL36 1" >>confdefs.h + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for eh_frame pcrel encoding support" >&5 diff --git a/gcc/configure.ac b/gcc/configure.ac index d0caf820648e..d9a35069e30d 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -5441,6 +5441,12 @@ x: [a:pcalau12i $t0,%pc_hi20(a)],, [AC_DEFINE(HAVE_AS_EXPLICIT_RELOCS, 1, [Define if your assembler supports explicit relocation.])]) + gcc_GAS_CHECK_FEATURE([call36 relocation support], + gcc_cv_as_loongarch_call36,, + [pcaddu18i $r1, %call36(a) + jirl $r1, $r1, 0],, + [AC_DEFINE(HAVE_AS_SUPPORT_CALL36, 1, + [Define if your assembler supports call36 relocation.])]) gcc_GAS_CHECK_FEATURE([eh_frame pcrel encoding support], gcc_cv_as_loongarch_eh_frame_pcrel_encoding_support,, [.cfi_startproc diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-medium-5.c b/gcc/testsuite/gcc.target/loongarch/func-call-medium-5.c index 8a47b5afcba7..cae880bd80c9 100644 --- a/gcc/testsuite/gcc.target/loongarch/func-call-medium-5.c +++ b/gcc/testsuite/gcc.target/loongarch/func-call-medium-5.c @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-skip-if "dg-require-effective-target loongarch_call36_support" { *-*-* } } */ /* { dg-options "-mabi=lp64d -O0 -fpic -fplt -mexplicit-relocs -mcmodel=medium" } */ /* { dg-final { scan-assembler "test:.*pcalau12i.*%pc_hi20\\(g\\)\n\tjirl.*pc_lo12\\(g\\)" } } */ /* { dg-final { scan-assembler "test1:.*pcalau12i.*%pc_hi20\\(f\\)\n\tjirl.*%pc_lo12\\(f\\)" } } */ diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-medium-6.c b/gcc/testsuite/gcc.target/loongarch/func-call-medium-6.c index 1e75e60e01ae..33819542d83a 100644 --- a/gcc/testsuite/gcc.target/loongarch/func-call-medium-6.c +++ b/gcc/testsuite/gcc.target/loongarch/func-call-medium-6.c @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-skip-if "dg-require-effective-target loongarch_call36_support" { *-*-* } } */ /* { dg-options "-mabi=lp64d -O0 -fno-pic -fplt -mexplicit-relocs -mcmodel=medium" } */ /* { dg-final { scan-assembler "test:.*pcalau12i.*%pc_hi20\\(g\\)\n\tjirl.*pc_lo12\\(g\\)" } } */ /* { dg-final { scan-assembler "test1:.*pcalau12i.*%pc_hi20\\(f\\)\n\tjirl.*%pc_lo12\\(f\\)" } } */ diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-medium-7.c b/gcc/testsuite/gcc.target/loongarch/func-call-medium-7.c index 9e89085ca19f..969b59d043e8 100644 --- a/gcc/testsuite/gcc.target/loongarch/func-call-medium-7.c +++ b/gcc/testsuite/gcc.target/loongarch/func-call-medium-7.c @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-skip-if "dg-require-effective-target loongarch_call36_support" { *-*-* } } */ /* { dg-options "-mabi=lp64d -O0 -fpic -fno-plt -mexplicit-relocs -mcmodel=medium" } */ /* { dg-final { scan-assembler "test:.*pcalau12i\t.*%got_pc_hi20\\(g\\)\n\tld\.d\t.*%got_pc_lo12\\(g\\)\n\tjirl" } } */ /* { dg-final { scan-assembler "test1:.*pcalau12i\t.*%got_pc_hi20\\(f\\)\n\tld\.d\t.*%got_pc_lo12\\(f\\)\n\tjirl" } } */ diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-medium-8.c b/gcc/testsuite/gcc.target/loongarch/func-call-medium-8.c index fde9c6e0ef49..786ff395f0b0 100644 --- a/gcc/testsuite/gcc.target/loongarch/func-call-medium-8.c +++ b/gcc/testsuite/gcc.target/loongarch/func-call-medium-8.c @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-skip-if "dg-require-effective-target loongarch_call36_support" { *-*-* } } */ /* { dg-options "-mabi=lp64d -O0 -fno-pic -fno-plt -mexplicit-relocs -mcmodel=medium" } */ /* { dg-final { scan-assembler "test:.*pcalau12i\t.*%got_pc_hi20\\(g\\)\n\tld\.d\t.*%got_pc_lo12\\(g\\)\n\tjirl" } } */ /* { dg-final { scan-assembler "test1:.*pcalau12i\t.*%pc_hi20\\(f\\)\n\tjirl.*%pc_lo12\\(f\\)" } } */ diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-medium-call36-1.c b/gcc/testsuite/gcc.target/loongarch/func-call-medium-call36-1.c new file mode 100644 index 000000000000..872ff32f825a --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/func-call-medium-call36-1.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target loongarch_call36_support } */ +/* { dg-options "-mcmodel=medium -mexplicit-relocs -fdump-rtl-final -O2" } */ +/* { dg-final { scan-assembler "test:.*pcaddu18i\t\\\$r1,%call36\\(func\\)" } } */ +/* { dg-final { scan-assembler "test_value:.*pcaddu18i\t\\\$r1,%call36\\(func_value\\)" } } */ + +extern void func (void); +int +test (void) +{ + func (); +} + + +extern int func_value (void); +float +test_value (void) +{ + func_value (); +} + diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-medium-call36.c b/gcc/testsuite/gcc.target/loongarch/func-call-medium-call36.c new file mode 100644 index 000000000000..98ccd260df59 --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/func-call-medium-call36.c @@ -0,0 +1,32 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target loongarch_call36_support } */ +/* { dg-options "-mcmodel=medium -mexplicit-relocs -fdump-rtl-final -O2" } */ +/* { dg-final { scan-rtl-dump-times "\\(clobber \\(reg:DI 12 \\\$r12\\)\\)" 3 "final" } } */ +/* { dg-final { scan-assembler "test:.*pcaddu18i\t\\\$r12,%call36\\(func\\)" } } */ +/* { dg-final { scan-assembler "test_value:.*pcaddu18i\t\\\$r12,%call36\\(func_value\\)" } } */ +/* { dg-final { scan-assembler "test_multi:.*pcaddu18i\t\\\$r12,%call36\\(func_multi\\)" } } */ + +extern void func (void); +void +test (void) +{ + func(); +} + + +extern int func_value (void); +int +test_value (void) +{ + func_value (); +} + +struct t {float a; float b;}; + +extern struct t func_multi (void); +struct t +test_multi (void) +{ + func_multi (); +} + diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index b6a2e4fd0961..8777e3b05e0e 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -13176,6 +13176,15 @@ proc check_effective_target_loongarch_asx_hw { } { } "-mlasx"] } +# Check whether LoongArch binutils supports call36 relocation. +proc check_effective_target_loongarch_call36_support { } { + return [check_no_compiler_messages loongarch_call36_support object { +/* Assembly code */ + pcaddu18i $r1,%call36(a) + jirl $r1,$r1,0 + } ""] +} + # Appends necessary Python flags to extra-tool-flags if Python.h is supported. # Otherwise, modifies dg-do-what. proc dg-require-python-h { args } { From c68463abbab98aa7f5a9b91e71ed6f6834c723df Mon Sep 17 00:00:00 2001 From: Lulu Cheng Date: Thu, 16 Nov 2023 20:43:53 +0800 Subject: [PATCH 144/169] LoongArch: Add LA664 support. Define ISA_BASE_LA64V110, which represents the base instruction set defined in LoongArch1.1. Support the configure setting --with-arch =la664, and support -march=la664,-mtune=la664. gcc/ChangeLog: * config.gcc: Support LA664. * config/loongarch/genopts/loongarch-strings: Likewise. * config/loongarch/genopts/loongarch.opt.in: Likewise. * config/loongarch/loongarch-cpu.cc (fill_native_cpu_config): Likewise. * config/loongarch/loongarch-def.c: Likewise. * config/loongarch/loongarch-def.h (N_ISA_BASE_TYPES): Likewise. (ISA_BASE_LA64V110): Define macro. (N_ARCH_TYPES): Update value. (N_TUNE_TYPES): Update value. (CPU_LA664): New macro. * config/loongarch/loongarch-opts.cc (isa_default_abi): Likewise. (isa_base_compat_p): Likewise. * config/loongarch/loongarch-opts.h (TARGET_64BIT): This parameter is enabled when la_target.isa.base is equal to ISA_BASE_LA64V100 or ISA_BASE_LA64V110. (TARGET_uARCH_LA664): Define macro. * config/loongarch/loongarch-str.h (STR_CPU_LA664): Likewise. * config/loongarch/loongarch.cc (loongarch_cpu_sched_reassociation_width): Add LA664 support. * config/loongarch/loongarch.opt: Regenerate. --- gcc/config.gcc | 10 ++++----- .../loongarch/genopts/loongarch-strings | 1 + gcc/config/loongarch/genopts/loongarch.opt.in | 3 +++ gcc/config/loongarch/loongarch-cpu.cc | 4 ++++ gcc/config/loongarch/loongarch-def.c | 21 +++++++++++++++++++ gcc/config/loongarch/loongarch-def.h | 8 ++++--- gcc/config/loongarch/loongarch-opts.cc | 8 +++---- gcc/config/loongarch/loongarch-opts.h | 4 +++- gcc/config/loongarch/loongarch-str.h | 1 + gcc/config/loongarch/loongarch.cc | 1 + gcc/config/loongarch/loongarch.opt | 3 +++ 11 files changed, 51 insertions(+), 13 deletions(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index 6d51bd93f3ff..b88591b6fd86 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -5039,7 +5039,7 @@ case "${target}" in # Perform initial sanity checks on --with-* options. case ${with_arch} in - "" | abi-default | loongarch64 | la464) ;; # OK, append here. + "" | abi-default | loongarch64 | la[46]64) ;; # OK, append here. native) if test x${host} != x${target}; then echo "--with-arch=native is illegal for cross-compiler." 1>&2 @@ -5088,7 +5088,7 @@ case "${target}" in case ${abi_base}/${abi_ext} in lp64*/base) # architectures that support lp64* ABI - arch_pattern="native|abi-default|loongarch64|la464" + arch_pattern="native|abi-default|loongarch64|la[46]64" # default architecture for lp64* ABI arch_default="abi-default" ;; @@ -5163,7 +5163,7 @@ case "${target}" in # Check default with_tune configuration using with_arch. case ${with_arch} in loongarch64) - tune_pattern="native|abi-default|loongarch64|la464" + tune_pattern="native|abi-default|loongarch64|la[46]64" ;; *) # By default, $with_tune == $with_arch @@ -5219,7 +5219,7 @@ case "${target}" in # Fixed: use the default gcc configuration for all multilib # builds by default. with_multilib_default="" ;; - arch,native|arch,loongarch64|arch,la464) # OK, append here. + arch,native|arch,loongarch64|arch,la[46]64) # OK, append here. with_multilib_default="/march=${component}" ;; arch,*) with_multilib_default="/march=abi-default" @@ -5307,7 +5307,7 @@ case "${target}" in if test x${parse_state} = x"arch"; then # -march option case ${component} in - native | abi-default | loongarch64 | la464) # OK, append here. + native | abi-default | loongarch64 | la[46]64) # OK, append here. # Append -march spec for each multilib variant. loongarch_multilib_list_make="${loongarch_multilib_list_make}/march=${component}" parse_state="opts" diff --git a/gcc/config/loongarch/genopts/loongarch-strings b/gcc/config/loongarch/genopts/loongarch-strings index 8e412f7536ea..7bc4824007e2 100644 --- a/gcc/config/loongarch/genopts/loongarch-strings +++ b/gcc/config/loongarch/genopts/loongarch-strings @@ -26,6 +26,7 @@ STR_CPU_NATIVE native STR_CPU_ABI_DEFAULT abi-default STR_CPU_LOONGARCH64 loongarch64 STR_CPU_LA464 la464 +STR_CPU_LA664 la664 # Base architecture STR_ISA_BASE_LA64V100 la64 diff --git a/gcc/config/loongarch/genopts/loongarch.opt.in b/gcc/config/loongarch/genopts/loongarch.opt.in index 158701d327a7..00b4733d75bb 100644 --- a/gcc/config/loongarch/genopts/loongarch.opt.in +++ b/gcc/config/loongarch/genopts/loongarch.opt.in @@ -107,6 +107,9 @@ Enum(cpu_type) String(@@STR_CPU_LOONGARCH64@@) Value(CPU_LOONGARCH64) EnumValue Enum(cpu_type) String(@@STR_CPU_LA464@@) Value(CPU_LA464) +EnumValue +Enum(cpu_type) String(@@STR_CPU_LA664@@) Value(CPU_LA664) + m@@OPTSTR_ARCH@@= Target RejectNegative Joined Enum(cpu_type) Var(la_opt_cpu_arch) Init(M_OPT_UNSET) -m@@OPTSTR_ARCH@@=PROCESSOR Generate code for the given PROCESSOR ISA. diff --git a/gcc/config/loongarch/loongarch-cpu.cc b/gcc/config/loongarch/loongarch-cpu.cc index 7a2866f60f98..f3a134141439 100644 --- a/gcc/config/loongarch/loongarch-cpu.cc +++ b/gcc/config/loongarch/loongarch-cpu.cc @@ -106,6 +106,10 @@ fill_native_cpu_config (struct loongarch_target *tgt) native_cpu_type = CPU_LA464; break; + case 0x0014d000: /* LA664 */ + native_cpu_type = CPU_LA664; + break; + default: /* Unknown PRID. */ if (tune_native_p) diff --git a/gcc/config/loongarch/loongarch-def.c b/gcc/config/loongarch/loongarch-def.c index 430ef8b2d957..067629141b6c 100644 --- a/gcc/config/loongarch/loongarch-def.c +++ b/gcc/config/loongarch/loongarch-def.c @@ -28,6 +28,7 @@ loongarch_cpu_strings[N_TUNE_TYPES] = { [CPU_ABI_DEFAULT] = STR_CPU_ABI_DEFAULT, [CPU_LOONGARCH64] = STR_CPU_LOONGARCH64, [CPU_LA464] = STR_CPU_LA464, + [CPU_LA664] = STR_CPU_LA664, }; struct loongarch_isa @@ -42,6 +43,11 @@ loongarch_cpu_default_isa[N_ARCH_TYPES] = { .fpu = ISA_EXT_FPU64, .simd = ISA_EXT_SIMD_LASX, }, + [CPU_LA664] = { + .base = ISA_BASE_LA64V110, + .fpu = ISA_EXT_FPU64, + .simd = ISA_EXT_SIMD_LASX, + }, }; struct loongarch_cache @@ -58,6 +64,12 @@ loongarch_cpu_cache[N_TUNE_TYPES] = { .l2d_size = 256, .simultaneous_prefetches = 4, }, + [CPU_LA664] = { + .l1d_line_size = 64, + .l1d_size = 64, + .l2d_size = 256, + .simultaneous_prefetches = 4, + }, }; struct loongarch_align @@ -70,6 +82,10 @@ loongarch_cpu_align[N_TUNE_TYPES] = { .function = "32", .label = "16", }, + [CPU_LA664] = { + .function = "32", + .label = "16", + }, }; @@ -104,6 +120,9 @@ loongarch_cpu_rtx_cost_data[N_TUNE_TYPES] = { [CPU_LA464] = { DEFAULT_COSTS }, + [CPU_LA664] = { + DEFAULT_COSTS + }, }; /* RTX costs to use when optimizing for size. */ @@ -127,6 +146,7 @@ loongarch_cpu_issue_rate[N_TUNE_TYPES] = { [CPU_NATIVE] = 4, [CPU_LOONGARCH64] = 4, [CPU_LA464] = 4, + [CPU_LA664] = 6, }; int @@ -134,6 +154,7 @@ loongarch_cpu_multipass_dfa_lookahead[N_TUNE_TYPES] = { [CPU_NATIVE] = 4, [CPU_LOONGARCH64] = 4, [CPU_LA464] = 4, + [CPU_LA664] = 6, }; /* Wiring string definitions from loongarch-str.h to global arrays diff --git a/gcc/config/loongarch/loongarch-def.h b/gcc/config/loongarch/loongarch-def.h index 6e2a6987910d..db497f3ffe27 100644 --- a/gcc/config/loongarch/loongarch-def.h +++ b/gcc/config/loongarch/loongarch-def.h @@ -55,7 +55,8 @@ extern "C" { /* enum isa_base */ extern const char* loongarch_isa_base_strings[]; #define ISA_BASE_LA64V100 0 -#define N_ISA_BASE_TYPES 1 +#define ISA_BASE_LA64V110 1 +#define N_ISA_BASE_TYPES 2 /* enum isa_ext_* */ extern const char* loongarch_isa_ext_strings[]; @@ -141,8 +142,9 @@ struct loongarch_target #define CPU_ABI_DEFAULT 1 #define CPU_LOONGARCH64 2 #define CPU_LA464 3 -#define N_ARCH_TYPES 4 -#define N_TUNE_TYPES 4 +#define CPU_LA664 4 +#define N_ARCH_TYPES 5 +#define N_TUNE_TYPES 5 /* parallel tables. */ extern const char* loongarch_cpu_strings[]; diff --git a/gcc/config/loongarch/loongarch-opts.cc b/gcc/config/loongarch/loongarch-opts.cc index e5921189a064..67a59152a013 100644 --- a/gcc/config/loongarch/loongarch-opts.cc +++ b/gcc/config/loongarch/loongarch-opts.cc @@ -552,17 +552,17 @@ isa_default_abi (const struct loongarch_isa *isa) switch (isa->fpu) { case ISA_EXT_FPU64: - if (isa->base == ISA_BASE_LA64V100) + if (isa->base >= ISA_BASE_LA64V100) abi.base = ABI_BASE_LP64D; break; case ISA_EXT_FPU32: - if (isa->base == ISA_BASE_LA64V100) + if (isa->base >= ISA_BASE_LA64V100) abi.base = ABI_BASE_LP64F; break; case ISA_EXT_NONE: - if (isa->base == ISA_BASE_LA64V100) + if (isa->base >= ISA_BASE_LA64V100) abi.base = ABI_BASE_LP64S; break; @@ -582,7 +582,7 @@ isa_base_compat_p (const struct loongarch_isa *set1, switch (set2->base) { case ISA_BASE_LA64V100: - return (set1->base == ISA_BASE_LA64V100); + return (set1->base >= ISA_BASE_LA64V100); default: gcc_unreachable (); diff --git a/gcc/config/loongarch/loongarch-opts.h b/gcc/config/loongarch/loongarch-opts.h index 6dd309aad965..0e1b3e528a1d 100644 --- a/gcc/config/loongarch/loongarch-opts.h +++ b/gcc/config/loongarch/loongarch-opts.h @@ -76,7 +76,8 @@ loongarch_update_gcc_opt_status (struct loongarch_target *target, #define TARGET_DOUBLE_FLOAT (la_target.isa.fpu == ISA_EXT_FPU64) #define TARGET_DOUBLE_FLOAT_ABI (la_target.abi.base == ABI_BASE_LP64D) -#define TARGET_64BIT (la_target.isa.base == ISA_BASE_LA64V100) +#define TARGET_64BIT (la_target.isa.base == ISA_BASE_LA64V100 \ + || la_target.isa.base == ISA_BASE_LA64V110) #define TARGET_ABI_LP64 (la_target.abi.base == ABI_BASE_LP64D \ || la_target.abi.base == ABI_BASE_LP64F \ || la_target.abi.base == ABI_BASE_LP64S) @@ -88,6 +89,7 @@ loongarch_update_gcc_opt_status (struct loongarch_target *target, /* TARGET_ macros for use in *.md template conditionals */ #define TARGET_uARCH_LA464 (la_target.cpu_tune == CPU_LA464) +#define TARGET_uARCH_LA664 (la_target.cpu_tune == CPU_LA664) /* Note: optimize_size may vary across functions, while -m[no]-memcpy imposes a global constraint. */ diff --git a/gcc/config/loongarch/loongarch-str.h b/gcc/config/loongarch/loongarch-str.h index 072558c28f1a..fc4f41bfc1eb 100644 --- a/gcc/config/loongarch/loongarch-str.h +++ b/gcc/config/loongarch/loongarch-str.h @@ -30,6 +30,7 @@ along with GCC; see the file COPYING3. If not see #define STR_CPU_ABI_DEFAULT "abi-default" #define STR_CPU_LOONGARCH64 "loongarch64" #define STR_CPU_LA464 "la464" +#define STR_CPU_LA664 "la664" #define STR_ISA_BASE_LA64V100 "la64" diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index 22ca24a18784..4cd509f11c6d 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -10177,6 +10177,7 @@ loongarch_cpu_sched_reassociation_width (struct loongarch_target *target, { case CPU_LOONGARCH64: case CPU_LA464: + case CPU_LA664: /* Vector part. */ if (LSX_SUPPORTED_MODE_P (mode) || LASX_SUPPORTED_MODE_P (mode)) { diff --git a/gcc/config/loongarch/loongarch.opt b/gcc/config/loongarch/loongarch.opt index a5988411fbb2..7f129e53ba5d 100644 --- a/gcc/config/loongarch/loongarch.opt +++ b/gcc/config/loongarch/loongarch.opt @@ -114,6 +114,9 @@ Enum(cpu_type) String(loongarch64) Value(CPU_LOONGARCH64) EnumValue Enum(cpu_type) String(la464) Value(CPU_LA464) +EnumValue +Enum(cpu_type) String(la664) Value(CPU_LA664) + march= Target RejectNegative Joined Enum(cpu_type) Var(la_opt_cpu_arch) Init(M_OPT_UNSET) -march=PROCESSOR Generate code for the given PROCESSOR ISA. From 1b12e7a07fe45570a0f846a7ad19a272062a6691 Mon Sep 17 00:00:00 2001 From: Lulu Cheng Date: Fri, 17 Nov 2023 15:42:53 +0800 Subject: [PATCH 145/169] LoongArch: Implement atomic operations using LoongArch1.1 instructions. 1. short and char type calls for atomic_add_fetch and __atomic_fetch_add are implemented using amadd{_db}.{b/h}. 2. Use amcas{_db}.{b/h/w/d} to implement __atomic_compare_exchange_n and __atomic_compare_exchange. 3. The short and char types of the functions __atomic_exchange and __atomic_exchange_n are implemented using amswap{_db}.{b/h}. gcc/ChangeLog: * config/loongarch/loongarch-def.h: Add comments. * config/loongarch/loongarch-opts.h (ISA_BASE_IS_LA64V110): Define macro. * config/loongarch/loongarch.cc (loongarch_memmodel_needs_rel_acq_fence): Remove redundant code implementations. * config/loongarch/sync.md (d): Added QI, HI support. (atomic_add): New template. (atomic_exchange_short): Likewise. (atomic_cas_value_strong_amcas): Likewise.. (atomic_fetch_add_short): Likewise. --- gcc/config/loongarch/loongarch-def.h | 2 + gcc/config/loongarch/loongarch-opts.h | 2 +- gcc/config/loongarch/loongarch.cc | 6 +- gcc/config/loongarch/sync.md | 186 ++++++++++++++++++++------ 4 files changed, 147 insertions(+), 49 deletions(-) diff --git a/gcc/config/loongarch/loongarch-def.h b/gcc/config/loongarch/loongarch-def.h index db497f3ffe27..b319cded4567 100644 --- a/gcc/config/loongarch/loongarch-def.h +++ b/gcc/config/loongarch/loongarch-def.h @@ -54,7 +54,9 @@ extern "C" { /* enum isa_base */ extern const char* loongarch_isa_base_strings[]; +/* LoongArch V1.00. */ #define ISA_BASE_LA64V100 0 +/* LoongArch V1.10. */ #define ISA_BASE_LA64V110 1 #define N_ISA_BASE_TYPES 2 diff --git a/gcc/config/loongarch/loongarch-opts.h b/gcc/config/loongarch/loongarch-opts.h index 0e1b3e528a1d..fa3773223bca 100644 --- a/gcc/config/loongarch/loongarch-opts.h +++ b/gcc/config/loongarch/loongarch-opts.h @@ -86,10 +86,10 @@ loongarch_update_gcc_opt_status (struct loongarch_target *target, || la_target.isa.simd == ISA_EXT_SIMD_LASX) #define ISA_HAS_LASX (la_target.isa.simd == ISA_EXT_SIMD_LASX) - /* TARGET_ macros for use in *.md template conditionals */ #define TARGET_uARCH_LA464 (la_target.cpu_tune == CPU_LA464) #define TARGET_uARCH_LA664 (la_target.cpu_tune == CPU_LA664) +#define ISA_BASE_IS_LA64V110 (la_target.isa.base == ISA_BASE_LA64V110) /* Note: optimize_size may vary across functions, while -m[no]-memcpy imposes a global constraint. */ diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index 4cd509f11c6d..7da7a60ddf52 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -5817,16 +5817,12 @@ loongarch_print_operand_punct_valid_p (unsigned char code) static bool loongarch_memmodel_needs_rel_acq_fence (enum memmodel model) { - switch (model) + switch (memmodel_base (model)) { case MEMMODEL_ACQ_REL: case MEMMODEL_SEQ_CST: - case MEMMODEL_SYNC_SEQ_CST: case MEMMODEL_RELEASE: - case MEMMODEL_SYNC_RELEASE: case MEMMODEL_ACQUIRE: - case MEMMODEL_CONSUME: - case MEMMODEL_SYNC_ACQUIRE: return true; case MEMMODEL_RELAXED: diff --git a/gcc/config/loongarch/sync.md b/gcc/config/loongarch/sync.md index c112091a60fe..66e316d80f56 100644 --- a/gcc/config/loongarch/sync.md +++ b/gcc/config/loongarch/sync.md @@ -38,7 +38,7 @@ [(plus "add") (ior "or") (xor "xor") (and "and")]) ;; This attribute gives the format suffix for atomic memory operations. -(define_mode_attr amo [(SI "w") (DI "d")]) +(define_mode_attr amo [(QI "b") (HI "h") (SI "w") (DI "d")]) ;; expands to the name of the atomic operand that implements a ;; particular code. @@ -123,7 +123,18 @@ UNSPEC_SYNC_OLD_OP))] "" "am%A2.\t$zero,%z1,%0" - [(set (attr "length") (const_int 8))]) + [(set (attr "length") (const_int 4))]) + +(define_insn "atomic_add" + [(set (match_operand:SHORT 0 "memory_operand" "+ZB") + (unspec_volatile:SHORT + [(plus:SHORT (match_dup 0) + (match_operand:SHORT 1 "reg_or_0_operand" "rJ")) + (match_operand:SI 2 "const_int_operand")] ;; model + UNSPEC_SYNC_OLD_OP))] + "ISA_BASE_IS_LA64V110" + "amadd%A2.\t$zero,%z1,%0" + [(set (attr "length") (const_int 4))]) (define_insn "atomic_fetch_" [(set (match_operand:GPR 0 "register_operand" "=&r") @@ -131,12 +142,12 @@ (set (match_dup 1) (unspec_volatile:GPR [(any_atomic:GPR (match_dup 1) - (match_operand:GPR 2 "reg_or_0_operand" "rJ")) + (match_operand:GPR 2 "reg_or_0_operand" "rJ")) (match_operand:SI 3 "const_int_operand")] ;; model UNSPEC_SYNC_OLD_OP))] "" "am%A3.\t%0,%z2,%1" - [(set (attr "length") (const_int 8))]) + [(set (attr "length") (const_int 4))]) (define_insn "atomic_exchange" [(set (match_operand:GPR 0 "register_operand" "=&r") @@ -148,7 +159,19 @@ (match_operand:GPR 2 "register_operand" "r"))] "" "amswap%A3.\t%0,%z2,%1" - [(set (attr "length") (const_int 8))]) + [(set (attr "length") (const_int 4))]) + +(define_insn "atomic_exchange_short" + [(set (match_operand:SHORT 0 "register_operand" "=&r") + (unspec_volatile:SHORT + [(match_operand:SHORT 1 "memory_operand" "+ZB") + (match_operand:SI 3 "const_int_operand")] ;; model + UNSPEC_SYNC_EXCHANGE)) + (set (match_dup 1) + (match_operand:SHORT 2 "register_operand" "r"))] + "ISA_BASE_IS_LA64V110" + "amswap%A3.\t%0,%z2,%1" + [(set (attr "length") (const_int 4))]) (define_insn "atomic_cas_value_strong" [(set (match_operand:GPR 0 "register_operand" "=&r") @@ -156,25 +179,36 @@ (set (match_dup 1) (unspec_volatile:GPR [(match_operand:GPR 2 "reg_or_0_operand" "rJ") (match_operand:GPR 3 "reg_or_0_operand" "rJ") - (match_operand:SI 4 "const_int_operand") ;; mod_s - (match_operand:SI 5 "const_int_operand")] ;; mod_f + (match_operand:SI 4 "const_int_operand")] ;; mod_s UNSPEC_COMPARE_AND_SWAP)) - (clobber (match_scratch:GPR 6 "=&r"))] + (clobber (match_scratch:GPR 5 "=&r"))] "" { return "1:\\n\\t" "ll.\\t%0,%1\\n\\t" "bne\\t%0,%z2,2f\\n\\t" - "or%i3\\t%6,$zero,%3\\n\\t" - "sc.\\t%6,%1\\n\\t" - "beqz\\t%6,1b\\n\\t" + "or%i3\\t%5,$zero,%3\\n\\t" + "sc.\\t%5,%1\\n\\t" + "beqz\\t%5,1b\\n\\t" "b\\t3f\\n\\t" "2:\\n\\t" - "%G5\\n\\t" + "%G4\\n\\t" "3:\\n\\t"; } [(set (attr "length") (const_int 28))]) +(define_insn "atomic_cas_value_strong_amcas" + [(set (match_operand:QHWD 0 "register_operand" "=&r") + (match_operand:QHWD 1 "memory_operand" "+ZB")) + (set (match_dup 1) + (unspec_volatile:QHWD [(match_operand:QHWD 2 "reg_or_0_operand" "rJ") + (match_operand:QHWD 3 "reg_or_0_operand" "rJ") + (match_operand:SI 4 "const_int_operand")] ;; mod_s + UNSPEC_COMPARE_AND_SWAP))] + "ISA_BASE_IS_LA64V110" + "ori\t%0,%z2,0\n\tamcas%A4.\t%0,%z3,%1" + [(set (attr "length") (const_int 8))]) + (define_expand "atomic_compare_and_swap" [(match_operand:SI 0 "register_operand" "") ;; bool output (match_operand:GPR 1 "register_operand" "") ;; val output @@ -186,9 +220,29 @@ (match_operand:SI 7 "const_int_operand" "")] ;; mod_f "" { - emit_insn (gen_atomic_cas_value_strong (operands[1], operands[2], - operands[3], operands[4], - operands[6], operands[7])); + rtx mod_s, mod_f; + + mod_s = operands[6]; + mod_f = operands[7]; + + /* Normally the succ memory model must be stronger than fail, but in the + unlikely event of fail being ACQUIRE and succ being RELEASE we need to + promote succ to ACQ_REL so that we don't lose the acquire semantics. */ + + if (is_mm_acquire (memmodel_base (INTVAL (mod_f))) + && is_mm_release (memmodel_base (INTVAL (mod_s)))) + mod_s = GEN_INT (MEMMODEL_ACQ_REL); + + operands[6] = mod_s; + + if (ISA_BASE_IS_LA64V110) + emit_insn (gen_atomic_cas_value_strong_amcas (operands[1], operands[2], + operands[3], operands[4], + operands[6])); + else + emit_insn (gen_atomic_cas_value_strong (operands[1], operands[2], + operands[3], operands[4], + operands[6])); rtx compare = operands[1]; if (operands[3] != const0_rtx) @@ -292,31 +346,53 @@ (match_operand:SI 7 "const_int_operand" "")] ;; mod_f "" { - union loongarch_gen_fn_ptrs generator; - generator.fn_7 = gen_atomic_cas_value_cmp_and_7_si; - loongarch_expand_atomic_qihi (generator, operands[1], operands[2], - operands[3], operands[4], operands[7]); + rtx mod_s, mod_f; - rtx compare = operands[1]; - if (operands[3] != const0_rtx) + mod_s = operands[6]; + mod_f = operands[7]; + + /* Normally the succ memory model must be stronger than fail, but in the + unlikely event of fail being ACQUIRE and succ being RELEASE we need to + promote succ to ACQ_REL so that we don't lose the acquire semantics. */ + + if (is_mm_acquire (memmodel_base (INTVAL (mod_f))) + && is_mm_release (memmodel_base (INTVAL (mod_s)))) + mod_s = GEN_INT (MEMMODEL_ACQ_REL); + + operands[6] = mod_s; + + if (ISA_BASE_IS_LA64V110) + emit_insn (gen_atomic_cas_value_strong_amcas (operands[1], operands[2], + operands[3], operands[4], + operands[6])); + else { - machine_mode mode = GET_MODE (operands[3]); - rtx op1 = convert_modes (SImode, mode, operands[1], true); - rtx op3 = convert_modes (SImode, mode, operands[3], true); - rtx difference = gen_rtx_MINUS (SImode, op1, op3); - compare = gen_reg_rtx (SImode); - emit_insn (gen_rtx_SET (compare, difference)); + union loongarch_gen_fn_ptrs generator; + generator.fn_7 = gen_atomic_cas_value_cmp_and_7_si; + loongarch_expand_atomic_qihi (generator, operands[1], operands[2], + operands[3], operands[4], operands[6]); } - if (word_mode != mode) - { - rtx reg = gen_reg_rtx (word_mode); - emit_insn (gen_rtx_SET (reg, gen_rtx_SIGN_EXTEND (word_mode, compare))); - compare = reg; - } + rtx compare = operands[1]; + if (operands[3] != const0_rtx) + { + machine_mode mode = GET_MODE (operands[3]); + rtx op1 = convert_modes (SImode, mode, operands[1], true); + rtx op3 = convert_modes (SImode, mode, operands[3], true); + rtx difference = gen_rtx_MINUS (SImode, op1, op3); + compare = gen_reg_rtx (SImode); + emit_insn (gen_rtx_SET (compare, difference)); + } - emit_insn (gen_rtx_SET (operands[0], - gen_rtx_EQ (SImode, compare, const0_rtx))); + if (word_mode != mode) + { + rtx reg = gen_reg_rtx (word_mode); + emit_insn (gen_rtx_SET (reg, gen_rtx_SIGN_EXTEND (word_mode, compare))); + compare = reg; + } + + emit_insn (gen_rtx_SET (operands[0], + gen_rtx_EQ (SImode, compare, const0_rtx))); DONE; }) @@ -505,13 +581,31 @@ (match_operand:SHORT 2 "register_operand"))] "" { - union loongarch_gen_fn_ptrs generator; - generator.fn_7 = gen_atomic_cas_value_exchange_7_si; - loongarch_expand_atomic_qihi (generator, operands[0], operands[1], - const0_rtx, operands[2], operands[3]); + if (ISA_BASE_IS_LA64V110) + emit_insn (gen_atomic_exchange_short (operands[0], operands[1], operands[2], operands[3])); + else + { + union loongarch_gen_fn_ptrs generator; + generator.fn_7 = gen_atomic_cas_value_exchange_7_si; + loongarch_expand_atomic_qihi (generator, operands[0], operands[1], + const0_rtx, operands[2], operands[3]); + } DONE; }) +(define_insn "atomic_fetch_add_short" + [(set (match_operand:SHORT 0 "register_operand" "=&r") + (match_operand:SHORT 1 "memory_operand" "+ZB")) + (set (match_dup 1) + (unspec_volatile:SHORT + [(plus:SHORT (match_dup 1) + (match_operand:SHORT 2 "reg_or_0_operand" "rJ")) + (match_operand:SI 3 "const_int_operand")] ;; model + UNSPEC_SYNC_OLD_OP))] + "ISA_BASE_IS_LA64V110" + "amadd%A3.\t%0,%z2,%1" + [(set (attr "length") (const_int 4))]) + (define_expand "atomic_fetch_add" [(set (match_operand:SHORT 0 "register_operand" "=&r") (match_operand:SHORT 1 "memory_operand" "+ZB")) @@ -523,10 +617,16 @@ UNSPEC_SYNC_OLD_OP))] "" { - union loongarch_gen_fn_ptrs generator; - generator.fn_7 = gen_atomic_cas_value_add_7_si; - loongarch_expand_atomic_qihi (generator, operands[0], operands[1], - operands[1], operands[2], operands[3]); + if (ISA_BASE_IS_LA64V110) + emit_insn (gen_atomic_fetch_add_short (operands[0], operands[1], + operands[2], operands[3])); + else + { + union loongarch_gen_fn_ptrs generator; + generator.fn_7 = gen_atomic_cas_value_add_7_si; + loongarch_expand_atomic_qihi (generator, operands[0], operands[1], + operands[1], operands[2], operands[3]); + } DONE; }) From 26ab97e0da5d99c23654d90428d26e22ef976309 Mon Sep 17 00:00:00 2001 From: Lulu Cheng Date: Fri, 17 Nov 2023 16:04:45 +0800 Subject: [PATCH 146/169] LoongArch: atomic_load and atomic_store are implemented using dbar grading. Because the la464 memory model design allows the same address load out of order, so in the following test example, the Load of 23 lines may be executed first over the load of 21 lines, resulting in an error. So when memmodel is MEMMODEL_RELAXED, the load instruction will be followed by "dbar 0x700" when implementing _atomic_load. 1 void * 2 gomp_ptrlock_get_slow (gomp_ptrlock_t *ptrlock) 3 { 4 int *intptr; 5 uintptr_t oldval = 1; 6 7 __atomic_compare_exchange_n (ptrlock, &oldval, 2, false, 8 MEMMODEL_RELAXED, MEMMODEL_RELAXED); 9 10 /* futex works on ints, not pointers. 11 But a valid work share pointer will be at least 12 8 byte aligned, so it is safe to assume the low 13 32-bits of the pointer won't contain values 1 or 2. */ 14 __asm volatile ("" : "=r" (intptr) : "0" (ptrlock)); 15 #if __BYTE_ORDER == __BIG_ENDIAN 16 if (sizeof (*ptrlock) > sizeof (int)) 17 intptr += (sizeof (*ptrlock) / sizeof (int)) - 1; 18 #endif 19 do 20 do_wait (intptr, 2); 21 while (__atomic_load_n (intptr, MEMMODEL_RELAXED) == 2); 22 __asm volatile ("" : : : "memory"); 23 return (void *) __atomic_load_n (ptrlock, MEMMODEL_ACQUIRE); 24 } gcc/ChangeLog: * config/loongarch/sync.md (atomic_load): New template. --- gcc/config/loongarch/sync.md | 70 +++++++++++++++++++++++++++++++++--- 1 file changed, 65 insertions(+), 5 deletions(-) diff --git a/gcc/config/loongarch/sync.md b/gcc/config/loongarch/sync.md index 66e316d80f56..67848d72b875 100644 --- a/gcc/config/loongarch/sync.md +++ b/gcc/config/loongarch/sync.md @@ -30,6 +30,7 @@ UNSPEC_SYNC_OLD_OP UNSPEC_SYNC_EXCHANGE UNSPEC_ATOMIC_STORE + UNSPEC_ATOMIC_LOAD UNSPEC_MEMORY_BARRIER ]) @@ -103,16 +104,75 @@ ;; Atomic memory operations. +(define_insn "atomic_load" + [(set (match_operand:QHWD 0 "register_operand" "=r") + (unspec_volatile:QHWD + [(match_operand:QHWD 1 "memory_operand" "+m") + (match_operand:SI 2 "const_int_operand")] ;; model + UNSPEC_ATOMIC_LOAD))] + "" +{ + enum memmodel model = memmodel_base (INTVAL (operands[2])); + + switch (model) + { + case MEMMODEL_SEQ_CST: + return "dbar\t0x11\\n\\t" + "ld.\t%0,%1\\n\\t" + "dbar\t0x14\\n\\t"; + case MEMMODEL_ACQUIRE: + return "ld.\t%0,%1\\n\\t" + "dbar\t0x14\\n\\t"; + case MEMMODEL_RELAXED: + return "ld.\t%0,%1\\n\\t" + "dbar\t0x700\\n\\t"; + + default: + /* The valid memory order variants are __ATOMIC_RELAXED, __ATOMIC_SEQ_CST, + __ATOMIC_CONSUME and __ATOMIC_ACQUIRE. + The expand_builtin_atomic_store function converts all invalid memmodels + to MEMMODEL_SEQ_CST. + + __atomic builtins doc: "Consume is implemented using the + stronger acquire memory order because of a deficiency in C++11's + semantics." See PR 59448 and get_memmodel in builtins.cc. */ + gcc_unreachable (); + } +} + [(set (attr "length") (const_int 12))]) + ;; Implement atomic stores with amoswap. Fall back to fences for atomic loads. (define_insn "atomic_store" - [(set (match_operand:GPR 0 "memory_operand" "+ZB") - (unspec_volatile:GPR - [(match_operand:GPR 1 "reg_or_0_operand" "rJ") + [(set (match_operand:QHWD 0 "memory_operand" "+m") + (unspec_volatile:QHWD + [(match_operand:QHWD 1 "reg_or_0_operand" "rJ") (match_operand:SI 2 "const_int_operand")] ;; model UNSPEC_ATOMIC_STORE))] "" - "amswap%A2.\t$zero,%z1,%0" - [(set (attr "length") (const_int 8))]) +{ + enum memmodel model = memmodel_base (INTVAL (operands[2])); + + switch (model) + { + case MEMMODEL_SEQ_CST: + return "dbar\t0x12\\n\\t" + "st.\t%z1,%0\\n\\t" + "dbar\t0x18\\n\\t"; + case MEMMODEL_RELEASE: + return "dbar\t0x12\\n\\t" + "st.\t%z1,%0\\n\\t"; + case MEMMODEL_RELAXED: + return "st.\t%z1,%0"; + + default: + /* The valid memory order variants are __ATOMIC_RELAXED, __ATOMIC_SEQ_CST, + and __ATOMIC_RELEASE. + The expand_builtin_atomic_store function converts all invalid memmodels + to MEMMODEL_SEQ_CST. */ + gcc_unreachable (); + } +} + [(set (attr "length") (const_int 12))]) (define_insn "atomic_" [(set (match_operand:GPR 0 "memory_operand" "+ZB") From c2553dd3891efc928a85d4852f1b69afed9c6325 Mon Sep 17 00:00:00 2001 From: Francois-Xavier Coudert Date: Fri, 17 Nov 2023 12:46:09 +0100 Subject: [PATCH 147/169] libsanitizer: fix build on darwin Upstream report of the issue at https://github.com/llvm/llvm-project/issues/72639 libsanitizer/ChangeLog: * asan/asan_mac.cpp: Protect Apple blocks behind the MISSING_BLOCKS_SUPPORT macro. --- libsanitizer/asan/asan_mac.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libsanitizer/asan/asan_mac.cpp b/libsanitizer/asan/asan_mac.cpp index 5d5146e0cde0..6252fa20d5e7 100644 --- a/libsanitizer/asan/asan_mac.cpp +++ b/libsanitizer/asan/asan_mac.cpp @@ -139,9 +139,11 @@ typedef void (*dispatch_mach_handler_function_t)(void *context, dispatch_mach_reason reason, dispatch_mach_msg_t message, mach_error_t error); +#if !defined(MISSING_BLOCKS_SUPPORT) typedef void (^dispatch_mach_handler_t)(dispatch_mach_reason reason, dispatch_mach_msg_t message, mach_error_t error); +#endif // A wrapper for the ObjC blocks used to support libdispatch. typedef struct { From f76d47e6bcd2c196bb525eead7e01688e1a732a9 Mon Sep 17 00:00:00 2001 From: Francois-Xavier Coudert Date: Sat, 18 Nov 2023 10:01:14 +0100 Subject: [PATCH 148/169] Testsuite: remove unused variables Missing from earlier commit, which removed the only use of those two variables. gcc/testsuite/ChangeLog: * gfortran.dg/coarray/caf.exp: Remove unused variable. * gfortran.dg/dg.exp: Remove unused variable. --- gcc/testsuite/gfortran.dg/coarray/caf.exp | 1 - gcc/testsuite/gfortran.dg/dg.exp | 1 - 2 files changed, 2 deletions(-) diff --git a/gcc/testsuite/gfortran.dg/coarray/caf.exp b/gcc/testsuite/gfortran.dg/coarray/caf.exp index fab8238a0d5c..c626265e7b2e 100644 --- a/gcc/testsuite/gfortran.dg/coarray/caf.exp +++ b/gcc/testsuite/gfortran.dg/coarray/caf.exp @@ -80,7 +80,6 @@ if [check_effective_target_libatomic_available] { set maybe_atomic_lib "[atomic_link_flags [get_multilibs]]" } } - set t [get_multilibs] } # Main loop. diff --git a/gcc/testsuite/gfortran.dg/dg.exp b/gcc/testsuite/gfortran.dg/dg.exp index 22f2ffb405fe..253c0f5ec6a6 100644 --- a/gcc/testsuite/gfortran.dg/dg.exp +++ b/gcc/testsuite/gfortran.dg/dg.exp @@ -67,7 +67,6 @@ if [check_effective_target_libatomic_available] { } else { set maybe_atomic_lib "" } - set t [get_multilibs] } set all_flags $DEFAULT_FFLAGS From 07fe07935ddb9228b4426dbfdb62d4a7e7337efe Mon Sep 17 00:00:00 2001 From: Juzhe-Zhong Date: Sat, 18 Nov 2023 11:11:49 +0800 Subject: [PATCH 149/169] RISC-V: Refactor RVV iterators[NFC] This patch refactors RVV iteratros for easier maintain. E.g. (define_mode_iterator V [ RVVM8QI RVVM4QI RVVM2QI RVVM1QI RVVMF2QI RVVMF4QI (RVVMF8QI "TARGET_MIN_VLEN > 32") RVVM8HI RVVM4HI RVVM2HI RVVM1HI RVVMF2HI (RVVMF4HI "TARGET_MIN_VLEN > 32") (RVVM8HF "TARGET_VECTOR_ELEN_FP_16") (RVVM4HF "TARGET_VECTOR_ELEN_FP_16") (RVVM2HF "TARGET_VECTOR_ELEN_FP_16") (RVVM1HF "TARGET_VECTOR_ELEN_FP_16") (RVVMF2HF "TARGET_VECTOR_ELEN_FP_16") (RVVMF4HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN > 32") RVVM8SI RVVM4SI RVVM2SI RVVM1SI (RVVMF2SI "TARGET_MIN_VLEN > 32") (RVVM8SF "TARGET_VECTOR_ELEN_FP_32") (RVVM4SF "TARGET_VECTOR_ELEN_FP_32") (RVVM2SF "TARGET_VECTOR_ELEN_FP_32") (RVVM1SF "TARGET_VECTOR_ELEN_FP_32") (RVVMF2SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32") (RVVM8DI "TARGET_VECTOR_ELEN_64") (RVVM4DI "TARGET_VECTOR_ELEN_64") (RVVM2DI "TARGET_VECTOR_ELEN_64") (RVVM1DI "TARGET_VECTOR_ELEN_64") (RVVM8DF "TARGET_VECTOR_ELEN_FP_64") (RVVM4DF "TARGET_VECTOR_ELEN_FP_64") (RVVM2DF "TARGET_VECTOR_ELEN_FP_64") (RVVM1DF "TARGET_VECTOR_ELEN_FP_64") ]) change it into: (define_mode_iterator V [VI VF_ZVFHMIN]) gcc/ChangeLog: * config/riscv/vector-iterators.md: Refactor iterators. --- gcc/config/riscv/vector-iterators.md | 601 +++++---------------------- 1 file changed, 94 insertions(+), 507 deletions(-) diff --git a/gcc/config/riscv/vector-iterators.md b/gcc/config/riscv/vector-iterators.md index f04c7fe5491f..469875ce67c8 100644 --- a/gcc/config/riscv/vector-iterators.md +++ b/gcc/config/riscv/vector-iterators.md @@ -108,48 +108,49 @@ UNSPECV_FRM_RESTORE_EXIT ]) -(define_mode_iterator V [ +(define_mode_iterator VI [ RVVM8QI RVVM4QI RVVM2QI RVVM1QI RVVMF2QI RVVMF4QI (RVVMF8QI "TARGET_MIN_VLEN > 32") RVVM8HI RVVM4HI RVVM2HI RVVM1HI RVVMF2HI (RVVMF4HI "TARGET_MIN_VLEN > 32") - (RVVM8HF "TARGET_VECTOR_ELEN_FP_16") (RVVM4HF "TARGET_VECTOR_ELEN_FP_16") (RVVM2HF "TARGET_VECTOR_ELEN_FP_16") - (RVVM1HF "TARGET_VECTOR_ELEN_FP_16") (RVVMF2HF "TARGET_VECTOR_ELEN_FP_16") - (RVVMF4HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN > 32") - RVVM8SI RVVM4SI RVVM2SI RVVM1SI (RVVMF2SI "TARGET_MIN_VLEN > 32") - (RVVM8SF "TARGET_VECTOR_ELEN_FP_32") (RVVM4SF "TARGET_VECTOR_ELEN_FP_32") (RVVM2SF "TARGET_VECTOR_ELEN_FP_32") - (RVVM1SF "TARGET_VECTOR_ELEN_FP_32") (RVVMF2SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32") - (RVVM8DI "TARGET_VECTOR_ELEN_64") (RVVM4DI "TARGET_VECTOR_ELEN_64") (RVVM2DI "TARGET_VECTOR_ELEN_64") (RVVM1DI "TARGET_VECTOR_ELEN_64") +]) + +;; This iterator is the same as above but with TARGET_VECTOR_ELEN_FP_16 +;; changed to TARGET_ZVFH. TARGET_VECTOR_ELEN_FP_16 is also true for +;; TARGET_ZVFHMIN while we actually want to disable all instructions apart +;; from load, store and convert for it. +;; It is not enough to set the "enabled" attribute to false +;; since this will only disable insn alternatives in reload but still +;; allow the instruction and mode to be matched during combine et al. +(define_mode_iterator VF [ + (RVVM8HF "TARGET_ZVFH") (RVVM4HF "TARGET_ZVFH") (RVVM2HF "TARGET_ZVFH") + (RVVM1HF "TARGET_ZVFH") (RVVMF2HF "TARGET_ZVFH") + (RVVMF4HF "TARGET_ZVFH && TARGET_MIN_VLEN > 32") + + (RVVM8SF "TARGET_VECTOR_ELEN_FP_32") (RVVM4SF "TARGET_VECTOR_ELEN_FP_32") (RVVM2SF "TARGET_VECTOR_ELEN_FP_32") + (RVVM1SF "TARGET_VECTOR_ELEN_FP_32") (RVVMF2SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32") (RVVM8DF "TARGET_VECTOR_ELEN_FP_64") (RVVM4DF "TARGET_VECTOR_ELEN_FP_64") (RVVM2DF "TARGET_VECTOR_ELEN_FP_64") (RVVM1DF "TARGET_VECTOR_ELEN_FP_64") ]) -(define_mode_iterator V_VLS [ - RVVM8QI RVVM4QI RVVM2QI RVVM1QI RVVMF2QI RVVMF4QI (RVVMF8QI "TARGET_MIN_VLEN > 32") - - RVVM8HI RVVM4HI RVVM2HI RVVM1HI RVVMF2HI (RVVMF4HI "TARGET_MIN_VLEN > 32") - +(define_mode_iterator VF_ZVFHMIN [ (RVVM8HF "TARGET_VECTOR_ELEN_FP_16") (RVVM4HF "TARGET_VECTOR_ELEN_FP_16") (RVVM2HF "TARGET_VECTOR_ELEN_FP_16") (RVVM1HF "TARGET_VECTOR_ELEN_FP_16") (RVVMF2HF "TARGET_VECTOR_ELEN_FP_16") (RVVMF4HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN > 32") - RVVM8SI RVVM4SI RVVM2SI RVVM1SI (RVVMF2SI "TARGET_MIN_VLEN > 32") - (RVVM8SF "TARGET_VECTOR_ELEN_FP_32") (RVVM4SF "TARGET_VECTOR_ELEN_FP_32") (RVVM2SF "TARGET_VECTOR_ELEN_FP_32") (RVVM1SF "TARGET_VECTOR_ELEN_FP_32") (RVVMF2SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32") - (RVVM8DI "TARGET_VECTOR_ELEN_64") (RVVM4DI "TARGET_VECTOR_ELEN_64") - (RVVM2DI "TARGET_VECTOR_ELEN_64") (RVVM1DI "TARGET_VECTOR_ELEN_64") - (RVVM8DF "TARGET_VECTOR_ELEN_FP_64") (RVVM4DF "TARGET_VECTOR_ELEN_FP_64") (RVVM2DF "TARGET_VECTOR_ELEN_FP_64") (RVVM1DF "TARGET_VECTOR_ELEN_FP_64") +]) - ;; VLS modes. +(define_mode_iterator VLSI [ (V1QI "riscv_vector::vls_mode_valid_p (V1QImode)") (V2QI "riscv_vector::vls_mode_valid_p (V2QImode)") (V4QI "riscv_vector::vls_mode_valid_p (V4QImode)") @@ -195,7 +196,45 @@ (V64DI "riscv_vector::vls_mode_valid_p (V64DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 512") (V128DI "riscv_vector::vls_mode_valid_p (V128DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 1024") (V256DI "riscv_vector::vls_mode_valid_p (V256DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 2048") - (V512DI "riscv_vector::vls_mode_valid_p (V512DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 4096") + (V512DI "riscv_vector::vls_mode_valid_p (V512DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 4096")]) + +(define_mode_iterator VLSF [ + (V1HF "riscv_vector::vls_mode_valid_p (V1HFmode) && TARGET_ZVFH") + (V2HF "riscv_vector::vls_mode_valid_p (V2HFmode) && TARGET_ZVFH") + (V4HF "riscv_vector::vls_mode_valid_p (V4HFmode) && TARGET_ZVFH") + (V8HF "riscv_vector::vls_mode_valid_p (V8HFmode) && TARGET_ZVFH") + (V16HF "riscv_vector::vls_mode_valid_p (V16HFmode) && TARGET_ZVFH") + (V32HF "riscv_vector::vls_mode_valid_p (V32HFmode) && TARGET_ZVFH && TARGET_MIN_VLEN >= 64") + (V64HF "riscv_vector::vls_mode_valid_p (V64HFmode) && TARGET_ZVFH && TARGET_MIN_VLEN >= 128") + (V128HF "riscv_vector::vls_mode_valid_p (V128HFmode) && TARGET_ZVFH && TARGET_MIN_VLEN >= 256") + (V256HF "riscv_vector::vls_mode_valid_p (V256HFmode) && TARGET_ZVFH && TARGET_MIN_VLEN >= 512") + (V512HF "riscv_vector::vls_mode_valid_p (V512HFmode) && TARGET_ZVFH && TARGET_MIN_VLEN >= 1024") + (V1024HF "riscv_vector::vls_mode_valid_p (V1024HFmode) && TARGET_ZVFH && TARGET_MIN_VLEN >= 2048") + (V2048HF "riscv_vector::vls_mode_valid_p (V2048HFmode) && TARGET_ZVFH && TARGET_MIN_VLEN >= 4096") + (V1SF "riscv_vector::vls_mode_valid_p (V1SFmode) && TARGET_VECTOR_ELEN_FP_32") + (V2SF "riscv_vector::vls_mode_valid_p (V2SFmode) && TARGET_VECTOR_ELEN_FP_32") + (V4SF "riscv_vector::vls_mode_valid_p (V4SFmode) && TARGET_VECTOR_ELEN_FP_32") + (V8SF "riscv_vector::vls_mode_valid_p (V8SFmode) && TARGET_VECTOR_ELEN_FP_32") + (V16SF "riscv_vector::vls_mode_valid_p (V16SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 64") + (V32SF "riscv_vector::vls_mode_valid_p (V32SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128") + (V64SF "riscv_vector::vls_mode_valid_p (V64SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 256") + (V128SF "riscv_vector::vls_mode_valid_p (V128SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 512") + (V256SF "riscv_vector::vls_mode_valid_p (V256SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 1024") + (V512SF "riscv_vector::vls_mode_valid_p (V512SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 2048") + (V1024SF "riscv_vector::vls_mode_valid_p (V1024SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 4096") + (V1DF "riscv_vector::vls_mode_valid_p (V1DFmode) && TARGET_VECTOR_ELEN_FP_64") + (V2DF "riscv_vector::vls_mode_valid_p (V2DFmode) && TARGET_VECTOR_ELEN_FP_64") + (V4DF "riscv_vector::vls_mode_valid_p (V4DFmode) && TARGET_VECTOR_ELEN_FP_64") + (V8DF "riscv_vector::vls_mode_valid_p (V8DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 64") + (V16DF "riscv_vector::vls_mode_valid_p (V16DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128") + (V32DF "riscv_vector::vls_mode_valid_p (V32DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 256") + (V64DF "riscv_vector::vls_mode_valid_p (V64DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 512") + (V128DF "riscv_vector::vls_mode_valid_p (V128DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 1024") + (V256DF "riscv_vector::vls_mode_valid_p (V256DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 2048") + (V512DF "riscv_vector::vls_mode_valid_p (V512DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 4096") +]) + +(define_mode_iterator VLSF_ZVFHMIN [ (V1HF "riscv_vector::vls_mode_valid_p (V1HFmode) && TARGET_VECTOR_ELEN_FP_16") (V2HF "riscv_vector::vls_mode_valid_p (V2HFmode) && TARGET_VECTOR_ELEN_FP_16") (V4HF "riscv_vector::vls_mode_valid_p (V4HFmode) && TARGET_VECTOR_ELEN_FP_16") @@ -399,196 +438,6 @@ (V512DF "riscv_vector::vls_mode_valid_p (V512DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 4096") ]) -(define_mode_iterator VI [ - RVVM8QI RVVM4QI RVVM2QI RVVM1QI RVVMF2QI RVVMF4QI (RVVMF8QI "TARGET_MIN_VLEN > 32") - - RVVM8HI RVVM4HI RVVM2HI RVVM1HI RVVMF2HI (RVVMF4HI "TARGET_MIN_VLEN > 32") - - RVVM8SI RVVM4SI RVVM2SI RVVM1SI (RVVMF2SI "TARGET_MIN_VLEN > 32") - - (RVVM8DI "TARGET_VECTOR_ELEN_64") (RVVM4DI "TARGET_VECTOR_ELEN_64") - (RVVM2DI "TARGET_VECTOR_ELEN_64") (RVVM1DI "TARGET_VECTOR_ELEN_64") -]) - -(define_mode_iterator V_VLSI [ - RVVM8QI RVVM4QI RVVM2QI RVVM1QI RVVMF2QI RVVMF4QI (RVVMF8QI "TARGET_MIN_VLEN > 32") - - RVVM8HI RVVM4HI RVVM2HI RVVM1HI RVVMF2HI (RVVMF4HI "TARGET_MIN_VLEN > 32") - - RVVM8SI RVVM4SI RVVM2SI RVVM1SI (RVVMF2SI "TARGET_MIN_VLEN > 32") - - (RVVM8DI "TARGET_VECTOR_ELEN_64") (RVVM4DI "TARGET_VECTOR_ELEN_64") - (RVVM2DI "TARGET_VECTOR_ELEN_64") (RVVM1DI "TARGET_VECTOR_ELEN_64") - - (V1QI "riscv_vector::vls_mode_valid_p (V1QImode)") - (V2QI "riscv_vector::vls_mode_valid_p (V2QImode)") - (V4QI "riscv_vector::vls_mode_valid_p (V4QImode)") - (V8QI "riscv_vector::vls_mode_valid_p (V8QImode)") - (V16QI "riscv_vector::vls_mode_valid_p (V16QImode)") - (V32QI "riscv_vector::vls_mode_valid_p (V32QImode)") - (V64QI "riscv_vector::vls_mode_valid_p (V64QImode) && TARGET_MIN_VLEN >= 64") - (V128QI "riscv_vector::vls_mode_valid_p (V128QImode) && TARGET_MIN_VLEN >= 128") - (V256QI "riscv_vector::vls_mode_valid_p (V256QImode) && TARGET_MIN_VLEN >= 256") - (V512QI "riscv_vector::vls_mode_valid_p (V512QImode) && TARGET_MIN_VLEN >= 512") - (V1024QI "riscv_vector::vls_mode_valid_p (V1024QImode) && TARGET_MIN_VLEN >= 1024") - (V2048QI "riscv_vector::vls_mode_valid_p (V2048QImode) && TARGET_MIN_VLEN >= 2048") - (V4096QI "riscv_vector::vls_mode_valid_p (V4096QImode) && TARGET_MIN_VLEN >= 4096") - (V1HI "riscv_vector::vls_mode_valid_p (V1HImode)") - (V2HI "riscv_vector::vls_mode_valid_p (V2HImode)") - (V4HI "riscv_vector::vls_mode_valid_p (V4HImode)") - (V8HI "riscv_vector::vls_mode_valid_p (V8HImode)") - (V16HI "riscv_vector::vls_mode_valid_p (V16HImode)") - (V32HI "riscv_vector::vls_mode_valid_p (V32HImode) && TARGET_MIN_VLEN >= 64") - (V64HI "riscv_vector::vls_mode_valid_p (V64HImode) && TARGET_MIN_VLEN >= 128") - (V128HI "riscv_vector::vls_mode_valid_p (V128HImode) && TARGET_MIN_VLEN >= 256") - (V256HI "riscv_vector::vls_mode_valid_p (V256HImode) && TARGET_MIN_VLEN >= 512") - (V512HI "riscv_vector::vls_mode_valid_p (V512HImode) && TARGET_MIN_VLEN >= 1024") - (V1024HI "riscv_vector::vls_mode_valid_p (V1024HImode) && TARGET_MIN_VLEN >= 2048") - (V2048HI "riscv_vector::vls_mode_valid_p (V2048HImode) && TARGET_MIN_VLEN >= 4096") - (V1SI "riscv_vector::vls_mode_valid_p (V1SImode)") - (V2SI "riscv_vector::vls_mode_valid_p (V2SImode)") - (V4SI "riscv_vector::vls_mode_valid_p (V4SImode)") - (V8SI "riscv_vector::vls_mode_valid_p (V8SImode)") - (V16SI "riscv_vector::vls_mode_valid_p (V16SImode) && TARGET_MIN_VLEN >= 64") - (V32SI "riscv_vector::vls_mode_valid_p (V32SImode) && TARGET_MIN_VLEN >= 128") - (V64SI "riscv_vector::vls_mode_valid_p (V64SImode) && TARGET_MIN_VLEN >= 256") - (V128SI "riscv_vector::vls_mode_valid_p (V128SImode) && TARGET_MIN_VLEN >= 512") - (V256SI "riscv_vector::vls_mode_valid_p (V256SImode) && TARGET_MIN_VLEN >= 1024") - (V512SI "riscv_vector::vls_mode_valid_p (V512SImode) && TARGET_MIN_VLEN >= 2048") - (V1024SI "riscv_vector::vls_mode_valid_p (V1024SImode) && TARGET_MIN_VLEN >= 4096") - (V1DI "riscv_vector::vls_mode_valid_p (V1DImode) && TARGET_VECTOR_ELEN_64") - (V2DI "riscv_vector::vls_mode_valid_p (V2DImode) && TARGET_VECTOR_ELEN_64") - (V4DI "riscv_vector::vls_mode_valid_p (V4DImode) && TARGET_VECTOR_ELEN_64") - (V8DI "riscv_vector::vls_mode_valid_p (V8DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 64") - (V16DI "riscv_vector::vls_mode_valid_p (V16DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128") - (V32DI "riscv_vector::vls_mode_valid_p (V32DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 256") - (V64DI "riscv_vector::vls_mode_valid_p (V64DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 512") - (V128DI "riscv_vector::vls_mode_valid_p (V128DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 1024") - (V256DI "riscv_vector::vls_mode_valid_p (V256DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 2048") - (V512DI "riscv_vector::vls_mode_valid_p (V512DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 4096") -]) - -(define_mode_iterator V_VLSF [ - (RVVM8HF "TARGET_ZVFH") (RVVM4HF "TARGET_ZVFH") (RVVM2HF "TARGET_ZVFH") - (RVVM1HF "TARGET_ZVFH") (RVVMF2HF "TARGET_ZVFH") - (RVVMF4HF "TARGET_ZVFH && TARGET_MIN_VLEN > 32") - (RVVM8SF "TARGET_VECTOR_ELEN_FP_32") (RVVM4SF "TARGET_VECTOR_ELEN_FP_32") (RVVM2SF "TARGET_VECTOR_ELEN_FP_32") - (RVVM1SF "TARGET_VECTOR_ELEN_FP_32") (RVVMF2SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32") - (RVVM8DF "TARGET_VECTOR_ELEN_FP_64") (RVVM4DF "TARGET_VECTOR_ELEN_FP_64") - (RVVM2DF "TARGET_VECTOR_ELEN_FP_64") (RVVM1DF "TARGET_VECTOR_ELEN_FP_64") - - (V1HF "riscv_vector::vls_mode_valid_p (V1HFmode) && TARGET_ZVFH") - (V2HF "riscv_vector::vls_mode_valid_p (V2HFmode) && TARGET_ZVFH") - (V4HF "riscv_vector::vls_mode_valid_p (V4HFmode) && TARGET_ZVFH") - (V8HF "riscv_vector::vls_mode_valid_p (V8HFmode) && TARGET_ZVFH") - (V16HF "riscv_vector::vls_mode_valid_p (V16HFmode) && TARGET_ZVFH") - (V32HF "riscv_vector::vls_mode_valid_p (V32HFmode) && TARGET_ZVFH && TARGET_MIN_VLEN >= 64") - (V64HF "riscv_vector::vls_mode_valid_p (V64HFmode) && TARGET_ZVFH && TARGET_MIN_VLEN >= 128") - (V128HF "riscv_vector::vls_mode_valid_p (V128HFmode) && TARGET_ZVFH && TARGET_MIN_VLEN >= 256") - (V256HF "riscv_vector::vls_mode_valid_p (V256HFmode) && TARGET_ZVFH && TARGET_MIN_VLEN >= 512") - (V512HF "riscv_vector::vls_mode_valid_p (V512HFmode) && TARGET_ZVFH && TARGET_MIN_VLEN >= 1024") - (V1024HF "riscv_vector::vls_mode_valid_p (V1024HFmode) && TARGET_ZVFH && TARGET_MIN_VLEN >= 2048") - (V2048HF "riscv_vector::vls_mode_valid_p (V2048HFmode) && TARGET_ZVFH && TARGET_MIN_VLEN >= 4096") - (V1SF "riscv_vector::vls_mode_valid_p (V1SFmode) && TARGET_VECTOR_ELEN_FP_32") - (V2SF "riscv_vector::vls_mode_valid_p (V2SFmode) && TARGET_VECTOR_ELEN_FP_32") - (V4SF "riscv_vector::vls_mode_valid_p (V4SFmode) && TARGET_VECTOR_ELEN_FP_32") - (V8SF "riscv_vector::vls_mode_valid_p (V8SFmode) && TARGET_VECTOR_ELEN_FP_32") - (V16SF "riscv_vector::vls_mode_valid_p (V16SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 64") - (V32SF "riscv_vector::vls_mode_valid_p (V32SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128") - (V64SF "riscv_vector::vls_mode_valid_p (V64SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 256") - (V128SF "riscv_vector::vls_mode_valid_p (V128SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 512") - (V256SF "riscv_vector::vls_mode_valid_p (V256SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 1024") - (V512SF "riscv_vector::vls_mode_valid_p (V512SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 2048") - (V1024SF "riscv_vector::vls_mode_valid_p (V1024SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 4096") - (V1DF "riscv_vector::vls_mode_valid_p (V1DFmode) && TARGET_VECTOR_ELEN_FP_64") - (V2DF "riscv_vector::vls_mode_valid_p (V2DFmode) && TARGET_VECTOR_ELEN_FP_64") - (V4DF "riscv_vector::vls_mode_valid_p (V4DFmode) && TARGET_VECTOR_ELEN_FP_64") - (V8DF "riscv_vector::vls_mode_valid_p (V8DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 64") - (V16DF "riscv_vector::vls_mode_valid_p (V16DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128") - (V32DF "riscv_vector::vls_mode_valid_p (V32DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 256") - (V64DF "riscv_vector::vls_mode_valid_p (V64DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 512") - (V128DF "riscv_vector::vls_mode_valid_p (V128DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 1024") - (V256DF "riscv_vector::vls_mode_valid_p (V256DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 2048") - (V512DF "riscv_vector::vls_mode_valid_p (V512DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 4096") -]) - -(define_mode_iterator VF_ZVFHMIN [ - (RVVM8HF "TARGET_VECTOR_ELEN_FP_16") (RVVM4HF "TARGET_VECTOR_ELEN_FP_16") (RVVM2HF "TARGET_VECTOR_ELEN_FP_16") - (RVVM1HF "TARGET_VECTOR_ELEN_FP_16") (RVVMF2HF "TARGET_VECTOR_ELEN_FP_16") - (RVVMF4HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN > 32") - - (RVVM8SF "TARGET_VECTOR_ELEN_FP_32") (RVVM4SF "TARGET_VECTOR_ELEN_FP_32") (RVVM2SF "TARGET_VECTOR_ELEN_FP_32") - (RVVM1SF "TARGET_VECTOR_ELEN_FP_32") (RVVMF2SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32") - - (RVVM8DF "TARGET_VECTOR_ELEN_FP_64") (RVVM4DF "TARGET_VECTOR_ELEN_FP_64") - (RVVM2DF "TARGET_VECTOR_ELEN_FP_64") (RVVM1DF "TARGET_VECTOR_ELEN_FP_64") -]) - -(define_mode_iterator V_VLSF_ZVFHMIN [ - (RVVM8HF "TARGET_VECTOR_ELEN_FP_16") (RVVM4HF "TARGET_VECTOR_ELEN_FP_16") (RVVM2HF "TARGET_VECTOR_ELEN_FP_16") - (RVVM1HF "TARGET_VECTOR_ELEN_FP_16") (RVVMF2HF "TARGET_VECTOR_ELEN_FP_16") - (RVVMF4HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN > 32") - - (RVVM8SF "TARGET_VECTOR_ELEN_FP_32") (RVVM4SF "TARGET_VECTOR_ELEN_FP_32") (RVVM2SF "TARGET_VECTOR_ELEN_FP_32") - (RVVM1SF "TARGET_VECTOR_ELEN_FP_32") (RVVMF2SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32") - - (RVVM8DF "TARGET_VECTOR_ELEN_FP_64") (RVVM4DF "TARGET_VECTOR_ELEN_FP_64") - (RVVM2DF "TARGET_VECTOR_ELEN_FP_64") (RVVM1DF "TARGET_VECTOR_ELEN_FP_64") - - (V1HF "riscv_vector::vls_mode_valid_p (V1HFmode) && TARGET_VECTOR_ELEN_FP_16") - (V2HF "riscv_vector::vls_mode_valid_p (V2HFmode) && TARGET_VECTOR_ELEN_FP_16") - (V4HF "riscv_vector::vls_mode_valid_p (V4HFmode) && TARGET_VECTOR_ELEN_FP_16") - (V8HF "riscv_vector::vls_mode_valid_p (V8HFmode) && TARGET_VECTOR_ELEN_FP_16") - (V16HF "riscv_vector::vls_mode_valid_p (V16HFmode) && TARGET_VECTOR_ELEN_FP_16") - (V32HF "riscv_vector::vls_mode_valid_p (V32HFmode) && TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN >= 64") - (V64HF "riscv_vector::vls_mode_valid_p (V64HFmode) && TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN >= 128") - (V128HF "riscv_vector::vls_mode_valid_p (V128HFmode) && TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN >= 256") - (V256HF "riscv_vector::vls_mode_valid_p (V256HFmode) && TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN >= 512") - (V512HF "riscv_vector::vls_mode_valid_p (V512HFmode) && TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN >= 1024") - (V1024HF "riscv_vector::vls_mode_valid_p (V1024HFmode) && TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN >= 2048") - (V2048HF "riscv_vector::vls_mode_valid_p (V2048HFmode) && TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN >= 4096") - (V1SF "riscv_vector::vls_mode_valid_p (V1SFmode) && TARGET_VECTOR_ELEN_FP_32") - (V2SF "riscv_vector::vls_mode_valid_p (V2SFmode) && TARGET_VECTOR_ELEN_FP_32") - (V4SF "riscv_vector::vls_mode_valid_p (V4SFmode) && TARGET_VECTOR_ELEN_FP_32") - (V8SF "riscv_vector::vls_mode_valid_p (V8SFmode) && TARGET_VECTOR_ELEN_FP_32") - (V16SF "riscv_vector::vls_mode_valid_p (V16SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 64") - (V32SF "riscv_vector::vls_mode_valid_p (V32SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128") - (V64SF "riscv_vector::vls_mode_valid_p (V64SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 256") - (V128SF "riscv_vector::vls_mode_valid_p (V128SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 512") - (V256SF "riscv_vector::vls_mode_valid_p (V256SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 1024") - (V512SF "riscv_vector::vls_mode_valid_p (V512SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 2048") - (V1024SF "riscv_vector::vls_mode_valid_p (V1024SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 4096") - (V1DF "riscv_vector::vls_mode_valid_p (V1DFmode) && TARGET_VECTOR_ELEN_FP_64") - (V2DF "riscv_vector::vls_mode_valid_p (V2DFmode) && TARGET_VECTOR_ELEN_FP_64") - (V4DF "riscv_vector::vls_mode_valid_p (V4DFmode) && TARGET_VECTOR_ELEN_FP_64") - (V8DF "riscv_vector::vls_mode_valid_p (V8DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 64") - (V16DF "riscv_vector::vls_mode_valid_p (V16DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128") - (V32DF "riscv_vector::vls_mode_valid_p (V32DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 256") - (V64DF "riscv_vector::vls_mode_valid_p (V64DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 512") - (V128DF "riscv_vector::vls_mode_valid_p (V128DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 1024") - (V256DF "riscv_vector::vls_mode_valid_p (V256DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 2048") - (V512DF "riscv_vector::vls_mode_valid_p (V512DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 4096") -]) - -;; This iterator is the same as above but with TARGET_VECTOR_ELEN_FP_16 -;; changed to TARGET_ZVFH. TARGET_VECTOR_ELEN_FP_16 is also true for -;; TARGET_ZVFHMIN while we actually want to disable all instructions apart -;; from load, store and convert for it. -;; It is not enough to set the "enabled" attribute to false -;; since this will only disable insn alternatives in reload but still -;; allow the instruction and mode to be matched during combine et al. -(define_mode_iterator VF [ - (RVVM8HF "TARGET_ZVFH") (RVVM4HF "TARGET_ZVFH") (RVVM2HF "TARGET_ZVFH") - (RVVM1HF "TARGET_ZVFH") (RVVMF2HF "TARGET_ZVFH") - (RVVMF4HF "TARGET_ZVFH && TARGET_MIN_VLEN > 32") - - (RVVM8SF "TARGET_VECTOR_ELEN_FP_32") (RVVM4SF "TARGET_VECTOR_ELEN_FP_32") (RVVM2SF "TARGET_VECTOR_ELEN_FP_32") - (RVVM1SF "TARGET_VECTOR_ELEN_FP_32") (RVVMF2SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32") - - (RVVM8DF "TARGET_VECTOR_ELEN_FP_64") (RVVM4DF "TARGET_VECTOR_ELEN_FP_64") - (RVVM2DF "TARGET_VECTOR_ELEN_FP_64") (RVVM1DF "TARGET_VECTOR_ELEN_FP_64") -]) - (define_mode_iterator VFULLI [ RVVM8QI RVVM4QI RVVM2QI RVVM1QI RVVMF2QI RVVMF4QI (RVVMF8QI "TARGET_MIN_VLEN > 32") @@ -1011,27 +860,6 @@ (RVVMF2SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32") ]) -(define_mode_iterator VB [ - (RVVMF64BI "TARGET_MIN_VLEN > 32") RVVMF32BI RVVMF16BI RVVMF8BI RVVMF4BI RVVMF2BI RVVM1BI -]) - -(define_mode_iterator VB_VLS [ - (RVVMF64BI "TARGET_MIN_VLEN > 32") RVVMF32BI RVVMF16BI RVVMF8BI RVVMF4BI RVVMF2BI RVVM1BI - (V1BI "riscv_vector::vls_mode_valid_p (V1BImode)") - (V2BI "riscv_vector::vls_mode_valid_p (V2BImode)") - (V4BI "riscv_vector::vls_mode_valid_p (V4BImode)") - (V8BI "riscv_vector::vls_mode_valid_p (V8BImode)") - (V16BI "riscv_vector::vls_mode_valid_p (V16BImode)") - (V32BI "riscv_vector::vls_mode_valid_p (V32BImode)") - (V64BI "riscv_vector::vls_mode_valid_p (V64BImode) && TARGET_MIN_VLEN >= 64") - (V128BI "riscv_vector::vls_mode_valid_p (V128BImode) && TARGET_MIN_VLEN >= 128") - (V256BI "riscv_vector::vls_mode_valid_p (V256BImode) && TARGET_MIN_VLEN >= 256") - (V512BI "riscv_vector::vls_mode_valid_p (V512BImode) && TARGET_MIN_VLEN >= 512") - (V1024BI "riscv_vector::vls_mode_valid_p (V1024BImode) && TARGET_MIN_VLEN >= 1024") - (V2048BI "riscv_vector::vls_mode_valid_p (V2048BImode) && TARGET_MIN_VLEN >= 2048") - (V4096BI "riscv_vector::vls_mode_valid_p (V4096BImode) && TARGET_MIN_VLEN >= 4096") -]) - (define_mode_iterator VWEXTI [ RVVM8HI RVVM4HI RVVM2HI RVVM1HI RVVMF2HI (RVVMF4HI "TARGET_MIN_VLEN > 32") @@ -1253,101 +1081,6 @@ (V512DI "riscv_vector::vls_mode_valid_p (V512DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 4096") ]) -(define_mode_iterator VT [ - RVVM1x8QI RVVMF2x8QI RVVMF4x8QI (RVVMF8x8QI "TARGET_MIN_VLEN > 32") - RVVM1x7QI RVVMF2x7QI RVVMF4x7QI (RVVMF8x7QI "TARGET_MIN_VLEN > 32") - RVVM1x6QI RVVMF2x6QI RVVMF4x6QI (RVVMF8x6QI "TARGET_MIN_VLEN > 32") - RVVM1x5QI RVVMF2x5QI RVVMF4x5QI (RVVMF8x5QI "TARGET_MIN_VLEN > 32") - RVVM2x4QI RVVM1x4QI RVVMF2x4QI RVVMF4x4QI (RVVMF8x4QI "TARGET_MIN_VLEN > 32") - RVVM2x3QI RVVM1x3QI RVVMF2x3QI RVVMF4x3QI (RVVMF8x3QI "TARGET_MIN_VLEN > 32") - RVVM4x2QI RVVM2x2QI RVVM1x2QI RVVMF2x2QI RVVMF4x2QI (RVVMF8x2QI "TARGET_MIN_VLEN > 32") - - RVVM1x8HI RVVMF2x8HI (RVVMF4x8HI "TARGET_MIN_VLEN > 32") - RVVM1x7HI RVVMF2x7HI (RVVMF4x7HI "TARGET_MIN_VLEN > 32") - RVVM1x6HI RVVMF2x6HI (RVVMF4x6HI "TARGET_MIN_VLEN > 32") - RVVM1x5HI RVVMF2x5HI (RVVMF4x5HI "TARGET_MIN_VLEN > 32") - RVVM2x4HI RVVM1x4HI RVVMF2x4HI (RVVMF4x4HI "TARGET_MIN_VLEN > 32") - RVVM2x3HI RVVM1x3HI RVVMF2x3HI (RVVMF4x3HI "TARGET_MIN_VLEN > 32") - RVVM4x2HI RVVM2x2HI RVVM1x2HI RVVMF2x2HI (RVVMF4x2HI "TARGET_MIN_VLEN > 32") - - (RVVM1x8HF "TARGET_VECTOR_ELEN_FP_16") - (RVVMF2x8HF "TARGET_VECTOR_ELEN_FP_16") - (RVVMF4x8HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN > 32") - (RVVM1x7HF "TARGET_VECTOR_ELEN_FP_16") - (RVVMF2x7HF "TARGET_VECTOR_ELEN_FP_16") - (RVVMF4x7HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN > 32") - (RVVM1x6HF "TARGET_VECTOR_ELEN_FP_16") - (RVVMF2x6HF "TARGET_VECTOR_ELEN_FP_16") - (RVVMF4x6HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN > 32") - (RVVM1x5HF "TARGET_VECTOR_ELEN_FP_16") - (RVVMF2x5HF "TARGET_VECTOR_ELEN_FP_16") - (RVVMF4x5HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN > 32") - (RVVM2x4HF "TARGET_VECTOR_ELEN_FP_16") - (RVVM1x4HF "TARGET_VECTOR_ELEN_FP_16") - (RVVMF2x4HF "TARGET_VECTOR_ELEN_FP_16") - (RVVMF4x4HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN > 32") - (RVVM2x3HF "TARGET_VECTOR_ELEN_FP_16") - (RVVM1x3HF "TARGET_VECTOR_ELEN_FP_16") - (RVVMF2x3HF "TARGET_VECTOR_ELEN_FP_16") - (RVVMF4x3HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN > 32") - (RVVM4x2HF "TARGET_VECTOR_ELEN_FP_16") - (RVVM2x2HF "TARGET_VECTOR_ELEN_FP_16") - (RVVM1x2HF "TARGET_VECTOR_ELEN_FP_16") - (RVVMF2x2HF "TARGET_VECTOR_ELEN_FP_16") - (RVVMF4x2HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN > 32") - - RVVM1x8SI (RVVMF2x8SI "TARGET_MIN_VLEN > 32") - RVVM1x7SI (RVVMF2x7SI "TARGET_MIN_VLEN > 32") - RVVM1x6SI (RVVMF2x6SI "TARGET_MIN_VLEN > 32") - RVVM1x5SI (RVVMF2x5SI "TARGET_MIN_VLEN > 32") - RVVM2x4SI RVVM1x4SI (RVVMF2x4SI "TARGET_MIN_VLEN > 32") - RVVM2x3SI RVVM1x3SI (RVVMF2x3SI "TARGET_MIN_VLEN > 32") - RVVM4x2SI RVVM2x2SI RVVM1x2SI (RVVMF2x2SI "TARGET_MIN_VLEN > 32") - - (RVVM1x8SF "TARGET_VECTOR_ELEN_FP_32") - (RVVMF2x8SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32") - (RVVM1x7SF "TARGET_VECTOR_ELEN_FP_32") - (RVVMF2x7SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32") - (RVVM1x6SF "TARGET_VECTOR_ELEN_FP_32") - (RVVMF2x6SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32") - (RVVM1x5SF "TARGET_VECTOR_ELEN_FP_32") - (RVVMF2x5SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32") - (RVVM2x4SF "TARGET_VECTOR_ELEN_FP_32") - (RVVM1x4SF "TARGET_VECTOR_ELEN_FP_32") - (RVVMF2x4SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32") - (RVVM2x3SF "TARGET_VECTOR_ELEN_FP_32") - (RVVM1x3SF "TARGET_VECTOR_ELEN_FP_32") - (RVVMF2x3SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32") - (RVVM4x2SF "TARGET_VECTOR_ELEN_FP_32") - (RVVM2x2SF "TARGET_VECTOR_ELEN_FP_32") - (RVVM1x2SF "TARGET_VECTOR_ELEN_FP_32") - (RVVMF2x2SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32") - - (RVVM1x8DI "TARGET_VECTOR_ELEN_64") - (RVVM1x7DI "TARGET_VECTOR_ELEN_64") - (RVVM1x6DI "TARGET_VECTOR_ELEN_64") - (RVVM1x5DI "TARGET_VECTOR_ELEN_64") - (RVVM2x4DI "TARGET_VECTOR_ELEN_64") - (RVVM1x4DI "TARGET_VECTOR_ELEN_64") - (RVVM2x3DI "TARGET_VECTOR_ELEN_64") - (RVVM1x3DI "TARGET_VECTOR_ELEN_64") - (RVVM4x2DI "TARGET_VECTOR_ELEN_64") - (RVVM2x2DI "TARGET_VECTOR_ELEN_64") - (RVVM1x2DI "TARGET_VECTOR_ELEN_64") - - (RVVM1x8DF "TARGET_VECTOR_ELEN_FP_64") - (RVVM1x7DF "TARGET_VECTOR_ELEN_FP_64") - (RVVM1x6DF "TARGET_VECTOR_ELEN_FP_64") - (RVVM1x5DF "TARGET_VECTOR_ELEN_FP_64") - (RVVM2x4DF "TARGET_VECTOR_ELEN_FP_64") - (RVVM1x4DF "TARGET_VECTOR_ELEN_FP_64") - (RVVM2x3DF "TARGET_VECTOR_ELEN_FP_64") - (RVVM1x3DF "TARGET_VECTOR_ELEN_FP_64") - (RVVM4x2DF "TARGET_VECTOR_ELEN_FP_64") - (RVVM2x2DF "TARGET_VECTOR_ELEN_FP_64") - (RVVM1x2DF "TARGET_VECTOR_ELEN_FP_64") -]) - (define_mode_iterator V1T [ (RVVMF8x2QI "TARGET_MIN_VLEN > 32") (RVVMF8x3QI "TARGET_MIN_VLEN > 32") @@ -1674,6 +1407,41 @@ (V1024SF "RVVM1DF") ]) +(define_mode_iterator VLSB [ + (V1BI "riscv_vector::vls_mode_valid_p (V1BImode)") + (V2BI "riscv_vector::vls_mode_valid_p (V2BImode)") + (V4BI "riscv_vector::vls_mode_valid_p (V4BImode)") + (V8BI "riscv_vector::vls_mode_valid_p (V8BImode)") + (V16BI "riscv_vector::vls_mode_valid_p (V16BImode)") + (V32BI "riscv_vector::vls_mode_valid_p (V32BImode)") + (V64BI "riscv_vector::vls_mode_valid_p (V64BImode) && TARGET_MIN_VLEN >= 64") + (V128BI "riscv_vector::vls_mode_valid_p (V128BImode) && TARGET_MIN_VLEN >= 128") + (V256BI "riscv_vector::vls_mode_valid_p (V256BImode) && TARGET_MIN_VLEN >= 256") + (V512BI "riscv_vector::vls_mode_valid_p (V512BImode) && TARGET_MIN_VLEN >= 512") + (V1024BI "riscv_vector::vls_mode_valid_p (V1024BImode) && TARGET_MIN_VLEN >= 1024") + (V2048BI "riscv_vector::vls_mode_valid_p (V2048BImode) && TARGET_MIN_VLEN >= 2048") + (V4096BI "riscv_vector::vls_mode_valid_p (V4096BImode) && TARGET_MIN_VLEN >= 4096")]) + +(define_mode_iterator VB [ + (RVVMF64BI "TARGET_MIN_VLEN > 32") RVVMF32BI RVVMF16BI RVVMF8BI RVVMF4BI RVVMF2BI RVVM1BI +]) + +(define_mode_iterator VB_VLS [VB VLSB]) + +(define_mode_iterator VLS [VLSI VLSF_ZVFHMIN]) + +(define_mode_iterator V [VI VF_ZVFHMIN]) + +(define_mode_iterator V_VLS [V VLS]) + +(define_mode_iterator V_VLSI [VI VLSI]) + +(define_mode_iterator V_VLSF [VF VLSF]) + +(define_mode_iterator V_VLSF_ZVFHMIN [VF_ZVFHMIN VLSF_ZVFHMIN]) + +(define_mode_iterator VT [V1T V2T V4T V8T V16T V32T]) + (define_int_iterator ANY_REDUC [ UNSPEC_REDUC_SUM UNSPEC_REDUC_MAXU UNSPEC_REDUC_MAX UNSPEC_REDUC_MINU UNSPEC_REDUC_MIN UNSPEC_REDUC_AND UNSPEC_REDUC_OR UNSPEC_REDUC_XOR @@ -3941,103 +3709,6 @@ (define_code_attr sz [(sign_extend "s") (zero_extend "z")]) -;; VLS modes. -(define_mode_iterator VLS [ - (V1QI "riscv_vector::vls_mode_valid_p (V1QImode)") - (V2QI "riscv_vector::vls_mode_valid_p (V2QImode)") - (V4QI "riscv_vector::vls_mode_valid_p (V4QImode)") - (V8QI "riscv_vector::vls_mode_valid_p (V8QImode)") - (V16QI "riscv_vector::vls_mode_valid_p (V16QImode)") - (V32QI "riscv_vector::vls_mode_valid_p (V32QImode)") - (V64QI "riscv_vector::vls_mode_valid_p (V64QImode) && TARGET_MIN_VLEN >= 64") - (V128QI "riscv_vector::vls_mode_valid_p (V128QImode) && TARGET_MIN_VLEN >= 128") - (V256QI "riscv_vector::vls_mode_valid_p (V256QImode) && TARGET_MIN_VLEN >= 256") - (V512QI "riscv_vector::vls_mode_valid_p (V512QImode) && TARGET_MIN_VLEN >= 512") - (V1024QI "riscv_vector::vls_mode_valid_p (V1024QImode) && TARGET_MIN_VLEN >= 1024") - (V2048QI "riscv_vector::vls_mode_valid_p (V2048QImode) && TARGET_MIN_VLEN >= 2048") - (V4096QI "riscv_vector::vls_mode_valid_p (V4096QImode) && TARGET_MIN_VLEN >= 4096") - (V1HI "riscv_vector::vls_mode_valid_p (V1HImode)") - (V2HI "riscv_vector::vls_mode_valid_p (V2HImode)") - (V4HI "riscv_vector::vls_mode_valid_p (V4HImode)") - (V8HI "riscv_vector::vls_mode_valid_p (V8HImode)") - (V16HI "riscv_vector::vls_mode_valid_p (V16HImode)") - (V32HI "riscv_vector::vls_mode_valid_p (V32HImode) && TARGET_MIN_VLEN >= 64") - (V64HI "riscv_vector::vls_mode_valid_p (V64HImode) && TARGET_MIN_VLEN >= 128") - (V128HI "riscv_vector::vls_mode_valid_p (V128HImode) && TARGET_MIN_VLEN >= 256") - (V256HI "riscv_vector::vls_mode_valid_p (V256HImode) && TARGET_MIN_VLEN >= 512") - (V512HI "riscv_vector::vls_mode_valid_p (V512HImode) && TARGET_MIN_VLEN >= 1024") - (V1024HI "riscv_vector::vls_mode_valid_p (V1024HImode) && TARGET_MIN_VLEN >= 2048") - (V2048HI "riscv_vector::vls_mode_valid_p (V2048HImode) && TARGET_MIN_VLEN >= 4096") - (V1SI "riscv_vector::vls_mode_valid_p (V1SImode)") - (V2SI "riscv_vector::vls_mode_valid_p (V2SImode)") - (V4SI "riscv_vector::vls_mode_valid_p (V4SImode)") - (V8SI "riscv_vector::vls_mode_valid_p (V8SImode)") - (V16SI "riscv_vector::vls_mode_valid_p (V16SImode) && TARGET_MIN_VLEN >= 64") - (V32SI "riscv_vector::vls_mode_valid_p (V32SImode) && TARGET_MIN_VLEN >= 128") - (V64SI "riscv_vector::vls_mode_valid_p (V64SImode) && TARGET_MIN_VLEN >= 256") - (V128SI "riscv_vector::vls_mode_valid_p (V128SImode) && TARGET_MIN_VLEN >= 512") - (V256SI "riscv_vector::vls_mode_valid_p (V256SImode) && TARGET_MIN_VLEN >= 1024") - (V512SI "riscv_vector::vls_mode_valid_p (V512SImode) && TARGET_MIN_VLEN >= 2048") - (V1024SI "riscv_vector::vls_mode_valid_p (V1024SImode) && TARGET_MIN_VLEN >= 4096") - (V1DI "riscv_vector::vls_mode_valid_p (V1DImode) && TARGET_VECTOR_ELEN_64") - (V2DI "riscv_vector::vls_mode_valid_p (V2DImode) && TARGET_VECTOR_ELEN_64") - (V4DI "riscv_vector::vls_mode_valid_p (V4DImode) && TARGET_VECTOR_ELEN_64") - (V8DI "riscv_vector::vls_mode_valid_p (V8DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 64") - (V16DI "riscv_vector::vls_mode_valid_p (V16DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128") - (V32DI "riscv_vector::vls_mode_valid_p (V32DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 256") - (V64DI "riscv_vector::vls_mode_valid_p (V64DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 512") - (V128DI "riscv_vector::vls_mode_valid_p (V128DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 1024") - (V256DI "riscv_vector::vls_mode_valid_p (V256DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 2048") - (V512DI "riscv_vector::vls_mode_valid_p (V512DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 4096") - (V1HF "riscv_vector::vls_mode_valid_p (V1HFmode) && TARGET_VECTOR_ELEN_FP_16") - (V2HF "riscv_vector::vls_mode_valid_p (V2HFmode) && TARGET_VECTOR_ELEN_FP_16") - (V4HF "riscv_vector::vls_mode_valid_p (V4HFmode) && TARGET_VECTOR_ELEN_FP_16") - (V8HF "riscv_vector::vls_mode_valid_p (V8HFmode) && TARGET_VECTOR_ELEN_FP_16") - (V16HF "riscv_vector::vls_mode_valid_p (V16HFmode) && TARGET_VECTOR_ELEN_FP_16") - (V32HF "riscv_vector::vls_mode_valid_p (V32HFmode) && TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN >= 64") - (V64HF "riscv_vector::vls_mode_valid_p (V64HFmode) && TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN >= 128") - (V128HF "riscv_vector::vls_mode_valid_p (V128HFmode) && TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN >= 256") - (V256HF "riscv_vector::vls_mode_valid_p (V256HFmode) && TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN >= 512") - (V512HF "riscv_vector::vls_mode_valid_p (V512HFmode) && TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN >= 1024") - (V1024HF "riscv_vector::vls_mode_valid_p (V1024HFmode) && TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN >= 2048") - (V2048HF "riscv_vector::vls_mode_valid_p (V2048HFmode) && TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN >= 4096") - (V1SF "riscv_vector::vls_mode_valid_p (V1SFmode) && TARGET_VECTOR_ELEN_FP_32") - (V2SF "riscv_vector::vls_mode_valid_p (V2SFmode) && TARGET_VECTOR_ELEN_FP_32") - (V4SF "riscv_vector::vls_mode_valid_p (V4SFmode) && TARGET_VECTOR_ELEN_FP_32") - (V8SF "riscv_vector::vls_mode_valid_p (V8SFmode) && TARGET_VECTOR_ELEN_FP_32") - (V16SF "riscv_vector::vls_mode_valid_p (V16SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 64") - (V32SF "riscv_vector::vls_mode_valid_p (V32SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128") - (V64SF "riscv_vector::vls_mode_valid_p (V64SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 256") - (V128SF "riscv_vector::vls_mode_valid_p (V128SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 512") - (V256SF "riscv_vector::vls_mode_valid_p (V256SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 1024") - (V512SF "riscv_vector::vls_mode_valid_p (V512SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 2048") - (V1024SF "riscv_vector::vls_mode_valid_p (V1024SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 4096") - (V1DF "riscv_vector::vls_mode_valid_p (V1DFmode) && TARGET_VECTOR_ELEN_FP_64") - (V2DF "riscv_vector::vls_mode_valid_p (V2DFmode) && TARGET_VECTOR_ELEN_FP_64") - (V4DF "riscv_vector::vls_mode_valid_p (V4DFmode) && TARGET_VECTOR_ELEN_FP_64") - (V8DF "riscv_vector::vls_mode_valid_p (V8DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 64") - (V16DF "riscv_vector::vls_mode_valid_p (V16DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128") - (V32DF "riscv_vector::vls_mode_valid_p (V32DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 256") - (V64DF "riscv_vector::vls_mode_valid_p (V64DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 512") - (V128DF "riscv_vector::vls_mode_valid_p (V128DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 1024") - (V256DF "riscv_vector::vls_mode_valid_p (V256DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 2048") - (V512DF "riscv_vector::vls_mode_valid_p (V512DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 4096")]) - -(define_mode_iterator VLSB [ - (V1BI "riscv_vector::vls_mode_valid_p (V1BImode)") - (V2BI "riscv_vector::vls_mode_valid_p (V2BImode)") - (V4BI "riscv_vector::vls_mode_valid_p (V4BImode)") - (V8BI "riscv_vector::vls_mode_valid_p (V8BImode)") - (V16BI "riscv_vector::vls_mode_valid_p (V16BImode)") - (V32BI "riscv_vector::vls_mode_valid_p (V32BImode)") - (V64BI "riscv_vector::vls_mode_valid_p (V64BImode) && TARGET_MIN_VLEN >= 64") - (V128BI "riscv_vector::vls_mode_valid_p (V128BImode) && TARGET_MIN_VLEN >= 128") - (V256BI "riscv_vector::vls_mode_valid_p (V256BImode) && TARGET_MIN_VLEN >= 256") - (V512BI "riscv_vector::vls_mode_valid_p (V512BImode) && TARGET_MIN_VLEN >= 512") - (V1024BI "riscv_vector::vls_mode_valid_p (V1024BImode) && TARGET_MIN_VLEN >= 1024") - (V2048BI "riscv_vector::vls_mode_valid_p (V2048BImode) && TARGET_MIN_VLEN >= 2048") - (V4096BI "riscv_vector::vls_mode_valid_p (V4096BImode) && TARGET_MIN_VLEN >= 4096")]) - ;; VLS modes that has NUNITS < 32. (define_mode_iterator VLS_AVL_IMM [ (V1QI "riscv_vector::vls_mode_valid_p (V1QImode)") @@ -4137,87 +3808,3 @@ (V1024BI "riscv_vector::vls_mode_valid_p (V1024BImode) && TARGET_MIN_VLEN >= 1024") (V2048BI "riscv_vector::vls_mode_valid_p (V2048BImode) && TARGET_MIN_VLEN >= 2048") (V4096BI "riscv_vector::vls_mode_valid_p (V4096BImode) && TARGET_MIN_VLEN >= 4096")]) - -(define_mode_iterator VLSI [ - (V1QI "riscv_vector::vls_mode_valid_p (V1QImode)") - (V2QI "riscv_vector::vls_mode_valid_p (V2QImode)") - (V4QI "riscv_vector::vls_mode_valid_p (V4QImode)") - (V8QI "riscv_vector::vls_mode_valid_p (V8QImode)") - (V16QI "riscv_vector::vls_mode_valid_p (V16QImode)") - (V32QI "riscv_vector::vls_mode_valid_p (V32QImode)") - (V64QI "riscv_vector::vls_mode_valid_p (V64QImode) && TARGET_MIN_VLEN >= 64") - (V128QI "riscv_vector::vls_mode_valid_p (V128QImode) && TARGET_MIN_VLEN >= 128") - (V256QI "riscv_vector::vls_mode_valid_p (V256QImode) && TARGET_MIN_VLEN >= 256") - (V512QI "riscv_vector::vls_mode_valid_p (V512QImode) && TARGET_MIN_VLEN >= 512") - (V1024QI "riscv_vector::vls_mode_valid_p (V1024QImode) && TARGET_MIN_VLEN >= 1024") - (V2048QI "riscv_vector::vls_mode_valid_p (V2048QImode) && TARGET_MIN_VLEN >= 2048") - (V4096QI "riscv_vector::vls_mode_valid_p (V4096QImode) && TARGET_MIN_VLEN >= 4096") - (V1HI "riscv_vector::vls_mode_valid_p (V1HImode)") - (V2HI "riscv_vector::vls_mode_valid_p (V2HImode)") - (V4HI "riscv_vector::vls_mode_valid_p (V4HImode)") - (V8HI "riscv_vector::vls_mode_valid_p (V8HImode)") - (V16HI "riscv_vector::vls_mode_valid_p (V16HImode)") - (V32HI "riscv_vector::vls_mode_valid_p (V32HImode) && TARGET_MIN_VLEN >= 64") - (V64HI "riscv_vector::vls_mode_valid_p (V64HImode) && TARGET_MIN_VLEN >= 128") - (V128HI "riscv_vector::vls_mode_valid_p (V128HImode) && TARGET_MIN_VLEN >= 256") - (V256HI "riscv_vector::vls_mode_valid_p (V256HImode) && TARGET_MIN_VLEN >= 512") - (V512HI "riscv_vector::vls_mode_valid_p (V512HImode) && TARGET_MIN_VLEN >= 1024") - (V1024HI "riscv_vector::vls_mode_valid_p (V1024HImode) && TARGET_MIN_VLEN >= 2048") - (V2048HI "riscv_vector::vls_mode_valid_p (V2048HImode) && TARGET_MIN_VLEN >= 4096") - (V1SI "riscv_vector::vls_mode_valid_p (V1SImode)") - (V2SI "riscv_vector::vls_mode_valid_p (V2SImode)") - (V4SI "riscv_vector::vls_mode_valid_p (V4SImode)") - (V8SI "riscv_vector::vls_mode_valid_p (V8SImode)") - (V16SI "riscv_vector::vls_mode_valid_p (V16SImode) && TARGET_MIN_VLEN >= 64") - (V32SI "riscv_vector::vls_mode_valid_p (V32SImode) && TARGET_MIN_VLEN >= 128") - (V64SI "riscv_vector::vls_mode_valid_p (V64SImode) && TARGET_MIN_VLEN >= 256") - (V128SI "riscv_vector::vls_mode_valid_p (V128SImode) && TARGET_MIN_VLEN >= 512") - (V256SI "riscv_vector::vls_mode_valid_p (V256SImode) && TARGET_MIN_VLEN >= 1024") - (V512SI "riscv_vector::vls_mode_valid_p (V512SImode) && TARGET_MIN_VLEN >= 2048") - (V1024SI "riscv_vector::vls_mode_valid_p (V1024SImode) && TARGET_MIN_VLEN >= 4096") - (V1DI "riscv_vector::vls_mode_valid_p (V1DImode) && TARGET_VECTOR_ELEN_64") - (V2DI "riscv_vector::vls_mode_valid_p (V2DImode) && TARGET_VECTOR_ELEN_64") - (V4DI "riscv_vector::vls_mode_valid_p (V4DImode) && TARGET_VECTOR_ELEN_64") - (V8DI "riscv_vector::vls_mode_valid_p (V8DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 64") - (V16DI "riscv_vector::vls_mode_valid_p (V16DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128") - (V32DI "riscv_vector::vls_mode_valid_p (V32DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 256") - (V64DI "riscv_vector::vls_mode_valid_p (V64DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 512") - (V128DI "riscv_vector::vls_mode_valid_p (V128DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 1024") - (V256DI "riscv_vector::vls_mode_valid_p (V256DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 2048") - (V512DI "riscv_vector::vls_mode_valid_p (V512DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 4096")]) - -(define_mode_iterator VLSF [ - (V1HF "riscv_vector::vls_mode_valid_p (V1HFmode) && TARGET_ZVFH") - (V2HF "riscv_vector::vls_mode_valid_p (V2HFmode) && TARGET_ZVFH") - (V4HF "riscv_vector::vls_mode_valid_p (V4HFmode) && TARGET_ZVFH") - (V8HF "riscv_vector::vls_mode_valid_p (V8HFmode) && TARGET_ZVFH") - (V16HF "riscv_vector::vls_mode_valid_p (V16HFmode) && TARGET_ZVFH") - (V32HF "riscv_vector::vls_mode_valid_p (V32HFmode) && TARGET_ZVFH && TARGET_MIN_VLEN >= 64") - (V64HF "riscv_vector::vls_mode_valid_p (V64HFmode) && TARGET_ZVFH && TARGET_MIN_VLEN >= 128") - (V128HF "riscv_vector::vls_mode_valid_p (V128HFmode) && TARGET_ZVFH && TARGET_MIN_VLEN >= 256") - (V256HF "riscv_vector::vls_mode_valid_p (V256HFmode) && TARGET_ZVFH && TARGET_MIN_VLEN >= 512") - (V512HF "riscv_vector::vls_mode_valid_p (V512HFmode) && TARGET_ZVFH && TARGET_MIN_VLEN >= 1024") - (V1024HF "riscv_vector::vls_mode_valid_p (V1024HFmode) && TARGET_ZVFH && TARGET_MIN_VLEN >= 2048") - (V2048HF "riscv_vector::vls_mode_valid_p (V2048HFmode) && TARGET_ZVFH && TARGET_MIN_VLEN >= 4096") - (V1SF "riscv_vector::vls_mode_valid_p (V1SFmode) && TARGET_VECTOR_ELEN_FP_32") - (V2SF "riscv_vector::vls_mode_valid_p (V2SFmode) && TARGET_VECTOR_ELEN_FP_32") - (V4SF "riscv_vector::vls_mode_valid_p (V4SFmode) && TARGET_VECTOR_ELEN_FP_32") - (V8SF "riscv_vector::vls_mode_valid_p (V8SFmode) && TARGET_VECTOR_ELEN_FP_32") - (V16SF "riscv_vector::vls_mode_valid_p (V16SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 64") - (V32SF "riscv_vector::vls_mode_valid_p (V32SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128") - (V64SF "riscv_vector::vls_mode_valid_p (V64SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 256") - (V128SF "riscv_vector::vls_mode_valid_p (V128SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 512") - (V256SF "riscv_vector::vls_mode_valid_p (V256SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 1024") - (V512SF "riscv_vector::vls_mode_valid_p (V512SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 2048") - (V1024SF "riscv_vector::vls_mode_valid_p (V1024SFmode) && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 4096") - (V1DF "riscv_vector::vls_mode_valid_p (V1DFmode) && TARGET_VECTOR_ELEN_FP_64") - (V2DF "riscv_vector::vls_mode_valid_p (V2DFmode) && TARGET_VECTOR_ELEN_FP_64") - (V4DF "riscv_vector::vls_mode_valid_p (V4DFmode) && TARGET_VECTOR_ELEN_FP_64") - (V8DF "riscv_vector::vls_mode_valid_p (V8DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 64") - (V16DF "riscv_vector::vls_mode_valid_p (V16DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128") - (V32DF "riscv_vector::vls_mode_valid_p (V32DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 256") - (V64DF "riscv_vector::vls_mode_valid_p (V64DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 512") - (V128DF "riscv_vector::vls_mode_valid_p (V128DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 1024") - (V256DF "riscv_vector::vls_mode_valid_p (V256DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 2048") - (V512DF "riscv_vector::vls_mode_valid_p (V512DFmode) && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 4096") -]) From 9419b408823d32e4b018699623c72cf85b1c1fdf Mon Sep 17 00:00:00 2001 From: Frederik Harwath Date: Sat, 18 Nov 2023 11:03:22 +0100 Subject: [PATCH 150/169] MAINTAINERS: Update my e-mail address * MAINTAINERS: Change my address. --- MAINTAINERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index f0112f5d0297..a6e910114f9e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -447,7 +447,7 @@ Naveen H.S Mostafa Hagog Jivan Hakobyan Andrew Haley -Frederik Harwath +Frederik Harwath Stuart Hastings Michael Haubenwallner Pat Haugen From 5f4499606ea6ab49bec30e83209db71e52d0b267 Mon Sep 17 00:00:00 2001 From: Kito Cheng Date: Sat, 18 Nov 2023 18:37:11 +0800 Subject: [PATCH 151/169] RISC-V: Fix mismatched new delete for unique_ptr gcc/ChangeLog: * config/riscv/riscv-target-attr.cc (riscv_target_attr_parser::parse_arch): Use char[] for std::unique_ptr to prevent mismatched new delete issue. (riscv_process_one_target_attr): Ditto. (riscv_process_target_attr): Ditto. --- gcc/config/riscv/riscv-target-attr.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gcc/config/riscv/riscv-target-attr.cc b/gcc/config/riscv/riscv-target-attr.cc index 78f259d0c96e..c4bd99d8632a 100644 --- a/gcc/config/riscv/riscv-target-attr.cc +++ b/gcc/config/riscv/riscv-target-attr.cc @@ -105,7 +105,7 @@ riscv_target_attr_parser::parse_arch (const char *str) { /* Parsing the extension list like "+[,+]*". */ size_t len = strlen (str); - std::unique_ptr buf (new char[len]); + std::unique_ptr buf (new char[len]); char *str_to_check = buf.get (); strcpy (str_to_check, str); const char *token = strtok_r (str_to_check, ",", &str_to_check); @@ -241,7 +241,7 @@ riscv_process_one_target_attr (char *arg_str, return false; } - std::unique_ptr buf (new char[len]); + std::unique_ptr buf (new char[len]); char *str_to_check = buf.get(); strcpy (str_to_check, arg_str); @@ -327,7 +327,7 @@ riscv_process_target_attr (tree args, location_t loc, struct gcc_options *opts) return false; } - std::unique_ptr buf (new char[len]); + std::unique_ptr buf (new char[len]); char *str_to_check = buf.get (); strcpy (str_to_check, TREE_STRING_POINTER (args)); From 23d33775f9225e6e8efac730fe3cf286c19fddea Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Sat, 21 Oct 2023 13:00:19 +0200 Subject: [PATCH 152/169] gcov: Remove TARGET_GCOV_TYPE_SIZE target hook This reverts commit 8cdcea51c0fd753e6a652c9b236e91b3a6e0911c. gcc/c-family/ChangeLog: * c-cppbuiltin.cc (c_cpp_builtins): Do not define __LIBGCC_GCOV_TYPE_SIZE. gcc/ChangeLog: * config/sparc/rtemself.h (SPARC_GCOV_TYPE_SIZE): Remove. * config/sparc/sparc.cc (sparc_gcov_type_size): Likewise. (TARGET_GCOV_TYPE_SIZE): Likewise. * coverage.cc (get_gcov_type): Use LONG_LONG_TYPE_SIZE instead of removed target hook. * doc/tm.texi: Regenerate. * doc/tm.texi.in (TARGET_GCOV_TYPE_SIZE): Remove. * target.def: Likewise. * targhooks.cc (default_gcov_type_size): Likewise. * targhooks.h (default_gcov_type_size): Likewise. libgcc/ChangeLog: * libgcov.h (gcov_type): Use LONG_LONG_TYPE_SIZE. (gcov_type_unsigned): Likewise. --- gcc/c-family/c-cppbuiltin.cc | 2 -- gcc/config/sparc/rtemself.h | 2 -- gcc/config/sparc/sparc.cc | 11 ----------- gcc/coverage.cc | 2 +- gcc/doc/tm.texi | 11 ----------- gcc/doc/tm.texi.in | 2 -- gcc/target.def | 12 ------------ gcc/targhooks.cc | 7 ------- gcc/targhooks.h | 2 -- libgcc/libgcov.h | 6 +++--- 10 files changed, 4 insertions(+), 53 deletions(-) diff --git a/gcc/c-family/c-cppbuiltin.cc b/gcc/c-family/c-cppbuiltin.cc index e48b5b4ab112..5a5309d0d09f 100644 --- a/gcc/c-family/c-cppbuiltin.cc +++ b/gcc/c-family/c-cppbuiltin.cc @@ -1567,8 +1567,6 @@ c_cpp_builtins (cpp_reader *pfile) /* For libgcov. */ builtin_define_with_int_value ("__LIBGCC_VTABLE_USES_DESCRIPTORS__", TARGET_VTABLE_USES_DESCRIPTORS); - builtin_define_with_int_value ("__LIBGCC_GCOV_TYPE_SIZE", - targetm.gcov_type_size()); } /* For use in assembly language. */ diff --git a/gcc/config/sparc/rtemself.h b/gcc/config/sparc/rtemself.h index bf4682238aea..28400a36126c 100644 --- a/gcc/config/sparc/rtemself.h +++ b/gcc/config/sparc/rtemself.h @@ -40,5 +40,3 @@ /* Use the default */ #undef LINK_GCC_C_SEQUENCE_SPEC - -#define SPARC_GCOV_TYPE_SIZE 32 diff --git a/gcc/config/sparc/sparc.cc b/gcc/config/sparc/sparc.cc index 82e579524142..e90739d0f125 100644 --- a/gcc/config/sparc/sparc.cc +++ b/gcc/config/sparc/sparc.cc @@ -972,17 +972,6 @@ char sparc_hard_reg_printed[8]; #undef TARGET_ZERO_CALL_USED_REGS #define TARGET_ZERO_CALL_USED_REGS sparc_zero_call_used_regs -#ifdef SPARC_GCOV_TYPE_SIZE -static HOST_WIDE_INT -sparc_gcov_type_size (void) -{ - return SPARC_GCOV_TYPE_SIZE; -} - -#undef TARGET_GCOV_TYPE_SIZE -#define TARGET_GCOV_TYPE_SIZE sparc_gcov_type_size -#endif - struct gcc_target targetm = TARGET_INITIALIZER; /* Return the memory reference contained in X if any, zero otherwise. */ diff --git a/gcc/coverage.cc b/gcc/coverage.cc index 7ed3a5d4cebf..ad55f0f19096 100644 --- a/gcc/coverage.cc +++ b/gcc/coverage.cc @@ -138,7 +138,7 @@ tree get_gcov_type (void) { scalar_int_mode mode - = smallest_int_mode_for_size (targetm.gcov_type_size ()); + = smallest_int_mode_for_size (LONG_LONG_TYPE_SIZE > 32 ? 64 : 32); return lang_hooks.types.type_for_mode (mode, false); } diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index d83ca73b1aff..56d64a046400 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -12601,17 +12601,6 @@ Store the result in @var{target} if convenient. The default clears the top byte of the original pointer. @end deftypefn -@deftypefn {Target Hook} HOST_WIDE_INT TARGET_GCOV_TYPE_SIZE (void) -Returns the gcov type size in bits. This type is used for example for -counters incremented by profiling and code-coverage events. The default -value is 64, if the type size of long long is greater than 32, otherwise the -default value is 32. A 64-bit type is recommended to avoid overflows of the -counters. If the @option{-fprofile-update=atomic} is used, then the -counters are incremented using atomic operations. Targets not supporting -64-bit atomic operations may override the default value and request a 32-bit -type. -@end deftypefn - @deftypevr {Target Hook} bool TARGET_HAVE_SHADOW_CALL_STACK This value is true if the target platform supports @option{-fsanitize=shadow-call-stack}. The default value is false. diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in index 3d3ae12cc2ff..fb0120fa1bfd 100644 --- a/gcc/doc/tm.texi.in +++ b/gcc/doc/tm.texi.in @@ -8040,6 +8040,4 @@ maintainer is familiar with. @hook TARGET_MEMTAG_UNTAGGED_POINTER -@hook TARGET_GCOV_TYPE_SIZE - @hook TARGET_HAVE_SHADOW_CALL_STACK diff --git a/gcc/target.def b/gcc/target.def index 0996da0f71a8..db87e7d39df3 100644 --- a/gcc/target.def +++ b/gcc/target.def @@ -7243,18 +7243,6 @@ DEFHOOK void, (void), NULL) -DEFHOOK -(gcov_type_size, - "Returns the gcov type size in bits. This type is used for example for\n\ -counters incremented by profiling and code-coverage events. The default\n\ -value is 64, if the type size of long long is greater than 32, otherwise the\n\ -default value is 32. A 64-bit type is recommended to avoid overflows of the\n\ -counters. If the @option{-fprofile-update=atomic} is used, then the\n\ -counters are incremented using atomic operations. Targets not supporting\n\ -64-bit atomic operations may override the default value and request a 32-bit\n\ -type.", - HOST_WIDE_INT, (void), default_gcov_type_size) - /* This value represents whether the shadow call stack is implemented on the target platform. */ DEFHOOKPOD diff --git a/gcc/targhooks.cc b/gcc/targhooks.cc index 4f5b240f8d65..6b5173bcdd42 100644 --- a/gcc/targhooks.cc +++ b/gcc/targhooks.cc @@ -2778,11 +2778,4 @@ default_memtag_untagged_pointer (rtx tagged_pointer, rtx target) return untagged_base; } -/* The default implementation of TARGET_GCOV_TYPE_SIZE. */ -HOST_WIDE_INT -default_gcov_type_size (void) -{ - return TYPE_PRECISION (long_long_integer_type_node) > 32 ? 64 : 32; -} - #include "gt-targhooks.h" diff --git a/gcc/targhooks.h b/gcc/targhooks.h index 189549cb1c74..0b35e8a96ab2 100644 --- a/gcc/targhooks.h +++ b/gcc/targhooks.h @@ -302,6 +302,4 @@ extern rtx default_memtag_set_tag (rtx, rtx, rtx); extern rtx default_memtag_extract_tag (rtx, rtx); extern rtx default_memtag_untagged_pointer (rtx, rtx); -extern HOST_WIDE_INT default_gcov_type_size (void); - #endif /* GCC_TARGHOOKS_H */ diff --git a/libgcc/libgcov.h b/libgcc/libgcov.h index 92df440d4012..763118ea5b52 100644 --- a/libgcc/libgcov.h +++ b/libgcc/libgcov.h @@ -52,7 +52,7 @@ #if __CHAR_BIT__ == 8 typedef unsigned gcov_unsigned_t __attribute__ ((mode (SI))); typedef unsigned gcov_position_t __attribute__ ((mode (SI))); -#if __LIBGCC_GCOV_TYPE_SIZE > 32 +#if LONG_LONG_TYPE_SIZE > 32 typedef signed gcov_type __attribute__ ((mode (DI))); typedef unsigned gcov_type_unsigned __attribute__ ((mode (DI))); #else @@ -63,7 +63,7 @@ typedef unsigned gcov_type_unsigned __attribute__ ((mode (SI))); #if __CHAR_BIT__ == 16 typedef unsigned gcov_unsigned_t __attribute__ ((mode (HI))); typedef unsigned gcov_position_t __attribute__ ((mode (HI))); -#if __LIBGCC_GCOV_TYPE_SIZE > 32 +#if LONG_LONG_TYPE_SIZE > 32 typedef signed gcov_type __attribute__ ((mode (SI))); typedef unsigned gcov_type_unsigned __attribute__ ((mode (SI))); #else @@ -73,7 +73,7 @@ typedef unsigned gcov_type_unsigned __attribute__ ((mode (HI))); #else typedef unsigned gcov_unsigned_t __attribute__ ((mode (QI))); typedef unsigned gcov_position_t __attribute__ ((mode (QI))); -#if __LIBGCC_GCOV_TYPE_SIZE > 32 +#if LONG_LONG_TYPE_SIZE > 32 typedef signed gcov_type __attribute__ ((mode (HI))); typedef unsigned gcov_type_unsigned __attribute__ ((mode (HI))); #else From 3ef8882adcb1ab5fa535e9e1a2a28ea7c8eeca4f Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 14 Nov 2023 21:27:37 +0100 Subject: [PATCH 153/169] Add TARGET_HAVE_LIBATOMIC Add target data to indicate if libatomic is available. gcc/ChangeLog: * config/rtems.h (TARGET_HAVE_LIBATOMIC): Define. * doc/tm.texi: Regenerate. * doc/tm.texi.in (TARGET_HAVE_LIBATOMIC): Add. * target.def (have_libatomic): New. --- gcc/config/rtems.h | 2 ++ gcc/doc/tm.texi | 5 +++++ gcc/doc/tm.texi.in | 2 ++ gcc/target.def | 8 ++++++++ 4 files changed, 17 insertions(+) diff --git a/gcc/config/rtems.h b/gcc/config/rtems.h index 8641ea15271d..2c006e4c1e54 100644 --- a/gcc/config/rtems.h +++ b/gcc/config/rtems.h @@ -53,6 +53,8 @@ #define TARGET_POSIX_IO +#define TARGET_HAVE_LIBATOMIC true + /* Prefer int for int32_t (see stdint-newlib.h). */ #undef STDINT_LONG32 #define STDINT_LONG32 (INT_TYPE_SIZE != 32 && LONG_TYPE_SIZE == 32) diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index 56d64a046400..dcf77359e66f 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -12605,3 +12605,8 @@ The default clears the top byte of the original pointer. This value is true if the target platform supports @option{-fsanitize=shadow-call-stack}. The default value is false. @end deftypevr + +@deftypevr {Target Hook} bool TARGET_HAVE_LIBATOMIC +This value is true if the target platform supports +libatomic. The default value is false. +@end deftypevr diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in index fb0120fa1bfd..b61a59fdaf3c 100644 --- a/gcc/doc/tm.texi.in +++ b/gcc/doc/tm.texi.in @@ -8041,3 +8041,5 @@ maintainer is familiar with. @hook TARGET_MEMTAG_UNTAGGED_POINTER @hook TARGET_HAVE_SHADOW_CALL_STACK + +@hook TARGET_HAVE_LIBATOMIC diff --git a/gcc/target.def b/gcc/target.def index db87e7d39df3..475c55c22c1d 100644 --- a/gcc/target.def +++ b/gcc/target.def @@ -7251,6 +7251,14 @@ DEFHOOKPOD @option{-fsanitize=shadow-call-stack}. The default value is false.", bool, false) +/* This value represents whether libatomic is available on + the target platform. */ +DEFHOOKPOD +(have_libatomic, + "This value is true if the target platform supports\n\ +libatomic. The default value is false.", + bool, false) + /* Close the 'struct gcc_target' definition. */ HOOK_VECTOR_END (C90_EMPTY_HACK) From a350a74d6113e3a84943266eb691275951c109d9 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Sat, 21 Oct 2023 15:52:15 +0200 Subject: [PATCH 154/169] gcov: Add gen_counter_update() Move the counter update to the new gen_counter_update() helper function. Use it in gimple_gen_edge_profiler() and gimple_gen_time_profiler(). The resulting gimple instructions should be identical with the exception of the removed unshare_expr() call. The unshare_expr() call was used in gimple_gen_edge_profiler(). gcc/ChangeLog: * tree-profile.cc (gen_assign_counter_update): New. (gen_counter_update): Likewise. (gimple_gen_edge_profiler): Use gen_counter_update(). (gimple_gen_time_profiler): Likewise. --- gcc/tree-profile.cc | 133 +++++++++++++++++++++----------------------- 1 file changed, 62 insertions(+), 71 deletions(-) diff --git a/gcc/tree-profile.cc b/gcc/tree-profile.cc index da300d5f9e8d..24805ff905c7 100644 --- a/gcc/tree-profile.cc +++ b/gcc/tree-profile.cc @@ -235,47 +235,78 @@ gimple_init_gcov_profiler (void) } } -/* Output instructions as GIMPLE trees to increment the edge - execution count, and insert them on E. We rely on - gsi_insert_on_edge to preserve the order. */ +/* If RESULT is not null, then output instructions as GIMPLE trees to assign + the updated counter from CALL of FUNC to RESULT. Insert the CALL and the + optional assignment instructions to GSI. Use NAME for temporary values. */ -void -gimple_gen_edge_profiler (int edgeno, edge e) +static inline void +gen_assign_counter_update (gimple_stmt_iterator *gsi, gcall *call, tree func, + tree result, const char *name) { - tree one; + if (result) + { + tree result_type = TREE_TYPE (TREE_TYPE (func)); + tree tmp = make_temp_ssa_name (result_type, NULL, name); + gimple_set_lhs (call, tmp); + gsi_insert_after (gsi, call, GSI_NEW_STMT); + gassign *assign = gimple_build_assign (result, tmp); + gsi_insert_after (gsi, assign, GSI_NEW_STMT); + } + else + gsi_insert_after (gsi, call, GSI_NEW_STMT); +} - one = build_int_cst (gcov_type_node, 1); +/* Output instructions as GIMPLE trees to increment the COUNTER. If RESULT is + not null, then assign the updated counter value to RESULT. Insert the + instructions to GSI. Use NAME for temporary values. */ + +static inline void +gen_counter_update (gimple_stmt_iterator *gsi, tree counter, tree result, + const char *name) +{ + tree type = gcov_type_node; + tree addr = build_fold_addr_expr (counter); + tree one = build_int_cst (type, 1); + tree relaxed = build_int_cst (integer_type_node, MEMMODEL_RELAXED); if (flag_profile_update == PROFILE_UPDATE_ATOMIC) { /* __atomic_fetch_add (&counter, 1, MEMMODEL_RELAXED); */ - tree addr = tree_coverage_counter_addr (GCOV_COUNTER_ARCS, edgeno); - tree f = builtin_decl_explicit (TYPE_PRECISION (gcov_type_node) > 32 - ? BUILT_IN_ATOMIC_FETCH_ADD_8: - BUILT_IN_ATOMIC_FETCH_ADD_4); - gcall *stmt = gimple_build_call (f, 3, addr, one, - build_int_cst (integer_type_node, - MEMMODEL_RELAXED)); - gsi_insert_on_edge (e, stmt); + tree f = builtin_decl_explicit (TYPE_PRECISION (type) > 32 + ? BUILT_IN_ATOMIC_ADD_FETCH_8: + BUILT_IN_ATOMIC_ADD_FETCH_4); + gcall *call = gimple_build_call (f, 3, addr, one, relaxed); + gen_assign_counter_update (gsi, call, f, result, name); } else { - tree ref = tree_coverage_counter_ref (GCOV_COUNTER_ARCS, edgeno); - tree gcov_type_tmp_var = make_temp_ssa_name (gcov_type_node, - NULL, "PROF_edge_counter"); - gassign *stmt1 = gimple_build_assign (gcov_type_tmp_var, ref); - gcov_type_tmp_var = make_temp_ssa_name (gcov_type_node, - NULL, "PROF_edge_counter"); - gassign *stmt2 = gimple_build_assign (gcov_type_tmp_var, PLUS_EXPR, - gimple_assign_lhs (stmt1), one); - gassign *stmt3 = gimple_build_assign (unshare_expr (ref), - gimple_assign_lhs (stmt2)); - gsi_insert_on_edge (e, stmt1); - gsi_insert_on_edge (e, stmt2); - gsi_insert_on_edge (e, stmt3); + tree tmp1 = make_temp_ssa_name (type, NULL, name); + gassign *assign1 = gimple_build_assign (tmp1, counter); + gsi_insert_after (gsi, assign1, GSI_NEW_STMT); + tree tmp2 = make_temp_ssa_name (type, NULL, name); + gassign *assign2 = gimple_build_assign (tmp2, PLUS_EXPR, tmp1, one); + gsi_insert_after (gsi, assign2, GSI_NEW_STMT); + gassign *assign3 = gimple_build_assign (counter, tmp2); + gsi_insert_after (gsi, assign3, GSI_NEW_STMT); + if (result) + { + gassign *assign4 = gimple_build_assign (result, tmp2); + gsi_insert_after (gsi, assign4, GSI_NEW_STMT); + } } } +/* Output instructions as GIMPLE trees to increment the edge + execution count, and insert them on E. */ + +void +gimple_gen_edge_profiler (int edgeno, edge e) +{ + gimple_stmt_iterator gsi = gsi_last (PENDING_STMT (e)); + tree counter = tree_coverage_counter_ref (GCOV_COUNTER_ARCS, edgeno); + gen_counter_update (&gsi, counter, NULL_TREE, "PROF_edge_counter"); +} + /* Emits code to get VALUE to instrument at GSI, and returns the variable containing the value. */ @@ -507,56 +538,16 @@ gimple_gen_time_profiler (unsigned tag) tree original_ref = tree_coverage_counter_ref (tag, 0); tree ref = force_gimple_operand_gsi (&gsi, original_ref, true, NULL_TREE, true, GSI_SAME_STMT); - tree one = build_int_cst (type, 1); /* Emit: if (counters[0] != 0). */ gcond *cond = gimple_build_cond (EQ_EXPR, ref, build_int_cst (type, 0), NULL, NULL); gsi_insert_before (&gsi, cond, GSI_NEW_STMT); - gsi = gsi_start_bb (update_bb); - /* Emit: counters[0] = ++__gcov_time_profiler_counter. */ - if (flag_profile_update == PROFILE_UPDATE_ATOMIC) - { - tree ptr = make_temp_ssa_name (build_pointer_type (type), NULL, - "PROF_time_profiler_counter_ptr"); - tree addr = build1 (ADDR_EXPR, TREE_TYPE (ptr), - tree_time_profiler_counter); - gassign *assign = gimple_build_assign (ptr, NOP_EXPR, addr); - gsi_insert_before (&gsi, assign, GSI_NEW_STMT); - tree f = builtin_decl_explicit (TYPE_PRECISION (gcov_type_node) > 32 - ? BUILT_IN_ATOMIC_ADD_FETCH_8: - BUILT_IN_ATOMIC_ADD_FETCH_4); - gcall *stmt = gimple_build_call (f, 3, ptr, one, - build_int_cst (integer_type_node, - MEMMODEL_RELAXED)); - tree result_type = TREE_TYPE (TREE_TYPE (f)); - tree tmp = make_temp_ssa_name (result_type, NULL, "PROF_time_profile"); - gimple_set_lhs (stmt, tmp); - gsi_insert_after (&gsi, stmt, GSI_NEW_STMT); - tmp = make_temp_ssa_name (type, NULL, "PROF_time_profile"); - assign = gimple_build_assign (tmp, NOP_EXPR, - gimple_call_lhs (stmt)); - gsi_insert_after (&gsi, assign, GSI_NEW_STMT); - assign = gimple_build_assign (original_ref, tmp); - gsi_insert_after (&gsi, assign, GSI_NEW_STMT); - } - else - { - tree tmp = make_temp_ssa_name (type, NULL, "PROF_time_profile"); - gassign *assign = gimple_build_assign (tmp, tree_time_profiler_counter); - gsi_insert_before (&gsi, assign, GSI_NEW_STMT); - - tmp = make_temp_ssa_name (type, NULL, "PROF_time_profile"); - assign = gimple_build_assign (tmp, PLUS_EXPR, gimple_assign_lhs (assign), - one); - gsi_insert_after (&gsi, assign, GSI_NEW_STMT); - assign = gimple_build_assign (original_ref, tmp); - gsi_insert_after (&gsi, assign, GSI_NEW_STMT); - assign = gimple_build_assign (tree_time_profiler_counter, tmp); - gsi_insert_after (&gsi, assign, GSI_NEW_STMT); - } + gsi = gsi_start_bb (update_bb); + gen_counter_update (&gsi, tree_time_profiler_counter, original_ref, + "PROF_time_profile"); } /* Output instructions as GIMPLE trees to increment the average histogram From 20a3c74c347429c109bc7002285b735be83f6a0b Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 14 Nov 2023 21:36:51 +0100 Subject: [PATCH 155/169] gcov: Improve -fprofile-update=atomic The code coverage support uses counters to determine which edges in the control flow graph were executed. If a counter overflows, then the code coverage information is invalid. Therefore the counter type should be a 64-bit integer. In multi-threaded applications, it is important that the counter increments are atomic. This is not the case by default. The user can enable atomic counter increments through the -fprofile-update=atomic and -fprofile-update=prefer-atomic options. If the target supports 64-bit atomic operations, then everything is fine. If not and -fprofile-update=prefer-atomic was chosen by the user, then non-atomic counter increments will be used. However, if the target does not support the required atomic operations and -fprofile-atomic=update was chosen by the user, then a warning was issued and as a forced fallback to non-atomic operations was done. This is probably not what a user wants. There is still hardware on the market which does not have atomic operations and is used for multi-threaded applications. A user which selects -fprofile-update=atomic wants consistent code coverage data and not random data. This patch removes the fallback to non-atomic operations for -fprofile-update=atomic the target platform supports libatomic. To mitigate potential performance issues an optimization for systems which only support 32-bit atomic operations is provided. Here, the edge counter increments are done like this: low = __atomic_add_fetch_4 (&counter.low, 1, MEMMODEL_RELAXED); high_inc = low == 0 ? 1 : 0; __atomic_add_fetch_4 (&counter.high, high_inc, MEMMODEL_RELAXED); In gimple_gen_time_profiler() this split operation cannot be used, since the updated counter value is also required. Here, a library call is emitted. This is not a performance issue since the update is only done if counters[0] == 0. gcc/c-family/ChangeLog: * c-cppbuiltin.cc (c_cpp_builtins): Define __LIBGCC_HAVE_LIBATOMIC for libgcov. gcc/ChangeLog: * doc/invoke.texi (-fprofile-update): Clarify default method. Document the atomic method behaviour. * tree-profile.cc (enum counter_update_method): New. (counter_update): Likewise. (gen_counter_update): Use counter_update_method. Split the atomic counter update in two 32-bit atomic operations if necessary. (tree_profiling): Select counter_update_method. libgcc/ChangeLog: * libgcov.h (GCOV_SUPPORTS_ATOMIC): Always define it. Set it also to 1, if __LIBGCC_HAVE_LIBATOMIC is defined. --- gcc/c-family/c-cppbuiltin.cc | 2 + gcc/doc/invoke.texi | 19 ++++++- gcc/tree-profile.cc | 99 +++++++++++++++++++++++++++++++++--- libgcc/libgcov.h | 10 ++-- 4 files changed, 114 insertions(+), 16 deletions(-) diff --git a/gcc/c-family/c-cppbuiltin.cc b/gcc/c-family/c-cppbuiltin.cc index 5a5309d0d09f..8d2f07a96ce0 100644 --- a/gcc/c-family/c-cppbuiltin.cc +++ b/gcc/c-family/c-cppbuiltin.cc @@ -1567,6 +1567,8 @@ c_cpp_builtins (cpp_reader *pfile) /* For libgcov. */ builtin_define_with_int_value ("__LIBGCC_VTABLE_USES_DESCRIPTORS__", TARGET_VTABLE_USES_DESCRIPTORS); + builtin_define_with_int_value ("__LIBGCC_HAVE_LIBATOMIC", + targetm.have_libatomic); } /* For use in assembly language. */ diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index c0b571327fbd..557d613a1e63 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -16982,7 +16982,24 @@ while the second one prevents profile corruption by emitting thread-safe code. Using @samp{prefer-atomic} would be transformed either to @samp{atomic}, when supported by a target, or to @samp{single} otherwise. The GCC driver automatically selects @samp{prefer-atomic} when @option{-pthread} -is present in the command line. +is present in the command line, otherwise the default method is @samp{single}. + +If @samp{atomic} is selected, then the profile information is updated using +atomic operations on a best-effort basis. Ideally, the profile information is +updated through atomic operations in hardware. If the target platform does not +support the required atomic operations in hardware, however, @file{libatomic} +is available, then the profile information is updated through calls to +@file{libatomic}. If the target platform neither supports the required atomic +operations in hardware nor @file{libatomic}, then the profile information is +not atomically updated and a warning is issued. In this case, the obtained +profiling information may be corrupt for multi-threaded applications. + +For performance reasons, if 64-bit counters are used for the profiling +information and the target platform only supports 32-bit atomic operations in +hardware, then the performance critical profiling updates are done using two +32-bit atomic operations for each counter update. If a signal interrupts these +two operations updating a counter, then the profiling information may be in an +inconsistent state. @opindex fprofile-filter-files @item -fprofile-filter-files=@var{regex} diff --git a/gcc/tree-profile.cc b/gcc/tree-profile.cc index 24805ff905c7..7d3cb1ef0894 100644 --- a/gcc/tree-profile.cc +++ b/gcc/tree-profile.cc @@ -73,6 +73,41 @@ static GTY(()) tree ic_tuple_var; static GTY(()) tree ic_tuple_counters_field; static GTY(()) tree ic_tuple_callee_field; +/* Types of counter update methods. + + By default, the counter updates are done for a single threaded system + (COUNTER_UPDATE_SINGLE_THREAD). + + If the user selected atomic profile counter updates + (-fprofile-update=atomic), then the counter updates will be done atomically + on a best-effort basis. One of three methods to do the counter updates is + selected according to the target capabilities. + + Ideally, the counter updates are done through atomic operations in hardware + (COUNTER_UPDATE_ATOMIC_BUILTIN). + + If the target supports only 32-bit atomic increments and gcov_type_node is a + 64-bit integer type, then for the profile edge counters the increment is + performed through two separate 32-bit atomic increments + (COUNTER_UPDATE_ATOMIC_SPLIT or COUNTER_UPDATE_ATOMIC_PARTIAL). If the + target supports libatomic (targetm.have_libatomic), then other counter + updates are carried out by libatomic calls (COUNTER_UPDATE_ATOMIC_SPLIT). + If the target does not support libatomic, then the other counter updates are + not done atomically (COUNTER_UPDATE_ATOMIC_PARTIAL) and a warning is + issued. + + If the target does not support atomic operations in hardware, however, it + supports libatomic, then all updates are carried out by libatomic calls + (COUNTER_UPDATE_ATOMIC_BUILTIN). */ +enum counter_update_method { + COUNTER_UPDATE_SINGLE_THREAD, + COUNTER_UPDATE_ATOMIC_BUILTIN, + COUNTER_UPDATE_ATOMIC_SPLIT, + COUNTER_UPDATE_ATOMIC_PARTIAL +}; + +static counter_update_method counter_update = COUNTER_UPDATE_SINGLE_THREAD; + /* Do initialization work for the edge profiler. */ /* Add code: @@ -269,7 +304,8 @@ gen_counter_update (gimple_stmt_iterator *gsi, tree counter, tree result, tree one = build_int_cst (type, 1); tree relaxed = build_int_cst (integer_type_node, MEMMODEL_RELAXED); - if (flag_profile_update == PROFILE_UPDATE_ATOMIC) + if (counter_update == COUNTER_UPDATE_ATOMIC_BUILTIN || + (result && counter_update == COUNTER_UPDATE_ATOMIC_SPLIT)) { /* __atomic_fetch_add (&counter, 1, MEMMODEL_RELAXED); */ tree f = builtin_decl_explicit (TYPE_PRECISION (type) > 32 @@ -278,6 +314,38 @@ gen_counter_update (gimple_stmt_iterator *gsi, tree counter, tree result, gcall *call = gimple_build_call (f, 3, addr, one, relaxed); gen_assign_counter_update (gsi, call, f, result, name); } + else if (!result && (counter_update == COUNTER_UPDATE_ATOMIC_SPLIT || + counter_update == COUNTER_UPDATE_ATOMIC_PARTIAL)) + { + /* low = __atomic_add_fetch_4 (addr, 1, MEMMODEL_RELAXED); + high_inc = low == 0 ? 1 : 0; + __atomic_add_fetch_4 (addr_high, high_inc, MEMMODEL_RELAXED); */ + tree zero32 = build_zero_cst (uint32_type_node); + tree one32 = build_one_cst (uint32_type_node); + tree addr_high = make_temp_ssa_name (TREE_TYPE (addr), NULL, name); + tree four = build_int_cst (size_type_node, 4); + gassign *assign1 = gimple_build_assign (addr_high, POINTER_PLUS_EXPR, + addr, four); + gsi_insert_after (gsi, assign1, GSI_NEW_STMT); + if (WORDS_BIG_ENDIAN) + std::swap (addr, addr_high); + tree f = builtin_decl_explicit (BUILT_IN_ATOMIC_ADD_FETCH_4); + gcall *call1 = gimple_build_call (f, 3, addr, one, relaxed); + tree low = make_temp_ssa_name (uint32_type_node, NULL, name); + gimple_call_set_lhs (call1, low); + gsi_insert_after (gsi, call1, GSI_NEW_STMT); + tree is_zero = make_temp_ssa_name (boolean_type_node, NULL, name); + gassign *assign2 = gimple_build_assign (is_zero, EQ_EXPR, low, + zero32); + gsi_insert_after (gsi, assign2, GSI_NEW_STMT); + tree high_inc = make_temp_ssa_name (uint32_type_node, NULL, name); + gassign *assign3 = gimple_build_assign (high_inc, COND_EXPR, + is_zero, one32, zero32); + gsi_insert_after (gsi, assign3, GSI_NEW_STMT); + gcall *call2 = gimple_build_call (f, 3, addr_high, high_inc, + relaxed); + gsi_insert_after (gsi, call2, GSI_NEW_STMT); + } else { tree tmp1 = make_temp_ssa_name (type, NULL, name); @@ -689,15 +757,20 @@ tree_profiling (void) struct cgraph_node *node; /* Verify whether we can utilize atomic update operations. */ - bool can_support_atomic = false; + bool can_support_atomic = targetm.have_libatomic; unsigned HOST_WIDE_INT gcov_type_size = tree_to_uhwi (TYPE_SIZE_UNIT (get_gcov_type ())); - if (gcov_type_size == 4) - can_support_atomic - = HAVE_sync_compare_and_swapsi || HAVE_atomic_compare_and_swapsi; - else if (gcov_type_size == 8) - can_support_atomic - = HAVE_sync_compare_and_swapdi || HAVE_atomic_compare_and_swapdi; + bool have_atomic_4 + = HAVE_sync_compare_and_swapsi || HAVE_atomic_compare_and_swapsi; + bool have_atomic_8 + = HAVE_sync_compare_and_swapdi || HAVE_atomic_compare_and_swapdi; + if (!can_support_atomic) + { + if (gcov_type_size == 4) + can_support_atomic = have_atomic_4; + else if (gcov_type_size == 8) + can_support_atomic = have_atomic_8; + } if (flag_profile_update == PROFILE_UPDATE_ATOMIC && !can_support_atomic) @@ -710,6 +783,16 @@ tree_profiling (void) flag_profile_update = can_support_atomic ? PROFILE_UPDATE_ATOMIC : PROFILE_UPDATE_SINGLE; + if (flag_profile_update == PROFILE_UPDATE_ATOMIC) + { + if (gcov_type_size == 8 && !have_atomic_8 && have_atomic_4) + counter_update = COUNTER_UPDATE_ATOMIC_SPLIT; + else + counter_update = COUNTER_UPDATE_ATOMIC_BUILTIN; + } + else if (gcov_type_size == 8 && have_atomic_4) + counter_update = COUNTER_UPDATE_ATOMIC_PARTIAL; + /* This is a small-ipa pass that gets called only once, from cgraphunit.cc:ipa_passes(). */ gcc_assert (symtab->state == IPA_SSA); diff --git a/libgcc/libgcov.h b/libgcc/libgcov.h index 763118ea5b52..d04c070d0cfa 100644 --- a/libgcc/libgcov.h +++ b/libgcc/libgcov.h @@ -95,18 +95,14 @@ typedef unsigned gcov_type_unsigned __attribute__ ((mode (QI))); #define GCOV_LOCKED_WITH_LOCKING 0 #endif -#ifndef GCOV_SUPPORTS_ATOMIC /* Detect whether target can support atomic update of profilers. */ -#if __SIZEOF_LONG_LONG__ == 4 && __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 -#define GCOV_SUPPORTS_ATOMIC 1 -#else -#if __SIZEOF_LONG_LONG__ == 8 && __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 +#if (__SIZEOF_LONG_LONG__ == 4 && __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) || \ + (__SIZEOF_LONG_LONG__ == 8 && __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) || \ + defined (__LIBGCC_HAVE_LIBATOMIC) #define GCOV_SUPPORTS_ATOMIC 1 #else #define GCOV_SUPPORTS_ATOMIC 0 #endif -#endif -#endif /* In libgcov we need these functions to be extern, so prefix them with __gcov. In libgcov they must also be hidden so that the instance in From 56752a6bbfb3d3501d0899b23020c3e2eb58882c Mon Sep 17 00:00:00 2001 From: Xi Ruoyao Date: Fri, 17 Nov 2023 20:44:17 +0800 Subject: [PATCH 156/169] LoongArch: Fix internal error running "gcc -march=native" on LA664 On LA664, the PRID preset is ISA_BASE_LA64V110 but the base architecture is guessed ISA_BASE_LA64V100. This causes a warning to be outputed: cc1: warning: base architecture 'la64' differs from PRID preset '?' But we've not set the "?" above in loongarch_isa_base_strings, thus it's a nullptr and then an ICE is triggered. Add ISA_BASE_LA64V110 to genopts and initialize loongarch_isa_base_strings[ISA_BASE_LA64V110] correctly to fix the ICE. The warning itself will be fixed later. gcc/ChangeLog: * config/loongarch/genopts/loongarch-strings: (STR_ISA_BASE_LA64V110): Add. * config/loongarch/genopts/loongarch.opt.in: (ISA_BASE_LA64V110): Add. * config/loongarch/loongarch-def.c (loongarch_isa_base_strings): Initialize [ISA_BASE_LA64V110] to STR_ISA_BASE_LA64V110. * config/loongarch/loongarch.opt: Regenerate. * config/loongarch/loongarch-str.h: Regenerate. --- gcc/config/loongarch/genopts/loongarch-strings | 1 + gcc/config/loongarch/genopts/loongarch.opt.in | 3 +++ gcc/config/loongarch/loongarch-def.c | 1 + gcc/config/loongarch/loongarch-str.h | 1 + gcc/config/loongarch/loongarch.opt | 3 +++ 5 files changed, 9 insertions(+) diff --git a/gcc/config/loongarch/genopts/loongarch-strings b/gcc/config/loongarch/genopts/loongarch-strings index 7bc4824007e2..b2070c83ed00 100644 --- a/gcc/config/loongarch/genopts/loongarch-strings +++ b/gcc/config/loongarch/genopts/loongarch-strings @@ -30,6 +30,7 @@ STR_CPU_LA664 la664 # Base architecture STR_ISA_BASE_LA64V100 la64 +STR_ISA_BASE_LA64V110 la64v1.1 # -mfpu OPTSTR_ISA_EXT_FPU fpu diff --git a/gcc/config/loongarch/genopts/loongarch.opt.in b/gcc/config/loongarch/genopts/loongarch.opt.in index 00b4733d75bb..b274b3fb21ed 100644 --- a/gcc/config/loongarch/genopts/loongarch.opt.in +++ b/gcc/config/loongarch/genopts/loongarch.opt.in @@ -32,6 +32,9 @@ Basic ISAs of LoongArch: EnumValue Enum(isa_base) String(@@STR_ISA_BASE_LA64V100@@) Value(ISA_BASE_LA64V100) +EnumValue +Enum(isa_base) String(@@STR_ISA_BASE_LA64V110@@) Value(ISA_BASE_LA64V110) + ;; ISA extensions / adjustments Enum Name(isa_ext_fpu) Type(int) diff --git a/gcc/config/loongarch/loongarch-def.c b/gcc/config/loongarch/loongarch-def.c index 067629141b6c..f22d488acb24 100644 --- a/gcc/config/loongarch/loongarch-def.c +++ b/gcc/config/loongarch/loongarch-def.c @@ -165,6 +165,7 @@ loongarch_cpu_multipass_dfa_lookahead[N_TUNE_TYPES] = { const char* loongarch_isa_base_strings[N_ISA_BASE_TYPES] = { [ISA_BASE_LA64V100] = STR_ISA_BASE_LA64V100, + [ISA_BASE_LA64V110] = STR_ISA_BASE_LA64V110, }; const char* diff --git a/gcc/config/loongarch/loongarch-str.h b/gcc/config/loongarch/loongarch-str.h index fc4f41bfc1eb..114dbc692d75 100644 --- a/gcc/config/loongarch/loongarch-str.h +++ b/gcc/config/loongarch/loongarch-str.h @@ -33,6 +33,7 @@ along with GCC; see the file COPYING3. If not see #define STR_CPU_LA664 "la664" #define STR_ISA_BASE_LA64V100 "la64" +#define STR_ISA_BASE_LA64V110 "la64v1.1" #define OPTSTR_ISA_EXT_FPU "fpu" #define STR_NONE "none" diff --git a/gcc/config/loongarch/loongarch.opt b/gcc/config/loongarch/loongarch.opt index 7f129e53ba5d..350ca30d2321 100644 --- a/gcc/config/loongarch/loongarch.opt +++ b/gcc/config/loongarch/loongarch.opt @@ -39,6 +39,9 @@ Basic ISAs of LoongArch: EnumValue Enum(isa_base) String(la64) Value(ISA_BASE_LA64V100) +EnumValue +Enum(isa_base) String(la64v1.1) Value(ISA_BASE_LA64V110) + ;; ISA extensions / adjustments Enum Name(isa_ext_fpu) Type(int) From 8835242025a604c0c62812e971f10aaef3604408 Mon Sep 17 00:00:00 2001 From: Xi Ruoyao Date: Thu, 16 Nov 2023 08:56:58 +0800 Subject: [PATCH 157/169] LoongArch: genopts: Add infrastructure to generate code for new features in ISA evolution LoongArch v1.10 introduced the concept of ISA evolution. During ISA evolution, many independent features can be added and enumerated via CPUCFG. Add a data file into genopts storing the CPUCFG word, bit, the name of the command line option controlling if this feature should be used for compilation, and the text description. Make genstr.sh process these info and add the command line options into loongarch.opt and loongarch-str.h, and generate a new file loongarch-cpucfg-map.h for mapping CPUCFG output to the corresponding option. When handling -march=native, use the information in loongarch-cpucfg-map.h to generate the corresponding option mask. Enable the features implied by -march setting unless the user has explicitly disabled the feature. The added options (-mdiv32 and -mld-seq-sa) are not really handled yet. They'll be used in the following patches. gcc/ChangeLog: * config/loongarch/genopts/isa-evolution.in: New data file. * config/loongarch/genopts/genstr.sh: Translate info in isa-evolution.in when generating loongarch-str.h, loongarch.opt, and loongarch-cpucfg-map.h. * config/loongarch/genopts/loongarch.opt.in (isa_evolution): New variable. * config/loongarch/t-loongarch: (loongarch-cpucfg-map.h): New rule. (loongarch-str.h): Depend on isa-evolution.in. (loongarch.opt): Depend on isa-evolution.in. (loongarch-cpu.o): Depend on loongarch-cpucfg-map.h. * config/loongarch/loongarch-str.h: Regenerate. * config/loongarch/loongarch-def.h (loongarch_isa): Add field for evolution features. Add helper function to enable features in this field. Probe native CPU capability and save the corresponding options into preset. * config/loongarch/loongarch-cpu.cc (fill_native_cpu_config): Probe native CPU capability and save the corresponding options into preset. (cache_cpucfg): Simplify with C++11-style for loop. (cpucfg_useful_idx, N_CPUCFG_WORDS): Move to ... * config/loongarch/loongarch.cc (loongarch_option_override_internal): Enable the ISA evolution feature options implied by -march and not explicitly disabled. (loongarch_asm_code_end): New function, print ISA information as comments in the assembly if -fverbose-asm. It makes easier to debug things like -march=native. (TARGET_ASM_CODE_END): Define. * config/loongarch/loongarch.opt: Regenerate. * config/loongarch/loongarch-cpucfg-map.h: Generate. (cpucfg_useful_idx, N_CPUCFG_WORDS) ... here. --- gcc/config/loongarch/genopts/genstr.sh | 92 ++++++++++++++++++- gcc/config/loongarch/genopts/isa-evolution.in | 2 + gcc/config/loongarch/genopts/loongarch.opt.in | 7 ++ gcc/config/loongarch/loongarch-cpu.cc | 46 +++++----- gcc/config/loongarch/loongarch-cpucfg-map.h | 48 ++++++++++ gcc/config/loongarch/loongarch-def.h | 7 ++ gcc/config/loongarch/loongarch-str.h | 7 +- gcc/config/loongarch/loongarch.cc | 31 +++++++ gcc/config/loongarch/loongarch.opt | 20 +++- gcc/config/loongarch/t-loongarch | 21 ++++- 10 files changed, 245 insertions(+), 36 deletions(-) create mode 100644 gcc/config/loongarch/genopts/isa-evolution.in create mode 100644 gcc/config/loongarch/loongarch-cpucfg-map.h diff --git a/gcc/config/loongarch/genopts/genstr.sh b/gcc/config/loongarch/genopts/genstr.sh index 04e785576bbf..cc83496ae380 100755 --- a/gcc/config/loongarch/genopts/genstr.sh +++ b/gcc/config/loongarch/genopts/genstr.sh @@ -25,8 +25,8 @@ cd "$(dirname "$0")" # Generate a header containing definitions from the string table. gen_defines() { cat <. */ + +#ifndef LOONGARCH_CPUCFG_MAP_H +#define LOONGARCH_CPUCFG_MAP_H + +#include "options.h" + +static constexpr struct { + int cpucfg_word; + unsigned int cpucfg_bit; + HOST_WIDE_INT isa_evolution_bit; +} cpucfg_map[] = { +EOF + + # Generate the strings from isa-evolution.in. + awk '{ + gsub(/-/, "_", $3) + print(" { "$1", 1u << "$2", OPTION_MASK_ISA_"toupper($3)" },") + }' isa-evolution.in + + echo "};" + echo + echo "static constexpr int cpucfg_useful_idx[] = {" + + awk 'BEGIN { print(" 0,\n 1,\n 2,\n 16,\n 17,\n 18,\n 19,") } + {if ($1+0 > max+0) max=$1; print(" "$1",")}' \ + isa-evolution.in | sort -n | uniq + + echo "};" + echo "" + + awk 'BEGIN { max=19 } + { if ($1+0 > max+0) max=$1 } + END { print "static constexpr int N_CPUCFG_WORDS = "1+max";" }' \ + isa-evolution.in + + echo "#endif /* LOONGARCH_CPUCFG_MAP_H */" } main() { case "$1" in + cpucfg-map) gen_cpucfg_map;; header) gen_defines;; opt) gen_options;; - *) echo "Unknown Command: \"$1\". Available: header, opt"; exit 1;; + *) echo "Unknown Command: \"$1\". Available: cpucfg-map, header, opt"; exit 1;; esac } diff --git a/gcc/config/loongarch/genopts/isa-evolution.in b/gcc/config/loongarch/genopts/isa-evolution.in new file mode 100644 index 000000000000..e58f0d6a1a18 --- /dev/null +++ b/gcc/config/loongarch/genopts/isa-evolution.in @@ -0,0 +1,2 @@ +2 26 div32 Support div.w[u] and mod.w[u] instructions with inputs not sign-extended. +3 23 ld-seq-sa Do not need load-load barriers (dbar 0x700). diff --git a/gcc/config/loongarch/genopts/loongarch.opt.in b/gcc/config/loongarch/genopts/loongarch.opt.in index b274b3fb21ed..8af6cc6f532e 100644 --- a/gcc/config/loongarch/genopts/loongarch.opt.in +++ b/gcc/config/loongarch/genopts/loongarch.opt.in @@ -247,3 +247,10 @@ Target Undocumented Joined UInteger Var(loongarch_vect_issue_info) Init(4) Integ Indicate how many non memory access vector instructions can be issued per cycle, it's used in unroll factor determination for autovectorizer. The default value is 4. + +; Features added during ISA evolution. This concept is different from ISA +; extension, read Section 1.5 of LoongArch v1.10 Volume 1 for the +; explanation. These features may be implemented and enumerated with +; CPUCFG independantly, so we use bit flags to specify them. +Variable +HOST_WIDE_INT isa_evolution = 0 diff --git a/gcc/config/loongarch/loongarch-cpu.cc b/gcc/config/loongarch/loongarch-cpu.cc index f3a134141439..f41e175257a4 100644 --- a/gcc/config/loongarch/loongarch-cpu.cc +++ b/gcc/config/loongarch/loongarch-cpu.cc @@ -29,12 +29,11 @@ along with GCC; see the file COPYING3. If not see #include "loongarch-def.h" #include "loongarch-opts.h" #include "loongarch-cpu.h" +#include "loongarch-cpucfg-map.h" #include "loongarch-str.h" /* Native CPU detection with "cpucfg" */ -#define N_CPUCFG_WORDS 0x15 static uint32_t cpucfg_cache[N_CPUCFG_WORDS] = { 0 }; -static const int cpucfg_useful_idx[] = {0, 1, 2, 16, 17, 18, 19}; static uint32_t read_cpucfg_word (int wordno) @@ -56,11 +55,8 @@ read_cpucfg_word (int wordno) void cache_cpucfg (void) { - for (unsigned int i = 0; i < sizeof (cpucfg_useful_idx) / sizeof (int); i++) - { - cpucfg_cache[cpucfg_useful_idx[i]] - = read_cpucfg_word (cpucfg_useful_idx[i]); - } + for (int idx: cpucfg_useful_idx) + cpucfg_cache[idx] = read_cpucfg_word (idx); } uint32_t @@ -125,11 +121,12 @@ fill_native_cpu_config (struct loongarch_target *tgt) int tmp; tgt->cpu_arch = native_cpu_type; + auto &preset = loongarch_cpu_default_isa[tgt->cpu_arch]; + /* Fill: loongarch_cpu_default_isa[tgt->cpu_arch].base With: base architecture (ARCH) At: cpucfg_words[1][1:0] */ - #define PRESET_ARCH (loongarch_cpu_default_isa[tgt->cpu_arch].base) switch (cpucfg_cache[1] & 0x3) { case 0x02: @@ -144,19 +141,18 @@ fill_native_cpu_config (struct loongarch_target *tgt) } /* Check consistency with PRID presets. */ - if (native_cpu_type != CPU_NATIVE && tmp != PRESET_ARCH) + if (native_cpu_type != CPU_NATIVE && tmp != preset.base) warning (0, "base architecture %qs differs from PRID preset %qs", loongarch_isa_base_strings[tmp], - loongarch_isa_base_strings[PRESET_ARCH]); + loongarch_isa_base_strings[preset.base]); /* Use the native value anyways. */ - PRESET_ARCH = tmp; + preset.base = tmp; /* Fill: loongarch_cpu_default_isa[tgt->cpu_arch].fpu With: FPU type (FP, FP_SP, FP_DP) At: cpucfg_words[2][2:0] */ - #define PRESET_FPU (loongarch_cpu_default_isa[tgt->cpu_arch].fpu) switch (cpucfg_cache[2] & 0x7) { case 0x07: @@ -179,20 +175,19 @@ fill_native_cpu_config (struct loongarch_target *tgt) } /* Check consistency with PRID presets. */ - if (native_cpu_type != CPU_NATIVE && tmp != PRESET_FPU) + if (native_cpu_type != CPU_NATIVE && tmp != preset.fpu) warning (0, "floating-point unit %qs differs from PRID preset %qs", loongarch_isa_ext_strings[tmp], - loongarch_isa_ext_strings[PRESET_FPU]); + loongarch_isa_ext_strings[preset.fpu]); /* Use the native value anyways. */ - PRESET_FPU = tmp; + preset.fpu = tmp; /* Fill: loongarch_cpu_default_isa[CPU_NATIVE].simd With: SIMD extension type (LSX, LASX) At: cpucfg_words[2][7:6] */ - #define PRESET_SIMD (loongarch_cpu_default_isa[tgt->cpu_arch].simd) switch (cpucfg_cache[2] & 0xc0) { case 0xc0: @@ -219,14 +214,19 @@ fill_native_cpu_config (struct loongarch_target *tgt) /* Check consistency with PRID presets. */ /* - if (native_cpu_type != CPU_NATIVE && tmp != PRESET_SIMD) + if (native_cpu_type != CPU_NATIVE && tmp != preset.simd) warning (0, "SIMD extension %qs differs from PRID preset %qs", loongarch_isa_ext_strings[tmp], - loongarch_isa_ext_strings[PRESET_SIMD]); + loongarch_isa_ext_strings[preset.simd]); */ /* Use the native value anyways. */ - PRESET_SIMD = tmp; + preset.simd = tmp; + + /* Features added during ISA evolution. */ + for (const auto &entry: cpucfg_map) + if (cpucfg_cache[entry.cpucfg_word] & entry.cpucfg_bit) + preset.evolution |= entry.isa_evolution_bit; } if (tune_native_p) @@ -237,7 +237,7 @@ fill_native_cpu_config (struct loongarch_target *tgt) With: cache size info At: cpucfg_words[16:20][31:0] */ - #define PRESET_CACHE (loongarch_cpu_cache[tgt->cpu_tune]) + auto &preset_cache = loongarch_cpu_cache[tgt->cpu_tune]; struct loongarch_cache native_cache; int l1d_present = 0, l1u_present = 0; int l2d_present = 0; @@ -268,8 +268,8 @@ fill_native_cpu_config (struct loongarch_target *tgt) >> 10; /* in kibibytes */ /* Use the native value anyways. */ - PRESET_CACHE.l1d_line_size = native_cache.l1d_line_size; - PRESET_CACHE.l1d_size = native_cache.l1d_size; - PRESET_CACHE.l2d_size = native_cache.l2d_size; + preset_cache.l1d_line_size = native_cache.l1d_line_size; + preset_cache.l1d_size = native_cache.l1d_size; + preset_cache.l2d_size = native_cache.l2d_size; } } diff --git a/gcc/config/loongarch/loongarch-cpucfg-map.h b/gcc/config/loongarch/loongarch-cpucfg-map.h new file mode 100644 index 000000000000..0c078c397868 --- /dev/null +++ b/gcc/config/loongarch/loongarch-cpucfg-map.h @@ -0,0 +1,48 @@ +/* Generated automatically by "genstr" from "isa-evolution.in". + Please do not edit this file directly. + + Copyright (C) 2023 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#ifndef LOONGARCH_CPUCFG_MAP_H +#define LOONGARCH_CPUCFG_MAP_H + +#include "options.h" + +static constexpr struct { + int cpucfg_word; + unsigned int cpucfg_bit; + HOST_WIDE_INT isa_evolution_bit; +} cpucfg_map[] = { + { 2, 1u << 26, OPTION_MASK_ISA_DIV32 }, + { 3, 1u << 23, OPTION_MASK_ISA_LD_SEQ_SA }, +}; + +static constexpr int cpucfg_useful_idx[] = { + 0, + 1, + 2, + 3, + 16, + 17, + 18, + 19, +}; + +static constexpr int N_CPUCFG_WORDS = 20; +#endif /* LOONGARCH_CPUCFG_MAP_H */ diff --git a/gcc/config/loongarch/loongarch-def.h b/gcc/config/loongarch/loongarch-def.h index b319cded4567..6123c8e0f19b 100644 --- a/gcc/config/loongarch/loongarch-def.h +++ b/gcc/config/loongarch/loongarch-def.h @@ -46,6 +46,7 @@ along with GCC; see the file COPYING3. If not see #ifndef LOONGARCH_DEF_H #define LOONGARCH_DEF_H +#include #include "loongarch-tune.h" #ifdef __cplusplus @@ -121,6 +122,12 @@ struct loongarch_isa int base; /* ISA_BASE_ */ int fpu; /* ISA_EXT_FPU_ */ int simd; /* ISA_EXT_SIMD_ */ + + /* ISA evolution features implied by -march=, for -march=native probed + via CPUCFG. The features implied by base may be not included here. + + Using int64_t instead of HOST_WIDE_INT for C compatibility. */ + int64_t evolution; }; struct loongarch_abi diff --git a/gcc/config/loongarch/loongarch-str.h b/gcc/config/loongarch/loongarch-str.h index 114dbc692d75..889962e9ab0e 100644 --- a/gcc/config/loongarch/loongarch-str.h +++ b/gcc/config/loongarch/loongarch-str.h @@ -1,5 +1,5 @@ -/* Generated automatically by "genstr" from "loongarch-strings". - Please do not edit this file directly. +/* Generated automatically by "genstr" from "loongarch-strings" and + "isa-evolution.in". Please do not edit this file directly. Copyright (C) 2021-2023 Free Software Foundation, Inc. Contributed by Loongson Ltd. @@ -69,4 +69,7 @@ along with GCC; see the file COPYING3. If not see #define STR_EXPLICIT_RELOCS_NONE "none" #define STR_EXPLICIT_RELOCS_ALWAYS "always" +#define OPTSTR_DIV32 "div32" +#define OPTSTR_LD_SEQ_SA "ld-seq-sa" + #endif /* LOONGARCH_STR_H */ diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index 7da7a60ddf52..9a2da89db789 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -7455,6 +7455,10 @@ loongarch_option_override_internal (struct gcc_options *opts, if (loongarch_branch_cost == 0) loongarch_branch_cost = loongarch_cost->branch_cost; + /* If the user hasn't disabled a feature added during ISA evolution, + use the processor's default. */ + isa_evolution |= (la_target.isa.evolution & + ~global_options_set.x_isa_evolution); /* Enable sw prefetching at -O3 and higher. */ if (opts->x_flag_prefetch_loop_arrays < 0 @@ -11434,6 +11438,30 @@ loongarch_builtin_support_vector_misalignment (machine_mode mode, is_packed); } +/* If -fverbose-asm, dump some info for debugging. */ +static void +loongarch_asm_code_end (void) +{ +#define DUMP_FEATURE(PRED) \ + fprintf (asm_out_file, "%s %s: %s\n", ASM_COMMENT_START, #PRED, \ + (PRED) ? "enabled" : "disabled") + + if (flag_verbose_asm) + { + fprintf (asm_out_file, "\n%s CPU: %s\n", ASM_COMMENT_START, + loongarch_cpu_strings [la_target.cpu_arch]); + fprintf (asm_out_file, "%s Tune: %s\n", ASM_COMMENT_START, + loongarch_cpu_strings [la_target.cpu_tune]); + fprintf (asm_out_file, "%s Base ISA: %s\n", ASM_COMMENT_START, + loongarch_isa_base_strings [la_target.isa.base]); + DUMP_FEATURE (TARGET_DIV32); + DUMP_FEATURE (TARGET_LD_SEQ_SA); + } + + fputs ("\n\n", asm_out_file); +#undef DUMP_FEATURE +} + /* Initialize the GCC target structure. */ #undef TARGET_ASM_ALIGNED_HI_OP #define TARGET_ASM_ALIGNED_HI_OP "\t.half\t" @@ -11453,6 +11481,9 @@ loongarch_builtin_support_vector_misalignment (machine_mode mode, #undef TARGET_ASM_FUNCTION_RODATA_SECTION #define TARGET_ASM_FUNCTION_RODATA_SECTION loongarch_function_rodata_section +#undef TARGET_ASM_CODE_END +#define TARGET_ASM_CODE_END loongarch_asm_code_end + #undef TARGET_SCHED_INIT #define TARGET_SCHED_INIT loongarch_sched_init #undef TARGET_SCHED_REORDER diff --git a/gcc/config/loongarch/loongarch.opt b/gcc/config/loongarch/loongarch.opt index 350ca30d2321..a39eddc108bc 100644 --- a/gcc/config/loongarch/loongarch.opt +++ b/gcc/config/loongarch/loongarch.opt @@ -1,9 +1,10 @@ ; Generated by "genstr" from the template "loongarch.opt.in" -; and definitions from "loongarch-strings". +; and definitions from "loongarch-strings" and "isa-evolution.in". ; ; Please do not edit this file directly. ; It will be automatically updated during a gcc build -; if you change "loongarch.opt.in" or "loongarch-strings". +; if you change "loongarch.opt.in", "loongarch-strings", or +; "isa-evolution.in". ; ; Copyright (C) 2021-2023 Free Software Foundation, Inc. ; @@ -254,3 +255,18 @@ Target Undocumented Joined UInteger Var(loongarch_vect_issue_info) Init(4) Integ Indicate how many non memory access vector instructions can be issued per cycle, it's used in unroll factor determination for autovectorizer. The default value is 4. + +; Features added during ISA evolution. This concept is different from ISA +; extension, read Section 1.5 of LoongArch v1.10 Volume 1 for the +; explanation. These features may be implemented and enumerated with +; CPUCFG independantly, so we use bit flags to specify them. +Variable +HOST_WIDE_INT isa_evolution = 0 + +mdiv32 +Target Mask(ISA_DIV32) Var(isa_evolution) +Support div.w[u] and mod.w[u] instructions with inputs not sign-extended. + +mld-seq-sa +Target Mask(ISA_LD_SEQ_SA) Var(isa_evolution) +Do not need load-load barriers (dbar 0x700). diff --git a/gcc/config/loongarch/t-loongarch b/gcc/config/loongarch/t-loongarch index 667a6bb3b50f..7e65bb6e2a85 100644 --- a/gcc/config/loongarch/t-loongarch +++ b/gcc/config/loongarch/t-loongarch @@ -18,8 +18,9 @@ GTM_H += loongarch-multilib.h -OPTIONS_H_EXTRA += $(srcdir)/config/loongarch/loongarch-def.h \ - $(srcdir)/config/loongarch/loongarch-tune.h +OPTIONS_H_EXTRA += $(srcdir)/config/loongarch/loongarch-def.h \ + $(srcdir)/config/loongarch/loongarch-tune.h \ + $(srcdir)/config/loongarch/loongarch-cpucfg-map.h # Canonical target triplet from config.gcc LA_MULTIARCH_TRIPLET = $(patsubst LA_MULTIARCH_TRIPLET=%,%,$\ @@ -31,7 +32,8 @@ LA_STR_H = $(srcdir)/config/loongarch/loongarch-str.h # String definition header $(LA_STR_H): s-loongarch-str ; @true s-loongarch-str: $(srcdir)/config/loongarch/genopts/genstr.sh \ - $(srcdir)/config/loongarch/genopts/loongarch-strings + $(srcdir)/config/loongarch/genopts/loongarch-strings \ + $(srcdir)/config/loongarch/genopts/isa-evolution.in $(SHELL) $(srcdir)/config/loongarch/genopts/genstr.sh header \ $(srcdir)/config/loongarch/genopts/loongarch-strings > \ tmp-loongarch-str.h @@ -58,7 +60,8 @@ loongarch-driver.o : $(srcdir)/config/loongarch/loongarch-driver.cc $(LA_STR_H) loongarch-opts.o: $(srcdir)/config/loongarch/loongarch-opts.cc $(LA_STR_H) $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< -loongarch-cpu.o: $(srcdir)/config/loongarch/loongarch-cpu.cc $(LA_STR_H) +loongarch-cpu.o: $(srcdir)/config/loongarch/loongarch-cpu.cc $(LA_STR_H) \ + $(srcdir)/config/loongarch/loongarch-cpucfg-map.h $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< loongarch-def.o: $(srcdir)/config/loongarch/loongarch-def.c $(LA_STR_H) @@ -67,6 +70,7 @@ loongarch-def.o: $(srcdir)/config/loongarch/loongarch-def.c $(LA_STR_H) $(srcdir)/config/loongarch/loongarch.opt: s-loongarch-opt ; @true s-loongarch-opt: $(srcdir)/config/loongarch/genopts/genstr.sh \ $(srcdir)/config/loongarch/genopts/loongarch.opt.in \ + $(srcdir)/config/loongarch/genopts/isa-evolution.in \ $(srcdir)/config/loongarch/genopts/loongarch-strings $(LA_STR_H) $(SHELL) $(srcdir)/config/loongarch/genopts/genstr.sh opt \ $(srcdir)/config/loongarch/genopts/loongarch.opt.in \ @@ -74,3 +78,12 @@ s-loongarch-opt: $(srcdir)/config/loongarch/genopts/genstr.sh \ $(SHELL) $(srcdir)/../move-if-change tmp-loongarch.opt \ $(srcdir)/config/loongarch/loongarch.opt $(STAMP) s-loongarch-opt + +$(srcdir)/config/loongarch/loongarch-cpucfg-map.h: s-loongarch-cpucfg-map + @true +s-loongarch-cpucfg-map: $(srcdir)/config/loongarch/genopts/genstr.sh \ + $(srcdir)/config/loongarch/genopts/isa-evolution.in + $(SHELL) $< cpucfg-map > tmp-cpucfg.h + $(SHELL) $(srcdir)/../move-if-change tmp-cpucfg.h \ + $(srcdir)/config/loongarch/loongarch-cpucfg-map.h + $(STAMP) $@ From ccead01d9bd253cb21b61884d4d20f42a2feee31 Mon Sep 17 00:00:00 2001 From: Xi Ruoyao Date: Sat, 18 Nov 2023 03:19:07 +0800 Subject: [PATCH 158/169] LoongArch: Add evolution features of base ISA revisions * config/loongarch/loongarch-def.h: (loongarch_isa_base_features): Declare. Define it in ... * config/loongarch/loongarch-cpu.cc (loongarch_isa_base_features): ... here. (fill_native_cpu_config): If we know the base ISA of the CPU model from PRID, use it instead of la64 (v1.0). Check if all expected features of this base ISA is available, emit a warning if not. * config/loongarch/loongarch-opts.cc (config_target_isa): Enable the features implied by the base ISA if not -march=native. --- gcc/config/loongarch/loongarch-cpu.cc | 60 ++++++++++++++++++-------- gcc/config/loongarch/loongarch-def.h | 5 +++ gcc/config/loongarch/loongarch-opts.cc | 3 ++ 3 files changed, 51 insertions(+), 17 deletions(-) diff --git a/gcc/config/loongarch/loongarch-cpu.cc b/gcc/config/loongarch/loongarch-cpu.cc index f41e175257a4..7acf1a9121da 100644 --- a/gcc/config/loongarch/loongarch-cpu.cc +++ b/gcc/config/loongarch/loongarch-cpu.cc @@ -32,6 +32,19 @@ along with GCC; see the file COPYING3. If not see #include "loongarch-cpucfg-map.h" #include "loongarch-str.h" +/* loongarch_isa_base_features defined here instead of loongarch-def.c + because we need to use options.h. Pay attention on the order of elements + in the initializer becaue ISO C++ does not allow C99 designated + initializers! */ + +#define ISA_BASE_LA64V110_FEATURES \ + (OPTION_MASK_ISA_DIV32 | OPTION_MASK_ISA_LD_SEQ_SA) + +int64_t loongarch_isa_base_features[N_ISA_BASE_TYPES] = { + /* [ISA_BASE_LA64V100] = */ 0, + /* [ISA_BASE_LA64V110] = */ ISA_BASE_LA64V110_FEATURES, +}; + /* Native CPU detection with "cpucfg" */ static uint32_t cpucfg_cache[N_CPUCFG_WORDS] = { 0 }; @@ -127,24 +140,22 @@ fill_native_cpu_config (struct loongarch_target *tgt) With: base architecture (ARCH) At: cpucfg_words[1][1:0] */ - switch (cpucfg_cache[1] & 0x3) - { - case 0x02: - tmp = ISA_BASE_LA64V100; - break; + if (native_cpu_type != CPU_NATIVE) + tmp = loongarch_cpu_default_isa[native_cpu_type].base; + else + switch (cpucfg_cache[1] & 0x3) + { + case 0x02: + tmp = ISA_BASE_LA64V100; + break; - default: - fatal_error (UNKNOWN_LOCATION, - "unknown native base architecture %<0x%x%>, " - "%qs failed", (unsigned int) (cpucfg_cache[1] & 0x3), - "-m" OPTSTR_ARCH "=" STR_CPU_NATIVE); - } - - /* Check consistency with PRID presets. */ - if (native_cpu_type != CPU_NATIVE && tmp != preset.base) - warning (0, "base architecture %qs differs from PRID preset %qs", - loongarch_isa_base_strings[tmp], - loongarch_isa_base_strings[preset.base]); + default: + fatal_error (UNKNOWN_LOCATION, + "unknown native base architecture %<0x%x%>, " + "%qs failed", + (unsigned int) (cpucfg_cache[1] & 0x3), + "-m" OPTSTR_ARCH "=" STR_CPU_NATIVE); + } /* Use the native value anyways. */ preset.base = tmp; @@ -227,6 +238,21 @@ fill_native_cpu_config (struct loongarch_target *tgt) for (const auto &entry: cpucfg_map) if (cpucfg_cache[entry.cpucfg_word] & entry.cpucfg_bit) preset.evolution |= entry.isa_evolution_bit; + + if (native_cpu_type != CPU_NATIVE) + { + /* Check if the local CPU really supports the features of the base + ISA of probed native_cpu_type. If any feature is not detected, + either GCC or the hardware is buggy. */ + auto base_isa_feature = loongarch_isa_base_features[preset.base]; + if ((preset.evolution & base_isa_feature) != base_isa_feature) + warning (0, + "detected base architecture %qs, but some of its " + "features are not detected; the detected base " + "architecture may be unreliable, only detected " + "features will be enabled", + loongarch_isa_base_strings[preset.base]); + } } if (tune_native_p) diff --git a/gcc/config/loongarch/loongarch-def.h b/gcc/config/loongarch/loongarch-def.h index 6123c8e0f19b..af7bd635d6ea 100644 --- a/gcc/config/loongarch/loongarch-def.h +++ b/gcc/config/loongarch/loongarch-def.h @@ -55,12 +55,17 @@ extern "C" { /* enum isa_base */ extern const char* loongarch_isa_base_strings[]; + /* LoongArch V1.00. */ #define ISA_BASE_LA64V100 0 /* LoongArch V1.10. */ #define ISA_BASE_LA64V110 1 #define N_ISA_BASE_TYPES 2 +/* Unlike other arrays, this is defined in loongarch-cpu.cc. The problem is + we cannot use the C++ header options.h in loongarch-def.c. */ +extern int64_t loongarch_isa_base_features[]; + /* enum isa_ext_* */ extern const char* loongarch_isa_ext_strings[]; #define ISA_EXT_NONE 0 diff --git a/gcc/config/loongarch/loongarch-opts.cc b/gcc/config/loongarch/loongarch-opts.cc index 67a59152a013..b5836f198c0b 100644 --- a/gcc/config/loongarch/loongarch-opts.cc +++ b/gcc/config/loongarch/loongarch-opts.cc @@ -284,6 +284,9 @@ config_target_isa: /* Get default ISA from "-march" or its default value. */ t.isa = loongarch_cpu_default_isa[t.cpu_arch]; + if (t.cpu_arch != CPU_NATIVE) + t.isa.evolution |= loongarch_isa_base_features[t.isa.base]; + /* Apply incremental changes. */ /* "-march=native" overrides the default FPU type. */ From 5d3d60555346edd93a544d4f80a1eb1f8117808c Mon Sep 17 00:00:00 2001 From: Xi Ruoyao Date: Thu, 16 Nov 2023 09:21:47 +0800 Subject: [PATCH 159/169] LoongArch: Take the advantage of -mdiv32 if it's enabled With -mdiv32, we can assume div.w[u] and mod.w[u] works on low 32 bits of a 64-bit GPR even if it's not sign-extended. gcc/ChangeLog: * config/loongarch/loongarch.md (DIV): New mode iterator. (3): Don't expand if TARGET_DIV32. (di3_fake): Disable if TARGET_DIV32. (*3): Allow SImode if TARGET_DIV32. (si3_extended): New insn if TARGET_DIV32. gcc/testsuite/ChangeLog: * gcc.target/loongarch/div-div32.c: New test. * gcc.target/loongarch/div-no-div32.c: New test. --- gcc/config/loongarch/loongarch.md | 31 ++++++++++++++++--- .../gcc.target/loongarch/div-div32.c | 31 +++++++++++++++++++ .../gcc.target/loongarch/div-no-div32.c | 11 +++++++ 3 files changed, 68 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.target/loongarch/div-div32.c create mode 100644 gcc/testsuite/gcc.target/loongarch/div-no-div32.c diff --git a/gcc/config/loongarch/loongarch.md b/gcc/config/loongarch/loongarch.md index f0b6ae3e2a27..cd4ed495697e 100644 --- a/gcc/config/loongarch/loongarch.md +++ b/gcc/config/loongarch/loongarch.md @@ -408,6 +408,10 @@ ;; st.w. (define_mode_iterator ST_ANY [QHWD ANYF]) +;; A mode for anything legal as a input of a div or mod instruction. +(define_mode_iterator DIV [(DI "TARGET_64BIT") + (SI "!TARGET_64BIT || TARGET_DIV32")]) + ;; In GPR templates, a string like "mul." will expand to "mul.w" in the ;; 32-bit version and "mul.d" in the 64-bit version. (define_mode_attr d [(SI "w") (DI "d")]) @@ -914,7 +918,7 @@ (match_operand:GPR 2 "register_operand")))] "" { - if (GET_MODE (operands[0]) == SImode && TARGET_64BIT) + if (GET_MODE (operands[0]) == SImode && TARGET_64BIT && !TARGET_DIV32) { rtx reg1 = gen_reg_rtx (DImode); rtx reg2 = gen_reg_rtx (DImode); @@ -934,9 +938,9 @@ }) (define_insn "*3" - [(set (match_operand:X 0 "register_operand" "=r,&r,&r") - (any_div:X (match_operand:X 1 "register_operand" "r,r,0") - (match_operand:X 2 "register_operand" "r,r,r")))] + [(set (match_operand:DIV 0 "register_operand" "=r,&r,&r") + (any_div:DIV (match_operand:DIV 1 "register_operand" "r,r,0") + (match_operand:DIV 2 "register_operand" "r,r,r")))] "" { return loongarch_output_division (".\t%0,%1,%2", operands); @@ -949,6 +953,23 @@ (const_string "yes") (const_string "no")))]) +(define_insn "si3_extended" + [(set (match_operand:DI 0 "register_operand" "=r,&r,&r") + (sign_extend + (any_div:SI (match_operand:SI 1 "register_operand" "r,r,0") + (match_operand:SI 2 "register_operand" "r,r,r"))))] + "TARGET_64BIT && TARGET_DIV32" +{ + return loongarch_output_division (".w\t%0,%1,%2", operands); +} + [(set_attr "type" "idiv") + (set_attr "mode" "SI") + (set (attr "enabled") + (if_then_else + (match_test "!!which_alternative == loongarch_check_zero_div_p()") + (const_string "yes") + (const_string "no")))]) + (define_insn "di3_fake" [(set (match_operand:DI 0 "register_operand" "=r,&r,&r") (sign_extend:DI @@ -957,7 +978,7 @@ (any_div:DI (match_operand:DI 1 "register_operand" "r,r,0") (match_operand:DI 2 "register_operand" "r,r,r")) 0)] UNSPEC_FAKE_ANY_DIV)))] - "TARGET_64BIT" + "TARGET_64BIT && !TARGET_DIV32" { return loongarch_output_division (".w\t%0,%1,%2", operands); } diff --git a/gcc/testsuite/gcc.target/loongarch/div-div32.c b/gcc/testsuite/gcc.target/loongarch/div-div32.c new file mode 100644 index 000000000000..8b1f686eca23 --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/div-div32.c @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=loongarch64 -mabi=lp64d -mdiv32" } */ +/* { dg-final { scan-assembler "div\.w" } } */ +/* { dg-final { scan-assembler "div\.wu" } } */ +/* { dg-final { scan-assembler "mod\.w" } } */ +/* { dg-final { scan-assembler "mod\.wu" } } */ +/* { dg-final { scan-assembler-not "slli\.w.*,0" } } */ + +int +divw (long a, long b) +{ + return (int)a / (int)b; +} + +unsigned int +divwu (long a, long b) +{ + return (unsigned int)a / (unsigned int)b; +} + +int +modw (long a, long b) +{ + return (int)a % (int)b; +} + +unsigned int +modwu (long a, long b) +{ + return (unsigned int)a % (unsigned int)b; +} diff --git a/gcc/testsuite/gcc.target/loongarch/div-no-div32.c b/gcc/testsuite/gcc.target/loongarch/div-no-div32.c new file mode 100644 index 000000000000..f0f697ba589d --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/div-no-div32.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=loongarch64 -mabi=lp64d" } */ +/* { dg-final { scan-assembler "div\.w" } } */ +/* { dg-final { scan-assembler "div\.wu" } } */ +/* { dg-final { scan-assembler "mod\.w" } } */ +/* { dg-final { scan-assembler "mod\.wu" } } */ + +/* -mno-div32 should be implied by -march=loongarch64. */ +/* { dg-final { scan-assembler-times "slli\.w\[^\n\]*0" 8 } } */ + +#include "div-div32.c" From 181ed726b22afc3e2897447d0631ef0bcc2d106d Mon Sep 17 00:00:00 2001 From: Xi Ruoyao Date: Thu, 16 Nov 2023 09:30:14 +0800 Subject: [PATCH 160/169] LoongArch: Don't emit dbar 0x700 if -mld-seq-sa This option (CPUCFG word 0x3 bit 23) means "the hardware guarantee that two loads on the same address won't be reordered with each other". Thus we can omit the "load-load" barrier dbar 0x700. This is only a micro-optimization because dbar 0x700 is already treated as nop if the hardware supports LD_SEQ_SA. gcc/ChangeLog: * config/loongarch/loongarch.cc (loongarch_print_operand): Don't print dbar 0x700 if TARGET_LD_SEQ_SA. * config/loongarch/sync.md (atomic_load): Likewise. --- gcc/config/loongarch/loongarch.cc | 2 +- gcc/config/loongarch/sync.md | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index 9a2da89db789..4a6a6e33e67b 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -6061,7 +6061,7 @@ loongarch_print_operand (FILE *file, rtx op, int letter) if (loongarch_cas_failure_memorder_needs_acquire ( memmodel_from_int (INTVAL (op)))) fputs ("dbar\t0b10100", file); - else + else if (!TARGET_LD_SEQ_SA) fputs ("dbar\t0x700", file); break; diff --git a/gcc/config/loongarch/sync.md b/gcc/config/loongarch/sync.md index 67848d72b875..ce3ce89a61d7 100644 --- a/gcc/config/loongarch/sync.md +++ b/gcc/config/loongarch/sync.md @@ -119,13 +119,14 @@ case MEMMODEL_SEQ_CST: return "dbar\t0x11\\n\\t" "ld.\t%0,%1\\n\\t" - "dbar\t0x14\\n\\t"; + "dbar\t0x14"; case MEMMODEL_ACQUIRE: return "ld.\t%0,%1\\n\\t" - "dbar\t0x14\\n\\t"; + "dbar\t0x14"; case MEMMODEL_RELAXED: - return "ld.\t%0,%1\\n\\t" - "dbar\t0x700\\n\\t"; + return TARGET_LD_SEQ_SA ? "ld.\t%0,%1\\n\\t" + : "ld.\t%0,%1\\n\\t" + "dbar\t0x700"; default: /* The valid memory order variants are __ATOMIC_RELAXED, __ATOMIC_SEQ_CST, From 51bda9f136c03c948a9e95b60cb8b4257fb427be Mon Sep 17 00:00:00 2001 From: Xi Ruoyao Date: Sat, 18 Nov 2023 03:45:42 +0800 Subject: [PATCH 161/169] LoongArch: Add fine-grained control for LAM_BH and LAMCAS gcc/ChangeLog: * config/loongarch/genopts/isa-evolution.in: (lam-bh, lamcas): Add. * config/loongarch/loongarch-str.h: Regenerate. * config/loongarch/loongarch.opt: Regenerate. * config/loongarch/loongarch-cpucfg-map.h: Regenerate. * config/loongarch/loongarch-cpu.cc (ISA_BASE_LA64V110_FEATURES): Include OPTION_MASK_ISA_LAM_BH and OPTION_MASK_ISA_LAMCAS. * config/loongarch/sync.md (atomic_add): Use TARGET_LAM_BH instead of ISA_BASE_IS_LA64V110. Remove empty lines from assembly output. (atomic_exchange_short): Likewise. (atomic_exchange): Likewise. (atomic_fetch_add_short): Likewise. (atomic_fetch_add): Likewise. (atomic_cas_value_strong_amcas): Use TARGET_LAMCAS instead of ISA_BASE_IS_LA64V110. (atomic_compare_and_swap): Likewise. (atomic_compare_and_swap): Likewise. (atomic_compare_and_swap): Likewise. * config/loongarch/loongarch.cc (loongarch_asm_code_end): Dump status if -mlam-bh and -mlamcas if -fverbose-asm. --- gcc/config/loongarch/genopts/isa-evolution.in | 2 ++ gcc/config/loongarch/loongarch-cpu.cc | 3 ++- gcc/config/loongarch/loongarch-cpucfg-map.h | 2 ++ gcc/config/loongarch/loongarch-str.h | 2 ++ gcc/config/loongarch/loongarch.cc | 2 ++ gcc/config/loongarch/loongarch.opt | 8 ++++++++ gcc/config/loongarch/sync.md | 18 +++++++++--------- 7 files changed, 27 insertions(+), 10 deletions(-) diff --git a/gcc/config/loongarch/genopts/isa-evolution.in b/gcc/config/loongarch/genopts/isa-evolution.in index e58f0d6a1a18..a6bc3f87f201 100644 --- a/gcc/config/loongarch/genopts/isa-evolution.in +++ b/gcc/config/loongarch/genopts/isa-evolution.in @@ -1,2 +1,4 @@ 2 26 div32 Support div.w[u] and mod.w[u] instructions with inputs not sign-extended. +2 27 lam-bh Support am{swap/add}[_db].{b/h} instructions. +2 28 lamcas Support amcas[_db].{b/h/w/d} instructions. 3 23 ld-seq-sa Do not need load-load barriers (dbar 0x700). diff --git a/gcc/config/loongarch/loongarch-cpu.cc b/gcc/config/loongarch/loongarch-cpu.cc index 7acf1a9121da..622df47916f3 100644 --- a/gcc/config/loongarch/loongarch-cpu.cc +++ b/gcc/config/loongarch/loongarch-cpu.cc @@ -38,7 +38,8 @@ along with GCC; see the file COPYING3. If not see initializers! */ #define ISA_BASE_LA64V110_FEATURES \ - (OPTION_MASK_ISA_DIV32 | OPTION_MASK_ISA_LD_SEQ_SA) + (OPTION_MASK_ISA_DIV32 | OPTION_MASK_ISA_LD_SEQ_SA \ + | OPTION_MASK_ISA_LAM_BH | OPTION_MASK_ISA_LAMCAS) int64_t loongarch_isa_base_features[N_ISA_BASE_TYPES] = { /* [ISA_BASE_LA64V100] = */ 0, diff --git a/gcc/config/loongarch/loongarch-cpucfg-map.h b/gcc/config/loongarch/loongarch-cpucfg-map.h index 0c078c397868..02ff16712551 100644 --- a/gcc/config/loongarch/loongarch-cpucfg-map.h +++ b/gcc/config/loongarch/loongarch-cpucfg-map.h @@ -30,6 +30,8 @@ static constexpr struct { HOST_WIDE_INT isa_evolution_bit; } cpucfg_map[] = { { 2, 1u << 26, OPTION_MASK_ISA_DIV32 }, + { 2, 1u << 27, OPTION_MASK_ISA_LAM_BH }, + { 2, 1u << 28, OPTION_MASK_ISA_LAMCAS }, { 3, 1u << 23, OPTION_MASK_ISA_LD_SEQ_SA }, }; diff --git a/gcc/config/loongarch/loongarch-str.h b/gcc/config/loongarch/loongarch-str.h index 889962e9ab0e..0384493765c5 100644 --- a/gcc/config/loongarch/loongarch-str.h +++ b/gcc/config/loongarch/loongarch-str.h @@ -70,6 +70,8 @@ along with GCC; see the file COPYING3. If not see #define STR_EXPLICIT_RELOCS_ALWAYS "always" #define OPTSTR_DIV32 "div32" +#define OPTSTR_LAM_BH "lam-bh" +#define OPTSTR_LAMCAS "lamcas" #define OPTSTR_LD_SEQ_SA "ld-seq-sa" #endif /* LOONGARCH_STR_H */ diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index 4a6a6e33e67b..ce601a331f75 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -11455,6 +11455,8 @@ loongarch_asm_code_end (void) fprintf (asm_out_file, "%s Base ISA: %s\n", ASM_COMMENT_START, loongarch_isa_base_strings [la_target.isa.base]); DUMP_FEATURE (TARGET_DIV32); + DUMP_FEATURE (TARGET_LAM_BH); + DUMP_FEATURE (TARGET_LAMCAS); DUMP_FEATURE (TARGET_LD_SEQ_SA); } diff --git a/gcc/config/loongarch/loongarch.opt b/gcc/config/loongarch/loongarch.opt index a39eddc108bc..4d36e3ec4de7 100644 --- a/gcc/config/loongarch/loongarch.opt +++ b/gcc/config/loongarch/loongarch.opt @@ -267,6 +267,14 @@ mdiv32 Target Mask(ISA_DIV32) Var(isa_evolution) Support div.w[u] and mod.w[u] instructions with inputs not sign-extended. +mlam-bh +Target Mask(ISA_LAM_BH) Var(isa_evolution) +Support am{swap/add}[_db].{b/h} instructions. + +mlamcas +Target Mask(ISA_LAMCAS) Var(isa_evolution) +Support amcas[_db].{b/h/w/d} instructions. + mld-seq-sa Target Mask(ISA_LD_SEQ_SA) Var(isa_evolution) Do not need load-load barriers (dbar 0x700). diff --git a/gcc/config/loongarch/sync.md b/gcc/config/loongarch/sync.md index ce3ce89a61d7..229fc50360ab 100644 --- a/gcc/config/loongarch/sync.md +++ b/gcc/config/loongarch/sync.md @@ -124,7 +124,7 @@ return "ld.\t%0,%1\\n\\t" "dbar\t0x14"; case MEMMODEL_RELAXED: - return TARGET_LD_SEQ_SA ? "ld.\t%0,%1\\n\\t" + return TARGET_LD_SEQ_SA ? "ld.\t%0,%1" : "ld.\t%0,%1\\n\\t" "dbar\t0x700"; @@ -193,7 +193,7 @@ (match_operand:SHORT 1 "reg_or_0_operand" "rJ")) (match_operand:SI 2 "const_int_operand")] ;; model UNSPEC_SYNC_OLD_OP))] - "ISA_BASE_IS_LA64V110" + "TARGET_LAM_BH" "amadd%A2.\t$zero,%z1,%0" [(set (attr "length") (const_int 4))]) @@ -230,7 +230,7 @@ UNSPEC_SYNC_EXCHANGE)) (set (match_dup 1) (match_operand:SHORT 2 "register_operand" "r"))] - "ISA_BASE_IS_LA64V110" + "TARGET_LAM_BH" "amswap%A3.\t%0,%z2,%1" [(set (attr "length") (const_int 4))]) @@ -266,7 +266,7 @@ (match_operand:QHWD 3 "reg_or_0_operand" "rJ") (match_operand:SI 4 "const_int_operand")] ;; mod_s UNSPEC_COMPARE_AND_SWAP))] - "ISA_BASE_IS_LA64V110" + "TARGET_LAMCAS" "ori\t%0,%z2,0\n\tamcas%A4.\t%0,%z3,%1" [(set (attr "length") (const_int 8))]) @@ -296,7 +296,7 @@ operands[6] = mod_s; - if (ISA_BASE_IS_LA64V110) + if (TARGET_LAMCAS) emit_insn (gen_atomic_cas_value_strong_amcas (operands[1], operands[2], operands[3], operands[4], operands[6])); @@ -422,7 +422,7 @@ operands[6] = mod_s; - if (ISA_BASE_IS_LA64V110) + if (TARGET_LAMCAS) emit_insn (gen_atomic_cas_value_strong_amcas (operands[1], operands[2], operands[3], operands[4], operands[6])); @@ -642,7 +642,7 @@ (match_operand:SHORT 2 "register_operand"))] "" { - if (ISA_BASE_IS_LA64V110) + if (TARGET_LAM_BH) emit_insn (gen_atomic_exchange_short (operands[0], operands[1], operands[2], operands[3])); else { @@ -663,7 +663,7 @@ (match_operand:SHORT 2 "reg_or_0_operand" "rJ")) (match_operand:SI 3 "const_int_operand")] ;; model UNSPEC_SYNC_OLD_OP))] - "ISA_BASE_IS_LA64V110" + "TARGET_LAM_BH" "amadd%A3.\t%0,%z2,%1" [(set (attr "length") (const_int 4))]) @@ -678,7 +678,7 @@ UNSPEC_SYNC_OLD_OP))] "" { - if (ISA_BASE_IS_LA64V110) + if (TARGET_LAM_BH) emit_insn (gen_atomic_fetch_add_short (operands[0], operands[1], operands[2], operands[3])); else From 84c5dede83de84e0a06b018103be0b9ede5b04a1 Mon Sep 17 00:00:00 2001 From: Xi Ruoyao Date: Sun, 19 Nov 2023 01:41:12 +0800 Subject: [PATCH 162/169] LoongArch: Fix "-mexplict-relocs=none -mcmodel=medium" producing %call36 when the assembler does not support it Even if !HAVE_AS_SUPPORT_CALL36, const_call_insn_operand should still return false when -mexplict-relocs=none -mcmodel=medium to make loongarch_legitimize_call_address emit la.local or la.global. gcc/ChangeLog: * config/loongarch/predicates.md (const_call_insn_operand): Remove buggy "HAVE_AS_SUPPORT_CALL36" conditions. Change "1" to "true" to make the coding style consistent. --- gcc/config/loongarch/predicates.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/gcc/config/loongarch/predicates.md b/gcc/config/loongarch/predicates.md index 56f7c48e126b..d02e846cb123 100644 --- a/gcc/config/loongarch/predicates.md +++ b/gcc/config/loongarch/predicates.md @@ -444,21 +444,19 @@ case SYMBOL_PCREL: if (TARGET_CMODEL_EXTREME || (TARGET_CMODEL_MEDIUM - && HAVE_AS_SUPPORT_CALL36 && (la_opt_explicit_relocs == EXPLICIT_RELOCS_NONE))) return false; else - return 1; + return true; case SYMBOL_GOT_DISP: if (TARGET_CMODEL_EXTREME || !flag_plt || (flag_plt && TARGET_CMODEL_MEDIUM - && HAVE_AS_SUPPORT_CALL36 && (la_opt_explicit_relocs == EXPLICIT_RELOCS_NONE))) return false; else - return 1; + return true; default: return false; From 41a5ea4cab2c59f9911325281f7df1d3ae846d48 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 15 Aug 2023 22:43:41 +0100 Subject: [PATCH 163/169] libstdc++: Add fast path for std::format("{}", x) [PR110801] This optimizes the simple case of formatting a single string, integer or bool, with no format-specifier (so no padding, alignment, alternate form etc.) libstdc++-v3/ChangeLog: PR libstdc++/110801 * include/std/format (_Sink_iter::_M_reserve): New member function. (_Sink::_Reservation): New nested class. (_Sink::_M_reserve, _Sink::_M_bump): New virtual functions. (_Seq_sink::_M_reserve, _Seq_sink::_M_bump): New virtual overrides. (_Iter_sink::_M_reserve): Likewise. (__do_vformat_to): Use new functions to optimize "{}" case. --- libstdc++-v3/include/std/format | 164 +++++++++++++++++++++++++++++++- 1 file changed, 163 insertions(+), 1 deletion(-) diff --git a/libstdc++-v3/include/std/format b/libstdc++-v3/include/std/format index 8ec1c8a0b9a7..7c52cce5dbb6 100644 --- a/libstdc++-v3/include/std/format +++ b/libstdc++-v3/include/std/format @@ -2442,6 +2442,10 @@ namespace __format iter_difference_t<_Out> size; }; +_GLIBCXX_BEGIN_NAMESPACE_CONTAINER +template class vector; +_GLIBCXX_END_NAMESPACE_CONTAINER + /// @cond undocumented namespace __format { @@ -2492,6 +2496,10 @@ namespace __format [[__gnu__::__always_inline__]] constexpr _Sink_iter operator++(int) { return *this; } + + auto + _M_reserve(size_t __n) const + { return _M_sink->_M_reserve(__n); } }; // Abstract base class for type-erased character sinks. @@ -2508,6 +2516,7 @@ namespace __format // Called when the span is full, to make more space available. // Precondition: _M_next != _M_span.begin() // Postcondition: _M_next != _M_span.end() + // TODO: remove the precondition? could make overflow handle it. virtual void _M_overflow() = 0; protected: @@ -2572,6 +2581,46 @@ namespace __format } } + // A successful _Reservation can be used to directly write + // up to N characters to the sink to avoid unwanted buffering. + struct _Reservation + { + // True if the reservation was successful, false otherwise. + explicit operator bool() const noexcept { return _M_sink; } + // A pointer to write directly to the sink. + _CharT* get() const noexcept { return _M_sink->_M_next.operator->(); } + // Add n to the _M_next iterator for the sink. + void _M_bump(size_t __n) { _M_sink->_M_bump(__n); } + _Sink* _M_sink; + }; + + // Attempt to reserve space to write n characters to the sink. + // If anything is written to the reservation then there must be a call + // to _M_bump(N2) before any call to another member function of *this, + // where N2 is the number of characters written. + virtual _Reservation + _M_reserve(size_t __n) + { + auto __avail = _M_unused(); + if (__n <= __avail.size()) + return { this }; + + if (__n <= _M_span.size()) // Cannot meet the request. + { + _M_overflow(); // Make more space available. + __avail = _M_unused(); + if (__n <= __avail.size()) + return { this }; + } + return { nullptr }; + } + + // Update the next output position after writing directly to the sink. + // pre: no calls to _M_write or _M_overflow since _M_reserve. + virtual void + _M_bump(size_t __n) + { _M_next += __n; } + public: _Sink(const _Sink&) = delete; _Sink& operator=(const _Sink&) = delete; @@ -2596,6 +2645,8 @@ namespace __format { } }; + using _GLIBCXX_STD_C::vector; + // A sink that fills a sequence (e.g. std::string, std::vector, std::deque). // Writes to a buffer then appends that to the sequence when it fills up. template @@ -2619,6 +2670,45 @@ namespace __format this->_M_rewind(); } + typename _Sink<_CharT>::_Reservation + _M_reserve(size_t __n) override + { + if constexpr (__is_specialization_of<_Seq, basic_string> + || __is_specialization_of<_Seq, vector>) + { + // Flush the buffer to _M_seq first: + if (this->_M_used().size()) + _M_overflow(); + // Expand _M_seq to make __n new characters available: + const auto __sz = _M_seq.size(); + if constexpr (is_same_v || is_same_v) + _M_seq.__resize_and_overwrite(__sz + __n, + [](auto, auto __n2) { + return __n2; + }); + else + _M_seq.resize(__sz + __n); + // Set _M_used() to be a span over the original part of _M_seq: + this->_M_reset(_M_seq, __sz); + return { this }; + } + else // Try to use the base class' buffer. + return _Sink<_CharT>::_M_reserve(); + } + + void + _M_bump(size_t __n) override + { + if constexpr (__is_specialization_of<_Seq, basic_string> + || __is_specialization_of<_Seq, vector>) + { + // Truncate the sequence to the part that was actually written to: + _M_seq.resize(this->_M_used().size() + __n); + // Switch back to using buffer: + this->_M_reset(this->_M_buf); + } + } + public: // TODO: for SSO string, use SSO buffer as initial span, then switch // to _M_buf if it overflows? Or even do that for all unused capacity? @@ -2744,6 +2834,21 @@ namespace __format } } + typename _Sink<_CharT>::_Reservation + _M_reserve(size_t __n) final + { + auto __avail = this->_M_unused(); + if (__n > __avail.size()) + { + if (_M_max >= 0) + return {}; // cannot grow + + auto __s = this->_M_used(); + this->_M_reset({__s.data(), __s.size() + __n}, __s.size()); + } + return { this }; + } + private: static span<_CharT> _S_make_span(_CharT* __ptr, iter_difference_t<_OutIter> __n, @@ -2773,7 +2878,7 @@ namespace __format uint64_t __off = reinterpret_cast(__ptr) % 1024; __n = (1024 - __off) / sizeof(_CharT); if (__n > 0) [[likely]] - return {__ptr, static_cast(__n)}; + return {__ptr, static_cast(__n)}; else // Misaligned/packed buffer of wchar_t? return {__ptr, 1}; } @@ -3835,6 +3940,63 @@ namespace __format else __sink_out = __sink.out(); + if constexpr (is_same_v<_CharT, char>) + if (__fmt.size() == 2 && __fmt[0] == '{' && __fmt[1] == '}') + { + bool __done = false; + std::visit_format_arg([&](auto& __arg) { + using _Tp = remove_cvref_t; + if constexpr (is_same_v<_Tp, bool>) + { + size_t __len = 4 + !__arg; + const char* __chars[] = { "false", "true" }; + if (auto __res = __sink_out._M_reserve(__len)) + { + __builtin_memcpy(__res.get(), __chars[__arg], __len); + __res._M_bump(__len); + __done = true; + } + } + else if constexpr (is_integral_v<_Tp>) + { + make_unsigned_t<_Tp> __uval; + const bool __neg = __arg < 0; + if (__neg) + __uval = make_unsigned_t<_Tp>(~__arg) + 1u; + else + __uval = __arg; + const auto __n = __detail::__to_chars_len(__uval) + __neg; + if (auto __res = __sink_out._M_reserve(__n)) + { + auto __ptr = __res.get(); + *__ptr = '-'; + __detail::__to_chars_10_impl(__ptr + (int)__neg, __n, + __uval); + __res._M_bump(__n); + __done = true; + } + } + else if constexpr (is_convertible_v<_Tp, string_view>) + { + string_view __sv = __arg; + if (auto __res = __sink_out._M_reserve(__sv.size())) + { + __builtin_memcpy(__res.get(), __sv.data(), __sv.size()); + __res._M_bump(__sv.size()); + __done = true; + } + } + }, __args.get(0)); + + if (__done) + { + if constexpr (is_same_v<_Out, _Sink_iter<_CharT>>) + return __sink_out; + else + return std::move(__sink)._M_finish().out; + } + } + auto __ctx = __loc == nullptr ? _Context(__args, __sink_out) : _Context(__args, __sink_out, *__loc); From 279e407a06cc676d8e6e0bb5755b0a804e05377c Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Sat, 18 Nov 2023 20:56:35 +0000 Subject: [PATCH 164/169] libstdc++: Check string value_type in std::make_format_args [PR112607] libstdc++-v3/ChangeLog: PR libstdc++/112607 * include/std/format (basic_format_arg::_S_to_arg_type): Check value_type for basic_string_view and basic_string specializations. * testsuite/std/format/arguments/112607.cc: New test. --- libstdc++-v3/include/std/format | 12 +++++--- .../testsuite/std/format/arguments/112607.cc | 30 +++++++++++++++++++ 2 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 libstdc++-v3/testsuite/std/format/arguments/112607.cc diff --git a/libstdc++-v3/include/std/format b/libstdc++-v3/include/std/format index 7c52cce5dbb6..58cd310db4df 100644 --- a/libstdc++-v3/include/std/format +++ b/libstdc++-v3/include/std/format @@ -3220,10 +3220,14 @@ namespace __format return type_identity<__format::__float128_t>(); # endif #endif - else if constexpr (__is_specialization_of<_Td, basic_string_view>) - return type_identity>(); - else if constexpr (__is_specialization_of<_Td, basic_string>) - return type_identity>(); + else if constexpr (__is_specialization_of<_Td, basic_string_view> + || __is_specialization_of<_Td, basic_string>) + { + if constexpr (is_same_v) + return type_identity>(); + else + return type_identity(); + } else if constexpr (is_same_v, const _CharT*>) return type_identity(); else if constexpr (is_same_v, _CharT*>) diff --git a/libstdc++-v3/testsuite/std/format/arguments/112607.cc b/libstdc++-v3/testsuite/std/format/arguments/112607.cc new file mode 100644 index 000000000000..19eec765ea58 --- /dev/null +++ b/libstdc++-v3/testsuite/std/format/arguments/112607.cc @@ -0,0 +1,30 @@ +// { dg-do compile { target c++20 } } + +// PR libstdc++/112607 +// _Normalize does not consider char_type for the basic_string_view case + +#include + +template +struct Alloc +{ + using value_type = T; + Alloc() = default; + template + Alloc(const Alloc&) { } + T* allocate(std::size_t); + void deallocate(T*, std::size_t); + bool operator==(const Alloc&) const; +}; + +template +using String = std::basic_string, Alloc>; + +template<> +struct std::formatter> : std::formatter { + auto format(const String&, auto& ctx) const { + return std::formatter::format(" ", ctx); + } +}; + +std::string str = std::format("{}", String{}); From f73808b3b4f1676b1849f2b3ca090abf56d4fdf9 Mon Sep 17 00:00:00 2001 From: Petter Tomner Date: Sat, 18 Nov 2023 22:48:56 +0100 Subject: [PATCH 165/169] MAINTAINERS: Update my email address. Update my email address in the MAINTAINERS file. 2023-11-18 Petter Tomner ChangeLog: * MAINTAINERS: Update my email address. --- MAINTAINERS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index a6e910114f9e..b70336761ab8 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -682,7 +682,7 @@ Dinar Temirbulatov Kresten Krab Thorup Kai Tietz Ilya Tocar -Petter Tomner +Petter Tomner Philipp Tomsich Daniel Towner Konrad Trifunovic @@ -769,7 +769,7 @@ Trevor Saunders Bill Schmidt Nathan Sidwell Edward Smith-Rowland -Petter Tomner +Petter Tomner Martin Uecker Jonathan Wakely Chung-Ju Wu From 9d58d2d8ba290d2d72ef9700c6f3b37ce99c93c3 Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Sun, 19 Nov 2023 00:17:38 +0000 Subject: [PATCH 166/169] Daily bump. --- ChangeLog | 8 ++ gcc/ChangeLog | 219 ++++++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/analyzer/ChangeLog | 112 ++++++++++++++++++++ gcc/c-family/ChangeLog | 13 +++ gcc/testsuite/ChangeLog | 57 +++++++++++ libgcc/ChangeLog | 13 +++ libsanitizer/ChangeLog | 5 + libstdc++-v3/ChangeLog | 20 ++++ 9 files changed, 448 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 55cd7f039c5f..1b146c53da16 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2023-11-18 Petter Tomner + + * MAINTAINERS: Update my email address. + +2023-11-18 Frederik Harwath + + * MAINTAINERS: Change my address. + 2023-11-16 Michal Jires * MAINTAINERS: Add myself. diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bd02c1a29911..67906ac3ad80 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,222 @@ +2023-11-18 Xi Ruoyao + + * config/loongarch/predicates.md (const_call_insn_operand): + Remove buggy "HAVE_AS_SUPPORT_CALL36" conditions. Change "1" to + "true" to make the coding style consistent. + +2023-11-18 Xi Ruoyao + + * config/loongarch/genopts/isa-evolution.in: (lam-bh, lamcas): + Add. + * config/loongarch/loongarch-str.h: Regenerate. + * config/loongarch/loongarch.opt: Regenerate. + * config/loongarch/loongarch-cpucfg-map.h: Regenerate. + * config/loongarch/loongarch-cpu.cc + (ISA_BASE_LA64V110_FEATURES): Include OPTION_MASK_ISA_LAM_BH + and OPTION_MASK_ISA_LAMCAS. + * config/loongarch/sync.md (atomic_add): Use + TARGET_LAM_BH instead of ISA_BASE_IS_LA64V110. Remove empty + lines from assembly output. + (atomic_exchange_short): Likewise. + (atomic_exchange): Likewise. + (atomic_fetch_add_short): Likewise. + (atomic_fetch_add): Likewise. + (atomic_cas_value_strong_amcas): Use TARGET_LAMCAS instead + of ISA_BASE_IS_LA64V110. + (atomic_compare_and_swap): Likewise. + (atomic_compare_and_swap): Likewise. + (atomic_compare_and_swap): Likewise. + * config/loongarch/loongarch.cc (loongarch_asm_code_end): Dump + status if -mlam-bh and -mlamcas if -fverbose-asm. + +2023-11-18 Xi Ruoyao + + * config/loongarch/loongarch.cc (loongarch_print_operand): Don't + print dbar 0x700 if TARGET_LD_SEQ_SA. + * config/loongarch/sync.md (atomic_load): Likewise. + +2023-11-18 Xi Ruoyao + + * config/loongarch/loongarch.md (DIV): New mode iterator. + (3): Don't expand if TARGET_DIV32. + (di3_fake): Disable if TARGET_DIV32. + (*3): Allow SImode if TARGET_DIV32. + (si3_extended): New insn if TARGET_DIV32. + +2023-11-18 Xi Ruoyao + + * config/loongarch/loongarch-def.h: + (loongarch_isa_base_features): Declare. Define it in ... + * config/loongarch/loongarch-cpu.cc + (loongarch_isa_base_features): ... here. + (fill_native_cpu_config): If we know the base ISA of the CPU + model from PRID, use it instead of la64 (v1.0). Check if all + expected features of this base ISA is available, emit a warning + if not. + * config/loongarch/loongarch-opts.cc (config_target_isa): Enable + the features implied by the base ISA if not -march=native. + +2023-11-18 Xi Ruoyao + + * config/loongarch/genopts/isa-evolution.in: New data file. + * config/loongarch/genopts/genstr.sh: Translate info in + isa-evolution.in when generating loongarch-str.h, loongarch.opt, + and loongarch-cpucfg-map.h. + * config/loongarch/genopts/loongarch.opt.in (isa_evolution): + New variable. + * config/loongarch/t-loongarch: (loongarch-cpucfg-map.h): New + rule. + (loongarch-str.h): Depend on isa-evolution.in. + (loongarch.opt): Depend on isa-evolution.in. + (loongarch-cpu.o): Depend on loongarch-cpucfg-map.h. + * config/loongarch/loongarch-str.h: Regenerate. + * config/loongarch/loongarch-def.h (loongarch_isa): Add field + for evolution features. Add helper function to enable features + in this field. + Probe native CPU capability and save the corresponding options + into preset. + * config/loongarch/loongarch-cpu.cc (fill_native_cpu_config): + Probe native CPU capability and save the corresponding options + into preset. + (cache_cpucfg): Simplify with C++11-style for loop. + (cpucfg_useful_idx, N_CPUCFG_WORDS): Move to ... + * config/loongarch/loongarch.cc + (loongarch_option_override_internal): Enable the ISA evolution + feature options implied by -march and not explicitly disabled. + (loongarch_asm_code_end): New function, print ISA information as + comments in the assembly if -fverbose-asm. It makes easier to + debug things like -march=native. + (TARGET_ASM_CODE_END): Define. + * config/loongarch/loongarch.opt: Regenerate. + * config/loongarch/loongarch-cpucfg-map.h: Generate. + (cpucfg_useful_idx, N_CPUCFG_WORDS) ... here. + +2023-11-18 Xi Ruoyao + + * config/loongarch/genopts/loongarch-strings: + (STR_ISA_BASE_LA64V110): Add. + * config/loongarch/genopts/loongarch.opt.in: + (ISA_BASE_LA64V110): Add. + * config/loongarch/loongarch-def.c + (loongarch_isa_base_strings): Initialize [ISA_BASE_LA64V110] + to STR_ISA_BASE_LA64V110. + * config/loongarch/loongarch.opt: Regenerate. + * config/loongarch/loongarch-str.h: Regenerate. + +2023-11-18 Sebastian Huber + + * doc/invoke.texi (-fprofile-update): Clarify default method. Document + the atomic method behaviour. + * tree-profile.cc (enum counter_update_method): New. + (counter_update): Likewise. + (gen_counter_update): Use counter_update_method. Split the + atomic counter update in two 32-bit atomic operations if + necessary. + (tree_profiling): Select counter_update_method. + +2023-11-18 Sebastian Huber + + * tree-profile.cc (gen_assign_counter_update): New. + (gen_counter_update): Likewise. + (gimple_gen_edge_profiler): Use gen_counter_update(). + (gimple_gen_time_profiler): Likewise. + +2023-11-18 Sebastian Huber + + * config/rtems.h (TARGET_HAVE_LIBATOMIC): Define. + * doc/tm.texi: Regenerate. + * doc/tm.texi.in (TARGET_HAVE_LIBATOMIC): Add. + * target.def (have_libatomic): New. + +2023-11-18 Sebastian Huber + + Revert: + 2023-11-18 Sebastian Huber + + * config/sparc/rtemself.h (SPARC_GCOV_TYPE_SIZE): Define. + * config/sparc/sparc.c (sparc_gcov_type_size): New. + (TARGET_GCOV_TYPE_SIZE): Redefine if SPARC_GCOV_TYPE_SIZE is defined. + * coverage.c (get_gcov_type): Use targetm.gcov_type_size(). + * doc/tm.texi (TARGET_GCOV_TYPE_SIZE): Add hook under "Misc". + * doc/tm.texi.in: Regenerate. + * target.def (gcov_type_size): New target hook. + * targhooks.c (default_gcov_type_size): New. + * targhooks.h (default_gcov_type_size): Declare. + * tree-profile.c (gimple_gen_edge_profiler): Use precision of + gcov_type_node. + (gimple_gen_time_profiler): Likewise. + +2023-11-18 Kito Cheng + + * config/riscv/riscv-target-attr.cc + (riscv_target_attr_parser::parse_arch): Use char[] for + std::unique_ptr to prevent mismatched new delete issue. + (riscv_process_one_target_attr): Ditto. + (riscv_process_target_attr): Ditto. + +2023-11-18 Juzhe-Zhong + + * config/riscv/vector-iterators.md: Refactor iterators. + +2023-11-18 Lulu Cheng + + * config/loongarch/sync.md (atomic_load): New template. + +2023-11-18 Lulu Cheng + + * config/loongarch/loongarch-def.h: Add comments. + * config/loongarch/loongarch-opts.h (ISA_BASE_IS_LA64V110): Define macro. + * config/loongarch/loongarch.cc (loongarch_memmodel_needs_rel_acq_fence): + Remove redundant code implementations. + * config/loongarch/sync.md (d): Added QI, HI support. + (atomic_add): New template. + (atomic_exchange_short): Likewise. + (atomic_cas_value_strong_amcas): Likewise.. + (atomic_fetch_add_short): Likewise. + +2023-11-18 Lulu Cheng + + * config.gcc: Support LA664. + * config/loongarch/genopts/loongarch-strings: Likewise. + * config/loongarch/genopts/loongarch.opt.in: Likewise. + * config/loongarch/loongarch-cpu.cc (fill_native_cpu_config): Likewise. + * config/loongarch/loongarch-def.c: Likewise. + * config/loongarch/loongarch-def.h (N_ISA_BASE_TYPES): Likewise. + (ISA_BASE_LA64V110): Define macro. + (N_ARCH_TYPES): Update value. + (N_TUNE_TYPES): Update value. + (CPU_LA664): New macro. + * config/loongarch/loongarch-opts.cc (isa_default_abi): Likewise. + (isa_base_compat_p): Likewise. + * config/loongarch/loongarch-opts.h (TARGET_64BIT): This parameter is enabled + when la_target.isa.base is equal to ISA_BASE_LA64V100 or ISA_BASE_LA64V110. + (TARGET_uARCH_LA664): Define macro. + * config/loongarch/loongarch-str.h (STR_CPU_LA664): Likewise. + * config/loongarch/loongarch.cc (loongarch_cpu_sched_reassociation_width): + Add LA664 support. + * config/loongarch/loongarch.opt: Regenerate. + +2023-11-18 Lulu Cheng + Xi Ruoyao + + * config.in: Regenerate. + * config/loongarch/loongarch-opts.h (HAVE_AS_SUPPORT_CALL36): Define macro. + * config/loongarch/loongarch.cc (loongarch_legitimize_call_address): + If binutils supports call36, the function call is not split over expand. + * config/loongarch/loongarch.md: Add call36 generation code. + * config/loongarch/predicates.md: Likewise. + * configure: Regenerate. + * configure.ac: Check whether binutils supports call36. + +2023-11-18 David Malcolm + + PR analyzer/106147 + * Makefile.in (ANALYZER_OBJS): Add analyzer/infinite-loop.o. + * doc/invoke.texi: Add -fdump-analyzer-infinite-loop and + -Wanalyzer-infinite-loop. Add missing CWE link for + -Wanalyzer-infinite-recursion. + * timevar.def (TV_ANALYZER_INFINITE_LOOPS): New. + 2023-11-17 Robin Dapp PR middle-end/112406 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 36722b9e985e..6ce2b650d7b2 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20231118 +20231119 diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog index 1947c8d1a928..e92c518cb366 100644 --- a/gcc/analyzer/ChangeLog +++ b/gcc/analyzer/ChangeLog @@ -1,3 +1,115 @@ +2023-11-18 David Malcolm + + PR analyzer/106147 + * analyzer.opt (Wanalyzer-infinite-loop): New option. + (fdump-analyzer-infinite-loop): New option. + * checker-event.h (start_cfg_edge_event::get_desc): Drop "final". + (start_cfg_edge_event::maybe_describe_condition): Convert from + private to protected. + * checker-path.h (checker_path::get_logger): New. + * diagnostic-manager.cc (process_worklist_item): Update for + new context param of maybe_update_for_edge. + * engine.cc + (impl_region_model_context::impl_region_model_context): Add + out_could_have_done_work param to both ctors and use it to + initialize mm_out_could_have_done_work. + (impl_region_model_context::maybe_did_work): New vfunc + implementation. + (exploded_node::on_stmt): Add out_could_have_done_work param and + pass to ctxt ctor. + (exploded_node::on_stmt_pre): Treat setjmp and longjmp as "doing + work". + (exploded_node::on_longjmp): Likewise. + (exploded_edge::exploded_edge): Add "could_do_work" param and use + it to initialize m_could_do_work_p. + (exploded_edge::dump_dot_label): Add result of could_do_work_p. + (exploded_graph::add_function_entry): Mark edge as doing no work. + (exploded_graph::add_edge): Add "could_do_work" param and pass to + exploded_edge ctor. + (add_tainted_args_callback): Treat as doing no work. + (exploded_graph::process_worklist): Likewise when merging nodes. + (maybe_process_run_of_before_supernode_enodes::item): Likewise. + (exploded_graph::maybe_create_dynamic_call): Likewise. + (exploded_graph::process_node): Likewise for phi nodes. + Pass in a "could_have_done_work" bool when handling stmts and use + when creating edges. Assume work is done at bifurcation. + (exploded_path::feasible_p): Update for new context param of + maybe_update_for_edge. + (feasibility_state::feasibility_state): New ctor. + (feasibility_state::operator=): New. + (feasibility_state::maybe_update_for_edge): Add ctxt param and use + it. Fix missing newline when logging state. + (impl_run_checkers): Call exploded_graph::detect_infinite_loops. + * exploded-graph.h + (impl_region_model_context::impl_region_model_context): Add + out_could_have_done_work param to both ctors. + (impl_region_model_context::maybe_did_work): New decl. + (impl_region_model_context::checking_for_infinite_loop_p): New. + (impl_region_model_context::on_unusable_in_infinite_loop): New. + (impl_region_model_context::m_out_could_have_done_work): New + field. + (exploded_node::on_stmt): Add "out_could_have_done_work" param. + (exploded_edge::exploded_edge): Add "could_do_work" param. + (exploded_edge::could_do_work_p): New accessor. + (exploded_edge::m_could_do_work_p): New field. + (exploded_graph::add_edge): Add "could_do_work" param. + (exploded_graph::detect_infinite_loops): New decl. + (feasibility_state::feasibility_state): New ctor. + (feasibility_state::operator=): New decl. + (feasibility_state::maybe_update_for_edge): Add ctxt param. + * infinite-loop.cc: New file. + * program-state.cc (program_state::on_edge): Log the rejected + constraint when region_model::maybe_update_for_edge fails. + * region-model.cc (region_model::on_assignment): Treat any writes + other than to the stack as "doing work". + (region_model::on_stmt_pre): Treat all asm stmts as "doing work". + (region_model::on_call_post): Likewise for all calls to functions + with unknown side effects. + (region_model::handle_phi): Add svals_changing_meaning param. + Mark widening svalue in phi nodes as changing meaning. + (unusable_in_infinite_loop_constraint_p): New. + (region_model::add_constraint): If we're checking for an infinite + loop, bail out on unusable svalues, or if we don't have a definite + true/false for the constraint. + (region_model::update_for_phis): Gather all svalues changing + meaning in phi nodes, and purge constraints involving them. + (region_model::replay_call_summary): Treat all call summaries as + doing work. + (region_model::can_merge_with_p): Purge constraints involving + svalues that change meaning. + (model_merger::on_widening_reuse): New. + (test_iteration_1): Likewise. + (selftest::test_iteration_1): Remove assertion that model6 "knows" + that i < 157. + * region-model.h (region_model::handle_phi): Add + svals_changing_meaning param + (region_model_context::maybe_did_work): New pure virtual func. + (region_model_context::checking_for_infinite_loop_p): Likewise. + (region_model_context::on_unusable_in_infinite_loop): Likewise. + (noop_region_model_context::maybe_did_work): Implement. + (noop_region_model_context::checking_for_infinite_loop_p): + Likewise. + (noop_region_model_context::on_unusable_in_infinite_loop): + Likewise. + (region_model_context_decorator::maybe_did_work): Implement. + (region_model_context_decorator::checking_for_infinite_loop_p): + Likewise. + (region_model_context_decorator::on_unusable_in_infinite_loop): + Likewise. + (model_merger::on_widening_reuse): New decl. + (model_merger::m_svals_changing_meaning): New field. + * sm-signal.cc (register_signal_handler::impl_transition): Assume + the edge "does work". + * supergraph.cc (supernode::get_start_location): Use CFG edge's + goto_locus if available. + (supernode::get_end_location): Likewise. + (cfg_superedge::dump_label_to_pp): Dump edges with a "goto_locus" + * supergraph.h (cfg_superedge::get_goto_locus): New. + * svalue.cc (svalue::can_merge_p): Call on_widening_reuse for + widening values. + (involvement_visitor::visit_widening_svalue): New. + (svalue::involves_p): Update assertion to allow widening svalues. + 2023-11-14 David Malcolm PR analyzer/103533 diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 929cacb18a04..ed26f97e5881 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,16 @@ +2023-11-18 Sebastian Huber + + * c-cppbuiltin.cc (c_cpp_builtins): Define + __LIBGCC_HAVE_LIBATOMIC for libgcov. + +2023-11-18 Sebastian Huber + + Revert: + 2021-08-16 Sebastian Huber + + * c-cppbuiltin.c (c_cpp_builtins): Define + __LIBGCC_GCOV_TYPE_SIZE if flag_building_libgcc is true. + 2023-11-17 Jakub Jelinek PR c++/107571 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 46da01c59385..53e7e89de79a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,60 @@ +2023-11-18 Xi Ruoyao + + * gcc.target/loongarch/div-div32.c: New test. + * gcc.target/loongarch/div-no-div32.c: New test. + +2023-11-18 Francois-Xavier Coudert + + * gfortran.dg/coarray/caf.exp: Remove unused variable. + * gfortran.dg/dg.exp: Remove unused variable. + +2023-11-18 Lulu Cheng + Xi Ruoyao + + * gcc.target/loongarch/func-call-medium-5.c: If the assembler supports call36, + the test is abandoned. + * gcc.target/loongarch/func-call-medium-6.c: Likewise. + * gcc.target/loongarch/func-call-medium-7.c: Likewise. + * gcc.target/loongarch/func-call-medium-8.c: Likewise. + * lib/target-supports.exp: Added a function to see if the assembler supports + the call36 relocation. + * gcc.target/loongarch/func-call-medium-call36-1.c: New test. + * gcc.target/loongarch/func-call-medium-call36.c: New test. + +2023-11-18 David Malcolm + + PR analyzer/106147 + * c-c++-common/analyzer/gzio-2.c: Add dg-warning for infinite + loop, marked as xfail. + * c-c++-common/analyzer/infinite-loop-2.c: New test. + * c-c++-common/analyzer/infinite-loop-4.c: New test. + * c-c++-common/analyzer/infinite-loop-crc32c.c: New test. + * c-c++-common/analyzer/infinite-loop-doom-d_main-IdentifyVersion.c: + New test. + * c-c++-common/analyzer/infinite-loop-doom-v_video.c: New test. + * c-c++-common/analyzer/infinite-loop-g_error.c: New test. + * c-c++-common/analyzer/infinite-loop-linked-list.c: New test. + * c-c++-common/analyzer/infinite-recursion-inlining.c: Add + dg-warning directives for infinite loop. + * c-c++-common/analyzer/inlining-4-multiline.c: Update expected + paths for event 5 having a location. + * gcc.dg/analyzer/boxed-malloc-1.c: Add dg-warning for infinite + loop. + * gcc.dg/analyzer/data-model-20.c: Likewise. Add comment about + suspect code, and create... + * gcc.dg/analyzer/data-model-20a.c: ...this new test by cleaning + it up. + * gcc.dg/analyzer/edges-1.c: Add a placeholder statement to avoid + the "...to here" from the if stmt occurring at the "while", and + thus being treated as a bogus event. + * gcc.dg/analyzer/explode-2a.c: Add dg-warning for infinite loop. + * gcc.dg/analyzer/infinite-loop-1.c: New test. + * gcc.dg/analyzer/malloc-1.c: Add dg-warning for infinite loop. + * gcc.dg/analyzer/out-of-bounds-coreutils.c: Add TODO. + * gcc.dg/analyzer/paths-4.c: Add dg-warning for infinite loop. + * gcc.dg/analyzer/pr103892.c: Likewise. + * gcc.dg/analyzer/pr93546.c: Likewise. + 2023-11-17 Robin Dapp * gcc.target/aarch64/pr112406.c: New test. diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index cdee852eec3e..fdeb85f5a1a2 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,16 @@ +2023-11-18 Sebastian Huber + + * libgcov.h (GCOV_SUPPORTS_ATOMIC): Always define it. + Set it also to 1, if __LIBGCC_HAVE_LIBATOMIC is defined. + +2023-11-18 Sebastian Huber + + Revert: + 2023-11-18 Sebastian Huber + + * libgcov.h (gcov_type): Define using __LIBGCC_GCOV_TYPE_SIZE. + (gcov_type_unsigned): Likewise. + 2023-11-10 Keith Packard * config/m68k/lb1sf68.S (__adddf3): Properly check for non-zero denorm. diff --git a/libsanitizer/ChangeLog b/libsanitizer/ChangeLog index 7b8ee622f14d..f4b9f5fb52d7 100644 --- a/libsanitizer/ChangeLog +++ b/libsanitizer/ChangeLog @@ -1,3 +1,8 @@ +2023-11-18 Francois-Xavier Coudert + + * asan/asan_mac.cpp: Protect Apple blocks behind the + MISSING_BLOCKS_SUPPORT macro. + 2023-11-15 Jakub Jelinek * LOCAL_PATCHES: Update revisions. diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index df93c8133142..f63696172bf7 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,23 @@ +2023-11-18 Jonathan Wakely + + PR libstdc++/112607 + * include/std/format (basic_format_arg::_S_to_arg_type): Check + value_type for basic_string_view and basic_string + specializations. + * testsuite/std/format/arguments/112607.cc: New test. + +2023-11-18 Jonathan Wakely + + PR libstdc++/110801 + * include/std/format (_Sink_iter::_M_reserve): New member + function. + (_Sink::_Reservation): New nested class. + (_Sink::_M_reserve, _Sink::_M_bump): New virtual functions. + (_Seq_sink::_M_reserve, _Seq_sink::_M_bump): New virtual + overrides. + (_Iter_sink::_M_reserve): Likewise. + (__do_vformat_to): Use new functions to optimize "{}" case. + 2023-11-17 Jonathan Wakely * config.h.in: Regenerate. From f65f63c4d86a48be042a3ad242fffe5fe8347ff0 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Sat, 18 Nov 2023 20:35:59 -0500 Subject: [PATCH 167/169] analyzer: new warning: -Wanalyzer-undefined-behavior-strtok [PR107573] This patch: - adds support to the analyzer for tracking API-private state or which we don't have a decl (such as strtok's internal state), - uses it to implement a new -Wanalyzer-undefined-behavior-strtok which warns when strtok (NULL, delim) is called as the first call to strtok after main. gcc/analyzer/ChangeLog: PR analyzer/107573 * analyzer.h (register_known_functions): Add region_model_manager param. * analyzer.opt (Wanalyzer-undefined-behavior-strtok): New. * call-summary.cc (call_summary_replay::convert_region_from_summary_1): Handle RK_PRIVATE. * engine.cc (impl_run_checkers): Pass model manager to register_known_functions. * kf.cc (class undefined_function_behavior): New. (class kf_strtok): New. (register_known_functions): Add region_model_manager param. Use it to register "strtok". * region-model-manager.cc (region_model_manager::get_or_create_conjured_svalue): Add "idx" param. * region-model-manager.h (region_model_manager::get_or_create_conjured_svalue): Add "idx" param. (region_model_manager::get_root_region): New accessor. * region-model.cc (region_model::scan_for_null_terminator): Handle "expr" being null. (region_model::get_representative_path_var_1): Handle RK_PRIVATE. * region-model.h (region_model::called_from_main_p): Make public. * region.cc (region::get_memory_space): Handle RK_PRIVATE. (region::can_have_initial_svalue_p): Handle MEMSPACE_PRIVATE. (private_region::dump_to_pp): New. * region.h (MEMSPACE_PRIVATE): New. (RK_PRIVATE): New. (class private_region): New. (is_a_helper ::test): New. * store.cc (store::replay_call_summary_cluster): Handle RK_PRIVATE. * svalue.h (struct conjured_svalue::key_t): Add "idx" param to ctor and "m_idx" field. (class conjured_svalue::conjured_svalue): Likewise. gcc/ChangeLog: PR analyzer/107573 * doc/invoke.texi: Add -Wanalyzer-undefined-behavior-strtok. gcc/testsuite/ChangeLog: PR analyzer/107573 * c-c++-common/analyzer/strtok-1.c: New test. * c-c++-common/analyzer/strtok-2.c: New test. * c-c++-common/analyzer/strtok-3.c: New test. * c-c++-common/analyzer/strtok-4.c: New test. * c-c++-common/analyzer/strtok-cppreference.c: New test. Signed-off-by: David Malcolm --- gcc/analyzer/analyzer.h | 3 +- gcc/analyzer/analyzer.opt | 4 + gcc/analyzer/call-summary.cc | 1 + gcc/analyzer/engine.cc | 3 +- gcc/analyzer/kf.cc | 320 +++++++++++++++++- gcc/analyzer/region-model-manager.cc | 10 +- gcc/analyzer/region-model-manager.h | 4 +- gcc/analyzer/region-model.cc | 7 +- gcc/analyzer/region-model.h | 3 +- gcc/analyzer/region.cc | 14 + gcc/analyzer/region.h | 41 ++- gcc/analyzer/store.cc | 1 + gcc/analyzer/svalue.h | 13 +- gcc/doc/invoke.texi | 14 + .../c-c++-common/analyzer/strtok-1.c | 62 ++++ .../c-c++-common/analyzer/strtok-2.c | 18 + .../c-c++-common/analyzer/strtok-3.c | 26 ++ .../c-c++-common/analyzer/strtok-4.c | 42 +++ .../analyzer/strtok-cppreference.c | 50 +++ 19 files changed, 619 insertions(+), 17 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/analyzer/strtok-1.c create mode 100644 gcc/testsuite/c-c++-common/analyzer/strtok-2.c create mode 100644 gcc/testsuite/c-c++-common/analyzer/strtok-3.c create mode 100644 gcc/testsuite/c-c++-common/analyzer/strtok-4.c create mode 100644 gcc/testsuite/c-c++-common/analyzer/strtok-cppreference.c diff --git a/gcc/analyzer/analyzer.h b/gcc/analyzer/analyzer.h index 777293ff4b9d..f08572bb633e 100644 --- a/gcc/analyzer/analyzer.h +++ b/gcc/analyzer/analyzer.h @@ -326,7 +326,8 @@ public: void impl_call_pre (const call_details &cd) const override; }; -extern void register_known_functions (known_function_manager &mgr); +extern void register_known_functions (known_function_manager &kfm, + region_model_manager &rmm); extern void register_known_analyzer_functions (known_function_manager &kfm); extern void register_known_fd_functions (known_function_manager &kfm); extern void register_known_file_functions (known_function_manager &kfm); diff --git a/gcc/analyzer/analyzer.opt b/gcc/analyzer/analyzer.opt index fae2649389a8..a3c30caf2abe 100644 --- a/gcc/analyzer/analyzer.opt +++ b/gcc/analyzer/analyzer.opt @@ -222,6 +222,10 @@ Wanalyzer-tainted-size Common Var(warn_analyzer_tainted_size) Init(1) Warning Warn about code paths in which an unsanitized value is used as a size. +Wanalyzer-undefined-behavior-strtok +Common Var(warn_analyzer_undefined_behavior_strtok) Init(1) Warning +Warn about code paths in in which a call is made to strtok with undefined behavior. + Wanalyzer-use-after-free Common Var(warn_analyzer_use_after_free) Init(1) Warning Warn about code paths in which a freed value is used. diff --git a/gcc/analyzer/call-summary.cc b/gcc/analyzer/call-summary.cc index a18a1b1b40a7..ecb6fb13c9ec 100644 --- a/gcc/analyzer/call-summary.cc +++ b/gcc/analyzer/call-summary.cc @@ -585,6 +585,7 @@ call_summary_replay::convert_region_from_summary_1 (const region *summary_reg) case RK_STRING: case RK_ERRNO: case RK_UNKNOWN: + case RK_PRIVATE: /* We can reuse these regions directly. */ return summary_reg; diff --git a/gcc/analyzer/engine.cc b/gcc/analyzer/engine.cc index 041fe6a1d400..b4e855fcf24a 100644 --- a/gcc/analyzer/engine.cc +++ b/gcc/analyzer/engine.cc @@ -6174,7 +6174,8 @@ impl_run_checkers (logger *logger) auto_delete_vec checkers; make_checkers (checkers, logger); - register_known_functions (*eng.get_known_function_manager ()); + register_known_functions (*eng.get_known_function_manager (), + *eng.get_model_manager ()); plugin_analyzer_init_impl data (&checkers, eng.get_known_function_manager (), diff --git a/gcc/analyzer/kf.cc b/gcc/analyzer/kf.cc index 92959891fe44..5d8e04d97263 100644 --- a/gcc/analyzer/kf.cc +++ b/gcc/analyzer/kf.cc @@ -40,6 +40,40 @@ along with GCC; see the file COPYING3. If not see namespace ana { +/* Abstract subclass for describing undefined behavior of an API. */ + +class undefined_function_behavior + : public pending_diagnostic_subclass +{ +public: + undefined_function_behavior (const call_details &cd) + : m_call_stmt (cd.get_call_stmt ()), + m_callee_fndecl (cd.get_fndecl_for_call ()) + { + gcc_assert (m_call_stmt); + gcc_assert (m_callee_fndecl); + } + + const char *get_kind () const final override + { + return "undefined_behavior"; + } + + bool operator== (const undefined_function_behavior &other) const + { + return (m_call_stmt == other.m_call_stmt + && m_callee_fndecl == other.m_callee_fndecl); + } + + bool terminate_path_p () const final override { return true; } + + tree get_callee_fndecl () const { return m_callee_fndecl; } + +private: + const gimple *m_call_stmt; + tree m_callee_fndecl; +}; + /* class pure_known_function_with_default_return : public known_function. */ void @@ -1679,6 +1713,288 @@ kf_strstr::impl_call_post (const call_details &cd) const } } +/* Handle calls to "strtok". + See e.g. + https://en.cppreference.com/w/c/string/byte/strtok + https://man7.org/linux/man-pages/man3/strtok.3.html */ + +class kf_strtok : public known_function +{ +public: + class undefined_behavior : public undefined_function_behavior + { + public: + undefined_behavior (const call_details &cd) + : undefined_function_behavior (cd) + { + } + int get_controlling_option () const final override + { + return OPT_Wanalyzer_undefined_behavior_strtok; + } + + bool emit (rich_location *rich_loc, logger *) final override + { + /* CWE-476: NULL Pointer Dereference. */ + diagnostic_metadata m; + m.add_cwe (476); + if (warning_meta + (rich_loc, m, get_controlling_option (), + "calling %qD for first time with NULL as argument 1" + " has undefined behavior", + get_callee_fndecl ())) + { + inform (rich_loc->get_loc (), + "some implementations of %qD may crash on such input", + get_callee_fndecl ()); + return true; + } + return false; + } + + label_text describe_final_event (const evdesc::final_event &ev) + final override + { + return ev.formatted_print + ("calling %qD for first time with NULL as argument 1" + " has undefined behavior", + get_callee_fndecl ()); + } + }; + + /* An outcome of a "strtok" call. + We have a four-way bifurcation of the analysis via the + 4 combinations of two flags: + - m_nonnull_str covers whether the "str" param was null or non-null + - m_found covers whether the result is null or non-null + */ + class strtok_call_info : public call_info + { + public: + strtok_call_info (const call_details &cd, + const private_region &private_reg, + bool nonnull_str, + bool found) + : call_info (cd), + m_private_reg (private_reg), + m_nonnull_str (nonnull_str), + m_found (found) + { + } + + label_text get_desc (bool can_colorize) const final override + { + if (m_nonnull_str) + { + if (m_found) + return make_label_text + (can_colorize, + "when %qE on non-NULL string returns non-NULL", + get_fndecl ()); + else + return make_label_text + (can_colorize, + "when %qE on non-NULL string returns NULL", + get_fndecl ()); + } + else + { + if (m_found) + return make_label_text + (can_colorize, + "when %qE with NULL string (using prior) returns non-NULL", + get_fndecl ()); + else + return make_label_text + (can_colorize, + "when %qE with NULL string (using prior) returns NULL", + get_fndecl ()); + } + } + + bool update_model (region_model *model, + const exploded_edge *, + region_model_context *ctxt) const final override + { + region_model_manager *mgr = model->get_manager (); + const call_details cd (get_call_details (model, ctxt)); + const svalue *str_sval = cd.get_arg_svalue (0); + /* const svalue *delim_sval = cd.get_arg_svalue (1); */ + + cd.check_for_null_terminated_string_arg (1); + /* We check that either arg 0 or the private region is null + terminated below. */ + + const svalue *null_ptr_sval + = mgr->get_or_create_null_ptr (cd.get_arg_type (0));; + if (!model->add_constraint (str_sval, + m_nonnull_str ? NE_EXPR : EQ_EXPR, + null_ptr_sval, + cd.get_ctxt ())) + return false; + + if (m_nonnull_str) + { + /* Update internal buffer. */ + model->set_value (&m_private_reg, + mgr->get_or_create_unmergeable (str_sval), + ctxt); + } + else + { + /* Read from internal buffer. */ + str_sval = model->get_store_value (&m_private_reg, ctxt); + + /* The initial value of the private region is NULL when we're + on a path from main. */ + if (const initial_svalue *initial_sval + = str_sval->dyn_cast_initial_svalue ()) + if (initial_sval->get_region () == &m_private_reg + && model->called_from_main_p ()) + { + /* Implementations of strtok do not necessarily check for NULL + here, and may crash; see PR analyzer/107573. + Warn for this, if we were definitely passed NULL. */ + if (cd.get_arg_svalue (0)->all_zeroes_p ()) + { + if (ctxt) + ctxt->warn (::make_unique (cd)); + } + + /* Assume that "str" was actually non-null; terminate + this path. */ + return false; + } + + /* Now assume str_sval is non-null. */ + if (!model->add_constraint (str_sval, + NE_EXPR, + null_ptr_sval, + cd.get_ctxt ())) + return false; + } + + const region *buf_reg = model->deref_rvalue (str_sval, NULL_TREE, ctxt); + model->scan_for_null_terminator (buf_reg, + NULL_TREE, + nullptr, + ctxt); + + if (m_found) + { + const region *str_reg + = model->deref_rvalue (str_sval, cd.get_arg_tree (0), + cd.get_ctxt ()); + /* We want to figure out the start and nul terminator + for the token. + For each, we want str_sval + OFFSET for some unknown OFFSET. + Use a conjured_svalue to represent the offset, + using the str_reg as the id of the conjured_svalue. */ + const svalue *start_offset + = mgr->get_or_create_conjured_svalue (size_type_node, + cd.get_call_stmt (), + str_reg, + conjured_purge (model, + ctxt), + 0); + const svalue *nul_offset + = mgr->get_or_create_conjured_svalue (size_type_node, + cd.get_call_stmt (), + str_reg, + conjured_purge (model, + ctxt), + 1); + + tree char_ptr_type = build_pointer_type (char_type_node); + const svalue *result + = mgr->get_or_create_binop (char_ptr_type, POINTER_PLUS_EXPR, + str_sval, start_offset); + cd.maybe_set_lhs (result); + + /* nul_offset + 1; the offset to use for the next call. */ + const svalue *next_offset + = mgr->get_or_create_binop (size_type_node, PLUS_EXPR, + nul_offset, + mgr->get_or_create_int_cst + (char_type_node, 1)); + + /* Write '\0' to str_sval[nul_offset]. */ + const svalue *ptr_to_term + = mgr->get_or_create_binop (char_ptr_type, POINTER_PLUS_EXPR, + str_sval, nul_offset); + const region *terminator_reg + = model->deref_rvalue (ptr_to_term, NULL_TREE, cd.get_ctxt ()); + model->set_value (terminator_reg, + mgr->get_or_create_unmergeable + (mgr->get_or_create_int_cst (char_type_node, + 0)), + cd.get_ctxt ()); + + /* Update saved ptr to be at [nul_offset + 1]. */ + const svalue *ptr_to_next + = mgr->get_or_create_binop (cd.get_lhs_type (), POINTER_PLUS_EXPR, + str_sval, next_offset); + model->set_value (&m_private_reg, ptr_to_next, ctxt); + } + else + if (tree lhs_type = cd.get_lhs_type ()) + { + const svalue *result + = mgr->get_or_create_int_cst (lhs_type, 0); + cd.maybe_set_lhs (result); + } + return true; + } + private: + const private_region &m_private_reg; + bool m_nonnull_str; + bool m_found; + }; // class strtok_call_info + + kf_strtok (region_model_manager &mgr) + : m_private_reg (mgr.alloc_symbol_id (), + mgr.get_root_region (), + get_region_type (), + "strtok buffer") + { + } + + bool matches_call_types_p (const call_details &cd) const final override + { + return (cd.num_args () == 2 + && POINTER_TYPE_P (cd.get_arg_type (0)) + && POINTER_TYPE_P (cd.get_arg_type (1))); + } + + void impl_call_post (const call_details &cd) const final override + { + if (cd.get_ctxt ()) + { + /* Four-way bifurcation, based on whether: + - the str is non-null + - the result is non-null + Typically the str is either null or non-null at a particular site, + so hopefully this will generally just lead to two out-edges. */ + cd.get_ctxt ()->bifurcate + (make_unique (cd, m_private_reg, false, false)); + cd.get_ctxt ()->bifurcate + (make_unique (cd, m_private_reg, false, true)); + cd.get_ctxt ()->bifurcate + (make_unique (cd, m_private_reg, true, false)); + cd.get_ctxt ()->bifurcate + (make_unique (cd, m_private_reg, true, true)); + cd.get_ctxt ()->terminate_path (); + } + } + +private: + static tree get_region_type () + { + return build_pointer_type (char_type_node); + } + const private_region m_private_reg; +}; + class kf_ubsan_bounds : public internal_known_function { /* Empty. */ @@ -1823,7 +2139,8 @@ register_atomic_builtins (known_function_manager &kfm) analyzer (as opposed to plugins). */ void -register_known_functions (known_function_manager &kfm) +register_known_functions (known_function_manager &kfm, + region_model_manager &rmm) { /* Debugging/test support functions, all with a "__analyzer_" prefix. */ register_known_analyzer_functions (kfm); @@ -1911,6 +2228,7 @@ register_known_functions (known_function_manager &kfm) { kfm.add ("fopen", make_unique ()); kfm.add ("putenv", make_unique ()); + kfm.add ("strtok", make_unique (rmm)); register_known_fd_functions (kfm); register_known_file_functions (kfm); diff --git a/gcc/analyzer/region-model-manager.cc b/gcc/analyzer/region-model-manager.cc index 22246876f8f9..921edc558681 100644 --- a/gcc/analyzer/region-model-manager.cc +++ b/gcc/analyzer/region-model-manager.cc @@ -1261,7 +1261,8 @@ conjured_purge::purge (const conjured_svalue *sval) const } /* Return the svalue * of type TYPE for the value conjured for ID_REG - at STMT, creating it if necessary. + at STMT (using IDX for any further disambiguation), + creating it if necessary. Use P to purge existing state from the svalue, for the case where a conjured_svalue would be reused along an execution path. */ @@ -1269,9 +1270,10 @@ const svalue * region_model_manager::get_or_create_conjured_svalue (tree type, const gimple *stmt, const region *id_reg, - const conjured_purge &p) + const conjured_purge &p, + unsigned idx) { - conjured_svalue::key_t key (type, stmt, id_reg); + conjured_svalue::key_t key (type, stmt, id_reg, idx); if (conjured_svalue **slot = m_conjured_values_map.get (key)) { const conjured_svalue *sval = *slot; @@ -1283,7 +1285,7 @@ region_model_manager::get_or_create_conjured_svalue (tree type, return sval; } conjured_svalue *conjured_sval - = new conjured_svalue (alloc_symbol_id (), type, stmt, id_reg); + = new conjured_svalue (alloc_symbol_id (), type, stmt, id_reg, idx); RETURN_UNKNOWN_IF_TOO_COMPLEX (conjured_sval); m_conjured_values_map.put (key, conjured_sval); return conjured_sval; diff --git a/gcc/analyzer/region-model-manager.h b/gcc/analyzer/region-model-manager.h index a5281819a69b..2ddd7de7ccf9 100644 --- a/gcc/analyzer/region-model-manager.h +++ b/gcc/analyzer/region-model-manager.h @@ -79,7 +79,8 @@ public: const binding_map &map); const svalue *get_or_create_conjured_svalue (tree type, const gimple *stmt, const region *id_reg, - const conjured_purge &p); + const conjured_purge &p, + unsigned idx = 0); const svalue * get_or_create_asm_output_svalue (tree type, const gasm *asm_stmt, @@ -105,6 +106,7 @@ public: const svalue *create_unique_svalue (tree type); /* region consolidation. */ + const root_region *get_root_region () const { return &m_root_region; } const stack_region * get_stack_region () const { return &m_stack_region; } const heap_region *get_heap_region () const { return &m_heap_region; } const code_region *get_code_region () const { return &m_code_region; } diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc index 052c47d38f17..420c10380a4e 100644 --- a/gcc/analyzer/region-model.cc +++ b/gcc/analyzer/region-model.cc @@ -3884,8 +3884,10 @@ region_model::scan_for_null_terminator (const region *reg, byte_range bytes_to_read (src_byte_offset, 1); const svalue *sval = get_store_bytes (base_reg, bytes_to_read, ctxt); tree byte_expr - = get_tree_for_byte_offset (expr, - src_byte_offset - initial_src_byte_offset); + = (expr + ? get_tree_for_byte_offset (expr, + src_byte_offset - initial_src_byte_offset) + : NULL_TREE); check_for_poison (sval, byte_expr, nullptr, ctxt); if (base_reg->can_have_initial_svalue_p ()) { @@ -5077,6 +5079,7 @@ region_model::get_representative_path_var_1 (const region *reg, case RK_VAR_ARG: case RK_ERRNO: case RK_UNKNOWN: + case RK_PRIVATE: return path_var (NULL_TREE, 0); } } diff --git a/gcc/analyzer/region-model.h b/gcc/analyzer/region-model.h index e26d18713b1d..2e15924fddb8 100644 --- a/gcc/analyzer/region-model.h +++ b/gcc/analyzer/region-model.h @@ -559,6 +559,8 @@ class region_model callback (model, prev_model, retval, ctxt); } + bool called_from_main_p () const; + private: const region *get_lvalue_1 (path_var pv, region_model_context *ctxt) const; const svalue *get_rvalue_1 (path_var pv, region_model_context *ctxt) const; @@ -606,7 +608,6 @@ private: bool nonnull, region_model_context *ctxt); - bool called_from_main_p () const; const svalue *get_initial_value_for_global (const region *reg) const; const region * get_region_for_poisoned_expr (tree expr) const; diff --git a/gcc/analyzer/region.cc b/gcc/analyzer/region.cc index 730dab3d707b..4feb9721ae78 100644 --- a/gcc/analyzer/region.cc +++ b/gcc/analyzer/region.cc @@ -514,6 +514,8 @@ region::get_memory_space () const return MEMSPACE_HEAP; case RK_STRING: return MEMSPACE_READONLY_DATA; + case RK_PRIVATE: + return MEMSPACE_PRIVATE; } if (iter->get_kind () == RK_CAST) iter = iter->dyn_cast_cast_region ()->get_original_region (); @@ -543,6 +545,7 @@ region::can_have_initial_svalue_p () const case MEMSPACE_CODE: case MEMSPACE_GLOBALS: case MEMSPACE_READONLY_DATA: + case MEMSPACE_PRIVATE: /* Such regions have initial_svalues. */ return true; @@ -2259,6 +2262,17 @@ errno_region::dump_to_pp (pretty_printer *pp, bool simple) const pp_string (pp, "errno_region()"); } +/* class private_region : public region. */ + +void +private_region::dump_to_pp (pretty_printer *pp, bool simple) const +{ + if (simple) + pp_printf (pp, "PRIVATE_REG(%qs)", m_desc); + else + pp_printf (pp, "private_region(%qs)", m_desc); +} + /* class unknown_region : public region. */ /* Implementation of region::dump_to_pp vfunc for unknown_region. */ diff --git a/gcc/analyzer/region.h b/gcc/analyzer/region.h index 47242385fd15..fee161cf8630 100644 --- a/gcc/analyzer/region.h +++ b/gcc/analyzer/region.h @@ -35,7 +35,8 @@ enum memory_space MEMSPACE_STACK, MEMSPACE_HEAP, MEMSPACE_READONLY_DATA, - MEMSPACE_THREAD_LOCAL + MEMSPACE_THREAD_LOCAL, + MEMSPACE_PRIVATE }; /* An enum for discriminating between the different concrete subclasses @@ -65,6 +66,7 @@ enum region_kind RK_BIT_RANGE, RK_VAR_ARG, RK_ERRNO, + RK_PRIVATE, RK_UNKNOWN, }; @@ -108,6 +110,7 @@ enum region_kind var_arg_region (RK_VAR_ARG): a region for the N-th vararg within a frame_region for a variadic call errno_region (RK_ERRNO): a region for holding "errno" + private_region (RK_PRIVATE): a region for internal state of an API unknown_region (RK_UNKNOWN): for handling unimplemented tree codes. */ /* Abstract base class for representing ways of accessing chunks of memory. @@ -1434,6 +1437,42 @@ is_a_helper ::test (const region *reg) namespace ana { +/* Similar to a decl region, but we don't have the decl. + For implementing e.g. static buffers of known_functions, + or other internal state of an API. + + These are owned by known_function instances, rather than the + region_model_manager. */ + +class private_region : public region +{ +public: + private_region (unsigned id, const region *parent, tree type, + const char *desc) + : region (complexity (parent), id, parent, type), + m_desc (desc) + {} + + enum region_kind get_kind () const final override { return RK_PRIVATE; } + + void dump_to_pp (pretty_printer *pp, bool simple) const final override; + +private: + const char *m_desc; +}; + +} // namespace ana + +template <> +template <> +inline bool +is_a_helper ::test (const region *reg) +{ + return reg->get_kind () == RK_PRIVATE; +} + +namespace ana { + /* An unknown region, for handling unimplemented tree codes. */ class unknown_region : public region diff --git a/gcc/analyzer/store.cc b/gcc/analyzer/store.cc index aeea69311378..602508598cc9 100644 --- a/gcc/analyzer/store.cc +++ b/gcc/analyzer/store.cc @@ -3372,6 +3372,7 @@ store::replay_call_summary_cluster (call_summary_replay &r, case RK_HEAP_ALLOCATED: case RK_DECL: case RK_ERRNO: + case RK_PRIVATE: { const region *caller_dest_reg = r.convert_region_from_summary (summary_base_reg); diff --git a/gcc/analyzer/svalue.h b/gcc/analyzer/svalue.h index 263a0d7af6f5..9415e9808959 100644 --- a/gcc/analyzer/svalue.h +++ b/gcc/analyzer/svalue.h @@ -1360,8 +1360,8 @@ public: /* A support class for uniquifying instances of conjured_svalue. */ struct key_t { - key_t (tree type, const gimple *stmt, const region *id_reg) - : m_type (type), m_stmt (stmt), m_id_reg (id_reg) + key_t (tree type, const gimple *stmt, const region *id_reg, unsigned idx) + : m_type (type), m_stmt (stmt), m_id_reg (id_reg), m_idx (idx) {} hashval_t hash () const @@ -1377,7 +1377,8 @@ public: { return (m_type == other.m_type && m_stmt == other.m_stmt - && m_id_reg == other.m_id_reg); + && m_id_reg == other.m_id_reg + && m_idx == other.m_idx); } /* Use m_stmt to mark empty/deleted, as m_type can be NULL for @@ -1393,12 +1394,13 @@ public: tree m_type; const gimple *m_stmt; const region *m_id_reg; + unsigned m_idx; }; conjured_svalue (symbol::id_t id, tree type, const gimple *stmt, - const region *id_reg) + const region *id_reg, unsigned idx) : svalue (complexity (id_reg), id, type), - m_stmt (stmt), m_id_reg (id_reg) + m_stmt (stmt), m_id_reg (id_reg), m_idx (idx) { gcc_assert (m_stmt != NULL); } @@ -1419,6 +1421,7 @@ public: private: const gimple *m_stmt; const region *m_id_reg; + unsigned m_idx; }; } // namespace ana diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 557d613a1e63..1f109679c703 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -490,6 +490,7 @@ Objective-C and Objective-C++ Dialects}. -Wno-analyzer-tainted-offset -Wno-analyzer-tainted-size -Wanalyzer-too-complex +-Wno-analyzer-undefined-behavior-strtok -Wno-analyzer-unsafe-call-within-signal-handler -Wno-analyzer-use-after-free -Wno-analyzer-use-of-pointer-in-stale-stack-frame @@ -10424,6 +10425,7 @@ Enabling this option effectively enables the following warnings: -Wanalyzer-tainted-divisor -Wanalyzer-tainted-offset -Wanalyzer-tainted-size +-Wanalyzer-undefined-behavior-strtok -Wanalyzer-unsafe-call-within-signal-handler -Wanalyzer-use-after-free -Wanalyzer-use-of-pointer-in-stale-stack-frame @@ -11060,6 +11062,18 @@ attacker could inject an out-of-bounds access. See @uref{https://cwe.mitre.org/data/definitions/129.html, CWE-129: Improper Validation of Array Index}. +@opindex Wanalyzer-undefined-behavior-strtok +@opindex Wno-analyzer-undefined-behavior-strtok +@item -Wno-analyzer-undefined-behavior-strtok +This warning requires @option{-fanalyzer}, which enables it; use +@option{-Wno-analyzer-undefined-behavior-strtok} to disable it. + +This diagnostic warns for paths through the code in which a +call is made to @code{strtok} with undefined behavior. + +Specifically, passing NULL as the first parameter for the initial +call to @code{strtok} within a process has undefined behavior. + @opindex Wanalyzer-unsafe-call-within-signal-handler @opindex Wno-analyzer-unsafe-call-within-signal-handler @item -Wno-analyzer-unsafe-call-within-signal-handler diff --git a/gcc/testsuite/c-c++-common/analyzer/strtok-1.c b/gcc/testsuite/c-c++-common/analyzer/strtok-1.c new file mode 100644 index 000000000000..33150ced90a5 --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/strtok-1.c @@ -0,0 +1,62 @@ +/* { dg-additional-options "-fpermissive" { target c++ } } */ + +#include "../../gcc.dg/analyzer/analyzer-decls.h" + +typedef __SIZE_TYPE__ size_t; + +extern char *strtok (char *str, const char *delim) + __attribute__((nonnull (2))); + +char * +test_passthrough (char *str, const char *delim) +{ + return strtok (str, delim); +} + +char * +test_null_str (const char *delim) +{ + return strtok (NULL, delim); +} + +char * +test_null_delim (char *str) +{ + return strtok (str, NULL); /* { dg-warning "use of NULL where non-null expected" } */ + /* This is from the attribute. */ +} + +char * +test_write_to_literal (void) +{ + const char *str = "hello world"; + return strtok ((char *)str, " "); /* { dg-warning "write to string literal" } */ +} + +char * +test_unterminated_str (const char *delim) +{ + char str[3] = "abc"; /* { dg-warning "initializer-string for '\[^\n\]*' is too long" "" { target c++ } } */ + return strtok (str, delim); /* { dg-warning "stack-based buffer over-read" } */ +} + +char * +test_unterminated_delimstr (char *str) +{ + char delim[3] = "abc"; /* { dg-warning "initializer-string for '\[^\n\]*' is too long" "" { target c++ } } */ + return strtok (str, delim); /* { dg-warning "stack-based buffer over-read" } */ + /* { dg-message "while looking for null terminator for argument 2" "" { target *-*-* } .-1 } */ +} + +size_t +test_use_after_free_via_null_2 (char *p) +{ + strtok (p, " "); + __builtin_free (p); + + char *q = strtok (NULL, " "); /* TODO: should complain about this. */ + if (q) + return __builtin_strlen (q); /* TODO: should complain about this. */ + else + return 0; +} diff --git a/gcc/testsuite/c-c++-common/analyzer/strtok-2.c b/gcc/testsuite/c-c++-common/analyzer/strtok-2.c new file mode 100644 index 000000000000..0336bf0cfe9d --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/strtok-2.c @@ -0,0 +1,18 @@ +#include "../../gcc.dg/analyzer/analyzer-decls.h" + +extern char *strtok (char *str, const char *delim) + __attribute__((nonnull (2))); + +int +main(int argc, char *argv[]) +{ + char *cmd; + char *arg; + + if (argc < 2) + return -1; + + cmd = strtok (argv[1], " "); /* { dg-bogus "undefined behavior" } */ + arg = strtok (NULL, " "); + return 0; +} diff --git a/gcc/testsuite/c-c++-common/analyzer/strtok-3.c b/gcc/testsuite/c-c++-common/analyzer/strtok-3.c new file mode 100644 index 000000000000..f18f1a9eebe8 --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/strtok-3.c @@ -0,0 +1,26 @@ +#include "../../gcc.dg/analyzer/analyzer-decls.h" + +extern char *strtok (char *str, const char *delim) + __attribute__((nonnull (2))); + +int +main (int argc, char *argv[]) +{ + char *cmd; + char *arg; + + if (argc < 2) + return -1; + + cmd = strtok (NULL, " "); /* { dg-line "first_call" } */ + arg = strtok (NULL, " "); + return 0; + + /* C: + { dg-warning "calling 'strtok' for first time with NULL as argument 1 has undefined behavior \\\[CWE-476\\\] \\\[-Wanalyzer-undefined-behavior-strtok\\\]" "" { target c } first_call } + { dg-message "some implementations of 'strtok' may crash on such input" "" { target c } first_call } */ + + /* C++: + { dg-warning "calling 'char\\* strtok\\(char\\*, const char\\*\\)' for first time with NULL as argument 1 has undefined behavior \\\[CWE-476\\\] \\\[-Wanalyzer-undefined-behavior-strtok\\\]" "" { target c++ } first_call } + { dg-message "some implementations of 'char\\* strtok\\(char\\*, const char\\*\\)' may crash on such input" "" { target c++ } first_call } */ +} diff --git a/gcc/testsuite/c-c++-common/analyzer/strtok-4.c b/gcc/testsuite/c-c++-common/analyzer/strtok-4.c new file mode 100644 index 000000000000..b6b7d49e3c3c --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/strtok-4.c @@ -0,0 +1,42 @@ +#include "../../gcc.dg/analyzer/analyzer-decls.h" + +extern char *strtok (char *str, const char *delim); + +void test (void) +{ + char buffer[] = { 'a', 'x', 'b', 'y', 'c', '\0' }; + + char *p1 = strtok (buffer, "x"); + /* Should result in: + | buffer[] = { 'a', '\0', 'b', 'y', 'c', '\0' }, + | ^ ^ ^ + | | | | + | | | internal ptr + | p1 modified. */ + + char *p2 = strtok (NULL, "y"); /* note new delimiter. */ + /* Should result in: + | buffer[] = { 'a', '\0', 'b', '\0', 'c', '\0' }, + | ^ ^ ^ + | | | | + | | | internal ptr + | p2 modified. */ + + char *p3 = strtok (NULL, "z"); /* again new delimiter. */ + /* Should result in: + | buffer[] = { 'a', '\0', 'b', '\0', 'c', '\0' }, + | ^ ^~ + | | | + | | internal ptr + | p3. */ + + char *p4 = strtok (NULL, "z"); + /* Should result in p4 == NULL, and: + | buffer[] = { 'a', '\0', 'b', '\0', 'c', '\0' }, + | ^~ + | | + | internal ptr. */ + + /* We don't yet model strtok closely enough to capture + these exact behaviors. */ +} diff --git a/gcc/testsuite/c-c++-common/analyzer/strtok-cppreference.c b/gcc/testsuite/c-c++-common/analyzer/strtok-cppreference.c new file mode 100644 index 000000000000..a2e912341d68 --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/strtok-cppreference.c @@ -0,0 +1,50 @@ +/* Example of strtok adapted from: + https://en.cppreference.com/w/c/string/byte/strtok + which is + "licensed under Creative Commons Attribution-Sharealike 3.0 + Unported License (CC-BY-SA) and by the GNU Free Documentation License + (GFDL) (unversioned, with no invariant sections, front-cover texts, or + back-cover texts). That means that you can use this site in almost any way + you like, including mirroring, copying, translating, etc. All we would ask + is to provide link back to cppreference.com so that people know where to + get the most up-to-date content. In addition to that, any modified content + should be released under an equivalent license so that everyone could + benefit from the modified versions. " */ + +#define __STDC_WANT_LIB_EXT1__ 0 +#include +#include + +int main(void) +{ + char input[] = "A bird came down the walk"; + printf("Parsing the input string '%s'\n", input); + char *token = strtok(input, " "); + while(token) { + puts(token); + token = strtok(NULL, " "); + } + + printf("Contents of the input string now: '"); + for(size_t n = 0; n < sizeof input; ++n) + input[n] ? putchar(input[n]) : fputs("\\0", stdout); + puts("'"); + +#ifdef __STDC_LIB_EXT1__ + char str[] = "A bird came down the walk"; + rsize_t strmax = sizeof str; + const char *delim = " "; + char *next_token; + printf("Parsing the input string '%s'\n", str); + token = strtok_s(str, &strmax, delim, &next_token); + while(token) { + puts(token); + token = strtok_s(NULL, &strmax, delim, &next_token); + } + + printf("Contents of the input string now: '"); + for(size_t n = 0; n < sizeof str; ++n) + str[n] ? putchar(str[n]) : fputs("\\0", stdout); + puts("'"); +#endif +} From af7fa3135b6b046fe3ba869993221042a65301eb Mon Sep 17 00:00:00 2001 From: Juzhe-Zhong Date: Sun, 19 Nov 2023 09:45:33 +0800 Subject: [PATCH 168/169] RISC-V: Fix bug of tuple move splitter PR target/112561 gcc/ChangeLog: * config/riscv/riscv-v.cc (expand_tuple_move): Fix bug. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/pr112561.c: New test. --- gcc/config/riscv/riscv-v.cc | 4 ++++ .../gcc.target/riscv/rvv/autovec/pr112561.c | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112561.c diff --git a/gcc/config/riscv/riscv-v.cc b/gcc/config/riscv/riscv-v.cc index c718b5046181..291f3c75282e 100644 --- a/gcc/config/riscv/riscv-v.cc +++ b/gcc/config/riscv/riscv-v.cc @@ -2033,6 +2033,10 @@ expand_tuple_move (rtx *ops) offset = ops[2]; } + /* Non-fractional LMUL has whole register moves that don't require a + vsetvl for VLMAX. */ + if (fractional_p) + emit_vlmax_vsetvl (subpart_mode, ops[4]); if (MEM_P (ops[1])) { /* Load operations. */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112561.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112561.c new file mode 100644 index 000000000000..25e61fa12c06 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112561.c @@ -0,0 +1,16 @@ +/* { dg-do run { target { riscv_v } } } */ +/* { dg-options "-O3 -ftree-vectorize --param=riscv-autovec-preference=fixed-vlmax -mcmodel=medlow" } */ + +int printf(char *, ...); +int a, b, c, e; +short d[7][7] = {}; +int main() { + short f; + c = 0; + for (; c <= 6; c++) { + e |= d[c][c] & 1; + b &= f & 3; + } + printf("%d\n", a); + return 0; +} From 78d132d73ec3784a77b3e2391a540bcdae714bb0 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Sun, 19 Nov 2023 06:26:40 -0500 Subject: [PATCH 169/169] libcpp: split decls out to rich-location.h The various decls relating to rich_location are in libcpp/include/line-map.h, but they don't relate to line maps. Split them out to their own header: libcpp/include/rich-location.h No functional change intended. gcc/ChangeLog: * Makefile.in (CPPLIB_H): Add libcpp/include/rich-location.h. * coretypes.h (class rich_location): New forward decl. gcc/analyzer/ChangeLog: * analyzer.h: Include "rich-location.h". gcc/c-family/ChangeLog: * c-lex.cc: Include "rich-location.h". gcc/cp/ChangeLog: * mapper-client.cc: Include "rich-location.h". gcc/ChangeLog: * diagnostic.h: Include "rich-location.h". * edit-context.h (class fixit_hint): New forward decl. * gcc-rich-location.h: Include "rich-location.h". * genmatch.cc: Likewise. * pretty-print.h: Likewise. gcc/rust/ChangeLog: * rust-location.h: Include "rich-location.h". libcpp/ChangeLog: * Makefile.in (TAGS_SOURCES): Add "include/rich-location.h". * include/cpplib.h (class rich_location): New forward decl. * include/line-map.h (class range_label) (enum range_display_kind, struct location_range) (class semi_embedded_vec, class rich_location, class label_text) (class range_label, class fixit_hint): Move to... * include/rich-location.h: ...this new file. * internal.h: Include "rich-location.h". Signed-off-by: David Malcolm --- gcc/Makefile.in | 1 + gcc/analyzer/analyzer.h | 1 + gcc/c-family/c-lex.cc | 1 + gcc/coretypes.h | 1 + gcc/cp/mapper-client.cc | 1 + gcc/diagnostic.h | 1 + gcc/edit-context.h | 1 + gcc/gcc-rich-location.h | 2 + gcc/genmatch.cc | 1 + gcc/pretty-print.h | 1 + gcc/rust/rust-location.h | 1 + libcpp/Makefile.in | 4 +- libcpp/include/cpplib.h | 2 + libcpp/include/line-map.h | 671 ------------------------------- libcpp/include/rich-location.h | 695 +++++++++++++++++++++++++++++++++ libcpp/internal.h | 1 + 16 files changed, 713 insertions(+), 672 deletions(-) create mode 100644 libcpp/include/rich-location.h diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 7228b79f223a..753f2f36618e 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1038,6 +1038,7 @@ SYSTEM_H = system.h hwint.h $(srcdir)/../include/libiberty.h \ $(HASHTAB_H) PREDICT_H = predict.h predict.def CPPLIB_H = $(srcdir)/../libcpp/include/line-map.h \ + $(srcdir)/../libcpp/include/rich-location.h \ $(srcdir)/../libcpp/include/cpplib.h CODYLIB_H = $(srcdir)/../libcody/cody.hh INPUT_H = $(srcdir)/../libcpp/include/line-map.h input.h diff --git a/gcc/analyzer/analyzer.h b/gcc/analyzer/analyzer.h index f08572bb633e..cf32d4b85b15 100644 --- a/gcc/analyzer/analyzer.h +++ b/gcc/analyzer/analyzer.h @@ -21,6 +21,7 @@ along with GCC; see the file COPYING3. If not see #ifndef GCC_ANALYZER_ANALYZER_H #define GCC_ANALYZER_ANALYZER_H +#include "rich-location.h" #include "function.h" #include "json.h" #include "tristate.h" diff --git a/gcc/c-family/c-lex.cc b/gcc/c-family/c-lex.cc index 06c2453c89a6..86ec679aebfe 100644 --- a/gcc/c-family/c-lex.cc +++ b/gcc/c-family/c-lex.cc @@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see #include "file-prefix-map.h" /* remap_macro_filename() */ #include "langhooks.h" #include "attribs.h" +#include "rich-location.h" /* We may keep statistics about how long which files took to compile. */ static int header_time, body_time; diff --git a/gcc/coretypes.h b/gcc/coretypes.h index 9848cde2b97b..fe5b868fb4f3 100644 --- a/gcc/coretypes.h +++ b/gcc/coretypes.h @@ -156,6 +156,7 @@ struct cl_optimization; struct cl_option; struct cl_decoded_option; struct cl_option_handlers; +class rich_location; class diagnostic_context; class pretty_printer; class diagnostic_event_id_t; diff --git a/gcc/cp/mapper-client.cc b/gcc/cp/mapper-client.cc index 927271952468..f1a0c4cc009a 100644 --- a/gcc/cp/mapper-client.cc +++ b/gcc/cp/mapper-client.cc @@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see #include "system.h" #include "line-map.h" +#include "rich-location.h" #include "diagnostic-core.h" #include "mapper-client.h" #include "intl.h" diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h index dbf972d25875..cbd25541f502 100644 --- a/gcc/diagnostic.h +++ b/gcc/diagnostic.h @@ -21,6 +21,7 @@ along with GCC; see the file COPYING3. If not see #ifndef GCC_DIAGNOSTIC_H #define GCC_DIAGNOSTIC_H +#include "rich-location.h" #include "pretty-print.h" #include "diagnostic-core.h" diff --git a/gcc/edit-context.h b/gcc/edit-context.h index 3ae9ba103ca7..71735c8b9c6f 100644 --- a/gcc/edit-context.h +++ b/gcc/edit-context.h @@ -22,6 +22,7 @@ along with GCC; see the file COPYING3. If not see #include "typed-splay-tree.h" +class fixit_hint; class edit_context; class edited_file; diff --git a/gcc/gcc-rich-location.h b/gcc/gcc-rich-location.h index ffba4b8abcfd..e42daa44b70c 100644 --- a/gcc/gcc-rich-location.h +++ b/gcc/gcc-rich-location.h @@ -20,6 +20,8 @@ along with GCC; see the file COPYING3. If not see #ifndef GCC_RICH_LOCATION_H #define GCC_RICH_LOCATION_H +#include "rich-location.h" + /* A gcc_rich_location is libcpp's rich_location with additional helper methods for working with gcc's types. The class is not copyable or assignable because rich_location isn't. */ diff --git a/gcc/genmatch.cc b/gcc/genmatch.cc index 3488764ec640..98268ee19c9b 100644 --- a/gcc/genmatch.cc +++ b/gcc/genmatch.cc @@ -25,6 +25,7 @@ along with GCC; see the file COPYING3. If not see #include "system.h" #include "coretypes.h" #include +#include "rich-location.h" #include "errors.h" #include "hash-table.h" #include "hash-set.h" diff --git a/gcc/pretty-print.h b/gcc/pretty-print.h index 9ba2c0a406e1..138c582c8a79 100644 --- a/gcc/pretty-print.h +++ b/gcc/pretty-print.h @@ -22,6 +22,7 @@ along with GCC; see the file COPYING3. If not see #define GCC_PRETTY_PRINT_H #include "obstack.h" +#include "rich-location.h" #include "diagnostic-url.h" /* Maximum number of format string arguments. */ diff --git a/gcc/rust/rust-location.h b/gcc/rust/rust-location.h index 9cb29b20919f..873b40f58c0c 100644 --- a/gcc/rust/rust-location.h +++ b/gcc/rust/rust-location.h @@ -21,6 +21,7 @@ #ifndef RUST_LOCATION_H #define RUST_LOCATION_H +#include "rich-location.h" #include "rust-system.h" // A location in an input source file. diff --git a/libcpp/Makefile.in b/libcpp/Makefile.in index faf6834f1ee7..1e063a5ac97f 100644 --- a/libcpp/Makefile.in +++ b/libcpp/Makefile.in @@ -270,7 +270,9 @@ po/$(PACKAGE).pot: $(libcpp_a_SOURCES) ETAGS = @ETAGS@ TAGS_SOURCES = $(libcpp_a_SOURCES) internal.h system.h ucnid.h \ - include/cpplib.h include/line-map.h include/mkdeps.h include/symtab.h + include/cpplib.h include/line-map.h include/mkdeps.h include/symtab.h \ + include/rich-location.h + TAGS: $(TAGS_SOURCES) cd $(srcdir) && $(ETAGS) $(TAGS_SOURCES) diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h index 54814f335d73..f857ffa44796 100644 --- a/libcpp/include/cpplib.h +++ b/libcpp/include/cpplib.h @@ -38,6 +38,8 @@ typedef struct cpp_dir cpp_dir; struct _cpp_file; +class rich_location; + /* The first three groups, apart from '=', can appear in preprocessor expressions (+= and -= are used to indicate unary + and - resp.). This allows a lookup table to be implemented in _cpp_parse_expr. diff --git a/libcpp/include/line-map.h b/libcpp/include/line-map.h index 615cb420adf7..72db310bfb75 100644 --- a/libcpp/include/line-map.h +++ b/libcpp/include/line-map.h @@ -1275,677 +1275,6 @@ typedef struct bool sysp; } expanded_location; -class range_label; - -/* A hint to diagnostic_show_locus on how to print a source range within a - rich_location. - - Typically this is SHOW_RANGE_WITH_CARET for the 0th range, and - SHOW_RANGE_WITHOUT_CARET for subsequent ranges, - but the Fortran frontend uses SHOW_RANGE_WITH_CARET repeatedly for - printing things like: - - x = x + y - 1 2 - Error: Shapes for operands at (1) and (2) are not conformable - - where "1" and "2" are notionally carets. */ - -enum range_display_kind -{ - /* Show the pertinent source line(s), the caret, and underline(s). */ - SHOW_RANGE_WITH_CARET, - - /* Show the pertinent source line(s) and underline(s), but don't - show the caret (just an underline). */ - SHOW_RANGE_WITHOUT_CARET, - - /* Just show the source lines; don't show the range itself. - This is for use when displaying some line-insertion fix-it hints (for - showing the user context on the change, for when it doesn't make sense - to highlight the first column on the next line). */ - SHOW_LINES_WITHOUT_RANGE -}; - -/* A location within a rich_location: a caret&range, with - the caret potentially flagged for display, and an optional - label. */ - -struct location_range -{ - location_t m_loc; - - enum range_display_kind m_range_display_kind; - - /* If non-NULL, the label for this range. */ - const range_label *m_label; -}; - -/* A partially-embedded vec for use within rich_location for storing - ranges and fix-it hints. - - Elements [0..NUM_EMBEDDED) are allocated within m_embed, after - that they are within the dynamically-allocated m_extra. - - This allows for static allocation in the common case, whilst - supporting the rarer case of an arbitrary number of elements. - - Dynamic allocation is not performed unless it's needed. */ - -template -class semi_embedded_vec -{ - public: - semi_embedded_vec (); - ~semi_embedded_vec (); - - unsigned int count () const { return m_num; } - T& operator[] (int idx); - const T& operator[] (int idx) const; - - void push (const T&); - void truncate (int len); - - private: - int m_num; - T m_embedded[NUM_EMBEDDED]; - int m_alloc; - T *m_extra; -}; - -/* Constructor for semi_embedded_vec. In particular, no dynamic allocation - is done. */ - -template -semi_embedded_vec::semi_embedded_vec () -: m_num (0), m_alloc (0), m_extra (NULL) -{ -} - -/* semi_embedded_vec's dtor. Release any dynamically-allocated memory. */ - -template -semi_embedded_vec::~semi_embedded_vec () -{ - XDELETEVEC (m_extra); -} - -/* Look up element IDX, mutably. */ - -template -T& -semi_embedded_vec::operator[] (int idx) -{ - linemap_assert (idx < m_num); - if (idx < NUM_EMBEDDED) - return m_embedded[idx]; - else - { - linemap_assert (m_extra != NULL); - return m_extra[idx - NUM_EMBEDDED]; - } -} - -/* Look up element IDX (const). */ - -template -const T& -semi_embedded_vec::operator[] (int idx) const -{ - linemap_assert (idx < m_num); - if (idx < NUM_EMBEDDED) - return m_embedded[idx]; - else - { - linemap_assert (m_extra != NULL); - return m_extra[idx - NUM_EMBEDDED]; - } -} - -/* Append VALUE to the end of the semi_embedded_vec. */ - -template -void -semi_embedded_vec::push (const T& value) -{ - int idx = m_num++; - if (idx < NUM_EMBEDDED) - m_embedded[idx] = value; - else - { - /* Offset "idx" to be an index within m_extra. */ - idx -= NUM_EMBEDDED; - if (NULL == m_extra) - { - linemap_assert (m_alloc == 0); - m_alloc = 16; - m_extra = XNEWVEC (T, m_alloc); - } - else if (idx >= m_alloc) - { - linemap_assert (m_alloc > 0); - m_alloc *= 2; - m_extra = XRESIZEVEC (T, m_extra, m_alloc); - } - linemap_assert (m_extra); - linemap_assert (idx < m_alloc); - m_extra[idx] = value; - } -} - -/* Truncate to length LEN. No deallocation is performed. */ - -template -void -semi_embedded_vec::truncate (int len) -{ - linemap_assert (len <= m_num); - m_num = len; -} - -class fixit_hint; -class diagnostic_path; - -/* A "rich" source code location, for use when printing diagnostics. - A rich_location has one or more carets&ranges, where the carets - are optional. These are referred to as "ranges" from here. - Typically the zeroth range has a caret; other ranges sometimes - have carets. - - The "primary" location of a rich_location is the caret of range 0, - used for determining the line/column when printing diagnostic - text, such as: - - some-file.c:3:1: error: ...etc... - - Additional ranges may be added to help the user identify other - pertinent clauses in a diagnostic. - - Ranges can (optionally) be given labels via class range_label. - - rich_location instances are intended to be allocated on the stack - when generating diagnostics, and to be short-lived. - - Examples of rich locations - -------------------------- - - Example A - ********* - int i = "foo"; - ^ - This "rich" location is simply a single range (range 0), with - caret = start = finish at the given point. - - Example B - ********* - a = (foo && bar) - ~~~~~^~~~~~~ - This rich location has a single range (range 0), with the caret - at the first "&", and the start/finish at the parentheses. - Compare with example C below. - - Example C - ********* - a = (foo && bar) - ~~~ ^~ ~~~ - This rich location has three ranges: - - Range 0 has its caret and start location at the first "&" and - end at the second "&. - - Range 1 has its start and finish at the "f" and "o" of "foo"; - the caret is not flagged for display, but is perhaps at the "f" - of "foo". - - Similarly, range 2 has its start and finish at the "b" and "r" of - "bar"; the caret is not flagged for display, but is perhaps at the - "b" of "bar". - Compare with example B above. - - Example D (Fortran frontend) - **************************** - x = x + y - 1 2 - This rich location has range 0 at "1", and range 1 at "2". - Both are flagged for caret display. Both ranges have start/finish - equal to their caret point. The frontend overrides the diagnostic - context's default caret character for these ranges. - - Example E (range labels) - ************************ - printf ("arg0: %i arg1: %s arg2: %i", - ^~ - | - const char * - 100, 101, 102); - ~~~ - | - int - This rich location has two ranges: - - range 0 is at the "%s" with start = caret = "%" and finish at - the "s". It has a range_label ("const char *"). - - range 1 has start/finish covering the "101" and is not flagged for - caret printing. The caret is at the start of "101", where its - range_label is printed ("int"). - - Fix-it hints - ------------ - - Rich locations can also contain "fix-it hints", giving suggestions - for the user on how to edit their code to fix a problem. These - can be expressed as insertions, replacements, and removals of text. - The edits by default are relative to the zeroth range within the - rich_location, but optionally they can be expressed relative to - other locations (using various overloaded methods of the form - rich_location::add_fixit_*). - - For example: - - Example F: fix-it hint: insert_before - ************************************* - ptr = arr[0]; - ^~~~~~ - & - This rich location has a single range (range 0) covering "arr[0]", - with the caret at the start. The rich location has a single - insertion fix-it hint, inserted before range 0, added via - richloc.add_fixit_insert_before ("&"); - - Example G: multiple fix-it hints: insert_before and insert_after - **************************************************************** - #define FN(ARG0, ARG1, ARG2) fn(ARG0, ARG1, ARG2) - ^~~~ ^~~~ ^~~~ - ( ) ( ) ( ) - This rich location has three ranges, covering "arg0", "arg1", - and "arg2", all with caret-printing enabled. - The rich location has 6 insertion fix-it hints: each arg - has a pair of insertion fix-it hints, suggesting wrapping - them with parentheses: one a '(' inserted before, - the other a ')' inserted after, added via - richloc.add_fixit_insert_before (LOC, "("); - and - richloc.add_fixit_insert_after (LOC, ")"); - - Example H: fix-it hint: removal - ******************************* - struct s {int i};; - ^ - - - This rich location has a single range at the stray trailing - semicolon, along with a single removal fix-it hint, covering - the same range, added via: - richloc.add_fixit_remove (); - - Example I: fix-it hint: replace - ******************************* - c = s.colour; - ^~~~~~ - color - This rich location has a single range (range 0) covering "colour", - and a single "replace" fix-it hint, covering the same range, - added via - richloc.add_fixit_replace ("color"); - - Example J: fix-it hint: line insertion - ************************************** - - 3 | #include - + |+#include - 4 | int the_next_line; - - This rich location has a single range at line 4 column 1, marked - with SHOW_LINES_WITHOUT_RANGE (to avoid printing a meaningless caret - on the "i" of int). It has a insertion fix-it hint of the string - "#include \n". - - Adding a fix-it hint can fail: for example, attempts to insert content - at the transition between two line maps may fail due to there being no - location_t value to express the new location. - - Attempts to add a fix-it hint within a macro expansion will fail. - - There is only limited support for newline characters in fix-it hints: - only hints with newlines which insert an entire new line are permitted, - inserting at the start of a line, and finishing with a newline - (with no interior newline characters). Other attempts to add - fix-it hints containing newline characters will fail. - Similarly, attempts to delete or replace a range *affecting* multiple - lines will fail. - - The rich_location API handles these failures gracefully, so that - diagnostics can attempt to add fix-it hints without each needing - extensive checking. - - Fix-it hints within a rich_location are "atomic": if any hints can't - be applied, none of them will be (tracked by the m_seen_impossible_fixit - flag), and no fix-its hints will be displayed for that rich_location. - This implies that diagnostic messages need to be worded in such a way - that they make sense whether or not the fix-it hints are displayed, - or that richloc.seen_impossible_fixit_p () should be checked before - issuing the diagnostics. */ - -class rich_location -{ - public: - /* Constructors. */ - - /* Constructing from a location. */ - rich_location (line_maps *set, location_t loc, - const range_label *label = NULL); - - /* Destructor. */ - ~rich_location (); - - /* The class manages the memory pointed to by the elements of - the M_FIXIT_HINTS vector and is not meant to be copied or - assigned. */ - rich_location (const rich_location &) = delete; - void operator= (const rich_location &) = delete; - - /* Accessors. */ - location_t get_loc () const { return get_loc (0); } - location_t get_loc (unsigned int idx) const; - - void - add_range (location_t loc, - enum range_display_kind range_display_kind - = SHOW_RANGE_WITHOUT_CARET, - const range_label *label = NULL); - - void - set_range (unsigned int idx, location_t loc, - enum range_display_kind range_display_kind); - - unsigned int get_num_locations () const { return m_ranges.count (); } - - const location_range *get_range (unsigned int idx) const; - location_range *get_range (unsigned int idx); - - expanded_location get_expanded_location (unsigned int idx) const; - - void - override_column (int column); - - /* Fix-it hints. */ - - /* Methods for adding insertion fix-it hints. */ - - /* Suggest inserting NEW_CONTENT immediately before the primary - range's start. */ - void - add_fixit_insert_before (const char *new_content); - - /* Suggest inserting NEW_CONTENT immediately before the start of WHERE. */ - void - add_fixit_insert_before (location_t where, - const char *new_content); - - /* Suggest inserting NEW_CONTENT immediately after the end of the primary - range. */ - void - add_fixit_insert_after (const char *new_content); - - /* Suggest inserting NEW_CONTENT immediately after the end of WHERE. */ - void - add_fixit_insert_after (location_t where, - const char *new_content); - - /* Methods for adding removal fix-it hints. */ - - /* Suggest removing the content covered by range 0. */ - void - add_fixit_remove (); - - /* Suggest removing the content covered between the start and finish - of WHERE. */ - void - add_fixit_remove (location_t where); - - /* Suggest removing the content covered by SRC_RANGE. */ - void - add_fixit_remove (source_range src_range); - - /* Methods for adding "replace" fix-it hints. */ - - /* Suggest replacing the content covered by range 0 with NEW_CONTENT. */ - void - add_fixit_replace (const char *new_content); - - /* Suggest replacing the content between the start and finish of - WHERE with NEW_CONTENT. */ - void - add_fixit_replace (location_t where, - const char *new_content); - - /* Suggest replacing the content covered by SRC_RANGE with - NEW_CONTENT. */ - void - add_fixit_replace (source_range src_range, - const char *new_content); - - unsigned int get_num_fixit_hints () const { return m_fixit_hints.count (); } - fixit_hint *get_fixit_hint (int idx) const { return m_fixit_hints[idx]; } - fixit_hint *get_last_fixit_hint () const; - bool seen_impossible_fixit_p () const { return m_seen_impossible_fixit; } - - /* Set this if the fix-it hints are not suitable to be - automatically applied. - - For example, if you are suggesting more than one - mutually exclusive solution to a problem, then - it doesn't make sense to apply all of the solutions; - manual intervention is required. - - If set, then the fix-it hints in the rich_location will - be printed, but will not be added to generated patches, - or affect the modified version of the file. */ - void fixits_cannot_be_auto_applied () - { - m_fixits_cannot_be_auto_applied = true; - } - - bool fixits_can_be_auto_applied_p () const - { - return !m_fixits_cannot_be_auto_applied; - } - - /* An optional path through the code. */ - const diagnostic_path *get_path () const { return m_path; } - void set_path (const diagnostic_path *path) { m_path = path; } - - /* A flag for hinting that the diagnostic involves character encoding - issues, and thus that it will be helpful to the user if we show some - representation of how the characters in the pertinent source lines - are encoded. - The default is false (i.e. do not escape). - When set to true, non-ASCII bytes in the pertinent source lines will - be escaped in a manner controlled by the user-supplied option - -fdiagnostics-escape-format=, so that the user can better understand - what's going on with the encoding in their source file. */ - bool escape_on_output_p () const { return m_escape_on_output; } - void set_escape_on_output (bool flag) { m_escape_on_output = flag; } - - const line_maps *get_line_table () const { return m_line_table; } - -private: - bool reject_impossible_fixit (location_t where); - void stop_supporting_fixits (); - void maybe_add_fixit (location_t start, - location_t next_loc, - const char *new_content); - -public: - static const int STATICALLY_ALLOCATED_RANGES = 3; - -protected: - line_maps * const m_line_table; - semi_embedded_vec m_ranges; - - int m_column_override; - - mutable bool m_have_expanded_location; - bool m_seen_impossible_fixit; - bool m_fixits_cannot_be_auto_applied; - bool m_escape_on_output; - - mutable expanded_location m_expanded_location; - - static const int MAX_STATIC_FIXIT_HINTS = 2; - semi_embedded_vec m_fixit_hints; - - const diagnostic_path *m_path; -}; - -/* A struct for the result of range_label::get_text: a NUL-terminated buffer - of localized text, and a flag to determine if the caller should "free" the - buffer. */ - -class label_text -{ -public: - label_text () - : m_buffer (NULL), m_owned (false) - {} - - ~label_text () - { - if (m_owned) - free (m_buffer); - } - - /* Move ctor. */ - label_text (label_text &&other) - : m_buffer (other.m_buffer), m_owned (other.m_owned) - { - other.release (); - } - - /* Move assignment. */ - label_text & operator= (label_text &&other) - { - if (m_owned) - free (m_buffer); - m_buffer = other.m_buffer; - m_owned = other.m_owned; - other.release (); - return *this; - } - - /* Delete the copy ctor and copy-assignment operator. */ - label_text (const label_text &) = delete; - label_text & operator= (const label_text &) = delete; - - /* Create a label_text instance that borrows BUFFER from a - longer-lived owner. */ - static label_text borrow (const char *buffer) - { - return label_text (const_cast (buffer), false); - } - - /* Create a label_text instance that takes ownership of BUFFER. */ - static label_text take (char *buffer) - { - return label_text (buffer, true); - } - - void release () - { - m_buffer = NULL; - m_owned = false; - } - - const char *get () const - { - return m_buffer; - } - - bool is_owner () const - { - return m_owned; - } - -private: - char *m_buffer; - bool m_owned; - - label_text (char *buffer, bool owned) - : m_buffer (buffer), m_owned (owned) - {} -}; - -/* Abstract base class for labelling a range within a rich_location - (e.g. for labelling expressions with their type). - - Generating the text could require non-trivial work, so this work - is delayed (via the "get_text" virtual function) until the diagnostic - printing code "knows" it needs it, thus avoiding doing it e.g. for - warnings that are filtered by command-line flags. This virtual - function also isolates libcpp and the diagnostics subsystem from - the front-end and middle-end-specific code for generating the text - for the labels. - - Like the rich_location instances they annotate, range_label instances - are intended to be allocated on the stack when generating diagnostics, - and to be short-lived. */ - -class range_label -{ - public: - virtual ~range_label () {} - - /* Get localized text for the label. - The RANGE_IDX is provided, allowing for range_label instances to be - shared by multiple ranges if need be (the "flyweight" design pattern). */ - virtual label_text get_text (unsigned range_idx) const = 0; -}; - -/* A fix-it hint: a suggested insertion, replacement, or deletion of text. - We handle these three types of edit with one class, by representing - them as replacement of a half-open range: - [start, next_loc) - Insertions have start == next_loc: "replace" the empty string at the - start location with the new string. - Deletions are replacement with the empty string. - - There is only limited support for newline characters in fix-it hints - as noted above in the comment for class rich_location. - A fixit_hint instance can have at most one newline character; if - present, the newline character must be the final character of - the content (preventing e.g. fix-its that split a pre-existing line). */ - -class fixit_hint -{ - public: - fixit_hint (location_t start, - location_t next_loc, - const char *new_content); - ~fixit_hint () { free (m_bytes); } - - bool affects_line_p (const line_maps *set, - const char *file, - int line) const; - location_t get_start_loc () const { return m_start; } - location_t get_next_loc () const { return m_next_loc; } - bool maybe_append (location_t start, - location_t next_loc, - const char *new_content); - - const char *get_string () const { return m_bytes; } - size_t get_length () const { return m_len; } - - bool insertion_p () const { return m_start == m_next_loc; } - - bool ends_with_newline_p () const; - - private: - /* We don't use source_range here since, unlike most places, - this is a half-open/half-closed range: - [start, next_loc) - so that we can support insertion via start == next_loc. */ - location_t m_start; - location_t m_next_loc; - char *m_bytes; - size_t m_len; -}; - - /* This is enum is used by the function linemap_resolve_location below. The meaning of the values is explained in the comment of that function. */ diff --git a/libcpp/include/rich-location.h b/libcpp/include/rich-location.h new file mode 100644 index 000000000000..878c71c8bbe8 --- /dev/null +++ b/libcpp/include/rich-location.h @@ -0,0 +1,695 @@ +/* Bundles of location information used when printing diagnostics. + Copyright (C) 2015-2023 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 3, or (at your option) any +later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; see the file COPYING3. If not see +. + + In other words, you are welcome to use, share and improve this program. + You are forbidden to forbid anyone else to use, share and improve + what you give them. Help stamp out software-hoarding! */ + +#ifndef LIBCPP_RICH_LOCATION_H +#define LIBCPP_RICH_LOCATION_H + +class range_label; + +/* A hint to diagnostic_show_locus on how to print a source range within a + rich_location. + + Typically this is SHOW_RANGE_WITH_CARET for the 0th range, and + SHOW_RANGE_WITHOUT_CARET for subsequent ranges, + but the Fortran frontend uses SHOW_RANGE_WITH_CARET repeatedly for + printing things like: + + x = x + y + 1 2 + Error: Shapes for operands at (1) and (2) are not conformable + + where "1" and "2" are notionally carets. */ + +enum range_display_kind +{ + /* Show the pertinent source line(s), the caret, and underline(s). */ + SHOW_RANGE_WITH_CARET, + + /* Show the pertinent source line(s) and underline(s), but don't + show the caret (just an underline). */ + SHOW_RANGE_WITHOUT_CARET, + + /* Just show the source lines; don't show the range itself. + This is for use when displaying some line-insertion fix-it hints (for + showing the user context on the change, for when it doesn't make sense + to highlight the first column on the next line). */ + SHOW_LINES_WITHOUT_RANGE +}; + +/* A location within a rich_location: a caret&range, with + the caret potentially flagged for display, and an optional + label. */ + +struct location_range +{ + location_t m_loc; + + enum range_display_kind m_range_display_kind; + + /* If non-NULL, the label for this range. */ + const range_label *m_label; +}; + +/* A partially-embedded vec for use within rich_location for storing + ranges and fix-it hints. + + Elements [0..NUM_EMBEDDED) are allocated within m_embed, after + that they are within the dynamically-allocated m_extra. + + This allows for static allocation in the common case, whilst + supporting the rarer case of an arbitrary number of elements. + + Dynamic allocation is not performed unless it's needed. */ + +template +class semi_embedded_vec +{ + public: + semi_embedded_vec (); + ~semi_embedded_vec (); + + unsigned int count () const { return m_num; } + T& operator[] (int idx); + const T& operator[] (int idx) const; + + void push (const T&); + void truncate (int len); + + private: + int m_num; + T m_embedded[NUM_EMBEDDED]; + int m_alloc; + T *m_extra; +}; + +/* Constructor for semi_embedded_vec. In particular, no dynamic allocation + is done. */ + +template +semi_embedded_vec::semi_embedded_vec () +: m_num (0), m_alloc (0), m_extra (NULL) +{ +} + +/* semi_embedded_vec's dtor. Release any dynamically-allocated memory. */ + +template +semi_embedded_vec::~semi_embedded_vec () +{ + XDELETEVEC (m_extra); +} + +/* Look up element IDX, mutably. */ + +template +T& +semi_embedded_vec::operator[] (int idx) +{ + linemap_assert (idx < m_num); + if (idx < NUM_EMBEDDED) + return m_embedded[idx]; + else + { + linemap_assert (m_extra != NULL); + return m_extra[idx - NUM_EMBEDDED]; + } +} + +/* Look up element IDX (const). */ + +template +const T& +semi_embedded_vec::operator[] (int idx) const +{ + linemap_assert (idx < m_num); + if (idx < NUM_EMBEDDED) + return m_embedded[idx]; + else + { + linemap_assert (m_extra != NULL); + return m_extra[idx - NUM_EMBEDDED]; + } +} + +/* Append VALUE to the end of the semi_embedded_vec. */ + +template +void +semi_embedded_vec::push (const T& value) +{ + int idx = m_num++; + if (idx < NUM_EMBEDDED) + m_embedded[idx] = value; + else + { + /* Offset "idx" to be an index within m_extra. */ + idx -= NUM_EMBEDDED; + if (NULL == m_extra) + { + linemap_assert (m_alloc == 0); + m_alloc = 16; + m_extra = XNEWVEC (T, m_alloc); + } + else if (idx >= m_alloc) + { + linemap_assert (m_alloc > 0); + m_alloc *= 2; + m_extra = XRESIZEVEC (T, m_extra, m_alloc); + } + linemap_assert (m_extra); + linemap_assert (idx < m_alloc); + m_extra[idx] = value; + } +} + +/* Truncate to length LEN. No deallocation is performed. */ + +template +void +semi_embedded_vec::truncate (int len) +{ + linemap_assert (len <= m_num); + m_num = len; +} + +class fixit_hint; +class diagnostic_path; + +/* A "rich" source code location, for use when printing diagnostics. + A rich_location has one or more carets&ranges, where the carets + are optional. These are referred to as "ranges" from here. + Typically the zeroth range has a caret; other ranges sometimes + have carets. + + The "primary" location of a rich_location is the caret of range 0, + used for determining the line/column when printing diagnostic + text, such as: + + some-file.c:3:1: error: ...etc... + + Additional ranges may be added to help the user identify other + pertinent clauses in a diagnostic. + + Ranges can (optionally) be given labels via class range_label. + + rich_location instances are intended to be allocated on the stack + when generating diagnostics, and to be short-lived. + + Examples of rich locations + -------------------------- + + Example A + ********* + int i = "foo"; + ^ + This "rich" location is simply a single range (range 0), with + caret = start = finish at the given point. + + Example B + ********* + a = (foo && bar) + ~~~~~^~~~~~~ + This rich location has a single range (range 0), with the caret + at the first "&", and the start/finish at the parentheses. + Compare with example C below. + + Example C + ********* + a = (foo && bar) + ~~~ ^~ ~~~ + This rich location has three ranges: + - Range 0 has its caret and start location at the first "&" and + end at the second "&. + - Range 1 has its start and finish at the "f" and "o" of "foo"; + the caret is not flagged for display, but is perhaps at the "f" + of "foo". + - Similarly, range 2 has its start and finish at the "b" and "r" of + "bar"; the caret is not flagged for display, but is perhaps at the + "b" of "bar". + Compare with example B above. + + Example D (Fortran frontend) + **************************** + x = x + y + 1 2 + This rich location has range 0 at "1", and range 1 at "2". + Both are flagged for caret display. Both ranges have start/finish + equal to their caret point. The frontend overrides the diagnostic + context's default caret character for these ranges. + + Example E (range labels) + ************************ + printf ("arg0: %i arg1: %s arg2: %i", + ^~ + | + const char * + 100, 101, 102); + ~~~ + | + int + This rich location has two ranges: + - range 0 is at the "%s" with start = caret = "%" and finish at + the "s". It has a range_label ("const char *"). + - range 1 has start/finish covering the "101" and is not flagged for + caret printing. The caret is at the start of "101", where its + range_label is printed ("int"). + + Fix-it hints + ------------ + + Rich locations can also contain "fix-it hints", giving suggestions + for the user on how to edit their code to fix a problem. These + can be expressed as insertions, replacements, and removals of text. + The edits by default are relative to the zeroth range within the + rich_location, but optionally they can be expressed relative to + other locations (using various overloaded methods of the form + rich_location::add_fixit_*). + + For example: + + Example F: fix-it hint: insert_before + ************************************* + ptr = arr[0]; + ^~~~~~ + & + This rich location has a single range (range 0) covering "arr[0]", + with the caret at the start. The rich location has a single + insertion fix-it hint, inserted before range 0, added via + richloc.add_fixit_insert_before ("&"); + + Example G: multiple fix-it hints: insert_before and insert_after + **************************************************************** + #define FN(ARG0, ARG1, ARG2) fn(ARG0, ARG1, ARG2) + ^~~~ ^~~~ ^~~~ + ( ) ( ) ( ) + This rich location has three ranges, covering "arg0", "arg1", + and "arg2", all with caret-printing enabled. + The rich location has 6 insertion fix-it hints: each arg + has a pair of insertion fix-it hints, suggesting wrapping + them with parentheses: one a '(' inserted before, + the other a ')' inserted after, added via + richloc.add_fixit_insert_before (LOC, "("); + and + richloc.add_fixit_insert_after (LOC, ")"); + + Example H: fix-it hint: removal + ******************************* + struct s {int i};; + ^ + - + This rich location has a single range at the stray trailing + semicolon, along with a single removal fix-it hint, covering + the same range, added via: + richloc.add_fixit_remove (); + + Example I: fix-it hint: replace + ******************************* + c = s.colour; + ^~~~~~ + color + This rich location has a single range (range 0) covering "colour", + and a single "replace" fix-it hint, covering the same range, + added via + richloc.add_fixit_replace ("color"); + + Example J: fix-it hint: line insertion + ************************************** + + 3 | #include + + |+#include + 4 | int the_next_line; + + This rich location has a single range at line 4 column 1, marked + with SHOW_LINES_WITHOUT_RANGE (to avoid printing a meaningless caret + on the "i" of int). It has a insertion fix-it hint of the string + "#include \n". + + Adding a fix-it hint can fail: for example, attempts to insert content + at the transition between two line maps may fail due to there being no + location_t value to express the new location. + + Attempts to add a fix-it hint within a macro expansion will fail. + + There is only limited support for newline characters in fix-it hints: + only hints with newlines which insert an entire new line are permitted, + inserting at the start of a line, and finishing with a newline + (with no interior newline characters). Other attempts to add + fix-it hints containing newline characters will fail. + Similarly, attempts to delete or replace a range *affecting* multiple + lines will fail. + + The rich_location API handles these failures gracefully, so that + diagnostics can attempt to add fix-it hints without each needing + extensive checking. + + Fix-it hints within a rich_location are "atomic": if any hints can't + be applied, none of them will be (tracked by the m_seen_impossible_fixit + flag), and no fix-its hints will be displayed for that rich_location. + This implies that diagnostic messages need to be worded in such a way + that they make sense whether or not the fix-it hints are displayed, + or that richloc.seen_impossible_fixit_p () should be checked before + issuing the diagnostics. */ + +class rich_location +{ + public: + /* Constructors. */ + + /* Constructing from a location. */ + rich_location (line_maps *set, location_t loc, + const range_label *label = NULL); + + /* Destructor. */ + ~rich_location (); + + /* The class manages the memory pointed to by the elements of + the M_FIXIT_HINTS vector and is not meant to be copied or + assigned. */ + rich_location (const rich_location &) = delete; + void operator= (const rich_location &) = delete; + + /* Accessors. */ + location_t get_loc () const { return get_loc (0); } + location_t get_loc (unsigned int idx) const; + + void + add_range (location_t loc, + enum range_display_kind range_display_kind + = SHOW_RANGE_WITHOUT_CARET, + const range_label *label = NULL); + + void + set_range (unsigned int idx, location_t loc, + enum range_display_kind range_display_kind); + + unsigned int get_num_locations () const { return m_ranges.count (); } + + const location_range *get_range (unsigned int idx) const; + location_range *get_range (unsigned int idx); + + expanded_location get_expanded_location (unsigned int idx) const; + + void + override_column (int column); + + /* Fix-it hints. */ + + /* Methods for adding insertion fix-it hints. */ + + /* Suggest inserting NEW_CONTENT immediately before the primary + range's start. */ + void + add_fixit_insert_before (const char *new_content); + + /* Suggest inserting NEW_CONTENT immediately before the start of WHERE. */ + void + add_fixit_insert_before (location_t where, + const char *new_content); + + /* Suggest inserting NEW_CONTENT immediately after the end of the primary + range. */ + void + add_fixit_insert_after (const char *new_content); + + /* Suggest inserting NEW_CONTENT immediately after the end of WHERE. */ + void + add_fixit_insert_after (location_t where, + const char *new_content); + + /* Methods for adding removal fix-it hints. */ + + /* Suggest removing the content covered by range 0. */ + void + add_fixit_remove (); + + /* Suggest removing the content covered between the start and finish + of WHERE. */ + void + add_fixit_remove (location_t where); + + /* Suggest removing the content covered by SRC_RANGE. */ + void + add_fixit_remove (source_range src_range); + + /* Methods for adding "replace" fix-it hints. */ + + /* Suggest replacing the content covered by range 0 with NEW_CONTENT. */ + void + add_fixit_replace (const char *new_content); + + /* Suggest replacing the content between the start and finish of + WHERE with NEW_CONTENT. */ + void + add_fixit_replace (location_t where, + const char *new_content); + + /* Suggest replacing the content covered by SRC_RANGE with + NEW_CONTENT. */ + void + add_fixit_replace (source_range src_range, + const char *new_content); + + unsigned int get_num_fixit_hints () const { return m_fixit_hints.count (); } + fixit_hint *get_fixit_hint (int idx) const { return m_fixit_hints[idx]; } + fixit_hint *get_last_fixit_hint () const; + bool seen_impossible_fixit_p () const { return m_seen_impossible_fixit; } + + /* Set this if the fix-it hints are not suitable to be + automatically applied. + + For example, if you are suggesting more than one + mutually exclusive solution to a problem, then + it doesn't make sense to apply all of the solutions; + manual intervention is required. + + If set, then the fix-it hints in the rich_location will + be printed, but will not be added to generated patches, + or affect the modified version of the file. */ + void fixits_cannot_be_auto_applied () + { + m_fixits_cannot_be_auto_applied = true; + } + + bool fixits_can_be_auto_applied_p () const + { + return !m_fixits_cannot_be_auto_applied; + } + + /* An optional path through the code. */ + const diagnostic_path *get_path () const { return m_path; } + void set_path (const diagnostic_path *path) { m_path = path; } + + /* A flag for hinting that the diagnostic involves character encoding + issues, and thus that it will be helpful to the user if we show some + representation of how the characters in the pertinent source lines + are encoded. + The default is false (i.e. do not escape). + When set to true, non-ASCII bytes in the pertinent source lines will + be escaped in a manner controlled by the user-supplied option + -fdiagnostics-escape-format=, so that the user can better understand + what's going on with the encoding in their source file. */ + bool escape_on_output_p () const { return m_escape_on_output; } + void set_escape_on_output (bool flag) { m_escape_on_output = flag; } + + const line_maps *get_line_table () const { return m_line_table; } + +private: + bool reject_impossible_fixit (location_t where); + void stop_supporting_fixits (); + void maybe_add_fixit (location_t start, + location_t next_loc, + const char *new_content); + +public: + static const int STATICALLY_ALLOCATED_RANGES = 3; + +protected: + line_maps * const m_line_table; + semi_embedded_vec m_ranges; + + int m_column_override; + + mutable bool m_have_expanded_location; + bool m_seen_impossible_fixit; + bool m_fixits_cannot_be_auto_applied; + bool m_escape_on_output; + + mutable expanded_location m_expanded_location; + + static const int MAX_STATIC_FIXIT_HINTS = 2; + semi_embedded_vec m_fixit_hints; + + const diagnostic_path *m_path; +}; + +/* A struct for the result of range_label::get_text: a NUL-terminated buffer + of localized text, and a flag to determine if the caller should "free" the + buffer. */ + +class label_text +{ +public: + label_text () + : m_buffer (NULL), m_owned (false) + {} + + ~label_text () + { + if (m_owned) + free (m_buffer); + } + + /* Move ctor. */ + label_text (label_text &&other) + : m_buffer (other.m_buffer), m_owned (other.m_owned) + { + other.release (); + } + + /* Move assignment. */ + label_text & operator= (label_text &&other) + { + if (m_owned) + free (m_buffer); + m_buffer = other.m_buffer; + m_owned = other.m_owned; + other.release (); + return *this; + } + + /* Delete the copy ctor and copy-assignment operator. */ + label_text (const label_text &) = delete; + label_text & operator= (const label_text &) = delete; + + /* Create a label_text instance that borrows BUFFER from a + longer-lived owner. */ + static label_text borrow (const char *buffer) + { + return label_text (const_cast (buffer), false); + } + + /* Create a label_text instance that takes ownership of BUFFER. */ + static label_text take (char *buffer) + { + return label_text (buffer, true); + } + + void release () + { + m_buffer = NULL; + m_owned = false; + } + + const char *get () const + { + return m_buffer; + } + + bool is_owner () const + { + return m_owned; + } + +private: + char *m_buffer; + bool m_owned; + + label_text (char *buffer, bool owned) + : m_buffer (buffer), m_owned (owned) + {} +}; + +/* Abstract base class for labelling a range within a rich_location + (e.g. for labelling expressions with their type). + + Generating the text could require non-trivial work, so this work + is delayed (via the "get_text" virtual function) until the diagnostic + printing code "knows" it needs it, thus avoiding doing it e.g. for + warnings that are filtered by command-line flags. This virtual + function also isolates libcpp and the diagnostics subsystem from + the front-end and middle-end-specific code for generating the text + for the labels. + + Like the rich_location instances they annotate, range_label instances + are intended to be allocated on the stack when generating diagnostics, + and to be short-lived. */ + +class range_label +{ + public: + virtual ~range_label () {} + + /* Get localized text for the label. + The RANGE_IDX is provided, allowing for range_label instances to be + shared by multiple ranges if need be (the "flyweight" design pattern). */ + virtual label_text get_text (unsigned range_idx) const = 0; +}; + +/* A fix-it hint: a suggested insertion, replacement, or deletion of text. + We handle these three types of edit with one class, by representing + them as replacement of a half-open range: + [start, next_loc) + Insertions have start == next_loc: "replace" the empty string at the + start location with the new string. + Deletions are replacement with the empty string. + + There is only limited support for newline characters in fix-it hints + as noted above in the comment for class rich_location. + A fixit_hint instance can have at most one newline character; if + present, the newline character must be the final character of + the content (preventing e.g. fix-its that split a pre-existing line). */ + +class fixit_hint +{ + public: + fixit_hint (location_t start, + location_t next_loc, + const char *new_content); + ~fixit_hint () { free (m_bytes); } + + bool affects_line_p (const line_maps *set, + const char *file, + int line) const; + location_t get_start_loc () const { return m_start; } + location_t get_next_loc () const { return m_next_loc; } + bool maybe_append (location_t start, + location_t next_loc, + const char *new_content); + + const char *get_string () const { return m_bytes; } + size_t get_length () const { return m_len; } + + bool insertion_p () const { return m_start == m_next_loc; } + + bool ends_with_newline_p () const; + + private: + /* We don't use source_range here since, unlike most places, + this is a half-open/half-closed range: + [start, next_loc) + so that we can support insertion via start == next_loc. */ + location_t m_start; + location_t m_next_loc; + char *m_bytes; + size_t m_len; +}; + +#endif /* !LIBCPP_RICH_LOCATION_H */ diff --git a/libcpp/internal.h b/libcpp/internal.h index 6a10e9de43e7..134fc33d40c2 100644 --- a/libcpp/internal.h +++ b/libcpp/internal.h @@ -24,6 +24,7 @@ along with this program; see the file COPYING3. If not see #include "symtab.h" #include "cpplib.h" +#include "rich-location.h" #if HAVE_ICONV #include